summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Garzik <jgarzik@redhat.com>2004-01-19 08:32:26 -0500
committerJeff Garzik <jgarzik@redhat.com>2004-01-19 08:32:26 -0500
commit526463f5b9412db19a009403683549b2cd760125 (patch)
tree2c833231a786c34a1c1251ba4e2fa2388b92598c
parent9c7f8a73894dcb86bc3a013223c0bae1664902b6 (diff)
parent553585f3f0f8251148592c651877294ce46a2c6a (diff)
Manual merge of drivers/net/stnic irq handler changes.
-rw-r--r--Documentation/SubmittingPatches4
-rw-r--r--drivers/net/a2065.c19
-rw-r--r--drivers/net/appletalk/ltpc.c2
-rw-r--r--drivers/net/ariadne.c10
-rw-r--r--drivers/net/arm/am79c961a.c2
-rw-r--r--drivers/net/arm/ether00.c4
-rw-r--r--drivers/net/arm/ether1.c2
-rw-r--r--drivers/net/arm/ether3.c2
-rw-r--r--drivers/net/arm/etherh.c2
-rw-r--r--drivers/net/atari_pamsnet.c2
-rw-r--r--drivers/net/atp.c40
-rw-r--r--drivers/net/au1000_eth.c61
-rw-r--r--drivers/net/de600.c59
-rw-r--r--drivers/net/de600.h1
-rw-r--r--drivers/net/declance.c17
-rw-r--r--drivers/net/depca.c20
-rw-r--r--drivers/net/ethertap.c3
-rw-r--r--drivers/net/fc/iph5526.c3
-rw-r--r--drivers/net/fc/iph5526_scsi.h2
-rw-r--r--drivers/net/gt96100eth.c49
-rw-r--r--drivers/net/hamradio/baycom_epp.c2
-rw-r--r--drivers/net/hamradio/bpqether.c2
-rw-r--r--drivers/net/hamradio/hdlcdrv.c2
-rw-r--r--drivers/net/hamradio/yam.c2
-rw-r--r--drivers/net/hydra.c19
-rw-r--r--drivers/net/lasi_82596.c17
-rw-r--r--drivers/net/mace.c50
-rw-r--r--drivers/net/oaknet.c61
-rw-r--r--drivers/net/pci-skeleton.c2
-rw-r--r--drivers/net/pcmcia/3c574_cs.c7
-rw-r--r--drivers/net/pcmcia/3c589_cs.c7
-rw-r--r--drivers/net/pcmcia/fmvj18x_cs.c7
-rw-r--r--drivers/net/pcmcia/nmclan_cs.c7
-rw-r--r--drivers/net/pcmcia/smc91c92_cs.c7
-rw-r--r--drivers/net/pcmcia/xirc2ps_cs.c7
-rw-r--r--drivers/net/plip.c4
-rw-r--r--drivers/net/saa9730.c63
-rw-r--r--drivers/net/sb1250-mac.c49
-rw-r--r--drivers/net/sgiseeq.c29
-rw-r--r--drivers/net/stnic.c40
-rw-r--r--drivers/net/tc35815.c194
-rw-r--r--drivers/net/tokenring/3c359.c4
-rw-r--r--drivers/net/tokenring/abyss.c2
-rw-r--r--drivers/net/tokenring/madgemc.c6
-rw-r--r--drivers/net/tokenring/tmspci.c2
-rw-r--r--drivers/net/tulip/de2104x.c2
-rw-r--r--drivers/net/tulip/dmfe.c2
-rw-r--r--drivers/net/tulip/tulip_core.c2
-rw-r--r--drivers/net/tulip/winbond-840.c2
-rw-r--r--drivers/net/tulip/xircom_tulip_cb.c3
-rw-r--r--drivers/net/wan/x25_asy.c2
-rw-r--r--drivers/net/wireless/strip.c2
-rw-r--r--drivers/net/wireless/wavelan.c80
-rw-r--r--drivers/net/wireless/wavelan.p.h53
-rw-r--r--drivers/net/wireless/wavelan_cs.c113
-rw-r--r--drivers/net/wireless/wavelan_cs.p.h49
-rw-r--r--drivers/net/znet.c36
-rw-r--r--drivers/net/zorro8390.c19
-rw-r--r--drivers/usb/gadget/ether.c2
59 files changed, 623 insertions, 640 deletions
diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches
index 029e4281aa77..d88a68fc3092 100644
--- a/Documentation/SubmittingPatches
+++ b/Documentation/SubmittingPatches
@@ -239,7 +239,7 @@ Let the compiler optimize away the "no-op" case.
Simple example, of poor code:
- dev = init_etherdev (NULL, 0);
+ dev = alloc_etherdev (sizeof(struct funky_private));
if (!dev)
return -ENODEV;
#ifdef CONFIG_NET_FUNKINESS
@@ -254,7 +254,7 @@ Cleaned-up example:
#endif
(in the code itself)
- dev = init_etherdev (NULL, 0);
+ dev = alloc_etherdev (sizeof(struct funky_private));
if (!dev)
return -ENODEV;
init_funky_net(dev);
diff --git a/drivers/net/a2065.c b/drivers/net/a2065.c
index 2bfc20332c95..143c3ef8bc52 100644
--- a/drivers/net/a2065.c
+++ b/drivers/net/a2065.c
@@ -737,7 +737,7 @@ static int __init a2065_probe(void)
continue;
}
- dev = init_etherdev(NULL, sizeof(struct lance_private));
+ dev = alloc_etherdev(0, sizeof(struct lance_private));
if (dev == NULL) {
release_resource(r1);
@@ -791,17 +791,22 @@ static int __init a2065_probe(void)
dev->set_multicast_list = &lance_set_multicast;
dev->dma = 0;
-#ifdef MODULE
- priv->next_module = root_a2065_dev;
- root_a2065_dev = priv;
-#endif
- ether_setup(dev);
init_timer(&priv->multicast_timer);
priv->multicast_timer.data = (unsigned long) dev;
priv->multicast_timer.function =
(void (*)(unsigned long)) &lance_set_multicast;
- res = 0;
+ res = register_netdev(dev);
+ if (res) {
+ release_resource(r1);
+ release_resource(r2);
+ free_netdev(dev);
+ break;
+ }
+#ifdef MODULE
+ priv->next_module = root_a2065_dev;
+ root_a2065_dev = priv;
+#endif
}
return res;
}
diff --git a/drivers/net/appletalk/ltpc.c b/drivers/net/appletalk/ltpc.c
index 1b10bc14867c..cc7476f1c041 100644
--- a/drivers/net/appletalk/ltpc.c
+++ b/drivers/net/appletalk/ltpc.c
@@ -1213,7 +1213,7 @@ out3:
out2:
release_region(io, 8);
out1:
- kfree(dev);
+ free_netdev(dev);
out:
return ERR_PTR(err);
}
diff --git a/drivers/net/ariadne.c b/drivers/net/ariadne.c
index 0babdc528932..849c5114324a 100644
--- a/drivers/net/ariadne.c
+++ b/drivers/net/ariadne.c
@@ -168,7 +168,7 @@ static int __init ariadne_probe(void)
continue;
}
- dev = init_etherdev(NULL, sizeof(struct ariadne_private));
+ dev = alloc_etherdev(sizeof(struct ariadne_private));
if (dev == NULL) {
release_resource(r1);
@@ -205,11 +205,17 @@ static int __init ariadne_probe(void)
dev->get_stats = &ariadne_get_stats;
dev->set_multicast_list = &set_multicast_list;
+ res = register_netdev(dev);
+ if (res) {
+ release_resource(r1);
+ release_resource(r2);
+ free_netdev(dev);
+ break;
+ }
#ifdef MODULE
priv->next_module = root_ariadne_dev;
root_ariadne_dev = priv;
#endif
- res = 0;
}
return res;
}
diff --git a/drivers/net/arm/am79c961a.c b/drivers/net/arm/am79c961a.c
index 9362f3998495..8931196e04e0 100644
--- a/drivers/net/arm/am79c961a.c
+++ b/drivers/net/arm/am79c961a.c
@@ -722,7 +722,7 @@ static int __init am79c961_init(void)
release:
release_region(dev->base_addr, 0x18);
nodev:
- kfree(dev);
+ free_netdev(dev);
out:
return ret;
}
diff --git a/drivers/net/arm/ether00.c b/drivers/net/arm/ether00.c
index 8824494c4b51..87917571eb66 100644
--- a/drivers/net/arm/ether00.c
+++ b/drivers/net/arm/ether00.c
@@ -923,8 +923,6 @@ static int ether00_add_device(struct pldhs_dev_info* dev_info,void* dev_ps_data)
result = -ENOMEM;
goto out_release;
}
- memset(dev,0,sizeof(struct net_device));
- memset(dev->priv, 0, sizeof(struct net_priv));
priv = dev->priv;
priv->tq_memupdate.routine=ether00_mem_update;
@@ -966,7 +964,7 @@ static int ether00_add_device(struct pldhs_dev_info* dev_info,void* dev_ps_data)
out_unmap:
iounmap(map_addr);
out_kfree:
- kfree(dev);
+ free_netdev(dev);
out_release:
release_mem_region(dev_info->base_addr, MAC_REG_SIZE);
return result;
diff --git a/drivers/net/arm/ether1.c b/drivers/net/arm/ether1.c
index f24fdf497c99..42b5f69e06a4 100644
--- a/drivers/net/arm/ether1.c
+++ b/drivers/net/arm/ether1.c
@@ -1068,7 +1068,7 @@ ether1_probe(struct expansion_card *ec, const struct ecard_id *id)
release:
release_region(dev->base_addr, 16);
release_region(dev->base_addr + 0x800, 4096);
- kfree(dev);
+ free_netdev(dev);
out:
return ret;
}
diff --git a/drivers/net/arm/ether3.c b/drivers/net/arm/ether3.c
index 86c5d2849684..26d3d4978256 100644
--- a/drivers/net/arm/ether3.c
+++ b/drivers/net/arm/ether3.c
@@ -908,7 +908,7 @@ ether3_probe(struct expansion_card *ec, const struct ecard_id *id)
failed:
release_region(dev->base_addr, 128);
free:
- kfree(dev);
+ free_netdev(dev);
out:
return ret;
}
diff --git a/drivers/net/arm/etherh.c b/drivers/net/arm/etherh.c
index 7bf52baf2856..e7d45d8a5d3e 100644
--- a/drivers/net/arm/etherh.c
+++ b/drivers/net/arm/etherh.c
@@ -705,7 +705,7 @@ etherh_probe(struct expansion_card *ec, const struct ecard_id *id)
release:
release_region(dev->base_addr, 16);
free:
- kfree(dev);
+ free_netdev(dev);
out:
return ret;
}
diff --git a/drivers/net/atari_pamsnet.c b/drivers/net/atari_pamsnet.c
index 75b27a3445ad..6bcb154d2c14 100644
--- a/drivers/net/atari_pamsnet.c
+++ b/drivers/net/atari_pamsnet.c
@@ -110,8 +110,6 @@ static char *version =
#undef READ
#undef WRITE
-extern struct net_device *init_etherdev(struct net_device *dev, int sizeof_private);
-
/* use 0 for production, 1 for verification, >2 for debug
*/
#ifndef NET_DEBUG
diff --git a/drivers/net/atp.c b/drivers/net/atp.c
index 9c36def252a7..4bf3a84d5a41 100644
--- a/drivers/net/atp.c
+++ b/drivers/net/atp.c
@@ -195,7 +195,7 @@ static void atp_timed_checker(unsigned long ignored);
/* Index to functions, as function prototypes. */
-static int atp_probe1(struct net_device *dev, long ioaddr);
+static int atp_probe1(long ioaddr);
static void get_node_ID(struct net_device *dev);
static unsigned short eeprom_op(long ioaddr, unsigned int cmd);
static int net_open(struct net_device *dev);
@@ -224,13 +224,13 @@ static struct net_device *root_atp_dev;
FIXME: we should use the parport layer for this
*/
-static int __init atp_init(struct net_device *dev)
+static int __init atp_init(void)
{
int *port, ports[] = {0x378, 0x278, 0x3bc, 0};
- int base_addr = dev ? dev->base_addr : io[0];
+ int base_addr = io[0];
if (base_addr > 0x1ff) /* Check a single specified location. */
- return atp_probe1(dev, base_addr);
+ return atp_probe1(base_addr);
else if (base_addr == 1) /* Don't probe at all. */
return -ENXIO;
@@ -239,17 +239,19 @@ static int __init atp_init(struct net_device *dev)
outb(0x57, ioaddr + PAR_DATA);
if (inb(ioaddr + PAR_DATA) != 0x57)
continue;
- if (atp_probe1(dev, ioaddr) == 0)
+ if (atp_probe1(ioaddr) == 0)
return 0;
}
return -ENODEV;
}
-static int __init atp_probe1(struct net_device *dev, long ioaddr)
+static int __init atp_probe1(long ioaddr)
{
+ struct net_device *dev = NULL;
struct net_local *lp;
int saved_ctrl_reg, status, i;
+ int res;
outb(0xff, ioaddr + PAR_DATA);
/* Save the original value of the Control register, in case we guessed
@@ -296,7 +298,7 @@ static int __init atp_probe1(struct net_device *dev, long ioaddr)
return -ENODEV;
}
- dev = init_etherdev(dev, sizeof(struct net_local));
+ dev = alloc_etherdev(sizeof(struct net_local));
if (!dev)
return -ENOMEM;
SET_MODULE_OWNER(dev);
@@ -331,24 +333,13 @@ static int __init atp_probe1(struct net_device *dev, long ioaddr)
dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5]);
/* Reset the ethernet hardware and activate the printer pass-through. */
- write_reg_high(ioaddr, CMR1, CMR1h_RESET | CMR1h_MUX);
-
- /* Initialize the device structure. */
- ether_setup(dev);
- if (dev->priv == NULL)
- dev->priv = kmalloc(sizeof(struct net_local), GFP_KERNEL);
- if (dev->priv == NULL)
- return -ENOMEM;
- memset(dev->priv, 0, sizeof(struct net_local));
+ write_reg_high(ioaddr, CMR1, CMR1h_RESET | CMR1h_MUX);
lp = (struct net_local *)dev->priv;
lp->chip_type = RTL8002;
lp->addr_mode = CMR2h_Normal;
spin_lock_init(&lp->lock);
- lp->next_module = root_atp_dev;
- root_atp_dev = dev;
-
/* For the ATP adapter the "if_port" is really the data transfer mode. */
if (xcvr[0])
dev->if_port = xcvr[0];
@@ -366,6 +357,15 @@ static int __init atp_probe1(struct net_device *dev, long ioaddr)
dev->tx_timeout = tx_timeout;
dev->watchdog_timeo = TX_TIMEOUT;
+ res = register_netdev(dev);
+ if (res) {
+ free_netdev(dev);
+ return res;
+ }
+
+ lp->next_module = root_atp_dev;
+ root_atp_dev = dev;
+
return 0;
}
@@ -933,7 +933,7 @@ static void set_rx_mode_8012(struct net_device *dev)
static int __init atp_init_module(void) {
if (debug) /* Emit version even if no cards detected. */
printk(KERN_INFO "%s" KERN_INFO "%s", versionA, versionB);
- return atp_init(NULL);
+ return atp_init();
}
static void __exit atp_cleanup_module(void) {
diff --git a/drivers/net/au1000_eth.c b/drivers/net/au1000_eth.c
index b0a8b3793cfc..2bd0ac9594e5 100644
--- a/drivers/net/au1000_eth.c
+++ b/drivers/net/au1000_eth.c
@@ -56,7 +56,7 @@ static void *dma_alloc(size_t, dma_addr_t *);
static void dma_free(void *, size_t);
static void hard_stop(struct net_device *);
static void enable_rx_tx(struct net_device *dev);
-static int __init au1000_probe1(struct net_device *, long, int, int);
+static int __init au1000_probe1(long, int, int);
static int au1000_init(struct net_device *);
static int au1000_open(struct net_device *);
static int au1000_close(struct net_device *);
@@ -644,17 +644,17 @@ static int __init au1000_init_module(void)
}
// check for valid entries, au1100 only has one entry
if (base_addr && irq) {
- if (au1000_probe1(NULL, base_addr, irq, i) != 0) {
+ if (au1000_probe1(base_addr, irq, i) != 0)
return -ENODEV;
- }
}
}
return 0;
}
static int __init
-au1000_probe1(struct net_device *dev, long ioaddr, int irq, int port_num)
+au1000_probe1(long ioaddr, int irq, int port_num)
{
+ struct net_device *dev;
static unsigned version_printed = 0;
struct au1000_private *aup = NULL;
int i, retval = 0;
@@ -668,15 +668,16 @@ au1000_probe1(struct net_device *dev, long ioaddr, int irq, int port_num)
if (version_printed++ == 0)
printk(version);
- if (!dev)
- dev = init_etherdev(NULL, sizeof(struct au1000_private));
+ retval = -ENOMEM;
+ dev = alloc_etherdev(sizeof(struct au1000_private));
if (!dev) {
- printk (KERN_ERR "au1000 eth: init_etherdev failed\n");
- release_region(ioaddr, MAC_IOSIZE);
- return -ENODEV;
+ printk (KERN_ERR "au1000 eth: alloc_etherdev failed\n");
+ goto out;
}
+ SET_MODULE_OWNER(dev);
+
printk("%s: Au1xxx ethernet found at 0x%lx, irq %d\n",
dev->name, ioaddr, irq);
@@ -685,10 +686,8 @@ au1000_probe1(struct net_device *dev, long ioaddr, int irq, int port_num)
/* Allocate the data buffers */
aup->vaddr = (u32)dma_alloc(MAX_BUF_SIZE *
(NUM_TX_BUFFS+NUM_RX_BUFFS), &aup->dma_addr);
- if (!aup->vaddr) {
- retval = -ENOMEM;
- goto free_region;
- }
+ if (!aup->vaddr)
+ goto out1;
/* aup->mac is the base address of the MAC's registers */
aup->mac = (volatile mac_reg_t *)((unsigned long)ioaddr);
@@ -749,10 +748,11 @@ au1000_probe1(struct net_device *dev, long ioaddr, int irq, int port_num)
MAC_EN_RESET2 | MAC_EN_CLOCK_ENABLE;
au_sync_delay(2);
- if (mii_probe(dev) != 0) {
- goto free_region;
- }
+ retval = mii_probe(dev);
+ if (retval)
+ goto out2;
+ retval = -EINVAL;
pDBfree = NULL;
/* setup the data buffer descriptors and attach a buffer to each one */
pDB = aup->db;
@@ -767,13 +767,13 @@ au1000_probe1(struct net_device *dev, long ioaddr, int irq, int port_num)
for (i=0; i<NUM_RX_DMA; i++) {
pDB = GetFreeDB(aup);
- if (!pDB) goto free_region;
+ if (!pDB) goto out2;
aup->rx_dma_ring[i]->buff_stat = (unsigned)pDB->dma_addr;
aup->rx_db_inuse[i] = pDB;
}
for (i=0; i<NUM_TX_DMA; i++) {
pDB = GetFreeDB(aup);
- if (!pDB) goto free_region;
+ if (!pDB) goto out2;
aup->tx_dma_ring[i]->buff_stat = (unsigned)pDB->dma_addr;
aup->tx_dma_ring[i]->len = 0;
aup->tx_db_inuse[i] = pDB;
@@ -792,26 +792,25 @@ au1000_probe1(struct net_device *dev, long ioaddr, int irq, int port_num)
dev->tx_timeout = au1000_tx_timeout;
dev->watchdog_timeo = ETH_TX_TIMEOUT;
-
- /* Fill in the fields of the device structure with ethernet values. */
- ether_setup(dev);
-
/*
* The boot code uses the ethernet controller, so reset it to start
* fresh. au1000_init() expects that the device is in reset state.
*/
reset_mac(dev);
+
+ retval = register_netdev(dev);
+ if (retval)
+ goto out2;
return 0;
-free_region:
+out2:
+ dma_free(aup->vaddr, MAX_BUF_SIZE * (NUM_TX_BUFFS+NUM_RX_BUFFS));
+out1:
+ free_netdev(dev);
+out:
release_region(PHYSADDR(ioaddr), MAC_IOSIZE);
- unregister_netdev(dev);
- if (aup->vaddr)
- dma_free((void *)aup->vaddr,
- MAX_BUF_SIZE * (NUM_TX_BUFFS+NUM_RX_BUFFS));
printk(KERN_ERR "%s: au1000_probe1 failed. Returns %d\n",
dev->name, retval);
- free_netdev(dev);
return retval;
}
@@ -933,15 +932,12 @@ static int au1000_open(struct net_device *dev)
int retval;
struct au1000_private *aup = (struct au1000_private *) dev->priv;
- MOD_INC_USE_COUNT;
-
if (au1000_debug > 4)
printk("%s: open: dev=%p\n", dev->name, dev);
if ((retval = au1000_init(dev))) {
printk(KERN_ERR "%s: error in au1000_init\n", dev->name);
free_irq(dev->irq, dev);
- MOD_DEC_USE_COUNT;
return retval;
}
netif_start_queue(dev);
@@ -950,7 +946,6 @@ static int au1000_open(struct net_device *dev)
dev->name, dev))) {
printk(KERN_ERR "%s: unable to get IRQ %d\n",
dev->name, dev->irq);
- MOD_DEC_USE_COUNT;
return retval;
}
@@ -984,8 +979,6 @@ static int au1000_close(struct net_device *dev)
spin_unlock_irqrestore(&aup->lock, flags);
reset_mac(dev);
- kfree(dev);
- MOD_DEC_USE_COUNT;
return 0;
}
diff --git a/drivers/net/de600.c b/drivers/net/de600.c
index 62c70b45e555..0e8b0771e67c 100644
--- a/drivers/net/de600.c
+++ b/drivers/net/de600.c
@@ -99,7 +99,7 @@ static volatile int tx_fifo_in;
static volatile int tx_fifo_out;
static volatile int free_tx_pages = TX_PAGES;
static int was_down;
-static spinlock_t de600_lock;
+static spinlock_t de600_lock = SPIN_LOCK_UNLOCKED;
static inline u8 de600_read_status(struct net_device *dev)
{
@@ -398,20 +398,31 @@ static void de600_rx_intr(struct net_device *dev)
*/
}
-int __init de600_probe(struct net_device *dev)
+static struct net_device * __init de600_probe(void)
{
int i;
- static struct net_device_stats de600_netstats;
- /*dev->priv = kmalloc(sizeof(struct net_device_stats), GFP_KERNEL);*/
+ struct net_device *dev;
+ int err;
+
+ dev = alloc_etherdev(sizeof(struct net_device_stats));
+ if (!dev)
+ return ERR_PTR(-ENOMEM);
SET_MODULE_OWNER(dev);
+ if (!request_region(DE600_IO, 3, "de600")) {
+ printk(KERN_WARNING "DE600: port 0x%x busy\n", DE600_IO);
+ err = -EBUSY;
+ goto out;
+ }
+
printk(KERN_INFO "%s: D-Link DE-600 pocket adapter", dev->name);
/* Alpha testers must have the version number to report bugs. */
if (de600_debug > 1)
printk(version);
/* probe for adapter */
+ err = -ENODEV;
rx_page = 0;
select_nic();
(void)de600_read_status(dev);
@@ -419,7 +430,7 @@ int __init de600_probe(struct net_device *dev)
de600_put_command(STOP_RESET);
if (de600_read_status(dev) & 0xf0) {
printk(": not at I/O %#3x.\n", DATA_PORT);
- return -ENODEV;
+ goto out1;
}
/*
@@ -444,12 +455,7 @@ int __init de600_probe(struct net_device *dev)
dev->dev_addr[3] |= 0x70;
} else {
printk(" not identified in the printer port\n");
- return -ENODEV;
- }
-
- if (!request_region(DE600_IO, 3, "de600")) {
- printk(KERN_WARNING "DE600: port 0x%x busy\n", DE600_IO);
- return -EBUSY;
+ goto out1;
}
printk(", Ethernet Address: %02X", dev->dev_addr[0]);
@@ -457,22 +463,27 @@ int __init de600_probe(struct net_device *dev)
printk(":%02X",dev->dev_addr[i]);
printk("\n");
- /* Initialize the device structure. */
- dev->priv = &de600_netstats;
-
- memset(dev->priv, 0, sizeof(struct net_device_stats));
dev->get_stats = get_stats;
dev->open = de600_open;
dev->stop = de600_close;
dev->hard_start_xmit = &de600_start_xmit;
- ether_setup(dev);
-
dev->flags&=~IFF_MULTICAST;
select_prn();
- return 0;
+
+ err = register_netdev(dev);
+ if (err)
+ goto out1;
+
+ return dev;
+
+out1:
+ release_region(DE600_IO, 3);
+out:
+ free_netdev(dev);
+ return ERR_PTR(err);
}
static int adapter_init(struct net_device *dev)
@@ -527,21 +538,21 @@ static int adapter_init(struct net_device *dev)
return 0; /* OK */
}
-static struct net_device de600_dev;
+static struct net_device *de600_dev;
static int __init de600_init(void)
{
- spin_lock_init(&de600_lock);
- de600_dev.init = de600_probe;
- if (register_netdev(&de600_dev) != 0)
- return -EIO;
+ de600_dev = de600_probe();
+ if (IS_ERR(de600_dev))
+ return PTR_ERR(de600_dev);
return 0;
}
static void __exit de600_exit(void)
{
- unregister_netdev(&de600_dev);
+ unregister_netdev(de600_dev);
release_region(DE600_IO, 3);
+ free_netdev(de600_dev);
}
module_init(de600_init);
diff --git a/drivers/net/de600.h b/drivers/net/de600.h
index 269aa4b61fbb..e4073015dcd8 100644
--- a/drivers/net/de600.h
+++ b/drivers/net/de600.h
@@ -131,7 +131,6 @@ static void de600_rx_intr(struct net_device *dev);
/* Initialization */
static void trigger_interrupt(struct net_device *dev);
-int de600_probe(struct net_device *dev);
static int adapter_init(struct net_device *dev);
/*
diff --git a/drivers/net/declance.c b/drivers/net/declance.c
index 905f92d49cad..19d5c40fd53a 100644
--- a/drivers/net/declance.c
+++ b/drivers/net/declance.c
@@ -1039,13 +1039,13 @@ static int __init dec_lance_init(const int type, const int slot)
if (dec_lance_debug && version_printed++ == 0)
printk(version);
- dev = init_etherdev(NULL, sizeof(struct lance_private));
+ dev = alloc_etherdev(sizeof(struct lance_private));
if (!dev)
return -ENOMEM;
SET_MODULE_OWNER(dev);
/*
- * init_etherdev ensures the data structures used by the LANCE
+ * alloc_etherdev ensures the data structures used by the LANCE
* are aligned.
*/
lp = (struct lance_private *) dev->priv;
@@ -1188,9 +1188,6 @@ static int __init dec_lance_init(const int type, const int slot)
}
}
- lp->next = root_lance_dev;
- root_lance_dev = dev;
-
/* Copy the ethernet address to the device structure, later to the
* lance initialization block so the lance gets it every time it's
* (re)initialized.
@@ -1239,11 +1236,14 @@ static int __init dec_lance_init(const int type, const int slot)
init_timer(&lp->multicast_timer);
lp->multicast_timer.data = (unsigned long) dev;
lp->multicast_timer.function = &lance_set_multicast_retry;
-
+ ret = register_netdev(dev);
+ if (ret)
+ goto err_out;
+ lp->next = root_lance_dev;
+ root_lance_dev = dev;
return 0;
err_out:
- unregister_netdev(dev);
free_netdev(dev);
return ret;
}
@@ -1288,13 +1288,12 @@ static void __exit dec_lance_cleanup(void)
while (root_lance_dev) {
struct net_device *dev = root_lance_dev;
struct lance_private *lp = (struct lance_private *)dev->priv;
-
+ unregister_netdev(dev);
#ifdef CONFIG_TC
if (lp->slot >= 0)
release_tc_card(lp->slot);
#endif
root_lance_dev = lp->next;
- unregister_netdev(dev);
free_netdev(dev);
}
}
diff --git a/drivers/net/depca.c b/drivers/net/depca.c
index e9700be21569..7dfb0c6198b1 100644
--- a/drivers/net/depca.c
+++ b/drivers/net/depca.c
@@ -681,8 +681,7 @@ static int __init depca_hw_init (struct net_device *dev, struct device *device)
lp->sh_mem = ioremap(mem_start, mem_len);
if (lp->sh_mem == NULL) {
printk(KERN_ERR "depca: cannot remap ISA memory, aborting\n");
- release_mem_region (mem_start, mem_len);
- goto out_priv;
+ goto out1;
}
lp->mem_start = mem_start;
@@ -771,7 +770,7 @@ static int __init depca_hw_init (struct net_device *dev, struct device *device)
status = -ENXIO;
if (!irqnum) {
printk(" and failed to detect IRQ line.\n");
- goto out_priv;
+ goto out2;
} else {
for (dev->irq = 0, i = 0; (depca_irq[i]) && (!dev->irq); i++)
if (irqnum == depca_irq[i]) {
@@ -781,7 +780,7 @@ static int __init depca_hw_init (struct net_device *dev, struct device *device)
if (!dev->irq) {
printk(" but incorrect IRQ line detected.\n");
- return -ENXIO;
+ goto out2;
}
}
} else {
@@ -807,11 +806,14 @@ static int __init depca_hw_init (struct net_device *dev, struct device *device)
device->driver_data = dev;
SET_NETDEV_DEV (dev, device);
- register_netdev (dev);
- return 0;
-
- out_priv:
-
+ status = register_netdev(dev);
+ if (status == 0)
+ return 0;
+out2:
+ iounmap(lp->sh_mem);
+out1:
+ release_mem_region (mem_start, mem_len);
+out_priv:
return status;
}
diff --git a/drivers/net/ethertap.c b/drivers/net/ethertap.c
index 7f4f4ae8c5c6..6f2de5295cf4 100644
--- a/drivers/net/ethertap.c
+++ b/drivers/net/ethertap.c
@@ -72,8 +72,7 @@ static int __init ethertap_probe(int unit)
struct net_device *dev;
int err = -ENOMEM;
- dev = alloc_netdev(sizeof(struct net_local), "tap%d",
- ether_setup);
+ dev = alloc_etherdev(sizeof(struct net_local));
if (!dev)
goto out;
diff --git a/drivers/net/fc/iph5526.c b/drivers/net/fc/iph5526.c
index df3b9bd485e1..11a346c69733 100644
--- a/drivers/net/fc/iph5526.c
+++ b/drivers/net/fc/iph5526.c
@@ -259,6 +259,7 @@ static int __init iph5526_probe_pci(struct net_device *dev)
static int __init fcdev_init(struct net_device *dev)
{
+ SET_MODULE_OWNER(dev);
dev->open = iph5526_open;
dev->stop = iph5526_close;
dev->hard_start_xmit = iph5526_send_packet;
@@ -2896,14 +2897,12 @@ static void update_EDB_indx(struct fc_info *fi)
static int iph5526_open(struct net_device *dev)
{
netif_start_queue(dev);
- MOD_INC_USE_COUNT;
return 0;
}
static int iph5526_close(struct net_device *dev)
{
netif_stop_queue(dev);
- MOD_DEC_USE_COUNT;
return 0;
}
diff --git a/drivers/net/fc/iph5526_scsi.h b/drivers/net/fc/iph5526_scsi.h
index 32c8d9f448f7..1cd4eb1b42d6 100644
--- a/drivers/net/fc/iph5526_scsi.h
+++ b/drivers/net/fc/iph5526_scsi.h
@@ -25,7 +25,7 @@ int iph5526_queuecommand(Scsi_Cmnd *Cmnd, void (*done) (Scsi_Cmnd *));
int iph5526_release(struct Scsi_Host *host);
int iph5526_abort(Scsi_Cmnd *Cmnd);
const char *iph5526_info(struct Scsi_Host *host);
-int iph5526_biosparam(Disk * disk, struct block_device *n, int ip[]);
+int iph5526_biosparam(struct Scsi_Disk * disk, struct block_device *n, int ip[]);
#endif
diff --git a/drivers/net/gt96100eth.c b/drivers/net/gt96100eth.c
index c25b9fda3f38..49e27df09189 100644
--- a/drivers/net/gt96100eth.c
+++ b/drivers/net/gt96100eth.c
@@ -729,10 +729,12 @@ gt96100_probe1(int port_num)
return -EBUSY;
}
- dev = init_etherdev(0, sizeof(struct gt96100_private));
+ dev = alloc_etherdev(sizeof(struct gt96100_private));
+ if (!dev)
+ goto out;
gtif->dev = dev;
- /* private struct aligned and zeroed by init_etherdev */
+ /* private struct aligned and zeroed by alloc_etherdev */
/* Fill in the 'dev' fields. */
dev->base_addr = gtif->iobase;
dev->irq = gtif->irq;
@@ -740,7 +742,7 @@ gt96100_probe1(int port_num)
if ((retval = parse_mac_addr(dev, gtif->mac_str))) {
err("%s: MAC address parse failed\n", __FUNCTION__);
retval = -EINVAL;
- goto free_region;
+ goto out1;
}
gp = dev->priv;
@@ -768,7 +770,7 @@ gt96100_probe1(int port_num)
&gp->rx_ring_dma);
if (gp->rx_ring == NULL) {
retval = -ENOMEM;
- goto free_region;
+ goto out1;
}
gp->tx_ring = (gt96100_td_t *)(gp->rx_ring + RX_RING_SIZE);
@@ -781,11 +783,8 @@ gt96100_probe1(int port_num)
gp->rx_buff = dmaalloc(PKT_BUF_SZ*RX_RING_SIZE,
&gp->rx_buff_dma);
if (gp->rx_buff == NULL) {
- dmafree(sizeof(gt96100_rd_t) * RX_RING_SIZE
- + sizeof(gt96100_td_t) * TX_RING_SIZE,
- gp->rx_ring);
retval = -ENOMEM;
- goto free_region;
+ goto out2;
}
}
@@ -797,12 +796,8 @@ gt96100_probe1(int port_num)
gp->hash_table = (char*)dmaalloc(RX_HASH_TABLE_SIZE,
&gp->hash_table_dma);
if (gp->hash_table == NULL) {
- dmafree(sizeof(gt96100_rd_t) * RX_RING_SIZE
- + sizeof(gt96100_td_t) * TX_RING_SIZE,
- gp->rx_ring);
- dmafree(PKT_BUF_SZ*RX_RING_SIZE, gp->rx_buff);
retval = -ENOMEM;
- goto free_region;
+ goto out3;
}
}
@@ -819,14 +814,23 @@ gt96100_probe1(int port_num)
dev->tx_timeout = gt96100_tx_timeout;
dev->watchdog_timeo = GT96100ETH_TX_TIMEOUT;
- /* Fill in the fields of the device structure with ethernet values. */
- ether_setup(dev);
+ retval = register_netdev(dev);
+ if (retval)
+ goto out4;
return 0;
- free_region:
- release_region(gtif->iobase, GT96100_ETH_IO_SIZE);
- unregister_netdev(dev);
+out4:
+ dmafree(RX_HASH_TABLE_SIZE, gp->hash_table_dma);
+out3:
+ dmafree(PKT_BUF_SZ*RX_RING_SIZE, gp->rx_buff);
+out2:
+ dmafree(sizeof(gt96100_rd_t) * RX_RING_SIZE
+ + sizeof(gt96100_td_t) * TX_RING_SIZE,
+ gp->rx_ring);
+out1:
free_netdev (dev);
+out:
+ release_region(gtif->iobase, GT96100_ETH_IO_SIZE);
err("%s failed. Returns %d\n", __FUNCTION__, retval);
return retval;
}
@@ -1573,9 +1577,14 @@ static void gt96100_cleanup_module(void)
if (gtif->dev != NULL) {
struct gt96100_private *gp =
(struct gt96100_private *)gtif->dev->priv;
- release_region(gtif->iobase, gp->io_size);
unregister_netdev(gtif->dev);
- free_netdev (gtif->dev);
+ dmafree(RX_HASH_TABLE_SIZE, gp->hash_table_dma);
+ dmafree(PKT_BUF_SZ*RX_RING_SIZE, gp->rx_buff);
+ dmafree(sizeof(gt96100_rd_t) * RX_RING_SIZE
+ + sizeof(gt96100_td_t) * TX_RING_SIZE,
+ gp->rx_ring);
+ free_netdev(gtif->dev);
+ release_region(gtif->iobase, gp->io_size);
}
}
}
diff --git a/drivers/net/hamradio/baycom_epp.c b/drivers/net/hamradio/baycom_epp.c
index 7cbeb3407b24..0ef870831dc7 100644
--- a/drivers/net/hamradio/baycom_epp.c
+++ b/drivers/net/hamradio/baycom_epp.c
@@ -1401,7 +1401,7 @@ static int __init init_baycomepp(void)
if (register_netdev(dev)) {
printk(KERN_WARNING "%s: cannot register net device %s\n", bc_drvname, dev->name);
- kfree(dev);
+ free_netdev(dev);
break;
}
if (set_hw && baycom_setmode(dev->priv, mode[i]))
diff --git a/drivers/net/hamradio/bpqether.c b/drivers/net/hamradio/bpqether.c
index b0bf84f29bec..fda18722289e 100644
--- a/drivers/net/hamradio/bpqether.c
+++ b/drivers/net/hamradio/bpqether.c
@@ -547,7 +547,7 @@ static int bpq_new_device(struct net_device *edev)
error:
dev_put(edev);
- kfree(ndev);
+ free_netdev(ndev);
return err;
}
diff --git a/drivers/net/hamradio/hdlcdrv.c b/drivers/net/hamradio/hdlcdrv.c
index ca306b5b2f4b..787ca8fad90a 100644
--- a/drivers/net/hamradio/hdlcdrv.c
+++ b/drivers/net/hamradio/hdlcdrv.c
@@ -832,7 +832,7 @@ struct net_device *hdlcdrv_register(const struct hdlcdrv_ops *ops,
if (err < 0) {
printk(KERN_WARNING "hdlcdrv: cannot register net "
"device %s\n", dev->name);
- kfree(dev);
+ free_netdev(dev);
dev = ERR_PTR(err);
}
return dev;
diff --git a/drivers/net/hamradio/yam.c b/drivers/net/hamradio/yam.c
index 58c0a07039e2..c516e7156ca1 100644
--- a/drivers/net/hamradio/yam.c
+++ b/drivers/net/hamradio/yam.c
@@ -1192,7 +1192,7 @@ static void __exit yam_cleanup_driver(void)
struct net_device *dev = yam_devs[i];
if (dev) {
unregister_netdev(dev);
- kfree(dev);
+ free_netdev(dev);
}
}
diff --git a/drivers/net/hydra.c b/drivers/net/hydra.c
index b183b1159bd5..921677364943 100644
--- a/drivers/net/hydra.c
+++ b/drivers/net/hydra.c
@@ -89,15 +89,17 @@ static int __init hydra_init(unsigned long board)
const char name[] = "NE2000";
int start_page, stop_page;
int j;
+ int err;
static u32 hydra_offsets[16] = {
0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e,
0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e,
};
- dev = init_etherdev(NULL, 0);
+ dev = alloc_etherdev(0);
if (!dev)
return -ENOMEM;
+ dev->priv = NULL;
SET_MODULE_OWNER(dev);
for(j = 0; j < ETHER_ADDR_LEN; j++)
@@ -113,12 +115,16 @@ static int __init hydra_init(unsigned long board)
/* Install the Interrupt handler */
if (request_irq(IRQ_AMIGA_PORTS, ei_interrupt, SA_SHIRQ, "Hydra Ethernet",
- dev))
+ dev)) {
+ free_netdev(dev);
return -EAGAIN;
+ }
/* Allocate dev->priv and fill in 8390 specific dev fields. */
if (ethdev_init(dev)) {
printk("Unable to get memory for dev->priv.\n");
+ free_irq(IRQ_AMIGA_PORTS, dev);
+ free_netdev(dev);
return -ENOMEM;
}
@@ -146,7 +152,14 @@ static int __init hydra_init(unsigned long board)
root_hydra_dev = dev;
#endif
NS8390_init(dev, 0);
- return 0;
+ err = register_netdev(dev);
+ if (!err)
+ return 0;
+
+ free_irq(IRQ_AMIGA_PORTS, dev);
+ kfree(dev->priv);
+ free_netdev(dev);
+ return err;
}
static int hydra_open(struct net_device *dev)
diff --git a/drivers/net/lasi_82596.c b/drivers/net/lasi_82596.c
index 6f8c223bf68e..b2cbf973918d 100644
--- a/drivers/net/lasi_82596.c
+++ b/drivers/net/lasi_82596.c
@@ -1149,12 +1149,11 @@ static void print_eth(unsigned char *add, char *str)
#define LAN_PROM_ADDR 0xF0810000
-static int __devinit i82596_probe(struct net_device *dev)
+static int __devinit i82596_probe(struct net_device *dev,
+ struct device *gen_dev)
{
int i;
struct i596_private *lp;
- /* we're going to overwrite dev->priv, so pull the device out */
- struct device *gen_dev = dev->priv;
char eth_addr[6];
dma_addr_t dma_addr;
@@ -1204,7 +1203,6 @@ static int __devinit i82596_probe(struct net_device *dev)
return -ENOMEM;
}
- ether_setup(dev);
DEB(DEB_PROBE,printk("%s: 82596 at %#3lx,", dev->name, dev->base_addr));
for (i = 0; i < 6; i++)
@@ -1537,12 +1535,19 @@ lan_init_chip(struct parisc_device *dev)
netdevice->base_addr = dev->hpa;
netdevice->irq = dev->irq;
- netdevice->init = i82596_probe;
- netdevice->priv = &dev->dev;
+
+ retval = i82596_probe(netdevice, &dev->dev);
+ if (retval) {
+ free_netdev(netdevice);
+ return -ENODEV;
+ }
retval = register_netdev(netdevice);
if (retval) {
+ struct i596_private *lp = netdevice->priv;
printk(KERN_WARNING __FILE__ ": register_netdevice ret'd %d\n", retval);
+ dma_free_noncoherent(lp->dev, sizeof(struct i596_private),
+ (void *)netdevice->mem_start, lp->dma_addr);
free_netdev(netdevice);
return -ENODEV;
};
diff --git a/drivers/net/mace.c b/drivers/net/mace.c
index 43eccb42921b..2cf50b1ad277 100644
--- a/drivers/net/mace.c
+++ b/drivers/net/mace.c
@@ -142,6 +142,10 @@ static void __init mace_probe1(struct device_node *mace)
}
}
+ /*
+ * lazy allocation - it's a driver-wide thing and it will live until
+ * the unload, but we don't allocate it until it's needed
+ */
if (dummy_buf == NULL) {
dummy_buf = kmalloc(RX_BUFLEN+2, GFP_KERNEL);
if (dummy_buf == NULL) {
@@ -150,7 +154,7 @@ static void __init mace_probe1(struct device_node *mace)
}
}
- dev = init_etherdev(0, PRIV_BYTES);
+ dev = alloc_etherdev(PRIV_BYTES);
if (!dev)
return;
SET_MODULE_OWNER(dev);
@@ -160,16 +164,16 @@ static void __init mace_probe1(struct device_node *mace)
if (!request_OF_resource(mace, 0, " (mace)")) {
printk(KERN_ERR "MACE: can't request IO resource !\n");
- goto err_out;
+ goto out1;
}
if (!request_OF_resource(mace, 1, " (mace tx dma)")) {
printk(KERN_ERR "MACE: can't request TX DMA resource !\n");
- goto err_out;
+ goto out2;
}
if (!request_OF_resource(mace, 2, " (mace tx dma)")) {
printk(KERN_ERR "MACE: can't request RX DMA resource !\n");
- goto err_out;
+ goto out3;
}
dev->base_addr = mace->addrs[0].address;
@@ -229,30 +233,42 @@ static void __init mace_probe1(struct device_node *mace)
dev->set_multicast_list = mace_set_multicast;
dev->set_mac_address = mace_set_address;
- ether_setup(dev);
-
mace_reset(dev);
- if (request_irq(dev->irq, mace_interrupt, 0, "MACE", dev))
+ if (request_irq(dev->irq, mace_interrupt, 0, "MACE", dev)) {
printk(KERN_ERR "MACE: can't get irq %d\n", dev->irq);
+ goto out4;
+ }
if (request_irq(mace->intrs[1].line, mace_txdma_intr, 0, "MACE-txdma",
- dev))
+ dev)) {
printk(KERN_ERR "MACE: can't get irq %d\n", mace->intrs[1].line);
+ goto out5;
+ }
if (request_irq(mace->intrs[2].line, mace_rxdma_intr, 0, "MACE-rxdma",
- dev))
+ dev)) {
printk(KERN_ERR "MACE: can't get irq %d\n", mace->intrs[2].line);
+ goto out6;
+ }
+ if (register_netdev(dev) != 0)
+ goto out7;
mp->next_mace = mace_devs;
mace_devs = dev;
return;
-err_out:
- unregister_netdev(dev);
- if (mp->of_node) {
- release_OF_resource(mp->of_node, 0);
- release_OF_resource(mp->of_node, 1);
- release_OF_resource(mp->of_node, 2);
- }
+out7:
+ free_irq(mp->rx_dma_intr, dev);
+out6:
+ free_irq(mp->tx_dma_intr, dev);
+out5:
+ free_irq(dev->irq, dev);
+out4:
+ release_OF_resource(mp->of_node, 2);
+out3:
+ release_OF_resource(mp->of_node, 1);
+out2:
+ release_OF_resource(mp->of_node, 0);
+out1:
free_netdev(dev);
}
@@ -975,7 +991,7 @@ static void __exit mace_cleanup (void)
release_OF_resource(mp->of_node, 1);
release_OF_resource(mp->of_node, 2);
- kfree(dev);
+ free_netdev(dev);
}
if (dummy_buf != NULL) {
kfree(dummy_buf);
diff --git a/drivers/net/oaknet.c b/drivers/net/oaknet.c
index 08124c5b24b0..c72a54c20b8b 100644
--- a/drivers/net/oaknet.c
+++ b/drivers/net/oaknet.c
@@ -94,8 +94,8 @@ static int __init oaknet_init(void)
{
register int i;
int reg0, regd;
- int ret;
- struct net_device tmp, *dev = NULL;
+ int ret = -ENOMEM;
+ struct net_device *dev;
#if 0
unsigned long ioaddr = OAKNET_IO_BASE;
#else
@@ -105,17 +105,15 @@ static int __init oaknet_init(void)
if (!ioaddr)
return -ENOMEM;
- /*
- * This MUST happen here because of the nic_* macros
- * which have an implicit dependency on dev->base_addr.
- */
- tmp.base_addr = ioaddr;
- dev = &tmp;
+ dev = alloc_etherdev(0);
+ if (!dev)
+ goto out_unmap;
+ dev->priv = NULL;
ret = -EBUSY;
if (!request_region(OAKNET_IO_BASE, OAKNET_IO_SIZE, name))
- goto out_unmap;
+ goto out_dev;
/* Quick register check to see if the device is really there. */
@@ -144,17 +142,7 @@ static int __init oaknet_init(void)
goto out_region;
}
- /*
- * We're not using the old-style probing API, so we have to allocate
- * our own device structure.
- */
-
- dev = init_etherdev(NULL, 0);
- ret = -ENOMEM;
- if (!dev)
- goto out_region;
SET_MODULE_OWNER(dev);
- oaknet_devs = dev;
/*
* This controller is on an embedded board, so the base address
@@ -169,7 +157,7 @@ static int __init oaknet_init(void)
ret = -ENOMEM;
if (ethdev_init(dev)) {
printk(" unable to get memory for dev->priv.\n");
- goto out_dev;
+ goto out_region;
}
/*
@@ -215,15 +203,21 @@ static int __init oaknet_init(void)
dev->stop = oaknet_close;
NS8390_init(dev, FALSE);
+ ret = register_netdev(dev);
+ if (ret)
+ goto out_irq;
+
+ oaknet_devs = dev;
+ return 0;
- return (0);
+out_irq;
+ free_irq(dev->irq, dev);
out_priv:
kfree(dev->priv);
-out_dev:
- unregister_netdev(dev);
- kfree(dev);
out_region:
release_region(OAKNET_IO_BASE, OAKNET_IO_SIZE);
+out_dev:
+ free_netdev(dev);
out_unmap:
iounmap(ioaddr);
return ret;
@@ -662,17 +656,6 @@ oaknet_dma_error(struct net_device *dev, const char *name)
}
/*
- * Oak Ethernet module load interface.
- */
-static int __init oaknet_init_module (void)
-{
- if (oaknet_devs != NULL)
- return (-EBUSY);
-
- return (oaknet_init());
-}
-
-/*
* Oak Ethernet module unload interface.
*/
static void __exit oaknet_cleanup_module (void)
@@ -683,17 +666,17 @@ static void __exit oaknet_cleanup_module (void)
if (oaknet_devs->priv != NULL) {
int ioaddr = oaknet_devs->base_addr;
void *priv = oaknet_devs->priv;
+ unregister_netdev(oaknet_dev);
free_irq(oaknet_devs->irq, oaknet_devs);
+ kfree(priv);
release_region(ioaddr, OAKNET_IO_SIZE);
iounmap(ioaddr);
- unregister_netdev(oaknet_dev);
- free_netdev(priv);
}
/* Convert to loop once driver supports multiple devices. */
- kfree(oaknet_devs);
+ free_netdev(oaknet_devs);
}
-module_init(oaknet_init_module);
+module_init(oaknet_init);
module_exit(oaknet_cleanup_module);
MODULE_LICENSE("GPL");
diff --git a/drivers/net/pci-skeleton.c b/drivers/net/pci-skeleton.c
index b671d8c9a84f..28d8b5342898 100644
--- a/drivers/net/pci-skeleton.c
+++ b/drivers/net/pci-skeleton.c
@@ -730,7 +730,7 @@ err_out_free_res:
#endif
pci_release_regions (pdev);
err_out:
- kfree (dev);
+ free_netdev (dev);
DPRINTK ("EXIT, returning %d\n", rc);
return rc;
}
diff --git a/drivers/net/pcmcia/3c574_cs.c b/drivers/net/pcmcia/3c574_cs.c
index 560d2efd7f72..e484a016392b 100644
--- a/drivers/net/pcmcia/3c574_cs.c
+++ b/drivers/net/pcmcia/3c574_cs.c
@@ -373,12 +373,9 @@ static void tc574_detach(dev_link_t *link)
/* Unlink device structure, free bits */
*linkp = link->next;
- if (link->dev) {
+ if (link->dev)
unregister_netdev(dev);
- free_netdev(dev);
- } else
- kfree(dev);
-
+ free_netdev(dev);
} /* tc574_detach */
/*
diff --git a/drivers/net/pcmcia/3c589_cs.c b/drivers/net/pcmcia/3c589_cs.c
index 5183bda24be1..4339409895b2 100644
--- a/drivers/net/pcmcia/3c589_cs.c
+++ b/drivers/net/pcmcia/3c589_cs.c
@@ -287,12 +287,9 @@ static void tc589_detach(dev_link_t *link)
/* Unlink device structure, free bits */
*linkp = link->next;
- if (link->dev) {
+ if (link->dev)
unregister_netdev(dev);
- free_netdev(dev);
- } else
- kfree(dev);
-
+ free_netdev(dev);
} /* tc589_detach */
/*======================================================================
diff --git a/drivers/net/pcmcia/fmvj18x_cs.c b/drivers/net/pcmcia/fmvj18x_cs.c
index c594ef4898c7..9f5c60f1db11 100644
--- a/drivers/net/pcmcia/fmvj18x_cs.c
+++ b/drivers/net/pcmcia/fmvj18x_cs.c
@@ -344,12 +344,9 @@ static void fmvj18x_detach(dev_link_t *link)
/* Unlink device structure, free pieces */
*linkp = link->next;
- if (link->dev) {
+ if (link->dev)
unregister_netdev(dev);
- free_netdev(dev);
- } else
- kfree(dev);
-
+ free_netdev(dev);
} /* fmvj18x_detach */
/*====================================================================*/
diff --git a/drivers/net/pcmcia/nmclan_cs.c b/drivers/net/pcmcia/nmclan_cs.c
index a1f6e86d3b0f..fc3c850545a9 100644
--- a/drivers/net/pcmcia/nmclan_cs.c
+++ b/drivers/net/pcmcia/nmclan_cs.c
@@ -562,12 +562,9 @@ static void nmclan_detach(dev_link_t *link)
/* Unlink device structure, free bits */
*linkp = link->next;
- if (link->dev) {
+ if (link->dev)
unregister_netdev(dev);
- free_netdev(dev);
- } else
- kfree(dev);
-
+ free_netdev(dev);
} /* nmclan_detach */
/* ----------------------------------------------------------------------------
diff --git a/drivers/net/pcmcia/smc91c92_cs.c b/drivers/net/pcmcia/smc91c92_cs.c
index 1f34064198dc..20afb9b6cdda 100644
--- a/drivers/net/pcmcia/smc91c92_cs.c
+++ b/drivers/net/pcmcia/smc91c92_cs.c
@@ -422,12 +422,9 @@ static void smc91c92_detach(dev_link_t *link)
/* Unlink device structure, free bits */
*linkp = link->next;
- if (link->dev) {
+ if (link->dev)
unregister_netdev(dev);
- free_netdev(dev);
- } else
- kfree(dev);
-
+ free_netdev(dev);
} /* smc91c92_detach */
/*====================================================================*/
diff --git a/drivers/net/pcmcia/xirc2ps_cs.c b/drivers/net/pcmcia/xirc2ps_cs.c
index 1abaddb6bf83..f29b17c5d4af 100644
--- a/drivers/net/pcmcia/xirc2ps_cs.c
+++ b/drivers/net/pcmcia/xirc2ps_cs.c
@@ -683,12 +683,9 @@ xirc2ps_detach(dev_link_t * link)
/* Unlink device structure, free it */
*linkp = link->next;
- if (link->dev) {
+ if (link->dev)
unregister_netdev(dev);
- free_netdev(dev);
- } else
- kfree(dev);
-
+ free_netdev(dev);
} /* xirc2ps_detach */
/****************
diff --git a/drivers/net/plip.c b/drivers/net/plip.c
index 8b8c640847d7..83236666372c 100644
--- a/drivers/net/plip.c
+++ b/drivers/net/plip.c
@@ -1282,13 +1282,13 @@ static void plip_attach (struct parport *port)
}
sprintf(name, "plip%d", unit);
- dev = alloc_netdev(sizeof(struct net_local), name,
- ether_setup);
+ dev = alloc_etherdev(sizeof(struct net_local));
if (!dev) {
printk(KERN_ERR "plip: memory squeeze\n");
return;
}
+ strcpy(dev->name, name);
dev->init = plip_init_netdev;
SET_MODULE_OWNER(dev);
diff --git a/drivers/net/saa9730.c b/drivers/net/saa9730.c
index 4a8fcadca707..c7139e50e8af 100644
--- a/drivers/net/saa9730.c
+++ b/drivers/net/saa9730.c
@@ -996,11 +996,11 @@ static void __devexit saa9730_remove_one(struct pci_dev *pdev)
struct net_device *dev = pci_get_drvdata(pdev);
if (dev) {
-
+ unregister_netdev(dev);
+
if (dev->priv)
kfree(dev->priv);
- unregister_netdev(dev);
free_netdev(dev);
pci_release_regions(pdev);
pci_disable_device(pdev);
@@ -1015,17 +1015,10 @@ static int lan_saa9730_init(struct net_device *dev, int ioaddr, int irq)
unsigned char ethernet_addr[6];
int ret = 0;
- dev = init_etherdev(dev, 0);
-
- if (!dev)
- return -ENOMEM;
-
dev->open = lan_saa9730_open_fail;
- if (get_ethernet_addr(ethernet_addr)) {
- ret = -ENODEV;
- goto out;
- }
+ if (get_ethernet_addr(ethernet_addr))
+ return -ENODEV;
memcpy(dev->dev_addr, ethernet_addr, 6);
dev->base_addr = ioaddr;
@@ -1040,10 +1033,8 @@ static int lan_saa9730_init(struct net_device *dev, int ioaddr, int irq)
GFP_DMA | GFP_KERNEL)
+ 7) & ~7);
- if (!lp) {
- ret = -ENOMEM;
- goto out;
- }
+ if (!lp)
+ return -ENOMEM;
dev->priv = lp;
memset(lp, 0, sizeof(*lp));
@@ -1057,6 +1048,7 @@ static int lan_saa9730_init(struct net_device *dev, int ioaddr, int irq)
SAA9730_EVM_REGS_ADDR);
/* Allocate LAN RX/TX frame buffer space. */
+ /* FIXME: a leak */
if ((ret = lan_saa9730_allocate_buffers(lp)))
goto out;
@@ -1095,63 +1087,70 @@ static int lan_saa9730_init(struct net_device *dev, int ioaddr, int irq)
dev->watchdog_timeo = (HZ >> 1);
dev->dma = 0;
+ ret = register_netdev(dev);
+ if (ret)
+ goto out;
return 0;
out:
- if (dev) {
- if (dev->priv)
- kfree(dev->priv);
- unregister_netdevice(dev);
- free_netdev(dev);
- }
-
+ if (dev->priv)
+ kfree(dev->priv);
+ free_netdev(dev);
return ret;
}
static int __devinit saa9730_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
{
- struct net_device *dev = NULL;
+ struct net_device *dev;
unsigned int pci_ioaddr;
int err;
if (lan_saa9730_debug > 1)
printk("saa9730.c: PCI bios is present, checking for devices...\n");
+ err = -ENOMEM;
+ dev = alloc_etherdev(0);
+ if (!dev)
+ goto out;
+
+ SET_MODULE_OWNER(dev);
+
err = pci_enable_device(pdev);
if (err) {
printk(KERN_ERR "Cannot enable PCI device, aborting.\n");
- goto out;
+ goto out1;
}
err = pci_request_regions(pdev, DRV_MODULE_NAME);
if (err) {
printk(KERN_ERR "Cannot obtain PCI resources, aborting.\n");
- goto out_disable_pdev;
+ goto out2;
}
pci_irq_line = pdev->irq;
/* LAN base address in located at BAR 1. */
-
+
pci_ioaddr = pci_resource_start(pdev, 1);
pci_set_master(pdev);
-
+
printk("Found SAA9730 (PCI) at %#x, irq %d.\n",
pci_ioaddr, pci_irq_line);
err = lan_saa9730_init(dev, pci_ioaddr, pci_irq_line);
if (err) {
printk("Lan init failed");
- goto out_disable_pdev;
+ goto out2;
}
-
+
pci_set_drvdata(pdev, dev);
return 0;
- out_disable_pdev:
+out2:
pci_disable_device(pdev);
- out:
- pci_set_drvdata(pdev, NULL);
+out1:
+ free_netdev(dev);
+out:
return err;
}
diff --git a/drivers/net/sb1250-mac.c b/drivers/net/sb1250-mac.c
index 68838bbd0023..0c1e6b6f5a18 100644
--- a/drivers/net/sb1250-mac.c
+++ b/drivers/net/sb1250-mac.c
@@ -2372,6 +2372,7 @@ static int sbmac_init(struct net_device *dev, int idx)
unsigned char *eaddr;
uint64_t ea_reg;
int i;
+ int err;
sc = (struct sbmac_softc *)dev->priv;
@@ -2430,7 +2431,6 @@ static int sbmac_init(struct net_device *dev, int idx)
spin_lock_init(&(sc->sbm_lock));
- ether_setup(dev);
dev->open = sbmac_open;
dev->hard_start_xmit = sbmac_start_tx;
dev->stop = sbmac_close;
@@ -2444,8 +2444,11 @@ static int sbmac_init(struct net_device *dev, int idx)
/* This is needed for PASS2 for Rx H/W checksum feature */
sbmac_set_iphdr_offset(sc);
-
- return 0;
+
+ err = register_netdev(dev);
+ if (err)
+ sbmac_uninitctx(sc);
+ return err;
}
@@ -2811,13 +2814,12 @@ sbmac_setup_hwaddr(int chan,char *addr)
}
#endif
-static struct net_device *dev_sbmac[MAX_UNITS] = {0,0,0};
+static struct net_device *dev_sbmac[MAX_UNITS];
static int __init
sbmac_init_module(void)
{
int idx;
- int macidx = 0;
struct net_device *dev;
sbmac_port_t port;
int chip_max_units;
@@ -2884,26 +2886,24 @@ sbmac_init_module(void)
* Okay, cool. Initialize this MAC.
*/
- dev = init_etherdev(NULL,sizeof(struct sbmac_softc));
+ dev = alloc_etherdev(sizeof(struct sbmac_softc));
if (!dev)
- return -ENOMEM; /* return ENOMEM */
+ return -ENOMEM; /* return ENOMEM */
printk(KERN_DEBUG "sbmac: configuring MAC at %lx\n", port);
dev->irq = K_INT_MAC_0 + idx;
dev->base_addr = port;
dev->mem_end = 0;
- /*dev->init = sbmac_init;*/
- sbmac_init(dev, macidx);
-
- dev_sbmac[macidx] = dev;
- macidx++;
+ if (sbmac_init(dev, idx)) {
+ port = A_MAC_CHANNEL_BASE(idx);
+ SBMAC_WRITECSR(KSEG1ADDR(port+R_MAC_ETHERNET_ADDR),
+ sbmac_orig_hwaddr[idx] );
+ free_netdev(dev);
+ continue;
+ }
+ dev_sbmac[idx++] = dev;
}
-
- /*
- * Should we care, 'macidx' is the total number of enabled MACs.
- */
-
return 0;
}
@@ -2916,21 +2916,12 @@ sbmac_cleanup_module(void)
sbmac_port_t port;
for (idx = 0; idx < MAX_UNITS; idx++) {
dev = dev_sbmac[idx];
- if (dev == NULL)
- continue;
- if (dev->priv != NULL) {
- struct sbmac_softc *sc = (struct sbmac_softc *) dev->priv;
-
+ if (!dev) {
+ struct sbmac_softc *sc = dev->priv;
unregister_netdev(dev);
-
sbmac_uninitctx(sc);
-
+ free_netdev(dev);
}
-
- port = A_MAC_CHANNEL_BASE(idx);
- SBMAC_WRITECSR(KSEG1ADDR(port+R_MAC_ETHERNET_ADDR), sbmac_orig_hwaddr[idx] );
- free_netdev(dev);
- dev_sbmac[idx] = NULL;
}
}
diff --git a/drivers/net/sgiseeq.c b/drivers/net/sgiseeq.c
index 203e4c2eb000..6235a8db0209 100644
--- a/drivers/net/sgiseeq.c
+++ b/drivers/net/sgiseeq.c
@@ -600,6 +600,7 @@ int sgiseeq_init(struct hpc3_regs* regs, int irq)
{
struct net_device *dev;
struct sgiseeq_private *sp;
+ int err = -ENOMEM;
int i;
sp = (struct sgiseeq_private *) get_zeroed_page(GFP_KERNEL);
@@ -609,19 +610,17 @@ int sgiseeq_init(struct hpc3_regs* regs, int irq)
return -ENOMEM;
}
- dev = init_etherdev(NULL, 0);
+ dev = alloc_etherdev(0);
if (!dev) {
printk (KERN_ERR
"Seeq8003: Could not allocate memory for device.\n");
- free_page((unsigned long) sp);
- return -ENOMEM;
+ goto out;
}
if (request_irq(irq, sgiseeq_interrupt, 0, sgiseeqstr, dev)) {
- printk(KERN_ERR "Seeq8003: Can't get irq %d\n", dev->irq);
- free_page((unsigned long) sp);
- unregister_netdev(dev);
- return -EAGAIN;
+ printk(KERN_ERR "Seeq8003: Can't get irq %d\n", irq);
+ err = -EAGAIN;
+ goto out1;
}
printk(KERN_INFO "%s: SGI Seeq8003 ", dev->name);
@@ -637,6 +636,8 @@ int sgiseeq_init(struct hpc3_regs* regs, int irq)
}
printk("\n");
+ SET_MODULE_OWNER(dev);
+
dev->priv = sp;
#ifdef DEBUG
gpriv = sp;
@@ -677,12 +678,22 @@ int sgiseeq_init(struct hpc3_regs* regs, int irq)
dev->set_multicast_list = sgiseeq_set_multicast;
dev->irq = irq;
dev->dma = 0;
- ether_setup(dev);
+
+ err = register_netdev(dev);
+ if (err)
+ goto out2;
sp->next_module = root_sgiseeq_dev;
root_sgiseeq_dev = dev;
return 0;
+out2:
+ free_irq(dev->irq, dev);
+out1:
+ free_netdev(dev);
+out:
+ free_page((unsigned long) sp);
+ return err;
}
static int __init sgiseeq_probe(void)
@@ -701,9 +712,9 @@ static void __exit sgiseeq_exit(void)
while (dev) {
sp = (struct sgiseeq_private *) dev->priv;
next = sp->next_module;
+ unregister_netdev(dev);
free_irq(dev->irq, dev);
free_page((unsigned long) sp);
- unregister_netdev(dev);
free_netdev(dev);
dev = next;
}
diff --git a/drivers/net/stnic.c b/drivers/net/stnic.c
index 3b8cbb3a22ce..de00fe55796c 100644
--- a/drivers/net/stnic.c
+++ b/drivers/net/stnic.c
@@ -98,26 +98,27 @@ STNIC_WRITE (int reg, byte val)
STNIC_DELAY ();
}
-int __init stnic_probe(void)
+static int __init stnic_probe(void)
{
struct net_device *dev;
- int i;
+ int i, err;
/* If we are not running on a SolutionEngine, give up now */
if (! MACH_SE)
return -ENODEV;
/* New style probing API */
- dev = init_etherdev (NULL, 0);
+ dev = alloc_etherdev(0);
if (!dev)
return -ENOMEM;
SET_MODULE_OWNER(dev);
- stnic_dev = dev;
+ dev->priv = NULL;
/* Allocate dev->priv and fill in 8390 specific dev fields. */
if (ethdev_init (dev))
{
printk (KERN_EMERG "Unable to get memory for dev->priv.\n");
+ free_netdev(dev);
return -ENOMEM;
}
@@ -135,13 +136,12 @@ int __init stnic_probe(void)
/* Snarf the interrupt now. There's no point in waiting since we cannot
share and the board will usually be enabled. */
- i = request_irq (dev->irq, ei_interrupt, 0, dev->name, dev);
- if (i) {
+ err = request_irq (dev->irq, ei_interrupt, 0, dev->name, dev);
+ if (err) {
printk (KERN_EMERG " unable to get IRQ %d.\n", dev->irq);
- unregister_netdev(dev);
kfree(dev->priv);
- kfree(dev);
- return i;
+ free_netdev(dev);
+ return err;
}
ei_status.name = dev->name;
@@ -162,6 +162,15 @@ int __init stnic_probe(void)
stnic_init (dev);
+ err = register_netdev(dev);
+ if (err) {
+ free_irq(dev->irq, dev);
+ kfree(dev->priv);
+ free_netdev(dev);
+ return err;
+ }
+ stnic_dev = dev;
+
printk (KERN_INFO "NS ST-NIC 83902A\n");
return 0;
@@ -305,15 +314,14 @@ stnic_init (struct net_device *dev)
return;
}
-/* Hardware interrupt handler. */
-irqreturn_t ei_interrupt (int irq, void *dev_id, struct pt_regs *regs);
-
-irqreturn_t
-do_stnic_intr (int irq, void *dev_id, struct pt_regs *regs)
+static void __exit stnic_cleanup(void)
{
- return ei_interrupt (0, stnic_dev, regs);
+ unregister_netdev(stnic_dev);
+ free_irq(stnic_dev->irq, stnic_dev);
+ kfree(stnic_dev->priv);
+ free_netdev(stnic_dev);
}
module_init(stnic_probe);
-/* No cleanup routine. */
+module_exit(stnic_cleanup);
MODULE_LICENSE("GPL");
diff --git a/drivers/net/tc35815.c b/drivers/net/tc35815.c
index 934f348e3e25..d7be1469eeca 100644
--- a/drivers/net/tc35815.c
+++ b/drivers/net/tc35815.c
@@ -463,7 +463,6 @@ static void tc35815_set_multicast_list(struct net_device *dev);
static void tc35815_chip_reset(struct net_device *dev);
static void tc35815_chip_init(struct net_device *dev);
static void tc35815_phy_chip_init(struct net_device *dev);
-static int tc35815_proc_info(char *buffer, char **start, off_t offset, int length, int *eof, void *data);
/* A list of all installed tc35815 devices. */
static struct net_device *root_tc35815_dev = NULL;
@@ -482,78 +481,76 @@ int
tc35815_probe(struct pci_dev *pdev,
const struct pci_device_id *ent)
{
- static int called = 0;
int err = 0;
int ret;
+ unsigned long pci_memaddr;
+ unsigned int pci_irq_line;
- if (called)
- return -ENODEV;
- called++;
+ printk(KERN_INFO "tc35815_probe: found device %#08x.%#08x\n", ent->vendor, ent->device);
- if (pdev) {
- unsigned int pci_memaddr;
- unsigned int pci_irq_line;
+ err = pci_enable_device(pdev);
+ if (err)
+ return err;
- printk(KERN_INFO "tc35815_probe: found device %#08x.%#08x\n", ent->vendor, ent->device);
+ pci_memaddr = pci_resource_start (pdev, 1);
- pci_memaddr = pci_resource_start (pdev, 1);
+ printk(KERN_INFO " pci_memaddr=%#08lx resource_flags=%#08lx\n", pci_memaddr, pci_resource_flags (pdev, 0));
- printk(KERN_INFO " pci_memaddr=%#08lx resource_flags=%#08lx\n", pci_memaddr, pci_resource_flags (pdev, 0));
+ if (!pci_memaddr) {
+ printk(KERN_WARNING "no PCI MEM resources, aborting\n");
+ ret = -ENODEV;
+ goto err_out;
+ }
+ pci_irq_line = pdev->irq;
+ /* irq disabled. */
+ if (pci_irq_line == 0) {
+ printk(KERN_WARNING "no PCI irq, aborting\n");
+ ret = -ENODEV;
+ goto err_out;
+ }
- if (!pci_memaddr) {
- printk(KERN_WARNING "no PCI MEM resources, aborting\n");
- return -ENODEV;
- }
- pci_irq_line = pdev->irq;
- /* irq disabled. */
- if (pci_irq_line == 0) {
- printk(KERN_WARNING "no PCI irq, aborting\n");
- return -ENODEV;
- }
+ ret = tc35815_probe1(pdev, pci_memaddr, pci_irq_line);
+ if (ret)
+ goto err_out;
- ret = tc35815_probe1(pdev, pci_memaddr, pci_irq_line);
+ pci_set_master(pdev);
- if (!ret) {
- if ((err = pci_enable_device(pdev)) < 0) {
- printk(KERN_ERR "tc35815_probe: failed to enable device -- err=%d\n", err);
- return err;
- }
- pci_set_master(pdev);
- }
+ return 0;
- return ret;
- }
- return -ENODEV;
+err_out:
+ pci_disable_device(pdev);
+ return ret;
}
static int __devinit tc35815_probe1(struct pci_dev *pdev, unsigned int base_addr, unsigned int irq)
{
static unsigned version_printed = 0;
- int i;
+ int i, ret;
struct tc35815_local *lp;
struct tc35815_regs *tr;
struct net_device *dev;
/* Allocate a new 'dev' if needed. */
- dev = init_etherdev(NULL, sizeof(struct tc35815_local));
+ dev = alloc_etherdev(sizeof(struct tc35815_local));
if (dev == NULL)
return -ENOMEM;
/*
- * init_etherdev allocs and zeros dev->priv
+ * alloc_etherdev allocs and zeros dev->priv
*/
lp = dev->priv;
if (tc35815_debug && version_printed++ == 0)
printk(KERN_DEBUG "%s", version);
- printk(KERN_INFO "%s: %s found at %#x, irq %d\n",
- dev->name, cardname, base_addr, irq);
-
/* Fill in the 'dev' fields. */
dev->irq = irq;
dev->base_addr = (unsigned long)ioremap(base_addr,
sizeof(struct tc35815_regs));
+ if (!dev->base_addr) {
+ ret = -ENOMEM;
+ goto err_out;
+ }
tr = (struct tc35815_regs*)dev->base_addr;
tc35815_chip_reset(dev);
@@ -570,9 +567,6 @@ static int __devinit tc35815_probe1(struct pci_dev *pdev, unsigned int base_addr
dev->dev_addr[i] = data & 0xff;
dev->dev_addr[i+1] = data >> 8;
}
- for (i = 0; i < 6; i++)
- printk(" %2.2x", dev->dev_addr[i]);
- printk("\n");
/* Initialize the device structure. */
lp->pdev = pdev;
@@ -594,8 +588,6 @@ static int __devinit tc35815_probe1(struct pci_dev *pdev, unsigned int base_addr
/* do auto negotiation */
tc35815_phy_chip_init(dev);
- printk(KERN_INFO "%s: linkspeed %dMbps, %s Duplex\n",
- dev->name, lp->linkspeed, lp->fullduplex ? "Full" : "Half");
dev->open = tc35815_open;
dev->stop = tc35815_close;
@@ -604,20 +596,34 @@ static int __devinit tc35815_probe1(struct pci_dev *pdev, unsigned int base_addr
dev->hard_start_xmit = tc35815_send_packet;
dev->get_stats = tc35815_get_stats;
dev->set_multicast_list = tc35815_set_multicast_list;
+ SET_MODULE_OWNER(dev);
-#if 0 /* XXX called in init_etherdev */
- /* Fill in the fields of the device structure with ethernet values. */
- ether_setup(dev);
-#endif
+ ret = register_netdev(dev);
+ if (ret)
+ goto err_out_iounmap;
+
+ printk(KERN_INFO "%s: %s found at %#x, irq %d, MAC",
+ dev->name, cardname, base_addr, irq);
+ for (i = 0; i < 6; i++)
+ printk(" %2.2x", dev->dev_addr[i]);
+ printk("\n");
+ printk(KERN_INFO "%s: linkspeed %dMbps, %s Duplex\n",
+ dev->name, lp->linkspeed, lp->fullduplex ? "Full" : "Half");
return 0;
+
+err_out_iounmap:
+ iounmap((void *) dev->base_addr);
+err_out:
+ free_netdev(dev);
+ return ret;
}
static int
tc35815_init_queues(struct net_device *dev)
{
- struct tc35815_local *lp = (struct tc35815_local *)dev->priv;
+ struct tc35815_local *lp = dev->priv;
int i;
unsigned long fd_addr;
@@ -702,7 +708,7 @@ tc35815_init_queues(struct net_device *dev)
static void
tc35815_clear_queues(struct net_device *dev)
{
- struct tc35815_local *lp = (struct tc35815_local *)dev->priv;
+ struct tc35815_local *lp = dev->priv;
int i;
for (i = 0; i < TX_FD_NUM; i++) {
@@ -719,7 +725,7 @@ tc35815_clear_queues(struct net_device *dev)
static void
tc35815_free_queues(struct net_device *dev)
{
- struct tc35815_local *lp = (struct tc35815_local *)dev->priv;
+ struct tc35815_local *lp = dev->priv;
int i;
if (lp->tfd_base) {
@@ -805,7 +811,7 @@ dump_frfd(struct FrFD *fd)
static void
panic_queues(struct net_device *dev)
{
- struct tc35815_local *lp = (struct tc35815_local *)dev->priv;
+ struct tc35815_local *lp = dev->priv;
int i;
printk("TxFD base %p, start %d, end %d\n",
@@ -823,6 +829,7 @@ panic_queues(struct net_device *dev)
panic("%s: Illegal queue state.", dev->name);
}
+#if 0
static void print_buf(char *add, int length)
{
int i;
@@ -839,6 +846,7 @@ static void print_buf(char *add, int length)
}
printk("\n");
}
+#endif
static void print_eth(char *add)
{
@@ -864,7 +872,7 @@ static void print_eth(char *add)
static int
tc35815_open(struct net_device *dev)
{
- struct tc35815_local *lp = (struct tc35815_local *)dev->priv;
+ struct tc35815_local *lp = dev->priv;
/*
* This is used if the interrupt line can turned off (shared).
* See 3c503.c for an example of selecting the IRQ at config-time.
@@ -888,19 +896,17 @@ tc35815_open(struct net_device *dev)
lp->tbusy = 0;
netif_start_queue(dev);
- MOD_INC_USE_COUNT;
-
return 0;
}
static void tc35815_tx_timeout(struct net_device *dev)
{
- struct tc35815_local *lp = (struct tc35815_local *)dev->priv;
+ struct tc35815_local *lp = dev->priv;
struct tc35815_regs *tr = (struct tc35815_regs *)dev->base_addr;
- int flags;
+ unsigned long flags;
spin_lock_irqsave(&lp->lock, flags);
- printk(KERN_WARNING "%s: transmit timed out, status %#x\n",
+ printk(KERN_WARNING "%s: transmit timed out, status %#lx\n",
dev->name, tc_readl(&tr->Tx_Stat));
/* Try to restart the adaptor. */
tc35815_chip_reset(dev);
@@ -914,7 +920,7 @@ static void tc35815_tx_timeout(struct net_device *dev)
static int tc35815_send_packet(struct sk_buff *skb, struct net_device *dev)
{
- struct tc35815_local *lp = (struct tc35815_local *)dev->priv;
+ struct tc35815_local *lp = dev->priv;
struct tc35815_regs *tr = (struct tc35815_regs *)dev->base_addr;
if (netif_queue_stopped(dev)) {
@@ -925,7 +931,7 @@ static int tc35815_send_packet(struct sk_buff *skb, struct net_device *dev)
int tickssofar = jiffies - dev->trans_start;
if (tickssofar < 5)
return 1;
- printk(KERN_WARNING "%s: transmit timed out, status %#x\n",
+ printk(KERN_WARNING "%s: transmit timed out, status %#lx\n",
dev->name, tc_readl(&tr->Tx_Stat));
/* Try to restart the adaptor. */
tc35815_chip_reset(dev);
@@ -947,7 +953,7 @@ static int tc35815_send_packet(struct sk_buff *skb, struct net_device *dev)
short length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN;
unsigned char *buf = skb->data;
struct TxFD *txfd = &lp->tfd_base[lp->tfd_start];
- int flags;
+ unsigned long flags;
lp->stats.tx_bytes += skb->len;
@@ -1051,7 +1057,7 @@ static irqreturn_t tc35815_interrupt(int irq, void *dev_id, struct pt_regs * reg
}
tr = (struct tc35815_regs*)dev->base_addr;
- lp = (struct tc35815_local *)dev->priv;
+ lp = dev->priv;
do {
status = tc_readl(&tr->Int_Src);
@@ -1107,7 +1113,7 @@ static irqreturn_t tc35815_interrupt(int irq, void *dev_id, struct pt_regs * reg
static void
tc35815_rx(struct net_device *dev)
{
- struct tc35815_local *lp = (struct tc35815_local *)dev->priv;
+ struct tc35815_local *lp = dev->priv;
struct tc35815_regs *tr = (struct tc35815_regs*)dev->base_addr;
unsigned int fdctl;
int i;
@@ -1157,7 +1163,9 @@ tc35815_rx(struct net_device *dev)
offset += len;
cur_bd++;
}
- // print_buf(data,pkt_len);
+#if 0
+ print_buf(data,pkt_len);
+#endif
if (tc35815_debug > 3)
print_eth(data);
skb->protocol = eth_type_trans(skb, dev);
@@ -1247,7 +1255,7 @@ tc35815_rx(struct net_device *dev)
static void
tc35815_check_tx_stat(struct net_device *dev, int status)
{
- struct tc35815_local *lp = (struct tc35815_local *)dev->priv;
+ struct tc35815_local *lp = dev->priv;
const char *msg = NULL;
/* count collisions */
@@ -1304,7 +1312,7 @@ tc35815_check_tx_stat(struct net_device *dev, int status)
static void
tc35815_txdone(struct net_device *dev)
{
- struct tc35815_local *lp = (struct tc35815_local *)dev->priv;
+ struct tc35815_local *lp = dev->priv;
struct tc35815_regs *tr = (struct tc35815_regs*)dev->base_addr;
struct TxFD *txfd;
unsigned int fdctl;
@@ -1379,7 +1387,7 @@ tc35815_txdone(struct net_device *dev)
static int
tc35815_close(struct net_device *dev)
{
- struct tc35815_local *lp = (struct tc35815_local *)dev->priv;
+ struct tc35815_local *lp = dev->priv;
lp->tbusy = 1;
netif_stop_queue(dev);
@@ -1391,8 +1399,6 @@ tc35815_close(struct net_device *dev)
tc35815_free_queues(dev);
- MOD_DEC_USE_COUNT;
-
return 0;
}
@@ -1402,7 +1408,7 @@ tc35815_close(struct net_device *dev)
*/
static struct net_device_stats *tc35815_get_stats(struct net_device *dev)
{
- struct tc35815_local *lp = (struct tc35815_local *)dev->priv;
+ struct tc35815_local *lp = dev->priv;
struct tc35815_regs *tr = (struct tc35815_regs*)dev->base_addr;
unsigned long flags;
@@ -1456,7 +1462,7 @@ static void tc35815_set_cam_entry(struct tc35815_regs *tr, int index, unsigned c
int i;
for (i = cam_index / 4; i < cam_index / 4 + 2; i++) {
tc_writel(i * 4, &tr->CAM_Adr);
- printk("CAM 0x%x: %08x",
+ printk("CAM 0x%x: %08lx",
i * 4, tc_readl(&tr->CAM_Data));
}
}
@@ -1513,9 +1519,9 @@ tc35815_set_multicast_list(struct net_device *dev)
static unsigned long tc_phy_read(struct net_device *dev, struct tc35815_regs *tr, int phy, int phy_reg)
{
- struct tc35815_local *lp = (struct tc35815_local *)dev->priv;
+ struct tc35815_local *lp = dev->priv;
unsigned long data;
- int flags;
+ unsigned long flags;
spin_lock_irqsave(&lp->lock, flags);
@@ -1529,8 +1535,8 @@ static unsigned long tc_phy_read(struct net_device *dev, struct tc35815_regs *tr
static void tc_phy_write(struct net_device *dev, unsigned long d, struct tc35815_regs *tr, int phy, int phy_reg)
{
- struct tc35815_local *lp = (struct tc35815_local *)dev->priv;
- int flags;
+ struct tc35815_local *lp = dev->priv;
+ unsigned long flags;
spin_lock_irqsave(&lp->lock, flags);
@@ -1543,7 +1549,7 @@ static void tc_phy_write(struct net_device *dev, unsigned long d, struct tc35815
static void tc35815_phy_chip_init(struct net_device *dev)
{
- struct tc35815_local *lp = (struct tc35815_local *)dev->priv;
+ struct tc35815_local *lp = dev->priv;
struct tc35815_regs *tr = (struct tc35815_regs*)dev->base_addr;
static int first = 1;
unsigned short ctl;
@@ -1648,9 +1654,9 @@ static void tc35815_chip_reset(struct net_device *dev)
static void tc35815_chip_init(struct net_device *dev)
{
- struct tc35815_local *lp = (struct tc35815_local *)dev->priv;
+ struct tc35815_local *lp = dev->priv;
struct tc35815_regs *tr = (struct tc35815_regs*)dev->base_addr;
- int flags;
+ unsigned long flags;
unsigned long txctl = TX_CTL_CMD;
tc35815_phy_chip_init(dev);
@@ -1696,40 +1702,6 @@ static void tc35815_chip_init(struct net_device *dev)
spin_unlock_irqrestore(&lp->lock, flags);
}
-static int tc35815_proc_info(char *buffer, char **start, off_t offset, int length, int *eof, void *data)
-{
- int len = 0;
- off_t pos = 0;
- off_t begin = 0;
- struct net_device *dev;
-
- len += sprintf(buffer, "TC35815 statistics:\n");
- for (dev = root_tc35815_dev; dev; dev = ((struct tc35815_local *)dev->priv)->next_module) {
- struct tc35815_local *lp = (struct tc35815_local *)dev->priv;
- len += sprintf(buffer + len,
- "%s: tx_ints %d, rx_ints %d, max_tx_qlen %d\n",
- dev->name,
- lp->lstats.tx_ints,
- lp->lstats.rx_ints,
- lp->lstats.max_tx_qlen);
- pos = begin + len;
-
- if (pos < offset) {
- len = 0;
- begin = pos;
- }
-
- if (pos > offset+length) break;
- }
-
- *start = buffer + (offset - begin);
- len -= (offset - begin);
-
- if (len > length) len = length;
-
- return len;
-}
-
/* XXX */
void
tc35815_killall(void)
diff --git a/drivers/net/tokenring/3c359.c b/drivers/net/tokenring/3c359.c
index c97573aa5513..8a2e3c21a703 100644
--- a/drivers/net/tokenring/3c359.c
+++ b/drivers/net/tokenring/3c359.c
@@ -332,7 +332,7 @@ int __devinit xl_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
if((i = xl_init(dev))) {
iounmap(xl_priv->xl_mmio) ;
- kfree(dev) ;
+ free_netdev(dev) ;
pci_release_regions(pdev) ;
return i ;
}
@@ -352,7 +352,7 @@ int __devinit xl_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
printk(KERN_ERR "3C359, register netdev failed\n") ;
pci_set_drvdata(pdev,NULL) ;
iounmap(xl_priv->xl_mmio) ;
- kfree(dev) ;
+ free_netdev(dev) ;
pci_release_regions(pdev) ;
return i ;
}
diff --git a/drivers/net/tokenring/abyss.c b/drivers/net/tokenring/abyss.c
index 5f2c6fd5cf0f..af510325ddd6 100644
--- a/drivers/net/tokenring/abyss.c
+++ b/drivers/net/tokenring/abyss.c
@@ -181,7 +181,7 @@ err_out_irq:
err_out_region:
release_region(pci_ioaddr, ABYSS_IO_EXTENT);
err_out_trdev:
- kfree(dev);
+ free_netdev(dev);
return ret;
}
diff --git a/drivers/net/tokenring/madgemc.c b/drivers/net/tokenring/madgemc.c
index ac6552d58ccd..ddbd3e2493f6 100644
--- a/drivers/net/tokenring/madgemc.c
+++ b/drivers/net/tokenring/madgemc.c
@@ -197,7 +197,7 @@ static int __init madgemc_probe(void)
card = kmalloc(sizeof(struct madgemc_card), GFP_KERNEL);
if (card==NULL) {
printk("madgemc: unable to allocate card struct\n");
- kfree(dev);
+ free_netdev(dev);
if (madgemc_card_list)
return 0;
return -1;
@@ -360,7 +360,7 @@ static int __init madgemc_probe(void)
kfree(card);
tmsdev_term(dev);
- kfree(dev);
+ free_netdev(dev);
if (madgemc_card_list)
return 0;
return -1;
@@ -399,7 +399,7 @@ static int __init madgemc_probe(void)
MADGEMC_IO_EXTENT);
getout1:
kfree(card);
- kfree(dev);
+ free_netdev(dev);
slot++;
}
diff --git a/drivers/net/tokenring/tmspci.c b/drivers/net/tokenring/tmspci.c
index 7ce6044e85ce..56dfea69b2f9 100644
--- a/drivers/net/tokenring/tmspci.c
+++ b/drivers/net/tokenring/tmspci.c
@@ -179,7 +179,7 @@ err_out_irq:
err_out_region:
release_region(pci_ioaddr, TMS_PCI_IO_EXTENT);
err_out_trdev:
- kfree(dev);
+ free_netdev(dev);
return ret;
}
diff --git a/drivers/net/tulip/de2104x.c b/drivers/net/tulip/de2104x.c
index d0cf6fe569b9..8c454f363f55 100644
--- a/drivers/net/tulip/de2104x.c
+++ b/drivers/net/tulip/de2104x.c
@@ -2084,7 +2084,7 @@ err_out_res:
err_out_disable:
pci_disable_device(pdev);
err_out_free:
- kfree(dev);
+ free_netdev(dev);
return rc;
}
diff --git a/drivers/net/tulip/dmfe.c b/drivers/net/tulip/dmfe.c
index 0b0143b402e2..402d69ca3135 100644
--- a/drivers/net/tulip/dmfe.c
+++ b/drivers/net/tulip/dmfe.c
@@ -457,7 +457,7 @@ err_out_disable:
pci_disable_device(pdev);
err_out_free:
pci_set_drvdata(pdev, NULL);
- kfree(dev);
+ free_netdev(dev);
return err;
}
diff --git a/drivers/net/tulip/tulip_core.c b/drivers/net/tulip/tulip_core.c
index fe866a3dd99f..243b4233af08 100644
--- a/drivers/net/tulip/tulip_core.c
+++ b/drivers/net/tulip/tulip_core.c
@@ -1725,7 +1725,7 @@ err_out_free_res:
pci_release_regions (pdev);
err_out_free_netdev:
- kfree (dev);
+ free_netdev (dev);
return -ENODEV;
}
diff --git a/drivers/net/tulip/winbond-840.c b/drivers/net/tulip/winbond-840.c
index 76056f5ae671..4bcfbd6b46c7 100644
--- a/drivers/net/tulip/winbond-840.c
+++ b/drivers/net/tulip/winbond-840.c
@@ -530,7 +530,7 @@ err_out_free_res:
#endif
pci_release_regions(pdev);
err_out_netdev:
- kfree (dev);
+ free_netdev (dev);
return -ENODEV;
}
diff --git a/drivers/net/tulip/xircom_tulip_cb.c b/drivers/net/tulip/xircom_tulip_cb.c
index 04577943733a..5e8ea0513c99 100644
--- a/drivers/net/tulip/xircom_tulip_cb.c
+++ b/drivers/net/tulip/xircom_tulip_cb.c
@@ -648,8 +648,7 @@ err_out_cleardev:
pci_set_drvdata(pdev, NULL);
pci_release_regions(pdev);
err_out_free_netdev:
- unregister_netdev(dev);
- kfree(dev);
+ free_netdev(dev);
return -ENODEV;
}
diff --git a/drivers/net/wan/x25_asy.c b/drivers/net/wan/x25_asy.c
index 3825f880de32..7a948183232f 100644
--- a/drivers/net/wan/x25_asy.c
+++ b/drivers/net/wan/x25_asy.c
@@ -94,7 +94,7 @@ static struct x25_asy *x25_asy_alloc(void)
return sl;
} else {
printk("x25_asy_alloc() - register_netdev() failure.\n");
- kfree(dev);
+ free_netdev(dev);
}
}
return NULL;
diff --git a/drivers/net/wireless/strip.c b/drivers/net/wireless/strip.c
index 57463d81c457..711de798a57a 100644
--- a/drivers/net/wireless/strip.c
+++ b/drivers/net/wireless/strip.c
@@ -2564,7 +2564,7 @@ static void strip_free(struct strip *strip_info)
strip_info->magic = 0;
- kfree(strip_info->dev);
+ free_netdev(strip_info->dev);
}
diff --git a/drivers/net/wireless/wavelan.c b/drivers/net/wireless/wavelan.c
index ecac6dc0bb98..1cbd34ba5638 100644
--- a/drivers/net/wireless/wavelan.c
+++ b/drivers/net/wireless/wavelan.c
@@ -153,7 +153,7 @@ static inline void wv_16_on(unsigned long ioaddr, u16 hacr)
* Disable interrupts on the WaveLAN hardware.
* (called by wv_82586_stop())
*/
-static inline void wv_ints_off(device * dev)
+static inline void wv_ints_off(struct net_device * dev)
{
net_local *lp = (net_local *) dev->priv;
unsigned long ioaddr = dev->base_addr;
@@ -167,7 +167,7 @@ static inline void wv_ints_off(device * dev)
* Enable interrupts on the WaveLAN hardware.
* (called by wv_hw_reset())
*/
-static inline void wv_ints_on(device * dev)
+static inline void wv_ints_on(struct net_device * dev)
{
net_local *lp = (net_local *) dev->priv;
unsigned long ioaddr = dev->base_addr;
@@ -268,7 +268,7 @@ static inline u16 psa_crc(u8 * psa, /* The PSA */
/*
* update the checksum field in the Wavelan's PSA
*/
-static void update_psa_checksum(device * dev, unsigned long ioaddr, u16 hacr)
+static void update_psa_checksum(struct net_device * dev, unsigned long ioaddr, u16 hacr)
{
#ifdef SET_PSA_CRC
psa_t psa;
@@ -547,7 +547,7 @@ static inline void obram_write(unsigned long ioaddr, u16 o, u8 * b, int n)
/*
* Acknowledge the reading of the status issued by the i82586.
*/
-static void wv_ack(device * dev)
+static void wv_ack(struct net_device * dev)
{
net_local *lp = (net_local *) dev->priv;
unsigned long ioaddr = dev->base_addr;
@@ -589,7 +589,7 @@ static void wv_ack(device * dev)
* Set channel attention bit and busy wait until command has
* completed, then acknowledge completion of the command.
*/
-static inline int wv_synchronous_cmd(device * dev, const char *str)
+static inline int wv_synchronous_cmd(struct net_device * dev, const char *str)
{
net_local *lp = (net_local *) dev->priv;
unsigned long ioaddr = dev->base_addr;
@@ -636,7 +636,7 @@ static inline int wv_synchronous_cmd(device * dev, const char *str)
* Check if done, and if OK.
*/
static inline int
-wv_config_complete(device * dev, unsigned long ioaddr, net_local * lp)
+wv_config_complete(struct net_device * dev, unsigned long ioaddr, net_local * lp)
{
unsigned short mcs_addr;
unsigned short status;
@@ -703,7 +703,7 @@ wv_config_complete(device * dev, unsigned long ioaddr, net_local * lp)
* (called in wavelan_interrupt()).
* Note : the spinlock is already grabbed for us.
*/
-static int wv_complete(device * dev, unsigned long ioaddr, net_local * lp)
+static int wv_complete(struct net_device * dev, unsigned long ioaddr, net_local * lp)
{
int nreaped = 0;
@@ -845,7 +845,7 @@ if (lp->tx_n_in_use > 0)
* wavelan_interrupt is not an option), so you may experience
* delays sometimes.
*/
-static inline void wv_82586_reconfig(device * dev)
+static inline void wv_82586_reconfig(struct net_device * dev)
{
net_local *lp = (net_local *) dev->priv;
unsigned long flags;
@@ -954,7 +954,7 @@ static void wv_psa_show(psa_t * p)
* Print the formatted status of the Modem Management Controller.
* This function needs to be completed.
*/
-static void wv_mmc_show(device * dev)
+static void wv_mmc_show(struct net_device * dev)
{
unsigned long ioaddr = dev->base_addr;
net_local *lp = (net_local *) dev->priv;
@@ -1137,7 +1137,7 @@ static void wv_scb_show(unsigned long ioaddr)
/*
* Print the formatted status of the i82586's receive unit.
*/
-static void wv_ru_show(device * dev)
+static void wv_ru_show(struct net_device * dev)
{
/* net_local *lp = (net_local *) dev->priv; */
@@ -1154,7 +1154,7 @@ static void wv_ru_show(device * dev)
/*
* Display info about one control block of the i82586 memory.
*/
-static void wv_cu_show_one(device * dev, net_local * lp, int i, u16 p)
+static void wv_cu_show_one(struct net_device * dev, net_local * lp, int i, u16 p)
{
unsigned long ioaddr;
ac_tx_t actx;
@@ -1183,7 +1183,7 @@ static void wv_cu_show_one(device * dev, net_local * lp, int i, u16 p)
/*
* Print status of the command unit of the i82586.
*/
-static void wv_cu_show(device * dev)
+static void wv_cu_show(struct net_device * dev)
{
net_local *lp = (net_local *) dev->priv;
unsigned int i;
@@ -1209,7 +1209,7 @@ static void wv_cu_show(device * dev)
/*
* Print the formatted status of the WaveLAN PCMCIA device driver.
*/
-static void wv_dev_show(device * dev)
+static void wv_dev_show(struct net_device * dev)
{
printk(KERN_DEBUG "dev:");
printk(" state=%lX,", dev->state);
@@ -1223,7 +1223,7 @@ static void wv_dev_show(device * dev)
* Print the formatted status of the WaveLAN PCMCIA device driver's
* private information.
*/
-static void wv_local_show(device * dev)
+static void wv_local_show(struct net_device * dev)
{
net_local *lp;
@@ -1285,7 +1285,7 @@ static inline void wv_packet_info(u8 * p, /* Packet to dump */
* This is the information which is displayed by the driver at startup.
* There are lots of flags for configuring it to your liking.
*/
-static inline void wv_init_info(device * dev)
+static inline void wv_init_info(struct net_device * dev)
{
short ioaddr = dev->base_addr;
net_local *lp = (net_local *) dev->priv;
@@ -1395,7 +1395,7 @@ static inline void wv_init_info(device * dev)
* card open or closed.
* Used when the user read /proc/net/dev
*/
-static en_stats *wavelan_get_stats(device * dev)
+static en_stats *wavelan_get_stats(struct net_device * dev)
{
#ifdef DEBUG_IOCTL_TRACE
printk(KERN_DEBUG "%s: <>wavelan_get_stats()\n", dev->name);
@@ -1412,7 +1412,7 @@ static en_stats *wavelan_get_stats(device * dev)
* num_addrs > 0 Multicast mode, receive normal and MC packets,
* and do best-effort filtering.
*/
-static void wavelan_set_multicast_list(device * dev)
+static void wavelan_set_multicast_list(struct net_device * dev)
{
net_local *lp = (net_local *) dev->priv;
@@ -1485,7 +1485,7 @@ static void wavelan_set_multicast_list(device * dev)
* (Note : it was a nice way to test the reconfigure stuff...)
*/
#ifdef SET_MAC_ADDRESS
-static int wavelan_set_mac_address(device * dev, void *addr)
+static int wavelan_set_mac_address(struct net_device * dev, void *addr)
{
struct sockaddr *mac = addr;
@@ -1724,7 +1724,7 @@ static inline int wv_frequency_list(unsigned long ioaddr, /* I/O port of the car
* address with our list, and if they match, get the statistics.
* Sorry, but this function really needs the wireless extensions.
*/
-static inline void wl_spy_gather(device * dev,
+static inline void wl_spy_gather(struct net_device * dev,
u8 * mac, /* MAC address */
u8 * stats) /* Statistics to gather */
{
@@ -1750,7 +1750,7 @@ static inline void wl_spy_gather(device * dev,
* With this histogram you may detect if one WaveLAN is really weak,
* or you may also calculate the mean and standard deviation of the level.
*/
-static inline void wl_his_gather(device * dev, u8 * stats)
+static inline void wl_his_gather(struct net_device * dev, u8 * stats)
{ /* Statistics to gather */
net_local *lp = (net_local *) dev->priv;
u8 level = stats[0] & MMR_SIGNAL_LVL;
@@ -2415,7 +2415,7 @@ static const struct iw_handler_def wavelan_handler_def =
* Get wireless statistics.
* Called by /proc/net/wireless
*/
-static iw_stats *wavelan_get_wireless_stats(device * dev)
+static iw_stats *wavelan_get_wireless_stats(struct net_device * dev)
{
unsigned long ioaddr = dev->base_addr;
net_local *lp = (net_local *) dev->priv;
@@ -2492,7 +2492,7 @@ static iw_stats *wavelan_get_wireless_stats(device * dev)
* (called by wv_packet_rcv())
*/
static inline void
-wv_packet_read(device * dev, u16 buf_off, int sksize)
+wv_packet_read(struct net_device * dev, u16 buf_off, int sksize)
{
net_local *lp = (net_local *) dev->priv;
unsigned long ioaddr = dev->base_addr;
@@ -2587,7 +2587,7 @@ wv_packet_read(device * dev, u16 buf_off, int sksize)
* (called in wavelan_interrupt()).
* Note : the spinlock is already grabbed for us.
*/
-static inline void wv_receive(device * dev)
+static inline void wv_receive(struct net_device * dev)
{
unsigned long ioaddr = dev->base_addr;
net_local *lp = (net_local *) dev->priv;
@@ -2770,7 +2770,7 @@ static inline void wv_receive(device * dev)
*
* (called in wavelan_packet_xmit())
*/
-static inline int wv_packet_write(device * dev, void *buf, short length)
+static inline int wv_packet_write(struct net_device * dev, void *buf, short length)
{
net_local *lp = (net_local *) dev->priv;
unsigned long ioaddr = dev->base_addr;
@@ -2901,7 +2901,7 @@ static inline int wv_packet_write(device * dev, void *buf, short length)
* the packet. We also prevent reentrance. Then we call the function
* to send the packet.
*/
-static int wavelan_packet_xmit(struct sk_buff *skb, device * dev)
+static int wavelan_packet_xmit(struct sk_buff *skb, struct net_device * dev)
{
net_local *lp = (net_local *) dev->priv;
unsigned long flags;
@@ -2966,7 +2966,7 @@ static int wavelan_packet_xmit(struct sk_buff *skb, device * dev)
* Routine to initialize the Modem Management Controller.
* (called by wv_hw_reset())
*/
-static inline int wv_mmc_init(device * dev)
+static inline int wv_mmc_init(struct net_device * dev)
{
unsigned long ioaddr = dev->base_addr;
net_local *lp = (net_local *) dev->priv;
@@ -3138,7 +3138,7 @@ static inline int wv_mmc_init(device * dev)
* Start the receive unit.
* (called by wv_hw_reset())
*/
-static inline int wv_ru_start(device * dev)
+static inline int wv_ru_start(struct net_device * dev)
{
net_local *lp = (net_local *) dev->priv;
unsigned long ioaddr = dev->base_addr;
@@ -3230,7 +3230,7 @@ static inline int wv_ru_start(device * dev)
*
* (called by wv_hw_reset())
*/
-static inline int wv_cu_start(device * dev)
+static inline int wv_cu_start(struct net_device * dev)
{
net_local *lp = (net_local *) dev->priv;
unsigned long ioaddr = dev->base_addr;
@@ -3331,7 +3331,7 @@ static inline int wv_cu_start(device * dev)
*
* (called by wv_hw_reset())
*/
-static inline int wv_82586_start(device * dev)
+static inline int wv_82586_start(struct net_device * dev)
{
net_local *lp = (net_local *) dev->priv;
unsigned long ioaddr = dev->base_addr;
@@ -3463,7 +3463,7 @@ static inline int wv_82586_start(device * dev)
*
* (called by wv_hw_reset(), wv_82586_reconfig(), wavelan_packet_xmit())
*/
-static void wv_82586_config(device * dev)
+static void wv_82586_config(struct net_device * dev)
{
net_local *lp = (net_local *) dev->priv;
unsigned long ioaddr = dev->base_addr;
@@ -3643,7 +3643,7 @@ static void wv_82586_config(device * dev)
* WaveLAN controller (i82586).
* (called by wavelan_close())
*/
-static inline void wv_82586_stop(device * dev)
+static inline void wv_82586_stop(struct net_device * dev)
{
net_local *lp = (net_local *) dev->priv;
unsigned long ioaddr = dev->base_addr;
@@ -3680,7 +3680,7 @@ static inline void wv_82586_stop(device * dev)
* 5. Start the LAN controller's receive unit
* (called by wavelan_interrupt(), wavelan_watchdog() & wavelan_open())
*/
-static int wv_hw_reset(device * dev)
+static int wv_hw_reset(struct net_device * dev)
{
net_local *lp = (net_local *) dev->priv;
unsigned long ioaddr = dev->base_addr;
@@ -3770,7 +3770,7 @@ static int wv_check_ioaddr(unsigned long ioaddr, u8 * mac)
*/
static irqreturn_t wavelan_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
- device *dev;
+ struct net_device *dev;
unsigned long ioaddr;
net_local *lp;
u16 hasr;
@@ -3923,7 +3923,7 @@ static irqreturn_t wavelan_interrupt(int irq, void *dev_id, struct pt_regs *regs
* kernel. If the transmission completes, this timer is disabled. If
* the timer expires, we are called and we try to unlock the hardware.
*/
-static void wavelan_watchdog(device * dev)
+static void wavelan_watchdog(struct net_device * dev)
{
net_local * lp = (net_local *)dev->priv;
u_long ioaddr = dev->base_addr;
@@ -4003,7 +4003,7 @@ static void wavelan_watchdog(device * dev)
* Configure and start up the WaveLAN PCMCIA adaptor.
* Called by NET3 when it "opens" the device.
*/
-static int wavelan_open(device * dev)
+static int wavelan_open(struct net_device * dev)
{
net_local * lp = (net_local *)dev->priv;
unsigned long flags;
@@ -4058,7 +4058,7 @@ static int wavelan_open(device * dev)
* Shut down the WaveLAN ISA card.
* Called by NET3 when it "closes" the device.
*/
-static int wavelan_close(device * dev)
+static int wavelan_close(struct net_device * dev)
{
net_local *lp = (net_local *) dev->priv;
unsigned long flags;
@@ -4091,7 +4091,7 @@ static int wavelan_close(device * dev)
* device structure
* (called by wavelan_probe() and via init_module()).
*/
-static int __init wavelan_config(device *dev, unsigned short ioaddr)
+static int __init wavelan_config(struct net_device *dev, unsigned short ioaddr)
{
u8 irq_mask;
int irq;
@@ -4293,7 +4293,7 @@ out1:
release_region(dev->base_addr, sizeof(ha_t));
wavelan_list = wavelan_list->next;
out:
- kfree(dev);
+ free_netdev(dev);
return ERR_PTR(r);
}
@@ -4352,7 +4352,7 @@ int init_module(void)
continue;
}
}
- kfree(dev);
+ free_netdev(dev);
}
#ifdef DEBUG_CONFIG_ERROR
@@ -4379,7 +4379,7 @@ void cleanup_module(void)
/* Loop on all devices and release them. */
while (wavelan_list) {
- device *dev = wavelan_list->dev;
+ struct net_device *dev = wavelan_list->dev;
#ifdef DEBUG_CONFIG_INFO
printk(KERN_DEBUG
diff --git a/drivers/net/wireless/wavelan.p.h b/drivers/net/wireless/wavelan.p.h
index 49bfcf7be7f8..d35ac4dd2f78 100644
--- a/drivers/net/wireless/wavelan.p.h
+++ b/drivers/net/wireless/wavelan.p.h
@@ -469,7 +469,6 @@ static const char *version = "wavelan.c : v24 (SMP + wireless extensions) 11/12/
/****************************** TYPES ******************************/
/* Shortcuts */
-typedef struct net_device device;
typedef struct net_device_stats en_stats;
typedef struct iw_statistics iw_stats;
typedef struct iw_quality iw_qual;
@@ -492,7 +491,7 @@ typedef u_char mac_addr[WAVELAN_ADDR_SIZE]; /* Hardware address */
struct net_local
{
net_local * next; /* linked list of the devices */
- device * dev; /* reverse link */
+ struct net_device * dev; /* reverse link */
spinlock_t spinlock; /* Serialize access to the hardware (SMP) */
en_stats stats; /* Ethernet interface statistics */
int nresets; /* number of hardware resets */
@@ -542,8 +541,8 @@ static inline void
u_short), /* hacr */
wv_16_on(u_long, /* ioaddr */
u_short), /* hacr */
- wv_ints_off(device *),
- wv_ints_on(device *);
+ wv_ints_off(struct net_device *),
+ wv_ints_on(struct net_device *);
/* ----------------- MODEM MANAGEMENT SUBROUTINES ----------------- */
static void
psa_read(u_long, /* Read the Parameter Storage Area. */
@@ -592,57 +591,57 @@ static inline void
u_char *, /* b */
int); /* n */
static void
- wv_ack(device *);
+ wv_ack(struct net_device *);
static inline int
- wv_synchronous_cmd(device *,
+ wv_synchronous_cmd(struct net_device *,
const char *),
- wv_config_complete(device *,
+ wv_config_complete(struct net_device *,
u_long,
net_local *);
static int
- wv_complete(device *,
+ wv_complete(struct net_device *,
u_long,
net_local *);
static inline void
- wv_82586_reconfig(device *);
+ wv_82586_reconfig(struct net_device *);
/* ------------------- DEBUG & INFO SUBROUTINES ------------------- */
#ifdef DEBUG_I82586_SHOW
static void
wv_scb_show(unsigned short);
#endif
static inline void
- wv_init_info(device *); /* display startup info */
+ wv_init_info(struct net_device *); /* display startup info */
/* ------------------- IOCTL, STATS & RECONFIG ------------------- */
static en_stats *
- wavelan_get_stats(device *); /* Give stats /proc/net/dev */
+ wavelan_get_stats(struct net_device *); /* Give stats /proc/net/dev */
static void
- wavelan_set_multicast_list(device *);
+ wavelan_set_multicast_list(struct net_device *);
/* ----------------------- PACKET RECEPTION ----------------------- */
static inline void
- wv_packet_read(device *, /* Read a packet from a frame. */
+ wv_packet_read(struct net_device *, /* Read a packet from a frame. */
u_short,
int),
- wv_receive(device *); /* Read all packets waiting. */
+ wv_receive(struct net_device *); /* Read all packets waiting. */
/* --------------------- PACKET TRANSMISSION --------------------- */
static inline int
- wv_packet_write(device *, /* Write a packet to the Tx buffer. */
+ wv_packet_write(struct net_device *, /* Write a packet to the Tx buffer. */
void *,
short);
static int
wavelan_packet_xmit(struct sk_buff *, /* Send a packet. */
- device *);
+ struct net_device *);
/* -------------------- HARDWARE CONFIGURATION -------------------- */
static inline int
- wv_mmc_init(device *), /* Initialize the modem. */
- wv_ru_start(device *), /* Start the i82586 receiver unit. */
- wv_cu_start(device *), /* Start the i82586 command unit. */
- wv_82586_start(device *); /* Start the i82586. */
+ wv_mmc_init(struct net_device *), /* Initialize the modem. */
+ wv_ru_start(struct net_device *), /* Start the i82586 receiver unit. */
+ wv_cu_start(struct net_device *), /* Start the i82586 command unit. */
+ wv_82586_start(struct net_device *); /* Start the i82586. */
static void
- wv_82586_config(device *); /* Configure the i82586. */
+ wv_82586_config(struct net_device *); /* Configure the i82586. */
static inline void
- wv_82586_stop(device *);
+ wv_82586_stop(struct net_device *);
static int
- wv_hw_reset(device *), /* Reset the WaveLAN hardware. */
+ wv_hw_reset(struct net_device *), /* Reset the WaveLAN hardware. */
wv_check_ioaddr(u_long, /* ioaddr */
u_char *); /* mac address (read) */
/* ---------------------- INTERRUPT HANDLING ---------------------- */
@@ -651,12 +650,12 @@ static irqreturn_t
void *,
struct pt_regs *);
static void
- wavelan_watchdog(device *); /* transmission watchdog */
+ wavelan_watchdog(struct net_device *); /* transmission watchdog */
/* ------------------- CONFIGURATION CALLBACKS ------------------- */
static int
- wavelan_open(device *), /* Open the device. */
- wavelan_close(device *), /* Close the device. */
- wavelan_config(device *, unsigned short);/* Configure one device. */
+ wavelan_open(struct net_device *), /* Open the device. */
+ wavelan_close(struct net_device *), /* Close the device. */
+ wavelan_config(struct net_device *, unsigned short);/* Configure one device. */
extern struct net_device *wavelan_probe(int unit); /* See Space.c. */
/**************************** VARIABLES ****************************/
diff --git a/drivers/net/wireless/wavelan_cs.c b/drivers/net/wireless/wavelan_cs.c
index 17b930b7e333..52dc265a3005 100644
--- a/drivers/net/wireless/wavelan_cs.c
+++ b/drivers/net/wireless/wavelan_cs.c
@@ -131,7 +131,7 @@ hacr_write_slow(u_long base,
* Read the Parameter Storage Area from the WaveLAN card's memory
*/
static void
-psa_read(device * dev,
+psa_read(struct net_device * dev,
int o, /* offset in PSA */
u_char * b, /* buffer to fill */
int n) /* size to read */
@@ -155,7 +155,7 @@ psa_read(device * dev,
* Write the Paramter Storage Area to the WaveLAN card's memory
*/
static void
-psa_write(device * dev,
+psa_write(struct net_device * dev,
int o, /* Offset in psa */
u_char * b, /* Buffer in memory */
int n) /* Length of buffer */
@@ -229,7 +229,7 @@ psa_crc(unsigned char * psa, /* The PSA */
* update the checksum field in the Wavelan's PSA
*/
static void
-update_psa_checksum(device * dev)
+update_psa_checksum(struct net_device * dev)
{
#ifdef SET_PSA_CRC
psa_t psa;
@@ -753,7 +753,7 @@ void wv_roam_handover(wavepoint_history *wavepoint, net_local *lp)
}
/* Called when a WavePoint beacon is received */
-static inline void wl_roam_gather(device * dev,
+static inline void wl_roam_gather(struct net_device * dev,
u_char * hdr, /* Beacon header */
u_char * stats) /* SNR, Signal quality
of packet */
@@ -831,7 +831,7 @@ static inline int WAVELAN_BEACON(unsigned char *data)
* wv_82593_config() & wv_diag())
*/
static int
-wv_82593_cmd(device * dev,
+wv_82593_cmd(struct net_device * dev,
char * str,
int cmd,
int result)
@@ -942,7 +942,7 @@ wv_82593_cmd(device * dev,
* status for the WaveLAN.
*/
static inline int
-wv_diag(device * dev)
+wv_diag(struct net_device * dev)
{
int ret = FALSE;
@@ -963,7 +963,7 @@ wv_diag(device * dev)
* The return value is the address to use for next the call.
*/
static int
-read_ringbuf(device * dev,
+read_ringbuf(struct net_device * dev,
int addr,
char * buf,
int len)
@@ -1004,10 +1004,10 @@ read_ringbuf(device * dev,
* some delay sometime...
*/
static inline void
-wv_82593_reconfig(device * dev)
+wv_82593_reconfig(struct net_device * dev)
{
net_local * lp = (net_local *)dev->priv;
- dev_link_t * link = ((net_local *) dev->priv)->link;
+ dev_link_t * link = lp->link;
unsigned long flags;
/* Arm the flag, will be cleard in wv_82593_config() */
@@ -1132,7 +1132,7 @@ wv_psa_show(psa_t * p)
* This function need to be completed...
*/
static void
-wv_mmc_show(device * dev)
+wv_mmc_show(struct net_device * dev)
{
ioaddr_t base = dev->base_addr;
net_local * lp = (net_local *)dev->priv;
@@ -1222,7 +1222,7 @@ wv_mmc_show(device * dev)
* Print the formatted status of the i82593's receive unit.
*/
static void
-wv_ru_show(device * dev)
+wv_ru_show(struct net_device * dev)
{
net_local *lp = (net_local *) dev->priv;
@@ -1241,7 +1241,7 @@ wv_ru_show(device * dev)
* Print the formatted status of the WaveLAN PCMCIA device driver.
*/
static void
-wv_dev_show(device * dev)
+wv_dev_show(struct net_device * dev)
{
printk(KERN_DEBUG "dev:");
printk(" state=%lX,", dev->state);
@@ -1256,7 +1256,7 @@ wv_dev_show(device * dev)
* private information.
*/
static void
-wv_local_show(device * dev)
+wv_local_show(struct net_device * dev)
{
net_local *lp;
@@ -1314,7 +1314,7 @@ wv_packet_info(u_char * p, /* Packet to dump */
* There is a lot of flag to configure it at your will...
*/
static inline void
-wv_init_info(device * dev)
+wv_init_info(struct net_device * dev)
{
ioaddr_t base = dev->base_addr;
psa_t psa;
@@ -1412,7 +1412,7 @@ wv_init_info(device * dev)
* Used when the user read /proc/net/dev
*/
static en_stats *
-wavelan_get_stats(device * dev)
+wavelan_get_stats(struct net_device * dev)
{
#ifdef DEBUG_IOCTL_TRACE
printk(KERN_DEBUG "%s: <>wavelan_get_stats()\n", dev->name);
@@ -1431,7 +1431,7 @@ wavelan_get_stats(device * dev)
*/
static void
-wavelan_set_multicast_list(device * dev)
+wavelan_set_multicast_list(struct net_device * dev)
{
net_local * lp = (net_local *) dev->priv;
@@ -1529,7 +1529,7 @@ wavelan_set_multicast_list(device * dev)
*/
#ifdef SET_MAC_ADDRESS
static int
-wavelan_set_mac_address(device * dev,
+wavelan_set_mac_address(struct net_device * dev,
void * addr)
{
struct sockaddr * mac = addr;
@@ -1796,7 +1796,7 @@ wv_frequency_list(u_long base, /* i/o port of the card */
* Sorry, but this function really need wireless extensions...
*/
static inline void
-wl_spy_gather(device * dev,
+wl_spy_gather(struct net_device * dev,
u_char * mac, /* MAC address */
u_char * stats) /* Statistics to gather */
{
@@ -1823,7 +1823,7 @@ wl_spy_gather(device * dev,
* or you may also calculate the mean and standard deviation of the level...
*/
static inline void
-wl_his_gather(device * dev,
+wl_his_gather(struct net_device * dev,
u_char * stats) /* Statistics to gather */
{
net_local * lp = (net_local *) dev->priv;
@@ -2785,7 +2785,7 @@ wavelan_ioctl(struct net_device * dev, /* Device on wich the ioctl apply */
* Called by /proc/net/wireless...
*/
static iw_stats *
-wavelan_get_wireless_stats(device * dev)
+wavelan_get_wireless_stats(struct net_device * dev)
{
ioaddr_t base = dev->base_addr;
net_local * lp = (net_local *) dev->priv;
@@ -2847,7 +2847,7 @@ wavelan_get_wireless_stats(device * dev)
* (called by wv_packet_rcv())
*/
static inline int
-wv_start_of_frame(device * dev,
+wv_start_of_frame(struct net_device * dev,
int rfp, /* end of frame */
int wrap) /* start of buffer */
{
@@ -2909,7 +2909,7 @@ wv_start_of_frame(device * dev,
* (called by wv_packet_rcv())
*/
static inline void
-wv_packet_read(device * dev,
+wv_packet_read(struct net_device * dev,
int fd_p,
int sksize)
{
@@ -3012,7 +3012,7 @@ wv_packet_read(device * dev,
* Note : the spinlock is already grabbed for us and irq are disabled.
*/
static inline void
-wv_packet_rcv(device * dev)
+wv_packet_rcv(struct net_device * dev)
{
ioaddr_t base = dev->base_addr;
net_local * lp = (net_local *) dev->priv;
@@ -3146,7 +3146,7 @@ wv_packet_rcv(device * dev)
* (called in wavelan_packet_xmit())
*/
static inline void
-wv_packet_write(device * dev,
+wv_packet_write(struct net_device * dev,
void * buf,
short length)
{
@@ -3209,7 +3209,7 @@ wv_packet_write(device * dev,
*/
static int
wavelan_packet_xmit(struct sk_buff * skb,
- device * dev)
+ struct net_device * dev)
{
net_local * lp = (net_local *)dev->priv;
unsigned long flags;
@@ -3273,7 +3273,7 @@ wavelan_packet_xmit(struct sk_buff * skb,
* (called by wv_hw_config())
*/
static inline int
-wv_mmc_init(device * dev)
+wv_mmc_init(struct net_device * dev)
{
ioaddr_t base = dev->base_addr;
psa_t psa;
@@ -3467,7 +3467,7 @@ wv_mmc_init(device * dev)
* (called in wv_ru_start() and wavelan_close() and wavelan_event())
*/
static int
-wv_ru_stop(device * dev)
+wv_ru_stop(struct net_device * dev)
{
ioaddr_t base = dev->base_addr;
net_local * lp = (net_local *) dev->priv;
@@ -3530,7 +3530,7 @@ wv_ru_stop(device * dev)
* (called in wv_hw_reset() & wavelan_open())
*/
static int
-wv_ru_start(device * dev)
+wv_ru_start(struct net_device * dev)
{
ioaddr_t base = dev->base_addr;
net_local * lp = (net_local *) dev->priv;
@@ -3618,7 +3618,7 @@ wv_ru_start(device * dev)
* (called by wv_hw_config(), wv_82593_reconfig() & wavelan_packet_xmit())
*/
static int
-wv_82593_config(device * dev)
+wv_82593_config(struct net_device * dev)
{
ioaddr_t base = dev->base_addr;
net_local * lp = (net_local *) dev->priv;
@@ -3792,7 +3792,7 @@ wv_82593_config(device * dev)
* (called by wv_config())
*/
static inline int
-wv_pcmcia_reset(device * dev)
+wv_pcmcia_reset(struct net_device * dev)
{
int i;
conf_reg_t reg = { 0, CS_READ, CISREG_COR, 0 };
@@ -3854,7 +3854,7 @@ wv_pcmcia_reset(device * dev)
* (called by wavelan_event() & wv_hw_reset())
*/
static int
-wv_hw_config(device * dev)
+wv_hw_config(struct net_device * dev)
{
net_local * lp = (net_local *) dev->priv;
ioaddr_t base = dev->base_addr;
@@ -3961,7 +3961,7 @@ wv_hw_config(device * dev)
* (called by wavelan_event(), wavelan_watchdog() and wavelan_open())
*/
static inline void
-wv_hw_reset(device * dev)
+wv_hw_reset(struct net_device * dev)
{
net_local * lp = (net_local *) dev->priv;
@@ -4004,7 +4004,7 @@ wv_pcmcia_config(dev_link_t * link)
memreq_t mem;
handle = link->handle;
- dev = (device *) link->priv;
+ dev = (struct net_device *) link->priv;
#ifdef DEBUG_CONFIG_TRACE
printk(KERN_DEBUG "->wv_pcmcia_config(0x%p)\n", link);
@@ -4149,7 +4149,7 @@ wv_pcmcia_config(dev_link_t * link)
static void
wv_pcmcia_release(dev_link_t *link)
{
- device * dev = (device *) link->priv;
+ struct net_device * dev = (struct net_device *) link->priv;
#ifdef DEBUG_CONFIG_TRACE
printk(KERN_DEBUG "%s: -> wv_pcmcia_release(0x%p)\n", dev->name, link);
@@ -4199,13 +4199,13 @@ wavelan_interrupt(int irq,
void * dev_id,
struct pt_regs * regs)
{
- device * dev;
+ struct net_device * dev;
net_local * lp;
ioaddr_t base;
int status0;
u_int tx_status;
- if((dev = (device *)dev_id) == (device *) NULL)
+ if ((dev = dev_id) == NULL)
{
#ifdef DEBUG_INTERRUPT_ERROR
printk(KERN_WARNING "wavelan_interrupt(): irq %d for unknown device.\n",
@@ -4466,7 +4466,7 @@ wavelan_interrupt(int irq,
* deal with the multiple Tx buffers...
*/
static void
-wavelan_watchdog(device * dev)
+wavelan_watchdog(struct net_device * dev)
{
net_local * lp = (net_local *) dev->priv;
ioaddr_t base = dev->base_addr;
@@ -4541,7 +4541,7 @@ wavelan_watchdog(device * dev)
* Called by NET3 when it "open" the device.
*/
static int
-wavelan_open(device * dev)
+wavelan_open(struct net_device * dev)
{
dev_link_t * link = ((net_local *) dev->priv)->link;
net_local * lp = (net_local *)dev->priv;
@@ -4596,7 +4596,7 @@ wavelan_open(device * dev)
* Called by NET3 when it "close" the device.
*/
static int
-wavelan_close(device * dev)
+wavelan_close(struct net_device * dev)
{
dev_link_t * link = ((net_local *) dev->priv)->link;
ioaddr_t base = dev->base_addr;
@@ -4660,7 +4660,7 @@ wavelan_attach(void)
{
client_reg_t client_reg; /* Register with cardmgr */
dev_link_t * link; /* Info for cardmgr */
- device * dev; /* Interface generic data */
+ struct net_device * dev; /* Interface generic data */
net_local * lp; /* Interface specific data */
int i, ret;
@@ -4698,22 +4698,14 @@ wavelan_attach(void)
dev_list = link;
/* Allocate the generic data structure */
- dev = kmalloc(sizeof(struct net_device), GFP_KERNEL);
+ dev = alloc_etherdev(sizeof(net_local));
if (!dev) {
kfree(link);
return NULL;
}
- memset(dev, 0x00, sizeof(struct net_device));
link->priv = link->irq.Instance = dev;
- /* Allocate the wavelan-specific data structure. */
- dev->priv = lp = (net_local *) kmalloc(sizeof(net_local), GFP_KERNEL);
- if (!lp) {
- kfree(link);
- kfree(dev);
- return NULL;
- }
- memset(lp, 0x00, sizeof(net_local));
+ lp = dev->priv;
/* Init specific data */
lp->configured = 0;
@@ -4731,9 +4723,6 @@ wavelan_attach(void)
lp->link = link;
lp->dev = dev;
- /* Standard setup for generic data */
- ether_setup(dev);
-
/* wavelan NET3 callbacks */
SET_MODULE_OWNER(dev);
dev->open = &wavelan_open;
@@ -4851,22 +4840,16 @@ wavelan_detach(dev_link_t * link)
/* Free pieces */
if(link->priv)
{
- device * dev = (device *) link->priv;
+ struct net_device * dev = (struct net_device *) link->priv;
/* Remove ourselves from the kernel list of ethernet devices */
/* Warning : can't be called from interrupt, timer or wavelan_close() */
- if(link->dev != NULL)
+ if (link->dev)
unregister_netdev(dev);
link->dev = NULL;
-
- if(dev->priv)
- {
- /* Sound strange, but safe... */
- ((net_local *) dev->priv)->link = (dev_link_t *) NULL;
- ((net_local *) dev->priv)->dev = (device *) NULL;
- kfree(dev->priv);
- }
- kfree(link->priv);
+ ((net_local *) dev->priv)->link = NULL;
+ ((net_local *) dev->priv)->dev = NULL;
+ free_netdev(dev);
}
kfree(link);
@@ -4888,7 +4871,7 @@ wavelan_event(event_t event, /* The event received */
event_callback_args_t * args)
{
dev_link_t * link = (dev_link_t *) args->client_data;
- device * dev = (device *) link->priv;
+ struct net_device * dev = (struct net_device *) link->priv;
#ifdef DEBUG_CALLBACK_TRACE
printk(KERN_DEBUG "->wavelan_event(): %s\n",
diff --git a/drivers/net/wireless/wavelan_cs.p.h b/drivers/net/wireless/wavelan_cs.p.h
index 62baa3a7ab14..f7dfc2f3ac73 100644
--- a/drivers/net/wireless/wavelan_cs.p.h
+++ b/drivers/net/wireless/wavelan_cs.p.h
@@ -588,7 +588,6 @@ struct wavepoint_table
/****************************** TYPES ******************************/
/* Shortcuts */
-typedef struct net_device device;
typedef struct net_device_stats en_stats;
typedef struct iw_statistics iw_stats;
typedef struct iw_quality iw_qual;
@@ -611,7 +610,7 @@ typedef u_char mac_addr[WAVELAN_ADDR_SIZE]; /* Hardware address */
struct net_local
{
dev_node_t node; /* ???? What is this stuff ???? */
- device * dev; /* Reverse link... */
+ struct net_device * dev; /* Reverse link... */
spinlock_t spinlock; /* Serialize access to the hardware (SMP) */
dev_link_t * link; /* pcmcia structure */
en_stats stats; /* Ethernet interface statistics */
@@ -673,11 +672,11 @@ static inline void
hacr_write_slow(u_long,
u_char);
static void
- psa_read(device *, /* Read the Parameter Storage Area */
+ psa_read(struct net_device *, /* Read the Parameter Storage Area */
int, /* offset in PSA */
u_char *, /* buffer to fill */
int), /* size to read */
- psa_write(device *, /* Write to the PSA */
+ psa_write(struct net_device *, /* Write to the PSA */
int, /* Offset in psa */
u_char *, /* Buffer in memory */
int); /* Length of buffer */
@@ -707,57 +706,57 @@ static void
int); /* number of registers */
/* ---------------------- I82593 SUBROUTINES ----------------------- */
static int
- wv_82593_cmd(device *, /* synchronously send a command to i82593 */
+ wv_82593_cmd(struct net_device *, /* synchronously send a command to i82593 */
char *,
int,
int);
static inline int
- wv_diag(device *); /* Diagnostique the i82593 */
+ wv_diag(struct net_device *); /* Diagnostique the i82593 */
static int
- read_ringbuf(device *, /* Read a receive buffer */
+ read_ringbuf(struct net_device *, /* Read a receive buffer */
int,
char *,
int);
static inline void
- wv_82593_reconfig(device *); /* Reconfigure the controller */
+ wv_82593_reconfig(struct net_device *); /* Reconfigure the controller */
/* ------------------- DEBUG & INFO SUBROUTINES ------------------- */
static inline void
- wv_init_info(device *); /* display startup info */
+ wv_init_info(struct net_device *); /* display startup info */
/* ------------------- IOCTL, STATS & RECONFIG ------------------- */
static en_stats *
- wavelan_get_stats(device *); /* Give stats /proc/net/dev */
+ wavelan_get_stats(struct net_device *); /* Give stats /proc/net/dev */
/* ----------------------- PACKET RECEPTION ----------------------- */
static inline int
- wv_start_of_frame(device *, /* Seek beggining of current frame */
+ wv_start_of_frame(struct net_device *, /* Seek beggining of current frame */
int, /* end of frame */
int); /* start of buffer */
static inline void
- wv_packet_read(device *, /* Read a packet from a frame */
+ wv_packet_read(struct net_device *, /* Read a packet from a frame */
int,
int),
- wv_packet_rcv(device *); /* Read all packets waiting */
+ wv_packet_rcv(struct net_device *); /* Read all packets waiting */
/* --------------------- PACKET TRANSMISSION --------------------- */
static inline void
- wv_packet_write(device *, /* Write a packet to the Tx buffer */
+ wv_packet_write(struct net_device *, /* Write a packet to the Tx buffer */
void *,
short);
static int
wavelan_packet_xmit(struct sk_buff *, /* Send a packet */
- device *);
+ struct net_device *);
/* -------------------- HARDWARE CONFIGURATION -------------------- */
static inline int
- wv_mmc_init(device *); /* Initialize the modem */
+ wv_mmc_init(struct net_device *); /* Initialize the modem */
static int
- wv_ru_stop(device *), /* Stop the i82593 receiver unit */
- wv_ru_start(device *); /* Start the i82593 receiver unit */
+ wv_ru_stop(struct net_device *), /* Stop the i82593 receiver unit */
+ wv_ru_start(struct net_device *); /* Start the i82593 receiver unit */
static int
- wv_82593_config(device *); /* Configure the i82593 */
+ wv_82593_config(struct net_device *); /* Configure the i82593 */
static inline int
- wv_pcmcia_reset(device *); /* Reset the pcmcia interface */
+ wv_pcmcia_reset(struct net_device *); /* Reset the pcmcia interface */
static int
- wv_hw_config(device *); /* Reset & configure the whole hardware */
+ wv_hw_config(struct net_device *); /* Reset & configure the whole hardware */
static inline void
- wv_hw_reset(device *); /* Same, + start receiver unit */
+ wv_hw_reset(struct net_device *); /* Same, + start receiver unit */
static inline int
wv_pcmcia_config(dev_link_t *); /* Configure the pcmcia interface */
static void
@@ -768,11 +767,11 @@ static irqreturn_t
void *,
struct pt_regs *);
static void
- wavelan_watchdog(device *); /* Transmission watchdog */
+ wavelan_watchdog(struct net_device *); /* Transmission watchdog */
/* ------------------- CONFIGURATION CALLBACKS ------------------- */
static int
- wavelan_open(device *), /* Open the device */
- wavelan_close(device *); /* Close the device */
+ wavelan_open(struct net_device *), /* Open the device */
+ wavelan_close(struct net_device *); /* Close the device */
static dev_link_t *
wavelan_attach(void); /* Create a new device */
static void
diff --git a/drivers/net/znet.c b/drivers/net/znet.c
index 910d5e898b0f..9ebd5ea34b88 100644
--- a/drivers/net/znet.c
+++ b/drivers/net/znet.c
@@ -372,10 +372,8 @@ static int __init znet_probe (void)
struct znet_private *znet;
struct net_device *dev;
char *p;
+ int err = -ENOMEM;
- if (znet_dev) /* Only look for a single adaptor */
- return -ENODEV;
-
/* This code scans the region 0xf0000 to 0xfffff for a "NETIDBLK". */
for(p = (char *)phys_to_virt(0xf0000); p < (char *)phys_to_virt(0x100000); p++)
if (*p == 'N' && strncmp(p, "NETIDBLK", 8) == 0)
@@ -387,12 +385,14 @@ static int __init znet_probe (void)
return -ENODEV;
}
- if (!(znet_dev = dev = init_etherdev(0, sizeof(struct znet_private))))
- return -ENOMEM;
+ dev = alloc_etherdev(sizeof(struct znet_private));
+ if (!dev)
+ return -ENOMEM;
+
+ SET_MODULE_OWNER (dev);
znet = dev->priv;
- SET_MODULE_OWNER (dev);
netinfo = (struct netidblk *)p;
dev->base_addr = netinfo->iobase1;
dev->irq = netinfo->irq1;
@@ -430,7 +430,7 @@ static int __init znet_probe (void)
znet->io_size = 2;
if (!(znet->rx_start = kmalloc (DMA_BUF_SIZE, GFP_KERNEL | GFP_DMA)))
- goto free_netdev;
+ goto free_dev;
if (!(znet->tx_start = kmalloc (DMA_BUF_SIZE, GFP_KERNEL | GFP_DMA)))
goto free_rx;
@@ -452,19 +452,19 @@ static int __init znet_probe (void)
dev->set_multicast_list = &znet_set_multicast_list;
dev->tx_timeout = znet_tx_timeout;
dev->watchdog_timeo = TX_TIMEOUT;
-
+ err = register_netdev(dev);
+ if (err)
+ goto free_tx;
+ znet_dev = dev;
return 0;
free_tx:
- kfree (znet->tx_start);
+ kfree(znet->tx_start);
free_rx:
- kfree (znet->rx_start);
- free_netdev:
- unregister_netdev (dev);
- kfree (dev);
- znet_dev = NULL;
-
- return -ENOMEM;
+ kfree(znet->rx_start);
+ free_dev:
+ free_netdev(dev);
+ return err;
}
@@ -934,16 +934,14 @@ static void update_stop_hit(short ioaddr, unsigned short rx_stop_offset)
static __exit void znet_cleanup (void)
{
-#ifdef MODULE
if (znet_dev) {
struct znet_private *znet = znet_dev->priv;
+ unregister_netdev (znet_dev);
kfree (znet->rx_start);
kfree (znet->tx_start);
- unregister_netdev (znet_dev);
free_netdev (znet_dev);
}
-#endif
}
module_init (znet_probe);
diff --git a/drivers/net/zorro8390.c b/drivers/net/zorro8390.c
index 05b9d98a873f..a7cf490943c6 100644
--- a/drivers/net/zorro8390.c
+++ b/drivers/net/zorro8390.c
@@ -103,18 +103,19 @@ static int __init zorro8390_probe(void)
continue;
board = z->resource.start;
ioaddr = board+cards[i].offset;
- dev = init_etherdev(0, 0);
- SET_MODULE_OWNER(dev);
+ dev = alloc_etherdev(0);
if (!dev)
return -ENOMEM;
+ dev->priv = NULL;
+ SET_MODULE_OWNER(dev);
if (!request_mem_region(ioaddr, NE_IO_EXTENT*2, dev->name)) {
- kfree(dev);
+ free_netdev(dev);
continue;
}
if ((err = zorro8390_init(dev, board, cards[i].name,
ZTWO_VADDR(ioaddr)))) {
release_mem_region(ioaddr, NE_IO_EXTENT*2);
- kfree(dev);
+ free_netdev(dev);
return err;
}
err = 0;
@@ -129,6 +130,7 @@ static int __init zorro8390_init(struct net_device *dev, unsigned long board,
const char *name, unsigned long ioaddr)
{
int i;
+ int err;
unsigned char SA_prom[32];
int start_page, stop_page;
static u32 zorro8390_offsets[16] = {
@@ -198,6 +200,7 @@ static int __init zorro8390_init(struct net_device *dev, unsigned long board,
/* Allocate dev->priv and fill in 8390 specific dev fields. */
if (ethdev_init(dev)) {
printk("Unable to get memory for dev->priv.\n");
+ free_irq(IRQ_AMIGA_PORTS, dev);
return -ENOMEM;
}
@@ -232,7 +235,12 @@ static int __init zorro8390_init(struct net_device *dev, unsigned long board,
root_zorro8390_dev = dev;
#endif
NS8390_init(dev, 0);
- return 0;
+ err = register_netdev(dev);
+ if (err) {
+ kfree(dev->priv);
+ free_irq(IRQ_AMIGA_PORTS, dev);
+ }
+ return err;
}
static int zorro8390_open(struct net_device *dev)
@@ -413,6 +421,7 @@ static void __exit zorro8390_cleanup(void)
unregister_netdev(dev);
free_irq(IRQ_AMIGA_PORTS, dev);
release_mem_region(ZTWO_PADDR(dev->base_addr), NE_IO_EXTENT*2);
+ kfree(dev->priv);
free_netdev(dev);
root_zorro8390_dev = next;
}
diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c
index 131ee14bc568..ad62e0f39dd7 100644
--- a/drivers/usb/gadget/ether.c
+++ b/drivers/usb/gadget/ether.c
@@ -1782,9 +1782,7 @@ eth_bind (struct usb_gadget *gadget)
/* network device setup */
dev->net = net;
SET_MODULE_OWNER (net);
- net->priv = dev;
strcpy (net->name, "usb%d");
- ether_setup (net);
/* one random address for the gadget device ... both of these could
* reasonably come from an id prom or a module parameter.