Index: uspace/drv/bus/usb/xhci/commands.c
===================================================================
--- uspace/drv/bus/usb/xhci/commands.c	(revision 2fa43d172563e5beed493f94b92ba8e3b3f5419a)
+++ uspace/drv/bus/usb/xhci/commands.c	(revision 1b78a7c1bf902be5cc5bb54fe9cc3808b6144671)
@@ -43,4 +43,16 @@
 #include "hw_struct/context.h"
 #include "hw_struct/trb.h"
+
+#define TRB_SET_TCS(trb, tcs)   (trb).control |= host2xhci(32, ((tcs &0x1) << 9))
+#define TRB_SET_TYPE(trb, type) (trb).control |= host2xhci(32, (type) << 10)
+#define TRB_SET_EP(trb, ep)     (trb).control |= host2xhci(32, ((ep) & 0x5) << 16)
+#define TRB_SET_SUSP(trb, susp) (trb).control |= host2xhci(32, ((susp) & 0x1) << 23)
+#define TRB_SET_SLOT(trb, slot) (trb).control |= host2xhci(32, (slot) << 24)
+
+#define TRB_SET_ICTX(trb, phys) (trb).parameter |= host2xhci(32, phys_addr & (~0xF))
+
+#define TRB_GET_CODE(trb) XHCI_DWORD_EXTRACT((trb).status, 31, 24)
+#define TRB_GET_SLOT(trb) XHCI_DWORD_EXTRACT((trb).control, 31, 24)
+#define TRB_GET_PHYS(trb) (XHCI_QWORD_EXTRACT((trb).parameter, 63, 4) << 4)
 
 int xhci_init_commands(xhci_hc_t *hc)
@@ -254,5 +266,5 @@
 	memset(&trb, 0, sizeof(trb));
 
-	trb.control = host2xhci(32, XHCI_TRB_TYPE_NO_OP_CMD << 10);
+	TRB_SET_TYPE(trb, XHCI_TRB_TYPE_NO_OP_CMD);
 
 	cmd = add_cmd(hc, cmd);
@@ -268,5 +280,5 @@
 	memset(&trb, 0, sizeof(trb));
 
-	trb.control = host2xhci(32, XHCI_TRB_TYPE_ENABLE_SLOT_CMD << 10);
+	TRB_SET_TYPE(trb, XHCI_TRB_TYPE_ENABLE_SLOT_CMD);
 	trb.control |= host2xhci(32, XHCI_REG_RD(hc->xecp, XHCI_EC_SP_SLOT_TYPE) << 16);
 
@@ -284,6 +296,6 @@
 	memset(&trb, 0, sizeof(trb));
 
-	trb.control = host2xhci(32, XHCI_TRB_TYPE_DISABLE_SLOT_CMD << 10);
-	trb.control |= host2xhci(32, cmd->slot_id << 24);
+	TRB_SET_TYPE(trb, XHCI_TRB_TYPE_DISABLE_SLOT_CMD);
+	TRB_SET_SLOT(trb, cmd->slot_id);
 
 	add_cmd(hc, cmd);
@@ -308,5 +320,5 @@
 
 	uint64_t phys_addr = (uint64_t) addr_to_phys(cmd->ictx);
-	trb.parameter = host2xhci(32, phys_addr & (~0xF));
+	TRB_SET_ICTX(trb, phys_addr);
 
 	/**
@@ -317,6 +329,6 @@
 	 *       that require their device descriptor to be read before such request.
 	 */
-	trb.control = host2xhci(32, XHCI_TRB_TYPE_ADDRESS_DEVICE_CMD << 10);
-	trb.control |= host2xhci(32, cmd->slot_id << 24);
+	TRB_SET_TYPE(trb, XHCI_TRB_TYPE_ADDRESS_DEVICE_CMD);
+	TRB_SET_SLOT(trb, cmd->slot_id);
 
 	cmd = add_cmd(hc, cmd);
@@ -335,8 +347,8 @@
 
 	uint64_t phys_addr = (uint64_t) addr_to_phys(cmd->ictx);
