1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun Copyright (C) 2004 - 2009 Ivo van Doorn <IvDoorn@gmail.com> 4*4882a593Smuzhiyun <http://rt2x00.serialmonkey.com> 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun /* 9*4882a593Smuzhiyun Module: rt73usb 10*4882a593Smuzhiyun Abstract: Data structures and registers for the rt73usb module. 11*4882a593Smuzhiyun Supported chipsets: rt2571W & rt2671. 12*4882a593Smuzhiyun */ 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #ifndef RT73USB_H 15*4882a593Smuzhiyun #define RT73USB_H 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun /* 18*4882a593Smuzhiyun * RF chip defines. 19*4882a593Smuzhiyun */ 20*4882a593Smuzhiyun #define RF5226 0x0001 21*4882a593Smuzhiyun #define RF2528 0x0002 22*4882a593Smuzhiyun #define RF5225 0x0003 23*4882a593Smuzhiyun #define RF2527 0x0004 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun /* 26*4882a593Smuzhiyun * Signal information. 27*4882a593Smuzhiyun * Default offset is required for RSSI <-> dBm conversion. 28*4882a593Smuzhiyun */ 29*4882a593Smuzhiyun #define DEFAULT_RSSI_OFFSET 120 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun /* 32*4882a593Smuzhiyun * Register layout information. 33*4882a593Smuzhiyun */ 34*4882a593Smuzhiyun #define CSR_REG_BASE 0x3000 35*4882a593Smuzhiyun #define CSR_REG_SIZE 0x04b0 36*4882a593Smuzhiyun #define EEPROM_BASE 0x0000 37*4882a593Smuzhiyun #define EEPROM_SIZE 0x0100 38*4882a593Smuzhiyun #define BBP_BASE 0x0000 39*4882a593Smuzhiyun #define BBP_SIZE 0x0080 40*4882a593Smuzhiyun #define RF_BASE 0x0004 41*4882a593Smuzhiyun #define RF_SIZE 0x0010 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun /* 44*4882a593Smuzhiyun * Number of TX queues. 45*4882a593Smuzhiyun */ 46*4882a593Smuzhiyun #define NUM_TX_QUEUES 4 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun /* 49*4882a593Smuzhiyun * USB registers. 50*4882a593Smuzhiyun */ 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun /* 53*4882a593Smuzhiyun * MCU_LEDCS: LED control for MCU Mailbox. 54*4882a593Smuzhiyun */ 55*4882a593Smuzhiyun #define MCU_LEDCS_LED_MODE FIELD16(0x001f) 56*4882a593Smuzhiyun #define MCU_LEDCS_RADIO_STATUS FIELD16(0x0020) 57*4882a593Smuzhiyun #define MCU_LEDCS_LINK_BG_STATUS FIELD16(0x0040) 58*4882a593Smuzhiyun #define MCU_LEDCS_LINK_A_STATUS FIELD16(0x0080) 59*4882a593Smuzhiyun #define MCU_LEDCS_POLARITY_GPIO_0 FIELD16(0x0100) 60*4882a593Smuzhiyun #define MCU_LEDCS_POLARITY_GPIO_1 FIELD16(0x0200) 61*4882a593Smuzhiyun #define MCU_LEDCS_POLARITY_GPIO_2 FIELD16(0x0400) 62*4882a593Smuzhiyun #define MCU_LEDCS_POLARITY_GPIO_3 FIELD16(0x0800) 63*4882a593Smuzhiyun #define MCU_LEDCS_POLARITY_GPIO_4 FIELD16(0x1000) 64*4882a593Smuzhiyun #define MCU_LEDCS_POLARITY_ACT FIELD16(0x2000) 65*4882a593Smuzhiyun #define MCU_LEDCS_POLARITY_READY_BG FIELD16(0x4000) 66*4882a593Smuzhiyun #define MCU_LEDCS_POLARITY_READY_A FIELD16(0x8000) 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun /* 69*4882a593Smuzhiyun * 8051 firmware image. 70*4882a593Smuzhiyun */ 71*4882a593Smuzhiyun #define FIRMWARE_RT2571 "rt73.bin" 72*4882a593Smuzhiyun #define FIRMWARE_IMAGE_BASE 0x0800 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun /* 75*4882a593Smuzhiyun * Security key table memory. 76*4882a593Smuzhiyun * 16 entries 32-byte for shared key table 77*4882a593Smuzhiyun * 64 entries 32-byte for pairwise key table 78*4882a593Smuzhiyun * 64 entries 8-byte for pairwise ta key table 79*4882a593Smuzhiyun */ 80*4882a593Smuzhiyun #define SHARED_KEY_TABLE_BASE 0x1000 81*4882a593Smuzhiyun #define PAIRWISE_KEY_TABLE_BASE 0x1200 82*4882a593Smuzhiyun #define PAIRWISE_TA_TABLE_BASE 0x1a00 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun #define SHARED_KEY_ENTRY(__idx) \ 85*4882a593Smuzhiyun ( SHARED_KEY_TABLE_BASE + \ 86*4882a593Smuzhiyun ((__idx) * sizeof(struct hw_key_entry)) ) 87*4882a593Smuzhiyun #define PAIRWISE_KEY_ENTRY(__idx) \ 88*4882a593Smuzhiyun ( PAIRWISE_KEY_TABLE_BASE + \ 89*4882a593Smuzhiyun ((__idx) * sizeof(struct hw_key_entry)) ) 90*4882a593Smuzhiyun #define PAIRWISE_TA_ENTRY(__idx) \ 91*4882a593Smuzhiyun ( PAIRWISE_TA_TABLE_BASE + \ 92*4882a593Smuzhiyun ((__idx) * sizeof(struct hw_pairwise_ta_entry)) ) 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun struct hw_key_entry { 95*4882a593Smuzhiyun u8 key[16]; 96*4882a593Smuzhiyun u8 tx_mic[8]; 97*4882a593Smuzhiyun u8 rx_mic[8]; 98*4882a593Smuzhiyun } __packed; 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun struct hw_pairwise_ta_entry { 101*4882a593Smuzhiyun u8 address[6]; 102*4882a593Smuzhiyun u8 cipher; 103*4882a593Smuzhiyun u8 reserved; 104*4882a593Smuzhiyun } __packed; 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun /* 107*4882a593Smuzhiyun * Since NULL frame won't be that long (256 byte), 108*4882a593Smuzhiyun * We steal 16 tail bytes to save debugging settings. 109*4882a593Smuzhiyun */ 110*4882a593Smuzhiyun #define HW_DEBUG_SETTING_BASE 0x2bf0 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun /* 113*4882a593Smuzhiyun * On-chip BEACON frame space. 114*4882a593Smuzhiyun */ 115*4882a593Smuzhiyun #define HW_BEACON_BASE0 0x2400 116*4882a593Smuzhiyun #define HW_BEACON_BASE1 0x2500 117*4882a593Smuzhiyun #define HW_BEACON_BASE2 0x2600 118*4882a593Smuzhiyun #define HW_BEACON_BASE3 0x2700 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun #define HW_BEACON_OFFSET(__index) \ 121*4882a593Smuzhiyun ( HW_BEACON_BASE0 + (__index * 0x0100) ) 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun /* 124*4882a593Smuzhiyun * MAC Control/Status Registers(CSR). 125*4882a593Smuzhiyun * Some values are set in TU, whereas 1 TU == 1024 us. 126*4882a593Smuzhiyun */ 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun /* 129*4882a593Smuzhiyun * MAC_CSR0: ASIC revision number. 130*4882a593Smuzhiyun */ 131*4882a593Smuzhiyun #define MAC_CSR0 0x3000 132*4882a593Smuzhiyun #define MAC_CSR0_REVISION FIELD32(0x0000000f) 133*4882a593Smuzhiyun #define MAC_CSR0_CHIPSET FIELD32(0x000ffff0) 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun /* 136*4882a593Smuzhiyun * MAC_CSR1: System control register. 137*4882a593Smuzhiyun * SOFT_RESET: Software reset bit, 1: reset, 0: normal. 138*4882a593Smuzhiyun * BBP_RESET: Hardware reset BBP. 139*4882a593Smuzhiyun * HOST_READY: Host is ready after initialization, 1: ready. 140*4882a593Smuzhiyun */ 141*4882a593Smuzhiyun #define MAC_CSR1 0x3004 142*4882a593Smuzhiyun #define MAC_CSR1_SOFT_RESET FIELD32(0x00000001) 143*4882a593Smuzhiyun #define MAC_CSR1_BBP_RESET FIELD32(0x00000002) 144*4882a593Smuzhiyun #define MAC_CSR1_HOST_READY FIELD32(0x00000004) 145*4882a593Smuzhiyun 146*4882a593Smuzhiyun /* 147*4882a593Smuzhiyun * MAC_CSR2: STA MAC register 0. 148*4882a593Smuzhiyun */ 149*4882a593Smuzhiyun #define MAC_CSR2 0x3008 150*4882a593Smuzhiyun #define MAC_CSR2_BYTE0 FIELD32(0x000000ff) 151*4882a593Smuzhiyun #define MAC_CSR2_BYTE1 FIELD32(0x0000ff00) 152*4882a593Smuzhiyun #define MAC_CSR2_BYTE2 FIELD32(0x00ff0000) 153*4882a593Smuzhiyun #define MAC_CSR2_BYTE3 FIELD32(0xff000000) 154*4882a593Smuzhiyun 155*4882a593Smuzhiyun /* 156*4882a593Smuzhiyun * MAC_CSR3: STA MAC register 1. 157*4882a593Smuzhiyun * UNICAST_TO_ME_MASK: 158*4882a593Smuzhiyun * Used to mask off bits from byte 5 of the MAC address 159*4882a593Smuzhiyun * to determine the UNICAST_TO_ME bit for RX frames. 160*4882a593Smuzhiyun * The full mask is complemented by BSS_ID_MASK: 161*4882a593Smuzhiyun * MASK = BSS_ID_MASK & UNICAST_TO_ME_MASK 162*4882a593Smuzhiyun */ 163*4882a593Smuzhiyun #define MAC_CSR3 0x300c 164*4882a593Smuzhiyun #define MAC_CSR3_BYTE4 FIELD32(0x000000ff) 165*4882a593Smuzhiyun #define MAC_CSR3_BYTE5 FIELD32(0x0000ff00) 166*4882a593Smuzhiyun #define MAC_CSR3_UNICAST_TO_ME_MASK FIELD32(0x00ff0000) 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun /* 169*4882a593Smuzhiyun * MAC_CSR4: BSSID register 0. 170*4882a593Smuzhiyun */ 171*4882a593Smuzhiyun #define MAC_CSR4 0x3010 172*4882a593Smuzhiyun #define MAC_CSR4_BYTE0 FIELD32(0x000000ff) 173*4882a593Smuzhiyun #define MAC_CSR4_BYTE1 FIELD32(0x0000ff00) 174*4882a593Smuzhiyun #define MAC_CSR4_BYTE2 FIELD32(0x00ff0000) 175*4882a593Smuzhiyun #define MAC_CSR4_BYTE3 FIELD32(0xff000000) 176*4882a593Smuzhiyun 177*4882a593Smuzhiyun /* 178*4882a593Smuzhiyun * MAC_CSR5: BSSID register 1. 179*4882a593Smuzhiyun * BSS_ID_MASK: 180*4882a593Smuzhiyun * This mask is used to mask off bits 0 and 1 of byte 5 of the 181*4882a593Smuzhiyun * BSSID. This will make sure that those bits will be ignored 182*4882a593Smuzhiyun * when determining the MY_BSS of RX frames. 183*4882a593Smuzhiyun * 0: 1-BSSID mode (BSS index = 0) 184*4882a593Smuzhiyun * 1: 2-BSSID mode (BSS index: Byte5, bit 0) 185*4882a593Smuzhiyun * 2: 2-BSSID mode (BSS index: byte5, bit 1) 186*4882a593Smuzhiyun * 3: 4-BSSID mode (BSS index: byte5, bit 0 - 1) 187*4882a593Smuzhiyun */ 188*4882a593Smuzhiyun #define MAC_CSR5 0x3014 189*4882a593Smuzhiyun #define MAC_CSR5_BYTE4 FIELD32(0x000000ff) 190*4882a593Smuzhiyun #define MAC_CSR5_BYTE5 FIELD32(0x0000ff00) 191*4882a593Smuzhiyun #define MAC_CSR5_BSS_ID_MASK FIELD32(0x00ff0000) 192*4882a593Smuzhiyun 193*4882a593Smuzhiyun /* 194*4882a593Smuzhiyun * MAC_CSR6: Maximum frame length register. 195*4882a593Smuzhiyun */ 196*4882a593Smuzhiyun #define MAC_CSR6 0x3018 197*4882a593Smuzhiyun #define MAC_CSR6_MAX_FRAME_UNIT FIELD32(0x00000fff) 198*4882a593Smuzhiyun 199*4882a593Smuzhiyun /* 200*4882a593Smuzhiyun * MAC_CSR7: Reserved 201*4882a593Smuzhiyun */ 202*4882a593Smuzhiyun #define MAC_CSR7 0x301c 203*4882a593Smuzhiyun 204*4882a593Smuzhiyun /* 205*4882a593Smuzhiyun * MAC_CSR8: SIFS/EIFS register. 206*4882a593Smuzhiyun * All units are in US. 207*4882a593Smuzhiyun */ 208*4882a593Smuzhiyun #define MAC_CSR8 0x3020 209*4882a593Smuzhiyun #define MAC_CSR8_SIFS FIELD32(0x000000ff) 210*4882a593Smuzhiyun #define MAC_CSR8_SIFS_AFTER_RX_OFDM FIELD32(0x0000ff00) 211*4882a593Smuzhiyun #define MAC_CSR8_EIFS FIELD32(0xffff0000) 212*4882a593Smuzhiyun 213*4882a593Smuzhiyun /* 214*4882a593Smuzhiyun * MAC_CSR9: Back-Off control register. 215*4882a593Smuzhiyun * SLOT_TIME: Slot time, default is 20us for 802.11BG. 216*4882a593Smuzhiyun * CWMIN: Bit for Cwmin. default Cwmin is 31 (2^5 - 1). 217*4882a593Smuzhiyun * CWMAX: Bit for Cwmax, default Cwmax is 1023 (2^10 - 1). 218*4882a593Smuzhiyun * CW_SELECT: 1: CWmin/Cwmax select from register, 0:select from TxD. 219*4882a593Smuzhiyun */ 220*4882a593Smuzhiyun #define MAC_CSR9 0x3024 221*4882a593Smuzhiyun #define MAC_CSR9_SLOT_TIME FIELD32(0x000000ff) 222*4882a593Smuzhiyun #define MAC_CSR9_CWMIN FIELD32(0x00000f00) 223*4882a593Smuzhiyun #define MAC_CSR9_CWMAX FIELD32(0x0000f000) 224*4882a593Smuzhiyun #define MAC_CSR9_CW_SELECT FIELD32(0x00010000) 225*4882a593Smuzhiyun 226*4882a593Smuzhiyun /* 227*4882a593Smuzhiyun * MAC_CSR10: Power state configuration. 228*4882a593Smuzhiyun */ 229*4882a593Smuzhiyun #define MAC_CSR10 0x3028 230*4882a593Smuzhiyun 231*4882a593Smuzhiyun /* 232*4882a593Smuzhiyun * MAC_CSR11: Power saving transition time register. 233*4882a593Smuzhiyun * DELAY_AFTER_TBCN: Delay after Tbcn expired in units of TU. 234*4882a593Smuzhiyun * TBCN_BEFORE_WAKEUP: Number of beacon before wakeup. 235*4882a593Smuzhiyun * WAKEUP_LATENCY: In unit of TU. 236*4882a593Smuzhiyun */ 237*4882a593Smuzhiyun #define MAC_CSR11 0x302c 238*4882a593Smuzhiyun #define MAC_CSR11_DELAY_AFTER_TBCN FIELD32(0x000000ff) 239*4882a593Smuzhiyun #define MAC_CSR11_TBCN_BEFORE_WAKEUP FIELD32(0x00007f00) 240*4882a593Smuzhiyun #define MAC_CSR11_AUTOWAKE FIELD32(0x00008000) 241*4882a593Smuzhiyun #define MAC_CSR11_WAKEUP_LATENCY FIELD32(0x000f0000) 242*4882a593Smuzhiyun 243*4882a593Smuzhiyun /* 244*4882a593Smuzhiyun * MAC_CSR12: Manual power control / status register (merge CSR20 & PWRCSR1). 245*4882a593Smuzhiyun * CURRENT_STATE: 0:sleep, 1:awake. 246*4882a593Smuzhiyun * FORCE_WAKEUP: This has higher priority than PUT_TO_SLEEP. 247*4882a593Smuzhiyun * BBP_CURRENT_STATE: 0: BBP sleep, 1: BBP awake. 248*4882a593Smuzhiyun */ 249*4882a593Smuzhiyun #define MAC_CSR12 0x3030 250*4882a593Smuzhiyun #define MAC_CSR12_CURRENT_STATE FIELD32(0x00000001) 251*4882a593Smuzhiyun #define MAC_CSR12_PUT_TO_SLEEP FIELD32(0x00000002) 252*4882a593Smuzhiyun #define MAC_CSR12_FORCE_WAKEUP FIELD32(0x00000004) 253*4882a593Smuzhiyun #define MAC_CSR12_BBP_CURRENT_STATE FIELD32(0x00000008) 254*4882a593Smuzhiyun 255*4882a593Smuzhiyun /* 256*4882a593Smuzhiyun * MAC_CSR13: GPIO. 257*4882a593Smuzhiyun * MAC_CSR13_VALx: GPIO value 258*4882a593Smuzhiyun * MAC_CSR13_DIRx: GPIO direction: 0 = input; 1 = output 259*4882a593Smuzhiyun */ 260*4882a593Smuzhiyun #define MAC_CSR13 0x3034 261*4882a593Smuzhiyun #define MAC_CSR13_VAL0 FIELD32(0x00000001) 262*4882a593Smuzhiyun #define MAC_CSR13_VAL1 FIELD32(0x00000002) 263*4882a593Smuzhiyun #define MAC_CSR13_VAL2 FIELD32(0x00000004) 264*4882a593Smuzhiyun #define MAC_CSR13_VAL3 FIELD32(0x00000008) 265*4882a593Smuzhiyun #define MAC_CSR13_VAL4 FIELD32(0x00000010) 266*4882a593Smuzhiyun #define MAC_CSR13_VAL5 FIELD32(0x00000020) 267*4882a593Smuzhiyun #define MAC_CSR13_VAL6 FIELD32(0x00000040) 268*4882a593Smuzhiyun #define MAC_CSR13_VAL7 FIELD32(0x00000080) 269*4882a593Smuzhiyun #define MAC_CSR13_DIR0 FIELD32(0x00000100) 270*4882a593Smuzhiyun #define MAC_CSR13_DIR1 FIELD32(0x00000200) 271*4882a593Smuzhiyun #define MAC_CSR13_DIR2 FIELD32(0x00000400) 272*4882a593Smuzhiyun #define MAC_CSR13_DIR3 FIELD32(0x00000800) 273*4882a593Smuzhiyun #define MAC_CSR13_DIR4 FIELD32(0x00001000) 274*4882a593Smuzhiyun #define MAC_CSR13_DIR5 FIELD32(0x00002000) 275*4882a593Smuzhiyun #define MAC_CSR13_DIR6 FIELD32(0x00004000) 276*4882a593Smuzhiyun #define MAC_CSR13_DIR7 FIELD32(0x00008000) 277*4882a593Smuzhiyun 278*4882a593Smuzhiyun /* 279*4882a593Smuzhiyun * MAC_CSR14: LED control register. 280*4882a593Smuzhiyun * ON_PERIOD: On period, default 70ms. 281*4882a593Smuzhiyun * OFF_PERIOD: Off period, default 30ms. 282*4882a593Smuzhiyun * HW_LED: HW TX activity, 1: normal OFF, 0: normal ON. 283*4882a593Smuzhiyun * SW_LED: s/w LED, 1: ON, 0: OFF. 284*4882a593Smuzhiyun * HW_LED_POLARITY: 0: active low, 1: active high. 285*4882a593Smuzhiyun */ 286*4882a593Smuzhiyun #define MAC_CSR14 0x3038 287*4882a593Smuzhiyun #define MAC_CSR14_ON_PERIOD FIELD32(0x000000ff) 288*4882a593Smuzhiyun #define MAC_CSR14_OFF_PERIOD FIELD32(0x0000ff00) 289*4882a593Smuzhiyun #define MAC_CSR14_HW_LED FIELD32(0x00010000) 290*4882a593Smuzhiyun #define MAC_CSR14_SW_LED FIELD32(0x00020000) 291*4882a593Smuzhiyun #define MAC_CSR14_HW_LED_POLARITY FIELD32(0x00040000) 292*4882a593Smuzhiyun #define MAC_CSR14_SW_LED2 FIELD32(0x00080000) 293*4882a593Smuzhiyun 294*4882a593Smuzhiyun /* 295*4882a593Smuzhiyun * MAC_CSR15: NAV control. 296*4882a593Smuzhiyun */ 297*4882a593Smuzhiyun #define MAC_CSR15 0x303c 298*4882a593Smuzhiyun 299*4882a593Smuzhiyun /* 300*4882a593Smuzhiyun * TXRX control registers. 301*4882a593Smuzhiyun * Some values are set in TU, whereas 1 TU == 1024 us. 302*4882a593Smuzhiyun */ 303*4882a593Smuzhiyun 304*4882a593Smuzhiyun /* 305*4882a593Smuzhiyun * TXRX_CSR0: TX/RX configuration register. 306*4882a593Smuzhiyun * TSF_OFFSET: Default is 24. 307*4882a593Smuzhiyun * AUTO_TX_SEQ: 1: ASIC auto replace sequence nr in outgoing frame. 308*4882a593Smuzhiyun * DISABLE_RX: Disable Rx engine. 309*4882a593Smuzhiyun * DROP_CRC: Drop CRC error. 310*4882a593Smuzhiyun * DROP_PHYSICAL: Drop physical error. 311*4882a593Smuzhiyun * DROP_CONTROL: Drop control frame. 312*4882a593Smuzhiyun * DROP_NOT_TO_ME: Drop not to me unicast frame. 313*4882a593Smuzhiyun * DROP_TO_DS: Drop fram ToDs bit is true. 314*4882a593Smuzhiyun * DROP_VERSION_ERROR: Drop version error frame. 315*4882a593Smuzhiyun * DROP_MULTICAST: Drop multicast frames. 316*4882a593Smuzhiyun * DROP_BORADCAST: Drop broadcast frames. 317*4882a593Smuzhiyun * DROP_ACK_CTS: Drop received ACK and CTS. 318*4882a593Smuzhiyun */ 319*4882a593Smuzhiyun #define TXRX_CSR0 0x3040 320*4882a593Smuzhiyun #define TXRX_CSR0_RX_ACK_TIMEOUT FIELD32(0x000001ff) 321*4882a593Smuzhiyun #define TXRX_CSR0_TSF_OFFSET FIELD32(0x00007e00) 322*4882a593Smuzhiyun #define TXRX_CSR0_AUTO_TX_SEQ FIELD32(0x00008000) 323*4882a593Smuzhiyun #define TXRX_CSR0_DISABLE_RX FIELD32(0x00010000) 324*4882a593Smuzhiyun #define TXRX_CSR0_DROP_CRC FIELD32(0x00020000) 325*4882a593Smuzhiyun #define TXRX_CSR0_DROP_PHYSICAL FIELD32(0x00040000) 326*4882a593Smuzhiyun #define TXRX_CSR0_DROP_CONTROL FIELD32(0x00080000) 327*4882a593Smuzhiyun #define TXRX_CSR0_DROP_NOT_TO_ME FIELD32(0x00100000) 328*4882a593Smuzhiyun #define TXRX_CSR0_DROP_TO_DS FIELD32(0x00200000) 329*4882a593Smuzhiyun #define TXRX_CSR0_DROP_VERSION_ERROR FIELD32(0x00400000) 330*4882a593Smuzhiyun #define TXRX_CSR0_DROP_MULTICAST FIELD32(0x00800000) 331*4882a593Smuzhiyun #define TXRX_CSR0_DROP_BROADCAST FIELD32(0x01000000) 332*4882a593Smuzhiyun #define TXRX_CSR0_DROP_ACK_CTS FIELD32(0x02000000) 333*4882a593Smuzhiyun #define TXRX_CSR0_TX_WITHOUT_WAITING FIELD32(0x04000000) 334*4882a593Smuzhiyun 335*4882a593Smuzhiyun /* 336*4882a593Smuzhiyun * TXRX_CSR1 337*4882a593Smuzhiyun */ 338*4882a593Smuzhiyun #define TXRX_CSR1 0x3044 339*4882a593Smuzhiyun #define TXRX_CSR1_BBP_ID0 FIELD32(0x0000007f) 340*4882a593Smuzhiyun #define TXRX_CSR1_BBP_ID0_VALID FIELD32(0x00000080) 341*4882a593Smuzhiyun #define TXRX_CSR1_BBP_ID1 FIELD32(0x00007f00) 342*4882a593Smuzhiyun #define TXRX_CSR1_BBP_ID1_VALID FIELD32(0x00008000) 343*4882a593Smuzhiyun #define TXRX_CSR1_BBP_ID2 FIELD32(0x007f0000) 344*4882a593Smuzhiyun #define TXRX_CSR1_BBP_ID2_VALID FIELD32(0x00800000) 345*4882a593Smuzhiyun #define TXRX_CSR1_BBP_ID3 FIELD32(0x7f000000) 346*4882a593Smuzhiyun #define TXRX_CSR1_BBP_ID3_VALID FIELD32(0x80000000) 347*4882a593Smuzhiyun 348*4882a593Smuzhiyun /* 349*4882a593Smuzhiyun * TXRX_CSR2 350*4882a593Smuzhiyun */ 351*4882a593Smuzhiyun #define TXRX_CSR2 0x3048 352*4882a593Smuzhiyun #define TXRX_CSR2_BBP_ID0 FIELD32(0x0000007f) 353*4882a593Smuzhiyun #define TXRX_CSR2_BBP_ID0_VALID FIELD32(0x00000080) 354*4882a593Smuzhiyun #define TXRX_CSR2_BBP_ID1 FIELD32(0x00007f00) 355*4882a593Smuzhiyun #define TXRX_CSR2_BBP_ID1_VALID FIELD32(0x00008000) 356*4882a593Smuzhiyun #define TXRX_CSR2_BBP_ID2 FIELD32(0x007f0000) 357*4882a593Smuzhiyun #define TXRX_CSR2_BBP_ID2_VALID FIELD32(0x00800000) 358*4882a593Smuzhiyun #define TXRX_CSR2_BBP_ID3 FIELD32(0x7f000000) 359*4882a593Smuzhiyun #define TXRX_CSR2_BBP_ID3_VALID FIELD32(0x80000000) 360*4882a593Smuzhiyun 361*4882a593Smuzhiyun /* 362*4882a593Smuzhiyun * TXRX_CSR3 363*4882a593Smuzhiyun */ 364*4882a593Smuzhiyun #define TXRX_CSR3 0x304c 365*4882a593Smuzhiyun #define TXRX_CSR3_BBP_ID0 FIELD32(0x0000007f) 366*4882a593Smuzhiyun #define TXRX_CSR3_BBP_ID0_VALID FIELD32(0x00000080) 367*4882a593Smuzhiyun #define TXRX_CSR3_BBP_ID1 FIELD32(0x00007f00) 368*4882a593Smuzhiyun #define TXRX_CSR3_BBP_ID1_VALID FIELD32(0x00008000) 369*4882a593Smuzhiyun #define TXRX_CSR3_BBP_ID2 FIELD32(0x007f0000) 370*4882a593Smuzhiyun #define TXRX_CSR3_BBP_ID2_VALID FIELD32(0x00800000) 371*4882a593Smuzhiyun #define TXRX_CSR3_BBP_ID3 FIELD32(0x7f000000) 372*4882a593Smuzhiyun #define TXRX_CSR3_BBP_ID3_VALID FIELD32(0x80000000) 373*4882a593Smuzhiyun 374*4882a593Smuzhiyun /* 375*4882a593Smuzhiyun * TXRX_CSR4: Auto-Responder/Tx-retry register. 376*4882a593Smuzhiyun * AUTORESPOND_PREAMBLE: 0:long, 1:short preamble. 377*4882a593Smuzhiyun * OFDM_TX_RATE_DOWN: 1:enable. 378*4882a593Smuzhiyun * OFDM_TX_RATE_STEP: 0:1-step, 1: 2-step, 2:3-step, 3:4-step. 379*4882a593Smuzhiyun * OFDM_TX_FALLBACK_CCK: 0: Fallback to OFDM 6M only, 1: Fallback to CCK 1M,2M. 380*4882a593Smuzhiyun */ 381*4882a593Smuzhiyun #define TXRX_CSR4 0x3050 382*4882a593Smuzhiyun #define TXRX_CSR4_TX_ACK_TIMEOUT FIELD32(0x000000ff) 383*4882a593Smuzhiyun #define TXRX_CSR4_CNTL_ACK_POLICY FIELD32(0x00000700) 384*4882a593Smuzhiyun #define TXRX_CSR4_ACK_CTS_PSM FIELD32(0x00010000) 385*4882a593Smuzhiyun #define TXRX_CSR4_AUTORESPOND_ENABLE FIELD32(0x00020000) 386*4882a593Smuzhiyun #define TXRX_CSR4_AUTORESPOND_PREAMBLE FIELD32(0x00040000) 387*4882a593Smuzhiyun #define TXRX_CSR4_OFDM_TX_RATE_DOWN FIELD32(0x00080000) 388*4882a593Smuzhiyun #define TXRX_CSR4_OFDM_TX_RATE_STEP FIELD32(0x00300000) 389*4882a593Smuzhiyun #define TXRX_CSR4_OFDM_TX_FALLBACK_CCK FIELD32(0x00400000) 390*4882a593Smuzhiyun #define TXRX_CSR4_LONG_RETRY_LIMIT FIELD32(0x0f000000) 391*4882a593Smuzhiyun #define TXRX_CSR4_SHORT_RETRY_LIMIT FIELD32(0xf0000000) 392*4882a593Smuzhiyun 393*4882a593Smuzhiyun /* 394*4882a593Smuzhiyun * TXRX_CSR5 395*4882a593Smuzhiyun */ 396*4882a593Smuzhiyun #define TXRX_CSR5 0x3054 397*4882a593Smuzhiyun 398*4882a593Smuzhiyun /* 399*4882a593Smuzhiyun * TXRX_CSR6: ACK/CTS payload consumed time 400*4882a593Smuzhiyun */ 401*4882a593Smuzhiyun #define TXRX_CSR6 0x3058 402*4882a593Smuzhiyun 403*4882a593Smuzhiyun /* 404*4882a593Smuzhiyun * TXRX_CSR7: OFDM ACK/CTS payload consumed time for 6/9/12/18 mbps. 405*4882a593Smuzhiyun */ 406*4882a593Smuzhiyun #define TXRX_CSR7 0x305c 407*4882a593Smuzhiyun #define TXRX_CSR7_ACK_CTS_6MBS FIELD32(0x000000ff) 408*4882a593Smuzhiyun #define TXRX_CSR7_ACK_CTS_9MBS FIELD32(0x0000ff00) 409*4882a593Smuzhiyun #define TXRX_CSR7_ACK_CTS_12MBS FIELD32(0x00ff0000) 410*4882a593Smuzhiyun #define TXRX_CSR7_ACK_CTS_18MBS FIELD32(0xff000000) 411*4882a593Smuzhiyun 412*4882a593Smuzhiyun /* 413*4882a593Smuzhiyun * TXRX_CSR8: OFDM ACK/CTS payload consumed time for 24/36/48/54 mbps. 414*4882a593Smuzhiyun */ 415*4882a593Smuzhiyun #define TXRX_CSR8 0x3060 416*4882a593Smuzhiyun #define TXRX_CSR8_ACK_CTS_24MBS FIELD32(0x000000ff) 417*4882a593Smuzhiyun #define TXRX_CSR8_ACK_CTS_36MBS FIELD32(0x0000ff00) 418*4882a593Smuzhiyun #define TXRX_CSR8_ACK_CTS_48MBS FIELD32(0x00ff0000) 419*4882a593Smuzhiyun #define TXRX_CSR8_ACK_CTS_54MBS FIELD32(0xff000000) 420*4882a593Smuzhiyun 421*4882a593Smuzhiyun /* 422*4882a593Smuzhiyun * TXRX_CSR9: Synchronization control register. 423*4882a593Smuzhiyun * BEACON_INTERVAL: In unit of 1/16 TU. 424*4882a593Smuzhiyun * TSF_TICKING: Enable TSF auto counting. 425*4882a593Smuzhiyun * TSF_SYNC: Tsf sync, 0: disable, 1: infra, 2: ad-hoc/master mode. 426*4882a593Smuzhiyun * BEACON_GEN: Enable beacon generator. 427*4882a593Smuzhiyun */ 428*4882a593Smuzhiyun #define TXRX_CSR9 0x3064 429*4882a593Smuzhiyun #define TXRX_CSR9_BEACON_INTERVAL FIELD32(0x0000ffff) 430*4882a593Smuzhiyun #define TXRX_CSR9_TSF_TICKING FIELD32(0x00010000) 431*4882a593Smuzhiyun #define TXRX_CSR9_TSF_SYNC FIELD32(0x00060000) 432*4882a593Smuzhiyun #define TXRX_CSR9_TBTT_ENABLE FIELD32(0x00080000) 433*4882a593Smuzhiyun #define TXRX_CSR9_BEACON_GEN FIELD32(0x00100000) 434*4882a593Smuzhiyun #define TXRX_CSR9_TIMESTAMP_COMPENSATE FIELD32(0xff000000) 435*4882a593Smuzhiyun 436*4882a593Smuzhiyun /* 437*4882a593Smuzhiyun * TXRX_CSR10: BEACON alignment. 438*4882a593Smuzhiyun */ 439*4882a593Smuzhiyun #define TXRX_CSR10 0x3068 440*4882a593Smuzhiyun 441*4882a593Smuzhiyun /* 442*4882a593Smuzhiyun * TXRX_CSR11: AES mask. 443*4882a593Smuzhiyun */ 444*4882a593Smuzhiyun #define TXRX_CSR11 0x306c 445*4882a593Smuzhiyun 446*4882a593Smuzhiyun /* 447*4882a593Smuzhiyun * TXRX_CSR12: TSF low 32. 448*4882a593Smuzhiyun */ 449*4882a593Smuzhiyun #define TXRX_CSR12 0x3070 450*4882a593Smuzhiyun #define TXRX_CSR12_LOW_TSFTIMER FIELD32(0xffffffff) 451*4882a593Smuzhiyun 452*4882a593Smuzhiyun /* 453*4882a593Smuzhiyun * TXRX_CSR13: TSF high 32. 454*4882a593Smuzhiyun */ 455*4882a593Smuzhiyun #define TXRX_CSR13 0x3074 456*4882a593Smuzhiyun #define TXRX_CSR13_HIGH_TSFTIMER FIELD32(0xffffffff) 457*4882a593Smuzhiyun 458*4882a593Smuzhiyun /* 459*4882a593Smuzhiyun * TXRX_CSR14: TBTT timer. 460*4882a593Smuzhiyun */ 461*4882a593Smuzhiyun #define TXRX_CSR14 0x3078 462*4882a593Smuzhiyun 463*4882a593Smuzhiyun /* 464*4882a593Smuzhiyun * TXRX_CSR15: TKIP MIC priority byte "AND" mask. 465*4882a593Smuzhiyun */ 466*4882a593Smuzhiyun #define TXRX_CSR15 0x307c 467*4882a593Smuzhiyun 468*4882a593Smuzhiyun /* 469*4882a593Smuzhiyun * PHY control registers. 470*4882a593Smuzhiyun * Some values are set in TU, whereas 1 TU == 1024 us. 471*4882a593Smuzhiyun */ 472*4882a593Smuzhiyun 473*4882a593Smuzhiyun /* 474*4882a593Smuzhiyun * PHY_CSR0: RF/PS control. 475*4882a593Smuzhiyun */ 476*4882a593Smuzhiyun #define PHY_CSR0 0x3080 477*4882a593Smuzhiyun #define PHY_CSR0_PA_PE_BG FIELD32(0x00010000) 478*4882a593Smuzhiyun #define PHY_CSR0_PA_PE_A FIELD32(0x00020000) 479*4882a593Smuzhiyun 480*4882a593Smuzhiyun /* 481*4882a593Smuzhiyun * PHY_CSR1 482*4882a593Smuzhiyun */ 483*4882a593Smuzhiyun #define PHY_CSR1 0x3084 484*4882a593Smuzhiyun #define PHY_CSR1_RF_RPI FIELD32(0x00010000) 485*4882a593Smuzhiyun 486*4882a593Smuzhiyun /* 487*4882a593Smuzhiyun * PHY_CSR2: Pre-TX BBP control. 488*4882a593Smuzhiyun */ 489*4882a593Smuzhiyun #define PHY_CSR2 0x3088 490*4882a593Smuzhiyun 491*4882a593Smuzhiyun /* 492*4882a593Smuzhiyun * PHY_CSR3: BBP serial control register. 493*4882a593Smuzhiyun * VALUE: Register value to program into BBP. 494*4882a593Smuzhiyun * REG_NUM: Selected BBP register. 495*4882a593Smuzhiyun * READ_CONTROL: 0: Write BBP, 1: Read BBP. 496*4882a593Smuzhiyun * BUSY: 1: ASIC is busy execute BBP programming. 497*4882a593Smuzhiyun */ 498*4882a593Smuzhiyun #define PHY_CSR3 0x308c 499*4882a593Smuzhiyun #define PHY_CSR3_VALUE FIELD32(0x000000ff) 500*4882a593Smuzhiyun #define PHY_CSR3_REGNUM FIELD32(0x00007f00) 501*4882a593Smuzhiyun #define PHY_CSR3_READ_CONTROL FIELD32(0x00008000) 502*4882a593Smuzhiyun #define PHY_CSR3_BUSY FIELD32(0x00010000) 503*4882a593Smuzhiyun 504*4882a593Smuzhiyun /* 505*4882a593Smuzhiyun * PHY_CSR4: RF serial control register 506*4882a593Smuzhiyun * VALUE: Register value (include register id) serial out to RF/IF chip. 507*4882a593Smuzhiyun * NUMBER_OF_BITS: Number of bits used in RFRegValue (I:20, RFMD:22). 508*4882a593Smuzhiyun * IF_SELECT: 1: select IF to program, 0: select RF to program. 509*4882a593Smuzhiyun * PLL_LD: RF PLL_LD status. 510*4882a593Smuzhiyun * BUSY: 1: ASIC is busy execute RF programming. 511*4882a593Smuzhiyun */ 512*4882a593Smuzhiyun #define PHY_CSR4 0x3090 513*4882a593Smuzhiyun #define PHY_CSR4_VALUE FIELD32(0x00ffffff) 514*4882a593Smuzhiyun #define PHY_CSR4_NUMBER_OF_BITS FIELD32(0x1f000000) 515*4882a593Smuzhiyun #define PHY_CSR4_IF_SELECT FIELD32(0x20000000) 516*4882a593Smuzhiyun #define PHY_CSR4_PLL_LD FIELD32(0x40000000) 517*4882a593Smuzhiyun #define PHY_CSR4_BUSY FIELD32(0x80000000) 518*4882a593Smuzhiyun 519*4882a593Smuzhiyun /* 520*4882a593Smuzhiyun * PHY_CSR5: RX to TX signal switch timing control. 521*4882a593Smuzhiyun */ 522*4882a593Smuzhiyun #define PHY_CSR5 0x3094 523*4882a593Smuzhiyun #define PHY_CSR5_IQ_FLIP FIELD32(0x00000004) 524*4882a593Smuzhiyun 525*4882a593Smuzhiyun /* 526*4882a593Smuzhiyun * PHY_CSR6: TX to RX signal timing control. 527*4882a593Smuzhiyun */ 528*4882a593Smuzhiyun #define PHY_CSR6 0x3098 529*4882a593Smuzhiyun #define PHY_CSR6_IQ_FLIP FIELD32(0x00000004) 530*4882a593Smuzhiyun 531*4882a593Smuzhiyun /* 532*4882a593Smuzhiyun * PHY_CSR7: TX DAC switching timing control. 533*4882a593Smuzhiyun */ 534*4882a593Smuzhiyun #define PHY_CSR7 0x309c 535*4882a593Smuzhiyun 536*4882a593Smuzhiyun /* 537*4882a593Smuzhiyun * Security control register. 538*4882a593Smuzhiyun */ 539*4882a593Smuzhiyun 540*4882a593Smuzhiyun /* 541*4882a593Smuzhiyun * SEC_CSR0: Shared key table control. 542*4882a593Smuzhiyun */ 543*4882a593Smuzhiyun #define SEC_CSR0 0x30a0 544*4882a593Smuzhiyun #define SEC_CSR0_BSS0_KEY0_VALID FIELD32(0x00000001) 545*4882a593Smuzhiyun #define SEC_CSR0_BSS0_KEY1_VALID FIELD32(0x00000002) 546*4882a593Smuzhiyun #define SEC_CSR0_BSS0_KEY2_VALID FIELD32(0x00000004) 547*4882a593Smuzhiyun #define SEC_CSR0_BSS0_KEY3_VALID FIELD32(0x00000008) 548*4882a593Smuzhiyun #define SEC_CSR0_BSS1_KEY0_VALID FIELD32(0x00000010) 549*4882a593Smuzhiyun #define SEC_CSR0_BSS1_KEY1_VALID FIELD32(0x00000020) 550*4882a593Smuzhiyun #define SEC_CSR0_BSS1_KEY2_VALID FIELD32(0x00000040) 551*4882a593Smuzhiyun #define SEC_CSR0_BSS1_KEY3_VALID FIELD32(0x00000080) 552*4882a593Smuzhiyun #define SEC_CSR0_BSS2_KEY0_VALID FIELD32(0x00000100) 553*4882a593Smuzhiyun #define SEC_CSR0_BSS2_KEY1_VALID FIELD32(0x00000200) 554*4882a593Smuzhiyun #define SEC_CSR0_BSS2_KEY2_VALID FIELD32(0x00000400) 555*4882a593Smuzhiyun #define SEC_CSR0_BSS2_KEY3_VALID FIELD32(0x00000800) 556*4882a593Smuzhiyun #define SEC_CSR0_BSS3_KEY0_VALID FIELD32(0x00001000) 557*4882a593Smuzhiyun #define SEC_CSR0_BSS3_KEY1_VALID FIELD32(0x00002000) 558*4882a593Smuzhiyun #define SEC_CSR0_BSS3_KEY2_VALID FIELD32(0x00004000) 559*4882a593Smuzhiyun #define SEC_CSR0_BSS3_KEY3_VALID FIELD32(0x00008000) 560*4882a593Smuzhiyun 561*4882a593Smuzhiyun /* 562*4882a593Smuzhiyun * SEC_CSR1: Shared key table security mode register. 563*4882a593Smuzhiyun */ 564*4882a593Smuzhiyun #define SEC_CSR1 0x30a4 565*4882a593Smuzhiyun #define SEC_CSR1_BSS0_KEY0_CIPHER_ALG FIELD32(0x00000007) 566*4882a593Smuzhiyun #define SEC_CSR1_BSS0_KEY1_CIPHER_ALG FIELD32(0x00000070) 567*4882a593Smuzhiyun #define SEC_CSR1_BSS0_KEY2_CIPHER_ALG FIELD32(0x00000700) 568*4882a593Smuzhiyun #define SEC_CSR1_BSS0_KEY3_CIPHER_ALG FIELD32(0x00007000) 569*4882a593Smuzhiyun #define SEC_CSR1_BSS1_KEY0_CIPHER_ALG FIELD32(0x00070000) 570*4882a593Smuzhiyun #define SEC_CSR1_BSS1_KEY1_CIPHER_ALG FIELD32(0x00700000) 571*4882a593Smuzhiyun #define SEC_CSR1_BSS1_KEY2_CIPHER_ALG FIELD32(0x07000000) 572*4882a593Smuzhiyun #define SEC_CSR1_BSS1_KEY3_CIPHER_ALG FIELD32(0x70000000) 573*4882a593Smuzhiyun 574*4882a593Smuzhiyun /* 575*4882a593Smuzhiyun * Pairwise key table valid bitmap registers. 576*4882a593Smuzhiyun * SEC_CSR2: pairwise key table valid bitmap 0. 577*4882a593Smuzhiyun * SEC_CSR3: pairwise key table valid bitmap 1. 578*4882a593Smuzhiyun */ 579*4882a593Smuzhiyun #define SEC_CSR2 0x30a8 580*4882a593Smuzhiyun #define SEC_CSR3 0x30ac 581*4882a593Smuzhiyun 582*4882a593Smuzhiyun /* 583*4882a593Smuzhiyun * SEC_CSR4: Pairwise key table lookup control. 584*4882a593Smuzhiyun */ 585*4882a593Smuzhiyun #define SEC_CSR4 0x30b0 586*4882a593Smuzhiyun #define SEC_CSR4_ENABLE_BSS0 FIELD32(0x00000001) 587*4882a593Smuzhiyun #define SEC_CSR4_ENABLE_BSS1 FIELD32(0x00000002) 588*4882a593Smuzhiyun #define SEC_CSR4_ENABLE_BSS2 FIELD32(0x00000004) 589*4882a593Smuzhiyun #define SEC_CSR4_ENABLE_BSS3 FIELD32(0x00000008) 590*4882a593Smuzhiyun 591*4882a593Smuzhiyun /* 592*4882a593Smuzhiyun * SEC_CSR5: shared key table security mode register. 593*4882a593Smuzhiyun */ 594*4882a593Smuzhiyun #define SEC_CSR5 0x30b4 595*4882a593Smuzhiyun #define SEC_CSR5_BSS2_KEY0_CIPHER_ALG FIELD32(0x00000007) 596*4882a593Smuzhiyun #define SEC_CSR5_BSS2_KEY1_CIPHER_ALG FIELD32(0x00000070) 597*4882a593Smuzhiyun #define SEC_CSR5_BSS2_KEY2_CIPHER_ALG FIELD32(0x00000700) 598*4882a593Smuzhiyun #define SEC_CSR5_BSS2_KEY3_CIPHER_ALG FIELD32(0x00007000) 599*4882a593Smuzhiyun #define SEC_CSR5_BSS3_KEY0_CIPHER_ALG FIELD32(0x00070000) 600*4882a593Smuzhiyun #define SEC_CSR5_BSS3_KEY1_CIPHER_ALG FIELD32(0x00700000) 601*4882a593Smuzhiyun #define SEC_CSR5_BSS3_KEY2_CIPHER_ALG FIELD32(0x07000000) 602*4882a593Smuzhiyun #define SEC_CSR5_BSS3_KEY3_CIPHER_ALG FIELD32(0x70000000) 603*4882a593Smuzhiyun 604*4882a593Smuzhiyun /* 605*4882a593Smuzhiyun * STA control registers. 606*4882a593Smuzhiyun */ 607*4882a593Smuzhiyun 608*4882a593Smuzhiyun /* 609*4882a593Smuzhiyun * STA_CSR0: RX PLCP error count & RX FCS error count. 610*4882a593Smuzhiyun */ 611*4882a593Smuzhiyun #define STA_CSR0 0x30c0 612*4882a593Smuzhiyun #define STA_CSR0_FCS_ERROR FIELD32(0x0000ffff) 613*4882a593Smuzhiyun #define STA_CSR0_PLCP_ERROR FIELD32(0xffff0000) 614*4882a593Smuzhiyun 615*4882a593Smuzhiyun /* 616*4882a593Smuzhiyun * STA_CSR1: RX False CCA count & RX LONG frame count. 617*4882a593Smuzhiyun */ 618*4882a593Smuzhiyun #define STA_CSR1 0x30c4 619*4882a593Smuzhiyun #define STA_CSR1_PHYSICAL_ERROR FIELD32(0x0000ffff) 620*4882a593Smuzhiyun #define STA_CSR1_FALSE_CCA_ERROR FIELD32(0xffff0000) 621*4882a593Smuzhiyun 622*4882a593Smuzhiyun /* 623*4882a593Smuzhiyun * STA_CSR2: TX Beacon count and RX FIFO overflow count. 624*4882a593Smuzhiyun */ 625*4882a593Smuzhiyun #define STA_CSR2 0x30c8 626*4882a593Smuzhiyun #define STA_CSR2_RX_FIFO_OVERFLOW_COUNT FIELD32(0x0000ffff) 627*4882a593Smuzhiyun #define STA_CSR2_RX_OVERFLOW_COUNT FIELD32(0xffff0000) 628*4882a593Smuzhiyun 629*4882a593Smuzhiyun /* 630*4882a593Smuzhiyun * STA_CSR3: TX Beacon count. 631*4882a593Smuzhiyun */ 632*4882a593Smuzhiyun #define STA_CSR3 0x30cc 633*4882a593Smuzhiyun #define STA_CSR3_TX_BEACON_COUNT FIELD32(0x0000ffff) 634*4882a593Smuzhiyun 635*4882a593Smuzhiyun /* 636*4882a593Smuzhiyun * STA_CSR4: TX Retry count. 637*4882a593Smuzhiyun */ 638*4882a593Smuzhiyun #define STA_CSR4 0x30d0 639*4882a593Smuzhiyun #define STA_CSR4_TX_NO_RETRY_COUNT FIELD32(0x0000ffff) 640*4882a593Smuzhiyun #define STA_CSR4_TX_ONE_RETRY_COUNT FIELD32(0xffff0000) 641*4882a593Smuzhiyun 642*4882a593Smuzhiyun /* 643*4882a593Smuzhiyun * STA_CSR5: TX Retry count. 644*4882a593Smuzhiyun */ 645*4882a593Smuzhiyun #define STA_CSR5 0x30d4 646*4882a593Smuzhiyun #define STA_CSR4_TX_MULTI_RETRY_COUNT FIELD32(0x0000ffff) 647*4882a593Smuzhiyun #define STA_CSR4_TX_RETRY_FAIL_COUNT FIELD32(0xffff0000) 648*4882a593Smuzhiyun 649*4882a593Smuzhiyun /* 650*4882a593Smuzhiyun * QOS control registers. 651*4882a593Smuzhiyun */ 652*4882a593Smuzhiyun 653*4882a593Smuzhiyun /* 654*4882a593Smuzhiyun * QOS_CSR1: TXOP holder MAC address register. 655*4882a593Smuzhiyun */ 656*4882a593Smuzhiyun #define QOS_CSR1 0x30e4 657*4882a593Smuzhiyun #define QOS_CSR1_BYTE4 FIELD32(0x000000ff) 658*4882a593Smuzhiyun #define QOS_CSR1_BYTE5 FIELD32(0x0000ff00) 659*4882a593Smuzhiyun 660*4882a593Smuzhiyun /* 661*4882a593Smuzhiyun * QOS_CSR2: TXOP holder timeout register. 662*4882a593Smuzhiyun */ 663*4882a593Smuzhiyun #define QOS_CSR2 0x30e8 664*4882a593Smuzhiyun 665*4882a593Smuzhiyun /* 666*4882a593Smuzhiyun * RX QOS-CFPOLL MAC address register. 667*4882a593Smuzhiyun * QOS_CSR3: RX QOS-CFPOLL MAC address 0. 668*4882a593Smuzhiyun * QOS_CSR4: RX QOS-CFPOLL MAC address 1. 669*4882a593Smuzhiyun */ 670*4882a593Smuzhiyun #define QOS_CSR3 0x30ec 671*4882a593Smuzhiyun #define QOS_CSR4 0x30f0 672*4882a593Smuzhiyun 673*4882a593Smuzhiyun /* 674*4882a593Smuzhiyun * QOS_CSR5: "QosControl" field of the RX QOS-CFPOLL. 675*4882a593Smuzhiyun */ 676*4882a593Smuzhiyun #define QOS_CSR5 0x30f4 677*4882a593Smuzhiyun 678*4882a593Smuzhiyun /* 679*4882a593Smuzhiyun * WMM Scheduler Register 680*4882a593Smuzhiyun */ 681*4882a593Smuzhiyun 682*4882a593Smuzhiyun /* 683*4882a593Smuzhiyun * AIFSN_CSR: AIFSN for each EDCA AC. 684*4882a593Smuzhiyun * AIFSN0: For AC_VO. 685*4882a593Smuzhiyun * AIFSN1: For AC_VI. 686*4882a593Smuzhiyun * AIFSN2: For AC_BE. 687*4882a593Smuzhiyun * AIFSN3: For AC_BK. 688*4882a593Smuzhiyun */ 689*4882a593Smuzhiyun #define AIFSN_CSR 0x0400 690*4882a593Smuzhiyun #define AIFSN_CSR_AIFSN0 FIELD32(0x0000000f) 691*4882a593Smuzhiyun #define AIFSN_CSR_AIFSN1 FIELD32(0x000000f0) 692*4882a593Smuzhiyun #define AIFSN_CSR_AIFSN2 FIELD32(0x00000f00) 693*4882a593Smuzhiyun #define AIFSN_CSR_AIFSN3 FIELD32(0x0000f000) 694*4882a593Smuzhiyun 695*4882a593Smuzhiyun /* 696*4882a593Smuzhiyun * CWMIN_CSR: CWmin for each EDCA AC. 697*4882a593Smuzhiyun * CWMIN0: For AC_VO. 698*4882a593Smuzhiyun * CWMIN1: For AC_VI. 699*4882a593Smuzhiyun * CWMIN2: For AC_BE. 700*4882a593Smuzhiyun * CWMIN3: For AC_BK. 701*4882a593Smuzhiyun */ 702*4882a593Smuzhiyun #define CWMIN_CSR 0x0404 703*4882a593Smuzhiyun #define CWMIN_CSR_CWMIN0 FIELD32(0x0000000f) 704*4882a593Smuzhiyun #define CWMIN_CSR_CWMIN1 FIELD32(0x000000f0) 705*4882a593Smuzhiyun #define CWMIN_CSR_CWMIN2 FIELD32(0x00000f00) 706*4882a593Smuzhiyun #define CWMIN_CSR_CWMIN3 FIELD32(0x0000f000) 707*4882a593Smuzhiyun 708*4882a593Smuzhiyun /* 709*4882a593Smuzhiyun * CWMAX_CSR: CWmax for each EDCA AC. 710*4882a593Smuzhiyun * CWMAX0: For AC_VO. 711*4882a593Smuzhiyun * CWMAX1: For AC_VI. 712*4882a593Smuzhiyun * CWMAX2: For AC_BE. 713*4882a593Smuzhiyun * CWMAX3: For AC_BK. 714*4882a593Smuzhiyun */ 715*4882a593Smuzhiyun #define CWMAX_CSR 0x0408 716*4882a593Smuzhiyun #define CWMAX_CSR_CWMAX0 FIELD32(0x0000000f) 717*4882a593Smuzhiyun #define CWMAX_CSR_CWMAX1 FIELD32(0x000000f0) 718*4882a593Smuzhiyun #define CWMAX_CSR_CWMAX2 FIELD32(0x00000f00) 719*4882a593Smuzhiyun #define CWMAX_CSR_CWMAX3 FIELD32(0x0000f000) 720*4882a593Smuzhiyun 721*4882a593Smuzhiyun /* 722*4882a593Smuzhiyun * AC_TXOP_CSR0: AC_VO/AC_VI TXOP register. 723*4882a593Smuzhiyun * AC0_TX_OP: For AC_VO, in unit of 32us. 724*4882a593Smuzhiyun * AC1_TX_OP: For AC_VI, in unit of 32us. 725*4882a593Smuzhiyun */ 726*4882a593Smuzhiyun #define AC_TXOP_CSR0 0x040c 727*4882a593Smuzhiyun #define AC_TXOP_CSR0_AC0_TX_OP FIELD32(0x0000ffff) 728*4882a593Smuzhiyun #define AC_TXOP_CSR0_AC1_TX_OP FIELD32(0xffff0000) 729*4882a593Smuzhiyun 730*4882a593Smuzhiyun /* 731*4882a593Smuzhiyun * AC_TXOP_CSR1: AC_BE/AC_BK TXOP register. 732*4882a593Smuzhiyun * AC2_TX_OP: For AC_BE, in unit of 32us. 733*4882a593Smuzhiyun * AC3_TX_OP: For AC_BK, in unit of 32us. 734*4882a593Smuzhiyun */ 735*4882a593Smuzhiyun #define AC_TXOP_CSR1 0x0410 736*4882a593Smuzhiyun #define AC_TXOP_CSR1_AC2_TX_OP FIELD32(0x0000ffff) 737*4882a593Smuzhiyun #define AC_TXOP_CSR1_AC3_TX_OP FIELD32(0xffff0000) 738*4882a593Smuzhiyun 739*4882a593Smuzhiyun /* 740*4882a593Smuzhiyun * BBP registers. 741*4882a593Smuzhiyun * The wordsize of the BBP is 8 bits. 742*4882a593Smuzhiyun */ 743*4882a593Smuzhiyun 744*4882a593Smuzhiyun /* 745*4882a593Smuzhiyun * R2 746*4882a593Smuzhiyun */ 747*4882a593Smuzhiyun #define BBP_R2_BG_MODE FIELD8(0x20) 748*4882a593Smuzhiyun 749*4882a593Smuzhiyun /* 750*4882a593Smuzhiyun * R3 751*4882a593Smuzhiyun */ 752*4882a593Smuzhiyun #define BBP_R3_SMART_MODE FIELD8(0x01) 753*4882a593Smuzhiyun 754*4882a593Smuzhiyun /* 755*4882a593Smuzhiyun * R4: RX antenna control 756*4882a593Smuzhiyun * FRAME_END: 1 - DPDT, 0 - SPDT (Only valid for 802.11G, RF2527 & RF2529) 757*4882a593Smuzhiyun */ 758*4882a593Smuzhiyun 759*4882a593Smuzhiyun /* 760*4882a593Smuzhiyun * ANTENNA_CONTROL semantics (guessed): 761*4882a593Smuzhiyun * 0x1: Software controlled antenna switching (fixed or SW diversity) 762*4882a593Smuzhiyun * 0x2: Hardware diversity. 763*4882a593Smuzhiyun */ 764*4882a593Smuzhiyun #define BBP_R4_RX_ANTENNA_CONTROL FIELD8(0x03) 765*4882a593Smuzhiyun #define BBP_R4_RX_FRAME_END FIELD8(0x20) 766*4882a593Smuzhiyun 767*4882a593Smuzhiyun /* 768*4882a593Smuzhiyun * R77 769*4882a593Smuzhiyun */ 770*4882a593Smuzhiyun #define BBP_R77_RX_ANTENNA FIELD8(0x03) 771*4882a593Smuzhiyun 772*4882a593Smuzhiyun /* 773*4882a593Smuzhiyun * RF registers 774*4882a593Smuzhiyun */ 775*4882a593Smuzhiyun 776*4882a593Smuzhiyun /* 777*4882a593Smuzhiyun * RF 3 778*4882a593Smuzhiyun */ 779*4882a593Smuzhiyun #define RF3_TXPOWER FIELD32(0x00003e00) 780*4882a593Smuzhiyun 781*4882a593Smuzhiyun /* 782*4882a593Smuzhiyun * RF 4 783*4882a593Smuzhiyun */ 784*4882a593Smuzhiyun #define RF4_FREQ_OFFSET FIELD32(0x0003f000) 785*4882a593Smuzhiyun 786*4882a593Smuzhiyun /* 787*4882a593Smuzhiyun * EEPROM content. 788*4882a593Smuzhiyun * The wordsize of the EEPROM is 16 bits. 789*4882a593Smuzhiyun */ 790*4882a593Smuzhiyun 791*4882a593Smuzhiyun /* 792*4882a593Smuzhiyun * HW MAC address. 793*4882a593Smuzhiyun */ 794*4882a593Smuzhiyun #define EEPROM_MAC_ADDR_0 0x0002 795*4882a593Smuzhiyun #define EEPROM_MAC_ADDR_BYTE0 FIELD16(0x00ff) 796*4882a593Smuzhiyun #define EEPROM_MAC_ADDR_BYTE1 FIELD16(0xff00) 797*4882a593Smuzhiyun #define EEPROM_MAC_ADDR1 0x0003 798*4882a593Smuzhiyun #define EEPROM_MAC_ADDR_BYTE2 FIELD16(0x00ff) 799*4882a593Smuzhiyun #define EEPROM_MAC_ADDR_BYTE3 FIELD16(0xff00) 800*4882a593Smuzhiyun #define EEPROM_MAC_ADDR_2 0x0004 801*4882a593Smuzhiyun #define EEPROM_MAC_ADDR_BYTE4 FIELD16(0x00ff) 802*4882a593Smuzhiyun #define EEPROM_MAC_ADDR_BYTE5 FIELD16(0xff00) 803*4882a593Smuzhiyun 804*4882a593Smuzhiyun /* 805*4882a593Smuzhiyun * EEPROM antenna. 806*4882a593Smuzhiyun * ANTENNA_NUM: Number of antennas. 807*4882a593Smuzhiyun * TX_DEFAULT: Default antenna 0: diversity, 1: A, 2: B. 808*4882a593Smuzhiyun * RX_DEFAULT: Default antenna 0: diversity, 1: A, 2: B. 809*4882a593Smuzhiyun * FRAME_TYPE: 0: DPDT , 1: SPDT , noted this bit is valid for g only. 810*4882a593Smuzhiyun * DYN_TXAGC: Dynamic TX AGC control. 811*4882a593Smuzhiyun * HARDWARE_RADIO: 1: Hardware controlled radio. Read GPIO0. 812*4882a593Smuzhiyun * RF_TYPE: Rf_type of this adapter. 813*4882a593Smuzhiyun */ 814*4882a593Smuzhiyun #define EEPROM_ANTENNA 0x0010 815*4882a593Smuzhiyun #define EEPROM_ANTENNA_NUM FIELD16(0x0003) 816*4882a593Smuzhiyun #define EEPROM_ANTENNA_TX_DEFAULT FIELD16(0x000c) 817*4882a593Smuzhiyun #define EEPROM_ANTENNA_RX_DEFAULT FIELD16(0x0030) 818*4882a593Smuzhiyun #define EEPROM_ANTENNA_FRAME_TYPE FIELD16(0x0040) 819*4882a593Smuzhiyun #define EEPROM_ANTENNA_DYN_TXAGC FIELD16(0x0200) 820*4882a593Smuzhiyun #define EEPROM_ANTENNA_HARDWARE_RADIO FIELD16(0x0400) 821*4882a593Smuzhiyun #define EEPROM_ANTENNA_RF_TYPE FIELD16(0xf800) 822*4882a593Smuzhiyun 823*4882a593Smuzhiyun /* 824*4882a593Smuzhiyun * EEPROM NIC config. 825*4882a593Smuzhiyun * EXTERNAL_LNA: External LNA. 826*4882a593Smuzhiyun */ 827*4882a593Smuzhiyun #define EEPROM_NIC 0x0011 828*4882a593Smuzhiyun #define EEPROM_NIC_EXTERNAL_LNA FIELD16(0x0010) 829*4882a593Smuzhiyun 830*4882a593Smuzhiyun /* 831*4882a593Smuzhiyun * EEPROM geography. 832*4882a593Smuzhiyun * GEO_A: Default geographical setting for 5GHz band 833*4882a593Smuzhiyun * GEO: Default geographical setting. 834*4882a593Smuzhiyun */ 835*4882a593Smuzhiyun #define EEPROM_GEOGRAPHY 0x0012 836*4882a593Smuzhiyun #define EEPROM_GEOGRAPHY_GEO_A FIELD16(0x00ff) 837*4882a593Smuzhiyun #define EEPROM_GEOGRAPHY_GEO FIELD16(0xff00) 838*4882a593Smuzhiyun 839*4882a593Smuzhiyun /* 840*4882a593Smuzhiyun * EEPROM BBP. 841*4882a593Smuzhiyun */ 842*4882a593Smuzhiyun #define EEPROM_BBP_START 0x0013 843*4882a593Smuzhiyun #define EEPROM_BBP_SIZE 16 844*4882a593Smuzhiyun #define EEPROM_BBP_VALUE FIELD16(0x00ff) 845*4882a593Smuzhiyun #define EEPROM_BBP_REG_ID FIELD16(0xff00) 846*4882a593Smuzhiyun 847*4882a593Smuzhiyun /* 848*4882a593Smuzhiyun * EEPROM TXPOWER 802.11G 849*4882a593Smuzhiyun */ 850*4882a593Smuzhiyun #define EEPROM_TXPOWER_G_START 0x0023 851*4882a593Smuzhiyun #define EEPROM_TXPOWER_G_SIZE 7 852*4882a593Smuzhiyun #define EEPROM_TXPOWER_G_1 FIELD16(0x00ff) 853*4882a593Smuzhiyun #define EEPROM_TXPOWER_G_2 FIELD16(0xff00) 854*4882a593Smuzhiyun 855*4882a593Smuzhiyun /* 856*4882a593Smuzhiyun * EEPROM Frequency 857*4882a593Smuzhiyun */ 858*4882a593Smuzhiyun #define EEPROM_FREQ 0x002f 859*4882a593Smuzhiyun #define EEPROM_FREQ_OFFSET FIELD16(0x00ff) 860*4882a593Smuzhiyun #define EEPROM_FREQ_SEQ_MASK FIELD16(0xff00) 861*4882a593Smuzhiyun #define EEPROM_FREQ_SEQ FIELD16(0x0300) 862*4882a593Smuzhiyun 863*4882a593Smuzhiyun /* 864*4882a593Smuzhiyun * EEPROM LED. 865*4882a593Smuzhiyun * POLARITY_RDY_G: Polarity RDY_G setting. 866*4882a593Smuzhiyun * POLARITY_RDY_A: Polarity RDY_A setting. 867*4882a593Smuzhiyun * POLARITY_ACT: Polarity ACT setting. 868*4882a593Smuzhiyun * POLARITY_GPIO_0: Polarity GPIO0 setting. 869*4882a593Smuzhiyun * POLARITY_GPIO_1: Polarity GPIO1 setting. 870*4882a593Smuzhiyun * POLARITY_GPIO_2: Polarity GPIO2 setting. 871*4882a593Smuzhiyun * POLARITY_GPIO_3: Polarity GPIO3 setting. 872*4882a593Smuzhiyun * POLARITY_GPIO_4: Polarity GPIO4 setting. 873*4882a593Smuzhiyun * LED_MODE: Led mode. 874*4882a593Smuzhiyun */ 875*4882a593Smuzhiyun #define EEPROM_LED 0x0030 876*4882a593Smuzhiyun #define EEPROM_LED_POLARITY_RDY_G FIELD16(0x0001) 877*4882a593Smuzhiyun #define EEPROM_LED_POLARITY_RDY_A FIELD16(0x0002) 878*4882a593Smuzhiyun #define EEPROM_LED_POLARITY_ACT FIELD16(0x0004) 879*4882a593Smuzhiyun #define EEPROM_LED_POLARITY_GPIO_0 FIELD16(0x0008) 880*4882a593Smuzhiyun #define EEPROM_LED_POLARITY_GPIO_1 FIELD16(0x0010) 881*4882a593Smuzhiyun #define EEPROM_LED_POLARITY_GPIO_2 FIELD16(0x0020) 882*4882a593Smuzhiyun #define EEPROM_LED_POLARITY_GPIO_3 FIELD16(0x0040) 883*4882a593Smuzhiyun #define EEPROM_LED_POLARITY_GPIO_4 FIELD16(0x0080) 884*4882a593Smuzhiyun #define EEPROM_LED_LED_MODE FIELD16(0x1f00) 885*4882a593Smuzhiyun 886*4882a593Smuzhiyun /* 887*4882a593Smuzhiyun * EEPROM TXPOWER 802.11A 888*4882a593Smuzhiyun */ 889*4882a593Smuzhiyun #define EEPROM_TXPOWER_A_START 0x0031 890*4882a593Smuzhiyun #define EEPROM_TXPOWER_A_SIZE 12 891*4882a593Smuzhiyun #define EEPROM_TXPOWER_A_1 FIELD16(0x00ff) 892*4882a593Smuzhiyun #define EEPROM_TXPOWER_A_2 FIELD16(0xff00) 893*4882a593Smuzhiyun 894*4882a593Smuzhiyun /* 895*4882a593Smuzhiyun * EEPROM RSSI offset 802.11BG 896*4882a593Smuzhiyun */ 897*4882a593Smuzhiyun #define EEPROM_RSSI_OFFSET_BG 0x004d 898*4882a593Smuzhiyun #define EEPROM_RSSI_OFFSET_BG_1 FIELD16(0x00ff) 899*4882a593Smuzhiyun #define EEPROM_RSSI_OFFSET_BG_2 FIELD16(0xff00) 900*4882a593Smuzhiyun 901*4882a593Smuzhiyun /* 902*4882a593Smuzhiyun * EEPROM RSSI offset 802.11A 903*4882a593Smuzhiyun */ 904*4882a593Smuzhiyun #define EEPROM_RSSI_OFFSET_A 0x004e 905*4882a593Smuzhiyun #define EEPROM_RSSI_OFFSET_A_1 FIELD16(0x00ff) 906*4882a593Smuzhiyun #define EEPROM_RSSI_OFFSET_A_2 FIELD16(0xff00) 907*4882a593Smuzhiyun 908*4882a593Smuzhiyun /* 909*4882a593Smuzhiyun * DMA descriptor defines. 910*4882a593Smuzhiyun */ 911*4882a593Smuzhiyun #define TXD_DESC_SIZE ( 6 * sizeof(__le32) ) 912*4882a593Smuzhiyun #define TXINFO_SIZE ( 6 * sizeof(__le32) ) 913*4882a593Smuzhiyun #define RXD_DESC_SIZE ( 6 * sizeof(__le32) ) 914*4882a593Smuzhiyun 915*4882a593Smuzhiyun /* 916*4882a593Smuzhiyun * TX descriptor format for TX, PRIO and Beacon Ring. 917*4882a593Smuzhiyun */ 918*4882a593Smuzhiyun 919*4882a593Smuzhiyun /* 920*4882a593Smuzhiyun * Word0 921*4882a593Smuzhiyun * BURST: Next frame belongs to same "burst" event. 922*4882a593Smuzhiyun * TKIP_MIC: ASIC appends TKIP MIC if TKIP is used. 923*4882a593Smuzhiyun * KEY_TABLE: Use per-client pairwise KEY table. 924*4882a593Smuzhiyun * KEY_INDEX: 925*4882a593Smuzhiyun * Key index (0~31) to the pairwise KEY table. 926*4882a593Smuzhiyun * 0~3 to shared KEY table 0 (BSS0). 927*4882a593Smuzhiyun * 4~7 to shared KEY table 1 (BSS1). 928*4882a593Smuzhiyun * 8~11 to shared KEY table 2 (BSS2). 929*4882a593Smuzhiyun * 12~15 to shared KEY table 3 (BSS3). 930*4882a593Smuzhiyun * BURST2: For backward compatibility, set to same value as BURST. 931*4882a593Smuzhiyun */ 932*4882a593Smuzhiyun #define TXD_W0_BURST FIELD32(0x00000001) 933*4882a593Smuzhiyun #define TXD_W0_VALID FIELD32(0x00000002) 934*4882a593Smuzhiyun #define TXD_W0_MORE_FRAG FIELD32(0x00000004) 935*4882a593Smuzhiyun #define TXD_W0_ACK FIELD32(0x00000008) 936*4882a593Smuzhiyun #define TXD_W0_TIMESTAMP FIELD32(0x00000010) 937*4882a593Smuzhiyun #define TXD_W0_OFDM FIELD32(0x00000020) 938*4882a593Smuzhiyun #define TXD_W0_IFS FIELD32(0x00000040) 939*4882a593Smuzhiyun #define TXD_W0_RETRY_MODE FIELD32(0x00000080) 940*4882a593Smuzhiyun #define TXD_W0_TKIP_MIC FIELD32(0x00000100) 941*4882a593Smuzhiyun #define TXD_W0_KEY_TABLE FIELD32(0x00000200) 942*4882a593Smuzhiyun #define TXD_W0_KEY_INDEX FIELD32(0x0000fc00) 943*4882a593Smuzhiyun #define TXD_W0_DATABYTE_COUNT FIELD32(0x0fff0000) 944*4882a593Smuzhiyun #define TXD_W0_BURST2 FIELD32(0x10000000) 945*4882a593Smuzhiyun #define TXD_W0_CIPHER_ALG FIELD32(0xe0000000) 946*4882a593Smuzhiyun 947*4882a593Smuzhiyun /* 948*4882a593Smuzhiyun * Word1 949*4882a593Smuzhiyun * HOST_Q_ID: EDCA/HCCA queue ID. 950*4882a593Smuzhiyun * HW_SEQUENCE: MAC overwrites the frame sequence number. 951*4882a593Smuzhiyun * BUFFER_COUNT: Number of buffers in this TXD. 952*4882a593Smuzhiyun */ 953*4882a593Smuzhiyun #define TXD_W1_HOST_Q_ID FIELD32(0x0000000f) 954*4882a593Smuzhiyun #define TXD_W1_AIFSN FIELD32(0x000000f0) 955*4882a593Smuzhiyun #define TXD_W1_CWMIN FIELD32(0x00000f00) 956*4882a593Smuzhiyun #define TXD_W1_CWMAX FIELD32(0x0000f000) 957*4882a593Smuzhiyun #define TXD_W1_IV_OFFSET FIELD32(0x003f0000) 958*4882a593Smuzhiyun #define TXD_W1_HW_SEQUENCE FIELD32(0x10000000) 959*4882a593Smuzhiyun #define TXD_W1_BUFFER_COUNT FIELD32(0xe0000000) 960*4882a593Smuzhiyun 961*4882a593Smuzhiyun /* 962*4882a593Smuzhiyun * Word2: PLCP information 963*4882a593Smuzhiyun */ 964*4882a593Smuzhiyun #define TXD_W2_PLCP_SIGNAL FIELD32(0x000000ff) 965*4882a593Smuzhiyun #define TXD_W2_PLCP_SERVICE FIELD32(0x0000ff00) 966*4882a593Smuzhiyun #define TXD_W2_PLCP_LENGTH_LOW FIELD32(0x00ff0000) 967*4882a593Smuzhiyun #define TXD_W2_PLCP_LENGTH_HIGH FIELD32(0xff000000) 968*4882a593Smuzhiyun 969*4882a593Smuzhiyun /* 970*4882a593Smuzhiyun * Word3 971*4882a593Smuzhiyun */ 972*4882a593Smuzhiyun #define TXD_W3_IV FIELD32(0xffffffff) 973*4882a593Smuzhiyun 974*4882a593Smuzhiyun /* 975*4882a593Smuzhiyun * Word4 976*4882a593Smuzhiyun */ 977*4882a593Smuzhiyun #define TXD_W4_EIV FIELD32(0xffffffff) 978*4882a593Smuzhiyun 979*4882a593Smuzhiyun /* 980*4882a593Smuzhiyun * Word5 981*4882a593Smuzhiyun * FRAME_OFFSET: Frame start offset inside ASIC TXFIFO (after TXINFO field). 982*4882a593Smuzhiyun * PACKET_ID: Driver assigned packet ID to categorize TXResult in interrupt. 983*4882a593Smuzhiyun * WAITING_DMA_DONE_INT: TXD been filled with data 984*4882a593Smuzhiyun * and waiting for TxDoneISR housekeeping. 985*4882a593Smuzhiyun */ 986*4882a593Smuzhiyun #define TXD_W5_FRAME_OFFSET FIELD32(0x000000ff) 987*4882a593Smuzhiyun #define TXD_W5_PACKET_ID FIELD32(0x0000ff00) 988*4882a593Smuzhiyun #define TXD_W5_TX_POWER FIELD32(0x00ff0000) 989*4882a593Smuzhiyun #define TXD_W5_WAITING_DMA_DONE_INT FIELD32(0x01000000) 990*4882a593Smuzhiyun 991*4882a593Smuzhiyun /* 992*4882a593Smuzhiyun * RX descriptor format for RX Ring. 993*4882a593Smuzhiyun */ 994*4882a593Smuzhiyun 995*4882a593Smuzhiyun /* 996*4882a593Smuzhiyun * Word0 997*4882a593Smuzhiyun * CIPHER_ERROR: 1:ICV error, 2:MIC error, 3:invalid key. 998*4882a593Smuzhiyun * KEY_INDEX: Decryption key actually used. 999*4882a593Smuzhiyun */ 1000*4882a593Smuzhiyun #define RXD_W0_OWNER_NIC FIELD32(0x00000001) 1001*4882a593Smuzhiyun #define RXD_W0_DROP FIELD32(0x00000002) 1002*4882a593Smuzhiyun #define RXD_W0_UNICAST_TO_ME FIELD32(0x00000004) 1003*4882a593Smuzhiyun #define RXD_W0_MULTICAST FIELD32(0x00000008) 1004*4882a593Smuzhiyun #define RXD_W0_BROADCAST FIELD32(0x00000010) 1005*4882a593Smuzhiyun #define RXD_W0_MY_BSS FIELD32(0x00000020) 1006*4882a593Smuzhiyun #define RXD_W0_CRC_ERROR FIELD32(0x00000040) 1007*4882a593Smuzhiyun #define RXD_W0_OFDM FIELD32(0x00000080) 1008*4882a593Smuzhiyun #define RXD_W0_CIPHER_ERROR FIELD32(0x00000300) 1009*4882a593Smuzhiyun #define RXD_W0_KEY_INDEX FIELD32(0x0000fc00) 1010*4882a593Smuzhiyun #define RXD_W0_DATABYTE_COUNT FIELD32(0x0fff0000) 1011*4882a593Smuzhiyun #define RXD_W0_CIPHER_ALG FIELD32(0xe0000000) 1012*4882a593Smuzhiyun 1013*4882a593Smuzhiyun /* 1014*4882a593Smuzhiyun * WORD1 1015*4882a593Smuzhiyun * SIGNAL: RX raw data rate reported by BBP. 1016*4882a593Smuzhiyun * RSSI: RSSI reported by BBP. 1017*4882a593Smuzhiyun */ 1018*4882a593Smuzhiyun #define RXD_W1_SIGNAL FIELD32(0x000000ff) 1019*4882a593Smuzhiyun #define RXD_W1_RSSI_AGC FIELD32(0x00001f00) 1020*4882a593Smuzhiyun #define RXD_W1_RSSI_LNA FIELD32(0x00006000) 1021*4882a593Smuzhiyun #define RXD_W1_FRAME_OFFSET FIELD32(0x7f000000) 1022*4882a593Smuzhiyun 1023*4882a593Smuzhiyun /* 1024*4882a593Smuzhiyun * Word2 1025*4882a593Smuzhiyun * IV: Received IV of originally encrypted. 1026*4882a593Smuzhiyun */ 1027*4882a593Smuzhiyun #define RXD_W2_IV FIELD32(0xffffffff) 1028*4882a593Smuzhiyun 1029*4882a593Smuzhiyun /* 1030*4882a593Smuzhiyun * Word3 1031*4882a593Smuzhiyun * EIV: Received EIV of originally encrypted. 1032*4882a593Smuzhiyun */ 1033*4882a593Smuzhiyun #define RXD_W3_EIV FIELD32(0xffffffff) 1034*4882a593Smuzhiyun 1035*4882a593Smuzhiyun /* 1036*4882a593Smuzhiyun * Word4 1037*4882a593Smuzhiyun * ICV: Received ICV of originally encrypted. 1038*4882a593Smuzhiyun * NOTE: This is a guess, the official definition is "reserved" 1039*4882a593Smuzhiyun */ 1040*4882a593Smuzhiyun #define RXD_W4_ICV FIELD32(0xffffffff) 1041*4882a593Smuzhiyun 1042*4882a593Smuzhiyun /* 1043*4882a593Smuzhiyun * the above 20-byte is called RXINFO and will be DMAed to MAC RX block 1044*4882a593Smuzhiyun * and passed to the HOST driver. 1045*4882a593Smuzhiyun * The following fields are for DMA block and HOST usage only. 1046*4882a593Smuzhiyun * Can't be touched by ASIC MAC block. 1047*4882a593Smuzhiyun */ 1048*4882a593Smuzhiyun 1049*4882a593Smuzhiyun /* 1050*4882a593Smuzhiyun * Word5 1051*4882a593Smuzhiyun */ 1052*4882a593Smuzhiyun #define RXD_W5_RESERVED FIELD32(0xffffffff) 1053*4882a593Smuzhiyun 1054*4882a593Smuzhiyun /* 1055*4882a593Smuzhiyun * Macros for converting txpower from EEPROM to mac80211 value 1056*4882a593Smuzhiyun * and from mac80211 value to register value. 1057*4882a593Smuzhiyun */ 1058*4882a593Smuzhiyun #define MIN_TXPOWER 0 1059*4882a593Smuzhiyun #define MAX_TXPOWER 31 1060*4882a593Smuzhiyun #define DEFAULT_TXPOWER 24 1061*4882a593Smuzhiyun 1062*4882a593Smuzhiyun #define TXPOWER_FROM_DEV(__txpower) \ 1063*4882a593Smuzhiyun (((u8)(__txpower)) > MAX_TXPOWER) ? DEFAULT_TXPOWER : (__txpower) 1064*4882a593Smuzhiyun 1065*4882a593Smuzhiyun #define TXPOWER_TO_DEV(__txpower) \ 1066*4882a593Smuzhiyun clamp_t(char, __txpower, MIN_TXPOWER, MAX_TXPOWER) 1067*4882a593Smuzhiyun 1068*4882a593Smuzhiyun #endif /* RT73USB_H */ 1069