From 984813595051cf2c7da695276134dfc374b50b29 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Wed, 13 Apr 2005 01:01:33 +0000 Subject: [PATCH] Finished by hand --- src/drivers/net/natsemi.c | 34 ++++++++------ src/drivers/net/ns83820.c | 44 +++++++++--------- src/drivers/net/pcnet32.c | 30 ++++++------ src/drivers/net/r8169.c | 42 +++++++++-------- src/drivers/net/sis900.c | 28 +++++++----- src/drivers/net/sundance.c | 29 ++++++------ src/drivers/net/tg3.c | 94 +++++++++++++++++++------------------- src/drivers/net/tlan.c | 40 ++++++++-------- src/drivers/net/tulip.c | 28 ++++++------ 9 files changed, 192 insertions(+), 177 deletions(-) diff --git a/src/drivers/net/natsemi.c b/src/drivers/net/natsemi.c index 58aa2ec6..e66289d0 100644 --- a/src/drivers/net/natsemi.c +++ b/src/drivers/net/natsemi.c @@ -181,6 +181,9 @@ enum desc_status_bits { /* Globals */ +static struct nic_operations natsemi_operations; +static struct pci_driver natsemi_driver; + static int natsemi_debug = 1; /* 1 normal messages, 0 quiet .. 7 verbose. */ const char *nic_name; @@ -248,31 +251,32 @@ natsemi_probe ( struct dev *dev ) { int i; int prev_eedata; u32 tmp; + + if ( ! find_pci_device ( pci, &natsemi_driver ) ) + return 0; if (pci->ioaddr == 0) return 0; - adjust_pci_device(pci); - /* initialize some commonly used globals */ nic->irqno = 0; - nic->ioaddr = pci->ioaddr & ~3; + nic->ioaddr = pci->ioaddr; - ioaddr = pci->ioaddr & ~3; + ioaddr = pci->ioaddr; vendor = pci->vendor; dev_id = pci->dev_id; - nic_name = pci->name; + nic_name = dev->name; /* natsemi has a non-standard PM control register * in PCI config space. Some boards apparently need * to be brought to D0 in this manner. */ - pcibios_read_config_dword(pci->bus, pci->devfn, PCIPM, &tmp); + pci_read_config_dword(pci, PCIPM, &tmp); if (tmp & (0x03|0x100)) { /* D0 state, disable PME assertion */ u32 newtmp = tmp & ~(0x03|0x100); - pcibios_write_config_dword(pci->bus, pci->devfn, PCIPM, newtmp); + pci_write_config_dword(pci, PCIPM, newtmp); } /* get MAC address */ @@ -316,14 +320,6 @@ natsemi_probe ( struct dev *dev ) { /* initialize device */ natsemi_init(nic); -static struct nic_operations natsemi_operations; -static struct nic_operations natsemi_operations = { - .connect = dummy_connect, - .poll = natsemi_poll, - .transmit = natsemi_transmit, - .irq = natsemi_irq, - .disable = natsemi_disable, -}; nic->nic_op = &natsemi_operations; return 1; @@ -770,6 +766,14 @@ natsemi_irq(struct nic *nic __unused, irq_action_t action __unused) } } +static struct nic_operations natsemi_operations = { + .connect = dummy_connect, + .poll = natsemi_poll, + .transmit = natsemi_transmit, + .irq = natsemi_irq, + .disable = natsemi_disable, +}; + static struct pci_id natsemi_nics[] = { PCI_ROM(0x100b, 0x0020, "dp83815", "DP83815"), }; diff --git a/src/drivers/net/ns83820.c b/src/drivers/net/ns83820.c index 3fd0ad1f..5ce21917 100755 --- a/src/drivers/net/ns83820.c +++ b/src/drivers/net/ns83820.c @@ -774,7 +774,7 @@ static void ns83820_disable ( struct nic *nic ) { ns->up = 0; - ns83820_do_reset((struct nic *) dev, CR_RST); + ns83820_do_reset(nic, CR_RST); ns->IMR_cache &= ~(ISR_RXOK | ISR_RXDESC | ISR_RXERR | ISR_RXEARLY | @@ -804,6 +804,21 @@ static void ns83820_irq(struct nic *nic __unused, irq_action_t action __unused) } } +static struct nic_operations ns83820_operations = { + .connect = dummy_connect, + .poll = ns83820_poll, + .transmit = ns83820_transmit, + .irq = ns83820_irq, + .disable = ns83820_disable, +}; + +static struct pci_id ns83820_nics[] = { + PCI_ROM(0x100b, 0x0022, "ns83820", "National Semiconductor 83820"), +}; + +static struct pci_driver ns83820_driver = + PCI_DRIVER ( "NS83820/PCI", ns83820_nics, PCI_NO_CLASS ); + /************************************************************************** PROBE - Look for an adapter, this routine's visible to the outside ***************************************************************************/ @@ -811,19 +826,20 @@ PROBE - Look for an adapter, this routine's visible to the outside #define board_found 1 #define valid_link 0 static int ns83820_probe ( struct dev *dev ) { - struct nic *nic = nic_device ( dev ); - struct pci_device *pci = pci_device ( dev ); int sz; long addr; int using_dac = 0; + if ( ! find_pci_device ( pci, &ns83820_driver ) ) + return 0; + if (pci->ioaddr == 0) return 0; printf("ns83820.c: Found %s, vendor=0x%hX, device=0x%hX\n", - pci->name, pci->vendor, pci->dev_id); + dev->name, pci->vendor, pci->dev_id); /* point to private storage */ ns = &nsx; @@ -863,12 +879,12 @@ static int ns83820_probe ( struct dev *dev ) { ns->CFG_cache = readl(ns->base + CFG); if ((ns->CFG_cache & CFG_PCI64_DET)) { - printf("%s: detected 64 bit PCI data bus.\n", pci->name); + printf("%s: detected 64 bit PCI data bus.\n", dev->name); /*dev->CFG_cache |= CFG_DATA64_EN; */ if (!(ns->CFG_cache & CFG_DATA64_EN)) printf ("%s: EEPROM did not enable 64 bit bus. Disabled.\n", - pci->name); + dev->name); } else ns->CFG_cache &= ~(CFG_DATA64_EN); @@ -1000,22 +1016,8 @@ static int ns83820_probe ( struct dev *dev ) { ns83820_reset(nic); /* point to NIC specific routines */ -static struct nic_operations ns83820_operations; -static struct nic_operations ns83820_operations = { - .connect = dummy_connect, - .poll = ns83820_poll, - .transmit = ns83820_transmit, - .irq = ns83820_irq, - .disable = ns83820_disable, -}; nic->nic_op = &ns83820_operations; + nic->nic_op = &ns83820_operations; return 1; } -static struct pci_id ns83820_nics[] = { - PCI_ROM(0x100b, 0x0022, "ns83820", "National Semiconductor 83820"), -}; - -static struct pci_driver ns83820_driver = - PCI_DRIVER ( "NS83820/PCI", ns83820_nics, PCI_NO_CLASS ); - BOOT_DRIVER ( "NS83820/PCI", ns83820_probe ); diff --git a/src/drivers/net/pcnet32.c b/src/drivers/net/pcnet32.c index 23b8d7d8..900e0db8 100644 --- a/src/drivers/net/pcnet32.c +++ b/src/drivers/net/pcnet32.c @@ -62,6 +62,8 @@ typedef unsigned int u32; typedef signed int s32; static u32 ioaddr; /* Globally used for the card's io address */ +static struct nic_operations pcnet32_operations; +static struct pci_driver pcnet32_driver; #ifdef EDEBUG #define dprintf(x) printf x @@ -665,9 +667,7 @@ PROBE - Look for an adapter, this routine's visible to the outside You should omit the last argument struct pci_device * for a non-PCI NIC ***************************************************************************/ static int pcnet32_probe ( struct dev *dev ) { - struct nic *nic = nic_device ( dev ); - struct pci_device *pci = pci_device ( dev ); int i, media; int fdx, mii, fset, dxsuflo, ltint; @@ -675,15 +675,18 @@ static int pcnet32_probe ( struct dev *dev ) { char *chipname; struct pcnet32_access *a = NULL; u8 promaddr[6]; - int shared = 1; + + if ( ! find_pci_device ( pci, &pcnet32_driver ) ) + return 0; + if (pci->ioaddr == 0) return 0; /* BASE is used throughout to address the card */ ioaddr = pci->ioaddr; printf("pcnet32.c: Found %s, Vendor=0x%hX Device=0x%hX\n", - pci->name, pci->vendor, pci->dev_id); + dev->name, pci->vendor, pci->dev_id); nic->irqno = 0; nic->ioaddr = pci->ioaddr & ~3; @@ -801,7 +804,7 @@ static int pcnet32_probe ( struct dev *dev ) { nic->node_addr[i] = promaddr[i]; } /* Print out some hardware info */ - printf("%s: %! at ioaddr %hX, ", pci->name, nic->node_addr, + printf("%s: %! at ioaddr %hX, ", dev->name, nic->node_addr, ioaddr); /* Set to pci bus master */ @@ -945,14 +948,7 @@ static int pcnet32_probe ( struct dev *dev ) { else printf("\n"); } -static struct nic_operations pcnet32_operations; -static struct nic_operations pcnet32_operations = { - .connect = dummy_connect, - .poll = pcnet32_poll, - .transmit = pcnet32_transmit, - .irq = pcnet32_irq, - .disable = pcnet32_disable, -}; + nic->nic_op = &pcnet32_operations; return 1; @@ -993,6 +989,14 @@ static void mdio_write(struct nic *nic __unused, int phy_id, int reg_num, } #endif +static struct nic_operations pcnet32_operations = { + .connect = dummy_connect, + .poll = pcnet32_poll, + .transmit = pcnet32_transmit, + .irq = pcnet32_irq, + .disable = pcnet32_disable, +}; + static struct pci_id pcnet32_nics[] = { PCI_ROM(0x1022, 0x2000, "lancepci", "AMD Lance/PCI"), PCI_ROM(0x1022, 0x2625, "pcnetfastiii", "AMD Lance/PCI PCNet/32"), diff --git a/src/drivers/net/r8169.c b/src/drivers/net/r8169.c index f1da6420..2cb97a25 100644 --- a/src/drivers/net/r8169.c +++ b/src/drivers/net/r8169.c @@ -702,6 +702,21 @@ static void r8169_disable ( struct nic *nic __unused ) { } } +static struct nic_operations r8169_operations = { + .connect = dummy_connect, + .poll = r8169_poll, + .transmit = r8169_transmit, + .irq = r8169_irq, + .disable = r8169_disable, +}; + +static struct pci_id r8169_nics[] = { + PCI_ROM(0x10ec, 0x8169, "r8169", "RealTek RTL8169 Gigabit Ethernet"), +}; + +static struct pci_driver r8169_driver = + PCI_DRIVER ( "r8169/PCI", r8169_nics, PCI_NO_CLASS ); + /************************************************************************** PROBE - Look for an adapter, this routine's visible to the outside ***************************************************************************/ @@ -709,17 +724,18 @@ PROBE - Look for an adapter, this routine's visible to the outside #define board_found 1 #define valid_link 0 static int r8169_probe ( struct dev *dev ) { - struct nic *nic = nic_device ( dev ); - struct pci_device *pci = pci_device ( dev ); static int board_idx = -1; static int printed_version = 0; int i, rc; int option = -1, Cap10_100 = 0, Cap1000 = 0; + if ( ! find_pci_device ( pci, &r8169_driver ) ) + return 0; + printf("r8169.c: Found %s, Vendor=%hX Device=%hX\n", - pci->name, pci->vendor, pci->dev_id); + dev->name, pci->vendor, pci->dev_id); board_idx++; @@ -737,7 +753,7 @@ static int r8169_probe ( struct dev *dev ) { dprintf(("%s: Identified chip type is '%s'.\n", pci->name, rtl_chip_info[tpc->chipset].name)); /* Print out some hardware info */ - printf("%s: %! at ioaddr %hX, ", pci->name, nic->node_addr, + printf("%s: %! at ioaddr %hX, ", dev->name, nic->node_addr, ioaddr); /* if TBI is not endbled */ @@ -824,32 +840,18 @@ static int r8169_probe ( struct dev *dev ) { udelay(100); printf ("%s: 1000Mbps Full-duplex operation, TBI Link %s!\n", - pci->name, + dev->name, (RTL_R32(TBICSR) & TBILinkOK) ? "OK" : "Failed"); } r8169_reset(nic); /* point to NIC specific routines */ -static struct nic_operations r8169_operations; -static struct nic_operations r8169_operations = { - .connect = dummy_connect, - .poll = r8169_poll, - .transmit = r8169_transmit, - .irq = r8169_irq, - .disable = r8169_disable, -}; nic->nic_op = &r8169_operations; + nic->nic_op = &r8169_operations; nic->irqno = pci->irq; nic->ioaddr = ioaddr; return 1; } -static struct pci_id r8169_nics[] = { - PCI_ROM(0x10ec, 0x8169, "r8169", "RealTek RTL8169 Gigabit Ethernet"), -}; - -static struct pci_driver r8169_driver = - PCI_DRIVER ( "r8169/PCI", r8169_nics, PCI_NO_CLASS ); - BOOT_DRIVER ( "r8169/PCI", r8169_probe ); diff --git a/src/drivers/net/sis900.c b/src/drivers/net/sis900.c index daf0ecfd..bb0ca173 100644 --- a/src/drivers/net/sis900.c +++ b/src/drivers/net/sis900.c @@ -52,6 +52,9 @@ /* Globals */ +static struct nic_operations sis900_operations; +static struct pci_driver sis900_driver; + static int sis900_debug = 0; static unsigned short vendor, dev_id; @@ -308,9 +311,7 @@ static int sis635_get_mac_addr(struct pci_device * pci_dev __unused, struct nic */ static int sis900_probe ( struct dev *dev ) { - struct nic *nic = nic_device ( dev ); - struct pci_device *pci = pci_device ( dev ); int i; int found=0; @@ -318,12 +319,15 @@ static int sis900_probe ( struct dev *dev ) { u8 revision; int ret; + if ( ! find_pci_device ( pci, &sis900_driver ) ) + return 0; + if (pci->ioaddr == 0) return 0; nic->irqno = 0; - nic->ioaddr = pci->ioaddr & ~3; - ioaddr = pci->ioaddr & ~3; + nic->ioaddr = pci->ioaddr; + ioaddr = pci->ioaddr; vendor = pci->vendor; dev_id = pci->dev_id; @@ -409,14 +413,6 @@ static int sis900_probe ( struct dev *dev ) { /* initialize device */ sis900_init(nic); -static struct nic_operations sis900_operations; -static struct nic_operations sis900_operations = { - .connect = dummy_connect, - .poll = sis900_poll, - .transmit = sis900_transmit, - .irq = sis900_irq, - .disable = sis900_disable, -}; nic->nic_op = &sis900_operations; return 1; @@ -1253,6 +1249,14 @@ sis900_irq(struct nic *nic __unused, irq_action_t action __unused) } } +static struct nic_operations sis900_operations = { + .connect = dummy_connect, + .poll = sis900_poll, + .transmit = sis900_transmit, + .irq = sis900_irq, + .disable = sis900_disable, +}; + static struct pci_id sis900_nics[] = { PCI_ROM(0x1039, 0x0900, "sis900", "SIS900"), PCI_ROM(0x1039, 0x7016, "sis7016", "SIS7016"), diff --git a/src/drivers/net/sundance.c b/src/drivers/net/sundance.c index 7bedeab1..45271f51 100644 --- a/src/drivers/net/sundance.c +++ b/src/drivers/net/sundance.c @@ -571,28 +571,36 @@ static void sundance_disable ( struct nic *nic __unused ) { outw(TxDisable | RxDisable | StatsDisable, BASE + MACCtrl1); } - +static struct nic_operations sundance_operations = { + .connect = dummy_connect, + .poll = sundance_poll, + .transmit = sundance_transmit, + .irq = sundance_irq, + .disable = sundance_disable, +}; +static struct pci_driver sundance_driver; /************************************************************************** PROBE - Look for an adapter, this routine's visible to the outside ***************************************************************************/ static int sundance_probe ( struct dev *dev ) { - struct nic *nic = nic_device ( dev ); - struct pci_device *pci = pci_device ( dev ); u8 ee_data[EEPROM_SIZE]; u16 mii_ctl; int i; int speed; + if ( ! find_pci_device ( pci, &sundance_driver ) ) + return 0; + if (pci->ioaddr == 0) return 0; /* BASE is used throughout to address the card */ BASE = pci->ioaddr; printf(" sundance.c: Found %s Vendor=0x%hX Device=0x%hX\n", - pci->name, pci->vendor, pci->dev_id); + dev->name, pci->vendor, pci->dev_id); /* Get the MAC Address by reading the EEPROM */ for (i = 0; i < 3; i++) { @@ -614,13 +622,13 @@ static int sundance_probe ( struct dev *dev ) { /* point to private storage */ sdc = &sdx; - sdc->nic_name = pci->name; + sdc->nic_name = dev->name; sdc->mtu = mtu; pci_read_config_byte(pci, PCI_REVISION_ID, &sdc->pci_rev_id); dprintf(("Device revision id: %hx\n", sdc->pci_rev_id)); /* Print out some hardware info */ - printf("%s: %! at ioaddr %hX, ", pci->name, nic->node_addr, BASE); + printf("%s: %! at ioaddr %hX, ", dev->name, nic->node_addr, BASE); sdc->mii_preamble_required = 0; if (1) { int phy, phy_idx = 0; @@ -735,14 +743,7 @@ static int sundance_probe ( struct dev *dev ) { sdc->mii_if.full_duplex ? "Full" : "Half"); /* point to NIC specific routines */ -static struct nic_operations sundance_operations; -static struct nic_operations sundance_operations = { - .connect = dummy_connect, - .poll = sundance_poll, - .transmit = sundance_transmit, - .irq = sundance_irq, - .disable = sundance_disable, -}; nic->nic_op = &sundance_operations; + nic->nic_op = &sundance_operations; nic->irqno = pci->irq; nic->ioaddr = BASE; diff --git a/src/drivers/net/tg3.c b/src/drivers/net/tg3.c index 77c4712a..716bc3e5 100644 --- a/src/drivers/net/tg3.c +++ b/src/drivers/net/tg3.c @@ -2875,7 +2875,7 @@ static int tg3_get_device_address(struct tg3 *tp) struct nic *nic = tp->nic; uint32_t hi, lo, mac_offset; - if (PCI_FUNC(tp->pdev->devfn) == 0) + if (PCI_FUNC(tp->pdev->busdevfn) == 0) mac_offset = 0x7c; else mac_offset = 0xcc; @@ -3219,28 +3219,65 @@ static void tg3_irq(struct nic *nic __unused, irq_action_t action __unused) } } +static struct nic_operations tg3_operations = { + .connect = dummy_connect, + .poll = tg3_poll, + .transmit = tg3_transmit, + .irq = tg3_irq, + .disable = tg3_disable, +}; + + +static struct pci_id tg3_nics[] = { +PCI_ROM(0x14e4, 0x1644, "tg3-5700", "Broadcom Tigon 3 5700"), +PCI_ROM(0x14e4, 0x1645, "tg3-5701", "Broadcom Tigon 3 5701"), +PCI_ROM(0x14e4, 0x1646, "tg3-5702", "Broadcom Tigon 3 5702"), +PCI_ROM(0x14e4, 0x1647, "tg3-5703", "Broadcom Tigon 3 5703"), +PCI_ROM(0x14e4, 0x1648, "tg3-5704", "Broadcom Tigon 3 5704"), +PCI_ROM(0x14e4, 0x164d, "tg3-5702FE", "Broadcom Tigon 3 5702FE"), +PCI_ROM(0x14e4, 0x1653, "tg3-5705", "Broadcom Tigon 3 5705"), +PCI_ROM(0x14e4, 0x1654, "tg3-5705_2", "Broadcom Tigon 3 5705_2"), +PCI_ROM(0x14e4, 0x165d, "tg3-5705M", "Broadcom Tigon 3 5705M"), +PCI_ROM(0x14e4, 0x165e, "tg3-5705M_2", "Broadcom Tigon 3 5705M_2"), +PCI_ROM(0x14e4, 0x1677, "tg3-5751", "Broadcom Tigon 3 5751"), +PCI_ROM(0x14e4, 0x1696, "tg3-5782", "Broadcom Tigon 3 5782"), +PCI_ROM(0x14e4, 0x169c, "tg3-5788", "Broadcom Tigon 3 5788"), +PCI_ROM(0x14e4, 0x16a6, "tg3-5702X", "Broadcom Tigon 3 5702X"), +PCI_ROM(0x14e4, 0x16a7, "tg3-5703X", "Broadcom Tigon 3 5703X"), +PCI_ROM(0x14e4, 0x16a8, "tg3-5704S", "Broadcom Tigon 3 5704S"), +PCI_ROM(0x14e4, 0x16c6, "tg3-5702A3", "Broadcom Tigon 3 5702A3"), +PCI_ROM(0x14e4, 0x16c7, "tg3-5703A3", "Broadcom Tigon 3 5703A3"), +PCI_ROM(0x14e4, 0x170d, "tg3-5901", "Broadcom Tigon 3 5901"), +PCI_ROM(0x14e4, 0x170e, "tg3-5901_2", "Broadcom Tigon 3 5901_2"), +PCI_ROM(0x1148, 0x4400, "tg3-9DXX", "Syskonnect 9DXX"), +PCI_ROM(0x1148, 0x4500, "tg3-9MXX", "Syskonnect 9MXX"), +PCI_ROM(0x173b, 0x03e8, "tg3-ac1000", "Altima AC1000"), +PCI_ROM(0x173b, 0x03e9, "tg3-ac1001", "Altima AC1001"), +PCI_ROM(0x173b, 0x03ea, "tg3-ac9100", "Altima AC9100"), +PCI_ROM(0x173b, 0x03eb, "tg3-ac1003", "Altima AC1003"), +}; + +static struct pci_driver tg3_driver = + PCI_DRIVER ( "TG3", tg3_nics, PCI_NO_CLASS ); + /************************************************************************** PROBE - Look for an adapter, this routine's visible to the outside You should omit the last argument struct pci_device * for a non-PCI NIC ***************************************************************************/ static int tg3_probe ( struct dev *dev ) { - struct nic *nic = nic_device ( dev ); - struct pci_device *pdev = pci_device ( dev ); struct tg3 *tp = &tg3; unsigned long tg3reg_base, tg3reg_len; int i, err, pm_cap; - if (pdev == 0) + if ( ! find_pci_device ( pdev, &tg3_driver ) ) return 0; memset(tp, 0, sizeof(*tp)); - adjust_pci_device(pdev); - nic->irqno = 0; - nic->ioaddr = pdev->ioaddr & ~3; + nic->ioaddr = pdev->ioaddr; /* Find power-management capability. */ pm_cap = pci_find_capability(pdev, PCI_CAP_ID_PM); @@ -3340,14 +3377,7 @@ static int tg3_probe ( struct dev *dev ) { printf("Valid link not established\n"); goto err_out_disable; } -static struct nic_operations tg3_operations; -static struct nic_operations tg3_operations = { - .connect = dummy_connect, - .poll = tg3_poll, - .transmit = tg3_transmit, - .irq = tg3_irq, - .disable = tg3_disable, -}; + nic->nic_op = &tg3_operations; return 1; @@ -3356,40 +3386,8 @@ static struct nic_operations tg3_operations = { iounmap((void *)tp->regs); return 0; err_out_disable: - tg3_disable(dev); + tg3_disable(nic); return 0; } -static struct pci_id tg3_nics[] = { -PCI_ROM(0x14e4, 0x1644, "tg3-5700", "Broadcom Tigon 3 5700"), -PCI_ROM(0x14e4, 0x1645, "tg3-5701", "Broadcom Tigon 3 5701"), -PCI_ROM(0x14e4, 0x1646, "tg3-5702", "Broadcom Tigon 3 5702"), -PCI_ROM(0x14e4, 0x1647, "tg3-5703", "Broadcom Tigon 3 5703"), -PCI_ROM(0x14e4, 0x1648, "tg3-5704", "Broadcom Tigon 3 5704"), -PCI_ROM(0x14e4, 0x164d, "tg3-5702FE", "Broadcom Tigon 3 5702FE"), -PCI_ROM(0x14e4, 0x1653, "tg3-5705", "Broadcom Tigon 3 5705"), -PCI_ROM(0x14e4, 0x1654, "tg3-5705_2", "Broadcom Tigon 3 5705_2"), -PCI_ROM(0x14e4, 0x165d, "tg3-5705M", "Broadcom Tigon 3 5705M"), -PCI_ROM(0x14e4, 0x165e, "tg3-5705M_2", "Broadcom Tigon 3 5705M_2"), -PCI_ROM(0x14e4, 0x1677, "tg3-5751", "Broadcom Tigon 3 5751"), -PCI_ROM(0x14e4, 0x1696, "tg3-5782", "Broadcom Tigon 3 5782"), -PCI_ROM(0x14e4, 0x169c, "tg3-5788", "Broadcom Tigon 3 5788"), -PCI_ROM(0x14e4, 0x16a6, "tg3-5702X", "Broadcom Tigon 3 5702X"), -PCI_ROM(0x14e4, 0x16a7, "tg3-5703X", "Broadcom Tigon 3 5703X"), -PCI_ROM(0x14e4, 0x16a8, "tg3-5704S", "Broadcom Tigon 3 5704S"), -PCI_ROM(0x14e4, 0x16c6, "tg3-5702A3", "Broadcom Tigon 3 5702A3"), -PCI_ROM(0x14e4, 0x16c7, "tg3-5703A3", "Broadcom Tigon 3 5703A3"), -PCI_ROM(0x14e4, 0x170d, "tg3-5901", "Broadcom Tigon 3 5901"), -PCI_ROM(0x14e4, 0x170e, "tg3-5901_2", "Broadcom Tigon 3 5901_2"), -PCI_ROM(0x1148, 0x4400, "tg3-9DXX", "Syskonnect 9DXX"), -PCI_ROM(0x1148, 0x4500, "tg3-9MXX", "Syskonnect 9MXX"), -PCI_ROM(0x173b, 0x03e8, "tg3-ac1000", "Altima AC1000"), -PCI_ROM(0x173b, 0x03e9, "tg3-ac1001", "Altima AC1001"), -PCI_ROM(0x173b, 0x03ea, "tg3-ac9100", "Altima AC9100"), -PCI_ROM(0x173b, 0x03eb, "tg3-ac1003", "Altima AC1003"), -}; - -static struct pci_driver tg3_driver = - PCI_DRIVER ( "TG3", tg3_nics, PCI_NO_CLASS ); - BOOT_DRIVER ( "TG3", tg3_probe ); diff --git a/src/drivers/net/tlan.c b/src/drivers/net/tlan.c index 2b12ca36..cdaf5fea 100644 --- a/src/drivers/net/tlan.c +++ b/src/drivers/net/tlan.c @@ -65,6 +65,8 @@ #define dprintf(x) #endif +static struct pci_driver tlan_driver; + static void TLan_ResetLists(struct nic *nic __unused); static void TLan_ResetAdapter(struct nic *nic __unused); static void TLan_FinishReset(struct nic *nic __unused); @@ -438,8 +440,9 @@ void TLan_FinishReset(struct nic *nic) "Full" : "Half")); dprintf(("TLAN: Partner capability: ")); for (i = 5; i <= 10; i++) - if (partner & (1 << i)) + if (partner & (1 << i)) { dprintf(("%s", media[i - 5])); + } dprintf(("\n")); } @@ -748,6 +751,14 @@ static void tlan_irq(struct nic *nic __unused, irq_action_t action __unused) } } +static struct nic_operations tlan_operations = { + .connect = dummy_connect, + .poll = tlan_poll, + .transmit = tlan_transmit, + .irq = tlan_irq, + .disable = tlan_disable, +}; + static void TLan_SetMulticastList(struct nic *nic) { int i; u8 tmp; @@ -771,28 +782,23 @@ PROBE - Look for an adapter, this routine's visible to the outside #define board_found 1 #define valid_link 0 static int tlan_probe ( struct dev *dev ) { - struct nic *nic = nic_device ( dev ); - struct pci_device *pci = pci_device ( dev ); u16 data = 0; int err; int i; + if ( ! find_pci_device ( pci, &tlan_driver ) ) + return 0; + if (pci->ioaddr == 0) return 0; nic->irqno = 0; - nic->ioaddr = pci->ioaddr & ~3; + nic->ioaddr = pci->ioaddr; BASE = pci->ioaddr; - printf("tlan.c: Found %s, Vendor 0x%hX, Device 0x%hX\n", - pci->name, pci->vendor, pci->dev_id); - - /* Set nic as PCI bus master */ - adjust_pci_device(pci); - /* Point to private storage */ priv = &TLanPrivateInfo; @@ -810,7 +816,7 @@ static int tlan_probe ( struct dev *dev ) { priv->vendor_id = pci->vendor; priv->dev_id = pci->dev_id; - priv->nic_name = pci->name; + priv->nic_name = dev->name; priv->eoc = 0; err = 0; @@ -821,11 +827,11 @@ static int tlan_probe ( struct dev *dev ) { (u8 *) & nic->node_addr[i]); if (err) { printf("TLAN: %s: Error reading MAC from eeprom: %d\n", - pci->name, err); + dev->name, err); } else /* Print out some hardware info */ printf("%s: %! at ioaddr %hX, ", - pci->name, nic->node_addr, pci->ioaddr); + dev->name, nic->node_addr, pci->ioaddr); priv->tlanRev = TLan_DioRead8(BASE, TLAN_DEF_REVISION); printf("revision: 0x%hX\n", priv->tlanRev); @@ -844,14 +850,6 @@ static int tlan_probe ( struct dev *dev ) { /* if (board_found && valid_link) {*/ /* point to NIC specific routines */ -static struct nic_operations tlan_operations; -static struct nic_operations tlan_operations = { - .connect = dummy_connect, - .poll = tlan_poll, - .transmit = tlan_transmit, - .irq = tlan_irq, - .disable = tlan_disable, -}; nic->nic_op = &tlan_operations; return 1; } diff --git a/src/drivers/net/tulip.c b/src/drivers/net/tulip.c index c08ca20d..5bb1f4a6 100644 --- a/src/drivers/net/tulip.c +++ b/src/drivers/net/tulip.c @@ -1213,13 +1213,20 @@ static void tulip_irq(struct nic *nic __unused, irq_action_t action __unused) } } +static struct nic_operations tulip_operations = { + .connect = dummy_connect, + .poll = tulip_poll, + .transmit = tulip_transmit, + .irq = tulip_irq, + .disable = tulip_disable, +}; +static struct pci_driver tulip_driver; + /*********************************************************************/ /* eth_probe - Look for an adapter */ /*********************************************************************/ static int tulip_probe ( struct dev *dev ) { - struct nic *nic = nic_device ( dev ); - struct pci_device *pci = pci_device ( dev ); u32 i; u8 chip_rev; @@ -1228,6 +1235,9 @@ static int tulip_probe ( struct dev *dev ) { int chip_idx; static unsigned char last_phys_addr[ETH_ALEN] = {0x00, 'L', 'i', 'n', 'u', 'x'}; + if ( ! find_pci_device ( pci, &tulip_driver ) ) + return 0; + if (pci->ioaddr == 0) return 0; @@ -1240,7 +1250,7 @@ static int tulip_probe ( struct dev *dev ) { tp->vendor_id = pci->vendor; tp->dev_id = pci->dev_id; - tp->nic_name = pci->name; + tp->nic_name = dev->name; tp->if_port = 0; tp->default_port = 0; @@ -1301,7 +1311,7 @@ static int tulip_probe ( struct dev *dev ) { /* Bring the 21041/21143 out of sleep mode. Caution: Snooze mode does not work with some boards! */ if (tp->flags & HAS_PWRDWN) - pcibios_write_config_dword(pci->bus, pci->devfn, 0x40, 0x00000000); + pci_write_config_dword(pci, 0x40, 0x00000000); if (inl(ioaddr + CSR5) == 0xFFFFFFFF) { printf("%s: The Tulip chip at %X is not functioning.\n", @@ -1309,7 +1319,7 @@ static int tulip_probe ( struct dev *dev ) { return 0; } - pcibios_read_config_byte(pci->bus, pci->devfn, PCI_REVISION, &chip_rev); + pci_read_config_byte(pci, PCI_REVISION, &chip_rev); printf("%s: [chip: %s] rev %d at %hX\n", tp->nic_name, tulip_tbl[chip_idx].chip_name, chip_rev, ioaddr); @@ -1422,14 +1432,6 @@ static int tulip_probe ( struct dev *dev ) { /* reset the device and make ready for tx and rx of packets */ tulip_reset(nic); -static struct nic_operations tulip_operations; -static struct nic_operations tulip_operations = { - .connect = dummy_connect, - .poll = tulip_poll, - .transmit = tulip_transmit, - .irq = tulip_irq, - .disable = tulip_disable, -}; nic->nic_op = &tulip_operations; /* give the board a chance to reset before returning */