-	trb.parameter = host2xhci(32, phys_addr & (~0xF));
-
-	trb.control = host2xhci(32, XHCI_TRB_TYPE_CONFIGURE_ENDPOINT_CMD << 10);
-	trb.control |= host2xhci(32, cmd->slot_id << 24);
+	TRB_SET_ICTX(trb, phys_addr);
+
+	TRB_SET_TYPE(trb, XHCI_TRB_TYPE_CONFIGURE_ENDPOINT_CMD);
+	TRB_SET_SLOT(trb, cmd->slot_id);
 
 	cmd = add_cmd(hc, cmd);
@@ -361,8 +373,8 @@
 
 	uint64_t phys_addr = (uint64_t) addr_to_phys(cmd->ictx);
-	trb.parameter = host2xhci(32, phys_addr & (~0xF));
-
-	trb.control = host2xhci(32, XHCI_TRB_TYPE_EVALUATE_CONTEXT_CMD << 10);
-	trb.control |= host2xhci(32, cmd->slot_id << 24);
+	TRB_SET_ICTX(trb, phys_addr);
+
+	TRB_SET_TYPE(trb, XHCI_TRB_TYPE_EVALUATE_CONTEXT_CMD);
+	TRB_SET_SLOT(trb, cmd->slot_id);
 
 	cmd = add_cmd(hc, cmd);
@@ -383,8 +395,8 @@
 	memset(&trb, 0, sizeof(trb));
 
-	trb.control = host2xhci(32, XHCI_TRB_TYPE_RESET_ENDPOINT_CMD << 10);
-	trb.control |= host2xhci(32, (tcs & 0x1) << 9);
-	trb.control |= host2xhci(32, (ep_id & 0x5) << 16);
-	trb.control |= host2xhci(32, cmd->slot_id << 24);
+	TRB_SET_TYPE(trb, XHCI_TRB_TYPE_RESET_ENDPOINT_CMD);
+	TRB_SET_TCS(trb, tcs);
+	TRB_SET_EP(trb, ep_id);
+	TRB_SET_SLOT(trb, cmd->slot_id);
 
 	return enqueue_trb(hc, &trb, 0, 0);
@@ -399,8 +411,8 @@
 	memset(&trb, 0, sizeof(trb));
 
-	trb.control = host2xhci(32, XHCI_TRB_TYPE_STOP_ENDPOINT_CMD << 10);
-	trb.control |= host2xhci(32, (ep_id & 0x5) << 16);
-	trb.control |= host2xhci(32, (susp & 0x1) << 23);
-	trb.control |= host2xhci(32, cmd->slot_id << 24);
+	TRB_SET_TYPE(trb, XHCI_TRB_TYPE_STOP_ENDPOINT_CMD);
+	TRB_SET_EP(trb, ep_id);
+	TRB_SET_SUSP(trb, susp);
+	TRB_SET_SLOT(trb, cmd->slot_id);
 
 	cmd = add_cmd(hc, cmd);
@@ -417,6 +429,6 @@
 	memset(&trb, 0, sizeof(trb));
 
-	trb.control = host2xhci(32, XHCI_TRB_TYPE_RESET_DEVICE_CMD << 10);
-	trb.control |= host2xhci(32, cmd->slot_id << 24);
+	TRB_SET_TYPE(trb, XHCI_TRB_TYPE_RESET_DEVICE_CMD);
+	TRB_SET_SLOT(trb, cmd->slot_id);
 
 	return enqueue_trb(hc, &trb, 0, 0);
@@ -432,11 +444,10 @@
 
 	int code;
-	uint32_t slot_id;
 	uint64_t phys;
 	xhci_cmd_t *command;
 	xhci_trb_t *command_trb;
 
-	code = XHCI_DWORD_EXTRACT(trb->status, 31, 24);
-	phys = XHCI_QWORD_EXTRACT(trb->parameter, 63, 4) << 4;
+	code = TRB_GET_CODE(*trb);
+	phys = TRB_GET_PHYS(*trb);;
 	command = get_command(hc, phys);
 	if (command == NULL) {
@@ -451,9 +462,6 @@
 
 	command_trb = command->trb;
-
 	command->status = code;
-
-	slot_id = XHCI_DWORD_EXTRACT(trb->control, 31, 24);
-	command->slot_id = slot_id;
+	command->slot_id = TRB_GET_SLOT(*trb);
 
 	usb_log_debug2("Completed command trb: %s", xhci_trb_str_type(TRB_TYPE(*command_trb)));
