Index: uspace/drv/root/root.c
===================================================================
--- uspace/drv/root/root.c	(revision 8cd1aa5eb727edb7e57c0b5429631ef51ff14d2e)
+++ uspace/drv/root/root.c	(revision 31860b702b4520dfd94d77f61c51824a88d1182a)
@@ -72,4 +72,5 @@
 static int add_platform_child(device_t *parent)
 {
+	return EOK;
 	printf(NAME ": adding new child for platform device.\n");
 	
Index: uspace/drv/uhci/main.c
===================================================================
--- uspace/drv/uhci/main.c	(revision 8cd1aa5eb727edb7e57c0b5429631ef51ff14d2e)
+++ uspace/drv/uhci/main.c	(revision 31860b702b4520dfd94d77f61c51824a88d1182a)
@@ -77,8 +77,6 @@
 	/*
 	 * We need to announce the presence of our root hub.
-	 * Commented out until the problem which causes the whole task to
-	 * block is solved.
 	 */
-	//usb_hcd_add_root_hub(device);
+	usb_hcd_add_root_hub(device);
 
 	return EOK;
Index: uspace/drv/uhci/uhci.ma
===================================================================
--- uspace/drv/uhci/uhci.ma	(revision 8cd1aa5eb727edb7e57c0b5429631ef51ff14d2e)
+++ uspace/drv/uhci/uhci.ma	(revision 31860b702b4520dfd94d77f61c51824a88d1182a)
@@ -1,3 +1,3 @@
-10 pci/ven=8086&dev=7020
+0 pci/ven=8086&dev=7020
 10 usb&hc=uhci
 10 usb&hc=uhci&hub
Index: uspace/drv/vhc/connhost.c
===================================================================
--- uspace/drv/vhc/connhost.c	(revision 8cd1aa5eb727edb7e57c0b5429631ef51ff14d2e)
+++ uspace/drv/vhc/connhost.c	(revision 31860b702b4520dfd94d77f61c51824a88d1182a)
@@ -41,50 +41,4 @@
 #include "hc.h"
 
-typedef struct {
-	usb_direction_t direction;
-	usb_hcd_transfer_callback_out_t out_callback;
-	usb_hcd_transfer_callback_in_t in_callback;
-	usb_hc_device_t *hc;
-	void *arg;
-} transfer_info_t;
-
-static void universal_callback(void *buffer, size_t size,
-    usb_transaction_outcome_t outcome, void *arg)
-{
-	transfer_info_t *transfer = (transfer_info_t *) arg;
-
-	switch (transfer->direction) {
-		case USB_DIRECTION_IN:
-			transfer->in_callback(transfer->hc,
-			    size, outcome,
-			    transfer->arg);
-			break;
-		case USB_DIRECTION_OUT:
-			transfer->out_callback(transfer->hc,
-			    outcome,
-			    transfer->arg);
-			break;
-		default:
-			assert(false && "unreachable");
-			break;
-	}
-
-	free(transfer);
-}
-
-static transfer_info_t *create_transfer_info(usb_hc_device_t *hc,
-    usb_direction_t direction, void *arg)
-{
-	transfer_info_t *transfer = malloc(sizeof(transfer_info_t));
-
-	transfer->direction = direction;
-	transfer->in_callback = NULL;
-	transfer->out_callback = NULL;
-	transfer->arg = arg;
-	transfer->hc = hc;
-
-	return transfer;
-}
-
 static int enqueue_transfer_out(usb_hc_device_t *hc,
     usb_hcd_attached_device_info_t *dev, usb_hc_endpoint_info_t *endpoint,
@@ -96,18 +50,5 @@
 	    usb_str_transfer_type(endpoint->transfer_type),
 	    size);
-
-	transfer_info_t *transfer
-	    = create_transfer_info(hc, USB_DIRECTION_OUT, arg);
-	transfer->out_callback = callback;
-
-	usb_target_t target = {
-		.address = dev->address,
-		.endpoint = endpoint->endpoint
-	};
-
-	hc_add_transaction_to_device(false, target, buffer, size,
-	    universal_callback, transfer);
-
-	return EOK;
+	return ENOTSUP;
 }
 
