summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/dev/rtwn
diff options
context:
space:
mode:
Diffstat (limited to 'freebsd/sys/dev/rtwn')
-rw-r--r--freebsd/sys/dev/rtwn/rtl8812a/r12a_reg.h10
-rw-r--r--freebsd/sys/dev/rtwn/rtl8812a/usb/r12au.h1
-rw-r--r--freebsd/sys/dev/rtwn/rtl8812a/usb/r12au_init.c33
-rw-r--r--freebsd/sys/dev/rtwn/rtl8821a/usb/r21au.h1
-rw-r--r--freebsd/sys/dev/rtwn/rtl8821a/usb/r21au_attach.c2
-rw-r--r--freebsd/sys/dev/rtwn/rtl8821a/usb/r21au_init.c11
6 files changed, 35 insertions, 23 deletions
diff --git a/freebsd/sys/dev/rtwn/rtl8812a/r12a_reg.h b/freebsd/sys/dev/rtwn/rtl8812a/r12a_reg.h
index 41cc160f..581e7078 100644
--- a/freebsd/sys/dev/rtwn/rtl8812a/r12a_reg.h
+++ b/freebsd/sys/dev/rtwn/rtl8812a/r12a_reg.h
@@ -58,6 +58,16 @@
/* Bits for R92C_LEDCFG2. */
#define R12A_LEDCFG2_ENA 0x20
+/* Bits for R12A_RXDMA_PRO. */
+#define R12A_DMA_MODE 0x02
+#define R12A_BURST_CNT_M 0x0c
+#define R12A_BURST_CNT_S 2
+#define R12A_BURST_SZ_M 0x30
+#define R12A_BURST_SZ_S 4
+#define R12A_BURST_SZ_USB3 0
+#define R12A_BURST_SZ_USB2 1
+#define R12A_BURST_SZ_USB1 2
+
/* Bits for R12A_CCK_CHECK. */
#define R12A_CCK_CHECK_BCN1 0x20
#define R12A_CCK_CHECK_5GHZ 0x80
diff --git a/freebsd/sys/dev/rtwn/rtl8812a/usb/r12au.h b/freebsd/sys/dev/rtwn/rtl8812a/usb/r12au.h
index 55d132c7..1ea08a2d 100644
--- a/freebsd/sys/dev/rtwn/rtl8812a/usb/r12au.h
+++ b/freebsd/sys/dev/rtwn/rtl8812a/usb/r12au.h
@@ -37,6 +37,7 @@
*/
/* r12au_init.c */
void r12au_init_rx_agg(struct rtwn_softc *);
+void r12au_init_burstlen_usb2(struct rtwn_softc *);
void r12au_init_burstlen(struct rtwn_softc *);
void r12au_init_ampdu_fwhw(struct rtwn_softc *);
void r12au_init_ampdu(struct rtwn_softc *);
diff --git a/freebsd/sys/dev/rtwn/rtl8812a/usb/r12au_init.c b/freebsd/sys/dev/rtwn/rtl8812a/usb/r12au_init.c
index 29016424..26a83ce9 100644
--- a/freebsd/sys/dev/rtwn/rtl8812a/usb/r12au_init.c
+++ b/freebsd/sys/dev/rtwn/rtl8812a/usb/r12au_init.c
@@ -74,19 +74,32 @@ r12au_init_rx_agg(struct rtwn_softc *sc)
}
void
+r12au_init_burstlen_usb2(struct rtwn_softc *sc)
+{
+ const uint8_t dma_count = R12A_DMA_MODE | SM(R12A_BURST_CNT, 3);
+
+ if ((rtwn_read_1(sc, R92C_USB_INFO) & 0x30) == 0) {
+ /* Set burst packet length to 512 B. */
+ rtwn_setbits_1(sc, R12A_RXDMA_PRO, R12A_BURST_SZ_M,
+ dma_count | SM(R12A_BURST_SZ, R12A_BURST_SZ_USB2));
+ } else {
+ /* Set burst packet length to 64 B. */
+ rtwn_setbits_1(sc, R12A_RXDMA_PRO, R12A_BURST_SZ_M,
+ dma_count | SM(R12A_BURST_SZ, R12A_BURST_SZ_USB1));
+ }
+}
+
+void
r12au_init_burstlen(struct rtwn_softc *sc)
{
- if (rtwn_read_1(sc, R92C_TYPE_ID + 3) & 0x80) {
- if ((rtwn_read_1(sc, R92C_USB_INFO) & 0x30) == 0) {
- /* Set burst packet length to 512 B. */
- rtwn_setbits_1(sc, R12A_RXDMA_PRO, 0x20, 0x1e);
- } else {
- /* Set burst packet length to 64 B. */
- rtwn_setbits_1(sc, R12A_RXDMA_PRO, 0x10, 0x2e);
- }
- } else { /* USB 3.0 */
+ const uint8_t dma_count = R12A_DMA_MODE | SM(R12A_BURST_CNT, 3);
+
+ if (rtwn_read_1(sc, R92C_TYPE_ID + 3) & 0x80)
+ r12au_init_burstlen_usb2(sc);
+ else { /* USB 3.0 */
/* Set burst packet length to 1 KB. */
- rtwn_setbits_1(sc, R12A_RXDMA_PRO, 0x30, 0x0e);
+ rtwn_setbits_1(sc, R12A_RXDMA_PRO, R12A_BURST_SZ_M,
+ dma_count | SM(R12A_BURST_SZ, R12A_BURST_SZ_USB3));
rtwn_setbits_1(sc, 0xf008, 0x18, 0);
}
diff --git a/freebsd/sys/dev/rtwn/rtl8821a/usb/r21au.h b/freebsd/sys/dev/rtwn/rtl8821a/usb/r21au.h
index 60aa476c..a327d2ad 100644
--- a/freebsd/sys/dev/rtwn/rtl8821a/usb/r21au.h
+++ b/freebsd/sys/dev/rtwn/rtl8821a/usb/r21au.h
@@ -37,7 +37,6 @@
*/
/* r21au_init.c */
void r21au_init_tx_agg(struct rtwn_softc *);
-void r21au_init_burstlen(struct rtwn_softc *);
/* r21au_dfs.c */
void r21au_chan_check(void *, int);
diff --git a/freebsd/sys/dev/rtwn/rtl8821a/usb/r21au_attach.c b/freebsd/sys/dev/rtwn/rtl8821a/usb/r21au_attach.c
index 5cf721c2..976582ae 100644
--- a/freebsd/sys/dev/rtwn/rtl8821a/usb/r21au_attach.c
+++ b/freebsd/sys/dev/rtwn/rtl8821a/usb/r21au_attach.c
@@ -137,7 +137,7 @@ r21a_attach_private(struct rtwn_softc *sc)
rs->rs_fix_spur = rtwn_nop_softc_chan;
rs->rs_set_band_2ghz = r21a_set_band_2ghz;
rs->rs_set_band_5ghz = r21a_set_band_5ghz;
- rs->rs_init_burstlen = r21au_init_burstlen;
+ rs->rs_init_burstlen = r12au_init_burstlen_usb2;
rs->rs_init_ampdu_fwhw = r21a_init_ampdu_fwhw;
rs->rs_crystalcap_write = r21a_crystalcap_write;
#ifndef RTWN_WITHOUT_UCODE
diff --git a/freebsd/sys/dev/rtwn/rtl8821a/usb/r21au_init.c b/freebsd/sys/dev/rtwn/rtl8821a/usb/r21au_init.c
index 31366e59..838e1b50 100644
--- a/freebsd/sys/dev/rtwn/rtl8821a/usb/r21au_init.c
+++ b/freebsd/sys/dev/rtwn/rtl8821a/usb/r21au_init.c
@@ -72,14 +72,3 @@ r21au_init_tx_agg(struct rtwn_softc *sc)
rtwn_write_1(sc, R21A_DWBCN1_CTRL, uc->tx_agg_desc_num << 1);
}
-void
-r21au_init_burstlen(struct rtwn_softc *sc)
-{
- if ((rtwn_read_1(sc, R92C_USB_INFO) & 0x30) == 0) {
- /* Set burst packet length to 512 B. */
- rtwn_setbits_1(sc, R12A_RXDMA_PRO, 0x20, 0x1e);
- } else {
- /* Set burst packet length to 64 B. */
- rtwn_setbits_1(sc, R12A_RXDMA_PRO, 0x10, 0x2e);
- }
-}