]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[usb] Allow USB device IDs to include arbitrary driver-specific data
authorMichael Brown <mcb30@ipxe.org>
Mon, 7 Dec 2015 00:32:08 +0000 (00:32 +0000)
committerMichael Brown <mcb30@ipxe.org>
Mon, 7 Dec 2015 13:08:23 +0000 (13:08 +0000)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/drivers/bus/usb.c
src/include/ipxe/usb.h

index a3718d831e7d2c51b72bbe5b5f8970e890d09652..b1fa4efb524362701bcec08306e7f548e5899031 100644 (file)
@@ -1186,6 +1186,11 @@ static int usb_probe ( struct usb_function *func,
                return -ENOENT;
        }
 
+       /* Record driver */
+       func->driver = driver;
+       func->id = id;
+       func->dev.driver_name = id->name;
+
        /* Probe driver */
        if ( ( rc = driver->probe ( func, config ) ) != 0 ) {
                DBGC ( usb, "USB %s failed to probe driver %s: %s\n",
@@ -1193,9 +1198,6 @@ static int usb_probe ( struct usb_function *func,
                return rc;
        }
 
-       /* Record driver */
-       func->driver = driver;
-       func->dev.driver_name = id->name;
        return 0;
 }
 
index c268988f430d28d9273876a38488a0054dfc2d45..37b6d94edd5f3a52dd8c2bb207b6457082b9f705 100644 (file)
@@ -662,6 +662,8 @@ struct usb_function {
        struct usb_driver *driver;
        /** Driver private data */
        void *priv;
+       /** Driver device ID */
+       struct usb_device_id *id;
 
        /** List of interface numbers
         *
@@ -1308,6 +1310,8 @@ struct usb_device_id {
        uint16_t vendor;
        /** Product ID */
        uint16_t product;
+       /** Arbitrary driver data */
+       unsigned long driver_data;
 };
 
 /** Match-anything ID */