Index: uspace/app/tmon/burst_tests.c
===================================================================
--- uspace/app/tmon/burst_tests.c	(revision 96c416a842d1ac574b669328720d7ceb0bbcaa7c)
+++ uspace/app/tmon/burst_tests.c	(revision b10a4342040fff084b84ab3216fbe95777cee4e6)
@@ -43,5 +43,6 @@
 #include "tf.h"
 
-#define NAME "tmon"
+#define NAME   "tmon"
+#define INDENT "      "
 
 typedef struct tmon_burst_test_params {
@@ -103,17 +104,36 @@
 }
 
+static void print_params(const tmon_burst_test_params_t *params)
+{
+	printf(INDENT "Number of cycles: %d\n", params->cycles);
+	printf(INDENT "Data size: %ld B\n", params->size);
+}
+
+static void print_results(const tmon_burst_test_params_t *params, usbdiag_dur_t duration)
+{
+	printf(INDENT "Total duration: %ld ms\n", duration);
+
+	const double dur_per_cycle = (double) duration / (double) params->cycles;
+	printf(INDENT "Duration per cycle: %0.3f ms\n", dur_per_cycle);
+
+	const double speed = (double) params->size / (double) duration;
+	printf(INDENT "Transfer speed: %0.3f B/s\n", speed);
+}
+
 static int run_intr_in(async_exch_t *exch, const tmon_test_params_t *generic_params)
 {
 	const tmon_burst_test_params_t *params = (tmon_burst_test_params_t *) generic_params;
-	printf("Executing interrupt in test.\n"
-	    "      Number of cycles: %d\n"
-	    "      Data size: %ld B\n", params->cycles, params->size);
-
-	int rc = usbdiag_burst_intr_in(exch, params->cycles, params->size);
-	if (rc) {
-		printf(NAME ": Test failed. %s\n", str_error(rc));
-		return 1;
-	}
-
+	puts("Reading data from interrupt endpoint.\n");
+	print_params(params);
+
+	usbdiag_dur_t duration;
+	int rc = usbdiag_burst_intr_in(exch, params->cycles, params->size, &duration);
+	if (rc) {
+		printf(NAME ": Test failed with error: %s\n", str_error(rc));
+		return 1;
+	}
+
+	puts("Test succeeded.\n");
+	print_results(params, duration);
 	return 0;
 }
@@ -122,14 +142,16 @@
 {
 	const tmon_burst_test_params_t *params = (tmon_burst_test_params_t *) generic_params;
-	printf("Executing interrupt out test.\n"
-	    "      Number of cycles: %d\n"
-	    "      Data size: %ld B\n", params->cycles, params->size);
-
-	int rc = usbdiag_burst_intr_out(exch, params->cycles, params->size);
-	if (rc) {
-		printf(NAME ": Test failed. %s\n", str_error(rc));
-		return 1;
-	}
-
+	puts("Writing data to interrupt endpoint.\n");
+	print_params(params);
+
+	usbdiag_dur_t duration;
+	int rc = usbdiag_burst_intr_out(exch, params->cycles, params->size, &duration);
+	if (rc) {
+		printf(NAME ": Test failed with error: %s\n", str_error(rc));
+		return 1;
+	}
+
+	puts("Test succeeded.\n");
+	print_results(params, duration);
 	return 0;
 }
@@ -138,14 +160,16 @@
 {
 	const tmon_burst_test_params_t *params = (tmon_burst_test_params_t *) generic_params;
-	printf("Executing bulk in test.\n"
-	    "      Number of cycles: %d\n"
-	    "      Data size: %ld B\n", params->cycles, params->size);
-
-	int rc = usbdiag_burst_bulk_in(exch, params->cycles, params->size);
-	if (rc) {
-		printf(NAME ": Test failed. %s\n", str_error(rc));
-		return 1;
-	}
-
+	puts("Reading data from bulk endpoint.\n");
+	print_params(params);
+
+	usbdiag_dur_t duration;
+	int rc = usbdiag_burst_bulk_in(exch, params->cycles, params->size, &duration);
+	if (rc) {
+		printf(NAME ": Test failed with error: %s\n", str_error(rc));
+		return 1;
+	}
+
+	puts("Test succeeded.\n");
+	print_results(params, duration);
 	return 0;
 }
@@ -154,14 +178,16 @@
 {
 	const tmon_burst_test_params_t *params = (tmon_burst_test_params_t *) generic_params;
-	printf("Executing bulk out test.\n"
-	    "      Number of cycles: %d\n"
-	    "      Data size: %ld B\n", params->cycles, params->size);
-
-	int rc = usbdiag_burst_bulk_out(exch, params->cycles, params->size);
-	if (rc) {
-		printf(NAME ": Test failed. %s\n", str_error(rc));
-		return 1;
-	}
-
+	puts("Writing data to bulk endpoint.\n");
+	print_params(params);
+
+	usbdiag_dur_t duration;
+	int rc = usbdiag_burst_bulk_out(exch, params->cycles, params->size, &duration);
+	if (rc) {
+		printf(NAME ": Test failed with error: %s\n", str_error(rc));
+		return 1;
+	}
+
+	puts("Test succeeded.\n");
+	print_results(params, duration);
 	return 0;
 }