@@ -121,18 +62,5 @@
 	    usb_str_transfer_type(endpoint->transfer_type),
 	    size);
-
-	transfer_info_t *transfer
-	    = create_transfer_info(hc, USB_DIRECTION_OUT, arg);
-	transfer->out_callback = callback;
-
-	usb_target_t target = {
-		.address = dev->address,
-		.endpoint = endpoint->endpoint
-	};
-
-	hc_add_transaction_to_device(true, target, buffer, size,
-	    universal_callback, transfer);
-
-	return EOK;
+	return ENOTSUP;
 }
 
@@ -146,18 +74,5 @@
 	    usb_str_transfer_type(endpoint->transfer_type),
 	    size);
-
-	transfer_info_t *transfer
-	    = create_transfer_info(hc, USB_DIRECTION_IN, arg);
-	transfer->in_callback = callback;
-
-	usb_target_t target = {
-		.address = dev->address,
-		.endpoint = endpoint->endpoint
-	};
-
-	hc_add_transaction_from_device(target, buffer, size,
-	    universal_callback, transfer);
-
-	return EOK;
+	return ENOTSUP;
 }
 
Index: uspace/drv/vhc/hc.c
===================================================================
--- uspace/drv/vhc/hc.c	(revision 8cd1aa5eb727edb7e57c0b5429631ef51ff14d2e)
+++ uspace/drv/vhc/hc.c	(revision 31860b702b4520dfd94d77f61c51824a88d1182a)
@@ -131,5 +131,5 @@
 		
 		process_transaction_with_outcome(transaction, outcome);
-
+		
 		free(transaction);
 	}
Index: uspace/drv/vhc/hc.h
===================================================================
--- uspace/drv/vhc/hc.h	(revision 8cd1aa5eb727edb7e57c0b5429631ef51ff14d2e)
+++ uspace/drv/vhc/hc.h	(revision 31860b702b4520dfd94d77f61c51824a88d1182a)
@@ -79,4 +79,6 @@
     hc_transaction_done_callback_t callback, void * arg);
 
+int hc_fillin_transaction_from_device(usb_target_t target,
+    void * buffer, size_t len);
 
 #endif
Index: uspace/drv/vhc/hcd.c
===================================================================
--- uspace/drv/vhc/hcd.c	(revision 8cd1aa5eb727edb7e57c0b5429631ef51ff14d2e)
+++ uspace/drv/vhc/hcd.c	(revision 31860b702b4520dfd94d77f61c51824a88d1182a)
@@ -69,7 +69,6 @@
 
 	/*
-	 * Initialize our hub and announce its presence.
+	 * Announce that we have some root hub present.
 	 */
-	hub_init();
 	usb_hcd_add_root_hub(dev);
 
@@ -84,33 +83,9 @@
 };
 
-/** Fibril wrapper for HC transaction manager.
- *
- * @param arg Not used.
- * @return Nothing, return argument is unreachable.
- */
-static int hc_manager_fibril(void *arg)
-{
-	hc_manager();
-	return EOK;
-}
-
 int main(int argc, char * argv[])
 {	
 	printf("%s: virtual USB host controller driver.\n", NAME);
 
-	debug_level = 10;
-
-	fid_t fid = fibril_create(hc_manager_fibril, NULL);
-	if (fid == 0) {
-		printf("%s: failed to start HC manager fibril\n", NAME);
-		return ENOMEM;
-	}
-	fibril_add_ready(fid);
-
-	/*
-	 * Temporary workaround. Wait a little bit to be the last driver
-	 * in devman output.
-	 */
-	sleep(4);
+	debug_level = 5;
 
 	return usb_hcd_main(&vhc_driver);
Index: uspace/lib/usb/Makefile
===================================================================
--- uspace/lib/usb/Makefile	(revision 8cd1aa5eb727edb7e57c0b5429631ef51ff14d2e)
+++ uspace/lib/usb/Makefile	(revision 31860b702b4520dfd94d77f61c51824a88d1182a)
@@ -34,5 +34,4 @@
 SOURCES = \
 	src/hcdhubd.c \
-	src/localdrv.c \
 	src/usb.c \
 	src/usbdrv.c
Index: uspace/lib/usb/include/usb/hcdhubd.h
===================================================================
--- uspace/lib/usb/include/usb/hcdhubd.h	(revision 8cd1aa5eb727edb7e57c0b5429631ef51ff14d2e)
+++ uspace/lib/usb/include/usb/hcdhubd.h	(revision 31860b702b4520dfd94d77f61c51824a88d1182a)
@@ -159,18 +159,4 @@
     void *, size_t, size_t *, usb_handle_t *);
 
