176c21ea3SSascha Wildner /*- 276c21ea3SSascha Wildner * Copyright (c) 2007 Damien Bergamini <damien.bergamini@free.fr> 376c21ea3SSascha Wildner * Copyright (c) 2012 Bernhard Schmidt <bschmidt@FreeBSD.org> 476c21ea3SSascha Wildner * 576c21ea3SSascha Wildner * Permission to use, copy, modify, and distribute this software for any 676c21ea3SSascha Wildner * purpose with or without fee is hereby granted, provided that the above 776c21ea3SSascha Wildner * copyright notice and this permission notice appear in all copies. 876c21ea3SSascha Wildner * 976c21ea3SSascha Wildner * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1076c21ea3SSascha Wildner * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1176c21ea3SSascha Wildner * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1276c21ea3SSascha Wildner * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1376c21ea3SSascha Wildner * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1476c21ea3SSascha Wildner * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 1576c21ea3SSascha Wildner * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1676c21ea3SSascha Wildner * 1776c21ea3SSascha Wildner * $OpenBSD: rt2860reg.h,v 1.30 2010/05/10 18:17:10 damien Exp $ 18*91b30d50SMatthew Dillon * $FreeBSD$ 1976c21ea3SSascha Wildner */ 2076c21ea3SSascha Wildner 2176c21ea3SSascha Wildner #define RT2860_NOISE_FLOOR -95 2276c21ea3SSascha Wildner 2376c21ea3SSascha Wildner /* PCI registers */ 2476c21ea3SSascha Wildner #define RT2860_PCI_CFG 0x0000 2576c21ea3SSascha Wildner #define RT2860_PCI_EECTRL 0x0004 2676c21ea3SSascha Wildner #define RT2860_PCI_MCUCTRL 0x0008 2776c21ea3SSascha Wildner #define RT2860_PCI_SYSCTRL 0x000c 2876c21ea3SSascha Wildner #define RT2860_PCIE_JTAG 0x0010 2976c21ea3SSascha Wildner 3076c21ea3SSascha Wildner #define RT3090_AUX_CTRL 0x010c 3176c21ea3SSascha Wildner 3276c21ea3SSascha Wildner #define RT3070_OPT_14 0x0114 3376c21ea3SSascha Wildner 3476c21ea3SSascha Wildner /* SCH/DMA registers */ 3576c21ea3SSascha Wildner #define RT2860_INT_STATUS 0x0200 3676c21ea3SSascha Wildner #define RT2860_INT_MASK 0x0204 3776c21ea3SSascha Wildner #define RT2860_WPDMA_GLO_CFG 0x0208 3876c21ea3SSascha Wildner #define RT2860_WPDMA_RST_IDX 0x020c 3976c21ea3SSascha Wildner #define RT2860_DELAY_INT_CFG 0x0210 4076c21ea3SSascha Wildner #define RT2860_WMM_AIFSN_CFG 0x0214 4176c21ea3SSascha Wildner #define RT2860_WMM_CWMIN_CFG 0x0218 4276c21ea3SSascha Wildner #define RT2860_WMM_CWMAX_CFG 0x021c 4376c21ea3SSascha Wildner #define RT2860_WMM_TXOP0_CFG 0x0220 4476c21ea3SSascha Wildner #define RT2860_WMM_TXOP1_CFG 0x0224 4576c21ea3SSascha Wildner #define RT2860_GPIO_CTRL 0x0228 4676c21ea3SSascha Wildner #define RT2860_MCU_CMD_REG 0x022c 4776c21ea3SSascha Wildner #define RT2860_TX_BASE_PTR(qid) (0x0230 + (qid) * 16) 4876c21ea3SSascha Wildner #define RT2860_TX_MAX_CNT(qid) (0x0234 + (qid) * 16) 4976c21ea3SSascha Wildner #define RT2860_TX_CTX_IDX(qid) (0x0238 + (qid) * 16) 5076c21ea3SSascha Wildner #define RT2860_TX_DTX_IDX(qid) (0x023c + (qid) * 16) 5176c21ea3SSascha Wildner #define RT2860_RX_BASE_PTR 0x0290 5276c21ea3SSascha Wildner #define RT2860_RX_MAX_CNT 0x0294 5376c21ea3SSascha Wildner #define RT2860_RX_CALC_IDX 0x0298 5476c21ea3SSascha Wildner #define RT2860_FS_DRX_IDX 0x029c 5576c21ea3SSascha Wildner #define RT2860_USB_DMA_CFG 0x02a0 /* RT2870 only */ 5676c21ea3SSascha Wildner #define RT2860_US_CYC_CNT 0x02a4 5776c21ea3SSascha Wildner 5876c21ea3SSascha Wildner /* PBF registers */ 5976c21ea3SSascha Wildner #define RT2860_SYS_CTRL 0x0400 6076c21ea3SSascha Wildner #define RT2860_HOST_CMD 0x0404 6176c21ea3SSascha Wildner #define RT2860_PBF_CFG 0x0408 6276c21ea3SSascha Wildner #define RT2860_MAX_PCNT 0x040c 6376c21ea3SSascha Wildner #define RT2860_BUF_CTRL 0x0410 6476c21ea3SSascha Wildner #define RT2860_MCU_INT_STA 0x0414 6576c21ea3SSascha Wildner #define RT2860_MCU_INT_ENA 0x0418 6676c21ea3SSascha Wildner #define RT2860_TXQ_IO(qid) (0x041c + (qid) * 4) 6776c21ea3SSascha Wildner #define RT2860_RX0Q_IO 0x0424 6876c21ea3SSascha Wildner #define RT2860_BCN_OFFSET0 0x042c 6976c21ea3SSascha Wildner #define RT2860_BCN_OFFSET1 0x0430 7076c21ea3SSascha Wildner #define RT2860_TXRXQ_STA 0x0434 7176c21ea3SSascha Wildner #define RT2860_TXRXQ_PCNT 0x0438 7276c21ea3SSascha Wildner #define RT2860_PBF_DBG 0x043c 7376c21ea3SSascha Wildner #define RT2860_CAP_CTRL 0x0440 7476c21ea3SSascha Wildner 7576c21ea3SSascha Wildner /* RT3070 registers */ 7676c21ea3SSascha Wildner #define RT3070_RF_CSR_CFG 0x0500 7776c21ea3SSascha Wildner #define RT3070_EFUSE_CTRL 0x0580 7876c21ea3SSascha Wildner #define RT3070_EFUSE_DATA0 0x0590 7976c21ea3SSascha Wildner #define RT3070_EFUSE_DATA1 0x0594 8076c21ea3SSascha Wildner #define RT3070_EFUSE_DATA2 0x0598 8176c21ea3SSascha Wildner #define RT3070_EFUSE_DATA3 0x059c 8276c21ea3SSascha Wildner #define RT3090_OSC_CTRL 0x05a4 8376c21ea3SSascha Wildner #define RT3070_LDO_CFG0 0x05d4 8476c21ea3SSascha Wildner #define RT3070_GPIO_SWITCH 0x05dc 8576c21ea3SSascha Wildner 8676c21ea3SSascha Wildner /* MAC registers */ 8776c21ea3SSascha Wildner #define RT2860_ASIC_VER_ID 0x1000 8876c21ea3SSascha Wildner #define RT2860_MAC_SYS_CTRL 0x1004 8976c21ea3SSascha Wildner #define RT2860_MAC_ADDR_DW0 0x1008 9076c21ea3SSascha Wildner #define RT2860_MAC_ADDR_DW1 0x100c 9176c21ea3SSascha Wildner #define RT2860_MAC_BSSID_DW0 0x1010 9276c21ea3SSascha Wildner #define RT2860_MAC_BSSID_DW1 0x1014 9376c21ea3SSascha Wildner #define RT2860_MAX_LEN_CFG 0x1018 9476c21ea3SSascha Wildner #define RT2860_BBP_CSR_CFG 0x101c 9576c21ea3SSascha Wildner #define RT2860_RF_CSR_CFG0 0x1020 9676c21ea3SSascha Wildner #define RT2860_RF_CSR_CFG1 0x1024 9776c21ea3SSascha Wildner #define RT2860_RF_CSR_CFG2 0x1028 9876c21ea3SSascha Wildner #define RT2860_LED_CFG 0x102c 9976c21ea3SSascha Wildner 10076c21ea3SSascha Wildner /* undocumented registers */ 10176c21ea3SSascha Wildner #define RT2860_DEBUG 0x10f4 10276c21ea3SSascha Wildner 10376c21ea3SSascha Wildner /* MAC Timing control registers */ 10476c21ea3SSascha Wildner #define RT2860_XIFS_TIME_CFG 0x1100 10576c21ea3SSascha Wildner #define RT2860_BKOFF_SLOT_CFG 0x1104 10676c21ea3SSascha Wildner #define RT2860_NAV_TIME_CFG 0x1108 10776c21ea3SSascha Wildner #define RT2860_CH_TIME_CFG 0x110c 10876c21ea3SSascha Wildner #define RT2860_PBF_LIFE_TIMER 0x1110 10976c21ea3SSascha Wildner #define RT2860_BCN_TIME_CFG 0x1114 11076c21ea3SSascha Wildner #define RT2860_TBTT_SYNC_CFG 0x1118 11176c21ea3SSascha Wildner #define RT2860_TSF_TIMER_DW0 0x111c 11276c21ea3SSascha Wildner #define RT2860_TSF_TIMER_DW1 0x1120 11376c21ea3SSascha Wildner #define RT2860_TBTT_TIMER 0x1124 11476c21ea3SSascha Wildner #define RT2860_INT_TIMER_CFG 0x1128 11576c21ea3SSascha Wildner #define RT2860_INT_TIMER_EN 0x112c 11676c21ea3SSascha Wildner #define RT2860_CH_IDLE_TIME 0x1130 11776c21ea3SSascha Wildner 11876c21ea3SSascha Wildner /* MAC Power Save configuration registers */ 11976c21ea3SSascha Wildner #define RT2860_MAC_STATUS_REG 0x1200 12076c21ea3SSascha Wildner #define RT2860_PWR_PIN_CFG 0x1204 12176c21ea3SSascha Wildner #define RT2860_AUTO_WAKEUP_CFG 0x1208 12276c21ea3SSascha Wildner 12376c21ea3SSascha Wildner /* MAC TX configuration registers */ 12476c21ea3SSascha Wildner #define RT2860_EDCA_AC_CFG(aci) (0x1300 + (aci) * 4) 12576c21ea3SSascha Wildner #define RT2860_EDCA_TID_AC_MAP 0x1310 12676c21ea3SSascha Wildner #define RT2860_TX_PWR_CFG(ridx) (0x1314 + (ridx) * 4) 12776c21ea3SSascha Wildner #define RT2860_TX_PIN_CFG 0x1328 12876c21ea3SSascha Wildner #define RT2860_TX_BAND_CFG 0x132c 12976c21ea3SSascha Wildner #define RT2860_TX_SW_CFG0 0x1330 13076c21ea3SSascha Wildner #define RT2860_TX_SW_CFG1 0x1334 13176c21ea3SSascha Wildner #define RT2860_TX_SW_CFG2 0x1338 13276c21ea3SSascha Wildner #define RT2860_TXOP_THRES_CFG 0x133c 13376c21ea3SSascha Wildner #define RT2860_TXOP_CTRL_CFG 0x1340 13476c21ea3SSascha Wildner #define RT2860_TX_RTS_CFG 0x1344 13576c21ea3SSascha Wildner #define RT2860_TX_TIMEOUT_CFG 0x1348 13676c21ea3SSascha Wildner #define RT2860_TX_RTY_CFG 0x134c 13776c21ea3SSascha Wildner #define RT2860_TX_LINK_CFG 0x1350 13876c21ea3SSascha Wildner #define RT2860_HT_FBK_CFG0 0x1354 13976c21ea3SSascha Wildner #define RT2860_HT_FBK_CFG1 0x1358 14076c21ea3SSascha Wildner #define RT2860_LG_FBK_CFG0 0x135c 14176c21ea3SSascha Wildner #define RT2860_LG_FBK_CFG1 0x1360 14276c21ea3SSascha Wildner #define RT2860_CCK_PROT_CFG 0x1364 14376c21ea3SSascha Wildner #define RT2860_OFDM_PROT_CFG 0x1368 14476c21ea3SSascha Wildner #define RT2860_MM20_PROT_CFG 0x136c 14576c21ea3SSascha Wildner #define RT2860_MM40_PROT_CFG 0x1370 14676c21ea3SSascha Wildner #define RT2860_GF20_PROT_CFG 0x1374 14776c21ea3SSascha Wildner #define RT2860_GF40_PROT_CFG 0x1378 14876c21ea3SSascha Wildner #define RT2860_EXP_CTS_TIME 0x137c 14976c21ea3SSascha Wildner #define RT2860_EXP_ACK_TIME 0x1380 15076c21ea3SSascha Wildner 15176c21ea3SSascha Wildner /* MAC RX configuration registers */ 15276c21ea3SSascha Wildner #define RT2860_RX_FILTR_CFG 0x1400 15376c21ea3SSascha Wildner #define RT2860_AUTO_RSP_CFG 0x1404 15476c21ea3SSascha Wildner #define RT2860_LEGACY_BASIC_RATE 0x1408 15576c21ea3SSascha Wildner #define RT2860_HT_BASIC_RATE 0x140c 15676c21ea3SSascha Wildner #define RT2860_HT_CTRL_CFG 0x1410 15776c21ea3SSascha Wildner #define RT2860_SIFS_COST_CFG 0x1414 15876c21ea3SSascha Wildner #define RT2860_RX_PARSER_CFG 0x1418 15976c21ea3SSascha Wildner 16076c21ea3SSascha Wildner /* MAC Security configuration registers */ 16176c21ea3SSascha Wildner #define RT2860_TX_SEC_CNT0 0x1500 16276c21ea3SSascha Wildner #define RT2860_RX_SEC_CNT0 0x1504 16376c21ea3SSascha Wildner #define RT2860_CCMP_FC_MUTE 0x1508 16476c21ea3SSascha Wildner 16576c21ea3SSascha Wildner /* MAC HCCA/PSMP configuration registers */ 16676c21ea3SSascha Wildner #define RT2860_TXOP_HLDR_ADDR0 0x1600 16776c21ea3SSascha Wildner #define RT2860_TXOP_HLDR_ADDR1 0x1604 16876c21ea3SSascha Wildner #define RT2860_TXOP_HLDR_ET 0x1608 16976c21ea3SSascha Wildner #define RT2860_QOS_CFPOLL_RA_DW0 0x160c 17076c21ea3SSascha Wildner #define RT2860_QOS_CFPOLL_A1_DW1 0x1610 17176c21ea3SSascha Wildner #define RT2860_QOS_CFPOLL_QC 0x1614 17276c21ea3SSascha Wildner 17376c21ea3SSascha Wildner /* MAC Statistics Counters */ 17476c21ea3SSascha Wildner #define RT2860_RX_STA_CNT0 0x1700 17576c21ea3SSascha Wildner #define RT2860_RX_STA_CNT1 0x1704 17676c21ea3SSascha Wildner #define RT2860_RX_STA_CNT2 0x1708 17776c21ea3SSascha Wildner #define RT2860_TX_STA_CNT0 0x170c 17876c21ea3SSascha Wildner #define RT2860_TX_STA_CNT1 0x1710 17976c21ea3SSascha Wildner #define RT2860_TX_STA_CNT2 0x1714 18076c21ea3SSascha Wildner #define RT2860_TX_STAT_FIFO 0x1718 18176c21ea3SSascha Wildner 18276c21ea3SSascha Wildner /* RX WCID search table */ 18376c21ea3SSascha Wildner #define RT2860_WCID_ENTRY(wcid) (0x1800 + (wcid) * 8) 18476c21ea3SSascha Wildner 18576c21ea3SSascha Wildner #define RT2860_FW_BASE 0x2000 18676c21ea3SSascha Wildner #define RT2870_FW_BASE 0x3000 18776c21ea3SSascha Wildner 18876c21ea3SSascha Wildner /* Pair-wise key table */ 18976c21ea3SSascha Wildner #define RT2860_PKEY(wcid) (0x4000 + (wcid) * 32) 19076c21ea3SSascha Wildner 19176c21ea3SSascha Wildner /* IV/EIV table */ 19276c21ea3SSascha Wildner #define RT2860_IVEIV(wcid) (0x6000 + (wcid) * 8) 19376c21ea3SSascha Wildner 19476c21ea3SSascha Wildner /* WCID attribute table */ 19576c21ea3SSascha Wildner #define RT2860_WCID_ATTR(wcid) (0x6800 + (wcid) * 4) 19676c21ea3SSascha Wildner 19776c21ea3SSascha Wildner /* Shared Key Table */ 19876c21ea3SSascha Wildner #define RT2860_SKEY(vap, kidx) (0x6c00 + (vap) * 128 + (kidx) * 32) 19976c21ea3SSascha Wildner 20076c21ea3SSascha Wildner /* Shared Key Mode */ 20176c21ea3SSascha Wildner #define RT2860_SKEY_MODE_0_7 0x7000 20276c21ea3SSascha Wildner #define RT2860_SKEY_MODE_8_15 0x7004 20376c21ea3SSascha Wildner #define RT2860_SKEY_MODE_16_23 0x7008 20476c21ea3SSascha Wildner #define RT2860_SKEY_MODE_24_31 0x700c 20576c21ea3SSascha Wildner 20676c21ea3SSascha Wildner /* Shared Memory between MCU and host */ 20776c21ea3SSascha Wildner #define RT2860_H2M_MAILBOX 0x7010 20876c21ea3SSascha Wildner #define RT2860_H2M_MAILBOX_CID 0x7014 20976c21ea3SSascha Wildner #define RT2860_H2M_MAILBOX_STATUS 0x701c 21076c21ea3SSascha Wildner #define RT2860_H2M_BBPAGENT 0x7028 21176c21ea3SSascha Wildner #define RT2860_BCN_BASE(vap) (0x7800 + (vap) * 512) 21276c21ea3SSascha Wildner 21376c21ea3SSascha Wildner 21476c21ea3SSascha Wildner /* possible flags for RT2860_PCI_CFG */ 21576c21ea3SSascha Wildner #define RT2860_PCI_CFG_USB (1 << 17) 21676c21ea3SSascha Wildner #define RT2860_PCI_CFG_PCI (1 << 16) 21776c21ea3SSascha Wildner 21876c21ea3SSascha Wildner /* possible flags for register RT2860_PCI_EECTRL */ 21976c21ea3SSascha Wildner #define RT2860_C (1 << 0) 22076c21ea3SSascha Wildner #define RT2860_S (1 << 1) 22176c21ea3SSascha Wildner #define RT2860_D (1 << 2) 22276c21ea3SSascha Wildner #define RT2860_SHIFT_D 2 22376c21ea3SSascha Wildner #define RT2860_Q (1 << 3) 22476c21ea3SSascha Wildner #define RT2860_SHIFT_Q 3 22576c21ea3SSascha Wildner 22676c21ea3SSascha Wildner /* possible flags for registers INT_STATUS/INT_MASK */ 22776c21ea3SSascha Wildner #define RT2860_TX_COHERENT (1 << 17) 22876c21ea3SSascha Wildner #define RT2860_RX_COHERENT (1 << 16) 22976c21ea3SSascha Wildner #define RT2860_MAC_INT_4 (1 << 15) 23076c21ea3SSascha Wildner #define RT2860_MAC_INT_3 (1 << 14) 23176c21ea3SSascha Wildner #define RT2860_MAC_INT_2 (1 << 13) 23276c21ea3SSascha Wildner #define RT2860_MAC_INT_1 (1 << 12) 23376c21ea3SSascha Wildner #define RT2860_MAC_INT_0 (1 << 11) 23476c21ea3SSascha Wildner #define RT2860_TX_RX_COHERENT (1 << 10) 23576c21ea3SSascha Wildner #define RT2860_MCU_CMD_INT (1 << 9) 23676c21ea3SSascha Wildner #define RT2860_TX_DONE_INT5 (1 << 8) 23776c21ea3SSascha Wildner #define RT2860_TX_DONE_INT4 (1 << 7) 23876c21ea3SSascha Wildner #define RT2860_TX_DONE_INT3 (1 << 6) 23976c21ea3SSascha Wildner #define RT2860_TX_DONE_INT2 (1 << 5) 24076c21ea3SSascha Wildner #define RT2860_TX_DONE_INT1 (1 << 4) 24176c21ea3SSascha Wildner #define RT2860_TX_DONE_INT0 (1 << 3) 24276c21ea3SSascha Wildner #define RT2860_RX_DONE_INT (1 << 2) 24376c21ea3SSascha Wildner #define RT2860_TX_DLY_INT (1 << 1) 24476c21ea3SSascha Wildner #define RT2860_RX_DLY_INT (1 << 0) 24576c21ea3SSascha Wildner 24676c21ea3SSascha Wildner /* possible flags for register WPDMA_GLO_CFG */ 24776c21ea3SSascha Wildner #define RT2860_HDR_SEG_LEN_SHIFT 8 24876c21ea3SSascha Wildner #define RT2860_BIG_ENDIAN (1 << 7) 24976c21ea3SSascha Wildner #define RT2860_TX_WB_DDONE (1 << 6) 25076c21ea3SSascha Wildner #define RT2860_WPDMA_BT_SIZE_SHIFT 4 25176c21ea3SSascha Wildner #define RT2860_WPDMA_BT_SIZE16 0 25276c21ea3SSascha Wildner #define RT2860_WPDMA_BT_SIZE32 1 25376c21ea3SSascha Wildner #define RT2860_WPDMA_BT_SIZE64 2 25476c21ea3SSascha Wildner #define RT2860_WPDMA_BT_SIZE128 3 25576c21ea3SSascha Wildner #define RT2860_RX_DMA_BUSY (1 << 3) 25676c21ea3SSascha Wildner #define RT2860_RX_DMA_EN (1 << 2) 25776c21ea3SSascha Wildner #define RT2860_TX_DMA_BUSY (1 << 1) 25876c21ea3SSascha Wildner #define RT2860_TX_DMA_EN (1 << 0) 25976c21ea3SSascha Wildner 26076c21ea3SSascha Wildner /* possible flags for register DELAY_INT_CFG */ 261*91b30d50SMatthew Dillon #define RT2860_TXDLY_INT_EN (1U << 31) 26276c21ea3SSascha Wildner #define RT2860_TXMAX_PINT_SHIFT 24 26376c21ea3SSascha Wildner #define RT2860_TXMAX_PTIME_SHIFT 16 26476c21ea3SSascha Wildner #define RT2860_RXDLY_INT_EN (1 << 15) 26576c21ea3SSascha Wildner #define RT2860_RXMAX_PINT_SHIFT 8 26676c21ea3SSascha Wildner #define RT2860_RXMAX_PTIME_SHIFT 0 26776c21ea3SSascha Wildner 26876c21ea3SSascha Wildner /* possible flags for register GPIO_CTRL */ 26976c21ea3SSascha Wildner #define RT2860_GPIO_D_SHIFT 8 27076c21ea3SSascha Wildner #define RT2860_GPIO_O_SHIFT 0 27176c21ea3SSascha Wildner 27276c21ea3SSascha Wildner /* possible flags for register USB_DMA_CFG */ 273*91b30d50SMatthew Dillon #define RT2860_USB_TX_BUSY (1U << 31) 27476c21ea3SSascha Wildner #define RT2860_USB_RX_BUSY (1 << 30) 27576c21ea3SSascha Wildner #define RT2860_USB_EPOUT_VLD_SHIFT 24 27676c21ea3SSascha Wildner #define RT2860_USB_TX_EN (1 << 23) 27776c21ea3SSascha Wildner #define RT2860_USB_RX_EN (1 << 22) 27876c21ea3SSascha Wildner #define RT2860_USB_RX_AGG_EN (1 << 21) 27976c21ea3SSascha Wildner #define RT2860_USB_TXOP_HALT (1 << 20) 28076c21ea3SSascha Wildner #define RT2860_USB_TX_CLEAR (1 << 19) 28176c21ea3SSascha Wildner #define RT2860_USB_PHY_WD_EN (1 << 16) 28276c21ea3SSascha Wildner #define RT2860_USB_PHY_MAN_RST (1 << 15) 28376c21ea3SSascha Wildner #define RT2860_USB_RX_AGG_LMT(x) ((x) << 8) /* in unit of 1KB */ 28476c21ea3SSascha Wildner #define RT2860_USB_RX_AGG_TO(x) ((x) & 0xff) /* in unit of 33ns */ 28576c21ea3SSascha Wildner 28676c21ea3SSascha Wildner /* possible flags for register US_CYC_CNT */ 28776c21ea3SSascha Wildner #define RT2860_TEST_EN (1 << 24) 28876c21ea3SSascha Wildner #define RT2860_TEST_SEL_SHIFT 16 28976c21ea3SSascha Wildner #define RT2860_BT_MODE_EN (1 << 8) 29076c21ea3SSascha Wildner #define RT2860_US_CYC_CNT_SHIFT 0 29176c21ea3SSascha Wildner 29276c21ea3SSascha Wildner /* possible flags for register SYS_CTRL */ 29376c21ea3SSascha Wildner #define RT2860_HST_PM_SEL (1 << 16) 29476c21ea3SSascha Wildner #define RT2860_CAP_MODE (1 << 14) 29576c21ea3SSascha Wildner #define RT2860_PME_OEN (1 << 13) 29676c21ea3SSascha Wildner #define RT2860_CLKSELECT (1 << 12) 29776c21ea3SSascha Wildner #define RT2860_PBF_CLK_EN (1 << 11) 29876c21ea3SSascha Wildner #define RT2860_MAC_CLK_EN (1 << 10) 29976c21ea3SSascha Wildner #define RT2860_DMA_CLK_EN (1 << 9) 30076c21ea3SSascha Wildner #define RT2860_MCU_READY (1 << 7) 30176c21ea3SSascha Wildner #define RT2860_ASY_RESET (1 << 4) 30276c21ea3SSascha Wildner #define RT2860_PBF_RESET (1 << 3) 30376c21ea3SSascha Wildner #define RT2860_MAC_RESET (1 << 2) 30476c21ea3SSascha Wildner #define RT2860_DMA_RESET (1 << 1) 30576c21ea3SSascha Wildner #define RT2860_MCU_RESET (1 << 0) 30676c21ea3SSascha Wildner 30776c21ea3SSascha Wildner /* possible values for register HOST_CMD */ 30876c21ea3SSascha Wildner #define RT2860_MCU_CMD_SLEEP 0x30 30976c21ea3SSascha Wildner #define RT2860_MCU_CMD_WAKEUP 0x31 31076c21ea3SSascha Wildner #define RT2860_MCU_CMD_LEDS 0x50 31176c21ea3SSascha Wildner #define RT2860_MCU_CMD_LED_RSSI 0x51 31276c21ea3SSascha Wildner #define RT2860_MCU_CMD_LED1 0x52 31376c21ea3SSascha Wildner #define RT2860_MCU_CMD_LED2 0x53 31476c21ea3SSascha Wildner #define RT2860_MCU_CMD_LED3 0x54 31576c21ea3SSascha Wildner #define RT2860_MCU_CMD_RFRESET 0x72 31676c21ea3SSascha Wildner #define RT2860_MCU_CMD_ANTSEL 0x73 31776c21ea3SSascha Wildner #define RT2860_MCU_CMD_BBP 0x80 31876c21ea3SSascha Wildner #define RT2860_MCU_CMD_PSLEVEL 0x83 31976c21ea3SSascha Wildner 32076c21ea3SSascha Wildner /* possible flags for register PBF_CFG */ 32176c21ea3SSascha Wildner #define RT2860_TX1Q_NUM_SHIFT 21 32276c21ea3SSascha Wildner #define RT2860_TX2Q_NUM_SHIFT 16 32376c21ea3SSascha Wildner #define RT2860_NULL0_MODE (1 << 15) 32476c21ea3SSascha Wildner #define RT2860_NULL1_MODE (1 << 14) 32576c21ea3SSascha Wildner #define RT2860_RX_DROP_MODE (1 << 13) 32676c21ea3SSascha Wildner #define RT2860_TX0Q_MANUAL (1 << 12) 32776c21ea3SSascha Wildner #define RT2860_TX1Q_MANUAL (1 << 11) 32876c21ea3SSascha Wildner #define RT2860_TX2Q_MANUAL (1 << 10) 32976c21ea3SSascha Wildner #define RT2860_RX0Q_MANUAL (1 << 9) 33076c21ea3SSascha Wildner #define RT2860_HCCA_EN (1 << 8) 33176c21ea3SSascha Wildner #define RT2860_TX0Q_EN (1 << 4) 33276c21ea3SSascha Wildner #define RT2860_TX1Q_EN (1 << 3) 33376c21ea3SSascha Wildner #define RT2860_TX2Q_EN (1 << 2) 33476c21ea3SSascha Wildner #define RT2860_RX0Q_EN (1 << 1) 33576c21ea3SSascha Wildner 33676c21ea3SSascha Wildner /* possible flags for register BUF_CTRL */ 33776c21ea3SSascha Wildner #define RT2860_WRITE_TXQ(qid) (1 << (11 - (qid))) 33876c21ea3SSascha Wildner #define RT2860_NULL0_KICK (1 << 7) 33976c21ea3SSascha Wildner #define RT2860_NULL1_KICK (1 << 6) 34076c21ea3SSascha Wildner #define RT2860_BUF_RESET (1 << 5) 34176c21ea3SSascha Wildner #define RT2860_READ_TXQ(qid) (1 << (3 - (qid)) 34276c21ea3SSascha Wildner #define RT2860_READ_RX0Q (1 << 0) 34376c21ea3SSascha Wildner 34476c21ea3SSascha Wildner /* possible flags for registers MCU_INT_STA/MCU_INT_ENA */ 34576c21ea3SSascha Wildner #define RT2860_MCU_MAC_INT_8 (1 << 24) 34676c21ea3SSascha Wildner #define RT2860_MCU_MAC_INT_7 (1 << 23) 34776c21ea3SSascha Wildner #define RT2860_MCU_MAC_INT_6 (1 << 22) 34876c21ea3SSascha Wildner #define RT2860_MCU_MAC_INT_4 (1 << 20) 34976c21ea3SSascha Wildner #define RT2860_MCU_MAC_INT_3 (1 << 19) 35076c21ea3SSascha Wildner #define RT2860_MCU_MAC_INT_2 (1 << 18) 35176c21ea3SSascha Wildner #define RT2860_MCU_MAC_INT_1 (1 << 17) 35276c21ea3SSascha Wildner #define RT2860_MCU_MAC_INT_0 (1 << 16) 35376c21ea3SSascha Wildner #define RT2860_DTX0_INT (1 << 11) 35476c21ea3SSascha Wildner #define RT2860_DTX1_INT (1 << 10) 35576c21ea3SSascha Wildner #define RT2860_DTX2_INT (1 << 9) 35676c21ea3SSascha Wildner #define RT2860_DRX0_INT (1 << 8) 35776c21ea3SSascha Wildner #define RT2860_HCMD_INT (1 << 7) 35876c21ea3SSascha Wildner #define RT2860_N0TX_INT (1 << 6) 35976c21ea3SSascha Wildner #define RT2860_N1TX_INT (1 << 5) 36076c21ea3SSascha Wildner #define RT2860_BCNTX_INT (1 << 4) 36176c21ea3SSascha Wildner #define RT2860_MTX0_INT (1 << 3) 36276c21ea3SSascha Wildner #define RT2860_MTX1_INT (1 << 2) 36376c21ea3SSascha Wildner #define RT2860_MTX2_INT (1 << 1) 36476c21ea3SSascha Wildner #define RT2860_MRX0_INT (1 << 0) 36576c21ea3SSascha Wildner 36676c21ea3SSascha Wildner /* possible flags for register TXRXQ_PCNT */ 36776c21ea3SSascha Wildner #define RT2860_RX0Q_PCNT_MASK 0xff000000 36876c21ea3SSascha Wildner #define RT2860_TX2Q_PCNT_MASK 0x00ff0000 36976c21ea3SSascha Wildner #define RT2860_TX1Q_PCNT_MASK 0x0000ff00 37076c21ea3SSascha Wildner #define RT2860_TX0Q_PCNT_MASK 0x000000ff 37176c21ea3SSascha Wildner 37276c21ea3SSascha Wildner /* possible flags for register CAP_CTRL */ 373*91b30d50SMatthew Dillon #define RT2860_CAP_ADC_FEQ (1U << 31) 37476c21ea3SSascha Wildner #define RT2860_CAP_START (1 << 30) 37576c21ea3SSascha Wildner #define RT2860_MAN_TRIG (1 << 29) 37676c21ea3SSascha Wildner #define RT2860_TRIG_OFFSET_SHIFT 16 37776c21ea3SSascha Wildner #define RT2860_START_ADDR_SHIFT 0 37876c21ea3SSascha Wildner 37976c21ea3SSascha Wildner /* possible flags for register RF_CSR_CFG */ 38076c21ea3SSascha Wildner #define RT3070_RF_KICK (1 << 17) 38176c21ea3SSascha Wildner #define RT3070_RF_WRITE (1 << 16) 38276c21ea3SSascha Wildner 38376c21ea3SSascha Wildner /* possible flags for register EFUSE_CTRL */ 384*91b30d50SMatthew Dillon #define RT3070_SEL_EFUSE (1U << 31) 38576c21ea3SSascha Wildner #define RT3070_EFSROM_KICK (1 << 30) 38676c21ea3SSascha Wildner #define RT3070_EFSROM_AIN_MASK 0x03ff0000 38776c21ea3SSascha Wildner #define RT3070_EFSROM_AIN_SHIFT 16 38876c21ea3SSascha Wildner #define RT3070_EFSROM_MODE_MASK 0x000000c0 38976c21ea3SSascha Wildner #define RT3070_EFUSE_AOUT_MASK 0x0000003f 39076c21ea3SSascha Wildner 39176c21ea3SSascha Wildner /* possible flags for register MAC_SYS_CTRL */ 39276c21ea3SSascha Wildner #define RT2860_RX_TS_EN (1 << 7) 39376c21ea3SSascha Wildner #define RT2860_WLAN_HALT_EN (1 << 6) 39476c21ea3SSascha Wildner #define RT2860_PBF_LOOP_EN (1 << 5) 39576c21ea3SSascha Wildner #define RT2860_CONT_TX_TEST (1 << 4) 39676c21ea3SSascha Wildner #define RT2860_MAC_RX_EN (1 << 3) 39776c21ea3SSascha Wildner #define RT2860_MAC_TX_EN (1 << 2) 39876c21ea3SSascha Wildner #define RT2860_BBP_HRST (1 << 1) 39976c21ea3SSascha Wildner #define RT2860_MAC_SRST (1 << 0) 40076c21ea3SSascha Wildner 40176c21ea3SSascha Wildner /* possible flags for register MAC_BSSID_DW1 */ 40276c21ea3SSascha Wildner #define RT2860_MULTI_BCN_NUM_SHIFT 18 40376c21ea3SSascha Wildner #define RT2860_MULTI_BSSID_MODE_SHIFT 16 40476c21ea3SSascha Wildner 40576c21ea3SSascha Wildner /* possible flags for register MAX_LEN_CFG */ 40676c21ea3SSascha Wildner #define RT2860_MIN_MPDU_LEN_SHIFT 16 40776c21ea3SSascha Wildner #define RT2860_MAX_PSDU_LEN_SHIFT 12 40876c21ea3SSascha Wildner #define RT2860_MAX_PSDU_LEN8K 0 40976c21ea3SSascha Wildner #define RT2860_MAX_PSDU_LEN16K 1 41076c21ea3SSascha Wildner #define RT2860_MAX_PSDU_LEN32K 2 41176c21ea3SSascha Wildner #define RT2860_MAX_PSDU_LEN64K 3 41276c21ea3SSascha Wildner #define RT2860_MAX_MPDU_LEN_SHIFT 0 41376c21ea3SSascha Wildner 41476c21ea3SSascha Wildner /* possible flags for registers BBP_CSR_CFG/H2M_BBPAGENT */ 41576c21ea3SSascha Wildner #define RT2860_BBP_RW_PARALLEL (1 << 19) 41676c21ea3SSascha Wildner #define RT2860_BBP_PAR_DUR_112_5 (1 << 18) 41776c21ea3SSascha Wildner #define RT2860_BBP_CSR_KICK (1 << 17) 41876c21ea3SSascha Wildner #define RT2860_BBP_CSR_READ (1 << 16) 41976c21ea3SSascha Wildner #define RT2860_BBP_ADDR_SHIFT 8 42076c21ea3SSascha Wildner #define RT2860_BBP_DATA_SHIFT 0 42176c21ea3SSascha Wildner 42276c21ea3SSascha Wildner /* possible flags for register RF_CSR_CFG0 */ 423*91b30d50SMatthew Dillon #define RT2860_RF_REG_CTRL (1U << 31) 42476c21ea3SSascha Wildner #define RT2860_RF_LE_SEL1 (1 << 30) 42576c21ea3SSascha Wildner #define RT2860_RF_LE_STBY (1 << 29) 42676c21ea3SSascha Wildner #define RT2860_RF_REG_WIDTH_SHIFT 24 42776c21ea3SSascha Wildner #define RT2860_RF_REG_0_SHIFT 0 42876c21ea3SSascha Wildner 42976c21ea3SSascha Wildner /* possible flags for register RF_CSR_CFG1 */ 43076c21ea3SSascha Wildner #define RT2860_RF_DUR_5 (1 << 24) 43176c21ea3SSascha Wildner #define RT2860_RF_REG_1_SHIFT 0 43276c21ea3SSascha Wildner 43376c21ea3SSascha Wildner /* possible flags for register LED_CFG */ 43476c21ea3SSascha Wildner #define RT2860_LED_POL (1 << 30) 43576c21ea3SSascha Wildner #define RT2860_Y_LED_MODE_SHIFT 28 43676c21ea3SSascha Wildner #define RT2860_G_LED_MODE_SHIFT 26 43776c21ea3SSascha Wildner #define RT2860_R_LED_MODE_SHIFT 24 43876c21ea3SSascha Wildner #define RT2860_LED_MODE_OFF 0 43976c21ea3SSascha Wildner #define RT2860_LED_MODE_BLINK_TX 1 44076c21ea3SSascha Wildner #define RT2860_LED_MODE_SLOW_BLINK 2 44176c21ea3SSascha Wildner #define RT2860_LED_MODE_ON 3 44276c21ea3SSascha Wildner #define RT2860_SLOW_BLK_TIME_SHIFT 16 44376c21ea3SSascha Wildner #define RT2860_LED_OFF_TIME_SHIFT 8 44476c21ea3SSascha Wildner #define RT2860_LED_ON_TIME_SHIFT 0 44576c21ea3SSascha Wildner 44676c21ea3SSascha Wildner /* possible flags for register XIFS_TIME_CFG */ 44776c21ea3SSascha Wildner #define RT2860_BB_RXEND_EN (1 << 29) 44876c21ea3SSascha Wildner #define RT2860_EIFS_TIME_SHIFT 20 44976c21ea3SSascha Wildner #define RT2860_OFDM_XIFS_TIME_SHIFT 16 45076c21ea3SSascha Wildner #define RT2860_OFDM_SIFS_TIME_SHIFT 8 45176c21ea3SSascha Wildner #define RT2860_CCK_SIFS_TIME_SHIFT 0 45276c21ea3SSascha Wildner 45376c21ea3SSascha Wildner /* possible flags for register BKOFF_SLOT_CFG */ 45476c21ea3SSascha Wildner #define RT2860_CC_DELAY_TIME_SHIFT 8 45576c21ea3SSascha Wildner #define RT2860_SLOT_TIME 0 45676c21ea3SSascha Wildner 45776c21ea3SSascha Wildner /* possible flags for register NAV_TIME_CFG */ 458*91b30d50SMatthew Dillon #define RT2860_NAV_UPD (1U << 31) 45976c21ea3SSascha Wildner #define RT2860_NAV_UPD_VAL_SHIFT 16 46076c21ea3SSascha Wildner #define RT2860_NAV_CLR_EN (1 << 15) 46176c21ea3SSascha Wildner #define RT2860_NAV_TIMER_SHIFT 0 46276c21ea3SSascha Wildner 46376c21ea3SSascha Wildner /* possible flags for register CH_TIME_CFG */ 46476c21ea3SSascha Wildner #define RT2860_EIFS_AS_CH_BUSY (1 << 4) 46576c21ea3SSascha Wildner #define RT2860_NAV_AS_CH_BUSY (1 << 3) 46676c21ea3SSascha Wildner #define RT2860_RX_AS_CH_BUSY (1 << 2) 46776c21ea3SSascha Wildner #define RT2860_TX_AS_CH_BUSY (1 << 1) 46876c21ea3SSascha Wildner #define RT2860_CH_STA_TIMER_EN (1 << 0) 46976c21ea3SSascha Wildner 47076c21ea3SSascha Wildner /* possible values for register BCN_TIME_CFG */ 47176c21ea3SSascha Wildner #define RT2860_TSF_INS_COMP_SHIFT 24 47276c21ea3SSascha Wildner #define RT2860_BCN_TX_EN (1 << 20) 47376c21ea3SSascha Wildner #define RT2860_TBTT_TIMER_EN (1 << 19) 47476c21ea3SSascha Wildner #define RT2860_TSF_SYNC_MODE_SHIFT 17 47576c21ea3SSascha Wildner #define RT2860_TSF_SYNC_MODE_DIS 0 47676c21ea3SSascha Wildner #define RT2860_TSF_SYNC_MODE_STA 1 47776c21ea3SSascha Wildner #define RT2860_TSF_SYNC_MODE_IBSS 2 47876c21ea3SSascha Wildner #define RT2860_TSF_SYNC_MODE_HOSTAP 3 47976c21ea3SSascha Wildner #define RT2860_TSF_TIMER_EN (1 << 16) 48076c21ea3SSascha Wildner #define RT2860_BCN_INTVAL_SHIFT 0 48176c21ea3SSascha Wildner 48276c21ea3SSascha Wildner /* possible flags for register TBTT_SYNC_CFG */ 48376c21ea3SSascha Wildner #define RT2860_BCN_CWMIN_SHIFT 20 48476c21ea3SSascha Wildner #define RT2860_BCN_AIFSN_SHIFT 16 48576c21ea3SSascha Wildner #define RT2860_BCN_EXP_WIN_SHIFT 8 48676c21ea3SSascha Wildner #define RT2860_TBTT_ADJUST_SHIFT 0 48776c21ea3SSascha Wildner 48876c21ea3SSascha Wildner /* possible flags for register INT_TIMER_CFG */ 48976c21ea3SSascha Wildner #define RT2860_GP_TIMER_SHIFT 16 49076c21ea3SSascha Wildner #define RT2860_PRE_TBTT_TIMER_SHIFT 0 49176c21ea3SSascha Wildner 49276c21ea3SSascha Wildner /* possible flags for register INT_TIMER_EN */ 49376c21ea3SSascha Wildner #define RT2860_GP_TIMER_EN (1 << 1) 49476c21ea3SSascha Wildner #define RT2860_PRE_TBTT_INT_EN (1 << 0) 49576c21ea3SSascha Wildner 49676c21ea3SSascha Wildner /* possible flags for register MAC_STATUS_REG */ 49776c21ea3SSascha Wildner #define RT2860_RX_STATUS_BUSY (1 << 1) 49876c21ea3SSascha Wildner #define RT2860_TX_STATUS_BUSY (1 << 0) 49976c21ea3SSascha Wildner 50076c21ea3SSascha Wildner /* possible flags for register PWR_PIN_CFG */ 50176c21ea3SSascha Wildner #define RT2860_IO_ADDA_PD (1 << 3) 50276c21ea3SSascha Wildner #define RT2860_IO_PLL_PD (1 << 2) 50376c21ea3SSascha Wildner #define RT2860_IO_RA_PE (1 << 1) 50476c21ea3SSascha Wildner #define RT2860_IO_RF_PE (1 << 0) 50576c21ea3SSascha Wildner 50676c21ea3SSascha Wildner /* possible flags for register AUTO_WAKEUP_CFG */ 50776c21ea3SSascha Wildner #define RT2860_AUTO_WAKEUP_EN (1 << 15) 50876c21ea3SSascha Wildner #define RT2860_SLEEP_TBTT_NUM_SHIFT 8 50976c21ea3SSascha Wildner #define RT2860_WAKEUP_LEAD_TIME_SHIFT 0 51076c21ea3SSascha Wildner 51176c21ea3SSascha Wildner /* possible flags for register TX_PIN_CFG */ 512*91b30d50SMatthew Dillon #define RT3593_LNA_PE_G2_POL (1U << 31) 51376c21ea3SSascha Wildner #define RT3593_LNA_PE_A2_POL (1 << 30) 51476c21ea3SSascha Wildner #define RT3593_LNA_PE_G2_EN (1 << 29) 51576c21ea3SSascha Wildner #define RT3593_LNA_PE_A2_EN (1 << 28) 51676c21ea3SSascha Wildner #define RT3593_LNA_PE2_EN (RT3593_LNA_PE_A2_EN | RT3593_LNA_PE_G2_EN) 51776c21ea3SSascha Wildner #define RT3593_PA_PE_G2_POL (1 << 27) 51876c21ea3SSascha Wildner #define RT3593_PA_PE_A2_POL (1 << 26) 51976c21ea3SSascha Wildner #define RT3593_PA_PE_G2_EN (1 << 25) 52076c21ea3SSascha Wildner #define RT3593_PA_PE_A2_EN (1 << 24) 52176c21ea3SSascha Wildner #define RT2860_TRSW_POL (1 << 19) 52276c21ea3SSascha Wildner #define RT2860_TRSW_EN (1 << 18) 52376c21ea3SSascha Wildner #define RT2860_RFTR_POL (1 << 17) 52476c21ea3SSascha Wildner #define RT2860_RFTR_EN (1 << 16) 52576c21ea3SSascha Wildner #define RT2860_LNA_PE_G1_POL (1 << 15) 52676c21ea3SSascha Wildner #define RT2860_LNA_PE_A1_POL (1 << 14) 52776c21ea3SSascha Wildner #define RT2860_LNA_PE_G0_POL (1 << 13) 52876c21ea3SSascha Wildner #define RT2860_LNA_PE_A0_POL (1 << 12) 52976c21ea3SSascha Wildner #define RT2860_LNA_PE_G1_EN (1 << 11) 53076c21ea3SSascha Wildner #define RT2860_LNA_PE_A1_EN (1 << 10) 53176c21ea3SSascha Wildner #define RT2860_LNA_PE1_EN (RT2860_LNA_PE_A1_EN | RT2860_LNA_PE_G1_EN) 53276c21ea3SSascha Wildner #define RT2860_LNA_PE_G0_EN (1 << 9) 53376c21ea3SSascha Wildner #define RT2860_LNA_PE_A0_EN (1 << 8) 53476c21ea3SSascha Wildner #define RT2860_LNA_PE0_EN (RT2860_LNA_PE_A0_EN | RT2860_LNA_PE_G0_EN) 53576c21ea3SSascha Wildner #define RT2860_PA_PE_G1_POL (1 << 7) 53676c21ea3SSascha Wildner #define RT2860_PA_PE_A1_POL (1 << 6) 53776c21ea3SSascha Wildner #define RT2860_PA_PE_G0_POL (1 << 5) 53876c21ea3SSascha Wildner #define RT2860_PA_PE_A0_POL (1 << 4) 53976c21ea3SSascha Wildner #define RT2860_PA_PE_G1_EN (1 << 3) 54076c21ea3SSascha Wildner #define RT2860_PA_PE_A1_EN (1 << 2) 54176c21ea3SSascha Wildner #define RT2860_PA_PE_G0_EN (1 << 1) 54276c21ea3SSascha Wildner #define RT2860_PA_PE_A0_EN (1 << 0) 54376c21ea3SSascha Wildner 54476c21ea3SSascha Wildner /* possible flags for register TX_BAND_CFG */ 54576c21ea3SSascha Wildner #define RT2860_5G_BAND_SEL_N (1 << 2) 54676c21ea3SSascha Wildner #define RT2860_5G_BAND_SEL_P (1 << 1) 54776c21ea3SSascha Wildner #define RT2860_TX_BAND_SEL (1 << 0) 54876c21ea3SSascha Wildner 54976c21ea3SSascha Wildner /* possible flags for register TX_SW_CFG0 */ 55076c21ea3SSascha Wildner #define RT2860_DLY_RFTR_EN_SHIFT 24 55176c21ea3SSascha Wildner #define RT2860_DLY_TRSW_EN_SHIFT 16 55276c21ea3SSascha Wildner #define RT2860_DLY_PAPE_EN_SHIFT 8 55376c21ea3SSascha Wildner #define RT2860_DLY_TXPE_EN_SHIFT 0 55476c21ea3SSascha Wildner 55576c21ea3SSascha Wildner /* possible flags for register TX_SW_CFG1 */ 55676c21ea3SSascha Wildner #define RT2860_DLY_RFTR_DIS_SHIFT 16 55776c21ea3SSascha Wildner #define RT2860_DLY_TRSW_DIS_SHIFT 8 55876c21ea3SSascha Wildner #define RT2860_DLY_PAPE_DIS SHIFT 0 55976c21ea3SSascha Wildner 56076c21ea3SSascha Wildner /* possible flags for register TX_SW_CFG2 */ 56176c21ea3SSascha Wildner #define RT2860_DLY_LNA_EN_SHIFT 24 56276c21ea3SSascha Wildner #define RT2860_DLY_LNA_DIS_SHIFT 16 56376c21ea3SSascha Wildner #define RT2860_DLY_DAC_EN_SHIFT 8 56476c21ea3SSascha Wildner #define RT2860_DLY_DAC_DIS_SHIFT 0 56576c21ea3SSascha Wildner 56676c21ea3SSascha Wildner /* possible flags for register TXOP_THRES_CFG */ 56776c21ea3SSascha Wildner #define RT2860_TXOP_REM_THRES_SHIFT 24 56876c21ea3SSascha Wildner #define RT2860_CF_END_THRES_SHIFT 16 56976c21ea3SSascha Wildner #define RT2860_RDG_IN_THRES 8 57076c21ea3SSascha Wildner #define RT2860_RDG_OUT_THRES 0 57176c21ea3SSascha Wildner 57276c21ea3SSascha Wildner /* possible flags for register TXOP_CTRL_CFG */ 57376c21ea3SSascha Wildner #define RT2860_EXT_CW_MIN_SHIFT 16 57476c21ea3SSascha Wildner #define RT2860_EXT_CCA_DLY_SHIFT 8 57576c21ea3SSascha Wildner #define RT2860_EXT_CCA_EN (1 << 7) 57676c21ea3SSascha Wildner #define RT2860_LSIG_TXOP_EN (1 << 6) 57776c21ea3SSascha Wildner #define RT2860_TXOP_TRUN_EN_MIMOPS (1 << 4) 57876c21ea3SSascha Wildner #define RT2860_TXOP_TRUN_EN_TXOP (1 << 3) 57976c21ea3SSascha Wildner #define RT2860_TXOP_TRUN_EN_RATE (1 << 2) 58076c21ea3SSascha Wildner #define RT2860_TXOP_TRUN_EN_AC (1 << 1) 58176c21ea3SSascha Wildner #define RT2860_TXOP_TRUN_EN_TIMEOUT (1 << 0) 58276c21ea3SSascha Wildner 58376c21ea3SSascha Wildner /* possible flags for register TX_RTS_CFG */ 58476c21ea3SSascha Wildner #define RT2860_RTS_FBK_EN (1 << 24) 58576c21ea3SSascha Wildner #define RT2860_RTS_THRES_SHIFT 8 58676c21ea3SSascha Wildner #define RT2860_RTS_RTY_LIMIT_SHIFT 0 58776c21ea3SSascha Wildner 58876c21ea3SSascha Wildner /* possible flags for register TX_TIMEOUT_CFG */ 58976c21ea3SSascha Wildner #define RT2860_TXOP_TIMEOUT_SHIFT 16 59076c21ea3SSascha Wildner #define RT2860_RX_ACK_TIMEOUT_SHIFT 8 59176c21ea3SSascha Wildner #define RT2860_MPDU_LIFE_TIME_SHIFT 4 59276c21ea3SSascha Wildner 59376c21ea3SSascha Wildner /* possible flags for register TX_RTY_CFG */ 59476c21ea3SSascha Wildner #define RT2860_TX_AUTOFB_EN (1 << 30) 59576c21ea3SSascha Wildner #define RT2860_AGG_RTY_MODE_TIMER (1 << 29) 59676c21ea3SSascha Wildner #define RT2860_NAG_RTY_MODE_TIMER (1 << 28) 59776c21ea3SSascha Wildner #define RT2860_LONG_RTY_THRES_SHIFT 16 59876c21ea3SSascha Wildner #define RT2860_LONG_RTY_LIMIT_SHIFT 8 59976c21ea3SSascha Wildner #define RT2860_SHORT_RTY_LIMIT_SHIFT 0 60076c21ea3SSascha Wildner 60176c21ea3SSascha Wildner /* possible flags for register TX_LINK_CFG */ 60276c21ea3SSascha Wildner #define RT2860_REMOTE_MFS_SHIFT 24 60376c21ea3SSascha Wildner #define RT2860_REMOTE_MFB_SHIFT 16 60476c21ea3SSascha Wildner #define RT2860_TX_CFACK_EN (1 << 12) 60576c21ea3SSascha Wildner #define RT2860_TX_RDG_EN (1 << 11) 60676c21ea3SSascha Wildner #define RT2860_TX_MRQ_EN (1 << 10) 60776c21ea3SSascha Wildner #define RT2860_REMOTE_UMFS_EN (1 << 9) 60876c21ea3SSascha Wildner #define RT2860_TX_MFB_EN (1 << 8) 60976c21ea3SSascha Wildner #define RT2860_REMOTE_MFB_LT_SHIFT 0 61076c21ea3SSascha Wildner 61176c21ea3SSascha Wildner /* possible flags for registers *_PROT_CFG */ 61276c21ea3SSascha Wildner #define RT2860_RTSTH_EN (1 << 26) 61376c21ea3SSascha Wildner #define RT2860_TXOP_ALLOW_GF40 (1 << 25) 61476c21ea3SSascha Wildner #define RT2860_TXOP_ALLOW_GF20 (1 << 24) 61576c21ea3SSascha Wildner #define RT2860_TXOP_ALLOW_MM40 (1 << 23) 61676c21ea3SSascha Wildner #define RT2860_TXOP_ALLOW_MM20 (1 << 22) 61776c21ea3SSascha Wildner #define RT2860_TXOP_ALLOW_OFDM (1 << 21) 61876c21ea3SSascha Wildner #define RT2860_TXOP_ALLOW_CCK (1 << 20) 61976c21ea3SSascha Wildner #define RT2860_TXOP_ALLOW_ALL (0x3f << 20) 62076c21ea3SSascha Wildner #define RT2860_PROT_NAV_SHORT (1 << 18) 62176c21ea3SSascha Wildner #define RT2860_PROT_NAV_LONG (2 << 18) 62276c21ea3SSascha Wildner #define RT2860_PROT_CTRL_RTS_CTS (1 << 16) 62376c21ea3SSascha Wildner #define RT2860_PROT_CTRL_CTS (2 << 16) 62476c21ea3SSascha Wildner 62576c21ea3SSascha Wildner /* possible flags for registers EXP_{CTS,ACK}_TIME */ 62676c21ea3SSascha Wildner #define RT2860_EXP_OFDM_TIME_SHIFT 16 62776c21ea3SSascha Wildner #define RT2860_EXP_CCK_TIME_SHIFT 0 62876c21ea3SSascha Wildner 62976c21ea3SSascha Wildner /* possible flags for register RX_FILTR_CFG */ 63076c21ea3SSascha Wildner #define RT2860_DROP_CTRL_RSV (1 << 16) 63176c21ea3SSascha Wildner #define RT2860_DROP_BAR (1 << 15) 63276c21ea3SSascha Wildner #define RT2860_DROP_BA (1 << 14) 63376c21ea3SSascha Wildner #define RT2860_DROP_PSPOLL (1 << 13) 63476c21ea3SSascha Wildner #define RT2860_DROP_RTS (1 << 12) 63576c21ea3SSascha Wildner #define RT2860_DROP_CTS (1 << 11) 63676c21ea3SSascha Wildner #define RT2860_DROP_ACK (1 << 10) 63776c21ea3SSascha Wildner #define RT2860_DROP_CFEND (1 << 9) 63876c21ea3SSascha Wildner #define RT2860_DROP_CFACK (1 << 8) 63976c21ea3SSascha Wildner #define RT2860_DROP_DUPL (1 << 7) 64076c21ea3SSascha Wildner #define RT2860_DROP_BC (1 << 6) 64176c21ea3SSascha Wildner #define RT2860_DROP_MC (1 << 5) 64276c21ea3SSascha Wildner #define RT2860_DROP_VER_ERR (1 << 4) 64376c21ea3SSascha Wildner #define RT2860_DROP_NOT_MYBSS (1 << 3) 64476c21ea3SSascha Wildner #define RT2860_DROP_UC_NOME (1 << 2) 64576c21ea3SSascha Wildner #define RT2860_DROP_PHY_ERR (1 << 1) 64676c21ea3SSascha Wildner #define RT2860_DROP_CRC_ERR (1 << 0) 64776c21ea3SSascha Wildner 64876c21ea3SSascha Wildner /* possible flags for register AUTO_RSP_CFG */ 64976c21ea3SSascha Wildner #define RT2860_CTRL_PWR_BIT (1 << 7) 65076c21ea3SSascha Wildner #define RT2860_BAC_ACK_POLICY (1 << 6) 65176c21ea3SSascha Wildner #define RT2860_CCK_SHORT_EN (1 << 4) 65276c21ea3SSascha Wildner #define RT2860_CTS_40M_REF_EN (1 << 3) 65376c21ea3SSascha Wildner #define RT2860_CTS_40M_MODE_EN (1 << 2) 65476c21ea3SSascha Wildner #define RT2860_BAC_ACKPOLICY_EN (1 << 1) 65576c21ea3SSascha Wildner #define RT2860_AUTO_RSP_EN (1 << 0) 65676c21ea3SSascha Wildner 65776c21ea3SSascha Wildner /* possible flags for register SIFS_COST_CFG */ 65876c21ea3SSascha Wildner #define RT2860_OFDM_SIFS_COST_SHIFT 8 65976c21ea3SSascha Wildner #define RT2860_CCK_SIFS_COST_SHIFT 0 66076c21ea3SSascha Wildner 66176c21ea3SSascha Wildner /* possible flags for register TXOP_HLDR_ET */ 66276c21ea3SSascha Wildner #define RT2860_TXOP_ETM1_EN (1 << 25) 66376c21ea3SSascha Wildner #define RT2860_TXOP_ETM0_EN (1 << 24) 66476c21ea3SSascha Wildner #define RT2860_TXOP_ETM_THRES_SHIFT 16 66576c21ea3SSascha Wildner #define RT2860_TXOP_ETO_EN (1 << 8) 66676c21ea3SSascha Wildner #define RT2860_TXOP_ETO_THRES_SHIFT 1 66776c21ea3SSascha Wildner #define RT2860_PER_RX_RST_EN (1 << 0) 66876c21ea3SSascha Wildner 66976c21ea3SSascha Wildner /* possible flags for register TX_STAT_FIFO */ 67076c21ea3SSascha Wildner #define RT2860_TXQ_MCS_SHIFT 16 67176c21ea3SSascha Wildner #define RT2860_TXQ_WCID_SHIFT 8 67276c21ea3SSascha Wildner #define RT2860_TXQ_ACKREQ (1 << 7) 67376c21ea3SSascha Wildner #define RT2860_TXQ_AGG (1 << 6) 67476c21ea3SSascha Wildner #define RT2860_TXQ_OK (1 << 5) 67576c21ea3SSascha Wildner #define RT2860_TXQ_PID_SHIFT 1 67676c21ea3SSascha Wildner #define RT2860_TXQ_VLD (1 << 0) 67776c21ea3SSascha Wildner 67876c21ea3SSascha Wildner /* possible flags for register WCID_ATTR */ 67976c21ea3SSascha Wildner #define RT2860_MODE_NOSEC 0 68076c21ea3SSascha Wildner #define RT2860_MODE_WEP40 1 68176c21ea3SSascha Wildner #define RT2860_MODE_WEP104 2 68276c21ea3SSascha Wildner #define RT2860_MODE_TKIP 3 68376c21ea3SSascha Wildner #define RT2860_MODE_AES_CCMP 4 68476c21ea3SSascha Wildner #define RT2860_MODE_CKIP40 5 68576c21ea3SSascha Wildner #define RT2860_MODE_CKIP104 6 68676c21ea3SSascha Wildner #define RT2860_MODE_CKIP128 7 68776c21ea3SSascha Wildner #define RT2860_RX_PKEY_EN (1 << 0) 68876c21ea3SSascha Wildner 68976c21ea3SSascha Wildner /* possible flags for register H2M_MAILBOX */ 69076c21ea3SSascha Wildner #define RT2860_H2M_BUSY (1 << 24) 69176c21ea3SSascha Wildner #define RT2860_TOKEN_NO_INTR 0xff 69276c21ea3SSascha Wildner 69376c21ea3SSascha Wildner 69476c21ea3SSascha Wildner /* possible flags for MCU command RT2860_MCU_CMD_LEDS */ 69576c21ea3SSascha Wildner #define RT2860_LED_RADIO (1 << 13) 69676c21ea3SSascha Wildner #define RT2860_LED_LINK_2GHZ (1 << 14) 69776c21ea3SSascha Wildner #define RT2860_LED_LINK_5GHZ (1 << 15) 69876c21ea3SSascha Wildner 69976c21ea3SSascha Wildner 70076c21ea3SSascha Wildner /* possible flags for RT3020 RF register 1 */ 70176c21ea3SSascha Wildner #define RT3070_RF_BLOCK (1 << 0) 702*91b30d50SMatthew Dillon #define RT3070_PLL_PD (1 << 1) 70376c21ea3SSascha Wildner #define RT3070_RX0_PD (1 << 2) 70476c21ea3SSascha Wildner #define RT3070_TX0_PD (1 << 3) 70576c21ea3SSascha Wildner #define RT3070_RX1_PD (1 << 4) 70676c21ea3SSascha Wildner #define RT3070_TX1_PD (1 << 5) 70776c21ea3SSascha Wildner #define RT3070_RX2_PD (1 << 6) 70876c21ea3SSascha Wildner #define RT3070_TX2_PD (1 << 7) 70976c21ea3SSascha Wildner 71076c21ea3SSascha Wildner /* possible flags for RT3020 RF register 7 */ 71176c21ea3SSascha Wildner #define RT3070_TUNE (1 << 0) 71276c21ea3SSascha Wildner 71376c21ea3SSascha Wildner /* possible flags for RT3020 RF register 15 */ 71476c21ea3SSascha Wildner #define RT3070_TX_LO2 (1 << 3) 71576c21ea3SSascha Wildner 71676c21ea3SSascha Wildner /* possible flags for RT3020 RF register 17 */ 71776c21ea3SSascha Wildner #define RT3070_TX_LO1 (1 << 3) 71876c21ea3SSascha Wildner 71976c21ea3SSascha Wildner /* possible flags for RT3020 RF register 20 */ 72076c21ea3SSascha Wildner #define RT3070_RX_LO1 (1 << 3) 72176c21ea3SSascha Wildner 72276c21ea3SSascha Wildner /* possible flags for RT3020 RF register 21 */ 72376c21ea3SSascha Wildner #define RT3070_RX_LO2 (1 << 3) 72476c21ea3SSascha Wildner #define RT3070_RX_CTB (1 << 7) 72576c21ea3SSascha Wildner 72676c21ea3SSascha Wildner /* possible flags for RT3020 RF register 22 */ 72776c21ea3SSascha Wildner #define RT3070_BB_LOOPBACK (1 << 0) 72876c21ea3SSascha Wildner 72976c21ea3SSascha Wildner /* possible flags for RT3053 RF register 1 */ 73076c21ea3SSascha Wildner #define RT3593_VCO (1 << 0) 73176c21ea3SSascha Wildner 73276c21ea3SSascha Wildner /* possible flags for RT3053 RF register 2 */ 73376c21ea3SSascha Wildner #define RT3593_RESCAL (1 << 7) 73476c21ea3SSascha Wildner 73576c21ea3SSascha Wildner /* possible flags for RT3053 RF register 3 */ 73676c21ea3SSascha Wildner #define RT3593_VCOCAL (1 << 7) 73776c21ea3SSascha Wildner 73876c21ea3SSascha Wildner /* possible flags for RT3053 RF register 6 */ 73976c21ea3SSascha Wildner #define RT3593_VCO_IC (1 << 6) 74076c21ea3SSascha Wildner 74176c21ea3SSascha Wildner /* possible flags for RT3053 RF register 20 */ 74276c21ea3SSascha Wildner #define RT3593_LDO_PLL_VC_MASK 0x0e 74376c21ea3SSascha Wildner #define RT3593_LDO_RF_VC_MASK 0xe0 74476c21ea3SSascha Wildner 74576c21ea3SSascha Wildner /* possible flags for RT3053 RF register 22 */ 74676c21ea3SSascha Wildner #define RT3593_CP_IC_MASK 0xe0 74776c21ea3SSascha Wildner #define RT3593_CP_IC_SHIFT 5 74876c21ea3SSascha Wildner 74976c21ea3SSascha Wildner /* possible flags for RT3053 RF register 46 */ 75076c21ea3SSascha Wildner #define RT3593_RX_CTB (1 << 5) 75176c21ea3SSascha Wildner 75276c21ea3SSascha Wildner #define RT3090_DEF_LNA 10 75376c21ea3SSascha Wildner 754*91b30d50SMatthew Dillon /* possible flags for RT5390 RF register 38 */ 755*91b30d50SMatthew Dillon #define RT5390_RX_LO1 (1 << 5) 756*91b30d50SMatthew Dillon 757*91b30d50SMatthew Dillon /* possible flags for RT5390 RF register 39 */ 758*91b30d50SMatthew Dillon #define RT5390_RX_LO2 (1 << 7) 759*91b30d50SMatthew Dillon 760*91b30d50SMatthew Dillon /* possible flags for RT5390 RF register 42 */ 761*91b30d50SMatthew Dillon #define RT5390_RX_CTB (1 << 6) 762*91b30d50SMatthew Dillon 763*91b30d50SMatthew Dillon /* possible flags for RT5390 BBP register 4 */ 764*91b30d50SMatthew Dillon #define RT5390_MAC_IF_CTRL (1 << 6) 765*91b30d50SMatthew Dillon 766*91b30d50SMatthew Dillon /* possible flags for RT5390 BBP register 105 */ 767*91b30d50SMatthew Dillon #define RT5390_MLD (1 << 2) 768*91b30d50SMatthew Dillon #define RT5390_SIG_MODULATION (1 << 3) 769*91b30d50SMatthew Dillon 77076c21ea3SSascha Wildner /* RT2860 TX descriptor */ 77176c21ea3SSascha Wildner struct rt2860_txd { 77276c21ea3SSascha Wildner uint32_t sdp0; /* Segment Data Pointer 0 */ 77376c21ea3SSascha Wildner uint16_t sdl1; /* Segment Data Length 1 */ 77476c21ea3SSascha Wildner #define RT2860_TX_BURST (1 << 15) 77576c21ea3SSascha Wildner #define RT2860_TX_LS1 (1 << 14) /* SDP1 is the last segment */ 77676c21ea3SSascha Wildner 77776c21ea3SSascha Wildner uint16_t sdl0; /* Segment Data Length 0 */ 77876c21ea3SSascha Wildner #define RT2860_TX_DDONE (1 << 15) 77976c21ea3SSascha Wildner #define RT2860_TX_LS0 (1 << 14) /* SDP0 is the last segment */ 78076c21ea3SSascha Wildner 78176c21ea3SSascha Wildner uint32_t sdp1; /* Segment Data Pointer 1 */ 78276c21ea3SSascha Wildner uint8_t reserved[3]; 78376c21ea3SSascha Wildner uint8_t flags; 78476c21ea3SSascha Wildner #define RT2860_TX_QSEL_SHIFT 1 78576c21ea3SSascha Wildner #define RT2860_TX_QSEL_MGMT (0 << 1) 78676c21ea3SSascha Wildner #define RT2860_TX_QSEL_HCCA (1 << 1) 78776c21ea3SSascha Wildner #define RT2860_TX_QSEL_EDCA (2 << 1) 78876c21ea3SSascha Wildner #define RT2860_TX_WIV (1 << 0) 78976c21ea3SSascha Wildner } __packed; 79076c21ea3SSascha Wildner 79176c21ea3SSascha Wildner /* RT2870 TX descriptor */ 79276c21ea3SSascha Wildner struct rt2870_txd { 79376c21ea3SSascha Wildner uint16_t len; 79476c21ea3SSascha Wildner uint8_t pad; 79576c21ea3SSascha Wildner uint8_t flags; 79676c21ea3SSascha Wildner } __packed; 79776c21ea3SSascha Wildner 79876c21ea3SSascha Wildner /* TX Wireless Information */ 79976c21ea3SSascha Wildner struct rt2860_txwi { 80076c21ea3SSascha Wildner uint8_t flags; 80176c21ea3SSascha Wildner #define RT2860_TX_MPDU_DSITY_SHIFT 5 80276c21ea3SSascha Wildner #define RT2860_TX_AMPDU (1 << 4) 80376c21ea3SSascha Wildner #define RT2860_TX_TS (1 << 3) 80476c21ea3SSascha Wildner #define RT2860_TX_CFACK (1 << 2) 80576c21ea3SSascha Wildner #define RT2860_TX_MMPS (1 << 1) 80676c21ea3SSascha Wildner #define RT2860_TX_FRAG (1 << 0) 80776c21ea3SSascha Wildner 80876c21ea3SSascha Wildner uint8_t txop; 80976c21ea3SSascha Wildner #define RT2860_TX_TXOP_HT 0 81076c21ea3SSascha Wildner #define RT2860_TX_TXOP_PIFS 1 81176c21ea3SSascha Wildner #define RT2860_TX_TXOP_SIFS 2 81276c21ea3SSascha Wildner #define RT2860_TX_TXOP_BACKOFF 3 81376c21ea3SSascha Wildner 81476c21ea3SSascha Wildner uint16_t phy; 81576c21ea3SSascha Wildner #define RT2860_PHY_MODE 0xc000 81676c21ea3SSascha Wildner #define RT2860_PHY_CCK (0 << 14) 81776c21ea3SSascha Wildner #define RT2860_PHY_OFDM (1 << 14) 81876c21ea3SSascha Wildner #define RT2860_PHY_HT (2 << 14) 81976c21ea3SSascha Wildner #define RT2860_PHY_HT_GF (3 << 14) 82076c21ea3SSascha Wildner #define RT2860_PHY_SGI (1 << 8) 82176c21ea3SSascha Wildner #define RT2860_PHY_BW40 (1 << 7) 82276c21ea3SSascha Wildner #define RT2860_PHY_MCS 0x7f 82376c21ea3SSascha Wildner #define RT2860_PHY_SHPRE (1 << 3) 82476c21ea3SSascha Wildner 82576c21ea3SSascha Wildner uint8_t xflags; 82676c21ea3SSascha Wildner #define RT2860_TX_BAWINSIZE_SHIFT 2 82776c21ea3SSascha Wildner #define RT2860_TX_NSEQ (1 << 1) 82876c21ea3SSascha Wildner #define RT2860_TX_ACK (1 << 0) 82976c21ea3SSascha Wildner 83076c21ea3SSascha Wildner uint8_t wcid; /* Wireless Client ID */ 83176c21ea3SSascha Wildner uint16_t len; 83276c21ea3SSascha Wildner #define RT2860_TX_PID_SHIFT 12 83376c21ea3SSascha Wildner 83476c21ea3SSascha Wildner uint32_t iv; 83576c21ea3SSascha Wildner uint32_t eiv; 83676c21ea3SSascha Wildner } __packed; 83776c21ea3SSascha Wildner 83876c21ea3SSascha Wildner /* RT2860 RX descriptor */ 83976c21ea3SSascha Wildner struct rt2860_rxd { 84076c21ea3SSascha Wildner uint32_t sdp0; 84176c21ea3SSascha Wildner uint16_t sdl1; /* unused */ 84276c21ea3SSascha Wildner uint16_t sdl0; 84376c21ea3SSascha Wildner #define RT2860_RX_DDONE (1 << 15) 84476c21ea3SSascha Wildner #define RT2860_RX_LS0 (1 << 14) 84576c21ea3SSascha Wildner 84676c21ea3SSascha Wildner uint32_t sdp1; /* unused */ 84776c21ea3SSascha Wildner uint32_t flags; 84876c21ea3SSascha Wildner #define RT2860_RX_DEC (1 << 16) 84976c21ea3SSascha Wildner #define RT2860_RX_AMPDU (1 << 15) 85076c21ea3SSascha Wildner #define RT2860_RX_L2PAD (1 << 14) 85176c21ea3SSascha Wildner #define RT2860_RX_RSSI (1 << 13) 85276c21ea3SSascha Wildner #define RT2860_RX_HTC (1 << 12) 85376c21ea3SSascha Wildner #define RT2860_RX_AMSDU (1 << 11) 85476c21ea3SSascha Wildner #define RT2860_RX_MICERR (1 << 10) 85576c21ea3SSascha Wildner #define RT2860_RX_ICVERR (1 << 9) 85676c21ea3SSascha Wildner #define RT2860_RX_CRCERR (1 << 8) 85776c21ea3SSascha Wildner #define RT2860_RX_MYBSS (1 << 7) 85876c21ea3SSascha Wildner #define RT2860_RX_BC (1 << 6) 85976c21ea3SSascha Wildner #define RT2860_RX_MC (1 << 5) 86076c21ea3SSascha Wildner #define RT2860_RX_UC2ME (1 << 4) 86176c21ea3SSascha Wildner #define RT2860_RX_FRAG (1 << 3) 86276c21ea3SSascha Wildner #define RT2860_RX_NULL (1 << 2) 86376c21ea3SSascha Wildner #define RT2860_RX_DATA (1 << 1) 86476c21ea3SSascha Wildner #define RT2860_RX_BA (1 << 0) 86576c21ea3SSascha Wildner } __packed; 86676c21ea3SSascha Wildner 86776c21ea3SSascha Wildner /* RT2870 RX descriptor */ 86876c21ea3SSascha Wildner struct rt2870_rxd { 86976c21ea3SSascha Wildner /* single 32-bit field */ 87076c21ea3SSascha Wildner uint32_t flags; 87176c21ea3SSascha Wildner } __packed; 87276c21ea3SSascha Wildner 87376c21ea3SSascha Wildner /* RX Wireless Information */ 87476c21ea3SSascha Wildner struct rt2860_rxwi { 87576c21ea3SSascha Wildner uint8_t wcid; 87676c21ea3SSascha Wildner uint8_t keyidx; 87776c21ea3SSascha Wildner #define RT2860_RX_UDF_SHIFT 5 87876c21ea3SSascha Wildner #define RT2860_RX_BSS_IDX_SHIFT 2 87976c21ea3SSascha Wildner 88076c21ea3SSascha Wildner uint16_t len; 88176c21ea3SSascha Wildner #define RT2860_RX_TID_SHIFT 12 88276c21ea3SSascha Wildner 88376c21ea3SSascha Wildner uint16_t seq; 88476c21ea3SSascha Wildner uint16_t phy; 88576c21ea3SSascha Wildner uint8_t rssi[3]; 88676c21ea3SSascha Wildner uint8_t reserved1; 88776c21ea3SSascha Wildner uint8_t snr[2]; 88876c21ea3SSascha Wildner uint16_t reserved2; 88976c21ea3SSascha Wildner } __packed; 89076c21ea3SSascha Wildner 89176c21ea3SSascha Wildner 89276c21ea3SSascha Wildner /* first DMA segment contains TXWI + 802.11 header + 32-bit padding */ 89376c21ea3SSascha Wildner #define RT2860_TXWI_DMASZ \ 89476c21ea3SSascha Wildner (sizeof (struct rt2860_txwi) + \ 89576c21ea3SSascha Wildner sizeof (struct ieee80211_frame) + 6 + \ 89676c21ea3SSascha Wildner sizeof (uint16_t)) 89776c21ea3SSascha Wildner 89876c21ea3SSascha Wildner #define RT2860_RF1 0 89976c21ea3SSascha Wildner #define RT2860_RF2 2 90076c21ea3SSascha Wildner #define RT2860_RF3 1 90176c21ea3SSascha Wildner #define RT2860_RF4 3 90276c21ea3SSascha Wildner 903*91b30d50SMatthew Dillon #define RT2860_RF_2820 0x0001 /* 2T3R */ 904*91b30d50SMatthew Dillon #define RT2860_RF_2850 0x0002 /* dual-band 2T3R */ 905*91b30d50SMatthew Dillon #define RT2860_RF_2720 0x0003 /* 1T2R */ 906*91b30d50SMatthew Dillon #define RT2860_RF_2750 0x0004 /* dual-band 1T2R */ 907*91b30d50SMatthew Dillon #define RT3070_RF_3020 0x0005 /* 1T1R */ 908*91b30d50SMatthew Dillon #define RT3070_RF_2020 0x0006 /* b/g */ 909*91b30d50SMatthew Dillon #define RT3070_RF_3021 0x0007 /* 1T2R */ 910*91b30d50SMatthew Dillon #define RT3070_RF_3022 0x0008 /* 2T2R */ 911*91b30d50SMatthew Dillon #define RT3070_RF_3052 0x0009 /* dual-band 2T2R */ 912*91b30d50SMatthew Dillon #define RT3070_RF_3320 0x000b /* 1T1R */ 913*91b30d50SMatthew Dillon #define RT3070_RF_3053 0x000d /* dual-band 3T3R */ 914*91b30d50SMatthew Dillon #define RT5390_RF_5360 0x5360 /* 1T1R */ 915*91b30d50SMatthew Dillon #define RT5390_RF_5390 0x5390 /* 1T1R */ 91676c21ea3SSascha Wildner 91776c21ea3SSascha Wildner /* USB commands for RT2870 only */ 91876c21ea3SSascha Wildner #define RT2870_RESET 1 91976c21ea3SSascha Wildner #define RT2870_WRITE_2 2 92076c21ea3SSascha Wildner #define RT2870_WRITE_REGION_1 6 92176c21ea3SSascha Wildner #define RT2870_READ_REGION_1 7 92276c21ea3SSascha Wildner #define RT2870_EEPROM_READ 9 92376c21ea3SSascha Wildner 92476c21ea3SSascha Wildner #define RT2860_EEPROM_DELAY 1 /* minimum hold time (microsecond) */ 92576c21ea3SSascha Wildner 926*91b30d50SMatthew Dillon #define RT2860_EEPROM_CHIPID 0x00 92776c21ea3SSascha Wildner #define RT2860_EEPROM_VERSION 0x01 92876c21ea3SSascha Wildner #define RT2860_EEPROM_MAC01 0x02 92976c21ea3SSascha Wildner #define RT2860_EEPROM_MAC23 0x03 93076c21ea3SSascha Wildner #define RT2860_EEPROM_MAC45 0x04 93176c21ea3SSascha Wildner #define RT2860_EEPROM_PCIE_PSLEVEL 0x11 93276c21ea3SSascha Wildner #define RT2860_EEPROM_REV 0x12 93376c21ea3SSascha Wildner #define RT2860_EEPROM_ANTENNA 0x1a 93476c21ea3SSascha Wildner #define RT2860_EEPROM_CONFIG 0x1b 93576c21ea3SSascha Wildner #define RT2860_EEPROM_COUNTRY 0x1c 93676c21ea3SSascha Wildner #define RT2860_EEPROM_FREQ_LEDS 0x1d 93776c21ea3SSascha Wildner #define RT2860_EEPROM_LED1 0x1e 93876c21ea3SSascha Wildner #define RT2860_EEPROM_LED2 0x1f 93976c21ea3SSascha Wildner #define RT2860_EEPROM_LED3 0x20 94076c21ea3SSascha Wildner #define RT2860_EEPROM_LNA 0x22 94176c21ea3SSascha Wildner #define RT2860_EEPROM_RSSI1_2GHZ 0x23 94276c21ea3SSascha Wildner #define RT2860_EEPROM_RSSI2_2GHZ 0x24 94376c21ea3SSascha Wildner #define RT2860_EEPROM_RSSI1_5GHZ 0x25 94476c21ea3SSascha Wildner #define RT2860_EEPROM_RSSI2_5GHZ 0x26 94576c21ea3SSascha Wildner #define RT2860_EEPROM_DELTAPWR 0x28 94676c21ea3SSascha Wildner #define RT2860_EEPROM_PWR2GHZ_BASE1 0x29 94776c21ea3SSascha Wildner #define RT2860_EEPROM_PWR2GHZ_BASE2 0x30 94876c21ea3SSascha Wildner #define RT2860_EEPROM_TSSI1_2GHZ 0x37 94976c21ea3SSascha Wildner #define RT2860_EEPROM_TSSI2_2GHZ 0x38 95076c21ea3SSascha Wildner #define RT2860_EEPROM_TSSI3_2GHZ 0x39 95176c21ea3SSascha Wildner #define RT2860_EEPROM_TSSI4_2GHZ 0x3a 95276c21ea3SSascha Wildner #define RT2860_EEPROM_TSSI5_2GHZ 0x3b 95376c21ea3SSascha Wildner #define RT2860_EEPROM_PWR5GHZ_BASE1 0x3c 95476c21ea3SSascha Wildner #define RT2860_EEPROM_PWR5GHZ_BASE2 0x53 95576c21ea3SSascha Wildner #define RT2860_EEPROM_TSSI1_5GHZ 0x6a 95676c21ea3SSascha Wildner #define RT2860_EEPROM_TSSI2_5GHZ 0x6b 95776c21ea3SSascha Wildner #define RT2860_EEPROM_TSSI3_5GHZ 0x6c 95876c21ea3SSascha Wildner #define RT2860_EEPROM_TSSI4_5GHZ 0x6d 95976c21ea3SSascha Wildner #define RT2860_EEPROM_TSSI5_5GHZ 0x6e 96076c21ea3SSascha Wildner #define RT2860_EEPROM_RPWR 0x6f 96176c21ea3SSascha Wildner #define RT2860_EEPROM_BBP_BASE 0x78 96276c21ea3SSascha Wildner #define RT3071_EEPROM_RF_BASE 0x82 96376c21ea3SSascha Wildner 96476c21ea3SSascha Wildner #define RT2860_RIDX_CCK1 0 96576c21ea3SSascha Wildner #define RT2860_RIDX_CCK11 3 96676c21ea3SSascha Wildner #define RT2860_RIDX_OFDM6 4 96776c21ea3SSascha Wildner #define RT2860_RIDX_MAX 11 96876c21ea3SSascha Wildner static const struct rt2860_rate { 96976c21ea3SSascha Wildner uint8_t rate; 97076c21ea3SSascha Wildner uint8_t mcs; 97176c21ea3SSascha Wildner enum ieee80211_phytype phy; 97276c21ea3SSascha Wildner uint8_t ctl_ridx; 97376c21ea3SSascha Wildner uint16_t sp_ack_dur; 97476c21ea3SSascha Wildner uint16_t lp_ack_dur; 97576c21ea3SSascha Wildner } rt2860_rates[] = { 97676c21ea3SSascha Wildner { 2, 0, IEEE80211_T_DS, 0, 314, 314 }, 97776c21ea3SSascha Wildner { 4, 1, IEEE80211_T_DS, 1, 258, 162 }, 97876c21ea3SSascha Wildner { 11, 2, IEEE80211_T_DS, 2, 223, 127 }, 97976c21ea3SSascha Wildner { 22, 3, IEEE80211_T_DS, 3, 213, 117 }, 98076c21ea3SSascha Wildner { 12, 0, IEEE80211_T_OFDM, 4, 60, 60 }, 98176c21ea3SSascha Wildner { 18, 1, IEEE80211_T_OFDM, 4, 52, 52 }, 98276c21ea3SSascha Wildner { 24, 2, IEEE80211_T_OFDM, 6, 48, 48 }, 98376c21ea3SSascha Wildner { 36, 3, IEEE80211_T_OFDM, 6, 44, 44 }, 98476c21ea3SSascha Wildner { 48, 4, IEEE80211_T_OFDM, 8, 44, 44 }, 98576c21ea3SSascha Wildner { 72, 5, IEEE80211_T_OFDM, 8, 40, 40 }, 98676c21ea3SSascha Wildner { 96, 6, IEEE80211_T_OFDM, 8, 40, 40 }, 98776c21ea3SSascha Wildner { 108, 7, IEEE80211_T_OFDM, 8, 40, 40 } 98876c21ea3SSascha Wildner }; 98976c21ea3SSascha Wildner 99076c21ea3SSascha Wildner /* 99176c21ea3SSascha Wildner * Control and status registers access macros. 99276c21ea3SSascha Wildner */ 99376c21ea3SSascha Wildner #define RAL_READ(sc, reg) \ 99476c21ea3SSascha Wildner bus_space_read_4((sc)->sc_st, (sc)->sc_sh, (reg)) 99576c21ea3SSascha Wildner 99676c21ea3SSascha Wildner #define RAL_WRITE(sc, reg, val) \ 99776c21ea3SSascha Wildner bus_space_write_4((sc)->sc_st, (sc)->sc_sh, (reg), (val)) 99876c21ea3SSascha Wildner 99976c21ea3SSascha Wildner #define RAL_BARRIER_WRITE(sc) \ 100076c21ea3SSascha Wildner bus_space_barrier((sc)->sc_st, (sc)->sc_sh, 0, 0x1800, \ 100176c21ea3SSascha Wildner BUS_SPACE_BARRIER_WRITE) 100276c21ea3SSascha Wildner 100376c21ea3SSascha Wildner #define RAL_BARRIER_READ_WRITE(sc) \ 100476c21ea3SSascha Wildner bus_space_barrier((sc)->sc_st, (sc)->sc_sh, 0, 0x1800, \ 100576c21ea3SSascha Wildner BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE) 100676c21ea3SSascha Wildner 100776c21ea3SSascha Wildner #define RAL_WRITE_REGION_1(sc, offset, datap, count) \ 100876c21ea3SSascha Wildner bus_space_write_region_1((sc)->sc_st, (sc)->sc_sh, (offset), \ 100976c21ea3SSascha Wildner (datap), (count)) 101076c21ea3SSascha Wildner 101176c21ea3SSascha Wildner #define RAL_SET_REGION_4(sc, offset, val, count) \ 101276c21ea3SSascha Wildner bus_space_set_region_4((sc)->sc_st, (sc)->sc_sh, (offset), \ 101376c21ea3SSascha Wildner (val), (count)) 101476c21ea3SSascha Wildner 101576c21ea3SSascha Wildner /* 101676c21ea3SSascha Wildner * EEPROM access macro. 101776c21ea3SSascha Wildner */ 101876c21ea3SSascha Wildner #define RT2860_EEPROM_CTL(sc, val) do { \ 101976c21ea3SSascha Wildner RAL_WRITE((sc), RT2860_PCI_EECTRL, (val)); \ 102076c21ea3SSascha Wildner RAL_BARRIER_READ_WRITE((sc)); \ 102176c21ea3SSascha Wildner DELAY(RT2860_EEPROM_DELAY); \ 102276c21ea3SSascha Wildner } while (/* CONSTCOND */0) 102376c21ea3SSascha Wildner 102476c21ea3SSascha Wildner /* 102576c21ea3SSascha Wildner * Default values for MAC registers; values taken from the reference driver. 102676c21ea3SSascha Wildner */ 102776c21ea3SSascha Wildner #define RT2860_DEF_MAC \ 102876c21ea3SSascha Wildner { RT2860_BCN_OFFSET0, 0xf8f0e8e0 }, \ 1029*91b30d50SMatthew Dillon { RT2860_BCN_OFFSET1, 0x6f77d0c8 }, \ 103076c21ea3SSascha Wildner { RT2860_LEGACY_BASIC_RATE, 0x0000013f }, \ 103176c21ea3SSascha Wildner { RT2860_HT_BASIC_RATE, 0x00008003 }, \ 103276c21ea3SSascha Wildner { RT2860_MAC_SYS_CTRL, 0x00000000 }, \ 1033*91b30d50SMatthew Dillon { RT2860_RX_FILTR_CFG, 0x00017f97 }, \ 103476c21ea3SSascha Wildner { RT2860_BKOFF_SLOT_CFG, 0x00000209 }, \ 103576c21ea3SSascha Wildner { RT2860_TX_SW_CFG0, 0x00000000 }, \ 103676c21ea3SSascha Wildner { RT2860_TX_SW_CFG1, 0x00080606 }, \ 103776c21ea3SSascha Wildner { RT2860_TX_LINK_CFG, 0x00001020 }, \ 103876c21ea3SSascha Wildner { RT2860_TX_TIMEOUT_CFG, 0x000a2090 }, \ 1039*91b30d50SMatthew Dillon { RT2860_MAX_LEN_CFG, 0x00001f00 }, \ 104076c21ea3SSascha Wildner { RT2860_LED_CFG, 0x7f031e46 }, \ 104176c21ea3SSascha Wildner { RT2860_WMM_AIFSN_CFG, 0x00002273 }, \ 104276c21ea3SSascha Wildner { RT2860_WMM_CWMIN_CFG, 0x00002344 }, \ 104376c21ea3SSascha Wildner { RT2860_WMM_CWMAX_CFG, 0x000034aa }, \ 104476c21ea3SSascha Wildner { RT2860_MAX_PCNT, 0x1f3fbf9f }, \ 104576c21ea3SSascha Wildner { RT2860_TX_RTY_CFG, 0x47d01f0f }, \ 104676c21ea3SSascha Wildner { RT2860_AUTO_RSP_CFG, 0x00000013 }, \ 104776c21ea3SSascha Wildner { RT2860_CCK_PROT_CFG, 0x05740003 }, \ 104876c21ea3SSascha Wildner { RT2860_OFDM_PROT_CFG, 0x05740003 }, \ 104976c21ea3SSascha Wildner { RT2860_GF20_PROT_CFG, 0x01744004 }, \ 105076c21ea3SSascha Wildner { RT2860_GF40_PROT_CFG, 0x03f44084 }, \ 105176c21ea3SSascha Wildner { RT2860_MM20_PROT_CFG, 0x01744004 }, \ 105276c21ea3SSascha Wildner { RT2860_MM40_PROT_CFG, 0x03f54084 }, \ 105376c21ea3SSascha Wildner { RT2860_TXOP_CTRL_CFG, 0x0000583f }, \ 105476c21ea3SSascha Wildner { RT2860_TX_RTS_CFG, 0x00092b20 }, \ 105576c21ea3SSascha Wildner { RT2860_EXP_ACK_TIME, 0x002400ca }, \ 105676c21ea3SSascha Wildner { RT2860_TXOP_HLDR_ET, 0x00000002 }, \ 105776c21ea3SSascha Wildner { RT2860_XIFS_TIME_CFG, 0x33a41010 }, \ 105876c21ea3SSascha Wildner { RT2860_PWR_PIN_CFG, 0x00000003 } 105976c21ea3SSascha Wildner 106076c21ea3SSascha Wildner /* 106176c21ea3SSascha Wildner * Default values for BBP registers; values taken from the reference driver. 106276c21ea3SSascha Wildner */ 106376c21ea3SSascha Wildner #define RT2860_DEF_BBP \ 106476c21ea3SSascha Wildner { 65, 0x2c }, \ 106576c21ea3SSascha Wildner { 66, 0x38 }, \ 1066*91b30d50SMatthew Dillon { 68, 0x0b }, \ 106776c21ea3SSascha Wildner { 69, 0x12 }, \ 106876c21ea3SSascha Wildner { 70, 0x0a }, \ 106976c21ea3SSascha Wildner { 73, 0x10 }, \ 107076c21ea3SSascha Wildner { 81, 0x37 }, \ 107176c21ea3SSascha Wildner { 82, 0x62 }, \ 107276c21ea3SSascha Wildner { 83, 0x6a }, \ 107376c21ea3SSascha Wildner { 84, 0x99 }, \ 107476c21ea3SSascha Wildner { 86, 0x00 }, \ 107576c21ea3SSascha Wildner { 91, 0x04 }, \ 107676c21ea3SSascha Wildner { 92, 0x00 }, \ 107776c21ea3SSascha Wildner { 103, 0x00 }, \ 107876c21ea3SSascha Wildner { 105, 0x05 }, \ 107976c21ea3SSascha Wildner { 106, 0x35 } 108076c21ea3SSascha Wildner 1081*91b30d50SMatthew Dillon #define RT5390_DEF_BBP \ 1082*91b30d50SMatthew Dillon { 31, 0x08 }, \ 1083*91b30d50SMatthew Dillon { 65, 0x2c }, \ 1084*91b30d50SMatthew Dillon { 66, 0x38 }, \ 1085*91b30d50SMatthew Dillon { 68, 0x0b }, \ 1086*91b30d50SMatthew Dillon { 69, 0x12 }, \ 1087*91b30d50SMatthew Dillon { 70, 0x0a }, \ 1088*91b30d50SMatthew Dillon { 73, 0x13 }, \ 1089*91b30d50SMatthew Dillon { 75, 0x46 }, \ 1090*91b30d50SMatthew Dillon { 76, 0x28 }, \ 1091*91b30d50SMatthew Dillon { 77, 0x59 }, \ 1092*91b30d50SMatthew Dillon { 81, 0x37 }, \ 1093*91b30d50SMatthew Dillon { 82, 0x62 }, \ 1094*91b30d50SMatthew Dillon { 83, 0x7a }, \ 1095*91b30d50SMatthew Dillon { 84, 0x19 }, \ 1096*91b30d50SMatthew Dillon { 86, 0x38 }, \ 1097*91b30d50SMatthew Dillon { 91, 0x04 }, \ 1098*91b30d50SMatthew Dillon { 92, 0x02 }, \ 1099*91b30d50SMatthew Dillon { 103, 0xc0 }, \ 1100*91b30d50SMatthew Dillon { 104, 0x92 }, \ 1101*91b30d50SMatthew Dillon { 105, 0x3c }, \ 1102*91b30d50SMatthew Dillon { 106, 0x03 }, \ 1103*91b30d50SMatthew Dillon { 128, 0x12 }, \ 1104*91b30d50SMatthew Dillon 110576c21ea3SSascha Wildner /* 110676c21ea3SSascha Wildner * Default settings for RF registers; values derived from the reference driver. 110776c21ea3SSascha Wildner */ 110876c21ea3SSascha Wildner #define RT2860_RF2850 \ 110976c21ea3SSascha Wildner { 1, 0x100bb3, 0x1301e1, 0x05a014, 0x001402 }, \ 111076c21ea3SSascha Wildner { 2, 0x100bb3, 0x1301e1, 0x05a014, 0x001407 }, \ 111176c21ea3SSascha Wildner { 3, 0x100bb3, 0x1301e2, 0x05a014, 0x001402 }, \ 111276c21ea3SSascha Wildner { 4, 0x100bb3, 0x1301e2, 0x05a014, 0x001407 }, \ 111376c21ea3SSascha Wildner { 5, 0x100bb3, 0x1301e3, 0x05a014, 0x001402 }, \ 111476c21ea3SSascha Wildner { 6, 0x100bb3, 0x1301e3, 0x05a014, 0x001407 }, \ 111576c21ea3SSascha Wildner { 7, 0x100bb3, 0x1301e4, 0x05a014, 0x001402 }, \ 111676c21ea3SSascha Wildner { 8, 0x100bb3, 0x1301e4, 0x05a014, 0x001407 }, \ 111776c21ea3SSascha Wildner { 9, 0x100bb3, 0x1301e5, 0x05a014, 0x001402 }, \ 111876c21ea3SSascha Wildner { 10, 0x100bb3, 0x1301e5, 0x05a014, 0x001407 }, \ 111976c21ea3SSascha Wildner { 11, 0x100bb3, 0x1301e6, 0x05a014, 0x001402 }, \ 112076c21ea3SSascha Wildner { 12, 0x100bb3, 0x1301e6, 0x05a014, 0x001407 }, \ 112176c21ea3SSascha Wildner { 13, 0x100bb3, 0x1301e7, 0x05a014, 0x001402 }, \ 112276c21ea3SSascha Wildner { 14, 0x100bb3, 0x1301e8, 0x05a014, 0x001404 }, \ 112376c21ea3SSascha Wildner { 36, 0x100bb3, 0x130266, 0x056014, 0x001408 }, \ 112476c21ea3SSascha Wildner { 38, 0x100bb3, 0x130267, 0x056014, 0x001404 }, \ 112576c21ea3SSascha Wildner { 40, 0x100bb2, 0x1301a0, 0x056014, 0x001400 }, \ 112676c21ea3SSascha Wildner { 44, 0x100bb2, 0x1301a0, 0x056014, 0x001408 }, \ 112776c21ea3SSascha Wildner { 46, 0x100bb2, 0x1301a1, 0x056014, 0x001402 }, \ 112876c21ea3SSascha Wildner { 48, 0x100bb2, 0x1301a1, 0x056014, 0x001406 }, \ 112976c21ea3SSascha Wildner { 52, 0x100bb2, 0x1301a2, 0x056014, 0x001404 }, \ 113076c21ea3SSascha Wildner { 54, 0x100bb2, 0x1301a2, 0x056014, 0x001408 }, \ 113176c21ea3SSascha Wildner { 56, 0x100bb2, 0x1301a3, 0x056014, 0x001402 }, \ 113276c21ea3SSascha Wildner { 60, 0x100bb2, 0x1301a4, 0x056014, 0x001400 }, \ 113376c21ea3SSascha Wildner { 62, 0x100bb2, 0x1301a4, 0x056014, 0x001404 }, \ 113476c21ea3SSascha Wildner { 64, 0x100bb2, 0x1301a4, 0x056014, 0x001408 }, \ 113576c21ea3SSascha Wildner { 100, 0x100bb2, 0x1301ac, 0x05e014, 0x001400 }, \ 113676c21ea3SSascha Wildner { 102, 0x100bb2, 0x1701ac, 0x15e014, 0x001404 }, \ 113776c21ea3SSascha Wildner { 104, 0x100bb2, 0x1701ac, 0x15e014, 0x001408 }, \ 113876c21ea3SSascha Wildner { 108, 0x100bb3, 0x17028c, 0x15e014, 0x001404 }, \ 113976c21ea3SSascha Wildner { 110, 0x100bb3, 0x13028d, 0x05e014, 0x001400 }, \ 114076c21ea3SSascha Wildner { 112, 0x100bb3, 0x13028d, 0x05e014, 0x001406 }, \ 114176c21ea3SSascha Wildner { 116, 0x100bb3, 0x13028e, 0x05e014, 0x001408 }, \ 114276c21ea3SSascha Wildner { 118, 0x100bb3, 0x13028f, 0x05e014, 0x001404 }, \ 114376c21ea3SSascha Wildner { 120, 0x100bb1, 0x1300e0, 0x05e014, 0x001400 }, \ 114476c21ea3SSascha Wildner { 124, 0x100bb1, 0x1300e0, 0x05e014, 0x001404 }, \ 114576c21ea3SSascha Wildner { 126, 0x100bb1, 0x1300e0, 0x05e014, 0x001406 }, \ 114676c21ea3SSascha Wildner { 128, 0x100bb1, 0x1300e0, 0x05e014, 0x001408 }, \ 114776c21ea3SSascha Wildner { 132, 0x100bb1, 0x1300e1, 0x05e014, 0x001402 }, \ 114876c21ea3SSascha Wildner { 134, 0x100bb1, 0x1300e1, 0x05e014, 0x001404 }, \ 114976c21ea3SSascha Wildner { 136, 0x100bb1, 0x1300e1, 0x05e014, 0x001406 }, \ 115076c21ea3SSascha Wildner { 140, 0x100bb1, 0x1300e2, 0x05e014, 0x001400 }, \ 115176c21ea3SSascha Wildner { 149, 0x100bb1, 0x1300e2, 0x05e014, 0x001409 }, \ 115276c21ea3SSascha Wildner { 151, 0x100bb1, 0x1300e3, 0x05e014, 0x001401 }, \ 115376c21ea3SSascha Wildner { 153, 0x100bb1, 0x1300e3, 0x05e014, 0x001403 }, \ 115476c21ea3SSascha Wildner { 157, 0x100bb1, 0x1300e3, 0x05e014, 0x001407 }, \ 115576c21ea3SSascha Wildner { 159, 0x100bb1, 0x1300e3, 0x05e014, 0x001409 }, \ 115676c21ea3SSascha Wildner { 161, 0x100bb1, 0x1300e4, 0x05e014, 0x001401 }, \ 115776c21ea3SSascha Wildner { 165, 0x100bb1, 0x1300e4, 0x05e014, 0x001405 }, \ 115876c21ea3SSascha Wildner { 167, 0x100bb1, 0x1300f4, 0x05e014, 0x001407 }, \ 115976c21ea3SSascha Wildner { 169, 0x100bb1, 0x1300f4, 0x05e014, 0x001409 }, \ 116076c21ea3SSascha Wildner { 171, 0x100bb1, 0x1300f5, 0x05e014, 0x001401 }, \ 116176c21ea3SSascha Wildner { 173, 0x100bb1, 0x1300f5, 0x05e014, 0x001403 } 116276c21ea3SSascha Wildner 116376c21ea3SSascha Wildner #define RT3070_RF3052 \ 116476c21ea3SSascha Wildner { 0xf1, 2, 2 }, \ 116576c21ea3SSascha Wildner { 0xf1, 2, 7 }, \ 116676c21ea3SSascha Wildner { 0xf2, 2, 2 }, \ 116776c21ea3SSascha Wildner { 0xf2, 2, 7 }, \ 116876c21ea3SSascha Wildner { 0xf3, 2, 2 }, \ 116976c21ea3SSascha Wildner { 0xf3, 2, 7 }, \ 117076c21ea3SSascha Wildner { 0xf4, 2, 2 }, \ 117176c21ea3SSascha Wildner { 0xf4, 2, 7 }, \ 117276c21ea3SSascha Wildner { 0xf5, 2, 2 }, \ 117376c21ea3SSascha Wildner { 0xf5, 2, 7 }, \ 117476c21ea3SSascha Wildner { 0xf6, 2, 2 }, \ 117576c21ea3SSascha Wildner { 0xf6, 2, 7 }, \ 117676c21ea3SSascha Wildner { 0xf7, 2, 2 }, \ 117776c21ea3SSascha Wildner { 0xf8, 2, 4 }, \ 117876c21ea3SSascha Wildner { 0x56, 0, 4 }, \ 117976c21ea3SSascha Wildner { 0x56, 0, 6 }, \ 118076c21ea3SSascha Wildner { 0x56, 0, 8 }, \ 118176c21ea3SSascha Wildner { 0x57, 0, 0 }, \ 118276c21ea3SSascha Wildner { 0x57, 0, 2 }, \ 118376c21ea3SSascha Wildner { 0x57, 0, 4 }, \ 118476c21ea3SSascha Wildner { 0x57, 0, 8 }, \ 118576c21ea3SSascha Wildner { 0x57, 0, 10 }, \ 118676c21ea3SSascha Wildner { 0x58, 0, 0 }, \ 118776c21ea3SSascha Wildner { 0x58, 0, 4 }, \ 118876c21ea3SSascha Wildner { 0x58, 0, 6 }, \ 118976c21ea3SSascha Wildner { 0x58, 0, 8 }, \ 119076c21ea3SSascha Wildner { 0x5b, 0, 8 }, \ 119176c21ea3SSascha Wildner { 0x5b, 0, 10 }, \ 119276c21ea3SSascha Wildner { 0x5c, 0, 0 }, \ 119376c21ea3SSascha Wildner { 0x5c, 0, 4 }, \ 119476c21ea3SSascha Wildner { 0x5c, 0, 6 }, \ 119576c21ea3SSascha Wildner { 0x5c, 0, 8 }, \ 119676c21ea3SSascha Wildner { 0x5d, 0, 0 }, \ 119776c21ea3SSascha Wildner { 0x5d, 0, 2 }, \ 119876c21ea3SSascha Wildner { 0x5d, 0, 4 }, \ 119976c21ea3SSascha Wildner { 0x5d, 0, 8 }, \ 120076c21ea3SSascha Wildner { 0x5d, 0, 10 }, \ 120176c21ea3SSascha Wildner { 0x5e, 0, 0 }, \ 120276c21ea3SSascha Wildner { 0x5e, 0, 4 }, \ 120376c21ea3SSascha Wildner { 0x5e, 0, 6 }, \ 120476c21ea3SSascha Wildner { 0x5e, 0, 8 }, \ 120576c21ea3SSascha Wildner { 0x5f, 0, 0 }, \ 120676c21ea3SSascha Wildner { 0x5f, 0, 9 }, \ 120776c21ea3SSascha Wildner { 0x5f, 0, 11 }, \ 120876c21ea3SSascha Wildner { 0x60, 0, 1 }, \ 120976c21ea3SSascha Wildner { 0x60, 0, 5 }, \ 121076c21ea3SSascha Wildner { 0x60, 0, 7 }, \ 121176c21ea3SSascha Wildner { 0x60, 0, 9 }, \ 121276c21ea3SSascha Wildner { 0x61, 0, 1 }, \ 121376c21ea3SSascha Wildner { 0x61, 0, 3 }, \ 121476c21ea3SSascha Wildner { 0x61, 0, 5 }, \ 121576c21ea3SSascha Wildner { 0x61, 0, 7 }, \ 121676c21ea3SSascha Wildner { 0x61, 0, 9 } 121776c21ea3SSascha Wildner 121876c21ea3SSascha Wildner #define RT3070_DEF_RF \ 121976c21ea3SSascha Wildner { 4, 0x40 }, \ 122076c21ea3SSascha Wildner { 5, 0x03 }, \ 122176c21ea3SSascha Wildner { 6, 0x02 }, \ 1222*91b30d50SMatthew Dillon { 7, 0x60 }, \ 122376c21ea3SSascha Wildner { 9, 0x0f }, \ 122476c21ea3SSascha Wildner { 10, 0x41 }, \ 122576c21ea3SSascha Wildner { 11, 0x21 }, \ 122676c21ea3SSascha Wildner { 12, 0x7b }, \ 122776c21ea3SSascha Wildner { 14, 0x90 }, \ 122876c21ea3SSascha Wildner { 15, 0x58 }, \ 122976c21ea3SSascha Wildner { 16, 0xb3 }, \ 123076c21ea3SSascha Wildner { 17, 0x92 }, \ 123176c21ea3SSascha Wildner { 18, 0x2c }, \ 123276c21ea3SSascha Wildner { 19, 0x02 }, \ 123376c21ea3SSascha Wildner { 20, 0xba }, \ 123476c21ea3SSascha Wildner { 21, 0xdb }, \ 123576c21ea3SSascha Wildner { 24, 0x16 }, \ 123676c21ea3SSascha Wildner { 25, 0x01 }, \ 123776c21ea3SSascha Wildner { 29, 0x1f } 123876c21ea3SSascha Wildner 1239*91b30d50SMatthew Dillon #define RT5390_DEF_RF \ 1240*91b30d50SMatthew Dillon { 1, 0x0f }, \ 1241*91b30d50SMatthew Dillon { 2, 0x80 }, \ 1242*91b30d50SMatthew Dillon { 3, 0x88 }, \ 1243*91b30d50SMatthew Dillon { 5, 0x10 }, \ 1244*91b30d50SMatthew Dillon { 6, 0xe0 }, \ 1245*91b30d50SMatthew Dillon { 7, 0x00 }, \ 1246*91b30d50SMatthew Dillon { 10, 0x53 }, \ 1247*91b30d50SMatthew Dillon { 11, 0x4a }, \ 1248*91b30d50SMatthew Dillon { 12, 0x46 }, \ 1249*91b30d50SMatthew Dillon { 13, 0x9f }, \ 1250*91b30d50SMatthew Dillon { 14, 0x00 }, \ 1251*91b30d50SMatthew Dillon { 15, 0x00 }, \ 1252*91b30d50SMatthew Dillon { 16, 0x00 }, \ 1253*91b30d50SMatthew Dillon { 18, 0x03 }, \ 1254*91b30d50SMatthew Dillon { 19, 0x00 }, \ 1255*91b30d50SMatthew Dillon { 20, 0x00 }, \ 1256*91b30d50SMatthew Dillon { 21, 0x00 }, \ 1257*91b30d50SMatthew Dillon { 22, 0x20 }, \ 1258*91b30d50SMatthew Dillon { 23, 0x00 }, \ 1259*91b30d50SMatthew Dillon { 24, 0x00 }, \ 1260*91b30d50SMatthew Dillon { 25, 0x80 }, \ 1261*91b30d50SMatthew Dillon { 26, 0x00 }, \ 1262*91b30d50SMatthew Dillon { 27, 0x09 }, \ 126376c21ea3SSascha Wildner { 28, 0x00 }, \ 1264*91b30d50SMatthew Dillon { 29, 0x10 }, \ 1265*91b30d50SMatthew Dillon { 30, 0x10 }, \ 1266*91b30d50SMatthew Dillon { 31, 0x80 }, \ 1267*91b30d50SMatthew Dillon { 32, 0x80 }, \ 1268*91b30d50SMatthew Dillon { 33, 0x00 }, \ 1269*91b30d50SMatthew Dillon { 34, 0x07 }, \ 1270*91b30d50SMatthew Dillon { 35, 0x12 }, \ 1271*91b30d50SMatthew Dillon { 36, 0x00 }, \ 1272*91b30d50SMatthew Dillon { 37, 0x08 }, \ 1273*91b30d50SMatthew Dillon { 38, 0x85 }, \ 1274*91b30d50SMatthew Dillon { 39, 0x1b }, \ 1275*91b30d50SMatthew Dillon { 40, 0x0b }, \ 1276*91b30d50SMatthew Dillon { 41, 0xbb }, \ 1277*91b30d50SMatthew Dillon { 42, 0xd2 }, \ 1278*91b30d50SMatthew Dillon { 43, 0x9a }, \ 1279*91b30d50SMatthew Dillon { 44, 0x0e }, \ 1280*91b30d50SMatthew Dillon { 45, 0xa2 }, \ 1281*91b30d50SMatthew Dillon { 46, 0x73 }, \ 1282*91b30d50SMatthew Dillon { 47, 0x00 }, \ 1283*91b30d50SMatthew Dillon { 48, 0x10 }, \ 1284*91b30d50SMatthew Dillon { 49, 0x94 }, \ 1285*91b30d50SMatthew Dillon { 52, 0x38 }, \ 1286*91b30d50SMatthew Dillon { 53, 0x00 }, \ 1287*91b30d50SMatthew Dillon { 54, 0x78 }, \ 1288*91b30d50SMatthew Dillon { 55, 0x23 }, \ 1289*91b30d50SMatthew Dillon { 56, 0x22 }, \ 1290*91b30d50SMatthew Dillon { 57, 0x80 }, \ 1291*91b30d50SMatthew Dillon { 58, 0x7f }, \ 1292*91b30d50SMatthew Dillon { 59, 0x07 }, \ 1293*91b30d50SMatthew Dillon { 60, 0x45 }, \ 1294*91b30d50SMatthew Dillon { 61, 0xd1 }, \ 1295*91b30d50SMatthew Dillon { 62, 0x00 }, \ 1296*91b30d50SMatthew Dillon { 63, 0x00 } 1297*91b30d50SMatthew Dillon 1298*91b30d50SMatthew Dillon #define RT5392_DEF_RF \ 1299*91b30d50SMatthew Dillon { 1, 0x17 }, \ 1300*91b30d50SMatthew Dillon { 2, 0x80 }, \ 1301*91b30d50SMatthew Dillon { 3, 0x88 }, \ 1302*91b30d50SMatthew Dillon { 5, 0x10 }, \ 1303*91b30d50SMatthew Dillon { 6, 0xe0 }, \ 1304*91b30d50SMatthew Dillon { 7, 0x00 }, \ 1305*91b30d50SMatthew Dillon { 10, 0x53 }, \ 1306*91b30d50SMatthew Dillon { 11, 0x4a }, \ 1307*91b30d50SMatthew Dillon { 12, 0x46 }, \ 1308*91b30d50SMatthew Dillon { 13, 0x9f }, \ 1309*91b30d50SMatthew Dillon { 14, 0x00 }, \ 1310*91b30d50SMatthew Dillon { 15, 0x00 }, \ 1311*91b30d50SMatthew Dillon { 16, 0x00 }, \ 1312*91b30d50SMatthew Dillon { 18, 0x03 }, \ 1313*91b30d50SMatthew Dillon { 19, 0x4d }, \ 1314*91b30d50SMatthew Dillon { 20, 0x00 }, \ 1315*91b30d50SMatthew Dillon { 21, 0x8d }, \ 1316*91b30d50SMatthew Dillon { 22, 0x20 }, \ 1317*91b30d50SMatthew Dillon { 23, 0x0b }, \ 1318*91b30d50SMatthew Dillon { 24, 0x44 }, \ 1319*91b30d50SMatthew Dillon { 25, 0x80 }, \ 1320*91b30d50SMatthew Dillon { 26, 0x82 }, \ 1321*91b30d50SMatthew Dillon { 27, 0x09 }, \ 1322*91b30d50SMatthew Dillon { 28, 0x00 }, \ 1323*91b30d50SMatthew Dillon { 29, 0x10 }, \ 1324*91b30d50SMatthew Dillon { 30, 0x10 }, \ 1325*91b30d50SMatthew Dillon { 31, 0x80 }, \ 1326*91b30d50SMatthew Dillon { 32, 0x80 }, \ 1327*91b30d50SMatthew Dillon { 33, 0xc0 }, \ 1328*91b30d50SMatthew Dillon { 34, 0x07 }, \ 1329*91b30d50SMatthew Dillon { 35, 0x12 }, \ 1330*91b30d50SMatthew Dillon { 36, 0x00 }, \ 1331*91b30d50SMatthew Dillon { 37, 0x08 }, \ 1332*91b30d50SMatthew Dillon { 38, 0x89 }, \ 1333*91b30d50SMatthew Dillon { 39, 0x1b }, \ 1334*91b30d50SMatthew Dillon { 40, 0x0f }, \ 1335*91b30d50SMatthew Dillon { 41, 0xbb }, \ 1336*91b30d50SMatthew Dillon { 42, 0xd5 }, \ 1337*91b30d50SMatthew Dillon { 43, 0x9b }, \ 1338*91b30d50SMatthew Dillon { 44, 0x0e }, \ 1339*91b30d50SMatthew Dillon { 45, 0xa2 }, \ 1340*91b30d50SMatthew Dillon { 46, 0x73 }, \ 1341*91b30d50SMatthew Dillon { 47, 0x0c }, \ 1342*91b30d50SMatthew Dillon { 48, 0x10 }, \ 1343*91b30d50SMatthew Dillon { 49, 0x94 }, \ 1344*91b30d50SMatthew Dillon { 50, 0x94 }, \ 1345*91b30d50SMatthew Dillon { 51, 0x3a }, \ 1346*91b30d50SMatthew Dillon { 52, 0x48 }, \ 1347*91b30d50SMatthew Dillon { 53, 0x44 }, \ 1348*91b30d50SMatthew Dillon { 54, 0x38 }, \ 1349*91b30d50SMatthew Dillon { 55, 0x43 }, \ 1350*91b30d50SMatthew Dillon { 56, 0xa1 }, \ 1351*91b30d50SMatthew Dillon { 57, 0x00 }, \ 1352*91b30d50SMatthew Dillon { 58, 0x39 }, \ 1353*91b30d50SMatthew Dillon { 59, 0x07 }, \ 1354*91b30d50SMatthew Dillon { 60, 0x45 }, \ 1355*91b30d50SMatthew Dillon { 61, 0x91 }, \ 1356*91b30d50SMatthew Dillon { 62, 0x39 }, \ 1357*91b30d50SMatthew Dillon { 63, 0x00 } 1358