diff options
| author | Michael Brown | 2015-05-08 17:50:47 +0200 |
|---|---|---|
| committer | Michael Brown | 2015-05-09 21:09:08 +0200 |
| commit | a66fd8920df1e0a534d0a8ed68adb6143a304a66 (patch) | |
| tree | 8068a0cdaed2b181c35bfab53e5b1465fd93d920 | |
| parent | [ehci] Poll child companion controllers after disowning port (diff) | |
| download | ipxe-a66fd8920df1e0a534d0a8ed68adb6143a304a66.tar.gz ipxe-a66fd8920df1e0a534d0a8ed68adb6143a304a66.tar.xz ipxe-a66fd8920df1e0a534d0a8ed68adb6143a304a66.zip | |
[usb] Add find_usb_bus_by_location() helper function
Signed-off-by: Michael Brown <mcb30@ipxe.org>
| -rw-r--r-- | src/drivers/bus/usb.c | 20 | ||||
| -rw-r--r-- | src/include/ipxe/usb.h | 2 |
2 files changed, 22 insertions, 0 deletions
diff --git a/src/drivers/bus/usb.c b/src/drivers/bus/usb.c index 16f182595..0fe6da204 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 ee826bc11..eb5b99f8a 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 ); |
