xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/ti/wl12xx/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-2009 Texas Instruments. All rights reserved.
6*4882a593Smuzhiyun  * Copyright (C) 2009 Nokia Corporation
7*4882a593Smuzhiyun  *
8*4882a593Smuzhiyun  * Contact: Luciano Coelho <luciano.coelho@nokia.com>
9*4882a593Smuzhiyun  */
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #ifndef __REG_H__
12*4882a593Smuzhiyun #define __REG_H__
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun #include <linux/bitops.h>
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun #define REGISTERS_BASE 0x00300000
17*4882a593Smuzhiyun #define DRPW_BASE      0x00310000
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun #define REGISTERS_DOWN_SIZE 0x00008800
20*4882a593Smuzhiyun #define REGISTERS_WORK_SIZE 0x0000b000
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun #define FW_STATUS_ADDR                      (0x14FC0 + 0xA000)
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun /*===============================================
25*4882a593Smuzhiyun    Host Software Reset - 32bit RW
26*4882a593Smuzhiyun  ------------------------------------------
27*4882a593Smuzhiyun     [31:1] Reserved
28*4882a593Smuzhiyun     0  SOFT_RESET Soft Reset  - When this bit is set,
29*4882a593Smuzhiyun     it holds the Wlan hardware in a soft reset state.
30*4882a593Smuzhiyun     This reset disables all MAC and baseband processor
31*4882a593Smuzhiyun     clocks except the CardBus/PCI interface clock.
32*4882a593Smuzhiyun     It also initializes all MAC state machines except
33*4882a593Smuzhiyun     the host interface. It does not reload the
34*4882a593Smuzhiyun     contents of the EEPROM. When this bit is cleared
35*4882a593Smuzhiyun     (not self-clearing), the Wlan hardware
36*4882a593Smuzhiyun     exits the software reset state.
37*4882a593Smuzhiyun ===============================================*/
38*4882a593Smuzhiyun #define WL12XX_SLV_SOFT_RESET		(REGISTERS_BASE + 0x0000)
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun #define WL1271_SLV_REG_DATA            (REGISTERS_BASE + 0x0008)
41*4882a593Smuzhiyun #define WL1271_SLV_REG_ADATA           (REGISTERS_BASE + 0x000c)
42*4882a593Smuzhiyun #define WL1271_SLV_MEM_DATA            (REGISTERS_BASE + 0x0018)
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun #define WL12XX_REG_INTERRUPT_TRIG         (REGISTERS_BASE + 0x0474)
45*4882a593Smuzhiyun #define WL12XX_REG_INTERRUPT_TRIG_H       (REGISTERS_BASE + 0x0478)
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun /*=============================================
48*4882a593Smuzhiyun   Host Interrupt Mask Register - 32bit (RW)
49*4882a593Smuzhiyun   ------------------------------------------
50*4882a593Smuzhiyun   Setting a bit in this register masks the
51*4882a593Smuzhiyun   corresponding interrupt to the host.
52*4882a593Smuzhiyun   0 - RX0		- Rx first dubble buffer Data Interrupt
53*4882a593Smuzhiyun   1 - TXD		- Tx Data Interrupt
54*4882a593Smuzhiyun   2 - TXXFR		- Tx Transfer Interrupt
55*4882a593Smuzhiyun   3 - RX1		- Rx second dubble buffer Data Interrupt
56*4882a593Smuzhiyun   4 - RXXFR		- Rx Transfer Interrupt
57*4882a593Smuzhiyun   5 - EVENT_A	- Event Mailbox interrupt
58*4882a593Smuzhiyun   6 - EVENT_B	- Event Mailbox interrupt
59*4882a593Smuzhiyun   7 - WNONHST	- Wake On Host Interrupt
60*4882a593Smuzhiyun   8 - TRACE_A	- Debug Trace interrupt
61*4882a593Smuzhiyun   9 - TRACE_B	- Debug Trace interrupt
62*4882a593Smuzhiyun  10 - CDCMP		- Command Complete Interrupt
63*4882a593Smuzhiyun  11 -
64*4882a593Smuzhiyun  12 -
65*4882a593Smuzhiyun  13 -
66*4882a593Smuzhiyun  14 - ICOMP		- Initialization Complete Interrupt
67*4882a593Smuzhiyun  16 - SG SE		- Soft Gemini - Sense enable interrupt
68*4882a593Smuzhiyun  17 - SG SD		- Soft Gemini - Sense disable interrupt
69*4882a593Smuzhiyun  18 -			-
70*4882a593Smuzhiyun  19 -			-
71*4882a593Smuzhiyun  20 -			-
72*4882a593Smuzhiyun  21-			-
73*4882a593Smuzhiyun  Default: 0x0001
74*4882a593Smuzhiyun *==============================================*/
75*4882a593Smuzhiyun #define WL12XX_REG_INTERRUPT_MASK         (REGISTERS_BASE + 0x04DC)
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun /*=============================================
78*4882a593Smuzhiyun   Host Interrupt Mask Set 16bit, (Write only)
79*4882a593Smuzhiyun   ------------------------------------------
80*4882a593Smuzhiyun  Setting a bit in this register sets
81*4882a593Smuzhiyun  the corresponding bin in ACX_HINT_MASK register
82*4882a593Smuzhiyun  without effecting the mask
83*4882a593Smuzhiyun  state of other bits (0 = no effect).
84*4882a593Smuzhiyun ==============================================*/
85*4882a593Smuzhiyun #define ACX_REG_HINT_MASK_SET          (REGISTERS_BASE + 0x04E0)
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun /*=============================================
88*4882a593Smuzhiyun   Host Interrupt Mask Clear 16bit,(Write only)
89*4882a593Smuzhiyun   ------------------------------------------
90*4882a593Smuzhiyun  Setting a bit in this register clears
91*4882a593Smuzhiyun  the corresponding bin in ACX_HINT_MASK register
92*4882a593Smuzhiyun  without effecting the mask
93*4882a593Smuzhiyun  state of other bits (0 = no effect).
94*4882a593Smuzhiyun =============================================*/
95*4882a593Smuzhiyun #define ACX_REG_HINT_MASK_CLR          (REGISTERS_BASE + 0x04E4)
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun /*=============================================
98*4882a593Smuzhiyun   Host Interrupt Status Nondestructive Read
99*4882a593Smuzhiyun   16bit,(Read only)
100*4882a593Smuzhiyun   ------------------------------------------
101*4882a593Smuzhiyun  The host can read this register to determine
102*4882a593Smuzhiyun  which interrupts are active.
103*4882a593Smuzhiyun  Reading this register doesn't
104*4882a593Smuzhiyun  effect its content.
105*4882a593Smuzhiyun =============================================*/
106*4882a593Smuzhiyun #define WL12XX_REG_INTERRUPT_NO_CLEAR     (REGISTERS_BASE + 0x04E8)
107*4882a593Smuzhiyun 
108*4882a593Smuzhiyun /*=============================================
109*4882a593Smuzhiyun   Host Interrupt Status Clear on Read  Register
110*4882a593Smuzhiyun   16bit,(Read only)
111*4882a593Smuzhiyun   ------------------------------------------
112*4882a593Smuzhiyun  The host can read this register to determine
113*4882a593Smuzhiyun  which interrupts are active.
114*4882a593Smuzhiyun  Reading this register clears it,
115*4882a593Smuzhiyun  thus making all interrupts inactive.
116*4882a593Smuzhiyun ==============================================*/
117*4882a593Smuzhiyun #define ACX_REG_INTERRUPT_CLEAR        (REGISTERS_BASE + 0x04F8)
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun /*=============================================
120*4882a593Smuzhiyun   Host Interrupt Acknowledge Register
121*4882a593Smuzhiyun   16bit,(Write only)
122*4882a593Smuzhiyun   ------------------------------------------
123*4882a593Smuzhiyun  The host can set individual bits in this
124*4882a593Smuzhiyun  register to clear (acknowledge) the corresp.
125*4882a593Smuzhiyun  interrupt status bits in the HINT_STS_CLR and
126*4882a593Smuzhiyun  HINT_STS_ND registers, thus making the
127*4882a593Smuzhiyun  assotiated interrupt inactive. (0-no effect)
128*4882a593Smuzhiyun ==============================================*/
129*4882a593Smuzhiyun #define WL12XX_REG_INTERRUPT_ACK          (REGISTERS_BASE + 0x04F0)
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun #define WL12XX_REG_RX_DRIVER_COUNTER	(REGISTERS_BASE + 0x0538)
132*4882a593Smuzhiyun 
133*4882a593Smuzhiyun /* Device Configuration registers*/
134*4882a593Smuzhiyun #define SOR_CFG                        (REGISTERS_BASE + 0x0800)
135*4882a593Smuzhiyun 
136*4882a593Smuzhiyun /* Embedded ARM CPU Control */
137*4882a593Smuzhiyun 
138*4882a593Smuzhiyun /*===============================================
139*4882a593Smuzhiyun  Halt eCPU   - 32bit RW
140*4882a593Smuzhiyun  ------------------------------------------
141*4882a593Smuzhiyun  0 HALT_ECPU Halt Embedded CPU - This bit is the
142*4882a593Smuzhiyun  complement of bit 1 (MDATA2) in the SOR_CFG register.
143*4882a593Smuzhiyun  During a hardware reset, this bit holds
144*4882a593Smuzhiyun  the inverse of MDATA2.
145*4882a593Smuzhiyun  When downloading firmware from the host,
146*4882a593Smuzhiyun  set this bit (pull down MDATA2).
147*4882a593Smuzhiyun  The host clears this bit after downloading the firmware into
148*4882a593Smuzhiyun  zero-wait-state SSRAM.
149*4882a593Smuzhiyun  When loading firmware from Flash, clear this bit (pull up MDATA2)
150*4882a593Smuzhiyun  so that the eCPU can run the bootloader code in Flash
151*4882a593Smuzhiyun  HALT_ECPU eCPU State
152*4882a593Smuzhiyun  --------------------
153*4882a593Smuzhiyun  1 halt eCPU
154*4882a593Smuzhiyun  0 enable eCPU
155*4882a593Smuzhiyun  ===============================================*/
156*4882a593Smuzhiyun #define WL12XX_REG_ECPU_CONTROL           (REGISTERS_BASE + 0x0804)
157*4882a593Smuzhiyun 
158*4882a593Smuzhiyun #define WL12XX_HI_CFG			(REGISTERS_BASE + 0x0808)
159*4882a593Smuzhiyun 
160*4882a593Smuzhiyun /*===============================================
161*4882a593Smuzhiyun  EEPROM Burst Read Start  - 32bit RW
162*4882a593Smuzhiyun  ------------------------------------------
163*4882a593Smuzhiyun  [31:1] Reserved
164*4882a593Smuzhiyun  0  ACX_EE_START -  EEPROM Burst Read Start 0
165*4882a593Smuzhiyun  Setting this bit starts a burst read from
166*4882a593Smuzhiyun  the external EEPROM.
167*4882a593Smuzhiyun  If this bit is set (after reset) before an EEPROM read/write,
168*4882a593Smuzhiyun  the burst read starts at EEPROM address 0.
169*4882a593Smuzhiyun  Otherwise, it starts at the address
170*4882a593Smuzhiyun  following the address of the previous access.
171*4882a593Smuzhiyun  TheWlan hardware hardware clears this bit automatically.
172*4882a593Smuzhiyun 
173*4882a593Smuzhiyun  Default: 0x00000000
174*4882a593Smuzhiyun *================================================*/
175*4882a593Smuzhiyun #define ACX_REG_EE_START               (REGISTERS_BASE + 0x080C)
176*4882a593Smuzhiyun 
177*4882a593Smuzhiyun #define WL12XX_OCP_POR_CTR		(REGISTERS_BASE + 0x09B4)
178*4882a593Smuzhiyun #define WL12XX_OCP_DATA_WRITE		(REGISTERS_BASE + 0x09B8)
179*4882a593Smuzhiyun #define WL12XX_OCP_DATA_READ		(REGISTERS_BASE + 0x09BC)
180*4882a593Smuzhiyun #define WL12XX_OCP_CMD			(REGISTERS_BASE + 0x09C0)
181*4882a593Smuzhiyun 
182*4882a593Smuzhiyun #define WL12XX_HOST_WR_ACCESS		(REGISTERS_BASE + 0x09F8)
183*4882a593Smuzhiyun 
184*4882a593Smuzhiyun #define WL12XX_CHIP_ID_B		(REGISTERS_BASE + 0x5674)
185*4882a593Smuzhiyun 
186*4882a593Smuzhiyun #define WL12XX_ENABLE			(REGISTERS_BASE + 0x5450)
187*4882a593Smuzhiyun 
188*4882a593Smuzhiyun /* Power Management registers */
189*4882a593Smuzhiyun #define WL12XX_ELP_CFG_MODE		(REGISTERS_BASE + 0x5804)
190*4882a593Smuzhiyun #define WL12XX_ELP_CMD			(REGISTERS_BASE + 0x5808)
191*4882a593Smuzhiyun #define WL12XX_PLL_CAL_TIME		(REGISTERS_BASE + 0x5810)
192*4882a593Smuzhiyun #define WL12XX_CLK_REQ_TIME		(REGISTERS_BASE + 0x5814)
193*4882a593Smuzhiyun #define WL12XX_CLK_BUF_TIME		(REGISTERS_BASE + 0x5818)
194*4882a593Smuzhiyun 
195*4882a593Smuzhiyun #define WL12XX_CFG_PLL_SYNC_CNT		(REGISTERS_BASE + 0x5820)
196*4882a593Smuzhiyun 
197*4882a593Smuzhiyun /* Scratch Pad registers*/
198*4882a593Smuzhiyun #define WL12XX_SCR_PAD0			(REGISTERS_BASE + 0x5608)
199*4882a593Smuzhiyun #define WL12XX_SCR_PAD1			(REGISTERS_BASE + 0x560C)
200*4882a593Smuzhiyun #define WL12XX_SCR_PAD2			(REGISTERS_BASE + 0x5610)
201*4882a593Smuzhiyun #define WL12XX_SCR_PAD3			(REGISTERS_BASE + 0x5614)
202*4882a593Smuzhiyun #define WL12XX_SCR_PAD4			(REGISTERS_BASE + 0x5618)
203*4882a593Smuzhiyun #define WL12XX_SCR_PAD4_SET		(REGISTERS_BASE + 0x561C)
204*4882a593Smuzhiyun #define WL12XX_SCR_PAD4_CLR		(REGISTERS_BASE + 0x5620)
205*4882a593Smuzhiyun #define WL12XX_SCR_PAD5			(REGISTERS_BASE + 0x5624)
206*4882a593Smuzhiyun #define WL12XX_SCR_PAD5_SET		(REGISTERS_BASE + 0x5628)
207*4882a593Smuzhiyun #define WL12XX_SCR_PAD5_CLR		(REGISTERS_BASE + 0x562C)
208*4882a593Smuzhiyun #define WL12XX_SCR_PAD6			(REGISTERS_BASE + 0x5630)
209*4882a593Smuzhiyun #define WL12XX_SCR_PAD7			(REGISTERS_BASE + 0x5634)
210*4882a593Smuzhiyun #define WL12XX_SCR_PAD8			(REGISTERS_BASE + 0x5638)
211*4882a593Smuzhiyun #define WL12XX_SCR_PAD9			(REGISTERS_BASE + 0x563C)
212*4882a593Smuzhiyun 
213*4882a593Smuzhiyun /* Spare registers*/
214*4882a593Smuzhiyun #define WL12XX_SPARE_A1			(REGISTERS_BASE + 0x0994)
215*4882a593Smuzhiyun #define WL12XX_SPARE_A2			(REGISTERS_BASE + 0x0998)
216*4882a593Smuzhiyun #define WL12XX_SPARE_A3			(REGISTERS_BASE + 0x099C)
217*4882a593Smuzhiyun #define WL12XX_SPARE_A4			(REGISTERS_BASE + 0x09A0)
218*4882a593Smuzhiyun #define WL12XX_SPARE_A5			(REGISTERS_BASE + 0x09A4)
219*4882a593Smuzhiyun #define WL12XX_SPARE_A6			(REGISTERS_BASE + 0x09A8)
220*4882a593Smuzhiyun #define WL12XX_SPARE_A7			(REGISTERS_BASE + 0x09AC)
221*4882a593Smuzhiyun #define WL12XX_SPARE_A8			(REGISTERS_BASE + 0x09B0)
222*4882a593Smuzhiyun #define WL12XX_SPARE_B1			(REGISTERS_BASE + 0x5420)
223*4882a593Smuzhiyun #define WL12XX_SPARE_B2			(REGISTERS_BASE + 0x5424)
224*4882a593Smuzhiyun #define WL12XX_SPARE_B3			(REGISTERS_BASE + 0x5428)
225*4882a593Smuzhiyun #define WL12XX_SPARE_B4			(REGISTERS_BASE + 0x542C)
226*4882a593Smuzhiyun #define WL12XX_SPARE_B5			(REGISTERS_BASE + 0x5430)
227*4882a593Smuzhiyun #define WL12XX_SPARE_B6			(REGISTERS_BASE + 0x5434)
228*4882a593Smuzhiyun #define WL12XX_SPARE_B7			(REGISTERS_BASE + 0x5438)
229*4882a593Smuzhiyun #define WL12XX_SPARE_B8			(REGISTERS_BASE + 0x543C)
230*4882a593Smuzhiyun 
231*4882a593Smuzhiyun #define WL12XX_PLL_PARAMETERS		(REGISTERS_BASE + 0x6040)
232*4882a593Smuzhiyun #define WL12XX_WU_COUNTER_PAUSE		(REGISTERS_BASE + 0x6008)
233*4882a593Smuzhiyun #define WL12XX_WELP_ARM_COMMAND		(REGISTERS_BASE + 0x6100)
234*4882a593Smuzhiyun #define WL12XX_DRPW_SCRATCH_START	(DRPW_BASE + 0x002C)
235*4882a593Smuzhiyun 
236*4882a593Smuzhiyun #define WL12XX_CMD_MBOX_ADDRESS		0x407B4
237*4882a593Smuzhiyun 
238*4882a593Smuzhiyun #define ACX_REG_EEPROM_START_BIT BIT(1)
239*4882a593Smuzhiyun 
240*4882a593Smuzhiyun /* Command/Information Mailbox Pointers */
241*4882a593Smuzhiyun 
242*4882a593Smuzhiyun /*===============================================
243*4882a593Smuzhiyun   Command Mailbox Pointer - 32bit RW
244*4882a593Smuzhiyun  ------------------------------------------
245*4882a593Smuzhiyun  This register holds the start address of
246*4882a593Smuzhiyun  the command mailbox located in the Wlan hardware memory.
247*4882a593Smuzhiyun  The host must read this pointer after a reset to
248*4882a593Smuzhiyun  find the location of the command mailbox.
249*4882a593Smuzhiyun  The Wlan hardware initializes the command mailbox
250*4882a593Smuzhiyun  pointer with the default address of the command mailbox.
251*4882a593Smuzhiyun  The command mailbox pointer is not valid until after
252*4882a593Smuzhiyun  the host receives the Init Complete interrupt from
253*4882a593Smuzhiyun  the Wlan hardware.
254*4882a593Smuzhiyun  ===============================================*/
255*4882a593Smuzhiyun #define WL12XX_REG_COMMAND_MAILBOX_PTR		(WL12XX_SCR_PAD0)
256*4882a593Smuzhiyun 
257*4882a593Smuzhiyun /*===============================================
258*4882a593Smuzhiyun   Information Mailbox Pointer - 32bit RW
259*4882a593Smuzhiyun  ------------------------------------------
260*4882a593Smuzhiyun  This register holds the start address of
261*4882a593Smuzhiyun  the information mailbox located in the Wlan hardware memory.
262*4882a593Smuzhiyun  The host must read this pointer after a reset to find
263*4882a593Smuzhiyun  the location of the information mailbox.
264*4882a593Smuzhiyun  The Wlan hardware initializes the information mailbox pointer
265*4882a593Smuzhiyun  with the default address of the information mailbox.
266*4882a593Smuzhiyun  The information mailbox pointer is not valid
267*4882a593Smuzhiyun  until after the host receives the Init Complete interrupt from
268*4882a593Smuzhiyun  the Wlan hardware.
269*4882a593Smuzhiyun  ===============================================*/
270*4882a593Smuzhiyun #define WL12XX_REG_EVENT_MAILBOX_PTR		(WL12XX_SCR_PAD1)
271*4882a593Smuzhiyun 
272*4882a593Smuzhiyun /*===============================================
273*4882a593Smuzhiyun  EEPROM Read/Write Request 32bit RW
274*4882a593Smuzhiyun  ------------------------------------------
275*4882a593Smuzhiyun  1 EE_READ - EEPROM Read Request 1 - Setting this bit
276*4882a593Smuzhiyun  loads a single byte of data into the EE_DATA
277*4882a593Smuzhiyun  register from the EEPROM location specified in
278*4882a593Smuzhiyun  the EE_ADDR register.
279*4882a593Smuzhiyun  The Wlan hardware hardware clears this bit automatically.
280*4882a593Smuzhiyun  EE_DATA is valid when this bit is cleared.
281*4882a593Smuzhiyun 
282*4882a593Smuzhiyun  0 EE_WRITE  - EEPROM Write Request  - Setting this bit
283*4882a593Smuzhiyun  writes a single byte of data from the EE_DATA register into the
284*4882a593Smuzhiyun  EEPROM location specified in the EE_ADDR register.
285*4882a593Smuzhiyun  The Wlan hardware hardware clears this bit automatically.
286*4882a593Smuzhiyun *===============================================*/
287*4882a593Smuzhiyun #define ACX_EE_CTL_REG                      EE_CTL
288*4882a593Smuzhiyun #define EE_WRITE                            0x00000001ul
289*4882a593Smuzhiyun #define EE_READ                             0x00000002ul
290*4882a593Smuzhiyun 
291*4882a593Smuzhiyun /*===============================================
292*4882a593Smuzhiyun   EEPROM Address  - 32bit RW
293*4882a593Smuzhiyun   ------------------------------------------
294*4882a593Smuzhiyun   This register specifies the address
295*4882a593Smuzhiyun   within the EEPROM from/to which to read/write data.
296*4882a593Smuzhiyun   ===============================================*/
297*4882a593Smuzhiyun #define ACX_EE_ADDR_REG                     EE_ADDR
298*4882a593Smuzhiyun 
299*4882a593Smuzhiyun /*===============================================
300*4882a593Smuzhiyun   EEPROM Data  - 32bit RW
301*4882a593Smuzhiyun   ------------------------------------------
302*4882a593Smuzhiyun   This register either holds the read 8 bits of
303*4882a593Smuzhiyun   data from the EEPROM or the write data
304*4882a593Smuzhiyun   to be written to the EEPROM.
305*4882a593Smuzhiyun   ===============================================*/
306*4882a593Smuzhiyun #define ACX_EE_DATA_REG                     EE_DATA
307*4882a593Smuzhiyun 
308*4882a593Smuzhiyun /*===============================================
309*4882a593Smuzhiyun   EEPROM Base Address  - 32bit RW
310*4882a593Smuzhiyun   ------------------------------------------
311*4882a593Smuzhiyun   This register holds the upper nine bits
312*4882a593Smuzhiyun   [23:15] of the 24-bit Wlan hardware memory
313*4882a593Smuzhiyun   address for burst reads from EEPROM accesses.
314*4882a593Smuzhiyun   The EEPROM provides the lower 15 bits of this address.
315*4882a593Smuzhiyun   The MSB of the address from the EEPROM is ignored.
316*4882a593Smuzhiyun   ===============================================*/
317*4882a593Smuzhiyun #define ACX_EE_CFG                          EE_CFG
318*4882a593Smuzhiyun 
319*4882a593Smuzhiyun /*===============================================
320*4882a593Smuzhiyun   GPIO Output Values  -32bit, RW
321*4882a593Smuzhiyun   ------------------------------------------
322*4882a593Smuzhiyun   [31:16]  Reserved
323*4882a593Smuzhiyun   [15: 0]  Specify the output values (at the output driver inputs) for
324*4882a593Smuzhiyun   GPIO[15:0], respectively.
325*4882a593Smuzhiyun   ===============================================*/
326*4882a593Smuzhiyun #define ACX_GPIO_OUT_REG            GPIO_OUT
327*4882a593Smuzhiyun #define ACX_MAX_GPIO_LINES          15
328*4882a593Smuzhiyun 
329*4882a593Smuzhiyun /*===============================================
330*4882a593Smuzhiyun   Contention window  -32bit, RW
331*4882a593Smuzhiyun   ------------------------------------------
332*4882a593Smuzhiyun   [31:26]  Reserved
333*4882a593Smuzhiyun   [25:16]  Max (0x3ff)
334*4882a593Smuzhiyun   [15:07]  Reserved
335*4882a593Smuzhiyun   [06:00]  Current contention window value - default is 0x1F
336*4882a593Smuzhiyun   ===============================================*/
337*4882a593Smuzhiyun #define ACX_CONT_WIND_CFG_REG    CONT_WIND_CFG
338*4882a593Smuzhiyun #define ACX_CONT_WIND_MIN_MASK   0x0000007f
339*4882a593Smuzhiyun #define ACX_CONT_WIND_MAX        0x03ff0000
340*4882a593Smuzhiyun 
341*4882a593Smuzhiyun #define REF_FREQ_19_2                       0
342*4882a593Smuzhiyun #define REF_FREQ_26_0                       1
343*4882a593Smuzhiyun #define REF_FREQ_38_4                       2
344*4882a593Smuzhiyun #define REF_FREQ_40_0                       3
345*4882a593Smuzhiyun #define REF_FREQ_33_6                       4
346*4882a593Smuzhiyun #define REF_FREQ_NUM                        5
347*4882a593Smuzhiyun 
348*4882a593Smuzhiyun #define LUT_PARAM_INTEGER_DIVIDER           0
349*4882a593Smuzhiyun #define LUT_PARAM_FRACTIONAL_DIVIDER        1
350*4882a593Smuzhiyun #define LUT_PARAM_ATTN_BB                   2
351*4882a593Smuzhiyun #define LUT_PARAM_ALPHA_BB                  3
352*4882a593Smuzhiyun #define LUT_PARAM_STOP_TIME_BB              4
353*4882a593Smuzhiyun #define LUT_PARAM_BB_PLL_LOOP_FILTER        5
354*4882a593Smuzhiyun #define LUT_PARAM_NUM                       6
355*4882a593Smuzhiyun 
356*4882a593Smuzhiyun #define WL12XX_EEPROMLESS_IND		(WL12XX_SCR_PAD4)
357*4882a593Smuzhiyun #define USE_EEPROM                          0
358*4882a593Smuzhiyun #define NVS_DATA_BUNDARY_ALIGNMENT          4
359*4882a593Smuzhiyun 
360*4882a593Smuzhiyun /* Firmware image header size */
361*4882a593Smuzhiyun #define FW_HDR_SIZE 8
362*4882a593Smuzhiyun 
363*4882a593Smuzhiyun /******************************************************************************
364*4882a593Smuzhiyun 
365*4882a593Smuzhiyun     CHANNELS, BAND & REG DOMAINS definitions
366*4882a593Smuzhiyun 
367*4882a593Smuzhiyun ******************************************************************************/
368*4882a593Smuzhiyun 
369*4882a593Smuzhiyun #define SHORT_PREAMBLE_BIT   BIT(0) /* CCK or Barker depending on the rate */
370*4882a593Smuzhiyun #define OFDM_RATE_BIT        BIT(6)
371*4882a593Smuzhiyun #define PBCC_RATE_BIT        BIT(7)
372*4882a593Smuzhiyun 
373*4882a593Smuzhiyun enum {
374*4882a593Smuzhiyun 	CCK_LONG = 0,
375*4882a593Smuzhiyun 	CCK_SHORT = SHORT_PREAMBLE_BIT,
376*4882a593Smuzhiyun 	PBCC_LONG = PBCC_RATE_BIT,
377*4882a593Smuzhiyun 	PBCC_SHORT = PBCC_RATE_BIT | SHORT_PREAMBLE_BIT,
378*4882a593Smuzhiyun 	OFDM = OFDM_RATE_BIT
379*4882a593Smuzhiyun };
380*4882a593Smuzhiyun 
381*4882a593Smuzhiyun /******************************************************************************
382*4882a593Smuzhiyun 
383*4882a593Smuzhiyun Transmit-Descriptor RATE-SET field definitions...
384*4882a593Smuzhiyun 
385*4882a593Smuzhiyun Define a new "Rate-Set" for TX path that incorporates the
386*4882a593Smuzhiyun Rate & Modulation info into a single 16-bit field.
387*4882a593Smuzhiyun 
388*4882a593Smuzhiyun TxdRateSet_t:
389*4882a593Smuzhiyun b15   - Indicates Preamble type (1=SHORT, 0=LONG).
390*4882a593Smuzhiyun 	Notes:
391*4882a593Smuzhiyun 	Must be LONG (0) for 1Mbps rate.
392*4882a593Smuzhiyun 	Does not apply (set to 0) for RevG-OFDM rates.
393*4882a593Smuzhiyun b14   - Indicates PBCC encoding (1=PBCC, 0=not).
394*4882a593Smuzhiyun 	Notes:
395*4882a593Smuzhiyun 	Does not apply (set to 0) for rates 1 and 2 Mbps.
396*4882a593Smuzhiyun 	Does not apply (set to 0) for RevG-OFDM rates.
397*4882a593Smuzhiyun b13    - Unused (set to 0).
398*4882a593Smuzhiyun b12-b0 - Supported Rate indicator bits as defined below.
399*4882a593Smuzhiyun 
400*4882a593Smuzhiyun ******************************************************************************/
401*4882a593Smuzhiyun 
402*4882a593Smuzhiyun #define OCP_CMD_LOOP		32
403*4882a593Smuzhiyun #define OCP_CMD_WRITE		0x1
404*4882a593Smuzhiyun #define OCP_CMD_READ		0x2
405*4882a593Smuzhiyun #define OCP_READY_MASK		BIT(18)
406*4882a593Smuzhiyun #define OCP_STATUS_MASK		(BIT(16) | BIT(17))
407*4882a593Smuzhiyun #define OCP_STATUS_NO_RESP	0x00000
408*4882a593Smuzhiyun #define OCP_STATUS_OK		0x10000
409*4882a593Smuzhiyun #define OCP_STATUS_REQ_FAILED	0x20000
410*4882a593Smuzhiyun #define OCP_STATUS_RESP_ERROR	0x30000
411*4882a593Smuzhiyun 
412*4882a593Smuzhiyun #define OCP_REG_POLARITY     0x0064
413*4882a593Smuzhiyun #define OCP_REG_CLK_TYPE     0x0448
414*4882a593Smuzhiyun #define OCP_REG_CLK_POLARITY 0x0cb2
415*4882a593Smuzhiyun #define OCP_REG_CLK_PULL     0x0cb4
416*4882a593Smuzhiyun 
417*4882a593Smuzhiyun #define POLARITY_LOW         BIT(1)
418*4882a593Smuzhiyun #define NO_PULL              (BIT(14) | BIT(15))
419*4882a593Smuzhiyun 
420*4882a593Smuzhiyun #define FREF_CLK_TYPE_BITS     0xfffffe7f
421*4882a593Smuzhiyun #define CLK_REQ_PRCM           0x100
422*4882a593Smuzhiyun #define FREF_CLK_POLARITY_BITS 0xfffff8ff
423*4882a593Smuzhiyun #define CLK_REQ_OUTN_SEL       0x700
424*4882a593Smuzhiyun 
425*4882a593Smuzhiyun #define WU_COUNTER_PAUSE_VAL 0x3FF
426*4882a593Smuzhiyun 
427*4882a593Smuzhiyun /* PLL configuration algorithm for wl128x */
428*4882a593Smuzhiyun #define SYS_CLK_CFG_REG              0x2200
429*4882a593Smuzhiyun /* Bit[0]   -  0-TCXO,  1-FREF */
430*4882a593Smuzhiyun #define MCS_PLL_CLK_SEL_FREF         BIT(0)
431*4882a593Smuzhiyun /* Bit[3:2] - 01-TCXO, 10-FREF */
432*4882a593Smuzhiyun #define WL_CLK_REQ_TYPE_FREF         BIT(3)
433*4882a593Smuzhiyun #define WL_CLK_REQ_TYPE_PG2          (BIT(3) | BIT(2))
434*4882a593Smuzhiyun /* Bit[4]   -  0-TCXO,  1-FREF */
435*4882a593Smuzhiyun #define PRCM_CM_EN_MUX_WLAN_FREF     BIT(4)
436*4882a593Smuzhiyun 
437*4882a593Smuzhiyun #define TCXO_ILOAD_INT_REG           0x2264
438*4882a593Smuzhiyun #define TCXO_CLK_DETECT_REG          0x2266
439*4882a593Smuzhiyun 
440*4882a593Smuzhiyun #define TCXO_DET_FAILED              BIT(4)
441*4882a593Smuzhiyun 
442*4882a593Smuzhiyun #define FREF_ILOAD_INT_REG           0x2084
443*4882a593Smuzhiyun #define FREF_CLK_DETECT_REG          0x2086
444*4882a593Smuzhiyun #define FREF_CLK_DETECT_FAIL         BIT(4)
445*4882a593Smuzhiyun 
446*4882a593Smuzhiyun /* Use this reg for masking during driver access */
447*4882a593Smuzhiyun #define WL_SPARE_REG                 0x2320
448*4882a593Smuzhiyun #define WL_SPARE_VAL                 BIT(2)
449*4882a593Smuzhiyun /* Bit[6:5:3] -  mask wl write SYS_CLK_CFG[8:5:2:4] */
450*4882a593Smuzhiyun #define WL_SPARE_MASK_8526           (BIT(6) | BIT(5) | BIT(3))
451*4882a593Smuzhiyun 
452*4882a593Smuzhiyun #define PLL_LOCK_COUNTERS_REG        0xD8C
453*4882a593Smuzhiyun #define PLL_LOCK_COUNTERS_COEX       0x0F
454*4882a593Smuzhiyun #define PLL_LOCK_COUNTERS_MCS        0xF0
455*4882a593Smuzhiyun #define MCS_PLL_OVERRIDE_REG         0xD90
456*4882a593Smuzhiyun #define MCS_PLL_CONFIG_REG           0xD92
457*4882a593Smuzhiyun #define MCS_SEL_IN_FREQ_MASK         0x0070
458*4882a593Smuzhiyun #define MCS_SEL_IN_FREQ_SHIFT        4
459*4882a593Smuzhiyun #define MCS_PLL_CONFIG_REG_VAL       0x73
460*4882a593Smuzhiyun #define MCS_PLL_ENABLE_HP            (BIT(0) | BIT(1))
461*4882a593Smuzhiyun 
462*4882a593Smuzhiyun #define MCS_PLL_M_REG                0xD94
463*4882a593Smuzhiyun #define MCS_PLL_N_REG                0xD96
464*4882a593Smuzhiyun #define MCS_PLL_M_REG_VAL            0xC8
465*4882a593Smuzhiyun #define MCS_PLL_N_REG_VAL            0x07
466*4882a593Smuzhiyun 
467*4882a593Smuzhiyun #define SDIO_IO_DS                   0xd14
468*4882a593Smuzhiyun 
469*4882a593Smuzhiyun /* SDIO/wSPI DS configuration values */
470*4882a593Smuzhiyun enum {
471*4882a593Smuzhiyun 	HCI_IO_DS_8MA = 0,
472*4882a593Smuzhiyun 	HCI_IO_DS_4MA = 1, /* default */
473*4882a593Smuzhiyun 	HCI_IO_DS_6MA = 2,
474*4882a593Smuzhiyun 	HCI_IO_DS_2MA = 3,
475*4882a593Smuzhiyun };
476*4882a593Smuzhiyun 
477*4882a593Smuzhiyun /* end PLL configuration algorithm for wl128x */
478*4882a593Smuzhiyun 
479*4882a593Smuzhiyun /*
480*4882a593Smuzhiyun  * Host Command Interrupt. Setting this bit masks
481*4882a593Smuzhiyun  * the interrupt that the host issues to inform
482*4882a593Smuzhiyun  * the FW that it has sent a command
483*4882a593Smuzhiyun  * to the Wlan hardware Command Mailbox.
484*4882a593Smuzhiyun  */
485*4882a593Smuzhiyun #define WL12XX_INTR_TRIG_CMD		BIT(0)
486*4882a593Smuzhiyun 
487*4882a593Smuzhiyun /*
488*4882a593Smuzhiyun  * Host Event Acknowlegde Interrupt. The host
489*4882a593Smuzhiyun  * sets this bit to acknowledge that it received
490*4882a593Smuzhiyun  * the unsolicited information from the event
491*4882a593Smuzhiyun  * mailbox.
492*4882a593Smuzhiyun  */
493*4882a593Smuzhiyun #define WL12XX_INTR_TRIG_EVENT_ACK	BIT(1)
494*4882a593Smuzhiyun 
495*4882a593Smuzhiyun /*===============================================
496*4882a593Smuzhiyun   HI_CFG Interface Configuration Register Values
497*4882a593Smuzhiyun   ------------------------------------------
498*4882a593Smuzhiyun   ===============================================*/
499*4882a593Smuzhiyun #define HI_CFG_UART_ENABLE          0x00000004
500*4882a593Smuzhiyun #define HI_CFG_RST232_ENABLE        0x00000008
501*4882a593Smuzhiyun #define HI_CFG_CLOCK_REQ_SELECT     0x00000010
502*4882a593Smuzhiyun #define HI_CFG_HOST_INT_ENABLE      0x00000020
503*4882a593Smuzhiyun #define HI_CFG_VLYNQ_OUTPUT_ENABLE  0x00000040
504*4882a593Smuzhiyun #define HI_CFG_HOST_INT_ACTIVE_LOW  0x00000080
505*4882a593Smuzhiyun #define HI_CFG_UART_TX_OUT_GPIO_15  0x00000100
506*4882a593Smuzhiyun #define HI_CFG_UART_TX_OUT_GPIO_14  0x00000200
507*4882a593Smuzhiyun #define HI_CFG_UART_TX_OUT_GPIO_7   0x00000400
508*4882a593Smuzhiyun 
509*4882a593Smuzhiyun #define HI_CFG_DEF_VAL              \
510*4882a593Smuzhiyun 	(HI_CFG_UART_ENABLE |        \
511*4882a593Smuzhiyun 	HI_CFG_RST232_ENABLE |      \
512*4882a593Smuzhiyun 	HI_CFG_CLOCK_REQ_SELECT |   \
513*4882a593Smuzhiyun 	HI_CFG_HOST_INT_ENABLE)
514*4882a593Smuzhiyun 
515*4882a593Smuzhiyun #define WL127X_REG_FUSE_DATA_2_1	0x050a
516*4882a593Smuzhiyun #define WL128X_REG_FUSE_DATA_2_1	0x2152
517*4882a593Smuzhiyun #define PG_VER_MASK			0x3c
518*4882a593Smuzhiyun #define PG_VER_OFFSET			2
519*4882a593Smuzhiyun 
520*4882a593Smuzhiyun #define WL127X_PG_MAJOR_VER_MASK	0x3
521*4882a593Smuzhiyun #define WL127X_PG_MAJOR_VER_OFFSET	0x0
522*4882a593Smuzhiyun #define WL127X_PG_MINOR_VER_MASK	0xc
523*4882a593Smuzhiyun #define WL127X_PG_MINOR_VER_OFFSET	0x2
524*4882a593Smuzhiyun 
525*4882a593Smuzhiyun #define WL128X_PG_MAJOR_VER_MASK	0xc
526*4882a593Smuzhiyun #define WL128X_PG_MAJOR_VER_OFFSET	0x2
527*4882a593Smuzhiyun #define WL128X_PG_MINOR_VER_MASK	0x3
528*4882a593Smuzhiyun #define WL128X_PG_MINOR_VER_OFFSET	0x0
529*4882a593Smuzhiyun 
530*4882a593Smuzhiyun #define WL127X_PG_GET_MAJOR(pg_ver) ((pg_ver & WL127X_PG_MAJOR_VER_MASK) >> \
531*4882a593Smuzhiyun 				     WL127X_PG_MAJOR_VER_OFFSET)
532*4882a593Smuzhiyun #define WL127X_PG_GET_MINOR(pg_ver) ((pg_ver & WL127X_PG_MINOR_VER_MASK) >> \
533*4882a593Smuzhiyun 				     WL127X_PG_MINOR_VER_OFFSET)
534*4882a593Smuzhiyun #define WL128X_PG_GET_MAJOR(pg_ver) ((pg_ver & WL128X_PG_MAJOR_VER_MASK) >> \
535*4882a593Smuzhiyun 				     WL128X_PG_MAJOR_VER_OFFSET)
536*4882a593Smuzhiyun #define WL128X_PG_GET_MINOR(pg_ver) ((pg_ver & WL128X_PG_MINOR_VER_MASK) >> \
537*4882a593Smuzhiyun 				     WL128X_PG_MINOR_VER_OFFSET)
538*4882a593Smuzhiyun 
539*4882a593Smuzhiyun #define WL12XX_REG_FUSE_BD_ADDR_1	0x00310eb4
540*4882a593Smuzhiyun #define WL12XX_REG_FUSE_BD_ADDR_2	0x00310eb8
541*4882a593Smuzhiyun 
542*4882a593Smuzhiyun #endif
543