Index: uspace/drv/ohci/batch.c
===================================================================
--- uspace/drv/ohci/batch.c	(revision d8421c4c75ad20af382a91d8655ed77628c9488c)
+++ uspace/drv/ohci/batch.c	(revision e622323991c976fe47ba883e7dd809b8d5f3bcc4)
@@ -118,5 +118,5 @@
 	instance->next_step = batch_call_in_and_dispose;
 	/* TODO: implement */
-	usb_log_debug("Batch(%p) CONTROL WRITE initialized.\n", instance);
+	usb_log_debug("Batch(%p) CONTROL READ initialized.\n", instance);
 }
 /*----------------------------------------------------------------------------*/
Index: uspace/drv/ohci/iface.c
===================================================================
--- uspace/drv/ohci/iface.c	(revision d8421c4c75ad20af382a91d8655ed77628c9488c)
+++ uspace/drv/ohci/iface.c	(revision e622323991c976fe47ba883e7dd809b8d5f3bcc4)
@@ -33,11 +33,6 @@
  */
 #include <ddf/driver.h>
-#include <ddf/interrupt.h>
-#include <device/hw_res.h>
 #include <errno.h>
-#include <str_error.h>
-
-#include <usb_iface.h>
-#include <usb/ddfiface.h>
+
 #include <usb/debug.h>
 
@@ -60,10 +55,10 @@
 static int reserve_default_address(ddf_fun_t *fun, usb_speed_t speed)
 {
-  assert(fun);
-  hc_t *hc = fun_to_hc(fun);
-  assert(hc);
-  usb_log_debug("Default address request with speed %d.\n", speed);
-  usb_device_keeper_reserve_default_address(&hc->manager, speed);
-  return EOK;
+	assert(fun);
+	hc_t *hc = fun_to_hc(fun);
+	assert(hc);
+	usb_log_debug("Default address request with speed %d.\n", speed);
+	usb_device_keeper_reserve_default_address(&hc->manager, speed);
+	return EOK;
 }
 /*----------------------------------------------------------------------------*/
@@ -75,10 +70,10 @@
 static int release_default_address(ddf_fun_t *fun)
 {
-  assert(fun);
-  hc_t *hc = fun_to_hc(fun);
-  assert(hc);
-  usb_log_debug("Default address release.\n");
-  usb_device_keeper_release_default_address(&hc->manager);
-  return EOK;
+	assert(fun);
+	hc_t *hc = fun_to_hc(fun);
+	assert(hc);
+	usb_log_debug("Default address release.\n");
+	usb_device_keeper_release_default_address(&hc->manager);
+	return EOK;
 }
 /*----------------------------------------------------------------------------*/
@@ -90,18 +85,18 @@
  * @return Error code.
  */
