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
51 // SCH/DMA registers - base address 0x0200
53 // INT_SOURCE_CSR: Interrupt source register. Write one to clear corresponding bit
55 #define DMA_CSR0 0x200
56 #define INT_SOURCE_CSR 0x200
58 typedef union _INT_SOURCE_CSR_STRUC {
64 UINT32 AutoWakeup:1;//bit14
65 UINT32 TXFifoStatusInt:1;//FIFO Statistics is full, sw should read 0x171c
68 UINT32 RxTxCoherent:1;
69 UINT32 MCUCommandINT:1;
77 UINT32 TxDelayINT:1; //delayed interrupt, not interrupt until several int or time limit hit
78 UINT32 RxDelayINT:1; //dealyed interrupt
81 } INT_SOURCE_CSR_STRUC, *PINT_SOURCE_CSR_STRUC;
83 typedef union _INT_SOURCE_CSR_STRUC {
88 UINT32 Ac0DmaDone:1;//4
92 UINT32 HccaDmaDone:1; // bit7
94 UINT32 MCUCommandINT:1;//bit 9
95 UINT32 RxTxCoherent:1;
98 UINT32 TXFifoStatusInt:1;//FIFO Statistics is full, sw should read 0x171c
99 UINT32 AutoWakeup:1;//bit14
101 UINT32 RxCoherent:1;//bit16
106 } INT_SOURCE_CSR_STRUC, *PINT_SOURCE_CSR_STRUC;
110 // INT_MASK_CSR: Interrupt MASK register. 1: the interrupt is mask OFF
112 #define INT_MASK_CSR 0x204
114 typedef union _INT_MASK_CSR_STRUC {
119 UINT32 MCUCommandINT:1;
120 UINT32 MgmtDmaDone:1;
121 UINT32 HccaDmaDone:1;
128 UINT32 RXDelay_INT_MSK:1;
131 }INT_MASK_CSR_STRUC, *PINT_MASK_CSR_STRUC;
133 typedef union _INT_MASK_CSR_STRUC {
135 UINT32 RXDelay_INT_MSK:1;
142 UINT32 HccaDmaDone:1;
143 UINT32 MgmtDmaDone:1;
144 UINT32 MCUCommandINT:1;
150 } INT_MASK_CSR_STRUC, *PINT_MASK_CSR_STRUC;
152 #define WPDMA_GLO_CFG 0x208
154 typedef union _WPDMA_GLO_CFG_STRUC {
156 UINT32 HDR_SEG_LEN:16;
157 UINT32 RXHdrScater:8;
159 UINT32 EnTXWriteBackDDONE:1;
160 UINT32 WPDMABurstSIZE:2;
162 UINT32 EnableRxDMA:1;
164 UINT32 EnableTxDMA:1;
167 }WPDMA_GLO_CFG_STRUC, *PWPDMA_GLO_CFG_STRUC;
169 typedef union _WPDMA_GLO_CFG_STRUC {
171 UINT32 EnableTxDMA:1;
173 UINT32 EnableRxDMA:1;
175 UINT32 WPDMABurstSIZE:2;
176 UINT32 EnTXWriteBackDDONE:1;
178 UINT32 RXHdrScater:8;
179 UINT32 HDR_SEG_LEN:16;
182 } WPDMA_GLO_CFG_STRUC, *PWPDMA_GLO_CFG_STRUC;
184 #define WPDMA_RST_IDX 0x20c
186 typedef union _WPDMA_RST_IDX_STRUC {
189 UINT32 RST_DRX_IDX0:1;
191 UINT32 RST_DTX_IDX5:1;
192 UINT32 RST_DTX_IDX4:1;
193 UINT32 RST_DTX_IDX3:1;
194 UINT32 RST_DTX_IDX2:1;
195 UINT32 RST_DTX_IDX1:1;
196 UINT32 RST_DTX_IDX0:1;
199 }WPDMA_RST_IDX_STRUC, *PWPDMA_RST_IDX_STRUC;
201 typedef union _WPDMA_RST_IDX_STRUC {
203 UINT32 RST_DTX_IDX0:1;
204 UINT32 RST_DTX_IDX1:1;
205 UINT32 RST_DTX_IDX2:1;
206 UINT32 RST_DTX_IDX3:1;
207 UINT32 RST_DTX_IDX4:1;
208 UINT32 RST_DTX_IDX5:1;
210 UINT32 RST_DRX_IDX0:1;
214 } WPDMA_RST_IDX_STRUC, *PWPDMA_RST_IDX_STRUC;
216 #define DELAY_INT_CFG 0x0210
218 typedef union _DELAY_INT_CFG_STRUC {
220 UINT32 TXDLY_INT_EN:1;
222 UINT32 TXMAX_PTIME:8;
223 UINT32 RXDLY_INT_EN:1;
225 UINT32 RXMAX_PTIME:8;
228 }DELAY_INT_CFG_STRUC, *PDELAY_INT_CFG_STRUC;
230 typedef union _DELAY_INT_CFG_STRUC {
232 UINT32 RXMAX_PTIME:8;
234 UINT32 RXDLY_INT_EN:1;
235 UINT32 TXMAX_PTIME:8;
237 UINT32 TXDLY_INT_EN:1;
240 } DELAY_INT_CFG_STRUC, *PDELAY_INT_CFG_STRUC;
242 #define WMM_AIFSN_CFG 0x0214
244 typedef union _AIFSN_CSR_STRUC {
247 UINT32 Aifsn3:4; // for AC_VO
248 UINT32 Aifsn2:4; // for AC_VI
249 UINT32 Aifsn1:4; // for AC_BK
250 UINT32 Aifsn0:4; // for AC_BE
253 } AIFSN_CSR_STRUC, *PAIFSN_CSR_STRUC;
255 typedef union _AIFSN_CSR_STRUC {
257 UINT32 Aifsn0:4; // for AC_BE
258 UINT32 Aifsn1:4; // for AC_BK
259 UINT32 Aifsn2:4; // for AC_VI
260 UINT32 Aifsn3:4; // for AC_VO
264 } AIFSN_CSR_STRUC, *PAIFSN_CSR_STRUC;
267 // CWMIN_CSR: CWmin for each EDCA AC
269 #define WMM_CWMIN_CFG 0x0218
271 typedef union _CWMIN_CSR_STRUC {
274 UINT32 Cwmin3:4; // for AC_VO
275 UINT32 Cwmin2:4; // for AC_VI
276 UINT32 Cwmin1:4; // for AC_BK
277 UINT32 Cwmin0:4; // for AC_BE
280 } CWMIN_CSR_STRUC, *PCWMIN_CSR_STRUC;
282 typedef union _CWMIN_CSR_STRUC {
284 UINT32 Cwmin0:4; // for AC_BE
285 UINT32 Cwmin1:4; // for AC_BK
286 UINT32 Cwmin2:4; // for AC_VI
287 UINT32 Cwmin3:4; // for AC_VO
291 } CWMIN_CSR_STRUC, *PCWMIN_CSR_STRUC;
295 // CWMAX_CSR: CWmin for each EDCA AC
297 #define WMM_CWMAX_CFG 0x021c
299 typedef union _CWMAX_CSR_STRUC {
302 UINT32 Cwmax3:4; // for AC_VO
303 UINT32 Cwmax2:4; // for AC_VI
304 UINT32 Cwmax1:4; // for AC_BK
305 UINT32 Cwmax0:4; // for AC_BE
308 } CWMAX_CSR_STRUC, *PCWMAX_CSR_STRUC;
310 typedef union _CWMAX_CSR_STRUC {
312 UINT32 Cwmax0:4; // for AC_BE
313 UINT32 Cwmax1:4; // for AC_BK
314 UINT32 Cwmax2:4; // for AC_VI
315 UINT32 Cwmax3:4; // for AC_VO
319 } CWMAX_CSR_STRUC, *PCWMAX_CSR_STRUC;
324 // AC_TXOP_CSR0: AC_BK/AC_BE TXOP register
326 #define WMM_TXOP0_CFG 0x0220
328 typedef union _AC_TXOP_CSR0_STRUC {
330 USHORT Ac1Txop; // for AC_BE, in unit of 32us
331 USHORT Ac0Txop; // for AC_BK, in unit of 32us
334 } AC_TXOP_CSR0_STRUC, *PAC_TXOP_CSR0_STRUC;
336 typedef union _AC_TXOP_CSR0_STRUC {
338 USHORT Ac0Txop; // for AC_BK, in unit of 32us
339 USHORT Ac1Txop; // for AC_BE, in unit of 32us
342 } AC_TXOP_CSR0_STRUC, *PAC_TXOP_CSR0_STRUC;
346 // AC_TXOP_CSR1: AC_VO/AC_VI TXOP register
348 #define WMM_TXOP1_CFG 0x0224
350 typedef union _AC_TXOP_CSR1_STRUC {
352 USHORT Ac3Txop; // for AC_VO, in unit of 32us
353 USHORT Ac2Txop; // for AC_VI, in unit of 32us
356 } AC_TXOP_CSR1_STRUC, *PAC_TXOP_CSR1_STRUC;
358 typedef union _AC_TXOP_CSR1_STRUC {
360 USHORT Ac2Txop; // for AC_VI, in unit of 32us
361 USHORT Ac3Txop; // for AC_VO, in unit of 32us
364 } AC_TXOP_CSR1_STRUC, *PAC_TXOP_CSR1_STRUC;
366 #define RINGREG_DIFF 0x10
367 #define GPIO_CTRL_CFG 0x0228 //MAC_CSR13
368 #define MCU_CMD_CFG 0x022c
369 #define TX_BASE_PTR0 0x0230 //AC_BK base address
370 #define TX_MAX_CNT0 0x0234
371 #define TX_CTX_IDX0 0x0238
372 #define TX_DTX_IDX0 0x023c
373 #define TX_BASE_PTR1 0x0240 //AC_BE base address
374 #define TX_MAX_CNT1 0x0244
375 #define TX_CTX_IDX1 0x0248
376 #define TX_DTX_IDX1 0x024c
377 #define TX_BASE_PTR2 0x0250 //AC_VI base address
378 #define TX_MAX_CNT2 0x0254
379 #define TX_CTX_IDX2 0x0258
380 #define TX_DTX_IDX2 0x025c
381 #define TX_BASE_PTR3 0x0260 //AC_VO base address
382 #define TX_MAX_CNT3 0x0264
383 #define TX_CTX_IDX3 0x0268
384 #define TX_DTX_IDX3 0x026c
385 #define TX_BASE_PTR4 0x0270 //HCCA base address
386 #define TX_MAX_CNT4 0x0274
387 #define TX_CTX_IDX4 0x0278
388 #define TX_DTX_IDX4 0x027c
389 #define TX_BASE_PTR5 0x0280 //MGMT base address
390 #define TX_MAX_CNT5 0x0284
391 #define TX_CTX_IDX5 0x0288
392 #define TX_DTX_IDX5 0x028c
393 #define TX_MGMTMAX_CNT TX_MAX_CNT5
394 #define TX_MGMTCTX_IDX TX_CTX_IDX5
395 #define TX_MGMTDTX_IDX TX_DTX_IDX5
396 #define RX_BASE_PTR 0x0290 //RX base address
397 #define RX_MAX_CNT 0x0294
398 #define RX_CRX_IDX 0x0298
399 #define RX_DRX_IDX 0x029c
400 #define USB_DMA_CFG 0x02a0
402 typedef union _USB_DMA_CFG_STRUC {
404 UINT32 TxBusy:1; //USB DMA TX FSM busy . debug only
405 UINT32 RxBusy:1; //USB DMA RX FSM busy . debug only
406 UINT32 EpoutValid:6; //OUT endpoint data valid. debug only
407 UINT32 TxBulkEn:1; //Enable USB DMA Tx
408 UINT32 RxBulkEn:1; //Enable USB DMA Rx
409 UINT32 RxBulkAggEn:1; //Enable Rx Bulk Aggregation
410 UINT32 TxopHalt:1; //Halt TXOP count down when TX buffer is full.
411 UINT32 TxClear:1; //Clear USB DMA TX path
413 UINT32 phyclear:1; //phy watch dog enable. write 1
414 UINT32 RxBulkAggLmt:8; //Rx Bulk Aggregation Limit in unit of 1024 bytes
415 UINT32 RxBulkAggTOut:8; //Rx Bulk Aggregation TimeOut in unit of 33ns
418 } USB_DMA_CFG_STRUC, *PUSB_DMA_CFG_STRUC;
420 typedef union _USB_DMA_CFG_STRUC {
422 UINT32 RxBulkAggTOut:8; //Rx Bulk Aggregation TimeOut in unit of 33ns
423 UINT32 RxBulkAggLmt:8; //Rx Bulk Aggregation Limit in unit of 256 bytes
424 UINT32 phyclear:1; //phy watch dog enable. write 1
426 UINT32 TxClear:1; //Clear USB DMA TX path
427 UINT32 TxopHalt:1; //Halt TXOP count down when TX buffer is full.
428 UINT32 RxBulkAggEn:1; //Enable Rx Bulk Aggregation
429 UINT32 RxBulkEn:1; //Enable USB DMA Rx
430 UINT32 TxBulkEn:1; //Enable USB DMA Tx
431 UINT32 EpoutValid:6; //OUT endpoint data valid
432 UINT32 RxBusy:1; //USB DMA RX FSM busy
433 UINT32 TxBusy:1; //USB DMA TX FSM busy
436 } USB_DMA_CFG_STRUC, *PUSB_DMA_CFG_STRUC;
443 // Most are for debug. Driver doesn't touch PBF register.
444 #define PBF_SYS_CTRL 0x0400
445 #define PBF_CFG 0x0408
446 #define PBF_MAX_PCNT 0x040C
447 #define PBF_CTRL 0x0410
448 #define PBF_INT_STA 0x0414
449 #define PBF_INT_ENA 0x0418
450 #define TXRXQ_PCNT 0x0438
451 #define PBF_DBG 0x043c
452 #define PBF_CAP_CTRL 0x0440
458 // 4.1 MAC SYSTEM configuration registers (offset:0x1000)
460 #define MAC_CSR0 0x1000
462 typedef union _ASIC_VER_ID_STRUC {
464 USHORT ASICVer; // version : 2860
465 USHORT ASICRev; // reversion : 0
468 } ASIC_VER_ID_STRUC, *PASIC_VER_ID_STRUC;
470 typedef union _ASIC_VER_ID_STRUC {
472 USHORT ASICRev; // reversion : 0
473 USHORT ASICVer; // version : 2860
476 } ASIC_VER_ID_STRUC, *PASIC_VER_ID_STRUC;
478 #define MAC_SYS_CTRL 0x1004 //MAC_CSR1
479 #define MAC_ADDR_DW0 0x1008 // MAC ADDR DW0
480 #define MAC_ADDR_DW1 0x100c // MAC ADDR DW1
482 // MAC_CSR2: STA MAC register 0
485 typedef union _MAC_DW0_STRUC {
487 UCHAR Byte3; // MAC address byte 3
488 UCHAR Byte2; // MAC address byte 2
489 UCHAR Byte1; // MAC address byte 1
490 UCHAR Byte0; // MAC address byte 0
493 } MAC_DW0_STRUC, *PMAC_DW0_STRUC;
495 typedef union _MAC_DW0_STRUC {
497 UCHAR Byte0; // MAC address byte 0
498 UCHAR Byte1; // MAC address byte 1
499 UCHAR Byte2; // MAC address byte 2
500 UCHAR Byte3; // MAC address byte 3
503 } MAC_DW0_STRUC, *PMAC_DW0_STRUC;
507 // MAC_CSR3: STA MAC register 1
510 typedef union _MAC_DW1_STRUC {
514 UCHAR Byte5; // MAC address byte 5
515 UCHAR Byte4; // MAC address byte 4
518 } MAC_DW1_STRUC, *PMAC_DW1_STRUC;
520 typedef union _MAC_DW1_STRUC {
522 UCHAR Byte4; // MAC address byte 4
523 UCHAR Byte5; // MAC address byte 5
528 } MAC_DW1_STRUC, *PMAC_DW1_STRUC;
531 #define MAC_BSSID_DW0 0x1010 // MAC BSSID DW0
532 #define MAC_BSSID_DW1 0x1014 // MAC BSSID DW1
535 // MAC_CSR5: BSSID register 1
538 typedef union _MAC_CSR5_STRUC {
542 USHORT BssIdMode:2; // 0: one BSSID, 10: 4 BSSID, 01: 2 BSSID , 11: 8BSSID
543 UCHAR Byte5; // BSSID byte 5
544 UCHAR Byte4; // BSSID byte 4
547 } MAC_CSR5_STRUC, *PMAC_CSR5_STRUC;
549 typedef union _MAC_CSR5_STRUC {
551 UCHAR Byte4; // BSSID byte 4
552 UCHAR Byte5; // BSSID byte 5
553 USHORT BssIdMask:2; // 0: one BSSID, 10: 4 BSSID, 01: 2 BSSID , 11: 8BSSID
558 } MAC_CSR5_STRUC, *PMAC_CSR5_STRUC;
561 #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
562 #define BBP_CSR_CFG 0x101c //
564 // BBP_CSR_CFG: BBP serial control register
567 typedef union _BBP_CSR_CFG_STRUC {
570 UINT32 BBP_RW_MODE:1; // 0: use serial mode 1:parallel
571 UINT32 BBP_PAR_DUR:1; // 0: 4 MAC clock cycles 1: 8 MAC clock cycles
572 UINT32 Busy:1; // 1: ASIC is busy execute BBP programming.
573 UINT32 fRead:1; // 0: Write BBP, 1: Read BBP
574 UINT32 RegNum:8; // Selected BBP register
575 UINT32 Value:8; // Register value to program into BBP
578 } BBP_CSR_CFG_STRUC, *PBBP_CSR_CFG_STRUC;
580 typedef union _BBP_CSR_CFG_STRUC {
582 UINT32 Value:8; // Register value to program into BBP
583 UINT32 RegNum:8; // Selected BBP register
584 UINT32 fRead:1; // 0: Write BBP, 1: Read BBP
585 UINT32 Busy:1; // 1: ASIC is busy execute BBP programming.
586 UINT32 BBP_PAR_DUR:1; // 0: 4 MAC clock cycles 1: 8 MAC clock cycles
587 UINT32 BBP_RW_MODE:1; // 0: use serial mode 1:parallel
591 } BBP_CSR_CFG_STRUC, *PBBP_CSR_CFG_STRUC;
593 #define RF_CSR_CFG0 0x1020
595 // RF_CSR_CFG: RF control register
598 typedef union _RF_CSR_CFG0_STRUC {
600 UINT32 Busy:1; // 0: idle 1: 8busy
601 UINT32 Sel:1; // 0:RF_LE0 activate 1:RF_LE1 activate
602 UINT32 StandbyMode:1; // 0: high when stand by 1: low when standby
603 UINT32 bitwidth:5; // Selected BBP register
604 UINT32 RegIdAndContent:24; // Register value to program into BBP
607 } RF_CSR_CFG0_STRUC, *PRF_CSR_CFG0_STRUC;
609 typedef union _RF_CSR_CFG0_STRUC {
611 UINT32 RegIdAndContent:24; // Register value to program into BBP
612 UINT32 bitwidth:5; // Selected BBP register
613 UINT32 StandbyMode:1; // 0: high when stand by 1: low when standby
614 UINT32 Sel:1; // 0:RF_LE0 activate 1:RF_LE1 activate
615 UINT32 Busy:1; // 0: idle 1: 8busy
618 } RF_CSR_CFG0_STRUC, *PRF_CSR_CFG0_STRUC;
620 #define RF_CSR_CFG1 0x1024
622 typedef union _RF_CSR_CFG1_STRUC {
624 UINT32 rsv:7; // 0: idle 1: 8busy
625 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)
626 UINT32 RegIdAndContent:24; // Register value to program into BBP
629 } RF_CSR_CFG1_STRUC, *PRF_CSR_CFG1_STRUC;
631 typedef union _RF_CSR_CFG1_STRUC {
633 UINT32 RegIdAndContent:24; // Register value to program into BBP
634 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)
635 UINT32 rsv:7; // 0: idle 1: 8busy
638 } RF_CSR_CFG1_STRUC, *PRF_CSR_CFG1_STRUC;
640 #define RF_CSR_CFG2 0x1028 //
642 typedef union _RF_CSR_CFG2_STRUC {
644 UINT32 rsv:8; // 0: idle 1: 8busy
645 UINT32 RegIdAndContent:24; // Register value to program into BBP
648 } RF_CSR_CFG2_STRUC, *PRF_CSR_CFG2_STRUC;
650 typedef union _RF_CSR_CFG2_STRUC {
652 UINT32 RegIdAndContent:24; // Register value to program into BBP
653 UINT32 rsv:8; // 0: idle 1: 8busy
656 } RF_CSR_CFG2_STRUC, *PRF_CSR_CFG2_STRUC;
658 #define LED_CFG 0x102c // MAC_CSR14
660 typedef union _LED_CFG_STRUC {
663 UINT32 LedPolar:1; // Led Polarity. 0: active low1: active high
664 UINT32 YLedMode:2; // yellow Led Mode
665 UINT32 GLedMode:2; // green Led Mode
666 UINT32 RLedMode:2; // red Led Mode 0: off1: blinking upon TX2: periodic slow blinking3: always on
668 UINT32 SlowBlinkPeriod:6; // slow blinking period. unit:1ms
669 UINT32 OffPeriod:8; // blinking off period unit 1ms
670 UINT32 OnPeriod:8; // blinking on period unit 1ms
673 } LED_CFG_STRUC, *PLED_CFG_STRUC;
675 typedef union _LED_CFG_STRUC {
677 UINT32 OnPeriod:8; // blinking on period unit 1ms
678 UINT32 OffPeriod:8; // blinking off period unit 1ms
679 UINT32 SlowBlinkPeriod:6; // slow blinking period. unit:1ms
681 UINT32 RLedMode:2; // red Led Mode 0: off1: blinking upon TX2: periodic slow blinking3: always on
682 UINT32 GLedMode:2; // green Led Mode
683 UINT32 YLedMode:2; // yellow Led Mode
684 UINT32 LedPolar:1; // Led Polarity. 0: active low1: active high
688 } LED_CFG_STRUC, *PLED_CFG_STRUC;
691 // 4.2 MAC TIMING configuration registers (offset:0x1100)
693 #define XIFS_TIME_CFG 0x1100 // MAC_CSR8 MAC_CSR9
695 typedef union _IFS_SLOT_CFG_STRUC {
698 UINT32 BBRxendEnable:1; // reference RXEND signal to begin XIFS defer
699 UINT32 EIFS:9; // unit 1us
700 UINT32 OfdmXifsTime:4; //OFDM SIFS. unit 1us. Applied after OFDM RX when MAC doesn't reference BBP signal BBRXEND
701 UINT32 OfdmSifsTime:8; // unit 1us. Applied after OFDM RX/TX
702 UINT32 CckmSifsTime:8; // unit 1us. Applied after CCK RX/TX
705 } IFS_SLOT_CFG_STRUC, *PIFS_SLOT_CFG_STRUC;
707 typedef union _IFS_SLOT_CFG_STRUC {
709 UINT32 CckmSifsTime:8; // unit 1us. Applied after CCK RX/TX
710 UINT32 OfdmSifsTime:8; // unit 1us. Applied after OFDM RX/TX
711 UINT32 OfdmXifsTime:4; //OFDM SIFS. unit 1us. Applied after OFDM RX when MAC doesn't reference BBP signal BBRXEND
712 UINT32 EIFS:9; // unit 1us
713 UINT32 BBRxendEnable:1; // reference RXEND signal to begin XIFS defer
717 } IFS_SLOT_CFG_STRUC, *PIFS_SLOT_CFG_STRUC;
720 #define BKOFF_SLOT_CFG 0x1104 // mac_csr9 last 8 bits
721 #define NAV_TIME_CFG 0x1108 // NAV (MAC_CSR15)
722 #define CH_TIME_CFG 0x110C // Count as channel busy
723 #define PBF_LIFE_TIMER 0x1110 //TX/RX MPDU timestamp timer (free run)Unit: 1us
724 #define BCN_TIME_CFG 0x1114 // TXRX_CSR9
726 #define BCN_OFFSET0 0x042C
727 #define BCN_OFFSET1 0x0430
730 // BCN_TIME_CFG : Synchronization control register
733 typedef union _BCN_TIME_CFG_STRUC {
735 UINT32 TxTimestampCompensate:8;
737 UINT32 bBeaconGen:1; // Enable beacon generator
738 UINT32 bTBTTEnable:1;
739 UINT32 TsfSyncMode:2; // Enable TSF sync, 00: disable, 01: infra mode, 10: ad-hoc mode
740 UINT32 bTsfTicking:1; // Enable TSF auto counting
741 UINT32 BeaconInterval:16; // in unit of 1/16 TU
744 } BCN_TIME_CFG_STRUC, *PBCN_TIME_CFG_STRUC;
746 typedef union _BCN_TIME_CFG_STRUC {
748 UINT32 BeaconInterval:16; // in unit of 1/16 TU
749 UINT32 bTsfTicking:1; // Enable TSF auto counting
750 UINT32 TsfSyncMode:2; // Enable TSF sync, 00: disable, 01: infra mode, 10: ad-hoc mode
751 UINT32 bTBTTEnable:1;
752 UINT32 bBeaconGen:1; // Enable beacon generator
754 UINT32 TxTimestampCompensate:8;
757 } BCN_TIME_CFG_STRUC, *PBCN_TIME_CFG_STRUC;
759 #define TBTT_SYNC_CFG 0x1118 // txrx_csr10
760 #define TSF_TIMER_DW0 0x111C // Local TSF timer lsb 32 bits. Read-only
761 #define TSF_TIMER_DW1 0x1120 // msb 32 bits. Read-only.
762 #define TBTT_TIMER 0x1124 // TImer remains till next TBTT. Read-only. TXRX_CSR14
763 #define INT_TIMER_CFG 0x1128 //
764 #define INT_TIMER_EN 0x112c // GP-timer and pre-tbtt Int enable
765 #define CH_IDLE_STA 0x1130 // channel idle time
766 #define CH_BUSY_STA 0x1134 // channle busy time
768 // 4.2 MAC POWER configuration registers (offset:0x1200)
770 #define MAC_STATUS_CFG 0x1200 // old MAC_CSR12
771 #define PWR_PIN_CFG 0x1204 // old MAC_CSR12
772 #define AUTO_WAKEUP_CFG 0x1208 // old MAC_CSR10
774 // AUTO_WAKEUP_CFG: Manual power control / status register
777 typedef union _AUTO_WAKEUP_STRUC {
780 UINT32 EnableAutoWakeup:1; // 0:sleep, 1:awake
781 UINT32 NumofSleepingTbtt:7; // ForceWake has high privilege than PutToSleep when both set
782 UINT32 AutoLeadTime:8;
785 } AUTO_WAKEUP_STRUC, *PAUTO_WAKEUP_STRUC;
787 typedef union _AUTO_WAKEUP_STRUC {
789 UINT32 AutoLeadTime:8;
790 UINT32 NumofSleepingTbtt:7; // ForceWake has high privilege than PutToSleep when both set
791 UINT32 EnableAutoWakeup:1; // 0:sleep, 1:awake
795 } AUTO_WAKEUP_STRUC, *PAUTO_WAKEUP_STRUC;
798 // 4.3 MAC TX configuration registers (offset:0x1300)
801 #define EDCA_AC0_CFG 0x1300 //AC_TXOP_CSR0 0x3474
802 #define EDCA_AC1_CFG 0x1304
803 #define EDCA_AC2_CFG 0x1308
804 #define EDCA_AC3_CFG 0x130c
806 typedef union _EDCA_AC_CFG_STRUC {
809 UINT32 Cwmax:4; //unit power of 2
811 UINT32 Aifsn:4; // # of slot time
812 UINT32 AcTxop:8; // in unit of 32us
815 } EDCA_AC_CFG_STRUC, *PEDCA_AC_CFG_STRUC;
817 typedef union _EDCA_AC_CFG_STRUC {
819 UINT32 AcTxop:8; // in unit of 32us
820 UINT32 Aifsn:4; // # of slot time
822 UINT32 Cwmax:4; //unit power of 2
826 } EDCA_AC_CFG_STRUC, *PEDCA_AC_CFG_STRUC;
829 #define EDCA_TID_AC_MAP 0x1310
830 #define TX_PWR_CFG_0 0x1314
831 #define TX_PWR_CFG_1 0x1318
832 #define TX_PWR_CFG_2 0x131C
833 #define TX_PWR_CFG_3 0x1320
834 #define TX_PWR_CFG_4 0x1324
835 #define TX_PIN_CFG 0x1328
836 #define TX_BAND_CFG 0x132c // 0x1 use upper 20MHz. 0 juse lower 20MHz
837 #define TX_SW_CFG0 0x1330
838 #define TX_SW_CFG1 0x1334
839 #define TX_SW_CFG2 0x1338
840 #define TXOP_THRES_CFG 0x133c
841 #define TXOP_CTRL_CFG 0x1340
842 #define TX_RTS_CFG 0x1344
845 typedef union _TX_RTS_CFG_STRUC {
848 UINT32 RtsFbkEn:1; // enable rts rate fallback
849 UINT32 RtsThres:16; // unit:byte
850 UINT32 AutoRtsRetryLimit:8;
853 } TX_RTS_CFG_STRUC, *PTX_RTS_CFG_STRUC;
855 typedef union _TX_RTS_CFG_STRUC {
857 UINT32 AutoRtsRetryLimit:8;
858 UINT32 RtsThres:16; // unit:byte
859 UINT32 RtsFbkEn:1; // enable rts rate fallback
860 UINT32 rsv:7; // 1: HT non-STBC control frame enable
863 } TX_RTS_CFG_STRUC, *PTX_RTS_CFG_STRUC;
865 #define TX_TIMEOUT_CFG 0x1348
867 typedef union _TX_TIMEOUT_CFG_STRUC {
870 UINT32 TxopTimeout:8; //TXOP timeout value for TXOP truncation. It is recommended that (SLOT_TIME) > (TX_OP_TIMEOUT) > (RX_ACK_TIMEOUT)
871 UINT32 RxAckTimeout:8; // unit:slot. Used for TX precedure
872 UINT32 MpduLifeTime:4; // expiration time = 2^(9+MPDU LIFE TIME) us
876 } TX_TIMEOUT_CFG_STRUC, *PTX_TIMEOUT_CFG_STRUC;
878 typedef union _TX_TIMEOUT_CFG_STRUC {
881 UINT32 MpduLifeTime:4; // expiration time = 2^(9+MPDU LIFE TIME) us
882 UINT32 RxAckTimeout:8; // unit:slot. Used for TX precedure
883 UINT32 TxopTimeout:8; //TXOP timeout value for TXOP truncation. It is recommended that (SLOT_TIME) > (TX_OP_TIMEOUT) > (RX_ACK_TIMEOUT)
884 UINT32 rsv2:8; // 1: HT non-STBC control frame enable
887 } TX_TIMEOUT_CFG_STRUC, *PTX_TIMEOUT_CFG_STRUC;
889 #define TX_RTY_CFG 0x134c
891 typedef union PACKED _TX_RTY_CFG_STRUC {
894 UINT32 TxautoFBEnable:1; // Tx retry PHY rate auto fallback enable
895 UINT32 AggRtyMode:1; // Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer
896 UINT32 NonAggRtyMode:1; // Non-Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer
897 UINT32 LongRtyThre:12; // Long retry threshoold
898 UINT32 LongRtyLimit:8; //long retry limit
899 UINT32 ShortRtyLimit:8; // short retry limit
903 } TX_RTY_CFG_STRUC, *PTX_RTY_CFG_STRUC;
905 typedef union PACKED _TX_RTY_CFG_STRUC {
907 UINT32 ShortRtyLimit:8; // short retry limit
908 UINT32 LongRtyLimit:8; //long retry limit
909 UINT32 LongRtyThre:12; // Long retry threshoold
910 UINT32 NonAggRtyMode:1; // Non-Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer
911 UINT32 AggRtyMode:1; // Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer
912 UINT32 TxautoFBEnable:1; // Tx retry PHY rate auto fallback enable
913 UINT32 rsv:1; // 1: HT non-STBC control frame enable
916 } TX_RTY_CFG_STRUC, *PTX_RTY_CFG_STRUC;
918 #define TX_LINK_CFG 0x1350
920 typedef union PACKED _TX_LINK_CFG_STRUC {
922 UINT32 RemotMFS:8; //remote MCS feedback sequence number
923 UINT32 RemotMFB:8; // remote MCS feedback
925 UINT32 TxCFAckEn:1; // Piggyback CF-ACK enable
926 UINT32 TxRDGEn:1; // RDG TX enable
927 UINT32 TxMRQEn:1; // MCS request TX enable
928 UINT32 RemoteUMFSEnable:1; // remote unsolicit MFB enable. 0: not apply remote remote unsolicit (MFS=7)
929 UINT32 MFBEnable:1; // TX apply remote MFB 1:enable
930 UINT32 RemoteMFBLifeTime:8; //remote MFB life time. unit : 32us
933 } TX_LINK_CFG_STRUC, *PTX_LINK_CFG_STRUC;
935 typedef union PACKED _TX_LINK_CFG_STRUC {
937 UINT32 RemoteMFBLifeTime:8; //remote MFB life time. unit : 32us
938 UINT32 MFBEnable:1; // TX apply remote MFB 1:enable
939 UINT32 RemoteUMFSEnable:1; // remote unsolicit MFB enable. 0: not apply remote remote unsolicit (MFS=7)
940 UINT32 TxMRQEn:1; // MCS request TX enable
941 UINT32 TxRDGEn:1; // RDG TX enable
942 UINT32 TxCFAckEn:1; // Piggyback CF-ACK enable
944 UINT32 RemotMFB:8; // remote MCS feedback
945 UINT32 RemotMFS:8; //remote MCS feedback sequence number
948 } TX_LINK_CFG_STRUC, *PTX_LINK_CFG_STRUC;
950 #define HT_FBK_CFG0 0x1354
952 typedef union PACKED _HT_FBK_CFG0_STRUC {
964 } HT_FBK_CFG0_STRUC, *PHT_FBK_CFG0_STRUC;
966 typedef union PACKED _HT_FBK_CFG0_STRUC {
978 } HT_FBK_CFG0_STRUC, *PHT_FBK_CFG0_STRUC;
980 #define HT_FBK_CFG1 0x1358
982 typedef union _HT_FBK_CFG1_STRUC {
994 } HT_FBK_CFG1_STRUC, *PHT_FBK_CFG1_STRUC;
996 typedef union _HT_FBK_CFG1_STRUC {
1000 UINT32 HTMCS10FBK:4;
1001 UINT32 HTMCS11FBK:4;
1002 UINT32 HTMCS12FBK:4;
1003 UINT32 HTMCS13FBK:4;
1004 UINT32 HTMCS14FBK:4;
1005 UINT32 HTMCS15FBK:4;
1008 } HT_FBK_CFG1_STRUC, *PHT_FBK_CFG1_STRUC;
1010 #define LG_FBK_CFG0 0x135c
1011 #ifdef RT_BIG_ENDIAN
1012 typedef union _LG_FBK_CFG0_STRUC {
1014 UINT32 OFDMMCS7FBK:4; //initial value is 6
1015 UINT32 OFDMMCS6FBK:4; //initial value is 5
1016 UINT32 OFDMMCS5FBK:4; //initial value is 4
1017 UINT32 OFDMMCS4FBK:4; //initial value is 3
1018 UINT32 OFDMMCS3FBK:4; //initial value is 2
1019 UINT32 OFDMMCS2FBK:4; //initial value is 1
1020 UINT32 OFDMMCS1FBK:4; //initial value is 0
1021 UINT32 OFDMMCS0FBK:4; //initial value is 0
1024 } LG_FBK_CFG0_STRUC, *PLG_FBK_CFG0_STRUC;
1026 typedef union _LG_FBK_CFG0_STRUC {
1028 UINT32 OFDMMCS0FBK:4; //initial value is 0
1029 UINT32 OFDMMCS1FBK:4; //initial value is 0
1030 UINT32 OFDMMCS2FBK:4; //initial value is 1
1031 UINT32 OFDMMCS3FBK:4; //initial value is 2
1032 UINT32 OFDMMCS4FBK:4; //initial value is 3
1033 UINT32 OFDMMCS5FBK:4; //initial value is 4
1034 UINT32 OFDMMCS6FBK:4; //initial value is 5
1035 UINT32 OFDMMCS7FBK:4; //initial value is 6
1038 } LG_FBK_CFG0_STRUC, *PLG_FBK_CFG0_STRUC;
1040 #define LG_FBK_CFG1 0x1360
1041 #ifdef RT_BIG_ENDIAN
1042 typedef union _LG_FBK_CFG1_STRUC {
1045 UINT32 CCKMCS3FBK:4; //initial value is 2
1046 UINT32 CCKMCS2FBK:4; //initial value is 1
1047 UINT32 CCKMCS1FBK:4; //initial value is 0
1048 UINT32 CCKMCS0FBK:4; //initial value is 0
1051 } LG_FBK_CFG1_STRUC, *PLG_FBK_CFG1_STRUC;
1053 typedef union _LG_FBK_CFG1_STRUC {
1055 UINT32 CCKMCS0FBK:4; //initial value is 0
1056 UINT32 CCKMCS1FBK:4; //initial value is 0
1057 UINT32 CCKMCS2FBK:4; //initial value is 1
1058 UINT32 CCKMCS3FBK:4; //initial value is 2
1062 } LG_FBK_CFG1_STRUC, *PLG_FBK_CFG1_STRUC;
1065 //=======================================================
1066 //================ Protection Paramater================================
1067 //=======================================================
1068 #define CCK_PROT_CFG 0x1364 //CCK Protection
1069 #define ASIC_SHORTNAV 1
1070 #define ASIC_LONGNAV 2
1073 #ifdef RT_BIG_ENDIAN
1074 typedef union _PROT_CFG_STRUC {
1077 UINT32 RTSThEn:1; //RTS threshold enable on CCK TX
1078 UINT32 TxopAllowGF40:1; //CCK TXOP allowance.0:disallow.
1079 UINT32 TxopAllowGF20:1; //CCK TXOP allowance.0:disallow.
1080 UINT32 TxopAllowMM40:1; //CCK TXOP allowance.0:disallow.
1081 UINT32 TxopAllowMM20:1; //CCK TXOP allowance. 0:disallow.
1082 UINT32 TxopAllowOfdm:1; //CCK TXOP allowance.0:disallow.
1083 UINT32 TxopAllowCck:1; //CCK TXOP allowance.0:disallow.
1084 UINT32 ProtectNav:2; //TXOP protection type for CCK TX. 0:None, 1:ShortNAVprotect, 2:LongNAVProtect, 3:rsv
1085 UINT32 ProtectCtrl:2; //Protection control frame type for CCK TX. 1:RTS/CTS, 2:CTS-to-self, 0:None, 3:rsv
1086 UINT32 ProtectRate:16; //Protection control frame rate for CCK TX(RTS/CTS/CFEnd).
1089 } PROT_CFG_STRUC, *PPROT_CFG_STRUC;
1091 typedef union _PROT_CFG_STRUC {
1093 UINT32 ProtectRate:16; //Protection control frame rate for CCK TX(RTS/CTS/CFEnd).
1094 UINT32 ProtectCtrl:2; //Protection control frame type for CCK TX. 1:RTS/CTS, 2:CTS-to-self, 0:None, 3:rsv
1095 UINT32 ProtectNav:2; //TXOP protection type for CCK TX. 0:None, 1:ShortNAVprotect, 2:LongNAVProtect, 3:rsv
1096 UINT32 TxopAllowCck:1; //CCK TXOP allowance.0:disallow.
1097 UINT32 TxopAllowOfdm:1; //CCK TXOP allowance.0:disallow.
1098 UINT32 TxopAllowMM20:1; //CCK TXOP allowance. 0:disallow.
1099 UINT32 TxopAllowMM40:1; //CCK TXOP allowance.0:disallow.
1100 UINT32 TxopAllowGF20:1; //CCK TXOP allowance.0:disallow.
1101 UINT32 TxopAllowGF40:1; //CCK TXOP allowance.0:disallow.
1102 UINT32 RTSThEn:1; //RTS threshold enable on CCK TX
1106 } PROT_CFG_STRUC, *PPROT_CFG_STRUC;
1109 #define OFDM_PROT_CFG 0x1368 //OFDM Protection
1110 #define MM20_PROT_CFG 0x136C //MM20 Protection
1111 #define MM40_PROT_CFG 0x1370 //MM40 Protection
1112 #define GF20_PROT_CFG 0x1374 //GF20 Protection
1113 #define GF40_PROT_CFG 0x1378 //GR40 Protection
1114 #define EXP_CTS_TIME 0x137C //
1115 #define EXP_ACK_TIME 0x1380 //
1118 // 4.4 MAC RX configuration registers (offset:0x1400)
1120 #define RX_FILTR_CFG 0x1400 //TXRX_CSR0
1121 #define AUTO_RSP_CFG 0x1404 //TXRX_CSR4
1123 // TXRX_CSR4: Auto-Responder/
1125 #ifdef RT_BIG_ENDIAN
1126 typedef union _AUTO_RSP_CFG_STRUC {
1129 UINT32 AckCtsPsmBit:1; // Power bit value in conrtrol frame
1130 UINT32 DualCTSEn:1; // Power bit value in conrtrol frame
1131 UINT32 rsv:1; // Power bit value in conrtrol frame
1132 UINT32 AutoResponderPreamble:1; // 0:long, 1:short preamble
1133 UINT32 CTS40MRef:1; // Response CTS 40MHz duplicate mode
1134 UINT32 CTS40MMode:1; // Response CTS 40MHz duplicate mode
1135 UINT32 BACAckPolicyEnable:1; // 0:long, 1:short preamble
1136 UINT32 AutoResponderEnable:1;
1139 } AUTO_RSP_CFG_STRUC, *PAUTO_RSP_CFG_STRUC;
1141 typedef union _AUTO_RSP_CFG_STRUC {
1143 UINT32 AutoResponderEnable:1;
1144 UINT32 BACAckPolicyEnable:1; // 0:long, 1:short preamble
1145 UINT32 CTS40MMode:1; // Response CTS 40MHz duplicate mode
1146 UINT32 CTS40MRef:1; // Response CTS 40MHz duplicate mode
1147 UINT32 AutoResponderPreamble:1; // 0:long, 1:short preamble
1148 UINT32 rsv:1; // Power bit value in conrtrol frame
1149 UINT32 DualCTSEn:1; // Power bit value in conrtrol frame
1150 UINT32 AckCtsPsmBit:1; // Power bit value in conrtrol frame
1154 } AUTO_RSP_CFG_STRUC, *PAUTO_RSP_CFG_STRUC;
1157 #define LEGACY_BASIC_RATE 0x1408 // TXRX_CSR5 0x3054
1158 #define HT_BASIC_RATE 0x140c
1159 #define HT_CTRL_CFG 0x1410
1160 #define SIFS_COST_CFG 0x1414
1161 #define RX_PARSER_CFG 0x1418 //Set NAV for all received frames
1164 // 4.5 MAC Security configuration (offset:0x1500)
1166 #define TX_SEC_CNT0 0x1500 //
1167 #define RX_SEC_CNT0 0x1504 //
1168 #define CCMP_FC_MUTE 0x1508 //
1170 // 4.6 HCCA/PSMP (offset:0x1600)
1172 #define TXOP_HLDR_ADDR0 0x1600
1173 #define TXOP_HLDR_ADDR1 0x1604
1174 #define TXOP_HLDR_ET 0x1608
1175 #define QOS_CFPOLL_RA_DW0 0x160c
1176 #define QOS_CFPOLL_A1_DW1 0x1610
1177 #define QOS_CFPOLL_QC 0x1614
1179 // 4.7 MAC Statistis registers (offset:0x1700)
1181 #define RX_STA_CNT0 0x1700 //
1182 #define RX_STA_CNT1 0x1704 //
1183 #define RX_STA_CNT2 0x1708 //
1186 // RX_STA_CNT0_STRUC: RX PLCP error count & RX CRC error count
1188 #ifdef RT_BIG_ENDIAN
1189 typedef union _RX_STA_CNT0_STRUC {
1195 } RX_STA_CNT0_STRUC, *PRX_STA_CNT0_STRUC;
1197 typedef union _RX_STA_CNT0_STRUC {
1203 } RX_STA_CNT0_STRUC, *PRX_STA_CNT0_STRUC;
1207 // RX_STA_CNT1_STRUC: RX False CCA count & RX LONG frame count
1209 #ifdef RT_BIG_ENDIAN
1210 typedef union _RX_STA_CNT1_STRUC {
1216 } RX_STA_CNT1_STRUC, *PRX_STA_CNT1_STRUC;
1218 typedef union _RX_STA_CNT1_STRUC {
1224 } RX_STA_CNT1_STRUC, *PRX_STA_CNT1_STRUC;
1228 // RX_STA_CNT2_STRUC:
1230 #ifdef RT_BIG_ENDIAN
1231 typedef union _RX_STA_CNT2_STRUC {
1233 USHORT RxFifoOverflowCount;
1234 USHORT RxDupliCount;
1237 } RX_STA_CNT2_STRUC, *PRX_STA_CNT2_STRUC;
1239 typedef union _RX_STA_CNT2_STRUC {
1241 USHORT RxDupliCount;
1242 USHORT RxFifoOverflowCount;
1245 } RX_STA_CNT2_STRUC, *PRX_STA_CNT2_STRUC;
1247 #define TX_STA_CNT0 0x170C //
1249 // STA_CSR3: TX Beacon count
1251 #ifdef RT_BIG_ENDIAN
1252 typedef union _TX_STA_CNT0_STRUC {
1254 USHORT TxBeaconCount;
1258 } TX_STA_CNT0_STRUC, *PTX_STA_CNT0_STRUC;
1260 typedef union _TX_STA_CNT0_STRUC {
1263 USHORT TxBeaconCount;
1266 } TX_STA_CNT0_STRUC, *PTX_STA_CNT0_STRUC;
1268 #define TX_STA_CNT1 0x1710 //
1270 // TX_STA_CNT1: TX tx count
1272 #ifdef RT_BIG_ENDIAN
1273 typedef union _TX_STA_CNT1_STRUC {
1275 USHORT TxRetransmit;
1279 } TX_STA_CNT1_STRUC, *PTX_STA_CNT1_STRUC;
1281 typedef union _TX_STA_CNT1_STRUC {
1284 USHORT TxRetransmit;
1287 } TX_STA_CNT1_STRUC, *PTX_STA_CNT1_STRUC;
1289 #define TX_STA_CNT2 0x1714 //
1291 // TX_STA_CNT2: TX tx count
1293 #ifdef RT_BIG_ENDIAN
1294 typedef union _TX_STA_CNT2_STRUC {
1296 USHORT TxUnderFlowCount;
1297 USHORT TxZeroLenCount;
1300 } TX_STA_CNT2_STRUC, *PTX_STA_CNT2_STRUC;
1302 typedef union _TX_STA_CNT2_STRUC {
1304 USHORT TxZeroLenCount;
1305 USHORT TxUnderFlowCount;
1308 } TX_STA_CNT2_STRUC, *PTX_STA_CNT2_STRUC;
1310 #define TX_STA_FIFO 0x1718 //
1312 // TX_STA_FIFO_STRUC: TX Result for specific PID status fifo register
1314 #ifdef RT_BIG_ENDIAN
1315 typedef union PACKED _TX_STA_FIFO_STRUC {
1318 UINT32 TxBF:1; // 3*3
1319 UINT32 SuccessRate:13; //include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16.
1320 // UINT32 SuccessRate:16; //include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16.
1321 UINT32 wcid:8; //wireless client index
1322 UINT32 TxAckRequired:1; // ack required
1323 UINT32 TxAggre:1; // Tx is aggregated
1324 UINT32 TxSuccess:1; // Tx success. whether success or not
1326 UINT32 bValid:1; // 1:This register contains a valid TX result
1329 } TX_STA_FIFO_STRUC, *PTX_STA_FIFO_STRUC;
1331 typedef union PACKED _TX_STA_FIFO_STRUC {
1333 UINT32 bValid:1; // 1:This register contains a valid TX result
1335 UINT32 TxSuccess:1; // Tx No retry success
1336 UINT32 TxAggre:1; // Tx Retry Success
1337 UINT32 TxAckRequired:1; // Tx fail
1338 UINT32 wcid:8; //wireless client index
1339 // UINT32 SuccessRate:16; //include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16.
1340 UINT32 SuccessRate:13; //include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16.
1345 } TX_STA_FIFO_STRUC, *PTX_STA_FIFO_STRUC;
1348 #define TX_AGG_CNT 0x171c
1349 #ifdef RT_BIG_ENDIAN
1350 typedef union _TX_AGG_CNT_STRUC {
1353 USHORT NonAggTxCount;
1356 } TX_AGG_CNT_STRUC, *PTX_AGG_CNT_STRUC;
1358 typedef union _TX_AGG_CNT_STRUC {
1360 USHORT NonAggTxCount;
1364 } TX_AGG_CNT_STRUC, *PTX_AGG_CNT_STRUC;
1367 #define TX_AGG_CNT0 0x1720
1368 #ifdef RT_BIG_ENDIAN
1369 typedef union _TX_AGG_CNT0_STRUC {
1371 USHORT AggSize2Count;
1372 USHORT AggSize1Count;
1375 } TX_AGG_CNT0_STRUC, *PTX_AGG_CNT0_STRUC;
1377 typedef union _TX_AGG_CNT0_STRUC {
1379 USHORT AggSize1Count;
1380 USHORT AggSize2Count;
1383 } TX_AGG_CNT0_STRUC, *PTX_AGG_CNT0_STRUC;
1386 #define TX_AGG_CNT1 0x1724
1387 #ifdef RT_BIG_ENDIAN
1388 typedef union _TX_AGG_CNT1_STRUC {
1390 USHORT AggSize4Count;
1391 USHORT AggSize3Count;
1394 } TX_AGG_CNT1_STRUC, *PTX_AGG_CNT1_STRUC;
1396 typedef union _TX_AGG_CNT1_STRUC {
1398 USHORT AggSize3Count;
1399 USHORT AggSize4Count;
1402 } TX_AGG_CNT1_STRUC, *PTX_AGG_CNT1_STRUC;
1404 #define TX_AGG_CNT2 0x1728
1405 #ifdef RT_BIG_ENDIAN
1406 typedef union _TX_AGG_CNT2_STRUC {
1408 USHORT AggSize6Count;
1409 USHORT AggSize5Count;
1412 } TX_AGG_CNT2_STRUC, *PTX_AGG_CNT2_STRUC;
1414 typedef union _TX_AGG_CNT2_STRUC {
1416 USHORT AggSize5Count;
1417 USHORT AggSize6Count;
1420 } TX_AGG_CNT2_STRUC, *PTX_AGG_CNT2_STRUC;
1423 #define TX_AGG_CNT3 0x172c
1424 #ifdef RT_BIG_ENDIAN
1425 typedef union _TX_AGG_CNT3_STRUC {
1427 USHORT AggSize8Count;
1428 USHORT AggSize7Count;
1431 } TX_AGG_CNT3_STRUC, *PTX_AGG_CNT3_STRUC;
1433 typedef union _TX_AGG_CNT3_STRUC {
1435 USHORT AggSize7Count;
1436 USHORT AggSize8Count;
1439 } TX_AGG_CNT3_STRUC, *PTX_AGG_CNT3_STRUC;
1442 #define TX_AGG_CNT4 0x1730
1443 #ifdef RT_BIG_ENDIAN
1444 typedef union _TX_AGG_CNT4_STRUC {
1446 USHORT AggSize10Count;
1447 USHORT AggSize9Count;
1450 } TX_AGG_CNT4_STRUC, *PTX_AGG_CNT4_STRUC;
1452 typedef union _TX_AGG_CNT4_STRUC {
1454 USHORT AggSize9Count;
1455 USHORT AggSize10Count;
1458 } TX_AGG_CNT4_STRUC, *PTX_AGG_CNT4_STRUC;
1460 #define TX_AGG_CNT5 0x1734
1461 #ifdef RT_BIG_ENDIAN
1462 typedef union _TX_AGG_CNT5_STRUC {
1464 USHORT AggSize12Count;
1465 USHORT AggSize11Count;
1468 } TX_AGG_CNT5_STRUC, *PTX_AGG_CNT5_STRUC;
1470 typedef union _TX_AGG_CNT5_STRUC {
1472 USHORT AggSize11Count;
1473 USHORT AggSize12Count;
1476 } TX_AGG_CNT5_STRUC, *PTX_AGG_CNT5_STRUC;
1478 #define TX_AGG_CNT6 0x1738
1479 #ifdef RT_BIG_ENDIAN
1480 typedef union _TX_AGG_CNT6_STRUC {
1482 USHORT AggSize14Count;
1483 USHORT AggSize13Count;
1486 } TX_AGG_CNT6_STRUC, *PTX_AGG_CNT6_STRUC;
1488 typedef union _TX_AGG_CNT6_STRUC {
1490 USHORT AggSize13Count;
1491 USHORT AggSize14Count;
1494 } TX_AGG_CNT6_STRUC, *PTX_AGG_CNT6_STRUC;
1496 #define TX_AGG_CNT7 0x173c
1497 #ifdef RT_BIG_ENDIAN
1498 typedef union _TX_AGG_CNT7_STRUC {
1500 USHORT AggSize16Count;
1501 USHORT AggSize15Count;
1504 } TX_AGG_CNT7_STRUC, *PTX_AGG_CNT7_STRUC;
1506 typedef union _TX_AGG_CNT7_STRUC {
1508 USHORT AggSize15Count;
1509 USHORT AggSize16Count;
1512 } TX_AGG_CNT7_STRUC, *PTX_AGG_CNT7_STRUC;
1514 #define MPDU_DENSITY_CNT 0x1740
1515 #ifdef RT_BIG_ENDIAN
1516 typedef union _MPDU_DEN_CNT_STRUC {
1518 USHORT RXZeroDelCount; //RX zero length delimiter count
1519 USHORT TXZeroDelCount; //TX zero length delimiter count
1522 } MPDU_DEN_CNT_STRUC, *PMPDU_DEN_CNT_STRUC;
1524 typedef union _MPDU_DEN_CNT_STRUC {
1526 USHORT TXZeroDelCount; //TX zero length delimiter count
1527 USHORT RXZeroDelCount; //RX zero length delimiter count
1530 } MPDU_DEN_CNT_STRUC, *PMPDU_DEN_CNT_STRUC;
1533 // TXRX control registers - base address 0x3000
1535 // rt2860b UNKNOWN reg use R/O Reg Addr 0x77d0 first..
1536 #define TXRX_CSR1 0x77d0
1539 // Security key table memory, base address = 0x1000
1541 #define MAC_WCID_BASE 0x1800 //8-bytes(use only 6-bytes) * 256 entry =
1542 #define HW_WCID_ENTRY_SIZE 8
1543 #define PAIRWISE_KEY_TABLE_BASE 0x4000 // 32-byte * 256-entry = -byte
1544 #define HW_KEY_ENTRY_SIZE 0x20
1545 #define PAIRWISE_IVEIV_TABLE_BASE 0x6000 // 8-byte * 256-entry = -byte
1546 #define MAC_IVEIV_TABLE_BASE 0x6000 // 8-byte * 256-entry = -byte
1547 #define HW_IVEIV_ENTRY_SIZE 8
1548 #define MAC_WCID_ATTRIBUTE_BASE 0x6800 // 4-byte * 256-entry = -byte
1549 #define HW_WCID_ATTRI_SIZE 4
1550 #define WCID_RESERVED 0x6bfc
1551 #define SHARED_KEY_TABLE_BASE 0x6c00 // 32-byte * 16-entry = 512-byte
1552 #define SHARED_KEY_MODE_BASE 0x7000 // 32-byte * 16-entry = 512-byte
1553 #define HW_SHARED_KEY_MODE_SIZE 4
1554 #define SHAREDKEYTABLE 0
1555 #define PAIRWISEKEYTABLE 1
1558 #ifdef RT_BIG_ENDIAN
1559 typedef union _SHAREDKEY_MODE_STRUC {
1562 UINT32 Bss1Key3CipherAlg:3;
1564 UINT32 Bss1Key2CipherAlg:3;
1566 UINT32 Bss1Key1CipherAlg:3;
1568 UINT32 Bss1Key0CipherAlg:3;
1570 UINT32 Bss0Key3CipherAlg:3;
1572 UINT32 Bss0Key2CipherAlg:3;
1574 UINT32 Bss0Key1CipherAlg:3;
1576 UINT32 Bss0Key0CipherAlg:3;
1579 } SHAREDKEY_MODE_STRUC, *PSHAREDKEY_MODE_STRUC;
1581 typedef union _SHAREDKEY_MODE_STRUC {
1583 UINT32 Bss0Key0CipherAlg:3;
1585 UINT32 Bss0Key1CipherAlg:3;
1587 UINT32 Bss0Key2CipherAlg:3;
1589 UINT32 Bss0Key3CipherAlg:3;
1591 UINT32 Bss1Key0CipherAlg:3;
1593 UINT32 Bss1Key1CipherAlg:3;
1595 UINT32 Bss1Key2CipherAlg:3;
1597 UINT32 Bss1Key3CipherAlg:3;
1601 } SHAREDKEY_MODE_STRUC, *PSHAREDKEY_MODE_STRUC;
1603 // 64-entry for pairwise key table
1604 typedef struct _HW_WCID_ENTRY { // 8-byte per entry
1607 } HW_WCID_ENTRY, PHW_WCID_ENTRY;
1612 // Other on-chip shared memory space, base = 0x2000
1615 // CIS space - base address = 0x2000
1616 #define HW_CIS_BASE 0x2000
1618 // Carrier-sense CTS frame base address. It's where mac stores carrier-sense frame for carrier-sense function.
1619 #define HW_CS_CTS_BASE 0x7700
1620 // DFS CTS frame base address. It's where mac stores CTS frame for DFS.
1621 #define HW_DFS_CTS_BASE 0x7780
1622 #define HW_CTS_FRAME_SIZE 0x80
1624 // 2004-11-08 john - since NULL frame won't be that long (256 byte). We steal 16 tail bytes
1625 // to save debugging settings
1626 #define HW_DEBUG_SETTING_BASE 0x77f0 // 0x77f0~0x77ff total 16 bytes
1627 #define HW_DEBUG_SETTING_BASE2 0x7770 // 0x77f0~0x77ff total 16 bytes
1629 // In order to support maximum 8 MBSS and its maximum length is 512 for each beacon
1630 // Three section discontinue memory segments will be used.
1631 // 1. The original region for BCN 0~3
1632 // 2. Extract memory from FCE table for BCN 4~5
1633 // 3. Extract memory from Pair-wise key table for BCN 6~7
1634 // It occupied those memory of wcid 238~253 for BCN 6
1635 // and wcid 222~237 for BCN 7
1636 #define HW_BEACON_MAX_SIZE 0x1000 /* unit: byte */
1637 #define HW_BEACON_BASE0 0x7800
1638 #define HW_BEACON_BASE1 0x7A00
1639 #define HW_BEACON_BASE2 0x7C00
1640 #define HW_BEACON_BASE3 0x7E00
1641 #define HW_BEACON_BASE4 0x7200
1642 #define HW_BEACON_BASE5 0x7400
1643 #define HW_BEACON_BASE6 0x5DC0
1644 #define HW_BEACON_BASE7 0x5BC0
1646 #define HW_BEACON_MAX_COUNT 8
1647 #define HW_BEACON_OFFSET 0x0200
1648 #define HW_BEACON_CONTENT_LEN (HW_BEACON_OFFSET - TXWI_SIZE)
1650 // HOST-MCU shared memory - base address = 0x2100
1651 #define HOST_CMD_CSR 0x404
1652 #define H2M_MAILBOX_CSR 0x7010
1653 #define H2M_MAILBOX_CID 0x7014
1654 #define H2M_MAILBOX_STATUS 0x701c
1655 #define H2M_INT_SRC 0x7024
1656 #define H2M_BBP_AGENT 0x7028
1657 #define M2H_CMD_DONE_CSR 0x000c
1658 #define MCU_TXOP_ARRAY_BASE 0x000c // TODO: to be provided by Albert
1659 #define MCU_TXOP_ENTRY_SIZE 32 // TODO: to be provided by Albert
1660 #define MAX_NUM_OF_TXOP_ENTRY 16 // TODO: must be same with 8051 firmware
1661 #define MCU_MBOX_VERSION 0x01 // TODO: to be confirmed by Albert
1662 #define MCU_MBOX_VERSION_OFFSET 5 // TODO: to be provided by Albert
1665 // Host DMA registers - base address 0x200 . TX0-3=EDCAQid0-3, TX4=HCCA, TX5=MGMT,
1668 // DMA RING DESCRIPTOR
1670 #define E2PROM_CSR 0x0004
1671 #define IO_CNTL_CSR 0x77d0
1673 // 8051 firmware image for RT2860 - base address = 0x4000
1674 #define FIRMWARE_IMAGE_BASE 0x2000
1675 #define MAX_FIRMWARE_IMAGE_SIZE 0x2000 // 8kbyte
1678 // ================================================================
1679 // Tx / Rx / Mgmt ring descriptor definition
1680 // ================================================================
1682 // the following PID values are used to mark outgoing frame type in TXD->PID so that
1683 // proper TX statistics can be collected based on these categories
1684 // b3-2 of PID field -
1685 #define PID_MGMT 0x05
1686 #define PID_BEACON 0x0c
1687 #define PID_DATA_NORMALUCAST 0x02
1688 #define PID_DATA_AMPDU 0x04
1689 #define PID_DATA_NO_ACK 0x08
1690 #define PID_DATA_NOT_NORM_ACK 0x03
1691 // value domain of pTxD->HostQId (4-bit: 0~15)
1692 #define QID_AC_BK 1 // meet ACI definition in 802.11e
1693 #define QID_AC_BE 0 // meet ACI definition in 802.11e
1697 #define NUM_OF_TX_RING 5
1700 #define QID_OTHER 15
1703 // ------------------------------------------------------
1704 // BBP & RF definition
1705 // ------------------------------------------------------
1742 #define BBP_R0 0 // version
1743 #define BBP_R1 1 // TSSI
1744 #define BBP_R2 2 // TX configure
1749 #define BBP_R14 14 // RX configure
1751 #define BBP_R17 17 // RX sensibility
1757 #define BBP_R49 49 //TSSI
1762 #define BBP_R62 62 // Rx SQ0 Threshold HIGH
1770 #define BBP_R70 70 // Rx AGC SQ CCK Xcorr threshold
1781 #define BBP_R94 94 // Tx Gain Control
1782 #define BBP_R103 103
1783 #define BBP_R105 105
1784 #define BBP_R113 113
1785 #define BBP_R114 114
1786 #define BBP_R115 115
1787 #define BBP_R116 116
1788 #define BBP_R117 117
1789 #define BBP_R118 118
1790 #define BBP_R119 119
1791 #define BBP_R120 120
1792 #define BBP_R121 121
1793 #define BBP_R122 122
1794 #define BBP_R123 123
1797 #define BBPR94_DEFAULT 0x06 // Add 1 value will gain 1db
1799 #define RSSI_FOR_VERY_LOW_SENSIBILITY -35
1800 #define RSSI_FOR_LOW_SENSIBILITY -58
1801 #define RSSI_FOR_MID_LOW_SENSIBILITY -80
1802 #define RSSI_FOR_MID_SENSIBILITY -90
1804 //-------------------------------------------------------------------------
1805 // EEPROM definition
1806 //-------------------------------------------------------------------------
1813 #define EEPROM_WRITE_OPCODE 0x05
1814 #define EEPROM_READ_OPCODE 0x06
1815 #define EEPROM_EWDS_OPCODE 0x10
1816 #define EEPROM_EWEN_OPCODE 0x13
1818 #define NUM_EEPROM_BBP_PARMS 19 // Include NIC Config 0, 1, CR, TX ALC step, BBPs
1819 #define NUM_EEPROM_TX_G_PARMS 7
1820 #define EEPROM_NIC1_OFFSET 0x34 // The address is from NIC config 0, not BBP register ID
1821 #define EEPROM_NIC2_OFFSET 0x36 // The address is from NIC config 0, not BBP register ID
1822 #define EEPROM_BBP_BASE_OFFSET 0xf0 // The address is from NIC config 0, not BBP register ID
1823 #define EEPROM_G_TX_PWR_OFFSET 0x52
1824 #define EEPROM_G_TX2_PWR_OFFSET 0x60
1825 #define EEPROM_LED1_OFFSET 0x3c
1826 #define EEPROM_LED2_OFFSET 0x3e
1827 #define EEPROM_LED3_OFFSET 0x40
1828 #define EEPROM_LNA_OFFSET 0x44
1829 #define EEPROM_RSSI_BG_OFFSET 0x46
1830 #define EEPROM_RSSI_A_OFFSET 0x4a
1831 #define EEPROM_DEFINE_MAX_TXPWR 0x4e
1832 #define EEPROM_TXPOWER_BYRATE_20MHZ_2_4G 0xde // 20MHZ 2.4G tx power.
1833 #define EEPROM_TXPOWER_BYRATE_40MHZ_2_4G 0xee // 40MHZ 2.4G tx power.
1834 #define EEPROM_TXPOWER_BYRATE_20MHZ_5G 0xfa // 20MHZ 5G tx power.
1835 #define EEPROM_TXPOWER_BYRATE_40MHZ_5G 0x10a // 40MHZ 5G tx power.
1836 #define EEPROM_A_TX_PWR_OFFSET 0x78
1837 #define EEPROM_A_TX2_PWR_OFFSET 0xa6
1838 #define EEPROM_VERSION_OFFSET 0x02
1839 #define EEPROM_FREQ_OFFSET 0x3a
1840 #define EEPROM_TXPOWER_BYRATE 0xde // 20MHZ power.
1841 #define EEPROM_TXPOWER_DELTA 0x50 // 20MHZ AND 40 MHZ use different power. This is delta in 40MHZ.
1842 #define VALID_EEPROM_VERSION 1
1844 // PairKeyMode definition
1845 #define PKMODE_NONE 0
1846 #define PKMODE_WEP64 1
1847 #define PKMODE_WEP128 2
1848 #define PKMODE_TKIP 3
1849 #define PKMODE_AES 4
1850 #define PKMODE_CKIP64 5
1851 #define PKMODE_CKIP128 6
1852 #define PKMODE_TKIP_NO_MIC 7 // MIC appended by driver: not a valid value in hardware key table
1854 // =================================================================================
1856 // =================================================================================
1857 //7.1 WCID ENTRY format : 8bytes
1858 typedef struct _WCID_ENTRY_STRUC {
1859 UCHAR RXBABitmap7; // bit0 for TID8, bit7 for TID 15
1860 UCHAR RXBABitmap0; // bit0 for TID0, bit7 for TID 7
1861 UCHAR MAC[6]; // 0 for shared key table. 1 for pairwise key table
1862 } WCID_ENTRY_STRUC, *PWCID_ENTRY_STRUC;
1864 //8.1.1 SECURITY KEY format : 8DW
1865 // 32-byte per entry, total 16-entry for shared key table, 64-entry for pairwise key table
1866 typedef struct _HW_KEY_ENTRY { // 32-byte per entry
1870 } HW_KEY_ENTRY, *PHW_KEY_ENTRY;
1872 //8.1.2 IV/EIV format : 2DW
1874 //8.1.3 RX attribute entry format : 1DW
1875 #ifdef RT_BIG_ENDIAN
1876 typedef struct _MAC_ATTRIBUTE_STRUC {
1879 UINT32 BSSIDIdx:3; //multipleBSS index for the WCID
1880 UINT32 PairKeyMode:3;
1881 UINT32 KeyTab:1; // 0 for shared key table. 1 for pairwise key table
1882 } MAC_ATTRIBUTE_STRUC, *PMAC_ATTRIBUTE_STRUC;
1884 typedef struct _MAC_ATTRIBUTE_STRUC {
1885 UINT32 KeyTab:1; // 0 for shared key table. 1 for pairwise key table
1886 UINT32 PairKeyMode:3;
1887 UINT32 BSSIDIdx:3; //multipleBSS index for the WCID
1890 } MAC_ATTRIBUTE_STRUC, *PMAC_ATTRIBUTE_STRUC;
1894 // =================================================================================
1895 // TX / RX ring descriptor format
1896 // =================================================================================
1898 // the first 24-byte in TXD is called TXINFO and will be DMAed to MAC block through TXFIFO.
1899 // MAC block use this TXINFO to control the transmission behavior of this frame.
1905 // TX descriptor format, Tx ring, Mgmt Ring
1907 #ifdef RT_BIG_ENDIAN
1908 typedef struct PACKED _TXD_STRUC {
1925 UINT32 QSEL:2; // select on-chip FIFO ID for 2nd-stage output scheduler.0:MGMT, 1:HCCA 2:EDCA
1926 UINT32 WIV:1; // Wireless Info Valid. 1 if Driver already fill WI, o if DMA needs to copy WI to correctposition
1928 } TXD_STRUC, *PTXD_STRUC;
1930 typedef struct PACKED _TXD_STRUC {
1944 UINT32 WIV:1; // Wireless Info Valid. 1 if Driver already fill WI, o if DMA needs to copy WI to correctposition
1945 UINT32 QSEL:2; // select on-chip FIFO ID for 2nd-stage output scheduler.0:MGMT, 1:HCCA 2:EDCA
1950 } TXD_STRUC, *PTXD_STRUC;
1955 // TXD Wireless Information format for Tx ring and Mgmt Ring
1957 //txop : for txop mode
1958 // 0:txop for the MPDU frame will be handles by ASIC by register
1959 // 1/2/3:the MPDU frame is send after PIFS/backoff/SIFS
1960 #ifdef RT_BIG_ENDIAN
1961 typedef struct PACKED _TXWI_STRUC {
1964 UINT32 TxBF:1; // 3*3
1967 UINT32 STBC:2; //channel bandwidth 20MHz or 40 MHz
1969 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1973 UINT32 txop:2; //tx back off mode 0:HT TXOP rule , 1:PIFS TX ,2:Backoff, 3:sifs only when previous frame exchange is successful.
1974 UINT32 MpduDensity:3;
1979 UINT32 MIMOps:1; // the remote peer is in dynamic MIMO-PS mode
1980 UINT32 FRAG:1; // 1 to inform TKIP engine this is a fragment.
1983 UINT32 MPDUtotalByteCount:12;
1984 UINT32 WirelessCliID:8;
1992 } TXWI_STRUC, *PTXWI_STRUC;
1994 typedef struct PACKED _TXWI_STRUC {
1996 UINT32 FRAG:1; // 1 to inform TKIP engine this is a fragment.
1997 UINT32 MIMOps:1; // the remote peer is in dynamic MIMO-PS mode
2002 UINT32 MpduDensity:3;
2003 UINT32 txop:2; //FOR "THIS" frame. 0:HT TXOP rule , 1:PIFS TX ,2:Backoff, 3:sifs only when previous frame exchange is successful.
2007 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
2009 UINT32 STBC:2; // 1: STBC support MCS =0-7, 2,3 : RESERVE
2012 UINT32 TxBF:1; // 3*3
2018 UINT32 WirelessCliID:8;
2019 UINT32 MPDUtotalByteCount:12;
2025 } TXWI_STRUC, *PTXWI_STRUC;
2028 // Rx descriptor format, Rx Ring
2030 #ifdef RT_BIG_ENDIAN
2031 typedef struct PACKED _RXD_STRUC {
2044 UINT32 PlcpRssil:1;// To be moved
2045 UINT32 PlcpSignal:1; // To be moved
2046 UINT32 Decrypted:1; // this frame is being decrypted.
2051 UINT32 AMSDU:1; // rx with 802.3 header, not 802.11 header. obsolete.
2052 UINT32 CipherErr:2; // 0: decryption okay, 1:ICV error, 2:MIC error, 3:KEY not valid
2053 UINT32 Crc:1; // 1: CRC error
2054 UINT32 MyBss:1; // 1: this frame belongs to the same BSSID
2055 UINT32 Bcast:1; // 1: this is a broadcast frame
2056 UINT32 Mcast:1; // 1: this is a multicast frame
2057 UINT32 U2M:1; // 1: this RX frame is unicast to me
2063 } RXD_STRUC, *PRXD_STRUC, RT28XX_RXD_STRUC, *PRT28XX_RXD_STRUC;
2065 typedef struct PACKED _RXD_STRUC {
2081 UINT32 U2M:1; // 1: this RX frame is unicast to me
2082 UINT32 Mcast:1; // 1: this is a multicast frame
2083 UINT32 Bcast:1; // 1: this is a broadcast frame
2084 UINT32 MyBss:1; // 1: this frame belongs to the same BSSID
2085 UINT32 Crc:1; // 1: CRC error
2086 UINT32 CipherErr:2; // 0: decryption okay, 1:ICV error, 2:MIC error, 3:KEY not valid
2087 UINT32 AMSDU:1; // rx with 802.3 header, not 802.11 header.
2092 UINT32 Decrypted:1; // this frame is being decrypted.
2093 UINT32 PlcpSignal:1; // To be moved
2094 UINT32 PlcpRssil:1;// To be moved
2096 } RXD_STRUC, *PRXD_STRUC, RT28XX_RXD_STRUC, *PRT28XX_RXD_STRUC;
2099 // RXWI wireless information format, in PBF. invisible in driver.
2101 #ifdef RT_BIG_ENDIAN
2102 typedef struct PACKED _RXWI_STRUC {
2105 UINT32 MPDUtotalByteCount:12;
2109 UINT32 WirelessCliID:8;
2111 UINT32 PHYMODE:2; // 1: this RX frame is unicast to me
2128 } RXWI_STRUC, *PRXWI_STRUC;
2130 typedef struct PACKED _RXWI_STRUC {
2132 UINT32 WirelessCliID:8;
2136 UINT32 MPDUtotalByteCount:12;
2146 UINT32 PHYMODE:2; // 1: this RX frame is unicast to me
2156 } RXWI_STRUC, *PRXWI_STRUC;
2160 // =================================================================================
2161 // HOST-MCU communication data structure
2162 // =================================================================================
2165 // H2M_MAILBOX_CSR: Host-to-MCU Mailbox
2167 #ifdef RT_BIG_ENDIAN
2168 typedef union _H2M_MAILBOX_STRUC {
2171 UINT32 CmdToken:8; // 0xff tells MCU not to report CmdDoneInt after excuting the command
2176 } H2M_MAILBOX_STRUC, *PH2M_MAILBOX_STRUC;
2178 typedef union _H2M_MAILBOX_STRUC {
2186 } H2M_MAILBOX_STRUC, *PH2M_MAILBOX_STRUC;
2190 // M2H_CMD_DONE_CSR: MCU-to-Host command complete indication
2192 #ifdef RT_BIG_ENDIAN
2193 typedef union _M2H_CMD_DONE_STRUC {
2201 } M2H_CMD_DONE_STRUC, *PM2H_CMD_DONE_STRUC;
2203 typedef union _M2H_CMD_DONE_STRUC {
2211 } M2H_CMD_DONE_STRUC, *PM2H_CMD_DONE_STRUC;
2217 // MCU_LEDCS: MCU LED Control Setting.
2219 #ifdef RT_BIG_ENDIAN
2220 typedef union _MCU_LEDCS_STRUC {
2226 } MCU_LEDCS_STRUC, *PMCU_LEDCS_STRUC;
2228 typedef union _MCU_LEDCS_STRUC {
2234 } MCU_LEDCS_STRUC, *PMCU_LEDCS_STRUC;
2236 // =================================================================================
2238 // =================================================================================
2243 #ifdef RT_BIG_ENDIAN
2244 typedef union _NAV_TIME_CFG_STRUC {
2247 USHORT ZeroSifs:1; // Applied zero SIFS timer after OFDM RX 0: disable
2248 USHORT Eifs:9; // in unit of 1-us
2249 UCHAR SlotTime; // in unit of 1-us
2250 UCHAR Sifs; // in unit of 1-us
2253 } NAV_TIME_CFG_STRUC, *PNAV_TIME_CFG_STRUC;
2255 typedef union _NAV_TIME_CFG_STRUC {
2257 UCHAR Sifs; // in unit of 1-us
2258 UCHAR SlotTime; // in unit of 1-us
2259 USHORT Eifs:9; // in unit of 1-us
2260 USHORT ZeroSifs:1; // Applied zero SIFS timer after OFDM RX 0: disable
2264 } NAV_TIME_CFG_STRUC, *PNAV_TIME_CFG_STRUC;
2272 // RX_FILTR_CFG: /RX configuration register
2274 #ifdef RT_BIG_ENDIAN
2275 typedef union RX_FILTR_CFG_STRUC {
2278 UINT32 DropRsvCntlType:1;
2280 UINT32 DropBAR:1; //
2282 UINT32 DropPsPoll:1; // Drop Ps-Poll
2283 UINT32 DropRts:1; // Drop Ps-Poll
2285 UINT32 DropCts:1; // Drop Ps-Poll
2286 UINT32 DropAck:1; // Drop Ps-Poll
2287 UINT32 DropCFEnd:1; // Drop Ps-Poll
2288 UINT32 DropCFEndAck:1; // Drop Ps-Poll
2290 UINT32 DropDuplicate:1; // Drop duplicate frame
2291 UINT32 DropBcast:1; // Drop broadcast frames
2292 UINT32 DropMcast:1; // Drop multicast frames
2293 UINT32 DropVerErr:1; // Drop version error frame
2295 UINT32 DropNotMyBSSID:1; // Drop fram ToDs bit is true
2296 UINT32 DropNotToMe:1; // Drop not to me unicast frame
2297 UINT32 DropPhyErr:1; // Drop physical error
2298 UINT32 DropCRCErr:1; // Drop CRC error
2301 } RX_FILTR_CFG_STRUC, *PRX_FILTR_CFG_STRUC;
2303 typedef union _RX_FILTR_CFG_STRUC {
2305 UINT32 DropCRCErr:1; // Drop CRC error
2306 UINT32 DropPhyErr:1; // Drop physical error
2307 UINT32 DropNotToMe:1; // Drop not to me unicast frame
2308 UINT32 DropNotMyBSSID:1; // Drop fram ToDs bit is true
2310 UINT32 DropVerErr:1; // Drop version error frame
2311 UINT32 DropMcast:1; // Drop multicast frames
2312 UINT32 DropBcast:1; // Drop broadcast frames
2313 UINT32 DropDuplicate:1; // Drop duplicate frame
2315 UINT32 DropCFEndAck:1; // Drop Ps-Poll
2316 UINT32 DropCFEnd:1; // Drop Ps-Poll
2317 UINT32 DropAck:1; // Drop Ps-Poll
2318 UINT32 DropCts:1; // Drop Ps-Poll
2320 UINT32 DropRts:1; // Drop Ps-Poll
2321 UINT32 DropPsPoll:1; // Drop Ps-Poll
2323 UINT32 DropBAR:1; //
2325 UINT32 DropRsvCntlType:1;
2329 } RX_FILTR_CFG_STRUC, *PRX_FILTR_CFG_STRUC;
2336 // PHY_CSR4: RF serial control register
2338 #ifdef RT_BIG_ENDIAN
2339 typedef union _PHY_CSR4_STRUC {
2341 UINT32 Busy:1; // 1: ASIC is busy execute RF programming.
2342 UINT32 PLL_LD:1; // RF PLL_LD status
2343 UINT32 IFSelect:1; // 1: select IF to program, 0: select RF to program
2344 UINT32 NumberOfBits:5; // Number of bits used in RFRegValue (I:20, RFMD:22)
2345 UINT32 RFRegValue:24; // Register value (include register id) serial out to RF/IF chip.
2348 } PHY_CSR4_STRUC, *PPHY_CSR4_STRUC;
2350 typedef union _PHY_CSR4_STRUC {
2352 UINT32 RFRegValue:24; // Register value (include register id) serial out to RF/IF chip.
2353 UINT32 NumberOfBits:5; // Number of bits used in RFRegValue (I:20, RFMD:22)
2354 UINT32 IFSelect:1; // 1: select IF to program, 0: select RF to program
2355 UINT32 PLL_LD:1; // RF PLL_LD status
2356 UINT32 Busy:1; // 1: ASIC is busy execute RF programming.
2359 } PHY_CSR4_STRUC, *PPHY_CSR4_STRUC;
2364 // SEC_CSR5: shared key table security mode register
2366 #ifdef RT_BIG_ENDIAN
2367 typedef union _SEC_CSR5_STRUC {
2370 UINT32 Bss3Key3CipherAlg:3;
2372 UINT32 Bss3Key2CipherAlg:3;
2374 UINT32 Bss3Key1CipherAlg:3;
2376 UINT32 Bss3Key0CipherAlg:3;
2378 UINT32 Bss2Key3CipherAlg:3;
2380 UINT32 Bss2Key2CipherAlg:3;
2382 UINT32 Bss2Key1CipherAlg:3;
2384 UINT32 Bss2Key0CipherAlg:3;
2387 } SEC_CSR5_STRUC, *PSEC_CSR5_STRUC;
2389 typedef union _SEC_CSR5_STRUC {
2391 UINT32 Bss2Key0CipherAlg:3;
2393 UINT32 Bss2Key1CipherAlg:3;
2395 UINT32 Bss2Key2CipherAlg:3;
2397 UINT32 Bss2Key3CipherAlg:3;
2399 UINT32 Bss3Key0CipherAlg:3;
2401 UINT32 Bss3Key1CipherAlg:3;
2403 UINT32 Bss3Key2CipherAlg:3;
2405 UINT32 Bss3Key3CipherAlg:3;
2409 } SEC_CSR5_STRUC, *PSEC_CSR5_STRUC;
2414 // HOST_CMD_CSR: For HOST to interrupt embedded processor
2416 #ifdef RT_BIG_ENDIAN
2417 typedef union _HOST_CMD_CSR_STRUC {
2420 UINT32 HostCommand:8;
2423 } HOST_CMD_CSR_STRUC, *PHOST_CMD_CSR_STRUC;
2425 typedef union _HOST_CMD_CSR_STRUC {
2427 UINT32 HostCommand:8;
2431 } HOST_CMD_CSR_STRUC, *PHOST_CMD_CSR_STRUC;
2436 // AIFSN_CSR: AIFSN for each EDCA AC
2442 // E2PROM_CSR: EEPROM control register
2444 #ifdef RT_BIG_ENDIAN
2445 typedef union _E2PROM_CSR_STRUC {
2448 UINT32 LoadStatus:1; // 1:loading, 0:done
2449 UINT32 Type:1; // 1: 93C46, 0:93C66
2454 UINT32 Reload:1; // Reload EEPROM content, write one to reload, self-cleared.
2457 } E2PROM_CSR_STRUC, *PE2PROM_CSR_STRUC;
2459 typedef union _E2PROM_CSR_STRUC {
2461 UINT32 Reload:1; // Reload EEPROM content, write one to reload, self-cleared.
2466 UINT32 Type:1; // 1: 93C46, 0:93C66
2467 UINT32 LoadStatus:1; // 1:loading, 0:done
2471 } E2PROM_CSR_STRUC, *PE2PROM_CSR_STRUC;
2475 // -------------------------------------------------------------------
2476 // E2PROM data layout
2477 // -------------------------------------------------------------------
2480 // EEPROM antenna select format
2482 #ifdef RT_BIG_ENDIAN
2483 typedef union _EEPROM_ANTENNA_STRUC {
2486 USHORT RfIcType:4; // see E2PROM document
2487 USHORT TxPath:4; // 1: 1T, 2: 2T
2488 USHORT RxPath:4; // 1: 1R, 2: 2R, 3: 3R
2491 } EEPROM_ANTENNA_STRUC, *PEEPROM_ANTENNA_STRUC;
2493 typedef union _EEPROM_ANTENNA_STRUC {
2495 USHORT RxPath:4; // 1: 1R, 2: 2R, 3: 3R
2496 USHORT TxPath:4; // 1: 1T, 2: 2T
2497 USHORT RfIcType:4; // see E2PROM document
2501 } EEPROM_ANTENNA_STRUC, *PEEPROM_ANTENNA_STRUC;
2504 #ifdef RT_BIG_ENDIAN
2505 typedef union _EEPROM_NIC_CINFIG2_STRUC {
2507 USHORT Rsv2:6; // must be 0
2508 USHORT BW40MAvailForA:1; // 0:enable, 1:disable
2509 USHORT BW40MAvailForG:1; // 0:enable, 1:disable
2510 USHORT EnableWPSPBC:1; // WPS PBC Control bit
2511 USHORT BW40MSidebandForA:1;
2512 USHORT BW40MSidebandForG:1;
2513 USHORT CardbusAcceleration:1; // !!! NOTE: 0 - enable, 1 - disable
2514 USHORT ExternalLNAForA:1; // external LNA enable for 5G
2515 USHORT ExternalLNAForG:1; // external LNA enable for 2.4G
2516 USHORT DynamicTxAgcControl:1; //
2517 USHORT HardwareRadioControl:1; // Whether RF is controlled by driver or HW. 1:enable hw control, 0:disable
2520 } EEPROM_NIC_CONFIG2_STRUC, *PEEPROM_NIC_CONFIG2_STRUC;
2522 typedef union _EEPROM_NIC_CINFIG2_STRUC {
2524 USHORT HardwareRadioControl:1; // 1:enable, 0:disable
2525 USHORT DynamicTxAgcControl:1; //
2526 USHORT ExternalLNAForG:1; //
2527 USHORT ExternalLNAForA:1; // external LNA enable for 2.4G
2528 USHORT CardbusAcceleration:1; // !!! NOTE: 0 - enable, 1 - disable
2529 USHORT BW40MSidebandForG:1;
2530 USHORT BW40MSidebandForA:1;
2531 USHORT EnableWPSPBC:1; // WPS PBC Control bit
2532 USHORT BW40MAvailForG:1; // 0:enable, 1:disable
2533 USHORT BW40MAvailForA:1; // 0:enable, 1:disable
2534 USHORT Rsv2:6; // must be 0
2537 } EEPROM_NIC_CONFIG2_STRUC, *PEEPROM_NIC_CONFIG2_STRUC;
2541 // TX_PWR Value valid range 0xFA(-6) ~ 0x24(36)
2543 #ifdef RT_BIG_ENDIAN
2544 typedef union _EEPROM_TX_PWR_STRUC {
2546 CHAR Byte1; // High Byte
2547 CHAR Byte0; // Low Byte
2550 } EEPROM_TX_PWR_STRUC, *PEEPROM_TX_PWR_STRUC;
2552 typedef union _EEPROM_TX_PWR_STRUC {
2554 CHAR Byte0; // Low Byte
2555 CHAR Byte1; // High Byte
2558 } EEPROM_TX_PWR_STRUC, *PEEPROM_TX_PWR_STRUC;
2561 #ifdef RT_BIG_ENDIAN
2562 typedef union _EEPROM_VERSION_STRUC {
2564 UCHAR Version; // High Byte
2565 UCHAR FaeReleaseNumber; // Low Byte
2568 } EEPROM_VERSION_STRUC, *PEEPROM_VERSION_STRUC;
2570 typedef union _EEPROM_VERSION_STRUC {
2572 UCHAR FaeReleaseNumber; // Low Byte
2573 UCHAR Version; // High Byte
2576 } EEPROM_VERSION_STRUC, *PEEPROM_VERSION_STRUC;
2579 #ifdef RT_BIG_ENDIAN
2580 typedef union _EEPROM_LED_STRUC {
2582 USHORT Rsvd:3; // Reserved
2583 USHORT LedMode:5; // Led mode.
2584 USHORT PolarityGPIO_4:1; // Polarity GPIO#4 setting.
2585 USHORT PolarityGPIO_3:1; // Polarity GPIO#3 setting.
2586 USHORT PolarityGPIO_2:1; // Polarity GPIO#2 setting.
2587 USHORT PolarityGPIO_1:1; // Polarity GPIO#1 setting.
2588 USHORT PolarityGPIO_0:1; // Polarity GPIO#0 setting.
2589 USHORT PolarityACT:1; // Polarity ACT setting.
2590 USHORT PolarityRDY_A:1; // Polarity RDY_A setting.
2591 USHORT PolarityRDY_G:1; // Polarity RDY_G setting.
2594 } EEPROM_LED_STRUC, *PEEPROM_LED_STRUC;
2596 typedef union _EEPROM_LED_STRUC {
2598 USHORT PolarityRDY_G:1; // Polarity RDY_G setting.
2599 USHORT PolarityRDY_A:1; // Polarity RDY_A setting.
2600 USHORT PolarityACT:1; // Polarity ACT setting.
2601 USHORT PolarityGPIO_0:1; // Polarity GPIO#0 setting.
2602 USHORT PolarityGPIO_1:1; // Polarity GPIO#1 setting.
2603 USHORT PolarityGPIO_2:1; // Polarity GPIO#2 setting.
2604 USHORT PolarityGPIO_3:1; // Polarity GPIO#3 setting.
2605 USHORT PolarityGPIO_4:1; // Polarity GPIO#4 setting.
2606 USHORT LedMode:5; // Led mode.
2607 USHORT Rsvd:3; // Reserved
2610 } EEPROM_LED_STRUC, *PEEPROM_LED_STRUC;
2613 #ifdef RT_BIG_ENDIAN
2614 typedef union _EEPROM_TXPOWER_DELTA_STRUC {
2616 UCHAR TxPowerEnable:1;// Enable
2617 UCHAR Type:1; // 1: plus the delta value, 0: minus the delta value
2618 UCHAR DeltaValue:6; // Tx Power dalta value (MAX=4)
2621 } EEPROM_TXPOWER_DELTA_STRUC, *PEEPROM_TXPOWER_DELTA_STRUC;
2623 typedef union _EEPROM_TXPOWER_DELTA_STRUC {
2625 UCHAR DeltaValue:6; // Tx Power dalta value (MAX=4)
2626 UCHAR Type:1; // 1: plus the delta value, 0: minus the delta value
2627 UCHAR TxPowerEnable:1;// Enable
2630 } EEPROM_TXPOWER_DELTA_STRUC, *PEEPROM_TXPOWER_DELTA_STRUC;
2634 // QOS_CSR0: TXOP holder address0 register
2636 #ifdef RT_BIG_ENDIAN
2637 typedef union _QOS_CSR0_STRUC {
2639 UCHAR Byte3; // MAC address byte 3
2640 UCHAR Byte2; // MAC address byte 2
2641 UCHAR Byte1; // MAC address byte 1
2642 UCHAR Byte0; // MAC address byte 0
2645 } QOS_CSR0_STRUC, *PQOS_CSR0_STRUC;
2647 typedef union _QOS_CSR0_STRUC {
2649 UCHAR Byte0; // MAC address byte 0
2650 UCHAR Byte1; // MAC address byte 1
2651 UCHAR Byte2; // MAC address byte 2
2652 UCHAR Byte3; // MAC address byte 3
2655 } QOS_CSR0_STRUC, *PQOS_CSR0_STRUC;
2659 // QOS_CSR1: TXOP holder address1 register
2661 #ifdef RT_BIG_ENDIAN
2662 typedef union _QOS_CSR1_STRUC {
2666 UCHAR Byte5; // MAC address byte 5
2667 UCHAR Byte4; // MAC address byte 4
2670 } QOS_CSR1_STRUC, *PQOS_CSR1_STRUC;
2672 typedef union _QOS_CSR1_STRUC {
2674 UCHAR Byte4; // MAC address byte 4
2675 UCHAR Byte5; // MAC address byte 5
2680 } QOS_CSR1_STRUC, *PQOS_CSR1_STRUC;
2683 #define RF_CSR_CFG 0x500
2684 #ifdef RT_BIG_ENDIAN
2685 typedef union _RF_CSR_CFG_STRUC {
2687 UINT Rsvd1:14; // Reserved
2688 UINT RF_CSR_KICK:1; // kick RF register read/write
2689 UINT RF_CSR_WR:1; // 0: read 1: write
2690 UINT Rsvd2:3; // Reserved
2691 UINT TESTCSR_RFACC_REGNUM:5; // RF register ID
2692 UINT RF_CSR_DATA:8; // DATA
2695 } RF_CSR_CFG_STRUC, *PRF_CSR_CFG_STRUC;
2697 typedef union _RF_CSR_CFG_STRUC {
2699 UINT RF_CSR_DATA:8; // DATA
2700 UINT TESTCSR_RFACC_REGNUM:5; // RF register ID
2701 UINT Rsvd2:3; // Reserved
2702 UINT RF_CSR_WR:1; // 0: read 1: write
2703 UINT RF_CSR_KICK:1; // kick RF register read/write
2704 UINT Rsvd1:14; // Reserved
2707 } RF_CSR_CFG_STRUC, *PRF_CSR_CFG_STRUC;
2710 #endif // __RT28XX_H__