Browse Source

[usb] Maintain a list of all USB buses

Signed-off-by: Michael Brown <mcb30@ipxe.org>
tags/v1.20.1
Michael Brown 10 years ago
parent
commit
5e1e2069fd
2 changed files with 18 additions and 0 deletions
  1. 10
    0
      src/drivers/bus/usb.c
  2. 8
    0
      src/include/ipxe/usb.h

+ 10
- 0
src/drivers/bus/usb.c View File

40
  *
40
  *
41
  */
41
  */
42
 
42
 
43
+/** List of USB buses */
44
+struct list_head usb_buses = LIST_HEAD_INIT ( usb_buses );
45
+
43
 /******************************************************************************
46
 /******************************************************************************
44
  *
47
  *
45
  * Utility functions
48
  * Utility functions
1894
 	if ( ( rc = bus->host->open ( bus ) ) != 0 )
1897
 	if ( ( rc = bus->host->open ( bus ) ) != 0 )
1895
 		goto err_open;
1898
 		goto err_open;
1896
 
1899
 
1900
+	/* Add to list of USB buses */
1901
+	list_add_tail ( &bus->list, &usb_buses );
1902
+
1897
 	/* Register root hub */
1903
 	/* Register root hub */
1898
 	if ( ( rc = register_usb_hub ( bus->hub ) ) != 0 )
1904
 	if ( ( rc = register_usb_hub ( bus->hub ) ) != 0 )
1899
 		goto err_register_hub;
1905
 		goto err_register_hub;
1905
 
1911
 
1906
 	unregister_usb_hub ( bus->hub );
1912
 	unregister_usb_hub ( bus->hub );
1907
  err_register_hub:
1913
  err_register_hub:
1914
+	list_del ( &bus->list );
1908
 	bus->host->close ( bus );
1915
 	bus->host->close ( bus );
1909
  err_open:
1916
  err_open:
1910
 	return rc;
1917
 	return rc;
1927
 	/* Unregister root hub */
1934
 	/* Unregister root hub */
1928
 	unregister_usb_hub ( bus->hub );
1935
 	unregister_usb_hub ( bus->hub );
1929
 
1936
 
1937
+	/* Remove from list of USB buses */
1938
+	list_del ( &bus->list );
1939
+
1930
 	/* Close bus */
1940
 	/* Close bus */
1931
 	bus->host->close ( bus );
1941
 	bus->host->close ( bus );
1932
 
1942
 

+ 8
- 0
src/include/ipxe/usb.h View File

916
 	/** Root hub */
916
 	/** Root hub */
917
 	struct usb_hub *hub;
917
 	struct usb_hub *hub;
918
 
918
 
919
+	/** List of USB buses */
920
+	struct list_head list;
919
 	/** List of devices */
921
 	/** List of devices */
920
 	struct list_head devices;
922
 	struct list_head devices;
921
 	/** List of hubs */
923
 	/** List of hubs */
999
 	bus->host->poll ( bus );
1001
 	bus->host->poll ( bus );
1000
 }
1002
 }
1001
 
1003
 
1004
+/** Iterate over all USB buses */
1005
+#define for_each_usb_bus( bus ) \
1006
+	list_for_each_entry ( (bus), &usb_buses, list )
1007
+
1002
 /**
1008
 /**
1003
  * Complete transfer (without error)
1009
  * Complete transfer (without error)
1004
  *
1010
  *
1182
 			     NULL, 0 );
1188
 			     NULL, 0 );
1183
 }
1189
 }
1184
 
1190
 
1191
+extern struct list_head usb_buses;
1192
+
1185
 extern struct usb_interface_descriptor *
1193
 extern struct usb_interface_descriptor *
1186
 usb_interface_descriptor ( struct usb_configuration_descriptor *config,
1194
 usb_interface_descriptor ( struct usb_configuration_descriptor *config,
1187
 			   unsigned int interface, unsigned int alternate );
1195
 			   unsigned int interface, unsigned int alternate );

Loading…
Cancel
Save