Index: uspace/lib/usb/include/usb/usbdrv.h
===================================================================
--- uspace/lib/usb/include/usb/usbdrv.h	(revision fe5e00d6a3e5a49d7f67801ffe8944eb660bb7ad)
+++ uspace/lib/usb/include/usb/usbdrv.h	(revision 6c8ada212863a9c5a363c475e540cb33638baa50)
@@ -48,4 +48,18 @@
     void *, size_t, size_t *, usb_handle_t *);
 
+int usb_drv_async_control_write_setup(int, usb_target_t,
+    void *, size_t, usb_handle_t *);
+int usb_drv_async_control_write_data(int, usb_target_t,
+    void *, size_t, usb_handle_t *);
+int usb_drv_async_control_write_status(int, usb_target_t,
+    usb_handle_t *);
+
+int usb_drv_async_control_read_setup(int, usb_target_t,
+    void *, size_t, usb_handle_t *);
+int usb_drv_async_control_read_data(int, usb_target_t,
+    void *, size_t, size_t *, usb_handle_t *);
+int usb_drv_async_control_read_status(int, usb_target_t,
+    usb_handle_t *);
+
 int usb_drv_async_wait_for(usb_handle_t);
 
Index: uspace/lib/usb/src/usbdrv.c
===================================================================
--- uspace/lib/usb/src/usbdrv.c	(revision fe5e00d6a3e5a49d7f67801ffe8944eb660bb7ad)
+++ uspace/lib/usb/src/usbdrv.c	(revision 6c8ada212863a9c5a363c475e540cb33638baa50)
@@ -345,4 +345,74 @@
 }
 
+/** Start control write transfer. */
+int usb_drv_async_control_write_setup(int phone, usb_target_t target,
+    void *buffer, size_t size,
+    usb_handle_t *handle)
+{
+	return async_send_buffer(phone,
+	    IPC_M_USBHC_CONTROL_WRITE_SETUP,
+	    target,
+	    buffer, size,
+	    handle);
+}
+
+/** Send data during control write transfer. */
+int usb_drv_async_control_write_data(int phone, usb_target_t target,
+    void *buffer, size_t size,
+    usb_handle_t *handle)
+{
+	return async_send_buffer(phone,
+	    IPC_M_USBHC_CONTROL_WRITE_DATA,
+	    target,
+	    buffer, size,
+	    handle);
+}
+
+/** Finalize control write transfer. */
+int usb_drv_async_control_write_status(int phone, usb_target_t target,
+    usb_handle_t *handle)
+{
+	return async_recv_buffer(phone,
+	    IPC_M_USBHC_CONTROL_WRITE_STATUS,
+	    target,
+	    NULL, 0, NULL,
+	    handle);
+}
+
+/** Start control read transfer. */
+int usb_drv_async_control_read_setup(int phone, usb_target_t target,
+    void *buffer, size_t size,
+    usb_handle_t *handle)
+{
+	return async_send_buffer(phone,
+	    IPC_M_USBHC_CONTROL_READ_SETUP,
+	    target,
+	    buffer, size,
+	    handle);
+}
+
+/** Read data during control read transfer. */
+int usb_drv_async_control_read_data(int phone, usb_target_t target,
+    void *buffer, size_t size, size_t *actual_size,
+    usb_handle_t *handle)
+{
+	return async_recv_buffer(phone,
+	    IPC_M_USBHC_CONTROL_READ_DATA,
+	    target,
+	    buffer, size, actual_size,
+	    handle);
+}
+
+/** Finalize control read transfer. */
+int usb_drv_async_control_read_status(int phone, usb_target_t target,
+    usb_handle_t *handle)
+{
+	return async_send_buffer(phone,
+	    IPC_M_USBHC_CONTROL_READ_STATUS,
+	    target,
+	    NULL, 0,
+	    handle);
+}
+
 /**
  * @}
