xref: /onnv-gate/usr/src/uts/common/io/mwl/mwl_reg.h (revision 10741:26a74e07a95b)
1*10741SFei.Feng@Sun.COM /*
2*10741SFei.Feng@Sun.COM  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
3*10741SFei.Feng@Sun.COM  * Use is subject to license terms.
4*10741SFei.Feng@Sun.COM  */
5*10741SFei.Feng@Sun.COM 
6*10741SFei.Feng@Sun.COM /*
7*10741SFei.Feng@Sun.COM  * Copyright (c) 2007-2009 Sam Leffler, Errno Consulting
8*10741SFei.Feng@Sun.COM  * Copyright (c) 2007-2009 Marvell Semiconductor, Inc.
9*10741SFei.Feng@Sun.COM  * All rights reserved.
10*10741SFei.Feng@Sun.COM  *
11*10741SFei.Feng@Sun.COM  * Redistribution and use in source and binary forms, with or without
12*10741SFei.Feng@Sun.COM  * modification, are permitted provided that the following conditions
13*10741SFei.Feng@Sun.COM  * are met:
14*10741SFei.Feng@Sun.COM  * 1. Redistributions of source code must retain the above copyright
15*10741SFei.Feng@Sun.COM  *    notice, this list of conditions and the following disclaimer,
16*10741SFei.Feng@Sun.COM  *    without modification.
17*10741SFei.Feng@Sun.COM  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18*10741SFei.Feng@Sun.COM  *    similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
19*10741SFei.Feng@Sun.COM  *    redistribution must be conditioned upon including a substantially
20*10741SFei.Feng@Sun.COM  *    similar Disclaimer requirement for further binary redistribution.
21*10741SFei.Feng@Sun.COM  *
22*10741SFei.Feng@Sun.COM  * NO WARRANTY
23*10741SFei.Feng@Sun.COM  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24*10741SFei.Feng@Sun.COM  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25*10741SFei.Feng@Sun.COM  * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
26*10741SFei.Feng@Sun.COM  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
27*10741SFei.Feng@Sun.COM  * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
28*10741SFei.Feng@Sun.COM  * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29*10741SFei.Feng@Sun.COM  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30*10741SFei.Feng@Sun.COM  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
31*10741SFei.Feng@Sun.COM  * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32*10741SFei.Feng@Sun.COM  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
33*10741SFei.Feng@Sun.COM  * THE POSSIBILITY OF SUCH DAMAGES.
34*10741SFei.Feng@Sun.COM  */
35*10741SFei.Feng@Sun.COM 
36*10741SFei.Feng@Sun.COM /*
37*10741SFei.Feng@Sun.COM  * Definitions for the Marvell Wireless LAN controller Hardware Access Layer.
38*10741SFei.Feng@Sun.COM  */
39*10741SFei.Feng@Sun.COM 
40*10741SFei.Feng@Sun.COM #ifndef _MWL_REG_H
41*10741SFei.Feng@Sun.COM #define	_MWL_REG_H
42*10741SFei.Feng@Sun.COM 
43*10741SFei.Feng@Sun.COM #ifdef __cplusplus
44*10741SFei.Feng@Sun.COM extern "C" {
45*10741SFei.Feng@Sun.COM #endif
46*10741SFei.Feng@Sun.COM 
47*10741SFei.Feng@Sun.COM #define	MWL_MBSS_SUPPORT		/* enable multi-bss support */
48*10741SFei.Feng@Sun.COM 
49*10741SFei.Feng@Sun.COM /*
50*10741SFei.Feng@Sun.COM  * Host/Firmware Interface definitions.
51*10741SFei.Feng@Sun.COM  */
52*10741SFei.Feng@Sun.COM 
53*10741SFei.Feng@Sun.COM /*
54*10741SFei.Feng@Sun.COM  * Define total number of TX queues in the shared memory.
55*10741SFei.Feng@Sun.COM  * This count includes the EDCA queues, Block Ack queues, and HCCA queues
56*10741SFei.Feng@Sun.COM  * In addition to this, there could be a management packet queue some
57*10741SFei.Feng@Sun.COM  * time in the future
58*10741SFei.Feng@Sun.COM  */
59*10741SFei.Feng@Sun.COM #define	NUM_EDCA_QUEUES		4
60*10741SFei.Feng@Sun.COM #define	NUM_HCCA_QUEUES		0
61*10741SFei.Feng@Sun.COM #define	NUM_BA_QUEUES		0
62*10741SFei.Feng@Sun.COM #define	NUM_MGMT_QUEUES		0
63*10741SFei.Feng@Sun.COM #define	NUM_ACK_EVENT_QUEUE	1
64*10741SFei.Feng@Sun.COM #define	TOTAL_TX_QUEUES		\
65*10741SFei.Feng@Sun.COM 	(NUM_EDCA_QUEUES +	\
66*10741SFei.Feng@Sun.COM 	NUM_HCCA_QUEUES +	\
67*10741SFei.Feng@Sun.COM 	NUM_BA_QUEUES +		\
68*10741SFei.Feng@Sun.COM 	NUM_MGMT_QUEUES +	\
69*10741SFei.Feng@Sun.COM 	NUM_ACK_EVENT_QUEUE)
70*10741SFei.Feng@Sun.COM #define	MAX_TXWCB_QUEUES	TOTAL_TX_QUEUES - NUM_ACK_EVENT_QUEUE
71*10741SFei.Feng@Sun.COM #define	MAX_RXWCB_QUEUES	1
72*10741SFei.Feng@Sun.COM 
73*10741SFei.Feng@Sun.COM /*
74*10741SFei.Feng@Sun.COM  * Firmware download support.
75*10741SFei.Feng@Sun.COM  */
76*10741SFei.Feng@Sun.COM #define	FW_DOWNLOAD_BLOCK_SIZE	256
77*10741SFei.Feng@Sun.COM #define	FW_CHECK_USECS		(5*1000) /* 5ms */
78*10741SFei.Feng@Sun.COM #define	FW_MAX_NUM_CHECKS	200
79*10741SFei.Feng@Sun.COM 
80*10741SFei.Feng@Sun.COM #define	MWL_ANT_INFO_SUPPORT /* per-antenna data in rx descriptor */
81*10741SFei.Feng@Sun.COM 
82*10741SFei.Feng@Sun.COM #define	MACREG_REG_TSF_LOW	0xa600 /* TSF lo */
83*10741SFei.Feng@Sun.COM #define	MACREG_REG_TSF_HIGH	0xa604 /* TSF hi */
84*10741SFei.Feng@Sun.COM #define	MACREG_REG_CHIP_REV	0xa814 /* chip rev */
85*10741SFei.Feng@Sun.COM 
86*10741SFei.Feng@Sun.COM /*
87*10741SFei.Feng@Sun.COM  * Map to 0x80000000 (Bus control) on BAR0
88*10741SFei.Feng@Sun.COM  */
89*10741SFei.Feng@Sun.COM /* From host to ARM */
90*10741SFei.Feng@Sun.COM #define	MACREG_REG_H2A_INTERRUPT_EVENTS		0x00000C18
91*10741SFei.Feng@Sun.COM #define	MACREG_REG_H2A_INTERRUPT_CAUSE		0x00000C1C
92*10741SFei.Feng@Sun.COM #define	MACREG_REG_H2A_INTERRUPT_MASK		0x00000C20
93*10741SFei.Feng@Sun.COM #define	MACREG_REG_H2A_INTERRUPT_CLEAR_SEL	0x00000C24
94*10741SFei.Feng@Sun.COM #define	MACREG_REG_H2A_INTERRUPT_STATUS_MASK	0x00000C28
95*10741SFei.Feng@Sun.COM /* From ARM to host */
96*10741SFei.Feng@Sun.COM #define	MACREG_REG_A2H_INTERRUPT_EVENTS		0x00000C2C
97*10741SFei.Feng@Sun.COM #define	MACREG_REG_A2H_INTERRUPT_CAUSE		0x00000C30
98*10741SFei.Feng@Sun.COM #define	MACREG_REG_A2H_INTERRUPT_MASK		0x00000C34
99*10741SFei.Feng@Sun.COM #define	MACREG_REG_A2H_INTERRUPT_CLEAR_SEL	0x00000C38
100*10741SFei.Feng@Sun.COM #define	MACREG_REG_A2H_INTERRUPT_STATUS_MASK	0x00000C3C
101*10741SFei.Feng@Sun.COM 
102*10741SFei.Feng@Sun.COM 
103*10741SFei.Feng@Sun.COM /* Map to 0x80000000 on BAR1 */
104*10741SFei.Feng@Sun.COM #define	MACREG_REG_GEN_PTR		0x00000C10
105*10741SFei.Feng@Sun.COM #define	MACREG_REG_INT_CODE		0x00000C14
106*10741SFei.Feng@Sun.COM #define	MACREG_REG_SCRATCH		0x00000C40
107*10741SFei.Feng@Sun.COM #define	MACREG_REG_FW_PRESENT		0x0000BFFC
108*10741SFei.Feng@Sun.COM 
109*10741SFei.Feng@Sun.COM #define	MACREG_REG_PROMISCUOUS		0xA300
110*10741SFei.Feng@Sun.COM /* Bit definitio for MACREG_REG_A2H_INTERRUPT_CAUSE (A2HRIC) */
111*10741SFei.Feng@Sun.COM #define	MACREG_A2HRIC_BIT_TX_DONE	0x00000001 /* bit 0 */
112*10741SFei.Feng@Sun.COM #define	MACREG_A2HRIC_BIT_RX_RDY	0x00000002 /* bit 1 */
113*10741SFei.Feng@Sun.COM #define	MACREG_A2HRIC_BIT_OPC_DONE	0x00000004 /* bit 2 */
114*10741SFei.Feng@Sun.COM #define	MACREG_A2HRIC_BIT_MAC_EVENT	0x00000008 /* bit 3 */
115*10741SFei.Feng@Sun.COM #define	MACREG_A2HRIC_BIT_RX_PROBLEM	0x00000010 /* bit 4 */
116*10741SFei.Feng@Sun.COM 
117*10741SFei.Feng@Sun.COM #define	MACREG_A2HRIC_BIT_RADIO_OFF	0x00000020 /* bit 5 */
118*10741SFei.Feng@Sun.COM #define	MACREG_A2HRIC_BIT_RADIO_ON	0x00000040 /* bit 6 */
119*10741SFei.Feng@Sun.COM 
120*10741SFei.Feng@Sun.COM #define	MACREG_A2HRIC_BIT_RADAR_DETECT	0x00000080 /* bit 7 */
121*10741SFei.Feng@Sun.COM 
122*10741SFei.Feng@Sun.COM #define	MACREG_A2HRIC_BIT_ICV_ERROR	0x00000100 /* bit 8 */
123*10741SFei.Feng@Sun.COM #define	MACREG_A2HRIC_BIT_MIC_ERROR	0x00000200 /* bit 9 */
124*10741SFei.Feng@Sun.COM #define	MACREG_A2HRIC_BIT_QUEUE_EMPTY	0x00004000
125*10741SFei.Feng@Sun.COM #define	MACREG_A2HRIC_BIT_QUEUE_FULL	0x00000800
126*10741SFei.Feng@Sun.COM #define	MACREG_A2HRIC_BIT_CHAN_SWITCH	0x00001000
127*10741SFei.Feng@Sun.COM #define	MACREG_A2HRIC_BIT_TX_WATCHDOG	0x00002000
128*10741SFei.Feng@Sun.COM #define	MACREG_A2HRIC_BIT_BA_WATCHDOG	0x00000400
129*10741SFei.Feng@Sun.COM #define	MACREQ_A2HRIC_BIT_TX_ACK	0x00008000
130*10741SFei.Feng@Sun.COM #define	ISR_SRC_BITS	((MACREG_A2HRIC_BIT_RX_RDY)	| \
131*10741SFei.Feng@Sun.COM 			(MACREG_A2HRIC_BIT_TX_DONE)	| \
132*10741SFei.Feng@Sun.COM 			(MACREG_A2HRIC_BIT_OPC_DONE)	| \
133*10741SFei.Feng@Sun.COM 			(MACREG_A2HRIC_BIT_MAC_EVENT)	| \
134*10741SFei.Feng@Sun.COM 			(MACREG_A2HRIC_BIT_MIC_ERROR)	| \
135*10741SFei.Feng@Sun.COM 			(MACREG_A2HRIC_BIT_ICV_ERROR)	| \
136*10741SFei.Feng@Sun.COM 			(MACREG_A2HRIC_BIT_RADAR_DETECT)| \
137*10741SFei.Feng@Sun.COM 			(MACREG_A2HRIC_BIT_CHAN_SWITCH)	| \
138*10741SFei.Feng@Sun.COM 			(MACREG_A2HRIC_BIT_TX_WATCHDOG)	| \
139*10741SFei.Feng@Sun.COM 			(MACREG_A2HRIC_BIT_QUEUE_EMPTY)	| \
140*10741SFei.Feng@Sun.COM 			(MACREG_A2HRIC_BIT_BA_WATCHDOG)	| \
141*10741SFei.Feng@Sun.COM 			(MACREQ_A2HRIC_BIT_TX_ACK))
142*10741SFei.Feng@Sun.COM 
143*10741SFei.Feng@Sun.COM #define	MACREG_A2HRIC_BIT_MASK	ISR_SRC_BITS
144*10741SFei.Feng@Sun.COM 
145*10741SFei.Feng@Sun.COM /* Bit definitio for MACREG_REG_H2A_INTERRUPT_CAUSE (H2ARIC) */
146*10741SFei.Feng@Sun.COM #define	MACREG_H2ARIC_BIT_PPA_READY	0x00000001 /* bit 0 */
147*10741SFei.Feng@Sun.COM #define	MACREG_H2ARIC_BIT_DOOR_BELL	0x00000002 /* bit 1 */
148*10741SFei.Feng@Sun.COM #define	ISR_RESET			(1<<15)
149*10741SFei.Feng@Sun.COM 
150*10741SFei.Feng@Sun.COM /* INT code register event definition */
151*10741SFei.Feng@Sun.COM #define	MACREG_INT_CODE_CMD_FINISHED	0x00000005
152*10741SFei.Feng@Sun.COM 
153*10741SFei.Feng@Sun.COM /*
154*10741SFei.Feng@Sun.COM  * Define OpMode for SoftAP/Station mode
155*10741SFei.Feng@Sun.COM  */
156*10741SFei.Feng@Sun.COM 
157*10741SFei.Feng@Sun.COM /*
158*10741SFei.Feng@Sun.COM  * The following mode signature has to be written to PCI scratch register#0
159*10741SFei.Feng@Sun.COM  * right after successfully downloading the last block of firmware and
160*10741SFei.Feng@Sun.COM  * before waiting for firmware ready signature
161*10741SFei.Feng@Sun.COM  */
162*10741SFei.Feng@Sun.COM #define	HostCmd_STA_MODE		0x5A
163*10741SFei.Feng@Sun.COM #define	HostCmd_SOFTAP_MODE		0xA5
164*10741SFei.Feng@Sun.COM 
165*10741SFei.Feng@Sun.COM #define	HostCmd_STA_FWRDY_SIGNATURE	0xF0F1F2F4
166*10741SFei.Feng@Sun.COM #define	HostCmd_SOFTAP_FWRDY_SIGNATURE	0xF1F2F4A5
167*10741SFei.Feng@Sun.COM 
168*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_CODE_DNLD			0x0001
169*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_GET_HW_SPEC			0x0003
170*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_SET_HW_SPEC			0x0004
171*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_MAC_MULTICAST_ADR		0x0010
172*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_802_11_GET_STAT		0x0014
173*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_MAC_REG_ACCESS		0x0019
174*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_BBP_REG_ACCESS		0x001a
175*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_RF_REG_ACCESS		0x001b
176*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_802_11_RADIO_CONTROL	0x001c
177*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_802_11_RF_TX_POWER		0x001e
178*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_802_11_RF_ANTENNA		0x0020
179*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_SET_BEACON			0x0100
180*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_SET_AID			0x010d
181*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_SET_RF_CHANNEL		0x010a
182*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_SET_INFRA_MODE		0x010e
183*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_SET_G_PROTECT_FLAG		0x010f
184*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_802_11_RTS_THSD		0x0113
185*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_802_11_SET_SLOT		0x0114
186*10741SFei.Feng@Sun.COM 
187*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_802_11H_DETECT_RADAR	0x0120
188*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_SET_WMM_MODE		0x0123
189*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_HT_GUARD_INTERVAL		0x0124
190*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_SET_FIXED_RATE		0x0126
191*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_SET_LINKADAPT_CS_MODE	0x0129
192*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_SET_MAC_ADDR		0x0202
193*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_SET_RATE_ADAPT_MODE		0x0203
194*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_GET_WATCHDOG_BITMAP		0x0205
195*10741SFei.Feng@Sun.COM 
196*10741SFei.Feng@Sun.COM /* SoftAP command code */
197*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_BSS_START			0x1100
198*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_SET_NEW_STN			0x1111
199*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_SET_KEEP_ALIVE		0x1112
200*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_SET_APMODE			0x1114
201*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_SET_SWITCH_CHANNEL		0x1121
202*10741SFei.Feng@Sun.COM 
203*10741SFei.Feng@Sun.COM /*
204*10741SFei.Feng@Sun.COM  * @HWENCR@
205*10741SFei.Feng@Sun.COM  * Command to update firmware encryption keys.
206*10741SFei.Feng@Sun.COM  */
207*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_UPDATE_ENCRYPTION		0x1122
208*10741SFei.Feng@Sun.COM /*
209*10741SFei.Feng@Sun.COM  * @11E-BA@
210*10741SFei.Feng@Sun.COM  * Command to create/destroy block ACK
211*10741SFei.Feng@Sun.COM  */
212*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_BASTREAM			0x1125
213*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_SET_RIFS			0x1126
214*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_SET_N_PROTECT_FLAG		0x1131
215*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_SET_N_PROTECT_OPMODE	0x1132
216*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_SET_OPTIMIZATION_LEVEL	0x1133
217*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_GET_CALTABLE		0x1134
218*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_SET_MIMOPSHT		0x1135
219*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_GET_BEACON			0x1138
220*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_SET_REGION_CODE		0x1139
221*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_SET_POWERSAVESTATION	0x1140
222*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_SET_TIM			0x1141
223*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_GET_TIM			0x1142
224*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_GET_SEQNO			0x1143
225*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_DWDS_ENABLE			0x1144
226*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_AMPDU_RETRY_RATEDROP_MODE	0x1145
227*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_CFEND_ENABLE		0x1146
228*10741SFei.Feng@Sun.COM 
229*10741SFei.Feng@Sun.COM /*
230*10741SFei.Feng@Sun.COM  * Define general result code for each command
231*10741SFei.Feng@Sun.COM  */
232*10741SFei.Feng@Sun.COM /* RESULT OK */
233*10741SFei.Feng@Sun.COM #define	HostCmd_RESULT_OK		0x0000
234*10741SFei.Feng@Sun.COM /* Genenral error */
235*10741SFei.Feng@Sun.COM #define	HostCmd_RESULT_ERROR		0x0001
236*10741SFei.Feng@Sun.COM /* Command is not valid */
237*10741SFei.Feng@Sun.COM #define	HostCmd_RESULT_NOT_SUPPORT	0x0002
238*10741SFei.Feng@Sun.COM /* Command is pending (will be processed) */
239*10741SFei.Feng@Sun.COM #define	HostCmd_RESULT_PENDING		0x0003
240*10741SFei.Feng@Sun.COM /* System is busy (command ignored) */
241*10741SFei.Feng@Sun.COM #define	HostCmd_RESULT_BUSY		0x0004
242*10741SFei.Feng@Sun.COM /* Data buffer is not big enough */
243*10741SFei.Feng@Sun.COM #define	HostCmd_RESULT_PARTIAL_DATA	0x0005
244*10741SFei.Feng@Sun.COM 
245*10741SFei.Feng@Sun.COM #define	HostCmd_CMD_SET_EDCA_PARAMS	0x0115
246*10741SFei.Feng@Sun.COM 
247*10741SFei.Feng@Sun.COM /*
248*10741SFei.Feng@Sun.COM  * Definition of action or option for each command
249*10741SFei.Feng@Sun.COM  */
250*10741SFei.Feng@Sun.COM 
251*10741SFei.Feng@Sun.COM /*
252*10741SFei.Feng@Sun.COM  * Define general purpose action
253*10741SFei.Feng@Sun.COM  */
254*10741SFei.Feng@Sun.COM #define	HostCmd_ACT_GEN_READ	0x0000
255*10741SFei.Feng@Sun.COM #define	HostCmd_ACT_GEN_WRITE	0x0001
256*10741SFei.Feng@Sun.COM #define	HostCmd_ACT_GEN_GET	0x0000
257*10741SFei.Feng@Sun.COM #define	HostCmd_ACT_GEN_SET	0x0001
258*10741SFei.Feng@Sun.COM #define	HostCmd_ACT_GEN_OFF	0x0000
259*10741SFei.Feng@Sun.COM #define	HostCmd_ACT_GEN_ON	0x0001
260*10741SFei.Feng@Sun.COM 
261*10741SFei.Feng@Sun.COM #define	HostCmd_ACT_DIFF_CHANNEL	0x0002
262*10741SFei.Feng@Sun.COM #define	HostCmd_ACT_GEN_SET_LIST	0x0002
263*10741SFei.Feng@Sun.COM 
264*10741SFei.Feng@Sun.COM /* Define action or option for HostCmd_FW_USE_FIXED_RATE */
265*10741SFei.Feng@Sun.COM #define	HostCmd_ACT_USE_FIXED_RATE	0x0001
266*10741SFei.Feng@Sun.COM #define	HostCmd_ACT_NOT_USE_FIXED_RATE	0x0002
267*10741SFei.Feng@Sun.COM 
268*10741SFei.Feng@Sun.COM /* Define action or option for HostCmd_CMD_802_11_SET_WEP */
269*10741SFei.Feng@Sun.COM #define	HostCmd_ACT_ADD		0x0002
270*10741SFei.Feng@Sun.COM #define	HostCmd_ACT_REMOVE	0x0004
271*10741SFei.Feng@Sun.COM #define	HostCmd_ACT_USE_DEFAULT	0x0008
272*10741SFei.Feng@Sun.COM 
273*10741SFei.Feng@Sun.COM /*
274*10741SFei.Feng@Sun.COM  * PUBLIC DEFINITIONS
275*10741SFei.Feng@Sun.COM  */
276*10741SFei.Feng@Sun.COM #define	RATE_INDEX_MAX_ARRAY	14
277*10741SFei.Feng@Sun.COM #define	WOW_MAX_STATION		32
278*10741SFei.Feng@Sun.COM 
279*10741SFei.Feng@Sun.COM 
280*10741SFei.Feng@Sun.COM #pragma pack(1)
281*10741SFei.Feng@Sun.COM 
282*10741SFei.Feng@Sun.COM struct mwl_ant_info {
283*10741SFei.Feng@Sun.COM 	uint8_t		rssi_a;	/* RSSI for antenna A */
284*10741SFei.Feng@Sun.COM 	uint8_t		rssi_b;	/* RSSI for antenna B */
285*10741SFei.Feng@Sun.COM 	uint8_t		rssi_c;	/* RSSI for antenna C */
286*10741SFei.Feng@Sun.COM 	uint8_t		rsvd1;	/* Reserved */
287*10741SFei.Feng@Sun.COM 	uint8_t		nf_a;	/* Noise floor for antenna A */
288*10741SFei.Feng@Sun.COM 	uint8_t		nf_b;	/* Noise floor for antenna B */
289*10741SFei.Feng@Sun.COM 	uint8_t		nf_c;	/* Noise floor for antenna C */
290*10741SFei.Feng@Sun.COM 	uint8_t		rsvd2;	/* Reserved */
291*10741SFei.Feng@Sun.COM 	uint8_t		nf;	/* Noise floor */
292*10741SFei.Feng@Sun.COM 	uint8_t		rsvd3[3]; /* Reserved - To make word aligned */
293*10741SFei.Feng@Sun.COM };
294*10741SFei.Feng@Sun.COM 
295*10741SFei.Feng@Sun.COM /*
296*10741SFei.Feng@Sun.COM  * Hardware tx/rx descriptors.
297*10741SFei.Feng@Sun.COM  *
298*10741SFei.Feng@Sun.COM  * NB: tx descriptor size must match f/w expected size
299*10741SFei.Feng@Sun.COM  * because f/w prefetch's the next descriptor linearly
300*10741SFei.Feng@Sun.COM  * and doesn't chase the next pointer.
301*10741SFei.Feng@Sun.COM  */
302*10741SFei.Feng@Sun.COM struct mwl_txdesc {
303*10741SFei.Feng@Sun.COM 	uint32_t	Status;
304*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_STATUS_IDLE		0x00000000
305*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_STATUS_USED		0x00000001
306*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_STATUS_OK		0x00000001
307*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_STATUS_OK_RETRY	0x00000002
308*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_STATUS_OK_MORE_RETRY	0x00000004
309*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_STATUS_MULTICAST_TX	0x00000008
310*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_STATUS_BROADCAST_TX	0x00000010
311*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_STATUS_FAILED_LINK_ERROR		0x00000020
312*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_STATUS_FAILED_EXCEED_LIMIT		0x00000040
313*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_STATUS_FAILED_XRETRY	EAGLE_TXD_STATUS_FAILED_EXCEED_LIMIT
314*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_STATUS_FAILED_AGING	0x00000080
315*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_STATUS_FW_OWNED	0x80000000
316*10741SFei.Feng@Sun.COM 	uint8_t		DataRate;
317*10741SFei.Feng@Sun.COM 	uint8_t		TxPriority;
318*10741SFei.Feng@Sun.COM 	uint16_t	QosCtrl;
319*10741SFei.Feng@Sun.COM 	uint32_t	PktPtr;
320*10741SFei.Feng@Sun.COM 	uint16_t	PktLen;
321*10741SFei.Feng@Sun.COM 	uint8_t		DestAddr[6];
322*10741SFei.Feng@Sun.COM 	uint32_t	pPhysNext;
323*10741SFei.Feng@Sun.COM 	uint32_t	SapPktInfo;
324*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_MODE_BONLY	1
325*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_MODE_GONLY	2
326*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_MODE_BG	3
327*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_MODE_NONLY	4
328*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_MODE_BN	5
329*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_MODE_GN	6
330*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_MODE_BGN	7
331*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_MODE_AONLY	8
332*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_MODE_AG	10
333*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_MODE_AN	12
334*10741SFei.Feng@Sun.COM 	uint16_t	Format;
335*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_FORMAT	0x0001	/* frame format/rate */
336*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_FORMAT_LEGACY	0x0000	/* legacy rate frame */
337*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_FORMAT_HT	0x0001	/* HT rate frame */
338*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_GI		0x0002	/* guard interval */
339*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_GI_SHORT	0x0002	/* short guard interval */
340*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_GI_LONG	0x0000	/* long guard interval */
341*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_CHW		0x0004	/* channel width */
342*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_CHW_20	0x0000	/* 20MHz channel width */
343*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_CHW_40	0x0004	/* 40MHz channel width */
344*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_RATE		0x01f8	/* tx rate (legacy)/ MCS */
345*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_RATE_S	3
346*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_ADV		0x0600	/* advanced coding */
347*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_ADV_S		9
348*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_ADV_NONE	0x0000
349*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_ADV_LDPC	0x0200
350*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_ADV_RS	0x0400
351*10741SFei.Feng@Sun.COM /* NB: 3 is reserved */
352*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_ANTENNA	0x1800	/* antenna select */
353*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_ANTENNA_S	11
354*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_EXTCHAN	0x6000	/* extension channel */
355*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_EXTCHAN_S	13
356*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_EXTCHAN_HI	0x0000	/* above */
357*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_EXTCHAN_LO	0x2000	/* below */
358*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_PREAMBLE	0x8000
359*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_PREAMBLE_SHORT 0x8000	/* short preamble */
360*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_PREAMBLE_LONG 0x0000	/* long preamble */
361*10741SFei.Feng@Sun.COM 	uint16_t	pad;		/* align to 4-byte boundary */
362*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_FIXED_RATE	0x0100	/* get tx rate from Format */
363*10741SFei.Feng@Sun.COM #define	EAGLE_TXD_DONT_AGGR	0x0200	/* don't aggregate frame */
364*10741SFei.Feng@Sun.COM 	uint32_t	ack_wcb_addr;
365*10741SFei.Feng@Sun.COM };
366*10741SFei.Feng@Sun.COM 
367*10741SFei.Feng@Sun.COM struct mwl_rxdesc {
368*10741SFei.Feng@Sun.COM 	/* control element */
369*10741SFei.Feng@Sun.COM 	uint8_t		RxControl;
370*10741SFei.Feng@Sun.COM #define	EAGLE_RXD_CTRL_DRIVER_OWN	0x00
371*10741SFei.Feng@Sun.COM #define	EAGLE_RXD_CTRL_OS_OWN		0x04
372*10741SFei.Feng@Sun.COM #define	EAGLE_RXD_CTRL_DMA_OWN		0x80
373*10741SFei.Feng@Sun.COM 	/* received signal strengt indication */
374*10741SFei.Feng@Sun.COM 	uint8_t		RSSI;
375*10741SFei.Feng@Sun.COM 	/* status field w/ USED bit */
376*10741SFei.Feng@Sun.COM 	uint8_t		Status;
377*10741SFei.Feng@Sun.COM #define	EAGLE_RXD_STATUS_IDLE		0x00
378*10741SFei.Feng@Sun.COM #define	EAGLE_RXD_STATUS_OK		0x01
379*10741SFei.Feng@Sun.COM #define	EAGLE_RXD_STATUS_MULTICAST_RX	0x02
380*10741SFei.Feng@Sun.COM #define	EAGLE_RXD_STATUS_BROADCAST_RX	0x04
381*10741SFei.Feng@Sun.COM #define	EAGLE_RXD_STATUS_FRAGMENT_RX	0x08
382*10741SFei.Feng@Sun.COM #define	EAGLE_RXD_STATUS_GENERAL_DECRYPT_ERR	0xff
383*10741SFei.Feng@Sun.COM #define	EAGLE_RXD_STATUS_DECRYPT_ERR_MASK	0x80
384*10741SFei.Feng@Sun.COM #define	EAGLE_RXD_STATUS_TKIP_MIC_DECRYPT_ERR	0x02
385*10741SFei.Feng@Sun.COM #define	EAGLE_RXD_STATUS_WEP_ICV_DECRYPT_ERR	0x04
386*10741SFei.Feng@Sun.COM #define	EAGLE_RXD_STATUS_TKIP_ICV_DECRYPT_ERR	0x08
387*10741SFei.Feng@Sun.COM 	/* channel # pkt received on */
388*10741SFei.Feng@Sun.COM 	uint8_t		Channel;
389*10741SFei.Feng@Sun.COM 	/* total length of received data */
390*10741SFei.Feng@Sun.COM 	uint16_t	PktLen;
391*10741SFei.Feng@Sun.COM 	/* not used */
392*10741SFei.Feng@Sun.COM 	uint8_t		SQ2;
393*10741SFei.Feng@Sun.COM 	/* received data rate */
394*10741SFei.Feng@Sun.COM 	uint8_t		Rate;
395*10741SFei.Feng@Sun.COM 	/* physical address of payload data */
396*10741SFei.Feng@Sun.COM 	uint32_t	pPhysBuffData;
397*10741SFei.Feng@Sun.COM 	/* physical address of next RX desc */
398*10741SFei.Feng@Sun.COM 	uint32_t	pPhysNext;
399*10741SFei.Feng@Sun.COM 	/* received QosCtrl field variable */
400*10741SFei.Feng@Sun.COM 	uint16_t	QosCtrl;
401*10741SFei.Feng@Sun.COM 	/* like name states */
402*10741SFei.Feng@Sun.COM 	uint16_t	HtSig2;
403*10741SFei.Feng@Sun.COM #ifdef MWL_ANT_INFO_SUPPORT
404*10741SFei.Feng@Sun.COM 	/* antenna info */
405*10741SFei.Feng@Sun.COM 	struct mwl_ant_info ai;
406*10741SFei.Feng@Sun.COM #endif
407*10741SFei.Feng@Sun.COM };
408*10741SFei.Feng@Sun.COM #pragma pack()
409*10741SFei.Feng@Sun.COM 
410*10741SFei.Feng@Sun.COM 
411*10741SFei.Feng@Sun.COM 
412*10741SFei.Feng@Sun.COM // =============================================================================
413*10741SFei.Feng@Sun.COM //			HOST COMMAND DEFINITIONS
414*10741SFei.Feng@Sun.COM // =============================================================================
415*10741SFei.Feng@Sun.COM 
416*10741SFei.Feng@Sun.COM //
417*10741SFei.Feng@Sun.COM // Definition of data structure for each command
418*10741SFei.Feng@Sun.COM //
419*10741SFei.Feng@Sun.COM // Define general data structure
420*10741SFei.Feng@Sun.COM #pragma pack(1)
421*10741SFei.Feng@Sun.COM typedef struct {
422*10741SFei.Feng@Sun.COM 	uint16_t	Cmd;
423*10741SFei.Feng@Sun.COM 	uint16_t	Length;
424*10741SFei.Feng@Sun.COM #ifdef MWL_MBSS_SUPPORT
425*10741SFei.Feng@Sun.COM 	uint8_t		SeqNum;
426*10741SFei.Feng@Sun.COM 	uint8_t		MacId;
427*10741SFei.Feng@Sun.COM #else
428*10741SFei.Feng@Sun.COM 	uint16_t	SeqNum;
429*10741SFei.Feng@Sun.COM #endif
430*10741SFei.Feng@Sun.COM 	uint16_t	Result;
431*10741SFei.Feng@Sun.COM } FWCmdHdr;
432*10741SFei.Feng@Sun.COM 
433*10741SFei.Feng@Sun.COM typedef struct {
434*10741SFei.Feng@Sun.COM 	FWCmdHdr	CmdHdr;
435*10741SFei.Feng@Sun.COM 	uint8_t		annex;
436*10741SFei.Feng@Sun.COM 	uint8_t		index;
437*10741SFei.Feng@Sun.COM 	uint8_t		len;
438*10741SFei.Feng@Sun.COM 	uint8_t		Reserverd;
439*10741SFei.Feng@Sun.COM #define	CAL_TBL_SIZE	160
440*10741SFei.Feng@Sun.COM 	uint8_t	calTbl[CAL_TBL_SIZE];
441*10741SFei.Feng@Sun.COM } HostCmd_FW_GET_CALTABLE;
442*10741SFei.Feng@Sun.COM 
443*10741SFei.Feng@Sun.COM typedef struct {
444*10741SFei.Feng@Sun.COM 	FWCmdHdr	CmdHdr;
445*10741SFei.Feng@Sun.COM 	/* version of the HW */
446*10741SFei.Feng@Sun.COM 	uint8_t		Version;
447*10741SFei.Feng@Sun.COM 	/* host interface */
448*10741SFei.Feng@Sun.COM 	uint8_t		HostIf;
449*10741SFei.Feng@Sun.COM 	/* Max. number of WCB FW can handle */
450*10741SFei.Feng@Sun.COM 	uint16_t	NumOfWCB;
451*10741SFei.Feng@Sun.COM 	/* MaxNbr of MC addresses FW can handle */
452*10741SFei.Feng@Sun.COM 	uint16_t	NumOfMCastAddr;
453*10741SFei.Feng@Sun.COM 	/* MAC address programmed in HW */
454*10741SFei.Feng@Sun.COM 	uint8_t		PermanentAddr[6];
455*10741SFei.Feng@Sun.COM 	uint16_t	RegionCode;
456*10741SFei.Feng@Sun.COM 	/* Number of antenna used */
457*10741SFei.Feng@Sun.COM 	uint16_t	NumberOfAntenna;
458*10741SFei.Feng@Sun.COM 	/* 4 byte of FW release number */
459*10741SFei.Feng@Sun.COM 	uint32_t	FWReleaseNumber;
460*10741SFei.Feng@Sun.COM 	uint32_t	WcbBase0;
461*10741SFei.Feng@Sun.COM 	uint32_t	RxPdWrPtr;
462*10741SFei.Feng@Sun.COM 	uint32_t	RxPdRdPtr;
463*10741SFei.Feng@Sun.COM 	uint32_t	ulFwAwakeCookie;
464*10741SFei.Feng@Sun.COM 	uint32_t	WcbBase1[3];
465*10741SFei.Feng@Sun.COM } HostCmd_DS_GET_HW_SPEC;
466*10741SFei.Feng@Sun.COM 
467*10741SFei.Feng@Sun.COM typedef struct {
468*10741SFei.Feng@Sun.COM 	FWCmdHdr	CmdHdr;
469*10741SFei.Feng@Sun.COM 	/* HW revision */
470*10741SFei.Feng@Sun.COM 	uint8_t		Version;
471*10741SFei.Feng@Sun.COM 	/* Host interface */
472*10741SFei.Feng@Sun.COM 	uint8_t		HostIf;
473*10741SFei.Feng@Sun.COM 	/* Max. number of Multicast address FW can handle */
474*10741SFei.Feng@Sun.COM 	uint16_t	NumOfMCastAdr;
475*10741SFei.Feng@Sun.COM 	/* MAC address */
476*10741SFei.Feng@Sun.COM 	uint8_t		PermanentAddr[6];
477*10741SFei.Feng@Sun.COM 	/* Region Code */
478*10741SFei.Feng@Sun.COM 	uint16_t	RegionCode;
479*10741SFei.Feng@Sun.COM 	/* 4 byte of FW release number */
480*10741SFei.Feng@Sun.COM 	uint32_t	FWReleaseNumber;
481*10741SFei.Feng@Sun.COM 	/* Firmware awake cookie */
482*10741SFei.Feng@Sun.COM 	uint32_t	ulFwAwakeCookie;
483*10741SFei.Feng@Sun.COM 	/* Device capabilities (see above) */
484*10741SFei.Feng@Sun.COM 	uint32_t	DeviceCaps;
485*10741SFei.Feng@Sun.COM 	/* Rx shared memory queue */
486*10741SFei.Feng@Sun.COM 	uint32_t	RxPdWrPtr;
487*10741SFei.Feng@Sun.COM 	/* TX queues in WcbBase array */
488*10741SFei.Feng@Sun.COM 	uint32_t	NumTxQueues;
489*10741SFei.Feng@Sun.COM 	/* TX WCB Rings */
490*10741SFei.Feng@Sun.COM 	uint32_t	WcbBase[MAX_TXWCB_QUEUES];
491*10741SFei.Feng@Sun.COM 	uint32_t	Flags;
492*10741SFei.Feng@Sun.COM #define	SET_HW_SPEC_DISABLEMBSS		0x08
493*10741SFei.Feng@Sun.COM #define	SET_HW_SPEC_HOSTFORM_BEACON	0x10
494*10741SFei.Feng@Sun.COM #define	SET_HW_SPEC_HOSTFORM_PROBERESP	0x20
495*10741SFei.Feng@Sun.COM #define	SET_HW_SPEC_HOST_POWERSAVE	0x40
496*10741SFei.Feng@Sun.COM #define	SET_HW_SPEC_HOSTENCRDECR_MGMT	0x80
497*10741SFei.Feng@Sun.COM 	uint32_t	TxWcbNumPerQueue;
498*10741SFei.Feng@Sun.COM 	uint32_t	TotalRxWcb;
499*10741SFei.Feng@Sun.COM }HostCmd_DS_SET_HW_SPEC;
500*10741SFei.Feng@Sun.COM 
501*10741SFei.Feng@Sun.COM // used for stand alone bssid sets/clears
502*10741SFei.Feng@Sun.COM typedef struct {
503*10741SFei.Feng@Sun.COM 	FWCmdHdr	CmdHdr;
504*10741SFei.Feng@Sun.COM #ifdef MWL_MBSS_SUPPORT
505*10741SFei.Feng@Sun.COM 	uint16_t	MacType;
506*10741SFei.Feng@Sun.COM #define	WL_MAC_TYPE_PRIMARY_CLIENT	0
507*10741SFei.Feng@Sun.COM #define	WL_MAC_TYPE_SECONDARY_CLIENT	1
508*10741SFei.Feng@Sun.COM #define	WL_MAC_TYPE_PRIMARY_AP		2
509*10741SFei.Feng@Sun.COM #define	WL_MAC_TYPE_SECONDARY_AP	3
510*10741SFei.Feng@Sun.COM #endif
511*10741SFei.Feng@Sun.COM 	uint8_t		MacAddr[6];
512*10741SFei.Feng@Sun.COM } HostCmd_DS_SET_MAC,
513*10741SFei.Feng@Sun.COM 	HostCmd_FW_SET_BSSID,
514*10741SFei.Feng@Sun.COM 	HostCmd_FW_SET_MAC;
515*10741SFei.Feng@Sun.COM 
516*10741SFei.Feng@Sun.COM typedef struct {
517*10741SFei.Feng@Sun.COM 	uint32_t	LegacyRateBitMap;
518*10741SFei.Feng@Sun.COM 	uint32_t	HTRateBitMap;
519*10741SFei.Feng@Sun.COM 	uint16_t	CapInfo;
520*10741SFei.Feng@Sun.COM 	uint16_t	HTCapabilitiesInfo;
521*10741SFei.Feng@Sun.COM 	uint8_t		MacHTParamInfo;
522*10741SFei.Feng@Sun.COM 	uint8_t		Rev;
523*10741SFei.Feng@Sun.COM 	struct {
524*10741SFei.Feng@Sun.COM 		uint8_t		ControlChan;
525*10741SFei.Feng@Sun.COM 		uint8_t		AddChan;
526*10741SFei.Feng@Sun.COM 		uint16_t	OpMode;
527*10741SFei.Feng@Sun.COM 		uint16_t	stbc;
528*10741SFei.Feng@Sun.COM 	} AddHtInfo;
529*10741SFei.Feng@Sun.COM } PeerInfo_t;
530*10741SFei.Feng@Sun.COM 
531*10741SFei.Feng@Sun.COM typedef struct {
532*10741SFei.Feng@Sun.COM 	FWCmdHdr	CmdHdr;
533*10741SFei.Feng@Sun.COM 	uint16_t	AID;
534*10741SFei.Feng@Sun.COM 	uint8_t		MacAddr[6];
535*10741SFei.Feng@Sun.COM 	uint16_t	StnId;
536*10741SFei.Feng@Sun.COM 	uint16_t	Action;
537*10741SFei.Feng@Sun.COM 	uint16_t	Reserved;
538*10741SFei.Feng@Sun.COM 	PeerInfo_t	PeerInfo;
539*10741SFei.Feng@Sun.COM 	uint8_t		Qosinfo;
540*10741SFei.Feng@Sun.COM 	uint8_t		isQosSta;
541*10741SFei.Feng@Sun.COM 	uint32_t	FwStaPtr;
542*10741SFei.Feng@Sun.COM } HostCmd_FW_SET_NEW_STN;
543*10741SFei.Feng@Sun.COM 
544*10741SFei.Feng@Sun.COM /* Define data structure for HostCmd_CMD_802_11_RF_ANTENNA */
545*10741SFei.Feng@Sun.COM typedef struct _HostCmd_DS_802_11_RF_ANTENNA {
546*10741SFei.Feng@Sun.COM 	FWCmdHdr	CmdHdr;
547*10741SFei.Feng@Sun.COM 	uint16_t	Action;
548*10741SFei.Feng@Sun.COM 	/* Number of antennas or 0xffff(diversity) */
549*10741SFei.Feng@Sun.COM 	uint16_t	AntennaMode;
550*10741SFei.Feng@Sun.COM } HostCmd_DS_802_11_RF_ANTENNA;
551*10741SFei.Feng@Sun.COM 
552*10741SFei.Feng@Sun.COM /* Define data structure for HostCmd_CMD_802_11_RADIO_CONTROL */
553*10741SFei.Feng@Sun.COM typedef struct {
554*10741SFei.Feng@Sun.COM 	FWCmdHdr	CmdHdr;
555*10741SFei.Feng@Sun.COM 	uint16_t	Action;
556*10741SFei.Feng@Sun.COM 	/*
557*10741SFei.Feng@Sun.COM 	 *  @bit0: 1/0, on/off
558*10741SFei.Feng@Sun.COM 	 *  @bit1: 1/0, long/short
559*10741SFei.Feng@Sun.COM 	 *  @bit2: 1/0,auto/fix
560*10741SFei.Feng@Sun.COM 	 */
561*10741SFei.Feng@Sun.COM 	uint16_t	Control;
562*10741SFei.Feng@Sun.COM 	uint16_t	RadioOn;
563*10741SFei.Feng@Sun.COM } HostCmd_DS_802_11_RADIO_CONTROL;
564*10741SFei.Feng@Sun.COM 
565*10741SFei.Feng@Sun.COM /* for HostCmd_CMD_SET_WMM_MODE */
566*10741SFei.Feng@Sun.COM typedef struct {
567*10741SFei.Feng@Sun.COM 	FWCmdHdr	CmdHdr;
568*10741SFei.Feng@Sun.COM 	/* 0->unset, 1->set */
569*10741SFei.Feng@Sun.COM 	uint16_t	Action;
570*10741SFei.Feng@Sun.COM } HostCmd_FW_SetWMMMode;
571*10741SFei.Feng@Sun.COM 
572*10741SFei.Feng@Sun.COM /* bits 0-5 specify frequency band */
573*10741SFei.Feng@Sun.COM #define	FREQ_BAND_2DOT4GHZ	0x0001
574*10741SFei.Feng@Sun.COM #define	FREQ_BAND_4DOT9GHZ	0x0002	/* XXX not implemented */
575*10741SFei.Feng@Sun.COM #define	FREQ_BAND_5GHZ		0x0004
576*10741SFei.Feng@Sun.COM #define	FREQ_BAND_5DOT2GHZ	0x0008	/* XXX not implemented */
577*10741SFei.Feng@Sun.COM /* bits 6-10 specify channel width */
578*10741SFei.Feng@Sun.COM #define	CH_AUTO_WIDTH		0x0000	/* XXX not used? */
579*10741SFei.Feng@Sun.COM #define	CH_10_MHz_WIDTH		0x0040
580*10741SFei.Feng@Sun.COM #define	CH_20_MHz_WIDTH		0x0080
581*10741SFei.Feng@Sun.COM #define	CH_40_MHz_WIDTH		0x0100
582*10741SFei.Feng@Sun.COM /* bits 11-12 specify extension channel */
583*10741SFei.Feng@Sun.COM #define	EXT_CH_NONE		0x0000	/* no extension channel */
584*10741SFei.Feng@Sun.COM #define	EXT_CH_ABOVE_CTRL_CH	0x0800	/* extension channel above */
585*10741SFei.Feng@Sun.COM #define	EXT_CH_AUTO		0x1000	/* XXX not used? */
586*10741SFei.Feng@Sun.COM #define	EXT_CH_BELOW_CTRL_CH	0x1800	/* extension channel below */
587*10741SFei.Feng@Sun.COM /* bits 13-31 are reserved */
588*10741SFei.Feng@Sun.COM 
589*10741SFei.Feng@Sun.COM #define	FIXED_RATE_WITH_AUTO_RATE_DROP		0
590*10741SFei.Feng@Sun.COM #define	FIXED_RATE_WITHOUT_AUTORATE_DROP	1
591*10741SFei.Feng@Sun.COM 
592*10741SFei.Feng@Sun.COM #define	LEGACY_RATE_TYPE			0
593*10741SFei.Feng@Sun.COM #define	HT_RATE_TYPE				1
594*10741SFei.Feng@Sun.COM 
595*10741SFei.Feng@Sun.COM #define	RETRY_COUNT_VALID			0
596*10741SFei.Feng@Sun.COM #define	RETRY_COUNT_INVALID			1
597*10741SFei.Feng@Sun.COM 
598*10741SFei.Feng@Sun.COM // Define data structure for HostCmd_CMD_802_11_RF_CHANNEL
599*10741SFei.Feng@Sun.COM typedef struct {
600*10741SFei.Feng@Sun.COM 	FWCmdHdr	CmdHdr;
601*10741SFei.Feng@Sun.COM 	uint16_t	Action;
602*10741SFei.Feng@Sun.COM 	uint8_t		CurrentChannel;	/* channel # */
603*10741SFei.Feng@Sun.COM 	uint32_t	ChannelFlags;	/* see below */
604*10741SFei.Feng@Sun.COM } HostCmd_FW_SET_RF_CHANNEL;
605*10741SFei.Feng@Sun.COM 
606*10741SFei.Feng@Sun.COM #define	TX_POWER_LEVEL_TOTAL	8
607*10741SFei.Feng@Sun.COM 
608*10741SFei.Feng@Sun.COM /* Define data structure for HostCmd_CMD_802_11_RF_TX_POWER */
609*10741SFei.Feng@Sun.COM typedef struct {
610*10741SFei.Feng@Sun.COM 	FWCmdHdr	CmdHdr;
611*10741SFei.Feng@Sun.COM 	uint16_t	Action;
612*10741SFei.Feng@Sun.COM 	uint16_t	SupportTxPowerLevel;
613*10741SFei.Feng@Sun.COM 	uint16_t	CurrentTxPowerLevel;
614*10741SFei.Feng@Sun.COM 	uint16_t	Reserved;
615*10741SFei.Feng@Sun.COM 	uint16_t	PowerLevelList[TX_POWER_LEVEL_TOTAL];
616*10741SFei.Feng@Sun.COM } HostCmd_DS_802_11_RF_TX_POWER;
617*10741SFei.Feng@Sun.COM 
618*10741SFei.Feng@Sun.COM typedef struct {
619*10741SFei.Feng@Sun.COM 	/*
620*10741SFei.Feng@Sun.COM 	 * lower rate after the retry count
621*10741SFei.Feng@Sun.COM 	 * 0: legacy, 1: HT
622*10741SFei.Feng@Sun.COM 	 */
623*10741SFei.Feng@Sun.COM 	uint32_t	FixRateType;
624*10741SFei.Feng@Sun.COM 	/*
625*10741SFei.Feng@Sun.COM 	 *  0: retry count is not valid
626*10741SFei.Feng@Sun.COM 	 *  1: use retry count specified
627*10741SFei.Feng@Sun.COM 	 */
628*10741SFei.Feng@Sun.COM 	uint32_t	RetryCountValid;
629*10741SFei.Feng@Sun.COM } FIX_RATE_FLAG;
630*10741SFei.Feng@Sun.COM 
631*10741SFei.Feng@Sun.COM typedef  struct {
632*10741SFei.Feng@Sun.COM 	FIX_RATE_FLAG	FixRateTypeFlags;
633*10741SFei.Feng@Sun.COM 	/* legacy rate(not index) or an MCS code */
634*10741SFei.Feng@Sun.COM 	uint32_t	FixedRate;
635*10741SFei.Feng@Sun.COM 	uint32_t	RetryCount;
636*10741SFei.Feng@Sun.COM } FIXED_RATE_ENTRY;
637*10741SFei.Feng@Sun.COM 
638*10741SFei.Feng@Sun.COM typedef  struct {
639*10741SFei.Feng@Sun.COM 	FWCmdHdr	CmdHdr;
640*10741SFei.Feng@Sun.COM 	/*
641*10741SFei.Feng@Sun.COM 	 * HostCmd_ACT_GEN_GET			0x0000
642*10741SFei.Feng@Sun.COM 	 * HostCmd_ACT_GEN_SET 			0x0001
643*10741SFei.Feng@Sun.COM 	 * HostCmd_ACT_NOT_USE_FIXED_RATE	0x0002
644*10741SFei.Feng@Sun.COM 	 */
645*10741SFei.Feng@Sun.COM 	uint32_t	Action;
646*10741SFei.Feng@Sun.COM 	/* use fixed rate specified but firmware can drop */
647*10741SFei.Feng@Sun.COM 	uint32_t	AllowRateDrop;
648*10741SFei.Feng@Sun.COM 	uint32_t	EntryCount;
649*10741SFei.Feng@Sun.COM 	FIXED_RATE_ENTRY FixedRateTable[4];
650*10741SFei.Feng@Sun.COM 	uint8_t		MulticastRate;
651*10741SFei.Feng@Sun.COM 	uint8_t		MultiRateTxType;
652*10741SFei.Feng@Sun.COM 	uint8_t		ManagementRate;
653*10741SFei.Feng@Sun.COM } HostCmd_FW_USE_FIXED_RATE;
654*10741SFei.Feng@Sun.COM 
655*10741SFei.Feng@Sun.COM /* Define data structure for HostCmd_CMD_SET_RATE_ADAPT_MODE */
656*10741SFei.Feng@Sun.COM typedef struct {
657*10741SFei.Feng@Sun.COM 	FWCmdHdr	CmdHdr;
658*10741SFei.Feng@Sun.COM 	uint16_t	Action;
659*10741SFei.Feng@Sun.COM 	uint16_t	RateAdaptMode;
660*10741SFei.Feng@Sun.COM } HostCmd_DS_SET_RATE_ADAPT_MODE;
661*10741SFei.Feng@Sun.COM 
662*10741SFei.Feng@Sun.COM typedef struct {
663*10741SFei.Feng@Sun.COM 	FWCmdHdr	CmdHdr;
664*10741SFei.Feng@Sun.COM 	uint8_t	OptLevel;
665*10741SFei.Feng@Sun.COM } HostCmd_FW_SET_OPTIMIZATION_LEVEL;
666*10741SFei.Feng@Sun.COM 
667*10741SFei.Feng@Sun.COM typedef struct {
668*10741SFei.Feng@Sun.COM 	FWCmdHdr	CmdHdr;
669*10741SFei.Feng@Sun.COM 	uint16_t	regionCode;
670*10741SFei.Feng@Sun.COM } HostCmd_SET_REGIONCODE_INFO;
671*10741SFei.Feng@Sun.COM 
672*10741SFei.Feng@Sun.COM typedef struct {
673*10741SFei.Feng@Sun.COM 	FWCmdHdr	CmdHdr;
674*10741SFei.Feng@Sun.COM 	uint16_t	Action;	/* 0: Get. 1:Set */
675*10741SFei.Feng@Sun.COM 	uint32_t	Option;	/* 0: default. 1:Aggressive */
676*10741SFei.Feng@Sun.COM 	uint32_t	Threshold;	/* Range 0-200, default 8 */
677*10741SFei.Feng@Sun.COM } HostCmd_FW_AMPDU_RETRY_RATEDROP_MODE;
678*10741SFei.Feng@Sun.COM 
679*10741SFei.Feng@Sun.COM typedef struct {
680*10741SFei.Feng@Sun.COM 	FWCmdHdr	CmdHdr;
681*10741SFei.Feng@Sun.COM 	uint32_t	Enable;	/* 0 -- Disable. or 1 -- Enable */
682*10741SFei.Feng@Sun.COM } HostCmd_CFEND_ENABLE;
683*10741SFei.Feng@Sun.COM 
684*10741SFei.Feng@Sun.COM typedef struct {
685*10741SFei.Feng@Sun.COM 	FWCmdHdr	CmdHdr;
686*10741SFei.Feng@Sun.COM 	uint32_t	Enable;	/* FALSE: Disable or TRUE: Enable */
687*10741SFei.Feng@Sun.COM } HostCmd_DS_BSS_START;
688*10741SFei.Feng@Sun.COM 
689*10741SFei.Feng@Sun.COM typedef struct {
690*10741SFei.Feng@Sun.COM 	FWCmdHdr	CmdHdr;
691*10741SFei.Feng@Sun.COM } HostCmd_FW_SET_INFRA_MODE;
692*10741SFei.Feng@Sun.COM 
693*10741SFei.Feng@Sun.COM /* used for AID sets/clears */
694*10741SFei.Feng@Sun.COM typedef struct {
695*10741SFei.Feng@Sun.COM 	FWCmdHdr	CmdHdr;
696*10741SFei.Feng@Sun.COM 	uint16_t	AssocID;
697*10741SFei.Feng@Sun.COM 	uint8_t		MacAddr[6]; /* AP's Mac Address(BSSID) */
698*10741SFei.Feng@Sun.COM 	uint32_t	GProtection;
699*10741SFei.Feng@Sun.COM 	uint8_t		ApRates[RATE_INDEX_MAX_ARRAY];
700*10741SFei.Feng@Sun.COM } HostCmd_FW_SET_AID;
701*10741SFei.Feng@Sun.COM 
702*10741SFei.Feng@Sun.COM typedef struct {
703*10741SFei.Feng@Sun.COM 	FWCmdHdr	CmdHdr;
704*10741SFei.Feng@Sun.COM 	uint16_t	Action;
705*10741SFei.Feng@Sun.COM 	uint16_t	Threshold;
706*10741SFei.Feng@Sun.COM } HostCmd_DS_802_11_RTS_THSD;
707*10741SFei.Feng@Sun.COM 
708*10741SFei.Feng@Sun.COM /* Define data structure for HostCmd_CMD_SET_LINKADAPT_CS_MODE */
709*10741SFei.Feng@Sun.COM typedef struct {
710*10741SFei.Feng@Sun.COM 	FWCmdHdr	CmdHdr;
711*10741SFei.Feng@Sun.COM 	uint16_t	Action;
712*10741SFei.Feng@Sun.COM 	uint16_t	CSMode;
713*10741SFei.Feng@Sun.COM } HostCmd_DS_SET_LINKADAPT_CS_MODE;
714*10741SFei.Feng@Sun.COM 
715*10741SFei.Feng@Sun.COM typedef struct {
716*10741SFei.Feng@Sun.COM 	FWCmdHdr	CmdHdr;
717*10741SFei.Feng@Sun.COM 	uint32_t	ActionType; /* ENCR_ACTION_TYPE */
718*10741SFei.Feng@Sun.COM 	uint32_t	DataLength; /* size of the data buffer attached */
719*10741SFei.Feng@Sun.COM #ifdef MWL_MBSS_SUPPORT
720*10741SFei.Feng@Sun.COM 	uint8_t	macaddr[6];
721*10741SFei.Feng@Sun.COM #endif
722*10741SFei.Feng@Sun.COM 	uint8_t	ActionData[1];
723*10741SFei.Feng@Sun.COM } HostCmd_FW_UPDATE_ENCRYPTION;
724*10741SFei.Feng@Sun.COM 
725*10741SFei.Feng@Sun.COM /*
726*10741SFei.Feng@Sun.COM  * @HWENCR@
727*10741SFei.Feng@Sun.COM  * Hardware Encryption related data structures and constant definitions.
728*10741SFei.Feng@Sun.COM  * Note that all related changes are marked with the @HWENCR@ tag.
729*10741SFei.Feng@Sun.COM  */
730*10741SFei.Feng@Sun.COM 
731*10741SFei.Feng@Sun.COM #define	MAX_ENCR_KEY_LENGTH	16	/* max 128 bits - depends on type */
732*10741SFei.Feng@Sun.COM #define	MIC_KEY_LENGTH		8	/* size of Tx/Rx MIC key - 8 bytes */
733*10741SFei.Feng@Sun.COM 
734*10741SFei.Feng@Sun.COM #define	ENCR_KEY_TYPE_ID_WEP	0x00	/* Key type is WEP */
735*10741SFei.Feng@Sun.COM #define	ENCR_KEY_TYPE_ID_TKIP	0x01	/* Key type is TKIP */
736*10741SFei.Feng@Sun.COM #define	ENCR_KEY_TYPE_ID_AES	0x02	/* Key type is AES-CCMP	*/
737*10741SFei.Feng@Sun.COM 
738*10741SFei.Feng@Sun.COM /*
739*10741SFei.Feng@Sun.COM  * flags used in structure - same as driver EKF_XXX flags
740*10741SFei.Feng@Sun.COM  */
741*10741SFei.Feng@Sun.COM /* indicate key is in use */
742*10741SFei.Feng@Sun.COM #define	ENCR_KEY_FLAG_INUSE		0x00000001
743*10741SFei.Feng@Sun.COM /* Group key for RX only */
744*10741SFei.Feng@Sun.COM #define	ENCR_KEY_FLAG_RXGROUPKEY	0x00000002
745*10741SFei.Feng@Sun.COM /* Group key for TX */
746*10741SFei.Feng@Sun.COM #define	ENCR_KEY_FLAG_TXGROUPKEY	0x00000004
747*10741SFei.Feng@Sun.COM /* pairwise */
748*10741SFei.Feng@Sun.COM #define	ENCR_KEY_FLAG_PAIRWISE		0x00000008
749*10741SFei.Feng@Sun.COM /* only used for RX */
750*10741SFei.Feng@Sun.COM #define	ENCR_KEY_FLAG_RXONLY		0x00000010
751*10741SFei.Feng@Sun.COM /*
752*10741SFei.Feng@Sun.COM  * These flags are new additions - for hardware encryption commands only
753*10741SFei.Feng@Sun.COM  */
754*10741SFei.Feng@Sun.COM /* Key is for Authenticator */
755*10741SFei.Feng@Sun.COM #define	ENCR_KEY_FLAG_AUTHENTICATOR	0x00000020
756*10741SFei.Feng@Sun.COM /* Sequence counters valid */
757*10741SFei.Feng@Sun.COM #define	ENCR_KEY_FLAG_TSC_VALID		0x00000040
758*10741SFei.Feng@Sun.COM /* Tx key for WEP */
759*10741SFei.Feng@Sun.COM #define	ENCR_KEY_FLAG_WEP_TXKEY		0x01000000
760*10741SFei.Feng@Sun.COM /* Tx/Rx MIC keys are valid */
761*10741SFei.Feng@Sun.COM #define	ENCR_KEY_FLAG_MICKEY_VALID	0x02000000
762*10741SFei.Feng@Sun.COM 
763*10741SFei.Feng@Sun.COM /*
764*10741SFei.Feng@Sun.COM  * Key material definitions (for WEP, TKIP, & AES-CCMP)
765*10741SFei.Feng@Sun.COM  */
766*10741SFei.Feng@Sun.COM 
767*10741SFei.Feng@Sun.COM /*
768*10741SFei.Feng@Sun.COM  * WEP Key material definition
769*10741SFei.Feng@Sun.COM  * ----------------------------
770*10741SFei.Feng@Sun.COM  * WEPKey	--> An array of 'MAX_ENCR_KEY_LENGTH' bytes.
771*10741SFei.Feng@Sun.COM  * Note that we do not support 152bit WEP keys
772*10741SFei.Feng@Sun.COM  */
773*10741SFei.Feng@Sun.COM typedef struct {
774*10741SFei.Feng@Sun.COM 	/* WEP key material (max 128bit) */
775*10741SFei.Feng@Sun.COM 	uint8_t	KeyMaterial[MAX_ENCR_KEY_LENGTH];
776*10741SFei.Feng@Sun.COM } WEP_TYPE_KEY;
777*10741SFei.Feng@Sun.COM 
778*10741SFei.Feng@Sun.COM /*
779*10741SFei.Feng@Sun.COM  * TKIP Key material definition
780*10741SFei.Feng@Sun.COM  * ----------------------------
781*10741SFei.Feng@Sun.COM  * This structure defines TKIP key material. Note that
782*10741SFei.Feng@Sun.COM  * the TxMicKey and RxMicKey may or may not be valid.
783*10741SFei.Feng@Sun.COM  */
784*10741SFei.Feng@Sun.COM /*
785*10741SFei.Feng@Sun.COM  * TKIP Sequence counter - 24 bits
786*10741SFei.Feng@Sun.COM  * Incremented on each fragment MPDU
787*10741SFei.Feng@Sun.COM  */
788*10741SFei.Feng@Sun.COM typedef struct {
789*10741SFei.Feng@Sun.COM 	uint16_t	low;
790*10741SFei.Feng@Sun.COM 	uint32_t	high;
791*10741SFei.Feng@Sun.COM } ENCR_TKIPSEQCNT;
792*10741SFei.Feng@Sun.COM 
793*10741SFei.Feng@Sun.COM /*
794*10741SFei.Feng@Sun.COM  * TKIP Key material. Key type (group or pairwise key) is
795*10741SFei.Feng@Sun.COM  * determined by flags in KEY_PARAM_SET structure
796*10741SFei.Feng@Sun.COM  */
797*10741SFei.Feng@Sun.COM typedef struct {
798*10741SFei.Feng@Sun.COM 	uint8_t		KeyMaterial[MAX_ENCR_KEY_LENGTH];
799*10741SFei.Feng@Sun.COM 	uint8_t		TkipTxMicKey[MIC_KEY_LENGTH];
800*10741SFei.Feng@Sun.COM 	uint8_t		TkipRxMicKey[MIC_KEY_LENGTH];
801*10741SFei.Feng@Sun.COM 	ENCR_TKIPSEQCNT	TkipRsc;
802*10741SFei.Feng@Sun.COM 	ENCR_TKIPSEQCNT	TkipTsc;
803*10741SFei.Feng@Sun.COM } TKIP_TYPE_KEY;
804*10741SFei.Feng@Sun.COM 
805*10741SFei.Feng@Sun.COM /*
806*10741SFei.Feng@Sun.COM  * AES-CCMP Key material definition
807*10741SFei.Feng@Sun.COM  * --------------------------------
808*10741SFei.Feng@Sun.COM  * This structure defines AES-CCMP key material.
809*10741SFei.Feng@Sun.COM  */
810*10741SFei.Feng@Sun.COM typedef struct {
811*10741SFei.Feng@Sun.COM 	/* AES Key material */
812*10741SFei.Feng@Sun.COM 	uint8_t	KeyMaterial[MAX_ENCR_KEY_LENGTH];
813*10741SFei.Feng@Sun.COM } AES_TYPE_KEY;
814*10741SFei.Feng@Sun.COM 
815*10741SFei.Feng@Sun.COM /*
816*10741SFei.Feng@Sun.COM  * UPDATE_ENCRYPTION command action type.
817*10741SFei.Feng@Sun.COM  */
818*10741SFei.Feng@Sun.COM typedef enum {
819*10741SFei.Feng@Sun.COM 	/* request to enable/disable HW encryption */
820*10741SFei.Feng@Sun.COM 	EncrActionEnableHWEncryption,
821*10741SFei.Feng@Sun.COM 	/* request to set encryption key */
822*10741SFei.Feng@Sun.COM 	EncrActionTypeSetKey,
823*10741SFei.Feng@Sun.COM 	/* request to remove one or more keys */
824*10741SFei.Feng@Sun.COM 	EncrActionTypeRemoveKey,
825*10741SFei.Feng@Sun.COM 	EncrActionTypeSetGroupKey
826*10741SFei.Feng@Sun.COM } ENCR_ACTION_TYPE;
827*10741SFei.Feng@Sun.COM 
828*10741SFei.Feng@Sun.COM /*
829*10741SFei.Feng@Sun.COM  * Encryption key definition.
830*10741SFei.Feng@Sun.COM  * --------------------------
831*10741SFei.Feng@Sun.COM  * This structure provides all required/essential
832*10741SFei.Feng@Sun.COM  * information about the key being set/removed.
833*10741SFei.Feng@Sun.COM  */
834*10741SFei.Feng@Sun.COM typedef struct {
835*10741SFei.Feng@Sun.COM 	uint16_t	Length;		/* Total length of this structure */
836*10741SFei.Feng@Sun.COM 	uint16_t	KeyTypeId;	/* Key type - WEP, TKIP or AES-CCMP */
837*10741SFei.Feng@Sun.COM 	uint32_t	KeyInfo;	/* key flags */
838*10741SFei.Feng@Sun.COM 	uint32_t	KeyIndex; 	/* For WEP only - actual key index */
839*10741SFei.Feng@Sun.COM 	uint16_t	KeyLen;		/* Size of the key */
840*10741SFei.Feng@Sun.COM 	union {				/* Key material (variable size array) */
841*10741SFei.Feng@Sun.COM 		WEP_TYPE_KEY	WepKey;
842*10741SFei.Feng@Sun.COM 		TKIP_TYPE_KEY	TkipKey;
843*10741SFei.Feng@Sun.COM 		AES_TYPE_KEY	AesKey;
844*10741SFei.Feng@Sun.COM 	} Key;
845*10741SFei.Feng@Sun.COM #ifdef MWL_MBSS_SUPPORT
846*10741SFei.Feng@Sun.COM 	uint8_t	Macaddr[6];
847*10741SFei.Feng@Sun.COM #endif
848*10741SFei.Feng@Sun.COM } KEY_PARAM_SET;
849*10741SFei.Feng@Sun.COM 
850*10741SFei.Feng@Sun.COM 
851*10741SFei.Feng@Sun.COM typedef struct {
852*10741SFei.Feng@Sun.COM 	FWCmdHdr	CmdHdr;
853*10741SFei.Feng@Sun.COM 	uint32_t	ActionType;	/* ENCR_ACTION_TYPE */
854*10741SFei.Feng@Sun.COM 	uint32_t	DataLength;	/* size of the data buffer attached */
855*10741SFei.Feng@Sun.COM 	KEY_PARAM_SET	KeyParam;
856*10741SFei.Feng@Sun.COM #ifndef MWL_MBSS_SUPPORT
857*10741SFei.Feng@Sun.COM 	uint8_t		Macaddr[8];
858*10741SFei.Feng@Sun.COM #endif
859*10741SFei.Feng@Sun.COM } HostCmd_FW_UPDATE_ENCRYPTION_SET_KEY;
860*10741SFei.Feng@Sun.COM #pragma pack()
861*10741SFei.Feng@Sun.COM 
862*10741SFei.Feng@Sun.COM #ifdef __cplusplus
863*10741SFei.Feng@Sun.COM }
864*10741SFei.Feng@Sun.COM #endif
865*10741SFei.Feng@Sun.COM 
866*10741SFei.Feng@Sun.COM #endif /* _MWL_REG_H */
867