Index: uspace/drv/pciintel/pci.c
===================================================================
--- uspace/drv/pciintel/pci.c	(revision b9d910f478e726c33c5a0e72d0448d03b92734a0)
+++ uspace/drv/pciintel/pci.c	(revision fb78ae72e031b231ee7eebd26444aa7fd1455dc1)
@@ -49,4 +49,8 @@
 #include <ipc/devman.h>
 #include <ipc/dev_iface.h>
+#include <ipc/irc.h>
+#include <ipc/ns.h>
+#include <ipc/services.h>
+#include <sysinfo.h>
 #include <ops/hw_res.h>
 #include <device/hw_res.h>
@@ -72,7 +76,36 @@
 static bool pciintel_enable_child_interrupt(device_t *dev)
 {
-	/* TODO */
-	
-	return false;
+	/* This is an old ugly way, copied from ne2000 driver */
+	assert(dev);
+	pci_dev_data_t *dev_data = (pci_dev_data_t *) dev->driver_data;
+
+  sysarg_t apic;
+  sysarg_t i8259;
+	int irc_phone = -1;
+	int irc_service = 0;
+
+  if ((sysinfo_get_value("apic", &apic) == EOK) && (apic)) {
+    irc_service = SERVICE_APIC;
+	} else if ((sysinfo_get_value("i8259", &i8259) == EOK) && (i8259)) {
+    irc_service = SERVICE_I8259;
+	}
+
+  if (irc_service) {
+    while (irc_phone < 0)
+      irc_phone = service_connect_blocking(irc_service, 0, 0);
+  } else {
+		return false;
+	}
+
+	size_t i;
+  for (i = 0; i < dev_data->hw_resources.count; i++) {
+		if (dev_data->hw_resources.resources[i].type == INTERRUPT) {
+			int irq = dev_data->hw_resources.resources[i].res.interrupt.irq;
+			async_msg_1(irc_phone, IRC_ENABLE_INTERRUPT, irq);
+		}
+	}
+
+	async_hangup(irc_phone);
+	return true;
 }
 
Index: uspace/drv/uhci-hcd/main.c
===================================================================
--- uspace/drv/uhci-hcd/main.c	(revision b9d910f478e726c33c5a0e72d0448d03b92734a0)
+++ uspace/drv/uhci-hcd/main.c	(revision fb78ae72e031b231ee7eebd26444aa7fd1455dc1)
@@ -34,8 +34,5 @@
 #include <driver.h>
 #include <usb_iface.h>
-#include <ipc/irc.h>
-#include <ipc/ns.h>
-#include <ipc/services.h>
-#include <sysinfo.h>
+#include <device/hw_res.h>
 
 #include <errno.h>
@@ -84,5 +81,4 @@
 	assert(device);
 	uhci_t *hc = dev_to_uhci(device);
-	usb_log_info("LOL HARDWARE INTERRUPT: %p.\n", hc);
 	uint16_t status = IPC_GET_ARG1(*call);
 	assert(hc);
@@ -111,32 +107,10 @@
 
 	CHECK_RET_RETURN(ret,
-	    "Failed(%d) to get I/O registers addresses for device:.\n",
-	    ret, device->handle);
+	    "Failed(%d) to get I/O addresses:.\n", ret, device->handle);
 	usb_log_info("I/O regs at 0x%X (size %zu), IRQ %d.\n",
 	    io_reg_base, io_reg_size, irq);
 
-
-  sysarg_t apic;
-  sysarg_t i8259;
-	int irc_phone = -1;
-	int irc_service = 0;
-
-  if ((sysinfo_get_value("apic", &apic) == EOK) && (apic)) {
-    irc_service = SERVICE_APIC;
-		usb_log_debug("SERVICE_APIC\n");
-	} else if ((sysinfo_get_value("i8259", &i8259) == EOK) && (i8259)) {
-    irc_service = SERVICE_I8259;
-		usb_log_debug("SERVICE_I8259\n");
-	}
-
-  if (irc_service) {
-    while (irc_phone < 0)
-      irc_phone = service_connect_blocking(irc_service, 0, 0);
-  }
-	usb_log_debug("Interrupt conttroller phone: %d\n", irc_phone);
-
-	async_msg_1(irc_phone, IRC_ENABLE_INTERRUPT, irq);
-	async_hangup(irc_phone);
-
+	ret = pci_enable_interrupts(device);
+	CHECK_RET_RETURN(ret, "Failed(%d) to get enable interrupts:\n", ret);
 
 	uhci_t *uhci_hc = malloc(sizeof(uhci_t));
Index: uspace/drv/uhci-hcd/pci.c
===================================================================
--- uspace/drv/uhci-hcd/pci.c	(revision b9d910f478e726c33c5a0e72d0448d03b92734a0)
+++ uspace/drv/uhci-hcd/pci.c	(revision fb78ae72e031b231ee7eebd26444aa7fd1455dc1)
@@ -121,5 +121,12 @@
 	return rc;
 }
-
+/*----------------------------------------------------------------------------*/
+int pci_enable_interrupts(device_t *device)
+{
+	int parent_phone = devman_parent_device_connect(device->handle,
+	    IPC_FLAG_BLOCKING);
+	bool enabled = hw_res_enable_interrupt(parent_phone);
+	return enabled ? EOK : EIO;
+}
 /**
  * @}
Index: uspace/drv/uhci-hcd/pci.h
===================================================================
--- uspace/drv/uhci-hcd/pci.h	(revision b9d910f478e726c33c5a0e72d0448d03b92734a0)
+++ uspace/drv/uhci-hcd/pci.h	(revision fb78ae72e031b231ee7eebd26444aa7fd1455dc1)
@@ -39,4 +39,5 @@
 
 int pci_get_my_registers(device_t *, uintptr_t *, size_t *, int *);
+int pci_enable_interrupts(device_t *device);
 
 #endif
Index: uspace/drv/uhci-hcd/uhci.h
===================================================================
--- uspace/drv/uhci-hcd/uhci.h	(revision b9d910f478e726c33c5a0e72d0448d03b92734a0)
+++ uspace/drv/uhci-hcd/uhci.h	(revision fb78ae72e031b231ee7eebd26444aa7fd1455dc1)
@@ -104,17 +104,4 @@
 static inline void uhci_fini(uhci_t *instance) {};
 
-int uhci_transfer(
-  uhci_t *instance,
-  device_t *dev,
-  usb_target_t target,
-  usb_transfer_type_t transfer_type,
-	bool toggle,
-  usb_packet_id pid,
-	bool low_speed,
-  void *buffer, size_t size,
-  usbhc_iface_transfer_out_callback_t callback_out,
-  usbhc_iface_transfer_in_callback_t callback_in,
-  void *arg );
-
 int uhci_schedule(uhci_t *instance, batch_t *batch);
 
