There's a lot of magic numbers in otus(4). Here is one which was
easy to fix based on information from the Linux driver. OK?
Index: if_otus.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_otus.c,v
retrieving revision 1.62
diff -u -p -r1.62 if_otus.c
--- if_otus.c 12 Jan 2019 16:12:10 -0000 1.62
+++ if_otus.c 15 Jan 2019 15:13:04 -0000
@@ -2275,7 +2275,7 @@ otus_init(struct ifnet *ifp)
}
/* Start Rx. */
- otus_write(sc, 0x1c3d30, 0x100);
+ otus_write(sc, AR_MAC_REG_DMA_TRIGGER, AR_DMA_TRIGGER_RXQ);
(void)otus_write_barrier(sc);
ifp->if_flags |= IFF_RUNNING;
@@ -2311,7 +2311,7 @@ otus_stop(struct ifnet *ifp)
splx(s);
/* Stop Rx. */
- otus_write(sc, 0x1c3d30, 0);
+ otus_write(sc, AR_MAC_REG_DMA_TRIGGER, 0);
(void)otus_write_barrier(sc);
sc->tx_queued = 0;
Index: if_otusreg.h
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_otusreg.h,v
retrieving revision 1.10
diff -u -p -r1.10 if_otusreg.h
--- if_otusreg.h 8 Apr 2017 02:57:25 -0000 1.10
+++ if_otusreg.h 11 Jan 2019 23:37:39 -0000
@@ -72,6 +72,15 @@
#define AR_MAC_REG_OFDM_PHY_ERRORS (AR_MAC_REG_BASE + 0xcb4)
#define AR_MAC_REG_CCK_PHY_ERRORS (AR_MAC_REG_BASE + 0xcb8)
#define AR_MAC_REG_BCN_HT1 (AR_MAC_REG_BASE + 0xda0)
+#define AR_MAC_REG_DMA_TRIGGER (AR_MAC_REG_BASE + 0xd30)
+
+/* Possible values for register AR_MAC_REG_DMA_TRIGGER. */
+#define AR_DMA_TRIGGER_TXQ0 0x001
+#define AR_DMA_TRIGGER_TXQ1 0x002
+#define AR_DMA_TRIGGER_TXQ2 0x004
+#define AR_DMA_TRIGGER_TXQ3 0x008
+#define AR_DMA_TRIGGER_TXQ4 0x010
+#define AR_DMA_TRIGGER_RXQ 0x100
/* Possible values for register AR_USB_MODE_CTRL. */
#define AR_USB_DS_ENA (1 << 0)