Merge git://git.tuxdriver.com/git/netdev-jwl
This commit is contained in:
commit
3133c5e896
|
@ -1604,35 +1604,27 @@ static int bond_sethwaddr(struct net_device *bond_dev, struct net_device *slave_
|
||||||
(NETIF_F_SG|NETIF_F_IP_CSUM|NETIF_F_NO_CSUM|NETIF_F_HW_CSUM)
|
(NETIF_F_SG|NETIF_F_IP_CSUM|NETIF_F_NO_CSUM|NETIF_F_HW_CSUM)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Compute the features available to the bonding device by
|
* Compute the common dev->feature set available to all slaves. Some
|
||||||
* intersection of all of the slave devices' BOND_INTERSECT_FEATURES.
|
* feature bits are managed elsewhere, so preserve feature bits set on
|
||||||
* Call this after attaching or detaching a slave to update the
|
* master device that are not part of the examined set.
|
||||||
* bond's features.
|
|
||||||
*/
|
*/
|
||||||
static int bond_compute_features(struct bonding *bond)
|
static int bond_compute_features(struct bonding *bond)
|
||||||
{
|
{
|
||||||
int i;
|
unsigned long features = BOND_INTERSECT_FEATURES;
|
||||||
struct slave *slave;
|
struct slave *slave;
|
||||||
struct net_device *bond_dev = bond->dev;
|
struct net_device *bond_dev = bond->dev;
|
||||||
int features = bond->bond_features;
|
int i;
|
||||||
|
|
||||||
bond_for_each_slave(bond, slave, i) {
|
bond_for_each_slave(bond, slave, i)
|
||||||
struct net_device * slave_dev = slave->dev;
|
features &= (slave->dev->features & BOND_INTERSECT_FEATURES);
|
||||||
if (i == 0) {
|
|
||||||
features |= BOND_INTERSECT_FEATURES;
|
|
||||||
}
|
|
||||||
features &=
|
|
||||||
~(~slave_dev->features & BOND_INTERSECT_FEATURES);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* turn off NETIF_F_SG if we need a csum and h/w can't do it */
|
|
||||||
if ((features & NETIF_F_SG) &&
|
if ((features & NETIF_F_SG) &&
|
||||||
!(features & (NETIF_F_IP_CSUM |
|
!(features & (NETIF_F_IP_CSUM |
|
||||||
NETIF_F_NO_CSUM |
|
NETIF_F_NO_CSUM |
|
||||||
NETIF_F_HW_CSUM))) {
|
NETIF_F_HW_CSUM)))
|
||||||
features &= ~NETIF_F_SG;
|
features &= ~NETIF_F_SG;
|
||||||
}
|
|
||||||
|
|
||||||
|
features |= (bond_dev->features & ~BOND_INTERSECT_FEATURES);
|
||||||
bond_dev->features = features;
|
bond_dev->features = features;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -4561,8 +4553,6 @@ static int __init bond_init(struct net_device *bond_dev, struct bond_params *par
|
||||||
NETIF_F_HW_VLAN_RX |
|
NETIF_F_HW_VLAN_RX |
|
||||||
NETIF_F_HW_VLAN_FILTER);
|
NETIF_F_HW_VLAN_FILTER);
|
||||||
|
|
||||||
bond->bond_features = bond_dev->features;
|
|
||||||
|
|
||||||
#ifdef CONFIG_PROC_FS
|
#ifdef CONFIG_PROC_FS
|
||||||
bond_create_proc_entry(bond);
|
bond_create_proc_entry(bond);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -40,8 +40,8 @@
|
||||||
#include "bond_3ad.h"
|
#include "bond_3ad.h"
|
||||||
#include "bond_alb.h"
|
#include "bond_alb.h"
|
||||||
|
|
||||||
#define DRV_VERSION "2.6.4"
|
#define DRV_VERSION "2.6.5"
|
||||||
#define DRV_RELDATE "September 26, 2005"
|
#define DRV_RELDATE "November 4, 2005"
|
||||||
#define DRV_NAME "bonding"
|
#define DRV_NAME "bonding"
|
||||||
#define DRV_DESCRIPTION "Ethernet Channel Bonding Driver"
|
#define DRV_DESCRIPTION "Ethernet Channel Bonding Driver"
|
||||||
|
|
||||||
|
@ -211,9 +211,6 @@ struct bonding {
|
||||||
struct bond_params params;
|
struct bond_params params;
|
||||||
struct list_head vlan_list;
|
struct list_head vlan_list;
|
||||||
struct vlan_group *vlgrp;
|
struct vlan_group *vlgrp;
|
||||||
/* the features the bonding device supports, independently
|
|
||||||
* of any slaves */
|
|
||||||
int bond_features;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1478,7 +1478,7 @@ static inline int e100_rx_alloc_skb(struct nic *nic, struct rx *rx)
|
||||||
|
|
||||||
if(pci_dma_mapping_error(rx->dma_addr)) {
|
if(pci_dma_mapping_error(rx->dma_addr)) {
|
||||||
dev_kfree_skb_any(rx->skb);
|
dev_kfree_skb_any(rx->skb);
|
||||||
rx->skb = 0;
|
rx->skb = NULL;
|
||||||
rx->dma_addr = 0;
|
rx->dma_addr = 0;
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
@ -1764,7 +1764,7 @@ static int e100_up(struct nic *nic)
|
||||||
if((err = e100_hw_init(nic)))
|
if((err = e100_hw_init(nic)))
|
||||||
goto err_clean_cbs;
|
goto err_clean_cbs;
|
||||||
e100_set_multicast_list(nic->netdev);
|
e100_set_multicast_list(nic->netdev);
|
||||||
e100_start_receiver(nic, 0);
|
e100_start_receiver(nic, NULL);
|
||||||
mod_timer(&nic->watchdog, jiffies);
|
mod_timer(&nic->watchdog, jiffies);
|
||||||
if((err = request_irq(nic->pdev->irq, e100_intr, SA_SHIRQ,
|
if((err = request_irq(nic->pdev->irq, e100_intr, SA_SHIRQ,
|
||||||
nic->netdev->name, nic->netdev)))
|
nic->netdev->name, nic->netdev)))
|
||||||
|
@ -1844,7 +1844,7 @@ static int e100_loopback_test(struct nic *nic, enum loopback loopback_mode)
|
||||||
mdio_write(nic->netdev, nic->mii.phy_id, MII_BMCR,
|
mdio_write(nic->netdev, nic->mii.phy_id, MII_BMCR,
|
||||||
BMCR_LOOPBACK);
|
BMCR_LOOPBACK);
|
||||||
|
|
||||||
e100_start_receiver(nic, 0);
|
e100_start_receiver(nic, NULL);
|
||||||
|
|
||||||
if(!(skb = dev_alloc_skb(ETH_DATA_LEN))) {
|
if(!(skb = dev_alloc_skb(ETH_DATA_LEN))) {
|
||||||
err = -ENOMEM;
|
err = -ENOMEM;
|
||||||
|
|
|
@ -110,7 +110,6 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/ip.h> /* for iph */
|
#include <linux/ip.h> /* for iph */
|
||||||
#include <linux/in.h> /* for IPPROTO_... */
|
#include <linux/in.h> /* for IPPROTO_... */
|
||||||
#include <linux/eeprom.h>
|
|
||||||
#include <linux/compiler.h>
|
#include <linux/compiler.h>
|
||||||
#include <linux/prefetch.h>
|
#include <linux/prefetch.h>
|
||||||
#include <linux/ethtool.h>
|
#include <linux/ethtool.h>
|
||||||
|
@ -445,7 +444,6 @@ struct ns83820 {
|
||||||
|
|
||||||
u32 MEAR_cache;
|
u32 MEAR_cache;
|
||||||
u32 IMR_cache;
|
u32 IMR_cache;
|
||||||
struct eeprom ee;
|
|
||||||
|
|
||||||
unsigned linkstate;
|
unsigned linkstate;
|
||||||
|
|
||||||
|
@ -1558,15 +1556,13 @@ static void ns83820_getmac(struct ns83820 *dev, u8 *mac)
|
||||||
unsigned i;
|
unsigned i;
|
||||||
for (i=0; i<3; i++) {
|
for (i=0; i<3; i++) {
|
||||||
u32 data;
|
u32 data;
|
||||||
#if 0 /* I've left this in as an example of how to use eeprom.h */
|
|
||||||
data = eeprom_readw(&dev->ee, 0xa + 2 - i);
|
|
||||||
#else
|
|
||||||
/* Read from the perfect match memory: this is loaded by
|
/* Read from the perfect match memory: this is loaded by
|
||||||
* the chip from the EEPROM via the EELOAD self test.
|
* the chip from the EEPROM via the EELOAD self test.
|
||||||
*/
|
*/
|
||||||
writel(i*2, dev->base + RFCR);
|
writel(i*2, dev->base + RFCR);
|
||||||
data = readl(dev->base + RFDR);
|
data = readl(dev->base + RFDR);
|
||||||
#endif
|
|
||||||
*mac++ = data;
|
*mac++ = data;
|
||||||
*mac++ = data >> 8;
|
*mac++ = data >> 8;
|
||||||
}
|
}
|
||||||
|
@ -1851,8 +1847,6 @@ static int __devinit ns83820_init_one(struct pci_dev *pci_dev, const struct pci_
|
||||||
spin_lock_init(&dev->misc_lock);
|
spin_lock_init(&dev->misc_lock);
|
||||||
dev->pci_dev = pci_dev;
|
dev->pci_dev = pci_dev;
|
||||||
|
|
||||||
dev->ee.cache = &dev->MEAR_cache;
|
|
||||||
dev->ee.lock = &dev->misc_lock;
|
|
||||||
SET_MODULE_OWNER(ndev);
|
SET_MODULE_OWNER(ndev);
|
||||||
SET_NETDEV_DEV(ndev, &pci_dev->dev);
|
SET_NETDEV_DEV(ndev, &pci_dev->dev);
|
||||||
|
|
||||||
|
@ -1887,9 +1881,6 @@ static int __devinit ns83820_init_one(struct pci_dev *pci_dev, const struct pci_
|
||||||
|
|
||||||
dev->IMR_cache = 0;
|
dev->IMR_cache = 0;
|
||||||
|
|
||||||
setup_ee_mem_bitbanger(&dev->ee, dev->base + MEAR, 3, 2, 1, 0,
|
|
||||||
0);
|
|
||||||
|
|
||||||
err = request_irq(pci_dev->irq, ns83820_irq, SA_SHIRQ,
|
err = request_irq(pci_dev->irq, ns83820_irq, SA_SHIRQ,
|
||||||
DRV_NAME, ndev);
|
DRV_NAME, ndev);
|
||||||
if (err) {
|
if (err) {
|
||||||
|
|
|
@ -1532,7 +1532,7 @@ static int init_nic(struct s2io_nic *nic)
|
||||||
#define LINK_UP_DOWN_INTERRUPT 1
|
#define LINK_UP_DOWN_INTERRUPT 1
|
||||||
#define MAC_RMAC_ERR_TIMER 2
|
#define MAC_RMAC_ERR_TIMER 2
|
||||||
|
|
||||||
int s2io_link_fault_indication(nic_t *nic)
|
static int s2io_link_fault_indication(nic_t *nic)
|
||||||
{
|
{
|
||||||
if (nic->intr_type != INTA)
|
if (nic->intr_type != INTA)
|
||||||
return MAC_RMAC_ERR_TIMER;
|
return MAC_RMAC_ERR_TIMER;
|
||||||
|
@ -1864,7 +1864,7 @@ static int verify_xena_quiescence(nic_t *sp, u64 val64, int flag)
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void fix_mac_address(nic_t * sp)
|
static void fix_mac_address(nic_t * sp)
|
||||||
{
|
{
|
||||||
XENA_dev_config_t __iomem *bar0 = sp->bar0;
|
XENA_dev_config_t __iomem *bar0 = sp->bar0;
|
||||||
u64 val64;
|
u64 val64;
|
||||||
|
@ -2160,7 +2160,7 @@ int fill_rxd_3buf(nic_t *nic, RxD_t *rxdp, struct sk_buff *skb)
|
||||||
* SUCCESS on success or an appropriate -ve value on failure.
|
* SUCCESS on success or an appropriate -ve value on failure.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int fill_rx_buffers(struct s2io_nic *nic, int ring_no)
|
static int fill_rx_buffers(struct s2io_nic *nic, int ring_no)
|
||||||
{
|
{
|
||||||
struct net_device *dev = nic->dev;
|
struct net_device *dev = nic->dev;
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
|
@ -2831,7 +2831,7 @@ static void alarm_intr_handler(struct s2io_nic *nic)
|
||||||
* SUCCESS on success and FAILURE on failure.
|
* SUCCESS on success and FAILURE on failure.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int wait_for_cmd_complete(nic_t * sp)
|
static int wait_for_cmd_complete(nic_t * sp)
|
||||||
{
|
{
|
||||||
XENA_dev_config_t __iomem *bar0 = sp->bar0;
|
XENA_dev_config_t __iomem *bar0 = sp->bar0;
|
||||||
int ret = FAILURE, cnt = 0;
|
int ret = FAILURE, cnt = 0;
|
||||||
|
@ -3077,7 +3077,7 @@ int s2io_set_swapper(nic_t * sp)
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int wait_for_msix_trans(nic_t *nic, int i)
|
static int wait_for_msix_trans(nic_t *nic, int i)
|
||||||
{
|
{
|
||||||
XENA_dev_config_t *bar0 = (XENA_dev_config_t *) nic->bar0;
|
XENA_dev_config_t *bar0 = (XENA_dev_config_t *) nic->bar0;
|
||||||
u64 val64;
|
u64 val64;
|
||||||
|
@ -3116,7 +3116,7 @@ void restore_xmsi_data(nic_t *nic)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void store_xmsi_data(nic_t *nic)
|
static void store_xmsi_data(nic_t *nic)
|
||||||
{
|
{
|
||||||
XENA_dev_config_t *bar0 = (XENA_dev_config_t *) nic->bar0;
|
XENA_dev_config_t *bar0 = (XENA_dev_config_t *) nic->bar0;
|
||||||
u64 val64, addr, data;
|
u64 val64, addr, data;
|
||||||
|
@ -3288,7 +3288,7 @@ int s2io_enable_msi_x(nic_t *nic)
|
||||||
* file on failure.
|
* file on failure.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int s2io_open(struct net_device *dev)
|
static int s2io_open(struct net_device *dev)
|
||||||
{
|
{
|
||||||
nic_t *sp = dev->priv;
|
nic_t *sp = dev->priv;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
@ -3418,7 +3418,7 @@ hw_init_failed:
|
||||||
* file on failure.
|
* file on failure.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int s2io_close(struct net_device *dev)
|
static int s2io_close(struct net_device *dev)
|
||||||
{
|
{
|
||||||
nic_t *sp = dev->priv;
|
nic_t *sp = dev->priv;
|
||||||
int i;
|
int i;
|
||||||
|
@ -3467,7 +3467,7 @@ int s2io_close(struct net_device *dev)
|
||||||
* 0 on success & 1 on failure.
|
* 0 on success & 1 on failure.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int s2io_xmit(struct sk_buff *skb, struct net_device *dev)
|
static int s2io_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||||
{
|
{
|
||||||
nic_t *sp = dev->priv;
|
nic_t *sp = dev->priv;
|
||||||
u16 frg_cnt, frg_len, i, queue, queue_len, put_off, get_off;
|
u16 frg_cnt, frg_len, i, queue, queue_len, put_off, get_off;
|
||||||
|
@ -3913,7 +3913,7 @@ static void s2io_updt_stats(nic_t *sp)
|
||||||
* pointer to the updated net_device_stats structure.
|
* pointer to the updated net_device_stats structure.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct net_device_stats *s2io_get_stats(struct net_device *dev)
|
static struct net_device_stats *s2io_get_stats(struct net_device *dev)
|
||||||
{
|
{
|
||||||
nic_t *sp = dev->priv;
|
nic_t *sp = dev->priv;
|
||||||
mac_info_t *mac_control;
|
mac_info_t *mac_control;
|
||||||
|
@ -5106,19 +5106,20 @@ static void s2io_get_ethtool_stats(struct net_device *dev,
|
||||||
tmp_stats[i++] = stat_info->sw_stat.double_ecc_errs;
|
tmp_stats[i++] = stat_info->sw_stat.double_ecc_errs;
|
||||||
}
|
}
|
||||||
|
|
||||||
int s2io_ethtool_get_regs_len(struct net_device *dev)
|
static int s2io_ethtool_get_regs_len(struct net_device *dev)
|
||||||
{
|
{
|
||||||
return (XENA_REG_SPACE);
|
return (XENA_REG_SPACE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
u32 s2io_ethtool_get_rx_csum(struct net_device * dev)
|
static u32 s2io_ethtool_get_rx_csum(struct net_device * dev)
|
||||||
{
|
{
|
||||||
nic_t *sp = dev->priv;
|
nic_t *sp = dev->priv;
|
||||||
|
|
||||||
return (sp->rx_csum);
|
return (sp->rx_csum);
|
||||||
}
|
}
|
||||||
int s2io_ethtool_set_rx_csum(struct net_device *dev, u32 data)
|
|
||||||
|
static int s2io_ethtool_set_rx_csum(struct net_device *dev, u32 data)
|
||||||
{
|
{
|
||||||
nic_t *sp = dev->priv;
|
nic_t *sp = dev->priv;
|
||||||
|
|
||||||
|
@ -5129,17 +5130,19 @@ int s2io_ethtool_set_rx_csum(struct net_device *dev, u32 data)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int s2io_get_eeprom_len(struct net_device *dev)
|
|
||||||
|
static int s2io_get_eeprom_len(struct net_device *dev)
|
||||||
{
|
{
|
||||||
return (XENA_EEPROM_SPACE);
|
return (XENA_EEPROM_SPACE);
|
||||||
}
|
}
|
||||||
|
|
||||||
int s2io_ethtool_self_test_count(struct net_device *dev)
|
static int s2io_ethtool_self_test_count(struct net_device *dev)
|
||||||
{
|
{
|
||||||
return (S2IO_TEST_LEN);
|
return (S2IO_TEST_LEN);
|
||||||
}
|
}
|
||||||
void s2io_ethtool_get_strings(struct net_device *dev,
|
|
||||||
u32 stringset, u8 * data)
|
static void s2io_ethtool_get_strings(struct net_device *dev,
|
||||||
|
u32 stringset, u8 * data)
|
||||||
{
|
{
|
||||||
switch (stringset) {
|
switch (stringset) {
|
||||||
case ETH_SS_TEST:
|
case ETH_SS_TEST:
|
||||||
|
@ -5155,7 +5158,7 @@ static int s2io_ethtool_get_stats_count(struct net_device *dev)
|
||||||
return (S2IO_STAT_LEN);
|
return (S2IO_STAT_LEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
int s2io_ethtool_op_set_tx_csum(struct net_device *dev, u32 data)
|
static int s2io_ethtool_op_set_tx_csum(struct net_device *dev, u32 data)
|
||||||
{
|
{
|
||||||
if (data)
|
if (data)
|
||||||
dev->features |= NETIF_F_IP_CSUM;
|
dev->features |= NETIF_F_IP_CSUM;
|
||||||
|
@ -5208,7 +5211,7 @@ static struct ethtool_ops netdev_ethtool_ops = {
|
||||||
* function always return EOPNOTSUPPORTED
|
* function always return EOPNOTSUPPORTED
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int s2io_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
|
static int s2io_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
|
||||||
{
|
{
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
}
|
}
|
||||||
|
@ -5224,7 +5227,7 @@ int s2io_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
|
||||||
* file on failure.
|
* file on failure.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int s2io_change_mtu(struct net_device *dev, int new_mtu)
|
static int s2io_change_mtu(struct net_device *dev, int new_mtu)
|
||||||
{
|
{
|
||||||
nic_t *sp = dev->priv;
|
nic_t *sp = dev->priv;
|
||||||
|
|
||||||
|
|
|
@ -4535,9 +4535,8 @@ static int proc_status_open( struct inode *inode, struct file *file ) {
|
||||||
StatusRid status_rid;
|
StatusRid status_rid;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if ((file->private_data = kmalloc(sizeof(struct proc_data ), GFP_KERNEL)) == NULL)
|
if ((file->private_data = kzalloc(sizeof(struct proc_data ), GFP_KERNEL)) == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
memset(file->private_data, 0, sizeof(struct proc_data));
|
|
||||||
data = (struct proc_data *)file->private_data;
|
data = (struct proc_data *)file->private_data;
|
||||||
if ((data->rbuffer = kmalloc( 2048, GFP_KERNEL )) == NULL) {
|
if ((data->rbuffer = kmalloc( 2048, GFP_KERNEL )) == NULL) {
|
||||||
kfree (file->private_data);
|
kfree (file->private_data);
|
||||||
|
@ -4615,9 +4614,8 @@ static int proc_stats_rid_open( struct inode *inode,
|
||||||
int i, j;
|
int i, j;
|
||||||
u32 *vals = stats.vals;
|
u32 *vals = stats.vals;
|
||||||
|
|
||||||
if ((file->private_data = kmalloc(sizeof(struct proc_data ), GFP_KERNEL)) == NULL)
|
if ((file->private_data = kzalloc(sizeof(struct proc_data ), GFP_KERNEL)) == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
memset(file->private_data, 0, sizeof(struct proc_data));
|
|
||||||
data = (struct proc_data *)file->private_data;
|
data = (struct proc_data *)file->private_data;
|
||||||
if ((data->rbuffer = kmalloc( 4096, GFP_KERNEL )) == NULL) {
|
if ((data->rbuffer = kmalloc( 4096, GFP_KERNEL )) == NULL) {
|
||||||
kfree (file->private_data);
|
kfree (file->private_data);
|
||||||
|
@ -4881,20 +4879,18 @@ static int proc_config_open( struct inode *inode, struct file *file ) {
|
||||||
struct airo_info *ai = dev->priv;
|
struct airo_info *ai = dev->priv;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if ((file->private_data = kmalloc(sizeof(struct proc_data ), GFP_KERNEL)) == NULL)
|
if ((file->private_data = kzalloc(sizeof(struct proc_data ), GFP_KERNEL)) == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
memset(file->private_data, 0, sizeof(struct proc_data));
|
|
||||||
data = (struct proc_data *)file->private_data;
|
data = (struct proc_data *)file->private_data;
|
||||||
if ((data->rbuffer = kmalloc( 2048, GFP_KERNEL )) == NULL) {
|
if ((data->rbuffer = kmalloc( 2048, GFP_KERNEL )) == NULL) {
|
||||||
kfree (file->private_data);
|
kfree (file->private_data);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
if ((data->wbuffer = kmalloc( 2048, GFP_KERNEL )) == NULL) {
|
if ((data->wbuffer = kzalloc( 2048, GFP_KERNEL )) == NULL) {
|
||||||
kfree (data->rbuffer);
|
kfree (data->rbuffer);
|
||||||
kfree (file->private_data);
|
kfree (file->private_data);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
memset( data->wbuffer, 0, 2048 );
|
|
||||||
data->maxwritelen = 2048;
|
data->maxwritelen = 2048;
|
||||||
data->on_close = proc_config_on_close;
|
data->on_close = proc_config_on_close;
|
||||||
|
|
||||||
|
@ -5155,24 +5151,21 @@ static int proc_wepkey_open( struct inode *inode, struct file *file ) {
|
||||||
int j=0;
|
int j=0;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
if ((file->private_data = kmalloc(sizeof(struct proc_data ), GFP_KERNEL)) == NULL)
|
if ((file->private_data = kzalloc(sizeof(struct proc_data ), GFP_KERNEL)) == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
memset(file->private_data, 0, sizeof(struct proc_data));
|
|
||||||
memset(&wkr, 0, sizeof(wkr));
|
memset(&wkr, 0, sizeof(wkr));
|
||||||
data = (struct proc_data *)file->private_data;
|
data = (struct proc_data *)file->private_data;
|
||||||
if ((data->rbuffer = kmalloc( 180, GFP_KERNEL )) == NULL) {
|
if ((data->rbuffer = kzalloc( 180, GFP_KERNEL )) == NULL) {
|
||||||
kfree (file->private_data);
|
kfree (file->private_data);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
memset(data->rbuffer, 0, 180);
|
|
||||||
data->writelen = 0;
|
data->writelen = 0;
|
||||||
data->maxwritelen = 80;
|
data->maxwritelen = 80;
|
||||||
if ((data->wbuffer = kmalloc( 80, GFP_KERNEL )) == NULL) {
|
if ((data->wbuffer = kzalloc( 80, GFP_KERNEL )) == NULL) {
|
||||||
kfree (data->rbuffer);
|
kfree (data->rbuffer);
|
||||||
kfree (file->private_data);
|
kfree (file->private_data);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
memset( data->wbuffer, 0, 80 );
|
|
||||||
data->on_close = proc_wepkey_on_close;
|
data->on_close = proc_wepkey_on_close;
|
||||||
|
|
||||||
ptr = data->rbuffer;
|
ptr = data->rbuffer;
|
||||||
|
@ -5203,9 +5196,8 @@ static int proc_SSID_open( struct inode *inode, struct file *file ) {
|
||||||
char *ptr;
|
char *ptr;
|
||||||
SsidRid SSID_rid;
|
SsidRid SSID_rid;
|
||||||
|
|
||||||
if ((file->private_data = kmalloc(sizeof(struct proc_data ), GFP_KERNEL)) == NULL)
|
if ((file->private_data = kzalloc(sizeof(struct proc_data ), GFP_KERNEL)) == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
memset(file->private_data, 0, sizeof(struct proc_data));
|
|
||||||
data = (struct proc_data *)file->private_data;
|
data = (struct proc_data *)file->private_data;
|
||||||
if ((data->rbuffer = kmalloc( 104, GFP_KERNEL )) == NULL) {
|
if ((data->rbuffer = kmalloc( 104, GFP_KERNEL )) == NULL) {
|
||||||
kfree (file->private_data);
|
kfree (file->private_data);
|
||||||
|
@ -5213,12 +5205,11 @@ static int proc_SSID_open( struct inode *inode, struct file *file ) {
|
||||||
}
|
}
|
||||||
data->writelen = 0;
|
data->writelen = 0;
|
||||||
data->maxwritelen = 33*3;
|
data->maxwritelen = 33*3;
|
||||||
if ((data->wbuffer = kmalloc( 33*3, GFP_KERNEL )) == NULL) {
|
if ((data->wbuffer = kzalloc( 33*3, GFP_KERNEL )) == NULL) {
|
||||||
kfree (data->rbuffer);
|
kfree (data->rbuffer);
|
||||||
kfree (file->private_data);
|
kfree (file->private_data);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
memset( data->wbuffer, 0, 33*3 );
|
|
||||||
data->on_close = proc_SSID_on_close;
|
data->on_close = proc_SSID_on_close;
|
||||||
|
|
||||||
readSsidRid(ai, &SSID_rid);
|
readSsidRid(ai, &SSID_rid);
|
||||||
|
@ -5247,9 +5238,8 @@ static int proc_APList_open( struct inode *inode, struct file *file ) {
|
||||||
char *ptr;
|
char *ptr;
|
||||||
APListRid APList_rid;
|
APListRid APList_rid;
|
||||||
|
|
||||||
if ((file->private_data = kmalloc(sizeof(struct proc_data ), GFP_KERNEL)) == NULL)
|
if ((file->private_data = kzalloc(sizeof(struct proc_data ), GFP_KERNEL)) == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
memset(file->private_data, 0, sizeof(struct proc_data));
|
|
||||||
data = (struct proc_data *)file->private_data;
|
data = (struct proc_data *)file->private_data;
|
||||||
if ((data->rbuffer = kmalloc( 104, GFP_KERNEL )) == NULL) {
|
if ((data->rbuffer = kmalloc( 104, GFP_KERNEL )) == NULL) {
|
||||||
kfree (file->private_data);
|
kfree (file->private_data);
|
||||||
|
@ -5257,12 +5247,11 @@ static int proc_APList_open( struct inode *inode, struct file *file ) {
|
||||||
}
|
}
|
||||||
data->writelen = 0;
|
data->writelen = 0;
|
||||||
data->maxwritelen = 4*6*3;
|
data->maxwritelen = 4*6*3;
|
||||||
if ((data->wbuffer = kmalloc( data->maxwritelen, GFP_KERNEL )) == NULL) {
|
if ((data->wbuffer = kzalloc( data->maxwritelen, GFP_KERNEL )) == NULL) {
|
||||||
kfree (data->rbuffer);
|
kfree (data->rbuffer);
|
||||||
kfree (file->private_data);
|
kfree (file->private_data);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
memset( data->wbuffer, 0, data->maxwritelen );
|
|
||||||
data->on_close = proc_APList_on_close;
|
data->on_close = proc_APList_on_close;
|
||||||
|
|
||||||
readAPListRid(ai, &APList_rid);
|
readAPListRid(ai, &APList_rid);
|
||||||
|
@ -5297,9 +5286,8 @@ static int proc_BSSList_open( struct inode *inode, struct file *file ) {
|
||||||
/* If doLoseSync is not 1, we won't do a Lose Sync */
|
/* If doLoseSync is not 1, we won't do a Lose Sync */
|
||||||
int doLoseSync = -1;
|
int doLoseSync = -1;
|
||||||
|
|
||||||
if ((file->private_data = kmalloc(sizeof(struct proc_data ), GFP_KERNEL)) == NULL)
|
if ((file->private_data = kzalloc(sizeof(struct proc_data ), GFP_KERNEL)) == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
memset(file->private_data, 0, sizeof(struct proc_data));
|
|
||||||
data = (struct proc_data *)file->private_data;
|
data = (struct proc_data *)file->private_data;
|
||||||
if ((data->rbuffer = kmalloc( 1024, GFP_KERNEL )) == NULL) {
|
if ((data->rbuffer = kmalloc( 1024, GFP_KERNEL )) == NULL) {
|
||||||
kfree (file->private_data);
|
kfree (file->private_data);
|
||||||
|
|
|
@ -170,12 +170,11 @@ static dev_link_t *airo_attach(void)
|
||||||
DEBUG(0, "airo_attach()\n");
|
DEBUG(0, "airo_attach()\n");
|
||||||
|
|
||||||
/* Initialize the dev_link_t structure */
|
/* Initialize the dev_link_t structure */
|
||||||
link = kmalloc(sizeof(struct dev_link_t), GFP_KERNEL);
|
link = kzalloc(sizeof(struct dev_link_t), GFP_KERNEL);
|
||||||
if (!link) {
|
if (!link) {
|
||||||
printk(KERN_ERR "airo_cs: no memory for new device\n");
|
printk(KERN_ERR "airo_cs: no memory for new device\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
memset(link, 0, sizeof(struct dev_link_t));
|
|
||||||
|
|
||||||
/* Interrupt setup */
|
/* Interrupt setup */
|
||||||
link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
|
link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
|
||||||
|
@ -194,13 +193,12 @@ static dev_link_t *airo_attach(void)
|
||||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||||
|
|
||||||
/* Allocate space for private device-specific data */
|
/* Allocate space for private device-specific data */
|
||||||
local = kmalloc(sizeof(local_info_t), GFP_KERNEL);
|
local = kzalloc(sizeof(local_info_t), GFP_KERNEL);
|
||||||
if (!local) {
|
if (!local) {
|
||||||
printk(KERN_ERR "airo_cs: no memory for new device\n");
|
printk(KERN_ERR "airo_cs: no memory for new device\n");
|
||||||
kfree (link);
|
kfree (link);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
memset(local, 0, sizeof(local_info_t));
|
|
||||||
link->priv = local;
|
link->priv = local;
|
||||||
|
|
||||||
/* Register with Card Services */
|
/* Register with Card Services */
|
||||||
|
|
|
@ -2217,7 +2217,7 @@ static int atmel_get_range(struct net_device *dev,
|
||||||
int k,i,j;
|
int k,i,j;
|
||||||
|
|
||||||
dwrq->length = sizeof(struct iw_range);
|
dwrq->length = sizeof(struct iw_range);
|
||||||
memset(range, 0, sizeof(range));
|
memset(range, 0, sizeof(struct iw_range));
|
||||||
range->min_nwid = 0x0000;
|
range->min_nwid = 0x0000;
|
||||||
range->max_nwid = 0x0000;
|
range->max_nwid = 0x0000;
|
||||||
range->num_channels = 0;
|
range->num_channels = 0;
|
||||||
|
|
|
@ -180,12 +180,11 @@ static dev_link_t *atmel_attach(void)
|
||||||
DEBUG(0, "atmel_attach()\n");
|
DEBUG(0, "atmel_attach()\n");
|
||||||
|
|
||||||
/* Initialize the dev_link_t structure */
|
/* Initialize the dev_link_t structure */
|
||||||
link = kmalloc(sizeof(struct dev_link_t), GFP_KERNEL);
|
link = kzalloc(sizeof(struct dev_link_t), GFP_KERNEL);
|
||||||
if (!link) {
|
if (!link) {
|
||||||
printk(KERN_ERR "atmel_cs: no memory for new device\n");
|
printk(KERN_ERR "atmel_cs: no memory for new device\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
memset(link, 0, sizeof(struct dev_link_t));
|
|
||||||
|
|
||||||
/* Interrupt setup */
|
/* Interrupt setup */
|
||||||
link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
|
link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
|
||||||
|
@ -204,13 +203,12 @@ static dev_link_t *atmel_attach(void)
|
||||||
link->conf.IntType = INT_MEMORY_AND_IO;
|
link->conf.IntType = INT_MEMORY_AND_IO;
|
||||||
|
|
||||||
/* Allocate space for private device-specific data */
|
/* Allocate space for private device-specific data */
|
||||||
local = kmalloc(sizeof(local_info_t), GFP_KERNEL);
|
local = kzalloc(sizeof(local_info_t), GFP_KERNEL);
|
||||||
if (!local) {
|
if (!local) {
|
||||||
printk(KERN_ERR "atmel_cs: no memory for new device\n");
|
printk(KERN_ERR "atmel_cs: no memory for new device\n");
|
||||||
kfree (link);
|
kfree (link);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
memset(local, 0, sizeof(local_info_t));
|
|
||||||
link->priv = local;
|
link->priv = local;
|
||||||
|
|
||||||
/* Register with Card Services */
|
/* Register with Card Services */
|
||||||
|
|
|
@ -6065,13 +6065,11 @@ static int ipw2100_wpa_set_encryption(struct net_device *dev,
|
||||||
|
|
||||||
ieee80211_crypt_delayed_deinit(ieee, crypt);
|
ieee80211_crypt_delayed_deinit(ieee, crypt);
|
||||||
|
|
||||||
new_crypt = (struct ieee80211_crypt_data *)
|
new_crypt = kzalloc(sizeof(struct ieee80211_crypt_data), GFP_KERNEL);
|
||||||
kmalloc(sizeof(struct ieee80211_crypt_data), GFP_KERNEL);
|
|
||||||
if (new_crypt == NULL) {
|
if (new_crypt == NULL) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
memset(new_crypt, 0, sizeof(struct ieee80211_crypt_data));
|
|
||||||
new_crypt->ops = ops;
|
new_crypt->ops = ops;
|
||||||
if (new_crypt->ops && try_module_get(new_crypt->ops->owner))
|
if (new_crypt->ops && try_module_get(new_crypt->ops->owner))
|
||||||
new_crypt->priv = new_crypt->ops->init(param->u.crypt.idx);
|
new_crypt->priv = new_crypt->ops->init(param->u.crypt.idx);
|
||||||
|
|
|
@ -112,9 +112,10 @@ isl38xx_handle_wakeup(isl38xx_control_block *control_block,
|
||||||
void
|
void
|
||||||
isl38xx_trigger_device(int asleep, void __iomem *device_base)
|
isl38xx_trigger_device(int asleep, void __iomem *device_base)
|
||||||
{
|
{
|
||||||
u32 reg, counter = 0;
|
u32 reg;
|
||||||
|
|
||||||
#if VERBOSE > SHOW_ERROR_MESSAGES
|
#if VERBOSE > SHOW_ERROR_MESSAGES
|
||||||
|
u32 counter = 0;
|
||||||
struct timeval current_time;
|
struct timeval current_time;
|
||||||
DEBUG(SHOW_FUNCTION_CALLS, "isl38xx trigger device\n");
|
DEBUG(SHOW_FUNCTION_CALLS, "isl38xx trigger device\n");
|
||||||
#endif
|
#endif
|
||||||
|
@ -131,7 +132,6 @@ isl38xx_trigger_device(int asleep, void __iomem *device_base)
|
||||||
current_time.tv_sec, (long)current_time.tv_usec,
|
current_time.tv_sec, (long)current_time.tv_usec,
|
||||||
readl(device_base + ISL38XX_CTRL_STAT_REG));
|
readl(device_base + ISL38XX_CTRL_STAT_REG));
|
||||||
#endif
|
#endif
|
||||||
udelay(ISL38XX_WRITEIO_DELAY);
|
|
||||||
|
|
||||||
reg = readl(device_base + ISL38XX_INT_IDENT_REG);
|
reg = readl(device_base + ISL38XX_INT_IDENT_REG);
|
||||||
if (reg == 0xabadface) {
|
if (reg == 0xabadface) {
|
||||||
|
@ -145,7 +145,9 @@ isl38xx_trigger_device(int asleep, void __iomem *device_base)
|
||||||
while (reg = readl(device_base + ISL38XX_CTRL_STAT_REG),
|
while (reg = readl(device_base + ISL38XX_CTRL_STAT_REG),
|
||||||
(reg & ISL38XX_CTRL_STAT_SLEEPMODE) == 0) {
|
(reg & ISL38XX_CTRL_STAT_SLEEPMODE) == 0) {
|
||||||
udelay(ISL38XX_WRITEIO_DELAY);
|
udelay(ISL38XX_WRITEIO_DELAY);
|
||||||
|
#if VERBOSE > SHOW_ERROR_MESSAGES
|
||||||
counter++;
|
counter++;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#if VERBOSE > SHOW_ERROR_MESSAGES
|
#if VERBOSE > SHOW_ERROR_MESSAGES
|
||||||
|
@ -153,10 +155,6 @@ isl38xx_trigger_device(int asleep, void __iomem *device_base)
|
||||||
"%08li.%08li Device register read %08x\n",
|
"%08li.%08li Device register read %08x\n",
|
||||||
current_time.tv_sec, (long)current_time.tv_usec,
|
current_time.tv_sec, (long)current_time.tv_usec,
|
||||||
readl(device_base + ISL38XX_CTRL_STAT_REG));
|
readl(device_base + ISL38XX_CTRL_STAT_REG));
|
||||||
#endif
|
|
||||||
udelay(ISL38XX_WRITEIO_DELAY);
|
|
||||||
|
|
||||||
#if VERBOSE > SHOW_ERROR_MESSAGES
|
|
||||||
do_gettimeofday(¤t_time);
|
do_gettimeofday(¤t_time);
|
||||||
DEBUG(SHOW_TRACING,
|
DEBUG(SHOW_TRACING,
|
||||||
"%08li.%08li Device asleep counter %i\n",
|
"%08li.%08li Device asleep counter %i\n",
|
||||||
|
@ -171,7 +169,6 @@ isl38xx_trigger_device(int asleep, void __iomem *device_base)
|
||||||
|
|
||||||
/* perform another read on the Device Status Register */
|
/* perform another read on the Device Status Register */
|
||||||
reg = readl(device_base + ISL38XX_CTRL_STAT_REG);
|
reg = readl(device_base + ISL38XX_CTRL_STAT_REG);
|
||||||
udelay(ISL38XX_WRITEIO_DELAY);
|
|
||||||
|
|
||||||
#if VERBOSE > SHOW_ERROR_MESSAGES
|
#if VERBOSE > SHOW_ERROR_MESSAGES
|
||||||
do_gettimeofday(¤t_time);
|
do_gettimeofday(¤t_time);
|
||||||
|
@ -187,7 +184,6 @@ isl38xx_trigger_device(int asleep, void __iomem *device_base)
|
||||||
|
|
||||||
isl38xx_w32_flush(device_base, ISL38XX_DEV_INT_UPDATE,
|
isl38xx_w32_flush(device_base, ISL38XX_DEV_INT_UPDATE,
|
||||||
ISL38XX_DEV_INT_REG);
|
ISL38XX_DEV_INT_REG);
|
||||||
udelay(ISL38XX_WRITEIO_DELAY);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -227,17 +227,17 @@ islpci_eth_transmit(struct sk_buff *skb, struct net_device *ndev)
|
||||||
priv->data_low_tx_full = 1;
|
priv->data_low_tx_full = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* set the transmission time */
|
||||||
|
ndev->trans_start = jiffies;
|
||||||
|
priv->statistics.tx_packets++;
|
||||||
|
priv->statistics.tx_bytes += skb->len;
|
||||||
|
|
||||||
/* trigger the device */
|
/* trigger the device */
|
||||||
islpci_trigger(priv);
|
islpci_trigger(priv);
|
||||||
|
|
||||||
/* unlock the driver code */
|
/* unlock the driver code */
|
||||||
spin_unlock_irqrestore(&priv->slock, flags);
|
spin_unlock_irqrestore(&priv->slock, flags);
|
||||||
|
|
||||||
/* set the transmission time */
|
|
||||||
ndev->trans_start = jiffies;
|
|
||||||
priv->statistics.tx_packets++;
|
|
||||||
priv->statistics.tx_bytes += skb->len;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
drop_free:
|
drop_free:
|
||||||
|
|
|
@ -4608,9 +4608,8 @@ wavelan_attach(void)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Initialize the dev_link_t structure */
|
/* Initialize the dev_link_t structure */
|
||||||
link = kmalloc(sizeof(struct dev_link_t), GFP_KERNEL);
|
link = kzalloc(sizeof(struct dev_link_t), GFP_KERNEL);
|
||||||
if (!link) return NULL;
|
if (!link) return NULL;
|
||||||
memset(link, 0, sizeof(struct dev_link_t));
|
|
||||||
|
|
||||||
/* The io structure describes IO port mapping */
|
/* The io structure describes IO port mapping */
|
||||||
link->io.NumPorts1 = 8;
|
link->io.NumPorts1 = 8;
|
||||||
|
|
|
@ -1965,10 +1965,9 @@ static dev_link_t *wl3501_attach(void)
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
/* Initialize the dev_link_t structure */
|
/* Initialize the dev_link_t structure */
|
||||||
link = kmalloc(sizeof(*link), GFP_KERNEL);
|
link = kzalloc(sizeof(*link), GFP_KERNEL);
|
||||||
if (!link)
|
if (!link)
|
||||||
goto out;
|
goto out;
|
||||||
memset(link, 0, sizeof(struct dev_link_t));
|
|
||||||
|
|
||||||
/* The io structure describes IO port mapping */
|
/* The io structure describes IO port mapping */
|
||||||
link->io.NumPorts1 = 16;
|
link->io.NumPorts1 = 16;
|
||||||
|
|
|
@ -1,136 +0,0 @@
|
||||||
/* credit winbond-840.c
|
|
||||||
*/
|
|
||||||
#include <asm/io.h>
|
|
||||||
struct eeprom_ops {
|
|
||||||
void (*set_cs)(void *ee);
|
|
||||||
void (*clear_cs)(void *ee);
|
|
||||||
};
|
|
||||||
|
|
||||||
#define EEPOL_EEDI 0x01
|
|
||||||
#define EEPOL_EEDO 0x02
|
|
||||||
#define EEPOL_EECLK 0x04
|
|
||||||
#define EEPOL_EESEL 0x08
|
|
||||||
|
|
||||||
struct eeprom {
|
|
||||||
void *dev;
|
|
||||||
struct eeprom_ops *ops;
|
|
||||||
|
|
||||||
void __iomem * addr;
|
|
||||||
|
|
||||||
unsigned ee_addr_bits;
|
|
||||||
|
|
||||||
unsigned eesel;
|
|
||||||
unsigned eeclk;
|
|
||||||
unsigned eedo;
|
|
||||||
unsigned eedi;
|
|
||||||
unsigned polarity;
|
|
||||||
unsigned ee_state;
|
|
||||||
|
|
||||||
spinlock_t *lock;
|
|
||||||
u32 *cache;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
u8 eeprom_readb(struct eeprom *ee, unsigned address);
|
|
||||||
void eeprom_read(struct eeprom *ee, unsigned address, u8 *bytes,
|
|
||||||
unsigned count);
|
|
||||||
void eeprom_writeb(struct eeprom *ee, unsigned address, u8 data);
|
|
||||||
void eeprom_write(struct eeprom *ee, unsigned address, u8 *bytes,
|
|
||||||
unsigned count);
|
|
||||||
|
|
||||||
/* The EEPROM commands include the alway-set leading bit. */
|
|
||||||
enum EEPROM_Cmds {
|
|
||||||
EE_WriteCmd=(5 << 6), EE_ReadCmd=(6 << 6), EE_EraseCmd=(7 << 6),
|
|
||||||
};
|
|
||||||
|
|
||||||
void setup_ee_mem_bitbanger(struct eeprom *ee, void __iomem *memaddr, int eesel_bit, int eeclk_bit, int eedo_bit, int eedi_bit, unsigned polarity)
|
|
||||||
{
|
|
||||||
ee->addr = memaddr;
|
|
||||||
ee->eesel = 1 << eesel_bit;
|
|
||||||
ee->eeclk = 1 << eeclk_bit;
|
|
||||||
ee->eedo = 1 << eedo_bit;
|
|
||||||
ee->eedi = 1 << eedi_bit;
|
|
||||||
|
|
||||||
ee->polarity = polarity;
|
|
||||||
|
|
||||||
*ee->cache = readl(ee->addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* foo. put this in a .c file */
|
|
||||||
static inline void eeprom_update(struct eeprom *ee, u32 mask, int pol)
|
|
||||||
{
|
|
||||||
unsigned long flags;
|
|
||||||
u32 data;
|
|
||||||
|
|
||||||
spin_lock_irqsave(ee->lock, flags);
|
|
||||||
data = *ee->cache;
|
|
||||||
|
|
||||||
data &= ~mask;
|
|
||||||
if (pol)
|
|
||||||
data |= mask;
|
|
||||||
|
|
||||||
*ee->cache = data;
|
|
||||||
//printk("update: %08x\n", data);
|
|
||||||
writel(data, ee->addr);
|
|
||||||
spin_unlock_irqrestore(ee->lock, flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
void eeprom_clk_lo(struct eeprom *ee)
|
|
||||||
{
|
|
||||||
int pol = !!(ee->polarity & EEPOL_EECLK);
|
|
||||||
|
|
||||||
eeprom_update(ee, ee->eeclk, pol);
|
|
||||||
udelay(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
void eeprom_clk_hi(struct eeprom *ee)
|
|
||||||
{
|
|
||||||
int pol = !!(ee->polarity & EEPOL_EECLK);
|
|
||||||
|
|
||||||
eeprom_update(ee, ee->eeclk, !pol);
|
|
||||||
udelay(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
void eeprom_send_addr(struct eeprom *ee, unsigned address)
|
|
||||||
{
|
|
||||||
int pol = !!(ee->polarity & EEPOL_EEDI);
|
|
||||||
unsigned i;
|
|
||||||
address |= 6 << 6;
|
|
||||||
|
|
||||||
/* Shift the read command bits out. */
|
|
||||||
for (i=0; i<11; i++) {
|
|
||||||
eeprom_update(ee, ee->eedi, ((address >> 10) & 1) ^ pol);
|
|
||||||
address <<= 1;
|
|
||||||
eeprom_clk_hi(ee);
|
|
||||||
eeprom_clk_lo(ee);
|
|
||||||
}
|
|
||||||
eeprom_update(ee, ee->eedi, pol);
|
|
||||||
}
|
|
||||||
|
|
||||||
u16 eeprom_readw(struct eeprom *ee, unsigned address)
|
|
||||||
{
|
|
||||||
unsigned i;
|
|
||||||
u16 res = 0;
|
|
||||||
|
|
||||||
eeprom_clk_lo(ee);
|
|
||||||
eeprom_update(ee, ee->eesel, 1 ^ !!(ee->polarity & EEPOL_EESEL));
|
|
||||||
eeprom_send_addr(ee, address);
|
|
||||||
|
|
||||||
for (i=0; i<16; i++) {
|
|
||||||
u32 data;
|
|
||||||
eeprom_clk_hi(ee);
|
|
||||||
res <<= 1;
|
|
||||||
data = readl(ee->addr);
|
|
||||||
//printk("eeprom_readw: %08x\n", data);
|
|
||||||
res |= !!(data & ee->eedo) ^ !!(ee->polarity & EEPOL_EEDO);
|
|
||||||
eeprom_clk_lo(ee);
|
|
||||||
}
|
|
||||||
eeprom_update(ee, ee->eesel, 0 ^ !!(ee->polarity & EEPOL_EESEL));
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void eeprom_writeb(struct eeprom *ee, unsigned address, u8 data)
|
|
||||||
{
|
|
||||||
}
|
|
|
@ -369,6 +369,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
|
||||||
/* Put this code here so that we avoid duplicating it in all
|
/* Put this code here so that we avoid duplicating it in all
|
||||||
* Rx paths. - Jean II */
|
* Rx paths. - Jean II */
|
||||||
#ifdef IW_WIRELESS_SPY /* defined in iw_handler.h */
|
#ifdef IW_WIRELESS_SPY /* defined in iw_handler.h */
|
||||||
|
#ifdef CONFIG_NET_RADIO
|
||||||
/* If spy monitoring on */
|
/* If spy monitoring on */
|
||||||
if (ieee->spy_data.spy_number > 0) {
|
if (ieee->spy_data.spy_number > 0) {
|
||||||
struct iw_quality wstats;
|
struct iw_quality wstats;
|
||||||
|
@ -395,6 +396,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb,
|
||||||
/* Update spy records */
|
/* Update spy records */
|
||||||
wireless_spy_update(ieee->dev, hdr->addr2, &wstats);
|
wireless_spy_update(ieee->dev, hdr->addr2, &wstats);
|
||||||
}
|
}
|
||||||
|
#endif /* CONFIG_NET_RADIO */
|
||||||
#endif /* IW_WIRELESS_SPY */
|
#endif /* IW_WIRELESS_SPY */
|
||||||
|
|
||||||
#ifdef NOT_YET
|
#ifdef NOT_YET
|
||||||
|
|
Loading…
Reference in New Issue