Module Name: src
Committed By: skrll
Date: Wed Jun 3 15:38:02 UTC 2020
Modified Files:
src/sys/dev/usb: ohci.c ohcireg.h
Log Message:
Convert ohcireg.h to __BITS. NFCI.
To generate a diff of this commit:
cvs rdiff -u -r1.309 -r1.310 src/sys/dev/usb/ohci.c
cvs rdiff -u -r1.27 -r1.28 src/sys/dev/usb/ohcireg.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/usb/ohci.c
diff -u src/sys/dev/usb/ohci.c:1.309 src/sys/dev/usb/ohci.c:1.310
--- src/sys/dev/usb/ohci.c:1.309 Tue May 26 07:03:22 2020
+++ src/sys/dev/usb/ohci.c Wed Jun 3 15:38:02 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ohci.c,v 1.309 2020/05/26 07:03:22 skrll Exp $ */
+/* $NetBSD: ohci.c,v 1.310 2020/06/03 15:38:02 skrll Exp $ */
/*
* Copyright (c) 1998, 2004, 2005, 2012, 2016, 2020 The NetBSD Foundation, Inc.
@@ -42,7 +42,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ohci.c,v 1.309 2020/05/26 07:03:22 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ohci.c,v 1.310 2020/06/03 15:38:02 skrll Exp $");
#ifdef _KERNEL_OPT
#include "opt_usb.h"
@@ -607,9 +607,12 @@ ohci_reset_std_chain(ohci_softc_t *sc, s
usb_syncmem(dma, 0, len,
rd ? BUS_DMASYNC_PREREAD : BUS_DMASYNC_PREWRITE);
- const uint32_t tdflags = HTOO32(
- (rd ? OHCI_TD_IN : OHCI_TD_OUT) |
- OHCI_TD_NOCC | OHCI_TD_TOGGLE_CARRY | OHCI_TD_NOINTR);
+ const uint32_t tdflags = HTOO32(
+ OHCI_TD_SET_DP(rd ? OHCI_TD_DP_IN : OHCI_TD_DP_OUT) |
+ OHCI_TD_SET_CC(OHCI_TD_NOCC) |
+ OHCI_TD_SET_TOGGLE(OHCI_TD_TOGGLE_CARRY) |
+ OHCI_TD_SET_DI(OHCI_TD_NOINTR)
+ );
size_t curoffs = 0;
for (size_t j = 1; len != 0;) {
@@ -803,7 +806,7 @@ ohci_init(ohci_softc_t *sc)
"ohcixfer", NULL, IPL_USB, NULL, NULL, NULL);
rev = OREAD4(sc, OHCI_REVISION);
- aprint_normal("OHCI version %d.%d%s\n",
+ aprint_normal("OHCI version %" __PRIuBITS ".%" __PRIuBITS "%s\n",
OHCI_REV_HI(rev), OHCI_REV_LO(rev),
OHCI_REV_LEGACY(rev) ? ", legacy support" : "");
@@ -927,16 +930,21 @@ ohci_init(ohci_softc_t *sc)
if ((ctl & OHCI_IR) == 0) {
aprint_error_dev(sc->sc_dev,
"SMM does not respond, resetting\n");
- OWRITE4(sc, OHCI_CONTROL, OHCI_HCFS_RESET | rwc);
+ OWRITE4(sc, OHCI_CONTROL,
+ OHCI_SET_HCFS(OHCI_HCFS_RESET) | rwc);
goto reset;
}
#if 0
-/* Don't bother trying to reuse the BIOS init, we'll reset it anyway. */
- } else if ((ctl & OHCI_HCFS_MASK) != OHCI_HCFS_RESET) {
+ /*
+ * Don't bother trying to reuse the BIOS init, we'll reset it
+ * anyway.
+ */
+ } else if (OHCI_GET_HCFS(ctl) != OHCI_HCFS_RESET) {
/* BIOS started controller. */
DPRINTF("BIOS active", 0, 0, 0, 0);
- if ((ctl & OHCI_HCFS_MASK) != OHCI_HCFS_OPERATIONAL) {
- OWRITE4(sc, OHCI_CONTROL, OHCI_HCFS_OPERATIONAL | rwc);
+ if (OHCI_GET_HCFS(ctl) != OHCI_HCFS_OPERATIONAL) {
+ OWRITE4(sc, OHCI_CONTROL,
+ OHCI_SET_HCFS(OHCI_HCFS_OPERATIONAL) | rwc);
usb_delay_ms(&sc->sc_bus, USB_RESUME_DELAY);
}
#endif
@@ -952,7 +960,7 @@ ohci_init(ohci_softc_t *sc)
* without it some controllers do not start.
*/
DPRINTF("sc %#jx: resetting", (uintptr_t)sc, 0, 0, 0);
- OWRITE4(sc, OHCI_CONTROL, OHCI_HCFS_RESET | rwc);
+ OWRITE4(sc, OHCI_CONTROL, OHCI_SET_HCFS(OHCI_HCFS_RESET) | rwc);
usb_delay_ms(&sc->sc_bus, USB_BUS_RESET_DELAY);
/* We now own the host controller and the bus has been reset. */
@@ -987,7 +995,8 @@ ohci_init(ohci_softc_t *sc)
ctl = OREAD4(sc, OHCI_CONTROL);
ctl &= ~(OHCI_CBSR_MASK | OHCI_LES | OHCI_HCFS_MASK | OHCI_IR);
ctl |= OHCI_PLE | OHCI_IE | OHCI_CLE | OHCI_BLE |
- OHCI_RATIO_1_4 | OHCI_HCFS_OPERATIONAL | rwc;
+ OHCI_CBSR_SET(OHCI_RATIO_1_4) |
+ OHCI_SET_HCFS(OHCI_HCFS_OPERATIONAL) | rwc;
/* And finally start it! */
OWRITE4(sc, OHCI_CONTROL, ctl);
@@ -996,8 +1005,8 @@ ohci_init(ohci_softc_t *sc)
* registers that should be set earlier, but that the
* controller ignores when in the SUSPEND state.
*/
- ival = OHCI_GET_IVAL(fm);
- fm = (OREAD4(sc, OHCI_FM_INTERVAL) & OHCI_FIT) ^ OHCI_FIT;
+ ival = OHCI_FM_GET_IVAL(fm);
+ fm = (OREAD4(sc, OHCI_FM_INTERVAL) & OHCI_FM_FIT) ^ OHCI_FM_FIT;
fm |= OHCI_FSMPS(ival) | ival;
OWRITE4(sc, OHCI_FM_INTERVAL, fm);
per = OHCI_PERIODIC(ival); /* 90% periodic */
@@ -1005,19 +1014,19 @@ ohci_init(ohci_softc_t *sc)
if (sc->sc_flags & OHCIF_SUPERIO) {
/* no overcurrent protection */
- desca |= OHCI_NOCP;
+ desca |= OHCI_RHD_NOCP;
/*
* Clear NoPowerSwitching and PowerOnToPowerGoodTime meaning
* that
* - ports are always power switched
* - don't wait for powered root hub port
*/
- desca &= ~(__SHIFTIN(0xff, OHCI_POTPGT_MASK) | OHCI_NPS);
+ desca &= ~(OHCI_RHD_POTPGT_MASK | OHCI_RHD_NPS);
}
/* Fiddle the No OverCurrent Protection bit to avoid chip bug. */
- OWRITE4(sc, OHCI_RH_DESCRIPTOR_A, desca | OHCI_NOCP);
- OWRITE4(sc, OHCI_RH_STATUS, OHCI_LPSC); /* Enable port power */
+ OWRITE4(sc, OHCI_RH_DESCRIPTOR_A, desca | OHCI_RHD_NOCP);
+ OWRITE4(sc, OHCI_RH_STATUS, OHCI_RHS_LPSC); /* Enable port power */
usb_delay_ms(&sc->sc_bus, OHCI_ENABLE_POWER_DELAY);
OWRITE4(sc, OHCI_RH_DESCRIPTOR_A, desca);
@@ -1028,7 +1037,8 @@ ohci_init(ohci_softc_t *sc)
sc->sc_noport = 0;
for (i = 0; i < 10 && sc->sc_noport == 0; i++) {
usb_delay_ms(&sc->sc_bus, OHCI_READ_DESC_DELAY);
- sc->sc_noport = OHCI_GET_NDP(OREAD4(sc, OHCI_RH_DESCRIPTOR_A));
+ sc->sc_noport =
+ OHCI_RHD_GET_NDP(OREAD4(sc, OHCI_RH_DESCRIPTOR_A));
}
#ifdef OHCI_DEBUG
@@ -1122,7 +1132,7 @@ ohci_shutdown(device_t self, int flags)
DPRINTF("stopping the HC", 0, 0, 0, 0);
OWRITE4(sc, OHCI_INTERRUPT_DISABLE, OHCI_ALL_INTRS);
- OWRITE4(sc, OHCI_CONTROL, OHCI_HCFS_RESET);
+ OWRITE4(sc, OHCI_CONTROL, OHCI_SET_HCFS(OHCI_HCFS_RESET));
return true;
}
@@ -1149,10 +1159,10 @@ ohci_resume(device_t dv, const pmf_qual_
ctl = sc->sc_control;
else
ctl = OREAD4(sc, OHCI_CONTROL);
- ctl |= OHCI_HCFS_RESUME;
+ ctl |= OHCI_SET_HCFS(OHCI_HCFS_RESUME);
OWRITE4(sc, OHCI_CONTROL, ctl);
usb_delay_ms(&sc->sc_bus, USB_RESUME_DELAY);
- ctl = (ctl & ~OHCI_HCFS_MASK) | OHCI_HCFS_OPERATIONAL;
+ ctl = (ctl & ~OHCI_HCFS_MASK) | OHCI_SET_HCFS(OHCI_HCFS_OPERATIONAL);
OWRITE4(sc, OHCI_CONTROL, ctl);
usb_delay_ms(&sc->sc_bus, USB_RESUME_RECOVERY);
sc->sc_control = sc->sc_intre = 0;
@@ -1184,7 +1194,7 @@ ohci_suspend(device_t dv, const pmf_qual
sc->sc_intre = OREAD4(sc,
OHCI_INTERRUPT_ENABLE);
}
- ctl |= OHCI_HCFS_SUSPEND;
+ ctl |= OHCI_SET_HCFS(OHCI_HCFS_SUSPEND);
OWRITE4(sc, OHCI_CONTROL, ctl);
usb_delay_ms(&sc->sc_bus, USB_RESUME_WAIT);
@@ -1337,7 +1347,7 @@ ohci_intr1(ohci_softc_t *sc)
DPRINTFN(5, "unrecoverable error sc=%#jx", (uintptr_t)sc, 0, 0, 0);
printf("%s: unrecoverable error, controller halted\n",
device_xname(sc->sc_dev));
- OWRITE4(sc, OHCI_CONTROL, OHCI_HCFS_RESET);
+ OWRITE4(sc, OHCI_CONTROL, OHCI_SET_HCFS(OHCI_HCFS_RESET));
/* XXX what else */
}
if (eintrs & OHCI_RHSC) {
@@ -1595,7 +1605,7 @@ ohci_softintr(void *v)
== OHCI_CC_NOT_ACCESSED)
len = 0;
else
- len = OHCI_ITD_PSW_LENGTH(len);
+ len = OHCI_ITD_PSW_SIZE(len);
xfer->ux_frlengths[i] = len;
actlen += len;
}
@@ -1928,9 +1938,9 @@ ohci_dump_td(ohci_softc_t *sc, ohci_soft
DPRINTF("TD(%#jx) at 0x%08jx:", (uintptr_t)std, std->physaddr, 0, 0);
DPRINTF(" round=%jd DP=%jx DI=%jx T=%jx",
!!(flags & OHCI_TD_R),
- __SHIFTOUT(flags, OHCI_TD_DP_MASK),
+ OHCI_TD_GET_DP(flags),
OHCI_TD_GET_DI(flags),
- __SHIFTOUT(flags, OHCI_TD_TOGGLE_MASK));
+ OHCI_TD_GET_TOGGLE(flags));
DPRINTF(" EC=%jd CC=%jd", OHCI_TD_GET_EC(flags),
OHCI_TD_GET_CC(flags), 0, 0);
DPRINTF(" td_cbp=0x%08jx td_nexttd=0x%08jx td_be=0x%08jx",
@@ -1994,10 +2004,10 @@ ohci_dump_ed(ohci_softc_t *sc, ohci_soft
OHCI_ED_GET_MAXP(flags),
0);
DPRINTF(" dir=%jd speed=%jd skip=%jd iso=%jd",
- __SHIFTOUT(flags, OHCI_ED_DIR_MASK),
- !!(flags & OHCI_ED_SPEED),
- !!(flags & OHCI_ED_SKIP),
- !!(flags & OHCI_ED_FORMAT_ISO));
+ OHCI_ED_GET_DIR(flags),
+ __SHIFTOUT(flags, OHCI_ED_SPEED),
+ __SHIFTOUT(flags, OHCI_ED_SKIP),
+ OHCI_ED_GET_FORMAT(flags));
DPRINTF(" tailp=0x%08jx", (u_long)O32TOH(sed->ed.ed_tailp),
0, 0, 0);
DPRINTF(" headp=0x%08jx nexted=0x%08jx halted=%jd carry=%jd",
@@ -2060,11 +2070,11 @@ ohci_open(struct usbd_pipe *pipe)
opipe->tail.itd = sitd;
tdphys = sitd->physaddr;
- fmt = OHCI_ED_FORMAT_ISO;
+ fmt = OHCI_ED_SET_FORMAT(OHCI_ED_FORMAT_ISO);
if (UE_GET_DIR(ed->bEndpointAddress) == UE_DIR_IN)
- fmt |= OHCI_ED_DIR_IN;
+ fmt |= OHCI_ED_SET_DIR(OHCI_ED_DIR_IN);
else
- fmt |= OHCI_ED_DIR_OUT;
+ fmt |= OHCI_ED_SET_DIR(OHCI_ED_DIR_OUT);
} else {
std = ohci_alloc_std(sc);
if (std == NULL)
@@ -2072,7 +2082,9 @@ ohci_open(struct usbd_pipe *pipe)
opipe->tail.td = std;
tdphys = std->physaddr;
- fmt = OHCI_ED_FORMAT_GEN | OHCI_ED_DIR_TD;
+ fmt =
+ OHCI_ED_SET_FORMAT(OHCI_ED_FORMAT_GEN) |
+ OHCI_ED_SET_DIR(OHCI_ED_DIR_TD);
}
sed->ed.ed_flags = HTOO32(
OHCI_ED_SET_FA(addr) |
@@ -2416,11 +2428,11 @@ ohci_roothub_ctrl(struct usbd_bus *bus,
v = OREAD4(sc, OHCI_RH_DESCRIPTOR_A);
hubd.bNbrPorts = sc->sc_noport;
USETW(hubd.wHubCharacteristics,
- (v & OHCI_NPS ? UHD_PWR_NO_SWITCH :
- v & OHCI_PSM ? UHD_PWR_GANGED : UHD_PWR_INDIVIDUAL)
+ (v & OHCI_RHD_NPS ? UHD_PWR_NO_SWITCH :
+ v & OHCI_RHD_PSM ? UHD_PWR_GANGED : UHD_PWR_INDIVIDUAL)
/* XXX overcurrent */
);
- hubd.bPwrOn2PwrGood = OHCI_GET_POTPGT(v);
+ hubd.bPwrOn2PwrGood = OHCI_RHD_GET_POTPGT(v);
v = OREAD4(sc, OHCI_RH_DESCRIPTOR_B);
for (i = 0, l = sc->sc_noport; l > 0; i++, l -= 8, v >>= 8)
hubd.DeviceRemovable[i++] = (uint8_t)v;
@@ -2714,11 +2726,11 @@ ohci_device_ctrl_start(struct usbd_xfer
sed = opipe->sed;
KASSERTMSG(OHCI_ED_GET_FA(O32TOH(sed->ed.ed_flags)) == dev->ud_addr,
- "address ED %d pipe %d\n",
+ "address ED %" __PRIuBITS " pipe %d\n",
OHCI_ED_GET_FA(O32TOH(sed->ed.ed_flags)), dev->ud_addr);
KASSERTMSG(OHCI_ED_GET_MAXP(O32TOH(sed->ed.ed_flags)) ==
UGETW(opipe->pipe.up_endpoint->ue_edesc->wMaxPacketSize),
- "MPL ED %d pipe %d\n",
+ "MPL ED %" __PRIuBITS " pipe %d\n",
OHCI_ED_GET_MAXP(O32TOH(sed->ed.ed_flags)),
UGETW(opipe->pipe.up_endpoint->ue_edesc->wMaxPacketSize));
@@ -2744,7 +2756,7 @@ ohci_device_ctrl_start(struct usbd_xfer
std = ox->ox_stds[0];
/* Start toggle at 1 and then use the carried toggle. */
std->td.td_flags &= HTOO32(~OHCI_TD_TOGGLE_MASK);
- std->td.td_flags |= HTOO32(OHCI_TD_TOGGLE_1);
+ std->td.td_flags |= HTOO32(OHCI_TD_SET_TOGGLE(OHCI_TD_TOGGLE_1));
usb_syncmem(&std->dma,
std->offs + offsetof(ohci_td_t, td_flags),
sizeof(std->td.td_flags),
@@ -2760,8 +2772,12 @@ ohci_device_ctrl_start(struct usbd_xfer
memcpy(KERNADDR(&opipe->ctrl.reqdma, 0), req, sizeof(*req));
usb_syncmem(&opipe->ctrl.reqdma, 0, sizeof(*req), BUS_DMASYNC_PREWRITE);
- setup->td.td_flags = HTOO32(OHCI_TD_SETUP | OHCI_TD_NOCC |
- OHCI_TD_TOGGLE_0 | OHCI_TD_NOINTR);
+ setup->td.td_flags = HTOO32(
+ OHCI_TD_SET_DP(OHCI_TD_DP_SETUP) |
+ OHCI_TD_SET_CC(OHCI_TD_NOCC) |
+ OHCI_TD_SET_TOGGLE(OHCI_TD_TOGGLE_0) |
+ OHCI_TD_SET_DI(OHCI_TD_NOINTR)
+ );
setup->td.td_cbp = HTOO32(DMAADDR(&opipe->ctrl.reqdma, 0));
setup->td.td_nexttd = HTOO32(next->physaddr);
setup->td.td_be = HTOO32(O32TOH(setup->td.td_cbp) + sizeof(*req) - 1);
@@ -2776,8 +2792,11 @@ ohci_device_ctrl_start(struct usbd_xfer
BUS_DMASYNC_PREWRITE | BUS_DMASYNC_PREREAD);
stat->td.td_flags = HTOO32(
- (isread ? OHCI_TD_OUT : OHCI_TD_IN) |
- OHCI_TD_NOCC | OHCI_TD_TOGGLE_1 | OHCI_TD_SET_DI(1));
+ OHCI_TD_SET_DP(isread ? OHCI_TD_DP_OUT : OHCI_TD_DP_IN) |
+ OHCI_TD_SET_CC(OHCI_TD_NOCC) |
+ OHCI_TD_SET_TOGGLE(OHCI_TD_TOGGLE_1) |
+ OHCI_TD_SET_DI(1)
+ );
stat->td.td_cbp = 0;
stat->td.td_nexttd = HTOO32(tail->physaddr);
stat->td.td_be = 0;
@@ -2992,7 +3011,7 @@ ohci_device_bulk_start(struct usbd_xfer
KASSERT(opipe->tail.td == tail);
/* We want interrupt at the end of the transfer. */
- last->td.td_flags &= HTOO32(~OHCI_TD_INTR_MASK);
+ last->td.td_flags &= HTOO32(~OHCI_TD_DI_MASK);
last->td.td_flags |= HTOO32(OHCI_TD_SET_DI(1));
last->td.td_nexttd = HTOO32(tail->physaddr);
last->nexttd = tail;
@@ -3191,7 +3210,7 @@ ohci_device_intr_start(struct usbd_xfer
KASSERT(opipe->tail.td == tail);
/* We want interrupt at the end of the transfer. */
- last->td.td_flags &= HTOO32(~OHCI_TD_INTR_MASK);
+ last->td.td_flags &= HTOO32(~OHCI_TD_DI_MASK);
last->td.td_flags |= HTOO32(OHCI_TD_SET_DI(1));
last->td.td_nexttd = HTOO32(tail->physaddr);
@@ -3536,10 +3555,11 @@ ohci_device_isoc_enter(struct usbd_xfer
/* Fill current ITD */
sitd->itd.itd_flags = HTOO32(
- OHCI_ITD_NOCC |
- OHCI_ITD_SET_SF(isoc->next) |
- OHCI_ITD_SET_DI(6) | /* delay intr a little */
- OHCI_ITD_SET_FC(ncur));
+ OHCI_ITD_SET_CC(OHCI_ITD_NOCC) |
+ OHCI_ITD_SET_SF(isoc->next) |
+ OHCI_ITD_SET_DI(6) | /* delay intr a little */
+ OHCI_ITD_SET_FC(ncur)
+ );
sitd->itd.itd_bp0 = HTOO32(bp0);
sitd->itd.itd_nextitd = HTOO32(nsitd->physaddr);
sitd->itd.itd_be = HTOO32(end);
@@ -3574,10 +3594,11 @@ ohci_device_isoc_enter(struct usbd_xfer
/* Fixup last used ITD */
sitd->itd.itd_flags = HTOO32(
- OHCI_ITD_NOCC |
- OHCI_ITD_SET_SF(isoc->next) |
- OHCI_ITD_SET_DI(0) |
- OHCI_ITD_SET_FC(ncur));
+ OHCI_ITD_SET_CC(OHCI_ITD_NOCC) |
+ OHCI_ITD_SET_SF(isoc->next) |
+ OHCI_ITD_SET_DI(0) |
+ OHCI_ITD_SET_FC(ncur)
+ );
sitd->itd.itd_bp0 = HTOO32(bp0);
sitd->itd.itd_nextitd = HTOO32(tail->physaddr);
sitd->itd.itd_be = HTOO32(end);
Index: src/sys/dev/usb/ohcireg.h
diff -u src/sys/dev/usb/ohcireg.h:1.27 src/sys/dev/usb/ohcireg.h:1.28
--- src/sys/dev/usb/ohcireg.h:1.27 Sat Apr 23 10:15:32 2016
+++ src/sys/dev/usb/ohcireg.h Wed Jun 3 15:38:02 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ohcireg.h,v 1.27 2016/04/23 10:15:32 skrll Exp $ */
+/* $NetBSD: ohcireg.h,v 1.28 2020/06/03 15:38:02 skrll Exp $ */
/* $FreeBSD: src/sys/dev/usb/ohcireg.h,v 1.8 1999/11/17 22:33:40 n_hibma Exp $ */
/*
@@ -43,79 +43,91 @@
/*** OHCI registers */
#define OHCI_REVISION 0x00 /* OHCI revision # */
-#define OHCI_REV_LO(rev) ((rev)&0xf)
-#define OHCI_REV_HI(rev) (((rev)>>4)&0xf)
-#define OHCI_REV_LEGACY(rev) ((rev) & 0x100)
+#define OHCI_REV_LO_MASK __BITS(3,0)
+#define OHCI_REV_HI_MASK __BITS(7,4)
+#define OHCI_REV_LO(rev) __SHIFTOUT((rev), OHCI_REV_LO_MASK)
+#define OHCI_REV_HI(rev) __SHIFTOUT((rev), OHCI_REV_HI_MASK)
+#define OHCI_REV_LEGACY_MASK __BIT(8)
+#define OHCI_REV_LEGACY(rev) __SHIFTOUT((rev), OHCI_REV_LEGACY_MASK)
#define OHCI_CONTROL 0x04
-#define OHCI_CBSR_MASK 0x00000003 /* Control/Bulk Service Ratio */
-#define OHCI_RATIO_1_1 0x00000000
-#define OHCI_RATIO_1_2 0x00000001
-#define OHCI_RATIO_1_3 0x00000002
-#define OHCI_RATIO_1_4 0x00000003
-#define OHCI_PLE 0x00000004 /* Periodic List Enable */
-#define OHCI_IE 0x00000008 /* Isochronous Enable */
-#define OHCI_CLE 0x00000010 /* Control List Enable */
-#define OHCI_BLE 0x00000020 /* Bulk List Enable */
-#define OHCI_HCFS_MASK 0x000000c0 /* HostControllerFunctionalState */
-#define OHCI_HCFS_RESET 0x00000000
-#define OHCI_HCFS_RESUME 0x00000040
-#define OHCI_HCFS_OPERATIONAL 0x00000080
-#define OHCI_HCFS_SUSPEND 0x000000c0
-#define OHCI_IR 0x00000100 /* Interrupt Routing */
-#define OHCI_RWC 0x00000200 /* Remote Wakeup Connected */
-#define OHCI_RWE 0x00000400 /* Remote Wakeup Enabled */
+#define OHCI_CBSR_MASK __BITS(1,0) /* Control/Bulk Service Ratio */
+#define OHCI_CBSR_SET(x) __SHIFTIN((x), OHCI_CBSR_MASK)
+#define OHCI_RATIO_1_1 0
+#define OHCI_RATIO_1_2 1
+#define OHCI_RATIO_1_3 2
+#define OHCI_RATIO_1_4 3
+#define OHCI_PLE __BIT(2) /* Periodic List Enable */
+#define OHCI_IE __BIT(3) /* Isochronous Enable */
+#define OHCI_CLE __BIT(4) /* Control List Enable */
+#define OHCI_BLE __BIT(5) /* Bulk List Enable */
+#define OHCI_HCFS_MASK __BITS(7,6) /* HostControllerFunctionalState */
+#define OHCI_SET_HCFS(x) __SHIFTIN((x), OHCI_HCFS_MASK)
+#define OHCI_GET_HCFS(x) __SHIFTOUT((x), OHCI_HCFS_MASK)
+#define OHCI_HCFS_RESET 0
+#define OHCI_HCFS_RESUME 1
+#define OHCI_HCFS_OPERATIONAL 2
+#define OHCI_HCFS_SUSPEND 3
+#define OHCI_IR __BIT(8) /* Interrupt Routing */
+#define OHCI_RWC __BIT(9) /* Remote Wakeup Connected */
+#define OHCI_RWE __BIT(10) /* Remote Wakeup Enabled */
#define OHCI_COMMAND_STATUS 0x08
-#define OHCI_HCR 0x00000001 /* Host Controller Reset */
-#define OHCI_CLF 0x00000002 /* Control List Filled */
-#define OHCI_BLF 0x00000004 /* Bulk List Filled */
-#define OHCI_OCR 0x00000008 /* Ownership Change Request */
-#define OHCI_SOC_MASK 0x00030000 /* Scheduling Overrun Count */
+#define OHCI_HCR __BIT(0) /* Host Controller Reset */
+#define OHCI_CLF __BIT(1) /* Control List Filled */
+#define OHCI_BLF __BIT(2) /* Bulk List Filled */
+#define OHCI_OCR __BIT(3) /* Ownership Change Request */
+#define OHCI_SOC_MASK __BITS(17,16) /* Scheduling Overrun Count */
#define OHCI_INTERRUPT_STATUS 0x0c
-#define OHCI_SO 0x00000001 /* Scheduling Overrun */
-#define OHCI_WDH 0x00000002 /* Writeback Done Head */
-#define OHCI_SF 0x00000004 /* Start of Frame */
-#define OHCI_RD 0x00000008 /* Resume Detected */
-#define OHCI_UE 0x00000010 /* Unrecoverable Error */
-#define OHCI_FNO 0x00000020 /* Frame Number Overflow */
-#define OHCI_RHSC 0x00000040 /* Root Hub Status Change */
-#define OHCI_OC 0x40000000 /* Ownership Change */
-#define OHCI_MIE 0x80000000 /* Master Interrupt Enable */
+#define OHCI_SO __BIT(0) /* Scheduling Overrun */
+#define OHCI_WDH __BIT(1) /* Writeback Done Head */
+#define OHCI_SF __BIT(2) /* Start of Frame */
+#define OHCI_RD __BIT(3) /* Resume Detected */
+#define OHCI_UE __BIT(4) /* Unrecoverable Error */
+#define OHCI_FNO __BIT(5) /* Frame Number Overflow */
+#define OHCI_RHSC __BIT(6) /* Root Hub Status Change */
+#define OHCI_OC __BIT(30) /* Ownership Change */
+#define OHCI_MIE __BIT(31) /* Master Interrupt Enable */
#define OHCI_INTERRUPT_ENABLE 0x10
#define OHCI_INTERRUPT_DISABLE 0x14
#define OHCI_HCCA 0x18
#define OHCI_PERIOD_CURRENT_ED 0x1c
+#define OHCI_PERIOD_CURRENT_ED 0x1c
#define OHCI_CONTROL_HEAD_ED 0x20
#define OHCI_CONTROL_CURRENT_ED 0x24
#define OHCI_BULK_HEAD_ED 0x28
#define OHCI_BULK_CURRENT_ED 0x2c
#define OHCI_DONE_HEAD 0x30
#define OHCI_FM_INTERVAL 0x34
-#define OHCI_GET_IVAL(s) ((s) & 0x3fff)
-#define OHCI_GET_FSMPS(s) (((s) >> 16) & 0x7fff)
-#define OHCI_FIT 0x80000000
+#define OHCI_FM_IVAL_MASK __BITS(13,0)
+#define OHCI_FM_GET_IVAL(x) __SHIFTOUT((x), OHCI_FM_IVAL_MASK)
+#define OHCI_FM_FSMPS_MASK __BITS(30,16)
+#define OHCI_FM_GET_FSMPS(x) __SHIFTOUT((x), OHCI_FM_FSMPS_MASK)
+#define OHCI_FM_SET_FSMPS(x) __SHIFTIN((x), OHCI_FM_FSMPS_MASK)
+#define OHCI_FM_FIT __BIT(31)
#define OHCI_FM_REMAINING 0x38
#define OHCI_FM_NUMBER 0x3c
#define OHCI_PERIODIC_START 0x40
#define OHCI_LS_THRESHOLD 0x44
#define OHCI_RH_DESCRIPTOR_A 0x48
-#define OHCI_GET_NDP(s) ((s) & 0xff)
-#define OHCI_PSM 0x0100 /* Power Switching Mode */
-#define OHCI_NPS 0x0200 /* No Power Switching */
-#define OHCI_DT 0x0400 /* Device Type */
-#define OHCI_OCPM 0x0800 /* Overcurrent Protection Mode */
-#define OHCI_NOCP 0x1000 /* No Overcurrent Protection */
-#define OHCI_GET_POTPGT(s) ((s) >> 24)
-#define OHCI_POTPGT_MASK 0xff000000
+#define OHCI_RHD_NDP_MASK __BITS(7,0)
+#define OHCI_RHD_GET_NDP(x) __SHIFTOUT((x), OHCI_RHD_NDP_MASK)
+#define OHCI_RHD_PSM __BIT(8) /* Power Switching Mode */
+#define OHCI_RHD_NPS __BIT(9) /* No Power Switching */
+#define OHCI_RHD_DT __BIT(10) /* Device Type */
+#define OHCI_RHD_OCPM __BIT(11) /* Overcurrent Protection Mode */
+#define OHCI_RHD_NOCP __BIT(12) /* No Overcurrent Protection */
+#define OHCI_RHD_POTPGT_MASK __BITS(31,24)
+#define OHCI_RHD_GET_POTPGT(x) __SHIFTOUT((x), OHCI_RHD_POTPGT_MASK)
+#define OHCI_RHD_SET_POTPGT(x) __SHIFTIN((x), OHCI_RHD_POTPGT_MASK)
#define OHCI_RH_DESCRIPTOR_B 0x4c
#define OHCI_RH_STATUS 0x50
-#define OHCI_LPS 0x00000001 /* Local Power Status */
-#define OHCI_OCI 0x00000002 /* OverCurrent Indicator */
-#define OHCI_DRWE 0x00008000 /* Device Remote Wakeup Enable */
-#define OHCI_LPSC 0x00010000 /* Local Power Status Change */
-#define OHCI_CCIC 0x00020000 /* OverCurrent Indicator Change */
-#define OHCI_CRWE 0x80000000 /* Clear Remote Wakeup Enable */
-#define OHCI_RH_PORT_STATUS(n) (0x50 + (n)*4) /* 1 based indexing */
+#define OHCI_RHS_LPS __BIT(0) /* Local Power Status */
+#define OHCI_RHS_OCI __BIT(1) /* OverCurrent Indicator */
+#define OHCI_RHS_DRWE __BIT(15) /* Device Remote Wakeup Enable */
+#define OHCI_RHS_LPSC __BIT(16) /* Local Power Status Change */
+#define OHCI_RHS_CCIC __BIT(17) /* OverCurrent Indicator Change */
+#define OHCI_RHS_CRWE __BIT(31) /* Clear Remote Wakeup Enable */
+#define OHCI_RH_PORT_STATUS(n) (0x50 + (n)*4) /* 1 based indexing */
#define OHCI_LES (OHCI_PLE | OHCI_IE | OHCI_CLE | OHCI_BLE)
#define OHCI_ALL_INTRS (OHCI_SO | OHCI_WDH | OHCI_SF | OHCI_RD | OHCI_UE | \
@@ -143,27 +155,33 @@ struct ohci_hcca {
typedef struct {
volatile uint32_t ed_flags;
-#define OHCI_ED_GET_FA(s) ((s) & 0x7f)
-#define OHCI_ED_ADDRMASK 0x0000007f
-#define OHCI_ED_SET_FA(s) (s)
-#define OHCI_ED_GET_EN(s) (((s) >> 7) & 0xf)
-#define OHCI_ED_SET_EN(s) ((s) << 7)
-#define OHCI_ED_DIR_MASK 0x00001800
-#define OHCI_ED_DIR_TD 0x00000000
-#define OHCI_ED_DIR_OUT 0x00000800
-#define OHCI_ED_DIR_IN 0x00001000
-#define OHCI_ED_SPEED 0x00002000
-#define OHCI_ED_SKIP 0x00004000
-#define OHCI_ED_FORMAT_GEN 0x00000000
-#define OHCI_ED_FORMAT_ISO 0x00008000
-#define OHCI_ED_GET_MAXP(s) (((s) >> 16) & 0x07ff)
-#define OHCI_ED_SET_MAXP(s) ((s) << 16)
-#define OHCI_ED_MAXPMASK (0x7ff << 16)
+#define OHCI_ED_ADDR_MASK __BITS(6,0)
+#define OHCI_ED_GET_FA(x) __SHIFTOUT((x), OHCI_ED_ADDR_MASK)
+#define OHCI_ED_SET_FA(x) __SHIFTIN((x), OHCI_ED_ADDR_MASK)
+#define OHCI_ED_EN_MASK __BITS(10,7)
+#define OHCI_ED_GET_EN(x) __SHIFTOUT((x), OHCI_ED_EN_MASK)
+#define OHCI_ED_SET_EN(x) __SHIFTIN((x), OHCI_ED_EN_MASK)
+#define OHCI_ED_DIR_MASK __BITS(12,11)
+#define OHCI_ED_GET_DIR(x) __SHIFTOUT((x), OHCI_ED_DIR_MASK)
+#define OHCI_ED_SET_DIR(x) __SHIFTIN((x), OHCI_ED_DIR_MASK)
+#define OHCI_ED_DIR_TD 0
+#define OHCI_ED_DIR_OUT 1
+#define OHCI_ED_DIR_IN 2
+#define OHCI_ED_SPEED __BIT(13)
+#define OHCI_ED_SKIP __BIT(14)
+#define OHCI_ED_FORMAT_MASK __BIT(15)
+#define OHCI_ED_GET_FORMAT(x) __SHIFTOUT((x), OHCI_ED_FORMAT_MASK)
+#define OHCI_ED_SET_FORMAT(x) __SHIFTIN((x), OHCI_ED_FORMAT_MASK)
+#define OHCI_ED_FORMAT_GEN 0
+#define OHCI_ED_FORMAT_ISO 1
+#define OHCI_ED_MAXP_MASK __BITS(26,16)
+#define OHCI_ED_GET_MAXP(x) __SHIFTOUT((x), OHCI_ED_MAXP_MASK)
+#define OHCI_ED_SET_MAXP(x) __SHIFTIN((x), OHCI_ED_MAXP_MASK)
volatile ohci_physaddr_t ed_tailp;
volatile ohci_physaddr_t ed_headp;
-#define OHCI_HALTED 0x00000001
-#define OHCI_TOGGLECARRY 0x00000002
-#define OHCI_HEADMASK 0xfffffffc
+#define OHCI_HALTED __BIT(0)
+#define OHCI_TOGGLECARRY __BIT(1)
+#define OHCI_HEADMASK __BITS(31,2)
volatile ohci_physaddr_t ed_nexted;
} ohci_ed_t;
/* #define OHCI_ED_SIZE 16 */
@@ -171,22 +189,31 @@ typedef struct {
typedef struct {
volatile uint32_t td_flags;
-#define OHCI_TD_R 0x00040000 /* Buffer Rounding */
-#define OHCI_TD_DP_MASK 0x00180000 /* Direction / PID */
-#define OHCI_TD_SETUP 0x00000000
-#define OHCI_TD_OUT 0x00080000
-#define OHCI_TD_IN 0x00100000
-#define OHCI_TD_GET_DI(x) (((x) >> 21) & 7) /* Delay Interrupt */
-#define OHCI_TD_SET_DI(x) ((x) << 21)
-#define OHCI_TD_NOINTR 0x00e00000
-#define OHCI_TD_INTR_MASK 0x00e00000
-#define OHCI_TD_TOGGLE_CARRY 0x00000000
-#define OHCI_TD_TOGGLE_0 0x02000000
-#define OHCI_TD_TOGGLE_1 0x03000000
-#define OHCI_TD_TOGGLE_MASK 0x03000000
-#define OHCI_TD_GET_EC(x) (((x) >> 26) & 3) /* Error Count */
-#define OHCI_TD_GET_CC(x) ((x) >> 28) /* Condition Code */
-#define OHCI_TD_NOCC 0xf0000000
+#define OHCI_TD_R __BIT(18) /* Buffer Rounding */
+#define OHCI_TD_DP_MASK __BITS(20,19) /* Direction / PID */
+#define OHCI_TD_GET_DP(x) __SHIFTOUT((x), OHCI_TD_DP_MASK)
+#define OHCI_TD_SET_DP(x) __SHIFTIN((x), OHCI_TD_DP_MASK)
+#define OHCI_TD_DP_SETUP 0
+#define OHCI_TD_DP_OUT 1
+#define OHCI_TD_DP_IN 2
+#define OHCI_TD_DI_MASK __BITS(23,21) /* Delay Interrupt */
+#define OHCI_TD_GET_DI(x) __SHIFTOUT((x), OHCI_TD_DI_MASK)
+#define OHCI_TD_SET_DI(x) __SHIFTIN((x), OHCI_TD_DI_MASK)
+#define OHCI_TD_NOINTR __SHIFTOUT_MASK(OHCI_TD_DI_MASK)
+#define OHCI_TD_TOGGLE_MASK __BITS(25,24) /* Toggle */
+#define OHCI_TD_GET_TOGGLE(x) __SHIFTOUT((x), OHCI_TD_TOGGLE_MASK)
+#define OHCI_TD_SET_TOGGLE(x) __SHIFTIN((x), OHCI_TD_TOGGLE_MASK)
+#define OHCI_TD_TOGGLE_CARRY 0
+#define OHCI_TD_TOGGLE_0 2
+#define OHCI_TD_TOGGLE_1 3
+#define OHCI_TD_EC_MASK __BITS(27,26) /* Error Count */
+#define OHCI_TD_GET_EC(x) __SHIFTOUT((x), OHCI_TD_EC_MASK)
+#define OHCI_TD_CC_MASK __BITS(31,28) /* Condition Code */
+#define OHCI_TD_GET_CC(x) __SHIFTOUT((x), OHCI_TD_CC_MASK)
+#define OHCI_TD_SET_CC(x) __SHIFTIN((x), OHCI_TD_CC_MASK)
+
+#define OHCI_TD_NOCC __SHIFTOUT_MASK(OHCI_TD_CC_MASK)
+
volatile ohci_physaddr_t td_cbp; /* Current Buffer Pointer */
volatile ohci_physaddr_t td_nexttd; /* Next TD */
volatile ohci_physaddr_t td_be; /* Buffer End */
@@ -197,24 +224,31 @@ typedef struct {
#define OHCI_ITD_NOFFSET 8
typedef struct {
volatile uint32_t itd_flags;
-#define OHCI_ITD_GET_SF(x) ((x) & 0x0000ffff)
-#define OHCI_ITD_SET_SF(x) ((x) & 0xffff)
-#define OHCI_ITD_GET_DI(x) (((x) >> 21) & 7) /* Delay Interrupt */
-#define OHCI_ITD_SET_DI(x) ((x) << 21)
-#define OHCI_ITD_NOINTR 0x00e00000
-#define OHCI_ITD_GET_FC(x) ((((x) >> 24) & 7)+1) /* Frame Count */
-#define OHCI_ITD_SET_FC(x) (((x)-1) << 24)
-#define OHCI_ITD_GET_CC(x) ((x) >> 28) /* Condition Code */
-#define OHCI_ITD_NOCC 0xf0000000
- volatile ohci_physaddr_t itd_bp0; /* Buffer Page 0 */
- volatile ohci_physaddr_t itd_nextitd; /* Next ITD */
- volatile ohci_physaddr_t itd_be; /* Buffer End */
+#define OHCI_ITD_SF_MASK __BITS(15,0)
+#define OHCI_ITD_GET_SF(x) __SHIFTOUT((x), OHCI_ITD_SF_MASK)
+#define OHCI_ITD_SET_SF(x) __SHIFTIN((x), OHCI_ITD_SF_MASK)
+#define OHCI_ITD_DI_MASK __BITS(23,21) /* Delay Interrupt */
+#define OHCI_ITD_GET_DI(x) __SHIFTOUT((x), OHCI_ITD_DI_MASK)
+#define OHCI_ITD_SET_DI(x) __SHIFTIN((x), OHCI_ITD_DI_MASK)
+#define OHCI_ITD_FC_MASK __BITS(26,24) /* Frame Count */
+#define OHCI_ITD_GET_FC(x) (__SHIFTOUT((x), OHCI_ITD_FC_MASK) + 1)
+#define OHCI_ITD_SET_FC(x) __SHIFTIN(((x) - 1), OHCI_ITD_FC_MASK)
+#define OHCI_ITD_CC_MASK __BITS(31,28) /* Condition Code */
+#define OHCI_ITD_GET_CC(x) __SHIFTOUT((x), OHCI_ITD_CC_MASK)
+#define OHCI_ITD_SET_CC(x) __SHIFTIN((x), OHCI_ITD_CC_MASK)
+#define OHCI_ITD_NOCC __SHIFTOUT_MASK(OHCI_ITD_CC_MASK)
+ volatile ohci_physaddr_t itd_bp0; /* Buffer Page 0 */
+ volatile ohci_physaddr_t itd_nextitd; /* Next ITD */
+ volatile ohci_physaddr_t itd_be; /* Buffer End */
volatile uint16_t itd_offset[OHCI_ITD_NOFFSET];/* Buffer offsets */
-#define itd_pswn itd_offset /* Packet Status Word*/
-#define OHCI_ITD_PAGE_SELECT 0x00001000
+#define itd_pswn itd_offset /* Packet Status Word*/
+#define OHCI_ITD_PAGE_SELECT __BIT(12)
#define OHCI_ITD_MK_OFFS(len) (0xe000 | ((len) & 0x1fff))
-#define OHCI_ITD_PSW_LENGTH(x) ((x) & 0xfff) /* Transfer length */
-#define OHCI_ITD_PSW_GET_CC(x) ((x) >> 12) /* Condition Code */
+
+#define OHCI_ITD_PSW_SIZE_MASK __BITS(10,0) /* Transfer length */
+#define OHCI_ITD_PSW_SIZE(x) __SHIFTOUT((x), OHCI_ITD_PSW_SIZE_MASK)
+#define OHCI_ITD_PSW_CC_MASK __BITS(15,12) /* Condition Code */
+#define OHCI_ITD_PSW_GET_CC(x) __SHIFTOUT((x), OHCI_ITD_PSW_CC_MASK)
} ohci_itd_t;
/* #define OHCI_ITD_SIZE 32 */
#define OHCI_ITD_ALIGN 32