Index: uspace/lib/drv/generic/remote_usbdiag.c
===================================================================
--- uspace/lib/drv/generic/remote_usbdiag.c	(revision 5c75456d1c46306b7feaa50f199fd4f6d059a601)
+++ uspace/lib/drv/generic/remote_usbdiag.c	(revision 35c37fc2ef57407c4bf38bf0ac3d777777e3ccd1)
@@ -48,5 +48,11 @@
 	IPC_M_USBDIAG_BURST_BULK_OUT,
 	IPC_M_USBDIAG_BURST_ISOCH_IN,
-	IPC_M_USBDIAG_BURST_ISOCH_OUT
+	IPC_M_USBDIAG_BURST_ISOCH_OUT,
+	IPC_M_USBDIAG_DATA_INTR_IN,
+	IPC_M_USBDIAG_DATA_INTR_OUT,
+	IPC_M_USBDIAG_DATA_BULK_IN,
+	IPC_M_USBDIAG_DATA_BULK_OUT,
+	IPC_M_USBDIAG_DATA_ISOCH_IN,
+	IPC_M_USBDIAG_DATA_ISOCH_OUT
 } usb_iface_funcs_t;
 
@@ -139,4 +145,88 @@
 	sysarg_t duration_;
 	const int rc = async_req_3_1(exch, DEV_IFACE_ID(USBDIAG_DEV_IFACE), IPC_M_USBDIAG_BURST_ISOCH_OUT, cycles, size, &duration_);
+
+	if (rc == EOK && duration)
+		*duration = duration_;
+
+	return rc;
+}
+
+int usbdiag_data_intr_in(async_exch_t *exch, int cycles, size_t size, usbdiag_dur_t *duration)
+{
+	if (!exch)
+		return EBADMEM;
+
+	sysarg_t duration_;
+	const int rc = async_req_3_1(exch, DEV_IFACE_ID(USBDIAG_DEV_IFACE), IPC_M_USBDIAG_DATA_INTR_IN, cycles, size, &duration_);
+
+	if (rc == EOK && duration)
+		*duration = duration_;
+
+	return rc;
+}
+
+int usbdiag_data_intr_out(async_exch_t *exch, int cycles, size_t size, usbdiag_dur_t *duration)
+{
+	if (!exch)
+		return EBADMEM;
+
+	sysarg_t duration_;
+	const int rc = async_req_3_1(exch, DEV_IFACE_ID(USBDIAG_DEV_IFACE), IPC_M_USBDIAG_DATA_INTR_OUT, cycles, size, &duration_);
+
+	if (rc == EOK && duration)
+		*duration = duration_;
+
+	return rc;
+}
+
+int usbdiag_data_bulk_in(async_exch_t *exch, int cycles, size_t size, usbdiag_dur_t *duration)
+{
+	if (!exch)
+		return EBADMEM;
+
+	sysarg_t duration_;
+	const int rc = async_req_3_1(exch, DEV_IFACE_ID(USBDIAG_DEV_IFACE), IPC_M_USBDIAG_DATA_BULK_IN, cycles, size, &duration_);
+
+	if (rc == EOK && duration)
+		*duration = duration_;
+
+	return rc;
+}
+
+int usbdiag_data_bulk_out(async_exch_t *exch, int cycles, size_t size, usbdiag_dur_t *duration)
+{
+	if (!exch)
+		return EBADMEM;
+
+	sysarg_t duration_;
+	const int rc = async_req_3_1(exch, DEV_IFACE_ID(USBDIAG_DEV_IFACE), IPC_M_USBDIAG_DATA_BULK_OUT, cycles, size, &duration_);
+
+	if (rc == EOK && duration)
+		*duration = duration_;
+
+	return rc;
+}
+
+int usbdiag_data_isoch_in(async_exch_t *exch, int cycles, size_t size, usbdiag_dur_t *duration)
+{
+	if (!exch)
+		return EBADMEM;
+
+	sysarg_t duration_;
+	const int rc = async_req_3_1(exch, DEV_IFACE_ID(USBDIAG_DEV_IFACE), IPC_M_USBDIAG_DATA_ISOCH_IN, cycles, size, &duration_);
+
+	if (rc == EOK && duration)
+		*duration = duration_;
+
+	return rc;
+}
+
+int usbdiag_data_isoch_out(async_exch_t *exch, int cycles, size_t size, usbdiag_dur_t *duration)
+{
+	if (!exch)
+		return EBADMEM;
+
+	sysarg_t duration_;
+	const int rc = async_req_3_1(exch, DEV_IFACE_ID(USBDIAG_DEV_IFACE), IPC_M_USBDIAG_DATA_ISOCH_OUT, cycles, size, &duration_);
 
 	if (rc == EOK && duration)
@@ -152,4 +242,11 @@
 static void remote_usbdiag_burst_isoch_in(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *);
 static void remote_usbdiag_burst_isoch_out(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *);
+
+static void remote_usbdiag_data_intr_in(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *);
+static void remote_usbdiag_data_intr_out(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *);
+static void remote_usbdiag_data_bulk_in(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *);
+static void remote_usbdiag_data_bulk_out(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *);
+static void remote_usbdiag_data_isoch_in(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *);
+static void remote_usbdiag_data_isoch_out(ddf_fun_t *, void *, ipc_callid_t, ipc_call_t *);
 
 /** Remote USB diagnostic interface operations. */
@@ -160,5 +257,11 @@
 	[IPC_M_USBDIAG_BURST_BULK_OUT] = remote_usbdiag_burst_bulk_out,
 	[IPC_M_USBDIAG_BURST_ISOCH_IN] = remote_usbdiag_burst_isoch_in,
-	[IPC_M_USBDIAG_BURST_ISOCH_OUT] = remote_usbdiag_burst_isoch_out
+	[IPC_M_USBDIAG_BURST_ISOCH_OUT] = remote_usbdiag_burst_isoch_out,
+	[IPC_M_USBDIAG_DATA_INTR_IN] = remote_usbdiag_data_intr_in,
+	[IPC_M_USBDIAG_DATA_INTR_OUT] = remote_usbdiag_data_intr_out,
+	[IPC_M_USBDIAG_DATA_BULK_IN] = remote_usbdiag_data_bulk_in,
+	[IPC_M_USBDIAG_DATA_BULK_OUT] = remote_usbdiag_data_bulk_out,
+	[IPC_M_USBDIAG_DATA_ISOCH_IN] = remote_usbdiag_data_isoch_in,
+	[IPC_M_USBDIAG_DATA_ISOCH_OUT] = remote_usbdiag_data_isoch_out
 };
 