@@ -170,14 +196,16 @@
 {
 	const tmon_burst_test_params_t *params = (tmon_burst_test_params_t *) generic_params;
-	printf("Executing isochronous in test.\n"
-	    "      Number of cycles: %d\n"
-	    "      Data size: %ld B\n", params->cycles, params->size);
-
-	int rc = usbdiag_burst_isoch_in(exch, params->cycles, params->size);
-	if (rc) {
-		printf(NAME ": Test failed. %s\n", str_error(rc));
-		return 1;
-	}
-
+	puts("Reading data from isochronous endpoint.\n");
+	print_params(params);
+
+	usbdiag_dur_t duration;
+	int rc = usbdiag_burst_isoch_in(exch, params->cycles, params->size, &duration);
+	if (rc) {
+		printf(NAME ": Test failed with error: %s\n", str_error(rc));
+		return 1;
+	}
+
+	puts("Test succeeded.\n");
+	print_results(params, duration);
 	return 0;
 }
@@ -186,14 +214,16 @@
 {
 	const tmon_burst_test_params_t *params = (tmon_burst_test_params_t *) generic_params;
-	printf("Executing isochronous out test.\n"
-	    "      Number of cycles: %d\n"
-	    "      Data size: %ld B\n", params->cycles, params->size);
-
-	int rc = usbdiag_burst_isoch_out(exch, params->cycles, params->size);
-	if (rc) {
-		printf(NAME ": Test failed. %s\n", str_error(rc));
-		return 1;
-	}
-
+	puts("Writing data to isochronous endpoint.\n");
+	print_params(params);
+
+	usbdiag_dur_t duration;
+	int rc = usbdiag_burst_isoch_out(exch, params->cycles, params->size, &duration);
+	if (rc) {
+		printf(NAME ": Test failed with error: %s\n", str_error(rc));
+		return 1;
+	}
+
+	puts("Test succeeded.\n");
+	print_results(params, duration);
 	return 0;
 }
Index: uspace/drv/bus/usb/usbdiag/tests.c
===================================================================
--- uspace/drv/bus/usb/usbdiag/tests.c	(revision 96c416a842d1ac574b669328720d7ceb0bbcaa7c)
+++ uspace/drv/bus/usb/usbdiag/tests.c	(revision b10a4342040fff084b84ab3216fbe95777cee4e6)
@@ -37,4 +37,5 @@
 #include <str_error.h>
 #include <usb/debug.h>
+#include <usbdiag_iface.h>
 #include <time.h>
 #include "device.h"
@@ -43,5 +44,5 @@
 #define NAME "usbdiag"
 
-static int burst_in_test(usb_pipe_t *pipe, int cycles, size_t size, unsigned long *duration)
+static int burst_in_test(usb_pipe_t *pipe, int cycles, size_t size, usbdiag_dur_t *duration)
 {
 	if (!pipe)
@@ -86,5 +87,5 @@
 	struct timeval final_time;
 	gettimeofday(&final_time, NULL);
-	unsigned long in_duration = ((final_time.tv_usec - start_time.tv_usec) / 1000) +
+	usbdiag_dur_t in_duration = ((final_time.tv_usec - start_time.tv_usec) / 1000) +
 	    ((final_time.tv_sec - start_time.tv_sec) * 1000);
 
@@ -98,5 +99,5 @@
 }
 
-static int burst_out_test(usb_pipe_t *pipe, int cycles, size_t size, unsigned long *duration)
+static int burst_out_test(usb_pipe_t *pipe, int cycles, size_t size, usbdiag_dur_t *duration)
 {
 	if (!pipe)
@@ -127,5 +128,5 @@
 	struct timeval final_time;
 	gettimeofday(&final_time, NULL);
-	unsigned long in_duration = ((final_time.tv_usec - start_time.tv_usec) / 1000) +
+	usbdiag_dur_t in_duration = ((final_time.tv_usec - start_time.tv_usec) / 1000) +
 	    ((final_time.tv_sec - start_time.tv_sec) * 1000);
 
@@ -139,5 +140,5 @@
 }
 
-int usbdiag_burst_test_intr_in(ddf_fun_t *fun, int cycles, size_t size)
+int usbdiag_burst_test_intr_in(ddf_fun_t *fun, int cycles, size_t size, usbdiag_dur_t *duration)
 {
 	usbdiag_dev_t *dev = ddf_fun_to_usbdiag_dev(fun);
@@ -145,9 +146,8 @@
 		return EBADMEM;
 
-	// FIXME: report duration
-	return burst_in_test(dev->intr_in, cycles, size, NULL);
+	return burst_in_test(dev->intr_in, cycles, size, duration);
 }
 
-int usbdiag_burst_test_intr_out(ddf_fun_t *fun, int cycles, size_t size)
+int usbdiag_burst_test_intr_out(ddf_fun_t *fun, int cycles, size_t size, usbdiag_dur_t *duration)
 {
 	usbdiag_dev_t *dev = ddf_fun_to_usbdiag_dev(fun);
@@ -155,9 +155,8 @@
 		return EBADMEM;
 
-	// FIXME: report duration
-	return burst_out_test(dev->intr_out, cycles, size, NULL);
+	return burst_out_test(dev->intr_out, cycles, size, duration);
 }
 
