Index: uspace/lib/drv/generic/remote_usbdiag.c
===================================================================
--- uspace/lib/drv/generic/remote_usbdiag.c	(revision b7b7898ebbb6331485b857c698ffc8e20b40797f)
+++ uspace/lib/drv/generic/remote_usbdiag.c	(revision 95a62dc88d8acc7ee26b24c437486e7b8c36e3fc)
@@ -62,50 +62,86 @@
 }
 
-int usbdiag_burst_intr_in(async_exch_t *exch, int cycles, size_t size)
-{
-	if (!exch)
-		return EBADMEM;
-
-	return async_req_3_0(exch, DEV_IFACE_ID(USBDIAG_DEV_IFACE), IPC_M_USBDIAG_BURST_INTR_IN, cycles, size);
-}
-
-int usbdiag_burst_intr_out(async_exch_t *exch, int cycles, size_t size)
-{
-	if (!exch)
-		return EBADMEM;
-
-	return async_req_3_0(exch, DEV_IFACE_ID(USBDIAG_DEV_IFACE), IPC_M_USBDIAG_BURST_INTR_OUT, cycles, size);
-}
-
-int usbdiag_burst_bulk_in(async_exch_t *exch, int cycles, size_t size)
-{
-	if (!exch)
-		return EBADMEM;
-
-	return async_req_3_0(exch, DEV_IFACE_ID(USBDIAG_DEV_IFACE), IPC_M_USBDIAG_BURST_BULK_IN, cycles, size);
-}
-
-int usbdiag_burst_bulk_out(async_exch_t *exch, int cycles, size_t size)
-{
-	if (!exch)
-		return EBADMEM;
-
-	return async_req_3_0(exch, DEV_IFACE_ID(USBDIAG_DEV_IFACE), IPC_M_USBDIAG_BURST_BULK_OUT, cycles, size);
-}
-
-int usbdiag_burst_isoch_in(async_exch_t *exch, int cycles, size_t size)
-{
-	if (!exch)
-		return EBADMEM;
-
-	return async_req_3_0(exch, DEV_IFACE_ID(USBDIAG_DEV_IFACE), IPC_M_USBDIAG_BURST_ISOCH_IN, cycles, size);
-}
-
-int usbdiag_burst_isoch_out(async_exch_t *exch, int cycles, size_t size)
-{
-	if (!exch)
-		return EBADMEM;
-
-	return async_req_3_0(exch, DEV_IFACE_ID(USBDIAG_DEV_IFACE), IPC_M_USBDIAG_BURST_ISOCH_OUT, cycles, size);
+int usbdiag_burst_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_BURST_INTR_IN, cycles, size, &duration_);
+
+	if (rc == EOK && duration)
+		*duration = duration_;
+
+	return rc;
+}
+
+int usbdiag_burst_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_BURST_INTR_OUT, cycles, size, &duration_);
+
+	if (rc == EOK && duration)
+		*duration = duration_;
+
+	return rc;
+}
+
+int usbdiag_burst_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_BURST_BULK_IN, cycles, size, &duration_);
+
+	if (rc == EOK && duration)
+		*duration = duration_;
+
+	return rc;
+}
+
+int usbdiag_burst_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_BURST_BULK_OUT, cycles, size, &duration_);
+
+	if (rc == EOK && duration)
+		*duration = duration_;
+
+	return rc;
+}
+
+int usbdiag_burst_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_BURST_ISOCH_IN, cycles, size, &duration_);
+
+	if (rc == EOK && duration)
+		*duration = duration_;
+
+	return rc;
+}
+
+int usbdiag_burst_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_BURST_ISOCH_OUT, cycles, size, &duration_);
+
+	if (rc == EOK && duration)
+		*duration = duration_;
+
+	return rc;
 }
 
@@ -144,6 +180,12 @@
 	int cycles = DEV_IPC_GET_ARG1(*call);
 	size_t size = DEV_IPC_GET_ARG2(*call);
-	const int ret = diag_iface->burst_intr_in(fun, cycles, size);
-	async_answer_0(callid, ret);
+	usbdiag_dur_t duration;
+	const int ret = diag_iface->burst_intr_in(fun, cycles, size, &duration);
+
+	if (ret != EOK) {
+		async_answer_0(callid, ret);
+	} else {
+		async_answer_1(callid, EOK, duration);
+	}
 }
 
@@ -159,6 +201,12 @@
 	int cycles = DEV_IPC_GET_ARG1(*call);
 	size_t size = DEV_IPC_GET_ARG2(*call);
