blob: 455dc3ffb256a5fe472a9f6afc04e583005cd856 [file] [log] [blame]
Bartlomiej Zolnierkiewiczb54f78a2009-11-04 18:35:54 +01001/*
Gertjan van Wingerde9c9a0d12009-11-08 16:39:55 +01002 Copyright (C) 2004 - 2009 Ivo van Doorn <IvDoorn@gmail.com>
3 Copyright (C) 2009 Alban Browaeys <prahal@yahoo.com>
4 Copyright (C) 2009 Felix Fietkau <nbd@openwrt.org>
5 Copyright (C) 2009 Luis Correia <luis.f.correia@gmail.com>
6 Copyright (C) 2009 Mattias Nissler <mattias.nissler@gmx.de>
7 Copyright (C) 2009 Mark Asselstine <asselsm@gmail.com>
8 Copyright (C) 2009 Xose Vazquez Perez <xose.vazquez@gmail.com>
9 Copyright (C) 2009 Bart Zolnierkiewicz <bzolnier@gmail.com>
Bartlomiej Zolnierkiewiczb54f78a2009-11-04 18:35:54 +010010 <http://rt2x00.serialmonkey.com>
11
12 This program is free software; you can redistribute it and/or modify
13 it under the terms of the GNU General Public License as published by
14 the Free Software Foundation; either version 2 of the License, or
15 (at your option) any later version.
16
17 This program is distributed in the hope that it will be useful,
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 GNU General Public License for more details.
21
22 You should have received a copy of the GNU General Public License
23 along with this program; if not, write to the
24 Free Software Foundation, Inc.,
25 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26 */
27
28/*
29 Module: rt2800
30 Abstract: Data structures and registers for the rt2800 modules.
31 Supported chipsets: RT2800E, RT2800ED & RT2800U.
32 */
33
34#ifndef RT2800_H
35#define RT2800_H
36
37/*
38 * RF chip defines.
39 *
40 * RF2820 2.4G 2T3R
41 * RF2850 2.4G/5G 2T3R
42 * RF2720 2.4G 1T2R
43 * RF2750 2.4G/5G 1T2R
44 * RF3020 2.4G 1T1R
45 * RF2020 2.4G B/G
46 * RF3021 2.4G 1T2R
47 * RF3022 2.4G 2T2R
48 * RF3052 2.4G 2T2R
49 */
50#define RF2820 0x0001
51#define RF2850 0x0002
52#define RF2720 0x0003
53#define RF2750 0x0004
54#define RF3020 0x0005
55#define RF2020 0x0006
56#define RF3021 0x0007
57#define RF3022 0x0008
58#define RF3052 0x0009
Gertjan van Wingerdefab799c2010-04-11 14:31:08 +020059#define RF3320 0x000b
Bartlomiej Zolnierkiewiczb54f78a2009-11-04 18:35:54 +010060
61/*
62 * Chipset version.
63 */
Gertjan van Wingerde49e721e2010-02-13 20:55:49 +010064#define RT2860C_VERSION 0x0100
65#define RT2860D_VERSION 0x0101
66#define RT2880E_VERSION 0x0200
67#define RT2883_VERSION 0x0300
68#define RT3070_VERSION 0x0200
Bartlomiej Zolnierkiewiczb54f78a2009-11-04 18:35:54 +010069
70/*
71 * Signal information.
72 * Default offset is required for RSSI <-> dBm conversion.
73 */
74#define DEFAULT_RSSI_OFFSET 120 /* FIXME */
75
76/*
77 * Register layout information.
78 */
79#define CSR_REG_BASE 0x1000
80#define CSR_REG_SIZE 0x0800
81#define EEPROM_BASE 0x0000
82#define EEPROM_SIZE 0x0110
83#define BBP_BASE 0x0000
84#define BBP_SIZE 0x0080
85#define RF_BASE 0x0004
86#define RF_SIZE 0x0010
87
88/*
89 * Number of TX queues.
90 */
91#define NUM_TX_QUEUES 4
92
93/*
Gertjan van Wingerdefab799c2010-04-11 14:31:08 +020094 * Registers.
Bartlomiej Zolnierkiewiczb54f78a2009-11-04 18:35:54 +010095 */
96
97/*
Gertjan van Wingerdefab799c2010-04-11 14:31:08 +020098 * OPT_14: Unknown register used by rt3xxx devices.
99 */
100#define OPT_14_CSR 0x0114
101#define OPT_14_CSR_BIT0 FIELD32(0x00000001)
102
103/*
Bartlomiej Zolnierkiewiczb54f78a2009-11-04 18:35:54 +0100104 * INT_SOURCE_CSR: Interrupt source register.
105 * Write one to clear corresponding bit.
106 * TX_FIFO_STATUS: FIFO Statistics is full, sw should read 0x171c
107 */
108#define INT_SOURCE_CSR 0x0200
109#define INT_SOURCE_CSR_RXDELAYINT FIELD32(0x00000001)
110#define INT_SOURCE_CSR_TXDELAYINT FIELD32(0x00000002)
111#define INT_SOURCE_CSR_RX_DONE FIELD32(0x00000004)
112#define INT_SOURCE_CSR_AC0_DMA_DONE FIELD32(0x00000008)
113#define INT_SOURCE_CSR_AC1_DMA_DONE FIELD32(0x00000010)
114#define INT_SOURCE_CSR_AC2_DMA_DONE FIELD32(0x00000020)
115#define INT_SOURCE_CSR_AC3_DMA_DONE FIELD32(0x00000040)
116#define INT_SOURCE_CSR_HCCA_DMA_DONE FIELD32(0x00000080)
117#define INT_SOURCE_CSR_MGMT_DMA_DONE FIELD32(0x00000100)
118#define INT_SOURCE_CSR_MCU_COMMAND FIELD32(0x00000200)
119#define INT_SOURCE_CSR_RXTX_COHERENT FIELD32(0x00000400)
120#define INT_SOURCE_CSR_TBTT FIELD32(0x00000800)
121#define INT_SOURCE_CSR_PRE_TBTT FIELD32(0x00001000)
122#define INT_SOURCE_CSR_TX_FIFO_STATUS FIELD32(0x00002000)
123#define INT_SOURCE_CSR_AUTO_WAKEUP FIELD32(0x00004000)
124#define INT_SOURCE_CSR_GPTIMER FIELD32(0x00008000)
125#define INT_SOURCE_CSR_RX_COHERENT FIELD32(0x00010000)
126#define INT_SOURCE_CSR_TX_COHERENT FIELD32(0x00020000)
127
128/*
129 * INT_MASK_CSR: Interrupt MASK register. 1: the interrupt is mask OFF.
130 */
131#define INT_MASK_CSR 0x0204
132#define INT_MASK_CSR_RXDELAYINT FIELD32(0x00000001)
133#define INT_MASK_CSR_TXDELAYINT FIELD32(0x00000002)
134#define INT_MASK_CSR_RX_DONE FIELD32(0x00000004)
135#define INT_MASK_CSR_AC0_DMA_DONE FIELD32(0x00000008)
136#define INT_MASK_CSR_AC1_DMA_DONE FIELD32(0x00000010)
137#define INT_MASK_CSR_AC2_DMA_DONE FIELD32(0x00000020)
138#define INT_MASK_CSR_AC3_DMA_DONE FIELD32(0x00000040)
139#define INT_MASK_CSR_HCCA_DMA_DONE FIELD32(0x00000080)
140#define INT_MASK_CSR_MGMT_DMA_DONE FIELD32(0x00000100)
141#define INT_MASK_CSR_MCU_COMMAND FIELD32(0x00000200)
142#define INT_MASK_CSR_RXTX_COHERENT FIELD32(0x00000400)
143#define INT_MASK_CSR_TBTT FIELD32(0x00000800)
144#define INT_MASK_CSR_PRE_TBTT FIELD32(0x00001000)
145#define INT_MASK_CSR_TX_FIFO_STATUS FIELD32(0x00002000)
146#define INT_MASK_CSR_AUTO_WAKEUP FIELD32(0x00004000)
147#define INT_MASK_CSR_GPTIMER FIELD32(0x00008000)
148#define INT_MASK_CSR_RX_COHERENT FIELD32(0x00010000)
149#define INT_MASK_CSR_TX_COHERENT FIELD32(0x00020000)
150
151/*
152 * WPDMA_GLO_CFG
153 */
154#define WPDMA_GLO_CFG 0x0208
155#define WPDMA_GLO_CFG_ENABLE_TX_DMA FIELD32(0x00000001)
156#define WPDMA_GLO_CFG_TX_DMA_BUSY FIELD32(0x00000002)
157#define WPDMA_GLO_CFG_ENABLE_RX_DMA FIELD32(0x00000004)
158#define WPDMA_GLO_CFG_RX_DMA_BUSY FIELD32(0x00000008)
159#define WPDMA_GLO_CFG_WP_DMA_BURST_SIZE FIELD32(0x00000030)
160#define WPDMA_GLO_CFG_TX_WRITEBACK_DONE FIELD32(0x00000040)
161#define WPDMA_GLO_CFG_BIG_ENDIAN FIELD32(0x00000080)
162#define WPDMA_GLO_CFG_RX_HDR_SCATTER FIELD32(0x0000ff00)
163#define WPDMA_GLO_CFG_HDR_SEG_LEN FIELD32(0xffff0000)
164
165/*
166 * WPDMA_RST_IDX
167 */
168#define WPDMA_RST_IDX 0x020c
169#define WPDMA_RST_IDX_DTX_IDX0 FIELD32(0x00000001)
170#define WPDMA_RST_IDX_DTX_IDX1 FIELD32(0x00000002)
171#define WPDMA_RST_IDX_DTX_IDX2 FIELD32(0x00000004)
172#define WPDMA_RST_IDX_DTX_IDX3 FIELD32(0x00000008)
173#define WPDMA_RST_IDX_DTX_IDX4 FIELD32(0x00000010)
174#define WPDMA_RST_IDX_DTX_IDX5 FIELD32(0x00000020)
175#define WPDMA_RST_IDX_DRX_IDX0 FIELD32(0x00010000)
176
177/*
178 * DELAY_INT_CFG
179 */
180#define DELAY_INT_CFG 0x0210
181#define DELAY_INT_CFG_RXMAX_PTIME FIELD32(0x000000ff)
182#define DELAY_INT_CFG_RXMAX_PINT FIELD32(0x00007f00)
183#define DELAY_INT_CFG_RXDLY_INT_EN FIELD32(0x00008000)
184#define DELAY_INT_CFG_TXMAX_PTIME FIELD32(0x00ff0000)
185#define DELAY_INT_CFG_TXMAX_PINT FIELD32(0x7f000000)
186#define DELAY_INT_CFG_TXDLY_INT_EN FIELD32(0x80000000)
187
188/*
189 * WMM_AIFSN_CFG: Aifsn for each EDCA AC
190 * AIFSN0: AC_BE
191 * AIFSN1: AC_BK
Bartlomiej Zolnierkiewicza4385212009-11-04 18:36:02 +0100192 * AIFSN2: AC_VI
193 * AIFSN3: AC_VO
Bartlomiej Zolnierkiewiczb54f78a2009-11-04 18:35:54 +0100194 */
195#define WMM_AIFSN_CFG 0x0214
196#define WMM_AIFSN_CFG_AIFSN0 FIELD32(0x0000000f)
197#define WMM_AIFSN_CFG_AIFSN1 FIELD32(0x000000f0)
198#define WMM_AIFSN_CFG_AIFSN2 FIELD32(0x00000f00)
199#define WMM_AIFSN_CFG_AIFSN3 FIELD32(0x0000f000)
200
201/*
202 * WMM_CWMIN_CSR: CWmin for each EDCA AC
203 * CWMIN0: AC_BE
204 * CWMIN1: AC_BK
Bartlomiej Zolnierkiewicza4385212009-11-04 18:36:02 +0100205 * CWMIN2: AC_VI
206 * CWMIN3: AC_VO
Bartlomiej Zolnierkiewiczb54f78a2009-11-04 18:35:54 +0100207 */
208#define WMM_CWMIN_CFG 0x0218
209#define WMM_CWMIN_CFG_CWMIN0 FIELD32(0x0000000f)
210#define WMM_CWMIN_CFG_CWMIN1 FIELD32(0x000000f0)
211#define WMM_CWMIN_CFG_CWMIN2 FIELD32(0x00000f00)
212#define WMM_CWMIN_CFG_CWMIN3 FIELD32(0x0000f000)
213
214/*
215 * WMM_CWMAX_CSR: CWmax for each EDCA AC
216 * CWMAX0: AC_BE
217 * CWMAX1: AC_BK
Bartlomiej Zolnierkiewicza4385212009-11-04 18:36:02 +0100218 * CWMAX2: AC_VI
219 * CWMAX3: AC_VO
Bartlomiej Zolnierkiewiczb54f78a2009-11-04 18:35:54 +0100220 */
221#define WMM_CWMAX_CFG 0x021c
222#define WMM_CWMAX_CFG_CWMAX0 FIELD32(0x0000000f)
223#define WMM_CWMAX_CFG_CWMAX1 FIELD32(0x000000f0)
224#define WMM_CWMAX_CFG_CWMAX2 FIELD32(0x00000f00)
225#define WMM_CWMAX_CFG_CWMAX3 FIELD32(0x0000f000)
226
227/*
228 * AC_TXOP0: AC_BK/AC_BE TXOP register
229 * AC0TXOP: AC_BK in unit of 32us
230 * AC1TXOP: AC_BE in unit of 32us
231 */
232#define WMM_TXOP0_CFG 0x0220
233#define WMM_TXOP0_CFG_AC0TXOP FIELD32(0x0000ffff)
234#define WMM_TXOP0_CFG_AC1TXOP FIELD32(0xffff0000)
235
236/*
237 * AC_TXOP1: AC_VO/AC_VI TXOP register
238 * AC2TXOP: AC_VI in unit of 32us
239 * AC3TXOP: AC_VO in unit of 32us
240 */
241#define WMM_TXOP1_CFG 0x0224
242#define WMM_TXOP1_CFG_AC2TXOP FIELD32(0x0000ffff)
243#define WMM_TXOP1_CFG_AC3TXOP FIELD32(0xffff0000)
244
245/*
246 * GPIO_CTRL_CFG:
247 */
248#define GPIO_CTRL_CFG 0x0228
249#define GPIO_CTRL_CFG_BIT0 FIELD32(0x00000001)
250#define GPIO_CTRL_CFG_BIT1 FIELD32(0x00000002)
251#define GPIO_CTRL_CFG_BIT2 FIELD32(0x00000004)
252#define GPIO_CTRL_CFG_BIT3 FIELD32(0x00000008)
253#define GPIO_CTRL_CFG_BIT4 FIELD32(0x00000010)
254#define GPIO_CTRL_CFG_BIT5 FIELD32(0x00000020)
255#define GPIO_CTRL_CFG_BIT6 FIELD32(0x00000040)
256#define GPIO_CTRL_CFG_BIT7 FIELD32(0x00000080)
257#define GPIO_CTRL_CFG_BIT8 FIELD32(0x00000100)
258
259/*
260 * MCU_CMD_CFG
261 */
262#define MCU_CMD_CFG 0x022c
263
264/*
265 * AC_BK register offsets
266 */
267#define TX_BASE_PTR0 0x0230
268#define TX_MAX_CNT0 0x0234
269#define TX_CTX_IDX0 0x0238
270#define TX_DTX_IDX0 0x023c
271
272/*
273 * AC_BE register offsets
274 */
275#define TX_BASE_PTR1 0x0240
276#define TX_MAX_CNT1 0x0244
277#define TX_CTX_IDX1 0x0248
278#define TX_DTX_IDX1 0x024c
279
280/*
281 * AC_VI register offsets
282 */
283#define TX_BASE_PTR2 0x0250
284#define TX_MAX_CNT2 0x0254
285#define TX_CTX_IDX2 0x0258
286#define TX_DTX_IDX2 0x025c
287
288/*
289 * AC_VO register offsets
290 */
291#define TX_BASE_PTR3 0x0260
292#define TX_MAX_CNT3 0x0264
293#define TX_CTX_IDX3 0x0268
294#define TX_DTX_IDX3 0x026c
295
296/*
297 * HCCA register offsets
298 */
299#define TX_BASE_PTR4 0x0270
300#define TX_MAX_CNT4 0x0274
301#define TX_CTX_IDX4 0x0278
302#define TX_DTX_IDX4 0x027c
303
304/*
305 * MGMT register offsets
306 */
307#define TX_BASE_PTR5 0x0280
308#define TX_MAX_CNT5 0x0284
309#define TX_CTX_IDX5 0x0288
310#define TX_DTX_IDX5 0x028c
311
312/*
313 * RX register offsets
314 */
315#define RX_BASE_PTR 0x0290
316#define RX_MAX_CNT 0x0294
317#define RX_CRX_IDX 0x0298
318#define RX_DRX_IDX 0x029c
319
320/*
321 * PBF_SYS_CTRL
322 * HOST_RAM_WRITE: enable Host program ram write selection
323 */
324#define PBF_SYS_CTRL 0x0400
325#define PBF_SYS_CTRL_READY FIELD32(0x00000080)
326#define PBF_SYS_CTRL_HOST_RAM_WRITE FIELD32(0x00010000)
327
328/*
329 * HOST-MCU shared memory
330 */
331#define HOST_CMD_CSR 0x0404
332#define HOST_CMD_CSR_HOST_COMMAND FIELD32(0x000000ff)
333
334/*
335 * PBF registers
336 * Most are for debug. Driver doesn't touch PBF register.
337 */
338#define PBF_CFG 0x0408
339#define PBF_MAX_PCNT 0x040c
340#define PBF_CTRL 0x0410
341#define PBF_INT_STA 0x0414
342#define PBF_INT_ENA 0x0418
343
344/*
345 * BCN_OFFSET0:
346 */
347#define BCN_OFFSET0 0x042c
348#define BCN_OFFSET0_BCN0 FIELD32(0x000000ff)
349#define BCN_OFFSET0_BCN1 FIELD32(0x0000ff00)
350#define BCN_OFFSET0_BCN2 FIELD32(0x00ff0000)
351#define BCN_OFFSET0_BCN3 FIELD32(0xff000000)
352
353/*
354 * BCN_OFFSET1:
355 */
356#define BCN_OFFSET1 0x0430
357#define BCN_OFFSET1_BCN4 FIELD32(0x000000ff)
358#define BCN_OFFSET1_BCN5 FIELD32(0x0000ff00)
359#define BCN_OFFSET1_BCN6 FIELD32(0x00ff0000)
360#define BCN_OFFSET1_BCN7 FIELD32(0xff000000)
361
362/*
363 * PBF registers
364 * Most are for debug. Driver doesn't touch PBF register.
365 */
366#define TXRXQ_PCNT 0x0438
367#define PBF_DBG 0x043c
368
369/*
370 * RF registers
371 */
372#define RF_CSR_CFG 0x0500
373#define RF_CSR_CFG_DATA FIELD32(0x000000ff)
374#define RF_CSR_CFG_REGNUM FIELD32(0x00001f00)
375#define RF_CSR_CFG_WRITE FIELD32(0x00010000)
376#define RF_CSR_CFG_BUSY FIELD32(0x00020000)
377
378/*
Bartlomiej Zolnierkiewicz30e84032009-11-08 14:39:48 +0100379 * EFUSE_CSR: RT30x0 EEPROM
380 */
381#define EFUSE_CTRL 0x0580
382#define EFUSE_CTRL_ADDRESS_IN FIELD32(0x03fe0000)
383#define EFUSE_CTRL_MODE FIELD32(0x000000c0)
384#define EFUSE_CTRL_KICK FIELD32(0x40000000)
385#define EFUSE_CTRL_PRESENT FIELD32(0x80000000)
386
387/*
388 * EFUSE_DATA0
389 */
390#define EFUSE_DATA0 0x0590
391
392/*
393 * EFUSE_DATA1
394 */
395#define EFUSE_DATA1 0x0594
396
397/*
398 * EFUSE_DATA2
399 */
400#define EFUSE_DATA2 0x0598
401
402/*
403 * EFUSE_DATA3
404 */
405#define EFUSE_DATA3 0x059c
406
407/*
Gertjan van Wingerdefab799c2010-04-11 14:31:08 +0200408 * LDO_CFG0
409 */
410#define LDO_CFG0 0x05d4
411#define LDO_CFG0_DELAY3 FIELD32(0x000000ff)
412#define LDO_CFG0_DELAY2 FIELD32(0x0000ff00)
413#define LDO_CFG0_DELAY1 FIELD32(0x00ff0000)
414#define LDO_CFG0_BGSEL FIELD32(0x03000000)
415#define LDO_CFG0_LDO_CORE_VLEVEL FIELD32(0x1c000000)
416#define LD0_CFG0_LDO25_LEVEL FIELD32(0x60000000)
417#define LDO_CFG0_LDO25_LARGEA FIELD32(0x80000000)
418
419/*
420 * GPIO_SWITCH
421 */
422#define GPIO_SWITCH 0x05dc
423#define GPIO_SWITCH_0 FIELD32(0x00000001)
424#define GPIO_SWITCH_1 FIELD32(0x00000002)
425#define GPIO_SWITCH_2 FIELD32(0x00000004)
426#define GPIO_SWITCH_3 FIELD32(0x00000008)
427#define GPIO_SWITCH_4 FIELD32(0x00000010)
428#define GPIO_SWITCH_5 FIELD32(0x00000020)
429#define GPIO_SWITCH_6 FIELD32(0x00000040)
430#define GPIO_SWITCH_7 FIELD32(0x00000080)
431
432/*
Bartlomiej Zolnierkiewiczb54f78a2009-11-04 18:35:54 +0100433 * MAC Control/Status Registers(CSR).
434 * Some values are set in TU, whereas 1 TU == 1024 us.
435 */
436
437/*
438 * MAC_CSR0: ASIC revision number.
439 * ASIC_REV: 0
440 * ASIC_VER: 2860 or 2870
441 */
442#define MAC_CSR0 0x1000
Gertjan van Wingerde49e721e2010-02-13 20:55:49 +0100443#define MAC_CSR0_REVISION FIELD32(0x0000ffff)
444#define MAC_CSR0_CHIPSET FIELD32(0xffff0000)
Bartlomiej Zolnierkiewiczb54f78a2009-11-04 18:35:54 +0100445
446/*
447 * MAC_SYS_CTRL:
448 */
449#define MAC_SYS_CTRL 0x1004
450#define MAC_SYS_CTRL_RESET_CSR FIELD32(0x00000001)
451#define MAC_SYS_CTRL_RESET_BBP FIELD32(0x00000002)
452#define MAC_SYS_CTRL_ENABLE_TX FIELD32(0x00000004)
453#define MAC_SYS_CTRL_ENABLE_RX FIELD32(0x00000008)
454#define MAC_SYS_CTRL_CONTINUOUS_TX FIELD32(0x00000010)
455#define MAC_SYS_CTRL_LOOPBACK FIELD32(0x00000020)
456#define MAC_SYS_CTRL_WLAN_HALT FIELD32(0x00000040)
457#define MAC_SYS_CTRL_RX_TIMESTAMP FIELD32(0x00000080)
458
459/*
460 * MAC_ADDR_DW0: STA MAC register 0
461 */
462#define MAC_ADDR_DW0 0x1008
463#define MAC_ADDR_DW0_BYTE0 FIELD32(0x000000ff)
464#define MAC_ADDR_DW0_BYTE1 FIELD32(0x0000ff00)
465#define MAC_ADDR_DW0_BYTE2 FIELD32(0x00ff0000)
466#define MAC_ADDR_DW0_BYTE3 FIELD32(0xff000000)
467
468/*
469 * MAC_ADDR_DW1: STA MAC register 1
470 * UNICAST_TO_ME_MASK:
471 * Used to mask off bits from byte 5 of the MAC address
472 * to determine the UNICAST_TO_ME bit for RX frames.
473 * The full mask is complemented by BSS_ID_MASK:
474 * MASK = BSS_ID_MASK & UNICAST_TO_ME_MASK
475 */
476#define MAC_ADDR_DW1 0x100c
477#define MAC_ADDR_DW1_BYTE4 FIELD32(0x000000ff)
478#define MAC_ADDR_DW1_BYTE5 FIELD32(0x0000ff00)
479#define MAC_ADDR_DW1_UNICAST_TO_ME_MASK FIELD32(0x00ff0000)
480
481/*
482 * MAC_BSSID_DW0: BSSID register 0
483 */
484#define MAC_BSSID_DW0 0x1010
485#define MAC_BSSID_DW0_BYTE0 FIELD32(0x000000ff)
486#define MAC_BSSID_DW0_BYTE1 FIELD32(0x0000ff00)
487#define MAC_BSSID_DW0_BYTE2 FIELD32(0x00ff0000)
488#define MAC_BSSID_DW0_BYTE3 FIELD32(0xff000000)
489
490/*
491 * MAC_BSSID_DW1: BSSID register 1
492 * BSS_ID_MASK:
493 * 0: 1-BSSID mode (BSS index = 0)
494 * 1: 2-BSSID mode (BSS index: Byte5, bit 0)
495 * 2: 4-BSSID mode (BSS index: byte5, bit 0 - 1)
496 * 3: 8-BSSID mode (BSS index: byte5, bit 0 - 2)
497 * This mask is used to mask off bits 0, 1 and 2 of byte 5 of the
498 * BSSID. This will make sure that those bits will be ignored
499 * when determining the MY_BSS of RX frames.
500 */
501#define MAC_BSSID_DW1 0x1014
502#define MAC_BSSID_DW1_BYTE4 FIELD32(0x000000ff)
503#define MAC_BSSID_DW1_BYTE5 FIELD32(0x0000ff00)
504#define MAC_BSSID_DW1_BSS_ID_MASK FIELD32(0x00030000)
505#define MAC_BSSID_DW1_BSS_BCN_NUM FIELD32(0x001c0000)
506
507/*
508 * MAX_LEN_CFG: Maximum frame length register.
509 * MAX_MPDU: rt2860b max 16k bytes
510 * MAX_PSDU: Maximum PSDU length
511 * (power factor) 0:2^13, 1:2^14, 2:2^15, 3:2^16
512 */
513#define MAX_LEN_CFG 0x1018
514#define MAX_LEN_CFG_MAX_MPDU FIELD32(0x00000fff)
515#define MAX_LEN_CFG_MAX_PSDU FIELD32(0x00003000)
516#define MAX_LEN_CFG_MIN_PSDU FIELD32(0x0000c000)
517#define MAX_LEN_CFG_MIN_MPDU FIELD32(0x000f0000)
518
519/*
520 * BBP_CSR_CFG: BBP serial control register
521 * VALUE: Register value to program into BBP
522 * REG_NUM: Selected BBP register
523 * READ_CONTROL: 0 write BBP, 1 read BBP
524 * BUSY: ASIC is busy executing BBP commands
525 * BBP_PAR_DUR: 0 4 MAC clocks, 1 8 MAC clocks
526 * BBP_RW_MODE: 0 serial, 1 paralell
527 */
528#define BBP_CSR_CFG 0x101c
529#define BBP_CSR_CFG_VALUE FIELD32(0x000000ff)
530#define BBP_CSR_CFG_REGNUM FIELD32(0x0000ff00)
531#define BBP_CSR_CFG_READ_CONTROL FIELD32(0x00010000)
532#define BBP_CSR_CFG_BUSY FIELD32(0x00020000)
533#define BBP_CSR_CFG_BBP_PAR_DUR FIELD32(0x00040000)
534#define BBP_CSR_CFG_BBP_RW_MODE FIELD32(0x00080000)
535
536/*
537 * RF_CSR_CFG0: RF control register
538 * REGID_AND_VALUE: Register value to program into RF
539 * BITWIDTH: Selected RF register
540 * STANDBYMODE: 0 high when standby, 1 low when standby
541 * SEL: 0 RF_LE0 activate, 1 RF_LE1 activate
542 * BUSY: ASIC is busy executing RF commands
543 */
544#define RF_CSR_CFG0 0x1020
545#define RF_CSR_CFG0_REGID_AND_VALUE FIELD32(0x00ffffff)
546#define RF_CSR_CFG0_BITWIDTH FIELD32(0x1f000000)
547#define RF_CSR_CFG0_REG_VALUE_BW FIELD32(0x1fffffff)
548#define RF_CSR_CFG0_STANDBYMODE FIELD32(0x20000000)
549#define RF_CSR_CFG0_SEL FIELD32(0x40000000)
550#define RF_CSR_CFG0_BUSY FIELD32(0x80000000)
551
552/*
553 * RF_CSR_CFG1: RF control register
554 * REGID_AND_VALUE: Register value to program into RF
555 * RFGAP: Gap between BB_CONTROL_RF and RF_LE
556 * 0: 3 system clock cycle (37.5usec)
557 * 1: 5 system clock cycle (62.5usec)
558 */
559#define RF_CSR_CFG1 0x1024
560#define RF_CSR_CFG1_REGID_AND_VALUE FIELD32(0x00ffffff)
561#define RF_CSR_CFG1_RFGAP FIELD32(0x1f000000)
562
563/*
564 * RF_CSR_CFG2: RF control register
565 * VALUE: Register value to program into RF
Bartlomiej Zolnierkiewiczb54f78a2009-11-04 18:35:54 +0100566 */
567#define RF_CSR_CFG2 0x1028
568#define RF_CSR_CFG2_VALUE FIELD32(0x00ffffff)
569
570/*
571 * LED_CFG: LED control
572 * color LED's:
573 * 0: off
574 * 1: blinking upon TX2
575 * 2: periodic slow blinking
576 * 3: always on
577 * LED polarity:
578 * 0: active low
579 * 1: active high
580 */
581#define LED_CFG 0x102c
582#define LED_CFG_ON_PERIOD FIELD32(0x000000ff)
583#define LED_CFG_OFF_PERIOD FIELD32(0x0000ff00)
584#define LED_CFG_SLOW_BLINK_PERIOD FIELD32(0x003f0000)
585#define LED_CFG_R_LED_MODE FIELD32(0x03000000)
586#define LED_CFG_G_LED_MODE FIELD32(0x0c000000)
587#define LED_CFG_Y_LED_MODE FIELD32(0x30000000)
588#define LED_CFG_LED_POLAR FIELD32(0x40000000)
589
590/*
591 * XIFS_TIME_CFG: MAC timing
592 * CCKM_SIFS_TIME: unit 1us. Applied after CCK RX/TX
593 * OFDM_SIFS_TIME: unit 1us. Applied after OFDM RX/TX
594 * OFDM_XIFS_TIME: unit 1us. Applied after OFDM RX
595 * when MAC doesn't reference BBP signal BBRXEND
596 * EIFS: unit 1us
597 * BB_RXEND_ENABLE: reference RXEND signal to begin XIFS defer
598 *
599 */
600#define XIFS_TIME_CFG 0x1100
601#define XIFS_TIME_CFG_CCKM_SIFS_TIME FIELD32(0x000000ff)
602#define XIFS_TIME_CFG_OFDM_SIFS_TIME FIELD32(0x0000ff00)
603#define XIFS_TIME_CFG_OFDM_XIFS_TIME FIELD32(0x000f0000)
604#define XIFS_TIME_CFG_EIFS FIELD32(0x1ff00000)
605#define XIFS_TIME_CFG_BB_RXEND_ENABLE FIELD32(0x20000000)
606
607/*
608 * BKOFF_SLOT_CFG:
609 */
610#define BKOFF_SLOT_CFG 0x1104
611#define BKOFF_SLOT_CFG_SLOT_TIME FIELD32(0x000000ff)
612#define BKOFF_SLOT_CFG_CC_DELAY_TIME FIELD32(0x0000ff00)
613
614/*
615 * NAV_TIME_CFG:
616 */
617#define NAV_TIME_CFG 0x1108
618#define NAV_TIME_CFG_SIFS FIELD32(0x000000ff)
619#define NAV_TIME_CFG_SLOT_TIME FIELD32(0x0000ff00)
620#define NAV_TIME_CFG_EIFS FIELD32(0x01ff0000)
621#define NAV_TIME_ZERO_SIFS FIELD32(0x02000000)
622
623/*
624 * CH_TIME_CFG: count as channel busy
625 */
626#define CH_TIME_CFG 0x110c
627
628/*
629 * PBF_LIFE_TIMER: TX/RX MPDU timestamp timer (free run) Unit: 1us
630 */
631#define PBF_LIFE_TIMER 0x1110
632
633/*
634 * BCN_TIME_CFG:
635 * BEACON_INTERVAL: in unit of 1/16 TU
636 * TSF_TICKING: Enable TSF auto counting
637 * TSF_SYNC: Enable TSF sync, 00: disable, 01: infra mode, 10: ad-hoc mode
638 * BEACON_GEN: Enable beacon generator
639 */
640#define BCN_TIME_CFG 0x1114
641#define BCN_TIME_CFG_BEACON_INTERVAL FIELD32(0x0000ffff)
642#define BCN_TIME_CFG_TSF_TICKING FIELD32(0x00010000)
643#define BCN_TIME_CFG_TSF_SYNC FIELD32(0x00060000)
644#define BCN_TIME_CFG_TBTT_ENABLE FIELD32(0x00080000)
645#define BCN_TIME_CFG_BEACON_GEN FIELD32(0x00100000)
646#define BCN_TIME_CFG_TX_TIME_COMPENSATE FIELD32(0xf0000000)
647
648/*
649 * TBTT_SYNC_CFG:
650 */
651#define TBTT_SYNC_CFG 0x1118
652
653/*
654 * TSF_TIMER_DW0: Local lsb TSF timer, read-only
655 */
656#define TSF_TIMER_DW0 0x111c
657#define TSF_TIMER_DW0_LOW_WORD FIELD32(0xffffffff)
658
659/*
660 * TSF_TIMER_DW1: Local msb TSF timer, read-only
661 */
662#define TSF_TIMER_DW1 0x1120
663#define TSF_TIMER_DW1_HIGH_WORD FIELD32(0xffffffff)
664
665/*
666 * TBTT_TIMER: TImer remains till next TBTT, read-only
667 */
668#define TBTT_TIMER 0x1124
669
670/*
671 * INT_TIMER_CFG:
672 */
673#define INT_TIMER_CFG 0x1128
674
675/*
676 * INT_TIMER_EN: GP-timer and pre-tbtt Int enable
677 */
678#define INT_TIMER_EN 0x112c
679
680/*
681 * CH_IDLE_STA: channel idle time
682 */
683#define CH_IDLE_STA 0x1130
684
685/*
686 * CH_BUSY_STA: channel busy time
687 */
688#define CH_BUSY_STA 0x1134
689
690/*
691 * MAC_STATUS_CFG:
692 * BBP_RF_BUSY: When set to 0, BBP and RF are stable.
693 * if 1 or higher one of the 2 registers is busy.
694 */
695#define MAC_STATUS_CFG 0x1200
696#define MAC_STATUS_CFG_BBP_RF_BUSY FIELD32(0x00000003)
697
698/*
699 * PWR_PIN_CFG:
700 */
701#define PWR_PIN_CFG 0x1204
702
703/*
704 * AUTOWAKEUP_CFG: Manual power control / status register
705 * TBCN_BEFORE_WAKE: ForceWake has high privilege than PutToSleep when both set
706 * AUTOWAKE: 0:sleep, 1:awake
707 */
708#define AUTOWAKEUP_CFG 0x1208
709#define AUTOWAKEUP_CFG_AUTO_LEAD_TIME FIELD32(0x000000ff)
710#define AUTOWAKEUP_CFG_TBCN_BEFORE_WAKE FIELD32(0x00007f00)
711#define AUTOWAKEUP_CFG_AUTOWAKE FIELD32(0x00008000)
712
713/*
714 * EDCA_AC0_CFG:
715 */
716#define EDCA_AC0_CFG 0x1300
717#define EDCA_AC0_CFG_TX_OP FIELD32(0x000000ff)
718#define EDCA_AC0_CFG_AIFSN FIELD32(0x00000f00)
719#define EDCA_AC0_CFG_CWMIN FIELD32(0x0000f000)
720#define EDCA_AC0_CFG_CWMAX FIELD32(0x000f0000)
721
722/*
723 * EDCA_AC1_CFG:
724 */
725#define EDCA_AC1_CFG 0x1304
726#define EDCA_AC1_CFG_TX_OP FIELD32(0x000000ff)
727#define EDCA_AC1_CFG_AIFSN FIELD32(0x00000f00)
728#define EDCA_AC1_CFG_CWMIN FIELD32(0x0000f000)
729#define EDCA_AC1_CFG_CWMAX FIELD32(0x000f0000)
730
731/*
732 * EDCA_AC2_CFG:
733 */
734#define EDCA_AC2_CFG 0x1308
735#define EDCA_AC2_CFG_TX_OP FIELD32(0x000000ff)
736#define EDCA_AC2_CFG_AIFSN FIELD32(0x00000f00)
737#define EDCA_AC2_CFG_CWMIN FIELD32(0x0000f000)
738#define EDCA_AC2_CFG_CWMAX FIELD32(0x000f0000)
739
740/*
741 * EDCA_AC3_CFG:
742 */
743#define EDCA_AC3_CFG 0x130c
744#define EDCA_AC3_CFG_TX_OP FIELD32(0x000000ff)
745#define EDCA_AC3_CFG_AIFSN FIELD32(0x00000f00)
746#define EDCA_AC3_CFG_CWMIN FIELD32(0x0000f000)
747#define EDCA_AC3_CFG_CWMAX FIELD32(0x000f0000)
748
749/*
750 * EDCA_TID_AC_MAP:
751 */
752#define EDCA_TID_AC_MAP 0x1310
753
754/*
755 * TX_PWR_CFG_0:
756 */
757#define TX_PWR_CFG_0 0x1314
758#define TX_PWR_CFG_0_1MBS FIELD32(0x0000000f)
759#define TX_PWR_CFG_0_2MBS FIELD32(0x000000f0)
760#define TX_PWR_CFG_0_55MBS FIELD32(0x00000f00)
761#define TX_PWR_CFG_0_11MBS FIELD32(0x0000f000)
762#define TX_PWR_CFG_0_6MBS FIELD32(0x000f0000)
763#define TX_PWR_CFG_0_9MBS FIELD32(0x00f00000)
764#define TX_PWR_CFG_0_12MBS FIELD32(0x0f000000)
765#define TX_PWR_CFG_0_18MBS FIELD32(0xf0000000)
766
767/*
768 * TX_PWR_CFG_1:
769 */
770#define TX_PWR_CFG_1 0x1318
771#define TX_PWR_CFG_1_24MBS FIELD32(0x0000000f)
772#define TX_PWR_CFG_1_36MBS FIELD32(0x000000f0)
773#define TX_PWR_CFG_1_48MBS FIELD32(0x00000f00)
774#define TX_PWR_CFG_1_54MBS FIELD32(0x0000f000)
775#define TX_PWR_CFG_1_MCS0 FIELD32(0x000f0000)
776#define TX_PWR_CFG_1_MCS1 FIELD32(0x00f00000)
777#define TX_PWR_CFG_1_MCS2 FIELD32(0x0f000000)
778#define TX_PWR_CFG_1_MCS3 FIELD32(0xf0000000)
779
780/*
781 * TX_PWR_CFG_2:
782 */
783#define TX_PWR_CFG_2 0x131c
784#define TX_PWR_CFG_2_MCS4 FIELD32(0x0000000f)
785#define TX_PWR_CFG_2_MCS5 FIELD32(0x000000f0)
786#define TX_PWR_CFG_2_MCS6 FIELD32(0x00000f00)
787#define TX_PWR_CFG_2_MCS7 FIELD32(0x0000f000)
788#define TX_PWR_CFG_2_MCS8 FIELD32(0x000f0000)
789#define TX_PWR_CFG_2_MCS9 FIELD32(0x00f00000)
790#define TX_PWR_CFG_2_MCS10 FIELD32(0x0f000000)
791#define TX_PWR_CFG_2_MCS11 FIELD32(0xf0000000)
792
793/*
794 * TX_PWR_CFG_3:
795 */
796#define TX_PWR_CFG_3 0x1320
797#define TX_PWR_CFG_3_MCS12 FIELD32(0x0000000f)
798#define TX_PWR_CFG_3_MCS13 FIELD32(0x000000f0)
799#define TX_PWR_CFG_3_MCS14 FIELD32(0x00000f00)
800#define TX_PWR_CFG_3_MCS15 FIELD32(0x0000f000)
801#define TX_PWR_CFG_3_UKNOWN1 FIELD32(0x000f0000)
802#define TX_PWR_CFG_3_UKNOWN2 FIELD32(0x00f00000)
803#define TX_PWR_CFG_3_UKNOWN3 FIELD32(0x0f000000)
804#define TX_PWR_CFG_3_UKNOWN4 FIELD32(0xf0000000)
805
806/*
807 * TX_PWR_CFG_4:
808 */
809#define TX_PWR_CFG_4 0x1324
810#define TX_PWR_CFG_4_UKNOWN5 FIELD32(0x0000000f)
811#define TX_PWR_CFG_4_UKNOWN6 FIELD32(0x000000f0)
812#define TX_PWR_CFG_4_UKNOWN7 FIELD32(0x00000f00)
813#define TX_PWR_CFG_4_UKNOWN8 FIELD32(0x0000f000)
814
815/*
816 * TX_PIN_CFG:
817 */
818#define TX_PIN_CFG 0x1328
819#define TX_PIN_CFG_PA_PE_A0_EN FIELD32(0x00000001)
820#define TX_PIN_CFG_PA_PE_G0_EN FIELD32(0x00000002)
821#define TX_PIN_CFG_PA_PE_A1_EN FIELD32(0x00000004)
822#define TX_PIN_CFG_PA_PE_G1_EN FIELD32(0x00000008)
823#define TX_PIN_CFG_PA_PE_A0_POL FIELD32(0x00000010)
824#define TX_PIN_CFG_PA_PE_G0_POL FIELD32(0x00000020)
825#define TX_PIN_CFG_PA_PE_A1_POL FIELD32(0x00000040)
826#define TX_PIN_CFG_PA_PE_G1_POL FIELD32(0x00000080)
827#define TX_PIN_CFG_LNA_PE_A0_EN FIELD32(0x00000100)
828#define TX_PIN_CFG_LNA_PE_G0_EN FIELD32(0x00000200)
829#define TX_PIN_CFG_LNA_PE_A1_EN FIELD32(0x00000400)
830#define TX_PIN_CFG_LNA_PE_G1_EN FIELD32(0x00000800)
831#define TX_PIN_CFG_LNA_PE_A0_POL FIELD32(0x00001000)
832#define TX_PIN_CFG_LNA_PE_G0_POL FIELD32(0x00002000)
833#define TX_PIN_CFG_LNA_PE_A1_POL FIELD32(0x00004000)
834#define TX_PIN_CFG_LNA_PE_G1_POL FIELD32(0x00008000)
835#define TX_PIN_CFG_RFTR_EN FIELD32(0x00010000)
836#define TX_PIN_CFG_RFTR_POL FIELD32(0x00020000)
837#define TX_PIN_CFG_TRSW_EN FIELD32(0x00040000)
838#define TX_PIN_CFG_TRSW_POL FIELD32(0x00080000)
839
840/*
841 * TX_BAND_CFG: 0x1 use upper 20MHz, 0x0 use lower 20MHz
842 */
843#define TX_BAND_CFG 0x132c
844#define TX_BAND_CFG_HT40_PLUS FIELD32(0x00000001)
845#define TX_BAND_CFG_A FIELD32(0x00000002)
846#define TX_BAND_CFG_BG FIELD32(0x00000004)
847
848/*
849 * TX_SW_CFG0:
850 */
851#define TX_SW_CFG0 0x1330
852
853/*
854 * TX_SW_CFG1:
855 */
856#define TX_SW_CFG1 0x1334
857
858/*
859 * TX_SW_CFG2:
860 */
861#define TX_SW_CFG2 0x1338
862
863/*
864 * TXOP_THRES_CFG:
865 */
866#define TXOP_THRES_CFG 0x133c
867
868/*
869 * TXOP_CTRL_CFG:
870 */
871#define TXOP_CTRL_CFG 0x1340
872
873/*
874 * TX_RTS_CFG:
875 * RTS_THRES: unit:byte
876 * RTS_FBK_EN: enable rts rate fallback
877 */
878#define TX_RTS_CFG 0x1344
879#define TX_RTS_CFG_AUTO_RTS_RETRY_LIMIT FIELD32(0x000000ff)
880#define TX_RTS_CFG_RTS_THRES FIELD32(0x00ffff00)
881#define TX_RTS_CFG_RTS_FBK_EN FIELD32(0x01000000)
882
883/*
884 * TX_TIMEOUT_CFG:
885 * MPDU_LIFETIME: expiration time = 2^(9+MPDU LIFE TIME) us
886 * RX_ACK_TIMEOUT: unit:slot. Used for TX procedure
887 * TX_OP_TIMEOUT: TXOP timeout value for TXOP truncation.
888 * it is recommended that:
889 * (SLOT_TIME) > (TX_OP_TIMEOUT) > (RX_ACK_TIMEOUT)
890 */
891#define TX_TIMEOUT_CFG 0x1348
892#define TX_TIMEOUT_CFG_MPDU_LIFETIME FIELD32(0x000000f0)
893#define TX_TIMEOUT_CFG_RX_ACK_TIMEOUT FIELD32(0x0000ff00)
894#define TX_TIMEOUT_CFG_TX_OP_TIMEOUT FIELD32(0x00ff0000)
895
896/*
897 * TX_RTY_CFG:
898 * SHORT_RTY_LIMIT: short retry limit
899 * LONG_RTY_LIMIT: long retry limit
900 * LONG_RTY_THRE: Long retry threshoold
901 * NON_AGG_RTY_MODE: Non-Aggregate MPDU retry mode
902 * 0:expired by retry limit, 1: expired by mpdu life timer
903 * AGG_RTY_MODE: Aggregate MPDU retry mode
904 * 0:expired by retry limit, 1: expired by mpdu life timer
905 * TX_AUTO_FB_ENABLE: Tx retry PHY rate auto fallback enable
906 */
907#define TX_RTY_CFG 0x134c
908#define TX_RTY_CFG_SHORT_RTY_LIMIT FIELD32(0x000000ff)
909#define TX_RTY_CFG_LONG_RTY_LIMIT FIELD32(0x0000ff00)
910#define TX_RTY_CFG_LONG_RTY_THRE FIELD32(0x0fff0000)
911#define TX_RTY_CFG_NON_AGG_RTY_MODE FIELD32(0x10000000)
912#define TX_RTY_CFG_AGG_RTY_MODE FIELD32(0x20000000)
913#define TX_RTY_CFG_TX_AUTO_FB_ENABLE FIELD32(0x40000000)
914
915/*
916 * TX_LINK_CFG:
917 * REMOTE_MFB_LIFETIME: remote MFB life time. unit: 32us
918 * MFB_ENABLE: TX apply remote MFB 1:enable
919 * REMOTE_UMFS_ENABLE: remote unsolicit MFB enable
920 * 0: not apply remote remote unsolicit (MFS=7)
921 * TX_MRQ_EN: MCS request TX enable
922 * TX_RDG_EN: RDG TX enable
923 * TX_CF_ACK_EN: Piggyback CF-ACK enable
924 * REMOTE_MFB: remote MCS feedback
925 * REMOTE_MFS: remote MCS feedback sequence number
926 */
927#define TX_LINK_CFG 0x1350
928#define TX_LINK_CFG_REMOTE_MFB_LIFETIME FIELD32(0x000000ff)
929#define TX_LINK_CFG_MFB_ENABLE FIELD32(0x00000100)
930#define TX_LINK_CFG_REMOTE_UMFS_ENABLE FIELD32(0x00000200)
931#define TX_LINK_CFG_TX_MRQ_EN FIELD32(0x00000400)
932#define TX_LINK_CFG_TX_RDG_EN FIELD32(0x00000800)
933#define TX_LINK_CFG_TX_CF_ACK_EN FIELD32(0x00001000)
934#define TX_LINK_CFG_REMOTE_MFB FIELD32(0x00ff0000)
935#define TX_LINK_CFG_REMOTE_MFS FIELD32(0xff000000)
936
937/*
938 * HT_FBK_CFG0:
939 */
940#define HT_FBK_CFG0 0x1354
941#define HT_FBK_CFG0_HTMCS0FBK FIELD32(0x0000000f)
942#define HT_FBK_CFG0_HTMCS1FBK FIELD32(0x000000f0)
943#define HT_FBK_CFG0_HTMCS2FBK FIELD32(0x00000f00)
944#define HT_FBK_CFG0_HTMCS3FBK FIELD32(0x0000f000)
945#define HT_FBK_CFG0_HTMCS4FBK FIELD32(0x000f0000)
946#define HT_FBK_CFG0_HTMCS5FBK FIELD32(0x00f00000)
947#define HT_FBK_CFG0_HTMCS6FBK FIELD32(0x0f000000)
948#define HT_FBK_CFG0_HTMCS7FBK FIELD32(0xf0000000)
949
950/*
951 * HT_FBK_CFG1:
952 */
953#define HT_FBK_CFG1 0x1358
954#define HT_FBK_CFG1_HTMCS8FBK FIELD32(0x0000000f)
955#define HT_FBK_CFG1_HTMCS9FBK FIELD32(0x000000f0)
956#define HT_FBK_CFG1_HTMCS10FBK FIELD32(0x00000f00)
957#define HT_FBK_CFG1_HTMCS11FBK FIELD32(0x0000f000)
958#define HT_FBK_CFG1_HTMCS12FBK FIELD32(0x000f0000)
959#define HT_FBK_CFG1_HTMCS13FBK FIELD32(0x00f00000)
960#define HT_FBK_CFG1_HTMCS14FBK FIELD32(0x0f000000)
961#define HT_FBK_CFG1_HTMCS15FBK FIELD32(0xf0000000)
962
963/*
964 * LG_FBK_CFG0:
965 */
966#define LG_FBK_CFG0 0x135c
967#define LG_FBK_CFG0_OFDMMCS0FBK FIELD32(0x0000000f)
968#define LG_FBK_CFG0_OFDMMCS1FBK FIELD32(0x000000f0)
969#define LG_FBK_CFG0_OFDMMCS2FBK FIELD32(0x00000f00)
970#define LG_FBK_CFG0_OFDMMCS3FBK FIELD32(0x0000f000)
971#define LG_FBK_CFG0_OFDMMCS4FBK FIELD32(0x000f0000)
972#define LG_FBK_CFG0_OFDMMCS5FBK FIELD32(0x00f00000)
973#define LG_FBK_CFG0_OFDMMCS6FBK FIELD32(0x0f000000)
974#define LG_FBK_CFG0_OFDMMCS7FBK FIELD32(0xf0000000)
975
976/*
977 * LG_FBK_CFG1:
978 */
979#define LG_FBK_CFG1 0x1360
980#define LG_FBK_CFG0_CCKMCS0FBK FIELD32(0x0000000f)
981#define LG_FBK_CFG0_CCKMCS1FBK FIELD32(0x000000f0)
982#define LG_FBK_CFG0_CCKMCS2FBK FIELD32(0x00000f00)
983#define LG_FBK_CFG0_CCKMCS3FBK FIELD32(0x0000f000)
984
985/*
986 * CCK_PROT_CFG: CCK Protection
987 * PROTECT_RATE: Protection control frame rate for CCK TX(RTS/CTS/CFEnd)
988 * PROTECT_CTRL: Protection control frame type for CCK TX
989 * 0:none, 1:RTS/CTS, 2:CTS-to-self
990 * PROTECT_NAV: TXOP protection type for CCK TX
991 * 0:none, 1:ShortNAVprotect, 2:LongNAVProtect
992 * TX_OP_ALLOW_CCK: CCK TXOP allowance, 0:disallow
993 * TX_OP_ALLOW_OFDM: CCK TXOP allowance, 0:disallow
994 * TX_OP_ALLOW_MM20: CCK TXOP allowance, 0:disallow
995 * TX_OP_ALLOW_MM40: CCK TXOP allowance, 0:disallow
996 * TX_OP_ALLOW_GF20: CCK TXOP allowance, 0:disallow
997 * TX_OP_ALLOW_GF40: CCK TXOP allowance, 0:disallow
998 * RTS_TH_EN: RTS threshold enable on CCK TX
999 */
1000#define CCK_PROT_CFG 0x1364
1001#define CCK_PROT_CFG_PROTECT_RATE FIELD32(0x0000ffff)
1002#define CCK_PROT_CFG_PROTECT_CTRL FIELD32(0x00030000)
1003#define CCK_PROT_CFG_PROTECT_NAV FIELD32(0x000c0000)
1004#define CCK_PROT_CFG_TX_OP_ALLOW_CCK FIELD32(0x00100000)
1005#define CCK_PROT_CFG_TX_OP_ALLOW_OFDM FIELD32(0x00200000)
1006#define CCK_PROT_CFG_TX_OP_ALLOW_MM20 FIELD32(0x00400000)
1007#define CCK_PROT_CFG_TX_OP_ALLOW_MM40 FIELD32(0x00800000)
1008#define CCK_PROT_CFG_TX_OP_ALLOW_GF20 FIELD32(0x01000000)
1009#define CCK_PROT_CFG_TX_OP_ALLOW_GF40 FIELD32(0x02000000)
1010#define CCK_PROT_CFG_RTS_TH_EN FIELD32(0x04000000)
1011
1012/*
1013 * OFDM_PROT_CFG: OFDM Protection
1014 */
1015#define OFDM_PROT_CFG 0x1368
1016#define OFDM_PROT_CFG_PROTECT_RATE FIELD32(0x0000ffff)
1017#define OFDM_PROT_CFG_PROTECT_CTRL FIELD32(0x00030000)
1018#define OFDM_PROT_CFG_PROTECT_NAV FIELD32(0x000c0000)
1019#define OFDM_PROT_CFG_TX_OP_ALLOW_CCK FIELD32(0x00100000)
1020#define OFDM_PROT_CFG_TX_OP_ALLOW_OFDM FIELD32(0x00200000)
1021#define OFDM_PROT_CFG_TX_OP_ALLOW_MM20 FIELD32(0x00400000)
1022#define OFDM_PROT_CFG_TX_OP_ALLOW_MM40 FIELD32(0x00800000)
1023#define OFDM_PROT_CFG_TX_OP_ALLOW_GF20 FIELD32(0x01000000)
1024#define OFDM_PROT_CFG_TX_OP_ALLOW_GF40 FIELD32(0x02000000)
1025#define OFDM_PROT_CFG_RTS_TH_EN FIELD32(0x04000000)
1026
1027/*
1028 * MM20_PROT_CFG: MM20 Protection
1029 */
1030#define MM20_PROT_CFG 0x136c
1031#define MM20_PROT_CFG_PROTECT_RATE FIELD32(0x0000ffff)
1032#define MM20_PROT_CFG_PROTECT_CTRL FIELD32(0x00030000)
1033#define MM20_PROT_CFG_PROTECT_NAV FIELD32(0x000c0000)
1034#define MM20_PROT_CFG_TX_OP_ALLOW_CCK FIELD32(0x00100000)
1035#define MM20_PROT_CFG_TX_OP_ALLOW_OFDM FIELD32(0x00200000)
1036#define MM20_PROT_CFG_TX_OP_ALLOW_MM20 FIELD32(0x00400000)
1037#define MM20_PROT_CFG_TX_OP_ALLOW_MM40 FIELD32(0x00800000)
1038#define MM20_PROT_CFG_TX_OP_ALLOW_GF20 FIELD32(0x01000000)
1039#define MM20_PROT_CFG_TX_OP_ALLOW_GF40 FIELD32(0x02000000)
1040#define MM20_PROT_CFG_RTS_TH_EN FIELD32(0x04000000)
1041
1042/*
1043 * MM40_PROT_CFG: MM40 Protection
1044 */
1045#define MM40_PROT_CFG 0x1370
1046#define MM40_PROT_CFG_PROTECT_RATE FIELD32(0x0000ffff)
1047#define MM40_PROT_CFG_PROTECT_CTRL FIELD32(0x00030000)
1048#define MM40_PROT_CFG_PROTECT_NAV FIELD32(0x000c0000)
1049#define MM40_PROT_CFG_TX_OP_ALLOW_CCK FIELD32(0x00100000)
1050#define MM40_PROT_CFG_TX_OP_ALLOW_OFDM FIELD32(0x00200000)
1051#define MM40_PROT_CFG_TX_OP_ALLOW_MM20 FIELD32(0x00400000)
1052#define MM40_PROT_CFG_TX_OP_ALLOW_MM40 FIELD32(0x00800000)
1053#define MM40_PROT_CFG_TX_OP_ALLOW_GF20 FIELD32(0x01000000)
1054#define MM40_PROT_CFG_TX_OP_ALLOW_GF40 FIELD32(0x02000000)
1055#define MM40_PROT_CFG_RTS_TH_EN FIELD32(0x04000000)
1056
1057/*
1058 * GF20_PROT_CFG: GF20 Protection
1059 */
1060#define GF20_PROT_CFG 0x1374
1061#define GF20_PROT_CFG_PROTECT_RATE FIELD32(0x0000ffff)
1062#define GF20_PROT_CFG_PROTECT_CTRL FIELD32(0x00030000)
1063#define GF20_PROT_CFG_PROTECT_NAV FIELD32(0x000c0000)
1064#define GF20_PROT_CFG_TX_OP_ALLOW_CCK FIELD32(0x00100000)
1065#define GF20_PROT_CFG_TX_OP_ALLOW_OFDM FIELD32(0x00200000)
1066#define GF20_PROT_CFG_TX_OP_ALLOW_MM20 FIELD32(0x00400000)
1067#define GF20_PROT_CFG_TX_OP_ALLOW_MM40 FIELD32(0x00800000)
1068#define GF20_PROT_CFG_TX_OP_ALLOW_GF20 FIELD32(0x01000000)
1069#define GF20_PROT_CFG_TX_OP_ALLOW_GF40 FIELD32(0x02000000)
1070#define GF20_PROT_CFG_RTS_TH_EN FIELD32(0x04000000)
1071
1072/*
1073 * GF40_PROT_CFG: GF40 Protection
1074 */
1075#define GF40_PROT_CFG 0x1378
1076#define GF40_PROT_CFG_PROTECT_RATE FIELD32(0x0000ffff)
1077#define GF40_PROT_CFG_PROTECT_CTRL FIELD32(0x00030000)
1078#define GF40_PROT_CFG_PROTECT_NAV FIELD32(0x000c0000)
1079#define GF40_PROT_CFG_TX_OP_ALLOW_CCK FIELD32(0x00100000)
1080#define GF40_PROT_CFG_TX_OP_ALLOW_OFDM FIELD32(0x00200000)
1081#define GF40_PROT_CFG_TX_OP_ALLOW_MM20 FIELD32(0x00400000)
1082#define GF40_PROT_CFG_TX_OP_ALLOW_MM40 FIELD32(0x00800000)
1083#define GF40_PROT_CFG_TX_OP_ALLOW_GF20 FIELD32(0x01000000)
1084#define GF40_PROT_CFG_TX_OP_ALLOW_GF40 FIELD32(0x02000000)
1085#define GF40_PROT_CFG_RTS_TH_EN FIELD32(0x04000000)
1086
1087/*
1088 * EXP_CTS_TIME:
1089 */
1090#define EXP_CTS_TIME 0x137c
1091
1092/*
1093 * EXP_ACK_TIME:
1094 */
1095#define EXP_ACK_TIME 0x1380
1096
1097/*
1098 * RX_FILTER_CFG: RX configuration register.
1099 */
1100#define RX_FILTER_CFG 0x1400
1101#define RX_FILTER_CFG_DROP_CRC_ERROR FIELD32(0x00000001)
1102#define RX_FILTER_CFG_DROP_PHY_ERROR FIELD32(0x00000002)
1103#define RX_FILTER_CFG_DROP_NOT_TO_ME FIELD32(0x00000004)
1104#define RX_FILTER_CFG_DROP_NOT_MY_BSSD FIELD32(0x00000008)
1105#define RX_FILTER_CFG_DROP_VER_ERROR FIELD32(0x00000010)
1106#define RX_FILTER_CFG_DROP_MULTICAST FIELD32(0x00000020)
1107#define RX_FILTER_CFG_DROP_BROADCAST FIELD32(0x00000040)
1108#define RX_FILTER_CFG_DROP_DUPLICATE FIELD32(0x00000080)
1109#define RX_FILTER_CFG_DROP_CF_END_ACK FIELD32(0x00000100)
1110#define RX_FILTER_CFG_DROP_CF_END FIELD32(0x00000200)
1111#define RX_FILTER_CFG_DROP_ACK FIELD32(0x00000400)
1112#define RX_FILTER_CFG_DROP_CTS FIELD32(0x00000800)
1113#define RX_FILTER_CFG_DROP_RTS FIELD32(0x00001000)
1114#define RX_FILTER_CFG_DROP_PSPOLL FIELD32(0x00002000)
1115#define RX_FILTER_CFG_DROP_BA FIELD32(0x00004000)
1116#define RX_FILTER_CFG_DROP_BAR FIELD32(0x00008000)
1117#define RX_FILTER_CFG_DROP_CNTL FIELD32(0x00010000)
1118
1119/*
1120 * AUTO_RSP_CFG:
1121 * AUTORESPONDER: 0: disable, 1: enable
1122 * BAC_ACK_POLICY: 0:long, 1:short preamble
1123 * CTS_40_MMODE: Response CTS 40MHz duplicate mode
1124 * CTS_40_MREF: Response CTS 40MHz duplicate mode
1125 * AR_PREAMBLE: Auto responder preamble 0:long, 1:short preamble
1126 * DUAL_CTS_EN: Power bit value in control frame
1127 * ACK_CTS_PSM_BIT:Power bit value in control frame
1128 */
1129#define AUTO_RSP_CFG 0x1404
1130#define AUTO_RSP_CFG_AUTORESPONDER FIELD32(0x00000001)
1131#define AUTO_RSP_CFG_BAC_ACK_POLICY FIELD32(0x00000002)
1132#define AUTO_RSP_CFG_CTS_40_MMODE FIELD32(0x00000004)
1133#define AUTO_RSP_CFG_CTS_40_MREF FIELD32(0x00000008)
1134#define AUTO_RSP_CFG_AR_PREAMBLE FIELD32(0x00000010)
1135#define AUTO_RSP_CFG_DUAL_CTS_EN FIELD32(0x00000040)
1136#define AUTO_RSP_CFG_ACK_CTS_PSM_BIT FIELD32(0x00000080)
1137
1138/*
1139 * LEGACY_BASIC_RATE:
1140 */
1141#define LEGACY_BASIC_RATE 0x1408
1142
1143/*
1144 * HT_BASIC_RATE:
1145 */
1146#define HT_BASIC_RATE 0x140c
1147
1148/*
1149 * HT_CTRL_CFG:
1150 */
1151#define HT_CTRL_CFG 0x1410
1152
1153/*
1154 * SIFS_COST_CFG:
1155 */
1156#define SIFS_COST_CFG 0x1414
1157
1158/*
1159 * RX_PARSER_CFG:
1160 * Set NAV for all received frames
1161 */
1162#define RX_PARSER_CFG 0x1418
1163
1164/*
1165 * TX_SEC_CNT0:
1166 */
1167#define TX_SEC_CNT0 0x1500
1168
1169/*
1170 * RX_SEC_CNT0:
1171 */
1172#define RX_SEC_CNT0 0x1504
1173
1174/*
1175 * CCMP_FC_MUTE:
1176 */
1177#define CCMP_FC_MUTE 0x1508
1178
1179/*
1180 * TXOP_HLDR_ADDR0:
1181 */
1182#define TXOP_HLDR_ADDR0 0x1600
1183
1184/*
1185 * TXOP_HLDR_ADDR1:
1186 */
1187#define TXOP_HLDR_ADDR1 0x1604
1188
1189/*
1190 * TXOP_HLDR_ET:
1191 */
1192#define TXOP_HLDR_ET 0x1608
1193
1194/*
1195 * QOS_CFPOLL_RA_DW0:
1196 */
1197#define QOS_CFPOLL_RA_DW0 0x160c
1198
1199/*
1200 * QOS_CFPOLL_RA_DW1:
1201 */
1202#define QOS_CFPOLL_RA_DW1 0x1610
1203
1204/*
1205 * QOS_CFPOLL_QC:
1206 */
1207#define QOS_CFPOLL_QC 0x1614
1208
1209/*
1210 * RX_STA_CNT0: RX PLCP error count & RX CRC error count
1211 */
1212#define RX_STA_CNT0 0x1700
1213#define RX_STA_CNT0_CRC_ERR FIELD32(0x0000ffff)
1214#define RX_STA_CNT0_PHY_ERR FIELD32(0xffff0000)
1215
1216/*
1217 * RX_STA_CNT1: RX False CCA count & RX LONG frame count
1218 */
1219#define RX_STA_CNT1 0x1704
1220#define RX_STA_CNT1_FALSE_CCA FIELD32(0x0000ffff)
1221#define RX_STA_CNT1_PLCP_ERR FIELD32(0xffff0000)
1222
1223/*
1224 * RX_STA_CNT2:
1225 */
1226#define RX_STA_CNT2 0x1708
1227#define RX_STA_CNT2_RX_DUPLI_COUNT FIELD32(0x0000ffff)
1228#define RX_STA_CNT2_RX_FIFO_OVERFLOW FIELD32(0xffff0000)
1229
1230/*
1231 * TX_STA_CNT0: TX Beacon count
1232 */
1233#define TX_STA_CNT0 0x170c
1234#define TX_STA_CNT0_TX_FAIL_COUNT FIELD32(0x0000ffff)
1235#define TX_STA_CNT0_TX_BEACON_COUNT FIELD32(0xffff0000)
1236
1237/*
1238 * TX_STA_CNT1: TX tx count
1239 */
1240#define TX_STA_CNT1 0x1710
1241#define TX_STA_CNT1_TX_SUCCESS FIELD32(0x0000ffff)
1242#define TX_STA_CNT1_TX_RETRANSMIT FIELD32(0xffff0000)
1243
1244/*
1245 * TX_STA_CNT2: TX tx count
1246 */
1247#define TX_STA_CNT2 0x1714
1248#define TX_STA_CNT2_TX_ZERO_LEN_COUNT FIELD32(0x0000ffff)
1249#define TX_STA_CNT2_TX_UNDER_FLOW_COUNT FIELD32(0xffff0000)
1250
1251/*
1252 * TX_STA_FIFO: TX Result for specific PID status fifo register
1253 */
1254#define TX_STA_FIFO 0x1718
1255#define TX_STA_FIFO_VALID FIELD32(0x00000001)
1256#define TX_STA_FIFO_PID_TYPE FIELD32(0x0000001e)
1257#define TX_STA_FIFO_TX_SUCCESS FIELD32(0x00000020)
1258#define TX_STA_FIFO_TX_AGGRE FIELD32(0x00000040)
1259#define TX_STA_FIFO_TX_ACK_REQUIRED FIELD32(0x00000080)
1260#define TX_STA_FIFO_WCID FIELD32(0x0000ff00)
1261#define TX_STA_FIFO_SUCCESS_RATE FIELD32(0xffff0000)
1262#define TX_STA_FIFO_MCS FIELD32(0x007f0000)
1263#define TX_STA_FIFO_PHYMODE FIELD32(0xc0000000)
1264
1265/*
1266 * TX_AGG_CNT: Debug counter
1267 */
1268#define TX_AGG_CNT 0x171c
1269#define TX_AGG_CNT_NON_AGG_TX_COUNT FIELD32(0x0000ffff)
1270#define TX_AGG_CNT_AGG_TX_COUNT FIELD32(0xffff0000)
1271
1272/*
1273 * TX_AGG_CNT0:
1274 */
1275#define TX_AGG_CNT0 0x1720
1276#define TX_AGG_CNT0_AGG_SIZE_1_COUNT FIELD32(0x0000ffff)
1277#define TX_AGG_CNT0_AGG_SIZE_2_COUNT FIELD32(0xffff0000)
1278
1279/*
1280 * TX_AGG_CNT1:
1281 */
1282#define TX_AGG_CNT1 0x1724
1283#define TX_AGG_CNT1_AGG_SIZE_3_COUNT FIELD32(0x0000ffff)
1284#define TX_AGG_CNT1_AGG_SIZE_4_COUNT FIELD32(0xffff0000)
1285
1286/*
1287 * TX_AGG_CNT2:
1288 */
1289#define TX_AGG_CNT2 0x1728
1290#define TX_AGG_CNT2_AGG_SIZE_5_COUNT FIELD32(0x0000ffff)
1291#define TX_AGG_CNT2_AGG_SIZE_6_COUNT FIELD32(0xffff0000)
1292
1293/*
1294 * TX_AGG_CNT3:
1295 */
1296#define TX_AGG_CNT3 0x172c
1297#define TX_AGG_CNT3_AGG_SIZE_7_COUNT FIELD32(0x0000ffff)
1298#define TX_AGG_CNT3_AGG_SIZE_8_COUNT FIELD32(0xffff0000)
1299
1300/*
1301 * TX_AGG_CNT4:
1302 */
1303#define TX_AGG_CNT4 0x1730
1304#define TX_AGG_CNT4_AGG_SIZE_9_COUNT FIELD32(0x0000ffff)
1305#define TX_AGG_CNT4_AGG_SIZE_10_COUNT FIELD32(0xffff0000)
1306
1307/*
1308 * TX_AGG_CNT5:
1309 */
1310#define TX_AGG_CNT5 0x1734
1311#define TX_AGG_CNT5_AGG_SIZE_11_COUNT FIELD32(0x0000ffff)
1312#define TX_AGG_CNT5_AGG_SIZE_12_COUNT FIELD32(0xffff0000)
1313
1314/*
1315 * TX_AGG_CNT6:
1316 */
1317#define TX_AGG_CNT6 0x1738
1318#define TX_AGG_CNT6_AGG_SIZE_13_COUNT FIELD32(0x0000ffff)
1319#define TX_AGG_CNT6_AGG_SIZE_14_COUNT FIELD32(0xffff0000)
1320
1321/*
1322 * TX_AGG_CNT7:
1323 */
1324#define TX_AGG_CNT7 0x173c
1325#define TX_AGG_CNT7_AGG_SIZE_15_COUNT FIELD32(0x0000ffff)
1326#define TX_AGG_CNT7_AGG_SIZE_16_COUNT FIELD32(0xffff0000)
1327
1328/*
1329 * MPDU_DENSITY_CNT:
1330 * TX_ZERO_DEL: TX zero length delimiter count
1331 * RX_ZERO_DEL: RX zero length delimiter count
1332 */
1333#define MPDU_DENSITY_CNT 0x1740
1334#define MPDU_DENSITY_CNT_TX_ZERO_DEL FIELD32(0x0000ffff)
1335#define MPDU_DENSITY_CNT_RX_ZERO_DEL FIELD32(0xffff0000)
1336
1337/*
1338 * Security key table memory.
1339 * MAC_WCID_BASE: 8-bytes (use only 6 bytes) * 256 entry
1340 * PAIRWISE_KEY_TABLE_BASE: 32-byte * 256 entry
1341 * MAC_IVEIV_TABLE_BASE: 8-byte * 256-entry
1342 * MAC_WCID_ATTRIBUTE_BASE: 4-byte * 256-entry
Bartlomiej Zolnierkiewicza4385212009-11-04 18:36:02 +01001343 * SHARED_KEY_TABLE_BASE: 32-byte * 16-entry
1344 * SHARED_KEY_MODE_BASE: 4-byte * 16-entry
Bartlomiej Zolnierkiewiczb54f78a2009-11-04 18:35:54 +01001345 */
1346#define MAC_WCID_BASE 0x1800
1347#define PAIRWISE_KEY_TABLE_BASE 0x4000
1348#define MAC_IVEIV_TABLE_BASE 0x6000
1349#define MAC_WCID_ATTRIBUTE_BASE 0x6800
1350#define SHARED_KEY_TABLE_BASE 0x6c00
1351#define SHARED_KEY_MODE_BASE 0x7000
1352
1353#define MAC_WCID_ENTRY(__idx) \
1354 ( MAC_WCID_BASE + ((__idx) * sizeof(struct mac_wcid_entry)) )
1355#define PAIRWISE_KEY_ENTRY(__idx) \
1356 ( PAIRWISE_KEY_TABLE_BASE + ((__idx) * sizeof(struct hw_key_entry)) )
1357#define MAC_IVEIV_ENTRY(__idx) \
Gertjan van Wingerde79884362009-12-14 23:32:31 +01001358 ( MAC_IVEIV_TABLE_BASE + ((__idx) * sizeof(struct mac_iveiv_entry)) )
Bartlomiej Zolnierkiewiczb54f78a2009-11-04 18:35:54 +01001359#define MAC_WCID_ATTR_ENTRY(__idx) \
1360 ( MAC_WCID_ATTRIBUTE_BASE + ((__idx) * sizeof(u32)) )
1361#define SHARED_KEY_ENTRY(__idx) \
1362 ( SHARED_KEY_TABLE_BASE + ((__idx) * sizeof(struct hw_key_entry)) )
1363#define SHARED_KEY_MODE_ENTRY(__idx) \
1364 ( SHARED_KEY_MODE_BASE + ((__idx) * sizeof(u32)) )
1365
1366struct mac_wcid_entry {
1367 u8 mac[6];
1368 u8 reserved[2];
1369} __attribute__ ((packed));
1370
1371struct hw_key_entry {
1372 u8 key[16];
1373 u8 tx_mic[8];
1374 u8 rx_mic[8];
1375} __attribute__ ((packed));
1376
1377struct mac_iveiv_entry {
1378 u8 iv[8];
1379} __attribute__ ((packed));
1380
1381/*
1382 * MAC_WCID_ATTRIBUTE:
1383 */
1384#define MAC_WCID_ATTRIBUTE_KEYTAB FIELD32(0x00000001)
1385#define MAC_WCID_ATTRIBUTE_CIPHER FIELD32(0x0000000e)
1386#define MAC_WCID_ATTRIBUTE_BSS_IDX FIELD32(0x00000070)
1387#define MAC_WCID_ATTRIBUTE_RX_WIUDF FIELD32(0x00000380)
1388
1389/*
1390 * SHARED_KEY_MODE:
1391 */
1392#define SHARED_KEY_MODE_BSS0_KEY0 FIELD32(0x00000007)
1393#define SHARED_KEY_MODE_BSS0_KEY1 FIELD32(0x00000070)
1394#define SHARED_KEY_MODE_BSS0_KEY2 FIELD32(0x00000700)
1395#define SHARED_KEY_MODE_BSS0_KEY3 FIELD32(0x00007000)
1396#define SHARED_KEY_MODE_BSS1_KEY0 FIELD32(0x00070000)
1397#define SHARED_KEY_MODE_BSS1_KEY1 FIELD32(0x00700000)
1398#define SHARED_KEY_MODE_BSS1_KEY2 FIELD32(0x07000000)
1399#define SHARED_KEY_MODE_BSS1_KEY3 FIELD32(0x70000000)
1400
1401/*
1402 * HOST-MCU communication
1403 */
1404
1405/*
1406 * H2M_MAILBOX_CSR: Host-to-MCU Mailbox.
1407 */
1408#define H2M_MAILBOX_CSR 0x7010
1409#define H2M_MAILBOX_CSR_ARG0 FIELD32(0x000000ff)
1410#define H2M_MAILBOX_CSR_ARG1 FIELD32(0x0000ff00)
1411#define H2M_MAILBOX_CSR_CMD_TOKEN FIELD32(0x00ff0000)
1412#define H2M_MAILBOX_CSR_OWNER FIELD32(0xff000000)
1413
1414/*
1415 * H2M_MAILBOX_CID:
1416 */
1417#define H2M_MAILBOX_CID 0x7014
1418#define H2M_MAILBOX_CID_CMD0 FIELD32(0x000000ff)
1419#define H2M_MAILBOX_CID_CMD1 FIELD32(0x0000ff00)
1420#define H2M_MAILBOX_CID_CMD2 FIELD32(0x00ff0000)
1421#define H2M_MAILBOX_CID_CMD3 FIELD32(0xff000000)
1422
1423/*
1424 * H2M_MAILBOX_STATUS:
1425 */
1426#define H2M_MAILBOX_STATUS 0x701c
1427
1428/*
1429 * H2M_INT_SRC:
1430 */
1431#define H2M_INT_SRC 0x7024
1432
1433/*
1434 * H2M_BBP_AGENT:
1435 */
1436#define H2M_BBP_AGENT 0x7028
1437
1438/*
1439 * MCU_LEDCS: LED control for MCU Mailbox.
1440 */
1441#define MCU_LEDCS_LED_MODE FIELD8(0x1f)
1442#define MCU_LEDCS_POLARITY FIELD8(0x01)
1443
1444/*
1445 * HW_CS_CTS_BASE:
1446 * Carrier-sense CTS frame base address.
1447 * It's where mac stores carrier-sense frame for carrier-sense function.
1448 */
1449#define HW_CS_CTS_BASE 0x7700
1450
1451/*
1452 * HW_DFS_CTS_BASE:
Bartlomiej Zolnierkiewicza4385212009-11-04 18:36:02 +01001453 * DFS CTS frame base address. It's where mac stores CTS frame for DFS.
Bartlomiej Zolnierkiewiczb54f78a2009-11-04 18:35:54 +01001454 */
1455#define HW_DFS_CTS_BASE 0x7780
1456
1457/*
1458 * TXRX control registers - base address 0x3000
1459 */
1460
1461/*
1462 * TXRX_CSR1:
1463 * rt2860b UNKNOWN reg use R/O Reg Addr 0x77d0 first..
1464 */
1465#define TXRX_CSR1 0x77d0
1466
1467/*
1468 * HW_DEBUG_SETTING_BASE:
1469 * since NULL frame won't be that long (256 byte)
1470 * We steal 16 tail bytes to save debugging settings
1471 */
1472#define HW_DEBUG_SETTING_BASE 0x77f0
1473#define HW_DEBUG_SETTING_BASE2 0x7770
1474
1475/*
1476 * HW_BEACON_BASE
1477 * In order to support maximum 8 MBSS and its maximum length
1478 * is 512 bytes for each beacon
1479 * Three section discontinue memory segments will be used.
1480 * 1. The original region for BCN 0~3
1481 * 2. Extract memory from FCE table for BCN 4~5
1482 * 3. Extract memory from Pair-wise key table for BCN 6~7
1483 * It occupied those memory of wcid 238~253 for BCN 6
1484 * and wcid 222~237 for BCN 7
1485 *
1486 * IMPORTANT NOTE: Not sure why legacy driver does this,
1487 * but HW_BEACON_BASE7 is 0x0200 bytes below HW_BEACON_BASE6.
1488 */
1489#define HW_BEACON_BASE0 0x7800
1490#define HW_BEACON_BASE1 0x7a00
1491#define HW_BEACON_BASE2 0x7c00
1492#define HW_BEACON_BASE3 0x7e00
1493#define HW_BEACON_BASE4 0x7200
1494#define HW_BEACON_BASE5 0x7400
1495#define HW_BEACON_BASE6 0x5dc0
1496#define HW_BEACON_BASE7 0x5bc0
1497
1498#define HW_BEACON_OFFSET(__index) \
1499 ( ((__index) < 4) ? ( HW_BEACON_BASE0 + (__index * 0x0200) ) : \
1500 (((__index) < 6) ? ( HW_BEACON_BASE4 + ((__index - 4) * 0x0200) ) : \
1501 (HW_BEACON_BASE6 - ((__index - 6) * 0x0200))) )
1502
1503/*
1504 * BBP registers.
1505 * The wordsize of the BBP is 8 bits.
1506 */
1507
1508/*
1509 * BBP 1: TX Antenna
1510 */
1511#define BBP1_TX_POWER FIELD8(0x07)
1512#define BBP1_TX_ANTENNA FIELD8(0x18)
1513
1514/*
1515 * BBP 3: RX Antenna
1516 */
1517#define BBP3_RX_ANTENNA FIELD8(0x18)
1518#define BBP3_HT40_PLUS FIELD8(0x20)
1519
1520/*
1521 * BBP 4: Bandwidth
1522 */
1523#define BBP4_TX_BF FIELD8(0x01)
1524#define BBP4_BANDWIDTH FIELD8(0x18)
1525
1526/*
Gertjan van Wingerdefab799c2010-04-11 14:31:08 +02001527 * BBP 138: Unknown
1528 */
1529#define BBP138_RX_ADC1 FIELD8(0x02)
1530#define BBP138_RX_ADC2 FIELD8(0x04)
1531#define BBP138_TX_DAC1 FIELD8(0x20)
1532#define BBP138_TX_DAC2 FIELD8(0x40)
1533
1534/*
Bartlomiej Zolnierkiewiczb54f78a2009-11-04 18:35:54 +01001535 * RFCSR registers
1536 * The wordsize of the RFCSR is 8 bits.
1537 */
1538
1539/*
1540 * RFCSR 6:
1541 */
Gertjan van Wingerdefab799c2010-04-11 14:31:08 +02001542#define RFCSR6_R1 FIELD8(0x03)
1543#define RFCSR6_R2 FIELD8(0x40)
Bartlomiej Zolnierkiewiczb54f78a2009-11-04 18:35:54 +01001544
1545/*
1546 * RFCSR 7:
1547 */
1548#define RFCSR7_RF_TUNING FIELD8(0x01)
1549
1550/*
1551 * RFCSR 12:
1552 */
1553#define RFCSR12_TX_POWER FIELD8(0x1f)
1554
1555/*
Gertjan van Wingerdefab799c2010-04-11 14:31:08 +02001556 * RFCSR 17:
1557 */
1558#define RFCSR17_R1 FIELD8(0x07)
1559#define RFCSR17_R2 FIELD8(0x08)
1560#define RFCSR17_R3 FIELD8(0x20)
1561
1562
1563/*
Bartlomiej Zolnierkiewiczb54f78a2009-11-04 18:35:54 +01001564 * RFCSR 22:
1565 */
1566#define RFCSR22_BASEBAND_LOOPBACK FIELD8(0x01)
1567
1568/*
1569 * RFCSR 23:
1570 */
1571#define RFCSR23_FREQ_OFFSET FIELD8(0x7f)
1572
1573/*
1574 * RFCSR 30:
1575 */
1576#define RFCSR30_RF_CALIBRATION FIELD8(0x80)
1577
1578/*
1579 * RF registers
1580 */
1581
1582/*
1583 * RF 2
1584 */
1585#define RF2_ANTENNA_RX2 FIELD32(0x00000040)
1586#define RF2_ANTENNA_TX1 FIELD32(0x00004000)
1587#define RF2_ANTENNA_RX1 FIELD32(0x00020000)
1588
1589/*
1590 * RF 3
1591 */
1592#define RF3_TXPOWER_G FIELD32(0x00003e00)
1593#define RF3_TXPOWER_A_7DBM_BOOST FIELD32(0x00000200)
1594#define RF3_TXPOWER_A FIELD32(0x00003c00)
1595
1596/*
1597 * RF 4
1598 */
1599#define RF4_TXPOWER_G FIELD32(0x000007c0)
1600#define RF4_TXPOWER_A_7DBM_BOOST FIELD32(0x00000040)
1601#define RF4_TXPOWER_A FIELD32(0x00000780)
1602#define RF4_FREQ_OFFSET FIELD32(0x001f8000)
1603#define RF4_HT40 FIELD32(0x00200000)
1604
1605/*
1606 * EEPROM content.
1607 * The wordsize of the EEPROM is 16 bits.
1608 */
1609
1610/*
1611 * EEPROM Version
1612 */
1613#define EEPROM_VERSION 0x0001
1614#define EEPROM_VERSION_FAE FIELD16(0x00ff)
1615#define EEPROM_VERSION_VERSION FIELD16(0xff00)
1616
1617/*
1618 * HW MAC address.
1619 */
1620#define EEPROM_MAC_ADDR_0 0x0002
1621#define EEPROM_MAC_ADDR_BYTE0 FIELD16(0x00ff)
1622#define EEPROM_MAC_ADDR_BYTE1 FIELD16(0xff00)
1623#define EEPROM_MAC_ADDR_1 0x0003
1624#define EEPROM_MAC_ADDR_BYTE2 FIELD16(0x00ff)
1625#define EEPROM_MAC_ADDR_BYTE3 FIELD16(0xff00)
1626#define EEPROM_MAC_ADDR_2 0x0004
1627#define EEPROM_MAC_ADDR_BYTE4 FIELD16(0x00ff)
1628#define EEPROM_MAC_ADDR_BYTE5 FIELD16(0xff00)
1629
1630/*
1631 * EEPROM ANTENNA config
1632 * RXPATH: 1: 1R, 2: 2R, 3: 3R
1633 * TXPATH: 1: 1T, 2: 2T
1634 */
1635#define EEPROM_ANTENNA 0x001a
1636#define EEPROM_ANTENNA_RXPATH FIELD16(0x000f)
1637#define EEPROM_ANTENNA_TXPATH FIELD16(0x00f0)
1638#define EEPROM_ANTENNA_RF_TYPE FIELD16(0x0f00)
1639
1640/*
1641 * EEPROM NIC config
1642 * CARDBUS_ACCEL: 0 - enable, 1 - disable
1643 */
1644#define EEPROM_NIC 0x001b
1645#define EEPROM_NIC_HW_RADIO FIELD16(0x0001)
1646#define EEPROM_NIC_DYNAMIC_TX_AGC FIELD16(0x0002)
1647#define EEPROM_NIC_EXTERNAL_LNA_BG FIELD16(0x0004)
1648#define EEPROM_NIC_EXTERNAL_LNA_A FIELD16(0x0008)
1649#define EEPROM_NIC_CARDBUS_ACCEL FIELD16(0x0010)
1650#define EEPROM_NIC_BW40M_SB_BG FIELD16(0x0020)
1651#define EEPROM_NIC_BW40M_SB_A FIELD16(0x0040)
1652#define EEPROM_NIC_WPS_PBC FIELD16(0x0080)
1653#define EEPROM_NIC_BW40M_BG FIELD16(0x0100)
1654#define EEPROM_NIC_BW40M_A FIELD16(0x0200)
Gertjan van Wingerdefab799c2010-04-11 14:31:08 +02001655#define EEPROM_NIC_ANT_DIVERSITY FIELD16(0x0800)
1656#define EEPROM_NIC_DAC_TEST FIELD16(0x8000)
Bartlomiej Zolnierkiewiczb54f78a2009-11-04 18:35:54 +01001657
1658/*
1659 * EEPROM frequency
1660 */
1661#define EEPROM_FREQ 0x001d
1662#define EEPROM_FREQ_OFFSET FIELD16(0x00ff)
1663#define EEPROM_FREQ_LED_MODE FIELD16(0x7f00)
1664#define EEPROM_FREQ_LED_POLARITY FIELD16(0x1000)
1665
1666/*
1667 * EEPROM LED
1668 * POLARITY_RDY_G: Polarity RDY_G setting.
1669 * POLARITY_RDY_A: Polarity RDY_A setting.
1670 * POLARITY_ACT: Polarity ACT setting.
1671 * POLARITY_GPIO_0: Polarity GPIO0 setting.
1672 * POLARITY_GPIO_1: Polarity GPIO1 setting.
1673 * POLARITY_GPIO_2: Polarity GPIO2 setting.
1674 * POLARITY_GPIO_3: Polarity GPIO3 setting.
1675 * POLARITY_GPIO_4: Polarity GPIO4 setting.
1676 * LED_MODE: Led mode.
1677 */
1678#define EEPROM_LED1 0x001e
1679#define EEPROM_LED2 0x001f
1680#define EEPROM_LED3 0x0020
1681#define EEPROM_LED_POLARITY_RDY_BG FIELD16(0x0001)
1682#define EEPROM_LED_POLARITY_RDY_A FIELD16(0x0002)
1683#define EEPROM_LED_POLARITY_ACT FIELD16(0x0004)
1684#define EEPROM_LED_POLARITY_GPIO_0 FIELD16(0x0008)
1685#define EEPROM_LED_POLARITY_GPIO_1 FIELD16(0x0010)
1686#define EEPROM_LED_POLARITY_GPIO_2 FIELD16(0x0020)
1687#define EEPROM_LED_POLARITY_GPIO_3 FIELD16(0x0040)
1688#define EEPROM_LED_POLARITY_GPIO_4 FIELD16(0x0080)
1689#define EEPROM_LED_LED_MODE FIELD16(0x1f00)
1690
1691/*
1692 * EEPROM LNA
1693 */
1694#define EEPROM_LNA 0x0022
1695#define EEPROM_LNA_BG FIELD16(0x00ff)
1696#define EEPROM_LNA_A0 FIELD16(0xff00)
1697
1698/*
1699 * EEPROM RSSI BG offset
1700 */
1701#define EEPROM_RSSI_BG 0x0023
1702#define EEPROM_RSSI_BG_OFFSET0 FIELD16(0x00ff)
1703#define EEPROM_RSSI_BG_OFFSET1 FIELD16(0xff00)
1704
1705/*
1706 * EEPROM RSSI BG2 offset
1707 */
1708#define EEPROM_RSSI_BG2 0x0024
1709#define EEPROM_RSSI_BG2_OFFSET2 FIELD16(0x00ff)
1710#define EEPROM_RSSI_BG2_LNA_A1 FIELD16(0xff00)
1711
1712/*
1713 * EEPROM RSSI A offset
1714 */
1715#define EEPROM_RSSI_A 0x0025
1716#define EEPROM_RSSI_A_OFFSET0 FIELD16(0x00ff)
1717#define EEPROM_RSSI_A_OFFSET1 FIELD16(0xff00)
1718
1719/*
1720 * EEPROM RSSI A2 offset
1721 */
1722#define EEPROM_RSSI_A2 0x0026
1723#define EEPROM_RSSI_A2_OFFSET2 FIELD16(0x00ff)
1724#define EEPROM_RSSI_A2_LNA_A2 FIELD16(0xff00)
1725
1726/*
1727 * EEPROM TXpower delta: 20MHZ AND 40 MHZ use different power.
1728 * This is delta in 40MHZ.
1729 * VALUE: Tx Power dalta value (MAX=4)
1730 * TYPE: 1: Plus the delta value, 0: minus the delta value
1731 * TXPOWER: Enable:
1732 */
1733#define EEPROM_TXPOWER_DELTA 0x0028
1734#define EEPROM_TXPOWER_DELTA_VALUE FIELD16(0x003f)
1735#define EEPROM_TXPOWER_DELTA_TYPE FIELD16(0x0040)
1736#define EEPROM_TXPOWER_DELTA_TXPOWER FIELD16(0x0080)
1737
1738/*
1739 * EEPROM TXPOWER 802.11BG
1740 */
1741#define EEPROM_TXPOWER_BG1 0x0029
1742#define EEPROM_TXPOWER_BG2 0x0030
1743#define EEPROM_TXPOWER_BG_SIZE 7
1744#define EEPROM_TXPOWER_BG_1 FIELD16(0x00ff)
1745#define EEPROM_TXPOWER_BG_2 FIELD16(0xff00)
1746
1747/*
1748 * EEPROM TXPOWER 802.11A
1749 */
1750#define EEPROM_TXPOWER_A1 0x003c
1751#define EEPROM_TXPOWER_A2 0x0053
1752#define EEPROM_TXPOWER_A_SIZE 6
1753#define EEPROM_TXPOWER_A_1 FIELD16(0x00ff)
1754#define EEPROM_TXPOWER_A_2 FIELD16(0xff00)
1755
1756/*
1757 * EEPROM TXpower byrate: 20MHZ power
1758 */
1759#define EEPROM_TXPOWER_BYRATE 0x006f
1760
1761/*
1762 * EEPROM BBP.
1763 */
1764#define EEPROM_BBP_START 0x0078
1765#define EEPROM_BBP_SIZE 16
1766#define EEPROM_BBP_VALUE FIELD16(0x00ff)
1767#define EEPROM_BBP_REG_ID FIELD16(0xff00)
1768
1769/*
1770 * MCU mailbox commands.
1771 */
1772#define MCU_SLEEP 0x30
1773#define MCU_WAKEUP 0x31
1774#define MCU_RADIO_OFF 0x35
1775#define MCU_CURRENT 0x36
1776#define MCU_LED 0x50
1777#define MCU_LED_STRENGTH 0x51
1778#define MCU_LED_1 0x52
1779#define MCU_LED_2 0x53
1780#define MCU_LED_3 0x54
1781#define MCU_RADAR 0x60
1782#define MCU_BOOT_SIGNAL 0x72
1783#define MCU_BBP_SIGNAL 0x80
1784#define MCU_POWER_SAVE 0x83
1785
1786/*
1787 * MCU mailbox tokens
1788 */
1789#define TOKEN_WAKUP 3
1790
1791/*
1792 * DMA descriptor defines.
1793 */
1794#define TXWI_DESC_SIZE ( 4 * sizeof(__le32) )
1795#define RXWI_DESC_SIZE ( 4 * sizeof(__le32) )
1796
1797/*
1798 * TX WI structure
1799 */
1800
1801/*
1802 * Word0
1803 * FRAG: 1 To inform TKIP engine this is a fragment.
1804 * MIMO_PS: The remote peer is in dynamic MIMO-PS mode
1805 * TX_OP: 0:HT TXOP rule , 1:PIFS TX ,2:Backoff, 3:sifs
1806 * BW: Channel bandwidth 20MHz or 40 MHz
1807 * STBC: 1: STBC support MCS =0-7, 2,3 : RESERVED
1808 */
1809#define TXWI_W0_FRAG FIELD32(0x00000001)
1810#define TXWI_W0_MIMO_PS FIELD32(0x00000002)
1811#define TXWI_W0_CF_ACK FIELD32(0x00000004)
1812#define TXWI_W0_TS FIELD32(0x00000008)
1813#define TXWI_W0_AMPDU FIELD32(0x00000010)
1814#define TXWI_W0_MPDU_DENSITY FIELD32(0x000000e0)
1815#define TXWI_W0_TX_OP FIELD32(0x00000300)
1816#define TXWI_W0_MCS FIELD32(0x007f0000)
1817#define TXWI_W0_BW FIELD32(0x00800000)
1818#define TXWI_W0_SHORT_GI FIELD32(0x01000000)
1819#define TXWI_W0_STBC FIELD32(0x06000000)
1820#define TXWI_W0_IFS FIELD32(0x08000000)
1821#define TXWI_W0_PHYMODE FIELD32(0xc0000000)
1822
1823/*
1824 * Word1
1825 */
1826#define TXWI_W1_ACK FIELD32(0x00000001)
1827#define TXWI_W1_NSEQ FIELD32(0x00000002)
1828#define TXWI_W1_BW_WIN_SIZE FIELD32(0x000000fc)
1829#define TXWI_W1_WIRELESS_CLI_ID FIELD32(0x0000ff00)
1830#define TXWI_W1_MPDU_TOTAL_BYTE_COUNT FIELD32(0x0fff0000)
1831#define TXWI_W1_PACKETID FIELD32(0xf0000000)
1832
1833/*
1834 * Word2
1835 */
1836#define TXWI_W2_IV FIELD32(0xffffffff)
1837
1838/*
1839 * Word3
1840 */
1841#define TXWI_W3_EIV FIELD32(0xffffffff)
1842
1843/*
1844 * RX WI structure
1845 */
1846
1847/*
1848 * Word0
1849 */
1850#define RXWI_W0_WIRELESS_CLI_ID FIELD32(0x000000ff)
1851#define RXWI_W0_KEY_INDEX FIELD32(0x00000300)
1852#define RXWI_W0_BSSID FIELD32(0x00001c00)
1853#define RXWI_W0_UDF FIELD32(0x0000e000)
1854#define RXWI_W0_MPDU_TOTAL_BYTE_COUNT FIELD32(0x0fff0000)
1855#define RXWI_W0_TID FIELD32(0xf0000000)
1856
1857/*
1858 * Word1
1859 */
1860#define RXWI_W1_FRAG FIELD32(0x0000000f)
1861#define RXWI_W1_SEQUENCE FIELD32(0x0000fff0)
1862#define RXWI_W1_MCS FIELD32(0x007f0000)
1863#define RXWI_W1_BW FIELD32(0x00800000)
1864#define RXWI_W1_SHORT_GI FIELD32(0x01000000)
1865#define RXWI_W1_STBC FIELD32(0x06000000)
1866#define RXWI_W1_PHYMODE FIELD32(0xc0000000)
1867
1868/*
1869 * Word2
1870 */
1871#define RXWI_W2_RSSI0 FIELD32(0x000000ff)
1872#define RXWI_W2_RSSI1 FIELD32(0x0000ff00)
1873#define RXWI_W2_RSSI2 FIELD32(0x00ff0000)
1874
1875/*
1876 * Word3
1877 */
1878#define RXWI_W3_SNR0 FIELD32(0x000000ff)
1879#define RXWI_W3_SNR1 FIELD32(0x0000ff00)
1880
1881/*
1882 * Macros for converting txpower from EEPROM to mac80211 value
1883 * and from mac80211 value to register value.
1884 */
1885#define MIN_G_TXPOWER 0
1886#define MIN_A_TXPOWER -7
1887#define MAX_G_TXPOWER 31
1888#define MAX_A_TXPOWER 15
1889#define DEFAULT_TXPOWER 5
1890
1891#define TXPOWER_G_FROM_DEV(__txpower) \
1892 ((__txpower) > MAX_G_TXPOWER) ? DEFAULT_TXPOWER : (__txpower)
1893
1894#define TXPOWER_G_TO_DEV(__txpower) \
1895 clamp_t(char, __txpower, MIN_G_TXPOWER, MAX_G_TXPOWER)
1896
1897#define TXPOWER_A_FROM_DEV(__txpower) \
1898 ((__txpower) > MAX_A_TXPOWER) ? DEFAULT_TXPOWER : (__txpower)
1899
1900#define TXPOWER_A_TO_DEV(__txpower) \
1901 clamp_t(char, __txpower, MIN_A_TXPOWER, MAX_A_TXPOWER)
1902
1903#endif /* RT2800_H */