-int usb_hc_async_control_write_setup(usb_hc_device_t *, usb_target_t,
-    void *, size_t, usb_handle_t *);
-int usb_hc_async_control_write_data(usb_hc_device_t *, usb_target_t,
-    void *, size_t, usb_handle_t *);
-int usb_hc_async_control_write_status(usb_hc_device_t *, usb_target_t,
-    usb_handle_t *);
-
-int usb_hc_async_control_read_setup(usb_hc_device_t *, usb_target_t,
-    void *, size_t, usb_handle_t *);
-int usb_hc_async_control_read_data(usb_hc_device_t *, usb_target_t,
-    void *, size_t, size_t *, usb_handle_t *);
-int usb_hc_async_control_read_status(usb_hc_device_t *, usb_target_t,
-    usb_handle_t *);
-
 int usb_hc_async_wait_for(usb_handle_t);
 
Index: uspace/lib/usb/src/hcdhubd.c
===================================================================
--- uspace/lib/usb/src/hcdhubd.c	(revision 8cd1aa5eb727edb7e57c0b5429631ef51ff14d2e)
+++ uspace/lib/usb/src/hcdhubd.c	(revision 31860b702b4520dfd94d77f61c51824a88d1182a)
@@ -34,5 +34,4 @@
  */
 #include <usb/hcdhubd.h>
-#include <usb/devreq.h>
 #include <usbhc_iface.h>
 #include <driver.h>
@@ -56,6 +55,4 @@
 	.interfaces[USBHC_DEV_IFACE] = &usb_interface
 };
-
-static void set_hub_address(usb_hc_device_t *hc, usb_address_t address);
 
 /** Callback when new device is detected and must be handled by this driver.
@@ -101,7 +98,5 @@
 		return EOK;
 	} else {
-		usb_hc_device_t *hc = list_get_instance(hc_list.next, usb_hc_device_t, link);
-		set_hub_address(hc, 5);
-
+		printf("%s: hub added, hurrah!\n", hc_driver->name);
 		/*
 		 * We are some (probably deeply nested) hub.
@@ -109,55 +104,6 @@
 		 * connected devices.
 		 */
-
 		return ENOTSUP;
 	}
-}
-
-/** Sample usage of usb_hc_async functions.
- * This function sets hub address using standard SET_ADDRESS request.
- *
- * @warning This function shall be removed once you are familiar with
- * the usb_hc_ API.
- *
- * @param hc Host controller the hub belongs to.
- * @param address New hub address.
- */
-static void set_hub_address(usb_hc_device_t *hc, usb_address_t address)
-{
-	printf("%s: setting hub address to %d\n", hc->generic->name, address);
-	usb_target_t target = {0, 0};
-	usb_handle_t handle;
-	int rc;
-
-	usb_device_request_setup_packet_t setup_packet = {
-		.request_type = 0,
-		.request = USB_DEVREQ_SET_ADDRESS,
-		.index = 0,
-		.length = 0,
-	};
-	setup_packet.value = address;
-
-	rc = usb_hc_async_control_write_setup(hc, target,
-	    &setup_packet, sizeof(setup_packet), &handle);
-	if (rc != EOK) {
-		return;
-	}
-
-	rc = usb_hc_async_wait_for(handle);
-	if (rc != EOK) {
-		return;
-	}
-
-	rc = usb_hc_async_control_write_status(hc, target, &handle);
-	if (rc != EOK) {
-		return;
-	}
-
-	rc = usb_hc_async_wait_for(handle);
-	if (rc != EOK) {
-		return;
-	}
-
-	printf("%s: hub address changed\n", hc->generic->name);
 }
 
