summaryrefslogtreecommitdiffstats
path: root/src/drivers
diff options
context:
space:
mode:
authorMichael Brown2007-01-10 05:22:09 +0100
committerMichael Brown2007-01-10 05:22:09 +0100
commitdad52745227fd06090e73ea535e0b0fe0f667c60 (patch)
tree6be296bedc785a5aab0d055ae148c6ffb1fe285f /src/drivers
parentRemove uIP; we haven't used it for quite some time now. (diff)
downloadipxe-dad52745227fd06090e73ea535e0b0fe0f667c60.tar.gz
ipxe-dad52745227fd06090e73ea535e0b0fe0f667c60.tar.xz
ipxe-dad52745227fd06090e73ea535e0b0fe0f667c60.zip
Add "name" field to struct device to allow human-readable hardware device
names. Add "dev" pointer in struct net_device to tie network interfaces back to a hardware device. Force natural alignment of data types in __table() macros. This seems to prevent gcc from taking the unilateral decision to occasionally increase their alignment (which screws up the table packing).
Diffstat (limited to 'src/drivers')
-rw-r--r--src/drivers/bus/isa.c6
-rw-r--r--src/drivers/bus/pci.c16
-rw-r--r--src/drivers/net/dmfe.c4
-rw-r--r--src/drivers/net/forcedeth.c10
-rw-r--r--src/drivers/net/legacy.c1
-rw-r--r--src/drivers/net/mtd80x.c2
-rw-r--r--src/drivers/net/natsemi.c2
-rwxr-xr-xsrc/drivers/net/ns83820.c14
-rw-r--r--src/drivers/net/pcnet32.c2
-rw-r--r--src/drivers/net/pnic.c1
-rw-r--r--src/drivers/net/r8169.c10
-rw-r--r--src/drivers/net/rtl8139.c1
-rw-r--r--src/drivers/net/sundance.c6
-rw-r--r--src/drivers/net/tlan.c6
-rw-r--r--src/drivers/net/tulip.c2
-rw-r--r--src/drivers/net/via-velocity.c6
16 files changed, 50 insertions, 39 deletions
diff --git a/src/drivers/bus/isa.c b/src/drivers/bus/isa.c
index 7529f1a27..d8b88fdb2 100644
--- a/src/drivers/bus/isa.c
+++ b/src/drivers/bus/isa.c
@@ -45,8 +45,10 @@ static isa_probe_addr_t isa_extra_probe_addrs[] = {
* Symbols defined by linker
*
*/
-static struct isa_driver isa_drivers[0] __table_start ( isa_driver );
-static struct isa_driver isa_drivers_end[0] __table_end ( isa_driver );
+static struct isa_driver isa_drivers[0]
+ __table_start ( struct isa_driver, isa_driver );
+static struct isa_driver isa_drivers_end[0]
+ __table_end ( struct isa_driver, isa_driver );
/*
* Increment a bus_loc structure to the next possible ISA location.
diff --git a/src/drivers/bus/pci.c b/src/drivers/bus/pci.c
index e7528e3ce..11a8e0a0a 100644
--- a/src/drivers/bus/pci.c
+++ b/src/drivers/bus/pci.c
@@ -23,6 +23,7 @@
#include <stdlib.h>
#include <string.h>
#include <errno.h>
+#include <vsprintf.h>
#include <gpxe/tables.h>
#include <gpxe/device.h>
#include <gpxe/pci.h>
@@ -33,8 +34,10 @@
*
*/
-static struct pci_driver pci_drivers[0] __table_start ( pci_drivers );
-static struct pci_driver pci_drivers_end[0] __table_end ( pci_drivers );
+static struct pci_driver pci_drivers[0]
+ __table_start ( struct pci_driver, pci_drivers );
+static struct pci_driver pci_drivers_end[0]
+ __table_end ( struct pci_driver, pci_drivers );
static void pcibus_remove ( struct root_device *rootdev );
@@ -194,8 +197,8 @@ static int pci_probe ( struct pci_device *pci ) {
( id->device != pci->device ) )
continue;
pci->driver = driver;
- pci->name = id->name;
- DBG ( "...using driver %s\n", pci->name );
+ pci->driver_name = id->name;
+ DBG ( "...using driver %s\n", pci->driver_name );
if ( ( rc = driver->probe ( pci, id ) ) != 0 ) {
DBG ( "......probe failed\n" );
continue;
@@ -276,6 +279,9 @@ static int pcibus_probe ( struct root_device *rootdev ) {
pci_read_bases ( pci );
/* Add to device hierarchy */
+ snprintf ( pci->dev.name, sizeof ( pci->dev.name ),
+ "PCI%02x:%02x.%x", bus,
+ PCI_SLOT ( devfn ), PCI_FUNC ( devfn ) );
pci->dev.parent = &rootdev->dev;
list_add ( &pci->dev.siblings, &rootdev->dev.children);
INIT_LIST_HEAD ( &pci->dev.children );
@@ -325,6 +331,6 @@ static struct root_driver pci_root_driver = {
/** PCI bus root device */
struct root_device pci_root_device __root_device = {
- .name = "PCI",
+ .dev = { .name = "PCI" },
.driver = &pci_root_driver,
};
diff --git a/src/drivers/net/dmfe.c b/src/drivers/net/dmfe.c
index 4a4ac7d45..7320e9036 100644
--- a/src/drivers/net/dmfe.c
+++ b/src/drivers/net/dmfe.c
@@ -457,7 +457,7 @@ static int dmfe_probe ( struct nic *nic, struct pci_device *pci ) {
BASE = pci->ioaddr;
printf("dmfe.c: Found %s Vendor=0x%hX Device=0x%hX\n",
- pci->name, pci->vendor, pci->device);
+ pci->driver_name, pci->vendor, pci->device);
/* Read Chip revision */
pci_read_config_dword(pci, PCI_REVISION_ID, &dev_rev);
@@ -488,7 +488,7 @@ static int dmfe_probe ( struct nic *nic, struct pci_device *pci ) {
nic->node_addr[i] = db->srom[20 + i];
/* Print out some hardware info */
- DBG ( "%s: %s at ioaddr %4.4lx\n", pci->name, eth_ntoa ( nic->node_addr ), BASE );
+ DBG ( "%s: %s at ioaddr %4.4lx\n", pci->driver_name, eth_ntoa ( nic->node_addr ), BASE );
/* Set the card as PCI Bus Master */
adjust_pci_device(pci);
diff --git a/src/drivers/net/forcedeth.c b/src/drivers/net/forcedeth.c
index 67f0c1ee0..2008c39a1 100644
--- a/src/drivers/net/forcedeth.c
+++ b/src/drivers/net/forcedeth.c
@@ -1246,7 +1246,7 @@ static int forcedeth_probe ( struct nic *nic, struct pci_device *pci ) {
return 0;
printf("forcedeth.c: Found %s, vendor=0x%hX, device=0x%hX\n",
- pci->name, pci->vendor, pci->device);
+ pci->driver_name, pci->vendor, pci->device);
pci_fill_nic ( nic, pci );
@@ -1306,7 +1306,7 @@ static int forcedeth_probe ( struct nic *nic, struct pci_device *pci ) {
}
#endif
- DBG ( "%s: MAC Address %s\n", pci->name, eth_ntoa ( nic->node_addr ) );
+ DBG ( "%s: MAC Address %s\n", pci->driver_name, eth_ntoa ( nic->node_addr ) );
/* disable WOL */
writel(0, base + NvRegWakeUpFlags);
@@ -1381,7 +1381,7 @@ static int forcedeth_probe ( struct nic *nic, struct pci_device *pci ) {
id2 = (id2 & PHYID2_OUI_MASK) >> PHYID2_OUI_SHFT;
dprintf
(("%s: open: Found PHY %hX:%hX at address %d.\n",
- pci->name, id1, id2, i));
+ pci->driver_name, id1, id2, i));
np->phyaddr = i;
np->phy_oui = id1 | id2;
break;
@@ -1391,7 +1391,7 @@ static int forcedeth_probe ( struct nic *nic, struct pci_device *pci ) {
* test loopback? Very odd, but can be correct.
*/
printf
- ("%s: open: Could not find a valid PHY.\n", pci->name);
+ ("%s: open: Could not find a valid PHY.\n", pci->driver_name);
}
if (i != 32) {
@@ -1400,7 +1400,7 @@ static int forcedeth_probe ( struct nic *nic, struct pci_device *pci ) {
}
dprintf(("%s: forcedeth.c: subsystem: %hX:%hX bound to %s\n",
- pci->name, pci->vendor, pci->dev_id, pci->name));
+ pci->driver_name, pci->vendor, pci->dev_id, pci->driver_name));
if(!forcedeth_reset(nic)) return 0; // no valid link
/* point to NIC specific routines */
diff --git a/src/drivers/net/legacy.c b/src/drivers/net/legacy.c
index 091cdcc20..73d1d7871 100644
--- a/src/drivers/net/legacy.c
+++ b/src/drivers/net/legacy.c
@@ -84,6 +84,7 @@ int legacy_probe ( struct pci_device *pci,
netdev->priv = &nic;
memset ( &nic, 0, sizeof ( nic ) );
pci_set_drvdata ( pci, netdev );
+ netdev->dev = &pci->dev;
netdev->open = legacy_open;
netdev->close = legacy_close;
diff --git a/src/drivers/net/mtd80x.c b/src/drivers/net/mtd80x.c
index 767aeade0..d6dc5bcd4 100644
--- a/src/drivers/net/mtd80x.c
+++ b/src/drivers/net/mtd80x.c
@@ -677,7 +677,7 @@ static int mtd_probe ( struct nic *nic, struct pci_device *pci ) {
pci_fill_nic ( nic, pci );
adjust_pci_device(pci);
- mtdx.nic_name = pci->name;
+ mtdx.nic_name = pci->driver_name;
mtdx.dev_id = pci->device;
mtdx.ioaddr = nic->ioaddr;
diff --git a/src/drivers/net/natsemi.c b/src/drivers/net/natsemi.c
index d8b1d2084..b58cb672c 100644
--- a/src/drivers/net/natsemi.c
+++ b/src/drivers/net/natsemi.c
@@ -262,7 +262,7 @@ natsemi_probe ( struct nic *nic, struct pci_device *pci ) {
ioaddr = pci->ioaddr;
vendor = pci->vendor;
dev_id = pci->device;
- nic_name = pci->name;
+ nic_name = pci->driver_name;
/* natsemi has a non-standard PM control register
* in PCI config space. Some boards apparently need
diff --git a/src/drivers/net/ns83820.c b/src/drivers/net/ns83820.c
index d14f670d3..33358a0df 100755
--- a/src/drivers/net/ns83820.c
+++ b/src/drivers/net/ns83820.c
@@ -821,7 +821,7 @@ static int ns83820_probe ( struct nic *nic, struct pci_device *pci ) {
return 0;
printf("ns83820.c: Found %s, vendor=0x%hX, device=0x%hX\n",
- pci->name, pci->vendor, pci->device);
+ pci->driver_name, pci->vendor, pci->device);
/* point to private storage */
ns = &nsx;
@@ -860,12 +860,12 @@ static int ns83820_probe ( struct nic *nic, struct pci_device *pci ) {
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", pci->driver_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);
+ pci->driver_name);
} else
ns->CFG_cache &= ~(CFG_DATA64_EN);
@@ -895,7 +895,7 @@ static int ns83820_probe ( struct nic *nic, struct pci_device *pci ) {
/* setup optical transceiver if we have one */
if (ns->CFG_cache & CFG_TBI_EN) {
- dprintf(("%s: enabling optical transceiver\n", pci->name));
+ dprintf(("%s: enabling optical transceiver\n", pci->driver_name));
writel(readl(ns->base + GPIOR) | 0x3e8, ns->base + GPIOR);
/* setup auto negotiation feature advertisement */
@@ -916,7 +916,7 @@ static int ns83820_probe ( struct nic *nic, struct pci_device *pci ) {
/* FIXME: reset_phy is defaulted to 0, should we reset anyway? */
if (reset_phy) {
- dprintf(("%s: resetting phy\n", pci->name));
+ dprintf(("%s: resetting phy\n", pci->driver_name));
writel(ns->CFG_cache | CFG_PHY_RST, ns->base + CFG);
writel(ns->CFG_cache, ns->base + CFG);
}
@@ -981,11 +981,11 @@ static int ns83820_probe ( struct nic *nic, struct pci_device *pci ) {
ns83820_getmac(nic, nic->node_addr);
if (using_dac) {
- dprintf(("%s: using 64 bit addressing.\n", pci->name));
+ dprintf(("%s: using 64 bit addressing.\n", pci->driver_name));
}
dprintf(("%s: DP83820 %d.%d: %! io=0x%hX\n",
- pci->name,
+ pci->driver_name,
(unsigned) readl(ns->base + SRR) >> 8,
(unsigned) readl(ns->base + SRR) & 0xff,
nic->node_addr, pci->ioaddr));
diff --git a/src/drivers/net/pcnet32.c b/src/drivers/net/pcnet32.c
index 179e3ca5a..8997603db 100644
--- a/src/drivers/net/pcnet32.c
+++ b/src/drivers/net/pcnet32.c
@@ -678,7 +678,7 @@ static int pcnet32_probe ( struct nic *nic, struct pci_device *pci ) {
/* 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->device);
+ pci->driver_name, pci->vendor, pci->device);
nic->irqno = 0;
pci_fill_nic ( nic, pci );
diff --git a/src/drivers/net/pnic.c b/src/drivers/net/pnic.c
index c74e7b508..75d08ac8d 100644
--- a/src/drivers/net/pnic.c
+++ b/src/drivers/net/pnic.c
@@ -234,6 +234,7 @@ static int pnic_probe ( struct pci_device *pci,
}
pnic = netdev->priv;
pci_set_drvdata ( pci, netdev );
+ netdev->dev = &pci->dev;
pnic->ioaddr = pci->ioaddr;
/* API version check */
diff --git a/src/drivers/net/r8169.c b/src/drivers/net/r8169.c
index 3ec1f097d..c806ccdc2 100644
--- a/src/drivers/net/r8169.c
+++ b/src/drivers/net/r8169.c
@@ -884,7 +884,7 @@ static int r8169_probe ( struct nic *nic, struct pci_device *pci ) {
int option = -1, Cap10_100 = 0, Cap1000 = 0;
printf ( "r8169.c: Found %s, Vendor=%hX Device=%hX\n",
- pci->name, pci->vendor, pci->device );
+ pci->driver_name, pci->vendor, pci->device );
board_idx++;
@@ -899,11 +899,11 @@ static int r8169_probe ( struct nic *nic, struct pci_device *pci ) {
for (i = 0; i < MAC_ADDR_LEN; i++)
nic->node_addr[i] = RTL_R8(MAC0 + i);
- DBG ( "%s: Identified chip type is '%s'.\n", pci->name,
+ DBG ( "%s: Identified chip type is '%s'.\n", pci->driver_name,
rtl_chip_info[tpc->chipset].name );
/* Print out some hardware info */
- DBG ( "%s: %s at IOAddr %#hX, ", pci->name, eth_ntoa ( nic->node_addr ),
+ DBG ( "%s: %s at IOAddr %#hX, ", pci->driver_name, eth_ntoa ( nic->node_addr ),
ioaddr );
/* Config PHY */
@@ -965,7 +965,7 @@ static int r8169_probe ( struct nic *nic, struct pci_device *pci ) {
RTL8169_WRITE_GMII_REG(ioaddr, PHY_1000_CTRL_REG,
Cap1000);
} else {
- DBG ( "%s: Auto-negotiation Enabled.\n", pci->name );
+ DBG ( "%s: Auto-negotiation Enabled.\n", pci->driver_name );
// enable 10/100 Full/Half Mode, leave PHY_AUTO_NEGO_REG bit4:0 unchanged
RTL8169_WRITE_GMII_REG(ioaddr, PHY_AUTO_NEGO_REG,
@@ -1016,7 +1016,7 @@ static int r8169_probe ( struct nic *nic, struct pci_device *pci ) {
udelay(100);
printf
("%s: 1000Mbps Full-duplex operation, TBI Link %s!\n",
- pci->name,
+ pci->driver_name,
(RTL_R32(TBICSR) & TBILinkOK) ? "OK" : "Failed");
}
diff --git a/src/drivers/net/rtl8139.c b/src/drivers/net/rtl8139.c
index a25755c2d..08130b230 100644
--- a/src/drivers/net/rtl8139.c
+++ b/src/drivers/net/rtl8139.c
@@ -532,6 +532,7 @@ static int rtl_probe ( struct pci_device *pci,
}
rtl = netdev->priv;
pci_set_drvdata ( pci, netdev );
+ netdev->dev = &pci->dev;
memset ( rtl, 0, sizeof ( *rtl ) );
rtl->ioaddr = pci->ioaddr;
diff --git a/src/drivers/net/sundance.c b/src/drivers/net/sundance.c
index 16272b7b8..99ba611dd 100644
--- a/src/drivers/net/sundance.c
+++ b/src/drivers/net/sundance.c
@@ -581,7 +581,7 @@ static int sundance_probe ( struct nic *nic, struct pci_device *pci ) {
/* 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->device);
+ pci->driver_name, pci->vendor, pci->device);
/* Get the MAC Address by reading the EEPROM */
for (i = 0; i < 3; i++) {
@@ -603,7 +603,7 @@ static int sundance_probe ( struct nic *nic, struct pci_device *pci ) {
/* point to private storage */
sdc = &sdx;
- sdc->nic_name = pci->name;
+ sdc->nic_name = pci->driver_name;
sdc->mtu = mtu;
pci_read_config_byte(pci, PCI_REVISION_ID, &sdc->pci_rev_id);
@@ -611,7 +611,7 @@ static int sundance_probe ( struct nic *nic, struct pci_device *pci ) {
DBG ( "Device revision id: %hx\n", sdc->pci_rev_id );
/* Print out some hardware info */
- DBG ( "%s: %s at ioaddr %hX, ", pci->name, nic->node_addr, BASE);
+ DBG ( "%s: %s at ioaddr %hX, ", pci->driver_name, nic->node_addr, BASE);
sdc->mii_preamble_required = 0;
if (1) {
diff --git a/src/drivers/net/tlan.c b/src/drivers/net/tlan.c
index e1ff5641c..105932086 100644
--- a/src/drivers/net/tlan.c
+++ b/src/drivers/net/tlan.c
@@ -809,7 +809,7 @@ static int tlan_probe ( struct nic *nic, struct pci_device *pci ) {
priv->vendor_id = pci->vendor;
priv->dev_id = pci->device;
- priv->nic_name = pci->name;
+ priv->nic_name = pci->driver_name;
priv->eoc = 0;
err = 0;
@@ -820,10 +820,10 @@ static int tlan_probe ( struct nic *nic, struct pci_device *pci ) {
(u8 *) & nic->node_addr[i]);
if (err) {
printf ( "TLAN: %s: Error reading MAC from eeprom: %d\n",
- pci->name, err);
+ pci->driver_name, err);
} else {
DBG ( "%s: %s at ioaddr %#lX, ",
- pci->name, eth_ntoa ( nic->node_addr ), pci->ioaddr );
+ pci->driver_name, eth_ntoa ( nic->node_addr ), pci->ioaddr );
}
priv->tlanRev = TLan_DioRead8(BASE, TLAN_DEF_REVISION);
diff --git a/src/drivers/net/tulip.c b/src/drivers/net/tulip.c
index f5fdbaad0..4b525848f 100644
--- a/src/drivers/net/tulip.c
+++ b/src/drivers/net/tulip.c
@@ -1252,7 +1252,7 @@ static int tulip_probe ( struct nic *nic, struct pci_device *pci ) {
tp->vendor_id = pci->vendor;
tp->dev_id = pci->device;
- tp->nic_name = pci->name;
+ tp->nic_name = pci->driver_name;
tp->if_port = 0;
tp->default_port = 0;
diff --git a/src/drivers/net/via-velocity.c b/src/drivers/net/via-velocity.c
index 78a45ca9e..740cc30a3 100644
--- a/src/drivers/net/via-velocity.c
+++ b/src/drivers/net/via-velocity.c
@@ -673,7 +673,7 @@ static int velocity_probe(struct pci_device *dev, struct pci_device *pci)
struct mac_regs *regs;
printf("via-velocity.c: Found %s Vendor=0x%hX Device=0x%hX\n",
- pci->name, pci->vendor, pci->device);
+ pci->driver_name, pci->vendor, pci->device);
/* point to private storage */
vptr = &vptx;
@@ -705,9 +705,9 @@ static int velocity_probe(struct pci_device *dev, struct pci_device *pci)
for (i = 0; i < 6; i++)
nic->node_addr[i] = readb(&regs->PAR[i]);
- DBG ( "%s: %s at ioaddr %#hX\n", pci->name, eth_ntoa ( nic->node_addr ), BASE );
+ DBG ( "%s: %s at ioaddr %#hX\n", pci->driver_name, eth_ntoa ( nic->node_addr ), BASE );
- velocity_get_options(&vptr->options, 0, pci->name);
+ velocity_get_options(&vptr->options, 0, pci->driver_name);
/*
* Mask out the options cannot be set to the chip