Index: uspace/lib/drv/generic/remote_usbhc.c
===================================================================
--- uspace/lib/drv/generic/remote_usbhc.c	(revision bdd8ad2f03530c2b59a0b35c7fdd0147223e5682)
+++ uspace/lib/drv/generic/remote_usbhc.c	(revision 1924bd430b10bc842d09d99ede55d445ffc680ca)
@@ -48,8 +48,6 @@
 static void remote_usbhc_register_endpoint(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *);
 static void remote_usbhc_unregister_endpoint(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *);
-static void remote_usbhc_control_write(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *);
-static void remote_usbhc_control_read(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *);
-static void remote_usbhc_data_read(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *);
-static void remote_usbhc_data_write(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *);
+static void remote_usbhc_read(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *);
+static void remote_usbhc_write(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *);
 //static void remote_usbhc(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *);
 
@@ -64,9 +62,6 @@
 	[IPC_M_USBHC_UNREGISTER_ENDPOINT] = remote_usbhc_unregister_endpoint,
 
-	[IPC_M_USBHC_CONTROL_WRITE] = remote_usbhc_control_write,
-	[IPC_M_USBHC_CONTROL_READ] = remote_usbhc_control_read,
-
-	[IPC_M_USBHC_DATA_READ] = remote_usbhc_data_read,
-	[IPC_M_USBHC_DATA_WRITE] = remote_usbhc_data_write,
+	[IPC_M_USBHC_READ] = remote_usbhc_read,
+	[IPC_M_USBHC_WRITE] = remote_usbhc_write,
 };
 
@@ -226,131 +221,4 @@
 	async_transaction_destroy(trans);
 }
-
-void remote_usbhc_control_write(ddf_fun_t *fun, void *iface,
-ipc_callid_t callid, ipc_call_t *call)
-{
-	assert(false);
-	usbhc_iface_t *usb_iface = (usbhc_iface_t *) iface;
-	assert(usb_iface != NULL);
-
-	if (!usb_iface->write) {
-		async_answer_0(callid, ENOTSUP);
-		return;
-	}
-
-	const usb_target_t target = { .packed = DEV_IPC_GET_ARG1(*call) };
-	size_t data_buffer_len = DEV_IPC_GET_ARG2(*call);
-
-	int rc;
-
-	void *setup_packet = NULL;
-	void *data_buffer = NULL;
-	size_t setup_packet_len = 0;
-
-	rc = async_data_write_accept(&setup_packet, false,
-	    1, USB_MAX_PAYLOAD_SIZE, 0, &setup_packet_len);
-	if (rc != EOK) {
-		async_answer_0(callid, rc);
-		return;
-	}
-
-	if (data_buffer_len > 0) {
-		rc = async_data_write_accept(&data_buffer, false,
-		    1, USB_MAX_PAYLOAD_SIZE, 0, &data_buffer_len);
-		if (rc != EOK) {
-			async_answer_0(callid, rc);
-			free(setup_packet);
-			return;
-		}
-	}
-
-	async_transaction_t *trans = async_transaction_create(callid);
-	if (trans == NULL) {
-		async_answer_0(callid, ENOMEM);
-		free(setup_packet);
-		free(data_buffer);
-		return;
-	}
-	trans->buffer = data_buffer;
-	trans->size = data_buffer_len;
-
-	assert(setup_packet_len == 8);
-	uint64_t setup_buffer;
-	memcpy(&setup_buffer, setup_packet, 8);
-	free(setup_packet);
-	rc = usb_iface->write(fun, target, setup_buffer, trans->buffer,
-	    trans->size, callback_out, trans);
-
-	if (rc != EOK) {
-		async_answer_0(callid, rc);
-		async_transaction_destroy(trans);
-	}
-}
-
-
-void remote_usbhc_control_read(ddf_fun_t *fun, void *iface,
-ipc_callid_t callid, ipc_call_t *call)
-{
-	assert(false);
-	usbhc_iface_t *usb_iface = (usbhc_iface_t *) iface;
-	assert(usb_iface != NULL);
-
-	if (!usb_iface->read) {
-		async_answer_0(callid, ENOTSUP);
-		return;
-	}
-
-	const usb_target_t target = { .packed = DEV_IPC_GET_ARG1(*call) };
-
-	int rc;
-
-	void *setup_packet = NULL;
-	size_t setup_packet_len = 0;
-	size_t data_len = 0;
-
-	rc = async_data_write_accept(&setup_packet, false,
-	    1, USB_MAX_PAYLOAD_SIZE, 0, &setup_packet_len);
-	if (rc != EOK) {
-		async_answer_0(callid, rc);
-		return;
-	}
-
-	ipc_callid_t data_callid;
-	if (!async_data_read_receive(&data_callid, &data_len)) {
-		async_answer_0(callid, EPARTY);
-		free(setup_packet);
-		return;
-	}
-
-	async_transaction_t *trans = async_transaction_create(callid);
-	if (trans == NULL) {
-		async_answer_0(data_callid, ENOMEM);
-		async_answer_0(callid, ENOMEM);
-		free(setup_packet);
-		return;
-	}
-	trans->data_caller = data_callid;
-	trans->size = data_len;
-	trans->buffer = malloc(data_len);
-	if (trans->buffer == NULL) {
-		async_answer_0(data_callid, ENOMEM);
-		async_answer_0(callid, ENOMEM);
-		async_transaction_destroy(trans);
-		return;
-	}
-
-	assert(setup_packet_len == 8);
-	uint64_t setup_buffer;
-	memcpy(&setup_buffer, setup_packet, 8);
-	free(setup_packet);
-	rc = usb_iface->read(fun, target, setup_buffer, trans->buffer,
-	    trans->size, callback_in, trans);
-	if (rc != EOK) {
-		async_answer_0(data_callid, rc);
-		async_answer_0(callid, rc);
-		async_transaction_destroy(trans);
-	}
-}
-
 
 void remote_usbhc_register_endpoint(ddf_fun_t *fun, void *iface,
@@ -396,5 +264,4 @@
 }
 