@@ -295,4 +398,130 @@
 }
 
+void remote_usbdiag_data_intr_in(ddf_fun_t *fun, void *iface, ipc_callid_t callid, ipc_call_t *call)
+{
+	const usbdiag_iface_t *diag_iface = (usbdiag_iface_t *) iface;
+
+	if (diag_iface->data_bulk_in == NULL) {
+		async_answer_0(callid, ENOTSUP);
+		return;
+	}
+
+	int cycles = DEV_IPC_GET_ARG1(*call);
+	size_t size = DEV_IPC_GET_ARG2(*call);
+	usbdiag_dur_t duration;
+	const int ret = diag_iface->data_intr_in(fun, cycles, size, &duration);
+
+	if (ret != EOK) {
+		async_answer_0(callid, ret);
+	} else {
+		async_answer_1(callid, EOK, duration);
+	}
+}
+
+void remote_usbdiag_data_intr_out(ddf_fun_t *fun, void *iface, ipc_callid_t callid, ipc_call_t *call)
+{
+	const usbdiag_iface_t *diag_iface = (usbdiag_iface_t *) iface;
+
+	if (diag_iface->data_bulk_out == NULL) {
+		async_answer_0(callid, ENOTSUP);
+		return;
+	}
+
+	int cycles = DEV_IPC_GET_ARG1(*call);
+	size_t size = DEV_IPC_GET_ARG2(*call);
+	usbdiag_dur_t duration;
+	const int ret = diag_iface->data_intr_out(fun, cycles, size, &duration);
+
+	if (ret != EOK) {
+		async_answer_0(callid, ret);
+	} else {
+		async_answer_1(callid, EOK, duration);
+	}
+}
+
+void remote_usbdiag_data_bulk_in(ddf_fun_t *fun, void *iface, ipc_callid_t callid, ipc_call_t *call)
+{
+	const usbdiag_iface_t *diag_iface = (usbdiag_iface_t *) iface;
+
+	if (diag_iface->data_bulk_in == NULL) {
+		async_answer_0(callid, ENOTSUP);
+		return;
+	}
+
+	int cycles = DEV_IPC_GET_ARG1(*call);
+	size_t size = DEV_IPC_GET_ARG2(*call);
+	usbdiag_dur_t duration;
+	const int ret = diag_iface->data_bulk_in(fun, cycles, size, &duration);
+
+	if (ret != EOK) {
+		async_answer_0(callid, ret);
+	} else {
+		async_answer_1(callid, EOK, duration);
+	}
+}
+
+void remote_usbdiag_data_bulk_out(ddf_fun_t *fun, void *iface, ipc_callid_t callid, ipc_call_t *call)
+{
+	const usbdiag_iface_t *diag_iface = (usbdiag_iface_t *) iface;
+
+	if (diag_iface->data_bulk_out == NULL) {
+		async_answer_0(callid, ENOTSUP);
+		return;
+	}
+
+	int cycles = DEV_IPC_GET_ARG1(*call);
+	size_t size = DEV_IPC_GET_ARG2(*call);
+	usbdiag_dur_t duration;
+	const int ret = diag_iface->data_bulk_out(fun, cycles, size, &duration);
+
+	if (ret != EOK) {
+		async_answer_0(callid, ret);
+	} else {
+		async_answer_1(callid, EOK, duration);
+	}
+}
+
+void remote_usbdiag_data_isoch_in(ddf_fun_t *fun, void *iface, ipc_callid_t callid, ipc_call_t *call)
+{
+	const usbdiag_iface_t *diag_iface = (usbdiag_iface_t *) iface;
+
+	if (diag_iface->data_isoch_in == NULL) {
+		async_answer_0(callid, ENOTSUP);
+		return;
+	}
+
+	int cycles = DEV_IPC_GET_ARG1(*call);
+	size_t size = DEV_IPC_GET_ARG2(*call);
+	usbdiag_dur_t duration;
+	const int ret = diag_iface->data_isoch_in(fun, cycles, size, &duration);
+
+	if (ret != EOK) {
+		async_answer_0(callid, ret);
+	} else {
+		async_answer_1(callid, EOK, duration);
+	}
+}
+
+void remote_usbdiag_data_isoch_out(ddf_fun_t *fun, void *iface, ipc_callid_t callid, ipc_call_t *call)
+{
+	const usbdiag_iface_t *diag_iface = (usbdiag_iface_t *) iface;
+
+	if (diag_iface->data_isoch_out == NULL) {
+		async_answer_0(callid, ENOTSUP);
+		return;
+	}
+
+	int cycles = DEV_IPC_GET_ARG1(*call);
+	size_t size = DEV_IPC_GET_ARG2(*call);
+	usbdiag_dur_t duration;
+	const int ret = diag_iface->data_isoch_out(fun, cycles, size, &duration);
+
+	if (ret != EOK) {
+		async_answer_0(callid, ret);
+	} else {
+		async_answer_1(callid, EOK, duration);
+	}
+}
+
 /**
  * @}
Index: uspace/lib/drv/include/usbdiag_iface.h
===================================================================
--- uspace/lib/drv/include/usbdiag_iface.h	(revision 5c75456d1c46306b7feaa50f199fd4f6d059a601)
+++ uspace/lib/drv/include/usbdiag_iface.h	(revision 35c37fc2ef57407c4bf38bf0ac3d777777e3ccd1)
@@ -48,4 +48,5 @@
 async_sess_t *usbdiag_connect(devman_handle_t);
 void usbdiag_disconnect(async_sess_t*);
+
 int usbdiag_burst_intr_in(async_exch_t*, int, size_t, usbdiag_dur_t*);
 int usbdiag_burst_intr_out(async_exch_t*, int, size_t, usbdiag_dur_t*);
@@ -54,4 +55,11 @@
 int usbdiag_burst_isoch_in(async_exch_t*, int, size_t, usbdiag_dur_t*);
 int usbdiag_burst_isoch_out(async_exch_t*, int, size_t, usbdiag_dur_t*);
+
+int usbdiag_data_intr_in(async_exch_t*, int, size_t, usbdiag_dur_t*);
+int usbdiag_data_intr_out(async_exch_t*, int, size_t, usbdiag_dur_t*);
+int usbdiag_data_bulk_in(async_exch_t*, int, size_t, usbdiag_dur_t*);
+int usbdiag_data_bulk_out(async_exch_t*, int, size_t, usbdiag_dur_t*);
+int usbdiag_data_isoch_in(async_exch_t*, int, size_t, usbdiag_dur_t*);
+int usbdiag_data_isoch_out(async_exch_t*, int, size_t, usbdiag_dur_t*);
 
 /** USB diagnostic device communication interface. */
@@ -63,4 +71,10 @@
 	int (*burst_isoch_in)(ddf_fun_t*, int, size_t, usbdiag_dur_t*);
 	int (*burst_isoch_out)(ddf_fun_t*, int, size_t, usbdiag_dur_t*);
+	int (*data_intr_in)(ddf_fun_t*, int, size_t, usbdiag_dur_t*);
+	int (*data_intr_out)(ddf_fun_t*, int, size_t, usbdiag_dur_t*);
+	int (*data_bulk_in)(ddf_fun_t*, int, size_t, usbdiag_dur_t*);
+	int (*data_bulk_out)(ddf_fun_t*, int, size_t, usbdiag_dur_t*);
+	int (*data_isoch_in)(ddf_fun_t*, int, size_t, usbdiag_dur_t*);
+	int (*data_isoch_out)(ddf_fun_t*, int, size_t, usbdiag_dur_t*);
 } usbdiag_iface_t;
 