@@ -266,4 +212,16 @@
 
 	/*
+	 * For testing/debugging purposes only.
+	 * Try to send some data to default USB address.
+	 */
+	usb_target_t target = {0, 0};
+	usb_handle_t handle = 0;
+	char *data = (char *) "Hello, World!";
+
+
+	(void)usb_hc_async_interrupt_out(dev, target, data, str_length(data), &handle);
+	(void)usb_hc_async_wait_for(handle);
+
+	/*
 	 * Announce presence of child device.
 	 */
@@ -314,4 +272,81 @@
 }
 
+/** Issue interrupt OUT transfer to HC driven by current task.
+ *
+ * @param hc Host controller to handle the transfer.
+ * @param target Target device address.
+ * @param buffer Data buffer.
+ * @param size Buffer size.
+ * @param handle Transfer handle.
+ * @return Error code.
+ */
+int usb_hc_async_interrupt_out(usb_hc_device_t *hc, usb_target_t target,
+    void *buffer, size_t size,
+    usb_handle_t *handle)
+{
+	if ((hc->transfer_ops == NULL)
+	    || (hc->transfer_ops->transfer_out == NULL)) {
+		return ENOTSUP;
+	}
+
+	/*
+	 * For debugging purposes only.
+	 * We need to find appropriate device in list of managed device
+	 * and pass it to the transfer callback function.
+	 */
+	usb_hcd_attached_device_info_t dev = {
+		.address = target.address,
+		.endpoint_count = 0,
+		.endpoints = NULL,
+	};
+	usb_hc_endpoint_info_t endpoint = {
+		.endpoint = target.endpoint,
+		.transfer_type = USB_TRANSFER_INTERRUPT,
+		.direction = USB_DIRECTION_OUT,
+		.data_toggle = 0
+	};
+
+	hc->transfer_ops->transfer_out(hc, &dev, &endpoint, buffer, size, NULL, NULL);
+
+	*handle = (usb_handle_t)NULL;
+
+	return EOK;
+}
+
+
+/** Issue interrupt IN transfer to HC driven by current task.
+ *
+ * @warning The @p buffer and @p actual_size parameters shall not be
+ * touched until this transfer is waited for by usb_hc_async_wait_for().
+ *
+ * @param hc Host controller to handle the transfer.
+ * @param target Target device address.
+ * @param buffer Data buffer.
+ * @param size Buffer size.
+ * @param actual_size Size of actually transferred data.
+ * @param handle Transfer handle.
+ * @return Error code.
+ */
+int usb_hc_async_interrupt_in(usb_hc_device_t *hc, usb_target_t target,
+    void *buffer, size_t size, size_t *actual_size,
+    usb_handle_t *handle)
+{
+	/*
+	 * TODO: verify that given endpoint is of interrupt type and
+	 * call hc->transfer_ops->transfer_in()
+	 */
+	return ENOTSUP;
+}
+
+/** Wait for transfer to complete.
+ *
+ * @param handle Transfer handle.
+ * @return Error code.
+ */
+int usb_hc_async_wait_for(usb_handle_t handle)
+{
+	return ENOTSUP;
+}
+
 /**
  * @}
Index: pace/lib/usb/src/localdrv.c
===================================================================
--- uspace/lib/usb/src/localdrv.c	(revision 8cd1aa5eb727edb7e57c0b5429631ef51ff14d2e)
+++ 	(revision )
@@ -1,389 +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.
- */
-
-/** @addtogroup libusb usb
- * @{
- */
-/** @file
- * @brief Driver communication for local drivers (hubs).
- */
-#include <usb/hcdhubd.h>
-#include <usbhc_iface.h>
-#include <driver.h>
-#include <bool.h>
-#include <errno.h>
-
-/** Information about pending transaction on HC. */
-typedef struct {
-	/** Storage for actual number of bytes transferred. */
-	size_t *size_transferred;
-
-	/** Target device. */
-	usb_hcd_attached_device_info_t *device;
-	/** Target endpoint. */
-	usb_hc_endpoint_info_t *endpoint;
-
-	/** Guard for the condition variable. */
-	fibril_mutex_t condvar_guard;
-	/** Condition variable for waiting for done. */
-	fibril_condvar_t condvar;
-
-	/** Flag whether the transfer is done. */
-	bool done;
-} transfer_info_t;
-
-/** Create new transfer info.
- *
- * @param device Attached device.
- * @param endpoint Endpoint.
- * @return Transfer info with pre-filled values.
- */
-static transfer_info_t *transfer_info_create(
-    usb_hcd_attached_device_info_t *device, usb_hc_endpoint_info_t *endpoint)
-{
-	transfer_info_t *transfer = malloc(sizeof(transfer_info_t));
-
-	transfer->size_transferred = NULL;
-	fibril_condvar_initialize(&transfer->condvar);
-	fibril_mutex_initialize(&transfer->condvar_guard);
-	transfer->done = false;
-
-	transfer->device = device;
-	transfer->endpoint = endpoint;
-
-	return transfer;
-}
-
-/** Destroy transfer info.
- *
- * @param transfer Transfer to be destroyed.
- */
-static void transfer_info_destroy(transfer_info_t *transfer)
-{
-	free(transfer->device);
-	free(transfer->endpoint);
-	free(transfer);
-}
-
-/** Create info about attached device.
- *
- * @param address Device address.
- * @return Device info structure.
- */
-static usb_hcd_attached_device_info_t *create_attached_device_info(
-    usb_address_t address)
-{
-	usb_hcd_attached_device_info_t *dev
-	    = malloc(sizeof(usb_hcd_attached_device_info_t));
-
-	dev->address = address;
-	dev->endpoint_count = 0;
-	dev->endpoints = NULL;
-	list_initialize(&dev->link);
-
-	return dev;
-}
-
-/** Create info about device endpoint.
- *
- * @param endpoint Endpoint number.
- * @param direction Endpoint data direction.
- * @param transfer_type Transfer type of the endpoint.
- * @return Endpoint info structure.
- */
-static usb_hc_endpoint_info_t *create_endpoint_info(usb_endpoint_t endpoint,
-    usb_direction_t direction, usb_transfer_type_t transfer_type)
-{
-	usb_hc_endpoint_info_t *ep = malloc(sizeof(usb_hc_endpoint_info_t));
-	ep->data_toggle = 0;
-	ep->direction = direction;
-	ep->transfer_type = transfer_type;
-	ep->endpoint = endpoint;
-
-	return ep;
-}
-
-/** Marks given transfer as done.
- *
- * @param transfer Transfer to be completed.
- */
-static void transfer_mark_complete(transfer_info_t *transfer)
-{
-	fibril_mutex_lock(&transfer->condvar_guard);
-	transfer->done = true;
-	fibril_condvar_signal(&transfer->condvar);
-	fibril_mutex_unlock(&transfer->condvar_guard);
-}
-
-/** Callback for OUT transfers.
- *
- * @param hc Host controller that processed the transfer.
- * @param outcome Transfer outcome.
- * @param arg Custom argument.
- */
-static void callback_out(usb_hc_device_t *hc,
-    usb_transaction_outcome_t outcome, void *arg)
-{
-	transfer_info_t *transfer = (transfer_info_t *) arg;
-
-	/*
-	 * For out transfers, marking them complete is enough.
-	 * No other processing is necessary.
-	 */
-	transfer_mark_complete(transfer);
-}
-
-/** Callback for IN transfers.
- *
- * @param hc Host controller that processed the transfer.
- * @param actual_size Number of actually transferred bytes.
- * @param outcome Transfer outcome.
- * @param arg Custom argument.
- */
-static void callback_in(usb_hc_device_t *hc,
-    size_t actual_size, usb_transaction_outcome_t outcome, void *arg)
-{
-	transfer_info_t *transfer = (transfer_info_t *) arg;
-
-	/*
-	 * Set the number of actually transferred bytes and
-	 * mark the transfer as complete.
-	 */
-	if (transfer->size_transferred != NULL) {
-		*transfer->size_transferred = actual_size;
-	}
-
-	transfer_mark_complete(transfer);
-}
-
-static int async_transfer_out(usb_hc_device_t *hc,
-    usb_target_t target, usb_transfer_type_t transfer_type,
-    void *data, size_t size,
-    usb_handle_t *handle)
-{
-	if ((hc->transfer_ops == NULL)
-	    || (hc->transfer_ops->transfer_out == NULL)) {
-		return ENOTSUP;
-	}
-
-	/* This creation of the device on the fly is just a workaround. */
-
-	transfer_info_t *transfer = transfer_info_create(
-	    create_attached_device_info(target.address),
-	    create_endpoint_info(target.endpoint,
-		USB_DIRECTION_OUT, transfer_type));
-
-	int rc = hc->transfer_ops->transfer_out(hc,
-	    transfer->device, transfer->endpoint,
-	    data, size,
-	    callback_out, transfer);
-
-	if (rc != EOK) {
-		transfer_info_destroy(transfer);
-		return rc;
-	}
-
-	*handle = (usb_handle_t)transfer;
-
-	return EOK;
-}
-
-static int async_transfer_setup(usb_hc_device_t *hc,
-    usb_target_t target, usb_transfer_type_t transfer_type,
-    void *data, size_t size,
-    usb_handle_t *handle)
-{
-	if ((hc->transfer_ops == NULL)
-	    || (hc->transfer_ops->transfer_setup == NULL)) {
-		return ENOTSUP;
-	}
-
-	/* This creation of the device on the fly is just a workaround. */
-
-	transfer_info_t *transfer = transfer_info_create(
-	    create_attached_device_info(target.address),
-	    create_endpoint_info(target.endpoint,
-		USB_DIRECTION_OUT, transfer_type));
-
-	int rc = hc->transfer_ops->transfer_setup(hc,
-	    transfer->device, transfer->endpoint,
-	    data, size,
-	    callback_out, transfer);
-
-	if (rc != EOK) {
-		transfer_info_destroy(transfer);
-		return rc;
-	}
-
-	*handle = (usb_handle_t)transfer;
-
-	return EOK;
-}
-
-static int async_transfer_in(usb_hc_device_t *hc, usb_target_t target,
-    usb_transfer_type_t transfer_type,
-    void *buffer, size_t size, size_t *actual_size,
-    usb_handle_t *handle)
-{
-	if ((hc->transfer_ops == NULL)
-	    || (hc->transfer_ops->transfer_in == NULL)) {
-		return ENOTSUP;
-	}
-
-	/* This creation of the device on the fly is just a workaround. */
-
-	transfer_info_t *transfer = transfer_info_create(
-	    create_attached_device_info(target.address),
-	    create_endpoint_info(target.endpoint,
-		USB_DIRECTION_IN, transfer_type));
-	transfer->size_transferred = actual_size;
-
-	int rc = hc->transfer_ops->transfer_in(hc,
-	    transfer->device, transfer->endpoint,
-	    buffer, size,
-	    callback_in, transfer);
-
-	if (rc != EOK) {
-		transfer_info_destroy(transfer);
-		return rc;
-	}
-
-	*handle = (usb_handle_t)transfer;
-
-	return EOK;
-}
-
-
-/** Issue interrupt OUT transfer to HC driven by current task.
- *
- * @param hc Host controller to handle the transfer.
- * @param target Target device address.
- * @param buffer Data buffer.
- * @param size Buffer size.
- * @param handle Transfer handle.
- * @return Error code.
- */
-int usb_hc_async_interrupt_out(usb_hc_device_t *hc, usb_target_t target,
-    void *buffer, size_t size,
-    usb_handle_t *handle)
-{
-	return async_transfer_out(hc, target,
-	    USB_TRANSFER_INTERRUPT, buffer, size, handle);
-}
-
-
-/** Issue interrupt IN transfer to HC driven by current task.
- *
- * @warning The @p buffer and @p actual_size parameters shall not be
- * touched until this transfer is waited for by usb_hc_async_wait_for().
- *
- * @param hc Host controller to handle the transfer.
- * @param target Target device address.
- * @param buffer Data buffer.
- * @param size Buffer size.
- * @param actual_size Size of actually transferred data.
- * @param handle Transfer handle.
- * @return Error code.
- */
-int usb_hc_async_interrupt_in(usb_hc_device_t *hc, usb_target_t target,
-    void *buffer, size_t size, size_t *actual_size,
-    usb_handle_t *handle)
-{
-	return async_transfer_in(hc, target,
-	    USB_TRANSFER_INTERRUPT, buffer, size, actual_size, handle);
-}
-
-int usb_hc_async_control_write_setup(usb_hc_device_t *hc, usb_target_t target,
-    void *data, size_t size, usb_handle_t *handle)
-{
-	return async_transfer_setup(hc, target,
-	    USB_TRANSFER_CONTROL, data, size, handle);
-}
-
-int usb_hc_async_control_write_data(usb_hc_device_t *hc, usb_target_t target,
-    void *data, size_t size, usb_handle_t *handle)
-{
-	return async_transfer_out(hc, target,
-	    USB_TRANSFER_CONTROL, data, size, handle);
-}
-
-int usb_hc_async_control_write_status(usb_hc_device_t *hc, usb_target_t target,
-    usb_handle_t *handle)
-{
-	return async_transfer_in(hc, target,
-	    USB_TRANSFER_CONTROL, NULL, 0, NULL, handle);
-}
-
-int usb_hc_async_control_read_setup(usb_hc_device_t *hc, usb_target_t target,
-    void *data, size_t size, usb_handle_t *handle)
-{
-	return async_transfer_setup(hc, target,
-	    USB_TRANSFER_CONTROL, data, size, handle);
-}
-
-int usb_hc_async_control_read_data(usb_hc_device_t *hc, usb_target_t target,
-    void *buffer, size_t size, size_t *actual_size,
-    usb_handle_t *handle)
-{
-	return async_transfer_in(hc, target,
-	    USB_TRANSFER_CONTROL, buffer, size, actual_size, handle);
-}
-
-int usb_hc_async_control_read_status(usb_hc_device_t *hc, usb_target_t target,
-    usb_handle_t *handle)
-{
-	return async_transfer_out(hc, target,
-	    USB_TRANSFER_CONTROL, NULL, 0, handle);
-}
-
-/** Wait for transfer to complete.
- *
- * @param handle Transfer handle.
- * @return Error code.
- */
-int usb_hc_async_wait_for(usb_handle_t handle)
-{
-	transfer_info_t *transfer = (transfer_info_t *) handle;
-	if (transfer == NULL) {
-		return ENOENT;
-	}
-
-	fibril_mutex_lock(&transfer->condvar_guard);
-	while (!transfer->done) {
-		fibril_condvar_wait(&transfer->condvar, &transfer->condvar_guard);
-	}
-	fibril_mutex_unlock(&transfer->condvar_guard);
-
-	transfer_info_destroy(transfer);
-
-	return EOK;
-}
-
-/**
- * @}
- */
