patch-2.4.22 linux-2.4.22/drivers/net/r8169.c
Next file: linux-2.4.22/drivers/net/rcpci45.c
Previous file: linux-2.4.22/drivers/net/pppoe.c
Back to the patch index
Back to the overall index
- Lines: 141
- Date:
2003-08-25 04:44:42.000000000 -0700
- Orig file:
linux-2.4.21/drivers/net/r8169.c
- Orig date:
2003-06-13 07:51:35.000000000 -0700
diff -urN linux-2.4.21/drivers/net/r8169.c linux-2.4.22/drivers/net/r8169.c
@@ -42,6 +42,7 @@
#include <linux/delay.h>
#include <linux/crc32.h>
#include <linux/init.h>
+
#include <asm/io.h>
#define RTL8169_VERSION "1.2"
@@ -364,8 +365,8 @@
*ioaddr_out = NULL;
*dev_out = NULL;
- // dev zeroed in init_etherdev
- dev = init_etherdev(NULL, sizeof (*tp));
+ // dev zeroed in alloc_etherdev
+ dev = alloc_etherdev(sizeof (*tp));
if (dev == NULL) {
printk(KERN_ERR PFX "unable to alloc new ethernet\n");
return -ENOMEM;
@@ -389,18 +390,18 @@
printk(KERN_ERR PFX
"region #1 not an MMIO resource, aborting\n");
rc = -ENODEV;
- goto err_out;
+ goto err_out_disable;
}
// check for weird/broken PCI region reporting
if (mmio_len < RTL_MIN_IO_SIZE) {
printk(KERN_ERR PFX "Invalid PCI region size(s), aborting\n");
rc = -ENODEV;
- goto err_out;
+ goto err_out_disable;
}
rc = pci_request_regions(pdev, dev->name);
if (rc)
- goto err_out;
+ goto err_out_disable;
// enable PCI bus-mastering
pci_set_master(pdev);
@@ -448,8 +449,10 @@
err_out_free_res:
pci_release_regions(pdev);
+err_out_disable:
+ pci_disable_device(pdev);
+
err_out:
- unregister_netdev(dev);
kfree(dev);
return rc;
}
@@ -462,7 +465,7 @@
void *ioaddr = NULL;
static int board_idx = -1;
static int printed_version = 0;
- int i;
+ int i, rc;
int option = -1, Cap10_100 = 0, Cap1000 = 0;
assert(pdev != NULL);
@@ -475,20 +478,18 @@
printed_version = 1;
}
- i = rtl8169_init_board(pdev, &dev, &ioaddr);
- if (i < 0) {
- return i;
- }
+ rc = rtl8169_init_board(pdev, &dev, &ioaddr);
+ if (rc)
+ return rc;
tp = dev->priv;
assert(ioaddr != NULL);
assert(dev != NULL);
assert(tp != NULL);
- // Get MAC address //
- for (i = 0; i < MAC_ADDR_LEN; i++) {
+ // Get MAC address. FIXME: read EEPROM
+ for (i = 0; i < MAC_ADDR_LEN; i++)
dev->dev_addr[i] = RTL_R8(MAC0 + i);
- }
dev->open = rtl8169_open;
dev->hard_start_xmit = rtl8169_start_xmit;
@@ -505,11 +506,20 @@
tp->pci_dev = pdev;
tp->mmio_addr = ioaddr;
+ spin_lock_init(&tp->lock);
+
+ rc = register_netdev(dev);
+ if (rc) {
+ iounmap(ioaddr);
+ pci_release_regions(pdev);
+ pci_disable_device(pdev);
+ kfree(dev);
+ return rc;
+ }
+
printk(KERN_DEBUG "%s: Identified chip type is '%s'.\n", dev->name,
rtl_chip_info[tp->chipset].name);
- spin_lock_init(&tp->lock);
-
pci_set_drvdata(pdev, dev);
printk(KERN_INFO "%s: %s at 0x%lx, "
@@ -621,7 +631,7 @@
rtl8169_remove_one(struct pci_dev *pdev)
{
struct net_device *dev = pci_get_drvdata(pdev);
- struct rtl8169_private *tp = (struct rtl8169_private *) (dev->priv);
+ struct rtl8169_private *tp = dev->priv;
assert(dev != NULL);
assert(tp != NULL);
@@ -634,6 +644,7 @@
memset(dev, 0xBC,
sizeof (struct net_device) + sizeof (struct rtl8169_private));
+ pci_disable_device(pdev);
kfree(dev);
pci_set_drvdata(pdev, NULL);
}
@@ -821,10 +832,9 @@
void *ioaddr = tp->mmio_addr;
int entry = tp->cur_tx % NUM_TX_DESC;
- if(skb->len < ETH_ZLEN)
- {
+ if (skb->len < ETH_ZLEN) {
skb = skb_padto(skb, ETH_ZLEN);
- if(skb == NULL)
+ if (skb == NULL)
return 0;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)