diff --git a/src/drivers/bus/eisa.c b/src/drivers/bus/eisa.c index 22a61586..a4efe262 100644 --- a/src/drivers/bus/eisa.c +++ b/src/drivers/bus/eisa.c @@ -63,8 +63,8 @@ static int eisa_probe ( struct eisa_device *eisa ) { ISA_PROD_ID ( eisa->prod_id ) ) continue; eisa->driver = driver; - eisa->driver_name = id->name; - DBG ( "...using driver %s\n", eisa->driver_name ); + eisa->dev.driver_name = id->name; + DBG ( "...using driver %s\n", eisa->dev.driver_name ); if ( ( rc = driver->probe ( eisa, id ) ) != 0 ) { DBG ( "......probe failed\n" ); continue; diff --git a/src/drivers/bus/isa.c b/src/drivers/bus/isa.c index e40d382a..9b562c66 100644 --- a/src/drivers/bus/isa.c +++ b/src/drivers/bus/isa.c @@ -114,6 +114,7 @@ static int isabus_probe ( struct root_device *rootdev ) { /* Add to device hierarchy */ snprintf ( isa->dev.name, sizeof ( isa->dev.name ), "ISA%04x", isa->ioaddr ); + isa->dev.driver_name = driver->name; isa->dev.desc.bus_type = BUS_TYPE_ISA; isa->dev.desc.vendor = driver->vendor_id; isa->dev.desc.device = driver->prod_id; diff --git a/src/drivers/bus/isapnp.c b/src/drivers/bus/isapnp.c index d8bfcd7c..f7845d3f 100644 --- a/src/drivers/bus/isapnp.c +++ b/src/drivers/bus/isapnp.c @@ -600,8 +600,8 @@ static int isapnp_probe ( struct isapnp_device *isapnp ) { ISA_PROD_ID ( isapnp->prod_id ) ) continue; isapnp->driver = driver; - isapnp->driver_name = id->name; - DBG ( "...using driver %s\n", isapnp->driver_name ); + isapnp->dev.driver_name = id->name; + DBG ( "...using driver %s\n", isapnp->dev.driver_name ); if ( ( rc = driver->probe ( isapnp, id ) ) != 0 ) { DBG ( "......probe failed\n" ); continue; diff --git a/src/drivers/bus/mca.c b/src/drivers/bus/mca.c index 055b010d..0405c3b8 100644 --- a/src/drivers/bus/mca.c +++ b/src/drivers/bus/mca.c @@ -44,8 +44,8 @@ static int mca_probe ( struct mca_device *mca ) { if ( id->id != MCA_ID ( mca ) ) continue; mca->driver = driver; - mca->driver_name = id->name; - DBG ( "...using driver %s\n", mca->driver_name ); + mca->dev.driver_name = id->name; + DBG ( "...using driver %s\n", mca->dev.driver_name ); if ( ( rc = driver->probe ( mca, id ) ) != 0 ) { DBG ( "......probe failed\n" ); continue; diff --git a/src/drivers/linux/linux.c b/src/drivers/linux/linux.c index 1f26f566..83546b27 100644 --- a/src/drivers/linux/linux.c +++ b/src/drivers/linux/linux.c @@ -75,6 +75,7 @@ static int linux_probe(struct root_device *rootdev) if (driver->probe(device, request) == 0) { device->driver = driver; + device->dev.driver_name = driver->name; /* Driver handled the device so release ownership */ device = NULL; } else { diff --git a/src/include/ipxe/device.h b/src/include/ipxe/device.h index 635ce59c..435af6ec 100644 --- a/src/include/ipxe/device.h +++ b/src/include/ipxe/device.h @@ -58,6 +58,8 @@ struct device_description { struct device { /** Name */ char name[16]; + /** Driver name */ + const char *driver_name; /** Device description */ struct device_description desc; /** Devices on the same bus */ diff --git a/src/include/ipxe/eisa.h b/src/include/ipxe/eisa.h index 1588f811..22a1ed94 100644 --- a/src/include/ipxe/eisa.h +++ b/src/include/ipxe/eisa.h @@ -54,8 +54,6 @@ struct eisa_device { * this field. */ void *priv; - /** Driver name */ - const char *driver_name; }; /** An EISA driver */ diff --git a/src/include/ipxe/isa.h b/src/include/ipxe/isa.h index 6d8f7616..4e69fc6f 100644 --- a/src/include/ipxe/isa.h +++ b/src/include/ipxe/isa.h @@ -22,8 +22,6 @@ struct isa_device { * this field. */ void *priv; - /** Driver name */ - const char *driver_name; }; /* diff --git a/src/include/ipxe/isapnp.h b/src/include/ipxe/isapnp.h index f2b0b34a..47a47025 100644 --- a/src/include/ipxe/isapnp.h +++ b/src/include/ipxe/isapnp.h @@ -198,8 +198,6 @@ struct isapnp_device { * this field. */ void *priv; - /** Driver name */ - const char *driver_name; }; /** An ISAPnP driver */ diff --git a/src/include/ipxe/mca.h b/src/include/ipxe/mca.h index 79543c1a..d86dab19 100644 --- a/src/include/ipxe/mca.h +++ b/src/include/ipxe/mca.h @@ -50,8 +50,6 @@ struct mca_device { * this field. */ void *priv; - /** Driver name */ - const char *driver_name; }; #define MCA_ID(mca) ( ( (mca)->pos[1] << 8 ) + (mca)->pos[0] ) diff --git a/src/include/ipxe/pci.h b/src/include/ipxe/pci.h index 90802a3f..960454d6 100644 --- a/src/include/ipxe/pci.h +++ b/src/include/ipxe/pci.h @@ -410,6 +410,7 @@ static inline void pci_set_driver ( struct pci_device *pci, struct pci_device_id *id ) { pci->driver = driver; pci->id = id; + pci->dev.driver_name = id->name; } /** diff --git a/src/usr/ifmgmt.c b/src/usr/ifmgmt.c index e9fdaad0..04985159 100644 --- a/src/usr/ifmgmt.c +++ b/src/usr/ifmgmt.c @@ -87,9 +87,10 @@ static void ifstat_errors ( struct net_device_stats *stats, * @v netdev Network device */ void ifstat ( struct net_device *netdev ) { - printf ( "%s: %s on %s (%s)\n" + printf ( "%s: %s using %s on %s (%s)\n" " [Link:%s, TX:%d TXE:%d RX:%d RXE:%d]\n", - netdev->name, netdev_addr ( netdev ), netdev->dev->name, + netdev->name, netdev_addr ( netdev ), + netdev->dev->driver_name, netdev->dev->name, ( netdev_is_open ( netdev ) ? "open" : "closed" ), ( netdev_link_ok ( netdev ) ? "up" : "down" ), netdev->tx_stats.good, netdev->tx_stats.bad,