xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/ti/wl1251/reg.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * This file is part of wl12xx
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (c) 1998-2007 Texas Instruments Incorporated
6*4882a593Smuzhiyun  * Copyright (C) 2008 Nokia Corporation
7*4882a593Smuzhiyun  */
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #ifndef __REG_H__
10*4882a593Smuzhiyun #define __REG_H__
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #include <linux/bitops.h>
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun #define REGISTERS_BASE 0x00300000
15*4882a593Smuzhiyun #define DRPW_BASE      0x00310000
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #define REGISTERS_DOWN_SIZE 0x00008800
18*4882a593Smuzhiyun #define REGISTERS_WORK_SIZE 0x0000b000
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #define HW_ACCESS_ELP_CTRL_REG_ADDR         0x1FFFC
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun /* ELP register commands */
23*4882a593Smuzhiyun #define ELPCTRL_WAKE_UP             0x1
24*4882a593Smuzhiyun #define ELPCTRL_WAKE_UP_WLAN_READY  0x5
25*4882a593Smuzhiyun #define ELPCTRL_SLEEP               0x0
26*4882a593Smuzhiyun /* ELP WLAN_READY bit */
27*4882a593Smuzhiyun #define ELPCTRL_WLAN_READY          0x2
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun /* Device Configuration registers*/
30*4882a593Smuzhiyun #define SOR_CFG                        (REGISTERS_BASE + 0x0800)
31*4882a593Smuzhiyun #define ECPU_CTRL                      (REGISTERS_BASE + 0x0804)
32*4882a593Smuzhiyun #define HI_CFG                         (REGISTERS_BASE + 0x0808)
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun /* EEPROM registers */
35*4882a593Smuzhiyun #define EE_START                       (REGISTERS_BASE + 0x080C)
36*4882a593Smuzhiyun #define EE_CTL                         (REGISTERS_BASE + 0x2000)
37*4882a593Smuzhiyun #define EE_DATA                        (REGISTERS_BASE + 0x2004)
38*4882a593Smuzhiyun #define EE_ADDR                        (REGISTERS_BASE + 0x2008)
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun #define EE_CTL_READ                   2
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun #define CHIP_ID_B                      (REGISTERS_BASE + 0x5674)
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun #define CHIP_ID_1251_PG10	           (0x7010101)
45*4882a593Smuzhiyun #define CHIP_ID_1251_PG11	           (0x7020101)
46*4882a593Smuzhiyun #define CHIP_ID_1251_PG12	           (0x7030101)
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun #define ENABLE                         (REGISTERS_BASE + 0x5450)
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun /* Power Management registers */
51*4882a593Smuzhiyun #define ELP_CFG_MODE                   (REGISTERS_BASE + 0x5804)
52*4882a593Smuzhiyun #define ELP_CMD                        (REGISTERS_BASE + 0x5808)
53*4882a593Smuzhiyun #define PLL_CAL_TIME                   (REGISTERS_BASE + 0x5810)
54*4882a593Smuzhiyun #define CLK_REQ_TIME                   (REGISTERS_BASE + 0x5814)
55*4882a593Smuzhiyun #define CLK_BUF_TIME                   (REGISTERS_BASE + 0x5818)
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun #define CFG_PLL_SYNC_CNT               (REGISTERS_BASE + 0x5820)
58*4882a593Smuzhiyun 
59*4882a593Smuzhiyun /* Scratch Pad registers*/
60*4882a593Smuzhiyun #define SCR_PAD0                       (REGISTERS_BASE + 0x5608)
61*4882a593Smuzhiyun #define SCR_PAD1                       (REGISTERS_BASE + 0x560C)
62*4882a593Smuzhiyun #define SCR_PAD2                       (REGISTERS_BASE + 0x5610)
63*4882a593Smuzhiyun #define SCR_PAD3                       (REGISTERS_BASE + 0x5614)
64*4882a593Smuzhiyun #define SCR_PAD4                       (REGISTERS_BASE + 0x5618)
65*4882a593Smuzhiyun #define SCR_PAD4_SET                   (REGISTERS_BASE + 0x561C)
66*4882a593Smuzhiyun #define SCR_PAD4_CLR                   (REGISTERS_BASE + 0x5620)
67*4882a593Smuzhiyun #define SCR_PAD5                       (REGISTERS_BASE + 0x5624)
68*4882a593Smuzhiyun #define SCR_PAD5_SET                   (REGISTERS_BASE + 0x5628)
69*4882a593Smuzhiyun #define SCR_PAD5_CLR                   (REGISTERS_BASE + 0x562C)
70*4882a593Smuzhiyun #define SCR_PAD6                       (REGISTERS_BASE + 0x5630)
71*4882a593Smuzhiyun #define SCR_PAD7                       (REGISTERS_BASE + 0x5634)
72*4882a593Smuzhiyun #define SCR_PAD8                       (REGISTERS_BASE + 0x5638)
73*4882a593Smuzhiyun #define SCR_PAD9                       (REGISTERS_BASE + 0x563C)
74*4882a593Smuzhiyun 
75*4882a593Smuzhiyun /* Spare registers*/
76*4882a593Smuzhiyun #define SPARE_A1                       (REGISTERS_BASE + 0x0994)
77*4882a593Smuzhiyun #define SPARE_A2                       (REGISTERS_BASE + 0x0998)
78*4882a593Smuzhiyun #define SPARE_A3                       (REGISTERS_BASE + 0x099C)
79*4882a593Smuzhiyun #define SPARE_A4                       (REGISTERS_BASE + 0x09A0)
80*4882a593Smuzhiyun #define SPARE_A5                       (REGISTERS_BASE + 0x09A4)
81*4882a593Smuzhiyun #define SPARE_A6                       (REGISTERS_BASE + 0x09A8)
82*4882a593Smuzhiyun #define SPARE_A7                       (REGISTERS_BASE + 0x09AC)
83*4882a593Smuzhiyun #define SPARE_A8                       (REGISTERS_BASE + 0x09B0)
84*4882a593Smuzhiyun #define SPARE_B1                       (REGISTERS_BASE + 0x5420)
85*4882a593Smuzhiyun #define SPARE_B2                       (REGISTERS_BASE + 0x5424)
86*4882a593Smuzhiyun #define SPARE_B3                       (REGISTERS_BASE + 0x5428)
87*4882a593Smuzhiyun #define SPARE_B4                       (REGISTERS_BASE + 0x542C)
88*4882a593Smuzhiyun #define SPARE_B5                       (REGISTERS_BASE + 0x5430)
89*4882a593Smuzhiyun #define SPARE_B6                       (REGISTERS_BASE + 0x5434)
90*4882a593Smuzhiyun #define SPARE_B7                       (REGISTERS_BASE + 0x5438)
91*4882a593Smuzhiyun #define SPARE_B8                       (REGISTERS_BASE + 0x543C)
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun enum wl12xx_acx_int_reg {
94*4882a593Smuzhiyun 	ACX_REG_INTERRUPT_TRIG,
95*4882a593Smuzhiyun 	ACX_REG_INTERRUPT_TRIG_H,
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun /*=============================================
98*4882a593Smuzhiyun   Host Interrupt Mask Register - 32bit (RW)
99*4882a593Smuzhiyun   ------------------------------------------
100*4882a593Smuzhiyun   Setting a bit in this register masks the
101*4882a593Smuzhiyun   corresponding interrupt to the host.
102*4882a593Smuzhiyun   0 - RX0		- Rx first dubble buffer Data Interrupt
103*4882a593Smuzhiyun   1 - TXD		- Tx Data Interrupt
104*4882a593Smuzhiyun   2 - TXXFR		- Tx Transfer Interrupt
105*4882a593Smuzhiyun   3 - RX1		- Rx second dubble buffer Data Interrupt
106*4882a593Smuzhiyun   4 - RXXFR		- Rx Transfer Interrupt
107*4882a593Smuzhiyun   5 - EVENT_A	- Event Mailbox interrupt
108*4882a593Smuzhiyun   6 - EVENT_B	- Event Mailbox interrupt
109*4882a593Smuzhiyun   7 - WNONHST	- Wake On Host Interrupt
110*4882a593Smuzhiyun   8 - TRACE_A	- Debug Trace interrupt
111*4882a593Smuzhiyun   9 - TRACE_B	- Debug Trace interrupt
112*4882a593Smuzhiyun  10 - CDCMP		- Command Complete Interrupt
113*4882a593Smuzhiyun  11 -
114*4882a593Smuzhiyun  12 -
115*4882a593Smuzhiyun  13 -
116*4882a593Smuzhiyun  14 - ICOMP		- Initialization Complete Interrupt
117*4882a593Smuzhiyun  16 - SG SE		- Soft Gemini - Sense enable interrupt
118*4882a593Smuzhiyun  17 - SG SD		- Soft Gemini - Sense disable interrupt
119*4882a593Smuzhiyun  18 -			-
120*4882a593Smuzhiyun  19 -			-
121*4882a593Smuzhiyun  20 -			-
122*4882a593Smuzhiyun  21-			-
123*4882a593Smuzhiyun  Default: 0x0001
124*4882a593Smuzhiyun *==============================================*/
125*4882a593Smuzhiyun 	ACX_REG_INTERRUPT_MASK,
126*4882a593Smuzhiyun 
127*4882a593Smuzhiyun /*=============================================
128*4882a593Smuzhiyun   Host Interrupt Mask Set 16bit, (Write only)
129*4882a593Smuzhiyun   ------------------------------------------
130*4882a593Smuzhiyun  Setting a bit in this register sets
131*4882a593Smuzhiyun  the corresponding bin in ACX_HINT_MASK register
132*4882a593Smuzhiyun  without effecting the mask
133*4882a593Smuzhiyun  state of other bits (0 = no effect).
134*4882a593Smuzhiyun ==============================================*/
135*4882a593Smuzhiyun 	ACX_REG_HINT_MASK_SET,
136*4882a593Smuzhiyun 
137*4882a593Smuzhiyun /*=============================================
138*4882a593Smuzhiyun   Host Interrupt Mask Clear 16bit,(Write only)
139*4882a593Smuzhiyun   ------------------------------------------
140*4882a593Smuzhiyun  Setting a bit in this register clears
141*4882a593Smuzhiyun  the corresponding bin in ACX_HINT_MASK register
142*4882a593Smuzhiyun  without effecting the mask
143*4882a593Smuzhiyun  state of other bits (0 = no effect).
144*4882a593Smuzhiyun =============================================*/
145*4882a593Smuzhiyun 	ACX_REG_HINT_MASK_CLR,
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun /*=============================================
148*4882a593Smuzhiyun   Host Interrupt Status Nondestructive Read
149*4882a593Smuzhiyun   16bit,(Read only)
150*4882a593Smuzhiyun   ------------------------------------------
151*4882a593Smuzhiyun  The host can read this register to determine
152*4882a593Smuzhiyun  which interrupts are active.
153*4882a593Smuzhiyun  Reading this register doesn't
154*4882a593Smuzhiyun  effect its content.
155*4882a593Smuzhiyun =============================================*/
156*4882a593Smuzhiyun 	ACX_REG_INTERRUPT_NO_CLEAR,
157*4882a593Smuzhiyun 
158*4882a593Smuzhiyun /*=============================================
159*4882a593Smuzhiyun   Host Interrupt Status Clear on Read  Register
160*4882a593Smuzhiyun   16bit,(Read only)
161*4882a593Smuzhiyun   ------------------------------------------
162*4882a593Smuzhiyun  The host can read this register to determine
163*4882a593Smuzhiyun  which interrupts are active.
164*4882a593Smuzhiyun  Reading this register clears it,
165*4882a593Smuzhiyun  thus making all interrupts inactive.
166*4882a593Smuzhiyun ==============================================*/
167*4882a593Smuzhiyun 	ACX_REG_INTERRUPT_CLEAR,
168*4882a593Smuzhiyun 
169*4882a593Smuzhiyun /*=============================================
170*4882a593Smuzhiyun   Host Interrupt Acknowledge Register
171*4882a593Smuzhiyun   16bit,(Write only)
172*4882a593Smuzhiyun   ------------------------------------------
173*4882a593Smuzhiyun  The host can set individual bits in this
174*4882a593Smuzhiyun  register to clear (acknowledge) the corresp.
175*4882a593Smuzhiyun  interrupt status bits in the HINT_STS_CLR and
176*4882a593Smuzhiyun  HINT_STS_ND registers, thus making the
177*4882a593Smuzhiyun  assotiated interrupt inactive. (0-no effect)
178*4882a593Smuzhiyun ==============================================*/
179*4882a593Smuzhiyun 	ACX_REG_INTERRUPT_ACK,
180*4882a593Smuzhiyun 
181*4882a593Smuzhiyun /*===============================================
182*4882a593Smuzhiyun    Host Software Reset - 32bit RW
183*4882a593Smuzhiyun  ------------------------------------------
184*4882a593Smuzhiyun     [31:1] Reserved
185*4882a593Smuzhiyun     0  SOFT_RESET Soft Reset  - When this bit is set,
186*4882a593Smuzhiyun     it holds the Wlan hardware in a soft reset state.
187*4882a593Smuzhiyun     This reset disables all MAC and baseband processor
188*4882a593Smuzhiyun     clocks except the CardBus/PCI interface clock.
189*4882a593Smuzhiyun     It also initializes all MAC state machines except
190*4882a593Smuzhiyun     the host interface. It does not reload the
191*4882a593Smuzhiyun     contents of the EEPROM. When this bit is cleared
192*4882a593Smuzhiyun     (not self-clearing), the Wlan hardware
193*4882a593Smuzhiyun     exits the software reset state.
194*4882a593Smuzhiyun ===============================================*/
195*4882a593Smuzhiyun 	ACX_REG_SLV_SOFT_RESET,
196*4882a593Smuzhiyun 
197*4882a593Smuzhiyun /*===============================================
198*4882a593Smuzhiyun  EEPROM Burst Read Start  - 32bit RW
199*4882a593Smuzhiyun  ------------------------------------------
200*4882a593Smuzhiyun  [31:1] Reserved
201*4882a593Smuzhiyun  0  ACX_EE_START -  EEPROM Burst Read Start 0
202*4882a593Smuzhiyun  Setting this bit starts a burst read from
203*4882a593Smuzhiyun  the external EEPROM.
204*4882a593Smuzhiyun  If this bit is set (after reset) before an EEPROM read/write,
205*4882a593Smuzhiyun  the burst read starts at EEPROM address 0.
206*4882a593Smuzhiyun  Otherwise, it starts at the address
207*4882a593Smuzhiyun  following the address of the previous access.
208*4882a593Smuzhiyun  TheWlan hardware hardware clears this bit automatically.
209*4882a593Smuzhiyun 
210*4882a593Smuzhiyun  Default: 0x00000000
211*4882a593Smuzhiyun *================================================*/
212*4882a593Smuzhiyun 	ACX_REG_EE_START,
213*4882a593Smuzhiyun 
214*4882a593Smuzhiyun /* Embedded ARM CPU Control */
215*4882a593Smuzhiyun 
216*4882a593Smuzhiyun /*===============================================
217*4882a593Smuzhiyun  Halt eCPU   - 32bit RW
218*4882a593Smuzhiyun  ------------------------------------------
219*4882a593Smuzhiyun  0 HALT_ECPU Halt Embedded CPU - This bit is the
220*4882a593Smuzhiyun  complement of bit 1 (MDATA2) in the SOR_CFG register.
221*4882a593Smuzhiyun  During a hardware reset, this bit holds
222*4882a593Smuzhiyun  the inverse of MDATA2.
223*4882a593Smuzhiyun  When downloading firmware from the host,
224*4882a593Smuzhiyun  set this bit (pull down MDATA2).
225*4882a593Smuzhiyun  The host clears this bit after downloading the firmware into
226*4882a593Smuzhiyun  zero-wait-state SSRAM.
227*4882a593Smuzhiyun  When loading firmware from Flash, clear this bit (pull up MDATA2)
228*4882a593Smuzhiyun  so that the eCPU can run the bootloader code in Flash
229*4882a593Smuzhiyun  HALT_ECPU eCPU State
230*4882a593Smuzhiyun  --------------------
231*4882a593Smuzhiyun  1 halt eCPU
232*4882a593Smuzhiyun  0 enable eCPU
233*4882a593Smuzhiyun  ===============================================*/
234*4882a593Smuzhiyun 	ACX_REG_ECPU_CONTROL,
235*4882a593Smuzhiyun 
236*4882a593Smuzhiyun 	ACX_REG_TABLE_LEN
237*4882a593Smuzhiyun };
238*4882a593Smuzhiyun 
239*4882a593Smuzhiyun #define ACX_SLV_SOFT_RESET_BIT   BIT(0)
240*4882a593Smuzhiyun #define ACX_REG_EEPROM_START_BIT BIT(0)
241*4882a593Smuzhiyun 
242*4882a593Smuzhiyun /* Command/Information Mailbox Pointers */
243*4882a593Smuzhiyun 
244*4882a593Smuzhiyun /*===============================================
245*4882a593Smuzhiyun   Command Mailbox Pointer - 32bit RW
246*4882a593Smuzhiyun  ------------------------------------------
247*4882a593Smuzhiyun  This register holds the start address of
248*4882a593Smuzhiyun  the command mailbox located in the Wlan hardware memory.
249*4882a593Smuzhiyun  The host must read this pointer after a reset to
250*4882a593Smuzhiyun  find the location of the command mailbox.
251*4882a593Smuzhiyun  The Wlan hardware initializes the command mailbox
252*4882a593Smuzhiyun  pointer with the default address of the command mailbox.
253*4882a593Smuzhiyun  The command mailbox pointer is not valid until after
254*4882a593Smuzhiyun  the host receives the Init Complete interrupt from
255*4882a593Smuzhiyun  the Wlan hardware.
256*4882a593Smuzhiyun  ===============================================*/
257*4882a593Smuzhiyun #define REG_COMMAND_MAILBOX_PTR				(SCR_PAD0)
258*4882a593Smuzhiyun 
259*4882a593Smuzhiyun /*===============================================
260*4882a593Smuzhiyun   Information Mailbox Pointer - 32bit RW
261*4882a593Smuzhiyun  ------------------------------------------
262*4882a593Smuzhiyun  This register holds the start address of
263*4882a593Smuzhiyun  the information mailbox located in the Wlan hardware memory.
264*4882a593Smuzhiyun  The host must read this pointer after a reset to find
265*4882a593Smuzhiyun  the location of the information mailbox.
266*4882a593Smuzhiyun  The Wlan hardware initializes the information mailbox pointer
267*4882a593Smuzhiyun  with the default address of the information mailbox.
268*4882a593Smuzhiyun  The information mailbox pointer is not valid
269*4882a593Smuzhiyun  until after the host receives the Init Complete interrupt from
270*4882a593Smuzhiyun  the Wlan hardware.
271*4882a593Smuzhiyun  ===============================================*/
272*4882a593Smuzhiyun #define REG_EVENT_MAILBOX_PTR				(SCR_PAD1)
273*4882a593Smuzhiyun 
274*4882a593Smuzhiyun 
275*4882a593Smuzhiyun /* Misc */
276*4882a593Smuzhiyun 
277*4882a593Smuzhiyun #define REG_ENABLE_TX_RX				(ENABLE)
278*4882a593Smuzhiyun /*
279*4882a593Smuzhiyun  * Rx configuration (filter) information element
280*4882a593Smuzhiyun  * ---------------------------------------------
281*4882a593Smuzhiyun  */
282*4882a593Smuzhiyun #define REG_RX_CONFIG				(RX_CFG)
283*4882a593Smuzhiyun #define REG_RX_FILTER				(RX_FILTER_CFG)
284*4882a593Smuzhiyun 
285*4882a593Smuzhiyun 
286*4882a593Smuzhiyun #define RX_CFG_ENABLE_PHY_HEADER_PLCP	 0x0002
287*4882a593Smuzhiyun 
288*4882a593Smuzhiyun /* promiscuous - receives all valid frames */
289*4882a593Smuzhiyun #define RX_CFG_PROMISCUOUS		 0x0008
290*4882a593Smuzhiyun 
291*4882a593Smuzhiyun /* receives frames from any BSSID */
292*4882a593Smuzhiyun #define RX_CFG_BSSID			 0x0020
293*4882a593Smuzhiyun 
294*4882a593Smuzhiyun /* receives frames destined to any MAC address */
295*4882a593Smuzhiyun #define RX_CFG_MAC			 0x0010
296*4882a593Smuzhiyun 
297*4882a593Smuzhiyun #define RX_CFG_ENABLE_ONLY_MY_DEST_MAC	 0x0010
298*4882a593Smuzhiyun #define RX_CFG_ENABLE_ANY_DEST_MAC	 0x0000
299*4882a593Smuzhiyun #define RX_CFG_ENABLE_ONLY_MY_BSSID	 0x0020
300*4882a593Smuzhiyun #define RX_CFG_ENABLE_ANY_BSSID		 0x0000
301*4882a593Smuzhiyun 
302*4882a593Smuzhiyun /* discards all broadcast frames */
303*4882a593Smuzhiyun #define RX_CFG_DISABLE_BCAST		 0x0200
304*4882a593Smuzhiyun 
305*4882a593Smuzhiyun #define RX_CFG_ENABLE_ONLY_MY_SSID	 0x0400
306*4882a593Smuzhiyun #define RX_CFG_ENABLE_RX_CMPLT_FCS_ERROR 0x0800
307*4882a593Smuzhiyun #define RX_CFG_COPY_RX_STATUS		 0x2000
308*4882a593Smuzhiyun #define RX_CFG_TSF			 0x10000
309*4882a593Smuzhiyun 
310*4882a593Smuzhiyun #define RX_CONFIG_OPTION_ANY_DST_MY_BSS	 (RX_CFG_ENABLE_ANY_DEST_MAC | \
311*4882a593Smuzhiyun 					  RX_CFG_ENABLE_ONLY_MY_BSSID)
312*4882a593Smuzhiyun 
313*4882a593Smuzhiyun #define RX_CONFIG_OPTION_MY_DST_ANY_BSS	 (RX_CFG_ENABLE_ONLY_MY_DEST_MAC\
314*4882a593Smuzhiyun 					  | RX_CFG_ENABLE_ANY_BSSID)
315*4882a593Smuzhiyun 
316*4882a593Smuzhiyun #define RX_CONFIG_OPTION_ANY_DST_ANY_BSS (RX_CFG_ENABLE_ANY_DEST_MAC | \
317*4882a593Smuzhiyun 					  RX_CFG_ENABLE_ANY_BSSID)
318*4882a593Smuzhiyun 
319*4882a593Smuzhiyun #define RX_CONFIG_OPTION_MY_DST_MY_BSS	 (RX_CFG_ENABLE_ONLY_MY_DEST_MAC\
320*4882a593Smuzhiyun 					  | RX_CFG_ENABLE_ONLY_MY_BSSID)
321*4882a593Smuzhiyun 
322*4882a593Smuzhiyun #define RX_CONFIG_OPTION_FOR_SCAN  (RX_CFG_ENABLE_PHY_HEADER_PLCP \
323*4882a593Smuzhiyun 				    | RX_CFG_ENABLE_RX_CMPLT_FCS_ERROR \
324*4882a593Smuzhiyun 				    | RX_CFG_COPY_RX_STATUS | RX_CFG_TSF)
325*4882a593Smuzhiyun 
326*4882a593Smuzhiyun #define RX_CONFIG_OPTION_FOR_MEASUREMENT (RX_CFG_ENABLE_ANY_DEST_MAC)
327*4882a593Smuzhiyun 
328*4882a593Smuzhiyun #define RX_CONFIG_OPTION_FOR_JOIN	 (RX_CFG_ENABLE_ONLY_MY_BSSID | \
329*4882a593Smuzhiyun 					  RX_CFG_ENABLE_ONLY_MY_DEST_MAC)
330*4882a593Smuzhiyun 
331*4882a593Smuzhiyun #define RX_CONFIG_OPTION_FOR_IBSS_JOIN   (RX_CFG_ENABLE_ONLY_MY_SSID | \
332*4882a593Smuzhiyun 					  RX_CFG_ENABLE_ONLY_MY_DEST_MAC)
333*4882a593Smuzhiyun 
334*4882a593Smuzhiyun #define RX_FILTER_OPTION_DEF	      (CFG_RX_MGMT_EN | CFG_RX_DATA_EN\
335*4882a593Smuzhiyun 				       | CFG_RX_CTL_EN | CFG_RX_BCN_EN\
336*4882a593Smuzhiyun 				       | CFG_RX_AUTH_EN | CFG_RX_ASSOC_EN)
337*4882a593Smuzhiyun 
338*4882a593Smuzhiyun #define RX_FILTER_OPTION_FILTER_ALL	 0
339*4882a593Smuzhiyun 
340*4882a593Smuzhiyun #define RX_FILTER_OPTION_DEF_PRSP_BCN  (CFG_RX_PRSP_EN | CFG_RX_MGMT_EN\
341*4882a593Smuzhiyun 					| CFG_RX_RCTS_ACK | CFG_RX_BCN_EN)
342*4882a593Smuzhiyun 
343*4882a593Smuzhiyun #define RX_FILTER_OPTION_JOIN	     (CFG_RX_MGMT_EN | CFG_RX_DATA_EN\
344*4882a593Smuzhiyun 				      | CFG_RX_BCN_EN | CFG_RX_AUTH_EN\
345*4882a593Smuzhiyun 				      | CFG_RX_ASSOC_EN | CFG_RX_RCTS_ACK\
346*4882a593Smuzhiyun 				      | CFG_RX_PRSP_EN)
347*4882a593Smuzhiyun 
348*4882a593Smuzhiyun 
349*4882a593Smuzhiyun /*===============================================
350*4882a593Smuzhiyun  EEPROM Read/Write Request 32bit RW
351*4882a593Smuzhiyun  ------------------------------------------
352*4882a593Smuzhiyun  1 EE_READ - EEPROM Read Request 1 - Setting this bit
353*4882a593Smuzhiyun  loads a single byte of data into the EE_DATA
354*4882a593Smuzhiyun  register from the EEPROM location specified in
355*4882a593Smuzhiyun  the EE_ADDR register.
356*4882a593Smuzhiyun  The Wlan hardware hardware clears this bit automatically.
357*4882a593Smuzhiyun  EE_DATA is valid when this bit is cleared.
358*4882a593Smuzhiyun 
359*4882a593Smuzhiyun  0 EE_WRITE  - EEPROM Write Request  - Setting this bit
360*4882a593Smuzhiyun  writes a single byte of data from the EE_DATA register into the
361*4882a593Smuzhiyun  EEPROM location specified in the EE_ADDR register.
362*4882a593Smuzhiyun  The Wlan hardware hardware clears this bit automatically.
363*4882a593Smuzhiyun *===============================================*/
364*4882a593Smuzhiyun #define EE_CTL                              (REGISTERS_BASE + 0x2000)
365*4882a593Smuzhiyun #define ACX_EE_CTL_REG                      EE_CTL
366*4882a593Smuzhiyun #define EE_WRITE                            0x00000001ul
367*4882a593Smuzhiyun #define EE_READ                             0x00000002ul
368*4882a593Smuzhiyun 
369*4882a593Smuzhiyun /*===============================================
370*4882a593Smuzhiyun   EEPROM Address  - 32bit RW
371*4882a593Smuzhiyun   ------------------------------------------
372*4882a593Smuzhiyun   This register specifies the address
373*4882a593Smuzhiyun   within the EEPROM from/to which to read/write data.
374*4882a593Smuzhiyun   ===============================================*/
375*4882a593Smuzhiyun #define EE_ADDR                             (REGISTERS_BASE + 0x2008)
376*4882a593Smuzhiyun #define ACX_EE_ADDR_REG                     EE_ADDR
377*4882a593Smuzhiyun 
378*4882a593Smuzhiyun /*===============================================
379*4882a593Smuzhiyun   EEPROM Data  - 32bit RW
380*4882a593Smuzhiyun   ------------------------------------------
381*4882a593Smuzhiyun   This register either holds the read 8 bits of
382*4882a593Smuzhiyun   data from the EEPROM or the write data
383*4882a593Smuzhiyun   to be written to the EEPROM.
384*4882a593Smuzhiyun   ===============================================*/
385*4882a593Smuzhiyun #define EE_DATA                             (REGISTERS_BASE + 0x2004)
386*4882a593Smuzhiyun #define ACX_EE_DATA_REG                     EE_DATA
387*4882a593Smuzhiyun 
388*4882a593Smuzhiyun #define EEPROM_ACCESS_TO                    10000   /* timeout counter */
389*4882a593Smuzhiyun #define START_EEPROM_MGR                    0x00000001
390*4882a593Smuzhiyun 
391*4882a593Smuzhiyun /*===============================================
392*4882a593Smuzhiyun   EEPROM Base Address  - 32bit RW
393*4882a593Smuzhiyun   ------------------------------------------
394*4882a593Smuzhiyun   This register holds the upper nine bits
395*4882a593Smuzhiyun   [23:15] of the 24-bit Wlan hardware memory
396*4882a593Smuzhiyun   address for burst reads from EEPROM accesses.
397*4882a593Smuzhiyun   The EEPROM provides the lower 15 bits of this address.
398*4882a593Smuzhiyun   The MSB of the address from the EEPROM is ignored.
399*4882a593Smuzhiyun   ===============================================*/
400*4882a593Smuzhiyun #define ACX_EE_CFG                          EE_CFG
401*4882a593Smuzhiyun 
402*4882a593Smuzhiyun /*===============================================
403*4882a593Smuzhiyun   GPIO Output Values  -32bit, RW
404*4882a593Smuzhiyun   ------------------------------------------
405*4882a593Smuzhiyun   [31:16]  Reserved
406*4882a593Smuzhiyun   [15: 0]  Specify the output values (at the output driver inputs) for
407*4882a593Smuzhiyun   GPIO[15:0], respectively.
408*4882a593Smuzhiyun   ===============================================*/
409*4882a593Smuzhiyun #define ACX_GPIO_OUT_REG            GPIO_OUT
410*4882a593Smuzhiyun #define ACX_MAX_GPIO_LINES          15
411*4882a593Smuzhiyun 
412*4882a593Smuzhiyun /*===============================================
413*4882a593Smuzhiyun   Contention window  -32bit, RW
414*4882a593Smuzhiyun   ------------------------------------------
415*4882a593Smuzhiyun   [31:26]  Reserved
416*4882a593Smuzhiyun   [25:16]  Max (0x3ff)
417*4882a593Smuzhiyun   [15:07]  Reserved
418*4882a593Smuzhiyun   [06:00]  Current contention window value - default is 0x1F
419*4882a593Smuzhiyun   ===============================================*/
420*4882a593Smuzhiyun #define ACX_CONT_WIND_CFG_REG    CONT_WIND_CFG
421*4882a593Smuzhiyun #define ACX_CONT_WIND_MIN_MASK   0x0000007f
422*4882a593Smuzhiyun #define ACX_CONT_WIND_MAX        0x03ff0000
423*4882a593Smuzhiyun 
424*4882a593Smuzhiyun /*===============================================
425*4882a593Smuzhiyun   HI_CFG Interface Configuration Register Values
426*4882a593Smuzhiyun   ------------------------------------------
427*4882a593Smuzhiyun   ===============================================*/
428*4882a593Smuzhiyun #define HI_CFG_UART_ENABLE          0x00000004
429*4882a593Smuzhiyun #define HI_CFG_RST232_ENABLE        0x00000008
430*4882a593Smuzhiyun #define HI_CFG_CLOCK_REQ_SELECT     0x00000010
431*4882a593Smuzhiyun #define HI_CFG_HOST_INT_ENABLE      0x00000020
432*4882a593Smuzhiyun #define HI_CFG_VLYNQ_OUTPUT_ENABLE  0x00000040
433*4882a593Smuzhiyun #define HI_CFG_HOST_INT_ACTIVE_LOW  0x00000080
434*4882a593Smuzhiyun #define HI_CFG_UART_TX_OUT_GPIO_15  0x00000100
435*4882a593Smuzhiyun #define HI_CFG_UART_TX_OUT_GPIO_14  0x00000200
436*4882a593Smuzhiyun #define HI_CFG_UART_TX_OUT_GPIO_7   0x00000400
437*4882a593Smuzhiyun 
438*4882a593Smuzhiyun /*
439*4882a593Smuzhiyun  * NOTE: USE_ACTIVE_HIGH compilation flag should be defined in makefile
440*4882a593Smuzhiyun  *       for platforms using active high interrupt level
441*4882a593Smuzhiyun  */
442*4882a593Smuzhiyun #ifdef USE_ACTIVE_HIGH
443*4882a593Smuzhiyun #define HI_CFG_DEF_VAL              \
444*4882a593Smuzhiyun 	(HI_CFG_UART_ENABLE |        \
445*4882a593Smuzhiyun 	HI_CFG_RST232_ENABLE |      \
446*4882a593Smuzhiyun 	HI_CFG_CLOCK_REQ_SELECT |   \
447*4882a593Smuzhiyun 	HI_CFG_HOST_INT_ENABLE)
448*4882a593Smuzhiyun #else
449*4882a593Smuzhiyun #define HI_CFG_DEF_VAL              \
450*4882a593Smuzhiyun 	(HI_CFG_UART_ENABLE |        \
451*4882a593Smuzhiyun 	HI_CFG_RST232_ENABLE |      \
452*4882a593Smuzhiyun 	HI_CFG_CLOCK_REQ_SELECT |   \
453*4882a593Smuzhiyun 	HI_CFG_HOST_INT_ENABLE)
454*4882a593Smuzhiyun 
455*4882a593Smuzhiyun #endif
456*4882a593Smuzhiyun 
457*4882a593Smuzhiyun #define REF_FREQ_19_2                       0
458*4882a593Smuzhiyun #define REF_FREQ_26_0                       1
459*4882a593Smuzhiyun #define REF_FREQ_38_4                       2
460*4882a593Smuzhiyun #define REF_FREQ_40_0                       3
461*4882a593Smuzhiyun #define REF_FREQ_33_6                       4
462*4882a593Smuzhiyun #define REF_FREQ_NUM                        5
463*4882a593Smuzhiyun 
464*4882a593Smuzhiyun #define LUT_PARAM_INTEGER_DIVIDER           0
465*4882a593Smuzhiyun #define LUT_PARAM_FRACTIONAL_DIVIDER        1
466*4882a593Smuzhiyun #define LUT_PARAM_ATTN_BB                   2
467*4882a593Smuzhiyun #define LUT_PARAM_ALPHA_BB                  3
468*4882a593Smuzhiyun #define LUT_PARAM_STOP_TIME_BB              4
469*4882a593Smuzhiyun #define LUT_PARAM_BB_PLL_LOOP_FILTER        5
470*4882a593Smuzhiyun #define LUT_PARAM_NUM                       6
471*4882a593Smuzhiyun 
472*4882a593Smuzhiyun #define ACX_EEPROMLESS_IND_REG              (SCR_PAD4)
473*4882a593Smuzhiyun #define USE_EEPROM                          0
474*4882a593Smuzhiyun #define SOFT_RESET_MAX_TIME                 1000000
475*4882a593Smuzhiyun #define SOFT_RESET_STALL_TIME               1000
476*4882a593Smuzhiyun #define NVS_DATA_BUNDARY_ALIGNMENT          4
477*4882a593Smuzhiyun 
478*4882a593Smuzhiyun 
479*4882a593Smuzhiyun /* Firmware image load chunk size */
480*4882a593Smuzhiyun #define CHUNK_SIZE          512
481*4882a593Smuzhiyun 
482*4882a593Smuzhiyun /* Firmware image header size */
483*4882a593Smuzhiyun #define FW_HDR_SIZE 8
484*4882a593Smuzhiyun 
485*4882a593Smuzhiyun #define ECPU_CONTROL_HALT					0x00000101
486*4882a593Smuzhiyun 
487*4882a593Smuzhiyun 
488*4882a593Smuzhiyun /******************************************************************************
489*4882a593Smuzhiyun 
490*4882a593Smuzhiyun     CHANNELS, BAND & REG DOMAINS definitions
491*4882a593Smuzhiyun 
492*4882a593Smuzhiyun ******************************************************************************/
493*4882a593Smuzhiyun 
494*4882a593Smuzhiyun 
495*4882a593Smuzhiyun enum {
496*4882a593Smuzhiyun 	RADIO_BAND_2_4GHZ = 0,  /* 2.4 Ghz band */
497*4882a593Smuzhiyun 	RADIO_BAND_5GHZ = 1,    /* 5 Ghz band */
498*4882a593Smuzhiyun 	RADIO_BAND_JAPAN_4_9_GHZ = 2,
499*4882a593Smuzhiyun 	DEFAULT_BAND = RADIO_BAND_2_4GHZ,
500*4882a593Smuzhiyun 	INVALID_BAND = 0xFE,
501*4882a593Smuzhiyun 	MAX_RADIO_BANDS = 0xFF
502*4882a593Smuzhiyun };
503*4882a593Smuzhiyun 
504*4882a593Smuzhiyun enum {
505*4882a593Smuzhiyun 	NO_RATE      = 0,
506*4882a593Smuzhiyun 	RATE_1MBPS   = 0x0A,
507*4882a593Smuzhiyun 	RATE_2MBPS   = 0x14,
508*4882a593Smuzhiyun 	RATE_5_5MBPS = 0x37,
509*4882a593Smuzhiyun 	RATE_6MBPS   = 0x0B,
510*4882a593Smuzhiyun 	RATE_9MBPS   = 0x0F,
511*4882a593Smuzhiyun 	RATE_11MBPS  = 0x6E,
512*4882a593Smuzhiyun 	RATE_12MBPS  = 0x0A,
513*4882a593Smuzhiyun 	RATE_18MBPS  = 0x0E,
514*4882a593Smuzhiyun 	RATE_22MBPS  = 0xDC,
515*4882a593Smuzhiyun 	RATE_24MBPS  = 0x09,
516*4882a593Smuzhiyun 	RATE_36MBPS  = 0x0D,
517*4882a593Smuzhiyun 	RATE_48MBPS  = 0x08,
518*4882a593Smuzhiyun 	RATE_54MBPS  = 0x0C
519*4882a593Smuzhiyun };
520*4882a593Smuzhiyun 
521*4882a593Smuzhiyun enum {
522*4882a593Smuzhiyun 	RATE_INDEX_1MBPS   =  0,
523*4882a593Smuzhiyun 	RATE_INDEX_2MBPS   =  1,
524*4882a593Smuzhiyun 	RATE_INDEX_5_5MBPS =  2,
525*4882a593Smuzhiyun 	RATE_INDEX_6MBPS   =  3,
526*4882a593Smuzhiyun 	RATE_INDEX_9MBPS   =  4,
527*4882a593Smuzhiyun 	RATE_INDEX_11MBPS  =  5,
528*4882a593Smuzhiyun 	RATE_INDEX_12MBPS  =  6,
529*4882a593Smuzhiyun 	RATE_INDEX_18MBPS  =  7,
530*4882a593Smuzhiyun 	RATE_INDEX_22MBPS  =  8,
531*4882a593Smuzhiyun 	RATE_INDEX_24MBPS  =  9,
532*4882a593Smuzhiyun 	RATE_INDEX_36MBPS  =  10,
533*4882a593Smuzhiyun 	RATE_INDEX_48MBPS  =  11,
534*4882a593Smuzhiyun 	RATE_INDEX_54MBPS  =  12,
535*4882a593Smuzhiyun 	RATE_INDEX_MAX     =  RATE_INDEX_54MBPS,
536*4882a593Smuzhiyun 	MAX_RATE_INDEX,
537*4882a593Smuzhiyun 	INVALID_RATE_INDEX = MAX_RATE_INDEX,
538*4882a593Smuzhiyun 	RATE_INDEX_ENUM_MAX_SIZE = 0x7FFFFFFF
539*4882a593Smuzhiyun };
540*4882a593Smuzhiyun 
541*4882a593Smuzhiyun enum {
542*4882a593Smuzhiyun 	RATE_MASK_1MBPS = 0x1,
543*4882a593Smuzhiyun 	RATE_MASK_2MBPS = 0x2,
544*4882a593Smuzhiyun 	RATE_MASK_5_5MBPS = 0x4,
545*4882a593Smuzhiyun 	RATE_MASK_11MBPS = 0x20,
546*4882a593Smuzhiyun };
547*4882a593Smuzhiyun 
548*4882a593Smuzhiyun #define SHORT_PREAMBLE_BIT   BIT(0) /* CCK or Barker depending on the rate */
549*4882a593Smuzhiyun #define OFDM_RATE_BIT        BIT(6)
550*4882a593Smuzhiyun #define PBCC_RATE_BIT        BIT(7)
551*4882a593Smuzhiyun 
552*4882a593Smuzhiyun enum {
553*4882a593Smuzhiyun 	CCK_LONG = 0,
554*4882a593Smuzhiyun 	CCK_SHORT = SHORT_PREAMBLE_BIT,
555*4882a593Smuzhiyun 	PBCC_LONG = PBCC_RATE_BIT,
556*4882a593Smuzhiyun 	PBCC_SHORT = PBCC_RATE_BIT | SHORT_PREAMBLE_BIT,
557*4882a593Smuzhiyun 	OFDM = OFDM_RATE_BIT
558*4882a593Smuzhiyun };
559*4882a593Smuzhiyun 
560*4882a593Smuzhiyun /******************************************************************************
561*4882a593Smuzhiyun 
562*4882a593Smuzhiyun Transmit-Descriptor RATE-SET field definitions...
563*4882a593Smuzhiyun 
564*4882a593Smuzhiyun Define a new "Rate-Set" for TX path that incorporates the
565*4882a593Smuzhiyun Rate & Modulation info into a single 16-bit field.
566*4882a593Smuzhiyun 
567*4882a593Smuzhiyun TxdRateSet_t:
568*4882a593Smuzhiyun b15   - Indicates Preamble type (1=SHORT, 0=LONG).
569*4882a593Smuzhiyun 	Notes:
570*4882a593Smuzhiyun 	Must be LONG (0) for 1Mbps rate.
571*4882a593Smuzhiyun 	Does not apply (set to 0) for RevG-OFDM rates.
572*4882a593Smuzhiyun b14   - Indicates PBCC encoding (1=PBCC, 0=not).
573*4882a593Smuzhiyun 	Notes:
574*4882a593Smuzhiyun 	Does not apply (set to 0) for rates 1 and 2 Mbps.
575*4882a593Smuzhiyun 	Does not apply (set to 0) for RevG-OFDM rates.
576*4882a593Smuzhiyun b13    - Unused (set to 0).
577*4882a593Smuzhiyun b12-b0 - Supported Rate indicator bits as defined below.
578*4882a593Smuzhiyun 
579*4882a593Smuzhiyun ******************************************************************************/
580*4882a593Smuzhiyun 
581*4882a593Smuzhiyun 
582*4882a593Smuzhiyun /*************************************************************************
583*4882a593Smuzhiyun 
584*4882a593Smuzhiyun     Interrupt Trigger Register (Host -> WiLink)
585*4882a593Smuzhiyun 
586*4882a593Smuzhiyun **************************************************************************/
587*4882a593Smuzhiyun 
588*4882a593Smuzhiyun /* Hardware to Embedded CPU Interrupts - first 32-bit register set */
589*4882a593Smuzhiyun 
590*4882a593Smuzhiyun /*
591*4882a593Smuzhiyun  * Host Command Interrupt. Setting this bit masks
592*4882a593Smuzhiyun  * the interrupt that the host issues to inform
593*4882a593Smuzhiyun  * the FW that it has sent a command
594*4882a593Smuzhiyun  * to the Wlan hardware Command Mailbox.
595*4882a593Smuzhiyun  */
596*4882a593Smuzhiyun #define INTR_TRIG_CMD       BIT(0)
597*4882a593Smuzhiyun 
598*4882a593Smuzhiyun /*
599*4882a593Smuzhiyun  * Host Event Acknowlegde Interrupt. The host
600*4882a593Smuzhiyun  * sets this bit to acknowledge that it received
601*4882a593Smuzhiyun  * the unsolicited information from the event
602*4882a593Smuzhiyun  * mailbox.
603*4882a593Smuzhiyun  */
604*4882a593Smuzhiyun #define INTR_TRIG_EVENT_ACK BIT(1)
605*4882a593Smuzhiyun 
606*4882a593Smuzhiyun /*
607*4882a593Smuzhiyun  * The host sets this bit to inform the Wlan
608*4882a593Smuzhiyun  * FW that a TX packet is in the XFER
609*4882a593Smuzhiyun  * Buffer #0.
610*4882a593Smuzhiyun  */
611*4882a593Smuzhiyun #define INTR_TRIG_TX_PROC0 BIT(2)
612*4882a593Smuzhiyun 
613*4882a593Smuzhiyun /*
614*4882a593Smuzhiyun  * The host sets this bit to inform the FW
615*4882a593Smuzhiyun  * that it read a packet from RX XFER
616*4882a593Smuzhiyun  * Buffer #0.
617*4882a593Smuzhiyun  */
618*4882a593Smuzhiyun #define INTR_TRIG_RX_PROC0 BIT(3)
619*4882a593Smuzhiyun 
620*4882a593Smuzhiyun #define INTR_TRIG_DEBUG_ACK BIT(4)
621*4882a593Smuzhiyun 
622*4882a593Smuzhiyun #define INTR_TRIG_STATE_CHANGED BIT(5)
623*4882a593Smuzhiyun 
624*4882a593Smuzhiyun 
625*4882a593Smuzhiyun /* Hardware to Embedded CPU Interrupts - second 32-bit register set */
626*4882a593Smuzhiyun 
627*4882a593Smuzhiyun /*
628*4882a593Smuzhiyun  * The host sets this bit to inform the FW
629*4882a593Smuzhiyun  * that it read a packet from RX XFER
630*4882a593Smuzhiyun  * Buffer #1.
631*4882a593Smuzhiyun  */
632*4882a593Smuzhiyun #define INTR_TRIG_RX_PROC1 BIT(17)
633*4882a593Smuzhiyun 
634*4882a593Smuzhiyun /*
635*4882a593Smuzhiyun  * The host sets this bit to inform the Wlan
636*4882a593Smuzhiyun  * hardware that a TX packet is in the XFER
637*4882a593Smuzhiyun  * Buffer #1.
638*4882a593Smuzhiyun  */
639*4882a593Smuzhiyun #define INTR_TRIG_TX_PROC1 BIT(18)
640*4882a593Smuzhiyun 
641*4882a593Smuzhiyun #endif
642