aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Brown <mcb30@ipxe.org>2015-05-08 16:50:47 +0100
committerMichael Brown <mcb30@ipxe.org>2015-05-09 20:09:08 +0100
commita66fd8920df1e0a534d0a8ed68adb6143a304a66 (patch)
tree8068a0cdaed2b181c35bfab53e5b1465fd93d920 /src
parentb3de9664c7b7d4878d3dcd5a3c62a8e0155d5e89 (diff)
downloadipxe-a66fd8920df1e0a534d0a8ed68adb6143a304a66.zip
ipxe-a66fd8920df1e0a534d0a8ed68adb6143a304a66.tar.gz
ipxe-a66fd8920df1e0a534d0a8ed68adb6143a304a66.tar.bz2
[usb] Add find_usb_bus_by_location() helper function
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src')
-rw-r--r--src/drivers/bus/usb.c20
-rw-r--r--src/include/ipxe/usb.h2
2 files changed, 22 insertions, 0 deletions
diff --git a/src/drivers/bus/usb.c b/src/drivers/bus/usb.c
index 16f1825..0fe6da2 100644
--- a/src/drivers/bus/usb.c
+++ b/src/drivers/bus/usb.c
@@ -1976,6 +1976,26 @@ void free_usb_bus ( struct usb_bus *bus ) {
free ( bus );
}
+/**
+ * Find USB bus by device location
+ *
+ * @v bus_type Bus type
+ * @v location Bus location
+ * @ret bus USB bus, or NULL
+ */
+struct usb_bus * find_usb_bus_by_location ( unsigned int bus_type,
+ unsigned int location ) {
+ struct usb_bus *bus;
+
+ for_each_usb_bus ( bus ) {
+ if ( ( bus->dev->desc.bus_type == bus_type ) &&
+ ( bus->dev->desc.location == location ) )
+ return bus;
+ }
+
+ return NULL;
+}
+
/******************************************************************************
*
* USB address assignment
diff --git a/src/include/ipxe/usb.h b/src/include/ipxe/usb.h
index ee826bc..eb5b99f 100644
--- a/src/include/ipxe/usb.h
+++ b/src/include/ipxe/usb.h
@@ -1211,6 +1211,8 @@ extern struct usb_bus * alloc_usb_bus ( struct device *dev,
extern int register_usb_bus ( struct usb_bus *bus );
extern void unregister_usb_bus ( struct usb_bus *bus );
extern void free_usb_bus ( struct usb_bus *bus );
+extern struct usb_bus * find_usb_bus_by_location ( unsigned int bus_type,
+ unsigned int location );
extern int usb_alloc_address ( struct usb_bus *bus );
extern void usb_free_address ( struct usb_bus *bus, unsigned int address );