patch-2.4.0-test12 linux/drivers/net/yellowfin.c
Next file: linux/drivers/nubus/nubus.c
Previous file: linux/drivers/net/winbond-840.c
Back to the patch index
Back to the overall index
- Lines: 134
- Date:
Mon Dec 11 13:38:29 2000
- Orig file:
v2.4.0-test11/linux/drivers/net/yellowfin.c
- Orig date:
Sat May 13 08:19:21 2000
diff -u --recursive --new-file v2.4.0-test11/linux/drivers/net/yellowfin.c linux/drivers/net/yellowfin.c
@@ -305,9 +305,6 @@
for status. */
struct yellowfin_desc rx_ring[RX_RING_SIZE];
struct yellowfin_desc tx_ring[TX_RING_SIZE*2];
- const char *product_name;
- struct net_device *next_module;
- void *priv_addr; /* Unaligned address for kfree */
/* The addresses of receive-in-place skbuffs. */
struct sk_buff* rx_skbuff[RX_RING_SIZE];
/* The saved address of a sent-in-place packet/buffer, for skfree(). */
@@ -426,8 +423,6 @@
printk(KERN_DEBUG "%s: yellowfin_open() irq %d.\n",
dev->name, dev->irq);
- MOD_INC_USE_COUNT;
-
yellowfin_init_ring(dev);
YF_OUTL(virt_to_bus(yp->rx_ring), ioaddr + RxPtr);
@@ -1110,8 +1105,6 @@
dev->name, bogus_rx);
}
#endif
- MOD_DEC_USE_COUNT;
-
return 0;
}
@@ -1230,24 +1223,19 @@
chip_idx = ent->driver_data;
flags = chip_info[chip_idx].flags;
- dev = init_etherdev(NULL, 0);
+ dev = init_etherdev(NULL, sizeof(*yp));
if (!dev) {
printk (KERN_ERR PFX "cannot allocate ethernet device\n");
return -ENOMEM;
}
+ SET_MODULE_OWNER(dev);
- dev->priv = kmalloc(sizeof(*yp) + PRIV_ALIGN, GFP_KERNEL);
- if (!dev->priv)
- goto err_out_free_netdev;
- yp = (void *)(((long)dev->priv + PRIV_ALIGN) & ~PRIV_ALIGN);
- memset(yp, 0, sizeof(*yp));
- yp->priv_addr = dev->priv; /* store real addr for kfree */
- dev->priv = yp; /* use aligned addr */
+ yp = dev->priv;
if (!request_region (pci_resource_start (pdev, 0),
YELLOWFIN_SIZE, YELLOWFIN_MODULE_NAME)) {
printk (KERN_ERR PFX "cannot obtain I/O port region\n");
- goto err_out_free_priv;
+ goto err_out_free_netdev;
}
if (!request_mem_region (pci_resource_start (pdev, 1),
YELLOWFIN_SIZE, YELLOWFIN_MODULE_NAME)) {
@@ -1255,8 +1243,8 @@
goto err_out_free_pio_region;
}
- /* XXX check enable_device for failure */
- pci_enable_device (pdev);
+ if (pci_enable_device (pdev))
+ goto err_out_free_mmio_region;
pci_set_master (pdev);
#ifdef USE_IO_OPS
@@ -1264,7 +1252,8 @@
#else
real_ioaddr = ioaddr = pci_resource_start (pdev, 1);
ioaddr = (long) ioremap(ioaddr, YELLOWFIN_SIZE);
- /* XXX check for failure */
+ if (!ioaddr)
+ goto err_out_free_mmio_region;
#endif
irq = pdev->irq;
@@ -1348,10 +1337,10 @@
return 0;
+err_out_free_mmio_region:
+ release_mem_region (pci_resource_start (pdev, 1), YELLOWFIN_SIZE);
err_out_free_pio_region:
release_region (pci_resource_start (pdev, 0), YELLOWFIN_SIZE);
-err_out_free_priv:
- kfree (dev->priv);
err_out_free_netdev:
unregister_netdev (dev);
kfree (dev);
@@ -1363,23 +1352,18 @@
struct net_device *dev = pdev->driver_data;
struct yellowfin_private *np;
- if (!dev) {
- printk (KERN_ERR "remove non-existent device\n");
- return;
- }
- np = (struct yellowfin_private *) dev->priv;
+ if (!dev)
+ BUG();
+ np = dev->priv;
unregister_netdev (dev);
-#ifdef USE_IO_OPS
release_region (dev->base_addr, YELLOWFIN_SIZE);
-#else
- iounmap ((void *) dev->base_addr);
release_mem_region (dev->base_addr, YELLOWFIN_SIZE);
-#endif
- if (np->priv_addr)
- kfree (np->priv_addr);
+#ifndef USE_IO_OPS
+ iounmap ((void *) dev->base_addr);
+#endif
kfree (dev);
}
@@ -1398,11 +1382,7 @@
if (debug) /* Emit version even if no cards detected. */
printk(KERN_INFO "%s", version);
- if (pci_register_driver (&yellowfin_driver) > 0)
- return 0;
-
- pci_unregister_driver (&yellowfin_driver);
- return -ENODEV;
+ return pci_module_init (&yellowfin_driver);
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)