Index: HelenOS.config
===================================================================
--- HelenOS.config	(revision b01995bc1785fe762503d71e2ecf19c3d7630acb)
+++ HelenOS.config	(revision 11dd29b9dfc8a1f985d6d602a25f92e15519c89c)
@@ -552,2 +552,4 @@
 ! CONFIG_RUN_VIRTUAL_USB_HC (n/y)
 
+% Polling UHCI & OHCI (no interrupts)
+! [PLATFORM=ia32|PLATFORM=amd64] CONFIG_USBHC_NO_INTERRUPTS (y/n)
Index: uspace/drv/ohci/main.c
===================================================================
--- uspace/drv/ohci/main.c	(revision b01995bc1785fe762503d71e2ecf19c3d7630acb)
+++ uspace/drv/ohci/main.c	(revision 11dd29b9dfc8a1f985d6d602a25f92e15519c89c)
@@ -149,14 +149,21 @@
 	}
 
+
 	bool interrupts = false;
+#ifdef CONFIG_USBHC_NO_INTERRUPTS
+	usb_log_warning("Interrupts disabled in OS config, " \
+	    "falling back to polling.\n");
+#else
 	ret = pci_enable_interrupts(device);
 	if (ret != EOK) {
-		usb_log_warning(
-		    "Failed(%d) to enable interrupts, fall back to polling.\n",
-		    ret);
+		usb_log_warning("Failed to enable interrupts: %s.\n",
+		    str_error(rc));
+		usb_log_info("HW interrupts not available, " \
+		    "falling back to polling.\n");
 	} else {
 		usb_log_debug("Hw interrupts enabled.\n");
 		interrupts = true;
 	}
+#endif
 
 	ret = hc_init(hcd, hc_fun, device, mem_reg_base, mem_reg_size, interrupts);
Index: uspace/drv/uhci-hcd/uhci.c
===================================================================
--- uspace/drv/uhci-hcd/uhci.c	(revision b01995bc1785fe762503d71e2ecf19c3d7630acb)
+++ uspace/drv/uhci-hcd/uhci.c	(revision 11dd29b9dfc8a1f985d6d602a25f92e15519c89c)
@@ -175,13 +175,19 @@
 
 	bool interrupts = false;
+#ifdef CONFIG_USBHC_NO_INTERRUPTS
+	usb_log_warning("Interrupts disabled in OS config, " \
+	    "falling back to polling.\n");
+#else
 	ret = pci_enable_interrupts(device);
 	if (ret != EOK) {
-		usb_log_warning(
-		    "Failed(%d) to enable interrupts, fall back to polling.\n",
-		    ret);
+		usb_log_warning("Failed to enable interrupts: %s.\n",
+		    str_error(rc));
+		usb_log_info("HW interrupts not available, " \
+		    "falling back to polling.\n");
 	} else {
 		usb_log_debug("Hw interrupts enabled.\n");
 		interrupts = true;
 	}
+#endif
 
 	instance->hc_fun = ddf_fun_create(device, fun_exposed, "uhci-hc");