-int usbdiag_burst_test_bulk_in(ddf_fun_t *fun, int cycles, size_t size)
+int usbdiag_burst_test_bulk_in(ddf_fun_t *fun, int cycles, size_t size, usbdiag_dur_t *duration)
 {
 	usbdiag_dev_t *dev = ddf_fun_to_usbdiag_dev(fun);
@@ -165,9 +164,8 @@
 		return EBADMEM;
 
-	// FIXME: report duration
-	return burst_in_test(dev->bulk_in, cycles, size, NULL);
+	return burst_in_test(dev->bulk_in, cycles, size, duration);
 }
 
-int usbdiag_burst_test_bulk_out(ddf_fun_t *fun, int cycles, size_t size)
+int usbdiag_burst_test_bulk_out(ddf_fun_t *fun, int cycles, size_t size, usbdiag_dur_t *duration)
 {
 	usbdiag_dev_t *dev = ddf_fun_to_usbdiag_dev(fun);
@@ -175,9 +173,8 @@
 		return EBADMEM;
 
-	// FIXME: report duration
-	return burst_out_test(dev->bulk_out, cycles, size, NULL);
+	return burst_out_test(dev->bulk_out, cycles, size, duration);
 }
 
-int usbdiag_burst_test_isoch_in(ddf_fun_t *fun, int cycles, size_t size)
+int usbdiag_burst_test_isoch_in(ddf_fun_t *fun, int cycles, size_t size, usbdiag_dur_t *duration)
 {
 	usbdiag_dev_t *dev = ddf_fun_to_usbdiag_dev(fun);
@@ -185,9 +182,8 @@
 		return EBADMEM;
 
-	// FIXME: report duration
-	return burst_in_test(dev->isoch_in, cycles, size, NULL);
+	return burst_in_test(dev->isoch_in, cycles, size, duration);
 }
 
-int usbdiag_burst_test_isoch_out(ddf_fun_t *fun, int cycles, size_t size)
+int usbdiag_burst_test_isoch_out(ddf_fun_t *fun, int cycles, size_t size, usbdiag_dur_t *duration)
 {
 	usbdiag_dev_t *dev = ddf_fun_to_usbdiag_dev(fun);
@@ -195,6 +191,5 @@
 		return EBADMEM;
 
-	// FIXME: report duration
-	return burst_out_test(dev->isoch_out, cycles, size, NULL);
+	return burst_out_test(dev->isoch_out, cycles, size, duration);
 }
 
Index: uspace/drv/bus/usb/usbdiag/tests.h
===================================================================
--- uspace/drv/bus/usb/usbdiag/tests.h	(revision 96c416a842d1ac574b669328720d7ceb0bbcaa7c)
+++ uspace/drv/bus/usb/usbdiag/tests.h	(revision b10a4342040fff084b84ab3216fbe95777cee4e6)
@@ -39,10 +39,10 @@
 #include <ddf/driver.h>
 
-int usbdiag_burst_test_intr_in(ddf_fun_t *, int, size_t);
-int usbdiag_burst_test_intr_out(ddf_fun_t *, int, size_t);
-int usbdiag_burst_test_bulk_in(ddf_fun_t *, int, size_t);
-int usbdiag_burst_test_bulk_out(ddf_fun_t *, int, size_t);
-int usbdiag_burst_test_isoch_in(ddf_fun_t *, int, size_t);
-int usbdiag_burst_test_isoch_out(ddf_fun_t *, int, size_t);
+int usbdiag_burst_test_intr_in(ddf_fun_t *, int, size_t, usbdiag_dur_t *);
+int usbdiag_burst_test_intr_out(ddf_fun_t *, int, size_t, usbdiag_dur_t *);
+int usbdiag_burst_test_bulk_in(ddf_fun_t *, int, size_t, usbdiag_dur_t *);
+int usbdiag_burst_test_bulk_out(ddf_fun_t *, int, size_t, usbdiag_dur_t *);
+int usbdiag_burst_test_isoch_in(ddf_fun_t *, int, size_t, usbdiag_dur_t *);
+int usbdiag_burst_test_isoch_out(ddf_fun_t *, int, size_t, usbdiag_dur_t *);
 
 #endif /* USBDIAG_TESTS_H_ */
Index: uspace/lib/drv/generic/remote_usbdiag.c
===================================================================
--- uspace/lib/drv/generic/remote_usbdiag.c	(revision 96c416a842d1ac574b669328720d7ceb0bbcaa7c)
+++ uspace/lib/drv/generic/remote_usbdiag.c	(revision b10a4342040fff084b84ab3216fbe95777cee4e6)
@@ -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 96c416a842d1ac574b669328720d7ceb0bbcaa7c)
+++ uspace/lib/drv/include/usbdiag_iface.h	(revision b10a4342040fff084b84ab3216fbe95777cee4e6)
@@ -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;
 
