2 *************************************************************************
4 * 5F., No.36, Taiyuan St., Jhubei City,
8 * (c) Copyright 2002-2007, Ralink Technology, Inc.
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
15 * This program is distributed in the hope that it will be useful, *
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
18 * GNU General Public License for more details. *
20 * You should have received a copy of the GNU General Public License *
21 * along with this program; if not, write to the *
22 * Free Software Foundation, Inc., *
23 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
25 *************************************************************************
31 RT28xx ASIC related definition & structures
35 -------- ---------- ----------------------------------------------
36 Jan Lee Jan-3-2006 created for RT2860c
44 // PCI registers - base address 0x0000
46 #define PCI_CFG 0x0000
47 #define PCI_EECTRL 0x0004
48 #define PCI_MCUCTRL 0x0008
54 #define RETRY_LIMIT 10
55 #define STATUS_SUCCESS 0x00
56 #define STATUS_UNSUCCESSFUL 0x01
60 // SCH/DMA registers - base address 0x0200
62 // INT_SOURCE_CSR: Interrupt source register. Write one to clear corresponding bit
64 #define DMA_CSR0 0x200
65 #define INT_SOURCE_CSR 0x200
66 typedef union _INT_SOURCE_CSR_STRUC
{
71 UINT32 Ac0DmaDone
:1;//4
75 UINT32 HccaDmaDone
:1; // bit7
77 UINT32 MCUCommandINT
:1;//bit 9
78 UINT32 RxTxCoherent
:1;
81 UINT32 TXFifoStatusInt
:1;//FIFO Statistics is full, sw should read 0x171c
82 UINT32 AutoWakeup
:1;//bit14
84 UINT32 RxCoherent
:1;//bit16
89 } INT_SOURCE_CSR_STRUC
, *PINT_SOURCE_CSR_STRUC
;
92 // INT_MASK_CSR: Interrupt MASK register. 1: the interrupt is mask OFF
94 #define INT_MASK_CSR 0x204
95 typedef union _INT_MASK_CSR_STRUC
{
97 UINT32 RXDelay_INT_MSK
:1;
104 UINT32 HccaDmaDone
:1;
105 UINT32 MgmtDmaDone
:1;
106 UINT32 MCUCommandINT
:1;
112 } INT_MASK_CSR_STRUC
, *PINT_MASK_CSR_STRUC
;
114 #define WPDMA_GLO_CFG 0x208
115 typedef union _WPDMA_GLO_CFG_STRUC
{
117 UINT32 EnableTxDMA
:1;
119 UINT32 EnableRxDMA
:1;
121 UINT32 WPDMABurstSIZE
:2;
122 UINT32 EnTXWriteBackDDONE
:1;
124 UINT32 RXHdrScater
:8;
125 UINT32 HDR_SEG_LEN
:16;
128 } WPDMA_GLO_CFG_STRUC
, *PWPDMA_GLO_CFG_STRUC
;
130 #define WPDMA_RST_IDX 0x20c
131 typedef union _WPDMA_RST_IDX_STRUC
{
133 UINT32 RST_DTX_IDX0
:1;
134 UINT32 RST_DTX_IDX1
:1;
135 UINT32 RST_DTX_IDX2
:1;
136 UINT32 RST_DTX_IDX3
:1;
137 UINT32 RST_DTX_IDX4
:1;
138 UINT32 RST_DTX_IDX5
:1;
140 UINT32 RST_DRX_IDX0
:1;
144 } WPDMA_RST_IDX_STRUC
, *PWPDMA_RST_IDX_STRUC
;
146 #define DELAY_INT_CFG 0x0210
147 typedef union _DELAY_INT_CFG_STRUC
{
149 UINT32 RXMAX_PTIME
:8;
151 UINT32 RXDLY_INT_EN
:1;
152 UINT32 TXMAX_PTIME
:8;
154 UINT32 TXDLY_INT_EN
:1;
157 } DELAY_INT_CFG_STRUC
, *PDELAY_INT_CFG_STRUC
;
159 #define WMM_AIFSN_CFG 0x0214
160 typedef union _AIFSN_CSR_STRUC
{
162 UINT32 Aifsn0
:4; // for AC_BE
163 UINT32 Aifsn1
:4; // for AC_BK
164 UINT32 Aifsn2
:4; // for AC_VI
165 UINT32 Aifsn3
:4; // for AC_VO
169 } AIFSN_CSR_STRUC
, *PAIFSN_CSR_STRUC
;
172 // CWMIN_CSR: CWmin for each EDCA AC
174 #define WMM_CWMIN_CFG 0x0218
175 typedef union _CWMIN_CSR_STRUC
{
177 UINT32 Cwmin0
:4; // for AC_BE
178 UINT32 Cwmin1
:4; // for AC_BK
179 UINT32 Cwmin2
:4; // for AC_VI
180 UINT32 Cwmin3
:4; // for AC_VO
184 } CWMIN_CSR_STRUC
, *PCWMIN_CSR_STRUC
;
187 // CWMAX_CSR: CWmin for each EDCA AC
189 #define WMM_CWMAX_CFG 0x021c
190 typedef union _CWMAX_CSR_STRUC
{
192 UINT32 Cwmax0
:4; // for AC_BE
193 UINT32 Cwmax1
:4; // for AC_BK
194 UINT32 Cwmax2
:4; // for AC_VI
195 UINT32 Cwmax3
:4; // for AC_VO
199 } CWMAX_CSR_STRUC
, *PCWMAX_CSR_STRUC
;
202 // AC_TXOP_CSR0: AC_BK/AC_BE TXOP register
204 #define WMM_TXOP0_CFG 0x0220
205 typedef union _AC_TXOP_CSR0_STRUC
{
207 USHORT Ac0Txop
; // for AC_BK, in unit of 32us
208 USHORT Ac1Txop
; // for AC_BE, in unit of 32us
211 } AC_TXOP_CSR0_STRUC
, *PAC_TXOP_CSR0_STRUC
;
214 // AC_TXOP_CSR1: AC_VO/AC_VI TXOP register
216 #define WMM_TXOP1_CFG 0x0224
217 typedef union _AC_TXOP_CSR1_STRUC
{
219 USHORT Ac2Txop
; // for AC_VI, in unit of 32us
220 USHORT Ac3Txop
; // for AC_VO, in unit of 32us
223 } AC_TXOP_CSR1_STRUC
, *PAC_TXOP_CSR1_STRUC
;
225 #define RINGREG_DIFF 0x10
226 #define GPIO_CTRL_CFG 0x0228 //MAC_CSR13
227 #define MCU_CMD_CFG 0x022c
228 #define TX_BASE_PTR0 0x0230 //AC_BK base address
229 #define TX_MAX_CNT0 0x0234
230 #define TX_CTX_IDX0 0x0238
231 #define TX_DTX_IDX0 0x023c
232 #define TX_BASE_PTR1 0x0240 //AC_BE base address
233 #define TX_MAX_CNT1 0x0244
234 #define TX_CTX_IDX1 0x0248
235 #define TX_DTX_IDX1 0x024c
236 #define TX_BASE_PTR2 0x0250 //AC_VI base address
237 #define TX_MAX_CNT2 0x0254
238 #define TX_CTX_IDX2 0x0258
239 #define TX_DTX_IDX2 0x025c
240 #define TX_BASE_PTR3 0x0260 //AC_VO base address
241 #define TX_MAX_CNT3 0x0264
242 #define TX_CTX_IDX3 0x0268
243 #define TX_DTX_IDX3 0x026c
244 #define TX_BASE_PTR4 0x0270 //HCCA base address
245 #define TX_MAX_CNT4 0x0274
246 #define TX_CTX_IDX4 0x0278
247 #define TX_DTX_IDX4 0x027c
248 #define TX_BASE_PTR5 0x0280 //MGMT base address
249 #define TX_MAX_CNT5 0x0284
250 #define TX_CTX_IDX5 0x0288
251 #define TX_DTX_IDX5 0x028c
252 #define TX_MGMTMAX_CNT TX_MAX_CNT5
253 #define TX_MGMTCTX_IDX TX_CTX_IDX5
254 #define TX_MGMTDTX_IDX TX_DTX_IDX5
255 #define RX_BASE_PTR 0x0290 //RX base address
256 #define RX_MAX_CNT 0x0294
257 #define RX_CRX_IDX 0x0298
258 #define RX_DRX_IDX 0x029c
259 #define USB_DMA_CFG 0x02a0
261 typedef union _USB_DMA_CFG_STRUC
{
263 UINT32 RxBulkAggTOut
:8; //Rx Bulk Aggregation TimeOut in unit of 33ns
264 UINT32 RxBulkAggLmt
:8; //Rx Bulk Aggregation Limit in unit of 256 bytes
265 UINT32 phyclear
:1; //phy watch dog enable. write 1
267 UINT32 TxClear
:1; //Clear USB DMA TX path
268 UINT32 TxopHalt
:1; //Halt TXOP count down when TX buffer is full.
269 UINT32 RxBulkAggEn
:1; //Enable Rx Bulk Aggregation
270 UINT32 RxBulkEn
:1; //Enable USB DMA Rx
271 UINT32 TxBulkEn
:1; //Enable USB DMA Tx
272 UINT32 EpoutValid
:6; //OUT endpoint data valid
273 UINT32 RxBusy
:1; //USB DMA RX FSM busy
274 UINT32 TxBusy
:1; //USB DMA TX FSM busy
277 } USB_DMA_CFG_STRUC
, *PUSB_DMA_CFG_STRUC
;
283 // Most are for debug. Driver doesn't touch PBF register.
284 #define PBF_SYS_CTRL 0x0400
285 #define PBF_CFG 0x0408
286 #define PBF_MAX_PCNT 0x040C
287 #define PBF_CTRL 0x0410
288 #define PBF_INT_STA 0x0414
289 #define PBF_INT_ENA 0x0418
290 #define TXRXQ_PCNT 0x0438
291 #define PBF_DBG 0x043c
292 #define PBF_CAP_CTRL 0x0440
296 #define EFUSE_CTRL 0x0580
297 #define EFUSE_DATA0 0x0590
298 #define EFUSE_DATA1 0x0594
299 #define EFUSE_DATA2 0x0598
300 #define EFUSE_DATA3 0x059c
301 #define EFUSE_USAGE_MAP_START 0x2d0
302 #define EFUSE_USAGE_MAP_END 0x2fc
303 #define EFUSE_TAG 0x2fe
304 #define EFUSE_USAGE_MAP_SIZE 45
306 typedef union _EFUSE_CTRL_STRUC
{
308 UINT32 EFSROM_AOUT
:6;
309 UINT32 EFSROM_MODE
:2;
310 UINT32 EFSROM_LDO_OFF_TIME
:6;
311 UINT32 EFSROM_LDO_ON_TIME
:2;
312 UINT32 EFSROM_AIN
:10;
314 UINT32 EFSROM_KICK
:1;
318 } EFUSE_CTRL_STRUC
, *PEFUSE_CTRL_STRUC
;
320 #define LDO_CFG0 0x05d4
321 #define GPIO_SWITCH 0x05dc
328 // 4.1 MAC SYSTEM configuration registers (offset:0x1000)
330 #define MAC_CSR0 0x1000
331 typedef union _ASIC_VER_ID_STRUC
{
333 USHORT ASICRev
; // reversion : 0
334 USHORT ASICVer
; // version : 2860
337 } ASIC_VER_ID_STRUC
, *PASIC_VER_ID_STRUC
;
339 #define MAC_SYS_CTRL 0x1004 //MAC_CSR1
340 #define MAC_ADDR_DW0 0x1008 // MAC ADDR DW0
341 #define MAC_ADDR_DW1 0x100c // MAC ADDR DW1
343 // MAC_CSR2: STA MAC register 0
345 typedef union _MAC_DW0_STRUC
{
347 UCHAR Byte0
; // MAC address byte 0
348 UCHAR Byte1
; // MAC address byte 1
349 UCHAR Byte2
; // MAC address byte 2
350 UCHAR Byte3
; // MAC address byte 3
353 } MAC_DW0_STRUC
, *PMAC_DW0_STRUC
;
356 // MAC_CSR3: STA MAC register 1
358 typedef union _MAC_DW1_STRUC
{
360 UCHAR Byte4
; // MAC address byte 4
361 UCHAR Byte5
; // MAC address byte 5
366 } MAC_DW1_STRUC
, *PMAC_DW1_STRUC
;
368 #define MAC_BSSID_DW0 0x1010 // MAC BSSID DW0
369 #define MAC_BSSID_DW1 0x1014 // MAC BSSID DW1
372 // MAC_CSR5: BSSID register 1
374 typedef union _MAC_CSR5_STRUC
{
376 UCHAR Byte4
; // BSSID byte 4
377 UCHAR Byte5
; // BSSID byte 5
378 USHORT BssIdMask
:2; // 0: one BSSID, 10: 4 BSSID, 01: 2 BSSID , 11: 8BSSID
383 } MAC_CSR5_STRUC
, *PMAC_CSR5_STRUC
;
385 #define MAX_LEN_CFG 0x1018 // rt2860b max 16k bytes. bit12:13 Maximum PSDU length (power factor) 0:2^13, 1:2^14, 2:2^15, 3:2^16
386 #define BBP_CSR_CFG 0x101c //
388 // BBP_CSR_CFG: BBP serial control register
390 typedef union _BBP_CSR_CFG_STRUC
{
392 UINT32 Value
:8; // Register value to program into BBP
393 UINT32 RegNum
:8; // Selected BBP register
394 UINT32 fRead
:1; // 0: Write BBP, 1: Read BBP
395 UINT32 Busy
:1; // 1: ASIC is busy execute BBP programming.
396 UINT32 BBP_PAR_DUR
:1; // 0: 4 MAC clock cycles 1: 8 MAC clock cycles
397 UINT32 BBP_RW_MODE
:1; // 0: use serial mode 1:parallel
401 } BBP_CSR_CFG_STRUC
, *PBBP_CSR_CFG_STRUC
;
403 #define RF_CSR_CFG0 0x1020
405 // RF_CSR_CFG: RF control register
407 typedef union _RF_CSR_CFG0_STRUC
{
409 UINT32 RegIdAndContent
:24; // Register value to program into BBP
410 UINT32 bitwidth
:5; // Selected BBP register
411 UINT32 StandbyMode
:1; // 0: high when stand by 1: low when standby
412 UINT32 Sel
:1; // 0:RF_LE0 activate 1:RF_LE1 activate
413 UINT32 Busy
:1; // 0: idle 1: 8busy
416 } RF_CSR_CFG0_STRUC
, *PRF_CSR_CFG0_STRUC
;
418 #define RF_CSR_CFG1 0x1024
419 typedef union _RF_CSR_CFG1_STRUC
{
421 UINT32 RegIdAndContent
:24; // Register value to program into BBP
422 UINT32 RFGap
:5; // Gap between BB_CONTROL_RF and RF_LE. 0: 3 system clock cycle (37.5usec) 1: 5 system clock cycle (62.5usec)
423 UINT32 rsv
:7; // 0: idle 1: 8busy
426 } RF_CSR_CFG1_STRUC
, *PRF_CSR_CFG1_STRUC
;
428 #define RF_CSR_CFG2 0x1028 //
429 typedef union _RF_CSR_CFG2_STRUC
{
431 UINT32 RegIdAndContent
:24; // Register value to program into BBP
432 UINT32 rsv
:8; // 0: idle 1: 8busy
435 } RF_CSR_CFG2_STRUC
, *PRF_CSR_CFG2_STRUC
;
437 #define LED_CFG 0x102c // MAC_CSR14
438 typedef union _LED_CFG_STRUC
{
440 UINT32 OnPeriod
:8; // blinking on period unit 1ms
441 UINT32 OffPeriod
:8; // blinking off period unit 1ms
442 UINT32 SlowBlinkPeriod
:6; // slow blinking period. unit:1ms
444 UINT32 RLedMode
:2; // red Led Mode 0: off1: blinking upon TX2: periodic slow blinking3: always on
445 UINT32 GLedMode
:2; // green Led Mode
446 UINT32 YLedMode
:2; // yellow Led Mode
447 UINT32 LedPolar
:1; // Led Polarity. 0: active low1: active high
451 } LED_CFG_STRUC
, *PLED_CFG_STRUC
;
454 // 4.2 MAC TIMING configuration registers (offset:0x1100)
456 #define XIFS_TIME_CFG 0x1100 // MAC_CSR8 MAC_CSR9
457 typedef union _IFS_SLOT_CFG_STRUC
{
459 UINT32 CckmSifsTime
:8; // unit 1us. Applied after CCK RX/TX
460 UINT32 OfdmSifsTime
:8; // unit 1us. Applied after OFDM RX/TX
461 UINT32 OfdmXifsTime
:4; //OFDM SIFS. unit 1us. Applied after OFDM RX when MAC doesn't reference BBP signal BBRXEND
462 UINT32 EIFS
:9; // unit 1us
463 UINT32 BBRxendEnable
:1; // reference RXEND signal to begin XIFS defer
467 } IFS_SLOT_CFG_STRUC
, *PIFS_SLOT_CFG_STRUC
;
469 #define BKOFF_SLOT_CFG 0x1104 // mac_csr9 last 8 bits
470 #define NAV_TIME_CFG 0x1108 // NAV (MAC_CSR15)
471 #define CH_TIME_CFG 0x110C // Count as channel busy
472 #define PBF_LIFE_TIMER 0x1110 //TX/RX MPDU timestamp timer (free run)Unit: 1us
473 #define BCN_TIME_CFG 0x1114 // TXRX_CSR9
475 #define BCN_OFFSET0 0x042C
476 #define BCN_OFFSET1 0x0430
479 // BCN_TIME_CFG : Synchronization control register
481 typedef union _BCN_TIME_CFG_STRUC
{
483 UINT32 BeaconInterval
:16; // in unit of 1/16 TU
484 UINT32 bTsfTicking
:1; // Enable TSF auto counting
485 UINT32 TsfSyncMode
:2; // Enable TSF sync, 00: disable, 01: infra mode, 10: ad-hoc mode
486 UINT32 bTBTTEnable
:1;
487 UINT32 bBeaconGen
:1; // Enable beacon generator
489 UINT32 TxTimestampCompensate
:8;
492 } BCN_TIME_CFG_STRUC
, *PBCN_TIME_CFG_STRUC
;
494 #define TBTT_SYNC_CFG 0x1118 // txrx_csr10
495 #define TSF_TIMER_DW0 0x111C // Local TSF timer lsb 32 bits. Read-only
496 #define TSF_TIMER_DW1 0x1120 // msb 32 bits. Read-only.
497 #define TBTT_TIMER 0x1124 // TImer remains till next TBTT. Read-only. TXRX_CSR14
498 #define INT_TIMER_CFG 0x1128 //
499 #define INT_TIMER_EN 0x112c // GP-timer and pre-tbtt Int enable
500 #define CH_IDLE_STA 0x1130 // channel idle time
501 #define CH_BUSY_STA 0x1134 // channle busy time
503 // 4.2 MAC POWER configuration registers (offset:0x1200)
505 #define MAC_STATUS_CFG 0x1200 // old MAC_CSR12
506 #define PWR_PIN_CFG 0x1204 // old MAC_CSR12
507 #define AUTO_WAKEUP_CFG 0x1208 // old MAC_CSR10
509 // AUTO_WAKEUP_CFG: Manual power control / status register
511 typedef union _AUTO_WAKEUP_STRUC
{
513 UINT32 AutoLeadTime
:8;
514 UINT32 NumofSleepingTbtt
:7; // ForceWake has high privilege than PutToSleep when both set
515 UINT32 EnableAutoWakeup
:1; // 0:sleep, 1:awake
519 } AUTO_WAKEUP_STRUC
, *PAUTO_WAKEUP_STRUC
;
522 // 4.3 MAC TX configuration registers (offset:0x1300)
525 #define EDCA_AC0_CFG 0x1300 //AC_TXOP_CSR0 0x3474
526 #define EDCA_AC1_CFG 0x1304
527 #define EDCA_AC2_CFG 0x1308
528 #define EDCA_AC3_CFG 0x130c
529 typedef union _EDCA_AC_CFG_STRUC
{
531 UINT32 AcTxop
:8; // in unit of 32us
532 UINT32 Aifsn
:4; // # of slot time
534 UINT32 Cwmax
:4; //unit power of 2
538 } EDCA_AC_CFG_STRUC
, *PEDCA_AC_CFG_STRUC
;
540 #define EDCA_TID_AC_MAP 0x1310
541 #define TX_PWR_CFG_0 0x1314
542 #define TX_PWR_CFG_1 0x1318
543 #define TX_PWR_CFG_2 0x131C
544 #define TX_PWR_CFG_3 0x1320
545 #define TX_PWR_CFG_4 0x1324
546 #define TX_PIN_CFG 0x1328
547 #define TX_BAND_CFG 0x132c // 0x1 use upper 20MHz. 0 juse lower 20MHz
548 #define TX_SW_CFG0 0x1330
549 #define TX_SW_CFG1 0x1334
550 #define TX_SW_CFG2 0x1338
551 #define TXOP_THRES_CFG 0x133c
552 #define TXOP_CTRL_CFG 0x1340
553 #define TX_RTS_CFG 0x1344
555 typedef union _TX_RTS_CFG_STRUC
{
557 UINT32 AutoRtsRetryLimit
:8;
558 UINT32 RtsThres
:16; // unit:byte
559 UINT32 RtsFbkEn
:1; // enable rts rate fallback
560 UINT32 rsv
:7; // 1: HT non-STBC control frame enable
563 } TX_RTS_CFG_STRUC
, *PTX_RTS_CFG_STRUC
;
565 #define TX_TIMEOUT_CFG 0x1348
566 typedef union _TX_TIMEOUT_CFG_STRUC
{
569 UINT32 MpduLifeTime
:4; // expiration time = 2^(9+MPDU LIFE TIME) us
570 UINT32 RxAckTimeout
:8; // unit:slot. Used for TX precedure
571 UINT32 TxopTimeout
:8; //TXOP timeout value for TXOP truncation. It is recommended that (SLOT_TIME) > (TX_OP_TIMEOUT) > (RX_ACK_TIMEOUT)
572 UINT32 rsv2
:8; // 1: HT non-STBC control frame enable
575 } TX_TIMEOUT_CFG_STRUC
, *PTX_TIMEOUT_CFG_STRUC
;
577 #define TX_RTY_CFG 0x134c
578 typedef union PACKED _TX_RTY_CFG_STRUC
{
580 UINT32 ShortRtyLimit
:8; // short retry limit
581 UINT32 LongRtyLimit
:8; //long retry limit
582 UINT32 LongRtyThre
:12; // Long retry threshoold
583 UINT32 NonAggRtyMode
:1; // Non-Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer
584 UINT32 AggRtyMode
:1; // Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer
585 UINT32 TxautoFBEnable
:1; // Tx retry PHY rate auto fallback enable
586 UINT32 rsv
:1; // 1: HT non-STBC control frame enable
589 } TX_RTY_CFG_STRUC
, *PTX_RTY_CFG_STRUC
;
591 #define TX_LINK_CFG 0x1350
592 typedef union PACKED _TX_LINK_CFG_STRUC
{
594 UINT32 RemoteMFBLifeTime
:8; //remote MFB life time. unit : 32us
595 UINT32 MFBEnable
:1; // TX apply remote MFB 1:enable
596 UINT32 RemoteUMFSEnable
:1; // remote unsolicit MFB enable. 0: not apply remote remote unsolicit (MFS=7)
597 UINT32 TxMRQEn
:1; // MCS request TX enable
598 UINT32 TxRDGEn
:1; // RDG TX enable
599 UINT32 TxCFAckEn
:1; // Piggyback CF-ACK enable
601 UINT32 RemotMFB
:8; // remote MCS feedback
602 UINT32 RemotMFS
:8; //remote MCS feedback sequence number
605 } TX_LINK_CFG_STRUC
, *PTX_LINK_CFG_STRUC
;
607 #define HT_FBK_CFG0 0x1354
608 typedef union PACKED _HT_FBK_CFG0_STRUC
{
620 } HT_FBK_CFG0_STRUC
, *PHT_FBK_CFG0_STRUC
;
622 #define HT_FBK_CFG1 0x1358
623 typedef union _HT_FBK_CFG1_STRUC
{
635 } HT_FBK_CFG1_STRUC
, *PHT_FBK_CFG1_STRUC
;
637 #define LG_FBK_CFG0 0x135c
638 typedef union _LG_FBK_CFG0_STRUC
{
640 UINT32 OFDMMCS0FBK
:4; //initial value is 0
641 UINT32 OFDMMCS1FBK
:4; //initial value is 0
642 UINT32 OFDMMCS2FBK
:4; //initial value is 1
643 UINT32 OFDMMCS3FBK
:4; //initial value is 2
644 UINT32 OFDMMCS4FBK
:4; //initial value is 3
645 UINT32 OFDMMCS5FBK
:4; //initial value is 4
646 UINT32 OFDMMCS6FBK
:4; //initial value is 5
647 UINT32 OFDMMCS7FBK
:4; //initial value is 6
650 } LG_FBK_CFG0_STRUC
, *PLG_FBK_CFG0_STRUC
;
652 #define LG_FBK_CFG1 0x1360
653 typedef union _LG_FBK_CFG1_STRUC
{
655 UINT32 CCKMCS0FBK
:4; //initial value is 0
656 UINT32 CCKMCS1FBK
:4; //initial value is 0
657 UINT32 CCKMCS2FBK
:4; //initial value is 1
658 UINT32 CCKMCS3FBK
:4; //initial value is 2
662 } LG_FBK_CFG1_STRUC
, *PLG_FBK_CFG1_STRUC
;
664 //=======================================================
665 //================ Protection Paramater================================
666 //=======================================================
667 #define CCK_PROT_CFG 0x1364 //CCK Protection
668 #define ASIC_SHORTNAV 1
669 #define ASIC_LONGNAV 2
672 typedef union _PROT_CFG_STRUC
{
674 UINT32 ProtectRate
:16; //Protection control frame rate for CCK TX(RTS/CTS/CFEnd).
675 UINT32 ProtectCtrl
:2; //Protection control frame type for CCK TX. 1:RTS/CTS, 2:CTS-to-self, 0:None, 3:rsv
676 UINT32 ProtectNav
:2; //TXOP protection type for CCK TX. 0:None, 1:ShortNAVprotect, 2:LongNAVProtect, 3:rsv
677 UINT32 TxopAllowCck
:1; //CCK TXOP allowance.0:disallow.
678 UINT32 TxopAllowOfdm
:1; //CCK TXOP allowance.0:disallow.
679 UINT32 TxopAllowMM20
:1; //CCK TXOP allowance. 0:disallow.
680 UINT32 TxopAllowMM40
:1; //CCK TXOP allowance.0:disallow.
681 UINT32 TxopAllowGF20
:1; //CCK TXOP allowance.0:disallow.
682 UINT32 TxopAllowGF40
:1; //CCK TXOP allowance.0:disallow.
683 UINT32 RTSThEn
:1; //RTS threshold enable on CCK TX
687 } PROT_CFG_STRUC
, *PPROT_CFG_STRUC
;
689 #define OFDM_PROT_CFG 0x1368 //OFDM Protection
690 #define MM20_PROT_CFG 0x136C //MM20 Protection
691 #define MM40_PROT_CFG 0x1370 //MM40 Protection
692 #define GF20_PROT_CFG 0x1374 //GF20 Protection
693 #define GF40_PROT_CFG 0x1378 //GR40 Protection
694 #define EXP_CTS_TIME 0x137C //
695 #define EXP_ACK_TIME 0x1380 //
698 // 4.4 MAC RX configuration registers (offset:0x1400)
700 #define RX_FILTR_CFG 0x1400 //TXRX_CSR0
701 #define AUTO_RSP_CFG 0x1404 //TXRX_CSR4
703 // TXRX_CSR4: Auto-Responder/
705 typedef union _AUTO_RSP_CFG_STRUC
{
707 UINT32 AutoResponderEnable
:1;
708 UINT32 BACAckPolicyEnable
:1; // 0:long, 1:short preamble
709 UINT32 CTS40MMode
:1; // Response CTS 40MHz duplicate mode
710 UINT32 CTS40MRef
:1; // Response CTS 40MHz duplicate mode
711 UINT32 AutoResponderPreamble
:1; // 0:long, 1:short preamble
712 UINT32 rsv
:1; // Power bit value in conrtrol frame
713 UINT32 DualCTSEn
:1; // Power bit value in conrtrol frame
714 UINT32 AckCtsPsmBit
:1; // Power bit value in conrtrol frame
718 } AUTO_RSP_CFG_STRUC
, *PAUTO_RSP_CFG_STRUC
;
720 #define LEGACY_BASIC_RATE 0x1408 // TXRX_CSR5 0x3054
721 #define HT_BASIC_RATE 0x140c
722 #define HT_CTRL_CFG 0x1410
723 #define SIFS_COST_CFG 0x1414
724 #define RX_PARSER_CFG 0x1418 //Set NAV for all received frames
727 // 4.5 MAC Security configuration (offset:0x1500)
729 #define TX_SEC_CNT0 0x1500 //
730 #define RX_SEC_CNT0 0x1504 //
731 #define CCMP_FC_MUTE 0x1508 //
733 // 4.6 HCCA/PSMP (offset:0x1600)
735 #define TXOP_HLDR_ADDR0 0x1600
736 #define TXOP_HLDR_ADDR1 0x1604
737 #define TXOP_HLDR_ET 0x1608
738 #define QOS_CFPOLL_RA_DW0 0x160c
739 #define QOS_CFPOLL_A1_DW1 0x1610
740 #define QOS_CFPOLL_QC 0x1614
742 // 4.7 MAC Statistis registers (offset:0x1700)
744 #define RX_STA_CNT0 0x1700 //
745 #define RX_STA_CNT1 0x1704 //
746 #define RX_STA_CNT2 0x1708 //
749 // RX_STA_CNT0_STRUC: RX PLCP error count & RX CRC error count
751 typedef union _RX_STA_CNT0_STRUC
{
757 } RX_STA_CNT0_STRUC
, *PRX_STA_CNT0_STRUC
;
760 // RX_STA_CNT1_STRUC: RX False CCA count & RX LONG frame count
762 typedef union _RX_STA_CNT1_STRUC
{
768 } RX_STA_CNT1_STRUC
, *PRX_STA_CNT1_STRUC
;
771 // RX_STA_CNT2_STRUC:
773 typedef union _RX_STA_CNT2_STRUC
{
776 USHORT RxFifoOverflowCount
;
779 } RX_STA_CNT2_STRUC
, *PRX_STA_CNT2_STRUC
;
781 #define TX_STA_CNT0 0x170C //
783 // STA_CSR3: TX Beacon count
785 typedef union _TX_STA_CNT0_STRUC
{
788 USHORT TxBeaconCount
;
791 } TX_STA_CNT0_STRUC
, *PTX_STA_CNT0_STRUC
;
793 #define TX_STA_CNT1 0x1710 //
795 // TX_STA_CNT1: TX tx count
797 typedef union _TX_STA_CNT1_STRUC
{
803 } TX_STA_CNT1_STRUC
, *PTX_STA_CNT1_STRUC
;
805 #define TX_STA_CNT2 0x1714 //
807 // TX_STA_CNT2: TX tx count
809 typedef union _TX_STA_CNT2_STRUC
{
811 USHORT TxZeroLenCount
;
812 USHORT TxUnderFlowCount
;
815 } TX_STA_CNT2_STRUC
, *PTX_STA_CNT2_STRUC
;
817 #define TX_STA_FIFO 0x1718 //
819 // TX_STA_FIFO_STRUC: TX Result for specific PID status fifo register
821 typedef union PACKED _TX_STA_FIFO_STRUC
{
823 UINT32 bValid
:1; // 1:This register contains a valid TX result
825 UINT32 TxSuccess
:1; // Tx No retry success
826 UINT32 TxAggre
:1; // Tx Retry Success
827 UINT32 TxAckRequired
:1; // Tx fail
828 UINT32 wcid
:8; //wireless client index
829 // UINT32 SuccessRate:16; //include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16.
830 UINT32 SuccessRate
:13; //include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16.
835 } TX_STA_FIFO_STRUC
, *PTX_STA_FIFO_STRUC
;
838 #define TX_AGG_CNT 0x171c
839 typedef union _TX_AGG_CNT_STRUC
{
841 USHORT NonAggTxCount
;
845 } TX_AGG_CNT_STRUC
, *PTX_AGG_CNT_STRUC
;
848 #define TX_AGG_CNT0 0x1720
849 typedef union _TX_AGG_CNT0_STRUC
{
851 USHORT AggSize1Count
;
852 USHORT AggSize2Count
;
855 } TX_AGG_CNT0_STRUC
, *PTX_AGG_CNT0_STRUC
;
858 #define TX_AGG_CNT1 0x1724
859 typedef union _TX_AGG_CNT1_STRUC
{
861 USHORT AggSize3Count
;
862 USHORT AggSize4Count
;
865 } TX_AGG_CNT1_STRUC
, *PTX_AGG_CNT1_STRUC
;
867 #define TX_AGG_CNT2 0x1728
868 typedef union _TX_AGG_CNT2_STRUC
{
870 USHORT AggSize5Count
;
871 USHORT AggSize6Count
;
874 } TX_AGG_CNT2_STRUC
, *PTX_AGG_CNT2_STRUC
;
877 #define TX_AGG_CNT3 0x172c
878 typedef union _TX_AGG_CNT3_STRUC
{
880 USHORT AggSize7Count
;
881 USHORT AggSize8Count
;
884 } TX_AGG_CNT3_STRUC
, *PTX_AGG_CNT3_STRUC
;
887 #define TX_AGG_CNT4 0x1730
888 typedef union _TX_AGG_CNT4_STRUC
{
890 USHORT AggSize9Count
;
891 USHORT AggSize10Count
;
894 } TX_AGG_CNT4_STRUC
, *PTX_AGG_CNT4_STRUC
;
896 #define TX_AGG_CNT5 0x1734
897 typedef union _TX_AGG_CNT5_STRUC
{
899 USHORT AggSize11Count
;
900 USHORT AggSize12Count
;
903 } TX_AGG_CNT5_STRUC
, *PTX_AGG_CNT5_STRUC
;
905 #define TX_AGG_CNT6 0x1738
906 typedef union _TX_AGG_CNT6_STRUC
{
908 USHORT AggSize13Count
;
909 USHORT AggSize14Count
;
912 } TX_AGG_CNT6_STRUC
, *PTX_AGG_CNT6_STRUC
;
914 #define TX_AGG_CNT7 0x173c
915 typedef union _TX_AGG_CNT7_STRUC
{
917 USHORT AggSize15Count
;
918 USHORT AggSize16Count
;
921 } TX_AGG_CNT7_STRUC
, *PTX_AGG_CNT7_STRUC
;
923 #define MPDU_DENSITY_CNT 0x1740
924 typedef union _MPDU_DEN_CNT_STRUC
{
926 USHORT TXZeroDelCount
; //TX zero length delimiter count
927 USHORT RXZeroDelCount
; //RX zero length delimiter count
930 } MPDU_DEN_CNT_STRUC
, *PMPDU_DEN_CNT_STRUC
;
933 // TXRX control registers - base address 0x3000
935 // rt2860b UNKNOWN reg use R/O Reg Addr 0x77d0 first..
936 #define TXRX_CSR1 0x77d0
939 // Security key table memory, base address = 0x1000
941 #define MAC_WCID_BASE 0x1800 //8-bytes(use only 6-bytes) * 256 entry =
942 #define HW_WCID_ENTRY_SIZE 8
943 #define PAIRWISE_KEY_TABLE_BASE 0x4000 // 32-byte * 256-entry = -byte
944 #define HW_KEY_ENTRY_SIZE 0x20
945 #define PAIRWISE_IVEIV_TABLE_BASE 0x6000 // 8-byte * 256-entry = -byte
946 #define MAC_IVEIV_TABLE_BASE 0x6000 // 8-byte * 256-entry = -byte
947 #define HW_IVEIV_ENTRY_SIZE 8
948 #define MAC_WCID_ATTRIBUTE_BASE 0x6800 // 4-byte * 256-entry = -byte
949 #define HW_WCID_ATTRI_SIZE 4
950 #define WCID_RESERVED 0x6bfc
951 #define SHARED_KEY_TABLE_BASE 0x6c00 // 32-byte * 16-entry = 512-byte
952 #define SHARED_KEY_MODE_BASE 0x7000 // 32-byte * 16-entry = 512-byte
953 #define HW_SHARED_KEY_MODE_SIZE 4
954 #define SHAREDKEYTABLE 0
955 #define PAIRWISEKEYTABLE 1
957 typedef union _SHAREDKEY_MODE_STRUC
{
959 UINT32 Bss0Key0CipherAlg
:3;
961 UINT32 Bss0Key1CipherAlg
:3;
963 UINT32 Bss0Key2CipherAlg
:3;
965 UINT32 Bss0Key3CipherAlg
:3;
967 UINT32 Bss1Key0CipherAlg
:3;
969 UINT32 Bss1Key1CipherAlg
:3;
971 UINT32 Bss1Key2CipherAlg
:3;
973 UINT32 Bss1Key3CipherAlg
:3;
977 } SHAREDKEY_MODE_STRUC
, *PSHAREDKEY_MODE_STRUC
;
979 // 64-entry for pairwise key table
980 typedef struct _HW_WCID_ENTRY
{ // 8-byte per entry
983 } HW_WCID_ENTRY
, PHW_WCID_ENTRY
;
988 // Other on-chip shared memory space, base = 0x2000
991 // CIS space - base address = 0x2000
992 #define HW_CIS_BASE 0x2000
994 // Carrier-sense CTS frame base address. It's where mac stores carrier-sense frame for carrier-sense function.
995 #define HW_CS_CTS_BASE 0x7700
996 // DFS CTS frame base address. It's where mac stores CTS frame for DFS.
997 #define HW_DFS_CTS_BASE 0x7780
998 #define HW_CTS_FRAME_SIZE 0x80
1000 // 2004-11-08 john - since NULL frame won't be that long (256 byte). We steal 16 tail bytes
1001 // to save debugging settings
1002 #define HW_DEBUG_SETTING_BASE 0x77f0 // 0x77f0~0x77ff total 16 bytes
1003 #define HW_DEBUG_SETTING_BASE2 0x7770 // 0x77f0~0x77ff total 16 bytes
1005 // In order to support maximum 8 MBSS and its maximum length is 512 for each beacon
1006 // Three section discontinue memory segments will be used.
1007 // 1. The original region for BCN 0~3
1008 // 2. Extract memory from FCE table for BCN 4~5
1009 // 3. Extract memory from Pair-wise key table for BCN 6~7
1010 // It occupied those memory of wcid 238~253 for BCN 6
1011 // and wcid 222~237 for BCN 7
1012 #define HW_BEACON_MAX_SIZE 0x1000 /* unit: byte */
1013 #define HW_BEACON_BASE0 0x7800
1014 #define HW_BEACON_BASE1 0x7A00
1015 #define HW_BEACON_BASE2 0x7C00
1016 #define HW_BEACON_BASE3 0x7E00
1017 #define HW_BEACON_BASE4 0x7200
1018 #define HW_BEACON_BASE5 0x7400
1019 #define HW_BEACON_BASE6 0x5DC0
1020 #define HW_BEACON_BASE7 0x5BC0
1022 #define HW_BEACON_MAX_COUNT 8
1023 #define HW_BEACON_OFFSET 0x0200
1024 #define HW_BEACON_CONTENT_LEN (HW_BEACON_OFFSET - TXWI_SIZE)
1026 // HOST-MCU shared memory - base address = 0x2100
1027 #define HOST_CMD_CSR 0x404
1028 #define H2M_MAILBOX_CSR 0x7010
1029 #define H2M_MAILBOX_CID 0x7014
1030 #define H2M_MAILBOX_STATUS 0x701c
1031 #define H2M_INT_SRC 0x7024
1032 #define H2M_BBP_AGENT 0x7028
1033 #define M2H_CMD_DONE_CSR 0x000c
1034 #define MCU_TXOP_ARRAY_BASE 0x000c // TODO: to be provided by Albert
1035 #define MCU_TXOP_ENTRY_SIZE 32 // TODO: to be provided by Albert
1036 #define MAX_NUM_OF_TXOP_ENTRY 16 // TODO: must be same with 8051 firmware
1037 #define MCU_MBOX_VERSION 0x01 // TODO: to be confirmed by Albert
1038 #define MCU_MBOX_VERSION_OFFSET 5 // TODO: to be provided by Albert
1041 // Host DMA registers - base address 0x200 . TX0-3=EDCAQid0-3, TX4=HCCA, TX5=MGMT,
1044 // DMA RING DESCRIPTOR
1046 #define E2PROM_CSR 0x0004
1047 #define IO_CNTL_CSR 0x77d0
1050 // 8051 firmware image for RT2860 - base address = 0x4000
1051 #define FIRMWARE_IMAGE_BASE 0x2000
1052 #define MAX_FIRMWARE_IMAGE_SIZE 0x2000 // 8kbyte
1055 // 8051 firmware image for usb - use last-half base address = 0x3000
1056 #define FIRMWARE_IMAGE_BASE 0x3000
1057 #define MAX_FIRMWARE_IMAGE_SIZE 0x1000 // 4kbyte
1060 // ================================================================
1061 // Tx / Rx / Mgmt ring descriptor definition
1062 // ================================================================
1064 // the following PID values are used to mark outgoing frame type in TXD->PID so that
1065 // proper TX statistics can be collected based on these categories
1066 // b3-2 of PID field -
1067 #define PID_MGMT 0x05
1068 #define PID_BEACON 0x0c
1069 #define PID_DATA_NORMALUCAST 0x02
1070 #define PID_DATA_AMPDU 0x04
1071 #define PID_DATA_NO_ACK 0x08
1072 #define PID_DATA_NOT_NORM_ACK 0x03
1073 // value domain of pTxD->HostQId (4-bit: 0~15)
1074 #define QID_AC_BK 1 // meet ACI definition in 802.11e
1075 #define QID_AC_BE 0 // meet ACI definition in 802.11e
1079 #define NUM_OF_TX_RING 5
1082 #define QID_OTHER 15
1085 // ------------------------------------------------------
1086 // BBP & RF definition
1087 // ------------------------------------------------------
1124 #define BBP_R0 0 // version
1125 #define BBP_R1 1 // TSSI
1126 #define BBP_R2 2 // TX configure
1131 #define BBP_R14 14 // RX configure
1133 #define BBP_R17 17 // RX sensibility
1142 #define BBP_R49 49 //TSSI
1147 #define BBP_R62 62 // Rx SQ0 Threshold HIGH
1155 #define BBP_R70 70 // Rx AGC SQ CCK Xcorr threshold
1170 #define BBP_R94 94 // Tx Gain Control
1171 #define BBP_R103 103
1172 #define BBP_R105 105
1173 #define BBP_R113 113
1174 #define BBP_R114 114
1175 #define BBP_R115 115
1176 #define BBP_R116 116
1177 #define BBP_R117 117
1178 #define BBP_R118 118
1179 #define BBP_R119 119
1180 #define BBP_R120 120
1181 #define BBP_R121 121
1182 #define BBP_R122 122
1183 #define BBP_R123 123
1185 #define BBP_R138 138 // add by johnli, RF power sequence setup, ADC dynamic on/off control
1189 #define BBPR94_DEFAULT 0x06 // Add 1 value will gain 1db
1191 #define RSSI_FOR_VERY_LOW_SENSIBILITY -35
1192 #define RSSI_FOR_LOW_SENSIBILITY -58
1193 #define RSSI_FOR_MID_LOW_SENSIBILITY -80
1194 #define RSSI_FOR_MID_SENSIBILITY -90
1196 //-------------------------------------------------------------------------
1197 // EEPROM definition
1198 //-------------------------------------------------------------------------
1205 #define EEPROM_WRITE_OPCODE 0x05
1206 #define EEPROM_READ_OPCODE 0x06
1207 #define EEPROM_EWDS_OPCODE 0x10
1208 #define EEPROM_EWEN_OPCODE 0x13
1210 #define NUM_EEPROM_BBP_PARMS 19 // Include NIC Config 0, 1, CR, TX ALC step, BBPs
1211 #define NUM_EEPROM_TX_G_PARMS 7
1212 #define EEPROM_NIC1_OFFSET 0x34 // The address is from NIC config 0, not BBP register ID
1213 #define EEPROM_NIC2_OFFSET 0x36 // The address is from NIC config 0, not BBP register ID
1214 #define EEPROM_BBP_BASE_OFFSET 0xf0 // The address is from NIC config 0, not BBP register ID
1215 #define EEPROM_G_TX_PWR_OFFSET 0x52
1216 #define EEPROM_G_TX2_PWR_OFFSET 0x60
1217 #define EEPROM_LED1_OFFSET 0x3c
1218 #define EEPROM_LED2_OFFSET 0x3e
1219 #define EEPROM_LED3_OFFSET 0x40
1220 #define EEPROM_LNA_OFFSET 0x44
1221 #define EEPROM_RSSI_BG_OFFSET 0x46
1222 #define EEPROM_RSSI_A_OFFSET 0x4a
1223 #define EEPROM_DEFINE_MAX_TXPWR 0x4e
1224 #define EEPROM_TXPOWER_BYRATE_20MHZ_2_4G 0xde // 20MHZ 2.4G tx power.
1225 #define EEPROM_TXPOWER_BYRATE_40MHZ_2_4G 0xee // 40MHZ 2.4G tx power.
1226 #define EEPROM_TXPOWER_BYRATE_20MHZ_5G 0xfa // 20MHZ 5G tx power.
1227 #define EEPROM_TXPOWER_BYRATE_40MHZ_5G 0x10a // 40MHZ 5G tx power.
1228 #define EEPROM_A_TX_PWR_OFFSET 0x78
1229 #define EEPROM_A_TX2_PWR_OFFSET 0xa6
1230 #define EEPROM_VERSION_OFFSET 0x02
1231 #define EEPROM_FREQ_OFFSET 0x3a
1232 #define EEPROM_TXPOWER_BYRATE 0xde // 20MHZ power.
1233 #define EEPROM_TXPOWER_DELTA 0x50 // 20MHZ AND 40 MHZ use different power. This is delta in 40MHZ.
1234 #define VALID_EEPROM_VERSION 1
1236 // PairKeyMode definition
1237 #define PKMODE_NONE 0
1238 #define PKMODE_WEP64 1
1239 #define PKMODE_WEP128 2
1240 #define PKMODE_TKIP 3
1241 #define PKMODE_AES 4
1242 #define PKMODE_CKIP64 5
1243 #define PKMODE_CKIP128 6
1244 #define PKMODE_TKIP_NO_MIC 7 // MIC appended by driver: not a valid value in hardware key table
1246 // =================================================================================
1248 // =================================================================================
1249 //7.1 WCID ENTRY format : 8bytes
1250 typedef struct _WCID_ENTRY_STRUC
{
1251 UCHAR RXBABitmap7
; // bit0 for TID8, bit7 for TID 15
1252 UCHAR RXBABitmap0
; // bit0 for TID0, bit7 for TID 7
1253 UCHAR MAC
[6]; // 0 for shared key table. 1 for pairwise key table
1254 } WCID_ENTRY_STRUC
, *PWCID_ENTRY_STRUC
;
1256 //8.1.1 SECURITY KEY format : 8DW
1257 // 32-byte per entry, total 16-entry for shared key table, 64-entry for pairwise key table
1258 typedef struct _HW_KEY_ENTRY
{ // 32-byte per entry
1262 } HW_KEY_ENTRY
, *PHW_KEY_ENTRY
;
1264 //8.1.2 IV/EIV format : 2DW
1266 //8.1.3 RX attribute entry format : 1DW
1267 typedef struct _MAC_ATTRIBUTE_STRUC
{
1268 UINT32 KeyTab
:1; // 0 for shared key table. 1 for pairwise key table
1269 UINT32 PairKeyMode
:3;
1270 UINT32 BSSIDIdx
:3; //multipleBSS index for the WCID
1273 } MAC_ATTRIBUTE_STRUC
, *PMAC_ATTRIBUTE_STRUC
;
1275 // =================================================================================
1276 // TX / RX ring descriptor format
1277 // =================================================================================
1279 // the first 24-byte in TXD is called TXINFO and will be DMAed to MAC block through TXFIFO.
1280 // MAC block use this TXINFO to control the transmission behavior of this frame.
1286 // TX descriptor format, Tx ring, Mgmt Ring
1288 typedef struct PACKED _TXD_STRUC
{
1302 UINT32 WIV
:1; // Wireless Info Valid. 1 if Driver already fill WI, o if DMA needs to copy WI to correctposition
1303 UINT32 QSEL
:2; // select on-chip FIFO ID for 2nd-stage output scheduler.0:MGMT, 1:HCCA 2:EDCA
1308 } TXD_STRUC
, *PTXD_STRUC
;
1311 // TXD Wireless Information format for Tx ring and Mgmt Ring
1313 //txop : for txop mode
1314 // 0:txop for the MPDU frame will be handles by ASIC by register
1315 // 1/2/3:the MPDU frame is send after PIFS/backoff/SIFS
1316 typedef struct PACKED _TXWI_STRUC
{
1318 UINT32 FRAG
:1; // 1 to inform TKIP engine this is a fragment.
1319 UINT32 MIMOps
:1; // the remote peer is in dynamic MIMO-PS mode
1324 UINT32 MpduDensity
:3;
1325 UINT32 txop
:2; //FOR "THIS" frame. 0:HT TXOP rule , 1:PIFS TX ,2:Backoff, 3:sifs only when previous frame exchange is successful.
1329 UINT32 BW
:1; //channel bandwidth 20MHz or 40 MHz
1331 UINT32 STBC
:2; // 1: STBC support MCS =0-7, 2,3 : RESERVE
1334 UINT32 TxBF
:1; // 3*3
1340 UINT32 WirelessCliID
:8;
1341 UINT32 MPDUtotalByteCount
:12;
1347 } TXWI_STRUC
, *PTXWI_STRUC
;
1350 // Rx descriptor format, Rx Ring
1353 typedef struct PACKED _RXD_STRUC
{
1369 UINT32 U2M
:1; // 1: this RX frame is unicast to me
1370 UINT32 Mcast
:1; // 1: this is a multicast frame
1371 UINT32 Bcast
:1; // 1: this is a broadcast frame
1372 UINT32 MyBss
:1; // 1: this frame belongs to the same BSSID
1373 UINT32 Crc
:1; // 1: CRC error
1374 UINT32 CipherErr
:2; // 0: decryption okay, 1:ICV error, 2:MIC error, 3:KEY not valid
1375 UINT32 AMSDU
:1; // rx with 802.3 header, not 802.11 header.
1380 UINT32 Decrypted
:1; // this frame is being decrypted.
1381 UINT32 PlcpSignal
:1; // To be moved
1382 UINT32 PlcpRssil
:1;// To be moved
1384 } RXD_STRUC
, *PRXD_STRUC
, RT28XX_RXD_STRUC
, *PRT28XX_RXD_STRUC
;
1388 // RXWI wireless information format, in PBF. invisible in driver.
1390 typedef struct PACKED _RXWI_STRUC
{
1392 UINT32 WirelessCliID
:8;
1396 UINT32 MPDUtotalByteCount
:12;
1406 UINT32 PHYMODE
:2; // 1: this RX frame is unicast to me
1416 } RXWI_STRUC
, *PRXWI_STRUC
;
1418 // =================================================================================
1419 // HOST-MCU communication data structure
1420 // =================================================================================
1423 // H2M_MAILBOX_CSR: Host-to-MCU Mailbox
1425 typedef union _H2M_MAILBOX_STRUC
{
1433 } H2M_MAILBOX_STRUC
, *PH2M_MAILBOX_STRUC
;
1436 // M2H_CMD_DONE_CSR: MCU-to-Host command complete indication
1438 typedef union _M2H_CMD_DONE_STRUC
{
1446 } M2H_CMD_DONE_STRUC
, *PM2H_CMD_DONE_STRUC
;
1449 // MCU_LEDCS: MCU LED Control Setting.
1451 typedef union _MCU_LEDCS_STRUC
{
1457 } MCU_LEDCS_STRUC
, *PMCU_LEDCS_STRUC
;
1459 // =================================================================================
1461 // =================================================================================
1466 typedef union _NAV_TIME_CFG_STRUC
{
1468 UCHAR Sifs
; // in unit of 1-us
1469 UCHAR SlotTime
; // in unit of 1-us
1470 USHORT Eifs
:9; // in unit of 1-us
1471 USHORT ZeroSifs
:1; // Applied zero SIFS timer after OFDM RX 0: disable
1475 } NAV_TIME_CFG_STRUC
, *PNAV_TIME_CFG_STRUC
;
1478 // RX_FILTR_CFG: /RX configuration register
1480 typedef union _RX_FILTR_CFG_STRUC
{
1482 UINT32 DropCRCErr
:1; // Drop CRC error
1483 UINT32 DropPhyErr
:1; // Drop physical error
1484 UINT32 DropNotToMe
:1; // Drop not to me unicast frame
1485 UINT32 DropNotMyBSSID
:1; // Drop fram ToDs bit is true
1487 UINT32 DropVerErr
:1; // Drop version error frame
1488 UINT32 DropMcast
:1; // Drop multicast frames
1489 UINT32 DropBcast
:1; // Drop broadcast frames
1490 UINT32 DropDuplicate
:1; // Drop duplicate frame
1492 UINT32 DropCFEndAck
:1; // Drop Ps-Poll
1493 UINT32 DropCFEnd
:1; // Drop Ps-Poll
1494 UINT32 DropAck
:1; // Drop Ps-Poll
1495 UINT32 DropCts
:1; // Drop Ps-Poll
1497 UINT32 DropRts
:1; // Drop Ps-Poll
1498 UINT32 DropPsPoll
:1; // Drop Ps-Poll
1500 UINT32 DropBAR
:1; //
1502 UINT32 DropRsvCntlType
:1;
1506 } RX_FILTR_CFG_STRUC
, *PRX_FILTR_CFG_STRUC
;
1509 // PHY_CSR4: RF serial control register
1511 typedef union _PHY_CSR4_STRUC
{
1513 UINT32 RFRegValue
:24; // Register value (include register id) serial out to RF/IF chip.
1514 UINT32 NumberOfBits
:5; // Number of bits used in RFRegValue (I:20, RFMD:22)
1515 UINT32 IFSelect
:1; // 1: select IF to program, 0: select RF to program
1516 UINT32 PLL_LD
:1; // RF PLL_LD status
1517 UINT32 Busy
:1; // 1: ASIC is busy execute RF programming.
1520 } PHY_CSR4_STRUC
, *PPHY_CSR4_STRUC
;
1523 // SEC_CSR5: shared key table security mode register
1525 typedef union _SEC_CSR5_STRUC
{
1527 UINT32 Bss2Key0CipherAlg
:3;
1529 UINT32 Bss2Key1CipherAlg
:3;
1531 UINT32 Bss2Key2CipherAlg
:3;
1533 UINT32 Bss2Key3CipherAlg
:3;
1535 UINT32 Bss3Key0CipherAlg
:3;
1537 UINT32 Bss3Key1CipherAlg
:3;
1539 UINT32 Bss3Key2CipherAlg
:3;
1541 UINT32 Bss3Key3CipherAlg
:3;
1545 } SEC_CSR5_STRUC
, *PSEC_CSR5_STRUC
;
1548 // HOST_CMD_CSR: For HOST to interrupt embedded processor
1550 typedef union _HOST_CMD_CSR_STRUC
{
1552 UINT32 HostCommand
:8;
1556 } HOST_CMD_CSR_STRUC
, *PHOST_CMD_CSR_STRUC
;
1559 // AIFSN_CSR: AIFSN for each EDCA AC
1565 // E2PROM_CSR: EEPROM control register
1567 typedef union _E2PROM_CSR_STRUC
{
1569 UINT32 Reload
:1; // Reload EEPROM content, write one to reload, self-cleared.
1574 UINT32 Type
:1; // 1: 93C46, 0:93C66
1575 UINT32 LoadStatus
:1; // 1:loading, 0:done
1579 } E2PROM_CSR_STRUC
, *PE2PROM_CSR_STRUC
;
1581 // -------------------------------------------------------------------
1582 // E2PROM data layout
1583 // -------------------------------------------------------------------
1586 // EEPROM antenna select format
1588 typedef union _EEPROM_ANTENNA_STRUC
{
1590 USHORT RxPath
:4; // 1: 1R, 2: 2R, 3: 3R
1591 USHORT TxPath
:4; // 1: 1T, 2: 2T
1592 USHORT RfIcType
:4; // see E2PROM document
1596 } EEPROM_ANTENNA_STRUC
, *PEEPROM_ANTENNA_STRUC
;
1598 typedef union _EEPROM_NIC_CINFIG2_STRUC
{
1600 USHORT HardwareRadioControl
:1; // 1:enable, 0:disable
1601 USHORT DynamicTxAgcControl
:1; //
1602 USHORT ExternalLNAForG
:1; //
1603 USHORT ExternalLNAForA
:1; // external LNA enable for 2.4G
1604 USHORT CardbusAcceleration
:1; // !!! NOTE: 0 - enable, 1 - disable
1605 USHORT BW40MSidebandForG
:1;
1606 USHORT BW40MSidebandForA
:1;
1607 USHORT EnableWPSPBC
:1; // WPS PBC Control bit
1608 USHORT BW40MAvailForG
:1; // 0:enable, 1:disable
1609 USHORT BW40MAvailForA
:1; // 0:enable, 1:disable
1611 USHORT Rsv2
:6; // must be 0
1614 USHORT Rsv1
:1; // must be 0
1615 USHORT AntDiversity
:1; // Antenna diversity
1616 USHORT Rsv2
:3; // must be 0
1617 USHORT DACTestBit
:1; // control if driver should patch the DAC issue
1621 } EEPROM_NIC_CONFIG2_STRUC
, *PEEPROM_NIC_CONFIG2_STRUC
;
1624 // TX_PWR Value valid range 0xFA(-6) ~ 0x24(36)
1626 typedef union _EEPROM_TX_PWR_STRUC
{
1628 CHAR Byte0
; // Low Byte
1629 CHAR Byte1
; // High Byte
1632 } EEPROM_TX_PWR_STRUC
, *PEEPROM_TX_PWR_STRUC
;
1634 typedef union _EEPROM_VERSION_STRUC
{
1636 UCHAR FaeReleaseNumber
; // Low Byte
1637 UCHAR Version
; // High Byte
1640 } EEPROM_VERSION_STRUC
, *PEEPROM_VERSION_STRUC
;
1642 typedef union _EEPROM_LED_STRUC
{
1644 USHORT PolarityRDY_G
:1; // Polarity RDY_G setting.
1645 USHORT PolarityRDY_A
:1; // Polarity RDY_A setting.
1646 USHORT PolarityACT
:1; // Polarity ACT setting.
1647 USHORT PolarityGPIO_0
:1; // Polarity GPIO#0 setting.
1648 USHORT PolarityGPIO_1
:1; // Polarity GPIO#1 setting.
1649 USHORT PolarityGPIO_2
:1; // Polarity GPIO#2 setting.
1650 USHORT PolarityGPIO_3
:1; // Polarity GPIO#3 setting.
1651 USHORT PolarityGPIO_4
:1; // Polarity GPIO#4 setting.
1652 USHORT LedMode
:5; // Led mode.
1653 USHORT Rsvd
:3; // Reserved
1656 } EEPROM_LED_STRUC
, *PEEPROM_LED_STRUC
;
1658 typedef union _EEPROM_TXPOWER_DELTA_STRUC
{
1660 UCHAR DeltaValue
:6; // Tx Power dalta value (MAX=4)
1661 UCHAR Type
:1; // 1: plus the delta value, 0: minus the delta value
1662 UCHAR TxPowerEnable
:1;// Enable
1665 } EEPROM_TXPOWER_DELTA_STRUC
, *PEEPROM_TXPOWER_DELTA_STRUC
;
1668 // QOS_CSR0: TXOP holder address0 register
1670 typedef union _QOS_CSR0_STRUC
{
1672 UCHAR Byte0
; // MAC address byte 0
1673 UCHAR Byte1
; // MAC address byte 1
1674 UCHAR Byte2
; // MAC address byte 2
1675 UCHAR Byte3
; // MAC address byte 3
1678 } QOS_CSR0_STRUC
, *PQOS_CSR0_STRUC
;
1681 // QOS_CSR1: TXOP holder address1 register
1683 typedef union _QOS_CSR1_STRUC
{
1685 UCHAR Byte4
; // MAC address byte 4
1686 UCHAR Byte5
; // MAC address byte 5
1691 } QOS_CSR1_STRUC
, *PQOS_CSR1_STRUC
;
1693 #define RF_CSR_CFG 0x500
1694 typedef union _RF_CSR_CFG_STRUC
{
1696 UINT RF_CSR_DATA
:8; // DATA
1697 UINT TESTCSR_RFACC_REGNUM
:5; // RF register ID
1698 UINT Rsvd2
:3; // Reserved
1699 UINT RF_CSR_WR
:1; // 0: read 1: write
1700 UINT RF_CSR_KICK
:1; // kick RF register read/write
1701 UINT Rsvd1
:14; // Reserved
1704 } RF_CSR_CFG_STRUC
, *PRF_CSR_CFG_STRUC
;
1706 #endif // __RT28XX_H__