Index: uspace/drv/bus/usb/xhci/commands.c
===================================================================
--- uspace/drv/bus/usb/xhci/commands.c	(revision 2896ff65b4eed4511ef35ea3d5cc318dff981aa2)
+++ uspace/drv/bus/usb/xhci/commands.c	(revision 913007f6f5b0d4c2b605d1f369bc4dfed067d9fb)
@@ -76,7 +76,6 @@
 }
 
-int xhci_cmd_wait(xhci_cmd_t *cmd)
-{
-	const suseconds_t timeout = 1000000;
+int xhci_cmd_wait(xhci_cmd_t *cmd, suseconds_t timeout)
+{
 	int rv = EOK;
 
Index: uspace/drv/bus/usb/xhci/commands.h
===================================================================
--- uspace/drv/bus/usb/xhci/commands.h	(revision 2896ff65b4eed4511ef35ea3d5cc318dff981aa2)
+++ uspace/drv/bus/usb/xhci/commands.h	(revision 913007f6f5b0d4c2b605d1f369bc4dfed067d9fb)
@@ -42,4 +42,8 @@
 #include "hw_struct/trb.h"
 
+/* Useful timeouts for `xhci_cmd_wait()` */
+#define XHCI_DEFAULT_TIMEOUT 		 1000000
+#define XHCI_BLOCK_INDEFINITELY 	     0
+
 typedef struct xhci_hc xhci_hc_t;
 typedef struct xhci_input_ctx xhci_input_ctx_t;
@@ -67,5 +71,5 @@
 xhci_cmd_t *xhci_cmd_alloc(void);
 void xhci_cmd_init(xhci_cmd_t *);
-int xhci_cmd_wait(xhci_cmd_t *);
+int xhci_cmd_wait(xhci_cmd_t *, suseconds_t);
 void xhci_cmd_fini(xhci_cmd_t *);
 void xhci_cmd_free(xhci_cmd_t *);
Index: uspace/drv/bus/usb/xhci/endpoint.c
===================================================================
--- uspace/drv/bus/usb/xhci/endpoint.c	(revision 2896ff65b4eed4511ef35ea3d5cc318dff981aa2)
+++ uspace/drv/bus/usb/xhci/endpoint.c	(revision 913007f6f5b0d4c2b605d1f369bc4dfed067d9fb)
@@ -87,5 +87,5 @@
  *
  * For control endpoints >0, the IN endpoint index is used.
- * 
+ *
  * The index returned must be usually offset by a number of contexts preceding
  * the endpoint contexts themselves.
@@ -257,5 +257,5 @@
 		cmd.slot_id = dev->slot_id;
 		xhci_send_configure_endpoint_command(dev->hc, &cmd, ictx);
-		if ((err = xhci_cmd_wait(&cmd)) != EOK)
+		if ((err = xhci_cmd_wait(&cmd, XHCI_DEFAULT_TIMEOUT)) != EOK)
 			goto err_cmd;
 
@@ -324,5 +324,5 @@
 	cmd.slot_id = dev->slot_id;
 	xhci_send_configure_endpoint_command(hc, &cmd, ictx);
-	if ((err = xhci_cmd_wait(&cmd)) != EOK)
+	if ((err = xhci_cmd_wait(&cmd, XHCI_DEFAULT_TIMEOUT)) != EOK)
 		goto err_cmd;
 
Index: uspace/drv/bus/usb/xhci/rh.c
===================================================================
--- uspace/drv/bus/usb/xhci/rh.c	(revision 2896ff65b4eed4511ef35ea3d5cc318dff981aa2)
+++ uspace/drv/bus/usb/xhci/rh.c	(revision 913007f6f5b0d4c2b605d1f369bc4dfed067d9fb)
@@ -91,5 +91,5 @@
 
 	xhci_send_enable_slot_command(hc, &cmd);
-	if ((err = xhci_cmd_wait(&cmd)) != EOK)
+	if ((err = xhci_cmd_wait(&cmd, XHCI_DEFAULT_TIMEOUT)) != EOK)
 		return err;
 
@@ -155,5 +155,5 @@
 	cmd.slot_id = slot_id;
 	xhci_send_address_device_command(hc, &cmd, ictx);
-	if ((err = xhci_cmd_wait(&cmd)) != EOK)
+	if ((err = xhci_cmd_wait(&cmd, XHCI_DEFAULT_TIMEOUT)) != EOK)
 		goto err_dctx;
 
@@ -400,5 +400,5 @@
 	xhci_get_port_bandwidth_command(dev->hc, &cmd, ctx, speed);
 
-	int err = xhci_cmd_wait(&cmd);
+	int err = xhci_cmd_wait(&cmd, XHCI_DEFAULT_TIMEOUT);
 	if(err != EOK) {
 		free(ctx);
