Index: uspace/drv/bus/usb/ehci/res.c
===================================================================
--- uspace/drv/bus/usb/ehci/res.c	(revision ce33c10fc90eab5218927e691819a3b9c30413a8)
+++ uspace/drv/bus/usb/ehci/res.c	(revision 57c8fc93f54611667e4ee84440ca8cd4272cff4e)
@@ -105,22 +105,4 @@
 	hw_res_list_parsed_clean(&hw_res);
 	return EOK;
-}
-
-/** Calls the PCI driver with a request to enable interrupts
- *
- * @param[in] device Device asking for interrupts
- * @return Error code.
- */
-int enable_interrupts(ddf_dev_t *device)
-{
-	async_sess_t *parent_sess = devman_parent_device_connect(
-	    EXCHANGE_SERIALIZE, ddf_dev_get_handle(device), IPC_FLAG_BLOCKING);
-	if (!parent_sess)
-		return ENOMEM;
-	
-	const bool enabled = hw_res_enable_interrupt(parent_sess);
-	async_hangup(parent_sess);
-	
-	return enabled ? EOK : EIO;
 }
 
Index: uspace/drv/bus/usb/ohci/ohci.c
===================================================================
--- uspace/drv/bus/usb/ohci/ohci.c	(revision ce33c10fc90eab5218927e691819a3b9c30413a8)
+++ uspace/drv/bus/usb/ohci/ohci.c	(revision 57c8fc93f54611667e4ee84440ca8cd4272cff4e)
@@ -114,5 +114,5 @@
 	/* Try to enable interrupts */
 	bool interrupts = false;
-	ret = enable_interrupts(device);
+	ret = hcd_ddf_enable_interrupts(device);
 	if (ret != EOK) {
 		usb_log_warning("Failed to enable interrupts: %s."
Index: uspace/drv/bus/usb/ohci/res.c
===================================================================
--- uspace/drv/bus/usb/ohci/res.c	(revision ce33c10fc90eab5218927e691819a3b9c30413a8)
+++ uspace/drv/bus/usb/ohci/res.c	(revision 57c8fc93f54611667e4ee84440ca8cd4272cff4e)
@@ -85,22 +85,4 @@
 }
 
-/** Call the PCI driver with a request to enable interrupts
- *
- * @param[in] device Device asking for interrupts
- * @return Error code.
- */
-int enable_interrupts(ddf_dev_t *device)
-{
-	async_sess_t *parent_sess =
-	    devman_parent_device_connect(EXCHANGE_SERIALIZE,
-	    ddf_dev_get_handle(device), IPC_FLAG_BLOCKING);
-	if (!parent_sess)
-		return ENOMEM;
-	
-	const bool enabled = hw_res_enable_interrupt(parent_sess);
-	async_hangup(parent_sess);
-	
-	return enabled ? EOK : EIO;
-}
 
 /**
Index: uspace/drv/bus/usb/uhci/res.c
===================================================================
--- uspace/drv/bus/usb/uhci/res.c	(revision ce33c10fc90eab5218927e691819a3b9c30413a8)
+++ uspace/drv/bus/usb/uhci/res.c	(revision 57c8fc93f54611667e4ee84440ca8cd4272cff4e)
@@ -83,23 +83,4 @@
 }
 
-/** Call the PCI driver with a request to enable interrupts
- *
- * @param[in] device Device asking for interrupts
- * @return Error code.
- */
-int enable_interrupts(ddf_dev_t *device)
-{
-	async_sess_t *parent_sess =
-	    devman_parent_device_connect(EXCHANGE_SERIALIZE,
-	    ddf_dev_get_handle(device), IPC_FLAG_BLOCKING);
-	if (!parent_sess)
-		return ENOMEM;
-
-	const bool enabled = hw_res_enable_interrupt(parent_sess);
-	async_hangup(parent_sess);
-
-	return enabled ? EOK : EIO;
-}
-
 /** Call the PCI driver with a request to clear legacy support register
  *
Index: uspace/drv/bus/usb/uhci/uhci.c
===================================================================
--- uspace/drv/bus/usb/uhci/uhci.c	(revision ce33c10fc90eab5218927e691819a3b9c30413a8)
+++ uspace/drv/bus/usb/uhci/uhci.c	(revision 57c8fc93f54611667e4ee84440ca8cd4272cff4e)
@@ -115,5 +115,5 @@
 
 	bool interrupts = false;
-	ret = enable_interrupts(device);
+	ret = hcd_ddf_enable_interrupts(device);
 	if (ret != EOK) {
 		usb_log_warning("Failed to enable interrupts: %s."
Index: uspace/lib/usbhost/include/usb/host/ddf_helpers.h
===================================================================
--- uspace/lib/usbhost/include/usb/host/ddf_helpers.h	(revision ce33c10fc90eab5218927e691819a3b9c30413a8)
+++ uspace/lib/usbhost/include/usb/host/ddf_helpers.h	(revision 57c8fc93f54611667e4ee84440ca8cd4272cff4e)
@@ -37,4 +37,5 @@
 #define LIBUSBHOST_HOST_DDF_HELPERS_H
 
+#include <device/hw_res_parsed.h>
 #include <usb/host/hcd.h>
 #include <usbhc_iface.h>
@@ -47,4 +48,7 @@
 hcd_t *dev_to_hcd(ddf_dev_t *dev);
 
+int hcd_ddf_enable_interrupts(ddf_dev_t *device);
+int hcd_ddf_get_registers(ddf_dev_t *device, hw_res_list_parsed_t *hw_res);
+
 #endif
 
Index: uspace/lib/usbhost/src/ddf_helpers.c
===================================================================
--- uspace/lib/usbhost/src/ddf_helpers.c	(revision ce33c10fc90eab5218927e691819a3b9c30413a8)
+++ uspace/lib/usbhost/src/ddf_helpers.c	(revision 57c8fc93f54611667e4ee84440ca8cd4272cff4e)
@@ -39,4 +39,5 @@
 #include <usb/descriptor.h>
 #include <usb/request.h>
+#include <devman.h>
 #include <errno.h>
 #include <str_error.h>
@@ -640,4 +641,37 @@
 		ddf_fun_destroy(hc->ctl_fun);
 }
+
+
+//TODO: Move this to generic ddf?
+/** Call the parent driver with a request to enable interrupts
+ *
+ * @param[in] device Device asking for interrupts
+ * @return Error code.
+ */
+int hcd_ddf_enable_interrupts(ddf_dev_t *device)
+{
+	assert(device);
+	async_sess_t *parent_sess =
+	    devman_parent_device_connect(EXCHANGE_SERIALIZE,
+	    ddf_dev_get_handle(device), IPC_FLAG_BLOCKING);
+	const bool enabled = hw_res_enable_interrupt(parent_sess);
+	async_hangup(parent_sess);
+
+	return enabled ? EOK : EIO;
+}
+
+int hcd_ddf_get_registers(ddf_dev_t *device, hw_res_list_parsed_t *hw_res)
+{
+	assert(device);
+	assert(hw_res);
+
+	async_sess_t *parent_sess =
+	    devman_parent_device_connect(EXCHANGE_SERIALIZE,
+	    ddf_dev_get_handle(device), IPC_FLAG_BLOCKING);
+	hw_res_list_parsed_init(hw_res);
+	const int ret = hw_res_get_list_parsed(parent_sess, hw_res, 0);
+	async_hangup(parent_sess);
+	return ret;
+}
 /**
  * @}
