Index: kernel/generic/include/proc/thread.h
===================================================================
--- kernel/generic/include/proc/thread.h	(revision 8fcaeedabe4e5d3790e5d9a03e82abb9d82384a5)
+++ kernel/generic/include/proc/thread.h	(revision a29529b94721f1f6d73bfa8b2239295a3db8052e)
@@ -259,4 +259,5 @@
 extern sysarg_t sys_thread_get_id(thread_id_t *);
 extern sysarg_t sys_thread_usleep(uint32_t);
+extern sysarg_t sys_thread_udelay(uint32_t);
 
 #endif
Index: kernel/generic/include/syscall/syscall.h
===================================================================
--- kernel/generic/include/syscall/syscall.h	(revision 8fcaeedabe4e5d3790e5d9a03e82abb9d82384a5)
+++ kernel/generic/include/syscall/syscall.h	(revision a29529b94721f1f6d73bfa8b2239295a3db8052e)
@@ -44,4 +44,5 @@
 	SYS_THREAD_GET_ID,
 	SYS_THREAD_USLEEP,
+	SYS_THREAD_UDELAY,
 	
 	SYS_TASK_GET_ID,
Index: kernel/generic/src/proc/thread.c
===================================================================
--- kernel/generic/src/proc/thread.c	(revision 8fcaeedabe4e5d3790e5d9a03e82abb9d82384a5)
+++ kernel/generic/src/proc/thread.c	(revision a29529b94721f1f6d73bfa8b2239295a3db8052e)
@@ -918,4 +918,10 @@
 }
 
+sysarg_t sys_thread_udelay(uint32_t usec)
+{
+	asm_delay_loop(usec * CPU->delay_loop_const);
+	return 0;
+}
+
 /** @}
  */
Index: kernel/generic/src/syscall/syscall.c
===================================================================
--- kernel/generic/src/syscall/syscall.c	(revision 8fcaeedabe4e5d3790e5d9a03e82abb9d82384a5)
+++ kernel/generic/src/syscall/syscall.c	(revision a29529b94721f1f6d73bfa8b2239295a3db8052e)
@@ -127,4 +127,5 @@
 	(syshandler_t) sys_thread_get_id,
 	(syshandler_t) sys_thread_usleep,
+	(syshandler_t) sys_thread_udelay,
 	
 	(syshandler_t) sys_task_get_id,
Index: uspace/drv/ohci/batch.h
===================================================================
--- uspace/drv/ohci/batch.h	(revision 8fcaeedabe4e5d3790e5d9a03e82abb9d82384a5)
+++ uspace/drv/ohci/batch.h	(revision a29529b94721f1f6d73bfa8b2239295a3db8052e)
@@ -26,12 +26,12 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-/** @addtogroup drvusbuhcihc
+/** @addtogroup drvusbohci
  * @{
  */
 /** @file
- * @brief UHCI driver USB transaction structure
+ * @brief OHCI driver USB transaction structure
  */
-#ifndef DRV_UHCI_BATCH_H
-#define DRV_UHCI_BATCH_H
+#ifndef DRV_OHCI_BATCH_H
+#define DRV_OHCI_BATCH_H
 
 #include <usbhc_iface.h>
Index: uspace/drv/ohci/endpoint_list.h
===================================================================
--- uspace/drv/ohci/endpoint_list.h	(revision 8fcaeedabe4e5d3790e5d9a03e82abb9d82384a5)
+++ uspace/drv/ohci/endpoint_list.h	(revision a29529b94721f1f6d73bfa8b2239295a3db8052e)
@@ -41,6 +41,5 @@
 #include "utils/malloc32.h"
 
