Index: uspace/lib/usb/include/usb/hcdhubd.h
===================================================================
--- uspace/lib/usb/include/usb/hcdhubd.h	(revision 1f43c8f679fd7fa7cca8cbe2f2a91810db9ada84)
+++ uspace/lib/usb/include/usb/hcdhubd.h	(revision 4144630f53ee5e44772efd8ae1c1f4ee7e942bf7)
@@ -116,4 +116,21 @@
 } usb_hcd_transfer_ops_t;
 
+/**
+ * @brief structure holding information about free and used addresses
+ *
+ * This structure should not be used outside usb hcd driver.
+ * You better consider it to be 'private'.
+ */
+typedef struct {
+	/** lower bound included in the interval */
+	usb_address_t lower_bound;
+
+	/** upper bound, excluded from the interval */
+	usb_address_t upper_bound;
+
+	/** */
+	link_t link;
+}usb_address_list_t;
+
 struct usb_hc_device {
 	/** Transfer operations. */
@@ -131,4 +148,7 @@
 	/** List of hubs operating from this HC. */
 	link_t hubs;
+
+	/** Structure with free and used addresses */
+	link_t addresses;
 
 	/** Link to other driven HCs. */
@@ -148,4 +168,21 @@
 int usb_hcd_add_root_hub(usb_hc_device_t *dev);
 
+/**
+ * find first not yet used address on this host controller and use it
+ * @param this_hcd
+ * @return number in the range of allowed usb addresses or
+ *     a negative number if not succesful
+ */
+usb_address_t usb_use_free_address(usb_hc_device_t * this_hcd);
+
+/**
+ * @brief free the address in the address space of this hcd.
+ *
+ * if address is not used, nothing happens
+ * @param this_hcd
+ * @param addr
+ */
+void usb_free_used_address(usb_hc_device_t * this_hcd, usb_address_t addr );
+
 
 /*
