Module Name:    src
Committed By:   christos
Date:           Fri Jul  8 01:24:53 UTC 2016

Modified Files:
        src/sys/dev/ic: rt2860.c rt2860reg.h rt2860var.h

Log Message:
more fixes.


To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.20 src/sys/dev/ic/rt2860.c
cvs rdiff -u -r1.4 -r1.5 src/sys/dev/ic/rt2860reg.h
cvs rdiff -u -r1.2 -r1.3 src/sys/dev/ic/rt2860var.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/ic/rt2860.c
diff -u src/sys/dev/ic/rt2860.c:1.19 src/sys/dev/ic/rt2860.c:1.20
--- src/sys/dev/ic/rt2860.c:1.19	Wed Jul  6 22:18:05 2016
+++ src/sys/dev/ic/rt2860.c	Thu Jul  7 21:24:53 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: rt2860.c,v 1.19 2016/07/07 02:18:05 christos Exp $	*/
+/*	$NetBSD: rt2860.c,v 1.20 2016/07/08 01:24:53 christos Exp $	*/
 /*	$OpenBSD: rt2860.c,v 1.90 2016/04/13 10:49:26 mpi Exp $	*/
 /*	$FreeBSD: head/sys/dev/ral/rt2860.c 297793 2016-04-10 23:07:00Z pfg $ */
 
