Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1/*
2 *************************************************************************
3 * Ralink Tech Inc.
4 * 5F., No.36, Taiyuan St., Jhubei City,
5 * Hsinchu County 302,
6 * Taiwan, R.O.C.
7 *
8 * (c) Copyright 2002-2007, Ralink Technology, Inc.
9 *
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. *
14 * *
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. *
19 * *
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. *
24 * *
25 *************************************************************************
26
27 Module Name:
28 rt28xx.h
29
30 Abstract:
31 RT28xx ASIC related definition & structures
32
33 Revision History:
34 Who When What
35 -------- ---------- ----------------------------------------------
36 Jan Lee Jan-3-2006 created for RT2860c
37*/
38
39#ifndef __RT28XX_H__
40#define __RT28XX_H__
41
42
43//
44// PCI registers - base address 0x0000
45//
46#define PCI_CFG 0x0000
47#define PCI_EECTRL 0x0004
48#define PCI_MCUCTRL 0x0008
49
50//
51// SCH/DMA registers - base address 0x0200
52//
53// INT_SOURCE_CSR: Interrupt source register. Write one to clear corresponding bit
54//
55#define DMA_CSR0 0x200
56#define INT_SOURCE_CSR 0x200
57#ifdef RT_BIG_ENDIAN
58typedef union _INT_SOURCE_CSR_STRUC {
59 struct {
60 UINT32 :14;
61 UINT32 TxCoherent:1;
62 UINT32 RxCoherent:1;
63 UINT32 GPTimer:1;
64 UINT32 AutoWakeup:1;//bit14
65 UINT32 TXFifoStatusInt:1;//FIFO Statistics is full, sw should read 0x171c
66 UINT32 PreTBTT:1;
67 UINT32 TBTTInt:1;
68 UINT32 RxTxCoherent:1;
69 UINT32 MCUCommandINT:1;
70 UINT32 MgmtDmaDone:1;
71 UINT32 HccaDmaDone:1;
72 UINT32 Ac3DmaDone:1;
73 UINT32 Ac2DmaDone:1;
74 UINT32 Ac1DmaDone:1;
75 UINT32 Ac0DmaDone:1;
76 UINT32 RxDone:1;
77 UINT32 TxDelayINT:1; //delayed interrupt, not interrupt until several int or time limit hit
78 UINT32 RxDelayINT:1; //dealyed interrupt
79 } field;
80 UINT32 word;
81} INT_SOURCE_CSR_STRUC, *PINT_SOURCE_CSR_STRUC;
82#else
83typedef union _INT_SOURCE_CSR_STRUC {
84 struct {
85 UINT32 RxDelayINT:1;
86 UINT32 TxDelayINT:1;
87 UINT32 RxDone:1;
88 UINT32 Ac0DmaDone:1;//4
89 UINT32 Ac1DmaDone:1;
90 UINT32 Ac2DmaDone:1;
91 UINT32 Ac3DmaDone:1;
92 UINT32 HccaDmaDone:1; // bit7
93 UINT32 MgmtDmaDone:1;
94 UINT32 MCUCommandINT:1;//bit 9
95 UINT32 RxTxCoherent:1;
96 UINT32 TBTTInt:1;
97 UINT32 PreTBTT:1;
98 UINT32 TXFifoStatusInt:1;//FIFO Statistics is full, sw should read 0x171c
99 UINT32 AutoWakeup:1;//bit14
100 UINT32 GPTimer:1;
101 UINT32 RxCoherent:1;//bit16
102 UINT32 TxCoherent:1;
103 UINT32 :14;
104 } field;
105 UINT32 word;
106} INT_SOURCE_CSR_STRUC, *PINT_SOURCE_CSR_STRUC;
107#endif
108
109//
110// INT_MASK_CSR: Interrupt MASK register. 1: the interrupt is mask OFF
111//
112#define INT_MASK_CSR 0x204
113#ifdef RT_BIG_ENDIAN
114typedef union _INT_MASK_CSR_STRUC {
115 struct {
116 UINT32 TxCoherent:1;
117 UINT32 RxCoherent:1;
118 UINT32 :20;
119 UINT32 MCUCommandINT:1;
120 UINT32 MgmtDmaDone:1;
121 UINT32 HccaDmaDone:1;
122 UINT32 Ac3DmaDone:1;
123 UINT32 Ac2DmaDone:1;
124 UINT32 Ac1DmaDone:1;
125 UINT32 Ac0DmaDone:1;
126 UINT32 RxDone:1;
127 UINT32 TxDelay:1;
128 UINT32 RXDelay_INT_MSK:1;
129 } field;
130 UINT32 word;
131}INT_MASK_CSR_STRUC, *PINT_MASK_CSR_STRUC;
132#else
133typedef union _INT_MASK_CSR_STRUC {
134 struct {
135 UINT32 RXDelay_INT_MSK:1;
136 UINT32 TxDelay:1;
137 UINT32 RxDone:1;
138 UINT32 Ac0DmaDone:1;
139 UINT32 Ac1DmaDone:1;
140 UINT32 Ac2DmaDone:1;
141 UINT32 Ac3DmaDone:1;
142 UINT32 HccaDmaDone:1;
143 UINT32 MgmtDmaDone:1;
144 UINT32 MCUCommandINT:1;
145 UINT32 :20;
146 UINT32 RxCoherent:1;
147 UINT32 TxCoherent:1;
148 } field;
149 UINT32 word;
150} INT_MASK_CSR_STRUC, *PINT_MASK_CSR_STRUC;
151#endif
152#define WPDMA_GLO_CFG 0x208
153#ifdef RT_BIG_ENDIAN
154typedef union _WPDMA_GLO_CFG_STRUC {
155 struct {
156 UINT32 HDR_SEG_LEN:16;
157 UINT32 RXHdrScater:8;
158 UINT32 BigEndian:1;
159 UINT32 EnTXWriteBackDDONE:1;
160 UINT32 WPDMABurstSIZE:2;
161 UINT32 RxDMABusy:1;
162 UINT32 EnableRxDMA:1;
163 UINT32 TxDMABusy:1;
164 UINT32 EnableTxDMA:1;
165 } field;
166 UINT32 word;
167}WPDMA_GLO_CFG_STRUC, *PWPDMA_GLO_CFG_STRUC;
168#else
169typedef union _WPDMA_GLO_CFG_STRUC {
170 struct {
171 UINT32 EnableTxDMA:1;
172 UINT32 TxDMABusy:1;
173 UINT32 EnableRxDMA:1;
174 UINT32 RxDMABusy:1;
175 UINT32 WPDMABurstSIZE:2;
176 UINT32 EnTXWriteBackDDONE:1;
177 UINT32 BigEndian:1;
178 UINT32 RXHdrScater:8;
179 UINT32 HDR_SEG_LEN:16;
180 } field;
181 UINT32 word;
182} WPDMA_GLO_CFG_STRUC, *PWPDMA_GLO_CFG_STRUC;
183#endif
184#define WPDMA_RST_IDX 0x20c
185#ifdef RT_BIG_ENDIAN
186typedef union _WPDMA_RST_IDX_STRUC {
187 struct {
188 UINT32 :15;
189 UINT32 RST_DRX_IDX0:1;
190 UINT32 rsv:10;
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;
197 } field;
198 UINT32 word;
199}WPDMA_RST_IDX_STRUC, *PWPDMA_RST_IDX_STRUC;
200#else
201typedef union _WPDMA_RST_IDX_STRUC {
202 struct {
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;
209 UINT32 rsv:10;
210 UINT32 RST_DRX_IDX0:1;
211 UINT32 :15;
212 } field;
213 UINT32 word;
214} WPDMA_RST_IDX_STRUC, *PWPDMA_RST_IDX_STRUC;
215#endif
216#define DELAY_INT_CFG 0x0210
217#ifdef RT_BIG_ENDIAN
218typedef union _DELAY_INT_CFG_STRUC {
219 struct {
220 UINT32 TXDLY_INT_EN:1;
221 UINT32 TXMAX_PINT:7;
222 UINT32 TXMAX_PTIME:8;
223 UINT32 RXDLY_INT_EN:1;
224 UINT32 RXMAX_PINT:7;
225 UINT32 RXMAX_PTIME:8;
226 } field;
227 UINT32 word;
228}DELAY_INT_CFG_STRUC, *PDELAY_INT_CFG_STRUC;
229#else
230typedef union _DELAY_INT_CFG_STRUC {
231 struct {
232 UINT32 RXMAX_PTIME:8;
233 UINT32 RXMAX_PINT:7;
234 UINT32 RXDLY_INT_EN:1;
235 UINT32 TXMAX_PTIME:8;
236 UINT32 TXMAX_PINT:7;
237 UINT32 TXDLY_INT_EN:1;
238 } field;
239 UINT32 word;
240} DELAY_INT_CFG_STRUC, *PDELAY_INT_CFG_STRUC;
241#endif
242#define WMM_AIFSN_CFG 0x0214
243#ifdef RT_BIG_ENDIAN
244typedef union _AIFSN_CSR_STRUC {
245 struct {
246 UINT32 Rsv:16;
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
251 } field;
252 UINT32 word;
253} AIFSN_CSR_STRUC, *PAIFSN_CSR_STRUC;
254#else
255typedef union _AIFSN_CSR_STRUC {
256 struct {
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
261 UINT32 Rsv:16;
262 } field;
263 UINT32 word;
264} AIFSN_CSR_STRUC, *PAIFSN_CSR_STRUC;
265#endif
266//
267// CWMIN_CSR: CWmin for each EDCA AC
268//
269#define WMM_CWMIN_CFG 0x0218
270#ifdef RT_BIG_ENDIAN
271typedef union _CWMIN_CSR_STRUC {
272 struct {
273 UINT32 Rsv:16;
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
278 } field;
279 UINT32 word;
280} CWMIN_CSR_STRUC, *PCWMIN_CSR_STRUC;
281#else
282typedef union _CWMIN_CSR_STRUC {
283 struct {
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
288 UINT32 Rsv:16;
289 } field;
290 UINT32 word;
291} CWMIN_CSR_STRUC, *PCWMIN_CSR_STRUC;
292#endif
293
294//
295// CWMAX_CSR: CWmin for each EDCA AC
296//
297#define WMM_CWMAX_CFG 0x021c
298#ifdef RT_BIG_ENDIAN
299typedef union _CWMAX_CSR_STRUC {
300 struct {
301 UINT32 Rsv:16;
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
306 } field;
307 UINT32 word;
308} CWMAX_CSR_STRUC, *PCWMAX_CSR_STRUC;
309#else
310typedef union _CWMAX_CSR_STRUC {
311 struct {
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
316 UINT32 Rsv:16;
317 } field;
318 UINT32 word;
319} CWMAX_CSR_STRUC, *PCWMAX_CSR_STRUC;
320#endif
321
322
323//
324// AC_TXOP_CSR0: AC_BK/AC_BE TXOP register
325//
326#define WMM_TXOP0_CFG 0x0220
327#ifdef RT_BIG_ENDIAN
328typedef union _AC_TXOP_CSR0_STRUC {
329 struct {
330 USHORT Ac1Txop; // for AC_BE, in unit of 32us
331 USHORT Ac0Txop; // for AC_BK, in unit of 32us
332 } field;
333 UINT32 word;
334} AC_TXOP_CSR0_STRUC, *PAC_TXOP_CSR0_STRUC;
335#else
336typedef union _AC_TXOP_CSR0_STRUC {
337 struct {
338 USHORT Ac0Txop; // for AC_BK, in unit of 32us
339 USHORT Ac1Txop; // for AC_BE, in unit of 32us
340 } field;
341 UINT32 word;
342} AC_TXOP_CSR0_STRUC, *PAC_TXOP_CSR0_STRUC;
343#endif
344
345//
346// AC_TXOP_CSR1: AC_VO/AC_VI TXOP register
347//
348#define WMM_TXOP1_CFG 0x0224
349#ifdef RT_BIG_ENDIAN
350typedef union _AC_TXOP_CSR1_STRUC {
351 struct {
352 USHORT Ac3Txop; // for AC_VO, in unit of 32us
353 USHORT Ac2Txop; // for AC_VI, in unit of 32us
354 } field;
355 UINT32 word;
356} AC_TXOP_CSR1_STRUC, *PAC_TXOP_CSR1_STRUC;
357#else
358typedef union _AC_TXOP_CSR1_STRUC {
359 struct {
360 USHORT Ac2Txop; // for AC_VI, in unit of 32us
361 USHORT Ac3Txop; // for AC_VO, in unit of 32us
362 } field;
363 UINT32 word;
364} AC_TXOP_CSR1_STRUC, *PAC_TXOP_CSR1_STRUC;
365#endif
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
401#ifdef RT_BIG_ENDIAN
402typedef union _USB_DMA_CFG_STRUC {
403 struct {
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
412 UINT32 rsv:2;
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
416 } field;
417 UINT32 word;
418} USB_DMA_CFG_STRUC, *PUSB_DMA_CFG_STRUC;
419#else
420typedef union _USB_DMA_CFG_STRUC {
421 struct {
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
425 UINT32 rsv:2;
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
434 } field;
435 UINT32 word;
436} USB_DMA_CFG_STRUC, *PUSB_DMA_CFG_STRUC;
437#endif
438
439//
440// 3 PBF registers
441//
442//
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
453
454//
455// 4 MAC registers
456//
457//
458// 4.1 MAC SYSTEM configuration registers (offset:0x1000)
459//
460#define MAC_CSR0 0x1000
461#ifdef RT_BIG_ENDIAN
462typedef union _ASIC_VER_ID_STRUC {
463 struct {
464 USHORT ASICVer; // version : 2860
465 USHORT ASICRev; // reversion : 0
466 } field;
467 UINT32 word;
468} ASIC_VER_ID_STRUC, *PASIC_VER_ID_STRUC;
469#else
470typedef union _ASIC_VER_ID_STRUC {
471 struct {
472 USHORT ASICRev; // reversion : 0
473 USHORT ASICVer; // version : 2860
474 } field;
475 UINT32 word;
476} ASIC_VER_ID_STRUC, *PASIC_VER_ID_STRUC;
477#endif
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
481//
482// MAC_CSR2: STA MAC register 0
483//
484#ifdef RT_BIG_ENDIAN
485typedef union _MAC_DW0_STRUC {
486 struct {
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
491 } field;
492 UINT32 word;
493} MAC_DW0_STRUC, *PMAC_DW0_STRUC;
494#else
495typedef union _MAC_DW0_STRUC {
496 struct {
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
501 } field;
502 UINT32 word;
503} MAC_DW0_STRUC, *PMAC_DW0_STRUC;
504#endif
505
506//
507// MAC_CSR3: STA MAC register 1
508//
509#ifdef RT_BIG_ENDIAN
510typedef union _MAC_DW1_STRUC {
511 struct {
512 UCHAR Rsvd1;
513 UCHAR U2MeMask;
514 UCHAR Byte5; // MAC address byte 5
515 UCHAR Byte4; // MAC address byte 4
516 } field;
517 UINT32 word;
518} MAC_DW1_STRUC, *PMAC_DW1_STRUC;
519#else
520typedef union _MAC_DW1_STRUC {
521 struct {
522 UCHAR Byte4; // MAC address byte 4
523 UCHAR Byte5; // MAC address byte 5
524 UCHAR U2MeMask;
525 UCHAR Rsvd1;
526 } field;
527 UINT32 word;
528} MAC_DW1_STRUC, *PMAC_DW1_STRUC;
529#endif
530
531#define MAC_BSSID_DW0 0x1010 // MAC BSSID DW0
532#define MAC_BSSID_DW1 0x1014 // MAC BSSID DW1
533
534//
535// MAC_CSR5: BSSID register 1
536//
537#ifdef RT_BIG_ENDIAN
538typedef union _MAC_CSR5_STRUC {
539 struct {
540 USHORT Rsvd:11;
541 USHORT MBssBcnNum:3;
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
545 } field;
546 UINT32 word;
547} MAC_CSR5_STRUC, *PMAC_CSR5_STRUC;
548#else
549typedef union _MAC_CSR5_STRUC {
550 struct {
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
554 USHORT MBssBcnNum:3;
555 USHORT Rsvd:11;
556 } field;
557 UINT32 word;
558} MAC_CSR5_STRUC, *PMAC_CSR5_STRUC;
559#endif
560
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 //
563//
564// BBP_CSR_CFG: BBP serial control register
565//
566#ifdef RT_BIG_ENDIAN
567typedef union _BBP_CSR_CFG_STRUC {
568 struct {
569 UINT32 :12;
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
576 } field;
577 UINT32 word;
578} BBP_CSR_CFG_STRUC, *PBBP_CSR_CFG_STRUC;
579#else
580typedef union _BBP_CSR_CFG_STRUC {
581 struct {
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
588 UINT32 :12;
589 } field;
590 UINT32 word;
591} BBP_CSR_CFG_STRUC, *PBBP_CSR_CFG_STRUC;
592#endif
593#define RF_CSR_CFG0 0x1020
594//
595// RF_CSR_CFG: RF control register
596//
597#ifdef RT_BIG_ENDIAN
598typedef union _RF_CSR_CFG0_STRUC {
599 struct {
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
605 } field;
606 UINT32 word;
607} RF_CSR_CFG0_STRUC, *PRF_CSR_CFG0_STRUC;
608#else
609typedef union _RF_CSR_CFG0_STRUC {
610 struct {
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
616 } field;
617 UINT32 word;
618} RF_CSR_CFG0_STRUC, *PRF_CSR_CFG0_STRUC;
619#endif
620#define RF_CSR_CFG1 0x1024
621#ifdef RT_BIG_ENDIAN
622typedef union _RF_CSR_CFG1_STRUC {
623 struct {
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
627 } field;
628 UINT32 word;
629} RF_CSR_CFG1_STRUC, *PRF_CSR_CFG1_STRUC;
630#else
631typedef union _RF_CSR_CFG1_STRUC {
632 struct {
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
636 } field;
637 UINT32 word;
638} RF_CSR_CFG1_STRUC, *PRF_CSR_CFG1_STRUC;
639#endif
640#define RF_CSR_CFG2 0x1028 //
641#ifdef RT_BIG_ENDIAN
642typedef union _RF_CSR_CFG2_STRUC {
643 struct {
644 UINT32 rsv:8; // 0: idle 1: 8busy
645 UINT32 RegIdAndContent:24; // Register value to program into BBP
646 } field;
647 UINT32 word;
648} RF_CSR_CFG2_STRUC, *PRF_CSR_CFG2_STRUC;
649#else
650typedef union _RF_CSR_CFG2_STRUC {
651 struct {
652 UINT32 RegIdAndContent:24; // Register value to program into BBP
653 UINT32 rsv:8; // 0: idle 1: 8busy
654 } field;
655 UINT32 word;
656} RF_CSR_CFG2_STRUC, *PRF_CSR_CFG2_STRUC;
657#endif
658#define LED_CFG 0x102c // MAC_CSR14
659#ifdef RT_BIG_ENDIAN
660typedef union _LED_CFG_STRUC {
661 struct {
662 UINT32 :1;
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
667 UINT32 rsv:2;
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
671 } field;
672 UINT32 word;
673} LED_CFG_STRUC, *PLED_CFG_STRUC;
674#else
675typedef union _LED_CFG_STRUC {
676 struct {
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
680 UINT32 rsv:2;
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
685 UINT32 :1;
686 } field;
687 UINT32 word;
688} LED_CFG_STRUC, *PLED_CFG_STRUC;
689#endif
690//
691// 4.2 MAC TIMING configuration registers (offset:0x1100)
692//
693#define XIFS_TIME_CFG 0x1100 // MAC_CSR8 MAC_CSR9
694#ifdef RT_BIG_ENDIAN
695typedef union _IFS_SLOT_CFG_STRUC {
696 struct {
697 UINT32 rsv:2;
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
703 } field;
704 UINT32 word;
705} IFS_SLOT_CFG_STRUC, *PIFS_SLOT_CFG_STRUC;
706#else
707typedef union _IFS_SLOT_CFG_STRUC {
708 struct {
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
714 UINT32 rsv:2;
715 } field;
716 UINT32 word;
717} IFS_SLOT_CFG_STRUC, *PIFS_SLOT_CFG_STRUC;
718#endif
719
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
725
726#define BCN_OFFSET0 0x042C
727#define BCN_OFFSET1 0x0430
728
729//
730// BCN_TIME_CFG : Synchronization control register
731//
732#ifdef RT_BIG_ENDIAN
733typedef union _BCN_TIME_CFG_STRUC {
734 struct {
735 UINT32 TxTimestampCompensate:8;
736 UINT32 :3;
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
742 } field;
743 UINT32 word;
744} BCN_TIME_CFG_STRUC, *PBCN_TIME_CFG_STRUC;
745#else
746typedef union _BCN_TIME_CFG_STRUC {
747 struct {
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
753 UINT32 :3;
754 UINT32 TxTimestampCompensate:8;
755 } field;
756 UINT32 word;
757} BCN_TIME_CFG_STRUC, *PBCN_TIME_CFG_STRUC;
758#endif
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
767//
768// 4.2 MAC POWER configuration registers (offset:0x1200)
769//
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
773//
774// AUTO_WAKEUP_CFG: Manual power control / status register
775//
776#ifdef RT_BIG_ENDIAN
777typedef union _AUTO_WAKEUP_STRUC {
778 struct {
779 UINT32 :16;
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;
783 } field;
784 UINT32 word;
785} AUTO_WAKEUP_STRUC, *PAUTO_WAKEUP_STRUC;
786#else
787typedef union _AUTO_WAKEUP_STRUC {
788 struct {
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
792 UINT32 :16;
793 } field;
794 UINT32 word;
795} AUTO_WAKEUP_STRUC, *PAUTO_WAKEUP_STRUC;
796#endif
797//
798// 4.3 MAC TX configuration registers (offset:0x1300)
799//
800
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
805#ifdef RT_BIG_ENDIAN
806typedef union _EDCA_AC_CFG_STRUC {
807 struct {
808 UINT32 :12; //
809 UINT32 Cwmax:4; //unit power of 2
810 UINT32 Cwmin:4; //
811 UINT32 Aifsn:4; // # of slot time
812 UINT32 AcTxop:8; // in unit of 32us
813 } field;
814 UINT32 word;
815} EDCA_AC_CFG_STRUC, *PEDCA_AC_CFG_STRUC;
816#else
817typedef union _EDCA_AC_CFG_STRUC {
818 struct {
819 UINT32 AcTxop:8; // in unit of 32us
820 UINT32 Aifsn:4; // # of slot time
821 UINT32 Cwmin:4; //
822 UINT32 Cwmax:4; //unit power of 2
823 UINT32 :12; //
824 } field;
825 UINT32 word;
826} EDCA_AC_CFG_STRUC, *PEDCA_AC_CFG_STRUC;
827#endif
828
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
843
844#ifdef RT_BIG_ENDIAN
845typedef union _TX_RTS_CFG_STRUC {
846 struct {
847 UINT32 rsv:7;
848 UINT32 RtsFbkEn:1; // enable rts rate fallback
849 UINT32 RtsThres:16; // unit:byte
850 UINT32 AutoRtsRetryLimit:8;
851 } field;
852 UINT32 word;
853} TX_RTS_CFG_STRUC, *PTX_RTS_CFG_STRUC;
854#else
855typedef union _TX_RTS_CFG_STRUC {
856 struct {
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
861 } field;
862 UINT32 word;
863} TX_RTS_CFG_STRUC, *PTX_RTS_CFG_STRUC;
864#endif
865#define TX_TIMEOUT_CFG 0x1348
866#ifdef RT_BIG_ENDIAN
867typedef union _TX_TIMEOUT_CFG_STRUC {
868 struct {
869 UINT32 rsv2:8;
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
873 UINT32 rsv:4;
874 } field;
875 UINT32 word;
876} TX_TIMEOUT_CFG_STRUC, *PTX_TIMEOUT_CFG_STRUC;
877#else
878typedef union _TX_TIMEOUT_CFG_STRUC {
879 struct {
880 UINT32 rsv:4;
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
885 } field;
886 UINT32 word;
887} TX_TIMEOUT_CFG_STRUC, *PTX_TIMEOUT_CFG_STRUC;
888#endif
889#define TX_RTY_CFG 0x134c
890#ifdef RT_BIG_ENDIAN
891typedef union PACKED _TX_RTY_CFG_STRUC {
892 struct {
893 UINT32 rsv:1;
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
900
901 } field;
902 UINT32 word;
903} TX_RTY_CFG_STRUC, *PTX_RTY_CFG_STRUC;
904#else
905typedef union PACKED _TX_RTY_CFG_STRUC {
906 struct {
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
914 } field;
915 UINT32 word;
916} TX_RTY_CFG_STRUC, *PTX_RTY_CFG_STRUC;
917#endif
918#define TX_LINK_CFG 0x1350
919#ifdef RT_BIG_ENDIAN
920typedef union PACKED _TX_LINK_CFG_STRUC {
921 struct PACKED {
922 UINT32 RemotMFS:8; //remote MCS feedback sequence number
923 UINT32 RemotMFB:8; // remote MCS feedback
924 UINT32 rsv:3; //
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
931 } field;
932 UINT32 word;
933} TX_LINK_CFG_STRUC, *PTX_LINK_CFG_STRUC;
934#else
935typedef union PACKED _TX_LINK_CFG_STRUC {
936 struct PACKED {
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
943 UINT32 rsv:3; //
944 UINT32 RemotMFB:8; // remote MCS feedback
945 UINT32 RemotMFS:8; //remote MCS feedback sequence number
946 } field;
947 UINT32 word;
948} TX_LINK_CFG_STRUC, *PTX_LINK_CFG_STRUC;
949#endif
950#define HT_FBK_CFG0 0x1354
951#ifdef RT_BIG_ENDIAN
952typedef union PACKED _HT_FBK_CFG0_STRUC {
953 struct {
954 UINT32 HTMCS7FBK:4;
955 UINT32 HTMCS6FBK:4;
956 UINT32 HTMCS5FBK:4;
957 UINT32 HTMCS4FBK:4;
958 UINT32 HTMCS3FBK:4;
959 UINT32 HTMCS2FBK:4;
960 UINT32 HTMCS1FBK:4;
961 UINT32 HTMCS0FBK:4;
962 } field;
963 UINT32 word;
964} HT_FBK_CFG0_STRUC, *PHT_FBK_CFG0_STRUC;
965#else
966typedef union PACKED _HT_FBK_CFG0_STRUC {
967 struct {
968 UINT32 HTMCS0FBK:4;
969 UINT32 HTMCS1FBK:4;
970 UINT32 HTMCS2FBK:4;
971 UINT32 HTMCS3FBK:4;
972 UINT32 HTMCS4FBK:4;
973 UINT32 HTMCS5FBK:4;
974 UINT32 HTMCS6FBK:4;
975 UINT32 HTMCS7FBK:4;
976 } field;
977 UINT32 word;
978} HT_FBK_CFG0_STRUC, *PHT_FBK_CFG0_STRUC;
979#endif
980#define HT_FBK_CFG1 0x1358
981#ifdef RT_BIG_ENDIAN
982typedef union _HT_FBK_CFG1_STRUC {
983 struct {
984 UINT32 HTMCS15FBK:4;
985 UINT32 HTMCS14FBK:4;
986 UINT32 HTMCS13FBK:4;
987 UINT32 HTMCS12FBK:4;
988 UINT32 HTMCS11FBK:4;
989 UINT32 HTMCS10FBK:4;
990 UINT32 HTMCS9FBK:4;
991 UINT32 HTMCS8FBK:4;
992 } field;
993 UINT32 word;
994} HT_FBK_CFG1_STRUC, *PHT_FBK_CFG1_STRUC;
995#else
996typedef union _HT_FBK_CFG1_STRUC {
997 struct {
998 UINT32 HTMCS8FBK:4;
999 UINT32 HTMCS9FBK:4;
1000 UINT32 HTMCS10FBK:4;
1001 UINT32 HTMCS11FBK:4;
1002 UINT32 HTMCS12FBK:4;
1003 UINT32 HTMCS13FBK:4;
1004 UINT32 HTMCS14FBK:4;
1005 UINT32 HTMCS15FBK:4;
1006 } field;
1007 UINT32 word;
1008} HT_FBK_CFG1_STRUC, *PHT_FBK_CFG1_STRUC;
1009#endif
1010#define LG_FBK_CFG0 0x135c
1011#ifdef RT_BIG_ENDIAN
1012typedef union _LG_FBK_CFG0_STRUC {
1013 struct {
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
1022 } field;
1023 UINT32 word;
1024} LG_FBK_CFG0_STRUC, *PLG_FBK_CFG0_STRUC;
1025#else
1026typedef union _LG_FBK_CFG0_STRUC {
1027 struct {
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
1036 } field;
1037 UINT32 word;
1038} LG_FBK_CFG0_STRUC, *PLG_FBK_CFG0_STRUC;
1039#endif
1040#define LG_FBK_CFG1 0x1360
1041#ifdef RT_BIG_ENDIAN
1042typedef union _LG_FBK_CFG1_STRUC {
1043 struct {
1044 UINT32 rsv:16;
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
1049 } field;
1050 UINT32 word;
1051} LG_FBK_CFG1_STRUC, *PLG_FBK_CFG1_STRUC;
1052#else
1053typedef union _LG_FBK_CFG1_STRUC {
1054 struct {
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
1059 UINT32 rsv:16;
1060 } field;
1061 UINT32 word;
1062} LG_FBK_CFG1_STRUC, *PLG_FBK_CFG1_STRUC;
1063#endif
1064
1065//=======================================================
1066//================ Protection Paramater================================
1067//=======================================================
1068#define CCK_PROT_CFG 0x1364 //CCK Protection
1069#define ASIC_SHORTNAV 1
1070#define ASIC_LONGNAV 2
1071#define ASIC_RTS 1
1072#define ASIC_CTS 2
1073#ifdef RT_BIG_ENDIAN
1074typedef union _PROT_CFG_STRUC {
1075 struct {
1076 UINT32 rsv:5;
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).
1087 } field;
1088 UINT32 word;
1089} PROT_CFG_STRUC, *PPROT_CFG_STRUC;
1090#else
1091typedef union _PROT_CFG_STRUC {
1092 struct {
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
1103 UINT32 rsv:5;
1104 } field;
1105 UINT32 word;
1106} PROT_CFG_STRUC, *PPROT_CFG_STRUC;
1107#endif
1108
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 //
1116
1117//
1118// 4.4 MAC RX configuration registers (offset:0x1400)
1119//
1120#define RX_FILTR_CFG 0x1400 //TXRX_CSR0
1121#define AUTO_RSP_CFG 0x1404 //TXRX_CSR4
1122//
1123// TXRX_CSR4: Auto-Responder/
1124//
1125#ifdef RT_BIG_ENDIAN
1126typedef union _AUTO_RSP_CFG_STRUC {
1127 struct {
1128 UINT32 :24;
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;
1137 } field;
1138 UINT32 word;
1139} AUTO_RSP_CFG_STRUC, *PAUTO_RSP_CFG_STRUC;
1140#else
1141typedef union _AUTO_RSP_CFG_STRUC {
1142 struct {
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
1151 UINT32 :24;
1152 } field;
1153 UINT32 word;
1154} AUTO_RSP_CFG_STRUC, *PAUTO_RSP_CFG_STRUC;
1155#endif
1156
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
1162
1163//
1164// 4.5 MAC Security configuration (offset:0x1500)
1165//
1166#define TX_SEC_CNT0 0x1500 //
1167#define RX_SEC_CNT0 0x1504 //
1168#define CCMP_FC_MUTE 0x1508 //
1169//
1170// 4.6 HCCA/PSMP (offset:0x1600)
1171//
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
1178//
1179// 4.7 MAC Statistis registers (offset:0x1700)
1180//
1181#define RX_STA_CNT0 0x1700 //
1182#define RX_STA_CNT1 0x1704 //
1183#define RX_STA_CNT2 0x1708 //
1184
1185//
1186// RX_STA_CNT0_STRUC: RX PLCP error count & RX CRC error count
1187//
1188#ifdef RT_BIG_ENDIAN
1189typedef union _RX_STA_CNT0_STRUC {
1190 struct {
1191 USHORT PhyErr;
1192 USHORT CrcErr;
1193 } field;
1194 UINT32 word;
1195} RX_STA_CNT0_STRUC, *PRX_STA_CNT0_STRUC;
1196#else
1197typedef union _RX_STA_CNT0_STRUC {
1198 struct {
1199 USHORT CrcErr;
1200 USHORT PhyErr;
1201 } field;
1202 UINT32 word;
1203} RX_STA_CNT0_STRUC, *PRX_STA_CNT0_STRUC;
1204#endif
1205
1206//
1207// RX_STA_CNT1_STRUC: RX False CCA count & RX LONG frame count
1208//
1209#ifdef RT_BIG_ENDIAN
1210typedef union _RX_STA_CNT1_STRUC {
1211 struct {
1212 USHORT PlcpErr;
1213 USHORT FalseCca;
1214 } field;
1215 UINT32 word;
1216} RX_STA_CNT1_STRUC, *PRX_STA_CNT1_STRUC;
1217#else
1218typedef union _RX_STA_CNT1_STRUC {
1219 struct {
1220 USHORT FalseCca;
1221 USHORT PlcpErr;
1222 } field;
1223 UINT32 word;
1224} RX_STA_CNT1_STRUC, *PRX_STA_CNT1_STRUC;
1225#endif
1226
1227//
1228// RX_STA_CNT2_STRUC:
1229//
1230#ifdef RT_BIG_ENDIAN
1231typedef union _RX_STA_CNT2_STRUC {
1232 struct {
1233 USHORT RxFifoOverflowCount;
1234 USHORT RxDupliCount;
1235 } field;
1236 UINT32 word;
1237} RX_STA_CNT2_STRUC, *PRX_STA_CNT2_STRUC;
1238#else
1239typedef union _RX_STA_CNT2_STRUC {
1240 struct {
1241 USHORT RxDupliCount;
1242 USHORT RxFifoOverflowCount;
1243 } field;
1244 UINT32 word;
1245} RX_STA_CNT2_STRUC, *PRX_STA_CNT2_STRUC;
1246#endif
1247#define TX_STA_CNT0 0x170C //
1248//
1249// STA_CSR3: TX Beacon count
1250//
1251#ifdef RT_BIG_ENDIAN
1252typedef union _TX_STA_CNT0_STRUC {
1253 struct {
1254 USHORT TxBeaconCount;
1255 USHORT TxFailCount;
1256 } field;
1257 UINT32 word;
1258} TX_STA_CNT0_STRUC, *PTX_STA_CNT0_STRUC;
1259#else
1260typedef union _TX_STA_CNT0_STRUC {
1261 struct {
1262 USHORT TxFailCount;
1263 USHORT TxBeaconCount;
1264 } field;
1265 UINT32 word;
1266} TX_STA_CNT0_STRUC, *PTX_STA_CNT0_STRUC;
1267#endif
1268#define TX_STA_CNT1 0x1710 //
1269//
1270// TX_STA_CNT1: TX tx count
1271//
1272#ifdef RT_BIG_ENDIAN
1273typedef union _TX_STA_CNT1_STRUC {
1274 struct {
1275 USHORT TxRetransmit;
1276 USHORT TxSuccess;
1277 } field;
1278 UINT32 word;
1279} TX_STA_CNT1_STRUC, *PTX_STA_CNT1_STRUC;
1280#else
1281typedef union _TX_STA_CNT1_STRUC {
1282 struct {
1283 USHORT TxSuccess;
1284 USHORT TxRetransmit;
1285 } field;
1286 UINT32 word;
1287} TX_STA_CNT1_STRUC, *PTX_STA_CNT1_STRUC;
1288#endif
1289#define TX_STA_CNT2 0x1714 //
1290//
1291// TX_STA_CNT2: TX tx count
1292//
1293#ifdef RT_BIG_ENDIAN
1294typedef union _TX_STA_CNT2_STRUC {
1295 struct {
1296 USHORT TxUnderFlowCount;
1297 USHORT TxZeroLenCount;
1298 } field;
1299 UINT32 word;
1300} TX_STA_CNT2_STRUC, *PTX_STA_CNT2_STRUC;
1301#else
1302typedef union _TX_STA_CNT2_STRUC {
1303 struct {
1304 USHORT TxZeroLenCount;
1305 USHORT TxUnderFlowCount;
1306 } field;
1307 UINT32 word;
1308} TX_STA_CNT2_STRUC, *PTX_STA_CNT2_STRUC;
1309#endif
1310#define TX_STA_FIFO 0x1718 //
1311//
1312// TX_STA_FIFO_STRUC: TX Result for specific PID status fifo register
1313//
1314#ifdef RT_BIG_ENDIAN
1315typedef union PACKED _TX_STA_FIFO_STRUC {
1316 struct {
1317 UINT32 Reserve:2;
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
1325 UINT32 PidType:4;
1326 UINT32 bValid:1; // 1:This register contains a valid TX result
1327 } field;
1328 UINT32 word;
1329} TX_STA_FIFO_STRUC, *PTX_STA_FIFO_STRUC;
1330#else
1331typedef union PACKED _TX_STA_FIFO_STRUC {
1332 struct {
1333 UINT32 bValid:1; // 1:This register contains a valid TX result
1334 UINT32 PidType:4;
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.
1341 UINT32 TxBF:1;
1342 UINT32 Reserve:2;
1343 } field;
1344 UINT32 word;
1345} TX_STA_FIFO_STRUC, *PTX_STA_FIFO_STRUC;
1346#endif
1347// Debug counter
1348#define TX_AGG_CNT 0x171c
1349#ifdef RT_BIG_ENDIAN
1350typedef union _TX_AGG_CNT_STRUC {
1351 struct {
1352 USHORT AggTxCount;
1353 USHORT NonAggTxCount;
1354 } field;
1355 UINT32 word;
1356} TX_AGG_CNT_STRUC, *PTX_AGG_CNT_STRUC;
1357#else
1358typedef union _TX_AGG_CNT_STRUC {
1359 struct {
1360 USHORT NonAggTxCount;
1361 USHORT AggTxCount;
1362 } field;
1363 UINT32 word;
1364} TX_AGG_CNT_STRUC, *PTX_AGG_CNT_STRUC;
1365#endif
1366// Debug counter
1367#define TX_AGG_CNT0 0x1720
1368#ifdef RT_BIG_ENDIAN
1369typedef union _TX_AGG_CNT0_STRUC {
1370 struct {
1371 USHORT AggSize2Count;
1372 USHORT AggSize1Count;
1373 } field;
1374 UINT32 word;
1375} TX_AGG_CNT0_STRUC, *PTX_AGG_CNT0_STRUC;
1376#else
1377typedef union _TX_AGG_CNT0_STRUC {
1378 struct {
1379 USHORT AggSize1Count;
1380 USHORT AggSize2Count;
1381 } field;
1382 UINT32 word;
1383} TX_AGG_CNT0_STRUC, *PTX_AGG_CNT0_STRUC;
1384#endif
1385// Debug counter
1386#define TX_AGG_CNT1 0x1724
1387#ifdef RT_BIG_ENDIAN
1388typedef union _TX_AGG_CNT1_STRUC {
1389 struct {
1390 USHORT AggSize4Count;
1391 USHORT AggSize3Count;
1392 } field;
1393 UINT32 word;
1394} TX_AGG_CNT1_STRUC, *PTX_AGG_CNT1_STRUC;
1395#else
1396typedef union _TX_AGG_CNT1_STRUC {
1397 struct {
1398 USHORT AggSize3Count;
1399 USHORT AggSize4Count;
1400 } field;
1401 UINT32 word;
1402} TX_AGG_CNT1_STRUC, *PTX_AGG_CNT1_STRUC;
1403#endif
1404#define TX_AGG_CNT2 0x1728
1405#ifdef RT_BIG_ENDIAN
1406typedef union _TX_AGG_CNT2_STRUC {
1407 struct {
1408 USHORT AggSize6Count;
1409 USHORT AggSize5Count;
1410 } field;
1411 UINT32 word;
1412} TX_AGG_CNT2_STRUC, *PTX_AGG_CNT2_STRUC;
1413#else
1414typedef union _TX_AGG_CNT2_STRUC {
1415 struct {
1416 USHORT AggSize5Count;
1417 USHORT AggSize6Count;
1418 } field;
1419 UINT32 word;
1420} TX_AGG_CNT2_STRUC, *PTX_AGG_CNT2_STRUC;
1421#endif
1422// Debug counter
1423#define TX_AGG_CNT3 0x172c
1424#ifdef RT_BIG_ENDIAN
1425typedef union _TX_AGG_CNT3_STRUC {
1426 struct {
1427 USHORT AggSize8Count;
1428 USHORT AggSize7Count;
1429 } field;
1430 UINT32 word;
1431} TX_AGG_CNT3_STRUC, *PTX_AGG_CNT3_STRUC;
1432#else
1433typedef union _TX_AGG_CNT3_STRUC {
1434 struct {
1435 USHORT AggSize7Count;
1436 USHORT AggSize8Count;
1437 } field;
1438 UINT32 word;
1439} TX_AGG_CNT3_STRUC, *PTX_AGG_CNT3_STRUC;
1440#endif
1441// Debug counter
1442#define TX_AGG_CNT4 0x1730
1443#ifdef RT_BIG_ENDIAN
1444typedef union _TX_AGG_CNT4_STRUC {
1445 struct {
1446 USHORT AggSize10Count;
1447 USHORT AggSize9Count;
1448 } field;
1449 UINT32 word;
1450} TX_AGG_CNT4_STRUC, *PTX_AGG_CNT4_STRUC;
1451#else
1452typedef union _TX_AGG_CNT4_STRUC {
1453 struct {
1454 USHORT AggSize9Count;
1455 USHORT AggSize10Count;
1456 } field;
1457 UINT32 word;
1458} TX_AGG_CNT4_STRUC, *PTX_AGG_CNT4_STRUC;
1459#endif
1460#define TX_AGG_CNT5 0x1734
1461#ifdef RT_BIG_ENDIAN
1462typedef union _TX_AGG_CNT5_STRUC {
1463 struct {
1464 USHORT AggSize12Count;
1465 USHORT AggSize11Count;
1466 } field;
1467 UINT32 word;
1468} TX_AGG_CNT5_STRUC, *PTX_AGG_CNT5_STRUC;
1469#else
1470typedef union _TX_AGG_CNT5_STRUC {
1471 struct {
1472 USHORT AggSize11Count;
1473 USHORT AggSize12Count;
1474 } field;
1475 UINT32 word;
1476} TX_AGG_CNT5_STRUC, *PTX_AGG_CNT5_STRUC;
1477#endif
1478#define TX_AGG_CNT6 0x1738
1479#ifdef RT_BIG_ENDIAN
1480typedef union _TX_AGG_CNT6_STRUC {
1481 struct {
1482 USHORT AggSize14Count;
1483 USHORT AggSize13Count;
1484 } field;
1485 UINT32 word;
1486} TX_AGG_CNT6_STRUC, *PTX_AGG_CNT6_STRUC;
1487#else
1488typedef union _TX_AGG_CNT6_STRUC {
1489 struct {
1490 USHORT AggSize13Count;
1491 USHORT AggSize14Count;
1492 } field;
1493 UINT32 word;
1494} TX_AGG_CNT6_STRUC, *PTX_AGG_CNT6_STRUC;
1495#endif
1496#define TX_AGG_CNT7 0x173c
1497#ifdef RT_BIG_ENDIAN
1498typedef union _TX_AGG_CNT7_STRUC {
1499 struct {
1500 USHORT AggSize16Count;
1501 USHORT AggSize15Count;
1502 } field;
1503 UINT32 word;
1504} TX_AGG_CNT7_STRUC, *PTX_AGG_CNT7_STRUC;
1505#else
1506typedef union _TX_AGG_CNT7_STRUC {
1507 struct {
1508 USHORT AggSize15Count;
1509 USHORT AggSize16Count;
1510 } field;
1511 UINT32 word;
1512} TX_AGG_CNT7_STRUC, *PTX_AGG_CNT7_STRUC;
1513#endif
1514#define MPDU_DENSITY_CNT 0x1740
1515#ifdef RT_BIG_ENDIAN
1516typedef union _MPDU_DEN_CNT_STRUC {
1517 struct {
1518 USHORT RXZeroDelCount; //RX zero length delimiter count
1519 USHORT TXZeroDelCount; //TX zero length delimiter count
1520 } field;
1521 UINT32 word;
1522} MPDU_DEN_CNT_STRUC, *PMPDU_DEN_CNT_STRUC;
1523#else
1524typedef union _MPDU_DEN_CNT_STRUC {
1525 struct {
1526 USHORT TXZeroDelCount; //TX zero length delimiter count
1527 USHORT RXZeroDelCount; //RX zero length delimiter count
1528 } field;
1529 UINT32 word;
1530} MPDU_DEN_CNT_STRUC, *PMPDU_DEN_CNT_STRUC;
1531#endif
1532//
1533// TXRX control registers - base address 0x3000
1534//
1535// rt2860b UNKNOWN reg use R/O Reg Addr 0x77d0 first..
1536#define TXRX_CSR1 0x77d0
1537
1538//
1539// Security key table memory, base address = 0x1000
1540//
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
1556
1557
1558#ifdef RT_BIG_ENDIAN
1559typedef union _SHAREDKEY_MODE_STRUC {
1560 struct {
1561 UINT32 :1;
1562 UINT32 Bss1Key3CipherAlg:3;
1563 UINT32 :1;
1564 UINT32 Bss1Key2CipherAlg:3;
1565 UINT32 :1;
1566 UINT32 Bss1Key1CipherAlg:3;
1567 UINT32 :1;
1568 UINT32 Bss1Key0CipherAlg:3;
1569 UINT32 :1;
1570 UINT32 Bss0Key3CipherAlg:3;
1571 UINT32 :1;
1572 UINT32 Bss0Key2CipherAlg:3;
1573 UINT32 :1;
1574 UINT32 Bss0Key1CipherAlg:3;
1575 UINT32 :1;
1576 UINT32 Bss0Key0CipherAlg:3;
1577 } field;
1578 UINT32 word;
1579} SHAREDKEY_MODE_STRUC, *PSHAREDKEY_MODE_STRUC;
1580#else
1581typedef union _SHAREDKEY_MODE_STRUC {
1582 struct {
1583 UINT32 Bss0Key0CipherAlg:3;
1584 UINT32 :1;
1585 UINT32 Bss0Key1CipherAlg:3;
1586 UINT32 :1;
1587 UINT32 Bss0Key2CipherAlg:3;
1588 UINT32 :1;
1589 UINT32 Bss0Key3CipherAlg:3;
1590 UINT32 :1;
1591 UINT32 Bss1Key0CipherAlg:3;
1592 UINT32 :1;
1593 UINT32 Bss1Key1CipherAlg:3;
1594 UINT32 :1;
1595 UINT32 Bss1Key2CipherAlg:3;
1596 UINT32 :1;
1597 UINT32 Bss1Key3CipherAlg:3;
1598 UINT32 :1;
1599 } field;
1600 UINT32 word;
1601} SHAREDKEY_MODE_STRUC, *PSHAREDKEY_MODE_STRUC;
1602#endif
1603// 64-entry for pairwise key table
1604typedef struct _HW_WCID_ENTRY { // 8-byte per entry
1605 UCHAR Address[6];
1606 UCHAR Rsv[2];
1607} HW_WCID_ENTRY, PHW_WCID_ENTRY;
1608
1609
1610
1611//
1612// Other on-chip shared memory space, base = 0x2000
1613//
1614
1615// CIS space - base address = 0x2000
1616#define HW_CIS_BASE 0x2000
1617
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
1623
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
1628
1629#if 0
1630// on-chip BEACON frame space - base address = 0x7800
1631#define HW_BEACON_MAX_SIZE 0x0800 /* unit: byte */
1632#define HW_BEACON_BASE0 0x7800
1633#define HW_BEACON_BASE1 0x7900
1634#define HW_BEACON_BASE2 0x7a00
1635#define HW_BEACON_BASE3 0x7b00
1636#define HW_BEACON_BASE4 0x7c00
1637#define HW_BEACON_BASE5 0x7d00
1638#define HW_BEACON_BASE6 0x7e00
1639#define HW_BEACON_BASE7 0x7f00
1640/* 1. HW_BEACON_OFFSET/64B must be 0;
1641 2. BCN_OFFSET0 must also be changed in NICInitializeAsic();
1642 3. max 0x0800 for 8 beacon frames; */
1643#else
1644// In order to support maximum 8 MBSS and its maximum length is 512 for each beacon
1645// Three section discontinue memory segments will be used.
1646// 1. The original region for BCN 0~3
1647// 2. Extract memory from FCE table for BCN 4~5
1648// 3. Extract memory from Pair-wise key table for BCN 6~7
1649// It occupied those memory of wcid 238~253 for BCN 6
1650// and wcid 222~237 for BCN 7
1651#define HW_BEACON_MAX_SIZE 0x1000 /* unit: byte */
1652#define HW_BEACON_BASE0 0x7800
1653#define HW_BEACON_BASE1 0x7A00
1654#define HW_BEACON_BASE2 0x7C00
1655#define HW_BEACON_BASE3 0x7E00
1656#define HW_BEACON_BASE4 0x7200
1657#define HW_BEACON_BASE5 0x7400
1658#define HW_BEACON_BASE6 0x5DC0
1659#define HW_BEACON_BASE7 0x5BC0
1660#endif
1661
1662#define HW_BEACON_MAX_COUNT 8
1663#define HW_BEACON_OFFSET 0x0200
1664#define HW_BEACON_CONTENT_LEN (HW_BEACON_OFFSET - TXWI_SIZE)
1665
1666// HOST-MCU shared memory - base address = 0x2100
1667#define HOST_CMD_CSR 0x404
1668#define H2M_MAILBOX_CSR 0x7010
1669#define H2M_MAILBOX_CID 0x7014
1670#define H2M_MAILBOX_STATUS 0x701c
1671#define H2M_INT_SRC 0x7024
1672#define H2M_BBP_AGENT 0x7028
1673#define M2H_CMD_DONE_CSR 0x000c
1674#define MCU_TXOP_ARRAY_BASE 0x000c // TODO: to be provided by Albert
1675#define MCU_TXOP_ENTRY_SIZE 32 // TODO: to be provided by Albert
1676#define MAX_NUM_OF_TXOP_ENTRY 16 // TODO: must be same with 8051 firmware
1677#define MCU_MBOX_VERSION 0x01 // TODO: to be confirmed by Albert
1678#define MCU_MBOX_VERSION_OFFSET 5 // TODO: to be provided by Albert
1679
1680//
1681// Host DMA registers - base address 0x200 . TX0-3=EDCAQid0-3, TX4=HCCA, TX5=MGMT,
1682//
1683//
1684// DMA RING DESCRIPTOR
1685//
1686#define E2PROM_CSR 0x0004
1687#define IO_CNTL_CSR 0x77d0
1688
1689#ifdef RT2870
1690// 8051 firmware image for usb - use last-half base address = 0x3000
1691#define FIRMWARE_IMAGE_BASE 0x3000
1692#define MAX_FIRMWARE_IMAGE_SIZE 0x1000 // 4kbyte
1693#endif // RT2870 //
1694
1695// TODO: ????? old RT2560 registers. to keep them or remove them?
1696//#define MCAST0 0x0178 // multicast filter register 0
1697//#define MCAST1 0x017c // multicast filter register 1
1698
1699
1700// ================================================================
1701// Tx / Rx / Mgmt ring descriptor definition
1702// ================================================================
1703
1704// the following PID values are used to mark outgoing frame type in TXD->PID so that
1705// proper TX statistics can be collected based on these categories
1706// b3-2 of PID field -
1707#define PID_MGMT 0x05
1708#define PID_BEACON 0x0c
1709#define PID_DATA_NORMALUCAST 0x02
1710#define PID_DATA_AMPDU 0x04
1711#define PID_DATA_NO_ACK 0x08
1712#define PID_DATA_NOT_NORM_ACK 0x03
1713#if 0
1714#define PTYPE_DATA_REQUIRE_ACK 0x00 // b7-6:00, b5-0: 0~59 is MAC table index (AID?), 60~63 is WDS index
1715#define PTYPE_NULL_AT_HIGH_RATE 0x04 // b7-6:01, b5-0: 0~59 is MAC table index (AID?), 60~63 is WDS index
1716#define PTYPE_RESERVED 0x08 // b7-6:10
1717#define PTYPE_SPECIAL 0x0c // b7-6:11
1718
1719// when b3-2=11 (PTYPE_SPECIAL), b1-0 coube be ...
1720#define PSUBTYPE_DATA_NO_ACK 0x00
1721#define PSUBTYPE_MGMT 0x01
1722#define PSUBTYPE_OTHER_CNTL 0x02
1723#define PSUBTYPE_RTS 0x03
1724#endif
1725// value domain of pTxD->HostQId (4-bit: 0~15)
1726#define QID_AC_BK 1 // meet ACI definition in 802.11e
1727#define QID_AC_BE 0 // meet ACI definition in 802.11e
1728#define QID_AC_VI 2
1729#define QID_AC_VO 3
1730#define QID_HCCA 4
1731#define NUM_OF_TX_RING 5
1732#define QID_MGMT 13
1733#define QID_RX 14
1734#define QID_OTHER 15
1735
1736
1737// ------------------------------------------------------
1738// BBP & RF definition
1739// ------------------------------------------------------
1740#define BUSY 1
1741#define IDLE 0
1742
1743#define RF_R00 0
1744#define RF_R01 1
1745#define RF_R02 2
1746#define RF_R03 3
1747#define RF_R04 4
1748#define RF_R05 5
1749#define RF_R06 6
1750#define RF_R07 7
1751#define RF_R08 8
1752#define RF_R09 9
1753#define RF_R10 10
1754#define RF_R11 11
1755#define RF_R12 12
1756#define RF_R13 13
1757#define RF_R14 14
1758#define RF_R15 15
1759#define RF_R16 16
1760#define RF_R17 17
1761#define RF_R18 18
1762#define RF_R19 19
1763#define RF_R20 20
1764#define RF_R21 21
1765#define RF_R22 22
1766#define RF_R23 23
1767#define RF_R24 24
1768#define RF_R25 25
1769#define RF_R26 26
1770#define RF_R27 27
1771#define RF_R28 28
1772#define RF_R29 29
1773#define RF_R30 30
1774#define RF_R31 31
1775
1776#define BBP_R0 0 // version
1777#define BBP_R1 1 // TSSI
1778#define BBP_R2 2 // TX configure
1779#define BBP_R3 3
1780#define BBP_R4 4
1781#define BBP_R5 5
1782#define BBP_R6 6
1783#define BBP_R14 14 // RX configure
1784#define BBP_R16 16
1785#define BBP_R17 17 // RX sensibility
1786#define BBP_R18 18
1787#define BBP_R21 21
1788#define BBP_R22 22
1789#define BBP_R24 24
1790#define BBP_R25 25
1791#define BBP_R49 49 //TSSI
1792#define BBP_R50 50
1793#define BBP_R51 51
1794#define BBP_R52 52
1795#define BBP_R55 55
1796#define BBP_R62 62 // Rx SQ0 Threshold HIGH
1797#define BBP_R63 63
1798#define BBP_R64 64
1799#define BBP_R65 65
1800#define BBP_R66 66
1801#define BBP_R67 67
1802#define BBP_R68 68
1803#define BBP_R69 69
1804#define BBP_R70 70 // Rx AGC SQ CCK Xcorr threshold
1805#define BBP_R73 73
1806#define BBP_R75 75
1807#define BBP_R77 77
1808#define BBP_R81 81
1809#define BBP_R82 82
1810#define BBP_R83 83
1811#define BBP_R84 84
1812#define BBP_R86 86
1813#define BBP_R91 91
1814#define BBP_R92 92
1815#define BBP_R94 94 // Tx Gain Control
1816#define BBP_R103 103
1817#define BBP_R105 105
1818#define BBP_R113 113
1819#define BBP_R114 114
1820#define BBP_R115 115
1821#define BBP_R116 116
1822#define BBP_R117 117
1823#define BBP_R118 118
1824#define BBP_R119 119
1825#define BBP_R120 120
1826#define BBP_R121 121
1827#define BBP_R122 122
1828#define BBP_R123 123
1829
1830
1831#define BBPR94_DEFAULT 0x06 // Add 1 value will gain 1db
1832
1833//#define PHY_TR_SWITCH_TIME 5 // usec
1834
1835//#define BBP_R17_LOW_SENSIBILITY 0x50
1836//#define BBP_R17_MID_SENSIBILITY 0x41
1837//#define BBP_R17_DYNAMIC_UP_BOUND 0x40
1838#define RSSI_FOR_VERY_LOW_SENSIBILITY -35
1839#define RSSI_FOR_LOW_SENSIBILITY -58
1840#define RSSI_FOR_MID_LOW_SENSIBILITY -80
1841#define RSSI_FOR_MID_SENSIBILITY -90
1842
1843//-------------------------------------------------------------------------
1844// EEPROM definition
1845//-------------------------------------------------------------------------
1846#define EEDO 0x08
1847#define EEDI 0x04
1848#define EECS 0x02
1849#define EESK 0x01
1850#define EERL 0x80
1851
1852#define EEPROM_WRITE_OPCODE 0x05
1853#define EEPROM_READ_OPCODE 0x06
1854#define EEPROM_EWDS_OPCODE 0x10
1855#define EEPROM_EWEN_OPCODE 0x13
1856
1857#define NUM_EEPROM_BBP_PARMS 19 // Include NIC Config 0, 1, CR, TX ALC step, BBPs
1858#define NUM_EEPROM_TX_G_PARMS 7
1859#define EEPROM_NIC1_OFFSET 0x34 // The address is from NIC config 0, not BBP register ID
1860#define EEPROM_NIC2_OFFSET 0x36 // The address is from NIC config 0, not BBP register ID
1861#define EEPROM_BBP_BASE_OFFSET 0xf0 // The address is from NIC config 0, not BBP register ID
1862#define EEPROM_G_TX_PWR_OFFSET 0x52
1863#define EEPROM_G_TX2_PWR_OFFSET 0x60
1864#define EEPROM_LED1_OFFSET 0x3c
1865#define EEPROM_LED2_OFFSET 0x3e
1866#define EEPROM_LED3_OFFSET 0x40
1867#define EEPROM_LNA_OFFSET 0x44
1868#define EEPROM_RSSI_BG_OFFSET 0x46
1869#define EEPROM_RSSI_A_OFFSET 0x4a
1870#define EEPROM_DEFINE_MAX_TXPWR 0x4e
1871#define EEPROM_TXPOWER_BYRATE_20MHZ_2_4G 0xde // 20MHZ 2.4G tx power.
1872#define EEPROM_TXPOWER_BYRATE_40MHZ_2_4G 0xee // 40MHZ 2.4G tx power.
1873#define EEPROM_TXPOWER_BYRATE_20MHZ_5G 0xfa // 20MHZ 5G tx power.
1874#define EEPROM_TXPOWER_BYRATE_40MHZ_5G 0x10a // 40MHZ 5G tx power.
1875#define EEPROM_A_TX_PWR_OFFSET 0x78
1876#define EEPROM_A_TX2_PWR_OFFSET 0xa6
1877//#define EEPROM_Japan_TX_PWR_OFFSET 0x90 // 802.11j
1878//#define EEPROM_Japan_TX2_PWR_OFFSET 0xbe
1879//#define EEPROM_TSSI_REF_OFFSET 0x54
1880//#define EEPROM_TSSI_DELTA_OFFSET 0x24
1881//#define EEPROM_CCK_TX_PWR_OFFSET 0x62
1882//#define EEPROM_CALIBRATE_OFFSET 0x7c
1883#define EEPROM_VERSION_OFFSET 0x02
1884#define EEPROM_FREQ_OFFSET 0x3a
1885#define EEPROM_TXPOWER_BYRATE 0xde // 20MHZ power.
1886#define EEPROM_TXPOWER_DELTA 0x50 // 20MHZ AND 40 MHZ use different power. This is delta in 40MHZ.
1887#define VALID_EEPROM_VERSION 1
1888
1889// PairKeyMode definition
1890#define PKMODE_NONE 0
1891#define PKMODE_WEP64 1
1892#define PKMODE_WEP128 2
1893#define PKMODE_TKIP 3
1894#define PKMODE_AES 4
1895#define PKMODE_CKIP64 5
1896#define PKMODE_CKIP128 6
1897#define PKMODE_TKIP_NO_MIC 7 // MIC appended by driver: not a valid value in hardware key table
1898
1899// =================================================================================
1900// WCID format
1901// =================================================================================
1902//7.1 WCID ENTRY format : 8bytes
1903typedef struct _WCID_ENTRY_STRUC {
1904 UCHAR RXBABitmap7; // bit0 for TID8, bit7 for TID 15
1905 UCHAR RXBABitmap0; // bit0 for TID0, bit7 for TID 7
1906 UCHAR MAC[6]; // 0 for shared key table. 1 for pairwise key table
1907} WCID_ENTRY_STRUC, *PWCID_ENTRY_STRUC;
1908
1909//8.1.1 SECURITY KEY format : 8DW
1910// 32-byte per entry, total 16-entry for shared key table, 64-entry for pairwise key table
1911typedef struct _HW_KEY_ENTRY { // 32-byte per entry
1912 UCHAR Key[16];
1913 UCHAR TxMic[8];
1914 UCHAR RxMic[8];
1915} HW_KEY_ENTRY, *PHW_KEY_ENTRY;
1916
1917//8.1.2 IV/EIV format : 2DW
1918
1919//8.1.3 RX attribute entry format : 1DW
1920#ifdef RT_BIG_ENDIAN
1921typedef struct _MAC_ATTRIBUTE_STRUC {
1922 UINT32 rsv:22;
1923 UINT32 RXWIUDF:3;
1924 UINT32 BSSIDIdx:3; //multipleBSS index for the WCID
1925 UINT32 PairKeyMode:3;
1926 UINT32 KeyTab:1; // 0 for shared key table. 1 for pairwise key table
1927} MAC_ATTRIBUTE_STRUC, *PMAC_ATTRIBUTE_STRUC;
1928#else
1929typedef struct _MAC_ATTRIBUTE_STRUC {
1930 UINT32 KeyTab:1; // 0 for shared key table. 1 for pairwise key table
1931 UINT32 PairKeyMode:3;
1932 UINT32 BSSIDIdx:3; //multipleBSS index for the WCID
1933 UINT32 RXWIUDF:3;
1934 UINT32 rsv:22;
1935} MAC_ATTRIBUTE_STRUC, *PMAC_ATTRIBUTE_STRUC;
1936#endif
1937
1938
1939// =================================================================================
1940// TX / RX ring descriptor format
1941// =================================================================================
1942
1943// the first 24-byte in TXD is called TXINFO and will be DMAed to MAC block through TXFIFO.
1944// MAC block use this TXINFO to control the transmission behavior of this frame.
1945#define FIFO_MGMT 0
1946#define FIFO_HCCA 1
1947#define FIFO_EDCA 2
1948
1949//
1950// TX descriptor format, Tx ring, Mgmt Ring
1951//
1952#ifdef RT_BIG_ENDIAN
1953typedef struct PACKED _TXD_STRUC {
1954 // Word 0
1955 UINT32 SDPtr0;
1956 // Word 1
1957 UINT32 DMADONE:1;
1958 UINT32 LastSec0:1;
1959 UINT32 SDLen0:14;
1960 UINT32 Burst:1;
1961 UINT32 LastSec1:1;
1962 UINT32 SDLen1:14;
1963 // Word 2
1964 UINT32 SDPtr1;
1965 // Word 3
1966 UINT32 ICO:1;
1967 UINT32 UCO:1;
1968 UINT32 TCO:1;
1969 UINT32 rsv:2;
1970 UINT32 QSEL:2; // select on-chip FIFO ID for 2nd-stage output scheduler.0:MGMT, 1:HCCA 2:EDCA
1971 UINT32 WIV:1; // Wireless Info Valid. 1 if Driver already fill WI, o if DMA needs to copy WI to correctposition
1972 UINT32 rsv2:24;
1973} TXD_STRUC, *PTXD_STRUC;
1974#else
1975typedef struct PACKED _TXD_STRUC {
1976 // Word 0
1977 UINT32 SDPtr0;
1978 // Word 1
1979 UINT32 SDLen1:14;
1980 UINT32 LastSec1:1;
1981 UINT32 Burst:1;
1982 UINT32 SDLen0:14;
1983 UINT32 LastSec0:1;
1984 UINT32 DMADONE:1;
1985 //Word2
1986 UINT32 SDPtr1;
1987 //Word3
1988 UINT32 rsv2:24;
1989 UINT32 WIV:1; // Wireless Info Valid. 1 if Driver already fill WI, o if DMA needs to copy WI to correctposition
1990 UINT32 QSEL:2; // select on-chip FIFO ID for 2nd-stage output scheduler.0:MGMT, 1:HCCA 2:EDCA
1991 UINT32 rsv:2;
1992 UINT32 TCO:1; //
1993 UINT32 UCO:1; //
1994 UINT32 ICO:1; //
1995} TXD_STRUC, *PTXD_STRUC;
1996#endif
1997
1998
1999//
2000// TXD Wireless Information format for Tx ring and Mgmt Ring
2001//
2002//txop : for txop mode
2003// 0:txop for the MPDU frame will be handles by ASIC by register
2004// 1/2/3:the MPDU frame is send after PIFS/backoff/SIFS
2005#ifdef RT_BIG_ENDIAN
2006typedef struct PACKED _TXWI_STRUC {
2007 // Word 0
2008 UINT32 PHYMODE:2;
2009 UINT32 TxBF:1; // 3*3
2010 UINT32 rsv2:1;
2011// UINT32 rsv2:2;
2012 UINT32 Ifs:1; //
2013 UINT32 STBC:2; //channel bandwidth 20MHz or 40 MHz
2014 UINT32 ShortGI:1;
2015 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
2016 UINT32 MCS:7;
2017
2018 UINT32 rsv:6;
2019 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.
2020 UINT32 MpduDensity:3;
2021 UINT32 AMPDU:1;
2022
2023 UINT32 TS:1;
2024 UINT32 CFACK:1;
2025 UINT32 MIMOps:1; // the remote peer is in dynamic MIMO-PS mode
2026 UINT32 FRAG:1; // 1 to inform TKIP engine this is a fragment.
2027 // Word 1
2028 UINT32 PacketId:4;
2029 UINT32 MPDUtotalByteCount:12;
2030 UINT32 WirelessCliID:8;
2031 UINT32 BAWinSize:6;
2032 UINT32 NSEQ:1;
2033 UINT32 ACK:1;
2034 // Word 2
2035 UINT32 IV;
2036 // Word 3
2037 UINT32 EIV;
2038} TXWI_STRUC, *PTXWI_STRUC;
2039#else
2040typedef struct PACKED _TXWI_STRUC {
2041 // Word 0
2042 UINT32 FRAG:1; // 1 to inform TKIP engine this is a fragment.
2043 UINT32 MIMOps:1; // the remote peer is in dynamic MIMO-PS mode
2044 UINT32 CFACK:1;
2045 UINT32 TS:1;
2046
2047 UINT32 AMPDU:1;
2048 UINT32 MpduDensity:3;
2049 UINT32 txop:2; //FOR "THIS" frame. 0:HT TXOP rule , 1:PIFS TX ,2:Backoff, 3:sifs only when previous frame exchange is successful.
2050 UINT32 rsv:6;
2051
2052 UINT32 MCS:7;
2053 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
2054 UINT32 ShortGI:1;
2055 UINT32 STBC:2; // 1: STBC support MCS =0-7, 2,3 : RESERVE
2056 UINT32 Ifs:1; //
2057// UINT32 rsv2:2; //channel bandwidth 20MHz or 40 MHz
2058 UINT32 rsv2:1;
2059 UINT32 TxBF:1; // 3*3
2060 UINT32 PHYMODE:2;
2061 // Word 1
2062 UINT32 ACK:1;
2063 UINT32 NSEQ:1;
2064 UINT32 BAWinSize:6;
2065 UINT32 WirelessCliID:8;
2066 UINT32 MPDUtotalByteCount:12;
2067 UINT32 PacketId:4;
2068 //Word2
2069 UINT32 IV;
2070 //Word3
2071 UINT32 EIV;
2072} TXWI_STRUC, *PTXWI_STRUC;
2073#endif
2074//
2075// Rx descriptor format, Rx Ring
2076//
2077//
2078// RXWI wireless information format, in PBF. invisible in driver.
2079//
2080#ifdef RT_BIG_ENDIAN
2081typedef struct PACKED _RXWI_STRUC {
2082 // Word 0
2083 UINT32 TID:4;
2084 UINT32 MPDUtotalByteCount:12;
2085 UINT32 UDF:3;
2086 UINT32 BSSID:3;
2087 UINT32 KeyIndex:2;
2088 UINT32 WirelessCliID:8;
2089 // Word 1
2090 UINT32 PHYMODE:2; // 1: this RX frame is unicast to me
2091 UINT32 rsv:3;
2092 UINT32 STBC:2;
2093 UINT32 ShortGI:1;
2094 UINT32 BW:1;
2095 UINT32 MCS:7;
2096 UINT32 SEQUENCE:12;
2097 UINT32 FRAG:4;
2098 // Word 2
2099 UINT32 rsv1:8;
2100 UINT32 RSSI2:8;
2101 UINT32 RSSI1:8;
2102 UINT32 RSSI0:8;
2103 // Word 3
2104 UINT32 rsv2:16;
2105 UINT32 SNR1:8;
2106 UINT32 SNR0:8;
2107} RXWI_STRUC, *PRXWI_STRUC;
2108#else
2109typedef struct PACKED _RXWI_STRUC {
2110 // Word 0
2111 UINT32 WirelessCliID:8;
2112 UINT32 KeyIndex:2;
2113 UINT32 BSSID:3;
2114 UINT32 UDF:3;
2115 UINT32 MPDUtotalByteCount:12;
2116 UINT32 TID:4;
2117 // Word 1
2118 UINT32 FRAG:4;
2119 UINT32 SEQUENCE:12;
2120 UINT32 MCS:7;
2121 UINT32 BW:1;
2122 UINT32 ShortGI:1;
2123 UINT32 STBC:2;
2124 UINT32 rsv:3;
2125 UINT32 PHYMODE:2; // 1: this RX frame is unicast to me
2126 //Word2
2127 UINT32 RSSI0:8;
2128 UINT32 RSSI1:8;
2129 UINT32 RSSI2:8;
2130 UINT32 rsv1:8;
2131 //Word3
2132 UINT32 SNR0:8;
2133 UINT32 SNR1:8;
2134 UINT32 rsv2:16;
2135} RXWI_STRUC, *PRXWI_STRUC;
2136#endif
2137
2138
2139// =================================================================================
2140// HOST-MCU communication data structure
2141// =================================================================================
2142
2143//
2144// H2M_MAILBOX_CSR: Host-to-MCU Mailbox
2145//
2146#ifdef RT_BIG_ENDIAN
2147typedef union _H2M_MAILBOX_STRUC {
2148 struct {
2149 UINT32 Owner:8;
2150 UINT32 CmdToken:8; // 0xff tells MCU not to report CmdDoneInt after excuting the command
2151 UINT32 HighByte:8;
2152 UINT32 LowByte:8;
2153 } field;
2154 UINT32 word;
2155} H2M_MAILBOX_STRUC, *PH2M_MAILBOX_STRUC;
2156#else
2157typedef union _H2M_MAILBOX_STRUC {
2158 struct {
2159 UINT32 LowByte:8;
2160 UINT32 HighByte:8;
2161 UINT32 CmdToken:8;
2162 UINT32 Owner:8;
2163 } field;
2164 UINT32 word;
2165} H2M_MAILBOX_STRUC, *PH2M_MAILBOX_STRUC;
2166#endif
2167
2168//
2169// M2H_CMD_DONE_CSR: MCU-to-Host command complete indication
2170//
2171#ifdef RT_BIG_ENDIAN
2172typedef union _M2H_CMD_DONE_STRUC {
2173 struct {
2174 UINT32 CmdToken3;
2175 UINT32 CmdToken2;
2176 UINT32 CmdToken1;
2177 UINT32 CmdToken0;
2178 } field;
2179 UINT32 word;
2180} M2H_CMD_DONE_STRUC, *PM2H_CMD_DONE_STRUC;
2181#else
2182typedef union _M2H_CMD_DONE_STRUC {
2183 struct {
2184 UINT32 CmdToken0;
2185 UINT32 CmdToken1;
2186 UINT32 CmdToken2;
2187 UINT32 CmdToken3;
2188 } field;
2189 UINT32 word;
2190} M2H_CMD_DONE_STRUC, *PM2H_CMD_DONE_STRUC;
2191#endif
2192
2193
2194
2195//
2196// MCU_LEDCS: MCU LED Control Setting.
2197//
2198#ifdef RT_BIG_ENDIAN
2199typedef union _MCU_LEDCS_STRUC {
2200 struct {
2201 UCHAR Polarity:1;
2202 UCHAR LedMode:7;
2203 } field;
2204 UCHAR word;
2205} MCU_LEDCS_STRUC, *PMCU_LEDCS_STRUC;
2206#else
2207typedef union _MCU_LEDCS_STRUC {
2208 struct {
2209 UCHAR LedMode:7;
2210 UCHAR Polarity:1;
2211 } field;
2212 UCHAR word;
2213} MCU_LEDCS_STRUC, *PMCU_LEDCS_STRUC;
2214#endif
2215// =================================================================================
2216// Register format
2217// =================================================================================
2218
2219
2220
2221//NAV_TIME_CFG :NAV
2222#ifdef RT_BIG_ENDIAN
2223typedef union _NAV_TIME_CFG_STRUC {
2224 struct {
2225 USHORT rsv:6;
2226 USHORT ZeroSifs:1; // Applied zero SIFS timer after OFDM RX 0: disable
2227 USHORT Eifs:9; // in unit of 1-us
2228 UCHAR SlotTime; // in unit of 1-us
2229 UCHAR Sifs; // in unit of 1-us
2230 } field;
2231 UINT32 word;
2232} NAV_TIME_CFG_STRUC, *PNAV_TIME_CFG_STRUC;
2233#else
2234typedef union _NAV_TIME_CFG_STRUC {
2235 struct {
2236 UCHAR Sifs; // in unit of 1-us
2237 UCHAR SlotTime; // in unit of 1-us
2238 USHORT Eifs:9; // in unit of 1-us
2239 USHORT ZeroSifs:1; // Applied zero SIFS timer after OFDM RX 0: disable
2240 USHORT rsv:6;
2241 } field;
2242 UINT32 word;
2243} NAV_TIME_CFG_STRUC, *PNAV_TIME_CFG_STRUC;
2244#endif
2245
2246
2247
2248
2249
2250//
2251// RX_FILTR_CFG: /RX configuration register
2252//
2253#ifdef RT_BIG_ENDIAN
2254typedef union RX_FILTR_CFG_STRUC {
2255 struct {
2256 UINT32 :15;
2257 UINT32 DropRsvCntlType:1;
2258
2259 UINT32 DropBAR:1; //
2260 UINT32 DropBA:1; //
2261 UINT32 DropPsPoll:1; // Drop Ps-Poll
2262 UINT32 DropRts:1; // Drop Ps-Poll
2263
2264 UINT32 DropCts:1; // Drop Ps-Poll
2265 UINT32 DropAck:1; // Drop Ps-Poll
2266 UINT32 DropCFEnd:1; // Drop Ps-Poll
2267 UINT32 DropCFEndAck:1; // Drop Ps-Poll
2268
2269 UINT32 DropDuplicate:1; // Drop duplicate frame
2270 UINT32 DropBcast:1; // Drop broadcast frames
2271 UINT32 DropMcast:1; // Drop multicast frames
2272 UINT32 DropVerErr:1; // Drop version error frame
2273
2274 UINT32 DropNotMyBSSID:1; // Drop fram ToDs bit is true
2275 UINT32 DropNotToMe:1; // Drop not to me unicast frame
2276 UINT32 DropPhyErr:1; // Drop physical error
2277 UINT32 DropCRCErr:1; // Drop CRC error
2278 } field;
2279 UINT32 word;
2280} RX_FILTR_CFG_STRUC, *PRX_FILTR_CFG_STRUC;
2281#else
2282typedef union _RX_FILTR_CFG_STRUC {
2283 struct {
2284 UINT32 DropCRCErr:1; // Drop CRC error
2285 UINT32 DropPhyErr:1; // Drop physical error
2286 UINT32 DropNotToMe:1; // Drop not to me unicast frame
2287 UINT32 DropNotMyBSSID:1; // Drop fram ToDs bit is true
2288
2289 UINT32 DropVerErr:1; // Drop version error frame
2290 UINT32 DropMcast:1; // Drop multicast frames
2291 UINT32 DropBcast:1; // Drop broadcast frames
2292 UINT32 DropDuplicate:1; // Drop duplicate frame
2293
2294 UINT32 DropCFEndAck:1; // Drop Ps-Poll
2295 UINT32 DropCFEnd:1; // Drop Ps-Poll
2296 UINT32 DropAck:1; // Drop Ps-Poll
2297 UINT32 DropCts:1; // Drop Ps-Poll
2298
2299 UINT32 DropRts:1; // Drop Ps-Poll
2300 UINT32 DropPsPoll:1; // Drop Ps-Poll
2301 UINT32 DropBA:1; //
2302 UINT32 DropBAR:1; //
2303
2304 UINT32 DropRsvCntlType:1;
2305 UINT32 :15;
2306 } field;
2307 UINT32 word;
2308} RX_FILTR_CFG_STRUC, *PRX_FILTR_CFG_STRUC;
2309#endif
2310
2311
2312
2313
2314//
2315// PHY_CSR4: RF serial control register
2316//
2317#ifdef RT_BIG_ENDIAN
2318typedef union _PHY_CSR4_STRUC {
2319 struct {
2320 UINT32 Busy:1; // 1: ASIC is busy execute RF programming.
2321 UINT32 PLL_LD:1; // RF PLL_LD status
2322 UINT32 IFSelect:1; // 1: select IF to program, 0: select RF to program
2323 UINT32 NumberOfBits:5; // Number of bits used in RFRegValue (I:20, RFMD:22)
2324 UINT32 RFRegValue:24; // Register value (include register id) serial out to RF/IF chip.
2325 } field;
2326 UINT32 word;
2327} PHY_CSR4_STRUC, *PPHY_CSR4_STRUC;
2328#else
2329typedef union _PHY_CSR4_STRUC {
2330 struct {
2331 UINT32 RFRegValue:24; // Register value (include register id) serial out to RF/IF chip.
2332 UINT32 NumberOfBits:5; // Number of bits used in RFRegValue (I:20, RFMD:22)
2333 UINT32 IFSelect:1; // 1: select IF to program, 0: select RF to program
2334 UINT32 PLL_LD:1; // RF PLL_LD status
2335 UINT32 Busy:1; // 1: ASIC is busy execute RF programming.
2336 } field;
2337 UINT32 word;
2338} PHY_CSR4_STRUC, *PPHY_CSR4_STRUC;
2339#endif
2340
2341
2342//
2343// SEC_CSR5: shared key table security mode register
2344//
2345#ifdef RT_BIG_ENDIAN
2346typedef union _SEC_CSR5_STRUC {
2347 struct {
2348 UINT32 :1;
2349 UINT32 Bss3Key3CipherAlg:3;
2350 UINT32 :1;
2351 UINT32 Bss3Key2CipherAlg:3;
2352 UINT32 :1;
2353 UINT32 Bss3Key1CipherAlg:3;
2354 UINT32 :1;
2355 UINT32 Bss3Key0CipherAlg:3;
2356 UINT32 :1;
2357 UINT32 Bss2Key3CipherAlg:3;
2358 UINT32 :1;
2359 UINT32 Bss2Key2CipherAlg:3;
2360 UINT32 :1;
2361 UINT32 Bss2Key1CipherAlg:3;
2362 UINT32 :1;
2363 UINT32 Bss2Key0CipherAlg:3;
2364 } field;
2365 UINT32 word;
2366} SEC_CSR5_STRUC, *PSEC_CSR5_STRUC;
2367#else
2368typedef union _SEC_CSR5_STRUC {
2369 struct {
2370 UINT32 Bss2Key0CipherAlg:3;
2371 UINT32 :1;
2372 UINT32 Bss2Key1CipherAlg:3;
2373 UINT32 :1;
2374 UINT32 Bss2Key2CipherAlg:3;
2375 UINT32 :1;
2376 UINT32 Bss2Key3CipherAlg:3;
2377 UINT32 :1;
2378 UINT32 Bss3Key0CipherAlg:3;
2379 UINT32 :1;
2380 UINT32 Bss3Key1CipherAlg:3;
2381 UINT32 :1;
2382 UINT32 Bss3Key2CipherAlg:3;
2383 UINT32 :1;
2384 UINT32 Bss3Key3CipherAlg:3;
2385 UINT32 :1;
2386 } field;
2387 UINT32 word;
2388} SEC_CSR5_STRUC, *PSEC_CSR5_STRUC;
2389#endif
2390
2391
2392//
2393// HOST_CMD_CSR: For HOST to interrupt embedded processor
2394//
2395#ifdef RT_BIG_ENDIAN
2396typedef union _HOST_CMD_CSR_STRUC {
2397 struct {
2398 UINT32 Rsv:24;
2399 UINT32 HostCommand:8;
2400 } field;
2401 UINT32 word;
2402} HOST_CMD_CSR_STRUC, *PHOST_CMD_CSR_STRUC;
2403#else
2404typedef union _HOST_CMD_CSR_STRUC {
2405 struct {
2406 UINT32 HostCommand:8;
2407 UINT32 Rsv:24;
2408 } field;
2409 UINT32 word;
2410} HOST_CMD_CSR_STRUC, *PHOST_CMD_CSR_STRUC;
2411#endif
2412
2413
2414//
2415// AIFSN_CSR: AIFSN for each EDCA AC
2416//
2417
2418
2419
2420//
2421// E2PROM_CSR: EEPROM control register
2422//
2423#ifdef RT_BIG_ENDIAN
2424typedef union _E2PROM_CSR_STRUC {
2425 struct {
2426 UINT32 Rsvd:25;
2427 UINT32 LoadStatus:1; // 1:loading, 0:done
2428 UINT32 Type:1; // 1: 93C46, 0:93C66
2429 UINT32 EepromDO:1;
2430 UINT32 EepromDI:1;
2431 UINT32 EepromCS:1;
2432 UINT32 EepromSK:1;
2433 UINT32 Reload:1; // Reload EEPROM content, write one to reload, self-cleared.
2434 } field;
2435 UINT32 word;
2436} E2PROM_CSR_STRUC, *PE2PROM_CSR_STRUC;
2437#else
2438typedef union _E2PROM_CSR_STRUC {
2439 struct {
2440 UINT32 Reload:1; // Reload EEPROM content, write one to reload, self-cleared.
2441 UINT32 EepromSK:1;
2442 UINT32 EepromCS:1;
2443 UINT32 EepromDI:1;
2444 UINT32 EepromDO:1;
2445 UINT32 Type:1; // 1: 93C46, 0:93C66
2446 UINT32 LoadStatus:1; // 1:loading, 0:done
2447 UINT32 Rsvd:25;
2448 } field;
2449 UINT32 word;
2450} E2PROM_CSR_STRUC, *PE2PROM_CSR_STRUC;
2451#endif
2452
2453
2454// -------------------------------------------------------------------
2455// E2PROM data layout
2456// -------------------------------------------------------------------
2457
2458//
2459// EEPROM antenna select format
2460//
2461#ifdef RT_BIG_ENDIAN
2462typedef union _EEPROM_ANTENNA_STRUC {
2463 struct {
2464 USHORT Rsv:4;
2465 USHORT RfIcType:4; // see E2PROM document
2466 USHORT TxPath:4; // 1: 1T, 2: 2T
2467 USHORT RxPath:4; // 1: 1R, 2: 2R, 3: 3R
2468 } field;
2469 USHORT word;
2470} EEPROM_ANTENNA_STRUC, *PEEPROM_ANTENNA_STRUC;
2471#else
2472typedef union _EEPROM_ANTENNA_STRUC {
2473 struct {
2474 USHORT RxPath:4; // 1: 1R, 2: 2R, 3: 3R
2475 USHORT TxPath:4; // 1: 1T, 2: 2T
2476 USHORT RfIcType:4; // see E2PROM document
2477 USHORT Rsv:4;
2478 } field;
2479 USHORT word;
2480} EEPROM_ANTENNA_STRUC, *PEEPROM_ANTENNA_STRUC;
2481#endif
2482
2483#ifdef RT_BIG_ENDIAN
2484typedef union _EEPROM_NIC_CINFIG2_STRUC {
2485 struct {
2486 USHORT Rsv2:6; // must be 0
2487 USHORT BW40MAvailForA:1; // 0:enable, 1:disable
2488 USHORT BW40MAvailForG:1; // 0:enable, 1:disable
2489 USHORT EnableWPSPBC:1; // WPS PBC Control bit
2490 USHORT BW40MSidebandForA:1;
2491 USHORT BW40MSidebandForG:1;
2492 USHORT CardbusAcceleration:1; // !!! NOTE: 0 - enable, 1 - disable
2493 USHORT ExternalLNAForA:1; // external LNA enable for 5G
2494 USHORT ExternalLNAForG:1; // external LNA enable for 2.4G
2495 USHORT DynamicTxAgcControl:1; //
2496 USHORT HardwareRadioControl:1; // Whether RF is controlled by driver or HW. 1:enable hw control, 0:disable
2497 } field;
2498 USHORT word;
2499} EEPROM_NIC_CONFIG2_STRUC, *PEEPROM_NIC_CONFIG2_STRUC;
2500#else
2501typedef union _EEPROM_NIC_CINFIG2_STRUC {
2502 struct {
2503 USHORT HardwareRadioControl:1; // 1:enable, 0:disable
2504 USHORT DynamicTxAgcControl:1; //
2505 USHORT ExternalLNAForG:1; //
2506 USHORT ExternalLNAForA:1; // external LNA enable for 2.4G
2507 USHORT CardbusAcceleration:1; // !!! NOTE: 0 - enable, 1 - disable
2508 USHORT BW40MSidebandForG:1;
2509 USHORT BW40MSidebandForA:1;
2510 USHORT EnableWPSPBC:1; // WPS PBC Control bit
2511 USHORT BW40MAvailForG:1; // 0:enable, 1:disable
2512 USHORT BW40MAvailForA:1; // 0:enable, 1:disable
2513 USHORT Rsv2:6; // must be 0
2514 } field;
2515 USHORT word;
2516} EEPROM_NIC_CONFIG2_STRUC, *PEEPROM_NIC_CONFIG2_STRUC;
2517#endif
2518
2519//
2520// TX_PWR Value valid range 0xFA(-6) ~ 0x24(36)
2521//
2522#ifdef RT_BIG_ENDIAN
2523typedef union _EEPROM_TX_PWR_STRUC {
2524 struct {
2525 CHAR Byte1; // High Byte
2526 CHAR Byte0; // Low Byte
2527 } field;
2528 USHORT word;
2529} EEPROM_TX_PWR_STRUC, *PEEPROM_TX_PWR_STRUC;
2530#else
2531typedef union _EEPROM_TX_PWR_STRUC {
2532 struct {
2533 CHAR Byte0; // Low Byte
2534 CHAR Byte1; // High Byte
2535 } field;
2536 USHORT word;
2537} EEPROM_TX_PWR_STRUC, *PEEPROM_TX_PWR_STRUC;
2538#endif
2539
2540#ifdef RT_BIG_ENDIAN
2541typedef union _EEPROM_VERSION_STRUC {
2542 struct {
2543 UCHAR Version; // High Byte
2544 UCHAR FaeReleaseNumber; // Low Byte
2545 } field;
2546 USHORT word;
2547} EEPROM_VERSION_STRUC, *PEEPROM_VERSION_STRUC;
2548#else
2549typedef union _EEPROM_VERSION_STRUC {
2550 struct {
2551 UCHAR FaeReleaseNumber; // Low Byte
2552 UCHAR Version; // High Byte
2553 } field;
2554 USHORT word;
2555} EEPROM_VERSION_STRUC, *PEEPROM_VERSION_STRUC;
2556#endif
2557
2558#ifdef RT_BIG_ENDIAN
2559typedef union _EEPROM_LED_STRUC {
2560 struct {
2561 USHORT Rsvd:3; // Reserved
2562 USHORT LedMode:5; // Led mode.
2563 USHORT PolarityGPIO_4:1; // Polarity GPIO#4 setting.
2564 USHORT PolarityGPIO_3:1; // Polarity GPIO#3 setting.
2565 USHORT PolarityGPIO_2:1; // Polarity GPIO#2 setting.
2566 USHORT PolarityGPIO_1:1; // Polarity GPIO#1 setting.
2567 USHORT PolarityGPIO_0:1; // Polarity GPIO#0 setting.
2568 USHORT PolarityACT:1; // Polarity ACT setting.
2569 USHORT PolarityRDY_A:1; // Polarity RDY_A setting.
2570 USHORT PolarityRDY_G:1; // Polarity RDY_G setting.
2571 } field;
2572 USHORT word;
2573} EEPROM_LED_STRUC, *PEEPROM_LED_STRUC;
2574#else
2575typedef union _EEPROM_LED_STRUC {
2576 struct {
2577 USHORT PolarityRDY_G:1; // Polarity RDY_G setting.
2578 USHORT PolarityRDY_A:1; // Polarity RDY_A setting.
2579 USHORT PolarityACT:1; // Polarity ACT setting.
2580 USHORT PolarityGPIO_0:1; // Polarity GPIO#0 setting.
2581 USHORT PolarityGPIO_1:1; // Polarity GPIO#1 setting.
2582 USHORT PolarityGPIO_2:1; // Polarity GPIO#2 setting.
2583 USHORT PolarityGPIO_3:1; // Polarity GPIO#3 setting.
2584 USHORT PolarityGPIO_4:1; // Polarity GPIO#4 setting.
2585 USHORT LedMode:5; // Led mode.
2586 USHORT Rsvd:3; // Reserved
2587 } field;
2588 USHORT word;
2589} EEPROM_LED_STRUC, *PEEPROM_LED_STRUC;
2590#endif
2591
2592#ifdef RT_BIG_ENDIAN
2593typedef union _EEPROM_TXPOWER_DELTA_STRUC {
2594 struct {
2595 UCHAR TxPowerEnable:1;// Enable
2596 UCHAR Type:1; // 1: plus the delta value, 0: minus the delta value
2597 UCHAR DeltaValue:6; // Tx Power dalta value (MAX=4)
2598 } field;
2599 UCHAR value;
2600} EEPROM_TXPOWER_DELTA_STRUC, *PEEPROM_TXPOWER_DELTA_STRUC;
2601#else
2602typedef union _EEPROM_TXPOWER_DELTA_STRUC {
2603 struct {
2604 UCHAR DeltaValue:6; // Tx Power dalta value (MAX=4)
2605 UCHAR Type:1; // 1: plus the delta value, 0: minus the delta value
2606 UCHAR TxPowerEnable:1;// Enable
2607 } field;
2608 UCHAR value;
2609} EEPROM_TXPOWER_DELTA_STRUC, *PEEPROM_TXPOWER_DELTA_STRUC;
2610#endif
2611
2612//
2613// QOS_CSR0: TXOP holder address0 register
2614//
2615#ifdef RT_BIG_ENDIAN
2616typedef union _QOS_CSR0_STRUC {
2617 struct {
2618 UCHAR Byte3; // MAC address byte 3
2619 UCHAR Byte2; // MAC address byte 2
2620 UCHAR Byte1; // MAC address byte 1
2621 UCHAR Byte0; // MAC address byte 0
2622 } field;
2623 UINT32 word;
2624} QOS_CSR0_STRUC, *PQOS_CSR0_STRUC;
2625#else
2626typedef union _QOS_CSR0_STRUC {
2627 struct {
2628 UCHAR Byte0; // MAC address byte 0
2629 UCHAR Byte1; // MAC address byte 1
2630 UCHAR Byte2; // MAC address byte 2
2631 UCHAR Byte3; // MAC address byte 3
2632 } field;
2633 UINT32 word;
2634} QOS_CSR0_STRUC, *PQOS_CSR0_STRUC;
2635#endif
2636
2637//
2638// QOS_CSR1: TXOP holder address1 register
2639//
2640#ifdef RT_BIG_ENDIAN
2641typedef union _QOS_CSR1_STRUC {
2642 struct {
2643 UCHAR Rsvd1;
2644 UCHAR Rsvd0;
2645 UCHAR Byte5; // MAC address byte 5
2646 UCHAR Byte4; // MAC address byte 4
2647 } field;
2648 UINT32 word;
2649} QOS_CSR1_STRUC, *PQOS_CSR1_STRUC;
2650#else
2651typedef union _QOS_CSR1_STRUC {
2652 struct {
2653 UCHAR Byte4; // MAC address byte 4
2654 UCHAR Byte5; // MAC address byte 5
2655 UCHAR Rsvd0;
2656 UCHAR Rsvd1;
2657 } field;
2658 UINT32 word;
2659} QOS_CSR1_STRUC, *PQOS_CSR1_STRUC;
2660#endif
2661
2662#define RF_CSR_CFG 0x500
2663#ifdef RT_BIG_ENDIAN
2664typedef union _RF_CSR_CFG_STRUC {
2665 struct {
2666 UINT Rsvd1:14; // Reserved
2667 UINT RF_CSR_KICK:1; // kick RF register read/write
2668 UINT RF_CSR_WR:1; // 0: read 1: write
2669 UINT Rsvd2:3; // Reserved
2670 UINT TESTCSR_RFACC_REGNUM:5; // RF register ID
2671 UINT RF_CSR_DATA:8; // DATA
2672 } field;
2673 UINT word;
2674} RF_CSR_CFG_STRUC, *PRF_CSR_CFG_STRUC;
2675#else
2676typedef union _RF_CSR_CFG_STRUC {
2677 struct {
2678 UINT RF_CSR_DATA:8; // DATA
2679 UINT TESTCSR_RFACC_REGNUM:5; // RF register ID
2680 UINT Rsvd2:3; // Reserved
2681 UINT RF_CSR_WR:1; // 0: read 1: write
2682 UINT RF_CSR_KICK:1; // kick RF register read/write
2683 UINT Rsvd1:14; // Reserved
2684 } field;
2685 UINT word;
2686} RF_CSR_CFG_STRUC, *PRF_CSR_CFG_STRUC;
2687#endif
2688
2689#endif // __RT28XX_H__