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