-typedef struct endpoint_list
-{
+typedef struct endpoint_list {
 	fibril_mutex_t guard;
 	ed_t *list_head;
Index: uspace/drv/ohci/iface.h
===================================================================
--- uspace/drv/ohci/iface.h	(revision 8fcaeedabe4e5d3790e5d9a03e82abb9d82384a5)
+++ uspace/drv/ohci/iface.h	(revision a29529b94721f1f6d73bfa8b2239295a3db8052e)
@@ -26,5 +26,4 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-
 /** @addtogroup drvusbohci
  * @{
Index: uspace/drv/ohci/ohci.h
===================================================================
--- uspace/drv/ohci/ohci.h	(revision 8fcaeedabe4e5d3790e5d9a03e82abb9d82384a5)
+++ uspace/drv/ohci/ohci.h	(revision a29529b94721f1f6d73bfa8b2239295a3db8052e)
@@ -26,5 +26,4 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-
 /** @addtogroup drvusbohci
  * @{
Index: uspace/drv/ohci/ohci_regs.h
===================================================================
--- uspace/drv/ohci/ohci_regs.h	(revision 8fcaeedabe4e5d3790e5d9a03e82abb9d82384a5)
+++ uspace/drv/ohci/ohci_regs.h	(revision a29529b94721f1f6d73bfa8b2239295a3db8052e)
@@ -26,5 +26,4 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-
 /** @addtogroup drvusbohcihc
  * @{
Index: uspace/drv/ohci/pci.h
===================================================================
--- uspace/drv/ohci/pci.h	(revision 8fcaeedabe4e5d3790e5d9a03e82abb9d82384a5)
+++ uspace/drv/ohci/pci.h	(revision a29529b94721f1f6d73bfa8b2239295a3db8052e)
@@ -26,5 +26,4 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-
 /** @addtogroup drvusbohci
  * @{
Index: uspace/drv/ohci/root_hub.h
===================================================================
--- uspace/drv/ohci/root_hub.h	(revision 8fcaeedabe4e5d3790e5d9a03e82abb9d82384a5)
+++ uspace/drv/ohci/root_hub.h	(revision a29529b94721f1f6d73bfa8b2239295a3db8052e)
@@ -26,5 +26,4 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-
 /** @addtogroup drvusbohci
  * @{
Index: uspace/drv/ohci/utils/malloc32.h
===================================================================
--- uspace/drv/ohci/utils/malloc32.h	(revision 8fcaeedabe4e5d3790e5d9a03e82abb9d82384a5)
+++ uspace/drv/ohci/utils/malloc32.h	(revision a29529b94721f1f6d73bfa8b2239295a3db8052e)
@@ -26,12 +26,12 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-/** @addtogroup usb
+/** @addtogroup drvusbohci
  * @{
  */
 /** @file
- * @brief UHCI driver
+ * @brief OHCI driver
  */
-#ifndef DRV_UHCI_TRANSLATOR_H
-#define DRV_UHCI_TRANSLATOR_H
+#ifndef DRV_OHCI_UTILS_MALLOC32_H
+#define DRV_OHCI_UTILS_MALLOC32_H
 
 #include <assert.h>
@@ -40,6 +40,4 @@
 #include <mem.h>
 #include <as.h>
-
-#define UHCI_REQUIRED_PAGE_SIZE 4096
 
 /** Get physical address translation
@@ -61,5 +59,5 @@
  *
  * @param[in] size Size of the required memory space
- * @return Address of the alligned and big enough memory place, NULL on failure.
+ * @return Address of the aligned and big enough memory place, NULL on failure.
  */
 static inline void * malloc32(size_t size)
@@ -72,23 +70,4 @@
 static inline void free32(void *addr)
 	{ if (addr) free(addr); }
-/*----------------------------------------------------------------------------*/
-/** Create 4KB page mapping
- *
- * @return Address of the mapped page, NULL on failure.
- */
-static inline void * get_page(void)
-{
-	void * free_address = as_get_mappable_page(UHCI_REQUIRED_PAGE_SIZE);
-	assert(free_address);
-	if (free_address == 0)
-		return NULL;
-	void* ret =
-	  as_area_create(free_address, UHCI_REQUIRED_PAGE_SIZE,
-		  AS_AREA_READ | AS_AREA_WRITE);
-	if (ret != free_address)
-		return NULL;
-	return ret;
-}
-
 #endif
 /**
Index: uspace/drv/uhci-hcd/batch.c
===================================================================
--- uspace/drv/uhci-hcd/batch.c	(revision 8fcaeedabe4e5d3790e5d9a03e82abb9d82384a5)
+++ uspace/drv/uhci-hcd/batch.c	(revision a29529b94721f1f6d73bfa8b2239295a3db8052e)
@@ -70,5 +70,5 @@
  * @param[in] ep Communication target
  * @param[in] buffer Data source/destination.
- * @param[in] size Size of the buffer.
+ * @param[in] buffer_size Size of the buffer.
  * @param[in] setup_buffer Setup data source (if not NULL)
  * @param[in] setup_size Size of setup_buffer (should be always 8)
Index: uspace/drv/uhci-hcd/hc.c
===================================================================
--- uspace/drv/uhci-hcd/hc.c	(revision 8fcaeedabe4e5d3790e5d9a03e82abb9d82384a5)
+++ uspace/drv/uhci-hcd/hc.c	(revision a29529b94721f1f6d73bfa8b2239295a3db8052e)
@@ -61,5 +61,6 @@
  * @param[in] instance Memory place to initialize.
  * @param[in] regs Address of I/O control registers.
- * @param[in] size Size of I/O control registers.
+ * @param[in] reg_size Size of I/O control registers.
+ * @param[in] interrupts True if hw interrupts should be used.
  * @return Error code.
  * @note Should be called only once on any structure.
Index: uspace/drv/uhci-hcd/hc.h
===================================================================
--- uspace/drv/uhci-hcd/hc.h	(revision 8fcaeedabe4e5d3790e5d9a03e82abb9d82384a5)
+++ uspace/drv/uhci-hcd/hc.h	(revision a29529b94721f1f6d73bfa8b2239295a3db8052e)
@@ -33,6 +33,6 @@
  * @brief UHCI host controller driver structure
  */
-#ifndef DRV_UHCI_UHCI_HC_H
-#define DRV_UHCI_UHCI_HC_H
+#ifndef DRV_UHCI_HC_H
+#define DRV_UHCI_HC_H
 
 #include <fibril.h>
Index: uspace/drv/uhci-hcd/hw_struct/link_pointer.h
===================================================================
--- uspace/drv/uhci-hcd/hw_struct/link_pointer.h	(revision 8fcaeedabe4e5d3790e5d9a03e82abb9d82384a5)
+++ uspace/drv/uhci-hcd/hw_struct/link_pointer.h	(revision a29529b94721f1f6d73bfa8b2239295a3db8052e)
@@ -32,6 +32,6 @@
  * @brief UHCI driver
  */
-#ifndef DRV_UHCI_LINK_POINTER_H
-#define DRV_UHCI_LINK_POINTER_H
+#ifndef DRV_UHCI_HW_STRUCT_LINK_POINTER_H
+#define DRV_UHCI_HW_STRUCT_LINK_POINTER_H
 
 /* UHCI link pointer, used by many data structures */
Index: uspace/drv/uhci-hcd/hw_struct/queue_head.h
===================================================================
--- uspace/drv/uhci-hcd/hw_struct/queue_head.h	(revision 8fcaeedabe4e5d3790e5d9a03e82abb9d82384a5)
+++ uspace/drv/uhci-hcd/hw_struct/queue_head.h	(revision a29529b94721f1f6d73bfa8b2239295a3db8052e)
@@ -26,5 +26,5 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-/** @addtogroup drv usbuhcihc
+/** @addtogroup drvusbuhcihc
  * @{
  */
@@ -32,6 +32,6 @@
  * @brief UHCI driver
  */
-#ifndef DRV_UHCI_QH_H
-#define DRV_UHCI_QH_H
+#ifndef DRV_UHCI_HW_STRUCT_QH_H
+#define DRV_UHCI_HW_STRUCT_QH_H
 #include <assert.h>
 
@@ -65,5 +65,5 @@
  *
  * @param[in] instance qh_t structure to use.
- * @param[in] pa Physical address of the next queue head.
+ * @param[in] next Address of the next queue.
  *
  * Adds proper flag. If the pointer is NULL, sets next to terminal NULL.
@@ -81,6 +81,6 @@
 /** Set queue head element pointer
  *
- * @param[in] instance qh_t structure to initialize.
- * @param[in] pa Physical address of the TD structure.
+ * @param[in] instance qh_t structure to use.
+ * @param[in] td Transfer descriptor to set as the first element.
  *
  * Adds proper flag. If the pointer is NULL, sets element to terminal NULL.
Index: uspace/drv/uhci-hcd/hw_struct/transfer_descriptor.h
===================================================================
--- uspace/drv/uhci-hcd/hw_struct/transfer_descriptor.h	(revision 8fcaeedabe4e5d3790e5d9a03e82abb9d82384a5)
+++ uspace/drv/uhci-hcd/hw_struct/transfer_descriptor.h	(revision a29529b94721f1f6d73bfa8b2239295a3db8052e)
@@ -32,6 +32,6 @@
  * @brief UHCI driver
  */
-#ifndef DRV_UHCI_TRANSFER_DESCRIPTOR_H
-#define DRV_UHCI_TRANSFER_DESCRIPTOR_H
+#ifndef DRV_UHCI_HW_STRUCT_TRANSFER_DESCRIPTOR_H
+#define DRV_UHCI_HW_STRUCT_TRANSFER_DESCRIPTOR_H
 
 #include <mem.h>
Index: uspace/drv/uhci-hcd/root_hub.h
===================================================================
--- uspace/drv/uhci-hcd/root_hub.h	(revision 8fcaeedabe4e5d3790e5d9a03e82abb9d82384a5)
+++ uspace/drv/uhci-hcd/root_hub.h	(revision a29529b94721f1f6d73bfa8b2239295a3db8052e)
@@ -33,6 +33,6 @@
  * @brief UHCI driver
  */
-#ifndef DRV_UHCI_UHCI_RH_H
-#define DRV_UHCI_UHCI_RH_H
+#ifndef DRV_UHCI_RH_H
+#define DRV_UHCI_RH_H
 
 #include <ddf/driver.h>
Index: pace/drv/uhci-hcd/transfers.c
===================================================================
--- uspace/drv/uhci-hcd/transfers.c	(revision 8fcaeedabe4e5d3790e5d9a03e82abb9d82384a5)
+++ 	(revision )
@@ -1,160 +1,0 @@
-/*
- * Copyright (c) 2010 Vojtech Horky
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-#include <usb/hcdhubd.h>
-#include <errno.h>
-
-#include "uhci.h"
-
-static int enqueue_transfer_out(device_t *dev,
-    usb_target_t target, usb_transfer_type_t transfer_type,
-    void *buffer, size_t size,
-    usbhc_iface_transfer_out_callback_t callback, void *arg)
-{
-	printf(NAME ": transfer OUT [%d.%d (%s); %zu]\n",
-	    target.address, target.endpoint,
-	    usb_str_transfer_type(transfer_type),
-	    size);
-
-	return ENOTSUP;
-}
-
-static int enqueue_transfer_setup(device_t *dev,
-    usb_target_t target, usb_transfer_type_t transfer_type,
-    void *buffer, size_t size,
-    usbhc_iface_transfer_out_callback_t callback, void *arg)
-{
-	printf(NAME ": transfer SETUP [%d.%d (%s); %zu]\n",
-	    target.address, target.endpoint,
-	    usb_str_transfer_type(transfer_type),
-	    size);
-
-	return ENOTSUP;
-}
-
-static int enqueue_transfer_in(device_t *dev,
-    usb_target_t target, usb_transfer_type_t transfer_type,
-    void *buffer, size_t size,
-    usbhc_iface_transfer_in_callback_t callback, void *arg)
-{
-	printf(NAME ": transfer IN [%d.%d (%s); %zu]\n",
-	    target.address, target.endpoint,
-	    usb_str_transfer_type(transfer_type),
-	    size);
-
-	return ENOTSUP;
-}
-
-
-static int get_address(device_t *dev, devman_handle_t handle,
-    usb_address_t *address)
-{
-	return ENOTSUP;
-}
-
-static int interrupt_out(device_t *dev, usb_target_t target,
-    void *data, size_t size,
-    usbhc_iface_transfer_out_callback_t callback, void *arg)
-{
-	return enqueue_transfer_out(dev, target, USB_TRANSFER_INTERRUPT,
-	    data, size,
-	    callback, arg);
-}
-
-static int interrupt_in(device_t *dev, usb_target_t target,
-    void *data, size_t size,
-    usbhc_iface_transfer_in_callback_t callback, void *arg)
-{
-	return enqueue_transfer_in(dev, target, USB_TRANSFER_INTERRUPT,
-	    data, size,
-	    callback, arg);
-}
-
-static int control_write_setup(device_t *dev, usb_target_t target,
-    void *data, size_t size,
-    usbhc_iface_transfer_out_callback_t callback, void *arg)
-{
-	return enqueue_transfer_setup(dev, target, USB_TRANSFER_CONTROL,
-	    data, size,
-	    callback, arg);
-}
-
-static int control_write_data(device_t *dev, usb_target_t target,
-    void *data, size_t size,
-    usbhc_iface_transfer_out_callback_t callback, void *arg)
-{
-	return enqueue_transfer_out(dev, target, USB_TRANSFER_CONTROL,
-	    data, size,
-	    callback, arg);
-}
-
-static int control_write_status(device_t *dev, usb_target_t target,
-    usbhc_iface_transfer_in_callback_t callback, void *arg)
-{
-	return enqueue_transfer_in(dev, target, USB_TRANSFER_CONTROL,
-	    NULL, 0,
-	    callback, arg);
-}
-
-static int control_read_setup(device_t *dev, usb_target_t target,
-    void *data, size_t size,
-    usbhc_iface_transfer_out_callback_t callback, void *arg)
-{
-	return enqueue_transfer_setup(dev, target, USB_TRANSFER_CONTROL,
-	    data, size,
-	    callback, arg);
-}
-
-static int control_read_data(device_t *dev, usb_target_t target,
-    void *data, size_t size,
-    usbhc_iface_transfer_in_callback_t callback, void *arg)
-{
-	return enqueue_transfer_in(dev, target, USB_TRANSFER_CONTROL,
-	    data, size,
-	    callback, arg);
-}
-
-static int control_read_status(device_t *dev, usb_target_t target,
-    usbhc_iface_transfer_out_callback_t callback, void *arg)
-{
-	return enqueue_transfer_out(dev, target, USB_TRANSFER_CONTROL,
-	    NULL, 0,
-	    callback, arg);
-}
-
-
-usbhc_iface_t uhci_iface = {
-	.tell_address = get_address,
-	.interrupt_out = interrupt_out,
-	.interrupt_in = interrupt_in,
-	.control_write_setup = control_write_setup,
-	.control_write_data = control_write_data,
-	.control_write_status = control_write_status,
-	.control_read_setup = control_read_setup,
-	.control_read_data = control_read_data,
-	.control_read_status = control_read_status
-};
Index: uspace/drv/uhci-hcd/uhci.c
===================================================================
--- uspace/drv/uhci-hcd/uhci.c	(revision 8fcaeedabe4e5d3790e5d9a03e82abb9d82384a5)
+++ uspace/drv/uhci-hcd/uhci.c	(revision a29529b94721f1f6d73bfa8b2239295a3db8052e)
@@ -161,5 +161,4 @@
 /** Initialize hc and rh DDF structures and their respective drivers.
  *
- * @param[in] instance UHCI structure to use.
  * @param[in] device DDF instance of the device to use.
  *
@@ -167,5 +166,5 @@
  *  - gets device's hw resources
  *  - disables UHCI legacy support (PCI config space)
- *  - asks for interrupt
+ *  - attempts to enable interrupts
  *  - registers interrupt handler
  */
Index: uspace/drv/uhci-hcd/utils/malloc32.h
===================================================================
--- uspace/drv/uhci-hcd/utils/malloc32.h	(revision 8fcaeedabe4e5d3790e5d9a03e82abb9d82384a5)
+++ uspace/drv/uhci-hcd/utils/malloc32.h	(revision a29529b94721f1f6d73bfa8b2239295a3db8052e)
@@ -26,5 +26,5 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-/** @addtogroup usb
+/** @addtogroup drvusbuhci
  * @{
  */
@@ -32,6 +32,6 @@
  * @brief UHCI driver
  */
-#ifndef DRV_UHCI_TRANSLATOR_H
-#define DRV_UHCI_TRANSLATOR_H
+#ifndef DRV_UHCI_UTILS_MALLOC32_H
+#define DRV_UHCI_UTILS_MALLOC32_H
 
 #include <assert.h>
Index: uspace/drv/uhci-hcd/utils/slab.c
===================================================================
--- uspace/drv/uhci-hcd/utils/slab.c	(revision 8fcaeedabe4e5d3790e5d9a03e82abb9d82384a5)
+++ uspace/drv/uhci-hcd/utils/slab.c	(revision a29529b94721f1f6d73bfa8b2239295a3db8052e)
@@ -26,5 +26,5 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-/** @addtogroup usb
+/** @addtogroup drvusbuhcihc
  * @{
  */
Index: uspace/drv/uhci-hcd/utils/slab.h
===================================================================
--- uspace/drv/uhci-hcd/utils/slab.h	(revision 8fcaeedabe4e5d3790e5d9a03e82abb9d82384a5)
+++ uspace/drv/uhci-hcd/utils/slab.h	(revision a29529b94721f1f6d73bfa8b2239295a3db8052e)
@@ -26,5 +26,5 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
-/** @addtogroup usb
+/** @addtogroup drvusbuhcihc
  * @{
  */
@@ -32,6 +32,6 @@
  * @brief UHCI driver
  */
-#ifndef DRV_UHCI_SLAB_H
-#define DRV_UHCI_SLAB_H
+#ifndef DRV_UHCI_UTILS_SLAB_H
+#define DRV_UHCI_UTILS_SLAB_H
 
 #include <bool.h>
Index: uspace/drv/uhci-rhd/port.c
===================================================================
--- uspace/drv/uhci-rhd/port.c	(revision 8fcaeedabe4e5d3790e5d9a03e82abb9d82384a5)
+++ uspace/drv/uhci-rhd/port.c	(revision a29529b94721f1f6d73bfa8b2239295a3db8052e)
@@ -36,4 +36,5 @@
 #include <errno.h>
 #include <str_error.h>
+#include <time.h>
 
 #include <usb/usb.h>    /* usb_address_t */
@@ -65,5 +66,5 @@
  *
  * @param[in] port Structure to use.
- * @param[in] value New register value.
+ * @param[in] val New register value.
  * @return Error code. (Always EOK)
  */
@@ -77,5 +78,5 @@
  *
  * @param[in] port Memory structure to use.
- * @param[in] addr Address of I/O register.
+ * @param[in] address Address of I/O register.
  * @param[in] number Port number.
  * @param[in] usec Polling interval.
@@ -224,9 +225,6 @@
 		uhci_port_write_status(port, port_status);
 		while (uhci_port_read_status(port) & STATUS_IN_RESET);
-		// TODO: find a better way to waste time (it should be less than
-		// 10ms, if we reschedule it takes too much time (random
-		// interrupts can be solved by multiple attempts).
-		usb_log_debug2("%s: Reset Signal stop.\n", port->id_string);
-	}
+	}
+	udelay(10);
 	/* Enable the port. */
 	uhci_port_set_enabled(port, true);
Index: uspace/lib/c/generic/time.c
===================================================================
--- uspace/lib/c/generic/time.c	(revision 8fcaeedabe4e5d3790e5d9a03e82abb9d82384a5)
+++ uspace/lib/c/generic/time.c	(revision a29529b94721f1f6d73bfa8b2239295a3db8052e)
@@ -207,4 +207,10 @@
 }
 
+void udelay(useconds_t time)
+{
+	(void) __SYSCALL1(SYS_THREAD_UDELAY, (sysarg_t) time);
+}
+
+
 /** Wait unconditionally for specified number of seconds
  *
Index: uspace/lib/c/include/sys/time.h
===================================================================
--- uspace/lib/c/include/sys/time.h	(revision 8fcaeedabe4e5d3790e5d9a03e82abb9d82384a5)
+++ uspace/lib/c/include/sys/time.h	(revision a29529b94721f1f6d73bfa8b2239295a3db8052e)
@@ -62,4 +62,6 @@
 extern int gettimeofday(struct timeval *tv, struct timezone *tz);
 
+extern void udelay(useconds_t);
+
 #endif
 