-	const int ret = diag_iface->burst_intr_out(fun, cycles, size);
-	async_answer_0(callid, ret);
+	usbdiag_dur_t duration;
+	const int ret = diag_iface->burst_intr_out(fun, cycles, size, &duration);
+
+	if (ret != EOK) {
+		async_answer_0(callid, ret);
+	} else {
+		async_answer_1(callid, EOK, duration);
+	}
 }
 
@@ -174,6 +222,12 @@
 	int cycles = DEV_IPC_GET_ARG1(*call);
 	size_t size = DEV_IPC_GET_ARG2(*call);
-	const int ret = diag_iface->burst_bulk_in(fun, cycles, size);
-	async_answer_0(callid, ret);
+	usbdiag_dur_t duration;
+	const int ret = diag_iface->burst_bulk_in(fun, cycles, size, &duration);
+
+	if (ret != EOK) {
+		async_answer_0(callid, ret);
+	} else {
+		async_answer_1(callid, EOK, duration);
+	}
 }
 
@@ -189,6 +243,12 @@
 	int cycles = DEV_IPC_GET_ARG1(*call);
 	size_t size = DEV_IPC_GET_ARG2(*call);
-	const int ret = diag_iface->burst_bulk_out(fun, cycles, size);
-	async_answer_0(callid, ret);
+	usbdiag_dur_t duration;
+	const int ret = diag_iface->burst_bulk_out(fun, cycles, size, &duration);
+
+	if (ret != EOK) {
+		async_answer_0(callid, ret);
+	} else {
+		async_answer_1(callid, EOK, duration);
+	}
 }
 
@@ -204,6 +264,12 @@
 	int cycles = DEV_IPC_GET_ARG1(*call);
 	size_t size = DEV_IPC_GET_ARG2(*call);
-	const int ret = diag_iface->burst_isoch_in(fun, cycles, size);
-	async_answer_0(callid, ret);
+	usbdiag_dur_t duration;
+	const int ret = diag_iface->burst_isoch_in(fun, cycles, size, &duration);
+
+	if (ret != EOK) {
+		async_answer_0(callid, ret);
+	} else {
+		async_answer_1(callid, EOK, duration);
+	}
 }
 
@@ -219,6 +285,12 @@
 	int cycles = DEV_IPC_GET_ARG1(*call);
 	size_t size = DEV_IPC_GET_ARG2(*call);
-	const int ret = diag_iface->burst_isoch_out(fun, cycles, size);
-	async_answer_0(callid, ret);
+	usbdiag_dur_t duration;
+	const int ret = diag_iface->burst_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 b7b7898ebbb6331485b857c698ffc8e20b40797f)
+++ uspace/lib/drv/include/usbdiag_iface.h	(revision 95a62dc88d8acc7ee26b24c437486e7b8c36e3fc)
@@ -43,21 +43,24 @@
 #define USBDIAG_CATEGORY "usbdiag"
 
+/** Milliseconds */
+typedef unsigned long usbdiag_dur_t;
+
 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);
-int usbdiag_burst_intr_out(async_exch_t*, int, size_t);
-int usbdiag_burst_bulk_in(async_exch_t*, int, size_t);
-int usbdiag_burst_bulk_out(async_exch_t*, int, size_t);
-int usbdiag_burst_isoch_in(async_exch_t*, int, size_t);
-int usbdiag_burst_isoch_out(async_exch_t*, int, size_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*);
+int usbdiag_burst_bulk_in(async_exch_t*, int, size_t, usbdiag_dur_t*);
+int usbdiag_burst_bulk_out(async_exch_t*, int, size_t, usbdiag_dur_t*);
+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*);
 
 /** USB diagnostic device communication interface. */
 typedef struct {
-	int (*burst_intr_in)(ddf_fun_t*, int, size_t);
-	int (*burst_intr_out)(ddf_fun_t*, int, size_t);
-	int (*burst_bulk_in)(ddf_fun_t*, int, size_t);
-	int (*burst_bulk_out)(ddf_fun_t*, int, size_t);
-	int (*burst_isoch_in)(ddf_fun_t*, int, size_t);
-	int (*burst_isoch_out)(ddf_fun_t*, int, size_t);
+	int (*burst_intr_in)(ddf_fun_t*, int, size_t, usbdiag_dur_t*);
+	int (*burst_intr_out)(ddf_fun_t*, int, size_t, usbdiag_dur_t*);
+	int (*burst_bulk_in)(ddf_fun_t*, int, size_t, usbdiag_dur_t*);
+	int (*burst_bulk_out)(ddf_fun_t*, int, size_t, usbdiag_dur_t*);
+	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*);
 } usbdiag_iface_t;
 
