Index: uspace/drv/bus/usb/ehci/hc.c
===================================================================
--- uspace/drv/bus/usb/ehci/hc.c	(revision a5361fbf3216d3b3f9c1304b6a2b7b2610076827)
+++ uspace/drv/bus/usb/ehci/hc.c	(revision 4bfcf223f4d18f485680138a5fd5665d67b3244a)
@@ -240,6 +240,8 @@
  * @param[in] status Value of the status register at the time of interrupt.
  */
-void hc_interrupt(hc_t *instance, uint32_t status)
-{
+void hc_interrupt(hcd_t *hcd, uint32_t status)
+{
+	assert(hcd);
+	hc_t *instance = hcd->driver.data;
 	status = EHCI_RD(status);
 	assert(instance);
Index: uspace/drv/bus/usb/ehci/hc.h
===================================================================
--- uspace/drv/bus/usb/ehci/hc.h	(revision a5361fbf3216d3b3f9c1304b6a2b7b2610076827)
+++ uspace/drv/bus/usb/ehci/hc.h	(revision 4bfcf223f4d18f485680138a5fd5665d67b3244a)
@@ -78,7 +78,7 @@
 void hc_enqueue_endpoint(hc_t *instance, const endpoint_t *ep);
 void hc_dequeue_endpoint(hc_t *instance, const endpoint_t *ep);
+
 int hc_schedule(hcd_t *hcd, usb_transfer_batch_t *batch);
-
-void hc_interrupt(hc_t *instance, uint32_t status);
+void hc_interrupt(hcd_t *hcd, uint32_t status);
 #endif
 /**
Index: uspace/drv/bus/usb/ehci/main.c
===================================================================
--- uspace/drv/bus/usb/ehci/main.c	(revision a5361fbf3216d3b3f9c1304b6a2b7b2610076827)
+++ uspace/drv/bus/usb/ehci/main.c	(revision 4bfcf223f4d18f485680138a5fd5665d67b3244a)
@@ -47,11 +47,4 @@
 
 #define NAME "ehci"
-// TODO: This should be merged to hc_interrupt
-static void ehci_interrupt(hcd_t *hcd, uint32_t status)
-{
-	assert(hcd);
-	if (hcd->driver.data)
-		hc_interrupt(hcd->driver.data, status);
-}
 
 static int ehci_driver_init(hcd_t *hcd, const hw_res_list_parsed_t *res, bool irq)
@@ -67,5 +60,5 @@
 	if (ret == EOK)
 		hcd_set_implementation(hcd, instance, hc_schedule,
-		    NULL, NULL, ehci_interrupt, NULL);
+		    NULL, NULL, hc_interrupt, NULL);
 	return ret;
 }
Index: uspace/drv/bus/usb/ohci/hc.c
===================================================================
--- uspace/drv/bus/usb/ohci/hc.c	(revision a5361fbf3216d3b3f9c1304b6a2b7b2610076827)
+++ uspace/drv/bus/usb/ohci/hc.c	(revision 4bfcf223f4d18f485680138a5fd5665d67b3244a)
@@ -327,6 +327,8 @@
  * @param[in] status Value of the status register at the time of interrupt.
  */
-void hc_interrupt(hc_t *instance, uint32_t status)
-{
+void hc_interrupt(hcd_t *hcd, uint32_t status)
+{
+	assert(hcd);
+	hc_t *instance = hcd->driver.data;
 	status = OHCI_RD(status);
 	assert(instance);
Index: uspace/drv/bus/usb/ohci/hc.h
===================================================================
--- uspace/drv/bus/usb/ohci/hc.h	(revision a5361fbf3216d3b3f9c1304b6a2b7b2610076827)
+++ uspace/drv/bus/usb/ohci/hc.h	(revision 4bfcf223f4d18f485680138a5fd5665d67b3244a)
@@ -88,5 +88,5 @@
 int hc_status(hcd_t *hcd, uint32_t *status);
 
-void hc_interrupt(hc_t *instance, uint32_t status);
+void hc_interrupt(hcd_t *hcd, uint32_t status);
 #endif
 /**
Index: uspace/drv/bus/usb/ohci/main.c
===================================================================
--- uspace/drv/bus/usb/ohci/main.c	(revision a5361fbf3216d3b3f9c1304b6a2b7b2610076827)
+++ uspace/drv/bus/usb/ohci/main.c	(revision 4bfcf223f4d18f485680138a5fd5665d67b3244a)
@@ -46,11 +46,4 @@
 
 #define NAME "ohci"
-// TODO: This should be merged to hc_interrupt
-static void ohci_interrupt(hcd_t *hcd, uint32_t status)
-{
-	assert(hcd);
-	if (hcd->driver.data)
-		hc_interrupt(hcd->driver.data, status);
-}
 
 static int ohci_driver_init(hcd_t *hcd, const hw_res_list_parsed_t *res, bool irq)
@@ -66,5 +59,5 @@
 	if (ret == EOK)
 		hcd_set_implementation(hcd, instance, hc_schedule,
-		    ohci_endpoint_init, ohci_endpoint_fini, ohci_interrupt,
+		    ohci_endpoint_init, ohci_endpoint_fini, hc_interrupt,
 		    hc_status);
 	return ret;
Index: uspace/drv/bus/usb/uhci/hc.c
===================================================================
--- uspace/drv/bus/usb/uhci/hc.c	(revision a5361fbf3216d3b3f9c1304b6a2b7b2610076827)
+++ uspace/drv/bus/usb/uhci/hc.c	(revision 4bfcf223f4d18f485680138a5fd5665d67b3244a)
@@ -146,5 +146,5 @@
 /** Take action based on the interrupt cause.
  *
- * @param[in] instance UHCI structure to use.
+ * @param[in] hcd HCD structure to use.
  * @param[in] status Value of the status register at the time of interrupt.
  *
@@ -154,6 +154,8 @@
  * - resume from suspend state (not implemented)
  */
-void hc_interrupt(hc_t *instance, uint16_t status)
-{
+void hc_interrupt(hcd_t *hcd, uint32_t status)
+{
+	assert(hcd);
+	hc_t *instance = hcd->driver.data;
 	assert(instance);
 	/* Lower 2 bits are transaction error and transaction complete */
Index: uspace/drv/bus/usb/uhci/hc.h
===================================================================
--- uspace/drv/bus/usb/uhci/hc.h	(revision a5361fbf3216d3b3f9c1304b6a2b7b2610076827)
+++ uspace/drv/bus/usb/uhci/hc.h	(revision 4bfcf223f4d18f485680138a5fd5665d67b3244a)
@@ -127,5 +127,5 @@
 int hc_gen_irq_code(irq_code_t *code, const hw_res_list_parsed_t *hw_res);
 
-void hc_interrupt(hc_t *instance, uint16_t status);
+void hc_interrupt(hcd_t *hcd, uint32_t status);
 int hc_status(hcd_t *hcd, uint32_t *status);
 int hc_schedule(hcd_t *hcd, usb_transfer_batch_t *batch);
Index: uspace/drv/bus/usb/uhci/main.c
===================================================================
--- uspace/drv/bus/usb/uhci/main.c	(revision a5361fbf3216d3b3f9c1304b6a2b7b2610076827)
+++ uspace/drv/bus/usb/uhci/main.c	(revision 4bfcf223f4d18f485680138a5fd5665d67b3244a)
@@ -48,12 +48,4 @@
 #define NAME "uhci"
 
-// TODO: This should be merged to hc_interrupt
-static void uhci_interrupt(hcd_t *hcd, uint32_t status)
-{
-	assert(hcd);
-	if (hcd->driver.data)
-		hc_interrupt(hcd->driver.data, status);
-}
-
 static int uhci_driver_init(hcd_t *hcd, const hw_res_list_parsed_t *res, bool irq)
 {
@@ -68,5 +60,5 @@
 	if (ret == EOK)
 		hcd_set_implementation(hcd, instance, hc_schedule, NULL, NULL,
-		    uhci_interrupt, hc_status);
+		    hc_interrupt, hc_status);
 	return ret;
 }
