Index: uspace/drv/bus/usb/ohci/hc.c
===================================================================
--- uspace/drv/bus/usb/ohci/hc.c	(revision 70922c299ca7e34c75aac043336fd7df8dc71581)
+++ uspace/drv/bus/usb/ohci/hc.c	(revision ffcc577689cf1efcd37b7ba0e5990e77cff238c0)
@@ -50,5 +50,5 @@
 {
 	{ .cmd = CMD_MEM_READ_32, .dstarg = 1, .addr = NULL /*filled later*/ },
-	{ .cmd = CMD_BTEST, .srcarg = 1, .dstarg = 2, .value = OHCI_USED_INTERRUPTS },
+	{ .cmd = CMD_BTEST, .srcarg = 1, .dstarg = 2, .value = 0 /*filled later*/},
 	{ .cmd = CMD_PREDICATE, .srcarg = 2, .value = 2 },
 	{ .cmd = CMD_MEM_WRITE_A_32, .srcarg = 1, .addr = NULL /*filled later*/ },
@@ -112,4 +112,5 @@
 	void *address = (void*)&registers->interrupt_status;
 	cmds[0].addr = address;
+	cmds[1].value = OHCI_USED_INTERRUPTS;
 	cmds[3].addr = address;
 	return EOK;
@@ -308,4 +309,5 @@
 	/* Check for root hub communication */
 	if (batch->ep->address == instance->rh.address) {
+		usb_log_debug("OHCI root hub request.\n");
 		rh_request(&instance->rh, batch);
 		return EOK;
@@ -511,7 +513,7 @@
 
 	/* Enable queues */
-	instance->registers->control |= (C_PLE | C_IE | C_CLE | C_BLE);
-	usb_log_debug2("All queues enabled(%x).\n",
-	    instance->registers->control);
+//	instance->registers->control |= (C_PLE | C_IE | C_CLE | C_BLE);
+//	usb_log_debug2("All queues enabled(%x).\n",
+//	    instance->registers->control);
 
 	/* Enable interrupts */
@@ -522,9 +524,9 @@
 
 	/* Set periodic start to 90% */
-	uint32_t frame_length = ((fm_interval >> FMI_FI_SHIFT) & FMI_FI_MASK);
-	instance->registers->periodic_start = (frame_length / 10) * 9;
+	const uint32_t frame_length = FMI_FL_GET(fm_interval);
+	PS_SET(instance->registers->periodic_start, (frame_length / 10) * 9);
 	usb_log_debug2("All periodic start set to: %x(%u - 90%% of %d).\n",
-	    instance->registers->periodic_start,
-	    instance->registers->periodic_start, frame_length);
+	    PS_GET(instance->registers->periodic_start),
+	    PS_GET(instance->registers->periodic_start), frame_length);
 
 	C_HCFS_SET(instance->registers->control, C_HCFS_OPERATIONAL);
Index: uspace/drv/bus/usb/ohci/main.c
===================================================================
--- uspace/drv/bus/usb/ohci/main.c	(revision 70922c299ca7e34c75aac043336fd7df8dc71581)
+++ uspace/drv/bus/usb/ohci/main.c	(revision ffcc577689cf1efcd37b7ba0e5990e77cff238c0)
@@ -83,5 +83,6 @@
 int main(int argc, char *argv[])
 {
-	usb_log_enable(USB_LOG_LEVEL_DEFAULT, NAME);
+	sleep(5);
+	usb_log_enable(USB_LOG_LEVEL_DEBUG2, NAME);
 	return ddf_driver_main(&ohci_driver);
 }
Index: uspace/drv/bus/usb/ohci/ohci_regs.h
===================================================================
--- uspace/drv/bus/usb/ohci/ohci_regs.h	(revision 70922c299ca7e34c75aac043336fd7df8dc71581)
+++ uspace/drv/bus/usb/ohci/ohci_regs.h	(revision ffcc577689cf1efcd37b7ba0e5990e77cff238c0)
@@ -35,4 +35,10 @@
 #define DRV_OHCI_OHCI_REGS_H
 #include <sys/types.h>
+#include <byteorder.h>
+
+
+/* assume OHCI regs are le */
+#define host2ohci_reg(value) host2uint32_t_le(value)
+#define ohci_reg2host(value) uint32_t_le2host(value)
 
 #define LEGACY_REGS_OFFSET 0x100
@@ -41,48 +47,49 @@
 typedef struct ohci_regs {
 	const ioport32_t revision;
-#define R_REVISION_MASK (0x3f)
-#define R_REVISION_SHIFT (0)
-#define R_LEGACY_FLAG   (0x80)
+#define R_REVISION_(reg) (ohci_reg2host(reg) & 0x3f)
+#define R_LEGACY_FLAG   host2ohci_reg(0x80)
 
 	ioport32_t control;
-#define C_CBSR_MASK (0x3) /* Control-bulk service ratio */
+/* Control-bulk service ratio */
 #define C_CBSR_1_1  (0x0)
 #define C_CBSR_1_2  (0x1)
 #define C_CBSR_1_3  (0x2)
 #define C_CBSR_1_4  (0x3)
-#define C_CBSR_SHIFT (0)
-
-#define C_PLE (1 << 2)   /* Periodic list enable */
-#define C_IE  (1 << 3)   /* Isochronous enable */
-#define C_CLE (1 << 4)   /* Control list enable */
-#define C_BLE (1 << 5)   /* Bulk list enable */
-
-#define C_HCFS_MASK        (0x3) /* Host controller functional state */
+#define C_CBSR_GET(reg) (ohci_reg2host(reg) & 0x3)
+#define C_CBSR_SET(reg, value) \
+do { \
+    reg = (reg & host2ohci_reg(~0x3) | host2ohci_reg(value & 0x3)) \
+} while (0)
+
+#define C_PLE host2ohci_reg(1 << 2)   /* Periodic list enable */
+#define C_IE  host2ohci_reg(1 << 3)   /* Isochronous enable */
+#define C_CLE host2ohci_reg(1 << 4)   /* Control list enable */
+#define C_BLE host2ohci_reg(1 << 5)   /* Bulk list enable */
+
+/* Host controller functional state */
 #define C_HCFS_RESET       (0x0)
 #define C_HCFS_RESUME      (0x1)
 #define C_HCFS_OPERATIONAL (0x2)
 #define C_HCFS_SUSPEND     (0x3)
-#define C_HCFS_SHIFT       (6)
-
-#define C_HCFS_GET(reg) \
-	((reg >> C_HCFS_SHIFT) & C_HCFS_MASK)
-#define C_HCFS_SET(reg, hcfs_state) \
+#define C_HCFS_GET(reg) ((ohci_reg2host(reg) >> 6) & 0x3)
+#define C_HCFS_SET(reg, value) \
 do { \
-	reg = (reg & ~(C_HCFS_MASK << C_HCFS_SHIFT)) \
-	    | ((hcfs_state & C_HCFS_MASK) << C_HCFS_SHIFT); \
+    reg = (reg & host2ohci_reg(~(0x3 << 6))) \
+        | host2ohci_reg((value & 0x3) << 6); \
 } while (0)
 
-
-#define C_IR  (1 << 8)   /* Interrupt routing, make sure it's 0 */
-#define C_RWC (1 << 9)   /* Remote wakeup connected, host specific */
-#define C_RWE (1 << 10)  /* Remote wakeup enable */
+#define C_IR  host2ohci_reg(1 << 8)  /* Interrupt routing, make sure it's 0 */
+#define C_RWC host2ohci_reg(1 << 9)  /* Remote wakeup connected, host specific */
+#define C_RWE host2ohci_reg(1 << 10)  /* Remote wakeup enable */
 
 	ioport32_t command_status;
-#define CS_HCR (1 << 0)   /* Host controller reset */
-#define CS_CLF (1 << 1)   /* Control list filled */
-#define CS_BLF (1 << 2)   /* Bulk list filled */
-#define CS_OCR (1 << 3)   /* Ownership change request */
+#define CS_HCR host2ohci_reg(1 << 0)   /* Host controller reset */
+#define CS_CLF host2ohci_reg(1 << 1)   /* Control list filled */
+#define CS_BLF host2ohci_reg(1 << 2)   /* Bulk list filled */
+#define CS_OCR host2ohci_reg(1 << 3)   /* Ownership change request */
+#if 0
 #define CS_SOC_MASK (0x3) /* Scheduling overrun count */
 #define CS_SOC_SHIFT (16)
+#endif
 
 	/** Interupt enable/disable/status,
@@ -93,13 +100,13 @@
 	ioport32_t interrupt_enable;
 	ioport32_t interrupt_disable;
-#define I_SO   (1 << 0)   /* Scheduling overrun */
-#define I_WDH  (1 << 1)   /* Done head write-back */
-#define I_SF   (1 << 2)   /* Start of frame */
-#define I_RD   (1 << 3)   /* Resume detect */
-#define I_UE   (1 << 4)   /* Unrecoverable error */
-#define I_FNO  (1 << 5)   /* Frame number overflow */
-#define I_RHSC (1 << 6)   /* Root hub status change */
-#define I_OC   (1 << 30)  /* Ownership change */
-#define I_MI   (1 << 31)  /* Master interrupt (all/any interrupts) */
+#define I_SO   host2ohci_reg(1 << 0)   /* Scheduling overrun */
+#define I_WDH  host2ohci_reg(1 << 1)   /* Done head write-back */
+#define I_SF   host2ohci_reg(1 << 2)   /* Start of frame */
+#define I_RD   host2ohci_reg(1 << 3)   /* Resume detect */
+#define I_UE   host2ohci_reg(1 << 4)   /* Unrecoverable error */
+#define I_FNO  host2ohci_reg(1 << 5)   /* Frame number overflow */
+#define I_RHSC host2ohci_reg(1 << 6)   /* Root hub status change */
+#define I_OC   host2ohci_reg(1 << 30)  /* Ownership change */
+#define I_MI   host2ohci_reg(1 << 31)  /* Master interrupt (any/all) */
 
 	/** HCCA pointer (see hw_struct hcca.h) */
@@ -127,4 +134,6 @@
 	/** Frame time and max packet size for all transfers */
 	ioport32_t fm_interval;
+#define FMI_FL_GET(reg) (ohci_reg2host(reg) & 0x3fff)
+#if 0	
 #define FMI_FI_MASK (0x3fff) /* Frame interval in bit times (should be 11999)*/
 #define FMI_FI_SHIFT (0)
@@ -132,100 +141,125 @@
 #define FMI_FSMPS_SHIFT (16)
 #define FMI_TOGGLE_FLAG (1 << 31)
+#endif
 
 	/** Bit times remaining in current frame */
 	const ioport32_t fm_remaining;
+#define FMR_R_GET(reg) (ohci_reg2host(reg) & 0x3fff)
+#if 0	
 #define FMR_FR_MASK FMI_FI_MASK
 #define FMR_FR_SHIFT FMI_FI_SHIFT
 #define FMR_TOGGLE_FLAG FMI_TOGGLE_FLAG
-
+#endif
 	/** Frame number */
 	const ioport32_t fm_number;
+#if 0
 #define FMN_NUMBER_MASK (0xffff)
-
+#endif
 	/** Remaining bit time in frame to start periodic transfers */
 	ioport32_t periodic_start;
-#define PS_PS_MASK (0x3fff) /* bit time when periodic get priority (0x3e67) */
+#define PS_GET(reg) (ohci_reg2host(reg) & 0x3fff)
+#define PS_SET(reg, value) \
+do { \
+	reg = (reg & host2ohci_reg(~0x3fff)) | host2ohci_reg(value & 0x3fff); \
+} while (0)
 
 	/** Threshold for starting LS transaction */
 	ioport32_t ls_threshold;
-#define LST_LST_MASK (0x7fff)
+//#define LST_LST_MASK (0x7fff)
 
 	/** The first root hub control register */
 	ioport32_t rh_desc_a;
-#define RHDA_NDS_MASK (0xff) /* Number of downstream ports, max 15 */
-#define RHDA_NDS_SHIFT (0)
-#define RHDA_PSM_FLAG  (1 << 8)  /* Power switching mode: 0-global, 1-per port*/
-#define RHDA_NPS_FLAG  (1 << 9)  /* No power switch: 1-power on, 0-use PSM*/
-#define RHDA_DT_FLAG   (1 << 10) /* 1-Compound device, must be 0 */
-#define RHDA_OCPM_FLAG (1 << 11) /* Over-current mode: 0-global, 1-per port */
-#define RHDA_NOCP_FLAG (1 << 12) /* OC control: 0-use OCPM, 1-OC off */
-#define RHDA_POTPGT_MASK (0xff)  /* Power on to power good time */
-#define RHDA_POTPGT_SHIFT (24)
+/** Number of downstream ports, max 15 */
+#define RHDA_NDS(reg) (ohci_reg2host(reg) & 0xff)
+/** Power switching mode: 0-global, 1-per port*/
+#define RHDA_PSM_FLAG  host2ohci_reg(1 << 8)
+/** No power switch: 1-power on, 0-use PSM*/
+#define RHDA_NPS_FLAG  host2ohci_reg(1 << 9)
+/** 1-Compound device, must be 0 */
+#define RHDA_DT_FLAG   host2ohci_reg(1 << 10)
+/** Over-current mode: 0-global, 1-per port */
+#define RHDA_OCPM_FLAG host2ohci_reg(1 << 11)
+/** OC control: 0-use OCPM, 1-OC off */
+#define RHDA_NOCP_FLAG host2ohci_reg(1 << 12)
+/** Power on to power good time */
+#define RHDA_POTPGT(reg) (ohci_reg2host(reg) >> 24)
 
 	/** The other root hub control register */
 	ioport32_t rh_desc_b;
-#define RHDB_DR_MASK (0xffff) /* Device removable mask */
-#define RHDB_DR_SHIFT (0)
-#define RHDB_PCC_MASK (0xffff) /* Power control mask */
-#define RHDB_PCC_SHIFT (16)
-
+/** Device removable mask */
+#define RHDB_DR_READ(reg) (ohci_reg2host(reg) & 0xffff)
+#define RHDB_DR_WRITE(val) host2ohci_reg(val & 0xffff)
+/** Power control mask */
+#define RHDB_PCC_READ(reg) (ohci_reg2host(reg) >> 16)
+#define RHDB_PCC_WRITE(val) host2ohci_reg(val << 16)
 /* Port device removable status */
-#define RHDB_DR_FLAG(port) (((1 << port) & RHDB_DR_MASK) << RHDB_DR_SHIFT)
+#define RHDB_DR_FLAG(port) \
+    host2ohci_reg(((1 << port) & RHDB_DR_MASK) << RHDB_DR_SHIFT)
 /* Port power control status: 1-per port power control, 0-global power switch */
-#define RHDB_PPC_FLAG(port) (((1 << port) & RHDB_DR_MASK) << RHDB_DR_SHIFT)
+#define RHDB_PPC_FLAG(port) \
+    host2ohci_reg(((1 << port) & RHDB_DR_MASK) << RHDB_DR_SHIFT)
 
 	/** Root hub status register */
 	ioport32_t rh_status;
-#define RHS_LPS_FLAG  (1 <<  0)/* read: 0,
-                                * write: 0-no effect,
-                                *        1-turn off port power for ports
-                                *        specified in PPCM(RHDB), or all ports,
-                                *        if power is set globally */
+/* read: 0,
+ * write: 0-no effect,
+ *        1-turn off port power for ports
+ *        specified in PPCM(RHDB), or all ports,
+ *        if power is set globally */
+#define RHS_LPS_FLAG  host2ohci_reg(1 <<  0)
 #define RHS_CLEAR_GLOBAL_POWER RHS_LPS_FLAG /* synonym for the above */
-#define RHS_OCI_FLAG  (1 <<  1)/* Over-current indicator, if per-port: 0 */
-#define RHS_DRWE_FLAG (1 << 15)/* read: 0-connect status change does not wake HC
-                                *       1-connect status change wakes HC
-                                * write: 1-set DRWE, 0-no effect */
+/** Over-current indicator, if per-port: 0 */
+#define RHS_OCI_FLAG  host2ohci_reg(1 <<  1)
+
+/* read: 0-connect status change does not wake HC
+ *       1-connect status change wakes HC
+ * write: 1-set DRWE, 0-no effect */
+#define RHS_DRWE_FLAG host2ohci_reg(1 << 15)
 #define RHS_SET_DRWE RHS_DRWE_FLAG
-#define RHS_LPSC_FLAG (1 << 16)/* read: 0,
-                                * write: 0-no effect
-                                *        1-turn on port power for ports
-                                *        specified in PPCM(RHDB), or all ports,
-                                *        if power is set globally */
+/* read: 0,
+ * write: 0-no effect
+ *        1-turn on port power for ports
+ *        specified in PPCM(RHDB), or all ports,
+ *        if power is set globally */
+#define RHS_LPSC_FLAG host2ohci_reg(1 << 16)
 #define RHS_SET_GLOBAL_POWER RHS_LPSC_FLAG /* synonym for the above */
-#define RHS_OCIC_FLAG (1 << 17)/* Over-current indicator change   */
-#define RHS_CLEAR_DRWE (1 << 31)
+/** Over-current change indicator*/
+#define RHS_OCIC_FLAG host2ohci_reg(1 << 17)
+#define RHS_CLEAR_DRWE host2ohci_reg(1 << 31)
 
 	/** Root hub per port status */
 	ioport32_t rh_port_status[];
-#define RHPS_CCS_FLAG (1 << 0) /* r: current connect status,
-                                * w: 1-clear port enable, 0-nothing */
+#define RHPS_CCS_FLAG host2ohci_reg(1 << 0) /* r: current connect status,
+                                               * w: 1-clear port enable, 0-N/S*/
 #define RHPS_CLEAR_PORT_ENABLE RHPS_CCS_FLAG
-#define RHPS_PES_FLAG (1 << 1) /* r: port enable status
-                                * w: 1-set port enable, 0-nothing */
+#define RHPS_PES_FLAG host2ohci_reg(1 << 1) /* r: port enable status
+                                              * w: 1-set port enable, 0-N/S */
 #define RHPS_SET_PORT_ENABLE RHPS_PES_FLAG
-#define RHPS_PSS_FLAG (1 << 2) /* r: port suspend status
-                                * w: 1-set port suspend, 0-nothing */
+#define RHPS_PSS_FLAG host2ohci_reg(1 << 2) /* r: port suspend status
+                                               * w: 1-set port suspend, 0-N/S */
 #define RHPS_SET_PORT_SUSPEND RHPS_PSS_FLAG
-#define RHPS_POCI_FLAG (1 << 3) /* r: port over-current (if reports are per-port
-                                 * w: 1-clear port suspend (start resume
-                                 *      if suspened)
-                                 *    0-nothing */
+#define RHPS_POCI_FLAG host2ohci_reg(1 << 3) /* r: port over-current
+                                                * (if reports are per-port
+                                                * w: 1-clear port suspend
+						*  (start resume if suspened)
+                                                *    0-nothing */
 #define RHPS_CLEAR_PORT_SUSPEND RHPS_POCI_FLAG
-#define RHPS_PRS_FLAG (1 << 4) /* r: port reset status
-                                * w: 1-set port reset, 0-nothing */
+#define RHPS_PRS_FLAG host2ohci_reg(1 << 4) /* r: port reset status
+                                               * w: 1-set port reset, 0-N/S */
 #define RHPS_SET_PORT_RESET RHPS_PRS_FLAG
-#define RHPS_PPS_FLAG (1 << 8) /* r: port power status
-                                * w: 1-set port power, 0-nothing */
+#define RHPS_PPS_FLAG host2ohci_reg(1 << 8) /* r: port power status
+                                              * w: 1-set port power, 0-N/S */
 #define RHPS_SET_PORT_POWER RHPS_PPS_FLAG
-#define RHPS_LSDA_FLAG (1 << 9) /* r: low speed device attached
-                                 * w: 1-clear port power, 0-nothing */
+#define RHPS_LSDA_FLAG host2ohci_reg(1 << 9) /* r: low speed device attached
+                                                * w: 1-clear port power, 0-N/S*/
 #define RHPS_CLEAR_PORT_POWER RHPS_LSDA_FLAG
-#define RHPS_CSC_FLAG  (1 << 16) /* connect status change Write-Clean */
-#define RHPS_PESC_FLAG (1 << 17) /* port enable status change WC */
-#define RHPS_PSSC_FLAG (1 << 18) /* port suspend status change WC */
-#define RHPS_OCIC_FLAG (1 << 19) /* port over-current change WC */
-#define RHPS_PRSC_FLAG (1 << 20) /* port reset status change WC */
-#define RHPS_CHANGE_WC_MASK 0x1f0000
+#define RHPS_CSC_FLAG  host2ohci_reg(1 << 16) /* connect status change WC */
+#define RHPS_PESC_FLAG host2ohci_reg(1 << 17) /* port enable status change WC */
+#define RHPS_PSSC_FLAG host2ohci_reg(1 << 18) /* port suspend status change WC */
+#define RHPS_OCIC_FLAG host2ohci_reg(1 << 19) /* port over-current change WC */
+#define RHPS_PRSC_FLAG host2ohci_reg(1 << 20) /* port reset status change WC */
+#define RHPS_CHANGE_WC_MASK host2ohci_reg(0x1f0000)
+/** OHCI designers were kind enough to make bits correspond to feature # */
+#define RHPS_FEATURE_BIT(feature) host2ohci_reg(1 << feature)
 } __attribute__((packed)) ohci_regs_t;
 #endif
Index: uspace/drv/bus/usb/ohci/root_hub.c
===================================================================
--- uspace/drv/bus/usb/ohci/root_hub.c	(revision 70922c299ca7e34c75aac043336fd7df8dc71581)
+++ uspace/drv/bus/usb/ohci/root_hub.c	(revision ffcc577689cf1efcd37b7ba0e5990e77cff238c0)
@@ -33,17 +33,19 @@
  */
 #include <assert.h>
+#include <byteorder.h>
 #include <errno.h>
 #include <str_error.h>
 #include <fibril_synch.h>
 
+#include <usb/usb.h>
 #include <usb/debug.h>
 #include <usb/dev/request.h>
 #include <usb/classes/hub.h>
 
-#include "root_hub.h"
 #include <usb/classes/classes.h>
 #include <usb/classes/hub.h>
 #include <usb/dev/driver.h>
 #include "ohci_regs.h"
+#include "root_hub.h"
 
 /**
@@ -122,4 +124,6 @@
 {
 	assert(request);
+	usb_log_debug("Sending interrupt vector(%zu) %hhx:%hhx.\n",
+	    size, ((uint8_t*)&mask)[0], ((uint8_t*)&mask)[1]);
 	usb_transfer_batch_finish_error(request, &mask, size, EOK);
 	usb_transfer_batch_destroy(request);
@@ -150,6 +154,6 @@
 
 	instance->registers = regs;
-	instance->port_count =
-	    (instance->registers->rh_desc_a >> RHDA_NDS_SHIFT) & RHDA_NDS_MASK;
+	instance->port_count = RHDA_NDS(instance->registers->rh_desc_a);
+	usb_log_debug("rh_desc_a: %x.\n", instance->registers->rh_desc_a);
 	if (instance->port_count > 15) {
 		usb_log_warning("OHCI specification does not allow more than 15"
@@ -184,10 +188,9 @@
 
 	/* Control all ports by global switch and turn them off */
-	instance->registers->rh_desc_b &= (RHDB_PCC_MASK << RHDB_PCC_SHIFT);
+	instance->registers->rh_desc_b &= ~RHDB_PCC_WRITE(~0);
 	instance->registers->rh_status = RHS_CLEAR_GLOBAL_POWER;
 
 	/* Return control to per port state */
-	instance->registers->rh_desc_b |=
-		((1 << (instance->port_count + 1)) - 1) << RHDB_PCC_SHIFT;
+	instance->registers->rh_desc_b |= RHDB_PCC_WRITE(~0);
 
 	/* Set per port over-current */
@@ -226,7 +229,7 @@
 		fibril_mutex_lock(&instance->guard);
 		assert(instance->unfinished_interrupt_transfer == NULL);
-		uint16_t mask = create_interrupt_mask(instance);
+		const uint16_t mask = create_interrupt_mask(instance);
 		if (mask == 0) {
-			usb_log_debug("No changes...\n");
+			usb_log_debug("No changes(%hx)...\n", mask);
 			instance->unfinished_interrupt_transfer = request;
 		} else {
@@ -257,5 +260,5 @@
 	if (instance->unfinished_interrupt_transfer) {
 		usb_log_debug("Finalizing interrupt transfer\n");
-		uint16_t mask = create_interrupt_mask(instance);
+		const uint16_t mask = create_interrupt_mask(instance);
 		interrupt_request(instance->unfinished_interrupt_transfer,
 		    mask, instance->interrupt_mask_size);
@@ -282,6 +285,6 @@
 	instance->hub_descriptor_size = size;
 
-	uint32_t hub_desc = instance->registers->rh_desc_a;
-	uint32_t port_desc = instance->registers->rh_desc_b;
+	const uint32_t hub_desc = instance->registers->rh_desc_a;
+	const uint32_t port_desc = instance->registers->rh_desc_b;
 
 	/* bDescLength */
@@ -305,16 +308,13 @@
 	instance->descriptors.hub[4] = 0;
 	/* bPwrOn2PwrGood */
-	instance->descriptors.hub[5] =
-	    (hub_desc >> RHDA_POTPGT_SHIFT) & RHDA_POTPGT_MASK;
+	instance->descriptors.hub[5] = RHDA_POTPGT(hub_desc);
 	/* bHubContrCurrent, root hubs don't need no power. */
 	instance->descriptors.hub[6] = 0;
 
 	/* Device Removable and some legacy 1.0 stuff*/
-	instance->descriptors.hub[7] =
-	    (port_desc >> RHDB_DR_SHIFT) & RHDB_DR_MASK & 0xff;
+	instance->descriptors.hub[7] = RHDB_DR_READ(port_desc) & 0xff;
 	instance->descriptors.hub[8] = 0xff;
 	if (instance->interrupt_mask_size == 2) {
-		instance->descriptors.hub[8] =
-		    (port_desc >> RHDB_DR_SHIFT) & RHDB_DR_MASK >> 8;
+		instance->descriptors.hub[8] = RHDB_DR_READ(port_desc) >> 8;
 		instance->descriptors.hub[9]  = 0xff;
 		instance->descriptors.hub[10] = 0xff;
@@ -375,6 +375,6 @@
 		}
 	}
-	/* USB is little endian */
-	return host2uint32_t_le(mask);
+	usb_log_debug2("OHCI root hub interrupt mask: %hx.\n", mask);
+	return uint16_host2usb(mask);
 }
 /*----------------------------------------------------------------------------*/
@@ -434,5 +434,5 @@
 			TRANSFER_END(request, EOVERFLOW);
 		} else {
-			uint16_t data =
+			const uint16_t data =
 			    uint16_host2usb(USB_DEVICE_STATUS_SELF_POWERED);
 			TRANSFER_END_DATA(request, &data, sizeof(data));
@@ -482,5 +482,5 @@
 	usb_device_request_setup_packet_t *setup_request =
 	    (usb_device_request_setup_packet_t *) request->setup_buffer;
-	uint16_t setup_request_value = setup_request->value_high;
+	const int setup_request_value = uint16_usb2host(setup_request->value);
 	switch (setup_request_value)
 	{
@@ -568,7 +568,9 @@
 	case USB_HUB_FEATURE_PORT_SUSPEND: //2
 	case USB_HUB_FEATURE_PORT_RESET:   //4
-		/* Nice thing is that these shifts correspond to the position
-		 * of control bits in register */
-		instance->registers->rh_port_status[port - 1] = (1 << feature);
+		usb_log_debug2(
+		    "Setting port ENABLE, SUSPEND or RESET on port %zu.\n",
+		    port);
+		instance->registers->rh_port_status[port - 1] =
+		    RHPS_FEATURE_BIT(feature);
 		return EOK;
 	default:
@@ -624,7 +626,9 @@
 	case USB_HUB_FEATURE_C_PORT_OVER_CURRENT: //19
 	case USB_HUB_FEATURE_C_PORT_RESET:        //20
-		/* Nice thing is that these shifts correspond to the position
-		 * of control bits in register */
-		instance->registers->rh_port_status[port - 1] = (1 << feature);
+		usb_log_debug2("Clearing port C_CONNECTION, C_ENABLE, "
+		    "C_SUSPEND or C_RESET on port %zu.\n",
+		    port);
+		instance->registers->rh_port_status[port - 1] =
+		    RHPS_FEATURE_BIT(feature);
 		return EOK;
 
@@ -795,5 +799,5 @@
 	case USB_DEVREQ_SET_CONFIGURATION:
 		usb_log_debug("USB_DEVREQ_SET_CONFIGURATION: %u\n",
-		    setup_request->value);
+		    uint16_usb2host(setup_request->value));
 		/* We have only one configuration, it's number is 1 */
 		if (uint16_usb2host(setup_request->value) != 1)
