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: rt2400pci 10*4882a593Smuzhiyun Abstract: Data structures and registers for the rt2400pci module. 11*4882a593Smuzhiyun Supported chipsets: RT2460. 12*4882a593Smuzhiyun */ 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #ifndef RT2400PCI_H 15*4882a593Smuzhiyun #define RT2400PCI_H 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun /* 18*4882a593Smuzhiyun * RF chip defines. 19*4882a593Smuzhiyun */ 20*4882a593Smuzhiyun #define RF2420 0x0000 21*4882a593Smuzhiyun #define RF2421 0x0001 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun /* 24*4882a593Smuzhiyun * Signal information. 25*4882a593Smuzhiyun * Default offset is required for RSSI <-> dBm conversion. 26*4882a593Smuzhiyun */ 27*4882a593Smuzhiyun #define DEFAULT_RSSI_OFFSET 100 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun /* 30*4882a593Smuzhiyun * Register layout information. 31*4882a593Smuzhiyun */ 32*4882a593Smuzhiyun #define CSR_REG_BASE 0x0000 33*4882a593Smuzhiyun #define CSR_REG_SIZE 0x014c 34*4882a593Smuzhiyun #define EEPROM_BASE 0x0000 35*4882a593Smuzhiyun #define EEPROM_SIZE 0x0100 36*4882a593Smuzhiyun #define BBP_BASE 0x0000 37*4882a593Smuzhiyun #define BBP_SIZE 0x0020 38*4882a593Smuzhiyun #define RF_BASE 0x0004 39*4882a593Smuzhiyun #define RF_SIZE 0x000c 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun /* 42*4882a593Smuzhiyun * Number of TX queues. 43*4882a593Smuzhiyun */ 44*4882a593Smuzhiyun #define NUM_TX_QUEUES 2 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun /* 47*4882a593Smuzhiyun * Control/Status Registers(CSR). 48*4882a593Smuzhiyun * Some values are set in TU, whereas 1 TU == 1024 us. 49*4882a593Smuzhiyun */ 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun /* 52*4882a593Smuzhiyun * CSR0: ASIC revision number. 53*4882a593Smuzhiyun */ 54*4882a593Smuzhiyun #define CSR0 0x0000 55*4882a593Smuzhiyun #define CSR0_REVISION FIELD32(0x0000ffff) 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun /* 58*4882a593Smuzhiyun * CSR1: System control register. 59*4882a593Smuzhiyun * SOFT_RESET: Software reset, 1: reset, 0: normal. 60*4882a593Smuzhiyun * BBP_RESET: Hardware reset, 1: reset, 0, release. 61*4882a593Smuzhiyun * HOST_READY: Host ready after initialization. 62*4882a593Smuzhiyun */ 63*4882a593Smuzhiyun #define CSR1 0x0004 64*4882a593Smuzhiyun #define CSR1_SOFT_RESET FIELD32(0x00000001) 65*4882a593Smuzhiyun #define CSR1_BBP_RESET FIELD32(0x00000002) 66*4882a593Smuzhiyun #define CSR1_HOST_READY FIELD32(0x00000004) 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun /* 69*4882a593Smuzhiyun * CSR2: System admin status register (invalid). 70*4882a593Smuzhiyun */ 71*4882a593Smuzhiyun #define CSR2 0x0008 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun /* 74*4882a593Smuzhiyun * CSR3: STA MAC address register 0. 75*4882a593Smuzhiyun */ 76*4882a593Smuzhiyun #define CSR3 0x000c 77*4882a593Smuzhiyun #define CSR3_BYTE0 FIELD32(0x000000ff) 78*4882a593Smuzhiyun #define CSR3_BYTE1 FIELD32(0x0000ff00) 79*4882a593Smuzhiyun #define CSR3_BYTE2 FIELD32(0x00ff0000) 80*4882a593Smuzhiyun #define CSR3_BYTE3 FIELD32(0xff000000) 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun /* 83*4882a593Smuzhiyun * CSR4: STA MAC address register 1. 84*4882a593Smuzhiyun */ 85*4882a593Smuzhiyun #define CSR4 0x0010 86*4882a593Smuzhiyun #define CSR4_BYTE4 FIELD32(0x000000ff) 87*4882a593Smuzhiyun #define CSR4_BYTE5 FIELD32(0x0000ff00) 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun /* 90*4882a593Smuzhiyun * CSR5: BSSID register 0. 91*4882a593Smuzhiyun */ 92*4882a593Smuzhiyun #define CSR5 0x0014 93*4882a593Smuzhiyun #define CSR5_BYTE0 FIELD32(0x000000ff) 94*4882a593Smuzhiyun #define CSR5_BYTE1 FIELD32(0x0000ff00) 95*4882a593Smuzhiyun #define CSR5_BYTE2 FIELD32(0x00ff0000) 96*4882a593Smuzhiyun #define CSR5_BYTE3 FIELD32(0xff000000) 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun /* 99*4882a593Smuzhiyun * CSR6: BSSID register 1. 100*4882a593Smuzhiyun */ 101*4882a593Smuzhiyun #define CSR6 0x0018 102*4882a593Smuzhiyun #define CSR6_BYTE4 FIELD32(0x000000ff) 103*4882a593Smuzhiyun #define CSR6_BYTE5 FIELD32(0x0000ff00) 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun /* 106*4882a593Smuzhiyun * CSR7: Interrupt source register. 107*4882a593Smuzhiyun * Write 1 to clear interrupt. 108*4882a593Smuzhiyun * TBCN_EXPIRE: Beacon timer expired interrupt. 109*4882a593Smuzhiyun * TWAKE_EXPIRE: Wakeup timer expired interrupt. 110*4882a593Smuzhiyun * TATIMW_EXPIRE: Timer of atim window expired interrupt. 111*4882a593Smuzhiyun * TXDONE_TXRING: Tx ring transmit done interrupt. 112*4882a593Smuzhiyun * TXDONE_ATIMRING: Atim ring transmit done interrupt. 113*4882a593Smuzhiyun * TXDONE_PRIORING: Priority ring transmit done interrupt. 114*4882a593Smuzhiyun * RXDONE: Receive done interrupt. 115*4882a593Smuzhiyun */ 116*4882a593Smuzhiyun #define CSR7 0x001c 117*4882a593Smuzhiyun #define CSR7_TBCN_EXPIRE FIELD32(0x00000001) 118*4882a593Smuzhiyun #define CSR7_TWAKE_EXPIRE FIELD32(0x00000002) 119*4882a593Smuzhiyun #define CSR7_TATIMW_EXPIRE FIELD32(0x00000004) 120*4882a593Smuzhiyun #define CSR7_TXDONE_TXRING FIELD32(0x00000008) 121*4882a593Smuzhiyun #define CSR7_TXDONE_ATIMRING FIELD32(0x00000010) 122*4882a593Smuzhiyun #define CSR7_TXDONE_PRIORING FIELD32(0x00000020) 123*4882a593Smuzhiyun #define CSR7_RXDONE FIELD32(0x00000040) 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun /* 126*4882a593Smuzhiyun * CSR8: Interrupt mask register. 127*4882a593Smuzhiyun * Write 1 to mask interrupt. 128*4882a593Smuzhiyun * TBCN_EXPIRE: Beacon timer expired interrupt. 129*4882a593Smuzhiyun * TWAKE_EXPIRE: Wakeup timer expired interrupt. 130*4882a593Smuzhiyun * TATIMW_EXPIRE: Timer of atim window expired interrupt. 131*4882a593Smuzhiyun * TXDONE_TXRING: Tx ring transmit done interrupt. 132*4882a593Smuzhiyun * TXDONE_ATIMRING: Atim ring transmit done interrupt. 133*4882a593Smuzhiyun * TXDONE_PRIORING: Priority ring transmit done interrupt. 134*4882a593Smuzhiyun * RXDONE: Receive done interrupt. 135*4882a593Smuzhiyun */ 136*4882a593Smuzhiyun #define CSR8 0x0020 137*4882a593Smuzhiyun #define CSR8_TBCN_EXPIRE FIELD32(0x00000001) 138*4882a593Smuzhiyun #define CSR8_TWAKE_EXPIRE FIELD32(0x00000002) 139*4882a593Smuzhiyun #define CSR8_TATIMW_EXPIRE FIELD32(0x00000004) 140*4882a593Smuzhiyun #define CSR8_TXDONE_TXRING FIELD32(0x00000008) 141*4882a593Smuzhiyun #define CSR8_TXDONE_ATIMRING FIELD32(0x00000010) 142*4882a593Smuzhiyun #define CSR8_TXDONE_PRIORING FIELD32(0x00000020) 143*4882a593Smuzhiyun #define CSR8_RXDONE FIELD32(0x00000040) 144*4882a593Smuzhiyun 145*4882a593Smuzhiyun /* 146*4882a593Smuzhiyun * CSR9: Maximum frame length register. 147*4882a593Smuzhiyun * MAX_FRAME_UNIT: Maximum frame length in 128b unit, default: 12. 148*4882a593Smuzhiyun */ 149*4882a593Smuzhiyun #define CSR9 0x0024 150*4882a593Smuzhiyun #define CSR9_MAX_FRAME_UNIT FIELD32(0x00000f80) 151*4882a593Smuzhiyun 152*4882a593Smuzhiyun /* 153*4882a593Smuzhiyun * CSR11: Back-off control register. 154*4882a593Smuzhiyun * CWMIN: CWmin. Default cwmin is 31 (2^5 - 1). 155*4882a593Smuzhiyun * CWMAX: CWmax. Default cwmax is 1023 (2^10 - 1). 156*4882a593Smuzhiyun * SLOT_TIME: Slot time, default is 20us for 802.11b. 157*4882a593Smuzhiyun * LONG_RETRY: Long retry count. 158*4882a593Smuzhiyun * SHORT_RETRY: Short retry count. 159*4882a593Smuzhiyun */ 160*4882a593Smuzhiyun #define CSR11 0x002c 161*4882a593Smuzhiyun #define CSR11_CWMIN FIELD32(0x0000000f) 162*4882a593Smuzhiyun #define CSR11_CWMAX FIELD32(0x000000f0) 163*4882a593Smuzhiyun #define CSR11_SLOT_TIME FIELD32(0x00001f00) 164*4882a593Smuzhiyun #define CSR11_LONG_RETRY FIELD32(0x00ff0000) 165*4882a593Smuzhiyun #define CSR11_SHORT_RETRY FIELD32(0xff000000) 166*4882a593Smuzhiyun 167*4882a593Smuzhiyun /* 168*4882a593Smuzhiyun * CSR12: Synchronization configuration register 0. 169*4882a593Smuzhiyun * All units in 1/16 TU. 170*4882a593Smuzhiyun * BEACON_INTERVAL: Beacon interval, default is 100 TU. 171*4882a593Smuzhiyun * CFPMAX_DURATION: Cfp maximum duration, default is 100 TU. 172*4882a593Smuzhiyun */ 173*4882a593Smuzhiyun #define CSR12 0x0030 174*4882a593Smuzhiyun #define CSR12_BEACON_INTERVAL FIELD32(0x0000ffff) 175*4882a593Smuzhiyun #define CSR12_CFP_MAX_DURATION FIELD32(0xffff0000) 176*4882a593Smuzhiyun 177*4882a593Smuzhiyun /* 178*4882a593Smuzhiyun * CSR13: Synchronization configuration register 1. 179*4882a593Smuzhiyun * All units in 1/16 TU. 180*4882a593Smuzhiyun * ATIMW_DURATION: Atim window duration. 181*4882a593Smuzhiyun * CFP_PERIOD: Cfp period, default is 0 TU. 182*4882a593Smuzhiyun */ 183*4882a593Smuzhiyun #define CSR13 0x0034 184*4882a593Smuzhiyun #define CSR13_ATIMW_DURATION FIELD32(0x0000ffff) 185*4882a593Smuzhiyun #define CSR13_CFP_PERIOD FIELD32(0x00ff0000) 186*4882a593Smuzhiyun 187*4882a593Smuzhiyun /* 188*4882a593Smuzhiyun * CSR14: Synchronization control register. 189*4882a593Smuzhiyun * TSF_COUNT: Enable tsf auto counting. 190*4882a593Smuzhiyun * TSF_SYNC: Tsf sync, 0: disable, 1: infra, 2: ad-hoc/master mode. 191*4882a593Smuzhiyun * TBCN: Enable tbcn with reload value. 192*4882a593Smuzhiyun * TCFP: Enable tcfp & cfp / cp switching. 193*4882a593Smuzhiyun * TATIMW: Enable tatimw & atim window switching. 194*4882a593Smuzhiyun * BEACON_GEN: Enable beacon generator. 195*4882a593Smuzhiyun * CFP_COUNT_PRELOAD: Cfp count preload value. 196*4882a593Smuzhiyun * TBCM_PRELOAD: Tbcn preload value in units of 64us. 197*4882a593Smuzhiyun */ 198*4882a593Smuzhiyun #define CSR14 0x0038 199*4882a593Smuzhiyun #define CSR14_TSF_COUNT FIELD32(0x00000001) 200*4882a593Smuzhiyun #define CSR14_TSF_SYNC FIELD32(0x00000006) 201*4882a593Smuzhiyun #define CSR14_TBCN FIELD32(0x00000008) 202*4882a593Smuzhiyun #define CSR14_TCFP FIELD32(0x00000010) 203*4882a593Smuzhiyun #define CSR14_TATIMW FIELD32(0x00000020) 204*4882a593Smuzhiyun #define CSR14_BEACON_GEN FIELD32(0x00000040) 205*4882a593Smuzhiyun #define CSR14_CFP_COUNT_PRELOAD FIELD32(0x0000ff00) 206*4882a593Smuzhiyun #define CSR14_TBCM_PRELOAD FIELD32(0xffff0000) 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun /* 209*4882a593Smuzhiyun * CSR15: Synchronization status register. 210*4882a593Smuzhiyun * CFP: ASIC is in contention-free period. 211*4882a593Smuzhiyun * ATIMW: ASIC is in ATIM window. 212*4882a593Smuzhiyun * BEACON_SENT: Beacon is send. 213*4882a593Smuzhiyun */ 214*4882a593Smuzhiyun #define CSR15 0x003c 215*4882a593Smuzhiyun #define CSR15_CFP FIELD32(0x00000001) 216*4882a593Smuzhiyun #define CSR15_ATIMW FIELD32(0x00000002) 217*4882a593Smuzhiyun #define CSR15_BEACON_SENT FIELD32(0x00000004) 218*4882a593Smuzhiyun 219*4882a593Smuzhiyun /* 220*4882a593Smuzhiyun * CSR16: TSF timer register 0. 221*4882a593Smuzhiyun */ 222*4882a593Smuzhiyun #define CSR16 0x0040 223*4882a593Smuzhiyun #define CSR16_LOW_TSFTIMER FIELD32(0xffffffff) 224*4882a593Smuzhiyun 225*4882a593Smuzhiyun /* 226*4882a593Smuzhiyun * CSR17: TSF timer register 1. 227*4882a593Smuzhiyun */ 228*4882a593Smuzhiyun #define CSR17 0x0044 229*4882a593Smuzhiyun #define CSR17_HIGH_TSFTIMER FIELD32(0xffffffff) 230*4882a593Smuzhiyun 231*4882a593Smuzhiyun /* 232*4882a593Smuzhiyun * CSR18: IFS timer register 0. 233*4882a593Smuzhiyun * SIFS: Sifs, default is 10 us. 234*4882a593Smuzhiyun * PIFS: Pifs, default is 30 us. 235*4882a593Smuzhiyun */ 236*4882a593Smuzhiyun #define CSR18 0x0048 237*4882a593Smuzhiyun #define CSR18_SIFS FIELD32(0x0000ffff) 238*4882a593Smuzhiyun #define CSR18_PIFS FIELD32(0xffff0000) 239*4882a593Smuzhiyun 240*4882a593Smuzhiyun /* 241*4882a593Smuzhiyun * CSR19: IFS timer register 1. 242*4882a593Smuzhiyun * DIFS: Difs, default is 50 us. 243*4882a593Smuzhiyun * EIFS: Eifs, default is 364 us. 244*4882a593Smuzhiyun */ 245*4882a593Smuzhiyun #define CSR19 0x004c 246*4882a593Smuzhiyun #define CSR19_DIFS FIELD32(0x0000ffff) 247*4882a593Smuzhiyun #define CSR19_EIFS FIELD32(0xffff0000) 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun /* 250*4882a593Smuzhiyun * CSR20: Wakeup timer register. 251*4882a593Smuzhiyun * DELAY_AFTER_TBCN: Delay after tbcn expired in units of 1/16 TU. 252*4882a593Smuzhiyun * TBCN_BEFORE_WAKEUP: Number of beacon before wakeup. 253*4882a593Smuzhiyun * AUTOWAKE: Enable auto wakeup / sleep mechanism. 254*4882a593Smuzhiyun */ 255*4882a593Smuzhiyun #define CSR20 0x0050 256*4882a593Smuzhiyun #define CSR20_DELAY_AFTER_TBCN FIELD32(0x0000ffff) 257*4882a593Smuzhiyun #define CSR20_TBCN_BEFORE_WAKEUP FIELD32(0x00ff0000) 258*4882a593Smuzhiyun #define CSR20_AUTOWAKE FIELD32(0x01000000) 259*4882a593Smuzhiyun 260*4882a593Smuzhiyun /* 261*4882a593Smuzhiyun * CSR21: EEPROM control register. 262*4882a593Smuzhiyun * RELOAD: Write 1 to reload eeprom content. 263*4882a593Smuzhiyun * TYPE_93C46: 1: 93c46, 0:93c66. 264*4882a593Smuzhiyun */ 265*4882a593Smuzhiyun #define CSR21 0x0054 266*4882a593Smuzhiyun #define CSR21_RELOAD FIELD32(0x00000001) 267*4882a593Smuzhiyun #define CSR21_EEPROM_DATA_CLOCK FIELD32(0x00000002) 268*4882a593Smuzhiyun #define CSR21_EEPROM_CHIP_SELECT FIELD32(0x00000004) 269*4882a593Smuzhiyun #define CSR21_EEPROM_DATA_IN FIELD32(0x00000008) 270*4882a593Smuzhiyun #define CSR21_EEPROM_DATA_OUT FIELD32(0x00000010) 271*4882a593Smuzhiyun #define CSR21_TYPE_93C46 FIELD32(0x00000020) 272*4882a593Smuzhiyun 273*4882a593Smuzhiyun /* 274*4882a593Smuzhiyun * CSR22: CFP control register. 275*4882a593Smuzhiyun * CFP_DURATION_REMAIN: Cfp duration remain, in units of TU. 276*4882a593Smuzhiyun * RELOAD_CFP_DURATION: Write 1 to reload cfp duration remain. 277*4882a593Smuzhiyun */ 278*4882a593Smuzhiyun #define CSR22 0x0058 279*4882a593Smuzhiyun #define CSR22_CFP_DURATION_REMAIN FIELD32(0x0000ffff) 280*4882a593Smuzhiyun #define CSR22_RELOAD_CFP_DURATION FIELD32(0x00010000) 281*4882a593Smuzhiyun 282*4882a593Smuzhiyun /* 283*4882a593Smuzhiyun * Transmit related CSRs. 284*4882a593Smuzhiyun * Some values are set in TU, whereas 1 TU == 1024 us. 285*4882a593Smuzhiyun */ 286*4882a593Smuzhiyun 287*4882a593Smuzhiyun /* 288*4882a593Smuzhiyun * TXCSR0: TX Control Register. 289*4882a593Smuzhiyun * KICK_TX: Kick tx ring. 290*4882a593Smuzhiyun * KICK_ATIM: Kick atim ring. 291*4882a593Smuzhiyun * KICK_PRIO: Kick priority ring. 292*4882a593Smuzhiyun * ABORT: Abort all transmit related ring operation. 293*4882a593Smuzhiyun */ 294*4882a593Smuzhiyun #define TXCSR0 0x0060 295*4882a593Smuzhiyun #define TXCSR0_KICK_TX FIELD32(0x00000001) 296*4882a593Smuzhiyun #define TXCSR0_KICK_ATIM FIELD32(0x00000002) 297*4882a593Smuzhiyun #define TXCSR0_KICK_PRIO FIELD32(0x00000004) 298*4882a593Smuzhiyun #define TXCSR0_ABORT FIELD32(0x00000008) 299*4882a593Smuzhiyun 300*4882a593Smuzhiyun /* 301*4882a593Smuzhiyun * TXCSR1: TX Configuration Register. 302*4882a593Smuzhiyun * ACK_TIMEOUT: Ack timeout, default = sifs + 2*slottime + acktime @ 1mbps. 303*4882a593Smuzhiyun * ACK_CONSUME_TIME: Ack consume time, default = sifs + acktime @ 1mbps. 304*4882a593Smuzhiyun * TSF_OFFSET: Insert tsf offset. 305*4882a593Smuzhiyun * AUTORESPONDER: Enable auto responder which include ack & cts. 306*4882a593Smuzhiyun */ 307*4882a593Smuzhiyun #define TXCSR1 0x0064 308*4882a593Smuzhiyun #define TXCSR1_ACK_TIMEOUT FIELD32(0x000001ff) 309*4882a593Smuzhiyun #define TXCSR1_ACK_CONSUME_TIME FIELD32(0x0003fe00) 310*4882a593Smuzhiyun #define TXCSR1_TSF_OFFSET FIELD32(0x00fc0000) 311*4882a593Smuzhiyun #define TXCSR1_AUTORESPONDER FIELD32(0x01000000) 312*4882a593Smuzhiyun 313*4882a593Smuzhiyun /* 314*4882a593Smuzhiyun * TXCSR2: Tx descriptor configuration register. 315*4882a593Smuzhiyun * TXD_SIZE: Tx descriptor size, default is 48. 316*4882a593Smuzhiyun * NUM_TXD: Number of tx entries in ring. 317*4882a593Smuzhiyun * NUM_ATIM: Number of atim entries in ring. 318*4882a593Smuzhiyun * NUM_PRIO: Number of priority entries in ring. 319*4882a593Smuzhiyun */ 320*4882a593Smuzhiyun #define TXCSR2 0x0068 321*4882a593Smuzhiyun #define TXCSR2_TXD_SIZE FIELD32(0x000000ff) 322*4882a593Smuzhiyun #define TXCSR2_NUM_TXD FIELD32(0x0000ff00) 323*4882a593Smuzhiyun #define TXCSR2_NUM_ATIM FIELD32(0x00ff0000) 324*4882a593Smuzhiyun #define TXCSR2_NUM_PRIO FIELD32(0xff000000) 325*4882a593Smuzhiyun 326*4882a593Smuzhiyun /* 327*4882a593Smuzhiyun * TXCSR3: TX Ring Base address register. 328*4882a593Smuzhiyun */ 329*4882a593Smuzhiyun #define TXCSR3 0x006c 330*4882a593Smuzhiyun #define TXCSR3_TX_RING_REGISTER FIELD32(0xffffffff) 331*4882a593Smuzhiyun 332*4882a593Smuzhiyun /* 333*4882a593Smuzhiyun * TXCSR4: TX Atim Ring Base address register. 334*4882a593Smuzhiyun */ 335*4882a593Smuzhiyun #define TXCSR4 0x0070 336*4882a593Smuzhiyun #define TXCSR4_ATIM_RING_REGISTER FIELD32(0xffffffff) 337*4882a593Smuzhiyun 338*4882a593Smuzhiyun /* 339*4882a593Smuzhiyun * TXCSR5: TX Prio Ring Base address register. 340*4882a593Smuzhiyun */ 341*4882a593Smuzhiyun #define TXCSR5 0x0074 342*4882a593Smuzhiyun #define TXCSR5_PRIO_RING_REGISTER FIELD32(0xffffffff) 343*4882a593Smuzhiyun 344*4882a593Smuzhiyun /* 345*4882a593Smuzhiyun * TXCSR6: Beacon Base address register. 346*4882a593Smuzhiyun */ 347*4882a593Smuzhiyun #define TXCSR6 0x0078 348*4882a593Smuzhiyun #define TXCSR6_BEACON_RING_REGISTER FIELD32(0xffffffff) 349*4882a593Smuzhiyun 350*4882a593Smuzhiyun /* 351*4882a593Smuzhiyun * TXCSR7: Auto responder control register. 352*4882a593Smuzhiyun * AR_POWERMANAGEMENT: Auto responder power management bit. 353*4882a593Smuzhiyun */ 354*4882a593Smuzhiyun #define TXCSR7 0x007c 355*4882a593Smuzhiyun #define TXCSR7_AR_POWERMANAGEMENT FIELD32(0x00000001) 356*4882a593Smuzhiyun 357*4882a593Smuzhiyun /* 358*4882a593Smuzhiyun * Receive related CSRs. 359*4882a593Smuzhiyun * Some values are set in TU, whereas 1 TU == 1024 us. 360*4882a593Smuzhiyun */ 361*4882a593Smuzhiyun 362*4882a593Smuzhiyun /* 363*4882a593Smuzhiyun * RXCSR0: RX Control Register. 364*4882a593Smuzhiyun * DISABLE_RX: Disable rx engine. 365*4882a593Smuzhiyun * DROP_CRC: Drop crc error. 366*4882a593Smuzhiyun * DROP_PHYSICAL: Drop physical error. 367*4882a593Smuzhiyun * DROP_CONTROL: Drop control frame. 368*4882a593Smuzhiyun * DROP_NOT_TO_ME: Drop not to me unicast frame. 369*4882a593Smuzhiyun * DROP_TODS: Drop frame tods bit is true. 370*4882a593Smuzhiyun * DROP_VERSION_ERROR: Drop version error frame. 371*4882a593Smuzhiyun * PASS_CRC: Pass all packets with crc attached. 372*4882a593Smuzhiyun */ 373*4882a593Smuzhiyun #define RXCSR0 0x0080 374*4882a593Smuzhiyun #define RXCSR0_DISABLE_RX FIELD32(0x00000001) 375*4882a593Smuzhiyun #define RXCSR0_DROP_CRC FIELD32(0x00000002) 376*4882a593Smuzhiyun #define RXCSR0_DROP_PHYSICAL FIELD32(0x00000004) 377*4882a593Smuzhiyun #define RXCSR0_DROP_CONTROL FIELD32(0x00000008) 378*4882a593Smuzhiyun #define RXCSR0_DROP_NOT_TO_ME FIELD32(0x00000010) 379*4882a593Smuzhiyun #define RXCSR0_DROP_TODS FIELD32(0x00000020) 380*4882a593Smuzhiyun #define RXCSR0_DROP_VERSION_ERROR FIELD32(0x00000040) 381*4882a593Smuzhiyun #define RXCSR0_PASS_CRC FIELD32(0x00000080) 382*4882a593Smuzhiyun 383*4882a593Smuzhiyun /* 384*4882a593Smuzhiyun * RXCSR1: RX descriptor configuration register. 385*4882a593Smuzhiyun * RXD_SIZE: Rx descriptor size, default is 32b. 386*4882a593Smuzhiyun * NUM_RXD: Number of rx entries in ring. 387*4882a593Smuzhiyun */ 388*4882a593Smuzhiyun #define RXCSR1 0x0084 389*4882a593Smuzhiyun #define RXCSR1_RXD_SIZE FIELD32(0x000000ff) 390*4882a593Smuzhiyun #define RXCSR1_NUM_RXD FIELD32(0x0000ff00) 391*4882a593Smuzhiyun 392*4882a593Smuzhiyun /* 393*4882a593Smuzhiyun * RXCSR2: RX Ring base address register. 394*4882a593Smuzhiyun */ 395*4882a593Smuzhiyun #define RXCSR2 0x0088 396*4882a593Smuzhiyun #define RXCSR2_RX_RING_REGISTER FIELD32(0xffffffff) 397*4882a593Smuzhiyun 398*4882a593Smuzhiyun /* 399*4882a593Smuzhiyun * RXCSR3: BBP ID register for Rx operation. 400*4882a593Smuzhiyun * BBP_ID#: BBP register # id. 401*4882a593Smuzhiyun * BBP_ID#_VALID: BBP register # id is valid or not. 402*4882a593Smuzhiyun */ 403*4882a593Smuzhiyun #define RXCSR3 0x0090 404*4882a593Smuzhiyun #define RXCSR3_BBP_ID0 FIELD32(0x0000007f) 405*4882a593Smuzhiyun #define RXCSR3_BBP_ID0_VALID FIELD32(0x00000080) 406*4882a593Smuzhiyun #define RXCSR3_BBP_ID1 FIELD32(0x00007f00) 407*4882a593Smuzhiyun #define RXCSR3_BBP_ID1_VALID FIELD32(0x00008000) 408*4882a593Smuzhiyun #define RXCSR3_BBP_ID2 FIELD32(0x007f0000) 409*4882a593Smuzhiyun #define RXCSR3_BBP_ID2_VALID FIELD32(0x00800000) 410*4882a593Smuzhiyun #define RXCSR3_BBP_ID3 FIELD32(0x7f000000) 411*4882a593Smuzhiyun #define RXCSR3_BBP_ID3_VALID FIELD32(0x80000000) 412*4882a593Smuzhiyun 413*4882a593Smuzhiyun /* 414*4882a593Smuzhiyun * RXCSR4: BBP ID register for Rx operation. 415*4882a593Smuzhiyun * BBP_ID#: BBP register # id. 416*4882a593Smuzhiyun * BBP_ID#_VALID: BBP register # id is valid or not. 417*4882a593Smuzhiyun */ 418*4882a593Smuzhiyun #define RXCSR4 0x0094 419*4882a593Smuzhiyun #define RXCSR4_BBP_ID4 FIELD32(0x0000007f) 420*4882a593Smuzhiyun #define RXCSR4_BBP_ID4_VALID FIELD32(0x00000080) 421*4882a593Smuzhiyun #define RXCSR4_BBP_ID5 FIELD32(0x00007f00) 422*4882a593Smuzhiyun #define RXCSR4_BBP_ID5_VALID FIELD32(0x00008000) 423*4882a593Smuzhiyun 424*4882a593Smuzhiyun /* 425*4882a593Smuzhiyun * ARCSR0: Auto Responder PLCP config register 0. 426*4882a593Smuzhiyun * ARCSR0_AR_BBP_DATA#: Auto responder BBP register # data. 427*4882a593Smuzhiyun * ARCSR0_AR_BBP_ID#: Auto responder BBP register # Id. 428*4882a593Smuzhiyun */ 429*4882a593Smuzhiyun #define ARCSR0 0x0098 430*4882a593Smuzhiyun #define ARCSR0_AR_BBP_DATA0 FIELD32(0x000000ff) 431*4882a593Smuzhiyun #define ARCSR0_AR_BBP_ID0 FIELD32(0x0000ff00) 432*4882a593Smuzhiyun #define ARCSR0_AR_BBP_DATA1 FIELD32(0x00ff0000) 433*4882a593Smuzhiyun #define ARCSR0_AR_BBP_ID1 FIELD32(0xff000000) 434*4882a593Smuzhiyun 435*4882a593Smuzhiyun /* 436*4882a593Smuzhiyun * ARCSR1: Auto Responder PLCP config register 1. 437*4882a593Smuzhiyun * ARCSR0_AR_BBP_DATA#: Auto responder BBP register # data. 438*4882a593Smuzhiyun * ARCSR0_AR_BBP_ID#: Auto responder BBP register # Id. 439*4882a593Smuzhiyun */ 440*4882a593Smuzhiyun #define ARCSR1 0x009c 441*4882a593Smuzhiyun #define ARCSR1_AR_BBP_DATA2 FIELD32(0x000000ff) 442*4882a593Smuzhiyun #define ARCSR1_AR_BBP_ID2 FIELD32(0x0000ff00) 443*4882a593Smuzhiyun #define ARCSR1_AR_BBP_DATA3 FIELD32(0x00ff0000) 444*4882a593Smuzhiyun #define ARCSR1_AR_BBP_ID3 FIELD32(0xff000000) 445*4882a593Smuzhiyun 446*4882a593Smuzhiyun /* 447*4882a593Smuzhiyun * Miscellaneous Registers. 448*4882a593Smuzhiyun * Some values are set in TU, whereas 1 TU == 1024 us. 449*4882a593Smuzhiyun */ 450*4882a593Smuzhiyun 451*4882a593Smuzhiyun /* 452*4882a593Smuzhiyun * PCICSR: PCI control register. 453*4882a593Smuzhiyun * BIG_ENDIAN: 1: big endian, 0: little endian. 454*4882a593Smuzhiyun * RX_TRESHOLD: Rx threshold in dw to start pci access 455*4882a593Smuzhiyun * 0: 16dw (default), 1: 8dw, 2: 4dw, 3: 32dw. 456*4882a593Smuzhiyun * TX_TRESHOLD: Tx threshold in dw to start pci access 457*4882a593Smuzhiyun * 0: 0dw (default), 1: 1dw, 2: 4dw, 3: forward. 458*4882a593Smuzhiyun * BURST_LENTH: Pci burst length 0: 4dw (default, 1: 8dw, 2: 16dw, 3:32dw. 459*4882a593Smuzhiyun * ENABLE_CLK: Enable clk_run, pci clock can't going down to non-operational. 460*4882a593Smuzhiyun */ 461*4882a593Smuzhiyun #define PCICSR 0x008c 462*4882a593Smuzhiyun #define PCICSR_BIG_ENDIAN FIELD32(0x00000001) 463*4882a593Smuzhiyun #define PCICSR_RX_TRESHOLD FIELD32(0x00000006) 464*4882a593Smuzhiyun #define PCICSR_TX_TRESHOLD FIELD32(0x00000018) 465*4882a593Smuzhiyun #define PCICSR_BURST_LENTH FIELD32(0x00000060) 466*4882a593Smuzhiyun #define PCICSR_ENABLE_CLK FIELD32(0x00000080) 467*4882a593Smuzhiyun 468*4882a593Smuzhiyun /* 469*4882a593Smuzhiyun * CNT0: FCS error count. 470*4882a593Smuzhiyun * FCS_ERROR: FCS error count, cleared when read. 471*4882a593Smuzhiyun */ 472*4882a593Smuzhiyun #define CNT0 0x00a0 473*4882a593Smuzhiyun #define CNT0_FCS_ERROR FIELD32(0x0000ffff) 474*4882a593Smuzhiyun 475*4882a593Smuzhiyun /* 476*4882a593Smuzhiyun * Statistic Register. 477*4882a593Smuzhiyun * CNT1: PLCP error count. 478*4882a593Smuzhiyun * CNT2: Long error count. 479*4882a593Smuzhiyun * CNT3: CCA false alarm count. 480*4882a593Smuzhiyun * CNT4: Rx FIFO overflow count. 481*4882a593Smuzhiyun * CNT5: Tx FIFO underrun count. 482*4882a593Smuzhiyun */ 483*4882a593Smuzhiyun #define TIMECSR2 0x00a8 484*4882a593Smuzhiyun #define CNT1 0x00ac 485*4882a593Smuzhiyun #define CNT2 0x00b0 486*4882a593Smuzhiyun #define TIMECSR3 0x00b4 487*4882a593Smuzhiyun #define CNT3 0x00b8 488*4882a593Smuzhiyun #define CNT4 0x00bc 489*4882a593Smuzhiyun #define CNT5 0x00c0 490*4882a593Smuzhiyun 491*4882a593Smuzhiyun /* 492*4882a593Smuzhiyun * Baseband Control Register. 493*4882a593Smuzhiyun */ 494*4882a593Smuzhiyun 495*4882a593Smuzhiyun /* 496*4882a593Smuzhiyun * PWRCSR0: Power mode configuration register. 497*4882a593Smuzhiyun */ 498*4882a593Smuzhiyun #define PWRCSR0 0x00c4 499*4882a593Smuzhiyun 500*4882a593Smuzhiyun /* 501*4882a593Smuzhiyun * Power state transition time registers. 502*4882a593Smuzhiyun */ 503*4882a593Smuzhiyun #define PSCSR0 0x00c8 504*4882a593Smuzhiyun #define PSCSR1 0x00cc 505*4882a593Smuzhiyun #define PSCSR2 0x00d0 506*4882a593Smuzhiyun #define PSCSR3 0x00d4 507*4882a593Smuzhiyun 508*4882a593Smuzhiyun /* 509*4882a593Smuzhiyun * PWRCSR1: Manual power control / status register. 510*4882a593Smuzhiyun * Allowed state: 0 deep_sleep, 1: sleep, 2: standby, 3: awake. 511*4882a593Smuzhiyun * SET_STATE: Set state. Write 1 to trigger, self cleared. 512*4882a593Smuzhiyun * BBP_DESIRE_STATE: BBP desired state. 513*4882a593Smuzhiyun * RF_DESIRE_STATE: RF desired state. 514*4882a593Smuzhiyun * BBP_CURR_STATE: BBP current state. 515*4882a593Smuzhiyun * RF_CURR_STATE: RF current state. 516*4882a593Smuzhiyun * PUT_TO_SLEEP: Put to sleep. Write 1 to trigger, self cleared. 517*4882a593Smuzhiyun */ 518*4882a593Smuzhiyun #define PWRCSR1 0x00d8 519*4882a593Smuzhiyun #define PWRCSR1_SET_STATE FIELD32(0x00000001) 520*4882a593Smuzhiyun #define PWRCSR1_BBP_DESIRE_STATE FIELD32(0x00000006) 521*4882a593Smuzhiyun #define PWRCSR1_RF_DESIRE_STATE FIELD32(0x00000018) 522*4882a593Smuzhiyun #define PWRCSR1_BBP_CURR_STATE FIELD32(0x00000060) 523*4882a593Smuzhiyun #define PWRCSR1_RF_CURR_STATE FIELD32(0x00000180) 524*4882a593Smuzhiyun #define PWRCSR1_PUT_TO_SLEEP FIELD32(0x00000200) 525*4882a593Smuzhiyun 526*4882a593Smuzhiyun /* 527*4882a593Smuzhiyun * TIMECSR: Timer control register. 528*4882a593Smuzhiyun * US_COUNT: 1 us timer count in units of clock cycles. 529*4882a593Smuzhiyun * US_64_COUNT: 64 us timer count in units of 1 us timer. 530*4882a593Smuzhiyun * BEACON_EXPECT: Beacon expect window. 531*4882a593Smuzhiyun */ 532*4882a593Smuzhiyun #define TIMECSR 0x00dc 533*4882a593Smuzhiyun #define TIMECSR_US_COUNT FIELD32(0x000000ff) 534*4882a593Smuzhiyun #define TIMECSR_US_64_COUNT FIELD32(0x0000ff00) 535*4882a593Smuzhiyun #define TIMECSR_BEACON_EXPECT FIELD32(0x00070000) 536*4882a593Smuzhiyun 537*4882a593Smuzhiyun /* 538*4882a593Smuzhiyun * MACCSR0: MAC configuration register 0. 539*4882a593Smuzhiyun */ 540*4882a593Smuzhiyun #define MACCSR0 0x00e0 541*4882a593Smuzhiyun 542*4882a593Smuzhiyun /* 543*4882a593Smuzhiyun * MACCSR1: MAC configuration register 1. 544*4882a593Smuzhiyun * KICK_RX: Kick one-shot rx in one-shot rx mode. 545*4882a593Smuzhiyun * ONESHOT_RXMODE: Enable one-shot rx mode for debugging. 546*4882a593Smuzhiyun * BBPRX_RESET_MODE: Ralink bbp rx reset mode. 547*4882a593Smuzhiyun * AUTO_TXBBP: Auto tx logic access bbp control register. 548*4882a593Smuzhiyun * AUTO_RXBBP: Auto rx logic access bbp control register. 549*4882a593Smuzhiyun * LOOPBACK: Loopback mode. 0: normal, 1: internal, 2: external, 3:rsvd. 550*4882a593Smuzhiyun * INTERSIL_IF: Intersil if calibration pin. 551*4882a593Smuzhiyun */ 552*4882a593Smuzhiyun #define MACCSR1 0x00e4 553*4882a593Smuzhiyun #define MACCSR1_KICK_RX FIELD32(0x00000001) 554*4882a593Smuzhiyun #define MACCSR1_ONESHOT_RXMODE FIELD32(0x00000002) 555*4882a593Smuzhiyun #define MACCSR1_BBPRX_RESET_MODE FIELD32(0x00000004) 556*4882a593Smuzhiyun #define MACCSR1_AUTO_TXBBP FIELD32(0x00000008) 557*4882a593Smuzhiyun #define MACCSR1_AUTO_RXBBP FIELD32(0x00000010) 558*4882a593Smuzhiyun #define MACCSR1_LOOPBACK FIELD32(0x00000060) 559*4882a593Smuzhiyun #define MACCSR1_INTERSIL_IF FIELD32(0x00000080) 560*4882a593Smuzhiyun 561*4882a593Smuzhiyun /* 562*4882a593Smuzhiyun * RALINKCSR: Ralink Rx auto-reset BBCR. 563*4882a593Smuzhiyun * AR_BBP_DATA#: Auto reset BBP register # data. 564*4882a593Smuzhiyun * AR_BBP_ID#: Auto reset BBP register # id. 565*4882a593Smuzhiyun */ 566*4882a593Smuzhiyun #define RALINKCSR 0x00e8 567*4882a593Smuzhiyun #define RALINKCSR_AR_BBP_DATA0 FIELD32(0x000000ff) 568*4882a593Smuzhiyun #define RALINKCSR_AR_BBP_ID0 FIELD32(0x0000ff00) 569*4882a593Smuzhiyun #define RALINKCSR_AR_BBP_DATA1 FIELD32(0x00ff0000) 570*4882a593Smuzhiyun #define RALINKCSR_AR_BBP_ID1 FIELD32(0xff000000) 571*4882a593Smuzhiyun 572*4882a593Smuzhiyun /* 573*4882a593Smuzhiyun * BCNCSR: Beacon interval control register. 574*4882a593Smuzhiyun * CHANGE: Write one to change beacon interval. 575*4882a593Smuzhiyun * DELTATIME: The delta time value. 576*4882a593Smuzhiyun * NUM_BEACON: Number of beacon according to mode. 577*4882a593Smuzhiyun * MODE: Please refer to asic specs. 578*4882a593Smuzhiyun * PLUS: Plus or minus delta time value. 579*4882a593Smuzhiyun */ 580*4882a593Smuzhiyun #define BCNCSR 0x00ec 581*4882a593Smuzhiyun #define BCNCSR_CHANGE FIELD32(0x00000001) 582*4882a593Smuzhiyun #define BCNCSR_DELTATIME FIELD32(0x0000001e) 583*4882a593Smuzhiyun #define BCNCSR_NUM_BEACON FIELD32(0x00001fe0) 584*4882a593Smuzhiyun #define BCNCSR_MODE FIELD32(0x00006000) 585*4882a593Smuzhiyun #define BCNCSR_PLUS FIELD32(0x00008000) 586*4882a593Smuzhiyun 587*4882a593Smuzhiyun /* 588*4882a593Smuzhiyun * BBP / RF / IF Control Register. 589*4882a593Smuzhiyun */ 590*4882a593Smuzhiyun 591*4882a593Smuzhiyun /* 592*4882a593Smuzhiyun * BBPCSR: BBP serial control register. 593*4882a593Smuzhiyun * VALUE: Register value to program into BBP. 594*4882a593Smuzhiyun * REGNUM: Selected BBP register. 595*4882a593Smuzhiyun * BUSY: 1: asic is busy execute BBP programming. 596*4882a593Smuzhiyun * WRITE_CONTROL: 1: write BBP, 0: read BBP. 597*4882a593Smuzhiyun */ 598*4882a593Smuzhiyun #define BBPCSR 0x00f0 599*4882a593Smuzhiyun #define BBPCSR_VALUE FIELD32(0x000000ff) 600*4882a593Smuzhiyun #define BBPCSR_REGNUM FIELD32(0x00007f00) 601*4882a593Smuzhiyun #define BBPCSR_BUSY FIELD32(0x00008000) 602*4882a593Smuzhiyun #define BBPCSR_WRITE_CONTROL FIELD32(0x00010000) 603*4882a593Smuzhiyun 604*4882a593Smuzhiyun /* 605*4882a593Smuzhiyun * RFCSR: RF serial control register. 606*4882a593Smuzhiyun * VALUE: Register value + id to program into rf/if. 607*4882a593Smuzhiyun * NUMBER_OF_BITS: Number of bits used in value (i:20, rfmd:22). 608*4882a593Smuzhiyun * IF_SELECT: Chip to program: 0: rf, 1: if. 609*4882a593Smuzhiyun * PLL_LD: Rf pll_ld status. 610*4882a593Smuzhiyun * BUSY: 1: asic is busy execute rf programming. 611*4882a593Smuzhiyun */ 612*4882a593Smuzhiyun #define RFCSR 0x00f4 613*4882a593Smuzhiyun #define RFCSR_VALUE FIELD32(0x00ffffff) 614*4882a593Smuzhiyun #define RFCSR_NUMBER_OF_BITS FIELD32(0x1f000000) 615*4882a593Smuzhiyun #define RFCSR_IF_SELECT FIELD32(0x20000000) 616*4882a593Smuzhiyun #define RFCSR_PLL_LD FIELD32(0x40000000) 617*4882a593Smuzhiyun #define RFCSR_BUSY FIELD32(0x80000000) 618*4882a593Smuzhiyun 619*4882a593Smuzhiyun /* 620*4882a593Smuzhiyun * LEDCSR: LED control register. 621*4882a593Smuzhiyun * ON_PERIOD: On period, default 70ms. 622*4882a593Smuzhiyun * OFF_PERIOD: Off period, default 30ms. 623*4882a593Smuzhiyun * LINK: 0: linkoff, 1: linkup. 624*4882a593Smuzhiyun * ACTIVITY: 0: idle, 1: active. 625*4882a593Smuzhiyun */ 626*4882a593Smuzhiyun #define LEDCSR 0x00f8 627*4882a593Smuzhiyun #define LEDCSR_ON_PERIOD FIELD32(0x000000ff) 628*4882a593Smuzhiyun #define LEDCSR_OFF_PERIOD FIELD32(0x0000ff00) 629*4882a593Smuzhiyun #define LEDCSR_LINK FIELD32(0x00010000) 630*4882a593Smuzhiyun #define LEDCSR_ACTIVITY FIELD32(0x00020000) 631*4882a593Smuzhiyun 632*4882a593Smuzhiyun /* 633*4882a593Smuzhiyun * ASIC pointer information. 634*4882a593Smuzhiyun * RXPTR: Current RX ring address. 635*4882a593Smuzhiyun * TXPTR: Current Tx ring address. 636*4882a593Smuzhiyun * PRIPTR: Current Priority ring address. 637*4882a593Smuzhiyun * ATIMPTR: Current ATIM ring address. 638*4882a593Smuzhiyun */ 639*4882a593Smuzhiyun #define RXPTR 0x0100 640*4882a593Smuzhiyun #define TXPTR 0x0104 641*4882a593Smuzhiyun #define PRIPTR 0x0108 642*4882a593Smuzhiyun #define ATIMPTR 0x010c 643*4882a593Smuzhiyun 644*4882a593Smuzhiyun /* 645*4882a593Smuzhiyun * GPIO and others. 646*4882a593Smuzhiyun */ 647*4882a593Smuzhiyun 648*4882a593Smuzhiyun /* 649*4882a593Smuzhiyun * GPIOCSR: GPIO control register. 650*4882a593Smuzhiyun * GPIOCSR_VALx: Actual GPIO pin x value 651*4882a593Smuzhiyun * GPIOCSR_DIRx: GPIO direction: 0 = output; 1 = input 652*4882a593Smuzhiyun */ 653*4882a593Smuzhiyun #define GPIOCSR 0x0120 654*4882a593Smuzhiyun #define GPIOCSR_VAL0 FIELD32(0x00000001) 655*4882a593Smuzhiyun #define GPIOCSR_VAL1 FIELD32(0x00000002) 656*4882a593Smuzhiyun #define GPIOCSR_VAL2 FIELD32(0x00000004) 657*4882a593Smuzhiyun #define GPIOCSR_VAL3 FIELD32(0x00000008) 658*4882a593Smuzhiyun #define GPIOCSR_VAL4 FIELD32(0x00000010) 659*4882a593Smuzhiyun #define GPIOCSR_VAL5 FIELD32(0x00000020) 660*4882a593Smuzhiyun #define GPIOCSR_VAL6 FIELD32(0x00000040) 661*4882a593Smuzhiyun #define GPIOCSR_VAL7 FIELD32(0x00000080) 662*4882a593Smuzhiyun #define GPIOCSR_DIR0 FIELD32(0x00000100) 663*4882a593Smuzhiyun #define GPIOCSR_DIR1 FIELD32(0x00000200) 664*4882a593Smuzhiyun #define GPIOCSR_DIR2 FIELD32(0x00000400) 665*4882a593Smuzhiyun #define GPIOCSR_DIR3 FIELD32(0x00000800) 666*4882a593Smuzhiyun #define GPIOCSR_DIR4 FIELD32(0x00001000) 667*4882a593Smuzhiyun #define GPIOCSR_DIR5 FIELD32(0x00002000) 668*4882a593Smuzhiyun #define GPIOCSR_DIR6 FIELD32(0x00004000) 669*4882a593Smuzhiyun #define GPIOCSR_DIR7 FIELD32(0x00008000) 670*4882a593Smuzhiyun 671*4882a593Smuzhiyun /* 672*4882a593Smuzhiyun * BBPPCSR: BBP Pin control register. 673*4882a593Smuzhiyun */ 674*4882a593Smuzhiyun #define BBPPCSR 0x0124 675*4882a593Smuzhiyun 676*4882a593Smuzhiyun /* 677*4882a593Smuzhiyun * BCNCSR1: Tx BEACON offset time control register. 678*4882a593Smuzhiyun * PRELOAD: Beacon timer offset in units of usec. 679*4882a593Smuzhiyun */ 680*4882a593Smuzhiyun #define BCNCSR1 0x0130 681*4882a593Smuzhiyun #define BCNCSR1_PRELOAD FIELD32(0x0000ffff) 682*4882a593Smuzhiyun 683*4882a593Smuzhiyun /* 684*4882a593Smuzhiyun * MACCSR2: TX_PE to RX_PE turn-around time control register 685*4882a593Smuzhiyun * DELAY: RX_PE low width, in units of pci clock cycle. 686*4882a593Smuzhiyun */ 687*4882a593Smuzhiyun #define MACCSR2 0x0134 688*4882a593Smuzhiyun #define MACCSR2_DELAY FIELD32(0x000000ff) 689*4882a593Smuzhiyun 690*4882a593Smuzhiyun /* 691*4882a593Smuzhiyun * ARCSR2: 1 Mbps ACK/CTS PLCP. 692*4882a593Smuzhiyun */ 693*4882a593Smuzhiyun #define ARCSR2 0x013c 694*4882a593Smuzhiyun #define ARCSR2_SIGNAL FIELD32(0x000000ff) 695*4882a593Smuzhiyun #define ARCSR2_SERVICE FIELD32(0x0000ff00) 696*4882a593Smuzhiyun #define ARCSR2_LENGTH_LOW FIELD32(0x00ff0000) 697*4882a593Smuzhiyun #define ARCSR2_LENGTH FIELD32(0xffff0000) 698*4882a593Smuzhiyun 699*4882a593Smuzhiyun /* 700*4882a593Smuzhiyun * ARCSR3: 2 Mbps ACK/CTS PLCP. 701*4882a593Smuzhiyun */ 702*4882a593Smuzhiyun #define ARCSR3 0x0140 703*4882a593Smuzhiyun #define ARCSR3_SIGNAL FIELD32(0x000000ff) 704*4882a593Smuzhiyun #define ARCSR3_SERVICE FIELD32(0x0000ff00) 705*4882a593Smuzhiyun #define ARCSR3_LENGTH FIELD32(0xffff0000) 706*4882a593Smuzhiyun 707*4882a593Smuzhiyun /* 708*4882a593Smuzhiyun * ARCSR4: 5.5 Mbps ACK/CTS PLCP. 709*4882a593Smuzhiyun */ 710*4882a593Smuzhiyun #define ARCSR4 0x0144 711*4882a593Smuzhiyun #define ARCSR4_SIGNAL FIELD32(0x000000ff) 712*4882a593Smuzhiyun #define ARCSR4_SERVICE FIELD32(0x0000ff00) 713*4882a593Smuzhiyun #define ARCSR4_LENGTH FIELD32(0xffff0000) 714*4882a593Smuzhiyun 715*4882a593Smuzhiyun /* 716*4882a593Smuzhiyun * ARCSR5: 11 Mbps ACK/CTS PLCP. 717*4882a593Smuzhiyun */ 718*4882a593Smuzhiyun #define ARCSR5 0x0148 719*4882a593Smuzhiyun #define ARCSR5_SIGNAL FIELD32(0x000000ff) 720*4882a593Smuzhiyun #define ARCSR5_SERVICE FIELD32(0x0000ff00) 721*4882a593Smuzhiyun #define ARCSR5_LENGTH FIELD32(0xffff0000) 722*4882a593Smuzhiyun 723*4882a593Smuzhiyun /* 724*4882a593Smuzhiyun * BBP registers. 725*4882a593Smuzhiyun * The wordsize of the BBP is 8 bits. 726*4882a593Smuzhiyun */ 727*4882a593Smuzhiyun 728*4882a593Smuzhiyun /* 729*4882a593Smuzhiyun * R1: TX antenna control 730*4882a593Smuzhiyun */ 731*4882a593Smuzhiyun #define BBP_R1_TX_ANTENNA FIELD8(0x03) 732*4882a593Smuzhiyun 733*4882a593Smuzhiyun /* 734*4882a593Smuzhiyun * R4: RX antenna control 735*4882a593Smuzhiyun */ 736*4882a593Smuzhiyun #define BBP_R4_RX_ANTENNA FIELD8(0x06) 737*4882a593Smuzhiyun 738*4882a593Smuzhiyun /* 739*4882a593Smuzhiyun * RF registers 740*4882a593Smuzhiyun */ 741*4882a593Smuzhiyun 742*4882a593Smuzhiyun /* 743*4882a593Smuzhiyun * RF 1 744*4882a593Smuzhiyun */ 745*4882a593Smuzhiyun #define RF1_TUNER FIELD32(0x00020000) 746*4882a593Smuzhiyun 747*4882a593Smuzhiyun /* 748*4882a593Smuzhiyun * RF 3 749*4882a593Smuzhiyun */ 750*4882a593Smuzhiyun #define RF3_TUNER FIELD32(0x00000100) 751*4882a593Smuzhiyun #define RF3_TXPOWER FIELD32(0x00003e00) 752*4882a593Smuzhiyun 753*4882a593Smuzhiyun /* 754*4882a593Smuzhiyun * EEPROM content. 755*4882a593Smuzhiyun * The wordsize of the EEPROM is 16 bits. 756*4882a593Smuzhiyun */ 757*4882a593Smuzhiyun 758*4882a593Smuzhiyun /* 759*4882a593Smuzhiyun * HW MAC address. 760*4882a593Smuzhiyun */ 761*4882a593Smuzhiyun #define EEPROM_MAC_ADDR_0 0x0002 762*4882a593Smuzhiyun #define EEPROM_MAC_ADDR_BYTE0 FIELD16(0x00ff) 763*4882a593Smuzhiyun #define EEPROM_MAC_ADDR_BYTE1 FIELD16(0xff00) 764*4882a593Smuzhiyun #define EEPROM_MAC_ADDR1 0x0003 765*4882a593Smuzhiyun #define EEPROM_MAC_ADDR_BYTE2 FIELD16(0x00ff) 766*4882a593Smuzhiyun #define EEPROM_MAC_ADDR_BYTE3 FIELD16(0xff00) 767*4882a593Smuzhiyun #define EEPROM_MAC_ADDR_2 0x0004 768*4882a593Smuzhiyun #define EEPROM_MAC_ADDR_BYTE4 FIELD16(0x00ff) 769*4882a593Smuzhiyun #define EEPROM_MAC_ADDR_BYTE5 FIELD16(0xff00) 770*4882a593Smuzhiyun 771*4882a593Smuzhiyun /* 772*4882a593Smuzhiyun * EEPROM antenna. 773*4882a593Smuzhiyun * ANTENNA_NUM: Number of antenna's. 774*4882a593Smuzhiyun * TX_DEFAULT: Default antenna 0: diversity, 1: A, 2: B. 775*4882a593Smuzhiyun * RX_DEFAULT: Default antenna 0: diversity, 1: A, 2: B. 776*4882a593Smuzhiyun * RF_TYPE: Rf_type of this adapter. 777*4882a593Smuzhiyun * LED_MODE: 0: default, 1: TX/RX activity,2: Single (ignore link), 3: rsvd. 778*4882a593Smuzhiyun * RX_AGCVGC: 0: disable, 1:enable BBP R13 tuning. 779*4882a593Smuzhiyun * HARDWARE_RADIO: 1: Hardware controlled radio. Read GPIO0. 780*4882a593Smuzhiyun */ 781*4882a593Smuzhiyun #define EEPROM_ANTENNA 0x0b 782*4882a593Smuzhiyun #define EEPROM_ANTENNA_NUM FIELD16(0x0003) 783*4882a593Smuzhiyun #define EEPROM_ANTENNA_TX_DEFAULT FIELD16(0x000c) 784*4882a593Smuzhiyun #define EEPROM_ANTENNA_RX_DEFAULT FIELD16(0x0030) 785*4882a593Smuzhiyun #define EEPROM_ANTENNA_RF_TYPE FIELD16(0x0040) 786*4882a593Smuzhiyun #define EEPROM_ANTENNA_LED_MODE FIELD16(0x0180) 787*4882a593Smuzhiyun #define EEPROM_ANTENNA_RX_AGCVGC_TUNING FIELD16(0x0200) 788*4882a593Smuzhiyun #define EEPROM_ANTENNA_HARDWARE_RADIO FIELD16(0x0400) 789*4882a593Smuzhiyun 790*4882a593Smuzhiyun /* 791*4882a593Smuzhiyun * EEPROM BBP. 792*4882a593Smuzhiyun */ 793*4882a593Smuzhiyun #define EEPROM_BBP_START 0x0c 794*4882a593Smuzhiyun #define EEPROM_BBP_SIZE 7 795*4882a593Smuzhiyun #define EEPROM_BBP_VALUE FIELD16(0x00ff) 796*4882a593Smuzhiyun #define EEPROM_BBP_REG_ID FIELD16(0xff00) 797*4882a593Smuzhiyun 798*4882a593Smuzhiyun /* 799*4882a593Smuzhiyun * EEPROM TXPOWER 800*4882a593Smuzhiyun */ 801*4882a593Smuzhiyun #define EEPROM_TXPOWER_START 0x13 802*4882a593Smuzhiyun #define EEPROM_TXPOWER_SIZE 7 803*4882a593Smuzhiyun #define EEPROM_TXPOWER_1 FIELD16(0x00ff) 804*4882a593Smuzhiyun #define EEPROM_TXPOWER_2 FIELD16(0xff00) 805*4882a593Smuzhiyun 806*4882a593Smuzhiyun /* 807*4882a593Smuzhiyun * DMA descriptor defines. 808*4882a593Smuzhiyun */ 809*4882a593Smuzhiyun #define TXD_DESC_SIZE (8 * sizeof(__le32)) 810*4882a593Smuzhiyun #define RXD_DESC_SIZE (8 * sizeof(__le32)) 811*4882a593Smuzhiyun 812*4882a593Smuzhiyun /* 813*4882a593Smuzhiyun * TX descriptor format for TX, PRIO, ATIM and Beacon Ring. 814*4882a593Smuzhiyun */ 815*4882a593Smuzhiyun 816*4882a593Smuzhiyun /* 817*4882a593Smuzhiyun * Word0 818*4882a593Smuzhiyun */ 819*4882a593Smuzhiyun #define TXD_W0_OWNER_NIC FIELD32(0x00000001) 820*4882a593Smuzhiyun #define TXD_W0_VALID FIELD32(0x00000002) 821*4882a593Smuzhiyun #define TXD_W0_RESULT FIELD32(0x0000001c) 822*4882a593Smuzhiyun #define TXD_W0_RETRY_COUNT FIELD32(0x000000e0) 823*4882a593Smuzhiyun #define TXD_W0_MORE_FRAG FIELD32(0x00000100) 824*4882a593Smuzhiyun #define TXD_W0_ACK FIELD32(0x00000200) 825*4882a593Smuzhiyun #define TXD_W0_TIMESTAMP FIELD32(0x00000400) 826*4882a593Smuzhiyun #define TXD_W0_RTS FIELD32(0x00000800) 827*4882a593Smuzhiyun #define TXD_W0_IFS FIELD32(0x00006000) 828*4882a593Smuzhiyun #define TXD_W0_RETRY_MODE FIELD32(0x00008000) 829*4882a593Smuzhiyun #define TXD_W0_AGC FIELD32(0x00ff0000) 830*4882a593Smuzhiyun #define TXD_W0_R2 FIELD32(0xff000000) 831*4882a593Smuzhiyun 832*4882a593Smuzhiyun /* 833*4882a593Smuzhiyun * Word1 834*4882a593Smuzhiyun */ 835*4882a593Smuzhiyun #define TXD_W1_BUFFER_ADDRESS FIELD32(0xffffffff) 836*4882a593Smuzhiyun 837*4882a593Smuzhiyun /* 838*4882a593Smuzhiyun * Word2 839*4882a593Smuzhiyun */ 840*4882a593Smuzhiyun #define TXD_W2_BUFFER_LENGTH FIELD32(0x0000ffff) 841*4882a593Smuzhiyun #define TXD_W2_DATABYTE_COUNT FIELD32(0xffff0000) 842*4882a593Smuzhiyun 843*4882a593Smuzhiyun /* 844*4882a593Smuzhiyun * Word3 & 4: PLCP information 845*4882a593Smuzhiyun * The PLCP values should be treated as if they were BBP values. 846*4882a593Smuzhiyun */ 847*4882a593Smuzhiyun #define TXD_W3_PLCP_SIGNAL FIELD32(0x000000ff) 848*4882a593Smuzhiyun #define TXD_W3_PLCP_SIGNAL_REGNUM FIELD32(0x00007f00) 849*4882a593Smuzhiyun #define TXD_W3_PLCP_SIGNAL_BUSY FIELD32(0x00008000) 850*4882a593Smuzhiyun #define TXD_W3_PLCP_SERVICE FIELD32(0x00ff0000) 851*4882a593Smuzhiyun #define TXD_W3_PLCP_SERVICE_REGNUM FIELD32(0x7f000000) 852*4882a593Smuzhiyun #define TXD_W3_PLCP_SERVICE_BUSY FIELD32(0x80000000) 853*4882a593Smuzhiyun 854*4882a593Smuzhiyun #define TXD_W4_PLCP_LENGTH_LOW FIELD32(0x000000ff) 855*4882a593Smuzhiyun #define TXD_W3_PLCP_LENGTH_LOW_REGNUM FIELD32(0x00007f00) 856*4882a593Smuzhiyun #define TXD_W3_PLCP_LENGTH_LOW_BUSY FIELD32(0x00008000) 857*4882a593Smuzhiyun #define TXD_W4_PLCP_LENGTH_HIGH FIELD32(0x00ff0000) 858*4882a593Smuzhiyun #define TXD_W3_PLCP_LENGTH_HIGH_REGNUM FIELD32(0x7f000000) 859*4882a593Smuzhiyun #define TXD_W3_PLCP_LENGTH_HIGH_BUSY FIELD32(0x80000000) 860*4882a593Smuzhiyun 861*4882a593Smuzhiyun /* 862*4882a593Smuzhiyun * Word5 863*4882a593Smuzhiyun */ 864*4882a593Smuzhiyun #define TXD_W5_BBCR4 FIELD32(0x0000ffff) 865*4882a593Smuzhiyun #define TXD_W5_AGC_REG FIELD32(0x007f0000) 866*4882a593Smuzhiyun #define TXD_W5_AGC_REG_VALID FIELD32(0x00800000) 867*4882a593Smuzhiyun #define TXD_W5_XXX_REG FIELD32(0x7f000000) 868*4882a593Smuzhiyun #define TXD_W5_XXX_REG_VALID FIELD32(0x80000000) 869*4882a593Smuzhiyun 870*4882a593Smuzhiyun /* 871*4882a593Smuzhiyun * Word6 872*4882a593Smuzhiyun */ 873*4882a593Smuzhiyun #define TXD_W6_SK_BUFF FIELD32(0xffffffff) 874*4882a593Smuzhiyun 875*4882a593Smuzhiyun /* 876*4882a593Smuzhiyun * Word7 877*4882a593Smuzhiyun */ 878*4882a593Smuzhiyun #define TXD_W7_RESERVED FIELD32(0xffffffff) 879*4882a593Smuzhiyun 880*4882a593Smuzhiyun /* 881*4882a593Smuzhiyun * RX descriptor format for RX Ring. 882*4882a593Smuzhiyun */ 883*4882a593Smuzhiyun 884*4882a593Smuzhiyun /* 885*4882a593Smuzhiyun * Word0 886*4882a593Smuzhiyun */ 887*4882a593Smuzhiyun #define RXD_W0_OWNER_NIC FIELD32(0x00000001) 888*4882a593Smuzhiyun #define RXD_W0_UNICAST_TO_ME FIELD32(0x00000002) 889*4882a593Smuzhiyun #define RXD_W0_MULTICAST FIELD32(0x00000004) 890*4882a593Smuzhiyun #define RXD_W0_BROADCAST FIELD32(0x00000008) 891*4882a593Smuzhiyun #define RXD_W0_MY_BSS FIELD32(0x00000010) 892*4882a593Smuzhiyun #define RXD_W0_CRC_ERROR FIELD32(0x00000020) 893*4882a593Smuzhiyun #define RXD_W0_PHYSICAL_ERROR FIELD32(0x00000080) 894*4882a593Smuzhiyun #define RXD_W0_DATABYTE_COUNT FIELD32(0xffff0000) 895*4882a593Smuzhiyun 896*4882a593Smuzhiyun /* 897*4882a593Smuzhiyun * Word1 898*4882a593Smuzhiyun */ 899*4882a593Smuzhiyun #define RXD_W1_BUFFER_ADDRESS FIELD32(0xffffffff) 900*4882a593Smuzhiyun 901*4882a593Smuzhiyun /* 902*4882a593Smuzhiyun * Word2 903*4882a593Smuzhiyun */ 904*4882a593Smuzhiyun #define RXD_W2_BUFFER_LENGTH FIELD32(0x0000ffff) 905*4882a593Smuzhiyun #define RXD_W2_BBR0 FIELD32(0x00ff0000) 906*4882a593Smuzhiyun #define RXD_W2_SIGNAL FIELD32(0xff000000) 907*4882a593Smuzhiyun 908*4882a593Smuzhiyun /* 909*4882a593Smuzhiyun * Word3 910*4882a593Smuzhiyun */ 911*4882a593Smuzhiyun #define RXD_W3_RSSI FIELD32(0x000000ff) 912*4882a593Smuzhiyun #define RXD_W3_BBR3 FIELD32(0x0000ff00) 913*4882a593Smuzhiyun #define RXD_W3_BBR4 FIELD32(0x00ff0000) 914*4882a593Smuzhiyun #define RXD_W3_BBR5 FIELD32(0xff000000) 915*4882a593Smuzhiyun 916*4882a593Smuzhiyun /* 917*4882a593Smuzhiyun * Word4 918*4882a593Smuzhiyun */ 919*4882a593Smuzhiyun #define RXD_W4_RX_END_TIME FIELD32(0xffffffff) 920*4882a593Smuzhiyun 921*4882a593Smuzhiyun /* 922*4882a593Smuzhiyun * Word5 & 6 & 7: Reserved 923*4882a593Smuzhiyun */ 924*4882a593Smuzhiyun #define RXD_W5_RESERVED FIELD32(0xffffffff) 925*4882a593Smuzhiyun #define RXD_W6_RESERVED FIELD32(0xffffffff) 926*4882a593Smuzhiyun #define RXD_W7_RESERVED FIELD32(0xffffffff) 927*4882a593Smuzhiyun 928*4882a593Smuzhiyun /* 929*4882a593Smuzhiyun * Macros for converting txpower from EEPROM to mac80211 value 930*4882a593Smuzhiyun * and from mac80211 value to register value. 931*4882a593Smuzhiyun * NOTE: Logics in rt2400pci for txpower are reversed 932*4882a593Smuzhiyun * compared to the other rt2x00 drivers. A higher txpower 933*4882a593Smuzhiyun * value means that the txpower must be lowered. This is 934*4882a593Smuzhiyun * important when converting the value coming from the 935*4882a593Smuzhiyun * mac80211 stack to the rt2400 acceptable value. 936*4882a593Smuzhiyun */ 937*4882a593Smuzhiyun #define MIN_TXPOWER 31 938*4882a593Smuzhiyun #define MAX_TXPOWER 62 939*4882a593Smuzhiyun #define DEFAULT_TXPOWER 39 940*4882a593Smuzhiyun 941*4882a593Smuzhiyun #define __CLAMP_TX(__txpower) \ 942*4882a593Smuzhiyun clamp_t(char, (__txpower), MIN_TXPOWER, MAX_TXPOWER) 943*4882a593Smuzhiyun 944*4882a593Smuzhiyun #define TXPOWER_FROM_DEV(__txpower) \ 945*4882a593Smuzhiyun ((__CLAMP_TX(__txpower) - MAX_TXPOWER) + MIN_TXPOWER) 946*4882a593Smuzhiyun 947*4882a593Smuzhiyun #define TXPOWER_TO_DEV(__txpower) \ 948*4882a593Smuzhiyun (MAX_TXPOWER - (__CLAMP_TX(__txpower) - MIN_TXPOWER)) 949*4882a593Smuzhiyun 950*4882a593Smuzhiyun #endif /* RT2400PCI_H */ 951