]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[efi] Avoid dragging in USB subsystem via efi_usb_path()
authorMichael Brown <mcb30@ipxe.org>
Fri, 30 Oct 2020 13:51:30 +0000 (13:51 +0000)
committerMichael Brown <mcb30@ipxe.org>
Fri, 30 Oct 2020 13:54:55 +0000 (13:54 +0000)
Commit 87e39a9c9 ("[efi] Split efi_usb_path() out to a separate
function") unintentionally introduced an undefined symbol reference
from efi_path.o to usb_depth(), causing the USB subsystem to become a
dependency of all EFI builds.

Fix by converting usb_depth() to a static inline function.

Reported-by: Pico Mitchell <pico@randomapplications.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/drivers/bus/usb.c
src/include/ipxe/usb.h

index 70a86c913fcd06e1b66e6353e177f88c501ad393..428ae26c185b8b6cac7e1bb47fa2aa9cc9e5bbe9 100644 (file)
@@ -2277,23 +2277,6 @@ unsigned int usb_route_string ( struct usb_device *usb ) {
        return route;
 }
 
-/**
- * Get USB depth
- *
- * @v usb              USB device
- * @ret depth          Hub depth
- */
-unsigned int usb_depth ( struct usb_device *usb ) {
-       struct usb_device *parent;
-       unsigned int depth;
-
-       /* Navigate up to root hub, constructing depth as we go */
-       for ( depth = 0 ; ( parent = usb->port->hub->usb ) ; usb = parent )
-               depth++;
-
-       return depth;
-}
-
 /**
  * Get USB root hub port
  *
index f41f4c35574e0f7472028e79242004605b868f80..911247ede15661a71d463a4fd046b1ec7b2a1020 100644 (file)
@@ -1239,6 +1239,23 @@ usb_set_interface ( struct usb_device *usb, unsigned int interface,
                             NULL, 0 );
 }
 
+/**
+ * Get USB depth
+ *
+ * @v usb              USB device
+ * @ret depth          Hub depth
+ */
+static inline unsigned int usb_depth ( struct usb_device *usb ) {
+       struct usb_device *parent;
+       unsigned int depth;
+
+       /* Navigate up to root hub, constructing depth as we go */
+       for ( depth = 0 ; ( parent = usb->port->hub->usb ) ; usb = parent )
+               depth++;
+
+       return depth;
+}
+
 extern struct list_head usb_buses;
 
 extern struct usb_interface_descriptor *
@@ -1274,7 +1291,6 @@ extern struct usb_bus * find_usb_bus_by_location ( unsigned int bus_type,
 extern int usb_alloc_address ( struct usb_bus *bus );
 extern void usb_free_address ( struct usb_bus *bus, unsigned int address );
 extern unsigned int usb_route_string ( struct usb_device *usb );
-extern unsigned int usb_depth ( struct usb_device *usb );
 extern struct usb_port * usb_root_hub_port ( struct usb_device *usb );
 extern struct usb_port * usb_transaction_translator ( struct usb_device *usb );