-static int request_address(ddf_fun_t *fun, usb_speed_t speed,
-    usb_address_t *address)
-{
-  assert(fun);
-  hc_t *hc = fun_to_hc(fun);
-  assert(hc);
-  assert(address);
-
-  usb_log_debug("Address request with speed %d.\n", speed);
-  *address = device_keeper_get_free_address(&hc->manager, speed);
-  usb_log_debug("Address request with result: %d.\n", *address);
-  if (*address <= 0)
-    return *address;
-  return EOK;
+static int request_address(
+    ddf_fun_t *fun, usb_speed_t speed, usb_address_t *address)
+{
+	assert(fun);
+	hc_t *hc = fun_to_hc(fun);
+	assert(hc);
+	assert(address);
+
+	usb_log_debug("Address request with speed %d.\n", speed);
+	*address = device_keeper_get_free_address(&hc->manager, speed);
+	usb_log_debug("Address request with result: %d.\n", *address);
+	if (*address <= 0)
+		return *address;
+	return EOK;
 }
 /*----------------------------------------------------------------------------*/
@@ -113,13 +108,13 @@
  * @return Error code.
  */
-static int bind_address(ddf_fun_t *fun,
-    usb_address_t address, devman_handle_t handle)
-{
-  assert(fun);
-  hc_t *hc = fun_to_hc(fun);
-  assert(hc);
-  usb_log_debug("Address bind %d-%d.\n", address, handle);
-  usb_device_keeper_bind(&hc->manager, address, handle);
-  return EOK;
+static int bind_address(
+    ddf_fun_t *fun, usb_address_t address, devman_handle_t handle)
+{
+	assert(fun);
+	hc_t *hc = fun_to_hc(fun);
+	assert(hc);
+	usb_log_debug("Address bind %d-%d.\n", address, handle);
+	usb_device_keeper_bind(&hc->manager, address, handle);
+	return EOK;
 }
 /*----------------------------------------------------------------------------*/
@@ -132,12 +127,12 @@
 static int release_address(ddf_fun_t *fun, usb_address_t address)
 {
-  assert(fun);
-  hc_t *hc = fun_to_hc(fun);
-  assert(hc);
-  usb_log_debug("Address release %d.\n", address);
-  usb_device_keeper_release(&hc->manager, address);
-  return EOK;
-}
-
+	assert(fun);
+	hc_t *hc = fun_to_hc(fun);
+	assert(hc);
+	usb_log_debug("Address release %d.\n", address);
+	usb_device_keeper_release(&hc->manager, address);
+	return EOK;
+}
+/*----------------------------------------------------------------------------*/
 /** Register endpoint for bandwidth reservation.
  *
@@ -151,6 +146,6 @@
  * @return Error code.
  */
-static int register_endpoint(ddf_fun_t *fun,
-    usb_address_t address, usb_endpoint_t endpoint,
+static int register_endpoint(
+    ddf_fun_t *fun, usb_address_t address, usb_endpoint_t endpoint,
     usb_transfer_type_t transfer_type, usb_direction_t direction,
     size_t max_packet_size, unsigned int interval)
@@ -160,5 +155,5 @@
 	return ENOTSUP;
 }
-
+/*----------------------------------------------------------------------------*/
 /** Unregister endpoint (free some bandwidth reservation).
  *
@@ -169,5 +164,6 @@
  * @return Error code.
  */
-static int unregister_endpoint(ddf_fun_t *fun, usb_address_t address,
+static int unregister_endpoint(
+    ddf_fun_t *fun, usb_address_t address,
     usb_endpoint_t endpoint, usb_direction_t direction)
 {
@@ -194,27 +190,28 @@
  * @return Error code.
  */
-static int interrupt_out(ddf_fun_t *fun, usb_target_t target,
-    size_t max_packet_size, void *data, size_t size,
-    usbhc_iface_transfer_out_callback_t callback, void *arg)
-{
-  hc_t *hc = fun_to_hc(fun);
-  assert(hc);
-  usb_speed_t speed = usb_device_keeper_get_speed(&hc->manager, target.address);
-
-  usb_log_debug("Interrupt OUT %d:%d %zu(%zu).\n",
-      target.address, target.endpoint, size, max_packet_size);
-
-  usb_transfer_batch_t *batch = batch_get(fun, target, USB_TRANSFER_INTERRUPT,
-      max_packet_size, speed, data, size, NULL, 0, NULL, callback, arg,
-      &hc->manager);
-  if (!batch)
-    return ENOMEM;
-  batch_interrupt_out(batch);
-  const int ret = hc_schedule(hc, batch);
-  if (ret != EOK) {
-    batch_dispose(batch);
-    return ret;
-  }
-  return EOK;
+static int interrupt_out(
+    ddf_fun_t *fun, usb_target_t target, size_t max_packet_size, void *data,
+    size_t size, usbhc_iface_transfer_out_callback_t callback, void *arg)
+{
+	assert(fun);
+	hc_t *hc = fun_to_hc(fun);
+	assert(hc);
+	usb_speed_t speed =
+	    usb_device_keeper_get_speed(&hc->manager, target.address);
+
+	usb_log_debug("Interrupt OUT %d:%d %zu(%zu).\n",
+	    target.address, target.endpoint, size, max_packet_size);
+
+	usb_transfer_batch_t *batch =
+	    batch_get(fun, target, USB_TRANSFER_INTERRUPT, max_packet_size,
+	        speed, data, size, NULL, 0, NULL, callback, arg, &hc->manager);
+	if (!batch)
+		return ENOMEM;
+	batch_interrupt_out(batch);
+	const int ret = hc_schedule(hc, batch);
+	if (ret != EOK) {
+		batch_dispose(batch);
+	}
+	return ret;
 }
 /*----------------------------------------------------------------------------*/
@@ -236,27 +233,27 @@
  * @return Error code.
  */
-static int interrupt_in(ddf_fun_t *fun, usb_target_t target,
-    size_t max_packet_size, void *data, size_t size,
-    usbhc_iface_transfer_in_callback_t callback, void *arg)
-{
-  assert(fun);
-  hc_t *hc = fun_to_hc(fun);
-  assert(hc);
-  usb_speed_t speed = usb_device_keeper_get_speed(&hc->manager, target.address);
-  usb_log_debug("Interrupt IN %d:%d %zu(%zu).\n", 
-      target.address, target.endpoint, size, max_packet_size);
-
-  usb_transfer_batch_t *batch = batch_get(fun, target, USB_TRANSFER_INTERRUPT,
-      max_packet_size, speed, data, size, NULL, 0, callback, NULL, arg,
-      &hc->manager);
-  if (!batch)
-    return ENOMEM;
-  batch_interrupt_in(batch);
-  const int ret = hc_schedule(hc, batch);
-  if (ret != EOK) {
-    batch_dispose(batch);
-    return ret;
-  }
-  return EOK;
+static int interrupt_in(
+    ddf_fun_t *fun, usb_target_t target, size_t max_packet_size, void *data,
+    size_t size, usbhc_iface_transfer_in_callback_t callback, void *arg)
+{
+	assert(fun);
+	hc_t *hc = fun_to_hc(fun);
+	assert(hc);
+	usb_speed_t speed =
+	    usb_device_keeper_get_speed(&hc->manager, target.address);
+	usb_log_debug("Interrupt IN %d:%d %zu(%zu).\n",
+	    target.address, target.endpoint, size, max_packet_size);
+
+	usb_transfer_batch_t *batch =
+	    batch_get(fun, target, USB_TRANSFER_INTERRUPT, max_packet_size,
+	        speed, data, size, NULL, 0, callback, NULL, arg, &hc->manager);
+	if (!batch)
+		return ENOMEM;
+	batch_interrupt_in(batch);
+	const int ret = hc_schedule(hc, batch);
+	if (ret != EOK) {
+		batch_dispose(batch);
+	}
+	return ret;
 }
 /*----------------------------------------------------------------------------*/
@@ -278,29 +275,28 @@
  * @return Error code.
  */
-static int bulk_out(ddf_fun_t *fun, usb_target_t target,
-    size_t max_packet_size, void *data, size_t size,
-    usbhc_iface_transfer_out_callback_t callback, void *arg)
-{
-  assert(fun);
-  hc_t *hc = fun_to_hc(fun);
-  assert(hc);
-  usb_speed_t speed = usb_device_keeper_get_speed(&hc->manager, target.address);
-
-  usb_log_debug("Bulk OUT %d:%d %zu(%zu).\n",
-      target.address, target.endpoint, size, max_packet_size);
-
-  usb_transfer_batch_t *batch = batch_get(fun, target, USB_TRANSFER_BULK,
-      max_packet_size, speed, data, size, NULL, 0, NULL, callback, arg,
-      &hc->manager);
-  if (!batch)
-    return ENOMEM;
-  batch_bulk_out(batch);
-  const int ret = hc_schedule(hc, batch);
-  if (ret != EOK) {
-    batch_dispose(batch);
-    return ret;
-  }
-  return EOK;
-
+static int bulk_out(
+    ddf_fun_t *fun, usb_target_t target, size_t max_packet_size, void *data,
+    size_t size, usbhc_iface_transfer_out_callback_t callback, void *arg)
+{
+	assert(fun);
+	hc_t *hc = fun_to_hc(fun);
+	assert(hc);
+	usb_speed_t speed =
+	    usb_device_keeper_get_speed(&hc->manager, target.address);
+
+	usb_log_debug("Bulk OUT %d:%d %zu(%zu).\n",
+	    target.address, target.endpoint, size, max_packet_size);
+
+	usb_transfer_batch_t *batch =
+	    batch_get(fun, target, USB_TRANSFER_BULK, max_packet_size, speed,
+	        data, size, NULL, 0, NULL, callback, arg, &hc->manager);
+	if (!batch)
+		return ENOMEM;
+	batch_bulk_out(batch);
+	const int ret = hc_schedule(hc, batch);
+	if (ret != EOK) {
+		batch_dispose(batch);
+	}
+	return ret;
 }
 /*----------------------------------------------------------------------------*/
@@ -322,27 +318,27 @@
  * @return Error code.
  */
-static int bulk_in(ddf_fun_t *fun, usb_target_t target,
-    size_t max_packet_size, void *data, size_t size,
-    usbhc_iface_transfer_in_callback_t callback, void *arg)
-{
-  assert(fun);
-  hc_t *hc = fun_to_hc(fun);
-  assert(hc);
-  usb_speed_t speed = usb_device_keeper_get_speed(&hc->manager, target.address);
-  usb_log_debug("Bulk IN %d:%d %zu(%zu).\n",
-      target.address, target.endpoint, size, max_packet_size);
-
-  usb_transfer_batch_t *batch = batch_get(fun, target, USB_TRANSFER_BULK,
-      max_packet_size, speed, data, size, NULL, 0, callback, NULL, arg,
-      &hc->manager);
-  if (!batch)
-    return ENOMEM;
-  batch_bulk_in(batch);
-  const int ret = hc_schedule(hc, batch);
-  if (ret != EOK) {
-    batch_dispose(batch);
-    return ret;
-  }
-  return EOK;
+static int bulk_in(
+    ddf_fun_t *fun, usb_target_t target, size_t max_packet_size, void *data,
+    size_t size, usbhc_iface_transfer_in_callback_t callback, void *arg)
+{
+	assert(fun);
+	hc_t *hc = fun_to_hc(fun);
+	assert(hc);
+	usb_speed_t speed =
+	    usb_device_keeper_get_speed(&hc->manager, target.address);
+	usb_log_debug("Bulk IN %d:%d %zu(%zu).\n",
+	    target.address, target.endpoint, size, max_packet_size);
+
+	usb_transfer_batch_t *batch =
+	    batch_get(fun, target, USB_TRANSFER_BULK, max_packet_size, speed,
+	        data, size, NULL, 0, callback, NULL, arg, &hc->manager);
+	if (!batch)
+		return ENOMEM;
+	batch_bulk_in(batch);
+	const int ret = hc_schedule(hc, batch);
+	if (ret != EOK) {
+		batch_dispose(batch);
+	}
+	return ret;
 }
 /*----------------------------------------------------------------------------*/
@@ -367,33 +363,33 @@
  * @return Error code.
  */
-static int control_write(ddf_fun_t *fun, usb_target_t target,
-    size_t max_packet_size,
-    void *setup_data, size_t setup_size,
-    void *data, size_t size,
+static int control_write(
+    ddf_fun_t *fun, usb_target_t target, size_t max_packet_size,
+    void *setup_data, size_t setup_size, void *data, size_t size,
     usbhc_iface_transfer_out_callback_t callback, void *arg)
 {
-  assert(fun);
-  hc_t *hc = fun_to_hc(fun);
-  assert(hc);
-  usb_speed_t speed = usb_device_keeper_get_speed(&hc->manager, target.address);
-  usb_log_debug("Control WRITE (%d) %d:%d %zu(%zu).\n",
-      speed, target.address, target.endpoint, size, max_packet_size);
-
-  if (setup_size != 8)
-    return EINVAL;
-
-  usb_transfer_batch_t *batch = batch_get(fun, target, USB_TRANSFER_CONTROL,
-      max_packet_size, speed, data, size, setup_data, setup_size,
-      NULL, callback, arg, &hc->manager);
-  if (!batch)
-    return ENOMEM;
-  usb_device_keeper_reset_if_need(&hc->manager, target, setup_data);
-  batch_control_write(batch);
-  const int ret = hc_schedule(hc, batch);
-  if (ret != EOK) {
-    batch_dispose(batch);
-    return ret;
-  }
-  return EOK;
+	assert(fun);
+	hc_t *hc = fun_to_hc(fun);
+	assert(hc);
+	usb_speed_t speed =
+	    usb_device_keeper_get_speed(&hc->manager, target.address);
+	usb_log_debug("Control WRITE (%d) %d:%d %zu(%zu).\n",
+	    speed, target.address, target.endpoint, size, max_packet_size);
+
+	if (setup_size != 8)
+		return EINVAL;
+
+	usb_transfer_batch_t *batch =
+	    batch_get(fun, target, USB_TRANSFER_CONTROL, max_packet_size,
+	        speed, data, size, setup_data, setup_size, NULL, callback, arg,
+		&hc->manager);
+	if (!batch)
+		return ENOMEM;
+	usb_device_keeper_reset_if_need(&hc->manager, target, setup_data);
+	batch_control_write(batch);
+	const int ret = hc_schedule(hc, batch);
+	if (ret != EOK) {
+		batch_dispose(batch);
+	}
+	return ret;
 }
 /*----------------------------------------------------------------------------*/
@@ -418,29 +414,29 @@
  * @return Error code.
  */
-static int control_read(ddf_fun_t *fun, usb_target_t target,
-    size_t max_packet_size,
-    void *setup_data, size_t setup_size,
-    void *data, size_t size,
+static int control_read(
+    ddf_fun_t *fun, usb_target_t target, size_t max_packet_size,
+    void *setup_data, size_t setup_size, void *data, size_t size,
     usbhc_iface_transfer_in_callback_t callback, void *arg)
 {
-  assert(fun);
-  hc_t *hc = fun_to_hc(fun);
-  assert(hc);
-  usb_speed_t speed = usb_device_keeper_get_speed(&hc->manager, target.address);
-
-  usb_log_debug("Control READ(%d) %d:%d %zu(%zu).\n",
-      speed, target.address, target.endpoint, size, max_packet_size);
-  usb_transfer_batch_t *batch = batch_get(fun, target, USB_TRANSFER_CONTROL,
-      max_packet_size, speed, data, size, setup_data, setup_size, callback,
-      NULL, arg, &hc->manager);
-  if (!batch)
-    return ENOMEM;
-  batch_control_read(batch);
-  const int ret = hc_schedule(hc, batch);
-  if (ret != EOK) {
-    batch_dispose(batch);
-    return ret;
-  }
-  return EOK;
+	assert(fun);
+	hc_t *hc = fun_to_hc(fun);
+	assert(hc);
+	usb_speed_t speed =
+	    usb_device_keeper_get_speed(&hc->manager, target.address);
+
+	usb_log_debug("Control READ(%d) %d:%d %zu(%zu).\n",
+	    speed, target.address, target.endpoint, size, max_packet_size);
+	usb_transfer_batch_t *batch =
+	    batch_get(fun, target, USB_TRANSFER_CONTROL, max_packet_size,
+	        speed, data, size, setup_data, setup_size, callback, NULL, arg,
+		&hc->manager);
+	if (!batch)
+		return ENOMEM;
+	batch_control_read(batch);
+	const int ret = hc_schedule(hc, batch);
+	if (ret != EOK) {
+		batch_dispose(batch);
+	}
+	return ret;
 }
 /*----------------------------------------------------------------------------*/
@@ -463,5 +459,5 @@
 
 	.control_write = control_write,
-	.control_read = control_read
+	.control_read = control_read,
 };
 
Index: uspace/drv/ohci/main.c
===================================================================
--- uspace/drv/ohci/main.c	(revision d8421c4c75ad20af382a91d8655ed77628c9488c)
+++ uspace/drv/ohci/main.c	(revision e622323991c976fe47ba883e7dd809b8d5f3bcc4)
@@ -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(ret));
+		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);
@@ -199,5 +206,5 @@
 int main(int argc, char *argv[])
 {
-	usb_log_enable(USB_LOG_LEVEL_DEBUG, NAME);
+	usb_log_enable(USB_LOG_LEVEL_DEFAULT, NAME);
 	sleep(5);
 	return ddf_driver_main(&ohci_driver);
