xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/ralink/rt2x00/rt73usb.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun 	Copyright (C) 2004 - 2009 Ivo van Doorn <IvDoorn@gmail.com>
4*4882a593Smuzhiyun 	<http://rt2x00.serialmonkey.com>
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun  */
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun /*
9*4882a593Smuzhiyun 	Module: rt73usb
10*4882a593Smuzhiyun 	Abstract: Data structures and registers for the rt73usb module.
11*4882a593Smuzhiyun 	Supported chipsets: rt2571W & rt2671.
12*4882a593Smuzhiyun  */
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun #ifndef RT73USB_H
15*4882a593Smuzhiyun #define RT73USB_H
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun /*
18*4882a593Smuzhiyun  * RF chip defines.
19*4882a593Smuzhiyun  */
20*4882a593Smuzhiyun #define RF5226				0x0001
21*4882a593Smuzhiyun #define RF2528				0x0002
22*4882a593Smuzhiyun #define RF5225				0x0003
23*4882a593Smuzhiyun #define RF2527				0x0004
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun /*
26*4882a593Smuzhiyun  * Signal information.
27*4882a593Smuzhiyun  * Default offset is required for RSSI <-> dBm conversion.
28*4882a593Smuzhiyun  */
29*4882a593Smuzhiyun #define DEFAULT_RSSI_OFFSET		120
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun /*
32*4882a593Smuzhiyun  * Register layout information.
33*4882a593Smuzhiyun  */
34*4882a593Smuzhiyun #define CSR_REG_BASE			0x3000
35*4882a593Smuzhiyun #define CSR_REG_SIZE			0x04b0
36*4882a593Smuzhiyun #define EEPROM_BASE			0x0000
37*4882a593Smuzhiyun #define EEPROM_SIZE			0x0100
38*4882a593Smuzhiyun #define BBP_BASE			0x0000
39*4882a593Smuzhiyun #define BBP_SIZE			0x0080
40*4882a593Smuzhiyun #define RF_BASE				0x0004
41*4882a593Smuzhiyun #define RF_SIZE				0x0010
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun /*
44*4882a593Smuzhiyun  * Number of TX queues.
45*4882a593Smuzhiyun  */
46*4882a593Smuzhiyun #define NUM_TX_QUEUES			4
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun /*
49*4882a593Smuzhiyun  * USB registers.
50*4882a593Smuzhiyun  */
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun /*
53*4882a593Smuzhiyun  * MCU_LEDCS: LED control for MCU Mailbox.
54*4882a593Smuzhiyun  */
55*4882a593Smuzhiyun #define MCU_LEDCS_LED_MODE		FIELD16(0x001f)
56*4882a593Smuzhiyun #define MCU_LEDCS_RADIO_STATUS		FIELD16(0x0020)
57*4882a593Smuzhiyun #define MCU_LEDCS_LINK_BG_STATUS	FIELD16(0x0040)
58*4882a593Smuzhiyun #define MCU_LEDCS_LINK_A_STATUS		FIELD16(0x0080)
59*4882a593Smuzhiyun #define MCU_LEDCS_POLARITY_GPIO_0	FIELD16(0x0100)
60*4882a593Smuzhiyun #define MCU_LEDCS_POLARITY_GPIO_1	FIELD16(0x0200)
61*4882a593Smuzhiyun #define MCU_LEDCS_POLARITY_GPIO_2	FIELD16(0x0400)
62*4882a593Smuzhiyun #define MCU_LEDCS_POLARITY_GPIO_3	FIELD16(0x0800)
63*4882a593Smuzhiyun #define MCU_LEDCS_POLARITY_GPIO_4	FIELD16(0x1000)
64*4882a593Smuzhiyun #define MCU_LEDCS_POLARITY_ACT		FIELD16(0x2000)
65*4882a593Smuzhiyun #define MCU_LEDCS_POLARITY_READY_BG	FIELD16(0x4000)
66*4882a593Smuzhiyun #define MCU_LEDCS_POLARITY_READY_A	FIELD16(0x8000)
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun /*
69*4882a593Smuzhiyun  * 8051 firmware image.
70*4882a593Smuzhiyun  */
71*4882a593Smuzhiyun #define FIRMWARE_RT2571			"rt73.bin"
72*4882a593Smuzhiyun #define FIRMWARE_IMAGE_BASE		0x0800
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun /*
75*4882a593Smuzhiyun  * Security key table memory.
76*4882a593Smuzhiyun  * 16 entries 32-byte for shared key table
77*4882a593Smuzhiyun  * 64 entries 32-byte for pairwise key table
78*4882a593Smuzhiyun  * 64 entries 8-byte for pairwise ta key table
79*4882a593Smuzhiyun  */
80*4882a593Smuzhiyun #define SHARED_KEY_TABLE_BASE		0x1000
81*4882a593Smuzhiyun #define PAIRWISE_KEY_TABLE_BASE		0x1200
82*4882a593Smuzhiyun #define PAIRWISE_TA_TABLE_BASE		0x1a00
83*4882a593Smuzhiyun 
84*4882a593Smuzhiyun #define SHARED_KEY_ENTRY(__idx) \
85*4882a593Smuzhiyun 	( SHARED_KEY_TABLE_BASE + \
86*4882a593Smuzhiyun 		((__idx) * sizeof(struct hw_key_entry)) )
87*4882a593Smuzhiyun #define PAIRWISE_KEY_ENTRY(__idx) \
88*4882a593Smuzhiyun 	( PAIRWISE_KEY_TABLE_BASE + \
89*4882a593Smuzhiyun 		((__idx) * sizeof(struct hw_key_entry)) )
90*4882a593Smuzhiyun #define PAIRWISE_TA_ENTRY(__idx) \
91*4882a593Smuzhiyun 	( PAIRWISE_TA_TABLE_BASE + \
92*4882a593Smuzhiyun 		((__idx) * sizeof(struct hw_pairwise_ta_entry)) )
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun struct hw_key_entry {
95*4882a593Smuzhiyun 	u8 key[16];
96*4882a593Smuzhiyun 	u8 tx_mic[8];
97*4882a593Smuzhiyun 	u8 rx_mic[8];
98*4882a593Smuzhiyun } __packed;
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun struct hw_pairwise_ta_entry {
101*4882a593Smuzhiyun 	u8 address[6];
102*4882a593Smuzhiyun 	u8 cipher;
103*4882a593Smuzhiyun 	u8 reserved;
104*4882a593Smuzhiyun } __packed;
105*4882a593Smuzhiyun 
106*4882a593Smuzhiyun /*
107*4882a593Smuzhiyun  * Since NULL frame won't be that long (256 byte),
108*4882a593Smuzhiyun  * We steal 16 tail bytes to save debugging settings.
109*4882a593Smuzhiyun  */
110*4882a593Smuzhiyun #define HW_DEBUG_SETTING_BASE		0x2bf0
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun /*
113*4882a593Smuzhiyun  * On-chip BEACON frame space.
114*4882a593Smuzhiyun  */
115*4882a593Smuzhiyun #define HW_BEACON_BASE0			0x2400
116*4882a593Smuzhiyun #define HW_BEACON_BASE1			0x2500
117*4882a593Smuzhiyun #define HW_BEACON_BASE2			0x2600
118*4882a593Smuzhiyun #define HW_BEACON_BASE3			0x2700
119*4882a593Smuzhiyun 
120*4882a593Smuzhiyun #define HW_BEACON_OFFSET(__index) \
121*4882a593Smuzhiyun 	( HW_BEACON_BASE0 + (__index * 0x0100) )
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun /*
124*4882a593Smuzhiyun  * MAC Control/Status Registers(CSR).
125*4882a593Smuzhiyun  * Some values are set in TU, whereas 1 TU == 1024 us.
126*4882a593Smuzhiyun  */
127*4882a593Smuzhiyun 
128*4882a593Smuzhiyun /*
129*4882a593Smuzhiyun  * MAC_CSR0: ASIC revision number.
130*4882a593Smuzhiyun  */
131*4882a593Smuzhiyun #define MAC_CSR0			0x3000
132*4882a593Smuzhiyun #define MAC_CSR0_REVISION		FIELD32(0x0000000f)
133*4882a593Smuzhiyun #define MAC_CSR0_CHIPSET		FIELD32(0x000ffff0)
134*4882a593Smuzhiyun 
135*4882a593Smuzhiyun /*
136*4882a593Smuzhiyun  * MAC_CSR1: System control register.
137*4882a593Smuzhiyun  * SOFT_RESET: Software reset bit, 1: reset, 0: normal.
138*4882a593Smuzhiyun  * BBP_RESET: Hardware reset BBP.
139*4882a593Smuzhiyun  * HOST_READY: Host is ready after initialization, 1: ready.
140*4882a593Smuzhiyun  */
141*4882a593Smuzhiyun #define MAC_CSR1			0x3004
142*4882a593Smuzhiyun #define MAC_CSR1_SOFT_RESET		FIELD32(0x00000001)
143*4882a593Smuzhiyun #define MAC_CSR1_BBP_RESET		FIELD32(0x00000002)
144*4882a593Smuzhiyun #define MAC_CSR1_HOST_READY		FIELD32(0x00000004)
145*4882a593Smuzhiyun 
146*4882a593Smuzhiyun /*
147*4882a593Smuzhiyun  * MAC_CSR2: STA MAC register 0.
148*4882a593Smuzhiyun  */
149*4882a593Smuzhiyun #define MAC_CSR2			0x3008
150*4882a593Smuzhiyun #define MAC_CSR2_BYTE0			FIELD32(0x000000ff)
151*4882a593Smuzhiyun #define MAC_CSR2_BYTE1			FIELD32(0x0000ff00)
152*4882a593Smuzhiyun #define MAC_CSR2_BYTE2			FIELD32(0x00ff0000)
153*4882a593Smuzhiyun #define MAC_CSR2_BYTE3			FIELD32(0xff000000)
154*4882a593Smuzhiyun 
155*4882a593Smuzhiyun /*
156*4882a593Smuzhiyun  * MAC_CSR3: STA MAC register 1.
157*4882a593Smuzhiyun  * UNICAST_TO_ME_MASK:
158*4882a593Smuzhiyun  *	Used to mask off bits from byte 5 of the MAC address
159*4882a593Smuzhiyun  *	to determine the UNICAST_TO_ME bit for RX frames.
160*4882a593Smuzhiyun  *	The full mask is complemented by BSS_ID_MASK:
161*4882a593Smuzhiyun  *		MASK = BSS_ID_MASK & UNICAST_TO_ME_MASK
162*4882a593Smuzhiyun  */
163*4882a593Smuzhiyun #define MAC_CSR3			0x300c
164*4882a593Smuzhiyun #define MAC_CSR3_BYTE4			FIELD32(0x000000ff)
165*4882a593Smuzhiyun #define MAC_CSR3_BYTE5			FIELD32(0x0000ff00)
166*4882a593Smuzhiyun #define MAC_CSR3_UNICAST_TO_ME_MASK	FIELD32(0x00ff0000)
167*4882a593Smuzhiyun 
168*4882a593Smuzhiyun /*
169*4882a593Smuzhiyun  * MAC_CSR4: BSSID register 0.
170*4882a593Smuzhiyun  */
171*4882a593Smuzhiyun #define MAC_CSR4			0x3010
172*4882a593Smuzhiyun #define MAC_CSR4_BYTE0			FIELD32(0x000000ff)
173*4882a593Smuzhiyun #define MAC_CSR4_BYTE1			FIELD32(0x0000ff00)
174*4882a593Smuzhiyun #define MAC_CSR4_BYTE2			FIELD32(0x00ff0000)
175*4882a593Smuzhiyun #define MAC_CSR4_BYTE3			FIELD32(0xff000000)
176*4882a593Smuzhiyun 
177*4882a593Smuzhiyun /*
178*4882a593Smuzhiyun  * MAC_CSR5: BSSID register 1.
179*4882a593Smuzhiyun  * BSS_ID_MASK:
180*4882a593Smuzhiyun  *	This mask is used to mask off bits 0 and 1 of byte 5 of the
181*4882a593Smuzhiyun  *	BSSID. This will make sure that those bits will be ignored
182*4882a593Smuzhiyun  *	when determining the MY_BSS of RX frames.
183*4882a593Smuzhiyun  *		0: 1-BSSID mode (BSS index = 0)
184*4882a593Smuzhiyun  *		1: 2-BSSID mode (BSS index: Byte5, bit 0)
185*4882a593Smuzhiyun  *		2: 2-BSSID mode (BSS index: byte5, bit 1)
186*4882a593Smuzhiyun  *		3: 4-BSSID mode (BSS index: byte5, bit 0 - 1)
187*4882a593Smuzhiyun  */
188*4882a593Smuzhiyun #define MAC_CSR5			0x3014
189*4882a593Smuzhiyun #define MAC_CSR5_BYTE4			FIELD32(0x000000ff)
190*4882a593Smuzhiyun #define MAC_CSR5_BYTE5			FIELD32(0x0000ff00)
191*4882a593Smuzhiyun #define MAC_CSR5_BSS_ID_MASK		FIELD32(0x00ff0000)
192*4882a593Smuzhiyun 
193*4882a593Smuzhiyun /*
194*4882a593Smuzhiyun  * MAC_CSR6: Maximum frame length register.
195*4882a593Smuzhiyun  */
196*4882a593Smuzhiyun #define MAC_CSR6			0x3018
197*4882a593Smuzhiyun #define MAC_CSR6_MAX_FRAME_UNIT		FIELD32(0x00000fff)
198*4882a593Smuzhiyun 
199*4882a593Smuzhiyun /*
200*4882a593Smuzhiyun  * MAC_CSR7: Reserved
201*4882a593Smuzhiyun  */
202*4882a593Smuzhiyun #define MAC_CSR7			0x301c
203*4882a593Smuzhiyun 
204*4882a593Smuzhiyun /*
205*4882a593Smuzhiyun  * MAC_CSR8: SIFS/EIFS register.
206*4882a593Smuzhiyun  * All units are in US.
207*4882a593Smuzhiyun  */
208*4882a593Smuzhiyun #define MAC_CSR8			0x3020
209*4882a593Smuzhiyun #define MAC_CSR8_SIFS			FIELD32(0x000000ff)
210*4882a593Smuzhiyun #define MAC_CSR8_SIFS_AFTER_RX_OFDM	FIELD32(0x0000ff00)
211*4882a593Smuzhiyun #define MAC_CSR8_EIFS			FIELD32(0xffff0000)
212*4882a593Smuzhiyun 
213*4882a593Smuzhiyun /*
214*4882a593Smuzhiyun  * MAC_CSR9: Back-Off control register.
215*4882a593Smuzhiyun  * SLOT_TIME: Slot time, default is 20us for 802.11BG.
216*4882a593Smuzhiyun  * CWMIN: Bit for Cwmin. default Cwmin is 31 (2^5 - 1).
217*4882a593Smuzhiyun  * CWMAX: Bit for Cwmax, default Cwmax is 1023 (2^10 - 1).
218*4882a593Smuzhiyun  * CW_SELECT: 1: CWmin/Cwmax select from register, 0:select from TxD.
219*4882a593Smuzhiyun  */
220*4882a593Smuzhiyun #define MAC_CSR9			0x3024
221*4882a593Smuzhiyun #define MAC_CSR9_SLOT_TIME		FIELD32(0x000000ff)
222*4882a593Smuzhiyun #define MAC_CSR9_CWMIN			FIELD32(0x00000f00)
223*4882a593Smuzhiyun #define MAC_CSR9_CWMAX			FIELD32(0x0000f000)
224*4882a593Smuzhiyun #define MAC_CSR9_CW_SELECT		FIELD32(0x00010000)
225*4882a593Smuzhiyun 
226*4882a593Smuzhiyun /*
227*4882a593Smuzhiyun  * MAC_CSR10: Power state configuration.
228*4882a593Smuzhiyun  */
229*4882a593Smuzhiyun #define MAC_CSR10			0x3028
230*4882a593Smuzhiyun 
231*4882a593Smuzhiyun /*
232*4882a593Smuzhiyun  * MAC_CSR11: Power saving transition time register.
233*4882a593Smuzhiyun  * DELAY_AFTER_TBCN: Delay after Tbcn expired in units of TU.
234*4882a593Smuzhiyun  * TBCN_BEFORE_WAKEUP: Number of beacon before wakeup.
235*4882a593Smuzhiyun  * WAKEUP_LATENCY: In unit of TU.
236*4882a593Smuzhiyun  */
237*4882a593Smuzhiyun #define MAC_CSR11			0x302c
238*4882a593Smuzhiyun #define MAC_CSR11_DELAY_AFTER_TBCN	FIELD32(0x000000ff)
239*4882a593Smuzhiyun #define MAC_CSR11_TBCN_BEFORE_WAKEUP	FIELD32(0x00007f00)
240*4882a593Smuzhiyun #define MAC_CSR11_AUTOWAKE		FIELD32(0x00008000)
241*4882a593Smuzhiyun #define MAC_CSR11_WAKEUP_LATENCY	FIELD32(0x000f0000)
242*4882a593Smuzhiyun 
243*4882a593Smuzhiyun /*
244*4882a593Smuzhiyun  * MAC_CSR12: Manual power control / status register (merge CSR20 & PWRCSR1).
245*4882a593Smuzhiyun  * CURRENT_STATE: 0:sleep, 1:awake.
246*4882a593Smuzhiyun  * FORCE_WAKEUP: This has higher priority than PUT_TO_SLEEP.
247*4882a593Smuzhiyun  * BBP_CURRENT_STATE: 0: BBP sleep, 1: BBP awake.
248*4882a593Smuzhiyun  */
249*4882a593Smuzhiyun #define MAC_CSR12			0x3030
250*4882a593Smuzhiyun #define MAC_CSR12_CURRENT_STATE		FIELD32(0x00000001)
251*4882a593Smuzhiyun #define MAC_CSR12_PUT_TO_SLEEP		FIELD32(0x00000002)
252*4882a593Smuzhiyun #define MAC_CSR12_FORCE_WAKEUP		FIELD32(0x00000004)
253*4882a593Smuzhiyun #define MAC_CSR12_BBP_CURRENT_STATE	FIELD32(0x00000008)
254*4882a593Smuzhiyun 
255*4882a593Smuzhiyun /*
256*4882a593Smuzhiyun  * MAC_CSR13: GPIO.
257*4882a593Smuzhiyun  *	MAC_CSR13_VALx: GPIO value
258*4882a593Smuzhiyun  *	MAC_CSR13_DIRx: GPIO direction: 0 = input; 1 = output
259*4882a593Smuzhiyun  */
260*4882a593Smuzhiyun #define MAC_CSR13			0x3034
261*4882a593Smuzhiyun #define MAC_CSR13_VAL0			FIELD32(0x00000001)
262*4882a593Smuzhiyun #define MAC_CSR13_VAL1			FIELD32(0x00000002)
263*4882a593Smuzhiyun #define MAC_CSR13_VAL2			FIELD32(0x00000004)
264*4882a593Smuzhiyun #define MAC_CSR13_VAL3			FIELD32(0x00000008)
265*4882a593Smuzhiyun #define MAC_CSR13_VAL4			FIELD32(0x00000010)
266*4882a593Smuzhiyun #define MAC_CSR13_VAL5			FIELD32(0x00000020)
267*4882a593Smuzhiyun #define MAC_CSR13_VAL6			FIELD32(0x00000040)
268*4882a593Smuzhiyun #define MAC_CSR13_VAL7			FIELD32(0x00000080)
269*4882a593Smuzhiyun #define MAC_CSR13_DIR0			FIELD32(0x00000100)
270*4882a593Smuzhiyun #define MAC_CSR13_DIR1			FIELD32(0x00000200)
271*4882a593Smuzhiyun #define MAC_CSR13_DIR2			FIELD32(0x00000400)
272*4882a593Smuzhiyun #define MAC_CSR13_DIR3			FIELD32(0x00000800)
273*4882a593Smuzhiyun #define MAC_CSR13_DIR4			FIELD32(0x00001000)
274*4882a593Smuzhiyun #define MAC_CSR13_DIR5			FIELD32(0x00002000)
275*4882a593Smuzhiyun #define MAC_CSR13_DIR6			FIELD32(0x00004000)
276*4882a593Smuzhiyun #define MAC_CSR13_DIR7			FIELD32(0x00008000)
277*4882a593Smuzhiyun 
278*4882a593Smuzhiyun /*
279*4882a593Smuzhiyun  * MAC_CSR14: LED control register.
280*4882a593Smuzhiyun  * ON_PERIOD: On period, default 70ms.
281*4882a593Smuzhiyun  * OFF_PERIOD: Off period, default 30ms.
282*4882a593Smuzhiyun  * HW_LED: HW TX activity, 1: normal OFF, 0: normal ON.
283*4882a593Smuzhiyun  * SW_LED: s/w LED, 1: ON, 0: OFF.
284*4882a593Smuzhiyun  * HW_LED_POLARITY: 0: active low, 1: active high.
285*4882a593Smuzhiyun  */
286*4882a593Smuzhiyun #define MAC_CSR14			0x3038
287*4882a593Smuzhiyun #define MAC_CSR14_ON_PERIOD		FIELD32(0x000000ff)
288*4882a593Smuzhiyun #define MAC_CSR14_OFF_PERIOD		FIELD32(0x0000ff00)
289*4882a593Smuzhiyun #define MAC_CSR14_HW_LED		FIELD32(0x00010000)
290*4882a593Smuzhiyun #define MAC_CSR14_SW_LED		FIELD32(0x00020000)
291*4882a593Smuzhiyun #define MAC_CSR14_HW_LED_POLARITY	FIELD32(0x00040000)
292*4882a593Smuzhiyun #define MAC_CSR14_SW_LED2		FIELD32(0x00080000)
293*4882a593Smuzhiyun 
294*4882a593Smuzhiyun /*
295*4882a593Smuzhiyun  * MAC_CSR15: NAV control.
296*4882a593Smuzhiyun  */
297*4882a593Smuzhiyun #define MAC_CSR15			0x303c
298*4882a593Smuzhiyun 
299*4882a593Smuzhiyun /*
300*4882a593Smuzhiyun  * TXRX control registers.
301*4882a593Smuzhiyun  * Some values are set in TU, whereas 1 TU == 1024 us.
302*4882a593Smuzhiyun  */
303*4882a593Smuzhiyun 
304*4882a593Smuzhiyun /*
305*4882a593Smuzhiyun  * TXRX_CSR0: TX/RX configuration register.
306*4882a593Smuzhiyun  * TSF_OFFSET: Default is 24.
307*4882a593Smuzhiyun  * AUTO_TX_SEQ: 1: ASIC auto replace sequence nr in outgoing frame.
308*4882a593Smuzhiyun  * DISABLE_RX: Disable Rx engine.
309*4882a593Smuzhiyun  * DROP_CRC: Drop CRC error.
310*4882a593Smuzhiyun  * DROP_PHYSICAL: Drop physical error.
311*4882a593Smuzhiyun  * DROP_CONTROL: Drop control frame.
312*4882a593Smuzhiyun  * DROP_NOT_TO_ME: Drop not to me unicast frame.
313*4882a593Smuzhiyun  * DROP_TO_DS: Drop fram ToDs bit is true.
314*4882a593Smuzhiyun  * DROP_VERSION_ERROR: Drop version error frame.
315*4882a593Smuzhiyun  * DROP_MULTICAST: Drop multicast frames.
316*4882a593Smuzhiyun  * DROP_BORADCAST: Drop broadcast frames.
317*4882a593Smuzhiyun  * DROP_ACK_CTS: Drop received ACK and CTS.
318*4882a593Smuzhiyun  */
319*4882a593Smuzhiyun #define TXRX_CSR0			0x3040
320*4882a593Smuzhiyun #define TXRX_CSR0_RX_ACK_TIMEOUT	FIELD32(0x000001ff)
321*4882a593Smuzhiyun #define TXRX_CSR0_TSF_OFFSET		FIELD32(0x00007e00)
322*4882a593Smuzhiyun #define TXRX_CSR0_AUTO_TX_SEQ		FIELD32(0x00008000)
323*4882a593Smuzhiyun #define TXRX_CSR0_DISABLE_RX		FIELD32(0x00010000)
324*4882a593Smuzhiyun #define TXRX_CSR0_DROP_CRC		FIELD32(0x00020000)
325*4882a593Smuzhiyun #define TXRX_CSR0_DROP_PHYSICAL		FIELD32(0x00040000)
326*4882a593Smuzhiyun #define TXRX_CSR0_DROP_CONTROL		FIELD32(0x00080000)
327*4882a593Smuzhiyun #define TXRX_CSR0_DROP_NOT_TO_ME	FIELD32(0x00100000)
328*4882a593Smuzhiyun #define TXRX_CSR0_DROP_TO_DS		FIELD32(0x00200000)
329*4882a593Smuzhiyun #define TXRX_CSR0_DROP_VERSION_ERROR	FIELD32(0x00400000)
330*4882a593Smuzhiyun #define TXRX_CSR0_DROP_MULTICAST	FIELD32(0x00800000)
331*4882a593Smuzhiyun #define TXRX_CSR0_DROP_BROADCAST	FIELD32(0x01000000)
332*4882a593Smuzhiyun #define TXRX_CSR0_DROP_ACK_CTS		FIELD32(0x02000000)
333*4882a593Smuzhiyun #define TXRX_CSR0_TX_WITHOUT_WAITING	FIELD32(0x04000000)
334*4882a593Smuzhiyun 
335*4882a593Smuzhiyun /*
336*4882a593Smuzhiyun  * TXRX_CSR1
337*4882a593Smuzhiyun  */
338*4882a593Smuzhiyun #define TXRX_CSR1			0x3044
339*4882a593Smuzhiyun #define TXRX_CSR1_BBP_ID0		FIELD32(0x0000007f)
340*4882a593Smuzhiyun #define TXRX_CSR1_BBP_ID0_VALID		FIELD32(0x00000080)
341*4882a593Smuzhiyun #define TXRX_CSR1_BBP_ID1		FIELD32(0x00007f00)
342*4882a593Smuzhiyun #define TXRX_CSR1_BBP_ID1_VALID		FIELD32(0x00008000)
343*4882a593Smuzhiyun #define TXRX_CSR1_BBP_ID2		FIELD32(0x007f0000)
344*4882a593Smuzhiyun #define TXRX_CSR1_BBP_ID2_VALID		FIELD32(0x00800000)
345*4882a593Smuzhiyun #define TXRX_CSR1_BBP_ID3		FIELD32(0x7f000000)
346*4882a593Smuzhiyun #define TXRX_CSR1_BBP_ID3_VALID		FIELD32(0x80000000)
347*4882a593Smuzhiyun 
348*4882a593Smuzhiyun /*
349*4882a593Smuzhiyun  * TXRX_CSR2
350*4882a593Smuzhiyun  */
351*4882a593Smuzhiyun #define TXRX_CSR2			0x3048
352*4882a593Smuzhiyun #define TXRX_CSR2_BBP_ID0		FIELD32(0x0000007f)
353*4882a593Smuzhiyun #define TXRX_CSR2_BBP_ID0_VALID		FIELD32(0x00000080)
354*4882a593Smuzhiyun #define TXRX_CSR2_BBP_ID1		FIELD32(0x00007f00)
355*4882a593Smuzhiyun #define TXRX_CSR2_BBP_ID1_VALID		FIELD32(0x00008000)
356*4882a593Smuzhiyun #define TXRX_CSR2_BBP_ID2		FIELD32(0x007f0000)
357*4882a593Smuzhiyun #define TXRX_CSR2_BBP_ID2_VALID		FIELD32(0x00800000)
358*4882a593Smuzhiyun #define TXRX_CSR2_BBP_ID3		FIELD32(0x7f000000)
359*4882a593Smuzhiyun #define TXRX_CSR2_BBP_ID3_VALID		FIELD32(0x80000000)
360*4882a593Smuzhiyun 
361*4882a593Smuzhiyun /*
362*4882a593Smuzhiyun  * TXRX_CSR3
363*4882a593Smuzhiyun  */
364*4882a593Smuzhiyun #define TXRX_CSR3			0x304c
365*4882a593Smuzhiyun #define TXRX_CSR3_BBP_ID0		FIELD32(0x0000007f)
366*4882a593Smuzhiyun #define TXRX_CSR3_BBP_ID0_VALID		FIELD32(0x00000080)
367*4882a593Smuzhiyun #define TXRX_CSR3_BBP_ID1		FIELD32(0x00007f00)
368*4882a593Smuzhiyun #define TXRX_CSR3_BBP_ID1_VALID		FIELD32(0x00008000)
369*4882a593Smuzhiyun #define TXRX_CSR3_BBP_ID2		FIELD32(0x007f0000)
370*4882a593Smuzhiyun #define TXRX_CSR3_BBP_ID2_VALID		FIELD32(0x00800000)
371*4882a593Smuzhiyun #define TXRX_CSR3_BBP_ID3		FIELD32(0x7f000000)
372*4882a593Smuzhiyun #define TXRX_CSR3_BBP_ID3_VALID		FIELD32(0x80000000)
373*4882a593Smuzhiyun 
374*4882a593Smuzhiyun /*
375*4882a593Smuzhiyun  * TXRX_CSR4: Auto-Responder/Tx-retry register.
376*4882a593Smuzhiyun  * AUTORESPOND_PREAMBLE: 0:long, 1:short preamble.
377*4882a593Smuzhiyun  * OFDM_TX_RATE_DOWN: 1:enable.
378*4882a593Smuzhiyun  * OFDM_TX_RATE_STEP: 0:1-step, 1: 2-step, 2:3-step, 3:4-step.
379*4882a593Smuzhiyun  * OFDM_TX_FALLBACK_CCK: 0: Fallback to OFDM 6M only, 1: Fallback to CCK 1M,2M.
380*4882a593Smuzhiyun  */
381*4882a593Smuzhiyun #define TXRX_CSR4			0x3050
382*4882a593Smuzhiyun #define TXRX_CSR4_TX_ACK_TIMEOUT	FIELD32(0x000000ff)
383*4882a593Smuzhiyun #define TXRX_CSR4_CNTL_ACK_POLICY	FIELD32(0x00000700)
384*4882a593Smuzhiyun #define TXRX_CSR4_ACK_CTS_PSM		FIELD32(0x00010000)
385*4882a593Smuzhiyun #define TXRX_CSR4_AUTORESPOND_ENABLE	FIELD32(0x00020000)
386*4882a593Smuzhiyun #define TXRX_CSR4_AUTORESPOND_PREAMBLE	FIELD32(0x00040000)
387*4882a593Smuzhiyun #define TXRX_CSR4_OFDM_TX_RATE_DOWN	FIELD32(0x00080000)
388*4882a593Smuzhiyun #define TXRX_CSR4_OFDM_TX_RATE_STEP	FIELD32(0x00300000)
389*4882a593Smuzhiyun #define TXRX_CSR4_OFDM_TX_FALLBACK_CCK	FIELD32(0x00400000)
390*4882a593Smuzhiyun #define TXRX_CSR4_LONG_RETRY_LIMIT	FIELD32(0x0f000000)
391*4882a593Smuzhiyun #define TXRX_CSR4_SHORT_RETRY_LIMIT	FIELD32(0xf0000000)
392*4882a593Smuzhiyun 
393*4882a593Smuzhiyun /*
394*4882a593Smuzhiyun  * TXRX_CSR5
395*4882a593Smuzhiyun  */
396*4882a593Smuzhiyun #define TXRX_CSR5			0x3054
397*4882a593Smuzhiyun 
398*4882a593Smuzhiyun /*
399*4882a593Smuzhiyun  * TXRX_CSR6: ACK/CTS payload consumed time
400*4882a593Smuzhiyun  */
401*4882a593Smuzhiyun #define TXRX_CSR6			0x3058
402*4882a593Smuzhiyun 
403*4882a593Smuzhiyun /*
404*4882a593Smuzhiyun  * TXRX_CSR7: OFDM ACK/CTS payload consumed time for 6/9/12/18 mbps.
405*4882a593Smuzhiyun  */
406*4882a593Smuzhiyun #define TXRX_CSR7			0x305c
407*4882a593Smuzhiyun #define TXRX_CSR7_ACK_CTS_6MBS		FIELD32(0x000000ff)
408*4882a593Smuzhiyun #define TXRX_CSR7_ACK_CTS_9MBS		FIELD32(0x0000ff00)
409*4882a593Smuzhiyun #define TXRX_CSR7_ACK_CTS_12MBS		FIELD32(0x00ff0000)
410*4882a593Smuzhiyun #define TXRX_CSR7_ACK_CTS_18MBS		FIELD32(0xff000000)
411*4882a593Smuzhiyun 
412*4882a593Smuzhiyun /*
413*4882a593Smuzhiyun  * TXRX_CSR8: OFDM ACK/CTS payload consumed time for 24/36/48/54 mbps.
414*4882a593Smuzhiyun  */
415*4882a593Smuzhiyun #define TXRX_CSR8			0x3060
416*4882a593Smuzhiyun #define TXRX_CSR8_ACK_CTS_24MBS		FIELD32(0x000000ff)
417*4882a593Smuzhiyun #define TXRX_CSR8_ACK_CTS_36MBS		FIELD32(0x0000ff00)
418*4882a593Smuzhiyun #define TXRX_CSR8_ACK_CTS_48MBS		FIELD32(0x00ff0000)
419*4882a593Smuzhiyun #define TXRX_CSR8_ACK_CTS_54MBS		FIELD32(0xff000000)
420*4882a593Smuzhiyun 
421*4882a593Smuzhiyun /*
422*4882a593Smuzhiyun  * TXRX_CSR9: Synchronization control register.
423*4882a593Smuzhiyun  * BEACON_INTERVAL: In unit of 1/16 TU.
424*4882a593Smuzhiyun  * TSF_TICKING: Enable TSF auto counting.
425*4882a593Smuzhiyun  * TSF_SYNC: Tsf sync, 0: disable, 1: infra, 2: ad-hoc/master mode.
426*4882a593Smuzhiyun  * BEACON_GEN: Enable beacon generator.
427*4882a593Smuzhiyun  */
428*4882a593Smuzhiyun #define TXRX_CSR9			0x3064
429*4882a593Smuzhiyun #define TXRX_CSR9_BEACON_INTERVAL	FIELD32(0x0000ffff)
430*4882a593Smuzhiyun #define TXRX_CSR9_TSF_TICKING		FIELD32(0x00010000)
431*4882a593Smuzhiyun #define TXRX_CSR9_TSF_SYNC		FIELD32(0x00060000)
432*4882a593Smuzhiyun #define TXRX_CSR9_TBTT_ENABLE		FIELD32(0x00080000)
433*4882a593Smuzhiyun #define TXRX_CSR9_BEACON_GEN		FIELD32(0x00100000)
434*4882a593Smuzhiyun #define TXRX_CSR9_TIMESTAMP_COMPENSATE	FIELD32(0xff000000)
435*4882a593Smuzhiyun 
436*4882a593Smuzhiyun /*
437*4882a593Smuzhiyun  * TXRX_CSR10: BEACON alignment.
438*4882a593Smuzhiyun  */
439*4882a593Smuzhiyun #define TXRX_CSR10			0x3068
440*4882a593Smuzhiyun 
441*4882a593Smuzhiyun /*
442*4882a593Smuzhiyun  * TXRX_CSR11: AES mask.
443*4882a593Smuzhiyun  */
444*4882a593Smuzhiyun #define TXRX_CSR11			0x306c
445*4882a593Smuzhiyun 
446*4882a593Smuzhiyun /*
447*4882a593Smuzhiyun  * TXRX_CSR12: TSF low 32.
448*4882a593Smuzhiyun  */
449*4882a593Smuzhiyun #define TXRX_CSR12			0x3070
450*4882a593Smuzhiyun #define TXRX_CSR12_LOW_TSFTIMER		FIELD32(0xffffffff)
451*4882a593Smuzhiyun 
452*4882a593Smuzhiyun /*
453*4882a593Smuzhiyun  * TXRX_CSR13: TSF high 32.
454*4882a593Smuzhiyun  */
455*4882a593Smuzhiyun #define TXRX_CSR13			0x3074
456*4882a593Smuzhiyun #define TXRX_CSR13_HIGH_TSFTIMER	FIELD32(0xffffffff)
457*4882a593Smuzhiyun 
458*4882a593Smuzhiyun /*
459*4882a593Smuzhiyun  * TXRX_CSR14: TBTT timer.
460*4882a593Smuzhiyun  */
461*4882a593Smuzhiyun #define TXRX_CSR14			0x3078
462*4882a593Smuzhiyun 
463*4882a593Smuzhiyun /*
464*4882a593Smuzhiyun  * TXRX_CSR15: TKIP MIC priority byte "AND" mask.
465*4882a593Smuzhiyun  */
466*4882a593Smuzhiyun #define TXRX_CSR15			0x307c
467*4882a593Smuzhiyun 
468*4882a593Smuzhiyun /*
469*4882a593Smuzhiyun  * PHY control registers.
470*4882a593Smuzhiyun  * Some values are set in TU, whereas 1 TU == 1024 us.
471*4882a593Smuzhiyun  */
472*4882a593Smuzhiyun 
473*4882a593Smuzhiyun /*
474*4882a593Smuzhiyun  * PHY_CSR0: RF/PS control.
475*4882a593Smuzhiyun  */
476*4882a593Smuzhiyun #define PHY_CSR0			0x3080
477*4882a593Smuzhiyun #define PHY_CSR0_PA_PE_BG		FIELD32(0x00010000)
478*4882a593Smuzhiyun #define PHY_CSR0_PA_PE_A		FIELD32(0x00020000)
479*4882a593Smuzhiyun 
480*4882a593Smuzhiyun /*
481*4882a593Smuzhiyun  * PHY_CSR1
482*4882a593Smuzhiyun  */
483*4882a593Smuzhiyun #define PHY_CSR1			0x3084
484*4882a593Smuzhiyun #define PHY_CSR1_RF_RPI			FIELD32(0x00010000)
485*4882a593Smuzhiyun 
486*4882a593Smuzhiyun /*
487*4882a593Smuzhiyun  * PHY_CSR2: Pre-TX BBP control.
488*4882a593Smuzhiyun  */
489*4882a593Smuzhiyun #define PHY_CSR2			0x3088
490*4882a593Smuzhiyun 
491*4882a593Smuzhiyun /*
492*4882a593Smuzhiyun  * PHY_CSR3: BBP serial control register.
493*4882a593Smuzhiyun  * VALUE: Register value to program into BBP.
494*4882a593Smuzhiyun  * REG_NUM: Selected BBP register.
495*4882a593Smuzhiyun  * READ_CONTROL: 0: Write BBP, 1: Read BBP.
496*4882a593Smuzhiyun  * BUSY: 1: ASIC is busy execute BBP programming.
497*4882a593Smuzhiyun  */
498*4882a593Smuzhiyun #define PHY_CSR3			0x308c
499*4882a593Smuzhiyun #define PHY_CSR3_VALUE			FIELD32(0x000000ff)
500*4882a593Smuzhiyun #define PHY_CSR3_REGNUM			FIELD32(0x00007f00)
501*4882a593Smuzhiyun #define PHY_CSR3_READ_CONTROL		FIELD32(0x00008000)
502*4882a593Smuzhiyun #define PHY_CSR3_BUSY			FIELD32(0x00010000)
503*4882a593Smuzhiyun 
504*4882a593Smuzhiyun /*
505*4882a593Smuzhiyun  * PHY_CSR4: RF serial control register
506*4882a593Smuzhiyun  * VALUE: Register value (include register id) serial out to RF/IF chip.
507*4882a593Smuzhiyun  * NUMBER_OF_BITS: Number of bits used in RFRegValue (I:20, RFMD:22).
508*4882a593Smuzhiyun  * IF_SELECT: 1: select IF to program, 0: select RF to program.
509*4882a593Smuzhiyun  * PLL_LD: RF PLL_LD status.
510*4882a593Smuzhiyun  * BUSY: 1: ASIC is busy execute RF programming.
511*4882a593Smuzhiyun  */
512*4882a593Smuzhiyun #define PHY_CSR4			0x3090
513*4882a593Smuzhiyun #define PHY_CSR4_VALUE			FIELD32(0x00ffffff)
514*4882a593Smuzhiyun #define PHY_CSR4_NUMBER_OF_BITS		FIELD32(0x1f000000)
515*4882a593Smuzhiyun #define PHY_CSR4_IF_SELECT		FIELD32(0x20000000)
516*4882a593Smuzhiyun #define PHY_CSR4_PLL_LD			FIELD32(0x40000000)
517*4882a593Smuzhiyun #define PHY_CSR4_BUSY			FIELD32(0x80000000)
518*4882a593Smuzhiyun 
519*4882a593Smuzhiyun /*
520*4882a593Smuzhiyun  * PHY_CSR5: RX to TX signal switch timing control.
521*4882a593Smuzhiyun  */
522*4882a593Smuzhiyun #define PHY_CSR5			0x3094
523*4882a593Smuzhiyun #define PHY_CSR5_IQ_FLIP		FIELD32(0x00000004)
524*4882a593Smuzhiyun 
525*4882a593Smuzhiyun /*
526*4882a593Smuzhiyun  * PHY_CSR6: TX to RX signal timing control.
527*4882a593Smuzhiyun  */
528*4882a593Smuzhiyun #define PHY_CSR6			0x3098
529*4882a593Smuzhiyun #define PHY_CSR6_IQ_FLIP		FIELD32(0x00000004)
530*4882a593Smuzhiyun 
531*4882a593Smuzhiyun /*
532*4882a593Smuzhiyun  * PHY_CSR7: TX DAC switching timing control.
533*4882a593Smuzhiyun  */
534*4882a593Smuzhiyun #define PHY_CSR7			0x309c
535*4882a593Smuzhiyun 
536*4882a593Smuzhiyun /*
537*4882a593Smuzhiyun  * Security control register.
538*4882a593Smuzhiyun  */
539*4882a593Smuzhiyun 
540*4882a593Smuzhiyun /*
541*4882a593Smuzhiyun  * SEC_CSR0: Shared key table control.
542*4882a593Smuzhiyun  */
543*4882a593Smuzhiyun #define SEC_CSR0			0x30a0
544*4882a593Smuzhiyun #define SEC_CSR0_BSS0_KEY0_VALID	FIELD32(0x00000001)
545*4882a593Smuzhiyun #define SEC_CSR0_BSS0_KEY1_VALID	FIELD32(0x00000002)
546*4882a593Smuzhiyun #define SEC_CSR0_BSS0_KEY2_VALID	FIELD32(0x00000004)
547*4882a593Smuzhiyun #define SEC_CSR0_BSS0_KEY3_VALID	FIELD32(0x00000008)
548*4882a593Smuzhiyun #define SEC_CSR0_BSS1_KEY0_VALID	FIELD32(0x00000010)
549*4882a593Smuzhiyun #define SEC_CSR0_BSS1_KEY1_VALID	FIELD32(0x00000020)
550*4882a593Smuzhiyun #define SEC_CSR0_BSS1_KEY2_VALID	FIELD32(0x00000040)
551*4882a593Smuzhiyun #define SEC_CSR0_BSS1_KEY3_VALID	FIELD32(0x00000080)
552*4882a593Smuzhiyun #define SEC_CSR0_BSS2_KEY0_VALID	FIELD32(0x00000100)
553*4882a593Smuzhiyun #define SEC_CSR0_BSS2_KEY1_VALID	FIELD32(0x00000200)
554*4882a593Smuzhiyun #define SEC_CSR0_BSS2_KEY2_VALID	FIELD32(0x00000400)
555*4882a593Smuzhiyun #define SEC_CSR0_BSS2_KEY3_VALID	FIELD32(0x00000800)
556*4882a593Smuzhiyun #define SEC_CSR0_BSS3_KEY0_VALID	FIELD32(0x00001000)
557*4882a593Smuzhiyun #define SEC_CSR0_BSS3_KEY1_VALID	FIELD32(0x00002000)
558*4882a593Smuzhiyun #define SEC_CSR0_BSS3_KEY2_VALID	FIELD32(0x00004000)
559*4882a593Smuzhiyun #define SEC_CSR0_BSS3_KEY3_VALID	FIELD32(0x00008000)
560*4882a593Smuzhiyun 
561*4882a593Smuzhiyun /*
562*4882a593Smuzhiyun  * SEC_CSR1: Shared key table security mode register.
563*4882a593Smuzhiyun  */
564*4882a593Smuzhiyun #define SEC_CSR1			0x30a4
565*4882a593Smuzhiyun #define SEC_CSR1_BSS0_KEY0_CIPHER_ALG	FIELD32(0x00000007)
566*4882a593Smuzhiyun #define SEC_CSR1_BSS0_KEY1_CIPHER_ALG	FIELD32(0x00000070)
567*4882a593Smuzhiyun #define SEC_CSR1_BSS0_KEY2_CIPHER_ALG	FIELD32(0x00000700)
568*4882a593Smuzhiyun #define SEC_CSR1_BSS0_KEY3_CIPHER_ALG	FIELD32(0x00007000)
569*4882a593Smuzhiyun #define SEC_CSR1_BSS1_KEY0_CIPHER_ALG	FIELD32(0x00070000)
570*4882a593Smuzhiyun #define SEC_CSR1_BSS1_KEY1_CIPHER_ALG	FIELD32(0x00700000)
571*4882a593Smuzhiyun #define SEC_CSR1_BSS1_KEY2_CIPHER_ALG	FIELD32(0x07000000)
572*4882a593Smuzhiyun #define SEC_CSR1_BSS1_KEY3_CIPHER_ALG	FIELD32(0x70000000)
573*4882a593Smuzhiyun 
574*4882a593Smuzhiyun /*
575*4882a593Smuzhiyun  * Pairwise key table valid bitmap registers.
576*4882a593Smuzhiyun  * SEC_CSR2: pairwise key table valid bitmap 0.
577*4882a593Smuzhiyun  * SEC_CSR3: pairwise key table valid bitmap 1.
578*4882a593Smuzhiyun  */
579*4882a593Smuzhiyun #define SEC_CSR2			0x30a8
580*4882a593Smuzhiyun #define SEC_CSR3			0x30ac
581*4882a593Smuzhiyun 
582*4882a593Smuzhiyun /*
583*4882a593Smuzhiyun  * SEC_CSR4: Pairwise key table lookup control.
584*4882a593Smuzhiyun  */
585*4882a593Smuzhiyun #define SEC_CSR4			0x30b0
586*4882a593Smuzhiyun #define SEC_CSR4_ENABLE_BSS0		FIELD32(0x00000001)
587*4882a593Smuzhiyun #define SEC_CSR4_ENABLE_BSS1		FIELD32(0x00000002)
588*4882a593Smuzhiyun #define SEC_CSR4_ENABLE_BSS2		FIELD32(0x00000004)
589*4882a593Smuzhiyun #define SEC_CSR4_ENABLE_BSS3		FIELD32(0x00000008)
590*4882a593Smuzhiyun 
591*4882a593Smuzhiyun /*
592*4882a593Smuzhiyun  * SEC_CSR5: shared key table security mode register.
593*4882a593Smuzhiyun  */
594*4882a593Smuzhiyun #define SEC_CSR5			0x30b4
595*4882a593Smuzhiyun #define SEC_CSR5_BSS2_KEY0_CIPHER_ALG	FIELD32(0x00000007)
596*4882a593Smuzhiyun #define SEC_CSR5_BSS2_KEY1_CIPHER_ALG	FIELD32(0x00000070)
597*4882a593Smuzhiyun #define SEC_CSR5_BSS2_KEY2_CIPHER_ALG	FIELD32(0x00000700)
598*4882a593Smuzhiyun #define SEC_CSR5_BSS2_KEY3_CIPHER_ALG	FIELD32(0x00007000)
599*4882a593Smuzhiyun #define SEC_CSR5_BSS3_KEY0_CIPHER_ALG	FIELD32(0x00070000)
600*4882a593Smuzhiyun #define SEC_CSR5_BSS3_KEY1_CIPHER_ALG	FIELD32(0x00700000)
601*4882a593Smuzhiyun #define SEC_CSR5_BSS3_KEY2_CIPHER_ALG	FIELD32(0x07000000)
602*4882a593Smuzhiyun #define SEC_CSR5_BSS3_KEY3_CIPHER_ALG	FIELD32(0x70000000)
603*4882a593Smuzhiyun 
604*4882a593Smuzhiyun /*
605*4882a593Smuzhiyun  * STA control registers.
606*4882a593Smuzhiyun  */
607*4882a593Smuzhiyun 
608*4882a593Smuzhiyun /*
609*4882a593Smuzhiyun  * STA_CSR0: RX PLCP error count & RX FCS error count.
610*4882a593Smuzhiyun  */
611*4882a593Smuzhiyun #define STA_CSR0			0x30c0
612*4882a593Smuzhiyun #define STA_CSR0_FCS_ERROR		FIELD32(0x0000ffff)
613*4882a593Smuzhiyun #define STA_CSR0_PLCP_ERROR		FIELD32(0xffff0000)
614*4882a593Smuzhiyun 
615*4882a593Smuzhiyun /*
616*4882a593Smuzhiyun  * STA_CSR1: RX False CCA count & RX LONG frame count.
617*4882a593Smuzhiyun  */
618*4882a593Smuzhiyun #define STA_CSR1			0x30c4
619*4882a593Smuzhiyun #define STA_CSR1_PHYSICAL_ERROR		FIELD32(0x0000ffff)
620*4882a593Smuzhiyun #define STA_CSR1_FALSE_CCA_ERROR	FIELD32(0xffff0000)
621*4882a593Smuzhiyun 
622*4882a593Smuzhiyun /*
623*4882a593Smuzhiyun  * STA_CSR2: TX Beacon count and RX FIFO overflow count.
624*4882a593Smuzhiyun  */
625*4882a593Smuzhiyun #define STA_CSR2			0x30c8
626*4882a593Smuzhiyun #define STA_CSR2_RX_FIFO_OVERFLOW_COUNT	FIELD32(0x0000ffff)
627*4882a593Smuzhiyun #define STA_CSR2_RX_OVERFLOW_COUNT	FIELD32(0xffff0000)
628*4882a593Smuzhiyun 
629*4882a593Smuzhiyun /*
630*4882a593Smuzhiyun  * STA_CSR3: TX Beacon count.
631*4882a593Smuzhiyun  */
632*4882a593Smuzhiyun #define STA_CSR3			0x30cc
633*4882a593Smuzhiyun #define STA_CSR3_TX_BEACON_COUNT	FIELD32(0x0000ffff)
634*4882a593Smuzhiyun 
635*4882a593Smuzhiyun /*
636*4882a593Smuzhiyun  * STA_CSR4: TX Retry count.
637*4882a593Smuzhiyun  */
638*4882a593Smuzhiyun #define STA_CSR4			0x30d0
639*4882a593Smuzhiyun #define STA_CSR4_TX_NO_RETRY_COUNT	FIELD32(0x0000ffff)
640*4882a593Smuzhiyun #define STA_CSR4_TX_ONE_RETRY_COUNT	FIELD32(0xffff0000)
641*4882a593Smuzhiyun 
642*4882a593Smuzhiyun /*
643*4882a593Smuzhiyun  * STA_CSR5: TX Retry count.
644*4882a593Smuzhiyun  */
645*4882a593Smuzhiyun #define STA_CSR5			0x30d4
646*4882a593Smuzhiyun #define STA_CSR4_TX_MULTI_RETRY_COUNT	FIELD32(0x0000ffff)
647*4882a593Smuzhiyun #define STA_CSR4_TX_RETRY_FAIL_COUNT	FIELD32(0xffff0000)
648*4882a593Smuzhiyun 
649*4882a593Smuzhiyun /*
650*4882a593Smuzhiyun  * QOS control registers.
651*4882a593Smuzhiyun  */
652*4882a593Smuzhiyun 
653*4882a593Smuzhiyun /*
654*4882a593Smuzhiyun  * QOS_CSR1: TXOP holder MAC address register.
655*4882a593Smuzhiyun  */
656*4882a593Smuzhiyun #define QOS_CSR1			0x30e4
657*4882a593Smuzhiyun #define QOS_CSR1_BYTE4			FIELD32(0x000000ff)
658*4882a593Smuzhiyun #define QOS_CSR1_BYTE5			FIELD32(0x0000ff00)
659*4882a593Smuzhiyun 
660*4882a593Smuzhiyun /*
661*4882a593Smuzhiyun  * QOS_CSR2: TXOP holder timeout register.
662*4882a593Smuzhiyun  */
663*4882a593Smuzhiyun #define QOS_CSR2			0x30e8
664*4882a593Smuzhiyun 
665*4882a593Smuzhiyun /*
666*4882a593Smuzhiyun  * RX QOS-CFPOLL MAC address register.
667*4882a593Smuzhiyun  * QOS_CSR3: RX QOS-CFPOLL MAC address 0.
668*4882a593Smuzhiyun  * QOS_CSR4: RX QOS-CFPOLL MAC address 1.
669*4882a593Smuzhiyun  */
670*4882a593Smuzhiyun #define QOS_CSR3			0x30ec
671*4882a593Smuzhiyun #define QOS_CSR4			0x30f0
672*4882a593Smuzhiyun 
673*4882a593Smuzhiyun /*
674*4882a593Smuzhiyun  * QOS_CSR5: "QosControl" field of the RX QOS-CFPOLL.
675*4882a593Smuzhiyun  */
676*4882a593Smuzhiyun #define QOS_CSR5			0x30f4
677*4882a593Smuzhiyun 
678*4882a593Smuzhiyun /*
679*4882a593Smuzhiyun  * WMM Scheduler Register
680*4882a593Smuzhiyun  */
681*4882a593Smuzhiyun 
682*4882a593Smuzhiyun /*
683*4882a593Smuzhiyun  * AIFSN_CSR: AIFSN for each EDCA AC.
684*4882a593Smuzhiyun  * AIFSN0: For AC_VO.
685*4882a593Smuzhiyun  * AIFSN1: For AC_VI.
686*4882a593Smuzhiyun  * AIFSN2: For AC_BE.
687*4882a593Smuzhiyun  * AIFSN3: For AC_BK.
688*4882a593Smuzhiyun  */
689*4882a593Smuzhiyun #define AIFSN_CSR			0x0400
690*4882a593Smuzhiyun #define AIFSN_CSR_AIFSN0		FIELD32(0x0000000f)
691*4882a593Smuzhiyun #define AIFSN_CSR_AIFSN1		FIELD32(0x000000f0)
692*4882a593Smuzhiyun #define AIFSN_CSR_AIFSN2		FIELD32(0x00000f00)
693*4882a593Smuzhiyun #define AIFSN_CSR_AIFSN3		FIELD32(0x0000f000)
694*4882a593Smuzhiyun 
695*4882a593Smuzhiyun /*
696*4882a593Smuzhiyun  * CWMIN_CSR: CWmin for each EDCA AC.
697*4882a593Smuzhiyun  * CWMIN0: For AC_VO.
698*4882a593Smuzhiyun  * CWMIN1: For AC_VI.
699*4882a593Smuzhiyun  * CWMIN2: For AC_BE.
700*4882a593Smuzhiyun  * CWMIN3: For AC_BK.
701*4882a593Smuzhiyun  */
702*4882a593Smuzhiyun #define CWMIN_CSR			0x0404
703*4882a593Smuzhiyun #define CWMIN_CSR_CWMIN0		FIELD32(0x0000000f)
704*4882a593Smuzhiyun #define CWMIN_CSR_CWMIN1		FIELD32(0x000000f0)
705*4882a593Smuzhiyun #define CWMIN_CSR_CWMIN2		FIELD32(0x00000f00)
706*4882a593Smuzhiyun #define CWMIN_CSR_CWMIN3		FIELD32(0x0000f000)
707*4882a593Smuzhiyun 
708*4882a593Smuzhiyun /*
709*4882a593Smuzhiyun  * CWMAX_CSR: CWmax for each EDCA AC.
710*4882a593Smuzhiyun  * CWMAX0: For AC_VO.
711*4882a593Smuzhiyun  * CWMAX1: For AC_VI.
712*4882a593Smuzhiyun  * CWMAX2: For AC_BE.
713*4882a593Smuzhiyun  * CWMAX3: For AC_BK.
714*4882a593Smuzhiyun  */
715*4882a593Smuzhiyun #define CWMAX_CSR			0x0408
716*4882a593Smuzhiyun #define CWMAX_CSR_CWMAX0		FIELD32(0x0000000f)
717*4882a593Smuzhiyun #define CWMAX_CSR_CWMAX1		FIELD32(0x000000f0)
718*4882a593Smuzhiyun #define CWMAX_CSR_CWMAX2		FIELD32(0x00000f00)
719*4882a593Smuzhiyun #define CWMAX_CSR_CWMAX3		FIELD32(0x0000f000)
720*4882a593Smuzhiyun 
721*4882a593Smuzhiyun /*
722*4882a593Smuzhiyun  * AC_TXOP_CSR0: AC_VO/AC_VI TXOP register.
723*4882a593Smuzhiyun  * AC0_TX_OP: For AC_VO, in unit of 32us.
724*4882a593Smuzhiyun  * AC1_TX_OP: For AC_VI, in unit of 32us.
725*4882a593Smuzhiyun  */
726*4882a593Smuzhiyun #define AC_TXOP_CSR0			0x040c
727*4882a593Smuzhiyun #define AC_TXOP_CSR0_AC0_TX_OP		FIELD32(0x0000ffff)
728*4882a593Smuzhiyun #define AC_TXOP_CSR0_AC1_TX_OP		FIELD32(0xffff0000)
729*4882a593Smuzhiyun 
730*4882a593Smuzhiyun /*
731*4882a593Smuzhiyun  * AC_TXOP_CSR1: AC_BE/AC_BK TXOP register.
732*4882a593Smuzhiyun  * AC2_TX_OP: For AC_BE, in unit of 32us.
733*4882a593Smuzhiyun  * AC3_TX_OP: For AC_BK, in unit of 32us.
734*4882a593Smuzhiyun  */
735*4882a593Smuzhiyun #define AC_TXOP_CSR1			0x0410
736*4882a593Smuzhiyun #define AC_TXOP_CSR1_AC2_TX_OP		FIELD32(0x0000ffff)
737*4882a593Smuzhiyun #define AC_TXOP_CSR1_AC3_TX_OP		FIELD32(0xffff0000)
738*4882a593Smuzhiyun 
739*4882a593Smuzhiyun /*
740*4882a593Smuzhiyun  * BBP registers.
741*4882a593Smuzhiyun  * The wordsize of the BBP is 8 bits.
742*4882a593Smuzhiyun  */
743*4882a593Smuzhiyun 
744*4882a593Smuzhiyun /*
745*4882a593Smuzhiyun  * R2
746*4882a593Smuzhiyun  */
747*4882a593Smuzhiyun #define BBP_R2_BG_MODE			FIELD8(0x20)
748*4882a593Smuzhiyun 
749*4882a593Smuzhiyun /*
750*4882a593Smuzhiyun  * R3
751*4882a593Smuzhiyun  */
752*4882a593Smuzhiyun #define BBP_R3_SMART_MODE		FIELD8(0x01)
753*4882a593Smuzhiyun 
754*4882a593Smuzhiyun /*
755*4882a593Smuzhiyun  * R4: RX antenna control
756*4882a593Smuzhiyun  * FRAME_END: 1 - DPDT, 0 - SPDT (Only valid for 802.11G, RF2527 & RF2529)
757*4882a593Smuzhiyun  */
758*4882a593Smuzhiyun 
759*4882a593Smuzhiyun /*
760*4882a593Smuzhiyun  * ANTENNA_CONTROL semantics (guessed):
761*4882a593Smuzhiyun  * 0x1: Software controlled antenna switching (fixed or SW diversity)
762*4882a593Smuzhiyun  * 0x2: Hardware diversity.
763*4882a593Smuzhiyun  */
764*4882a593Smuzhiyun #define BBP_R4_RX_ANTENNA_CONTROL	FIELD8(0x03)
765*4882a593Smuzhiyun #define BBP_R4_RX_FRAME_END		FIELD8(0x20)
766*4882a593Smuzhiyun 
767*4882a593Smuzhiyun /*
768*4882a593Smuzhiyun  * R77
769*4882a593Smuzhiyun  */
770*4882a593Smuzhiyun #define BBP_R77_RX_ANTENNA		FIELD8(0x03)
771*4882a593Smuzhiyun 
772*4882a593Smuzhiyun /*
773*4882a593Smuzhiyun  * RF registers
774*4882a593Smuzhiyun  */
775*4882a593Smuzhiyun 
776*4882a593Smuzhiyun /*
777*4882a593Smuzhiyun  * RF 3
778*4882a593Smuzhiyun  */
779*4882a593Smuzhiyun #define RF3_TXPOWER			FIELD32(0x00003e00)
780*4882a593Smuzhiyun 
781*4882a593Smuzhiyun /*
782*4882a593Smuzhiyun  * RF 4
783*4882a593Smuzhiyun  */
784*4882a593Smuzhiyun #define RF4_FREQ_OFFSET			FIELD32(0x0003f000)
785*4882a593Smuzhiyun 
786*4882a593Smuzhiyun /*
787*4882a593Smuzhiyun  * EEPROM content.
788*4882a593Smuzhiyun  * The wordsize of the EEPROM is 16 bits.
789*4882a593Smuzhiyun  */
790*4882a593Smuzhiyun 
791*4882a593Smuzhiyun /*
792*4882a593Smuzhiyun  * HW MAC address.
793*4882a593Smuzhiyun  */
794*4882a593Smuzhiyun #define EEPROM_MAC_ADDR_0		0x0002
795*4882a593Smuzhiyun #define EEPROM_MAC_ADDR_BYTE0		FIELD16(0x00ff)
796*4882a593Smuzhiyun #define EEPROM_MAC_ADDR_BYTE1		FIELD16(0xff00)
797*4882a593Smuzhiyun #define EEPROM_MAC_ADDR1		0x0003
798*4882a593Smuzhiyun #define EEPROM_MAC_ADDR_BYTE2		FIELD16(0x00ff)
799*4882a593Smuzhiyun #define EEPROM_MAC_ADDR_BYTE3		FIELD16(0xff00)
800*4882a593Smuzhiyun #define EEPROM_MAC_ADDR_2		0x0004
801*4882a593Smuzhiyun #define EEPROM_MAC_ADDR_BYTE4		FIELD16(0x00ff)
802*4882a593Smuzhiyun #define EEPROM_MAC_ADDR_BYTE5		FIELD16(0xff00)
803*4882a593Smuzhiyun 
804*4882a593Smuzhiyun /*
805*4882a593Smuzhiyun  * EEPROM antenna.
806*4882a593Smuzhiyun  * ANTENNA_NUM: Number of antennas.
807*4882a593Smuzhiyun  * TX_DEFAULT: Default antenna 0: diversity, 1: A, 2: B.
808*4882a593Smuzhiyun  * RX_DEFAULT: Default antenna 0: diversity, 1: A, 2: B.
809*4882a593Smuzhiyun  * FRAME_TYPE: 0: DPDT , 1: SPDT , noted this bit is valid for g only.
810*4882a593Smuzhiyun  * DYN_TXAGC: Dynamic TX AGC control.
811*4882a593Smuzhiyun  * HARDWARE_RADIO: 1: Hardware controlled radio. Read GPIO0.
812*4882a593Smuzhiyun  * RF_TYPE: Rf_type of this adapter.
813*4882a593Smuzhiyun  */
814*4882a593Smuzhiyun #define EEPROM_ANTENNA			0x0010
815*4882a593Smuzhiyun #define EEPROM_ANTENNA_NUM		FIELD16(0x0003)
816*4882a593Smuzhiyun #define EEPROM_ANTENNA_TX_DEFAULT	FIELD16(0x000c)
817*4882a593Smuzhiyun #define EEPROM_ANTENNA_RX_DEFAULT	FIELD16(0x0030)
818*4882a593Smuzhiyun #define EEPROM_ANTENNA_FRAME_TYPE	FIELD16(0x0040)
819*4882a593Smuzhiyun #define EEPROM_ANTENNA_DYN_TXAGC	FIELD16(0x0200)
820*4882a593Smuzhiyun #define EEPROM_ANTENNA_HARDWARE_RADIO	FIELD16(0x0400)
821*4882a593Smuzhiyun #define EEPROM_ANTENNA_RF_TYPE		FIELD16(0xf800)
822*4882a593Smuzhiyun 
823*4882a593Smuzhiyun /*
824*4882a593Smuzhiyun  * EEPROM NIC config.
825*4882a593Smuzhiyun  * EXTERNAL_LNA: External LNA.
826*4882a593Smuzhiyun  */
827*4882a593Smuzhiyun #define EEPROM_NIC			0x0011
828*4882a593Smuzhiyun #define EEPROM_NIC_EXTERNAL_LNA		FIELD16(0x0010)
829*4882a593Smuzhiyun 
830*4882a593Smuzhiyun /*
831*4882a593Smuzhiyun  * EEPROM geography.
832*4882a593Smuzhiyun  * GEO_A: Default geographical setting for 5GHz band
833*4882a593Smuzhiyun  * GEO: Default geographical setting.
834*4882a593Smuzhiyun  */
835*4882a593Smuzhiyun #define EEPROM_GEOGRAPHY		0x0012
836*4882a593Smuzhiyun #define EEPROM_GEOGRAPHY_GEO_A		FIELD16(0x00ff)
837*4882a593Smuzhiyun #define EEPROM_GEOGRAPHY_GEO		FIELD16(0xff00)
838*4882a593Smuzhiyun 
839*4882a593Smuzhiyun /*
840*4882a593Smuzhiyun  * EEPROM BBP.
841*4882a593Smuzhiyun  */
842*4882a593Smuzhiyun #define EEPROM_BBP_START		0x0013
843*4882a593Smuzhiyun #define EEPROM_BBP_SIZE			16
844*4882a593Smuzhiyun #define EEPROM_BBP_VALUE		FIELD16(0x00ff)
845*4882a593Smuzhiyun #define EEPROM_BBP_REG_ID		FIELD16(0xff00)
846*4882a593Smuzhiyun 
847*4882a593Smuzhiyun /*
848*4882a593Smuzhiyun  * EEPROM TXPOWER 802.11G
849*4882a593Smuzhiyun  */
850*4882a593Smuzhiyun #define EEPROM_TXPOWER_G_START		0x0023
851*4882a593Smuzhiyun #define EEPROM_TXPOWER_G_SIZE		7
852*4882a593Smuzhiyun #define EEPROM_TXPOWER_G_1		FIELD16(0x00ff)
853*4882a593Smuzhiyun #define EEPROM_TXPOWER_G_2		FIELD16(0xff00)
854*4882a593Smuzhiyun 
855*4882a593Smuzhiyun /*
856*4882a593Smuzhiyun  * EEPROM Frequency
857*4882a593Smuzhiyun  */
858*4882a593Smuzhiyun #define EEPROM_FREQ			0x002f
859*4882a593Smuzhiyun #define EEPROM_FREQ_OFFSET		FIELD16(0x00ff)
860*4882a593Smuzhiyun #define EEPROM_FREQ_SEQ_MASK		FIELD16(0xff00)
861*4882a593Smuzhiyun #define EEPROM_FREQ_SEQ			FIELD16(0x0300)
862*4882a593Smuzhiyun 
863*4882a593Smuzhiyun /*
864*4882a593Smuzhiyun  * EEPROM LED.
865*4882a593Smuzhiyun  * POLARITY_RDY_G: Polarity RDY_G setting.
866*4882a593Smuzhiyun  * POLARITY_RDY_A: Polarity RDY_A setting.
867*4882a593Smuzhiyun  * POLARITY_ACT: Polarity ACT setting.
868*4882a593Smuzhiyun  * POLARITY_GPIO_0: Polarity GPIO0 setting.
869*4882a593Smuzhiyun  * POLARITY_GPIO_1: Polarity GPIO1 setting.
870*4882a593Smuzhiyun  * POLARITY_GPIO_2: Polarity GPIO2 setting.
871*4882a593Smuzhiyun  * POLARITY_GPIO_3: Polarity GPIO3 setting.
872*4882a593Smuzhiyun  * POLARITY_GPIO_4: Polarity GPIO4 setting.
873*4882a593Smuzhiyun  * LED_MODE: Led mode.
874*4882a593Smuzhiyun  */
875*4882a593Smuzhiyun #define EEPROM_LED			0x0030
876*4882a593Smuzhiyun #define EEPROM_LED_POLARITY_RDY_G	FIELD16(0x0001)
877*4882a593Smuzhiyun #define EEPROM_LED_POLARITY_RDY_A	FIELD16(0x0002)
878*4882a593Smuzhiyun #define EEPROM_LED_POLARITY_ACT		FIELD16(0x0004)
879*4882a593Smuzhiyun #define EEPROM_LED_POLARITY_GPIO_0	FIELD16(0x0008)
880*4882a593Smuzhiyun #define EEPROM_LED_POLARITY_GPIO_1	FIELD16(0x0010)
881*4882a593Smuzhiyun #define EEPROM_LED_POLARITY_GPIO_2	FIELD16(0x0020)
882*4882a593Smuzhiyun #define EEPROM_LED_POLARITY_GPIO_3	FIELD16(0x0040)
883*4882a593Smuzhiyun #define EEPROM_LED_POLARITY_GPIO_4	FIELD16(0x0080)
884*4882a593Smuzhiyun #define EEPROM_LED_LED_MODE		FIELD16(0x1f00)
885*4882a593Smuzhiyun 
886*4882a593Smuzhiyun /*
887*4882a593Smuzhiyun  * EEPROM TXPOWER 802.11A
888*4882a593Smuzhiyun  */
889*4882a593Smuzhiyun #define EEPROM_TXPOWER_A_START		0x0031
890*4882a593Smuzhiyun #define EEPROM_TXPOWER_A_SIZE		12
891*4882a593Smuzhiyun #define EEPROM_TXPOWER_A_1		FIELD16(0x00ff)
892*4882a593Smuzhiyun #define EEPROM_TXPOWER_A_2		FIELD16(0xff00)
893*4882a593Smuzhiyun 
894*4882a593Smuzhiyun /*
895*4882a593Smuzhiyun  * EEPROM RSSI offset 802.11BG
896*4882a593Smuzhiyun  */
897*4882a593Smuzhiyun #define EEPROM_RSSI_OFFSET_BG		0x004d
898*4882a593Smuzhiyun #define EEPROM_RSSI_OFFSET_BG_1		FIELD16(0x00ff)
899*4882a593Smuzhiyun #define EEPROM_RSSI_OFFSET_BG_2		FIELD16(0xff00)
900*4882a593Smuzhiyun 
901*4882a593Smuzhiyun /*
902*4882a593Smuzhiyun  * EEPROM RSSI offset 802.11A
903*4882a593Smuzhiyun  */
904*4882a593Smuzhiyun #define EEPROM_RSSI_OFFSET_A		0x004e
905*4882a593Smuzhiyun #define EEPROM_RSSI_OFFSET_A_1		FIELD16(0x00ff)
906*4882a593Smuzhiyun #define EEPROM_RSSI_OFFSET_A_2		FIELD16(0xff00)
907*4882a593Smuzhiyun 
908*4882a593Smuzhiyun /*
909*4882a593Smuzhiyun  * DMA descriptor defines.
910*4882a593Smuzhiyun  */
911*4882a593Smuzhiyun #define TXD_DESC_SIZE			( 6 * sizeof(__le32) )
912*4882a593Smuzhiyun #define TXINFO_SIZE			( 6 * sizeof(__le32) )
913*4882a593Smuzhiyun #define RXD_DESC_SIZE			( 6 * sizeof(__le32) )
914*4882a593Smuzhiyun 
915*4882a593Smuzhiyun /*
916*4882a593Smuzhiyun  * TX descriptor format for TX, PRIO and Beacon Ring.
917*4882a593Smuzhiyun  */
918*4882a593Smuzhiyun 
919*4882a593Smuzhiyun /*
920*4882a593Smuzhiyun  * Word0
921*4882a593Smuzhiyun  * BURST: Next frame belongs to same "burst" event.
922*4882a593Smuzhiyun  * TKIP_MIC: ASIC appends TKIP MIC if TKIP is used.
923*4882a593Smuzhiyun  * KEY_TABLE: Use per-client pairwise KEY table.
924*4882a593Smuzhiyun  * KEY_INDEX:
925*4882a593Smuzhiyun  * Key index (0~31) to the pairwise KEY table.
926*4882a593Smuzhiyun  * 0~3 to shared KEY table 0 (BSS0).
927*4882a593Smuzhiyun  * 4~7 to shared KEY table 1 (BSS1).
928*4882a593Smuzhiyun  * 8~11 to shared KEY table 2 (BSS2).
929*4882a593Smuzhiyun  * 12~15 to shared KEY table 3 (BSS3).
930*4882a593Smuzhiyun  * BURST2: For backward compatibility, set to same value as BURST.
931*4882a593Smuzhiyun  */
932*4882a593Smuzhiyun #define TXD_W0_BURST			FIELD32(0x00000001)
933*4882a593Smuzhiyun #define TXD_W0_VALID			FIELD32(0x00000002)
934*4882a593Smuzhiyun #define TXD_W0_MORE_FRAG		FIELD32(0x00000004)
935*4882a593Smuzhiyun #define TXD_W0_ACK			FIELD32(0x00000008)
936*4882a593Smuzhiyun #define TXD_W0_TIMESTAMP		FIELD32(0x00000010)
937*4882a593Smuzhiyun #define TXD_W0_OFDM			FIELD32(0x00000020)
938*4882a593Smuzhiyun #define TXD_W0_IFS			FIELD32(0x00000040)
939*4882a593Smuzhiyun #define TXD_W0_RETRY_MODE		FIELD32(0x00000080)
940*4882a593Smuzhiyun #define TXD_W0_TKIP_MIC			FIELD32(0x00000100)
941*4882a593Smuzhiyun #define TXD_W0_KEY_TABLE		FIELD32(0x00000200)
942*4882a593Smuzhiyun #define TXD_W0_KEY_INDEX		FIELD32(0x0000fc00)
943*4882a593Smuzhiyun #define TXD_W0_DATABYTE_COUNT		FIELD32(0x0fff0000)
944*4882a593Smuzhiyun #define TXD_W0_BURST2			FIELD32(0x10000000)
945*4882a593Smuzhiyun #define TXD_W0_CIPHER_ALG		FIELD32(0xe0000000)
946*4882a593Smuzhiyun 
947*4882a593Smuzhiyun /*
948*4882a593Smuzhiyun  * Word1
949*4882a593Smuzhiyun  * HOST_Q_ID: EDCA/HCCA queue ID.
950*4882a593Smuzhiyun  * HW_SEQUENCE: MAC overwrites the frame sequence number.
951*4882a593Smuzhiyun  * BUFFER_COUNT: Number of buffers in this TXD.
952*4882a593Smuzhiyun  */
953*4882a593Smuzhiyun #define TXD_W1_HOST_Q_ID		FIELD32(0x0000000f)
954*4882a593Smuzhiyun #define TXD_W1_AIFSN			FIELD32(0x000000f0)
955*4882a593Smuzhiyun #define TXD_W1_CWMIN			FIELD32(0x00000f00)
956*4882a593Smuzhiyun #define TXD_W1_CWMAX			FIELD32(0x0000f000)
957*4882a593Smuzhiyun #define TXD_W1_IV_OFFSET		FIELD32(0x003f0000)
958*4882a593Smuzhiyun #define TXD_W1_HW_SEQUENCE		FIELD32(0x10000000)
959*4882a593Smuzhiyun #define TXD_W1_BUFFER_COUNT		FIELD32(0xe0000000)
960*4882a593Smuzhiyun 
961*4882a593Smuzhiyun /*
962*4882a593Smuzhiyun  * Word2: PLCP information
963*4882a593Smuzhiyun  */
964*4882a593Smuzhiyun #define TXD_W2_PLCP_SIGNAL		FIELD32(0x000000ff)
965*4882a593Smuzhiyun #define TXD_W2_PLCP_SERVICE		FIELD32(0x0000ff00)
966*4882a593Smuzhiyun #define TXD_W2_PLCP_LENGTH_LOW		FIELD32(0x00ff0000)
967*4882a593Smuzhiyun #define TXD_W2_PLCP_LENGTH_HIGH		FIELD32(0xff000000)
968*4882a593Smuzhiyun 
969*4882a593Smuzhiyun /*
970*4882a593Smuzhiyun  * Word3
971*4882a593Smuzhiyun  */
972*4882a593Smuzhiyun #define TXD_W3_IV			FIELD32(0xffffffff)
973*4882a593Smuzhiyun 
974*4882a593Smuzhiyun /*
975*4882a593Smuzhiyun  * Word4
976*4882a593Smuzhiyun  */
977*4882a593Smuzhiyun #define TXD_W4_EIV			FIELD32(0xffffffff)
978*4882a593Smuzhiyun 
979*4882a593Smuzhiyun /*
980*4882a593Smuzhiyun  * Word5
981*4882a593Smuzhiyun  * FRAME_OFFSET: Frame start offset inside ASIC TXFIFO (after TXINFO field).
982*4882a593Smuzhiyun  * PACKET_ID: Driver assigned packet ID to categorize TXResult in interrupt.
983*4882a593Smuzhiyun  * WAITING_DMA_DONE_INT: TXD been filled with data
984*4882a593Smuzhiyun  * and waiting for TxDoneISR housekeeping.
985*4882a593Smuzhiyun  */
986*4882a593Smuzhiyun #define TXD_W5_FRAME_OFFSET		FIELD32(0x000000ff)
987*4882a593Smuzhiyun #define TXD_W5_PACKET_ID		FIELD32(0x0000ff00)
988*4882a593Smuzhiyun #define TXD_W5_TX_POWER			FIELD32(0x00ff0000)
989*4882a593Smuzhiyun #define TXD_W5_WAITING_DMA_DONE_INT	FIELD32(0x01000000)
990*4882a593Smuzhiyun 
991*4882a593Smuzhiyun /*
992*4882a593Smuzhiyun  * RX descriptor format for RX Ring.
993*4882a593Smuzhiyun  */
994*4882a593Smuzhiyun 
995*4882a593Smuzhiyun /*
996*4882a593Smuzhiyun  * Word0
997*4882a593Smuzhiyun  * CIPHER_ERROR: 1:ICV error, 2:MIC error, 3:invalid key.
998*4882a593Smuzhiyun  * KEY_INDEX: Decryption key actually used.
999*4882a593Smuzhiyun  */
1000*4882a593Smuzhiyun #define RXD_W0_OWNER_NIC		FIELD32(0x00000001)
1001*4882a593Smuzhiyun #define RXD_W0_DROP			FIELD32(0x00000002)
1002*4882a593Smuzhiyun #define RXD_W0_UNICAST_TO_ME		FIELD32(0x00000004)
1003*4882a593Smuzhiyun #define RXD_W0_MULTICAST		FIELD32(0x00000008)
1004*4882a593Smuzhiyun #define RXD_W0_BROADCAST		FIELD32(0x00000010)
1005*4882a593Smuzhiyun #define RXD_W0_MY_BSS			FIELD32(0x00000020)
1006*4882a593Smuzhiyun #define RXD_W0_CRC_ERROR		FIELD32(0x00000040)
1007*4882a593Smuzhiyun #define RXD_W0_OFDM			FIELD32(0x00000080)
1008*4882a593Smuzhiyun #define RXD_W0_CIPHER_ERROR		FIELD32(0x00000300)
1009*4882a593Smuzhiyun #define RXD_W0_KEY_INDEX		FIELD32(0x0000fc00)
1010*4882a593Smuzhiyun #define RXD_W0_DATABYTE_COUNT		FIELD32(0x0fff0000)
1011*4882a593Smuzhiyun #define RXD_W0_CIPHER_ALG		FIELD32(0xe0000000)
1012*4882a593Smuzhiyun 
1013*4882a593Smuzhiyun /*
1014*4882a593Smuzhiyun  * WORD1
1015*4882a593Smuzhiyun  * SIGNAL: RX raw data rate reported by BBP.
1016*4882a593Smuzhiyun  * RSSI: RSSI reported by BBP.
1017*4882a593Smuzhiyun  */
1018*4882a593Smuzhiyun #define RXD_W1_SIGNAL			FIELD32(0x000000ff)
1019*4882a593Smuzhiyun #define RXD_W1_RSSI_AGC			FIELD32(0x00001f00)
1020*4882a593Smuzhiyun #define RXD_W1_RSSI_LNA			FIELD32(0x00006000)
1021*4882a593Smuzhiyun #define RXD_W1_FRAME_OFFSET		FIELD32(0x7f000000)
1022*4882a593Smuzhiyun 
1023*4882a593Smuzhiyun /*
1024*4882a593Smuzhiyun  * Word2
1025*4882a593Smuzhiyun  * IV: Received IV of originally encrypted.
1026*4882a593Smuzhiyun  */
1027*4882a593Smuzhiyun #define RXD_W2_IV			FIELD32(0xffffffff)
1028*4882a593Smuzhiyun 
1029*4882a593Smuzhiyun /*
1030*4882a593Smuzhiyun  * Word3
1031*4882a593Smuzhiyun  * EIV: Received EIV of originally encrypted.
1032*4882a593Smuzhiyun  */
1033*4882a593Smuzhiyun #define RXD_W3_EIV			FIELD32(0xffffffff)
1034*4882a593Smuzhiyun 
1035*4882a593Smuzhiyun /*
1036*4882a593Smuzhiyun  * Word4
1037*4882a593Smuzhiyun  * ICV: Received ICV of originally encrypted.
1038*4882a593Smuzhiyun  * NOTE: This is a guess, the official definition is "reserved"
1039*4882a593Smuzhiyun  */
1040*4882a593Smuzhiyun #define RXD_W4_ICV			FIELD32(0xffffffff)
1041*4882a593Smuzhiyun 
1042*4882a593Smuzhiyun /*
1043*4882a593Smuzhiyun  * the above 20-byte is called RXINFO and will be DMAed to MAC RX block
1044*4882a593Smuzhiyun  * and passed to the HOST driver.
1045*4882a593Smuzhiyun  * The following fields are for DMA block and HOST usage only.
1046*4882a593Smuzhiyun  * Can't be touched by ASIC MAC block.
1047*4882a593Smuzhiyun  */
1048*4882a593Smuzhiyun 
1049*4882a593Smuzhiyun /*
1050*4882a593Smuzhiyun  * Word5
1051*4882a593Smuzhiyun  */
1052*4882a593Smuzhiyun #define RXD_W5_RESERVED			FIELD32(0xffffffff)
1053*4882a593Smuzhiyun 
1054*4882a593Smuzhiyun /*
1055*4882a593Smuzhiyun  * Macros for converting txpower from EEPROM to mac80211 value
1056*4882a593Smuzhiyun  * and from mac80211 value to register value.
1057*4882a593Smuzhiyun  */
1058*4882a593Smuzhiyun #define MIN_TXPOWER	0
1059*4882a593Smuzhiyun #define MAX_TXPOWER	31
1060*4882a593Smuzhiyun #define DEFAULT_TXPOWER	24
1061*4882a593Smuzhiyun 
1062*4882a593Smuzhiyun #define TXPOWER_FROM_DEV(__txpower) \
1063*4882a593Smuzhiyun 	(((u8)(__txpower)) > MAX_TXPOWER) ? DEFAULT_TXPOWER : (__txpower)
1064*4882a593Smuzhiyun 
1065*4882a593Smuzhiyun #define TXPOWER_TO_DEV(__txpower) \
1066*4882a593Smuzhiyun 	clamp_t(char, __txpower, MIN_TXPOWER, MAX_TXPOWER)
1067*4882a593Smuzhiyun 
1068*4882a593Smuzhiyun #endif /* RT73USB_H */
1069