-
 void remote_usbhc_unregister_endpoint(ddf_fun_t *fun, void *iface,
     ipc_callid_t callid, ipc_call_t *call)
@@ -417,5 +284,5 @@
 }
 
-static void remote_usbhc_data_read(
+void remote_usbhc_read(
     ddf_fun_t *fun, void *iface, ipc_callid_t callid, ipc_call_t *call)
 {
@@ -464,5 +331,5 @@
 }
 
-static void remote_usbhc_data_write(
+void remote_usbhc_write(
     ddf_fun_t *fun, void *iface, ipc_callid_t callid, ipc_call_t *call)
 {
Index: uspace/lib/drv/include/usbhc_iface.h
===================================================================
--- uspace/lib/drv/include/usbhc_iface.h	(revision bdd8ad2f03530c2b59a0b35c7fdd0147223e5682)
+++ uspace/lib/drv/include/usbhc_iface.h	(revision 1924bd430b10bc842d09d99ede55d445ffc680ca)
@@ -150,34 +150,17 @@
 	IPC_M_USBHC_UNREGISTER_ENDPOINT,
 
-	/** Issue control WRITE transfer.
-	 * See explanation at usb_iface_funcs_t (OUT transaction) for
-	 * call parameters.
-	 * This call is immediately followed by two IPC data writes
-	 * from the caller (setup packet and actual data).
-	 */
-	IPC_M_USBHC_CONTROL_WRITE,
-
-	/** Issue control READ transfer.
-	 * See explanation at usb_iface_funcs_t (IN transaction) for
-	 * call parameters.
-	 * This call is immediately followed by IPC data write from the caller
-	 * (setup packet) and IPC data read (buffer that was read).
-	 */
-	IPC_M_USBHC_CONTROL_READ,
-
 	/** Get data from device.
 	 * See explanation at usb_iface_funcs_t (IN transaction).
 	 */
-	IPC_M_USBHC_DATA_READ,
+	IPC_M_USBHC_READ,
 
 	/** Send data to device.
 	 * See explanation at usb_iface_funcs_t (OUT transaction).
 	 */
-	IPC_M_USBHC_DATA_WRITE,
+	IPC_M_USBHC_WRITE,
 } usbhc_iface_funcs_t;
 
 /** Callback for outgoing transfer. */
-typedef void (*usbhc_iface_transfer_out_callback_t)(ddf_fun_t *,
-    int, void *);
+typedef void (*usbhc_iface_transfer_out_callback_t)(ddf_fun_t *, int, void *);
 
 /** Callback for incoming transfer. */