@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rt2860.c,v 1.19 2016/07/07 02:18:05 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rt2860.c,v 1.20 2016/07/08 01:24:53 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/sockio.h>
@@ -63,10 +63,13 @@ __KERNEL_RCSID(0, "$NetBSD: rt2860.c,v 1
 
 #include <dev/pci/pcidevs.h>
 
+#ifndef RAL_DEBUG
+#define RAL_DEBUG
+#endif
 #ifdef RAL_DEBUG
 #define DPRINTF(x)	do { if (rt2860_debug > 0) printf x; } while (0)
 #define DPRINTFN(n, x)	do { if (rt2860_debug >= (n)) printf x; } while (0)
-int rt2860_debug = 4;
+int rt2860_debug = 0;
 #else
 #define DPRINTF(x)
 #define DPRINTFN(n, x)
@@ -92,6 +95,7 @@ static struct	ieee80211_node *rt2860_nod
 static int	rt2860_media_change(struct ifnet *);
 static void	rt2860_iter_func(void *, struct ieee80211_node *);
 static void	rt2860_updatestats(struct rt2860_softc *);
+static void	rt2860_update_promisc(struct ifnet *);
 static void	rt2860_newassoc(struct ieee80211_node *,
 		    int);
 #ifdef notyet
@@ -142,6 +146,7 @@ static void	rt2860_set_macaddr(struct rt
 static void	rt2860_updateslot(struct ifnet *);
 static void	rt2860_updateprot(struct ieee80211com *);
 static int	rt2860_updateedca(struct ieee80211com *);
+
 #ifdef HW_CRYPTO
 static int	rt2860_set_key(struct ieee80211com *, 
 		    const struct ieee80211_key *, const uint8_t *);
@@ -149,7 +154,7 @@ static int	rt2860_delete_key(struct ieee
 		    const struct ieee80211_key *);
 #endif
 static int8_t	rt2860_rssi2dbm(struct rt2860_softc *, uint8_t, uint8_t);
-static const char *	rt2860_get_rf(uint8_t);
+static const char *	rt2860_get_rf(uint32_t);
 static int	rt2860_read_eeprom(struct rt2860_softc *);
 static int	rt2860_bbp_init(struct rt2860_softc *);
 static int	rt5390_bbp_init(struct rt2860_softc *);
@@ -404,11 +409,11 @@ rt2860_attachhook(device_t self)
 	bpf_attach2(ifp, DLT_IEEE802_11_RADIO,
 	    sizeof (struct ieee80211_frame) + 64, &sc->sc_drvbpf);
 
-	sc->sc_rxtap_len = sizeof sc->sc_rxtapu;
+	sc->sc_rxtap_len = roundup(sizeof(sc->sc_rxtap), sizeof(u_int32_t));
 	sc->sc_rxtap.wr_ihdr.it_len = htole16(sc->sc_rxtap_len);
 	sc->sc_rxtap.wr_ihdr.it_present = htole32(RT2860_RX_RADIOTAP_PRESENT);
 
-	sc->sc_txtap_len = sizeof sc->sc_txtapu;
+	sc->sc_txtap_len = roundup(sizeof(sc->sc_txtap), sizeof(u_int32_t));
 	sc->sc_txtap.wt_ihdr.it_len = htole16(sc->sc_txtap_len);
 	sc->sc_txtap.wt_ihdr.it_present = htole32(RT2860_TX_RADIOTAP_PRESENT);
 
@@ -821,9 +826,9 @@ rt2860_free_rx_ring(struct rt2860_softc 
 static struct ieee80211_node *
 rt2860_node_alloc(struct ieee80211_node_table *nt)
 {
-	struct rt2860_node *rn = 
-	    malloc(sizeof (struct rt2860_node), M_DEVBUF, M_NOWAIT | M_ZERO);
-	return (rn) ? &rn->ni : NULL;
+	struct rt2860_node *rn = malloc(sizeof(*rn), M_80211_NODE,
+	    M_NOWAIT | M_ZERO);
+	return rn ? &rn->ni : NULL;
 }
 
 static int
@@ -1006,7 +1011,7 @@ rt2860_newstate(struct ieee80211com *ic,
 		break;
 
 	case IEEE80211_S_SCAN:
-		rt2860_switch_chan(sc, ic->ic_bss->ni_chan);
+		rt2860_switch_chan(sc, ic->ic_curchan);
 		if (ostate != IEEE80211_S_SCAN)
 			rt2860_set_gp_timer(sc, 150);
 		break;
@@ -1014,12 +1019,12 @@ rt2860_newstate(struct ieee80211com *ic,
 	case IEEE80211_S_AUTH:
 	case IEEE80211_S_ASSOC:
 		rt2860_set_gp_timer(sc, 0);
-		rt2860_switch_chan(sc, ic->ic_bss->ni_chan);
+		rt2860_switch_chan(sc, ic->ic_curchan);
 		break;
 
 	case IEEE80211_S_RUN:
 		rt2860_set_gp_timer(sc, 0);
-		rt2860_switch_chan(sc, ic->ic_bss->ni_chan);
+		rt2860_switch_chan(sc, ic->ic_curchan);
 
 		if (ic->ic_opmode != IEEE80211_M_MONITOR) {
 			rt2860_updateslot(ic->ic_ifp);
@@ -1308,15 +1313,6 @@ rt2860_rx_intr(struct rt2860_softc *sc)
 			goto skip;
 		}
 
-#ifdef HW_CRYPTO
-		if (__predict_false(rxd->flags & htole32(RT2860_RX_MICERR))) {
-			/* report MIC failures to net80211 for TKIP */
-			ieee80211_notify_michael_failure(ic, wh, 0/* XXX */);
-			DPRINTF(("error2 %#x\n", rxd->flags));
-			ifp->if_ierrors++;
-			goto skip;
-		}
-#endif
 
 		MGETHDR(m1, M_DONTWAIT, MT_DATA);
 		if (__predict_false(m1 == NULL)) {
@@ -1388,6 +1384,15 @@ rt2860_rx_intr(struct rt2860_softc *sc)
 			wh = mtod(m, struct ieee80211_frame *);
 		}
 
+#ifdef HW_CRYPTO
+		if (__predict_false(rxd->flags & htole32(RT2860_RX_MICERR))) {
+			/* report MIC failures to net80211 for TKIP */
+			ieee80211_notify_michael_failure(ic, wh, 0/* XXX */);
+			DPRINTF(("error2 %#x\n", rxd->flags));
+			ifp->if_ierrors++;
+			goto skip;
+		}
+#endif
 		ant = rt2860_maxrssi_chain(sc, rxwi);
 		rssi = rxwi->rssi[ant];
 
@@ -1573,6 +1578,19 @@ rt2860_tx(struct rt2860_softc *sc, struc
 	data = SLIST_FIRST(&sc->data_pool);
 
 	wh = mtod(m, struct ieee80211_frame *);
+#if 0
+	if (wh->i_fc[1] & IEEE80211_FC1_WEP) {
+		struct ieee80211_key *k = ieee80211_crypto_encap(ic, ni, m);
+		if (k == NULL) {
+			m_freem(m);
+			return ENOBUFS;
+		}
+
+		/* packet header may have moved, reset our local pointer */
+		wh = mtod(m, struct ieee80211_frame *);
+	}
+#endif
+
 	hdrlen = ieee80211_hdrspace(ic, wh);
 	type = wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK;
 
@@ -1705,7 +1723,8 @@ rt2860_tx(struct rt2860_softc *sc, struc
 	/* first segment is TXWI + 802.11 header */
 	txd = &ring->txd[ring->cur];
 	txd->sdp0 = htole32(data->paddr);
-	txd->sdl0 = htole16(sizeof (struct rt2860_txwi) + hdrlen);
+	int pad = (hdrlen + 3) & ~3;
+	txd->sdl0 = htole16(sizeof (struct rt2860_txwi) + pad);
 	txd->flags = qsel;
 
 	/* setup payload segments */
@@ -1863,6 +1882,7 @@ rt2860_ioctl(struct ifnet *ifp, u_long c
 			break;
 		switch (ifp->if_flags & (IFF_UP|IFF_RUNNING)) {
 		case IFF_UP|IFF_RUNNING:
+			rt2860_update_promisc(ifp);
 			break;
 		case IFF_UP:
 			rt2860_init(ifp);
@@ -2846,10 +2866,12 @@ rt3090_rf_setup(struct rt2860_softc *sc)
 		RAL_WRITE(sc, RT2860_TX_SW_CFG2, 0);
 
 	/* initialize RF registers from ROM */
-	for (i = 0; i < 10; i++) {
-		if (sc->rf[i].reg == 0 || sc->rf[i].reg == 0xff)
-			continue;
-		rt3090_rf_write(sc, sc->rf[i].reg, sc->rf[i].val);
+	if (sc->mac_ver < 0x5390) {
+		for (i = 0; i < 10; i++) {
+			if (sc->rf[i].reg == 0 || sc->rf[i].reg == 0xff)
+				continue;
+			rt3090_rf_write(sc, sc->rf[i].reg, sc->rf[i].val);
+		}
 	}
 }
 
@@ -2941,6 +2963,19 @@ rt2860_updateprot(struct ieee80211com *i
 	RAL_WRITE(sc, RT2860_OFDM_PROT_CFG, tmp);
 }
 
+static void
+rt2860_update_promisc(struct ifnet *ifp)
+{
+	struct rt2860_softc *sc = ifp->if_softc;
+	uint32_t tmp;
+
+	tmp = RAL_READ(sc, RT2860_RX_FILTR_CFG);
+	tmp &= ~RT2860_DROP_NOT_MYBSS;
+	if (!(ifp->if_flags & IFF_PROMISC))
+		tmp |= RT2860_DROP_NOT_MYBSS;
+	RAL_WRITE(sc, RT2860_RX_FILTR_CFG, tmp);
+}
+
 static int
 rt2860_updateedca(struct ieee80211com *ic)
 {
@@ -2993,11 +3028,6 @@ rt2860_set_key(struct ieee80211com *ic, 
 	uint8_t mode, wcid, iv[8];
 	struct ieee80211_key *k = __UNCONST(ck); /* XXX */
 
-	/* defer setting of WEP keys until interface is brought up */
-	if ((ic->ic_if.if_flags & (IFF_UP | IFF_RUNNING)) !=
-	    (IFF_UP | IFF_RUNNING))
-		return 0;
-
 	/* map net80211 cipher to RT2860 security mode */
 	switch (k->wk_cipher->ic_cipher) {
 	case IEEE80211_CIPHER_WEP:
@@ -3084,7 +3114,7 @@ rt2860_set_key(struct ieee80211com *ic, 
 		attr = (attr & ~0xf) | (mode << 1) | RT2860_RX_PKEY_EN;
 		RAL_WRITE(sc, RT2860_WCID_ATTR(wcid), attr);
 	}
-	return 1;
+	return 0;
 }
 
 static int
@@ -3158,7 +3188,7 @@ b4inc(uint32_t b32, int8_t delta)
 }
 
 static const char *
-rt2860_get_rf(uint8_t rev)
+rt2860_get_rf(uint32_t rev)
 {
 	switch (rev) {
 	case RT2860_RF_2820:	return "RT2820";
@@ -3172,6 +3202,7 @@ rt2860_get_rf(uint8_t rev)
 	case RT3070_RF_3052:	return "RT3052";
 	case RT3070_RF_3320:	return "RT3320";
 	case RT3070_RF_3053:	return "RT3053";
+	case RT5390_RF_5360:	return "RT5360";
 	case RT5390_RF_5390:	return "RT5390";
 	default:		return "unknown";
 	}
@@ -3254,7 +3285,11 @@ rt2860_read_eeprom(struct rt2860_softc *
 
 	/* read RF information */
 	val = rt2860_srom_read(sc, RT2860_EEPROM_ANTENNA);
-	if (val == 0xffff) {
+	if (sc->mac_ver >= 0x5390) {
+		sc->rf_rev = rt2860_srom_read(sc, RT2860_EEPROM_CHIPID);
+		sc->ntxchains = (val >> 4) & 0xf;
+		sc->nrxchains = val & 0xf;
+	} else if (val == 0xffff) {
 		DPRINTF(("invalid EEPROM antenna info, using default\n"));
 		if (sc->mac_ver == 0x3593) {
 			/* default to RF3053 3T3R */
@@ -3274,13 +3309,8 @@ rt2860_read_eeprom(struct rt2860_softc *
 		}
 	} else {
 		sc->rf_rev = (val >> 8) & 0xf;
-		if (sc->mac_ver >= 0x5390) {
-			sc->ntxchains = (sc->mac_ver == 0x5392) ? 2 : 1;
-			sc->nrxchains = (sc->mac_ver == 0x5392) ? 2 : 1;
-		} else {
-			sc->ntxchains = (val >> 4) & 0xf;
-			sc->nrxchains = val & 0xf;
-		}
+		sc->ntxchains = (val >> 4) & 0xf;
+		sc->nrxchains = val & 0xf;
 	}
 	DPRINTF(("EEPROM RF rev=0x%02x chains=%dT%dR\n",
 	    sc->rf_rev, sc->ntxchains, sc->nrxchains));
@@ -3295,7 +3325,7 @@ rt2860_read_eeprom(struct rt2860_softc *
 		sc->ext_5ghz_lna = (val >> 3) & 1;
 		sc->ext_2ghz_lna = (val >> 2) & 1;
 		/* check if RF supports automatic Tx access gain control */
-		sc->calib_2ghz = sc->calib_5ghz = 0; /* XXX (val >> 1) & 1 */;
+		sc->calib_2ghz = sc->calib_5ghz = 0; /* XXX (val >> 1) & 1 */
 		/* check if we have a hardware radio switch */
 		sc->rfswitch = val & 1;
 	}
@@ -3332,7 +3362,7 @@ rt2860_read_eeprom(struct rt2860_softc *
 			sc->txpow1[i] = 5;
 		if (sc->mac_ver != 0x5390) {
 			if (sc->txpow2[i] < 0 || 
-			    sc->txpow2[i] > ((sc->mac_ver >= 0x5390) ? 39 : 31))
+			    sc->txpow2[i] > ((sc->mac_ver >= 0x5392) ? 39 : 31))
 				sc->txpow2[i] = 5;
 		}
 		DPRINTF(("chan %d: power1=%d, power2=%d\n",
@@ -3664,9 +3694,16 @@ rt2860_init(struct ifnet *ifp)
 
 	/* disable DMA */
 	tmp = RAL_READ(sc, RT2860_WPDMA_GLO_CFG);
-	tmp &= 0xff0;
+	tmp &= ~(RT2860_RX_DMA_BUSY | RT2860_RX_DMA_EN | RT2860_TX_DMA_BUSY |
+	    RT2860_TX_DMA_EN);
+	tmp |= RT2860_TX_WB_DDONE;
 	RAL_WRITE(sc, RT2860_WPDMA_GLO_CFG, tmp);
 
+	/* reset DMA indexes */
+	RAL_WRITE(sc, RT2860_WPDMA_RST_IDX, RT2860_RST_DRX_IDX0 |
+	    RT2860_RST_DTX_IDX5 | RT2860_RST_DTX_IDX4 | RT2860_RST_DTX_IDX3 |
+	    RT2860_RST_DTX_IDX2 | RT2860_RST_DTX_IDX1 | RT2860_RST_DTX_IDX0);
+
 	/* PBF hardware reset */
 	RAL_WRITE(sc, RT2860_SYS_CTRL, 0xe1f);
 	RAL_BARRIER_WRITE(sc);
@@ -3701,7 +3738,9 @@ rt2860_init(struct ifnet *ifp)
 		rt2860_stop(ifp, 1);
 		return ETIMEDOUT;
 	}
-	tmp &= 0xff0;
+	tmp &= ~(RT2860_RX_DMA_BUSY | RT2860_RX_DMA_EN | RT2860_TX_DMA_BUSY |
+	    RT2860_TX_DMA_EN);
+	tmp |= RT2860_TX_WB_DDONE;
 	RAL_WRITE(sc, RT2860_WPDMA_GLO_CFG, tmp);
 
 	/* reset Rx ring and all 6 Tx rings */
@@ -3818,7 +3857,8 @@ rt2860_init(struct ifnet *ifp)
 	/* select Main antenna for 1T1R devices */
 	if (sc->rf_rev == RT3070_RF_2020 ||
 	    sc->rf_rev == RT3070_RF_3020 ||
-	    sc->rf_rev == RT3070_RF_3320)
+	    sc->rf_rev == RT3070_RF_3320 ||
+	    sc->mac_ver == 0x5390)
 		rt3090_set_rx_antenna(sc, 0);
 
 	/* send LEDs operating mode to microcontroller */
@@ -4041,15 +4081,25 @@ rt3090_set_rx_antenna(struct rt2860_soft
 	uint32_t tmp;
 
 	if (aux) {
-		tmp = RAL_READ(sc, RT2860_PCI_EECTRL);
-		RAL_WRITE(sc, RT2860_PCI_EECTRL, tmp & ~RT2860_C);
-		tmp = RAL_READ(sc, RT2860_GPIO_CTRL);
-		RAL_WRITE(sc, RT2860_GPIO_CTRL, (tmp & ~0x0808) | 0x08);
+		if (sc->mac_ver == 0x5390) {
+			rt2860_mcu_bbp_write(sc, 152, 
+			    rt2860_mcu_bbp_read(sc, 152) & ~0x80);
+		} else {
+			tmp = RAL_READ(sc, RT2860_PCI_EECTRL);
+			RAL_WRITE(sc, RT2860_PCI_EECTRL, tmp & ~RT2860_C);
+			tmp = RAL_READ(sc, RT2860_GPIO_CTRL);
+			RAL_WRITE(sc, RT2860_GPIO_CTRL, (tmp & ~0x0808) | 0x08);
+		}
 	} else {
-		tmp = RAL_READ(sc, RT2860_PCI_EECTRL);
-		RAL_WRITE(sc, RT2860_PCI_EECTRL, tmp | RT2860_C);
-		tmp = RAL_READ(sc, RT2860_GPIO_CTRL);
-		RAL_WRITE(sc, RT2860_GPIO_CTRL, tmp & ~0x0808);
+		if (sc->mac_ver == 0x5390) {
+			rt2860_mcu_bbp_write(sc, 152, 
+			    rt2860_mcu_bbp_read(sc, 152) | 0x80);
+		} else {
+			tmp = RAL_READ(sc, RT2860_PCI_EECTRL);
+			RAL_WRITE(sc, RT2860_PCI_EECTRL, tmp | RT2860_C);
+			tmp = RAL_READ(sc, RT2860_GPIO_CTRL);
+			RAL_WRITE(sc, RT2860_GPIO_CTRL, tmp & ~0x0808);
+		}
 	}
 }
 
@@ -4060,6 +4110,7 @@ rt2860_switch_chan(struct rt2860_softc *
 	u_int chan, group;
 
 	chan = ieee80211_chan2ieee(ic, c);
+	DPRINTF(("switch channel %u\n", chan));
 	if (chan == 0 || chan == IEEE80211_CHAN_ANY)
 		return;
 

Index: src/sys/dev/ic/rt2860reg.h
diff -u src/sys/dev/ic/rt2860reg.h:1.4 src/sys/dev/ic/rt2860reg.h:1.5
--- src/sys/dev/ic/rt2860reg.h:1.4	Wed Jul  6 21:24:16 2016
+++ src/sys/dev/ic/rt2860reg.h	Thu Jul  7 21:24:53 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: rt2860reg.h,v 1.4 2016/07/07 01:24:16 christos Exp $	*/
+/*	$NetBSD: rt2860reg.h,v 1.5 2016/07/08 01:24:53 christos Exp $	*/
 /*	$OpenBSD: rt2860reg.h,v 1.32 2014/05/24 10:10:17 stsp Exp $	*/
 
 /*-
@@ -18,6 +18,8 @@
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
+#define RT2860_NOISE_FLOOR		-95
+
 /* PCI registers */
 #define RT2860_PCI_CFG			0x0000
 #define RT2860_PCI_EECTRL		0x0004
@@ -214,50 +216,59 @@
 
 
 /* possible flags for RT2860_PCI_CFG */
-#define RT2860_PCI_CFG_USB	(1 << 17)
-#define RT2860_PCI_CFG_PCI	(1 << 16)
+#define RT2860_PCI_CFG_USB	(1U << 17)
+#define RT2860_PCI_CFG_PCI	(1U << 16)
 
 /* possible flags for register RT2860_PCI_EECTRL */
-#define RT2860_C	(1 << 0)
-#define RT2860_S	(1 << 1)
-#define RT2860_D	(1 << 2)
+#define RT2860_C	(1U << 0)
+#define RT2860_S	(1U << 1)
+#define RT2860_D	(1U << 2)
 #define RT2860_SHIFT_D	2
-#define RT2860_Q	(1 << 3)
+#define RT2860_Q	(1U << 3)
 #define RT2860_SHIFT_Q	3
 
 /* possible flags for registers INT_STATUS/INT_MASK */
-#define RT2860_TX_COHERENT	(1 << 17)
-#define RT2860_RX_COHERENT	(1 << 16)
-#define RT2860_MAC_INT_4	(1 << 15)
-#define RT2860_MAC_INT_3	(1 << 14)
-#define RT2860_MAC_INT_2	(1 << 13)
-#define RT2860_MAC_INT_1	(1 << 12)
-#define RT2860_MAC_INT_0	(1 << 11)
-#define RT2860_TX_RX_COHERENT	(1 << 10)
-#define RT2860_MCU_CMD_INT	(1 <<  9)
-#define RT2860_TX_DONE_INT5	(1 <<  8)
-#define RT2860_TX_DONE_INT4	(1 <<  7)
-#define RT2860_TX_DONE_INT3	(1 <<  6)
-#define RT2860_TX_DONE_INT2	(1 <<  5)
-#define RT2860_TX_DONE_INT1	(1 <<  4)
-#define RT2860_TX_DONE_INT0	(1 <<  3)
-#define RT2860_RX_DONE_INT	(1 <<  2)
-#define RT2860_TX_DLY_INT	(1 <<  1)
-#define RT2860_RX_DLY_INT	(1 <<  0)
+#define RT2860_TX_COHERENT	(1U << 17)
+#define RT2860_RX_COHERENT	(1U << 16)
+#define RT2860_MAC_INT_4	(1U << 15)
+#define RT2860_MAC_INT_3	(1U << 14)
+#define RT2860_MAC_INT_2	(1U << 13)
+#define RT2860_MAC_INT_1	(1U << 12)
+#define RT2860_MAC_INT_0	(1U << 11)
+#define RT2860_TX_RX_COHERENT	(1U << 10)
+#define RT2860_MCU_CMD_INT	(1U <<  9)
+#define RT2860_TX_DONE_INT5	(1U <<  8)
+#define RT2860_TX_DONE_INT4	(1U <<  7)
+#define RT2860_TX_DONE_INT3	(1U <<  6)
+#define RT2860_TX_DONE_INT2	(1U <<  5)
+#define RT2860_TX_DONE_INT1	(1U <<  4)
+#define RT2860_TX_DONE_INT0	(1U <<  3)
+#define RT2860_RX_DONE_INT	(1U <<  2)
+#define RT2860_TX_DLY_INT	(1U <<  1)
+#define RT2860_RX_DLY_INT	(1U <<  0)
 
 /* possible flags for register WPDMA_GLO_CFG */
 #define RT2860_HDR_SEG_LEN_SHIFT	8
-#define RT2860_BIG_ENDIAN		(1 << 7)
-#define RT2860_TX_WB_DDONE		(1 << 6)
+#define RT2860_BIG_ENDIAN		(1U << 7)
+#define RT2860_TX_WB_DDONE		(1U << 6)
 #define RT2860_WPDMA_BT_SIZE_SHIFT	4
 #define RT2860_WPDMA_BT_SIZE16		0
 #define RT2860_WPDMA_BT_SIZE32		1
 #define RT2860_WPDMA_BT_SIZE64		2
 #define RT2860_WPDMA_BT_SIZE128		3
-#define RT2860_RX_DMA_BUSY		(1 << 3)
-#define RT2860_RX_DMA_EN		(1 << 2)
-#define RT2860_TX_DMA_BUSY		(1 << 1)
-#define RT2860_TX_DMA_EN		(1 << 0)
+#define RT2860_RX_DMA_BUSY		(1U << 3)
+#define RT2860_RX_DMA_EN		(1U << 2)
+#define RT2860_TX_DMA_BUSY		(1U << 1)
+#define RT2860_TX_DMA_EN		(1U << 0)
+
+/* flags for register WPDMA_RST_IDX */
+#define RT2860_RST_DRX_IDX0		(1U << 16)
+#define RT2860_RST_DTX_IDX5		(1U <<  5)
+#define RT2860_RST_DTX_IDX4		(1U <<  4)
+#define RT2860_RST_DTX_IDX3		(1U <<  3)
+#define RT2860_RST_DTX_IDX2		(1U <<  2)
+#define RT2860_RST_DTX_IDX1		(1U <<  1)
+#define RT2860_RST_DTX_IDX0		(1U <<  0)
 
 /* possible flags for register DELAY_INT_CFG */
 #define RT2860_TXDLY_INT_EN		(1U << 31)
@@ -286,25 +297,25 @@
 #define RT2860_USB_RX_AGG_TO(x)		((x) & 0xff)	/* in unit of 33ns */
 
 /* possible flags for register US_CYC_CNT */
-#define RT2860_TEST_EN		(1 << 24)
+#define RT2860_TEST_EN		(1U << 24)
 #define RT2860_TEST_SEL_SHIFT	16
-#define RT2860_BT_MODE_EN	(1 <<  8)
+#define RT2860_BT_MODE_EN	(1U <<  8)
 #define RT2860_US_CYC_CNT_SHIFT	0
 
 /* possible flags for register SYS_CTRL */
-#define RT2860_HST_PM_SEL	(1 << 16)
-#define RT2860_CAP_MODE		(1 << 14)
-#define RT2860_PME_OEN		(1 << 13)
-#define RT2860_CLKSELECT	(1 << 12)
-#define RT2860_PBF_CLK_EN	(1 << 11)
-#define RT2860_MAC_CLK_EN	(1 << 10)
-#define RT2860_DMA_CLK_EN	(1 <<  9)
-#define RT2860_MCU_READY	(1 <<  7)
-#define RT2860_ASY_RESET	(1 <<  4)
-#define RT2860_PBF_RESET	(1 <<  3)
-#define RT2860_MAC_RESET	(1 <<  2)
-#define RT2860_DMA_RESET	(1 <<  1)
-#define RT2860_MCU_RESET	(1 <<  0)
+#define RT2860_HST_PM_SEL	(1U << 16)
+#define RT2860_CAP_MODE		(1U << 14)
+#define RT2860_PME_OEN		(1U << 13)
+#define RT2860_CLKSELECT	(1U << 12)
+#define RT2860_PBF_CLK_EN	(1U << 11)
+#define RT2860_MAC_CLK_EN	(1U << 10)
+#define RT2860_DMA_CLK_EN	(1U <<  9)
+#define RT2860_MCU_READY	(1U <<  7)
+#define RT2860_ASY_RESET	(1U <<  4)
+#define RT2860_PBF_RESET	(1U <<  3)
+#define RT2860_MAC_RESET	(1U <<  2)
+#define RT2860_DMA_RESET	(1U <<  1)
+#define RT2860_MCU_RESET	(1U <<  0)
 
 /* possible values for register HOST_CMD */
 #define RT2860_MCU_CMD_SLEEP	0x30
@@ -322,48 +333,48 @@
 /* possible flags for register PBF_CFG */
 #define RT2860_TX1Q_NUM_SHIFT	21
 #define RT2860_TX2Q_NUM_SHIFT	16
-#define RT2860_NULL0_MODE	(1 << 15)
-#define RT2860_NULL1_MODE	(1 << 14)
-#define RT2860_RX_DROP_MODE	(1 << 13)
-#define RT2860_TX0Q_MANUAL	(1 << 12)
-#define RT2860_TX1Q_MANUAL	(1 << 11)
-#define RT2860_TX2Q_MANUAL	(1 << 10)
-#define RT2860_RX0Q_MANUAL	(1 <<  9)
-#define RT2860_HCCA_EN		(1 <<  8)
-#define RT2860_TX0Q_EN		(1 <<  4)
-#define RT2860_TX1Q_EN		(1 <<  3)
-#define RT2860_TX2Q_EN		(1 <<  2)
-#define RT2860_RX0Q_EN		(1 <<  1)
+#define RT2860_NULL0_MODE	(1U << 15)
+#define RT2860_NULL1_MODE	(1U << 14)
+#define RT2860_RX_DROP_MODE	(1U << 13)
+#define RT2860_TX0Q_MANUAL	(1U << 12)
+#define RT2860_TX1Q_MANUAL	(1U << 11)
+#define RT2860_TX2Q_MANUAL	(1U << 10)
+#define RT2860_RX0Q_MANUAL	(1U <<  9)
+#define RT2860_HCCA_EN		(1U <<  8)
+#define RT2860_TX0Q_EN		(1U <<  4)
+#define RT2860_TX1Q_EN		(1U <<  3)
+#define RT2860_TX2Q_EN		(1U <<  2)
+#define RT2860_RX0Q_EN		(1U <<  1)
 
 /* possible flags for register BUF_CTRL */
-#define RT2860_WRITE_TXQ(qid)	(1 << (11 - (qid)))
-#define RT2860_NULL0_KICK	(1 << 7)
-#define RT2860_NULL1_KICK	(1 << 6)
-#define RT2860_BUF_RESET	(1 << 5)
-#define RT2860_READ_TXQ(qid)	(1 << (3 - (qid))
-#define RT2860_READ_RX0Q	(1 << 0)
+#define RT2860_WRITE_TXQ(qid)	(1U << (11 - (qid)))
+#define RT2860_NULL0_KICK	(1U << 7)
+#define RT2860_NULL1_KICK	(1U << 6)
+#define RT2860_BUF_RESET	(1U << 5)
+#define RT2860_READ_TXQ(qid)	(1U << (3 - (qid))
+#define RT2860_READ_RX0Q	(1U << 0)
 
 /* possible flags for registers MCU_INT_STA/MCU_INT_ENA */
-#define RT2860_MCU_MAC_INT_8	(1 << 24)
-#define RT2860_MCU_MAC_INT_7	(1 << 23)
-#define RT2860_MCU_MAC_INT_6	(1 << 22)
-#define RT2860_MCU_MAC_INT_4	(1 << 20)
-#define RT2860_MCU_MAC_INT_3	(1 << 19)
-#define RT2860_MCU_MAC_INT_2	(1 << 18)
-#define RT2860_MCU_MAC_INT_1	(1 << 17)
-#define RT2860_MCU_MAC_INT_0	(1 << 16)
-#define RT2860_DTX0_INT		(1 << 11)
-#define RT2860_DTX1_INT		(1 << 10)
-#define RT2860_DTX2_INT		(1 <<  9)
-#define RT2860_DRX0_INT		(1 <<  8)
-#define RT2860_HCMD_INT		(1 <<  7)
-#define RT2860_N0TX_INT		(1 <<  6)
-#define RT2860_N1TX_INT		(1 <<  5)
-#define RT2860_BCNTX_INT	(1 <<  4)
-#define RT2860_MTX0_INT		(1 <<  3)
-#define RT2860_MTX1_INT		(1 <<  2)
-#define RT2860_MTX2_INT		(1 <<  1)
-#define RT2860_MRX0_INT		(1 <<  0)
+#define RT2860_MCU_MAC_INT_8	(1U << 24)
+#define RT2860_MCU_MAC_INT_7	(1U << 23)
+#define RT2860_MCU_MAC_INT_6	(1U << 22)
+#define RT2860_MCU_MAC_INT_4	(1U << 20)
+#define RT2860_MCU_MAC_INT_3	(1U << 19)
+#define RT2860_MCU_MAC_INT_2	(1U << 18)
+#define RT2860_MCU_MAC_INT_1	(1U << 17)
+#define RT2860_MCU_MAC_INT_0	(1U << 16)
+#define RT2860_DTX0_INT		(1U << 11)
+#define RT2860_DTX1_INT		(1U << 10)
+#define RT2860_DTX2_INT		(1U <<  9)
+#define RT2860_DRX0_INT		(1U <<  8)
+#define RT2860_HCMD_INT		(1U <<  7)
+#define RT2860_N0TX_INT		(1U <<  6)
+#define RT2860_N1TX_INT		(1U <<  5)
+#define RT2860_BCNTX_INT	(1U <<  4)
+#define RT2860_MTX0_INT		(1U <<  3)
+#define RT2860_MTX1_INT		(1U <<  2)
+#define RT2860_MTX2_INT		(1U <<  1)
+#define RT2860_MRX0_INT		(1U <<  0)
 
 /* possible flags for register TXRXQ_PCNT */
 #define RT2860_RX0Q_PCNT_MASK	0xff000000
@@ -379,8 +390,8 @@
 #define RT2860_START_ADDR_SHIFT		0
 
 /* possible flags for register RF_CSR_CFG */
-#define RT3070_RF_KICK		(1 << 17)
-#define RT3070_RF_WRITE		(1 << 16)
+#define RT3070_RF_KICK		(1U << 17)
+#define RT3070_RF_WRITE		(1U << 16)
 
 /* possible flags for register EFUSE_CTRL */
 #define RT3070_SEL_EFUSE	(1U << 31)
@@ -394,14 +405,14 @@
 #define RT5592_SEL_XTAL		(1U << 31)
 
 /* possible flags for register MAC_SYS_CTRL */
-#define RT2860_RX_TS_EN		(1 << 7)
-#define RT2860_WLAN_HALT_EN	(1 << 6)
-#define RT2860_PBF_LOOP_EN	(1 << 5)
-#define RT2860_CONT_TX_TEST	(1 << 4)
-#define RT2860_MAC_RX_EN	(1 << 3)
-#define RT2860_MAC_TX_EN	(1 << 2)
-#define RT2860_BBP_HRST		(1 << 1)
-#define RT2860_MAC_SRST		(1 << 0)
+#define RT2860_RX_TS_EN		(1U << 7)
+#define RT2860_WLAN_HALT_EN	(1U << 6)
+#define RT2860_PBF_LOOP_EN	(1U << 5)
+#define RT2860_CONT_TX_TEST	(1U << 4)
+#define RT2860_MAC_RX_EN	(1U << 3)
+#define RT2860_MAC_TX_EN	(1U << 2)
+#define RT2860_BBP_HRST		(1U << 1)
+#define RT2860_MAC_SRST		(1U << 0)
 
 /* possible flags for register MAC_BSSID_DW1 */
 #define RT2860_MULTI_BCN_NUM_SHIFT	18
@@ -417,10 +428,10 @@
 #define RT2860_MAX_MPDU_LEN_SHIFT	0
 
 /* possible flags for registers BBP_CSR_CFG/H2M_BBPAGENT */
-#define RT2860_BBP_RW_PARALLEL		(1 << 19)
-#define RT2860_BBP_PAR_DUR_112_5	(1 << 18)
-#define RT2860_BBP_CSR_KICK		(1 << 17)
-#define RT2860_BBP_CSR_READ		(1 << 16)
+#define RT2860_BBP_RW_PARALLEL		(1U << 19)
+#define RT2860_BBP_PAR_DUR_112_5	(1U << 18)
+#define RT2860_BBP_CSR_KICK		(1U << 17)
+#define RT2860_BBP_CSR_READ		(1U << 16)
 #define RT2860_BBP_ADDR_SHIFT		8
 #define RT2860_BBP_DATA_SHIFT		0
 
@@ -432,11 +443,11 @@
 #define RT2860_RF_REG_0_SHIFT		0
 
 /* possible flags for register RF_CSR_CFG1 */
-#define RT2860_RF_DUR_5		(1 << 24)
+#define RT2860_RF_DUR_5		(1U << 24)
 #define RT2860_RF_REG_1_SHIFT	0
 
 /* possible flags for register LED_CFG */
-#define RT2860_LED_POL			(1 << 30)
+#define RT2860_LED_POL			(1U << 30)
 #define RT2860_Y_LED_MODE_SHIFT		28
 #define RT2860_G_LED_MODE_SHIFT		26
 #define RT2860_R_LED_MODE_SHIFT		24
@@ -449,7 +460,7 @@
 #define RT2860_LED_ON_TIME_SHIFT	0
 
 /* possible flags for register XIFS_TIME_CFG */
-#define RT2860_BB_RXEND_EN		(1 << 29)
+#define RT2860_BB_RXEND_EN		(1U << 29)
 #define RT2860_EIFS_TIME_SHIFT		20
 #define RT2860_OFDM_XIFS_TIME_SHIFT	16
 #define RT2860_OFDM_SIFS_TIME_SHIFT	8
@@ -466,22 +477,22 @@
 #define RT2860_NAV_TIMER_SHIFT		0
 
 /* possible flags for register CH_TIME_CFG */
-#define RT2860_EIFS_AS_CH_BUSY	(1 << 4)
-#define RT2860_NAV_AS_CH_BUSY	(1 << 3)
-#define RT2860_RX_AS_CH_BUSY	(1 << 2)
-#define RT2860_TX_AS_CH_BUSY	(1 << 1)
-#define RT2860_CH_STA_TIMER_EN	(1 << 0)
+#define RT2860_EIFS_AS_CH_BUSY	(1U << 4)
+#define RT2860_NAV_AS_CH_BUSY	(1U << 3)
+#define RT2860_RX_AS_CH_BUSY	(1U << 2)
+#define RT2860_TX_AS_CH_BUSY	(1U << 1)
+#define RT2860_CH_STA_TIMER_EN	(1U << 0)
 
 /* possible values for register BCN_TIME_CFG */
 #define RT2860_TSF_INS_COMP_SHIFT	24
-#define RT2860_BCN_TX_EN		(1 << 20)
-#define RT2860_TBTT_TIMER_EN		(1 << 19)
+#define RT2860_BCN_TX_EN		(1U << 20)
+#define RT2860_TBTT_TIMER_EN		(1U << 19)
 #define RT2860_TSF_SYNC_MODE_SHIFT	17
 #define RT2860_TSF_SYNC_MODE_DIS	0
 #define RT2860_TSF_SYNC_MODE_STA	1
 #define RT2860_TSF_SYNC_MODE_IBSS	2
 #define RT2860_TSF_SYNC_MODE_HOSTAP	3
-#define RT2860_TSF_TIMER_EN		(1 << 16)
+#define RT2860_TSF_TIMER_EN		(1U << 16)
 #define RT2860_BCN_INTVAL_SHIFT		0
 
 /* possible flags for register TBTT_SYNC_CFG */
@@ -495,21 +506,21 @@
 #define RT2860_PRE_TBTT_TIMER_SHIFT	0
 
 /* possible flags for register INT_TIMER_EN */
-#define RT2860_GP_TIMER_EN	(1 << 1)
-#define RT2860_PRE_TBTT_INT_EN	(1 << 0)
+#define RT2860_GP_TIMER_EN	(1U << 1)
+#define RT2860_PRE_TBTT_INT_EN	(1U << 0)
 
 /* possible flags for register MAC_STATUS_REG */
-#define RT2860_RX_STATUS_BUSY	(1 << 1)
-#define RT2860_TX_STATUS_BUSY	(1 << 0)
+#define RT2860_RX_STATUS_BUSY	(1U << 1)
+#define RT2860_TX_STATUS_BUSY	(1U << 0)
 
 /* possible flags for register PWR_PIN_CFG */
-#define RT2860_IO_ADDA_PD	(1 << 3)
-#define RT2860_IO_PLL_PD	(1 << 2)
-#define RT2860_IO_RA_PE		(1 << 1)
-#define RT2860_IO_RF_PE		(1 << 0)
+#define RT2860_IO_ADDA_PD	(1U << 3)
+#define RT2860_IO_PLL_PD	(1U << 2)
+#define RT2860_IO_RA_PE		(1U << 1)
+#define RT2860_IO_RF_PE		(1U << 0)
 
 /* possible flags for register AUTO_WAKEUP_CFG */
-#define RT2860_AUTO_WAKEUP_EN		(1 << 15)
+#define RT2860_AUTO_WAKEUP_EN		(1U << 15)
 #define RT2860_SLEEP_TBTT_NUM_SHIFT	8
 #define RT2860_WAKEUP_LEAD_TIME_SHIFT	0
 
@@ -547,9 +558,9 @@
 #define RT2860_PA_PE_A0_EN	(1U <<  0)
 
 /* possible flags for register TX_BAND_CFG */
-#define RT2860_5G_BAND_SEL_N	(1 << 2)
-#define RT2860_5G_BAND_SEL_P	(1 << 1)
-#define RT2860_TX_BAND_SEL	(1 << 0)
+#define RT2860_5G_BAND_SEL_N	(1U << 2)
+#define RT2860_5G_BAND_SEL_P	(1U << 1)
+#define RT2860_TX_BAND_SEL	(1U << 0)
 
 /* possible flags for register TX_SW_CFG0 */
 #define RT2860_DLY_RFTR_EN_SHIFT	24
@@ -577,16 +588,16 @@
 /* possible flags for register TXOP_CTRL_CFG */
 #define RT2860_EXT_CW_MIN_SHIFT		16
 #define RT2860_EXT_CCA_DLY_SHIFT	8
-#define RT2860_EXT_CCA_EN		(1 << 7)
-#define RT2860_LSIG_TXOP_EN		(1 << 6)
-#define RT2860_TXOP_TRUN_EN_MIMOPS	(1 << 4)
-#define RT2860_TXOP_TRUN_EN_TXOP	(1 << 3)
-#define RT2860_TXOP_TRUN_EN_RATE	(1 << 2)
-#define RT2860_TXOP_TRUN_EN_AC		(1 << 1)
-#define RT2860_TXOP_TRUN_EN_TIMEOUT	(1 << 0)
+#define RT2860_EXT_CCA_EN		(1U << 7)
+#define RT2860_LSIG_TXOP_EN		(1U << 6)
+#define RT2860_TXOP_TRUN_EN_MIMOPS	(1U << 4)
+#define RT2860_TXOP_TRUN_EN_TXOP	(1U << 3)
+#define RT2860_TXOP_TRUN_EN_RATE	(1U << 2)
+#define RT2860_TXOP_TRUN_EN_AC		(1U << 1)
+#define RT2860_TXOP_TRUN_EN_TIMEOUT	(1U << 0)
 
 /* possible flags for register TX_RTS_CFG */
-#define RT2860_RTS_FBK_EN		(1 << 24)
+#define RT2860_RTS_FBK_EN		(1U << 24)
 #define RT2860_RTS_THRES_SHIFT		8
 #define RT2860_RTS_RTY_LIMIT_SHIFT	0
 
@@ -596,9 +607,9 @@
 #define RT2860_MPDU_LIFE_TIME_SHIFT	4
 
 /* possible flags for register TX_RTY_CFG */
-#define RT2860_TX_AUTOFB_EN		(1 << 30)
-#define RT2860_AGG_RTY_MODE_TIMER	(1 << 29)
-#define RT2860_NAG_RTY_MODE_TIMER	(1 << 28)
+#define RT2860_TX_AUTOFB_EN		(1U << 30)
+#define RT2860_AGG_RTY_MODE_TIMER	(1U << 29)
+#define RT2860_NAG_RTY_MODE_TIMER	(1U << 28)
 #define RT2860_LONG_RTY_THRES_SHIFT	16
 #define RT2860_LONG_RTY_LIMIT_SHIFT	8
 #define RT2860_SHORT_RTY_LIMIT_SHIFT	0
@@ -606,25 +617,25 @@
 /* possible flags for register TX_LINK_CFG */
 #define RT2860_REMOTE_MFS_SHIFT		24
 #define RT2860_REMOTE_MFB_SHIFT		16
-#define RT2860_TX_CFACK_EN		(1 << 12)
-#define RT2860_TX_RDG_EN		(1 << 11)
-#define RT2860_TX_MRQ_EN		(1 << 10)
-#define RT2860_REMOTE_UMFS_EN		(1 <<  9)
-#define RT2860_TX_MFB_EN		(1 <<  8)
+#define RT2860_TX_CFACK_EN		(1U << 12)
+#define RT2860_TX_RDG_EN		(1U << 11)
+#define RT2860_TX_MRQ_EN		(1U << 10)
+#define RT2860_REMOTE_UMFS_EN		(1U <<  9)
+#define RT2860_TX_MFB_EN		(1U <<  8)
 #define RT2860_REMOTE_MFB_LT_SHIFT	0
 
 /* possible flags for registers *_PROT_CFG */
-#define RT2860_RTSTH_EN			(1 << 26)
-#define RT2860_TXOP_ALLOW_GF40		(1 << 25)
-#define RT2860_TXOP_ALLOW_GF20		(1 << 24)
-#define RT2860_TXOP_ALLOW_MM40		(1 << 23)
-#define RT2860_TXOP_ALLOW_MM20		(1 << 22)
-#define RT2860_TXOP_ALLOW_OFDM		(1 << 21)
-#define RT2860_TXOP_ALLOW_CCK		(1 << 20)
+#define RT2860_RTSTH_EN			(1U << 26)
+#define RT2860_TXOP_ALLOW_GF40		(1U << 25)
+#define RT2860_TXOP_ALLOW_GF20		(1U << 24)
+#define RT2860_TXOP_ALLOW_MM40		(1U << 23)
+#define RT2860_TXOP_ALLOW_MM20		(1U << 22)
+#define RT2860_TXOP_ALLOW_OFDM		(1U << 21)
+#define RT2860_TXOP_ALLOW_CCK		(1U << 20)
 #define RT2860_TXOP_ALLOW_ALL		(0x3f << 20)
-#define RT2860_PROT_NAV_SHORT		(1 << 18)
+#define RT2860_PROT_NAV_SHORT		(1U << 18)
 #define RT2860_PROT_NAV_LONG		(2 << 18)
-#define RT2860_PROT_CTRL_RTS_CTS	(1 << 16)
+#define RT2860_PROT_CTRL_RTS_CTS	(1U << 16)
 #define RT2860_PROT_CTRL_CTS		(2 << 16)
 
 /* possible flags for registers EXP_{CTS,ACK}_TIME */
@@ -632,53 +643,53 @@
 #define RT2860_EXP_CCK_TIME_SHIFT	0
 
 /* possible flags for register RX_FILTR_CFG */
-#define RT2860_DROP_CTRL_RSV	(1 << 16)
-#define RT2860_DROP_BAR		(1 << 15)
-#define RT2860_DROP_BA		(1 << 14)
-#define RT2860_DROP_PSPOLL	(1 << 13)
-#define RT2860_DROP_RTS		(1 << 12)
-#define RT2860_DROP_CTS		(1 << 11)
-#define RT2860_DROP_ACK		(1 << 10)
-#define RT2860_DROP_CFEND	(1 <<  9)
-#define RT2860_DROP_CFACK	(1 <<  8)
-#define RT2860_DROP_DUPL	(1 <<  7)
-#define RT2860_DROP_BC		(1 <<  6)
-#define RT2860_DROP_MC		(1 <<  5)
-#define RT2860_DROP_VER_ERR	(1 <<  4)
-#define RT2860_DROP_NOT_MYBSS	(1 <<  3)
-#define RT2860_DROP_UC_NOME	(1 <<  2)
-#define RT2860_DROP_PHY_ERR	(1 <<  1)
-#define RT2860_DROP_CRC_ERR	(1 <<  0)
+#define RT2860_DROP_CTRL_RSV	(1U << 16)
+#define RT2860_DROP_BAR		(1U << 15)
+#define RT2860_DROP_BA		(1U << 14)
+#define RT2860_DROP_PSPOLL	(1U << 13)
+#define RT2860_DROP_RTS		(1U << 12)
+#define RT2860_DROP_CTS		(1U << 11)
+#define RT2860_DROP_ACK		(1U << 10)
+#define RT2860_DROP_CFEND	(1U <<  9)
+#define RT2860_DROP_CFACK	(1U <<  8)
+#define RT2860_DROP_DUPL	(1U <<  7)
+#define RT2860_DROP_BC		(1U <<  6)
+#define RT2860_DROP_MC		(1U <<  5)
+#define RT2860_DROP_VER_ERR	(1U <<  4)
+#define RT2860_DROP_NOT_MYBSS	(1U <<  3)
+#define RT2860_DROP_UC_NOME	(1U <<  2)
+#define RT2860_DROP_PHY_ERR	(1U <<  1)
+#define RT2860_DROP_CRC_ERR	(1U <<  0)
 
 /* possible flags for register AUTO_RSP_CFG */
-#define RT2860_CTRL_PWR_BIT	(1 << 7)
-#define RT2860_BAC_ACK_POLICY	(1 << 6)
-#define RT2860_CCK_SHORT_EN	(1 << 4)
-#define RT2860_CTS_40M_REF_EN	(1 << 3)
-#define RT2860_CTS_40M_MODE_EN	(1 << 2)
-#define RT2860_BAC_ACKPOLICY_EN	(1 << 1)
-#define RT2860_AUTO_RSP_EN	(1 << 0)
+#define RT2860_CTRL_PWR_BIT	(1U << 7)
+#define RT2860_BAC_ACK_POLICY	(1U << 6)
+#define RT2860_CCK_SHORT_EN	(1U << 4)
+#define RT2860_CTS_40M_REF_EN	(1U << 3)
+#define RT2860_CTS_40M_MODE_EN	(1U << 2)
+#define RT2860_BAC_ACKPOLICY_EN	(1U << 1)
+#define RT2860_AUTO_RSP_EN	(1U << 0)
 
 /* possible flags for register SIFS_COST_CFG */
 #define RT2860_OFDM_SIFS_COST_SHIFT	8
 #define RT2860_CCK_SIFS_COST_SHIFT	0
 
 /* possible flags for register TXOP_HLDR_ET */
-#define RT2860_TXOP_ETM1_EN		(1 << 25)
-#define RT2860_TXOP_ETM0_EN		(1 << 24)
+#define RT2860_TXOP_ETM1_EN		(1U << 25)
+#define RT2860_TXOP_ETM0_EN		(1U << 24)
 #define RT2860_TXOP_ETM_THRES_SHIFT	16
-#define RT2860_TXOP_ETO_EN		(1 <<  8)
+#define RT2860_TXOP_ETO_EN		(1U <<  8)
 #define RT2860_TXOP_ETO_THRES_SHIFT	1
-#define RT2860_PER_RX_RST_EN		(1 <<  0)
+#define RT2860_PER_RX_RST_EN		(1U <<  0)
 
 /* possible flags for register TX_STAT_FIFO */
 #define RT2860_TXQ_MCS_SHIFT	16
 #define RT2860_TXQ_WCID_SHIFT	8
-#define RT2860_TXQ_ACKREQ	(1 << 7)
-#define RT2860_TXQ_AGG		(1 << 6)
-#define RT2860_TXQ_OK		(1 << 5)
+#define RT2860_TXQ_ACKREQ	(1U << 7)
+#define RT2860_TXQ_AGG		(1U << 6)
+#define RT2860_TXQ_OK		(1U << 5)
 #define RT2860_TXQ_PID_SHIFT	1
-#define RT2860_TXQ_VLD		(1 << 0)
+#define RT2860_TXQ_VLD		(1U << 0)
 
 /* possible flags for register WCID_ATTR */
 #define RT2860_MODE_NOSEC	0
@@ -689,62 +700,62 @@
 #define RT2860_MODE_CKIP40	5
 #define RT2860_MODE_CKIP104	6
 #define RT2860_MODE_CKIP128	7
-#define RT2860_RX_PKEY_EN	(1 << 0)
+#define RT2860_RX_PKEY_EN	(1U << 0)
 
 /* possible flags for register H2M_MAILBOX */
-#define RT2860_H2M_BUSY		(1 << 24)
+#define RT2860_H2M_BUSY		(1U << 24)
 #define RT2860_TOKEN_NO_INTR	0xff
 
 
 /* possible flags for MCU command RT2860_MCU_CMD_LEDS */
-#define RT2860_LED_RADIO	(1 << 13)
-#define RT2860_LED_LINK_2GHZ	(1 << 14)
-#define RT2860_LED_LINK_5GHZ	(1 << 15)
+#define RT2860_LED_RADIO	(1U << 13)
+#define RT2860_LED_LINK_2GHZ	(1U << 14)
+#define RT2860_LED_LINK_5GHZ	(1U << 15)
 
 
 /* possible flags for RT3020 RF register 1 */
-#define RT3070_RF_BLOCK	(1 << 0)
-#define RT3070_PLL_PD	(1 << 1)
-#define RT3070_RX0_PD	(1 << 2)
-#define RT3070_TX0_PD	(1 << 3)
-#define RT3070_RX1_PD	(1 << 4)
-#define RT3070_TX1_PD	(1 << 5)
-#define RT3070_RX2_PD	(1 << 6)
-#define RT3070_TX2_PD	(1 << 7)
+#define RT3070_RF_BLOCK	(1U << 0)
+#define RT3070_PLL_PD	(1U << 1)
+#define RT3070_RX0_PD	(1U << 2)
+#define RT3070_TX0_PD	(1U << 3)
+#define RT3070_RX1_PD	(1U << 4)
+#define RT3070_TX1_PD	(1U << 5)
+#define RT3070_RX2_PD	(1U << 6)
+#define RT3070_TX2_PD	(1U << 7)
 
 /* possible flags for RT3020 RF register 7 */
-#define RT3070_TUNE	(1 << 0)
+#define RT3070_TUNE	(1U << 0)
 
 /* possible flags for RT3020 RF register 15 */
-#define RT3070_TX_LO2	(1 << 3)
+#define RT3070_TX_LO2	(1U << 3)
 
 /* possible flags for RT3020 RF register 17 */
-#define RT3070_TX_LO1	(1 << 3)
+#define RT3070_TX_LO1	(1U << 3)
 
 /* possible flags for RT3020 RF register 20 */
-#define RT3070_RX_LO1	(1 << 3)
+#define RT3070_RX_LO1	(1U << 3)
 
 /* possible flags for RT3020 RF register 21 */
-#define RT3070_RX_LO2	(1 << 3)
-#define RT3070_RX_CTB	(1 << 7)
+#define RT3070_RX_LO2	(1U << 3)
+#define RT3070_RX_CTB	(1U << 7)
 
 /* possible flags for RT3020 RF register 22 */
-#define RT3070_BB_LOOPBACK	(1 << 0)
+#define RT3070_BB_LOOPBACK	(1U << 0)
 
 /* possible flags for RT3053 RF register 1 */
-#define RT3593_VCO	(1 << 0)
+#define RT3593_VCO	(1U << 0)
 
 /* possible flags for RT3053 RF register 2 */
-#define RT3593_RESCAL	(1 << 7)
+#define RT3593_RESCAL	(1U << 7)
 
 /* possible flags for RT3053 RF register 3 */
-#define RT3593_VCOCAL	(1 << 7)
+#define RT3593_VCOCAL	(1U << 7)
 
 /* possible flags for RT3053 RF register 6 */
-#define RT3593_VCO_IC	(1 << 6)
+#define RT3593_VCO_IC	(1U << 6)
 
 /* possible flags for RT3053 RF register 18 */
-#define RT3593_AUTOTUNE_BYPASS	(1 << 6)
+#define RT3593_AUTOTUNE_BYPASS	(1U << 6)
 
 /* possible flags for RT3053 RF register 20 */
 #define RT3593_LDO_PLL_VC_MASK	0x0e
@@ -755,29 +766,29 @@
 #define RT3593_CP_IC_SHIFT	5
 
 /* possible flags for RT5390 RF register 38. */
-#define RT5390_RX_LO1	(1 << 5)
+#define RT5390_RX_LO1	(1U << 5)
 
 /* possible flags for RT5390 RF register 39. */
-#define RT5390_RX_LO2	(1 << 7)
+#define RT5390_RX_LO2	(1U << 7)
 
 /* possible flags for RT5390 RF register 42 */
-#define RT5390_RX_CTB	(1 << 6)
+#define RT5390_RX_CTB	(1U << 6)
 
 /* possible flags for RT3053 RF register 46 */
-#define RT3593_RX_CTB	(1 << 5)
+#define RT3593_RX_CTB	(1U << 5)
 
 /* possible flags for RT3053 RF register 50 */
-#define RT3593_TX_LO2	(1 << 4)
+#define RT3593_TX_LO2	(1U << 4)
 
 /* possible flags for RT3053 RF register 51 */
-#define RT3593_TX_LO1	(1 << 4)
+#define RT3593_TX_LO1	(1U << 4)
 
 /* Possible flags for RT5390 BBP register 4. */
-#define RT5390_MAC_IF_CTRL	(1 << 6)
+#define RT5390_MAC_IF_CTRL	(1U << 6)
 
 /* possible flags for RT5390 BBP register 105. */
-#define RT5390_MLD			(1 << 2)
-#define RT5390_EN_SIG_MODULATION	(1 << 3)
+#define RT5390_MLD			(1U << 2)
+#define RT5390_EN_SIG_MODULATION	(1U << 3)
 
 #define RT3090_DEF_LNA	10
 
@@ -785,21 +796,21 @@
 struct rt2860_txd {
 	uint32_t	sdp0;		/* Segment Data Pointer 0 */
 	uint16_t	sdl1;		/* Segment Data Length 1 */
-#define RT2860_TX_BURST	(1 << 15)
-#define RT2860_TX_LS1	(1 << 14)	/* SDP1 is the last segment */
+#define RT2860_TX_BURST	(1U << 15)
+#define RT2860_TX_LS1	(1U << 14)	/* SDP1 is the last segment */
 
 	uint16_t	sdl0;		/* Segment Data Length 0 */
-#define RT2860_TX_DDONE	(1 << 15)
-#define RT2860_TX_LS0	(1 << 14)	/* SDP0 is the last segment */
+#define RT2860_TX_DDONE	(1U << 15)
+#define RT2860_TX_LS0	(1U << 14)	/* SDP0 is the last segment */
 
 	uint32_t	sdp1;		/* Segment Data Pointer 1 */
 	uint8_t		reserved[3];
 	uint8_t		flags;
 #define RT2860_TX_QSEL_SHIFT	1
 #define RT2860_TX_QSEL_MGMT	(0 << 1)
-#define RT2860_TX_QSEL_HCCA	(1 << 1)
+#define RT2860_TX_QSEL_HCCA	(1U << 1)
 #define RT2860_TX_QSEL_EDCA	(2 << 1)
-#define RT2860_TX_WIV		(1 << 0)
+#define RT2860_TX_WIV		(1U << 0)
 } __packed;
 
 /* RT2870 TX descriptor */
@@ -813,11 +824,11 @@ struct rt2870_txd {
 struct rt2860_txwi {
 	uint8_t		flags;
 #define RT2860_TX_MPDU_DSITY_SHIFT	5
-#define RT2860_TX_AMPDU			(1 << 4)
-#define RT2860_TX_TS			(1 << 3)
-#define RT2860_TX_CFACK			(1 << 2)
-#define RT2860_TX_MMPS			(1 << 1)
-#define RT2860_TX_FRAG			(1 << 0)
+#define RT2860_TX_AMPDU			(1U << 4)
+#define RT2860_TX_TS			(1U << 3)
+#define RT2860_TX_CFACK			(1U << 2)
+#define RT2860_TX_MMPS			(1U << 1)
+#define RT2860_TX_FRAG			(1U << 0)
 
 	uint8_t		txop;
 #define RT2860_TX_TXOP_HT	0
@@ -828,18 +839,18 @@ struct rt2860_txwi {
 	uint16_t	phy;
 #define RT2860_PHY_MODE		0xc000
 #define RT2860_PHY_CCK		(0 << 14)
-#define RT2860_PHY_OFDM		(1 << 14)
+#define RT2860_PHY_OFDM		(1U << 14)
 #define RT2860_PHY_HT		(2 << 14)
 #define RT2860_PHY_HT_GF	(3 << 14)
-#define RT2860_PHY_SGI		(1 << 8)
-#define RT2860_PHY_BW40		(1 << 7)
+#define RT2860_PHY_SGI		(1U << 8)
+#define RT2860_PHY_BW40		(1U << 7)
 #define RT2860_PHY_MCS		0x7f
-#define RT2860_PHY_SHPRE	(1 << 3)
+#define RT2860_PHY_SHPRE	(1U << 3)
 
 	uint8_t		xflags;
 #define RT2860_TX_BAWINSIZE_SHIFT	2
-#define RT2860_TX_NSEQ			(1 << 1)
-#define RT2860_TX_ACK			(1 << 0)
+#define RT2860_TX_NSEQ			(1U << 1)
+#define RT2860_TX_ACK			(1U << 0)
 
 	uint8_t		wcid;	/* Wireless Client ID */
 	uint16_t	len;
@@ -854,28 +865,28 @@ struct rt2860_rxd {
 	uint32_t	sdp0;
 	uint16_t	sdl1;	/* unused */
 	uint16_t	sdl0;
-#define RT2860_RX_DDONE	(1 << 15)
-#define RT2860_RX_LS0	(1 << 14)
+#define RT2860_RX_DDONE	(1U << 15)
+#define RT2860_RX_LS0	(1U << 14)
 
 	uint32_t	sdp1;	/* unused */
 	uint32_t	flags;
-#define RT2860_RX_DEC		(1 << 16)
-#define RT2860_RX_AMPDU		(1 << 15)
-#define RT2860_RX_L2PAD		(1 << 14)
-#define RT2860_RX_RSSI		(1 << 13)
-#define RT2860_RX_HTC		(1 << 12)
-#define RT2860_RX_AMSDU		(1 << 11)
-#define RT2860_RX_MICERR	(1 << 10)
-#define RT2860_RX_ICVERR	(1 <<  9)
-#define RT2860_RX_CRCERR	(1 <<  8)
-#define RT2860_RX_MYBSS		(1 <<  7)
-#define RT2860_RX_BC		(1 <<  6)
-#define RT2860_RX_MC		(1 <<  5)
-#define RT2860_RX_UC2ME		(1 <<  4)
-#define RT2860_RX_FRAG		(1 <<  3)
-#define RT2860_RX_NULL		(1 <<  2)
-#define RT2860_RX_DATA		(1 <<  1)
-#define RT2860_RX_BA		(1 <<  0)
+#define RT2860_RX_DEC		(1U << 16)
+#define RT2860_RX_AMPDU		(1U << 15)
+#define RT2860_RX_L2PAD		(1U << 14)
+#define RT2860_RX_RSSI		(1U << 13)
+#define RT2860_RX_HTC		(1U << 12)
+#define RT2860_RX_AMSDU		(1U << 11)
+#define RT2860_RX_MICERR	(1U << 10)
+#define RT2860_RX_ICVERR	(1U <<  9)
+#define RT2860_RX_CRCERR	(1U <<  8)
+#define RT2860_RX_MYBSS		(1U <<  7)
+#define RT2860_RX_BC		(1U <<  6)
+#define RT2860_RX_MC		(1U <<  5)
+#define RT2860_RX_UC2ME		(1U <<  4)
+#define RT2860_RX_FRAG		(1U <<  3)
+#define RT2860_RX_NULL		(1U <<  2)
+#define RT2860_RX_DATA		(1U <<  1)
+#define RT2860_RX_BA		(1U <<  0)
 } __packed;
 
 /* RT2870 RX descriptor */
@@ -914,21 +925,22 @@ struct rt2860_rxwi {
 #define RT2860_RF3	1
 #define RT2860_RF4	3
 
-#define RT2860_RF_2820	1	/* 2T3R */
-#define RT2860_RF_2850	2	/* dual-band 2T3R */
-#define RT2860_RF_2720	3	/* 1T2R */
-#define RT2860_RF_2750	4	/* dual-band 1T2R */
-#define RT3070_RF_3020	5	/* 1T1R */
-#define RT3070_RF_2020	6	/* b/g */
-#define RT3070_RF_3021	7	/* 1T2R */
-#define RT3070_RF_3022	8	/* 2T2R */
-#define RT3070_RF_3052	9	/* dual-band 2T2R */
-#define RT3070_RF_3320	11	/* 1T1R */
-#define RT3070_RF_3053	13	/* dual-band 3T3R */
-#define RT5390_RF_5390	15	/* b/g/n */
+#define RT2860_RF_2820	0x0001	/* 2T3R */
+#define RT2860_RF_2850	0x0002	/* dual-band 2T3R */
+#define RT2860_RF_2720	0x0003	/* 1T2R */
+#define RT2860_RF_2750	0x0004	/* dual-band 1T2R */
+#define RT3070_RF_3020	0x0005	/* 1T1R */
+#define RT3070_RF_2020	0x0006	/* b/g */
+#define RT3070_RF_3021	0x0007	/* 1T2R */
+#define RT3070_RF_3022	0x0008	/* 2T2R */
+#define RT3070_RF_3052	0x0009	/* dual-band 2T2R */
+#define RT3070_RF_3320	0x000b	/* 1T1R */
+#define RT3070_RF_3053	0x000d	/* dual-band 3T3R */
 #define RT5592_RF_5592	0x000f	/* dual-band 2T2R */
+#define RT5390_RF_5360	0x5360	/* 1T1R */
 #define RT5390_RF_5370	0x5370	/* 1T1R */
 #define RT5390_RF_5372	0x5372	/* 2T2R */
+#define RT5390_RF_5390	0x5390	/* 1T1R */
 
 
 /* USB commands for RT2870 only */
@@ -940,6 +952,7 @@ struct rt2860_rxwi {
 
 #define RT2860_EEPROM_DELAY	1	/* minimum hold time (microsecond) */
 
+#define RT2860_EEPROM_CHIPID		0x00
 #define RT2860_EEPROM_VERSION		0x01
 #define RT2860_EEPROM_MAC01		0x02
 #define RT2860_EEPROM_MAC23		0x03
@@ -1083,14 +1096,17 @@ static const struct rt2860_rate {
  */
 #define RT2860_DEF_MAC					\
 	{ RT2860_BCN_OFFSET0,		0xf8f0e8e0 },	\
+	{ RT2860_BCN_OFFSET1,		0x6f77d0c8 },	\
 	{ RT2860_LEGACY_BASIC_RATE,	0x0000013f },	\
 	{ RT2860_HT_BASIC_RATE,		0x00008003 },	\
 	{ RT2860_MAC_SYS_CTRL,		0x00000000 },	\
+	{ RT2860_RX_FILTR_CFG,		0x00017f97 },	\
 	{ RT2860_BKOFF_SLOT_CFG,	0x00000209 },	\
 	{ RT2860_TX_SW_CFG0,		0x00000000 },	\
 	{ RT2860_TX_SW_CFG1,		0x00080606 },	\
 	{ RT2860_TX_LINK_CFG,		0x00001020 },	\
 	{ RT2860_TX_TIMEOUT_CFG,	0x000a2090 },	\
+	{ RT2860_MAX_LEN_CFG,		0x00001f00 },	\
 	{ RT2860_LED_CFG,		0x7f031e46 },	\
 	{ RT2860_WMM_AIFSN_CFG,		0x00002273 },	\
 	{ RT2860_WMM_CWMIN_CFG,		0x00002344 },	\
@@ -1150,6 +1166,7 @@ static const struct rt2860_rate {
 #define RT2860_DEF_BBP	\
 	{  65, 0x2c },	\
 	{  66, 0x38 },	\
+	{  68, 0x0b },	\
 	{  69, 0x12 },	\
 	{  70, 0x0a },	\
 	{  73, 0x10 },	\
@@ -1169,8 +1186,8 @@ static const struct rt2860_rate {
 	{  65, 0x2c },	\
 	{  66, 0x38 },	\
 	{  68, 0x0b },	\
-	{  69, 0x0d },	\
-	{  70, 0x06 },	\
+	{  69, 0x12 },	\
+	{  70, 0x0a },	\
 	{  73, 0x13 },	\
 	{  75, 0x46 },	\
 	{  76, 0x28 },	\
@@ -1178,7 +1195,7 @@ static const struct rt2860_rate {
 	{  81, 0x37 },	\
 	{  82, 0x62 },	\
 	{  83, 0x7a },	\
-	{  84, 0x9a },	\
+	{  84, 0x19 },	\
 	{  86, 0x38 },	\
 	{  91, 0x04 },	\
 	{  92, 0x02 },	\
@@ -1447,7 +1464,7 @@ static const struct rt2860_rate {
 	{  4, 0x40 },	\
 	{  5, 0x03 },	\
 	{  6, 0x02 },	\
-	{  7, 0x70 },	\
+	{  7, 0x60 },	\
 	{  9, 0x0f },	\
 	{ 10, 0x41 },	\
 	{ 11, 0x21 },	\
@@ -1461,82 +1478,15 @@ static const struct rt2860_rate {
 	{ 20, 0xba },	\
 	{ 21, 0xdb },	\
 	{ 24, 0x16 },	\
-	{ 25, 0x01 },	\
+	{ 25, 0x03 },	\
 	{ 29, 0x1f }
 
-#define RT3572_DEF_RF	\
-	{  0, 0x70 },	\
-	{  1, 0x81 },	\
-	{  2, 0xf1 },	\
-	{  3, 0x02 },	\
-	{  4, 0x4c },	\
-	{  5, 0x05 },	\
-	{  6, 0x4a },	\
-	{  7, 0xd8 },	\
-	{  9, 0xc3 },	\
-	{ 10, 0xf1 },	\
-	{ 11, 0xb9 },	\
-	{ 12, 0x70 },	\
-	{ 13, 0x65 },	\
-	{ 14, 0xa0 },	\
-	{ 15, 0x53 },	\
-	{ 16, 0x4c },	\
-	{ 17, 0x23 },	\
-	{ 18, 0xac },	\
-	{ 19, 0x93 },	\
-	{ 20, 0xb3 },	\
-	{ 21, 0xd0 },	\
-	{ 22, 0x00 },  	\
-	{ 23, 0x3c },	\
-	{ 24, 0x16 },	\
-	{ 25, 0x15 },	\
-	{ 26, 0x85 },	\
-	{ 27, 0x00 },	\
-	{ 28, 0x00 },	\
-	{ 29, 0x9b },	\
-	{ 30, 0x09 },	\
-	{ 31, 0x10 }
-
-#define RT3593_DEF_RF	\
-	{  1, 0x03 },	\
-	{  3, 0x80 },	\
-	{  5, 0x00 },	\
-	{  6, 0x40 },	\
-	{  8, 0xf1 },	\
-	{  9, 0x02 },	\
-	{ 10, 0xd3 },	\
-	{ 11, 0x40 },	\
-	{ 12, 0x4e },	\
-	{ 13, 0x12 },	\
-	{ 18, 0x40 },	\
-	{ 22, 0x20 },	\
-	{ 30, 0x10 },	\
-	{ 31, 0x80 },	\
-	{ 32, 0x78 },	\
-	{ 33, 0x3b },	\
-	{ 34, 0x3c },	\
-	{ 35, 0xe0 },	\
-	{ 38, 0x86 },	\
-	{ 39, 0x23 },	\
-	{ 44, 0xd3 },	\
-	{ 45, 0xbb },	\
-	{ 46, 0x60 },	\
-	{ 49, 0x81 },	\
-	{ 50, 0x86 },	\
-	{ 51, 0x75 },	\
-	{ 52, 0x45 },	\
-	{ 53, 0x18 },	\
-	{ 54, 0x18 },	\
-	{ 55, 0x18 },	\
-	{ 56, 0xdb },	\
-	{ 57, 0x6e }
-
 #define RT5390_DEF_RF	\
 	{  1, 0x0f },	\
 	{  2, 0x80 },	\
 	{  3, 0x88 },	\
 	{  5, 0x10 },	\
-	{  6, 0xa0 },	\
+	{  6, 0xe0 },	\
 	{  7, 0x00 },	\
 	{ 10, 0x53 },	\
 	{ 11, 0x4a },	\
@@ -1549,10 +1499,10 @@ static const struct rt2860_rate {
 	{ 19, 0x00 },	\
 	{ 20, 0x00 },	\
 	{ 21, 0x00 },	\
-	{ 22, 0x20 },  	\
+	{ 22, 0x20 },	\
 	{ 23, 0x00 },	\
 	{ 24, 0x00 },	\
-	{ 25, 0xc0 },	\
+	{ 25, 0x80 },	\
 	{ 26, 0x00 },	\
 	{ 27, 0x09 },	\
 	{ 28, 0x00 },	\
@@ -1573,25 +1523,26 @@ static const struct rt2860_rate {
 	{ 43, 0x9a },	\
 	{ 44, 0x0e },	\
 	{ 45, 0xa2 },	\
-	{ 46, 0x7b },	\
+	{ 46, 0x73 },	\
 	{ 47, 0x00 },	\
 	{ 48, 0x10 },	\
 	{ 49, 0x94 },	\
 	{ 52, 0x38 },	\
-	{ 53, 0x84 },	\
+	{ 53, 0x00 },	\
 	{ 54, 0x78 },	\
-	{ 55, 0x44 },	\
+	{ 55, 0x23 },	\
 	{ 56, 0x22 },	\
 	{ 57, 0x80 },	\
 	{ 58, 0x7f },	\
-	{ 59, 0x8f },	\
+	{ 59, 0x07 },	\
 	{ 60, 0x45 },	\
-	{ 61, 0xdd },	\
+	{ 61, 0xd1 },	\
 	{ 62, 0x00 },	\
 	{ 63, 0x00 }
 
 #define RT5392_DEF_RF	\
 	{  1, 0x17 },	\
+	{  2, 0x80 },	\
 	{  3, 0x88 },	\
 	{  5, 0x10 },	\
 	{  6, 0xe0 },	\
@@ -1607,7 +1558,7 @@ static const struct rt2860_rate {
 	{ 19, 0x4d },	\
 	{ 20, 0x00 },	\
 	{ 21, 0x8d },	\
-	{ 22, 0x20 },  	\
+	{ 22, 0x20 },	\
 	{ 23, 0x0b },	\
 	{ 24, 0x44 },	\
 	{ 25, 0x80 },	\
@@ -1617,7 +1568,7 @@ static const struct rt2860_rate {
 	{ 29, 0x10 },	\
 	{ 30, 0x10 },	\
 	{ 31, 0x80 },	\
-	{ 32, 0x20 },	\
+	{ 32, 0x80 },	\
 	{ 33, 0xc0 },	\
 	{ 34, 0x07 },	\
 	{ 35, 0x12 },	\
@@ -1648,7 +1599,74 @@ static const struct rt2860_rate {
 	{ 60, 0x45 },	\
 	{ 61, 0x91 },	\
 	{ 62, 0x39 },	\
-	{ 63, 0x07 }
+	{ 63, 0x00 }
+
+#define RT3572_DEF_RF	\
+	{  0, 0x70 },	\
+	{  1, 0x81 },	\
+	{  2, 0xf1 },	\
+	{  3, 0x02 },	\
+	{  4, 0x4c },	\
+	{  5, 0x05 },	\
+	{  6, 0x4a },	\
+	{  7, 0xd8 },	\
+	{  9, 0xc3 },	\
+	{ 10, 0xf1 },	\
+	{ 11, 0xb9 },	\
+	{ 12, 0x70 },	\
+	{ 13, 0x65 },	\
+	{ 14, 0xa0 },	\
+	{ 15, 0x53 },	\
+	{ 16, 0x4c },	\
+	{ 17, 0x23 },	\
+	{ 18, 0xac },	\
+	{ 19, 0x93 },	\
+	{ 20, 0xb3 },	\
+	{ 21, 0xd0 },	\
+	{ 22, 0x00 },  	\
+	{ 23, 0x3c },	\
+	{ 24, 0x16 },	\
+	{ 25, 0x15 },	\
+	{ 26, 0x85 },	\
+	{ 27, 0x00 },	\
+	{ 28, 0x00 },	\
+	{ 29, 0x9b },	\
+	{ 30, 0x09 },	\
+	{ 31, 0x10 }
+
+#define RT3593_DEF_RF	\
+	{  1, 0x03 },	\
+	{  3, 0x80 },	\
+	{  5, 0x00 },	\
+	{  6, 0x40 },	\
+	{  8, 0xf1 },	\
+	{  9, 0x02 },	\
+	{ 10, 0xd3 },	\
+	{ 11, 0x40 },	\
+	{ 12, 0x4e },	\
+	{ 13, 0x12 },	\
+	{ 18, 0x40 },	\
+	{ 22, 0x20 },	\
+	{ 30, 0x10 },	\
+	{ 31, 0x80 },	\
+	{ 32, 0x78 },	\
+	{ 33, 0x3b },	\
+	{ 34, 0x3c },	\
+	{ 35, 0xe0 },	\
+	{ 38, 0x86 },	\
+	{ 39, 0x23 },	\
+	{ 44, 0xd3 },	\
+	{ 45, 0xbb },	\
+	{ 46, 0x60 },	\
+	{ 49, 0x81 },	\
+	{ 50, 0x86 },	\
+	{ 51, 0x75 },	\
+	{ 52, 0x45 },	\
+	{ 53, 0x18 },	\
+	{ 54, 0x18 },	\
+	{ 55, 0x18 },	\
+	{ 56, 0xdb },	\
+	{ 57, 0x6e }
 
 #define RT5592_DEF_RF	\
 	{  1, 0x3f },	\

Index: src/sys/dev/ic/rt2860var.h
diff -u src/sys/dev/ic/rt2860var.h:1.2 src/sys/dev/ic/rt2860var.h:1.3
--- src/sys/dev/ic/rt2860var.h:1.2	Wed Apr 27 15:49:26 2016
+++ src/sys/dev/ic/rt2860var.h	Thu Jul  7 21:24:53 2016
@@ -1,4 +1,4 @@
-/*	$NetBSD: rt2860var.h,v 1.2 2016/04/27 19:49:26 christos Exp $	*/
+/*	$NetBSD: rt2860var.h,v 1.3 2016/07/08 01:24:53 christos Exp $	*/
 /*	$OpenBSD: rt2860var.h,v 1.23 2016/03/21 21:16:30 stsp Exp $	*/
 
 /*-
@@ -42,7 +42,7 @@ struct rt2860_rx_radiotap_header {
 	uint8_t		wr_dbm_antsignal;
 	uint8_t		wr_antenna;
 	uint8_t		wr_antsignal;
-} __packed;
+} __packed __aligned(8);
 
 #define RT2860_RX_RADIOTAP_PRESENT			\
 	(1 << IEEE80211_RADIOTAP_FLAGS |		\
@@ -59,7 +59,7 @@ struct rt2860_tx_radiotap_header {
 	uint16_t	wt_chan_freq;
 	uint16_t	wt_chan_flags;
 	uint8_t		wt_hwqueue;
-} __packed;
+} __packed __aligned(8);
 
 #define RT2860_TX_RADIOTAP_PRESENT			\
 	(1 << IEEE80211_RADIOTAP_FLAGS |		\
@@ -131,6 +131,7 @@ struct rt2860_softc {
 #define RT2860_ENABLED		(1 << 0)
 #define RT2860_ADVANCED_PS	(1 << 1)
 #define RT2860_PCIE		(1 << 2)
+#define	RT2860_RUNNING		(1 << 3)
 
 	struct ieee80211_amrr		amrr;
 
@@ -156,7 +157,7 @@ struct rt2860_softc {
 
 	uint16_t			mac_ver;
 	uint16_t			mac_rev;
-	uint8_t				rf_rev;
+	uint32_t			rf_rev;
 	uint8_t				freq;
 	uint8_t				ntxchains;
 	uint8_t				nrxchains;

Reply via email to