xref: /OK3568_Linux_fs/kernel/drivers/net/wireless/nxp/mlan/mlan_fw.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /** @file mlan_fw.h
2*4882a593Smuzhiyun  *
3*4882a593Smuzhiyun  *  @brief This file contains firmware specific defines.
4*4882a593Smuzhiyun  *  structures and declares global function prototypes used
5*4882a593Smuzhiyun  *  in MLAN module.
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  *
8*4882a593Smuzhiyun  *  Copyright 2008-2022 NXP
9*4882a593Smuzhiyun  *
10*4882a593Smuzhiyun  *  This software file (the File) is distributed by NXP
11*4882a593Smuzhiyun  *  under the terms of the GNU General Public License Version 2, June 1991
12*4882a593Smuzhiyun  *  (the License).  You may use, redistribute and/or modify the File in
13*4882a593Smuzhiyun  *  accordance with the terms and conditions of the License, a copy of which
14*4882a593Smuzhiyun  *  is available by writing to the Free Software Foundation, Inc.,
15*4882a593Smuzhiyun  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the
16*4882a593Smuzhiyun  *  worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
17*4882a593Smuzhiyun  *
18*4882a593Smuzhiyun  *  THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
19*4882a593Smuzhiyun  *  IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
20*4882a593Smuzhiyun  *  ARE EXPRESSLY DISCLAIMED.  The License provides additional details about
21*4882a593Smuzhiyun  *  this warranty disclaimer.
22*4882a593Smuzhiyun  *
23*4882a593Smuzhiyun  */
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun /******************************************************
26*4882a593Smuzhiyun Change log:
27*4882a593Smuzhiyun     10/27/2008: initial version
28*4882a593Smuzhiyun ******************************************************/
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun #ifndef _MLAN_FW_H_
31*4882a593Smuzhiyun #define _MLAN_FW_H_
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun /** Interface header length */
34*4882a593Smuzhiyun #ifdef USB
35*4882a593Smuzhiyun #define USB_INTF_HEADER_LEN 0
36*4882a593Smuzhiyun #endif /* USB */
37*4882a593Smuzhiyun #ifdef SDIO
38*4882a593Smuzhiyun #define SDIO_INTF_HEADER_LEN 4
39*4882a593Smuzhiyun #endif /* SDIO */
40*4882a593Smuzhiyun #ifdef PCIE
41*4882a593Smuzhiyun #define PCIE_INTF_HEADER_LEN 4
42*4882a593Smuzhiyun #endif /* PCIE */
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun #ifdef PRAGMA_PACK
45*4882a593Smuzhiyun #pragma pack(push, 1)
46*4882a593Smuzhiyun #endif
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun #define WPA_GCMP_KEY_LEN 32
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun #define WPA_CCMP_256_KEY_LEN 32
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun /** Ethernet header */
53*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
54*4882a593Smuzhiyun 	/** Ethernet header destination address */
55*4882a593Smuzhiyun 	t_u8 dest_addr[MLAN_MAC_ADDR_LENGTH];
56*4882a593Smuzhiyun 	/** Ethernet header source address */
57*4882a593Smuzhiyun 	t_u8 src_addr[MLAN_MAC_ADDR_LENGTH];
58*4882a593Smuzhiyun 	/** Ethernet header length */
59*4882a593Smuzhiyun 	t_u16 h803_len;
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun } MLAN_PACK_END Eth803Hdr_t;
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun /** RFC 1042 header */
64*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
65*4882a593Smuzhiyun 	/** LLC DSAP */
66*4882a593Smuzhiyun 	t_u8 llc_dsap;
67*4882a593Smuzhiyun 	/** LLC SSAP */
68*4882a593Smuzhiyun 	t_u8 llc_ssap;
69*4882a593Smuzhiyun 	/** LLC CTRL */
70*4882a593Smuzhiyun 	t_u8 llc_ctrl;
71*4882a593Smuzhiyun 	/** SNAP OUI */
72*4882a593Smuzhiyun 	t_u8 snap_oui[3];
73*4882a593Smuzhiyun 	/** SNAP type */
74*4882a593Smuzhiyun 	t_u16 snap_type;
75*4882a593Smuzhiyun 
76*4882a593Smuzhiyun } MLAN_PACK_END Rfc1042Hdr_t;
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun /** Rx packet header */
79*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
80*4882a593Smuzhiyun 	/** Etherner header */
81*4882a593Smuzhiyun 	Eth803Hdr_t eth803_hdr;
82*4882a593Smuzhiyun 	/** RFC 1042 header */
83*4882a593Smuzhiyun 	Rfc1042Hdr_t rfc1042_hdr;
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun } MLAN_PACK_END RxPacketHdr_t;
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun /** Rates supported in band B */
88*4882a593Smuzhiyun #define B_SUPPORTED_RATES 5
89*4882a593Smuzhiyun /** Rates supported in band G */
90*4882a593Smuzhiyun #define G_SUPPORTED_RATES 9
91*4882a593Smuzhiyun /** Rates supported in band BG */
92*4882a593Smuzhiyun #define BG_SUPPORTED_RATES 13
93*4882a593Smuzhiyun 
94*4882a593Smuzhiyun /** Setup the number of rates passed in the driver/firmware API */
95*4882a593Smuzhiyun #define A_SUPPORTED_RATES 9
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun /** CapInfo Short Slot Time Disabled */
98*4882a593Smuzhiyun /* #define SHORT_SLOT_TIME_DISABLED(CapInfo)
99*4882a593Smuzhiyun  * ((IEEEtypes_CapInfo_t)(CapInfo).short_slot_time = 0) */
100*4882a593Smuzhiyun #define SHORT_SLOT_TIME_DISABLED(CapInfo) (CapInfo &= ~MBIT(10))
101*4882a593Smuzhiyun /** CapInfo Short Slot Time Enabled */
102*4882a593Smuzhiyun #define SHORT_SLOT_TIME_ENABLED(CapInfo) (CapInfo |= MBIT(10))
103*4882a593Smuzhiyun /** CapInfo Spectrum Mgmt Disabled */
104*4882a593Smuzhiyun #define SPECTRUM_MGMT_DISABLED(CapInfo) (CapInfo &= ~MBIT(8))
105*4882a593Smuzhiyun /** CapInfo Spectrum Mgmt Enabled */
106*4882a593Smuzhiyun #define SPECTRUM_MGMT_ENABLED(CapInfo) (CapInfo |= MBIT(8))
107*4882a593Smuzhiyun /** CapInfo Radio Measurement Disabled */
108*4882a593Smuzhiyun #define RADIO_MEASUREMENT_DISABLED(CapInfo) (CapInfo &= ~MBIT(12))
109*4882a593Smuzhiyun /** CapInfo Radio Measurement Enabled */
110*4882a593Smuzhiyun #define RADIO_MEASUREMENT_ENABLED(CapInfo) (CapInfo |= MBIT(12))
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun /** Setup the number of rates passed in the driver/firmware API */
113*4882a593Smuzhiyun #define HOSTCMD_SUPPORTED_RATES 14
114*4882a593Smuzhiyun 
115*4882a593Smuzhiyun /** Rates supported in band N */
116*4882a593Smuzhiyun #define N_SUPPORTED_RATES 3
117*4882a593Smuzhiyun #ifdef STA_SUPPORT
118*4882a593Smuzhiyun /** All bands (B, G, N, AAC, GAC) */
119*4882a593Smuzhiyun #define ALL_802_11_BANDS                                                       \
120*4882a593Smuzhiyun 	(BAND_A | BAND_B | BAND_G | BAND_GN | BAND_AAC | BAND_GAC)
121*4882a593Smuzhiyun #else
122*4882a593Smuzhiyun /** All bands (B, G, A) */
123*4882a593Smuzhiyun #define ALL_802_11_BANDS (BAND_B | BAND_G | BAND_A)
124*4882a593Smuzhiyun #endif /* STA_SUPPORT */
125*4882a593Smuzhiyun 
126*4882a593Smuzhiyun #ifdef STA_SUPPORT
127*4882a593Smuzhiyun /** Firmware multiple bands support */
128*4882a593Smuzhiyun #define FW_MULTI_BANDS_SUPPORT                                                 \
129*4882a593Smuzhiyun 	(MBIT(8) | MBIT(9) | MBIT(10) | MBIT(11) | MBIT(12) | MBIT(13))
130*4882a593Smuzhiyun #else
131*4882a593Smuzhiyun /** Firmware multiple bands support */
132*4882a593Smuzhiyun #define FW_MULTI_BANDS_SUPPORT (MBIT(8) | MBIT(9) | MBIT(10))
133*4882a593Smuzhiyun #endif /* STA_SUPPORT */
134*4882a593Smuzhiyun /** Check if multiple bands support is enabled in firmware */
135*4882a593Smuzhiyun #define IS_SUPPORT_MULTI_BANDS(_adapter)                                       \
136*4882a593Smuzhiyun 	(_adapter->fw_cap_info & FW_MULTI_BANDS_SUPPORT)
137*4882a593Smuzhiyun /** Get default bands of the firmware */
138*4882a593Smuzhiyun /* need to shift bit 12 and bit 13 in fw_cap_info from the firmware
139*4882a593Smuzhiyun  * to bit 13 and 14 for 11ac so that bit 11 is for GN, bit 12 for AN,
140*4882a593Smuzhiyun  * bit 13 for GAC, and bit 14 for AAC, in order to be compatible with
141*4882a593Smuzhiyun  * the band capability defined in the driver after right shift of 8 bits */
142*4882a593Smuzhiyun #define GET_FW_DEFAULT_BANDS(_adapter)                                         \
143*4882a593Smuzhiyun 	(((((_adapter->fw_cap_info & 0x3000) << 1) |                           \
144*4882a593Smuzhiyun 	   (_adapter->fw_cap_info & ~0xF000)) >>                               \
145*4882a593Smuzhiyun 	  8) &                                                                 \
146*4882a593Smuzhiyun 	 ALL_802_11_BANDS)
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun extern t_u8 SupportedRates_B[B_SUPPORTED_RATES];
149*4882a593Smuzhiyun extern t_u8 SupportedRates_G[G_SUPPORTED_RATES];
150*4882a593Smuzhiyun extern t_u8 SupportedRates_BG[BG_SUPPORTED_RATES];
151*4882a593Smuzhiyun extern t_u8 SupportedRates_A[A_SUPPORTED_RATES];
152*4882a593Smuzhiyun extern t_u8 SupportedRates_N[N_SUPPORTED_RATES];
153*4882a593Smuzhiyun extern t_u8 AdhocRates_G[G_SUPPORTED_RATES];
154*4882a593Smuzhiyun extern t_u8 AdhocRates_B[B_SUPPORTED_RATES];
155*4882a593Smuzhiyun extern t_u8 AdhocRates_BG[BG_SUPPORTED_RATES];
156*4882a593Smuzhiyun extern t_u8 AdhocRates_A[A_SUPPORTED_RATES];
157*4882a593Smuzhiyun 
158*4882a593Smuzhiyun /** Default auto deep sleep mode */
159*4882a593Smuzhiyun #define DEFAULT_AUTO_DS_MODE MTRUE
160*4882a593Smuzhiyun /** Default power save mode */
161*4882a593Smuzhiyun #define DEFAULT_PS_MODE Wlan802_11PowerModePSP
162*4882a593Smuzhiyun 
163*4882a593Smuzhiyun /** WEP Key index mask */
164*4882a593Smuzhiyun #define HostCmd_WEP_KEY_INDEX_MASK 0x3fff
165*4882a593Smuzhiyun /** Length of WEP 40 bit key */
166*4882a593Smuzhiyun #define WEP_40_BIT_LEN 5
167*4882a593Smuzhiyun /** Length of WEP 104 bit key */
168*4882a593Smuzhiyun #define WEP_104_BIT_LEN 13
169*4882a593Smuzhiyun 
170*4882a593Smuzhiyun /** Key information enabled */
171*4882a593Smuzhiyun #define KEY_INFO_ENABLED 0x01
172*4882a593Smuzhiyun /** KEY_TYPE_ID */
173*4882a593Smuzhiyun typedef enum _KEY_TYPE_ID {
174*4882a593Smuzhiyun 	/** Key type : WEP */
175*4882a593Smuzhiyun 	KEY_TYPE_ID_WEP = 0,
176*4882a593Smuzhiyun 	/** Key type : TKIP */
177*4882a593Smuzhiyun 	KEY_TYPE_ID_TKIP = 1,
178*4882a593Smuzhiyun 	/** Key type : AES */
179*4882a593Smuzhiyun 	KEY_TYPE_ID_AES = 2,
180*4882a593Smuzhiyun 	KEY_TYPE_ID_WAPI = 3,
181*4882a593Smuzhiyun 	KEY_TYPE_ID_AES_CMAC = 4,
182*4882a593Smuzhiyun 	/** Key type : GCMP */
183*4882a593Smuzhiyun 	KEY_TYPE_ID_GCMP = 5,
184*4882a593Smuzhiyun 	/** Key type : GCMP_256 */
185*4882a593Smuzhiyun 	KEY_TYPE_ID_GCMP_256 = 6,
186*4882a593Smuzhiyun 	/** Key type : CCMP_256 */
187*4882a593Smuzhiyun 	KEY_TYPE_ID_CCMP_256 = 7,
188*4882a593Smuzhiyun 	/** Key type : GMAC_128 */
189*4882a593Smuzhiyun 	KEY_TYPE_ID_BIP_GMAC_128 = 8,
190*4882a593Smuzhiyun 	/** Key type : GMAC_256 */
191*4882a593Smuzhiyun 	KEY_TYPE_ID_BIP_GMAC_256 = 9,
192*4882a593Smuzhiyun } KEY_TYPE_ID;
193*4882a593Smuzhiyun 
194*4882a593Smuzhiyun /** Key Info flag for multicast key */
195*4882a593Smuzhiyun #define KEY_INFO_MCAST_KEY 0x01
196*4882a593Smuzhiyun /** Key Info flag for unicast key */
197*4882a593Smuzhiyun #define KEY_INFO_UCAST_KEY 0x02
198*4882a593Smuzhiyun 
199*4882a593Smuzhiyun /** KEY_INFO_WEP*/
200*4882a593Smuzhiyun typedef enum _KEY_INFO_WEP {
201*4882a593Smuzhiyun 	KEY_INFO_WEP_MCAST = 0x01,
202*4882a593Smuzhiyun 	KEY_INFO_WEP_UNICAST = 0x02,
203*4882a593Smuzhiyun 	KEY_INFO_WEP_ENABLED = 0x04
204*4882a593Smuzhiyun } KEY_INFO_WEP;
205*4882a593Smuzhiyun 
206*4882a593Smuzhiyun /** KEY_INFO_TKIP */
207*4882a593Smuzhiyun typedef enum _KEY_INFO_TKIP {
208*4882a593Smuzhiyun 	KEY_INFO_TKIP_MCAST = 0x01,
209*4882a593Smuzhiyun 	KEY_INFO_TKIP_UNICAST = 0x02,
210*4882a593Smuzhiyun 	KEY_INFO_TKIP_ENABLED = 0x04
211*4882a593Smuzhiyun } KEY_INFO_TKIP;
212*4882a593Smuzhiyun 
213*4882a593Smuzhiyun /** KEY_INFO_AES*/
214*4882a593Smuzhiyun typedef enum _KEY_INFO_AES {
215*4882a593Smuzhiyun 	KEY_INFO_AES_MCAST = 0x01,
216*4882a593Smuzhiyun 	KEY_INFO_AES_UNICAST = 0x02,
217*4882a593Smuzhiyun 	KEY_INFO_AES_ENABLED = 0x04,
218*4882a593Smuzhiyun 	KEY_INFO_AES_MCAST_IGTK = 0x400,
219*4882a593Smuzhiyun } KEY_INFO_AES;
220*4882a593Smuzhiyun 
221*4882a593Smuzhiyun /** WPA AES key length */
222*4882a593Smuzhiyun #define WPA_AES_KEY_LEN 16
223*4882a593Smuzhiyun /** WPA TKIP key length */
224*4882a593Smuzhiyun #define WPA_TKIP_KEY_LEN 32
225*4882a593Smuzhiyun /** WPA AES IGTK key length */
226*4882a593Smuzhiyun #define CMAC_AES_KEY_LEN 16
227*4882a593Smuzhiyun /** IGTK key length */
228*4882a593Smuzhiyun #define WPA_IGTK_KEY_LEN 16
229*4882a593Smuzhiyun #define WPA_IGTK_256_KEY_LEN 32
230*4882a593Smuzhiyun 
231*4882a593Smuzhiyun /** WAPI key length */
232*4882a593Smuzhiyun #define WAPI_KEY_LEN 50
233*4882a593Smuzhiyun /** KEY_INFO_WAPI*/
234*4882a593Smuzhiyun typedef enum _KEY_INFO_WAPI {
235*4882a593Smuzhiyun 	KEY_INFO_WAPI_MCAST = 0x01,
236*4882a593Smuzhiyun 	KEY_INFO_WAPI_UNICAST = 0x02,
237*4882a593Smuzhiyun 	KEY_INFO_WAPI_ENABLED = 0x04
238*4882a593Smuzhiyun } KEY_INFO_WAPI;
239*4882a593Smuzhiyun 
240*4882a593Smuzhiyun /** Maximum ethernet frame length sans FCS */
241*4882a593Smuzhiyun #define MV_ETH_FRAME_LEN 1514
242*4882a593Smuzhiyun 
243*4882a593Smuzhiyun #if defined(SDIO) || defined(PCIE)
244*4882a593Smuzhiyun /** Length of SNAP header */
245*4882a593Smuzhiyun #define MRVDRV_SNAP_HEADER_LEN 8
246*4882a593Smuzhiyun 
247*4882a593Smuzhiyun /** The number of times to try when polling for status bits */
248*4882a593Smuzhiyun #define MAX_POLL_TRIES 100
249*4882a593Smuzhiyun 
250*4882a593Smuzhiyun /** The number of times to try when waiting for downloaded firmware to
251*4882a593Smuzhiyun      become active when multiple interface is present */
252*4882a593Smuzhiyun #define MAX_MULTI_INTERFACE_POLL_TRIES 150
253*4882a593Smuzhiyun /** The number of times to try when waiting for downloaded firmware to
254*4882a593Smuzhiyun      become active. (polling the scratch register). */
255*4882a593Smuzhiyun #define MAX_FIRMWARE_POLL_TRIES 100
256*4882a593Smuzhiyun 
257*4882a593Smuzhiyun /** FW fill in rx_len with extra 204 bytes */
258*4882a593Smuzhiyun #define EXTRA_LEN 256
259*4882a593Smuzhiyun 
260*4882a593Smuzhiyun /** Buffer size for ethernet Tx packets */
261*4882a593Smuzhiyun #define MRVDRV_ETH_TX_PACKET_BUFFER_SIZE                                       \
262*4882a593Smuzhiyun 	(MV_ETH_FRAME_LEN + sizeof(TxPD) + EXTRA_LEN)
263*4882a593Smuzhiyun 
264*4882a593Smuzhiyun /** Buffer size for ethernet Rx packets */
265*4882a593Smuzhiyun #define MRVDRV_ETH_RX_PACKET_BUFFER_SIZE                                       \
266*4882a593Smuzhiyun 	(MV_ETH_FRAME_LEN + sizeof(RxPD) + MRVDRV_SNAP_HEADER_LEN + EXTRA_LEN)
267*4882a593Smuzhiyun #endif /* SDIO || PCIE */
268*4882a593Smuzhiyun 
269*4882a593Smuzhiyun #ifdef SDIO
270*4882a593Smuzhiyun /* Macros in interface module */
271*4882a593Smuzhiyun /** Firmware ready */
272*4882a593Smuzhiyun #define SDIO_FIRMWARE_READY 0xfedc
273*4882a593Smuzhiyun #endif /* SDIO */
274*4882a593Smuzhiyun 
275*4882a593Smuzhiyun #ifdef PCIE
276*4882a593Smuzhiyun /* Macros in interface module */
277*4882a593Smuzhiyun /** Firmware ready */
278*4882a593Smuzhiyun #define PCIE_FIRMWARE_READY 0xfedcba00
279*4882a593Smuzhiyun #endif
280*4882a593Smuzhiyun 
281*4882a593Smuzhiyun /** Enumeration definition*/
282*4882a593Smuzhiyun /** WLAN_802_11_PRIVACY_FILTER */
283*4882a593Smuzhiyun typedef enum _WLAN_802_11_PRIVACY_FILTER {
284*4882a593Smuzhiyun 	Wlan802_11PrivFilterAcceptAll,
285*4882a593Smuzhiyun 	Wlan802_11PrivFilter8021xWEP
286*4882a593Smuzhiyun } WLAN_802_11_PRIVACY_FILTER;
287*4882a593Smuzhiyun 
288*4882a593Smuzhiyun /** WLAN_802_11_WEP_STATUS */
289*4882a593Smuzhiyun typedef enum _WLAN_802_11_WEP_STATUS {
290*4882a593Smuzhiyun 	Wlan802_11WEPEnabled,
291*4882a593Smuzhiyun 	Wlan802_11WEPDisabled,
292*4882a593Smuzhiyun 	Wlan802_11WEPKeyAbsent,
293*4882a593Smuzhiyun 	Wlan802_11WEPNotSupported
294*4882a593Smuzhiyun } WLAN_802_11_WEP_STATUS;
295*4882a593Smuzhiyun 
296*4882a593Smuzhiyun /** SNR calculation */
297*4882a593Smuzhiyun #define CAL_SNR(RSSI, NF) ((t_s16)((t_s16)(RSSI) - (t_s16)(NF)))
298*4882a593Smuzhiyun 
299*4882a593Smuzhiyun /** 2K buf size */
300*4882a593Smuzhiyun #define MLAN_TX_DATA_BUF_SIZE_2K 2048
301*4882a593Smuzhiyun 
302*4882a593Smuzhiyun /** Terminating TLV Type */
303*4882a593Smuzhiyun #define MRVL_TERMINATE_TLV_ID 0xffff
304*4882a593Smuzhiyun 
305*4882a593Smuzhiyun /** TLV type : SSID */
306*4882a593Smuzhiyun #define TLV_TYPE_SSID 0x0000
307*4882a593Smuzhiyun /** TLV type : Rates */
308*4882a593Smuzhiyun #define TLV_TYPE_RATES 0x0001
309*4882a593Smuzhiyun /** TLV type : PHY FH */
310*4882a593Smuzhiyun #define TLV_TYPE_PHY_FH 0x0002
311*4882a593Smuzhiyun /** TLV type : PHY DS */
312*4882a593Smuzhiyun #define TLV_TYPE_PHY_DS 0x0003
313*4882a593Smuzhiyun /** TLV type : CF */
314*4882a593Smuzhiyun #define TLV_TYPE_CF 0x0004
315*4882a593Smuzhiyun /** TLV type : IBSS */
316*4882a593Smuzhiyun #define TLV_TYPE_IBSS 0x0006
317*4882a593Smuzhiyun 
318*4882a593Smuzhiyun /** TLV type : Domain */
319*4882a593Smuzhiyun #define TLV_TYPE_DOMAIN 0x0007
320*4882a593Smuzhiyun 
321*4882a593Smuzhiyun /** TLV type : Power constraint */
322*4882a593Smuzhiyun #define TLV_TYPE_POWER_CONSTRAINT 0x0020
323*4882a593Smuzhiyun 
324*4882a593Smuzhiyun /** TLV type : Power capability */
325*4882a593Smuzhiyun #define TLV_TYPE_POWER_CAPABILITY 0x0021
326*4882a593Smuzhiyun 
327*4882a593Smuzhiyun #define TLV_TYPE_HT_CAPABILITY 0x002d
328*4882a593Smuzhiyun 
329*4882a593Smuzhiyun #define TLV_TYPE_EXTENSION_ID 0x00ff
330*4882a593Smuzhiyun 
331*4882a593Smuzhiyun /**TLV type : Host MLME Flag*/
332*4882a593Smuzhiyun #define TLV_TYPE_HOST_MLME (PROPRIETARY_TLV_BASE_ID + 307)
333*4882a593Smuzhiyun 
334*4882a593Smuzhiyun /** TLV type : AP wacp mode */
335*4882a593Smuzhiyun #define TLV_TYPE_UAP_WACP_MODE (PROPRIETARY_TLV_BASE_ID + 0x147) /* 0x0247 */
336*4882a593Smuzhiyun 
337*4882a593Smuzhiyun /** TLV type : Vendor Specific IE */
338*4882a593Smuzhiyun #define TLV_TYPE_VENDOR_SPECIFIC_IE 0x00dd
339*4882a593Smuzhiyun 
340*4882a593Smuzhiyun /** TLV type : Key material */
341*4882a593Smuzhiyun #define TLV_TYPE_KEY_MATERIAL (PROPRIETARY_TLV_BASE_ID + 0x00) /* 0x0100 */
342*4882a593Smuzhiyun /** TLV type : Channel list */
343*4882a593Smuzhiyun #define TLV_TYPE_CHANLIST (PROPRIETARY_TLV_BASE_ID + 0x01) /* 0x0101 */
344*4882a593Smuzhiyun /** TLV type : Number of probes */
345*4882a593Smuzhiyun #define TLV_TYPE_NUMPROBES (PROPRIETARY_TLV_BASE_ID + 0x02) /* 0x0102 */
346*4882a593Smuzhiyun /** TLV type : Beacon RSSI low */
347*4882a593Smuzhiyun #define TLV_TYPE_RSSI_LOW (PROPRIETARY_TLV_BASE_ID + 0x04) /* 0x0104 */
348*4882a593Smuzhiyun /** TLV type : Beacon SNR low */
349*4882a593Smuzhiyun #define TLV_TYPE_SNR_LOW (PROPRIETARY_TLV_BASE_ID + 0x05) /* 0x0105 */
350*4882a593Smuzhiyun /** TLV type : Fail count */
351*4882a593Smuzhiyun #define TLV_TYPE_FAILCOUNT (PROPRIETARY_TLV_BASE_ID + 0x06) /* 0x0106 */
352*4882a593Smuzhiyun /** TLV type : BCN miss */
353*4882a593Smuzhiyun #define TLV_TYPE_BCNMISS (PROPRIETARY_TLV_BASE_ID + 0x07) /* 0x0107 */
354*4882a593Smuzhiyun /** TLV type : LED behavior */
355*4882a593Smuzhiyun #define TLV_TYPE_LEDBEHAVIOR (PROPRIETARY_TLV_BASE_ID + 0x09) /* 0x0109 */
356*4882a593Smuzhiyun /** TLV type : Passthrough */
357*4882a593Smuzhiyun #define TLV_TYPE_PASSTHROUGH (PROPRIETARY_TLV_BASE_ID + 0x0a) /* 0x010a */
358*4882a593Smuzhiyun /** TLV type : Power TBL 2.4 Ghz */
359*4882a593Smuzhiyun #define TLV_TYPE_POWER_TBL_2_4GHZ                                              \
360*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x0c) /* 0x010c                             \
361*4882a593Smuzhiyun 					  */
362*4882a593Smuzhiyun /** TLV type : Power TBL 5 GHz */
363*4882a593Smuzhiyun #define TLV_TYPE_POWER_TBL_5GHZ (PROPRIETARY_TLV_BASE_ID + 0x0d) /* 0x010d */
364*4882a593Smuzhiyun /** TLV type : WMM queue status */
365*4882a593Smuzhiyun #define TLV_TYPE_WMMQSTATUS (PROPRIETARY_TLV_BASE_ID + 0x10) /* 0x0110 */
366*4882a593Smuzhiyun /** TLV type : Wildcard SSID */
367*4882a593Smuzhiyun #define TLV_TYPE_WILDCARDSSID (PROPRIETARY_TLV_BASE_ID + 0x12) /* 0x0112 */
368*4882a593Smuzhiyun /** TLV type : TSF timestamp */
369*4882a593Smuzhiyun #define TLV_TYPE_TSFTIMESTAMP (PROPRIETARY_TLV_BASE_ID + 0x13) /* 0x0113 */
370*4882a593Smuzhiyun /** TLV type : ARP filter */
371*4882a593Smuzhiyun #define TLV_TYPE_ARP_FILTER (PROPRIETARY_TLV_BASE_ID + 0x15) /* 0x0115 */
372*4882a593Smuzhiyun /** TLV type : Beacon RSSI high */
373*4882a593Smuzhiyun #define TLV_TYPE_RSSI_HIGH (PROPRIETARY_TLV_BASE_ID + 0x16) /* 0x0116 */
374*4882a593Smuzhiyun /** TLV type : Beacon SNR high */
375*4882a593Smuzhiyun #define TLV_TYPE_SNR_HIGH (PROPRIETARY_TLV_BASE_ID + 0x17) /* 0x0117 */
376*4882a593Smuzhiyun /** TLV type : Start BG scan later */
377*4882a593Smuzhiyun #define TLV_TYPE_STARTBGSCANLATER                                              \
378*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x1e) /* 0x011e                             \
379*4882a593Smuzhiyun 					  */
380*4882a593Smuzhiyun /** TLV type: BG scan repeat count */
381*4882a593Smuzhiyun #define TLV_TYPE_REPEAT_COUNT (PROPRIETARY_TLV_BASE_ID + 0xb0) /* 0x01b0 */
382*4882a593Smuzhiyun /** TLV type : Authentication type */
383*4882a593Smuzhiyun #define TLV_TYPE_AUTH_TYPE (PROPRIETARY_TLV_BASE_ID + 0x1f) /* 0x011f */
384*4882a593Smuzhiyun /** TLV type : BSSID */
385*4882a593Smuzhiyun #define TLV_TYPE_BSSID (PROPRIETARY_TLV_BASE_ID + 0x23) /* 0x0123 */
386*4882a593Smuzhiyun 
387*4882a593Smuzhiyun /** TLV type : Link Quality */
388*4882a593Smuzhiyun #define TLV_TYPE_LINK_QUALITY (PROPRIETARY_TLV_BASE_ID + 0x24) /* 0x0124 */
389*4882a593Smuzhiyun 
390*4882a593Smuzhiyun /** TLV type : Data RSSI low */
391*4882a593Smuzhiyun #define TLV_TYPE_RSSI_LOW_DATA (PROPRIETARY_TLV_BASE_ID + 0x26) /* 0x0126 */
392*4882a593Smuzhiyun /** TLV type : Data SNR low */
393*4882a593Smuzhiyun #define TLV_TYPE_SNR_LOW_DATA (PROPRIETARY_TLV_BASE_ID + 0x27) /* 0x0127 */
394*4882a593Smuzhiyun /** TLV type : Data RSSI high */
395*4882a593Smuzhiyun #define TLV_TYPE_RSSI_HIGH_DATA (PROPRIETARY_TLV_BASE_ID + 0x28) /* 0x0128 */
396*4882a593Smuzhiyun /** TLV type : Data SNR high */
397*4882a593Smuzhiyun #define TLV_TYPE_SNR_HIGH_DATA (PROPRIETARY_TLV_BASE_ID + 0x29) /* 0x0129 */
398*4882a593Smuzhiyun 
399*4882a593Smuzhiyun /** TLV type : Channel band list */
400*4882a593Smuzhiyun #define TLV_TYPE_CHANNELBANDLIST (PROPRIETARY_TLV_BASE_ID + 0x2a) /* 0x012a */
401*4882a593Smuzhiyun 
402*4882a593Smuzhiyun /** TLV type : Security Cfg */
403*4882a593Smuzhiyun #define TLV_TYPE_SECURITY_CFG (PROPRIETARY_TLV_BASE_ID + 0x3a) /* 0x013a */
404*4882a593Smuzhiyun 
405*4882a593Smuzhiyun /** TLV type : Passphrase */
406*4882a593Smuzhiyun #define TLV_TYPE_PASSPHRASE (PROPRIETARY_TLV_BASE_ID + 0x3c) /* 0x013c */
407*4882a593Smuzhiyun /** TLV type : SAE Password */
408*4882a593Smuzhiyun #define TLV_TYPE_SAE_PASSWORD (PROPRIETARY_TLV_BASE_ID + 0x141) /* 0x0241 */
409*4882a593Smuzhiyun /** TLV type : SAE PWE Derivation Mode */
410*4882a593Smuzhiyun #define TLV_TYPE_WPA3_SAE_PWE_DERIVATION_MODE                                  \
411*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 339) /* 0x0100 + 0x153 */
412*4882a593Smuzhiyun /** TLV type : Encryption Protocol TLV */
413*4882a593Smuzhiyun #define TLV_TYPE_ENCRYPTION_PROTO                                              \
414*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x40) /* 0x0140                             \
415*4882a593Smuzhiyun 					  */
416*4882a593Smuzhiyun /** TLV type : Cipher TLV */
417*4882a593Smuzhiyun #define TLV_TYPE_CIPHER (PROPRIETARY_TLV_BASE_ID + 0x42) /* 0x0142 */
418*4882a593Smuzhiyun /** TLV type : PMK */
419*4882a593Smuzhiyun #define TLV_TYPE_PMK (PROPRIETARY_TLV_BASE_ID + 0x44) /* 0x0144 */
420*4882a593Smuzhiyun 
421*4882a593Smuzhiyun /** TLV type : BCN miss */
422*4882a593Smuzhiyun #define TLV_TYPE_PRE_BCNMISS (PROPRIETARY_TLV_BASE_ID + 0x49) /* 0x0149 */
423*4882a593Smuzhiyun 
424*4882a593Smuzhiyun /** TLV type : ENABLE ROAM IE */
425*4882a593Smuzhiyun #define TLV_TYPE_ROAM (PROPRIETARY_TLV_BASE_ID + 245)
426*4882a593Smuzhiyun /** TLV type : AP LIST IE */
427*4882a593Smuzhiyun #define TLV_TYPE_APLIST (PROPRIETARY_TLV_BASE_ID + 246)
428*4882a593Smuzhiyun /** TLV type : PMK */
429*4882a593Smuzhiyun #define TLV_TYPE_PMK_R0 (PROPRIETARY_TLV_BASE_ID + 247)
430*4882a593Smuzhiyun /** TLV type : PMK */
431*4882a593Smuzhiyun #define TLV_TYPE_PMK_R0_NAME (PROPRIETARY_TLV_BASE_ID + 248)
432*4882a593Smuzhiyun /** TLV type : TRIGGER CONDITION*/
433*4882a593Smuzhiyun #define TLV_TYPE_ROM_TRIGGER (PROPRIETARY_TLV_BASE_ID + 264)
434*4882a593Smuzhiyun /** TLV type : RETRY_COUNT*/
435*4882a593Smuzhiyun #define TLV_TYPE_ROM_RETRY_COUNT (PROPRIETARY_TLV_BASE_ID + 265)
436*4882a593Smuzhiyun /** TLV type : BGSCAN SETTING*/
437*4882a593Smuzhiyun #define TLV_TYPE_ROM_BGSCAN (PROPRIETARY_TLV_BASE_ID + 266)
438*4882a593Smuzhiyun /** TLV type : PARA RSSI*/
439*4882a593Smuzhiyun #define TLV_TYPE_ROM_PARA_RSSI (PROPRIETARY_TLV_BASE_ID + 267)
440*4882a593Smuzhiyun /** TLV type : BSSID blacklist*/
441*4882a593Smuzhiyun #define TLV_TYPE_BLACKLIST_BSSID (PROPRIETARY_TLV_BASE_ID + 0x11d)
442*4882a593Smuzhiyun /** TLV type : BAND & RSSI*/
443*4882a593Smuzhiyun #define TLV_TYPE_BAND_RSSI (PROPRIETARY_TLV_BASE_ID + 0x11e)
444*4882a593Smuzhiyun /** TLV type : ESS scan*/
445*4882a593Smuzhiyun #define TLV_TYPE_ENERGYEFFICIENTSCAN (PROPRIETARY_TLV_BASE_ID + 0xda)
446*4882a593Smuzhiyun /** TLV type : KEY params*/
447*4882a593Smuzhiyun #define TLV_TYPE_ROAM_OFFLOAD_USER_SET_PMK (PROPRIETARY_TLV_BASE_ID + 291)
448*4882a593Smuzhiyun 
449*4882a593Smuzhiyun /** TLV type: WAPI IE */
450*4882a593Smuzhiyun #define TLV_TYPE_WAPI_IE (PROPRIETARY_TLV_BASE_ID + 0x5e) /* 0x015e */
451*4882a593Smuzhiyun 
452*4882a593Smuzhiyun /** TLV type: MGMT IE */
453*4882a593Smuzhiyun #define TLV_TYPE_MGMT_IE (PROPRIETARY_TLV_BASE_ID + 0x69) /* 0x0169 */
454*4882a593Smuzhiyun /** TLV type: MAX_MGMT_IE */
455*4882a593Smuzhiyun #define TLV_TYPE_MAX_MGMT_IE (PROPRIETARY_TLV_BASE_ID + 0xaa) /* 0x01aa */
456*4882a593Smuzhiyun 
457*4882a593Smuzhiyun /** TLV : Region Domain Code */
458*4882a593Smuzhiyun #define TLV_TYPE_REGION_DOMAIN_CODE                                            \
459*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0xab) /* 0x01ab */
460*4882a593Smuzhiyun 
461*4882a593Smuzhiyun /** TLV type: key param v2 */
462*4882a593Smuzhiyun #define TLV_TYPE_KEY_PARAM_V2 (PROPRIETARY_TLV_BASE_ID + 0x9C) /* 0x019C */
463*4882a593Smuzhiyun 
464*4882a593Smuzhiyun /** TLV type: ps params in hs */
465*4882a593Smuzhiyun #define TLV_TYPE_PS_PARAMS_IN_HS (PROPRIETARY_TLV_BASE_ID + 0xB5) /* 0x01b5 */
466*4882a593Smuzhiyun /** TLV type: hs wake hold off */
467*4882a593Smuzhiyun #define TLV_TYPE_HS_WAKE_HOLDOFF (PROPRIETARY_TLV_BASE_ID + 0xB6) /* 0x01b6 */
468*4882a593Smuzhiyun /** TLV type: wake up source */
469*4882a593Smuzhiyun #define TLV_TYPE_HS_WAKEUP_SOURCE_GPIO                                         \
470*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x105) /* 0x0205 */
471*4882a593Smuzhiyun /** TLV type: management filter  */
472*4882a593Smuzhiyun #define TLV_TYPE_MGMT_FRAME_WAKEUP                                             \
473*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x116) /* 0x0216 */
474*4882a593Smuzhiyun /** TLV type: extend wakeup source */
475*4882a593Smuzhiyun #define TLV_TYPE_WAKEUP_EXTEND (PROPRIETARY_TLV_BASE_ID + 0x118) /* 0x0218 */
476*4882a593Smuzhiyun /** TLV type: HS antenna mode */
477*4882a593Smuzhiyun #define TLV_TYPE_HS_ANTMODE (PROPRIETARY_TLV_BASE_ID + 0x119) /* 0x0219 */
478*4882a593Smuzhiyun 
479*4882a593Smuzhiyun /** TLV type: robustcoex mode */
480*4882a593Smuzhiyun #define TLV_TYPE_ROBUSTCOEX (PROPRIETARY_TLV_BASE_ID + 0x11B) /* 0x021B */
481*4882a593Smuzhiyun 
482*4882a593Smuzhiyun #define TLV_TYPE_DMCS_STATUS (PROPRIETARY_TLV_BASE_ID + 0x13A) /* 0x023A */
483*4882a593Smuzhiyun 
484*4882a593Smuzhiyun /** TLV type : TDLS IDLE TIMEOUT */
485*4882a593Smuzhiyun #define TLV_TYPE_TDLS_IDLE_TIMEOUT                                             \
486*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0xC2) /* 0x01C2                             \
487*4882a593Smuzhiyun 					  */
488*4882a593Smuzhiyun 
489*4882a593Smuzhiyun /** TLV type : HT Capabilities */
490*4882a593Smuzhiyun #define TLV_TYPE_HT_CAP (PROPRIETARY_TLV_BASE_ID + 0x4a) /* 0x014a */
491*4882a593Smuzhiyun /** TLV type : HT Information */
492*4882a593Smuzhiyun #define TLV_TYPE_HT_INFO (PROPRIETARY_TLV_BASE_ID + 0x4b) /* 0x014b */
493*4882a593Smuzhiyun /** TLV type : Secondary Channel Offset */
494*4882a593Smuzhiyun #define TLV_SECONDARY_CHANNEL_OFFSET                                           \
495*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x4c) /* 0x014c */
496*4882a593Smuzhiyun /** TLV type : 20/40 BSS Coexistence */
497*4882a593Smuzhiyun #define TLV_TYPE_2040BSS_COEXISTENCE                                           \
498*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x4d) /* 0x014d */
499*4882a593Smuzhiyun /** TLV type : Overlapping BSS Scan Parameters */
500*4882a593Smuzhiyun #define TLV_TYPE_OVERLAP_BSS_SCAN_PARAM                                        \
501*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x4e) /* 0x014e */
502*4882a593Smuzhiyun /** TLV type : Extended capabilities */
503*4882a593Smuzhiyun #define TLV_TYPE_EXTCAP (PROPRIETARY_TLV_BASE_ID + 0x4f) /* 0x014f */
504*4882a593Smuzhiyun /** TLV type : Set of MCS values that STA desires to use within the BSS */
505*4882a593Smuzhiyun #define TLV_TYPE_HT_OPERATIONAL_MCS_SET                                        \
506*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x50) /* 0x0150 */
507*4882a593Smuzhiyun /** TLV ID : Management Frame */
508*4882a593Smuzhiyun #define TLV_TYPE_MGMT_FRAME (PROPRIETARY_TLV_BASE_ID + 0x68) /* 0x0168 */
509*4882a593Smuzhiyun /** TLV type : RXBA_SYNC */
510*4882a593Smuzhiyun #define TLV_TYPE_RXBA_SYNC (PROPRIETARY_TLV_BASE_ID + 0x99) /* 0x0199 */
511*4882a593Smuzhiyun 
512*4882a593Smuzhiyun #ifdef WIFI_DIRECT_SUPPORT
513*4882a593Smuzhiyun /** TLV type : AP PSK */
514*4882a593Smuzhiyun #define TLV_TYPE_UAP_PSK (PROPRIETARY_TLV_BASE_ID + 0xa8) /* 0x01a8 */
515*4882a593Smuzhiyun /** TLV type : p2p NOA */
516*4882a593Smuzhiyun #define TLV_TYPE_WIFI_DIRECT_NOA (PROPRIETARY_TLV_BASE_ID + 0x83)
517*4882a593Smuzhiyun /** TLV type : p2p opp ps */
518*4882a593Smuzhiyun #define TLV_TYPE_WIFI_DIRECT_OPP_PS (PROPRIETARY_TLV_BASE_ID + 0x84)
519*4882a593Smuzhiyun #endif /* WIFI_DIRECT_SUPPORT */
520*4882a593Smuzhiyun /** TLV type : GPIO TSF LATCH CONFIG */
521*4882a593Smuzhiyun #define TLV_TYPE_GPIO_TSF_LATCH_CONFIG (PROPRIETARY_TLV_BASE_ID + 0x154)
522*4882a593Smuzhiyun /** TLV type : GPIO TSF LATCH REPORT*/
523*4882a593Smuzhiyun #define TLV_TYPE_GPIO_TSF_LATCH_REPORT (PROPRIETARY_TLV_BASE_ID + 0x155)
524*4882a593Smuzhiyun 
525*4882a593Smuzhiyun /** TLV : 20/40 coex config */
526*4882a593Smuzhiyun #define TLV_TYPE_2040_BSS_COEX_CONTROL                                         \
527*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x98) /* 0x0198 */
528*4882a593Smuzhiyun 
529*4882a593Smuzhiyun /** TLV type :  aggr win size */
530*4882a593Smuzhiyun #define TLV_BTCOEX_WL_AGGR_WINSIZE (PROPRIETARY_TLV_BASE_ID + 0xca)
531*4882a593Smuzhiyun /** TLV type :  scan time */
532*4882a593Smuzhiyun #define TLV_BTCOEX_WL_SCANTIME (PROPRIETARY_TLV_BASE_ID + 0Xcb)
533*4882a593Smuzhiyun /** TLV type : Ewpa_eapol_pkt */
534*4882a593Smuzhiyun #define TLV_TYPE_EAPOL_PKT (PROPRIETARY_TLV_BASE_ID + 0xcf)
535*4882a593Smuzhiyun 
536*4882a593Smuzhiyun #define TLV_TYPE_COALESCE_RULE (PROPRIETARY_TLV_BASE_ID + 0x9a)
537*4882a593Smuzhiyun 
538*4882a593Smuzhiyun /** TLV type :  EES Configuration */
539*4882a593Smuzhiyun #define TLV_TYPE_EES_CFG (PROPRIETARY_TLV_BASE_ID + 0xda)
540*4882a593Smuzhiyun /** TLV type :  EES Network Configuration */
541*4882a593Smuzhiyun #define TLV_TYPE_EES_NET_CFG (PROPRIETARY_TLV_BASE_ID + 0xdb)
542*4882a593Smuzhiyun 
543*4882a593Smuzhiyun #define TLV_TYPE_LL_STAT_IFACE (PROPRIETARY_TLV_BASE_ID + 300)
544*4882a593Smuzhiyun #define TLV_TYPE_LL_STAT_RADIO (PROPRIETARY_TLV_BASE_ID + 301)
545*4882a593Smuzhiyun 
546*4882a593Smuzhiyun /** TLV type: fw cap info */
547*4882a593Smuzhiyun #define TLV_TYPE_FW_CAP_INFO (PROPRIETARY_TLV_BASE_ID + 318)
548*4882a593Smuzhiyun 
549*4882a593Smuzhiyun /** TLV type: secure boot uuid */
550*4882a593Smuzhiyun #define TLV_TYPE_SECURE_BOOT_UUID (PROPRIETARY_TLV_BASE_ID + 348)
551*4882a593Smuzhiyun 
552*4882a593Smuzhiyun /** ADDBA TID mask */
553*4882a593Smuzhiyun #define ADDBA_TID_MASK (MBIT(2) | MBIT(3) | MBIT(4) | MBIT(5))
554*4882a593Smuzhiyun /** DELBA TID mask */
555*4882a593Smuzhiyun #define DELBA_TID_MASK (MBIT(12) | MBIT(13) | MBIT(14) | MBIT(15))
556*4882a593Smuzhiyun /** ADDBA Starting Sequence Number Mask */
557*4882a593Smuzhiyun #define SSN_MASK 0xfff0
558*4882a593Smuzhiyun 
559*4882a593Smuzhiyun /** Block Ack result status */
560*4882a593Smuzhiyun /** Block Ack Result : Success */
561*4882a593Smuzhiyun #define BA_RESULT_SUCCESS 0x0
562*4882a593Smuzhiyun /** Block Ack Result : Execution failure */
563*4882a593Smuzhiyun #define BA_RESULT_FAILURE 0x1
564*4882a593Smuzhiyun /** Block Ack Result : Timeout */
565*4882a593Smuzhiyun #define BA_RESULT_TIMEOUT 0x2
566*4882a593Smuzhiyun /** Block Ack Result : Data invalid */
567*4882a593Smuzhiyun #define BA_RESULT_DATA_INVALID 0x3
568*4882a593Smuzhiyun 
569*4882a593Smuzhiyun /** Get the baStatus (NOT_SETUP, COMPLETE, IN_PROGRESS)
570*4882a593Smuzhiyun  *  in Tx BA stream table */
571*4882a593Smuzhiyun #define IS_BASTREAM_SETUP(ptr) (ptr->ba_status)
572*4882a593Smuzhiyun 
573*4882a593Smuzhiyun /** An AMPDU/AMSDU could be disallowed for certain TID. 0xff means
574*4882a593Smuzhiyun  *  no aggregation is enabled for the assigned TID */
575*4882a593Smuzhiyun #define BA_STREAM_NOT_ALLOWED 0xff
576*4882a593Smuzhiyun 
577*4882a593Smuzhiyun #ifdef STA_SUPPORT
578*4882a593Smuzhiyun #endif
579*4882a593Smuzhiyun 
580*4882a593Smuzhiyun /** Test if 11n is enabled by checking the HTCap IE */
581*4882a593Smuzhiyun #define IS_11N_ENABLED(priv)                                                   \
582*4882a593Smuzhiyun 	((priv->config_bands & BAND_GN || priv->config_bands & BAND_AN) &&     \
583*4882a593Smuzhiyun 	 priv->curr_bss_params.bss_descriptor.pht_cap &&                       \
584*4882a593Smuzhiyun 	 !priv->curr_bss_params.bss_descriptor.disable_11n)
585*4882a593Smuzhiyun /** Find out if we are the initiator or not */
586*4882a593Smuzhiyun #define INITIATOR_BIT(DelBAParamSet)                                           \
587*4882a593Smuzhiyun 	(((DelBAParamSet)&MBIT(DELBA_INITIATOR_POS)) >> DELBA_INITIATOR_POS)
588*4882a593Smuzhiyun 
589*4882a593Smuzhiyun /** 4K buf size */
590*4882a593Smuzhiyun #define MLAN_TX_DATA_BUF_SIZE_4K 4096
591*4882a593Smuzhiyun /** 8K buf size */
592*4882a593Smuzhiyun #define MLAN_TX_DATA_BUF_SIZE_8K 8192
593*4882a593Smuzhiyun /** 12K buf size */
594*4882a593Smuzhiyun #define MLAN_TX_DATA_BUF_SIZE_12K 12288
595*4882a593Smuzhiyun /** Max Rx AMPDU Size */
596*4882a593Smuzhiyun #define MAX_RX_AMPDU_SIZE_64K 0x03
597*4882a593Smuzhiyun /** Non green field station */
598*4882a593Smuzhiyun #define NON_GREENFIELD_STAS 0x04
599*4882a593Smuzhiyun 
600*4882a593Smuzhiyun /** Max AMSDU size support */
601*4882a593Smuzhiyun #define HWSPEC_MAX_AMSDU_SUPP MBIT(31)
602*4882a593Smuzhiyun /** Greenfield support */
603*4882a593Smuzhiyun #define HWSPEC_GREENFIELD_SUPP MBIT(29)
604*4882a593Smuzhiyun /** SM Power Save enable */
605*4882a593Smuzhiyun #define CAPINFO_SMPS_ENABLE MBIT(27)
606*4882a593Smuzhiyun /** RX STBC support */
607*4882a593Smuzhiyun #define HWSPEC_RXSTBC_SUPP MBIT(26)
608*4882a593Smuzhiyun /** ShortGI @ 40Mhz support */
609*4882a593Smuzhiyun #define HWSPEC_SHORTGI40_SUPP MBIT(24)
610*4882a593Smuzhiyun /** ShortGI @ 20Mhz support */
611*4882a593Smuzhiyun #define HWSPEC_SHORTGI20_SUPP MBIT(23)
612*4882a593Smuzhiyun /** RX LDPC support */
613*4882a593Smuzhiyun #define HWSPEC_LDPC_SUPP MBIT(22)
614*4882a593Smuzhiyun /** Channel width 40Mhz support */
615*4882a593Smuzhiyun #define HWSPEC_CHANBW40_SUPP MBIT(17)
616*4882a593Smuzhiyun /** SM Power Save mode */
617*4882a593Smuzhiyun #define CAPINFO_SMPS_MODE MBIT(9)
618*4882a593Smuzhiyun /** 40Mhz intolarent enable */
619*4882a593Smuzhiyun #define CAPINFO_40MHZ_INTOLARENT MBIT(8)
620*4882a593Smuzhiyun 
621*4882a593Smuzhiyun /** Default 11n capability mask for 2.4GHz */
622*4882a593Smuzhiyun #define DEFAULT_11N_CAP_MASK_BG                                                \
623*4882a593Smuzhiyun 	(HWSPEC_SHORTGI20_SUPP | HWSPEC_RXSTBC_SUPP | HWSPEC_LDPC_SUPP)
624*4882a593Smuzhiyun /** Default 11n capability mask for 5GHz */
625*4882a593Smuzhiyun #define DEFAULT_11N_CAP_MASK_A                                                 \
626*4882a593Smuzhiyun 	(HWSPEC_CHANBW40_SUPP | HWSPEC_SHORTGI20_SUPP |                        \
627*4882a593Smuzhiyun 	 HWSPEC_MAX_AMSDU_SUPP | HWSPEC_SHORTGI40_SUPP | HWSPEC_RXSTBC_SUPP |  \
628*4882a593Smuzhiyun 	 HWSPEC_LDPC_SUPP)
629*4882a593Smuzhiyun 
630*4882a593Smuzhiyun /** Default 11n TX BF capability 2X2 chip **/
631*4882a593Smuzhiyun #define DEFAULT_11N_TX_BF_CAP_2X2 0x19E74618
632*4882a593Smuzhiyun /** Default 11n TX BF capability 1X1 chip **/
633*4882a593Smuzhiyun #define DEFAULT_11N_TX_BF_CAP_1X1 0x19E74608
634*4882a593Smuzhiyun 
635*4882a593Smuzhiyun /** Bits to ignore in hw_dev_cap as these bits are set in get_hw_spec */
636*4882a593Smuzhiyun #define IGN_HW_DEV_CAP                                                         \
637*4882a593Smuzhiyun 	(CAPINFO_40MHZ_INTOLARENT | (CAPINFO_SMPS_ENABLE | CAPINFO_SMPS_MODE))
638*4882a593Smuzhiyun 
639*4882a593Smuzhiyun /** HW_SPEC FwCapInfo : If FW support RSN Replay Detection */
640*4882a593Smuzhiyun #define ISSUPP_RSN_REPLAY_DETECTION(FwCapInfo) (FwCapInfo & MBIT(28))
641*4882a593Smuzhiyun 
642*4882a593Smuzhiyun /** HW_SPEC FwCapInfo */
643*4882a593Smuzhiyun #define ISSUPP_11NENABLED(FwCapInfo) (FwCapInfo & MBIT(11))
644*4882a593Smuzhiyun 
645*4882a593Smuzhiyun /** HW_SPEC Dot11nDevCap : MAX AMSDU supported */
646*4882a593Smuzhiyun #define ISSUPP_MAXAMSDU(Dot11nDevCap) (Dot11nDevCap & MBIT(31))
647*4882a593Smuzhiyun /** HW_SPEC Dot11nDevCap : Beamforming support */
648*4882a593Smuzhiyun #define ISSUPP_BEAMFORMING(Dot11nDevCap) (Dot11nDevCap & MBIT(30))
649*4882a593Smuzhiyun /** HW_SPEC Dot11nDevCap : Green field support */
650*4882a593Smuzhiyun #define ISSUPP_GREENFIELD(Dot11nDevCap) (Dot11nDevCap & MBIT(29))
651*4882a593Smuzhiyun /** HW_SPEC Dot11nDevCap : AMPDU support */
652*4882a593Smuzhiyun #define ISSUPP_AMPDU(Dot11nDevCap) (Dot11nDevCap & MBIT(28))
653*4882a593Smuzhiyun /** HW_SPEC Dot11nDevCap : MIMO PS support  */
654*4882a593Smuzhiyun #define ISSUPP_MIMOPS(Dot11nDevCap) (Dot11nDevCap & MBIT(27))
655*4882a593Smuzhiyun /** HW_SPEC Dot11nDevCap : Rx STBC support */
656*4882a593Smuzhiyun #define ISSUPP_RXSTBC(Dot11nDevCap) (Dot11nDevCap & MBIT(26))
657*4882a593Smuzhiyun /** HW_SPEC Dot11nDevCap : Tx STBC support */
658*4882a593Smuzhiyun #define ISSUPP_TXSTBC(Dot11nDevCap) (Dot11nDevCap & MBIT(25))
659*4882a593Smuzhiyun /** HW_SPEC Dot11nDevCap : Short GI @ 40Mhz support */
660*4882a593Smuzhiyun #define ISSUPP_SHORTGI40(Dot11nDevCap) (Dot11nDevCap & MBIT(24))
661*4882a593Smuzhiyun /** HW_SPEC Dot11nDevCap : Reset Short GI @ 40Mhz support */
662*4882a593Smuzhiyun #define RESETSUPP_SHORTGI40(Dot11nDevCap) (Dot11nDevCap &= ~MBIT(24))
663*4882a593Smuzhiyun /** HW_SPEC Dot11nDevCap : Short GI @ 20Mhz support */
664*4882a593Smuzhiyun #define ISSUPP_SHORTGI20(Dot11nDevCap) (Dot11nDevCap & MBIT(23))
665*4882a593Smuzhiyun /** HW_SPEC Dot11nDevCap : Rx LDPC support */
666*4882a593Smuzhiyun #define ISSUPP_RXLDPC(Dot11nDevCap) (Dot11nDevCap & MBIT(22))
667*4882a593Smuzhiyun /** HW_SPEC Dot11nDevCap : Number of TX BA streams supported */
668*4882a593Smuzhiyun #define ISSUPP_GETTXBASTREAM(Dot11nDevCap) ((Dot11nDevCap >> 18) & 0xF)
669*4882a593Smuzhiyun /** HW_SPEC Dot11nDevCap : Channel BW support @ 40Mhz  support */
670*4882a593Smuzhiyun #define ISSUPP_CHANWIDTH40(Dot11nDevCap) (Dot11nDevCap & MBIT(17))
671*4882a593Smuzhiyun /** HW_SPEC Dot11nDevCap : Channel BW support @ 20Mhz  support */
672*4882a593Smuzhiyun #define ISSUPP_CHANWIDTH20(Dot11nDevCap) (Dot11nDevCap & MBIT(16))
673*4882a593Smuzhiyun /** HW_SPEC Dot11nDevCap : Channel BW support @ 10Mhz  support */
674*4882a593Smuzhiyun #define ISSUPP_CHANWIDTH10(Dot11nDevCap) (Dot11nDevCap & MBIT(15))
675*4882a593Smuzhiyun /** Dot11nUsrCap : SMPS static/dynamic mode if BIT27 MIMO PS support eanbled */
676*4882a593Smuzhiyun #define ISSUPP_SMPS_DYNAMIC_MODE(Dot11nDevCap) (Dot11nDevCap & MBIT(9))
677*4882a593Smuzhiyun /** Dot11nUsrCap : 40Mhz intolarance enabled */
678*4882a593Smuzhiyun #define ISENABLED_40MHZ_INTOLARENT(Dot11nDevCap) (Dot11nDevCap & MBIT(8))
679*4882a593Smuzhiyun /** Dot11nUsrCap : Reset 40Mhz intolarance enabled */
680*4882a593Smuzhiyun #define RESET_40MHZ_INTOLARENT(Dot11nDevCap) (Dot11nDevCap &= ~MBIT(8))
681*4882a593Smuzhiyun /** HW_SPEC Dot11nDevCap : Rx AntennaD support */
682*4882a593Smuzhiyun #define ISSUPP_RXANTENNAD(Dot11nDevCap) (Dot11nDevCap & MBIT(7))
683*4882a593Smuzhiyun /** HW_SPEC Dot11nDevCap : Rx AntennaC support */
684*4882a593Smuzhiyun #define ISSUPP_RXANTENNAC(Dot11nDevCap) (Dot11nDevCap & MBIT(6))
685*4882a593Smuzhiyun /** HW_SPEC Dot11nDevCap : Rx AntennaB support */
686*4882a593Smuzhiyun #define ISSUPP_RXANTENNAB(Dot11nDevCap) (Dot11nDevCap & MBIT(5))
687*4882a593Smuzhiyun /** HW_SPEC Dot11nDevCap : Rx AntennaA support */
688*4882a593Smuzhiyun #define ISSUPP_RXANTENNAA(Dot11nDevCap) (Dot11nDevCap & MBIT(4))
689*4882a593Smuzhiyun /** HW_SPEC Dot11nDevCap : Tx AntennaD support */
690*4882a593Smuzhiyun #define ISSUPP_TXANTENNAD(Dot11nDevCap) (Dot11nDevCap & MBIT(3))
691*4882a593Smuzhiyun /** HW_SPEC Dot11nDevCap : Tx AntennaC support */
692*4882a593Smuzhiyun #define ISSUPP_TXANTENNAC(Dot11nDevCap) (Dot11nDevCap & MBIT(2))
693*4882a593Smuzhiyun /** HW_SPEC Dot11nDevCap : Tx AntennaB support */
694*4882a593Smuzhiyun #define ISSUPP_TXANTENNAB(Dot11nDevCap) (Dot11nDevCap & MBIT(1))
695*4882a593Smuzhiyun /** HW_SPEC Dot11nDevCap : Tx AntennaA support */
696*4882a593Smuzhiyun #define ISSUPP_TXANTENNAA(Dot11nDevCap) (Dot11nDevCap & MBIT(0))
697*4882a593Smuzhiyun 
698*4882a593Smuzhiyun /** HW_SPEC Dot11nDevCap : Set support of channel bw @ 40Mhz */
699*4882a593Smuzhiyun #define SETSUPP_CHANWIDTH40(Dot11nDevCap) (Dot11nDevCap |= MBIT(17))
700*4882a593Smuzhiyun /** HW_SPEC Dot11nDevCap : Reset support of channel bw @ 40Mhz */
701*4882a593Smuzhiyun #define RESETSUPP_CHANWIDTH40(Dot11nDevCap) (Dot11nDevCap &= ~MBIT(17))
702*4882a593Smuzhiyun 
703*4882a593Smuzhiyun /** DevMCSSupported : Tx MCS supported */
704*4882a593Smuzhiyun #define GET_TXMCSSUPP(DevMCSSupported) (DevMCSSupported >> 4)
705*4882a593Smuzhiyun /** DevMCSSupported : Rx MCS supported */
706*4882a593Smuzhiyun #define GET_RXMCSSUPP(DevMCSSupported) (DevMCSSupported & 0x0f)
707*4882a593Smuzhiyun 
708*4882a593Smuzhiyun /** GET HTCapInfo : Supported Channel BW */
709*4882a593Smuzhiyun #define GETHT_SUPPCHANWIDTH(HTCapInfo) (HTCapInfo & MBIT(1))
710*4882a593Smuzhiyun /** GET HTCapInfo : Support for Greenfield */
711*4882a593Smuzhiyun #define GETHT_GREENFIELD(HTCapInfo) (HTCapInfo & MBIT(4))
712*4882a593Smuzhiyun /** GET HTCapInfo : Support for Short GI @ 20Mhz */
713*4882a593Smuzhiyun #define GETHT_SHORTGI20(HTCapInfo) (HTCapInfo & MBIT(5))
714*4882a593Smuzhiyun /** GET HTCapInfo : Support for Short GI @ 40Mhz */
715*4882a593Smuzhiyun #define GETHT_SHORTGI40(HTCapInfo) (HTCapInfo & MBIT(6))
716*4882a593Smuzhiyun /** GET HTCapInfo : Support for Tx STBC */
717*4882a593Smuzhiyun #define GETHT_TXSTBC(HTCapInfo) (HTCapInfo & MBIT(7))
718*4882a593Smuzhiyun 
719*4882a593Smuzhiyun /** GET HTCapInfo : Support for Rx STBC */
720*4882a593Smuzhiyun #define GETHT_RXSTBC(HTCapInfo) ((HTCapInfo >> 8) & 0x03)
721*4882a593Smuzhiyun /** GET HTCapInfo : Support for Delayed ACK */
722*4882a593Smuzhiyun #define GETHT_DELAYEDBACK(HTCapInfo) (HTCapInfo & MBIT(10))
723*4882a593Smuzhiyun /** GET HTCapInfo : Support for Max AMSDU */
724*4882a593Smuzhiyun #define GETHT_MAXAMSDU(HTCapInfo) (HTCapInfo & MBIT(11))
725*4882a593Smuzhiyun 
726*4882a593Smuzhiyun /** GET HTCapInfo : Support 40Mhz Intolarence */
727*4882a593Smuzhiyun #define GETHT_40MHZ_INTOLARANT(HTCapInfo) (HTCapInfo & MBIT(14))
728*4882a593Smuzhiyun 
729*4882a593Smuzhiyun /** SET HTCapInfo : Set support for LDPC coding capability */
730*4882a593Smuzhiyun #define SETHT_LDPCCODINGCAP(HTCapInfo) (HTCapInfo |= MBIT(0))
731*4882a593Smuzhiyun /** SET HTCapInfo : Set support for Channel BW */
732*4882a593Smuzhiyun #define SETHT_SUPPCHANWIDTH(HTCapInfo) (HTCapInfo |= MBIT(1))
733*4882a593Smuzhiyun /** SET HTCapInfo : Set support for Greenfield */
734*4882a593Smuzhiyun #define SETHT_GREENFIELD(HTCapInfo) (HTCapInfo |= MBIT(4))
735*4882a593Smuzhiyun /** SET HTCapInfo : Set support for Short GI @ 20Mhz */
736*4882a593Smuzhiyun #define SETHT_SHORTGI20(HTCapInfo) (HTCapInfo |= MBIT(5))
737*4882a593Smuzhiyun /** SET HTCapInfo : Set support for Short GI @ 40Mhz */
738*4882a593Smuzhiyun #define SETHT_SHORTGI40(HTCapInfo) (HTCapInfo |= MBIT(6))
739*4882a593Smuzhiyun /** SET HTCapInfo : Set support for Tx STBC */
740*4882a593Smuzhiyun #define SETHT_TXSTBC(HTCapInfo) (HTCapInfo |= MBIT(7))
741*4882a593Smuzhiyun /** SET HTCapInfo : Set support for Rx STBC */
742*4882a593Smuzhiyun #define SETHT_RXSTBC(HTCapInfo, value) (HTCapInfo |= (value << 8))
743*4882a593Smuzhiyun /** SET HTCapInfo : Set support for delayed block ack */
744*4882a593Smuzhiyun #define SETHT_DELAYEDBACK(HTCapInfo) (HTCapInfo |= MBIT(10))
745*4882a593Smuzhiyun /** SET HTCapInfo : Set support for Max size AMSDU */
746*4882a593Smuzhiyun #define SETHT_MAXAMSDU(HTCapInfo) (HTCapInfo |= MBIT(11))
747*4882a593Smuzhiyun /** SET HTCapInfo : Set support for DSSS/CCK Rates @ 40Mhz */
748*4882a593Smuzhiyun #define SETHT_DSSSCCK40(HTCapInfo) (HTCapInfo |= MBIT(12))
749*4882a593Smuzhiyun /** SET HTCapInfo : Enable 40Mhz Intolarence */
750*4882a593Smuzhiyun #define SETHT_40MHZ_INTOLARANT(HTCapInfo) (HTCapInfo |= MBIT(14))
751*4882a593Smuzhiyun 
752*4882a593Smuzhiyun /** SET HTCapInfo : Set SM power save disabled */
753*4882a593Smuzhiyun #define SETHT_SMPS_DISABLE(HTCapInfo) ((HTCapInfo) |= (MBIT(2) | MBIT(3)))
754*4882a593Smuzhiyun /** SET HTCapInfo : Set Dynamic SM power save */
755*4882a593Smuzhiyun #define SETHT_SMPS_DYNAMIC(HTCapInfo) ((HTCapInfo) |= MBIT(2))
756*4882a593Smuzhiyun 
757*4882a593Smuzhiyun /** RESET HTCapInfo : Set support for LDPC coding capability */
758*4882a593Smuzhiyun #define RESETHT_LDPCCODINGCAP(HTCapInfo) (HTCapInfo &= ~MBIT(0))
759*4882a593Smuzhiyun /** RESET HTCapInfo : Set support for Channel BW */
760*4882a593Smuzhiyun #define RESETHT_SUPPCHANWIDTH(HTCapInfo) (HTCapInfo &= ~MBIT(1))
761*4882a593Smuzhiyun /** RESET HTCapInfo : Set support for Greenfield */
762*4882a593Smuzhiyun #define RESETHT_GREENFIELD(HTCapInfo) (HTCapInfo &= ~MBIT(4))
763*4882a593Smuzhiyun /** RESET HTCapInfo : Set support for Short GI @ 20Mhz */
764*4882a593Smuzhiyun #define RESETHT_SHORTGI20(HTCapInfo) (HTCapInfo &= ~MBIT(5))
765*4882a593Smuzhiyun /** RESET HTCapInfo : Set support for Short GI @ 40Mhz */
766*4882a593Smuzhiyun #define RESETHT_SHORTGI40(HTCapInfo) (HTCapInfo &= ~MBIT(6))
767*4882a593Smuzhiyun /** RESET HTCapInfo : Set support for Tx STBC */
768*4882a593Smuzhiyun #define RESETHT_TXSTBC(HTCapInfo) (HTCapInfo &= ~MBIT(7))
769*4882a593Smuzhiyun /** RESET HTCapInfo : Set support for Rx STBC */
770*4882a593Smuzhiyun #define RESETHT_RXSTBC(HTCapInfo) (HTCapInfo &= ~(0x03 << 8))
771*4882a593Smuzhiyun /** RESET HTCapInfo : Set support for delayed block ack */
772*4882a593Smuzhiyun #define RESETHT_DELAYEDBACK(HTCapInfo) (HTCapInfo &= ~MBIT(10))
773*4882a593Smuzhiyun /** RESET HTCapInfo : Set support for Max size AMSDU */
774*4882a593Smuzhiyun #define RESETHT_MAXAMSDU(HTCapInfo) (HTCapInfo &= ~MBIT(11))
775*4882a593Smuzhiyun /** RESET HTCapInfo : Disable 40Mhz Intolarence */
776*4882a593Smuzhiyun #define RESETHT_40MHZ_INTOLARANT(HTCapInfo) (HTCapInfo &= ~MBIT(14))
777*4882a593Smuzhiyun /** RESET HTCapInfo: Enable SM power save */
778*4882a593Smuzhiyun #define RESETHT_SM_POWERSAVE(HTCapInfo) ((HTCapInfo) &= ~(MBIT(2) | MBIT(3)))
779*4882a593Smuzhiyun /** RESET HTExtCap : Clear RD Responder bit */
780*4882a593Smuzhiyun #define RESETHT_EXTCAP_RDG(HTExtCap) (HTExtCap &= ~MBIT(11))
781*4882a593Smuzhiyun /** SET MCS32 */
782*4882a593Smuzhiyun #define SETHT_MCS32(x) (x[4] |= 1)
783*4882a593Smuzhiyun /** Set mcs set defined bit */
784*4882a593Smuzhiyun #define SETHT_MCS_SET_DEFINED(x) (x[12] |= 1)
785*4882a593Smuzhiyun /** Set the highest Rx data rate */
786*4882a593Smuzhiyun #define SETHT_RX_HIGHEST_DT_SUPP(x, y) ((*(t_u16 *)(x + 10)) = y)
787*4882a593Smuzhiyun /** AMPDU factor size */
788*4882a593Smuzhiyun #define AMPDU_FACTOR_64K 0x03
789*4882a593Smuzhiyun /** Set AMPDU size in A-MPDU paramter field */
790*4882a593Smuzhiyun #define SETAMPDU_SIZE(x, y)                                                    \
791*4882a593Smuzhiyun 	do {                                                                   \
792*4882a593Smuzhiyun 		x = x & ~0x03;                                                 \
793*4882a593Smuzhiyun 		x |= y & 0x03;                                                 \
794*4882a593Smuzhiyun 	} while (0) /** Set AMPDU spacing in A-MPDU paramter field */
795*4882a593Smuzhiyun #define SETAMPDU_SPACING(x, y)                                                 \
796*4882a593Smuzhiyun 	do {                                                                   \
797*4882a593Smuzhiyun 		x = x & ~0x1c;                                                 \
798*4882a593Smuzhiyun 		x |= (y & 0x07) << 2;                                          \
799*4882a593Smuzhiyun 	} while (0)
800*4882a593Smuzhiyun 
801*4882a593Smuzhiyun /** RadioType : Support for Band A */
802*4882a593Smuzhiyun #define ISSUPP_BANDA(FwCapInfo) (FwCapInfo & MBIT(10))
803*4882a593Smuzhiyun /** RadioType : Support for 40Mhz channel BW */
804*4882a593Smuzhiyun #define ISALLOWED_CHANWIDTH40(Field2) (Field2 & MBIT(2))
805*4882a593Smuzhiyun /** RadioType : Set support 40Mhz channel */
806*4882a593Smuzhiyun #define SET_CHANWIDTH40(Field2) (Field2 |= MBIT(2))
807*4882a593Smuzhiyun /** RadioType : Reset support 40Mhz channel */
808*4882a593Smuzhiyun #define RESET_CHANWIDTH40(Field2) (Field2 &= ~(MBIT(0) | MBIT(1) | MBIT(2)))
809*4882a593Smuzhiyun /** RadioType : Get secondary channel */
810*4882a593Smuzhiyun #define GET_SECONDARYCHAN(Field2) (Field2 & (MBIT(0) | MBIT(1)))
811*4882a593Smuzhiyun 
812*4882a593Smuzhiyun /** ExtCap : Support for FILS */
813*4882a593Smuzhiyun #define ISSUPP_EXTCAP_FILS(ext_cap) (ext_cap.FILS)
814*4882a593Smuzhiyun /** ExtCap : Set support FILS */
815*4882a593Smuzhiyun #define SET_EXTCAP_FILS(ext_cap) (ext_cap.FILS = 1)
816*4882a593Smuzhiyun /** ExtCap : Reset support FILS */
817*4882a593Smuzhiyun #define RESET_EXTCAP_FILS(ext_cap) (ext_cap.FILS = 0)
818*4882a593Smuzhiyun 
819*4882a593Smuzhiyun /** ExtCap : Support for TDLS */
820*4882a593Smuzhiyun #define ISSUPP_EXTCAP_TDLS(ext_cap) (ext_cap.TDLSSupport)
821*4882a593Smuzhiyun /** ExtCap : Set support TDLS */
822*4882a593Smuzhiyun #define SET_EXTCAP_TDLS(ext_cap) (ext_cap.TDLSSupport = 1)
823*4882a593Smuzhiyun /** ExtCap : Reset support TDLS */
824*4882a593Smuzhiyun #define RESET_EXTCAP_TDLS(ext_cap) (ext_cap.TDLSSupport = 0)
825*4882a593Smuzhiyun /** ExtCap : Support for TDLS UAPSD */
826*4882a593Smuzhiyun #define ISSUPP_EXTCAP_TDLS_UAPSD(ext_cap) (ext_cap.TDLSPeerUAPSDSupport)
827*4882a593Smuzhiyun /** ExtCap : Set support TDLS UAPSD */
828*4882a593Smuzhiyun #define SET_EXTCAP_TDLS_UAPSD(ext_cap) (ext_cap.TDLSPeerUAPSDSupport = 1)
829*4882a593Smuzhiyun /** ExtCap : Reset support TDLS UAPSD */
830*4882a593Smuzhiyun #define RESET_EXTCAP_TDLS_UAPSD(ext_cap) (ext_cap.TDLSPeerUAPSDSupport = 0)
831*4882a593Smuzhiyun /** ExtCap : Support for TDLS CHANNEL SWITCH */
832*4882a593Smuzhiyun #define ISSUPP_EXTCAP_TDLS_CHAN_SWITCH(ext_cap) (ext_cap.TDLSChannelSwitching)
833*4882a593Smuzhiyun /** ExtCap : Set support TDLS CHANNEL SWITCH */
834*4882a593Smuzhiyun #define SET_EXTCAP_TDLS_CHAN_SWITCH(ext_cap) (ext_cap.TDLSChannelSwitching = 1)
835*4882a593Smuzhiyun /** ExtCap : Reset support TDLS CHANNEL SWITCH */
836*4882a593Smuzhiyun #define RESET_EXTCAP_TDLS_CHAN_SWITCH(ext_cap)                                 \
837*4882a593Smuzhiyun 	(ext_cap.TDLSChannelSwitching = 0)
838*4882a593Smuzhiyun /** ExtCap : Set support Multi BSSID */
839*4882a593Smuzhiyun #define SET_EXTCAP_MULTI_BSSID(ext_cap) (ext_cap.MultipleBSSID = 1)
840*4882a593Smuzhiyun /** ExtCap : Support for Interworking */
841*4882a593Smuzhiyun #define ISSUPP_EXTCAP_INTERWORKING(ext_cap) (ext_cap.Interworking)
842*4882a593Smuzhiyun /** ExtCap : Set support Interworking */
843*4882a593Smuzhiyun #define SET_EXTCAP_INTERWORKING(ext_cap) (ext_cap.Interworking = 1)
844*4882a593Smuzhiyun /** ExtCap : Reset support Interworking */
845*4882a593Smuzhiyun #define RESET_EXTCAP_INTERWORKING(ext_cap) (ext_cap.Interworking = 0)
846*4882a593Smuzhiyun /** ExtCap : Support for Operation Mode Notification */
847*4882a593Smuzhiyun #define ISSUPP_EXTCAP_OPERMODENTF(ext_cap) (ext_cap.OperModeNtf)
848*4882a593Smuzhiyun /** ExtCap : Set support Operation Mode Notification */
849*4882a593Smuzhiyun #define SET_EXTCAP_OPERMODENTF(ext_cap) (ext_cap.OperModeNtf = 1)
850*4882a593Smuzhiyun /** ExtCap : Reset support Operation Mode Notification */
851*4882a593Smuzhiyun #define RESET_EXTCAP_OPERMODENTF(ext_cap) (ext_cap.OperModeNtf = 0)
852*4882a593Smuzhiyun /** ExtCap : Support for QosMap */
853*4882a593Smuzhiyun #define ISSUPP_EXTCAP_QOS_MAP(ext_cap) (ext_cap.Qos_Map)
854*4882a593Smuzhiyun /** ExtCap : Set Support QosMap */
855*4882a593Smuzhiyun #define SET_EXTCAP_QOS_MAP(ext_cap) (ext_cap.Qos_Map = 1)
856*4882a593Smuzhiyun /** ExtCap : Reset support QosMap */
857*4882a593Smuzhiyun #define RESET_EXTCAP_QOS_MAP(ext_cap) (ext_cap.Qos_Map = 0)
858*4882a593Smuzhiyun /** ExtCap : Support for BSS_Transition */
859*4882a593Smuzhiyun #define ISSUPP_EXTCAP_BSS_TRANSITION(ext_cap) (ext_cap.BSS_Transition)
860*4882a593Smuzhiyun /** ExtCap : Set Support BSS_Transition */
861*4882a593Smuzhiyun #define SET_EXTCAP_BSS_TRANSITION(ext_cap) (ext_cap.BSS_Transition = 1)
862*4882a593Smuzhiyun /** ExtCap : Reset support BSS_Transition */
863*4882a593Smuzhiyun #define RESET_EXTCAP_BSS_TRANSITION(ext_cap) (ext_cap.BSS_Transition = 0)
864*4882a593Smuzhiyun 
865*4882a593Smuzhiyun /** ExtCap : Support for TDLS wider bandwidth */
866*4882a593Smuzhiyun #define ISSUPP_EXTCAP_TDLS_WIDER_BANDWIDTH(ext_cap) (ext_cap.TDLSWildBandwidth)
867*4882a593Smuzhiyun /** ExtCap : Set support TDLS wider bandwidth */
868*4882a593Smuzhiyun #define SET_EXTCAP_TDLS_WIDER_BANDWIDTH(ext_cap) (ext_cap.TDLSWildBandwidth = 1)
869*4882a593Smuzhiyun /** ExtCap : Reset support TDLS wider bandwidth */
870*4882a593Smuzhiyun #define RESET_EXTCAP_TDLS_WIDER_BANDWIDTH(ext_cap)                             \
871*4882a593Smuzhiyun 	(ext_cap.TDLSWildBandwidth = 0)
872*4882a593Smuzhiyun 
873*4882a593Smuzhiyun /** ExtCap : Support for extend channel switch */
874*4882a593Smuzhiyun #define ISSUPP_EXTCAP_EXT_CHANNEL_SWITCH(ext_cap) (ext_cap.ExtChanSwitching)
875*4882a593Smuzhiyun /** ExtCap : Set support Ext Channel Switch */
876*4882a593Smuzhiyun #define SET_EXTCAP_EXT_CHANNEL_SWITCH(ext_cap) (ext_cap.ExtChanSwitching = 1)
877*4882a593Smuzhiyun /** ExtCap: Set Timing Measurement */
878*4882a593Smuzhiyun #define SET_EXTCAP_EXT_TIMING_MEASUREMENT(ext_cap)                             \
879*4882a593Smuzhiyun 	(ext_cap.TimingMeasurement = 1)
880*4882a593Smuzhiyun /** ExtCap : Reset support Ext Channel Switch */
881*4882a593Smuzhiyun #define RESET_EXTCAP_EXT_CHANNEL_SWITCH(ext_cap) (ext_cap.ExtChanSwitching = 0)
882*4882a593Smuzhiyun 
883*4882a593Smuzhiyun /** ExtCap : Support for TWT RESP */
884*4882a593Smuzhiyun #define ISSUPP_EXTCAP_EXT_TWT_RESP(ext_cap) (ext_cap.TWTResp)
885*4882a593Smuzhiyun /** ExtCap : Set support Ext TWT_REQ */
886*4882a593Smuzhiyun #define SET_EXTCAP_TWT_REQ(ext_cap) (ext_cap.TWTReq = 1)
887*4882a593Smuzhiyun /** ExtCap : ReSet support Ext TWT REQ */
888*4882a593Smuzhiyun #define RESET_EXTCAP_TWT_REQ(ext_cap) (ext_cap.TWTReq = 0)
889*4882a593Smuzhiyun 
890*4882a593Smuzhiyun /** LLC/SNAP header len   */
891*4882a593Smuzhiyun #define LLC_SNAP_LEN 8
892*4882a593Smuzhiyun 
893*4882a593Smuzhiyun /** bandwidth following HTCAP */
894*4882a593Smuzhiyun #define BW_FOLLOW_HTCAP 0
895*4882a593Smuzhiyun /** bandwidth following VHTCAP */
896*4882a593Smuzhiyun #define BW_FOLLOW_VHTCAP 1
897*4882a593Smuzhiyun 
898*4882a593Smuzhiyun /** HW_SPEC FwCapInfo */
899*4882a593Smuzhiyun #define HWSPEC_11ACSGI80_SUPP MBIT(5)
900*4882a593Smuzhiyun #define HWSPEC_11ACRXSTBC_SUPP MBIT(8)
901*4882a593Smuzhiyun 
902*4882a593Smuzhiyun #define ISSUPP_11ACENABLED(FwCapInfo) (FwCapInfo & (MBIT(12) | MBIT(13)))
903*4882a593Smuzhiyun 
904*4882a593Smuzhiyun #define ISSUPP_11AC2GENABLED(FwCapInfo) (FwCapInfo & MBIT(12))
905*4882a593Smuzhiyun #define ISSUPP_11AC5GENABLED(FwCapInfo) (FwCapInfo & MBIT(13))
906*4882a593Smuzhiyun 
907*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : HTC-VHT supported */
908*4882a593Smuzhiyun #define ISSUPP_11ACVHTHTCVHT(Dot11acDevCap) (Dot11acDevCap & MBIT(22))
909*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : VHT TXOP PS support */
910*4882a593Smuzhiyun #define ISSUPP_11ACVHTTXOPPS(Dot11acDevCap) (Dot11acDevCap & MBIT(21))
911*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : MU RX beamformee support */
912*4882a593Smuzhiyun #define ISSUPP_11ACMURXBEAMFORMEE(Dot11acDevCap) (Dot11acDevCap & MBIT(20))
913*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : MU TX beamformee support */
914*4882a593Smuzhiyun #define ISSUPP_11ACMUTXBEAMFORMEE(Dot11acDevCap) (Dot11acDevCap & MBIT(19))
915*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : SU Beamformee support */
916*4882a593Smuzhiyun #define ISSUPP_11ACSUBEAMFORMEE(Dot11acDevCap) (Dot11acDevCap & MBIT(12))
917*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : SU Beamformer support */
918*4882a593Smuzhiyun #define ISSUPP_11ACSUBEAMFORMER(Dot11acDevCap) (Dot11acDevCap & MBIT(11))
919*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : Rx STBC support */
920*4882a593Smuzhiyun #define ISSUPP_11ACRXSTBC(Dot11acDevCap) (Dot11acDevCap & MBIT(8))
921*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : Tx STBC support */
922*4882a593Smuzhiyun #define ISSUPP_11ACTXSTBC(Dot11acDevCap) (Dot11acDevCap & MBIT(7))
923*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : Short GI support for 160MHz BW */
924*4882a593Smuzhiyun #define ISSUPP_11ACSGI160(Dot11acDevCap) (Dot11acDevCap & MBIT(6))
925*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : Short GI support for 80MHz BW */
926*4882a593Smuzhiyun #define ISSUPP_11ACSGI80(Dot11acDevCap) (Dot11acDevCap & MBIT(5))
927*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : LDPC coding support */
928*4882a593Smuzhiyun #define ISSUPP_11ACLDPC(Dot11acDevCap) (Dot11acDevCap & MBIT(4))
929*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : Channel BW 20/40/80/160/80+80 MHz support */
930*4882a593Smuzhiyun #define ISSUPP_11ACBW8080(Dot11acDevCap) (Dot11acDevCap & MBIT(3))
931*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : Channel BW 20/40/80/160 MHz support */
932*4882a593Smuzhiyun #define ISSUPP_11ACBW160(Dot11acDevCap) (Dot11acDevCap & MBIT(2))
933*4882a593Smuzhiyun 
934*4882a593Smuzhiyun /** Set VHT Cap Info: Max MPDU length */
935*4882a593Smuzhiyun #define SET_VHTCAP_MAXMPDULEN(VHTCapInfo, value) (VHTCapInfo |= (value & 0x03))
936*4882a593Smuzhiyun /** Reset VHT Cap Info: Max MPDU length */
937*4882a593Smuzhiyun #define RESET_VHTCAP_MAXMPDULEN(VHTCapInfo) (VHTCapInfo &= ~(MBIT(0) | MBIT(1)))
938*4882a593Smuzhiyun 
939*4882a593Smuzhiyun /** SET VHT CapInfo:  Supported Channel Width SET (2 bits)*/
940*4882a593Smuzhiyun #define SET_VHTCAP_CHWDSET(VHTCapInfo, value)                                  \
941*4882a593Smuzhiyun 	(VHTCapInfo |= ((value & 0x3) << 2))
942*4882a593Smuzhiyun /** SET VHT CapInfo:  Rx STBC (3 bits) */
943*4882a593Smuzhiyun #define SET_VHTCAP_RXSTBC(VHTCapInfo, value)                                   \
944*4882a593Smuzhiyun 	(VHTCapInfo |= ((value & 0x7) << 8))
945*4882a593Smuzhiyun /** SET VHT CapInfo:  Commpressed Steering Num of BFer Ant Supported (3 bits) */
946*4882a593Smuzhiyun #define SET_VHTCAP_SNBFERANT(VHTCapInfo, value)                                \
947*4882a593Smuzhiyun 	(VHTCapInfo |= ((value & 0x7) << 13))
948*4882a593Smuzhiyun /** SET VHT CapInfo:  Num of Sounding Dimensions (3 bits) */
949*4882a593Smuzhiyun #define SET_VHTCAP_NUMSNDDM(VHTCapInfo, value)                                 \
950*4882a593Smuzhiyun 	(VHTCapInfo |= ((value & 0x7) << 16))
951*4882a593Smuzhiyun /** SET VHT CapInfo:  Max AMPDU Length Exponent (3 bits) */
952*4882a593Smuzhiyun #define SET_VHTCAP_MAXAMPDULENEXP(VHTCapInfo, value)                           \
953*4882a593Smuzhiyun 	(VHTCapInfo |= ((value & 0x7) << 23))
954*4882a593Smuzhiyun /** SET VHT CapInfo:  VHT Link Adaptation Capable (2 bits) */
955*4882a593Smuzhiyun #define SET_VHTCAP_LINKADPCAP(VHTCapInfo, value)                               \
956*4882a593Smuzhiyun 	(VHTCapInfo |= ((value & 0x3) << 26))
957*4882a593Smuzhiyun 
958*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : ReSet VHT Link Adapation Capable */
959*4882a593Smuzhiyun #define RESET_11ACVHTLINKCAPA(Dot11acDevCap, value) (Dot11acDevCap &= ~(0x03))
960*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : ReSet Maximum AMPDU Length Exponent */
961*4882a593Smuzhiyun #define RESET_11ACAMPDULENEXP(Dot11acDevCap, value) (Dot11acDevCap &= ~(0x07))
962*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : ReSet support of HTC-VHT */
963*4882a593Smuzhiyun #define RESET_11ACVHTHTCVHT(Dot11acDevCap) (Dot11acDevCap &= ~MBIT(22))
964*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : ReSet support of VHT TXOP PS */
965*4882a593Smuzhiyun #define RESET_11ACVHTTXOPPS(Dot11acDevCap) (Dot11acDevCap &= ~MBIT(21))
966*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : ReSet support of MU RX beamformee */
967*4882a593Smuzhiyun #define RESET_11ACMURXBEAMFORMEE(Dot11acDevCap) (Dot11acDevCap &= ~MBIT(20))
968*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : ReSet support of MU TX beamformee */
969*4882a593Smuzhiyun #define RESET_11ACMUTXBEAMFORMEE(Dot11acDevCap) (Dot11acDevCap &= ~MBIT(19))
970*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : ReSet Number of Sounding Dimensions */
971*4882a593Smuzhiyun #define RESET_11ACSOUNDINGNUM(Dot11acDevCap) (Dot11acDevCap &= ~((0x07) << 16))
972*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : ReSet Compressed Steering Number
973*4882a593Smuzhiyun  * of Beamformer Antenna */
974*4882a593Smuzhiyun #define RESET_11ACBFANTNUM(Dot11acDevCap) (Dot11acDevCap &= ~((0x07) << 13))
975*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : ReSet support of SU Beamformee */
976*4882a593Smuzhiyun #define RESET_11ACSUBEAMFORMEE(Dot11acDevCap) (Dot11acDevCap &= ~MBIT(12))
977*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : ReSet support of SU Beamformer */
978*4882a593Smuzhiyun #define RESET_11ACSUBEAMFORMER(Dot11acDevCap) (Dot11acDevCap &= ~MBIT(11))
979*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : ReSet support of Rx STBC */
980*4882a593Smuzhiyun #define RESET_11ACRXSTBC(Dot11acDevCap) (Dot11acDevCap &= ~((0x07) << 8))
981*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : ReSet support of Tx STBC */
982*4882a593Smuzhiyun #define RESET_11ACTXSTBC(Dot11acDevCap) (Dot11acDevCap &= ~MBIT(7))
983*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : ReSet support of Short GI support for 160MHz BW */
984*4882a593Smuzhiyun #define RESET_11ACSGI160(Dot11acDevCap) (Dot11acDevCap &= ~MBIT(6))
985*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : ReSet support of Short GI support for 80MHz BW */
986*4882a593Smuzhiyun #define RESET_11ACSGI80(Dot11acDevCap) (Dot11acDevCap &= ~MBIT(5))
987*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : ReSet support of LDPC coding */
988*4882a593Smuzhiyun #define RESET_11ACLDPC(Dot11acDevCap) (Dot11acDevCap &= ~MBIT(4))
989*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : ReSet support of
990*4882a593Smuzhiyun  * Channel BW 20/40/80/160/80+80 MHz */
991*4882a593Smuzhiyun #define RESET_11ACBW8080(Dot11acDevCap) (Dot11acDevCap &= ~MBIT(3))
992*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : ReSet support of
993*4882a593Smuzhiyun  * Channel BW 20/40/80/160 MHz */
994*4882a593Smuzhiyun #define RESET_11ACBW160(Dot11acDevCap) (Dot11acDevCap &= ~MBIT(2))
995*4882a593Smuzhiyun /** HW_SPEC Dot11acDevCap : ReSet Max MPDU length */
996*4882a593Smuzhiyun #define RESET_11ACMAXMPDULEN(Dot11acDevCap) (Dot11acDevCap &= ~(0x03))
997*4882a593Smuzhiyun 
998*4882a593Smuzhiyun /** Default 11ac capability mask for 2.4GHz */
999*4882a593Smuzhiyun #define DEFAULT_11AC_CAP_MASK_BG                                               \
1000*4882a593Smuzhiyun 	(HWSPEC_11ACSGI80_SUPP | HWSPEC_11ACRXSTBC_SUPP)
1001*4882a593Smuzhiyun /** Default 11ac capability mask for 5GHz */
1002*4882a593Smuzhiyun #define DEFAULT_11AC_CAP_MASK_A (HWSPEC_11ACSGI80_SUPP | HWSPEC_11ACRXSTBC_SUPP)
1003*4882a593Smuzhiyun /** GET VHT CapInfo : MAX MPDU Length */
1004*4882a593Smuzhiyun #define GET_VHTCAP_MAXMPDULEN(VHTCapInfo) (VHTCapInfo & 0x3)
1005*4882a593Smuzhiyun /** GET VHT CapInfo:  Supported Channel Width SET (2 bits)*/
1006*4882a593Smuzhiyun #define GET_VHTCAP_CHWDSET(VHTCapInfo) ((VHTCapInfo >> 2) & 0x3)
1007*4882a593Smuzhiyun /** GET VHT CapInfo:  Rx STBC (3 bits) */
1008*4882a593Smuzhiyun #define GET_VHTCAP_RXSTBC(VHTCapInfo) ((VHTCapInfo >> 8) & 0x7)
1009*4882a593Smuzhiyun /** GET VHT CapInfo:  Compressed Steering Num of BFer Ant Supported (3 bits) */
1010*4882a593Smuzhiyun #define GET_VHTCAP_SNBFERANT(VHTCapInfo) ((VHTCapInfo >> 13) & 0x7)
1011*4882a593Smuzhiyun /** GET VHT CapInfo:  Num of Sounding Dimensions (3 bits) */
1012*4882a593Smuzhiyun #define GET_VHTCAP_NUMSNDDM(VHTCapInfo) ((VHTCapInfo >> 16) & 0x7)
1013*4882a593Smuzhiyun /** GET VHT CapInfo:  Max AMPDU Length Exponent (3 bits) */
1014*4882a593Smuzhiyun #define GET_VHTCAP_MAXAMPDULENEXP(VHTCapInfo) ((VHTCapInfo >> 23) & 0x7)
1015*4882a593Smuzhiyun /** GET VHT CapInfo:  VHT Link Adaptation Capable (2 bits) */
1016*4882a593Smuzhiyun #define GET_VHTCAP_LINKADPCAP(VHTCapInfo) ((VHTCapInfo >> 26) & 0x3)
1017*4882a593Smuzhiyun /**SET OPERATING MODE:Channel Width:80M*/
1018*4882a593Smuzhiyun #define SET_OPER_MODE_80M(oper_mode)                                           \
1019*4882a593Smuzhiyun 	(oper_mode = (oper_mode & ~MBIT(0)) | MBIT(1))
1020*4882a593Smuzhiyun /**SET OPERATING MODE:Channel Width:40M*/
1021*4882a593Smuzhiyun #define SET_OPER_MODE_40M(oper_mode)                                           \
1022*4882a593Smuzhiyun 	(oper_mode = (oper_mode & ~MBIT(1)) | MBIT(0))
1023*4882a593Smuzhiyun /**SET OPERATING MODE:Channel Width:20M*/
1024*4882a593Smuzhiyun #define SET_OPER_MODE_20M(oper_mode) (oper_mode &= ~(0x03))
1025*4882a593Smuzhiyun #define IS_OPER_MODE_20M(oper_mode) (((oper_mode) & (MBIT(0) | MBIT(1))) == 0)
1026*4882a593Smuzhiyun /**SET OPERATING MODE:Rx NSS:2*/
1027*4882a593Smuzhiyun #define SET_OPER_MODE_2NSS(oper_mode)                                          \
1028*4882a593Smuzhiyun 	(oper_mode = (oper_mode & ~(MBIT(5) | MBIT(6))) | MBIT(4))
1029*4882a593Smuzhiyun /**SET OPERATING MODE:Rx NSS:1*/
1030*4882a593Smuzhiyun #define SET_OPER_MODE_1NSS(oper_mode)                                          \
1031*4882a593Smuzhiyun 	(oper_mode &= ~(MBIT(4) | MBIT(5) | MBIT(6)))
1032*4882a593Smuzhiyun 
1033*4882a593Smuzhiyun #define NO_NSS_SUPPORT 0x3
1034*4882a593Smuzhiyun #define GET_VHTMCS(MCSMapSet) (MCSMapSet & 0xFFFF)
1035*4882a593Smuzhiyun #define GET_VHTNSSMCS(MCSMapSet, nss) ((MCSMapSet >> (2 * (nss - 1))) & 0x3)
1036*4882a593Smuzhiyun #define RET_VHTNSSMCS(MCSMapSet, nss) ((MCSMapSet >> (2 * (nss - 1))) & 0x3)
1037*4882a593Smuzhiyun #define SET_VHTNSSMCS(MCSMapSet, nss, value)                                   \
1038*4882a593Smuzhiyun 	(MCSMapSet |= (value & 0x3) << (2 * (nss - 1)))
1039*4882a593Smuzhiyun 
1040*4882a593Smuzhiyun /** DevMCSSupported : Tx MCS supported */
1041*4882a593Smuzhiyun #define GET_DEVTXMCSMAP(DevMCSMap) (DevMCSMap >> 16)
1042*4882a593Smuzhiyun #define GET_DEVNSSTXMCS(DevMCSMap, nss)                                        \
1043*4882a593Smuzhiyun 	((DevMCSMap >> (2 * (nss - 1) + 16)) & 0x3)
1044*4882a593Smuzhiyun #define SET_DEVNSSTXMCS(DevMCSMap, nss, value)                                 \
1045*4882a593Smuzhiyun 	(DevMCSMap |= (value & 0x3) << (2 * (nss - 1) + 16))
1046*4882a593Smuzhiyun #define RESET_DEVTXMCSMAP(DevMCSMap) (DevMCSMap &= 0xFFFF)
1047*4882a593Smuzhiyun /** DevMCSSupported : Rx MCS supported */
1048*4882a593Smuzhiyun #define GET_DEVRXMCSMAP(DevMCSMap) (DevMCSMap & 0xFFFF)
1049*4882a593Smuzhiyun #define GET_DEVNSSRXMCS(DevMCSMap, nss) ((DevMCSMap >> (2 * (nss - 1))) & 0x3)
1050*4882a593Smuzhiyun #define SET_DEVNSSRXMCS(DevMCSMap, nss, value)                                 \
1051*4882a593Smuzhiyun 	(DevMCSMap |= (value & 0x3) << (2 * (nss - 1)))
1052*4882a593Smuzhiyun #define RESET_DEVRXMCSMAP(DevMCSMap) (DevMCSMap &= 0xFFFF0000)
1053*4882a593Smuzhiyun 
1054*4882a593Smuzhiyun /** TLV type : Rate scope */
1055*4882a593Smuzhiyun #define TLV_TYPE_RATE_DROP_PATTERN                                             \
1056*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x51) /* 0x0151                             \
1057*4882a593Smuzhiyun 					  */
1058*4882a593Smuzhiyun /** TLV type : Rate drop pattern */
1059*4882a593Smuzhiyun #define TLV_TYPE_RATE_DROP_CONTROL                                             \
1060*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x52) /* 0x0152                             \
1061*4882a593Smuzhiyun 					  */
1062*4882a593Smuzhiyun /** TLV type : Rate scope */
1063*4882a593Smuzhiyun #define TLV_TYPE_RATE_SCOPE (PROPRIETARY_TLV_BASE_ID + 0x53) /* 0x0153 */
1064*4882a593Smuzhiyun 
1065*4882a593Smuzhiyun /** TLV type : Power group */
1066*4882a593Smuzhiyun #define TLV_TYPE_POWER_GROUP (PROPRIETARY_TLV_BASE_ID + 0x54) /* 0x0154 */
1067*4882a593Smuzhiyun 
1068*4882a593Smuzhiyun /** Modulation class for DSSS Rates */
1069*4882a593Smuzhiyun #define MOD_CLASS_HR_DSSS 0x03
1070*4882a593Smuzhiyun /** Modulation class for OFDM Rates */
1071*4882a593Smuzhiyun #define MOD_CLASS_OFDM 0x07
1072*4882a593Smuzhiyun /** Modulation class for HT Rates */
1073*4882a593Smuzhiyun #define MOD_CLASS_HT 0x08
1074*4882a593Smuzhiyun /** Modulation class for VHT Rates */
1075*4882a593Smuzhiyun #define MOD_CLASS_VHT 0x09
1076*4882a593Smuzhiyun /** HT bandwidth 20 MHz */
1077*4882a593Smuzhiyun #define HT_BW_20 0
1078*4882a593Smuzhiyun /** HT bandwidth 40 MHz */
1079*4882a593Smuzhiyun #define HT_BW_40 1
1080*4882a593Smuzhiyun /** HT bandwidth 80 MHz */
1081*4882a593Smuzhiyun #define HT_BW_80 2
1082*4882a593Smuzhiyun 
1083*4882a593Smuzhiyun /** TLV type : TX RATE CFG, rename from TLV_TYPE_GI_LTF_SIZE to include CMD and
1084*4882a593Smuzhiyun  * HE ER SU settings to this tlv */
1085*4882a593Smuzhiyun #define TLV_TYPE_TX_RATE_CFG (PROPRIETARY_TLV_BASE_ID + 319) /* 0x023f */
1086*4882a593Smuzhiyun 
1087*4882a593Smuzhiyun /** TLV type : Scan Response */
1088*4882a593Smuzhiyun #define TLV_TYPE_BSS_SCAN_RSP (PROPRIETARY_TLV_BASE_ID + 0x56) /* 0x0156 */
1089*4882a593Smuzhiyun /** TLV type : Scan Response Stats */
1090*4882a593Smuzhiyun #define TLV_TYPE_BSS_SCAN_INFO (PROPRIETARY_TLV_BASE_ID + 0x57) /* 0x0157 */
1091*4882a593Smuzhiyun 
1092*4882a593Smuzhiyun /** TLV type : 11h Basic Rpt */
1093*4882a593Smuzhiyun #define TLV_TYPE_CHANRPT_11H_BASIC                                             \
1094*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x5b) /* 0x015b                             \
1095*4882a593Smuzhiyun 					  */
1096*4882a593Smuzhiyun 
1097*4882a593Smuzhiyun /** TLV type : ZERO DFS Operation */
1098*4882a593Smuzhiyun #define TLV_TYPE_ZERO_DFS_OPERATION (PROPRIETARY_TLV_BASE_ID + 0x13b) // + 315
1099*4882a593Smuzhiyun /** TLV type : DFS W53 Configuration */
1100*4882a593Smuzhiyun #define TLV_TYPE_DFS_W53_CFG (PROPRIETARY_TLV_BASE_ID + 0x145) // + 325
1101*4882a593Smuzhiyun #ifdef OPCHAN
1102*4882a593Smuzhiyun /** TLV type : OpChannel control */
1103*4882a593Smuzhiyun #define TLV_TYPE_OPCHAN_CONTROL_DESC                                           \
1104*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x79) /* 0x0179 */
1105*4882a593Smuzhiyun /** TLV type : OpChannel channel group control */
1106*4882a593Smuzhiyun #define TLV_TYPE_OPCHAN_CHANGRP_CTRL                                           \
1107*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x7a) /* 0x017a */
1108*4882a593Smuzhiyun #endif
1109*4882a593Smuzhiyun 
1110*4882a593Smuzhiyun /** TLV type : Action frame */
1111*4882a593Smuzhiyun #define TLV_TYPE_IEEE_ACTION_FRAME                                             \
1112*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x8c) /* 0x018c                             \
1113*4882a593Smuzhiyun 					  */
1114*4882a593Smuzhiyun 
1115*4882a593Smuzhiyun /** TLV type : SCAN channel gap */
1116*4882a593Smuzhiyun #define TLV_TYPE_SCAN_CHANNEL_GAP                                              \
1117*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0xc5) /* 0x01c5                             \
1118*4882a593Smuzhiyun 					  */
1119*4882a593Smuzhiyun /** TLV type : Channel statistics */
1120*4882a593Smuzhiyun #define TLV_TYPE_CHANNEL_STATS (PROPRIETARY_TLV_BASE_ID + 0xc6) /* 0x01c6 */
1121*4882a593Smuzhiyun /** TLV type : BSS_MODE */
1122*4882a593Smuzhiyun #define TLV_TYPE_BSS_MODE (PROPRIETARY_TLV_BASE_ID + 0xce) /* 0x01ce */
1123*4882a593Smuzhiyun 
1124*4882a593Smuzhiyun /** Firmware Host Command ID Constants */
1125*4882a593Smuzhiyun /** Host Command ID : Get hardware specifications */
1126*4882a593Smuzhiyun #define HostCmd_CMD_GET_HW_SPEC 0x0003
1127*4882a593Smuzhiyun /** Host Command ID : 802.11 scan */
1128*4882a593Smuzhiyun #define HostCmd_CMD_802_11_SCAN 0x0006
1129*4882a593Smuzhiyun /** Host Command ID : 802.11 get log */
1130*4882a593Smuzhiyun #define HostCmd_CMD_802_11_GET_LOG 0x000b
1131*4882a593Smuzhiyun 
1132*4882a593Smuzhiyun /** Host Command id: GET_TX_RX_PKT_STATS */
1133*4882a593Smuzhiyun #define HOST_CMD_TX_RX_PKT_STATS 0x008d
1134*4882a593Smuzhiyun 
1135*4882a593Smuzhiyun /** Host Command ID : 802.11 get/set link layer statistic */
1136*4882a593Smuzhiyun #define HostCmd_CMD_802_11_LINK_STATS 0x0256
1137*4882a593Smuzhiyun 
1138*4882a593Smuzhiyun /** Host Command ID : MAC multicast address */
1139*4882a593Smuzhiyun #define HostCmd_CMD_MAC_MULTICAST_ADR 0x0010
1140*4882a593Smuzhiyun /** Host Command ID : 802.11 EEPROM access */
1141*4882a593Smuzhiyun #define HostCmd_CMD_802_11_EEPROM_ACCESS 0x0059
1142*4882a593Smuzhiyun /** Host Command ID : 802.11 associate */
1143*4882a593Smuzhiyun #define HostCmd_CMD_802_11_ASSOCIATE 0x0012
1144*4882a593Smuzhiyun 
1145*4882a593Smuzhiyun /** Host Command ID : 802.11 SNMP MIB */
1146*4882a593Smuzhiyun #define HostCmd_CMD_802_11_SNMP_MIB 0x0016
1147*4882a593Smuzhiyun /** Host Command ID : MAC register access */
1148*4882a593Smuzhiyun #define HostCmd_CMD_MAC_REG_ACCESS 0x0019
1149*4882a593Smuzhiyun /** Host Command ID : BBP register access */
1150*4882a593Smuzhiyun #define HostCmd_CMD_BBP_REG_ACCESS 0x001a
1151*4882a593Smuzhiyun /** Host Command ID : RF register access */
1152*4882a593Smuzhiyun #define HostCmd_CMD_RF_REG_ACCESS 0x001b
1153*4882a593Smuzhiyun 
1154*4882a593Smuzhiyun /** Host Command ID : 802.11 radio control */
1155*4882a593Smuzhiyun #define HostCmd_CMD_802_11_RADIO_CONTROL 0x001c
1156*4882a593Smuzhiyun /** Host Command ID : 802.11 RF channel */
1157*4882a593Smuzhiyun #define HostCmd_CMD_802_11_RF_CHANNEL 0x001d
1158*4882a593Smuzhiyun /** Host Command ID : 802.11 RF Tx power */
1159*4882a593Smuzhiyun #define HostCmd_CMD_802_11_RF_TX_POWER 0x001e
1160*4882a593Smuzhiyun 
1161*4882a593Smuzhiyun /** Host Command ID : 802.11 RF antenna */
1162*4882a593Smuzhiyun #define HostCmd_CMD_802_11_RF_ANTENNA 0x0020
1163*4882a593Smuzhiyun 
1164*4882a593Smuzhiyun /** Host Command ID : 802.11 deauthenticate */
1165*4882a593Smuzhiyun #define HostCmd_CMD_802_11_DEAUTHENTICATE 0x0024
1166*4882a593Smuzhiyun /** Host Command ID: 802.11 disassoicate */
1167*4882a593Smuzhiyun #define HostCmd_CMD_802_11_DISASSOCIATE 0x0026
1168*4882a593Smuzhiyun /** Host Command ID : MAC control */
1169*4882a593Smuzhiyun #define HostCmd_CMD_MAC_CONTROL 0x0028
1170*4882a593Smuzhiyun /** Host Command ID : 802.11 Ad-Hoc start */
1171*4882a593Smuzhiyun #define HostCmd_CMD_802_11_AD_HOC_START 0x002b
1172*4882a593Smuzhiyun /** Host Command ID : 802.11 Ad-Hoc join */
1173*4882a593Smuzhiyun #define HostCmd_CMD_802_11_AD_HOC_JOIN 0x002c
1174*4882a593Smuzhiyun 
1175*4882a593Smuzhiyun /** Host Command ID: CW Mode */
1176*4882a593Smuzhiyun #define HostCmd_CMD_CW_MODE_CTRL 0x0239
1177*4882a593Smuzhiyun /** Host Command ID : 802.11 key material */
1178*4882a593Smuzhiyun #define HostCmd_CMD_802_11_KEY_MATERIAL 0x005e
1179*4882a593Smuzhiyun 
1180*4882a593Smuzhiyun /** Host Command ID : 802.11 Ad-Hoc stop */
1181*4882a593Smuzhiyun #define HostCmd_CMD_802_11_AD_HOC_STOP 0x0040
1182*4882a593Smuzhiyun 
1183*4882a593Smuzhiyun /** Host Command ID : 802.22 MAC address */
1184*4882a593Smuzhiyun #define HostCmd_CMD_802_11_MAC_ADDRESS 0x004D
1185*4882a593Smuzhiyun 
1186*4882a593Smuzhiyun /** Host Command ID : WMM Traffic Stream Status */
1187*4882a593Smuzhiyun #define HostCmd_CMD_WMM_TS_STATUS 0x005d
1188*4882a593Smuzhiyun 
1189*4882a593Smuzhiyun /** Host Command ID : 802.11 D domain information */
1190*4882a593Smuzhiyun #define HostCmd_CMD_802_11D_DOMAIN_INFO 0x005b
1191*4882a593Smuzhiyun 
1192*4882a593Smuzhiyun /*This command gets/sets the Transmit Rate-based Power Control (TRPC) channel
1193*4882a593Smuzhiyun  * configuration.*/
1194*4882a593Smuzhiyun #define HostCmd_CHANNEL_TRPC_CONFIG 0x00fb
1195*4882a593Smuzhiyun 
1196*4882a593Smuzhiyun /** Host Command ID : 802.11 TPC information */
1197*4882a593Smuzhiyun #define HostCmd_CMD_802_11_TPC_INFO 0x005f
1198*4882a593Smuzhiyun /** Host Command ID : 802.11 TPC adapt req */
1199*4882a593Smuzhiyun #define HostCmd_CMD_802_11_TPC_ADAPT_REQ 0x0060
1200*4882a593Smuzhiyun /** Host Command ID : 802.11 channel SW ann */
1201*4882a593Smuzhiyun #define HostCmd_CMD_802_11_CHAN_SW_ANN 0x0061
1202*4882a593Smuzhiyun 
1203*4882a593Smuzhiyun /** Host Command ID : Measurement request */
1204*4882a593Smuzhiyun #define HostCmd_CMD_MEASUREMENT_REQUEST 0x0062
1205*4882a593Smuzhiyun /** Host Command ID : Measurement report */
1206*4882a593Smuzhiyun #define HostCmd_CMD_MEASUREMENT_REPORT 0x0063
1207*4882a593Smuzhiyun 
1208*4882a593Smuzhiyun /** Host Command ID : 802.11 sleep parameters */
1209*4882a593Smuzhiyun #define HostCmd_CMD_802_11_SLEEP_PARAMS 0x0066
1210*4882a593Smuzhiyun 
1211*4882a593Smuzhiyun /** Host Command ID : 802.11 ps inactivity timeout */
1212*4882a593Smuzhiyun #define HostCmd_CMD_802_11_PS_INACTIVITY_TIMEOUT 0x0067
1213*4882a593Smuzhiyun 
1214*4882a593Smuzhiyun /** Host Command ID : 802.11 sleep period */
1215*4882a593Smuzhiyun #define HostCmd_CMD_802_11_SLEEP_PERIOD 0x0068
1216*4882a593Smuzhiyun 
1217*4882a593Smuzhiyun /** Host Command ID: 802.11 BG scan config */
1218*4882a593Smuzhiyun #define HostCmd_CMD_802_11_BG_SCAN_CONFIG 0x006b
1219*4882a593Smuzhiyun /** Host Command ID : 802.11 BG scan query */
1220*4882a593Smuzhiyun #define HostCmd_CMD_802_11_BG_SCAN_QUERY 0x006c
1221*4882a593Smuzhiyun 
1222*4882a593Smuzhiyun /** Host Command ID : WMM ADDTS req */
1223*4882a593Smuzhiyun #define HostCmd_CMD_WMM_ADDTS_REQ 0x006E
1224*4882a593Smuzhiyun /** Host Command ID : WMM DELTS req */
1225*4882a593Smuzhiyun #define HostCmd_CMD_WMM_DELTS_REQ 0x006F
1226*4882a593Smuzhiyun /** Host Command ID : WMM queue configuration */
1227*4882a593Smuzhiyun #define HostCmd_CMD_WMM_QUEUE_CONFIG 0x0070
1228*4882a593Smuzhiyun /** Host Command ID : 802.11 get status */
1229*4882a593Smuzhiyun #define HostCmd_CMD_WMM_GET_STATUS 0x0071
1230*4882a593Smuzhiyun 
1231*4882a593Smuzhiyun /** Host Command ID : 802.11 subscribe event */
1232*4882a593Smuzhiyun #define HostCmd_CMD_802_11_SUBSCRIBE_EVENT 0x0075
1233*4882a593Smuzhiyun 
1234*4882a593Smuzhiyun /** Host Command ID : 802.11 Tx rate query */
1235*4882a593Smuzhiyun #define HostCmd_CMD_802_11_TX_RATE_QUERY 0x007f
1236*4882a593Smuzhiyun /** Host Command ID :Get timestamp value */
1237*4882a593Smuzhiyun #define HostCmd_CMD_GET_TSF 0x0080
1238*4882a593Smuzhiyun 
1239*4882a593Smuzhiyun /** Host Command ID : WMM queue stats */
1240*4882a593Smuzhiyun #define HostCmd_CMD_WMM_QUEUE_STATS 0x0081
1241*4882a593Smuzhiyun 
1242*4882a593Smuzhiyun /** Host Command ID : KEEP ALIVE command */
1243*4882a593Smuzhiyun #define HostCmd_CMD_AUTO_TX 0x0082
1244*4882a593Smuzhiyun 
1245*4882a593Smuzhiyun /** Host Command ID : 802.11 IBSS coalescing status */
1246*4882a593Smuzhiyun #define HostCmd_CMD_802_11_IBSS_COALESCING_STATUS 0x0083
1247*4882a593Smuzhiyun 
1248*4882a593Smuzhiyun /** Host Command ID : Memory access */
1249*4882a593Smuzhiyun #define HostCmd_CMD_MEM_ACCESS 0x0086
1250*4882a593Smuzhiyun 
1251*4882a593Smuzhiyun #if defined(SDIO)
1252*4882a593Smuzhiyun /** Host Command ID : SDIO GPIO interrupt configuration */
1253*4882a593Smuzhiyun #define HostCmd_CMD_SDIO_GPIO_INT_CONFIG 0x0088
1254*4882a593Smuzhiyun #endif
1255*4882a593Smuzhiyun 
1256*4882a593Smuzhiyun /** Host Command ID : Mfg command */
1257*4882a593Smuzhiyun #define HostCmd_CMD_MFG_COMMAND 0x0089
1258*4882a593Smuzhiyun /** Host Command ID : Inactivity timeout ext */
1259*4882a593Smuzhiyun #define HostCmd_CMD_INACTIVITY_TIMEOUT_EXT 0x008a
1260*4882a593Smuzhiyun 
1261*4882a593Smuzhiyun /** Host Command ID : DBGS configuration */
1262*4882a593Smuzhiyun #define HostCmd_CMD_DBGS_CFG 0x008b
1263*4882a593Smuzhiyun /** Host Command ID : Get memory */
1264*4882a593Smuzhiyun #define HostCmd_CMD_GET_MEM 0x008c
1265*4882a593Smuzhiyun 
1266*4882a593Smuzhiyun /** Host Command ID : Cal data dnld */
1267*4882a593Smuzhiyun #define HostCmd_CMD_CFG_DATA 0x008f
1268*4882a593Smuzhiyun 
1269*4882a593Smuzhiyun /** Host Command ID : SDIO pull control */
1270*4882a593Smuzhiyun #define HostCmd_CMD_SDIO_PULL_CTRL 0x0093
1271*4882a593Smuzhiyun 
1272*4882a593Smuzhiyun /** Host Command ID : ECL system clock configuration */
1273*4882a593Smuzhiyun #define HostCmd_CMD_ECL_SYSTEM_CLOCK_CONFIG 0x0094
1274*4882a593Smuzhiyun 
1275*4882a593Smuzhiyun /** Host Command ID : Extended version */
1276*4882a593Smuzhiyun #define HostCmd_CMD_VERSION_EXT 0x0097
1277*4882a593Smuzhiyun 
1278*4882a593Smuzhiyun /** Host Command ID : MEF configuration */
1279*4882a593Smuzhiyun #define HostCmd_CMD_MEF_CFG 0x009a
1280*4882a593Smuzhiyun /** Host Command ID : 802.11 RSSI INFO*/
1281*4882a593Smuzhiyun #define HostCmd_CMD_RSSI_INFO 0x00a4
1282*4882a593Smuzhiyun /** Host Command ID : Function initialization */
1283*4882a593Smuzhiyun #define HostCmd_CMD_FUNC_INIT 0x00a9
1284*4882a593Smuzhiyun /** Host Command ID : Function shutdown */
1285*4882a593Smuzhiyun #define HostCmd_CMD_FUNC_SHUTDOWN 0x00aa
1286*4882a593Smuzhiyun 
1287*4882a593Smuzhiyun /** Host Command ID : Robustcoex */
1288*4882a593Smuzhiyun #define HostCmd_CMD_802_11_ROBUSTCOEX 0x00e0
1289*4882a593Smuzhiyun 
1290*4882a593Smuzhiyun /** Host Command ID :EAPOL PKT */
1291*4882a593Smuzhiyun #define HostCmd_CMD_802_11_EAPOL_PKT 0x012e
1292*4882a593Smuzhiyun 
1293*4882a593Smuzhiyun /** Host Command ID :MIMO SWITCH **/
1294*4882a593Smuzhiyun #define HostCmd_CMD_802_11_MIMO_SWITCH 0x0235
1295*4882a593Smuzhiyun 
1296*4882a593Smuzhiyun /** Host Command ID : 802.11 RSSI INFO EXT*/
1297*4882a593Smuzhiyun #define HostCmd_CMD_RSSI_INFO_EXT 0x0237
1298*4882a593Smuzhiyun /** Host Command ID : ROAMING OFFLOAD TO FW*/
1299*4882a593Smuzhiyun #define HostCmd_CMD_ROAM_OFFLOAD 0x0245
1300*4882a593Smuzhiyun 
1301*4882a593Smuzhiyun #ifdef RX_PACKET_COALESCE
1302*4882a593Smuzhiyun /** TLV ID for RX pkt coalesce config */
1303*4882a593Smuzhiyun #define TLV_TYPE_RX_PKT_COAL_CONFIG (PROPRIETARY_TLV_BASE_ID + 0xC9)
1304*4882a593Smuzhiyun #endif
1305*4882a593Smuzhiyun 
1306*4882a593Smuzhiyun #define TLV_TYPE_PREV_BSSID (PROPRIETARY_TLV_BASE_ID + 330)
1307*4882a593Smuzhiyun 
1308*4882a593Smuzhiyun /** Host Command ID : Channel report request */
1309*4882a593Smuzhiyun #define HostCmd_CMD_CHAN_REPORT_REQUEST 0x00dd
1310*4882a593Smuzhiyun 
1311*4882a593Smuzhiyun /** Host Command ID: SUPPLICANT_PMK */
1312*4882a593Smuzhiyun #define HostCmd_CMD_SUPPLICANT_PMK 0x00c4
1313*4882a593Smuzhiyun /** Host Command ID: SUPPLICANT_PROFILE */
1314*4882a593Smuzhiyun #define HostCmd_CMD_SUPPLICANT_PROFILE 0x00c5
1315*4882a593Smuzhiyun 
1316*4882a593Smuzhiyun /** Host Command ID : Add Block Ack Request */
1317*4882a593Smuzhiyun #define HostCmd_CMD_11N_ADDBA_REQ 0x00ce
1318*4882a593Smuzhiyun /** Host Command ID : Delete a Block Ack Request */
1319*4882a593Smuzhiyun #define HostCmd_CMD_11N_CFG 0x00cd
1320*4882a593Smuzhiyun /** Host Command ID : Add Block Ack Response */
1321*4882a593Smuzhiyun #define HostCmd_CMD_11N_ADDBA_RSP 0x00cf
1322*4882a593Smuzhiyun /** Host Command ID : Delete a Block Ack Request */
1323*4882a593Smuzhiyun #define HostCmd_CMD_11N_DELBA 0x00d0
1324*4882a593Smuzhiyun /** Host Command ID: Configure Tx Buf size */
1325*4882a593Smuzhiyun #define HostCmd_CMD_RECONFIGURE_TX_BUFF 0x00d9
1326*4882a593Smuzhiyun /** Host Command ID: AMSDU Aggr Ctrl */
1327*4882a593Smuzhiyun #define HostCmd_CMD_AMSDU_AGGR_CTRL 0x00df
1328*4882a593Smuzhiyun /** Host Command ID: 11AC config */
1329*4882a593Smuzhiyun #define HostCmd_CMD_11AC_CFG 0x0112
1330*4882a593Smuzhiyun /** Host Command ID: Configure TX Beamforming capability */
1331*4882a593Smuzhiyun #define HostCmd_CMD_TX_BF_CFG 0x0104
1332*4882a593Smuzhiyun 
1333*4882a593Smuzhiyun /** Host Command ID : 802.11 TX power configuration */
1334*4882a593Smuzhiyun #define HostCmd_CMD_TXPWR_CFG 0x00d1
1335*4882a593Smuzhiyun 
1336*4882a593Smuzhiyun /** Host Command ID : Soft Reset */
1337*4882a593Smuzhiyun #define HostCmd_CMD_SOFT_RESET 0x00d5
1338*4882a593Smuzhiyun 
1339*4882a593Smuzhiyun /** Host Command ID : 802.11 b/g/n rate configration */
1340*4882a593Smuzhiyun #define HostCmd_CMD_TX_RATE_CFG 0x00d6
1341*4882a593Smuzhiyun 
1342*4882a593Smuzhiyun /** Host Command ID : Enhanced PS mode */
1343*4882a593Smuzhiyun #define HostCmd_CMD_802_11_PS_MODE_ENH 0x00e4
1344*4882a593Smuzhiyun 
1345*4882a593Smuzhiyun /** Host command action : Host sleep configuration */
1346*4882a593Smuzhiyun #define HostCmd_CMD_802_11_HS_CFG_ENH 0x00e5
1347*4882a593Smuzhiyun 
1348*4882a593Smuzhiyun /** Host Command ID : CAU register access */
1349*4882a593Smuzhiyun #define HostCmd_CMD_CAU_REG_ACCESS 0x00ed
1350*4882a593Smuzhiyun 
1351*4882a593Smuzhiyun /** Host Command ID : mgmt IE list */
1352*4882a593Smuzhiyun #define HostCmd_CMD_MGMT_IE_LIST 0x00f2
1353*4882a593Smuzhiyun 
1354*4882a593Smuzhiyun #define HostCmd_CMD_802_11_BAND_STEERING 0x026f
1355*4882a593Smuzhiyun /*** Host Command ID " MC_AGGR_CFG */
1356*4882a593Smuzhiyun #define HostCmd_CMD_MC_AGGR_CFG 0x027a
1357*4882a593Smuzhiyun #define HostCmd_CMD_802_11_STATS 0x0014
1358*4882a593Smuzhiyun #define HostCmd_CMD_GET_CH_LOAD 0x027b
1359*4882a593Smuzhiyun 
1360*4882a593Smuzhiyun /** Host Command ID : TDLS configuration */
1361*4882a593Smuzhiyun #define HostCmd_CMD_TDLS_CONFIG 0x0100
1362*4882a593Smuzhiyun /** Host Command ID : TDLS operation */
1363*4882a593Smuzhiyun #define HostCmd_CMD_TDLS_OPERATION 0x0122
1364*4882a593Smuzhiyun 
1365*4882a593Smuzhiyun #ifdef SDIO
1366*4882a593Smuzhiyun /** Host Command ID : SDIO single port RX aggr */
1367*4882a593Smuzhiyun #define HostCmd_CMD_SDIO_SP_RX_AGGR_CFG 0x0223
1368*4882a593Smuzhiyun 
1369*4882a593Smuzhiyun /** fw_cap_info bit16 for sdio sp rx aggr flag*/
1370*4882a593Smuzhiyun #define SDIO_SP_RX_AGGR_ENABLE MBIT(16)
1371*4882a593Smuzhiyun 
1372*4882a593Smuzhiyun #endif
1373*4882a593Smuzhiyun 
1374*4882a593Smuzhiyun /* fw_cap_info bit18 for ecsa support*/
1375*4882a593Smuzhiyun #define FW_CAPINFO_ECSA MBIT(18)
1376*4882a593Smuzhiyun 
1377*4882a593Smuzhiyun /* fw_cap_info bit20 for get log*/
1378*4882a593Smuzhiyun #define FW_CAPINFO_GET_LOG MBIT(20)
1379*4882a593Smuzhiyun 
1380*4882a593Smuzhiyun /** fw_cap_info bit22 for embedded supplicant support*/
1381*4882a593Smuzhiyun #define FW_CAPINFO_SUPPLICANT_SUPPORT MBIT(21)
1382*4882a593Smuzhiyun 
1383*4882a593Smuzhiyun /** fw_cap_info bit23 for embedded authenticator support*/
1384*4882a593Smuzhiyun #define FW_CAPINFO_AUTH_SUPPORT MBIT(22)
1385*4882a593Smuzhiyun 
1386*4882a593Smuzhiyun /** fw_cap_info bit23 for firmware roaming*/
1387*4882a593Smuzhiyun #define FW_ROAMING_SUPPORT MBIT(23)
1388*4882a593Smuzhiyun 
1389*4882a593Smuzhiyun /** fw_cap_info bit25 for adhoc support*/
1390*4882a593Smuzhiyun #define FW_CAPINFO_ADHOC_SUPPORT MBIT(25)
1391*4882a593Smuzhiyun /** Check if adhoc is supported by firmware */
1392*4882a593Smuzhiyun #define IS_FW_SUPPORT_ADHOC(_adapter)                                          \
1393*4882a593Smuzhiyun 	(_adapter->fw_cap_info & FW_CAPINFO_ADHOC_SUPPORT)
1394*4882a593Smuzhiyun 
1395*4882a593Smuzhiyun /** Check if supplicant is supported by firmware */
1396*4882a593Smuzhiyun #define IS_FW_SUPPORT_SUPPLICANT(_adapter)                                     \
1397*4882a593Smuzhiyun 	(_adapter->fw_cap_info & FW_CAPINFO_SUPPLICANT_SUPPORT)
1398*4882a593Smuzhiyun 
1399*4882a593Smuzhiyun /** Check if authenticator is supported by firmware */
1400*4882a593Smuzhiyun #define IS_FW_SUPPORT_AUTHENTICATOR(_adapter)                                  \
1401*4882a593Smuzhiyun 	(_adapter->fw_cap_info & FW_CAPINFO_AUTH_SUPPORT)
1402*4882a593Smuzhiyun 
1403*4882a593Smuzhiyun /** Ext fw cap info bit0 only 1x1 5G is available */
1404*4882a593Smuzhiyun #define FW_CAPINFO_EXT_5G_1X1_ONLY MBIT(0)
1405*4882a593Smuzhiyun /** Ext fw cap info bit1 1x1 5G is not available */
1406*4882a593Smuzhiyun #define FW_CAPINFO_EXT_NO_5G_1X1 MBIT(1)
1407*4882a593Smuzhiyun /** Ext fw cap info bit 2 only 1x1 2G is available */
1408*4882a593Smuzhiyun #define FW_CAPINFO_EXT_2G_1X1_ONLY MBIT(2)
1409*4882a593Smuzhiyun /**Ext fw cap info bit3 1x1 2G is not available */
1410*4882a593Smuzhiyun #define FW_CAPINFO_EXT_NO_2G_1X1 MBIT(3)
1411*4882a593Smuzhiyun /** Ext fw cap info bit4 1x1 + 1x1 5G mode is unavailable */
1412*4882a593Smuzhiyun #define FW_CAPINFO_EXT_NO_5G_1X1_PLUS_1X1 MBIT(4)
1413*4882a593Smuzhiyun /** Ext fw cap info bit5 80 + 80 MHz capability disabled */
1414*4882a593Smuzhiyun #define FW_CAPINFO_EXT_NO_80MHz_PLUS_80MHz MBIT(5)
1415*4882a593Smuzhiyun /** Ext fw cap info bit6 1024 QAM is disabled */
1416*4882a593Smuzhiyun #define FW_CAPINFO_EXT_NO_1024_QAM MBIT(6)
1417*4882a593Smuzhiyun /** FW cap info bit 7 11AX */
1418*4882a593Smuzhiyun #define FW_CAPINFO_EXT_802_11AX MBIT(7)
1419*4882a593Smuzhiyun /** FW cap info bit 8: 80MHZ disabled */
1420*4882a593Smuzhiyun #define FW_CAPINFO_EXT_NO_80MHZ MBIT(8)
1421*4882a593Smuzhiyun /** FW cap info bit 9: Multi BSSID Support */
1422*4882a593Smuzhiyun #define FW_CAPINFO_EXT_MULTI_BSSID MBIT(9)
1423*4882a593Smuzhiyun /** FW cap info bit 10: Beacon Protection Support */
1424*4882a593Smuzhiyun #define FW_CAPINFO_EXT_BEACON_PROT MBIT(10)
1425*4882a593Smuzhiyun /** FW cap info bit 11: OTP cal data */
1426*4882a593Smuzhiyun #define FW_CAPINFO_EXT_OTP_CALDATA MBIT(11)
1427*4882a593Smuzhiyun /** FW cap info bit 12: RTT Support */
1428*4882a593Smuzhiyun #define FW_CAPINFO_EXT_RTT MBIT(12)
1429*4882a593Smuzhiyun /** FW cap info bit 13: Channel Tracking Support */
1430*4882a593Smuzhiyun #define FW_CAPINFO_EXT_CHAN_TRACK MBIT(13)
1431*4882a593Smuzhiyun /** FW cap info bit 14: 6G Support */
1432*4882a593Smuzhiyun #define FW_CAPINFO_EXT_6G MBIT(14)
1433*4882a593Smuzhiyun 
1434*4882a593Smuzhiyun /** Check if 5G 1x1 only is supported by firmware */
1435*4882a593Smuzhiyun #define IS_FW_SUPPORT_5G_1X1_ONLY(_adapter)                                    \
1436*4882a593Smuzhiyun 	(_adapter->fw_cap_ext & FW_CAPINFO_EXT_5G_1X1_ONLY)
1437*4882a593Smuzhiyun /** Check if 5G 1x1 is unavailable in firmware */
1438*4882a593Smuzhiyun #define IS_FW_SUPPORT_NO_5G_1X1(_adapter)                                      \
1439*4882a593Smuzhiyun 	(_adapter->fw_cap_ext & FW_CAPINFO_EXT_NO_5G_1X1)
1440*4882a593Smuzhiyun /** Check if 2G 1x1 only is supported by firmware */
1441*4882a593Smuzhiyun #define IS_FW_SUPPORT_2G_1X1_ONLY(_adapter)                                    \
1442*4882a593Smuzhiyun 	(_adapter->fw_cap_ext & FW_CAPINFO_EXT_2G_1X1_ONLY)
1443*4882a593Smuzhiyun /** Check if 2G 1x1 is unavailable in firmware */
1444*4882a593Smuzhiyun #define IS_FW_SUPPORT_NO_2G_1X1(_adapter)                                      \
1445*4882a593Smuzhiyun 	(_adapter->fw_cap_ext & FW_CAPINFO_EXT_NO_2G_1X1)
1446*4882a593Smuzhiyun /** Check if 5G 1x1 + 1x1 mode is disabled in firmware */
1447*4882a593Smuzhiyun #define IS_FW_SUPPORT_NO_5G_1X1_PLUS_1X1(_adapter)                             \
1448*4882a593Smuzhiyun 	(_adapter->fw_cap_ext & FW_CAPINFO_EXT_NO_5G_1X1_PLUS_1X1)
1449*4882a593Smuzhiyun /** Check if 80 + 80MHz is disabled in firmware */
1450*4882a593Smuzhiyun #define IS_FW_SUPPORT_NO_80MHz_PLUS_80MHz(_adapter)                            \
1451*4882a593Smuzhiyun 	(_adapter->fw_cap_ext & FW_CAPINFO_EXT_NO_80MHz_PLUS_80MHz)
1452*4882a593Smuzhiyun /** Check if 1024 QAM disabled in firmware */
1453*4882a593Smuzhiyun #define IS_FW_SUPPORT_NO_1024_QAM(_adapter)                                    \
1454*4882a593Smuzhiyun 	(_adapter->fw_cap_ext & FW_CAPINFO_EXT_NO_1024_QAM)
1455*4882a593Smuzhiyun /** Check if 80MHZ disabled in firmware */
1456*4882a593Smuzhiyun #define IS_FW_SUPPORT_NO_80MHZ(_adapter)                                       \
1457*4882a593Smuzhiyun 	(_adapter->fw_cap_ext & FW_CAPINFO_EXT_NO_80MHZ)
1458*4882a593Smuzhiyun /** Check if Multi BSSID supported by firmware */
1459*4882a593Smuzhiyun #define IS_FW_SUPPORT_MULTIBSSID(_adapter)                                     \
1460*4882a593Smuzhiyun 	(_adapter->fw_cap_ext & FW_CAPINFO_EXT_MULTI_BSSID)
1461*4882a593Smuzhiyun /** Check if Beacon Protection supported by firmware */
1462*4882a593Smuzhiyun #define IS_FW_SUPPORT_BEACON_PROT(_adapter)                                    \
1463*4882a593Smuzhiyun 	(_adapter->fw_cap_ext & FW_CAPINFO_EXT_BEACON_PROT)
1464*4882a593Smuzhiyun /** Check if RTT supported by firmware */
1465*4882a593Smuzhiyun #define IS_FW_SUPPORT_RTT(_adapter) (_adapter->fw_cap_ext & FW_CAPINFO_EXT_RTT)
1466*4882a593Smuzhiyun /** Check if Channel Tracking supported by firmware */
1467*4882a593Smuzhiyun #define IS_FW_SUPPORT_CHAN_TRACK(_adapter)                                     \
1468*4882a593Smuzhiyun 	(_adapter->fw_cap_ext & FW_CAPINFO_EXT_CHAN_TRACK)
1469*4882a593Smuzhiyun /** Check if 6G supported by firmware */
1470*4882a593Smuzhiyun #define IS_FW_SUPPORT_6G(_adapter) (_adapter->fw_cap_ext & FW_CAPINFO_EXT_6G)
1471*4882a593Smuzhiyun 
1472*4882a593Smuzhiyun /** MrvlIEtypes_PrevBssid_t */
1473*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_PrevBssid_t {
1474*4882a593Smuzhiyun 	/** Header */
1475*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
1476*4882a593Smuzhiyun 	/** prev_bssid **/
1477*4882a593Smuzhiyun 	t_u8 prev_bssid[6];
1478*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_PrevBssid_t;
1479*4882a593Smuzhiyun 
1480*4882a593Smuzhiyun /** FW cap info TLV */
1481*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_fw_cap_info_t {
1482*4882a593Smuzhiyun 	/** Header type */
1483*4882a593Smuzhiyun 	t_u16 type;
1484*4882a593Smuzhiyun 	/** Header length */
1485*4882a593Smuzhiyun 	t_u16 len;
1486*4882a593Smuzhiyun 	/** Fw cap info bitmap */
1487*4882a593Smuzhiyun 	t_u32 fw_cap_info;
1488*4882a593Smuzhiyun 	/** Extended fw cap info bitmap */
1489*4882a593Smuzhiyun 	t_u32 fw_cap_ext;
1490*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_fw_cap_info_t, *pMrvlIEtypes_fw_cap_info_t;
1491*4882a593Smuzhiyun 
1492*4882a593Smuzhiyun /** Check if 11AX is supported by firmware */
1493*4882a593Smuzhiyun #define IS_FW_SUPPORT_11AX(_adapter)                                           \
1494*4882a593Smuzhiyun 	(_adapter->fw_cap_ext & FW_CAPINFO_EXT_802_11AX)
1495*4882a593Smuzhiyun 
1496*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_Extension_t {
1497*4882a593Smuzhiyun 	/** Header type */
1498*4882a593Smuzhiyun 	t_u16 type;
1499*4882a593Smuzhiyun 	/** Header length */
1500*4882a593Smuzhiyun 	t_u16 len;
1501*4882a593Smuzhiyun 	/** Element id extension */
1502*4882a593Smuzhiyun 	t_u8 ext_id;
1503*4882a593Smuzhiyun 	/** payload */
1504*4882a593Smuzhiyun 	t_u8 data[1];
1505*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_Extension_t, *pMrvlIEtypes_Extension_t;
1506*4882a593Smuzhiyun 
1507*4882a593Smuzhiyun /* HE MAC Capabilities Information field BIT 1 for TWT Req */
1508*4882a593Smuzhiyun #define HE_MAC_CAP_TWT_REQ_SUPPORT MBIT(1)
1509*4882a593Smuzhiyun /* HE MAC Capabilities Information field BIT 2 for TWT Resp*/
1510*4882a593Smuzhiyun #define HE_MAC_CAP_TWT_RESP_SUPPORT MBIT(2)
1511*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_He_cap_t {
1512*4882a593Smuzhiyun 	/** Header type */
1513*4882a593Smuzhiyun 	t_u16 type;
1514*4882a593Smuzhiyun 	/** Header length */
1515*4882a593Smuzhiyun 	t_u16 len;
1516*4882a593Smuzhiyun 	/** Element id extension */
1517*4882a593Smuzhiyun 	t_u8 ext_id;
1518*4882a593Smuzhiyun 	/** he mac capability info */
1519*4882a593Smuzhiyun 	t_u8 he_mac_cap[6];
1520*4882a593Smuzhiyun 	/** he phy capability info */
1521*4882a593Smuzhiyun 	t_u8 he_phy_cap[11];
1522*4882a593Smuzhiyun 	/** rx mcs for 80 */
1523*4882a593Smuzhiyun 	t_u16 rx_mcs_80;
1524*4882a593Smuzhiyun 	/** tx mcs for 80 */
1525*4882a593Smuzhiyun 	t_u16 tx_mcs_80;
1526*4882a593Smuzhiyun 	/** rx mcs for bw 160 */
1527*4882a593Smuzhiyun 	t_u16 rx_mcs_160;
1528*4882a593Smuzhiyun 	/** tx mcs for bw 160 */
1529*4882a593Smuzhiyun 	t_u16 tx_mcs_160;
1530*4882a593Smuzhiyun 	/** rx mcs for bw 80+80 */
1531*4882a593Smuzhiyun 	t_u16 rx_mcs_80p80;
1532*4882a593Smuzhiyun 	/** tx mcs for bw 80+80 */
1533*4882a593Smuzhiyun 	t_u16 tx_mcs_80p80;
1534*4882a593Smuzhiyun 	/** PPE Thresholds (optional) */
1535*4882a593Smuzhiyun 	t_u8 val[20];
1536*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_He_cap_t, *pMrvlIEtypes_he_cap_t;
1537*4882a593Smuzhiyun 
1538*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_He_Op_t {
1539*4882a593Smuzhiyun 	/** Header */
1540*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
1541*4882a593Smuzhiyun 	/** Element id extension */
1542*4882a593Smuzhiyun 	t_u8 ext_id;
1543*4882a593Smuzhiyun 	/** HE Operation Parameters */
1544*4882a593Smuzhiyun 	t_u16 he_op_param1;
1545*4882a593Smuzhiyun 	/** HE Operation Parameters */
1546*4882a593Smuzhiyun 	t_u8 he_op_param2;
1547*4882a593Smuzhiyun 	/** BSS Color Info */
1548*4882a593Smuzhiyun 	t_u8 bss_color_info;
1549*4882a593Smuzhiyun 	/** Basic HE-MCS and NSS Set */
1550*4882a593Smuzhiyun 	t_u16 basic_he_mcs_nss;
1551*4882a593Smuzhiyun 	/** Optional Field, including VHT Operation Info Max Co-Hosted BSSID
1552*4882a593Smuzhiyun 	 * Indicator, and 6Ghz Operation Info  */
1553*4882a593Smuzhiyun 	t_u8 option[9];
1554*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_He_Op_t;
1555*4882a593Smuzhiyun 
1556*4882a593Smuzhiyun #ifdef RX_PACKET_COALESCE
1557*4882a593Smuzhiyun /** Host Command ID : Rx packet coalescing configuration */
1558*4882a593Smuzhiyun #define HostCmd_CMD_RX_PKT_COALESCE_CFG 0x012c
1559*4882a593Smuzhiyun #endif
1560*4882a593Smuzhiyun 
1561*4882a593Smuzhiyun /** Host Command ID : Extended scan support */
1562*4882a593Smuzhiyun #define HostCmd_CMD_802_11_SCAN_EXT 0x0107
1563*4882a593Smuzhiyun 
1564*4882a593Smuzhiyun /** Host Command ID : Forward mgmt frame */
1565*4882a593Smuzhiyun #define HostCmd_CMD_RX_MGMT_IND 0x010c
1566*4882a593Smuzhiyun 
1567*4882a593Smuzhiyun #ifdef PCIE
1568*4882a593Smuzhiyun /** Host Command ID: Host buffer description */
1569*4882a593Smuzhiyun #define HostCmd_CMD_PCIE_HOST_BUF_DETAILS 0x00fa
1570*4882a593Smuzhiyun #endif
1571*4882a593Smuzhiyun 
1572*4882a593Smuzhiyun /** Host Command ID : Set BSS_MODE */
1573*4882a593Smuzhiyun #define HostCmd_CMD_SET_BSS_MODE 0x00f7
1574*4882a593Smuzhiyun 
1575*4882a593Smuzhiyun #ifdef UAP_SUPPORT
1576*4882a593Smuzhiyun /**  Host Command id: SYS_INFO */
1577*4882a593Smuzhiyun #define HOST_CMD_APCMD_SYS_INFO 0x00ae
1578*4882a593Smuzhiyun /** Host Command id: sys_reset */
1579*4882a593Smuzhiyun #define HOST_CMD_APCMD_SYS_RESET 0x00af
1580*4882a593Smuzhiyun /** Host Command id: SYS_CONFIGURE  */
1581*4882a593Smuzhiyun #define HOST_CMD_APCMD_SYS_CONFIGURE 0x00b0
1582*4882a593Smuzhiyun /** Host Command id: BSS_START */
1583*4882a593Smuzhiyun #define HOST_CMD_APCMD_BSS_START 0x00b1
1584*4882a593Smuzhiyun /** Host Command id: BSS_STOP  */
1585*4882a593Smuzhiyun #define HOST_CMD_APCMD_BSS_STOP 0x00b2
1586*4882a593Smuzhiyun /** Host Command id: sta_list */
1587*4882a593Smuzhiyun #define HOST_CMD_APCMD_STA_LIST 0x00b3
1588*4882a593Smuzhiyun /** Host Command id: STA_DEAUTH */
1589*4882a593Smuzhiyun #define HOST_CMD_APCMD_STA_DEAUTH 0x00b5
1590*4882a593Smuzhiyun 
1591*4882a593Smuzhiyun /** Host Command id: REPORT_MIC */
1592*4882a593Smuzhiyun #define HOST_CMD_APCMD_REPORT_MIC 0x00ee
1593*4882a593Smuzhiyun /** Host Command id: UAP_OPER_CTRL */
1594*4882a593Smuzhiyun #define HOST_CMD_APCMD_OPER_CTRL 0x0233
1595*4882a593Smuzhiyun #endif /* UAP_SUPPORT */
1596*4882a593Smuzhiyun 
1597*4882a593Smuzhiyun /** Host Command id: PMIC CONFIGURE*/
1598*4882a593Smuzhiyun #define HOST_CMD_PMIC_CONFIGURE 0x23E
1599*4882a593Smuzhiyun 
1600*4882a593Smuzhiyun /** Host Command ID: 802.11 Network Monitor */
1601*4882a593Smuzhiyun #define HostCmd_CMD_802_11_NET_MONITOR 0x0102
1602*4882a593Smuzhiyun 
1603*4882a593Smuzhiyun /** Host Command ID: Tx data pause */
1604*4882a593Smuzhiyun #define HostCmd_CMD_CFG_TX_DATA_PAUSE 0x0103
1605*4882a593Smuzhiyun 
1606*4882a593Smuzhiyun #ifdef WIFI_DIRECT_SUPPORT
1607*4882a593Smuzhiyun /** Host Command ID: P2P PARAMS CONFIG */
1608*4882a593Smuzhiyun #define HOST_CMD_P2P_PARAMS_CONFIG 0x00ea
1609*4882a593Smuzhiyun /** Host Command ID: WIFI_DIRECT_MODE_CONFIG */
1610*4882a593Smuzhiyun #define HOST_CMD_WIFI_DIRECT_MODE_CONFIG 0x00eb
1611*4882a593Smuzhiyun #endif
1612*4882a593Smuzhiyun 
1613*4882a593Smuzhiyun /** Host Command ID: GPIO TSF LATCH */
1614*4882a593Smuzhiyun #define HOST_CMD_GPIO_TSF_LATCH_PARAM_CONFIG 0x0278
1615*4882a593Smuzhiyun /** Host Command ID: Remain On Channel */
1616*4882a593Smuzhiyun #define HostCmd_CMD_802_11_REMAIN_ON_CHANNEL 0x010d
1617*4882a593Smuzhiyun 
1618*4882a593Smuzhiyun #define HostCmd_CMD_COALESCE_CFG 0x010a
1619*4882a593Smuzhiyun 
1620*4882a593Smuzhiyun /** Host Command ID: GTK REKEY OFFLOAD CFG */
1621*4882a593Smuzhiyun #define HostCmd_CMD_GTK_REKEY_OFFLOAD_CFG 0x010f
1622*4882a593Smuzhiyun 
1623*4882a593Smuzhiyun /** Host Command ID : OTP user data */
1624*4882a593Smuzhiyun #define HostCmd_CMD_OTP_READ_USER_DATA 0x0114
1625*4882a593Smuzhiyun 
1626*4882a593Smuzhiyun /** Host Command ID: fw auto reconnect */
1627*4882a593Smuzhiyun #define HostCmd_CMD_FW_AUTO_RECONNECT 0x0115
1628*4882a593Smuzhiyun 
1629*4882a593Smuzhiyun /** Host Command ID: HS wakeup reason */
1630*4882a593Smuzhiyun #define HostCmd_CMD_HS_WAKEUP_REASON 0x0116
1631*4882a593Smuzhiyun 
1632*4882a593Smuzhiyun /** Host Command ID: reject addba request */
1633*4882a593Smuzhiyun #define HostCmd_CMD_REJECT_ADDBA_REQ 0x0119
1634*4882a593Smuzhiyun 
1635*4882a593Smuzhiyun #define HostCmd_CMD_FW_DUMP_EVENT 0x0125
1636*4882a593Smuzhiyun 
1637*4882a593Smuzhiyun #define HostCMD_CONFIG_LOW_POWER_MODE 0x0128
1638*4882a593Smuzhiyun 
1639*4882a593Smuzhiyun /** Host Command ID : Target device access */
1640*4882a593Smuzhiyun #define HostCmd_CMD_TARGET_ACCESS 0x012a
1641*4882a593Smuzhiyun 
1642*4882a593Smuzhiyun /** Host Command ID: BCA device access */
1643*4882a593Smuzhiyun #define HostCmd_CMD_BCA_REG_ACCESS 0x0272
1644*4882a593Smuzhiyun /** Host Command ID: register device access */
1645*4882a593Smuzhiyun #define HostCmd_CMD_REG_ACCESS 0x027C
1646*4882a593Smuzhiyun 
1647*4882a593Smuzhiyun /** Host Command ID: DFS repeater mode */
1648*4882a593Smuzhiyun #define HostCmd_DFS_REPEATER_MODE 0x012b
1649*4882a593Smuzhiyun 
1650*4882a593Smuzhiyun /** Host Command ID: ACS scan */
1651*4882a593Smuzhiyun #define HostCMD_APCMD_ACS_SCAN 0x0224
1652*4882a593Smuzhiyun 
1653*4882a593Smuzhiyun /** Host Command ID: Get sensor temp*/
1654*4882a593Smuzhiyun #define HostCmd_DS_GET_SENSOR_TEMP 0x0227
1655*4882a593Smuzhiyun 
1656*4882a593Smuzhiyun /** Host Command ID : Configure ADHOC_OVER_IP parameters */
1657*4882a593Smuzhiyun #define HostCmd_CMD_WMM_PARAM_CONFIG 0x023a
1658*4882a593Smuzhiyun 
1659*4882a593Smuzhiyun #define HostCmd_CMD_IPV6_RA_OFFLOAD_CFG 0x0238
1660*4882a593Smuzhiyun 
1661*4882a593Smuzhiyun #ifdef STA_SUPPORT
1662*4882a593Smuzhiyun /** Host Command ID :  set/get sta configure */
1663*4882a593Smuzhiyun #define HostCmd_CMD_STA_CONFIGURE 0x023f
1664*4882a593Smuzhiyun #endif
1665*4882a593Smuzhiyun 
1666*4882a593Smuzhiyun /** Host Command ID : GPIO independent reset configure */
1667*4882a593Smuzhiyun #define HostCmd_CMD_INDEPENDENT_RESET_CFG 0x0243
1668*4882a593Smuzhiyun 
1669*4882a593Smuzhiyun #if defined(PCIE9098) || defined(SD9098) || defined(USB9098) ||                \
1670*4882a593Smuzhiyun 	defined(PCIE9097) || defined(USB9097) || defined(SDNW62X) ||           \
1671*4882a593Smuzhiyun 	defined(PCIENW62X) || defined(USBNW62X) || defined(SD9097)
1672*4882a593Smuzhiyun /* TLV type: reg type */
1673*4882a593Smuzhiyun #define TLV_TYPE_REG_ACCESS_CTRL (PROPRIETARY_TLV_BASE_ID + 0x13C) /* 0x023c*/
1674*4882a593Smuzhiyun /** MrvlIEtypes_Reg_type_t*/
1675*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_Reg_type_t {
1676*4882a593Smuzhiyun 	/** Header */
1677*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
1678*4882a593Smuzhiyun 	/** type: 0x81/0x82/0x83 */
1679*4882a593Smuzhiyun 	t_u8 type;
1680*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_Reg_type_t;
1681*4882a593Smuzhiyun #endif
1682*4882a593Smuzhiyun /** use to query chan region cfg setting in firmware */
1683*4882a593Smuzhiyun #define HostCmd_CMD_CHAN_REGION_CFG 0x0242
1684*4882a593Smuzhiyun /** used in hostcmd to download region power cfg setting to firmware */
1685*4882a593Smuzhiyun #define HostCmd_CMD_REGION_POWER_CFG 0x0249
1686*4882a593Smuzhiyun 
1687*4882a593Smuzhiyun /* mod_grp */
1688*4882a593Smuzhiyun typedef enum _mod_grp {
1689*4882a593Smuzhiyun 	MOD_CCK, // 0
1690*4882a593Smuzhiyun 	MOD_OFDM_PSK, // 1
1691*4882a593Smuzhiyun 	MOD_OFDM_QAM16, // 2
1692*4882a593Smuzhiyun 	MOD_OFDM_QAM64, // 3
1693*4882a593Smuzhiyun 	MOD_HT_20_PSK, // 4
1694*4882a593Smuzhiyun 	MOD_HT_20_QAM16, // 5
1695*4882a593Smuzhiyun 	MOD_HT_20_QAM64, // 6
1696*4882a593Smuzhiyun 	MOD_HT_40_PSK, // 7
1697*4882a593Smuzhiyun 	MOD_HT_40_QAM16, // 8
1698*4882a593Smuzhiyun 	MOD_HT_40_QAM64, // 9
1699*4882a593Smuzhiyun #ifdef STREAM_2x2
1700*4882a593Smuzhiyun 	MOD_HT2_20_PSK, // 10
1701*4882a593Smuzhiyun 	MOD_HT2_20_QAM16, // 11
1702*4882a593Smuzhiyun 	MOD_HT2_20_QAM64, // 12
1703*4882a593Smuzhiyun 	MOD_HT2_40_PSK, // 13
1704*4882a593Smuzhiyun 	MOD_HT2_40_QAM16, // 14
1705*4882a593Smuzhiyun 	MOD_HT2_40_QAM64, // 15
1706*4882a593Smuzhiyun #endif
1707*4882a593Smuzhiyun 
1708*4882a593Smuzhiyun 	MOD_VHT_20_QAM256, // 16
1709*4882a593Smuzhiyun 	MOD_VHT_40_QAM256, // 17
1710*4882a593Smuzhiyun 	MOD_VHT_80_PSK, // 18
1711*4882a593Smuzhiyun 	MOD_VHT_80_QAM16, // 19
1712*4882a593Smuzhiyun 	MOD_VHT_80_QAM64, // 20
1713*4882a593Smuzhiyun 	MOD_VHT_80_QAM256, // 21
1714*4882a593Smuzhiyun #ifdef STREAM_2x2
1715*4882a593Smuzhiyun 	MOD_VHT2_20_QAM256, // 22
1716*4882a593Smuzhiyun 	MOD_VHT2_40_QAM256, // 23
1717*4882a593Smuzhiyun 	MOD_VHT2_80_PSK, // 24
1718*4882a593Smuzhiyun 	MOD_VHT2_80_QAM16, // 25
1719*4882a593Smuzhiyun 	MOD_VHT2_80_QAM64, // 26
1720*4882a593Smuzhiyun 	MOD_VHT2_80_QAM256, // 27
1721*4882a593Smuzhiyun #endif
1722*4882a593Smuzhiyun } mod_grp;
1723*4882a593Smuzhiyun 
1724*4882a593Smuzhiyun typedef MLAN_PACK_START struct _power_table_attr {
1725*4882a593Smuzhiyun 	t_u8 rows_2g;
1726*4882a593Smuzhiyun 	t_u8 cols_2g;
1727*4882a593Smuzhiyun 	t_u8 rows_5g;
1728*4882a593Smuzhiyun 	t_u8 cols_5g;
1729*4882a593Smuzhiyun } MLAN_PACK_END power_table_attr_t;
1730*4882a593Smuzhiyun 
1731*4882a593Smuzhiyun #define FW_CFP_TABLE_MAX_ROWS_BG 14
1732*4882a593Smuzhiyun #define FW_CFP_TABLE_MAX_COLS_BG 17
1733*4882a593Smuzhiyun 
1734*4882a593Smuzhiyun #define FW_CFP_TABLE_MAX_ROWS_A 39
1735*4882a593Smuzhiyun #define FW_CFP_TABLE_MAX_COLS_A 29
1736*4882a593Smuzhiyun 
1737*4882a593Smuzhiyun #define HostCmd_CMD_DYN_BW 0x0252
1738*4882a593Smuzhiyun 
1739*4882a593Smuzhiyun #define HostCmd_CMD_BOOT_SLEEP 0x0258
1740*4882a593Smuzhiyun 
1741*4882a593Smuzhiyun #define HostCmd_CMD_RX_ABORT_CFG 0x0261
1742*4882a593Smuzhiyun #define HostCmd_CMD_RX_ABORT_CFG_EXT 0x0262
1743*4882a593Smuzhiyun #define HostCmd_CMD_TX_AMPDU_PROT_MODE 0x0263
1744*4882a593Smuzhiyun #define HostCmd_CMD_RATE_ADAPT_CFG 0x0264
1745*4882a593Smuzhiyun #define HostCmd_CMD_CCK_DESENSE_CFG 0x0265
1746*4882a593Smuzhiyun 
1747*4882a593Smuzhiyun #define HostCmd_CMD_VDLL 0x0240
1748*4882a593Smuzhiyun #if defined(PCIE)
1749*4882a593Smuzhiyun #define HostCmd_CMD_SSU 0x0259
1750*4882a593Smuzhiyun #endif
1751*4882a593Smuzhiyun #define HostCmd_CMD_CSI 0x025b
1752*4882a593Smuzhiyun #define CSI_CMD_ENABLE 0x0001
1753*4882a593Smuzhiyun #define CSI_CMD_DISABLE 0x0002
1754*4882a593Smuzhiyun 
1755*4882a593Smuzhiyun #define HostCmd_CMD_DMCS_CONFIG 0x0260
1756*4882a593Smuzhiyun 
1757*4882a593Smuzhiyun /** Host Command ID: 11AX config */
1758*4882a593Smuzhiyun #define HostCmd_CMD_11AX_CFG 0x0266
1759*4882a593Smuzhiyun /** Host Command ID: 11AX command */
1760*4882a593Smuzhiyun #define HostCmd_CMD_11AX_CMD 0x026d
1761*4882a593Smuzhiyun /** Host Command ID: Range ext command */
1762*4882a593Smuzhiyun #define HostCmd_CMD_RANGE_EXT 0x0274
1763*4882a593Smuzhiyun /** Host Command ID: TWT cfg command */
1764*4882a593Smuzhiyun #define HostCmd_CMD_TWT_CFG 0x0270
1765*4882a593Smuzhiyun 
1766*4882a593Smuzhiyun #define HostCmd_CMD_LOW_POWER_MODE_CFG 0x026e
1767*4882a593Smuzhiyun #define HostCmd_CMD_UAP_BEACON_STUCK_CFG 0x0271
1768*4882a593Smuzhiyun #define HostCmd_CMD_ARB_CONFIG 0x0273
1769*4882a593Smuzhiyun #define HostCmd_CMD_DOT11MC_UNASSOC_FTM_CFG 0x0275
1770*4882a593Smuzhiyun #define HostCmd_CMD_HAL_PHY_CFG 0x0276
1771*4882a593Smuzhiyun 
1772*4882a593Smuzhiyun /** Host Command ID : IPS Config */
1773*4882a593Smuzhiyun #define HostCmd_CMD_IPS_CONFIG 0x0279
1774*4882a593Smuzhiyun 
1775*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
1776*4882a593Smuzhiyun 	t_u32 enable;
1777*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_IPS_CONFIG;
1778*4882a593Smuzhiyun 
1779*4882a593Smuzhiyun /** Enhanced PS modes */
1780*4882a593Smuzhiyun typedef enum _ENH_PS_MODES {
1781*4882a593Smuzhiyun 	GET_PS = 0,
1782*4882a593Smuzhiyun 	SLEEP_CONFIRM = 5,
1783*4882a593Smuzhiyun 	DIS_AUTO_PS = 0xfe,
1784*4882a593Smuzhiyun 	EN_AUTO_PS = 0xff,
1785*4882a593Smuzhiyun } ENH_PS_MODES;
1786*4882a593Smuzhiyun 
1787*4882a593Smuzhiyun /** Command RET code, MSB is set to 1 */
1788*4882a593Smuzhiyun #define HostCmd_RET_BIT 0x8000
1789*4882a593Smuzhiyun 
1790*4882a593Smuzhiyun /** General purpose action : Get */
1791*4882a593Smuzhiyun #define HostCmd_ACT_GEN_GET 0x0000
1792*4882a593Smuzhiyun /** General purpose action : Set */
1793*4882a593Smuzhiyun #define HostCmd_ACT_GEN_SET 0x0001
1794*4882a593Smuzhiyun /** General purpose action : Set Default */
1795*4882a593Smuzhiyun #define HostCmd_ACT_GEN_SET_DEFAULT 0x0002
1796*4882a593Smuzhiyun /** General purpose action : Get_Current */
1797*4882a593Smuzhiyun #define HostCmd_ACT_GEN_GET_CURRENT 0x0003
1798*4882a593Smuzhiyun /** General purpose action : Remove */
1799*4882a593Smuzhiyun #define HostCmd_ACT_GEN_REMOVE 0x0004
1800*4882a593Smuzhiyun /** General purpose action : Reset */
1801*4882a593Smuzhiyun #define HostCmd_ACT_GEN_RESET 0x0005
1802*4882a593Smuzhiyun 
1803*4882a593Smuzhiyun /** Host command action : Set Rx */
1804*4882a593Smuzhiyun #define HostCmd_ACT_SET_RX 0x0001
1805*4882a593Smuzhiyun /** Host command action : Set Tx */
1806*4882a593Smuzhiyun #define HostCmd_ACT_SET_TX 0x0002
1807*4882a593Smuzhiyun /** Host command action : Set both Rx and Tx */
1808*4882a593Smuzhiyun #define HostCmd_ACT_SET_BOTH 0x0003
1809*4882a593Smuzhiyun /** Host command action : Get Rx */
1810*4882a593Smuzhiyun #define HostCmd_ACT_GET_RX 0x0004
1811*4882a593Smuzhiyun /** Host command action : Get Tx */
1812*4882a593Smuzhiyun #define HostCmd_ACT_GET_TX 0x0008
1813*4882a593Smuzhiyun /** Host command action : Get both Rx and Tx */
1814*4882a593Smuzhiyun #define HostCmd_ACT_GET_BOTH 0x000c
1815*4882a593Smuzhiyun 
1816*4882a593Smuzhiyun /** General Result Code*/
1817*4882a593Smuzhiyun /** General result code OK */
1818*4882a593Smuzhiyun #define HostCmd_RESULT_OK 0x0000
1819*4882a593Smuzhiyun /** Genenral error */
1820*4882a593Smuzhiyun #define HostCmd_RESULT_ERROR 0x0001
1821*4882a593Smuzhiyun /** Command is not valid */
1822*4882a593Smuzhiyun #define HostCmd_RESULT_NOT_SUPPORT 0x0002
1823*4882a593Smuzhiyun /** Command is pending */
1824*4882a593Smuzhiyun #define HostCmd_RESULT_PENDING 0x0003
1825*4882a593Smuzhiyun /** System is busy (command ignored) */
1826*4882a593Smuzhiyun #define HostCmd_RESULT_BUSY 0x0004
1827*4882a593Smuzhiyun /** Data buffer is not big enough */
1828*4882a593Smuzhiyun #define HostCmd_RESULT_PARTIAL_DATA 0x0005
1829*4882a593Smuzhiyun 
1830*4882a593Smuzhiyun /* Define action or option for HostCmd_CMD_MAC_CONTROL */
1831*4882a593Smuzhiyun /** MAC action : Rx on */
1832*4882a593Smuzhiyun #define HostCmd_ACT_MAC_RX_ON 0x0001
1833*4882a593Smuzhiyun /** MAC action : Tx on */
1834*4882a593Smuzhiyun #define HostCmd_ACT_MAC_TX_ON 0x0002
1835*4882a593Smuzhiyun /** MAC action : WEP enable */
1836*4882a593Smuzhiyun #define HostCmd_ACT_MAC_WEP_ENABLE 0x0008
1837*4882a593Smuzhiyun /** MAC action : EthernetII enable */
1838*4882a593Smuzhiyun #define HostCmd_ACT_MAC_ETHERNETII_ENABLE 0x0010
1839*4882a593Smuzhiyun /** MAC action : Promiscous mode enable */
1840*4882a593Smuzhiyun #define HostCmd_ACT_MAC_PROMISCUOUS_ENABLE 0x0080
1841*4882a593Smuzhiyun /** MAC action : All multicast enable */
1842*4882a593Smuzhiyun #define HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE 0x0100
1843*4882a593Smuzhiyun /** MAC action : RTS/CTS enable */
1844*4882a593Smuzhiyun #define HostCmd_ACT_MAC_RTS_CTS_ENABLE 0x0200
1845*4882a593Smuzhiyun /** MAC action : Strict protection enable */
1846*4882a593Smuzhiyun #define HostCmd_ACT_MAC_STRICT_PROTECTION_ENABLE 0x0400
1847*4882a593Smuzhiyun /** MAC action : Force 11n protection disable */
1848*4882a593Smuzhiyun #define HostCmd_ACT_MAC_FORCE_11N_PROTECTION_OFF 0x0800
1849*4882a593Smuzhiyun /** MAC action : Ad-Hoc G protection on */
1850*4882a593Smuzhiyun #define HostCmd_ACT_MAC_ADHOC_G_PROTECTION_ON 0x2000
1851*4882a593Smuzhiyun /** MAC action : Static-Dynamic BW enable */
1852*4882a593Smuzhiyun #define HostCmd_ACT_MAC_STATIC_DYNAMIC_BW_ENABLE MBIT(16)
1853*4882a593Smuzhiyun /** MAC action : Dynamic BW */
1854*4882a593Smuzhiyun #define HostCmd_ACT_MAC_DYNAMIC_BW MBIT(17)
1855*4882a593Smuzhiyun 
1856*4882a593Smuzhiyun /* Define action or option for HostCmd_CMD_802_11_SCAN */
1857*4882a593Smuzhiyun /** Scan type : BSS */
1858*4882a593Smuzhiyun #define HostCmd_BSS_MODE_BSS 0x0001
1859*4882a593Smuzhiyun /** Scan type : IBSS */
1860*4882a593Smuzhiyun #define HostCmd_BSS_MODE_IBSS 0x0002
1861*4882a593Smuzhiyun /** Scan type : Any */
1862*4882a593Smuzhiyun #define HostCmd_BSS_MODE_ANY 0x0003
1863*4882a593Smuzhiyun 
1864*4882a593Smuzhiyun /** Define bitmap conditions for HOST_SLEEP_CFG : GPIO FF */
1865*4882a593Smuzhiyun #define HOST_SLEEP_CFG_GPIO_FF 0xff
1866*4882a593Smuzhiyun /** Define bitmap conditions for HOST_SLEEP_CFG : GAP FF */
1867*4882a593Smuzhiyun #define HOST_SLEEP_CFG_GAP_FF 0xff
1868*4882a593Smuzhiyun 
1869*4882a593Smuzhiyun /** Buffer Constants */
1870*4882a593Smuzhiyun /** Number of command buffers */
1871*4882a593Smuzhiyun #define MRVDRV_NUM_OF_CMD_BUFFER 40
1872*4882a593Smuzhiyun /** Maximum number of BSS Descriptors */
1873*4882a593Smuzhiyun #define MRVDRV_MAX_BSSID_LIST 200
1874*4882a593Smuzhiyun 
1875*4882a593Smuzhiyun /** Host command flag in command */
1876*4882a593Smuzhiyun #define CMD_F_HOSTCMD (1 << 0)
1877*4882a593Smuzhiyun /** command cancel flag in command */
1878*4882a593Smuzhiyun #define CMD_F_CANCELED (1 << 1)
1879*4882a593Smuzhiyun /** scan command flag */
1880*4882a593Smuzhiyun #define CMD_F_SCAN (1 << 2)
1881*4882a593Smuzhiyun 
1882*4882a593Smuzhiyun /** Host Command ID bit mask (bit 11:0) */
1883*4882a593Smuzhiyun #define HostCmd_CMD_ID_MASK 0x0fff
1884*4882a593Smuzhiyun 
1885*4882a593Smuzhiyun /** Host Command Sequence number mask (bit 7:0) */
1886*4882a593Smuzhiyun #define HostCmd_SEQ_NUM_MASK 0x00ff
1887*4882a593Smuzhiyun 
1888*4882a593Smuzhiyun /** Host Command BSS number mask (bit 11:8) */
1889*4882a593Smuzhiyun #define HostCmd_BSS_NUM_MASK 0x0f00
1890*4882a593Smuzhiyun 
1891*4882a593Smuzhiyun /** Host Command BSS type mask (bit 15:12) */
1892*4882a593Smuzhiyun #define HostCmd_BSS_TYPE_MASK 0xf000
1893*4882a593Smuzhiyun 
1894*4882a593Smuzhiyun /** Set BSS information to Host Command */
1895*4882a593Smuzhiyun #define HostCmd_SET_SEQ_NO_BSS_INFO(seq, num, type)                            \
1896*4882a593Smuzhiyun 	((((seq)&0x00ff) | (((num)&0x000f) << 8)) | (((type)&0x000f) << 12))
1897*4882a593Smuzhiyun 
1898*4882a593Smuzhiyun /** Get Sequence Number from Host Command (bit 7:0) */
1899*4882a593Smuzhiyun #define HostCmd_GET_SEQ_NO(seq) ((seq)&HostCmd_SEQ_NUM_MASK)
1900*4882a593Smuzhiyun 
1901*4882a593Smuzhiyun /** Get BSS number from Host Command (bit 11:8) */
1902*4882a593Smuzhiyun #define HostCmd_GET_BSS_NO(seq) (((seq)&HostCmd_BSS_NUM_MASK) >> 8)
1903*4882a593Smuzhiyun 
1904*4882a593Smuzhiyun /** Get BSS type from Host Command (bit 15:12) */
1905*4882a593Smuzhiyun #define HostCmd_GET_BSS_TYPE(seq) (((seq)&HostCmd_BSS_TYPE_MASK) >> 12)
1906*4882a593Smuzhiyun 
1907*4882a593Smuzhiyun /* EVENT ID*/
1908*4882a593Smuzhiyun /** Card Event definition : Dummy host wakeup signal */
1909*4882a593Smuzhiyun #define EVENT_DUMMY_HOST_WAKEUP_SIGNAL 0x00000001
1910*4882a593Smuzhiyun /** Card Event definition : Link lost */
1911*4882a593Smuzhiyun #define EVENT_LINK_LOST 0x00000003
1912*4882a593Smuzhiyun /** Card Event definition : Link sensed */
1913*4882a593Smuzhiyun #define EVENT_LINK_SENSED 0x00000004
1914*4882a593Smuzhiyun /** Card Event definition : MIB changed */
1915*4882a593Smuzhiyun #define EVENT_MIB_CHANGED 0x00000006
1916*4882a593Smuzhiyun /** Card Event definition : Init done */
1917*4882a593Smuzhiyun #define EVENT_INIT_DONE 0x00000007
1918*4882a593Smuzhiyun /** Card Event definition : Deauthenticated */
1919*4882a593Smuzhiyun #define EVENT_DEAUTHENTICATED 0x00000008
1920*4882a593Smuzhiyun /** Card Event definition : Disassociated */
1921*4882a593Smuzhiyun #define EVENT_DISASSOCIATED 0x00000009
1922*4882a593Smuzhiyun /** Card Event definition : Power save awake */
1923*4882a593Smuzhiyun #define EVENT_PS_AWAKE 0x0000000a
1924*4882a593Smuzhiyun /** Card Event definition : Power save sleep */
1925*4882a593Smuzhiyun #define EVENT_PS_SLEEP 0x0000000b
1926*4882a593Smuzhiyun /** Card Event definition : MIC error multicast */
1927*4882a593Smuzhiyun #define EVENT_MIC_ERR_MULTICAST 0x0000000d
1928*4882a593Smuzhiyun /** Card Event definition : MIC error unicast */
1929*4882a593Smuzhiyun #define EVENT_MIC_ERR_UNICAST 0x0000000e
1930*4882a593Smuzhiyun 
1931*4882a593Smuzhiyun /** Card Event definition : Ad-Hoc BCN lost */
1932*4882a593Smuzhiyun #define EVENT_ADHOC_BCN_LOST 0x00000011
1933*4882a593Smuzhiyun 
1934*4882a593Smuzhiyun /** Card Event definition : Stop Tx */
1935*4882a593Smuzhiyun #define EVENT_STOP_TX 0x00000013
1936*4882a593Smuzhiyun /** Card Event definition : Start Tx */
1937*4882a593Smuzhiyun #define EVENT_START_TX 0x00000014
1938*4882a593Smuzhiyun /** Card Event definition : Channel switch */
1939*4882a593Smuzhiyun #define EVENT_CHANNEL_SWITCH 0x00000015
1940*4882a593Smuzhiyun 
1941*4882a593Smuzhiyun /** Card Event definition : MEAS report ready */
1942*4882a593Smuzhiyun #define EVENT_MEAS_REPORT_RDY 0x00000016
1943*4882a593Smuzhiyun 
1944*4882a593Smuzhiyun /** Card Event definition : WMM status change */
1945*4882a593Smuzhiyun #define EVENT_WMM_STATUS_CHANGE 0x00000017
1946*4882a593Smuzhiyun 
1947*4882a593Smuzhiyun /** Card Event definition : BG scan report */
1948*4882a593Smuzhiyun #define EVENT_BG_SCAN_REPORT 0x00000018
1949*4882a593Smuzhiyun /** Card Event definition : BG scan stopped */
1950*4882a593Smuzhiyun #define EVENT_BG_SCAN_STOPPED 0x00000065
1951*4882a593Smuzhiyun 
1952*4882a593Smuzhiyun /** Card Event definition : Beacon RSSI low */
1953*4882a593Smuzhiyun #define EVENT_RSSI_LOW 0x00000019
1954*4882a593Smuzhiyun /** Card Event definition : Beacon SNR low */
1955*4882a593Smuzhiyun #define EVENT_SNR_LOW 0x0000001a
1956*4882a593Smuzhiyun /** Card Event definition : Maximum fail */
1957*4882a593Smuzhiyun #define EVENT_MAX_FAIL 0x0000001b
1958*4882a593Smuzhiyun /** Card Event definition : Beacon RSSI high */
1959*4882a593Smuzhiyun #define EVENT_RSSI_HIGH 0x0000001c
1960*4882a593Smuzhiyun /** Card Event definition : Beacon SNR high */
1961*4882a593Smuzhiyun #define EVENT_SNR_HIGH 0x0000001d
1962*4882a593Smuzhiyun 
1963*4882a593Smuzhiyun /** Card Event definition : IBSS coalsced */
1964*4882a593Smuzhiyun #define EVENT_IBSS_COALESCED 0x0000001e
1965*4882a593Smuzhiyun 
1966*4882a593Smuzhiyun /** Event definition : IBSS station connected */
1967*4882a593Smuzhiyun #define EVENT_IBSS_STATION_CONNECT 0x00000020
1968*4882a593Smuzhiyun /** Event definition : IBSS station dis-connected */
1969*4882a593Smuzhiyun #define EVENT_IBSS_STATION_DISCONNECT 0x00000021
1970*4882a593Smuzhiyun 
1971*4882a593Smuzhiyun /** Card Event definition : Data RSSI low */
1972*4882a593Smuzhiyun #define EVENT_DATA_RSSI_LOW 0x00000024
1973*4882a593Smuzhiyun /** Card Event definition : Data SNR low */
1974*4882a593Smuzhiyun #define EVENT_DATA_SNR_LOW 0x00000025
1975*4882a593Smuzhiyun /** Card Event definition : Data RSSI high */
1976*4882a593Smuzhiyun #define EVENT_DATA_RSSI_HIGH 0x00000026
1977*4882a593Smuzhiyun /** Card Event definition : Data SNR high */
1978*4882a593Smuzhiyun #define EVENT_DATA_SNR_HIGH 0x00000027
1979*4882a593Smuzhiyun 
1980*4882a593Smuzhiyun /** Card Event definition : Link Quality */
1981*4882a593Smuzhiyun #define EVENT_LINK_QUALITY 0x00000028
1982*4882a593Smuzhiyun 
1983*4882a593Smuzhiyun /** Card Event definition : Port release event */
1984*4882a593Smuzhiyun #define EVENT_PORT_RELEASE 0x0000002b
1985*4882a593Smuzhiyun 
1986*4882a593Smuzhiyun #ifdef UAP_SUPPORT
1987*4882a593Smuzhiyun /** Event ID: STA deauth */
1988*4882a593Smuzhiyun #define EVENT_MICRO_AP_STA_DEAUTH 0x0000002c
1989*4882a593Smuzhiyun /** Event ID: STA assoicated */
1990*4882a593Smuzhiyun #define EVENT_MICRO_AP_STA_ASSOC 0x0000002d
1991*4882a593Smuzhiyun /** Event ID: BSS started */
1992*4882a593Smuzhiyun #define EVENT_MICRO_AP_BSS_START 0x0000002e
1993*4882a593Smuzhiyun /** Event ID: BSS idle event */
1994*4882a593Smuzhiyun #define EVENT_MICRO_AP_BSS_IDLE 0x00000043
1995*4882a593Smuzhiyun /** Event ID: BSS active event */
1996*4882a593Smuzhiyun #define EVENT_MICRO_AP_BSS_ACTIVE 0x00000044
1997*4882a593Smuzhiyun 
1998*4882a593Smuzhiyun /** Event ID: MIC countermeasures event */
1999*4882a593Smuzhiyun #define EVENT_MICRO_AP_MIC_COUNTERMEASURES 0x0000004c
2000*4882a593Smuzhiyun #endif /* UAP_SUPPORT */
2001*4882a593Smuzhiyun 
2002*4882a593Smuzhiyun /** Card Event definition : Pre-Beacon Lost */
2003*4882a593Smuzhiyun #define EVENT_PRE_BEACON_LOST 0x00000031
2004*4882a593Smuzhiyun 
2005*4882a593Smuzhiyun #define EVENT_WATCHDOG_TMOUT 0x00000032
2006*4882a593Smuzhiyun 
2007*4882a593Smuzhiyun /** Card Event definition : Add BA event */
2008*4882a593Smuzhiyun #define EVENT_ADDBA 0x00000033
2009*4882a593Smuzhiyun /** Card Event definition : Del BA event */
2010*4882a593Smuzhiyun #define EVENT_DELBA 0x00000034
2011*4882a593Smuzhiyun /** Card Event definition: BA stream timeout*/
2012*4882a593Smuzhiyun #define EVENT_BA_STREAM_TIMEOUT 0x00000037
2013*4882a593Smuzhiyun 
2014*4882a593Smuzhiyun /** Card Event definition : AMSDU aggr control */
2015*4882a593Smuzhiyun #define EVENT_AMSDU_AGGR_CTRL 0x00000042
2016*4882a593Smuzhiyun 
2017*4882a593Smuzhiyun /** Card Event definition: WEP ICV error */
2018*4882a593Smuzhiyun #define EVENT_WEP_ICV_ERR 0x00000046
2019*4882a593Smuzhiyun 
2020*4882a593Smuzhiyun /** Card Event definition : Host sleep enable */
2021*4882a593Smuzhiyun #define EVENT_HS_ACT_REQ 0x00000047
2022*4882a593Smuzhiyun 
2023*4882a593Smuzhiyun /** Card Event definition : BW changed */
2024*4882a593Smuzhiyun #define EVENT_BW_CHANGE 0x00000048
2025*4882a593Smuzhiyun 
2026*4882a593Smuzhiyun #ifdef WIFI_DIRECT_SUPPORT
2027*4882a593Smuzhiyun /** WIFIDIRECT generic event */
2028*4882a593Smuzhiyun #define EVENT_WIFIDIRECT_GENERIC_EVENT 0x00000049
2029*4882a593Smuzhiyun /** WIFIDIRECT service discovery event */
2030*4882a593Smuzhiyun #define EVENT_WIFIDIRECT_SERVICE_DISCOVERY 0x0000004a
2031*4882a593Smuzhiyun #endif
2032*4882a593Smuzhiyun /** Remain on Channel expired event */
2033*4882a593Smuzhiyun #define EVENT_REMAIN_ON_CHANNEL_EXPIRED 0x0000005f
2034*4882a593Smuzhiyun 
2035*4882a593Smuzhiyun /** TDLS generic event */
2036*4882a593Smuzhiyun #define EVENT_TDLS_GENERIC_EVENT 0x00000052
2037*4882a593Smuzhiyun 
2038*4882a593Smuzhiyun #define EVENT_MEF_HOST_WAKEUP 0x0000004f
2039*4882a593Smuzhiyun 
2040*4882a593Smuzhiyun /** Card Event definition: Channel switch pending announcment */
2041*4882a593Smuzhiyun #define EVENT_CHANNEL_SWITCH_ANN 0x00000050
2042*4882a593Smuzhiyun 
2043*4882a593Smuzhiyun /** Event definition:  Radar Detected by card */
2044*4882a593Smuzhiyun #define EVENT_RADAR_DETECTED 0x00000053
2045*4882a593Smuzhiyun 
2046*4882a593Smuzhiyun /** Event definition:  Radar Detected by card */
2047*4882a593Smuzhiyun #define EVENT_CHANNEL_REPORT_RDY 0x00000054
2048*4882a593Smuzhiyun 
2049*4882a593Smuzhiyun /** Event definition:  Scan results through event */
2050*4882a593Smuzhiyun #define EVENT_EXT_SCAN_REPORT 0x00000058
2051*4882a593Smuzhiyun /** Enhance ext scan done event */
2052*4882a593Smuzhiyun #define EVENT_EXT_SCAN_STATUS_REPORT 0x0000007f
2053*4882a593Smuzhiyun 
2054*4882a593Smuzhiyun /** Event definition: RXBA_SYNC */
2055*4882a593Smuzhiyun #define EVENT_RXBA_SYNC 0x00000059
2056*4882a593Smuzhiyun 
2057*4882a593Smuzhiyun /** Event ID: TX data pause event */
2058*4882a593Smuzhiyun #define EVENT_TX_DATA_PAUSE 0x00000055
2059*4882a593Smuzhiyun 
2060*4882a593Smuzhiyun /** Event definition : FW debug information */
2061*4882a593Smuzhiyun #define EVENT_FW_DEBUG_INFO 0x00000063
2062*4882a593Smuzhiyun 
2063*4882a593Smuzhiyun /** Event ID: SAD Report */
2064*4882a593Smuzhiyun #define EVENT_SAD_REPORT 0x00000066
2065*4882a593Smuzhiyun 
2066*4882a593Smuzhiyun #define EVENT_FW_DUMP_INFO 0x00000073
2067*4882a593Smuzhiyun /** Event ID: Tx status */
2068*4882a593Smuzhiyun #define EVENT_TX_STATUS_REPORT 0x00000074
2069*4882a593Smuzhiyun 
2070*4882a593Smuzhiyun #define EVENT_BT_COEX_WLAN_PARA_CHANGE 0x00000076
2071*4882a593Smuzhiyun 
2072*4882a593Smuzhiyun #define EVENT_VDLL_IND 0x00000081
2073*4882a593Smuzhiyun 
2074*4882a593Smuzhiyun #define EVENT_ROAM_OFFLOAD 0x00000083
2075*4882a593Smuzhiyun 
2076*4882a593Smuzhiyun #define EVENT_EXCEED_MAX_P2P_CONN 0x00000089
2077*4882a593Smuzhiyun 
2078*4882a593Smuzhiyun #if defined(PCIE)
2079*4882a593Smuzhiyun #define EVENT_SSU_DUMP_DMA 0x0000008C
2080*4882a593Smuzhiyun #endif
2081*4882a593Smuzhiyun 
2082*4882a593Smuzhiyun #define EVENT_CSI 0x0000008D
2083*4882a593Smuzhiyun #define EVENT_FW_HANG_REPORT 0x0000008F
2084*4882a593Smuzhiyun /** Card Event definition : RESET PN */
2085*4882a593Smuzhiyun 
2086*4882a593Smuzhiyun #define EVENT_ASSOC_REQ_IE 0x00000095
2087*4882a593Smuzhiyun 
2088*4882a593Smuzhiyun #define CHAN_LOAD_EVENT 0x00000099
2089*4882a593Smuzhiyun 
2090*4882a593Smuzhiyun /** Event ID mask */
2091*4882a593Smuzhiyun #define EVENT_ID_MASK 0xffff
2092*4882a593Smuzhiyun 
2093*4882a593Smuzhiyun /** BSS number mask */
2094*4882a593Smuzhiyun #define BSS_NUM_MASK 0xf
2095*4882a593Smuzhiyun 
2096*4882a593Smuzhiyun /** Get BSS number from event cause (bit 23:16) */
2097*4882a593Smuzhiyun #define EVENT_GET_BSS_NUM(event_cause) (((event_cause) >> 16) & BSS_NUM_MASK)
2098*4882a593Smuzhiyun 
2099*4882a593Smuzhiyun /** Get BSS type from event cause (bit 31:24) */
2100*4882a593Smuzhiyun #define EVENT_GET_BSS_TYPE(event_cause) (((event_cause) >> 24) & 0x00ff)
2101*4882a593Smuzhiyun 
2102*4882a593Smuzhiyun /** event type for tdls setup failure */
2103*4882a593Smuzhiyun #define TDLS_EVENT_TYPE_SETUP_FAILURE 1
2104*4882a593Smuzhiyun /** event type for tdls setup request received */
2105*4882a593Smuzhiyun #define TDLS_EVENT_TYPE_SETUP_REQ 2
2106*4882a593Smuzhiyun /** event type for tdls link torn down */
2107*4882a593Smuzhiyun #define TDLS_EVENT_TYPE_LINK_TORN_DOWN 3
2108*4882a593Smuzhiyun /** event type for tdls link established */
2109*4882a593Smuzhiyun #define TDLS_EVENT_TYPE_LINK_ESTABLISHED 4
2110*4882a593Smuzhiyun /** event type for tdls debug */
2111*4882a593Smuzhiyun #define TDLS_EVENT_TYPE_DEBUG 5
2112*4882a593Smuzhiyun /** event type for tdls packet */
2113*4882a593Smuzhiyun #define TDLS_EVENT_TYPE_PACKET 6
2114*4882a593Smuzhiyun /** event type for channel switch result */
2115*4882a593Smuzhiyun #define TDLS_EVENT_TYPE_CHAN_SWITCH_RESULT 7
2116*4882a593Smuzhiyun /** event type for start channel switch */
2117*4882a593Smuzhiyun #define TDLS_EVENT_TYPE_START_CHAN_SWITCH 8
2118*4882a593Smuzhiyun /** event type for stop channel switch */
2119*4882a593Smuzhiyun #define TDLS_EVENT_TYPE_CHAN_SWITCH_STOPPED 9
2120*4882a593Smuzhiyun 
2121*4882a593Smuzhiyun /** Packet received on direct link */
2122*4882a593Smuzhiyun #define RXPD_FLAG_PKT_DIRECT_LINK MBIT(0)
2123*4882a593Smuzhiyun /** TDLS base channel */
2124*4882a593Smuzhiyun #define TDLS_BASE_CHANNEL 0
2125*4882a593Smuzhiyun /** TDLS off channel */
2126*4882a593Smuzhiyun #define TDLS_OFF_CHANNEL 1
2127*4882a593Smuzhiyun 
2128*4882a593Smuzhiyun /** structure for channel switch result from TDLS FW */
2129*4882a593Smuzhiyun typedef MLAN_PACK_START struct _chan_switch_result {
2130*4882a593Smuzhiyun 	/** current channel, 0 - base channel, 1 - off channel*/
2131*4882a593Smuzhiyun 	t_u8 current_channel;
2132*4882a593Smuzhiyun 	/** channel switch status*/
2133*4882a593Smuzhiyun 	t_u8 status;
2134*4882a593Smuzhiyun 	/** channel switch fauilure reason code*/
2135*4882a593Smuzhiyun 	t_u8 reason;
2136*4882a593Smuzhiyun } MLAN_PACK_END chan_switch_result;
2137*4882a593Smuzhiyun 
2138*4882a593Smuzhiyun typedef MLAN_PACK_START struct _ie_data {
2139*4882a593Smuzhiyun 	/** IE Length */
2140*4882a593Smuzhiyun 	t_u16 ie_length;
2141*4882a593Smuzhiyun 	/** IE pointer */
2142*4882a593Smuzhiyun 	t_u8 ie_ptr[1];
2143*4882a593Smuzhiyun } MLAN_PACK_END tdls_ie_data;
2144*4882a593Smuzhiyun 
2145*4882a593Smuzhiyun /** Event structure for generic events from TDLS FW */
2146*4882a593Smuzhiyun typedef MLAN_PACK_START struct _Event_tdls_generic {
2147*4882a593Smuzhiyun 	/** Event Type */
2148*4882a593Smuzhiyun 	t_u16 event_type;
2149*4882a593Smuzhiyun 	/** Peer mac address */
2150*4882a593Smuzhiyun 	t_u8 peer_mac_addr[MLAN_MAC_ADDR_LENGTH];
2151*4882a593Smuzhiyun 	union {
2152*4882a593Smuzhiyun 		/** channel switch result structure*/
2153*4882a593Smuzhiyun 		chan_switch_result switch_result;
2154*4882a593Smuzhiyun 		/** channel switch stop reason*/
2155*4882a593Smuzhiyun 		t_u8 cs_stop_reason;
2156*4882a593Smuzhiyun 		/** Reason code */
2157*4882a593Smuzhiyun 		t_u16 reason_code;
2158*4882a593Smuzhiyun 		/** IE data */
2159*4882a593Smuzhiyun 		tdls_ie_data ie_data;
2160*4882a593Smuzhiyun 	} u;
2161*4882a593Smuzhiyun } MLAN_PACK_END Event_tdls_generic;
2162*4882a593Smuzhiyun 
2163*4882a593Smuzhiyun typedef enum _tdls_error_code_e {
2164*4882a593Smuzhiyun 	NO_ERROR = 0,
2165*4882a593Smuzhiyun 	INTERNAL_ERROR,
2166*4882a593Smuzhiyun 	MAX_TDLS_LINKS_EST,
2167*4882a593Smuzhiyun 	TDLS_LINK_EXISTS,
2168*4882a593Smuzhiyun 	TDLS_LINK_NONEXISTENT,
2169*4882a593Smuzhiyun 	TDLS_PEER_STA_UNREACHABLE = 25,
2170*4882a593Smuzhiyun } tdls_error_code_e;
2171*4882a593Smuzhiyun 
2172*4882a593Smuzhiyun #define RXPD_FLAG_EXTRA_HEADER (1 << 1)
2173*4882a593Smuzhiyun 
2174*4882a593Smuzhiyun /** Event_WEP_ICV_ERR structure */
2175*4882a593Smuzhiyun typedef MLAN_PACK_START struct _Event_WEP_ICV_ERR {
2176*4882a593Smuzhiyun 	/** Reason code */
2177*4882a593Smuzhiyun 	t_u16 reason_code;
2178*4882a593Smuzhiyun 	/** Source MAC address */
2179*4882a593Smuzhiyun 	t_u8 src_mac_addr[MLAN_MAC_ADDR_LENGTH];
2180*4882a593Smuzhiyun 	/** WEP decryption used key */
2181*4882a593Smuzhiyun 	t_u8 wep_key_index;
2182*4882a593Smuzhiyun 	/** WEP key length */
2183*4882a593Smuzhiyun 	t_u8 wep_key_length;
2184*4882a593Smuzhiyun 	/** WEP key */
2185*4882a593Smuzhiyun 	t_u8 key[MAX_WEP_KEY_SIZE];
2186*4882a593Smuzhiyun } MLAN_PACK_END Event_WEP_ICV_ERR;
2187*4882a593Smuzhiyun 
2188*4882a593Smuzhiyun /** WLAN_802_11_FIXED_IEs */
2189*4882a593Smuzhiyun typedef MLAN_PACK_START struct _WLAN_802_11_FIXED_IEs {
2190*4882a593Smuzhiyun 	/** Timestamp */
2191*4882a593Smuzhiyun 	t_u8 time_stamp[8];
2192*4882a593Smuzhiyun 	/** Beacon interval */
2193*4882a593Smuzhiyun 	t_u16 beacon_interval;
2194*4882a593Smuzhiyun 	/** Capabilities*/
2195*4882a593Smuzhiyun 	t_u16 capabilities;
2196*4882a593Smuzhiyun } MLAN_PACK_END WLAN_802_11_FIXED_IEs;
2197*4882a593Smuzhiyun 
2198*4882a593Smuzhiyun /** WLAN_802_11_VARIABLE_IEs */
2199*4882a593Smuzhiyun typedef MLAN_PACK_START struct _WLAN_802_11_VARIABLE_IEs {
2200*4882a593Smuzhiyun 	/** Element ID */
2201*4882a593Smuzhiyun 	t_u8 element_id;
2202*4882a593Smuzhiyun 	/** Length */
2203*4882a593Smuzhiyun 	t_u8 length;
2204*4882a593Smuzhiyun 	/** IE data */
2205*4882a593Smuzhiyun 	t_u8 data[1];
2206*4882a593Smuzhiyun } MLAN_PACK_END WLAN_802_11_VARIABLE_IEs;
2207*4882a593Smuzhiyun 
2208*4882a593Smuzhiyun /** TLV related data structures*/
2209*4882a593Smuzhiyun /*TDLS TIMEOUT VALUE (seconds)*/
2210*4882a593Smuzhiyun #define TDLS_IDLE_TIMEOUT 60
2211*4882a593Smuzhiyun /** MrvlIEtypes_Data_t */
2212*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_TDLS_Idle_Timeout_t {
2213*4882a593Smuzhiyun 	/** Header */
2214*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
2215*4882a593Smuzhiyun 	/** value */
2216*4882a593Smuzhiyun 	t_u16 value;
2217*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_TDLS_Idle_Timeout_t;
2218*4882a593Smuzhiyun #if defined(STA_SUPPORT)
2219*4882a593Smuzhiyun /** Pairwise Cipher Suite length */
2220*4882a593Smuzhiyun #define PAIRWISE_CIPHER_SUITE_LEN 4
2221*4882a593Smuzhiyun /** AKM Suite length */
2222*4882a593Smuzhiyun #define AKM_SUITE_LEN 4
2223*4882a593Smuzhiyun /** MFPC bit in RSN capability */
2224*4882a593Smuzhiyun #define MFPC_BIT 7
2225*4882a593Smuzhiyun /** MFPR bit in RSN capability */
2226*4882a593Smuzhiyun #define MFPR_BIT 6
2227*4882a593Smuzhiyun #endif
2228*4882a593Smuzhiyun /** Bit mask for TxPD status field for null packet */
2229*4882a593Smuzhiyun #define MRVDRV_TxPD_POWER_MGMT_NULL_PACKET 0x01
2230*4882a593Smuzhiyun /** Bit mask for TxPD status field for last packet */
2231*4882a593Smuzhiyun #define MRVDRV_TxPD_POWER_MGMT_LAST_PACKET 0x08
2232*4882a593Smuzhiyun 
2233*4882a593Smuzhiyun /** Bit mask for TxPD flags field for TDLS packet */
2234*4882a593Smuzhiyun #define MRVDRV_TxPD_FLAGS_TDLS_PACKET MBIT(4)
2235*4882a593Smuzhiyun 
2236*4882a593Smuzhiyun /** Bit mask for TxPD flags field for Tx status report */
2237*4882a593Smuzhiyun #define MRVDRV_TxPD_FLAGS_TX_PACKET_STATUS MBIT(5)
2238*4882a593Smuzhiyun 
2239*4882a593Smuzhiyun /** Packet type: 802.11 */
2240*4882a593Smuzhiyun #define PKT_TYPE_802DOT11 0x05
2241*4882a593Smuzhiyun 
2242*4882a593Smuzhiyun #define PKT_TYPE_MGMT_FRAME 0xE5
2243*4882a593Smuzhiyun /** Packet type: AMSDU */
2244*4882a593Smuzhiyun #define PKT_TYPE_AMSDU 0xE6
2245*4882a593Smuzhiyun /** Packet type: BAR */
2246*4882a593Smuzhiyun #define PKT_TYPE_BAR 0xE7
2247*4882a593Smuzhiyun 
2248*4882a593Smuzhiyun /** Packet type: debugging */
2249*4882a593Smuzhiyun #define PKT_TYPE_DEBUG 0xEF
2250*4882a593Smuzhiyun 
2251*4882a593Smuzhiyun #define PKT_TYPE_802DOT11_MC_AGGR 11
2252*4882a593Smuzhiyun 
2253*4882a593Smuzhiyun /** channel number at bit 5-13 */
2254*4882a593Smuzhiyun #define RXPD_CHAN_MASK 0x3FE0
2255*4882a593Smuzhiyun /** Rate control mask  15-23 */
2256*4882a593Smuzhiyun #define TXPD_RATE_MASK 0xff8000
2257*4882a593Smuzhiyun /** enable bw ctrl in TxPD */
2258*4882a593Smuzhiyun #define TXPD_BW_ENABLE MBIT(20)
2259*4882a593Smuzhiyun /** enable tx power ctrl in TxPD */
2260*4882a593Smuzhiyun #define TXPD_TXPW_ENABLE MBIT(7)
2261*4882a593Smuzhiyun /** sign of power */
2262*4882a593Smuzhiyun #define TXPD_TXPW_NEGATIVE MBIT(6)
2263*4882a593Smuzhiyun /** Enable Rate ctrl in TxPD */
2264*4882a593Smuzhiyun #define TXPD_TXRATE_ENABLE MBIT(15)
2265*4882a593Smuzhiyun /** enable retry limit in TxPD */
2266*4882a593Smuzhiyun #define TXPD_RETRY_ENABLE MBIT(12)
2267*4882a593Smuzhiyun 
2268*4882a593Smuzhiyun /** tx_control*/
2269*4882a593Smuzhiyun #ifdef BIG_ENDIAN_SUPPORT
2270*4882a593Smuzhiyun typedef MLAN_PACK_START struct _tx_ctrl {
2271*4882a593Smuzhiyun 	/** reserved */
2272*4882a593Smuzhiyun 	t_u32 reserved : 3;
2273*4882a593Smuzhiyun 	/** mc retry packet */
2274*4882a593Smuzhiyun 	t_u32 mc_pkt_retry : 1;
2275*4882a593Smuzhiyun 	/** end of mc AMPDU */
2276*4882a593Smuzhiyun 	t_u32 mc_ampdu_end : 1;
2277*4882a593Smuzhiyun 	/** start of mc AMPDU */
2278*4882a593Smuzhiyun 	t_u32 mc_ampdu_start : 1;
2279*4882a593Smuzhiyun 	/** End of mc cycle */
2280*4882a593Smuzhiyun 	t_u32 mc_cycle_end : 1;
2281*4882a593Smuzhiyun 	/** start of mc cycle */
2282*4882a593Smuzhiyun 	t_u32 mc_cycle_start : 1;
2283*4882a593Smuzhiyun 	/** bw 0-20MHz, 1-40MHz */
2284*4882a593Smuzhiyun 	t_u32 bw : 3;
2285*4882a593Smuzhiyun 	/** Rate used for transmission MCS0-7*/
2286*4882a593Smuzhiyun 	t_u32 tx_rate : 5;
2287*4882a593Smuzhiyun 	/** Control the use of txRate. 0 - use FW setting, 1 - use the specified
2288*4882a593Smuzhiyun 	 * txRate;*/
2289*4882a593Smuzhiyun 	t_u32 host_txrate_ctrl : 1;
2290*4882a593Smuzhiyun 	/**  0/1 - use FW setting, 2 - ACK_IMMD, 3 - NO_ACK.*/
2291*4882a593Smuzhiyun 	t_u32 ack_policy : 2;
2292*4882a593Smuzhiyun 	/** Control the use of retryLimit. 0 - use FW setting, 1 - use the
2293*4882a593Smuzhiyun 	 * specified retryLimit.*/
2294*4882a593Smuzhiyun 	t_u32 host_retry_ctrl : 1;
2295*4882a593Smuzhiyun 	/** retry limit */
2296*4882a593Smuzhiyun 	t_u32 retry_limit : 4;
2297*4882a593Smuzhiyun 	/** Control the use of txPower. 0 - use FW power setting, 1 - use the
2298*4882a593Smuzhiyun 	 * specified txPower.*/
2299*4882a593Smuzhiyun 	t_u32 host_tx_powerctrl : 1;
2300*4882a593Smuzhiyun 	/** Sign of the txPower, 0 - positive_sign(+), 1 - negative_sign(-). */
2301*4882a593Smuzhiyun 	t_u32 tx_power_sign : 1;
2302*4882a593Smuzhiyun 	/** Power used for transmission(in dBm); */
2303*4882a593Smuzhiyun 	t_u32 tx_power : 6;
2304*4882a593Smuzhiyun } MLAN_PACK_END tx_ctrl;
2305*4882a593Smuzhiyun #else
2306*4882a593Smuzhiyun typedef MLAN_PACK_START struct _tx_ctrl {
2307*4882a593Smuzhiyun 	/** Power used for transmission(in dBm); */
2308*4882a593Smuzhiyun 	t_u32 tx_power : 6;
2309*4882a593Smuzhiyun 	/** Sign of the txPower, 0 - positive_sign(+), 1 - negative_sign(-). */
2310*4882a593Smuzhiyun 	t_u32 tx_power_sign : 1;
2311*4882a593Smuzhiyun 	/** Control the use of txPower. 0 - use FW power setting, 1 - use the
2312*4882a593Smuzhiyun 	 * specified txPower.*/
2313*4882a593Smuzhiyun 	t_u32 host_tx_powerctrl : 1;
2314*4882a593Smuzhiyun 	/** retry limit */
2315*4882a593Smuzhiyun 	t_u32 retry_limit : 4;
2316*4882a593Smuzhiyun 	/** Control the use of retryLimit. 0 - use FW setting, 1 - use the
2317*4882a593Smuzhiyun 	 * specified retryLimit.*/
2318*4882a593Smuzhiyun 	t_u32 host_retry_ctrl : 1;
2319*4882a593Smuzhiyun 	/**  0/1 - use FW setting, 2 - ACK_IMMD, 3 - NO_ACK.*/
2320*4882a593Smuzhiyun 	t_u32 ack_policy : 2;
2321*4882a593Smuzhiyun 	/** Control the use of txRate. 0 - use FW setting, 1 - use the specified
2322*4882a593Smuzhiyun 	 * txRate;*/
2323*4882a593Smuzhiyun 	t_u32 host_txrate_ctrl : 1;
2324*4882a593Smuzhiyun 	/** Rate used for transmission MCS0-7*/
2325*4882a593Smuzhiyun 	t_u32 tx_rate : 5;
2326*4882a593Smuzhiyun 	/** bw 0-20MHz 1-40MHz*/
2327*4882a593Smuzhiyun 	t_u32 bw : 3;
2328*4882a593Smuzhiyun 	/** start of mc cycle */
2329*4882a593Smuzhiyun 	t_u32 mc_cycle_start : 1;
2330*4882a593Smuzhiyun 	/** End of mc cycle */
2331*4882a593Smuzhiyun 	t_u32 mc_cycle_end : 1;
2332*4882a593Smuzhiyun 	/** start of mc AMPDU */
2333*4882a593Smuzhiyun 	t_u32 mc_ampdu_start : 1;
2334*4882a593Smuzhiyun 	/** end of mc AMPDU */
2335*4882a593Smuzhiyun 	t_u32 mc_ampdu_end : 1;
2336*4882a593Smuzhiyun 	/** mc retry packet */
2337*4882a593Smuzhiyun 	t_u32 mc_pkt_retry : 1;
2338*4882a593Smuzhiyun 	/** reserved */
2339*4882a593Smuzhiyun 	t_u32 reserved : 3;
2340*4882a593Smuzhiyun } MLAN_PACK_END tx_ctrl;
2341*4882a593Smuzhiyun #endif
2342*4882a593Smuzhiyun 
2343*4882a593Smuzhiyun /** mc tx ctrl */
2344*4882a593Smuzhiyun typedef MLAN_PACK_START struct _mc_tx_ctrl {
2345*4882a593Smuzhiyun 	/** mc seq */
2346*4882a593Smuzhiyun 	t_u16 mc_seq;
2347*4882a593Smuzhiyun 	/** abs_tsf_expirytime*/
2348*4882a593Smuzhiyun 	t_u32 abs_tsf_expirytime;
2349*4882a593Smuzhiyun } MLAN_PACK_END mc_tx_ctrl;
2350*4882a593Smuzhiyun 
2351*4882a593Smuzhiyun /** TxPD descriptor */
2352*4882a593Smuzhiyun typedef MLAN_PACK_START struct _TxPD {
2353*4882a593Smuzhiyun 	/** BSS type */
2354*4882a593Smuzhiyun 	t_u8 bss_type;
2355*4882a593Smuzhiyun 	/** BSS number */
2356*4882a593Smuzhiyun 	t_u8 bss_num;
2357*4882a593Smuzhiyun 	/** Tx packet length */
2358*4882a593Smuzhiyun 	t_u16 tx_pkt_length;
2359*4882a593Smuzhiyun 	/** Tx packet offset */
2360*4882a593Smuzhiyun 	t_u16 tx_pkt_offset;
2361*4882a593Smuzhiyun 	/** Tx packet type */
2362*4882a593Smuzhiyun 	t_u16 tx_pkt_type;
2363*4882a593Smuzhiyun 	/** Tx Control */
2364*4882a593Smuzhiyun 	t_u32 tx_control;
2365*4882a593Smuzhiyun 	/** Pkt Priority */
2366*4882a593Smuzhiyun 	t_u8 priority;
2367*4882a593Smuzhiyun 	/** Transmit Pkt Flags*/
2368*4882a593Smuzhiyun 	t_u8 flags;
2369*4882a593Smuzhiyun 	/** Amount of time the packet has been queued
2370*4882a593Smuzhiyun 	 * in the driver (units = 2ms)*/
2371*4882a593Smuzhiyun 	t_u8 pkt_delay_2ms;
2372*4882a593Smuzhiyun 	/** reserved */
2373*4882a593Smuzhiyun 	t_u8 reserved;
2374*4882a593Smuzhiyun 	/** Tx Control */
2375*4882a593Smuzhiyun 	t_u32 tx_control_1;
2376*4882a593Smuzhiyun } MLAN_PACK_END TxPD, *PTxPD;
2377*4882a593Smuzhiyun 
2378*4882a593Smuzhiyun /** RxPD Descriptor */
2379*4882a593Smuzhiyun typedef MLAN_PACK_START struct _RxPD {
2380*4882a593Smuzhiyun 	/** BSS type */
2381*4882a593Smuzhiyun 	t_u8 bss_type;
2382*4882a593Smuzhiyun 	/** BSS number */
2383*4882a593Smuzhiyun 	t_u8 bss_num;
2384*4882a593Smuzhiyun 	/** Rx Packet Length */
2385*4882a593Smuzhiyun 	t_u16 rx_pkt_length;
2386*4882a593Smuzhiyun 	/** Rx Pkt offset */
2387*4882a593Smuzhiyun 	t_u16 rx_pkt_offset;
2388*4882a593Smuzhiyun 	/** Rx packet type */
2389*4882a593Smuzhiyun 	t_u16 rx_pkt_type;
2390*4882a593Smuzhiyun 	/** Sequence number */
2391*4882a593Smuzhiyun 	t_u16 seq_num;
2392*4882a593Smuzhiyun 	/** Packet Priority */
2393*4882a593Smuzhiyun 	t_u8 priority;
2394*4882a593Smuzhiyun 	/** Rx Packet Rate */
2395*4882a593Smuzhiyun 	t_u8 rx_rate;
2396*4882a593Smuzhiyun 	/** SNR */
2397*4882a593Smuzhiyun 	t_s8 snr;
2398*4882a593Smuzhiyun 	/** Noise Floor */
2399*4882a593Smuzhiyun 	t_s8 nf;
2400*4882a593Smuzhiyun 	/** [Bit 1] [Bit 0] RxRate format: legacy rate = 00 HT = 01 VHT = 10
2401*4882a593Smuzhiyun 	 *  [Bit 3] [Bit 2] HT/VHT Bandwidth BW20 = 00 BW40 = 01 BW80 = 10 BW160
2402*4882a593Smuzhiyun 	 * = 11 [Bit 4] HT/VHT Guard interval LGI = 0 SGI = 1 [Bit 5] STBC
2403*4882a593Smuzhiyun 	 * support Enabled = 1 [Bit 6] LDPC support Enabled = 1 [Bit 7] [Bit4,
2404*4882a593Smuzhiyun 	 * Bit7] AX Guard interval, 00, 01, 10 */
2405*4882a593Smuzhiyun 	t_u8 rate_info;
2406*4882a593Smuzhiyun 	/** Reserved */
2407*4882a593Smuzhiyun 	t_u8 reserved[3];
2408*4882a593Smuzhiyun 	/** TDLS flags, bit 0: 0=InfraLink, 1=DirectLink */
2409*4882a593Smuzhiyun 	t_u8 flags;
2410*4882a593Smuzhiyun 	/**For SD8887 antenna info: 0 = 2.4G antenna a; 1 = 2.4G antenna b; 3 =
2411*4882a593Smuzhiyun 	 * 5G antenna; 0xff = invalid value */
2412*4882a593Smuzhiyun 	t_u8 antenna;
2413*4882a593Smuzhiyun 	/* [31:0] ToA of the rx packet, [63:32] ToD of the ack for the rx packet
2414*4882a593Smuzhiyun 	 * Both ToA and ToD are in nanoseconds */
2415*4882a593Smuzhiyun 	t_u64 toa_tod_tstamps;
2416*4882a593Smuzhiyun 	/** rx info */
2417*4882a593Smuzhiyun 	t_u32 rx_info;
2418*4882a593Smuzhiyun 
2419*4882a593Smuzhiyun 	/** Reserved */
2420*4882a593Smuzhiyun 	t_u8 reserved3[8];
2421*4882a593Smuzhiyun } MLAN_PACK_END RxPD, *PRxPD;
2422*4882a593Smuzhiyun 
2423*4882a593Smuzhiyun /** IEEEtypes_FrameCtl_t*/
2424*4882a593Smuzhiyun #ifdef BIG_ENDIAN_SUPPORT
2425*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_FrameCtl_t {
2426*4882a593Smuzhiyun 	/** Order */
2427*4882a593Smuzhiyun 	t_u8 order : 1;
2428*4882a593Smuzhiyun 	/** Wep */
2429*4882a593Smuzhiyun 	t_u8 wep : 1;
2430*4882a593Smuzhiyun 	/** More Data */
2431*4882a593Smuzhiyun 	t_u8 more_data : 1;
2432*4882a593Smuzhiyun 	/** Power Mgmt */
2433*4882a593Smuzhiyun 	t_u8 pwr_mgmt : 1;
2434*4882a593Smuzhiyun 	/** Retry */
2435*4882a593Smuzhiyun 	t_u8 retry : 1;
2436*4882a593Smuzhiyun 	/** More Frag */
2437*4882a593Smuzhiyun 	t_u8 more_frag : 1;
2438*4882a593Smuzhiyun 	/** From DS */
2439*4882a593Smuzhiyun 	t_u8 from_ds : 1;
2440*4882a593Smuzhiyun 	/** To DS */
2441*4882a593Smuzhiyun 	t_u8 to_ds : 1;
2442*4882a593Smuzhiyun 	/** Sub Type */
2443*4882a593Smuzhiyun 	t_u8 sub_type : 4;
2444*4882a593Smuzhiyun 	/** Type */
2445*4882a593Smuzhiyun 	t_u8 type : 2;
2446*4882a593Smuzhiyun 	/** Protocol Version */
2447*4882a593Smuzhiyun 	t_u8 protocol_version : 2;
2448*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_FrameCtl_t;
2449*4882a593Smuzhiyun #else
2450*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_FrameCtl_t {
2451*4882a593Smuzhiyun 	/** Protocol Version */
2452*4882a593Smuzhiyun 	t_u8 protocol_version : 2;
2453*4882a593Smuzhiyun 	/** Type */
2454*4882a593Smuzhiyun 	t_u8 type : 2;
2455*4882a593Smuzhiyun 	/** Sub Type */
2456*4882a593Smuzhiyun 	t_u8 sub_type : 4;
2457*4882a593Smuzhiyun 	/** To DS */
2458*4882a593Smuzhiyun 	t_u8 to_ds : 1;
2459*4882a593Smuzhiyun 	/** From DS */
2460*4882a593Smuzhiyun 	t_u8 from_ds : 1;
2461*4882a593Smuzhiyun 	/** More Frag */
2462*4882a593Smuzhiyun 	t_u8 more_frag : 1;
2463*4882a593Smuzhiyun 	/** Retry */
2464*4882a593Smuzhiyun 	t_u8 retry : 1;
2465*4882a593Smuzhiyun 	/** Power Mgmt */
2466*4882a593Smuzhiyun 	t_u8 pwr_mgmt : 1;
2467*4882a593Smuzhiyun 	/** More Data */
2468*4882a593Smuzhiyun 	t_u8 more_data : 1;
2469*4882a593Smuzhiyun 	/** Wep */
2470*4882a593Smuzhiyun 	t_u8 wep : 1;
2471*4882a593Smuzhiyun 	/** Order */
2472*4882a593Smuzhiyun 	t_u8 order : 1;
2473*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_FrameCtl_t;
2474*4882a593Smuzhiyun #endif
2475*4882a593Smuzhiyun 
2476*4882a593Smuzhiyun /** MrvlIETypes_MgmtFrameSet_t */
2477*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIETypes_MgmtFrameSet_t {
2478*4882a593Smuzhiyun 	/** Type */
2479*4882a593Smuzhiyun 	t_u16 type;
2480*4882a593Smuzhiyun 	/** Length */
2481*4882a593Smuzhiyun 	t_u16 len;
2482*4882a593Smuzhiyun 	/** Frame Control */
2483*4882a593Smuzhiyun 	IEEEtypes_FrameCtl_t frame_control;
2484*4882a593Smuzhiyun 	/* t_u8 frame_contents[]; */
2485*4882a593Smuzhiyun } MLAN_PACK_END MrvlIETypes_MgmtFrameSet_t;
2486*4882a593Smuzhiyun 
2487*4882a593Smuzhiyun /** Beacon */
2488*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_Beacon_t {
2489*4882a593Smuzhiyun 	/** time stamp */
2490*4882a593Smuzhiyun 	t_u8 time_stamp[8];
2491*4882a593Smuzhiyun 	/** beacon interval */
2492*4882a593Smuzhiyun 	t_u16 beacon_interval;
2493*4882a593Smuzhiyun 	/** cap info */
2494*4882a593Smuzhiyun 	t_u16 cap_info;
2495*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_Beacon_t;
2496*4882a593Smuzhiyun 
2497*4882a593Smuzhiyun /** Fixed size of station association event */
2498*4882a593Smuzhiyun #define ASSOC_EVENT_FIX_SIZE 12
2499*4882a593Smuzhiyun 
2500*4882a593Smuzhiyun /** MrvlIEtypes_channel_band_t */
2501*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_channel_band_t {
2502*4882a593Smuzhiyun 	/** Header */
2503*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
2504*4882a593Smuzhiyun 	/** Band Configuration */
2505*4882a593Smuzhiyun 	Band_Config_t bandcfg;
2506*4882a593Smuzhiyun 	/** channel */
2507*4882a593Smuzhiyun 	t_u8 channel;
2508*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_channel_band_t;
2509*4882a593Smuzhiyun 
2510*4882a593Smuzhiyun #ifdef UAP_SUPPORT
2511*4882a593Smuzhiyun /** IEEEtypes_AssocRqst_t */
2512*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_AssocRqst_t {
2513*4882a593Smuzhiyun 	/** Capability Info */
2514*4882a593Smuzhiyun 	t_u16 cap_info;
2515*4882a593Smuzhiyun 	/** Listen Interval */
2516*4882a593Smuzhiyun 	t_u16 listen_interval;
2517*4882a593Smuzhiyun 	/* t_u8 ie_buffer[]; */
2518*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_AssocRqst_t;
2519*4882a593Smuzhiyun 
2520*4882a593Smuzhiyun /** IEEEtypes_ReAssocRqst_t */
2521*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IEEEtypes_ReAssocRqst_t {
2522*4882a593Smuzhiyun 	/** Capability Info */
2523*4882a593Smuzhiyun 	t_u16 cap_info;
2524*4882a593Smuzhiyun 	/** Listen Interval */
2525*4882a593Smuzhiyun 	t_u16 listen_interval;
2526*4882a593Smuzhiyun 	/** Current AP Address */
2527*4882a593Smuzhiyun 	t_u8 current_ap_addr[MLAN_MAC_ADDR_LENGTH];
2528*4882a593Smuzhiyun 	/* t_u8 ie_buffer[]; */
2529*4882a593Smuzhiyun } MLAN_PACK_END IEEEtypes_ReAssocRqst_t;
2530*4882a593Smuzhiyun #endif /* UAP_SUPPORT */
2531*4882a593Smuzhiyun 
2532*4882a593Smuzhiyun /** wlan_802_11_header */
2533*4882a593Smuzhiyun typedef MLAN_PACK_START struct _wlan_802_11_header {
2534*4882a593Smuzhiyun 	/** Frame Control */
2535*4882a593Smuzhiyun 	t_u16 frm_ctl;
2536*4882a593Smuzhiyun 	/** Duration ID */
2537*4882a593Smuzhiyun 	t_u16 duration_id;
2538*4882a593Smuzhiyun 	/** Address1 */
2539*4882a593Smuzhiyun 	mlan_802_11_mac_addr addr1;
2540*4882a593Smuzhiyun 	/** Address2 */
2541*4882a593Smuzhiyun 	mlan_802_11_mac_addr addr2;
2542*4882a593Smuzhiyun 	/** Address3 */
2543*4882a593Smuzhiyun 	mlan_802_11_mac_addr addr3;
2544*4882a593Smuzhiyun 	/** Sequence Control */
2545*4882a593Smuzhiyun 	t_u16 seq_ctl;
2546*4882a593Smuzhiyun 	/** Address4 */
2547*4882a593Smuzhiyun 	mlan_802_11_mac_addr addr4;
2548*4882a593Smuzhiyun } MLAN_PACK_END wlan_802_11_header;
2549*4882a593Smuzhiyun 
2550*4882a593Smuzhiyun /** wlan_802_11_header packet from FW with length */
2551*4882a593Smuzhiyun typedef MLAN_PACK_START struct _wlan_mgmt_pkt {
2552*4882a593Smuzhiyun 	/** Packet Length */
2553*4882a593Smuzhiyun 	t_u16 frm_len;
2554*4882a593Smuzhiyun 	/** wlan_802_11_header */
2555*4882a593Smuzhiyun 	wlan_802_11_header wlan_header;
2556*4882a593Smuzhiyun } MLAN_PACK_END wlan_mgmt_pkt;
2557*4882a593Smuzhiyun 
2558*4882a593Smuzhiyun #ifdef STA_SUPPORT
2559*4882a593Smuzhiyun /** (Beaconsize(256)-5(IEId,len,contrystr(3))/3(FirstChan,NoOfChan,MaxPwr) */
2560*4882a593Smuzhiyun #define MAX_NO_OF_CHAN 40
2561*4882a593Smuzhiyun 
2562*4882a593Smuzhiyun /** Channel-power table entries */
2563*4882a593Smuzhiyun typedef MLAN_PACK_START struct _chan_power_11d {
2564*4882a593Smuzhiyun 	/** 11D channel */
2565*4882a593Smuzhiyun 	t_u8 chan;
2566*4882a593Smuzhiyun 	/** Band for channel */
2567*4882a593Smuzhiyun 	t_u16 band;
2568*4882a593Smuzhiyun 	/** 11D channel power */
2569*4882a593Smuzhiyun 	t_u8 pwr;
2570*4882a593Smuzhiyun 	/** AP seen on channel */
2571*4882a593Smuzhiyun 	t_u8 ap_seen;
2572*4882a593Smuzhiyun } MLAN_PACK_END chan_power_11d_t;
2573*4882a593Smuzhiyun 
2574*4882a593Smuzhiyun /** Region channel info */
2575*4882a593Smuzhiyun typedef MLAN_PACK_START struct _parsed_region_chan_11d {
2576*4882a593Smuzhiyun 	/** 11D channel power per channel */
2577*4882a593Smuzhiyun 	chan_power_11d_t chan_pwr[MAX_NO_OF_CHAN];
2578*4882a593Smuzhiyun 	/** 11D number of channels */
2579*4882a593Smuzhiyun 	t_u8 no_of_chan;
2580*4882a593Smuzhiyun } MLAN_PACK_END parsed_region_chan_11d_t;
2581*4882a593Smuzhiyun #endif /* STA_SUPPORT */
2582*4882a593Smuzhiyun 
2583*4882a593Smuzhiyun /** ChanScanMode_t */
2584*4882a593Smuzhiyun typedef MLAN_PACK_START struct _ChanScanMode_t {
2585*4882a593Smuzhiyun #ifdef BIG_ENDIAN_SUPPORT
2586*4882a593Smuzhiyun 	/** Reserved */
2587*4882a593Smuzhiyun 	t_u8 reserved_7 : 1;
2588*4882a593Smuzhiyun 	/** First passive scan then active scan */
2589*4882a593Smuzhiyun 	t_u8 passive_to_active_scan : 1;
2590*4882a593Smuzhiyun 	/** First channel in scan */
2591*4882a593Smuzhiyun 	t_u8 first_chan : 1;
2592*4882a593Smuzhiyun 	/** Enable hidden ssid report */
2593*4882a593Smuzhiyun 	t_u8 hidden_ssid_report : 1;
2594*4882a593Smuzhiyun 	/** Enable probe response timeout */
2595*4882a593Smuzhiyun 	t_u8 rsp_timeout_en : 1;
2596*4882a593Smuzhiyun 	/** Multidomain scan mode */
2597*4882a593Smuzhiyun 	t_u8 multidomain_scan : 1;
2598*4882a593Smuzhiyun 	/** Disble channel filtering flag */
2599*4882a593Smuzhiyun 	t_u8 disable_chan_filt : 1;
2600*4882a593Smuzhiyun 	/** Channel scan mode passive flag */
2601*4882a593Smuzhiyun 	t_u8 passive_scan : 1;
2602*4882a593Smuzhiyun #else
2603*4882a593Smuzhiyun 	/** Channel scan mode passive flag */
2604*4882a593Smuzhiyun 	t_u8 passive_scan : 1;
2605*4882a593Smuzhiyun 	/** Disble channel filtering flag */
2606*4882a593Smuzhiyun 	t_u8 disable_chan_filt : 1;
2607*4882a593Smuzhiyun 	/** Multidomain scan mode */
2608*4882a593Smuzhiyun 	t_u8 multidomain_scan : 1;
2609*4882a593Smuzhiyun 	/** Enable probe response timeout */
2610*4882a593Smuzhiyun 	t_u8 rsp_timeout_en : 1;
2611*4882a593Smuzhiyun 	/** Enable hidden ssid report */
2612*4882a593Smuzhiyun 	t_u8 hidden_ssid_report : 1;
2613*4882a593Smuzhiyun 	/** First channel in scan */
2614*4882a593Smuzhiyun 	t_u8 first_chan : 1;
2615*4882a593Smuzhiyun 	/** First passive scan then active scan */
2616*4882a593Smuzhiyun 	t_u8 passive_to_active_scan : 1;
2617*4882a593Smuzhiyun 	/** Reserved */
2618*4882a593Smuzhiyun 	t_u8 reserved_7 : 1;
2619*4882a593Smuzhiyun #endif
2620*4882a593Smuzhiyun } MLAN_PACK_END ChanScanMode_t;
2621*4882a593Smuzhiyun 
2622*4882a593Smuzhiyun /** ChanScanParamSet_t */
2623*4882a593Smuzhiyun typedef MLAN_PACK_START struct _ChanScanParamSet_t {
2624*4882a593Smuzhiyun 	/** Channel scan parameter : band config */
2625*4882a593Smuzhiyun 	Band_Config_t bandcfg;
2626*4882a593Smuzhiyun 	/** Channel scan parameter : Channel number */
2627*4882a593Smuzhiyun 	t_u8 chan_number;
2628*4882a593Smuzhiyun 	/** Channel scan parameter : Channel scan mode */
2629*4882a593Smuzhiyun 	ChanScanMode_t chan_scan_mode;
2630*4882a593Smuzhiyun 	/** Channel scan parameter : Minimum scan time */
2631*4882a593Smuzhiyun 	t_u16 min_scan_time;
2632*4882a593Smuzhiyun 	/** Channel scan parameter : Maximum scan time */
2633*4882a593Smuzhiyun 	t_u16 max_scan_time;
2634*4882a593Smuzhiyun } MLAN_PACK_END ChanScanParamSet_t;
2635*4882a593Smuzhiyun 
2636*4882a593Smuzhiyun /** MrvlIEtypes_ChanListParamSet_t */
2637*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_ChanListParamSet_t {
2638*4882a593Smuzhiyun 	/** Header */
2639*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
2640*4882a593Smuzhiyun 	/** Channel scan parameters */
2641*4882a593Smuzhiyun 	ChanScanParamSet_t chan_scan_param[1];
2642*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_ChanListParamSet_t;
2643*4882a593Smuzhiyun 
2644*4882a593Smuzhiyun /** MrvlIEtypes_EESParamSet_t */
2645*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_EESParamSet_t {
2646*4882a593Smuzhiyun 	/** Header */
2647*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
2648*4882a593Smuzhiyun 	/** EES scan mode */
2649*4882a593Smuzhiyun 	t_u16 ees_mode;
2650*4882a593Smuzhiyun 	/** EES report condition */
2651*4882a593Smuzhiyun 	t_u16 report_cond;
2652*4882a593Smuzhiyun 	/** EES High Period scan interval */
2653*4882a593Smuzhiyun 	t_u16 high_period;
2654*4882a593Smuzhiyun 	/** EES High Period scan count */
2655*4882a593Smuzhiyun 	t_u16 high_period_count;
2656*4882a593Smuzhiyun 	/** EES Medium Period scan interval */
2657*4882a593Smuzhiyun 	t_u16 mid_period;
2658*4882a593Smuzhiyun 	/** EES Medium Period scan count */
2659*4882a593Smuzhiyun 	t_u16 mid_period_count;
2660*4882a593Smuzhiyun 	/** EES Low Period scan interval */
2661*4882a593Smuzhiyun 	t_u16 low_period;
2662*4882a593Smuzhiyun 	/** EES Low Period scan count */
2663*4882a593Smuzhiyun 	t_u16 low_period_count;
2664*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_EESParamSet_t;
2665*4882a593Smuzhiyun 
2666*4882a593Smuzhiyun /** MrvlIEtype_EESNetworkCfg_t */
2667*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtype_EESNetworkCfg_t {
2668*4882a593Smuzhiyun 	/** Header */
2669*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
2670*4882a593Smuzhiyun 	/** Number of networks in the list */
2671*4882a593Smuzhiyun 	t_u8 network_count;
2672*4882a593Smuzhiyun 	/** Maximum number of connection */
2673*4882a593Smuzhiyun 	t_u8 max_conn_count;
2674*4882a593Smuzhiyun 	/** Black List Exp */
2675*4882a593Smuzhiyun 	t_u8 black_list_exp;
2676*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtype_EESNetworkCfg_t;
2677*4882a593Smuzhiyun 
2678*4882a593Smuzhiyun /** ChanBandParamSet_t */
2679*4882a593Smuzhiyun typedef struct _ChanBandParamSet_t {
2680*4882a593Smuzhiyun 	/** Channel scan parameter : band config */
2681*4882a593Smuzhiyun 	Band_Config_t bandcfg;
2682*4882a593Smuzhiyun 	/** Channel number */
2683*4882a593Smuzhiyun 	t_u8 chan_number;
2684*4882a593Smuzhiyun } ChanBandParamSet_t;
2685*4882a593Smuzhiyun 
2686*4882a593Smuzhiyun /** MrvlIEtypes_ChanBandListParamSet_t */
2687*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_ChanBandListParamSet_t {
2688*4882a593Smuzhiyun 	/** Header */
2689*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
2690*4882a593Smuzhiyun 	/** Channel Band parameters */
2691*4882a593Smuzhiyun 	ChanBandParamSet_t chan_band_param[1];
2692*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_ChanBandListParamSet_t;
2693*4882a593Smuzhiyun 
2694*4882a593Smuzhiyun /** MrvlIEtypes_RatesParamSet_t */
2695*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_RatesParamSet_t {
2696*4882a593Smuzhiyun 	/** Header */
2697*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
2698*4882a593Smuzhiyun 	/** Rates */
2699*4882a593Smuzhiyun 	t_u8 rates[1];
2700*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_RatesParamSet_t;
2701*4882a593Smuzhiyun 
2702*4882a593Smuzhiyun /** _MrvlIEtypes_Bssid_List_t */
2703*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_Bssid_List_t {
2704*4882a593Smuzhiyun 	/** Header */
2705*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
2706*4882a593Smuzhiyun 	/** BSSID */
2707*4882a593Smuzhiyun 	t_u8 bssid[MLAN_MAC_ADDR_LENGTH];
2708*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_Bssid_List_t;
2709*4882a593Smuzhiyun 
2710*4882a593Smuzhiyun /** MrvlIEtypes_SsIdParamSet_t */
2711*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_SsIdParamSet_t {
2712*4882a593Smuzhiyun 	/** Header */
2713*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
2714*4882a593Smuzhiyun 	/** SSID */
2715*4882a593Smuzhiyun 	t_u8 ssid[1];
2716*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_SsIdParamSet_t;
2717*4882a593Smuzhiyun 
2718*4882a593Smuzhiyun /**MrvlIEtypes_AssocType_t */
2719*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_HostMlme_t {
2720*4882a593Smuzhiyun 	/** Header */
2721*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
2722*4882a593Smuzhiyun 	/** Authentication type */
2723*4882a593Smuzhiyun 	t_u8 host_mlme;
2724*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_HostMlme_t;
2725*4882a593Smuzhiyun 
2726*4882a593Smuzhiyun /** MrvlIEtypes_NumProbes_t */
2727*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_NumProbes_t {
2728*4882a593Smuzhiyun 	/** Header */
2729*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
2730*4882a593Smuzhiyun 	/** Number of probes */
2731*4882a593Smuzhiyun 	t_u16 num_probes;
2732*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_NumProbes_t;
2733*4882a593Smuzhiyun 
2734*4882a593Smuzhiyun /** MrvlIEtypes_WildCardSsIdParamSet_t */
2735*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_WildCardSsIdParamSet_t {
2736*4882a593Smuzhiyun 	/** Header */
2737*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
2738*4882a593Smuzhiyun 	/** Maximum SSID length */
2739*4882a593Smuzhiyun 	t_u8 max_ssid_length;
2740*4882a593Smuzhiyun 	/** SSID */
2741*4882a593Smuzhiyun 	t_u8 ssid[1];
2742*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_WildCardSsIdParamSet_t;
2743*4882a593Smuzhiyun 
2744*4882a593Smuzhiyun /**TSF data size */
2745*4882a593Smuzhiyun #define TSF_DATA_SIZE 8
2746*4882a593Smuzhiyun /** Table of TSF values returned in the scan result */
2747*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_TsfTimestamp_t {
2748*4882a593Smuzhiyun 	/** Header */
2749*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
2750*4882a593Smuzhiyun 	/** the length of each TSF data is 8 bytes, could be multiple TSF here
2751*4882a593Smuzhiyun 	 */
2752*4882a593Smuzhiyun 	t_u8 tsf_data[1];
2753*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_TsfTimestamp_t;
2754*4882a593Smuzhiyun 
2755*4882a593Smuzhiyun /** CfParamSet_t */
2756*4882a593Smuzhiyun typedef MLAN_PACK_START struct _CfParamSet_t {
2757*4882a593Smuzhiyun 	/** CF parameter : Count */
2758*4882a593Smuzhiyun 	t_u8 cfp_cnt;
2759*4882a593Smuzhiyun 	/** CF parameter : Period */
2760*4882a593Smuzhiyun 	t_u8 cfp_period;
2761*4882a593Smuzhiyun 	/** CF parameter : Duration */
2762*4882a593Smuzhiyun 	t_u16 cfp_max_duration;
2763*4882a593Smuzhiyun 	/** CF parameter : Duration remaining */
2764*4882a593Smuzhiyun 	t_u16 cfp_duration_remaining;
2765*4882a593Smuzhiyun } MLAN_PACK_END CfParamSet_t;
2766*4882a593Smuzhiyun 
2767*4882a593Smuzhiyun /** IbssParamSet_t */
2768*4882a593Smuzhiyun typedef MLAN_PACK_START struct _IbssParamSet_t {
2769*4882a593Smuzhiyun 	/** ATIM window value */
2770*4882a593Smuzhiyun 	t_u16 atim_window;
2771*4882a593Smuzhiyun } MLAN_PACK_END IbssParamSet_t;
2772*4882a593Smuzhiyun 
2773*4882a593Smuzhiyun /** MrvlIEtypes_SsParamSet_t */
2774*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_SsParamSet_t {
2775*4882a593Smuzhiyun 	/** Header */
2776*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
2777*4882a593Smuzhiyun 	/** CF/IBSS parameters sets */
2778*4882a593Smuzhiyun 	union {
2779*4882a593Smuzhiyun 		/** CF parameter set */
2780*4882a593Smuzhiyun 		CfParamSet_t cf_param_set[1];
2781*4882a593Smuzhiyun 		/** IBSS parameter set */
2782*4882a593Smuzhiyun 		IbssParamSet_t ibss_param_set[1];
2783*4882a593Smuzhiyun 	} cf_ibss;
2784*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_SsParamSet_t;
2785*4882a593Smuzhiyun 
2786*4882a593Smuzhiyun /** FhParamSet_t */
2787*4882a593Smuzhiyun typedef MLAN_PACK_START struct _FhParamSet_t {
2788*4882a593Smuzhiyun 	/** FH parameter : Dwell time */
2789*4882a593Smuzhiyun 	t_u16 dwell_time;
2790*4882a593Smuzhiyun 	/** FH parameter : Hop set */
2791*4882a593Smuzhiyun 	t_u8 hop_set;
2792*4882a593Smuzhiyun 	/** FH parameter : Hop pattern */
2793*4882a593Smuzhiyun 	t_u8 hop_pattern;
2794*4882a593Smuzhiyun 	/** FH parameter : Hop index */
2795*4882a593Smuzhiyun 	t_u8 hop_index;
2796*4882a593Smuzhiyun } MLAN_PACK_END FhParamSet_t;
2797*4882a593Smuzhiyun 
2798*4882a593Smuzhiyun /** DsParamSet_t */
2799*4882a593Smuzhiyun typedef MLAN_PACK_START struct _DsParamSet_t {
2800*4882a593Smuzhiyun 	/** Current channel number */
2801*4882a593Smuzhiyun 	t_u8 current_chan;
2802*4882a593Smuzhiyun } MLAN_PACK_END DsParamSet_t;
2803*4882a593Smuzhiyun 
2804*4882a593Smuzhiyun /** MrvlIEtypes_PhyParamSet_t */
2805*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_PhyParamSet_t {
2806*4882a593Smuzhiyun 	/** Header */
2807*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
2808*4882a593Smuzhiyun 	/** FH/DS parameters */
2809*4882a593Smuzhiyun 	union {
2810*4882a593Smuzhiyun 		/** FH parameter set */
2811*4882a593Smuzhiyun 		FhParamSet_t fh_param_set[1];
2812*4882a593Smuzhiyun 		/** DS parameter set */
2813*4882a593Smuzhiyun 		DsParamSet_t ds_param_set[1];
2814*4882a593Smuzhiyun 	} fh_ds;
2815*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_PhyParamSet_t;
2816*4882a593Smuzhiyun 
2817*4882a593Smuzhiyun /* Auth type to be used in the Authentication portion of an Assoc seq */
2818*4882a593Smuzhiyun /** MrvlIEtypes_AuthType_t */
2819*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_AuthType_t {
2820*4882a593Smuzhiyun 	/** Header */
2821*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
2822*4882a593Smuzhiyun 	/** Authentication type */
2823*4882a593Smuzhiyun 	t_u16 auth_type;
2824*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_AuthType_t;
2825*4882a593Smuzhiyun 
2826*4882a593Smuzhiyun /** MrvlIEtypes_ScanChanGap_t */
2827*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_ScanChanGap_t {
2828*4882a593Smuzhiyun 	/** Header */
2829*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
2830*4882a593Smuzhiyun 	/** Time gap in units to TUs to be used between
2831*4882a593Smuzhiyun 	 * two consecutive channels scan */
2832*4882a593Smuzhiyun 	t_u16 gap;
2833*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_ScanChanGap_t;
2834*4882a593Smuzhiyun 
2835*4882a593Smuzhiyun /** channel statictics */
2836*4882a593Smuzhiyun typedef MLAN_PACK_START struct _chan_statistics_t {
2837*4882a593Smuzhiyun 	/** channle number */
2838*4882a593Smuzhiyun 	t_u8 chan_num;
2839*4882a593Smuzhiyun 	/** band info */
2840*4882a593Smuzhiyun 	Band_Config_t bandcfg;
2841*4882a593Smuzhiyun 	/** flags */
2842*4882a593Smuzhiyun 	t_u8 flags;
2843*4882a593Smuzhiyun 	/** noise */
2844*4882a593Smuzhiyun 	t_s8 noise;
2845*4882a593Smuzhiyun 	/** total network */
2846*4882a593Smuzhiyun 	t_u16 total_networks;
2847*4882a593Smuzhiyun 	/** scan duration */
2848*4882a593Smuzhiyun 	t_u16 cca_scan_duration;
2849*4882a593Smuzhiyun 	/** busy duration */
2850*4882a593Smuzhiyun 	t_u16 cca_busy_duration;
2851*4882a593Smuzhiyun } MLAN_PACK_END chan_statistics_t;
2852*4882a593Smuzhiyun 
2853*4882a593Smuzhiyun /** channel statictics tlv */
2854*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_ChannelStats_t {
2855*4882a593Smuzhiyun 	/** Header */
2856*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
2857*4882a593Smuzhiyun 	/** channel statictics */
2858*4882a593Smuzhiyun 	chan_statistics_t chanStat[];
2859*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_ChannelStats_t;
2860*4882a593Smuzhiyun 
2861*4882a593Smuzhiyun /** MrvlIETypes_ActionFrame_t */
2862*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
2863*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header; /**< Header */
2864*4882a593Smuzhiyun 
2865*4882a593Smuzhiyun 	t_u8 srcAddr[MLAN_MAC_ADDR_LENGTH];
2866*4882a593Smuzhiyun 	t_u8 dstAddr[MLAN_MAC_ADDR_LENGTH];
2867*4882a593Smuzhiyun 
2868*4882a593Smuzhiyun 	IEEEtypes_ActionFrame_t actionFrame;
2869*4882a593Smuzhiyun 
2870*4882a593Smuzhiyun } MLAN_PACK_END MrvlIETypes_ActionFrame_t;
2871*4882a593Smuzhiyun 
2872*4882a593Smuzhiyun /** MrvlIEtypes_RxBaSync_t */
2873*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_RxBaSync_t {
2874*4882a593Smuzhiyun 	/** Header */
2875*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
2876*4882a593Smuzhiyun 	/** mac address */
2877*4882a593Smuzhiyun 	t_u8 mac[MLAN_MAC_ADDR_LENGTH];
2878*4882a593Smuzhiyun 	/** tid */
2879*4882a593Smuzhiyun 	t_u8 tid;
2880*4882a593Smuzhiyun 	/** reserved field */
2881*4882a593Smuzhiyun 	t_u8 reserved;
2882*4882a593Smuzhiyun 	/** start seq num */
2883*4882a593Smuzhiyun 	t_u16 seq_num;
2884*4882a593Smuzhiyun 	/** bitmap len */
2885*4882a593Smuzhiyun 	t_u16 bitmap_len;
2886*4882a593Smuzhiyun 	/** bitmap */
2887*4882a593Smuzhiyun 	t_u8 bitmap[1];
2888*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_RxBaSync_t;
2889*4882a593Smuzhiyun 
2890*4882a593Smuzhiyun /** MrvlIEtypes_RsnParamSet_t */
2891*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_RsnParamSet_t {
2892*4882a593Smuzhiyun 	/** Header */
2893*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
2894*4882a593Smuzhiyun 	/** RSN IE */
2895*4882a593Smuzhiyun 	t_u8 rsn_ie[];
2896*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_RsnParamSet_t;
2897*4882a593Smuzhiyun 
2898*4882a593Smuzhiyun /** MrvlIEtypes_SecurityCfg_t */
2899*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_SecurityCfg_t {
2900*4882a593Smuzhiyun 	/** Header */
2901*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
2902*4882a593Smuzhiyun 	/** enable 11w */
2903*4882a593Smuzhiyun 	t_u8 use_mfp;
2904*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_SecurityCfg_t;
2905*4882a593Smuzhiyun 
2906*4882a593Smuzhiyun /** Host Command ID : _HostCmd_DS_BEACON_STUCK_CFG */
2907*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_BEACON_STUCK_CFG {
2908*4882a593Smuzhiyun 	/** ACT_GET/ACT_SET */
2909*4882a593Smuzhiyun 	t_u8 action;
2910*4882a593Smuzhiyun 	/** No of beacon interval after which firmware will check if beacon Tx
2911*4882a593Smuzhiyun 	 * is going fine */
2912*4882a593Smuzhiyun 	t_u8 beacon_stuck_detect_count;
2913*4882a593Smuzhiyun 	/** Upon performing MAC reset, no of beacon interval after which
2914*4882a593Smuzhiyun 	 * firmware will check if recovery was successful */
2915*4882a593Smuzhiyun 	t_u8 recovery_confirm_count;
2916*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_BEACON_STUCK_CFG;
2917*4882a593Smuzhiyun 
2918*4882a593Smuzhiyun /** Key Info flag for multicast key */
2919*4882a593Smuzhiyun #define KEY_INFO_MCAST_KEY 0x01
2920*4882a593Smuzhiyun /** Key Info flag for unicast key */
2921*4882a593Smuzhiyun #define KEY_INFO_UCAST_KEY 0x02
2922*4882a593Smuzhiyun /** Key Info flag for enable key */
2923*4882a593Smuzhiyun #define KEY_INFO_ENABLE_KEY 0x04
2924*4882a593Smuzhiyun /** Key Info flag for default key */
2925*4882a593Smuzhiyun #define KEY_INFO_DEFAULT_KEY 0x08
2926*4882a593Smuzhiyun /** Key Info flag for TX key */
2927*4882a593Smuzhiyun #define KEY_INFO_TX_KEY 0x10
2928*4882a593Smuzhiyun /** Key Info flag for RX key */
2929*4882a593Smuzhiyun #define KEY_INFO_RX_KEY 0x20
2930*4882a593Smuzhiyun #define KEY_INFO_CMAC_AES_KEY 0x400
2931*4882a593Smuzhiyun /** PN size for WPA/WPA2 */
2932*4882a593Smuzhiyun #define WPA_PN_SIZE 8
2933*4882a593Smuzhiyun /** PN size for PMF IGTK */
2934*4882a593Smuzhiyun #define IGTK_PN_SIZE 8
2935*4882a593Smuzhiyun /** WAPI KEY size */
2936*4882a593Smuzhiyun #define WAPI_KEY_SIZE 32
2937*4882a593Smuzhiyun /** key params fix size */
2938*4882a593Smuzhiyun #define KEY_PARAMS_FIXED_LEN 10
2939*4882a593Smuzhiyun /** key index mask */
2940*4882a593Smuzhiyun #define KEY_INDEX_MASK 0xf
2941*4882a593Smuzhiyun 
2942*4882a593Smuzhiyun /** wep_param */
2943*4882a593Smuzhiyun typedef MLAN_PACK_START struct _wep_param_t {
2944*4882a593Smuzhiyun 	/** key_len */
2945*4882a593Smuzhiyun 	t_u16 key_len;
2946*4882a593Smuzhiyun 	/** wep key */
2947*4882a593Smuzhiyun 	t_u8 key[MAX_WEP_KEY_SIZE];
2948*4882a593Smuzhiyun } MLAN_PACK_END wep_param_t;
2949*4882a593Smuzhiyun 
2950*4882a593Smuzhiyun /** tkip_param */
2951*4882a593Smuzhiyun typedef MLAN_PACK_START struct _tkip_param {
2952*4882a593Smuzhiyun 	/** Rx packet num */
2953*4882a593Smuzhiyun 	t_u8 pn[WPA_PN_SIZE];
2954*4882a593Smuzhiyun 	/** key_len */
2955*4882a593Smuzhiyun 	t_u16 key_len;
2956*4882a593Smuzhiyun 	/** tkip key */
2957*4882a593Smuzhiyun 	t_u8 key[WPA_TKIP_KEY_LEN];
2958*4882a593Smuzhiyun } MLAN_PACK_END tkip_param;
2959*4882a593Smuzhiyun 
2960*4882a593Smuzhiyun /** aes_param */
2961*4882a593Smuzhiyun typedef MLAN_PACK_START struct _aes_param {
2962*4882a593Smuzhiyun 	/** Rx packet num */
2963*4882a593Smuzhiyun 	t_u8 pn[WPA_PN_SIZE];
2964*4882a593Smuzhiyun 	/** key_len */
2965*4882a593Smuzhiyun 	t_u16 key_len;
2966*4882a593Smuzhiyun 	/** aes key */
2967*4882a593Smuzhiyun 	t_u8 key[WPA_AES_KEY_LEN];
2968*4882a593Smuzhiyun } MLAN_PACK_END aes_param;
2969*4882a593Smuzhiyun 
2970*4882a593Smuzhiyun /** wapi_param */
2971*4882a593Smuzhiyun typedef MLAN_PACK_START struct _wapi_param {
2972*4882a593Smuzhiyun 	/** Rx packet num */
2973*4882a593Smuzhiyun 	t_u8 pn[PN_SIZE];
2974*4882a593Smuzhiyun 	/** key_len */
2975*4882a593Smuzhiyun 	t_u16 key_len;
2976*4882a593Smuzhiyun 	/** wapi key */
2977*4882a593Smuzhiyun 	t_u8 key[WAPI_KEY_SIZE];
2978*4882a593Smuzhiyun } MLAN_PACK_END wapi_param;
2979*4882a593Smuzhiyun 
2980*4882a593Smuzhiyun /** cmac_aes_param */
2981*4882a593Smuzhiyun typedef MLAN_PACK_START struct _cmac_aes_param {
2982*4882a593Smuzhiyun 	/** IGTK pn */
2983*4882a593Smuzhiyun 	t_u8 ipn[IGTK_PN_SIZE];
2984*4882a593Smuzhiyun 	/** key_len */
2985*4882a593Smuzhiyun 	t_u16 key_len;
2986*4882a593Smuzhiyun 	/** aes key */
2987*4882a593Smuzhiyun 	t_u8 key[CMAC_AES_KEY_LEN];
2988*4882a593Smuzhiyun } MLAN_PACK_END cmac_aes_param;
2989*4882a593Smuzhiyun 
2990*4882a593Smuzhiyun /** gmac_aes_256_param */
2991*4882a593Smuzhiyun typedef MLAN_PACK_START struct _gmac_aes_256_param {
2992*4882a593Smuzhiyun 	/** IGTK pn */
2993*4882a593Smuzhiyun 	t_u8 ipn[IGTK_PN_SIZE];
2994*4882a593Smuzhiyun 	/** key_len */
2995*4882a593Smuzhiyun 	t_u16 key_len;
2996*4882a593Smuzhiyun 	/** aes key */
2997*4882a593Smuzhiyun 	t_u8 key[WPA_IGTK_256_KEY_LEN];
2998*4882a593Smuzhiyun } MLAN_PACK_END gmac_aes_256_param;
2999*4882a593Smuzhiyun 
3000*4882a593Smuzhiyun /** gmac_param */
3001*4882a593Smuzhiyun typedef MLAN_PACK_START struct _gcmp_param {
3002*4882a593Smuzhiyun 	/** GCMP pn */
3003*4882a593Smuzhiyun 	t_u8 pn[WPA_PN_SIZE];
3004*4882a593Smuzhiyun 	/** key_len */
3005*4882a593Smuzhiyun 	t_u16 key_len;
3006*4882a593Smuzhiyun 	/** aes key */
3007*4882a593Smuzhiyun 	t_u8 key[WPA_GCMP_KEY_LEN];
3008*4882a593Smuzhiyun } MLAN_PACK_END gcmp_param;
3009*4882a593Smuzhiyun 
3010*4882a593Smuzhiyun /** ccmp256_param */
3011*4882a593Smuzhiyun typedef MLAN_PACK_START struct _ccmp256_param {
3012*4882a593Smuzhiyun 	/** CCMP pn */
3013*4882a593Smuzhiyun 	t_u8 pn[WPA_PN_SIZE];
3014*4882a593Smuzhiyun 	/** key_len */
3015*4882a593Smuzhiyun 	t_u16 key_len;
3016*4882a593Smuzhiyun 	/** ccmp256 key */
3017*4882a593Smuzhiyun 	t_u8 key[WPA_CCMP_256_KEY_LEN];
3018*4882a593Smuzhiyun } MLAN_PACK_END ccmp_256_param;
3019*4882a593Smuzhiyun 
3020*4882a593Smuzhiyun /** MrvlIEtype_KeyParamSet_t */
3021*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtype_KeyParamSetV2_t {
3022*4882a593Smuzhiyun 	/** Type ID */
3023*4882a593Smuzhiyun 	t_u16 type;
3024*4882a593Smuzhiyun 	/** Length of Payload */
3025*4882a593Smuzhiyun 	t_u16 length;
3026*4882a593Smuzhiyun 	/** mac address */
3027*4882a593Smuzhiyun 	t_u8 mac_addr[MLAN_MAC_ADDR_LENGTH];
3028*4882a593Smuzhiyun 	/** key index */
3029*4882a593Smuzhiyun 	t_u8 key_idx;
3030*4882a593Smuzhiyun 	/** Type of Key: WEP=0, TKIP=1, AES=2, WAPI=3 AES_CMAC=4 */
3031*4882a593Smuzhiyun 	t_u8 key_type;
3032*4882a593Smuzhiyun 	/** Key Control Info specific to a key_type_id */
3033*4882a593Smuzhiyun 	t_u16 key_info;
3034*4882a593Smuzhiyun 	union {
3035*4882a593Smuzhiyun 		/** wep key param */
3036*4882a593Smuzhiyun 		wep_param_t wep;
3037*4882a593Smuzhiyun 		/** tkip key param */
3038*4882a593Smuzhiyun 		tkip_param tkip;
3039*4882a593Smuzhiyun 		/** aes key param */
3040*4882a593Smuzhiyun 		aes_param aes;
3041*4882a593Smuzhiyun 		/** wapi key param */
3042*4882a593Smuzhiyun 		wapi_param wapi;
3043*4882a593Smuzhiyun 		/** IGTK key param */
3044*4882a593Smuzhiyun 		cmac_aes_param cmac_aes;
3045*4882a593Smuzhiyun 		/** gcmp key param */
3046*4882a593Smuzhiyun 		gcmp_param gcmp;
3047*4882a593Smuzhiyun 		/** ccmp 256 key parameters */
3048*4882a593Smuzhiyun 		ccmp_256_param ccmp256;
3049*4882a593Smuzhiyun 	} key_params;
3050*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtype_KeyParamSetV2_t;
3051*4882a593Smuzhiyun 
3052*4882a593Smuzhiyun /** HostCmd_DS_802_11_KEY_MATERIAL */
3053*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_KEY_MATERIAL {
3054*4882a593Smuzhiyun 	/** Action */
3055*4882a593Smuzhiyun 	t_u16 action;
3056*4882a593Smuzhiyun 	/** Key parameter set */
3057*4882a593Smuzhiyun 	MrvlIEtype_KeyParamSetV2_t key_param_set;
3058*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_KEY_MATERIAL;
3059*4882a593Smuzhiyun 
3060*4882a593Smuzhiyun /** HostCmd_DS_GTK_REKEY_PARAMS */
3061*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_GTK_REKEY_PARAMS {
3062*4882a593Smuzhiyun 	/** Action */
3063*4882a593Smuzhiyun 	t_u16 action;
3064*4882a593Smuzhiyun 	/** Key confirmation key */
3065*4882a593Smuzhiyun 	t_u8 kck[MLAN_KCK_LEN];
3066*4882a593Smuzhiyun 	/** Key encryption key */
3067*4882a593Smuzhiyun 	t_u8 kek[MLAN_KEK_LEN];
3068*4882a593Smuzhiyun 	/** Replay counter low 32 bit */
3069*4882a593Smuzhiyun 	t_u32 replay_ctr_low;
3070*4882a593Smuzhiyun 	/** Replay counter high 32 bit */
3071*4882a593Smuzhiyun 	t_u32 replay_ctr_high;
3072*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_GTK_REKEY_PARAMS;
3073*4882a593Smuzhiyun 
3074*4882a593Smuzhiyun /** Data structure of WMM QoS information */
3075*4882a593Smuzhiyun typedef MLAN_PACK_START struct _WmmQosInfo_t {
3076*4882a593Smuzhiyun #ifdef BIG_ENDIAN_SUPPORT
3077*4882a593Smuzhiyun 	/** QoS UAPSD */
3078*4882a593Smuzhiyun 	t_u8 qos_uapsd : 1;
3079*4882a593Smuzhiyun 	/** Reserved */
3080*4882a593Smuzhiyun 	t_u8 reserved : 3;
3081*4882a593Smuzhiyun 	/** Parameter set count */
3082*4882a593Smuzhiyun 	t_u8 para_set_count : 4;
3083*4882a593Smuzhiyun #else
3084*4882a593Smuzhiyun 	/** Parameter set count */
3085*4882a593Smuzhiyun 	t_u8 para_set_count : 4;
3086*4882a593Smuzhiyun 	/** Reserved */
3087*4882a593Smuzhiyun 	t_u8 reserved : 3;
3088*4882a593Smuzhiyun 	/** QoS UAPSD */
3089*4882a593Smuzhiyun 	t_u8 qos_uapsd : 1;
3090*4882a593Smuzhiyun #endif /* BIG_ENDIAN_SUPPORT */
3091*4882a593Smuzhiyun } MLAN_PACK_END WmmQosInfo_t, *pWmmQosInfo_t;
3092*4882a593Smuzhiyun 
3093*4882a593Smuzhiyun /** Data structure of WMM ECW */
3094*4882a593Smuzhiyun typedef MLAN_PACK_START struct _WmmEcw_t {
3095*4882a593Smuzhiyun #ifdef BIG_ENDIAN_SUPPORT
3096*4882a593Smuzhiyun 	/** Maximum Ecw */
3097*4882a593Smuzhiyun 	t_u8 ecw_max : 4;
3098*4882a593Smuzhiyun 	/** Minimum Ecw */
3099*4882a593Smuzhiyun 	t_u8 ecw_min : 4;
3100*4882a593Smuzhiyun #else
3101*4882a593Smuzhiyun 	/** Minimum Ecw */
3102*4882a593Smuzhiyun 	t_u8 ecw_min : 4;
3103*4882a593Smuzhiyun 	/** Maximum Ecw */
3104*4882a593Smuzhiyun 	t_u8 ecw_max : 4;
3105*4882a593Smuzhiyun #endif /* BIG_ENDIAN_SUPPORT */
3106*4882a593Smuzhiyun } MLAN_PACK_END WmmEcw_t, *pWmmEcw_t;
3107*4882a593Smuzhiyun 
3108*4882a593Smuzhiyun /** Data structure of WMM Aci/Aifsn */
3109*4882a593Smuzhiyun typedef MLAN_PACK_START struct _WmmAciAifsn_t {
3110*4882a593Smuzhiyun #ifdef BIG_ENDIAN_SUPPORT
3111*4882a593Smuzhiyun 	/** Reserved */
3112*4882a593Smuzhiyun 	t_u8 reserved : 1;
3113*4882a593Smuzhiyun 	/** Aci */
3114*4882a593Smuzhiyun 	t_u8 aci : 2;
3115*4882a593Smuzhiyun 	/** Acm */
3116*4882a593Smuzhiyun 	t_u8 acm : 1;
3117*4882a593Smuzhiyun 	/** Aifsn */
3118*4882a593Smuzhiyun 	t_u8 aifsn : 4;
3119*4882a593Smuzhiyun #else
3120*4882a593Smuzhiyun 	/** Aifsn */
3121*4882a593Smuzhiyun 	t_u8 aifsn : 4;
3122*4882a593Smuzhiyun 	/** Acm */
3123*4882a593Smuzhiyun 	t_u8 acm : 1;
3124*4882a593Smuzhiyun 	/** Aci */
3125*4882a593Smuzhiyun 	t_u8 aci : 2;
3126*4882a593Smuzhiyun 	/** Reserved */
3127*4882a593Smuzhiyun 	t_u8 reserved : 1;
3128*4882a593Smuzhiyun #endif /* BIG_ENDIAN_SUPPORT */
3129*4882a593Smuzhiyun } MLAN_PACK_END WmmAciAifsn_t, *pWmmAciAifsn_t;
3130*4882a593Smuzhiyun 
3131*4882a593Smuzhiyun /** Data structure of WMM AC parameters  */
3132*4882a593Smuzhiyun typedef MLAN_PACK_START struct _WmmAcParameters_t {
3133*4882a593Smuzhiyun 	WmmAciAifsn_t aci_aifsn; /**< AciAifSn */
3134*4882a593Smuzhiyun 	WmmEcw_t ecw; /**< Ecw */
3135*4882a593Smuzhiyun 	t_u16 tx_op_limit; /**< Tx op limit */
3136*4882a593Smuzhiyun } MLAN_PACK_END WmmAcParameters_t, *pWmmAcParameters_t;
3137*4882a593Smuzhiyun 
3138*4882a593Smuzhiyun /** Data structure of WMM parameter  */
3139*4882a593Smuzhiyun typedef MLAN_PACK_START struct _WmmParameter_t {
3140*4882a593Smuzhiyun 	/** OuiType:  00:50:f2:02 */
3141*4882a593Smuzhiyun 	t_u8 ouitype[4];
3142*4882a593Smuzhiyun 	/** Oui subtype: 01 */
3143*4882a593Smuzhiyun 	t_u8 ouisubtype;
3144*4882a593Smuzhiyun 	/** version: 01 */
3145*4882a593Smuzhiyun 	t_u8 version;
3146*4882a593Smuzhiyun 	/** QoS information */
3147*4882a593Smuzhiyun 	t_u8 qos_info;
3148*4882a593Smuzhiyun 	/** Reserved */
3149*4882a593Smuzhiyun 	t_u8 reserved;
3150*4882a593Smuzhiyun 	/** AC Parameters Record WMM_AC_BE, WMM_AC_BK, WMM_AC_VI, WMM_AC_VO */
3151*4882a593Smuzhiyun 	WmmAcParameters_t ac_params[MAX_AC_QUEUES];
3152*4882a593Smuzhiyun } MLAN_PACK_END WmmParameter_t, *pWmmParameter_t;
3153*4882a593Smuzhiyun 
3154*4882a593Smuzhiyun /** Data structure of Host command WMM_PARAM_CFG  */
3155*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_WMM_PARAM_CONFIG {
3156*4882a593Smuzhiyun 	/** action */
3157*4882a593Smuzhiyun 	t_u16 action;
3158*4882a593Smuzhiyun 	/** AC Parameters Record WMM_AC_BE, WMM_AC_BK, WMM_AC_VI, WMM_AC_VO */
3159*4882a593Smuzhiyun 	WmmAcParameters_t ac_params[MAX_AC_QUEUES];
3160*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_WMM_PARAM_CONFIG;
3161*4882a593Smuzhiyun 
3162*4882a593Smuzhiyun /* Definition of firmware host command */
3163*4882a593Smuzhiyun /** HostCmd_DS_GEN */
3164*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_GEN {
3165*4882a593Smuzhiyun 	/** Command */
3166*4882a593Smuzhiyun 	t_u16 command;
3167*4882a593Smuzhiyun 	/** Size */
3168*4882a593Smuzhiyun 	t_u16 size;
3169*4882a593Smuzhiyun 	/** Sequence number */
3170*4882a593Smuzhiyun 	t_u16 seq_num;
3171*4882a593Smuzhiyun 	/** Result */
3172*4882a593Smuzhiyun 	t_u16 result;
3173*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_GEN
3174*4882a593Smuzhiyun 
3175*4882a593Smuzhiyun 	;
3176*4882a593Smuzhiyun 
3177*4882a593Smuzhiyun /** Size of HostCmd_DS_GEN */
3178*4882a593Smuzhiyun #define S_DS_GEN sizeof(HostCmd_DS_GEN)
3179*4882a593Smuzhiyun 
3180*4882a593Smuzhiyun /** mod_group_setting */
3181*4882a593Smuzhiyun typedef MLAN_PACK_START struct _mod_group_setting {
3182*4882a593Smuzhiyun 	/** modulation group */
3183*4882a593Smuzhiyun 	t_u8 mod_group;
3184*4882a593Smuzhiyun 	/** power */
3185*4882a593Smuzhiyun 	t_u8 power;
3186*4882a593Smuzhiyun } MLAN_PACK_END mod_group_setting;
3187*4882a593Smuzhiyun 
3188*4882a593Smuzhiyun /** MrvlIETypes_ChanTRPCConfig_t */
3189*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIETypes_ChanTRPCConfig_t {
3190*4882a593Smuzhiyun 	/** Header */
3191*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
3192*4882a593Smuzhiyun 	/** start freq */
3193*4882a593Smuzhiyun 	t_u16 start_freq;
3194*4882a593Smuzhiyun 	/* channel width */
3195*4882a593Smuzhiyun 	t_u8 width;
3196*4882a593Smuzhiyun 	/** channel number */
3197*4882a593Smuzhiyun 	t_u8 chan_num;
3198*4882a593Smuzhiyun 	/** mode groups */
3199*4882a593Smuzhiyun 	mod_group_setting mod_group[1];
3200*4882a593Smuzhiyun } MLAN_PACK_END MrvlIETypes_ChanTRPCConfig_t;
3201*4882a593Smuzhiyun 
3202*4882a593Smuzhiyun /* HostCmd_DS_CHANNEL_TRPC_CONFIG */
3203*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_CHANNEL_TRPC_CONFIG {
3204*4882a593Smuzhiyun 	/** action */
3205*4882a593Smuzhiyun 	t_u16 action;
3206*4882a593Smuzhiyun 	/** 0/1/2/3 */
3207*4882a593Smuzhiyun 	t_u16 sub_band;
3208*4882a593Smuzhiyun 	/** chan TRPC config */
3209*4882a593Smuzhiyun 	// MrvlIETypes_ChanTRPCConfig_t tlv[];
3210*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_CHANNEL_TRPC_CONFIG;
3211*4882a593Smuzhiyun 
3212*4882a593Smuzhiyun /** Address type: broadcast */
3213*4882a593Smuzhiyun #define ADDR_TYPE_BROADCAST 1
3214*4882a593Smuzhiyun /* Address type: unicast */
3215*4882a593Smuzhiyun #define ADDR_TYPE_UNICAST 2
3216*4882a593Smuzhiyun /* Address type: multicast */
3217*4882a593Smuzhiyun #define ADDR_TYPE_MULTICAST 3
3218*4882a593Smuzhiyun 
3219*4882a593Smuzhiyun /** Ether type: any */
3220*4882a593Smuzhiyun #define ETHER_TYPE_ANY 0xffff
3221*4882a593Smuzhiyun /** Ether type: ARP */
3222*4882a593Smuzhiyun #define ETHER_TYPE_ARP 0x0608
3223*4882a593Smuzhiyun 
3224*4882a593Smuzhiyun /** IPv4 address any */
3225*4882a593Smuzhiyun #define IPV4_ADDR_ANY 0xffffffff
3226*4882a593Smuzhiyun 
3227*4882a593Smuzhiyun /** Header structure for ARP filter */
3228*4882a593Smuzhiyun typedef MLAN_PACK_START struct _arpfilter_header {
3229*4882a593Smuzhiyun 	/** Type */
3230*4882a593Smuzhiyun 	t_u16 type;
3231*4882a593Smuzhiyun 	/** TLV length */
3232*4882a593Smuzhiyun 	t_u16 len;
3233*4882a593Smuzhiyun } MLAN_PACK_END arpfilter_header;
3234*4882a593Smuzhiyun 
3235*4882a593Smuzhiyun /** Filter entry structure */
3236*4882a593Smuzhiyun typedef MLAN_PACK_START struct _filter_entry {
3237*4882a593Smuzhiyun 	/** Address type */
3238*4882a593Smuzhiyun 	t_u16 addr_type;
3239*4882a593Smuzhiyun 	/** Ether type */
3240*4882a593Smuzhiyun 	t_u16 eth_type;
3241*4882a593Smuzhiyun 	/** IPv4 address */
3242*4882a593Smuzhiyun 	t_u32 ipv4_addr;
3243*4882a593Smuzhiyun } MLAN_PACK_END filter_entry;
3244*4882a593Smuzhiyun 
3245*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_MEF_CFG {
3246*4882a593Smuzhiyun 	/** Criteria */
3247*4882a593Smuzhiyun 	t_u32 criteria;
3248*4882a593Smuzhiyun 	/** Number of entries */
3249*4882a593Smuzhiyun 	t_u16 nentries;
3250*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_MEF_CFG;
3251*4882a593Smuzhiyun 
3252*4882a593Smuzhiyun #define MAX_NUM_STACK_BYTES 100
3253*4882a593Smuzhiyun /** mef stack struct*/
3254*4882a593Smuzhiyun typedef MLAN_PACK_START struct _mef_stack {
3255*4882a593Smuzhiyun 	/** length of byte*/
3256*4882a593Smuzhiyun 	t_u16 sp;
3257*4882a593Smuzhiyun 	/** data of filter items*/
3258*4882a593Smuzhiyun 	t_u8 byte[MAX_NUM_STACK_BYTES];
3259*4882a593Smuzhiyun } MLAN_PACK_END mef_stack;
3260*4882a593Smuzhiyun 
3261*4882a593Smuzhiyun /** mef entry struct */
3262*4882a593Smuzhiyun typedef MLAN_PACK_START struct _mef_entry_header {
3263*4882a593Smuzhiyun 	/**mode:1->hostsleep;2->non hostsleep mode*/
3264*4882a593Smuzhiyun 	t_u8 mode;
3265*4882a593Smuzhiyun 	/**action=0->discard and not wake host
3266*4882a593Smuzhiyun 	 * action=1->discard and wake host
3267*4882a593Smuzhiyun 	 * action=3->allow and wake host*/
3268*4882a593Smuzhiyun 	t_u8 action;
3269*4882a593Smuzhiyun } MLAN_PACK_END mef_entry_header;
3270*4882a593Smuzhiyun 
3271*4882a593Smuzhiyun /** mef op struct is to help to generate mef data*/
3272*4882a593Smuzhiyun typedef MLAN_PACK_START struct _mef_op {
3273*4882a593Smuzhiyun 	/** operand_type*/
3274*4882a593Smuzhiyun 	t_u8 operand_type;
3275*4882a593Smuzhiyun 	/** reserved*/
3276*4882a593Smuzhiyun 	t_u8 rsvd[3];
3277*4882a593Smuzhiyun 	/** data */
3278*4882a593Smuzhiyun 	t_u8 val[MAX_NUM_BYTE_SEQ + 1];
3279*4882a593Smuzhiyun } MLAN_PACK_END mef_op;
3280*4882a593Smuzhiyun 
3281*4882a593Smuzhiyun /** Structure definition for low power mode cfg command */
3282*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_LOW_POWER_MODE_CFG {
3283*4882a593Smuzhiyun 	/** Action */
3284*4882a593Smuzhiyun 	t_u16 action;
3285*4882a593Smuzhiyun 	/** Low power mode */
3286*4882a593Smuzhiyun 	t_u16 lpm;
3287*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_LOW_POWER_MODE_CFG;
3288*4882a593Smuzhiyun 
3289*4882a593Smuzhiyun /* HostCmd_DS_802_11_SLEEP_PERIOD */
3290*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_SLEEP_PERIOD {
3291*4882a593Smuzhiyun 	/** ACT_GET/ACT_SET */
3292*4882a593Smuzhiyun 	t_u16 action;
3293*4882a593Smuzhiyun 
3294*4882a593Smuzhiyun 	/** Sleep Period in msec */
3295*4882a593Smuzhiyun 	t_u16 sleep_pd;
3296*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_SLEEP_PERIOD;
3297*4882a593Smuzhiyun 
3298*4882a593Smuzhiyun /* HostCmd_DS_802_11_SLEEP_PARAMS */
3299*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_SLEEP_PARAMS {
3300*4882a593Smuzhiyun 	/** ACT_GET/ACT_SET */
3301*4882a593Smuzhiyun 	t_u16 action;
3302*4882a593Smuzhiyun 	/** Sleep clock error in ppm */
3303*4882a593Smuzhiyun 	t_u16 error;
3304*4882a593Smuzhiyun 	/** Wakeup offset in usec */
3305*4882a593Smuzhiyun 	t_u16 offset;
3306*4882a593Smuzhiyun 	/** Clock stabilization time in usec */
3307*4882a593Smuzhiyun 	t_u16 stable_time;
3308*4882a593Smuzhiyun 	/** Control periodic calibration */
3309*4882a593Smuzhiyun 	t_u8 cal_control;
3310*4882a593Smuzhiyun 	/** Control the use of external sleep clock */
3311*4882a593Smuzhiyun 	t_u8 external_sleep_clk;
3312*4882a593Smuzhiyun 	/** Reserved field, should be set to zero */
3313*4882a593Smuzhiyun 	t_u16 reserved;
3314*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_SLEEP_PARAMS;
3315*4882a593Smuzhiyun 
3316*4882a593Smuzhiyun /** Sleep response control */
3317*4882a593Smuzhiyun typedef enum _sleep_resp_ctrl {
3318*4882a593Smuzhiyun 	RESP_NOT_NEEDED = 0,
3319*4882a593Smuzhiyun 	RESP_NEEDED,
3320*4882a593Smuzhiyun } sleep_resp_ctrl;
3321*4882a593Smuzhiyun 
3322*4882a593Smuzhiyun /** Structure definition for the new ieee power save parameters*/
3323*4882a593Smuzhiyun typedef MLAN_PACK_START struct __ps_param {
3324*4882a593Smuzhiyun 	/** Null packet interval */
3325*4882a593Smuzhiyun 	t_u16 null_pkt_interval;
3326*4882a593Smuzhiyun 	/** Num dtims */
3327*4882a593Smuzhiyun 	t_u16 multiple_dtims;
3328*4882a593Smuzhiyun 	/** becaon miss interval */
3329*4882a593Smuzhiyun 	t_u16 bcn_miss_timeout;
3330*4882a593Smuzhiyun 	/** local listen interval */
3331*4882a593Smuzhiyun 	t_u16 local_listen_interval;
3332*4882a593Smuzhiyun 	/** Adhoc awake period */
3333*4882a593Smuzhiyun 	t_u16 adhoc_wake_period;
3334*4882a593Smuzhiyun 	/** mode - (0x01 - firmware to automatically choose PS_POLL or NULL
3335*4882a593Smuzhiyun 	 * mode, 0x02 - PS_POLL, 0x03 - NULL mode )
3336*4882a593Smuzhiyun 	 */
3337*4882a593Smuzhiyun 	t_u16 mode;
3338*4882a593Smuzhiyun 	/** Delay to PS in milliseconds */
3339*4882a593Smuzhiyun 	t_u16 delay_to_ps;
3340*4882a593Smuzhiyun } MLAN_PACK_END ps_param;
3341*4882a593Smuzhiyun 
3342*4882a593Smuzhiyun /** Structure definition for the new auto deep sleep command */
3343*4882a593Smuzhiyun typedef MLAN_PACK_START struct __auto_ds_param {
3344*4882a593Smuzhiyun 	/** Deep sleep inactivity timeout */
3345*4882a593Smuzhiyun 	t_u16 deep_sleep_timeout;
3346*4882a593Smuzhiyun } MLAN_PACK_END auto_ds_param;
3347*4882a593Smuzhiyun 
3348*4882a593Smuzhiyun /** Structure definition for sleep confirmation in the new ps command */
3349*4882a593Smuzhiyun typedef MLAN_PACK_START struct __sleep_confirm_param {
3350*4882a593Smuzhiyun 	/** response control 0x00 - response not needed, 0x01 - response needed
3351*4882a593Smuzhiyun 	 */
3352*4882a593Smuzhiyun 	t_u16 resp_ctrl;
3353*4882a593Smuzhiyun } MLAN_PACK_END sleep_confirm_param;
3354*4882a593Smuzhiyun 
3355*4882a593Smuzhiyun /** bitmap for get auto deepsleep */
3356*4882a593Smuzhiyun #define BITMAP_AUTO_DS 0x01
3357*4882a593Smuzhiyun /** bitmap for sta power save */
3358*4882a593Smuzhiyun #define BITMAP_STA_PS 0x10
3359*4882a593Smuzhiyun /** bitmap for beacon timeout */
3360*4882a593Smuzhiyun #define BITMAP_BCN_TMO 0x20
3361*4882a593Smuzhiyun /** bitmap for uap inactivity based PS */
3362*4882a593Smuzhiyun #define BITMAP_UAP_INACT_PS 0x100
3363*4882a593Smuzhiyun /** bitmap for uap DTIM PS */
3364*4882a593Smuzhiyun #define BITMAP_UAP_DTIM_PS 0x200
3365*4882a593Smuzhiyun /** Structure definition for the new ieee power save parameters*/
3366*4882a593Smuzhiyun typedef MLAN_PACK_START struct _auto_ps_param {
3367*4882a593Smuzhiyun 	/** bitmap for enable power save mode */
3368*4882a593Smuzhiyun 	t_u16 ps_bitmap;
3369*4882a593Smuzhiyun 	/* auto deep sleep parameter,
3370*4882a593Smuzhiyun 	 * sta power save parameter
3371*4882a593Smuzhiyun 	 * uap inactivity parameter
3372*4882a593Smuzhiyun 	 * uap DTIM parameter */
3373*4882a593Smuzhiyun } MLAN_PACK_END auto_ps_param;
3374*4882a593Smuzhiyun 
3375*4882a593Smuzhiyun /** fix size for auto ps */
3376*4882a593Smuzhiyun #define AUTO_PS_FIX_SIZE 4
3377*4882a593Smuzhiyun 
3378*4882a593Smuzhiyun /** TLV type : auto ds param */
3379*4882a593Smuzhiyun #define TLV_TYPE_AUTO_DS_PARAM (PROPRIETARY_TLV_BASE_ID + 0x71) /* 0x0171 */
3380*4882a593Smuzhiyun /** TLV type : ps param */
3381*4882a593Smuzhiyun #define TLV_TYPE_PS_PARAM (PROPRIETARY_TLV_BASE_ID + 0x72) /* 0x0172 */
3382*4882a593Smuzhiyun /** TLV type : beacon timeout */
3383*4882a593Smuzhiyun #define TLV_TYPE_BCN_TIMEOUT (PROPRIETARY_TLV_BASE_ID + 0x11F) /* 0x011F */
3384*4882a593Smuzhiyun 
3385*4882a593Smuzhiyun /** MrvlIEtypes_auto_ds_param_t */
3386*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_auto_ds_param_t {
3387*4882a593Smuzhiyun 	/** Header */
3388*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
3389*4882a593Smuzhiyun 	/** auto ds param */
3390*4882a593Smuzhiyun 	auto_ds_param param;
3391*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_auto_ds_param_t;
3392*4882a593Smuzhiyun 
3393*4882a593Smuzhiyun /** MrvlIEtypes_ps_param_t */
3394*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_ps_param_t {
3395*4882a593Smuzhiyun 	/** Header */
3396*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
3397*4882a593Smuzhiyun 	/** ps param */
3398*4882a593Smuzhiyun 	ps_param param;
3399*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_ps_param_t;
3400*4882a593Smuzhiyun 
3401*4882a593Smuzhiyun /** MrvlIEtypes_bcn_timeout_t */
3402*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_bcn_timeout_t {
3403*4882a593Smuzhiyun 	/** Header */
3404*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
3405*4882a593Smuzhiyun 	/** Beacon miss timeout period window */
3406*4882a593Smuzhiyun 	t_u16 bcn_miss_tmo_window;
3407*4882a593Smuzhiyun 	/** Beacon miss timeout period */
3408*4882a593Smuzhiyun 	t_u16 bcn_miss_tmo_period;
3409*4882a593Smuzhiyun 	/** Beacon reacquire timeout period window */
3410*4882a593Smuzhiyun 	t_u16 bcn_rq_tmo_window;
3411*4882a593Smuzhiyun 	/** Beacon reacquire timeout period */
3412*4882a593Smuzhiyun 	t_u16 bcn_rq_tmo_period;
3413*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_bcn_timeout_t;
3414*4882a593Smuzhiyun 
3415*4882a593Smuzhiyun /** Structure definition for new power save command */
3416*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_PS_MODE_ENH {
3417*4882a593Smuzhiyun 	/** Action */
3418*4882a593Smuzhiyun 	t_u16 action;
3419*4882a593Smuzhiyun 	/** Data speciifc to action */
3420*4882a593Smuzhiyun 	/* For IEEE power save data will be as
3421*4882a593Smuzhiyun 	 * UINT16 mode (0x01 - firmware to automatically choose PS_POLL or NULL
3422*4882a593Smuzhiyun 	 * mode, 0x02 - PS_POLL, 0x03 - NULL mode ) UINT16 NullpacketInterval
3423*4882a593Smuzhiyun 	 * UINT16 NumDtims
3424*4882a593Smuzhiyun 	 * UINT16 BeaconMissInterval
3425*4882a593Smuzhiyun 	 * UINT16 locallisteninterval
3426*4882a593Smuzhiyun 	 * UINT16 adhocawakeperiod */
3427*4882a593Smuzhiyun 
3428*4882a593Smuzhiyun 	/* For auto deep sleep */
3429*4882a593Smuzhiyun 	/* UINT16 Deep sleep inactivity timeout*/
3430*4882a593Smuzhiyun 
3431*4882a593Smuzhiyun 	/* For PS sleep confirm
3432*4882a593Smuzhiyun 	 * UINT16 responeCtrl - 0x00 - reponse from fw not needed, 0x01 -
3433*4882a593Smuzhiyun 	 * response from fw is needed */
3434*4882a593Smuzhiyun 
3435*4882a593Smuzhiyun 	union {
3436*4882a593Smuzhiyun 		/** PS param definition */
3437*4882a593Smuzhiyun 		ps_param opt_ps;
3438*4882a593Smuzhiyun 		/** Auto ds param definition */
3439*4882a593Smuzhiyun 		auto_ds_param auto_ds;
3440*4882a593Smuzhiyun 		/** Sleep comfirm param definition */
3441*4882a593Smuzhiyun 		sleep_confirm_param sleep_cfm;
3442*4882a593Smuzhiyun 		/** bitmap for get PS info and Disable PS mode */
3443*4882a593Smuzhiyun 		t_u16 ps_bitmap;
3444*4882a593Smuzhiyun 		/** auto ps param */
3445*4882a593Smuzhiyun 		auto_ps_param auto_ps;
3446*4882a593Smuzhiyun 	} params;
3447*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_PS_MODE_ENH;
3448*4882a593Smuzhiyun 
3449*4882a593Smuzhiyun /** FW VERSION tlv */
3450*4882a593Smuzhiyun #define TLV_TYPE_FW_VER_INFO (PROPRIETARY_TLV_BASE_ID + 0xC7) /* 0x1C7 */
3451*4882a593Smuzhiyun 
3452*4882a593Smuzhiyun /** MrvlIEtypes_fw_ver_info_t */
3453*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_fw_ver_info_t {
3454*4882a593Smuzhiyun 	/** Header */
3455*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
3456*4882a593Smuzhiyun 	/** API id */
3457*4882a593Smuzhiyun 	t_u16 api_id;
3458*4882a593Smuzhiyun 	/** major version */
3459*4882a593Smuzhiyun 	t_u8 major_ver;
3460*4882a593Smuzhiyun 	/** minor version */
3461*4882a593Smuzhiyun 	t_u8 minor_ver;
3462*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_fw_ver_info_t;
3463*4882a593Smuzhiyun 
3464*4882a593Smuzhiyun /** API ID */
3465*4882a593Smuzhiyun enum API_VER_ID {
3466*4882a593Smuzhiyun 	KEY_API_VER_ID = 1,
3467*4882a593Smuzhiyun 	FW_API_VER_ID = 2,
3468*4882a593Smuzhiyun 	UAP_FW_API_VER_ID = 3,
3469*4882a593Smuzhiyun 	CHANRPT_API_VER_ID = 4,
3470*4882a593Smuzhiyun 	FW_HOTFIX_VER_ID = 5,
3471*4882a593Smuzhiyun };
3472*4882a593Smuzhiyun 
3473*4882a593Smuzhiyun /** FW AP V15 */
3474*4882a593Smuzhiyun #define HOST_API_VERSION_V15 15
3475*4882a593Smuzhiyun /** FW minor version 1 */
3476*4882a593Smuzhiyun #define FW_MINOR_VERSION_1 1
3477*4882a593Smuzhiyun 
3478*4882a593Smuzhiyun /** UAP FW version 2 */
3479*4882a593Smuzhiyun #define UAP_FW_VERSION_2 0x2
3480*4882a593Smuzhiyun 
3481*4882a593Smuzhiyun /** HostCMD_DS_APCMD_ACS_SCAN */
3482*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCMD_DS_APCMD_ACS_SCAN {
3483*4882a593Smuzhiyun 	/** band */
3484*4882a593Smuzhiyun 	Band_Config_t bandcfg;
3485*4882a593Smuzhiyun 	/** channel */
3486*4882a593Smuzhiyun 	t_u8 chan;
3487*4882a593Smuzhiyun } MLAN_PACK_END HostCMD_DS_APCMD_ACS_SCAN;
3488*4882a593Smuzhiyun 
3489*4882a593Smuzhiyun /** HostCmd_DS_GET_HW_SPEC */
3490*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_GET_HW_SPEC {
3491*4882a593Smuzhiyun 	/** HW Interface version number */
3492*4882a593Smuzhiyun 	t_u16 hw_if_version;
3493*4882a593Smuzhiyun 	/** HW version number */
3494*4882a593Smuzhiyun 	t_u16 version;
3495*4882a593Smuzhiyun 	/** Reserved field */
3496*4882a593Smuzhiyun 	t_u16 reserved;
3497*4882a593Smuzhiyun 	/** Max no of Multicast address  */
3498*4882a593Smuzhiyun 	t_u16 num_of_mcast_adr;
3499*4882a593Smuzhiyun 	/** MAC address */
3500*4882a593Smuzhiyun 	t_u8 permanent_addr[MLAN_MAC_ADDR_LENGTH];
3501*4882a593Smuzhiyun 	/** Region Code */
3502*4882a593Smuzhiyun 	t_u16 region_code;
3503*4882a593Smuzhiyun 	/** Number of antenna used */
3504*4882a593Smuzhiyun 	t_u16 number_of_antenna;
3505*4882a593Smuzhiyun 	/** FW release number, example 0x1234=1.2.3.4 */
3506*4882a593Smuzhiyun 	t_u32 fw_release_number;
3507*4882a593Smuzhiyun 	/** Reserved field */
3508*4882a593Smuzhiyun 	t_u32 reserved_1;
3509*4882a593Smuzhiyun 	/** Reserved field */
3510*4882a593Smuzhiyun 	t_u32 reserved_2;
3511*4882a593Smuzhiyun 	/** Reserved field */
3512*4882a593Smuzhiyun 	t_u32 reserved_3;
3513*4882a593Smuzhiyun 	/** FW/HW Capability */
3514*4882a593Smuzhiyun 	t_u32 fw_cap_info;
3515*4882a593Smuzhiyun 	/** 802.11n Device Capabilities */
3516*4882a593Smuzhiyun 	t_u32 dot_11n_dev_cap;
3517*4882a593Smuzhiyun 	/** MIMO abstraction of MCSs supported by device */
3518*4882a593Smuzhiyun 	t_u8 dev_mcs_support;
3519*4882a593Smuzhiyun 	/** Valid end port at init */
3520*4882a593Smuzhiyun 	t_u16 mp_end_port;
3521*4882a593Smuzhiyun 	/** mgmt IE buffer count */
3522*4882a593Smuzhiyun 	t_u16 mgmt_buf_count;
3523*4882a593Smuzhiyun 	/** Reserved */
3524*4882a593Smuzhiyun 	t_u32 reserved_8;
3525*4882a593Smuzhiyun 	/** Reserved */
3526*4882a593Smuzhiyun 	t_u32 reserved_9;
3527*4882a593Smuzhiyun 	/** 802.11ac Device Capabilities */
3528*4882a593Smuzhiyun 	t_u32 Dot11acDevCap;
3529*4882a593Smuzhiyun 	/** MCSs supported by 802.11ac device */
3530*4882a593Smuzhiyun 	t_u32 Dot11acMcsSupport;
3531*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_GET_HW_SPEC;
3532*4882a593Smuzhiyun 
3533*4882a593Smuzhiyun #ifdef SDIO
3534*4882a593Smuzhiyun /* HostCmd_DS_SDIO_SP_RX_AGGR_CFG */
3535*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_SDIO_SP_RX_AGGR_CFG {
3536*4882a593Smuzhiyun 	t_u8 action;
3537*4882a593Smuzhiyun 	t_u8 enable;
3538*4882a593Smuzhiyun 	t_u16 sdio_block_size;
3539*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_SDIO_SP_RX_AGGR_CFG;
3540*4882a593Smuzhiyun #endif
3541*4882a593Smuzhiyun 
3542*4882a593Smuzhiyun /**  HostCmd_DS_802_11_CFG_DATA */
3543*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_CFG_DATA {
3544*4882a593Smuzhiyun 	/** Action */
3545*4882a593Smuzhiyun 	t_u16 action;
3546*4882a593Smuzhiyun 	/** Type */
3547*4882a593Smuzhiyun 	t_u16 type;
3548*4882a593Smuzhiyun 	/** Data length */
3549*4882a593Smuzhiyun 	t_u16 data_len;
3550*4882a593Smuzhiyun 	/** Data */
3551*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_CFG_DATA;
3552*4882a593Smuzhiyun 
3553*4882a593Smuzhiyun /**  HostCmd_DS_CMD_802_11_RSSI_INFO_EXT */
3554*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_RSSI_INFO_EXT {
3555*4882a593Smuzhiyun 	/** Action */
3556*4882a593Smuzhiyun 	t_u16 action;
3557*4882a593Smuzhiyun 	/** Parameter used for exponential averaging for Data */
3558*4882a593Smuzhiyun 	t_u16 ndata;
3559*4882a593Smuzhiyun 	/** Parameter used for exponential averaging for Beacon */
3560*4882a593Smuzhiyun 	t_u16 nbcn;
3561*4882a593Smuzhiyun 	/** Last RSSI beacon TSF(only for Get action) */
3562*4882a593Smuzhiyun 	t_u64 tsfbcn;
3563*4882a593Smuzhiyun 	/** TLV info**/
3564*4882a593Smuzhiyun 	t_u8 *tlv_buf[];
3565*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_RSSI_INFO_EXT;
3566*4882a593Smuzhiyun 
3567*4882a593Smuzhiyun /** TLV rssi info */
3568*4882a593Smuzhiyun #define TLV_TYPE_RSSI_INFO (PROPRIETARY_TLV_BASE_ID + 0xe5) /* 0x01E5 */
3569*4882a593Smuzhiyun 
3570*4882a593Smuzhiyun /** MrvlIEtypes_eapol_pkt_t */
3571*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_RSSI_EXT_t {
3572*4882a593Smuzhiyun 	/** Header */
3573*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
3574*4882a593Smuzhiyun 	/** Path ID
3575*4882a593Smuzhiyun 	     [Bit1:Bit0] = [0:1]: path A
3576*4882a593Smuzhiyun 	     [Bit1:Bit0] = [1:0]: path B
3577*4882a593Smuzhiyun 	     [Bit1:Bit0] = [1:1]: combined signal of path A and path B
3578*4882a593Smuzhiyun 	     [Bit7:Bit2] : Reserved
3579*4882a593Smuzhiyun 	**/
3580*4882a593Smuzhiyun 	t_u16 path_id;
3581*4882a593Smuzhiyun 	/** Last Data RSSI in dBm */
3582*4882a593Smuzhiyun 	t_s16 data_rssi_last;
3583*4882a593Smuzhiyun 	/** Last Data NF in dBm */
3584*4882a593Smuzhiyun 	t_s16 data_nf_last;
3585*4882a593Smuzhiyun 	/** AVG DATA RSSI in dBm */
3586*4882a593Smuzhiyun 	t_s16 data_rssi_avg;
3587*4882a593Smuzhiyun 	/** AVG DATA NF in dBm */
3588*4882a593Smuzhiyun 	t_s16 data_nf_avg;
3589*4882a593Smuzhiyun 	/** Last BEACON RSSI in dBm */
3590*4882a593Smuzhiyun 	t_s16 bcn_rssi_last;
3591*4882a593Smuzhiyun 	/** Last BEACON NF in dBm */
3592*4882a593Smuzhiyun 	t_s16 bcn_nf_last;
3593*4882a593Smuzhiyun 	/** AVG BEACON RSSI in dBm */
3594*4882a593Smuzhiyun 	t_s16 bcn_rssi_avg;
3595*4882a593Smuzhiyun 	/** AVG BEACON NF in dBm */
3596*4882a593Smuzhiyun 	t_s16 bcn_nf_avg;
3597*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_RSSI_EXT_t;
3598*4882a593Smuzhiyun 
3599*4882a593Smuzhiyun /**  HostCmd_DS_CMD_MC_AGGR_CFG */
3600*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_MC_AGGR_CFG {
3601*4882a593Smuzhiyun 	/** Action */
3602*4882a593Smuzhiyun 	t_u16 action;
3603*4882a593Smuzhiyun 	/** Reserved field 1 */
3604*4882a593Smuzhiyun 	t_u16 reserved_1;
3605*4882a593Smuzhiyun 	/* 1 enable, 0 disable
3606*4882a593Smuzhiyun 	 * bit 0 MC aggregation
3607*4882a593Smuzhiyun 	 * bit 1 packet expiry
3608*4882a593Smuzhiyun 	 * bit 2 CTS2Self
3609*4882a593Smuzhiyun 	 * bit 3 CTS2Self duration offset*/
3610*4882a593Smuzhiyun 	t_u8 enable_bitmap;
3611*4882a593Smuzhiyun 	/* 1 valid, 0 invalid
3612*4882a593Smuzhiyun 	 * bit 0 MC aggregation
3613*4882a593Smuzhiyun 	 * bit 1 packet expiry
3614*4882a593Smuzhiyun 	 * bit 2 CTS2Self
3615*4882a593Smuzhiyun 	 * bit 3 CTS2Self duration offset*/
3616*4882a593Smuzhiyun 	t_u8 mask_bitmap;
3617*4882a593Smuzhiyun 	/** CTS2Self duration offset */
3618*4882a593Smuzhiyun 	t_u16 cts2self_offset;
3619*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_MC_AGGR_CFG;
3620*4882a593Smuzhiyun 
3621*4882a593Smuzhiyun /** Stats_Cfg_Params_TLV */
3622*4882a593Smuzhiyun typedef struct MLAN_PACK_START _Stats_Cfg_Params_TLV {
3623*4882a593Smuzhiyun 	/** tlvHeader */
3624*4882a593Smuzhiyun 	MrvlIEtypesHeader_t tlvHeader;
3625*4882a593Smuzhiyun 	/** op */
3626*4882a593Smuzhiyun 	t_u8 op;
3627*4882a593Smuzhiyun 	/** reserved */
3628*4882a593Smuzhiyun 	t_u8 reserved;
3629*4882a593Smuzhiyun 	/** mac */
3630*4882a593Smuzhiyun 	mlan_802_11_mac_addr mac;
3631*4882a593Smuzhiyun } MLAN_PACK_END Stats_Cfg_Params_TLV_t;
3632*4882a593Smuzhiyun 
3633*4882a593Smuzhiyun /** HostCmd_DS_STATS */
3634*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_STATS {
3635*4882a593Smuzhiyun 	/** Action */
3636*4882a593Smuzhiyun 	t_u16 action;
3637*4882a593Smuzhiyun 	/** TLV buffer */
3638*4882a593Smuzhiyun 	t_u8 tlv_buffer[1];
3639*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_STATS;
3640*4882a593Smuzhiyun 
3641*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_GET_CH_LOAD {
3642*4882a593Smuzhiyun 	/** Action */
3643*4882a593Smuzhiyun 	t_u16 action;
3644*4882a593Smuzhiyun 	t_u16 ch_load;
3645*4882a593Smuzhiyun 	t_s16 noise;
3646*4882a593Smuzhiyun 	t_u16 rx_quality;
3647*4882a593Smuzhiyun 	t_u16 duration;
3648*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_GET_CH_LOAD;
3649*4882a593Smuzhiyun 
3650*4882a593Smuzhiyun /**  HostCmd_DS_CMD_802_11_RSSI_INFO */
3651*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_RSSI_INFO {
3652*4882a593Smuzhiyun 	/** Action */
3653*4882a593Smuzhiyun 	t_u16 action;
3654*4882a593Smuzhiyun 	/** Parameter used for exponential averaging for Data */
3655*4882a593Smuzhiyun 	t_u16 ndata;
3656*4882a593Smuzhiyun 	/** Parameter used for exponential averaging for Beacon */
3657*4882a593Smuzhiyun 	t_u16 nbcn;
3658*4882a593Smuzhiyun 	/** Reserved field 0 */
3659*4882a593Smuzhiyun 	t_u16 reserved[9];
3660*4882a593Smuzhiyun 	/** Reserved field 1 */
3661*4882a593Smuzhiyun 	t_u64 reserved_1;
3662*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_RSSI_INFO;
3663*4882a593Smuzhiyun 
3664*4882a593Smuzhiyun /** HostCmd_DS_802_11_RSSI_INFO_RSP */
3665*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_RSSI_INFO_RSP {
3666*4882a593Smuzhiyun 	/** Action */
3667*4882a593Smuzhiyun 	t_u16 action;
3668*4882a593Smuzhiyun 	/** Parameter used for exponential averaging for Data */
3669*4882a593Smuzhiyun 	t_u16 ndata;
3670*4882a593Smuzhiyun 	/** Parameter used for exponential averaging for beacon */
3671*4882a593Smuzhiyun 	t_u16 nbcn;
3672*4882a593Smuzhiyun 	/** Last Data RSSI in dBm */
3673*4882a593Smuzhiyun 	t_s16 data_rssi_last;
3674*4882a593Smuzhiyun 	/** Last Data NF in dBm */
3675*4882a593Smuzhiyun 	t_s16 data_nf_last;
3676*4882a593Smuzhiyun 	/** AVG DATA RSSI in dBm */
3677*4882a593Smuzhiyun 	t_s16 data_rssi_avg;
3678*4882a593Smuzhiyun 	/** AVG DATA NF in dBm */
3679*4882a593Smuzhiyun 	t_s16 data_nf_avg;
3680*4882a593Smuzhiyun 	/** Last BEACON RSSI in dBm */
3681*4882a593Smuzhiyun 	t_s16 bcn_rssi_last;
3682*4882a593Smuzhiyun 	/** Last BEACON NF in dBm */
3683*4882a593Smuzhiyun 	t_s16 bcn_nf_last;
3684*4882a593Smuzhiyun 	/** AVG BEACON RSSI in dBm */
3685*4882a593Smuzhiyun 	t_s16 bcn_rssi_avg;
3686*4882a593Smuzhiyun 	/** AVG BEACON NF in dBm */
3687*4882a593Smuzhiyun 	t_s16 bcn_nf_avg;
3688*4882a593Smuzhiyun 	/** Last RSSI Beacon TSF */
3689*4882a593Smuzhiyun 	t_u64 tsf_bcn;
3690*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_RSSI_INFO_RSP;
3691*4882a593Smuzhiyun 
3692*4882a593Smuzhiyun /** HostCmd_DS_802_11_MAC_ADDRESS */
3693*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_MAC_ADDRESS {
3694*4882a593Smuzhiyun 	/** Action */
3695*4882a593Smuzhiyun 	t_u16 action;
3696*4882a593Smuzhiyun 	/** MAC address */
3697*4882a593Smuzhiyun 	t_u8 mac_addr[MLAN_MAC_ADDR_LENGTH];
3698*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_MAC_ADDRESS;
3699*4882a593Smuzhiyun 
3700*4882a593Smuzhiyun /** HostCmd_DS_MAC_CONTROL */
3701*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_MAC_CONTROL {
3702*4882a593Smuzhiyun 	/** Action */
3703*4882a593Smuzhiyun 	t_u32 action;
3704*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_MAC_CONTROL;
3705*4882a593Smuzhiyun 
3706*4882a593Smuzhiyun /** HostCmd_DS_802_11_NET_MONITOR */
3707*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_802_11_DS_NET_MONITOR {
3708*4882a593Smuzhiyun 	/** Action */
3709*4882a593Smuzhiyun 	t_u16 action;
3710*4882a593Smuzhiyun 	/** Enable/disable net monitor */
3711*4882a593Smuzhiyun 	t_u16 enable_net_mon;
3712*4882a593Smuzhiyun 	/** set net monitor filer flag */
3713*4882a593Smuzhiyun 	t_u16 filter_flag;
3714*4882a593Smuzhiyun 	/** Channel to monitor */
3715*4882a593Smuzhiyun 	MrvlIEtypes_ChanBandListParamSet_t monitor_chan;
3716*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_NET_MONITOR;
3717*4882a593Smuzhiyun 
3718*4882a593Smuzhiyun /** HostCmd_DS_CMD_TX_DATA_PAUSE */
3719*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_CMD_TX_DATA_PAUSE {
3720*4882a593Smuzhiyun 	/** Action */
3721*4882a593Smuzhiyun 	t_u16 action;
3722*4882a593Smuzhiyun 	/** Enable/disable Tx data pause */
3723*4882a593Smuzhiyun 	t_u8 enable_tx_pause;
3724*4882a593Smuzhiyun 	/** Max number of TX buffers allowed for all PS clients*/
3725*4882a593Smuzhiyun 	t_u8 pause_tx_count;
3726*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_CMD_TX_DATA_PAUSE;
3727*4882a593Smuzhiyun 
3728*4882a593Smuzhiyun /** TLV type : TX pause TLV */
3729*4882a593Smuzhiyun #define TLV_TYPE_TX_PAUSE (PROPRIETARY_TLV_BASE_ID + 0x94) /* 0x0194 */
3730*4882a593Smuzhiyun /** MrvlIEtypes_SsIdParamSet_t */
3731*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_tx_pause_t {
3732*4882a593Smuzhiyun 	/** Header */
3733*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
3734*4882a593Smuzhiyun 	/** peer mac address */
3735*4882a593Smuzhiyun 	t_u8 peermac[MLAN_MAC_ADDR_LENGTH];
3736*4882a593Smuzhiyun 	/** Tx pause state, 1--pause, 0--free flowing */
3737*4882a593Smuzhiyun 	t_u8 tx_pause;
3738*4882a593Smuzhiyun 	/** total packets queued for the client */
3739*4882a593Smuzhiyun 	t_u8 pkt_cnt;
3740*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_tx_pause_t;
3741*4882a593Smuzhiyun 
3742*4882a593Smuzhiyun /**  HostCmd_CMD_MAC_MULTICAST_ADR */
3743*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_MAC_MULTICAST_ADR {
3744*4882a593Smuzhiyun 	/** Action */
3745*4882a593Smuzhiyun 	t_u16 action;
3746*4882a593Smuzhiyun 	/** Number of addresses */
3747*4882a593Smuzhiyun 	t_u16 num_of_adrs;
3748*4882a593Smuzhiyun 	/** List of MAC */
3749*4882a593Smuzhiyun 	t_u8 mac_list[MLAN_MAC_ADDR_LENGTH * MLAN_MAX_MULTICAST_LIST_SIZE];
3750*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_MAC_MULTICAST_ADR;
3751*4882a593Smuzhiyun 
3752*4882a593Smuzhiyun /**  HostCmd_CMD_802_11_DEAUTHENTICATE */
3753*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_DEAUTHENTICATE {
3754*4882a593Smuzhiyun 	/** MAC address */
3755*4882a593Smuzhiyun 	t_u8 mac_addr[MLAN_MAC_ADDR_LENGTH];
3756*4882a593Smuzhiyun 	/** Deauthentication resaon code */
3757*4882a593Smuzhiyun 	t_u16 reason_code;
3758*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_DEAUTHENTICATE;
3759*4882a593Smuzhiyun 
3760*4882a593Smuzhiyun /** HostCmd_DS_802_11_ASSOCIATE */
3761*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_ASSOCIATE {
3762*4882a593Smuzhiyun 	/** Peer STA address */
3763*4882a593Smuzhiyun 	t_u8 peer_sta_addr[MLAN_MAC_ADDR_LENGTH];
3764*4882a593Smuzhiyun 	/** Capability information */
3765*4882a593Smuzhiyun 	IEEEtypes_CapInfo_t cap_info;
3766*4882a593Smuzhiyun 	/** Listen interval */
3767*4882a593Smuzhiyun 	t_u16 listen_interval;
3768*4882a593Smuzhiyun 	/** Beacon period */
3769*4882a593Smuzhiyun 	t_u16 beacon_period;
3770*4882a593Smuzhiyun 	/** DTIM period */
3771*4882a593Smuzhiyun 	t_u8 dtim_period;
3772*4882a593Smuzhiyun 
3773*4882a593Smuzhiyun 	/**
3774*4882a593Smuzhiyun 	 *  MrvlIEtypes_SsIdParamSet_t  SsIdParamSet;
3775*4882a593Smuzhiyun 	 *  MrvlIEtypes_PhyParamSet_t   PhyParamSet;
3776*4882a593Smuzhiyun 	 *  MrvlIEtypes_SsParamSet_t    SsParamSet;
3777*4882a593Smuzhiyun 	 *  MrvlIEtypes_RatesParamSet_t RatesParamSet;
3778*4882a593Smuzhiyun 	 */
3779*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_ASSOCIATE;
3780*4882a593Smuzhiyun 
3781*4882a593Smuzhiyun /** HostCmd_CMD_802_11_ASSOCIATE response */
3782*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_ASSOCIATE_RSP {
3783*4882a593Smuzhiyun 	/** Association response structure */
3784*4882a593Smuzhiyun 	IEEEtypes_AssocRsp_t assoc_rsp;
3785*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_ASSOCIATE_RSP;
3786*4882a593Smuzhiyun 
3787*4882a593Smuzhiyun /** HostCmd_DS_802_11_AD_HOC_START*/
3788*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_AD_HOC_START {
3789*4882a593Smuzhiyun 	/** AdHoc SSID */
3790*4882a593Smuzhiyun 	t_u8 ssid[MLAN_MAX_SSID_LENGTH];
3791*4882a593Smuzhiyun 	/** BSS mode */
3792*4882a593Smuzhiyun 	t_u8 bss_mode;
3793*4882a593Smuzhiyun 	/** Beacon period */
3794*4882a593Smuzhiyun 	t_u16 beacon_period;
3795*4882a593Smuzhiyun 	/** DTIM period */
3796*4882a593Smuzhiyun 	t_u8 dtim_period;
3797*4882a593Smuzhiyun 	/** SS parameter set */
3798*4882a593Smuzhiyun 	IEEEtypes_SsParamSet_t ss_param_set;
3799*4882a593Smuzhiyun 	/** PHY parameter set */
3800*4882a593Smuzhiyun 	IEEEtypes_PhyParamSet_t phy_param_set;
3801*4882a593Smuzhiyun 	/** Reserved field */
3802*4882a593Smuzhiyun 	t_u16 reserved1;
3803*4882a593Smuzhiyun 	/** Capability information */
3804*4882a593Smuzhiyun 	IEEEtypes_CapInfo_t cap;
3805*4882a593Smuzhiyun 	/** Supported data rates */
3806*4882a593Smuzhiyun 	t_u8 DataRate[HOSTCMD_SUPPORTED_RATES];
3807*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_AD_HOC_START;
3808*4882a593Smuzhiyun 
3809*4882a593Smuzhiyun /**  HostCmd_CMD_802_11_AD_HOC_START response */
3810*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_AD_HOC_START_RESULT {
3811*4882a593Smuzhiyun 	/** Padding */
3812*4882a593Smuzhiyun 	t_u8 pad[3];
3813*4882a593Smuzhiyun 	/** AdHoc BSSID */
3814*4882a593Smuzhiyun 	t_u8 bssid[MLAN_MAC_ADDR_LENGTH];
3815*4882a593Smuzhiyun 	/** Padding to sync with FW structure*/
3816*4882a593Smuzhiyun 	t_u8 pad2[2];
3817*4882a593Smuzhiyun 	/** Result */
3818*4882a593Smuzhiyun 	t_u8 result;
3819*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_AD_HOC_START_RESULT;
3820*4882a593Smuzhiyun 
3821*4882a593Smuzhiyun /**  HostCmd_CMD_802_11_AD_HOC_START response */
3822*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_AD_HOC_JOIN_RESULT {
3823*4882a593Smuzhiyun 	/** Result */
3824*4882a593Smuzhiyun 	t_u8 result;
3825*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_AD_HOC_JOIN_RESULT;
3826*4882a593Smuzhiyun 
3827*4882a593Smuzhiyun /** AdHoc_BssDesc_t */
3828*4882a593Smuzhiyun typedef MLAN_PACK_START struct _AdHoc_BssDesc_t {
3829*4882a593Smuzhiyun 	/** BSSID */
3830*4882a593Smuzhiyun 	t_u8 bssid[MLAN_MAC_ADDR_LENGTH];
3831*4882a593Smuzhiyun 	/** SSID */
3832*4882a593Smuzhiyun 	t_u8 ssid[MLAN_MAX_SSID_LENGTH];
3833*4882a593Smuzhiyun 	/** BSS mode */
3834*4882a593Smuzhiyun 	t_u8 bss_mode;
3835*4882a593Smuzhiyun 	/** Beacon period */
3836*4882a593Smuzhiyun 	t_u16 beacon_period;
3837*4882a593Smuzhiyun 	/** DTIM period */
3838*4882a593Smuzhiyun 	t_u8 dtim_period;
3839*4882a593Smuzhiyun 	/** Timestamp */
3840*4882a593Smuzhiyun 	t_u8 time_stamp[8];
3841*4882a593Smuzhiyun 	/** Local time */
3842*4882a593Smuzhiyun 	t_u8 local_time[8];
3843*4882a593Smuzhiyun 	/** PHY parameter set */
3844*4882a593Smuzhiyun 	IEEEtypes_PhyParamSet_t phy_param_set;
3845*4882a593Smuzhiyun 	/** SS parameter set */
3846*4882a593Smuzhiyun 	IEEEtypes_SsParamSet_t ss_param_set;
3847*4882a593Smuzhiyun 	/** Capability information */
3848*4882a593Smuzhiyun 	IEEEtypes_CapInfo_t cap;
3849*4882a593Smuzhiyun 	/** Supported data rates */
3850*4882a593Smuzhiyun 	t_u8 data_rates[HOSTCMD_SUPPORTED_RATES];
3851*4882a593Smuzhiyun 
3852*4882a593Smuzhiyun 	/*
3853*4882a593Smuzhiyun 	 *  DO NOT ADD ANY FIELDS TO THIS STRUCTURE.
3854*4882a593Smuzhiyun 	 *  It is used in the Adhoc join command and will cause a
3855*4882a593Smuzhiyun 	 *  binary layout mismatch with the firmware
3856*4882a593Smuzhiyun 	 */
3857*4882a593Smuzhiyun } MLAN_PACK_END AdHoc_BssDesc_t;
3858*4882a593Smuzhiyun 
3859*4882a593Smuzhiyun /** HostCmd_DS_802_11_AD_HOC_JOIN */
3860*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_AD_HOC_JOIN {
3861*4882a593Smuzhiyun 	/** AdHoc BSS descriptor */
3862*4882a593Smuzhiyun 	AdHoc_BssDesc_t bss_descriptor;
3863*4882a593Smuzhiyun 	/** Reserved field */
3864*4882a593Smuzhiyun 	t_u16 reserved1;
3865*4882a593Smuzhiyun 	/** Reserved field */
3866*4882a593Smuzhiyun 	t_u16 reserved2;
3867*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_AD_HOC_JOIN;
3868*4882a593Smuzhiyun 
3869*4882a593Smuzhiyun #if defined(SDIO)
3870*4882a593Smuzhiyun /** Interrupt Raising Edge */
3871*4882a593Smuzhiyun #define INT_RASING_EDGE 0
3872*4882a593Smuzhiyun /** Interrupt Falling Edge */
3873*4882a593Smuzhiyun #define INT_FALLING_EDGE 1
3874*4882a593Smuzhiyun 
3875*4882a593Smuzhiyun /** Delay 1 usec */
3876*4882a593Smuzhiyun #define DELAY_1_US 1
3877*4882a593Smuzhiyun 
3878*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_SDIO_GPIO_INT_CONFIG {
3879*4882a593Smuzhiyun 	/** Action */
3880*4882a593Smuzhiyun 	t_u16 action;
3881*4882a593Smuzhiyun 	/** GPIO interrupt pin */
3882*4882a593Smuzhiyun 	t_u16 gpio_pin;
3883*4882a593Smuzhiyun 	/** GPIO interrupt edge, 1: failing edge; 0: raising edge */
3884*4882a593Smuzhiyun 	t_u16 gpio_int_edge;
3885*4882a593Smuzhiyun 	/** GPIO interrupt pulse widthin usec units */
3886*4882a593Smuzhiyun 	t_u16 gpio_pulse_width;
3887*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_SDIO_GPIO_INT_CONFIG;
3888*4882a593Smuzhiyun #endif /* GPIO_SDIO_INT_CTRL */
3889*4882a593Smuzhiyun 
3890*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_SDIO_PULL_CTRL {
3891*4882a593Smuzhiyun 	/** Action */
3892*4882a593Smuzhiyun 	t_u16 action;
3893*4882a593Smuzhiyun 	/** The delay of pulling up in us */
3894*4882a593Smuzhiyun 	t_u16 pull_up;
3895*4882a593Smuzhiyun 	/** The delay of pulling down in us */
3896*4882a593Smuzhiyun 	t_u16 pull_down;
3897*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_SDIO_PULL_CTRL;
3898*4882a593Smuzhiyun 
3899*4882a593Smuzhiyun /** HostCmd_DS_802_11_GET_LOG */
3900*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_GET_LOG {
3901*4882a593Smuzhiyun 	/** Number of multicast transmitted frames */
3902*4882a593Smuzhiyun 	t_u32 mcast_tx_frame;
3903*4882a593Smuzhiyun 	/** Number of failures */
3904*4882a593Smuzhiyun 	t_u32 failed;
3905*4882a593Smuzhiyun 	/** Number of retries */
3906*4882a593Smuzhiyun 	t_u32 retry;
3907*4882a593Smuzhiyun 	/** Number of multiretries */
3908*4882a593Smuzhiyun 	t_u32 multiretry;
3909*4882a593Smuzhiyun 	/** Number of duplicate frames */
3910*4882a593Smuzhiyun 	t_u32 frame_dup;
3911*4882a593Smuzhiyun 	/** Number of RTS success */
3912*4882a593Smuzhiyun 	t_u32 rts_success;
3913*4882a593Smuzhiyun 	/** Number of RTS failure */
3914*4882a593Smuzhiyun 	t_u32 rts_failure;
3915*4882a593Smuzhiyun 	/** Number of acknowledgement failure */
3916*4882a593Smuzhiyun 	t_u32 ack_failure;
3917*4882a593Smuzhiyun 	/** Number of fragmented packets received */
3918*4882a593Smuzhiyun 	t_u32 rx_frag;
3919*4882a593Smuzhiyun 	/** Number of multicast frames received */
3920*4882a593Smuzhiyun 	t_u32 mcast_rx_frame;
3921*4882a593Smuzhiyun 	/** FCS error */
3922*4882a593Smuzhiyun 	t_u32 fcs_error;
3923*4882a593Smuzhiyun 	/** Number of transmitted frames */
3924*4882a593Smuzhiyun 	t_u32 tx_frame;
3925*4882a593Smuzhiyun 	/** Reserved field */
3926*4882a593Smuzhiyun 	t_u32 reserved;
3927*4882a593Smuzhiyun 	/** Number of WEP icv error for each key */
3928*4882a593Smuzhiyun 	t_u32 wep_icv_err_cnt[4];
3929*4882a593Smuzhiyun 	/** Beacon received count */
3930*4882a593Smuzhiyun 	t_u32 bcn_rcv_cnt;
3931*4882a593Smuzhiyun 	/** Beacon missed count */
3932*4882a593Smuzhiyun 	t_u32 bcn_miss_cnt;
3933*4882a593Smuzhiyun 	/** Tx frag count */
3934*4882a593Smuzhiyun 	t_u32 tx_frag_cnt;
3935*4882a593Smuzhiyun 	/** Qos Tx frag count */
3936*4882a593Smuzhiyun 	t_u32 qos_tx_frag_cnt[8];
3937*4882a593Smuzhiyun 	/** Qos failed count */
3938*4882a593Smuzhiyun 	t_u32 qos_failed_cnt[8];
3939*4882a593Smuzhiyun 	/** Qos retry count */
3940*4882a593Smuzhiyun 	t_u32 qos_retry_cnt[8];
3941*4882a593Smuzhiyun 	/** Qos multi retry count */
3942*4882a593Smuzhiyun 	t_u32 qos_multi_retry_cnt[8];
3943*4882a593Smuzhiyun 	/** Qos frame dup count */
3944*4882a593Smuzhiyun 	t_u32 qos_frm_dup_cnt[8];
3945*4882a593Smuzhiyun 	/** Qos rts success count */
3946*4882a593Smuzhiyun 	t_u32 qos_rts_suc_cnt[8];
3947*4882a593Smuzhiyun 	/** Qos rts failure count */
3948*4882a593Smuzhiyun 	t_u32 qos_rts_failure_cnt[8];
3949*4882a593Smuzhiyun 	/** Qos ack failure count */
3950*4882a593Smuzhiyun 	t_u32 qos_ack_failure_cnt[8];
3951*4882a593Smuzhiyun 	/** Qos Rx frag count */
3952*4882a593Smuzhiyun 	t_u32 qos_rx_frag_cnt[8];
3953*4882a593Smuzhiyun 	/** Qos Tx frame count */
3954*4882a593Smuzhiyun 	t_u32 qos_tx_frm_cnt[8];
3955*4882a593Smuzhiyun 	/** Qos discarded frame count */
3956*4882a593Smuzhiyun 	t_u32 qos_discarded_frm_cnt[8];
3957*4882a593Smuzhiyun 	/** Qos mpdus Rx count */
3958*4882a593Smuzhiyun 	t_u32 qos_mpdus_rx_cnt[8];
3959*4882a593Smuzhiyun 	/** Qos retry rx count */
3960*4882a593Smuzhiyun 	t_u32 qos_retries_rx_cnt[8];
3961*4882a593Smuzhiyun 	/** CMAC ICV errors count */
3962*4882a593Smuzhiyun 	t_u32 cmacicv_errors;
3963*4882a593Smuzhiyun 	/** CMAC replays count */
3964*4882a593Smuzhiyun 	t_u32 cmac_replays;
3965*4882a593Smuzhiyun 	/** mgmt CCMP replays count */
3966*4882a593Smuzhiyun 	t_u32 mgmt_ccmp_replays;
3967*4882a593Smuzhiyun 	/** TKIP ICV errors count */
3968*4882a593Smuzhiyun 	t_u32 tkipicv_errors;
3969*4882a593Smuzhiyun 	/** TKIP replays count */
3970*4882a593Smuzhiyun 	t_u32 tkip_replays;
3971*4882a593Smuzhiyun 	/** CCMP decrypt errors count */
3972*4882a593Smuzhiyun 	t_u32 ccmp_decrypt_errors;
3973*4882a593Smuzhiyun 	/** CCMP replays count */
3974*4882a593Smuzhiyun 	t_u32 ccmp_replays;
3975*4882a593Smuzhiyun 	/** Tx amsdu count */
3976*4882a593Smuzhiyun 	t_u32 tx_amsdu_cnt;
3977*4882a593Smuzhiyun 	/** failed amsdu count */
3978*4882a593Smuzhiyun 	t_u32 failed_amsdu_cnt;
3979*4882a593Smuzhiyun 	/** retry amsdu count */
3980*4882a593Smuzhiyun 	t_u32 retry_amsdu_cnt;
3981*4882a593Smuzhiyun 	/** multi-retry amsdu count */
3982*4882a593Smuzhiyun 	t_u32 multi_retry_amsdu_cnt;
3983*4882a593Smuzhiyun 	/** Tx octets in amsdu count */
3984*4882a593Smuzhiyun 	t_u64 tx_octets_in_amsdu_cnt;
3985*4882a593Smuzhiyun 	/** amsdu ack failure count */
3986*4882a593Smuzhiyun 	t_u32 amsdu_ack_failure_cnt;
3987*4882a593Smuzhiyun 	/** Rx amsdu count */
3988*4882a593Smuzhiyun 	t_u32 rx_amsdu_cnt;
3989*4882a593Smuzhiyun 	/** Rx octets in amsdu count */
3990*4882a593Smuzhiyun 	t_u64 rx_octets_in_amsdu_cnt;
3991*4882a593Smuzhiyun 	/** Tx ampdu count */
3992*4882a593Smuzhiyun 	t_u32 tx_ampdu_cnt;
3993*4882a593Smuzhiyun 	/** tx mpdus in ampdu count */
3994*4882a593Smuzhiyun 	t_u32 tx_mpdus_in_ampdu_cnt;
3995*4882a593Smuzhiyun 	/** tx octets in ampdu count */
3996*4882a593Smuzhiyun 	t_u64 tx_octets_in_ampdu_cnt;
3997*4882a593Smuzhiyun 	/** ampdu Rx count */
3998*4882a593Smuzhiyun 	t_u32 ampdu_rx_cnt;
3999*4882a593Smuzhiyun 	/** mpdu in Rx ampdu count */
4000*4882a593Smuzhiyun 	t_u32 mpdu_in_rx_ampdu_cnt;
4001*4882a593Smuzhiyun 	/** Rx octets ampdu count */
4002*4882a593Smuzhiyun 	t_u64 rx_octets_in_ampdu_cnt;
4003*4882a593Smuzhiyun 	/** ampdu delimiter CRC error count */
4004*4882a593Smuzhiyun 	t_u32 ampdu_delimiter_crc_error_cnt;
4005*4882a593Smuzhiyun 	/** Rx Stuck Related Info*/
4006*4882a593Smuzhiyun 	/** Rx Stuck Issue count */
4007*4882a593Smuzhiyun 	t_u32 rx_stuck_issue_cnt[2];
4008*4882a593Smuzhiyun 	/** Rx Stuck Recovery count */
4009*4882a593Smuzhiyun 	t_u32 rx_stuck_recovery_cnt;
4010*4882a593Smuzhiyun 	/** Rx Stuck TSF */
4011*4882a593Smuzhiyun 	t_u64 rx_stuck_tsf[2];
4012*4882a593Smuzhiyun 	/** Tx Watchdog Recovery Related Info */
4013*4882a593Smuzhiyun 	/** Tx Watchdog Recovery count */
4014*4882a593Smuzhiyun 	t_u32 tx_watchdog_recovery_cnt;
4015*4882a593Smuzhiyun 	/** Tx Watchdog TSF */
4016*4882a593Smuzhiyun 	t_u64 tx_watchdog_tsf[2];
4017*4882a593Smuzhiyun 	/** Channel Switch Related Info */
4018*4882a593Smuzhiyun 	/** Channel Switch Announcement Sent */
4019*4882a593Smuzhiyun 	t_u32 channel_switch_ann_sent;
4020*4882a593Smuzhiyun 	/** Channel Switch State */
4021*4882a593Smuzhiyun 	t_u32 channel_switch_state;
4022*4882a593Smuzhiyun 	/** Register Class */
4023*4882a593Smuzhiyun 	t_u32 reg_class;
4024*4882a593Smuzhiyun 	/** Channel Number */
4025*4882a593Smuzhiyun 	t_u32 channel_number;
4026*4882a593Smuzhiyun 	/** Channel Switch Mode */
4027*4882a593Smuzhiyun 	t_u32 channel_switch_mode;
4028*4882a593Smuzhiyun 	/** Reset Rx Mac Count */
4029*4882a593Smuzhiyun 	t_u32 rx_reset_mac_recovery_cnt;
4030*4882a593Smuzhiyun 	/** ISR2 Not Done Count*/
4031*4882a593Smuzhiyun 	t_u32 rx_Isr2_NotDone_Cnt;
4032*4882a593Smuzhiyun 	/** GDMA Abort Count */
4033*4882a593Smuzhiyun 	t_u32 gdma_abort_cnt;
4034*4882a593Smuzhiyun 	/** Rx Reset MAC Count */
4035*4882a593Smuzhiyun 	t_u32 g_reset_rx_mac_cnt;
4036*4882a593Smuzhiyun 	// Ownership error counters
4037*4882a593Smuzhiyun 	/*Error Ownership error count*/
4038*4882a593Smuzhiyun 	t_u32 dwCtlErrCnt;
4039*4882a593Smuzhiyun 	/*Control Ownership error count*/
4040*4882a593Smuzhiyun 	t_u32 dwBcnErrCnt;
4041*4882a593Smuzhiyun 	/*Control Ownership error count*/
4042*4882a593Smuzhiyun 	t_u32 dwMgtErrCnt;
4043*4882a593Smuzhiyun 	/*Control Ownership error count*/
4044*4882a593Smuzhiyun 	t_u32 dwDatErrCnt;
4045*4882a593Smuzhiyun 	/*BIGTK MME good count*/
4046*4882a593Smuzhiyun 	t_u32 bigtk_mmeGoodCnt;
4047*4882a593Smuzhiyun 	/*BIGTK Replay error count*/
4048*4882a593Smuzhiyun 	t_u32 bigtk_replayErrCnt;
4049*4882a593Smuzhiyun 	/*BIGTK MIC error count*/
4050*4882a593Smuzhiyun 	t_u32 bigtk_micErrCnt;
4051*4882a593Smuzhiyun 	/*BIGTK MME not included count*/
4052*4882a593Smuzhiyun 	t_u32 bigtk_mmeNotFoundCnt;
4053*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_GET_LOG;
4054*4882a593Smuzhiyun 
4055*4882a593Smuzhiyun /* maln wifi rate */
4056*4882a593Smuzhiyun typedef MLAN_PACK_START struct _mlan_wifi_rate {
4057*4882a593Smuzhiyun 	/** 0: OFDM, 1:CCK, 2:HT 3:VHT 4..7 reserved */
4058*4882a593Smuzhiyun 	t_u8 preamble;
4059*4882a593Smuzhiyun 	/** 0:1x1, 1:2x2, 3:3x3, 4:4x4 */
4060*4882a593Smuzhiyun 	t_u8 nss;
4061*4882a593Smuzhiyun 	/** 0:20MHz, 1:40Mhz, 2:80Mhz, 3:160Mhz */
4062*4882a593Smuzhiyun 	t_u8 bw;
4063*4882a593Smuzhiyun 	/** OFDM/CCK rate code would be as per ieee std in the units of 0.5mbps
4064*4882a593Smuzhiyun 	 */
4065*4882a593Smuzhiyun 	/** HT/VHT it would be mcs index */
4066*4882a593Smuzhiyun 	t_u8 rateMcsIdx;
4067*4882a593Smuzhiyun 	/** units of 100 Kbps */
4068*4882a593Smuzhiyun 	t_u32 bitrate;
4069*4882a593Smuzhiyun } MLAN_PACK_START mlan_wifi_rate;
4070*4882a593Smuzhiyun 
4071*4882a593Smuzhiyun /** channel information */
4072*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
4073*4882a593Smuzhiyun 	/** channel width (20, 40, 80, 80+80, 160) */
4074*4882a593Smuzhiyun 	t_u32 width;
4075*4882a593Smuzhiyun 	/** primary 20 MHz channel */
4076*4882a593Smuzhiyun 	t_u32 center_freq;
4077*4882a593Smuzhiyun 	/** center frequency (MHz) first segment */
4078*4882a593Smuzhiyun 	t_u32 center_freq0;
4079*4882a593Smuzhiyun 	/** center frequency (MHz) second segment */
4080*4882a593Smuzhiyun 	t_u32 center_freq1;
4081*4882a593Smuzhiyun } MLAN_PACK_END mlan_wifi_channel_info;
4082*4882a593Smuzhiyun 
4083*4882a593Smuzhiyun /** channel statistics */
4084*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
4085*4882a593Smuzhiyun 	/** channel */
4086*4882a593Smuzhiyun 	mlan_wifi_channel_info channel;
4087*4882a593Smuzhiyun 	/** msecs the radio is awake (32 bits number accruing over time) */
4088*4882a593Smuzhiyun 	t_u32 on_time;
4089*4882a593Smuzhiyun 	/** msecs the CCA register is busy (32 bits number accruing over time)
4090*4882a593Smuzhiyun 	 */
4091*4882a593Smuzhiyun 	t_u32 cca_busy_time;
4092*4882a593Smuzhiyun } MLAN_PACK_END mlan_wifi_channel_stat;
4093*4882a593Smuzhiyun 
4094*4882a593Smuzhiyun /** radio statistics */
4095*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
4096*4882a593Smuzhiyun 	/** supported wifi in case of multi radio */
4097*4882a593Smuzhiyun 	t_u32 radio;
4098*4882a593Smuzhiyun 	/** msecs the radio is awake */
4099*4882a593Smuzhiyun 	t_u32 on_time;
4100*4882a593Smuzhiyun 	/** msecs the radio is transmitting */
4101*4882a593Smuzhiyun 	t_u32 tx_time;
4102*4882a593Smuzhiyun 	/**  TBD: num_tx_levels: number of radio transmit power levels */
4103*4882a593Smuzhiyun 	t_u32 reserved0;
4104*4882a593Smuzhiyun 	/** TBD: tx_time_per_levels: pointer to an array of radio transmit per
4105*4882a593Smuzhiyun 	 * power levels in msecs accured over time */
4106*4882a593Smuzhiyun 	t_u32 reserved1;
4107*4882a593Smuzhiyun 	/** msecs the radio is in active receive */
4108*4882a593Smuzhiyun 	t_u32 rx_time;
4109*4882a593Smuzhiyun 	/** msecs the radio is awake due to all scan */
4110*4882a593Smuzhiyun 	t_u32 on_time_scan;
4111*4882a593Smuzhiyun 	/** msecs the radio is awake due to NAN */
4112*4882a593Smuzhiyun 	t_u32 on_time_nbd;
4113*4882a593Smuzhiyun 	/** msecs the radio is awake due to G?scan */
4114*4882a593Smuzhiyun 	t_u32 on_time_gscan;
4115*4882a593Smuzhiyun 	/** msecs the radio is awake due to roam?scan */
4116*4882a593Smuzhiyun 	t_u32 on_time_roam_scan;
4117*4882a593Smuzhiyun 	/** msecs the radio is awake due to PNO scan */
4118*4882a593Smuzhiyun 	t_u32 on_time_pno_scan;
4119*4882a593Smuzhiyun 	/** msecs the radio is awake due to HS2.0 scans and GAS exchange */
4120*4882a593Smuzhiyun 	t_u32 on_time_hs20;
4121*4882a593Smuzhiyun 	/** number of channels */
4122*4882a593Smuzhiyun 	t_u32 num_channels;
4123*4882a593Smuzhiyun 	/** channel statistics */
4124*4882a593Smuzhiyun 	mlan_wifi_channel_stat channels[MAX_NUM_CHAN]; // support only 1
4125*4882a593Smuzhiyun 						       // channel, so keep it.
4126*4882a593Smuzhiyun } MLAN_PACK_END mlan_wifi_radio_stat;
4127*4882a593Smuzhiyun 
4128*4882a593Smuzhiyun /** per rate statistics */
4129*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
4130*4882a593Smuzhiyun 	/** rate information */
4131*4882a593Smuzhiyun 	mlan_wifi_rate rate;
4132*4882a593Smuzhiyun 	/** number of successfully transmitted data pkts (ACK rcvd) */
4133*4882a593Smuzhiyun 	t_u32 tx_mpdu;
4134*4882a593Smuzhiyun 	/** number of received data pkts */
4135*4882a593Smuzhiyun 	t_u32 rx_mpdu;
4136*4882a593Smuzhiyun 	/** number of data packet losses (no ACK) */
4137*4882a593Smuzhiyun 	t_u32 mpdu_lost;
4138*4882a593Smuzhiyun 	/** total number of data pkt retries */
4139*4882a593Smuzhiyun 	t_u32 retries;
4140*4882a593Smuzhiyun 	/** number of short data pkt retries */
4141*4882a593Smuzhiyun 	t_u32 retries_short;
4142*4882a593Smuzhiyun 	/** number of long data pkt retries */
4143*4882a593Smuzhiyun 	t_u32 retries_long;
4144*4882a593Smuzhiyun } MLAN_PACK_END mlan_wifi_rate_stat;
4145*4882a593Smuzhiyun 
4146*4882a593Smuzhiyun /** per peer statistics */
4147*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
4148*4882a593Smuzhiyun 	/** peer type (AP, TDLS, GO etc.) */
4149*4882a593Smuzhiyun 	t_u8 type;
4150*4882a593Smuzhiyun 	/** mac address */
4151*4882a593Smuzhiyun 	t_u8 peer_mac_address[6];
4152*4882a593Smuzhiyun 	/** peer WIFI_CAPABILITY_XXX */
4153*4882a593Smuzhiyun 	t_u32 capabilities;
4154*4882a593Smuzhiyun 	/** number of rates */
4155*4882a593Smuzhiyun 	t_u32 num_rate;
4156*4882a593Smuzhiyun 	/** per rate statistics, number of entries  = num_rate */
4157*4882a593Smuzhiyun 	mlan_wifi_rate_stat rate_stats[];
4158*4882a593Smuzhiyun } MLAN_PACK_END mlan_wifi_peer_info;
4159*4882a593Smuzhiyun 
4160*4882a593Smuzhiyun /* per access category statistics */
4161*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
4162*4882a593Smuzhiyun 	/** access category (VI, VO, BE, BK) */
4163*4882a593Smuzhiyun 	t_u32 ac;
4164*4882a593Smuzhiyun 	/** number of successfully transmitted unicast data pkts (ACK rcvd) */
4165*4882a593Smuzhiyun 	t_u32 tx_mpdu;
4166*4882a593Smuzhiyun 	/** number of received unicast mpdus */
4167*4882a593Smuzhiyun 	t_u32 rx_mpdu;
4168*4882a593Smuzhiyun 	/** number of succesfully transmitted multicast data packets */
4169*4882a593Smuzhiyun 	/** STA case: implies ACK received from AP for the unicast packet in
4170*4882a593Smuzhiyun 	 * which mcast pkt was sent */
4171*4882a593Smuzhiyun 	t_u32 tx_mcast;
4172*4882a593Smuzhiyun 	/** number of received multicast data packets */
4173*4882a593Smuzhiyun 	t_u32 rx_mcast;
4174*4882a593Smuzhiyun 	/** number of received unicast a-mpdus */
4175*4882a593Smuzhiyun 	t_u32 rx_ampdu;
4176*4882a593Smuzhiyun 	/** number of transmitted unicast a-mpdus */
4177*4882a593Smuzhiyun 	t_u32 tx_ampdu;
4178*4882a593Smuzhiyun 	/** number of data pkt losses (no ACK) */
4179*4882a593Smuzhiyun 	t_u32 mpdu_lost;
4180*4882a593Smuzhiyun 	/** total number of data pkt retries */
4181*4882a593Smuzhiyun 	t_u32 retries;
4182*4882a593Smuzhiyun 	/** number of short data pkt retries */
4183*4882a593Smuzhiyun 	t_u32 retries_short;
4184*4882a593Smuzhiyun 	/** number of long data pkt retries */
4185*4882a593Smuzhiyun 	t_u32 retries_long;
4186*4882a593Smuzhiyun 	/** data pkt min contention time (usecs) */
4187*4882a593Smuzhiyun 	t_u32 contention_time_min;
4188*4882a593Smuzhiyun 	/** data pkt max contention time (usecs) */
4189*4882a593Smuzhiyun 	t_u32 contention_time_max;
4190*4882a593Smuzhiyun 	/** data pkt avg contention time (usecs) */
4191*4882a593Smuzhiyun 	t_u32 contention_time_avg;
4192*4882a593Smuzhiyun 	/** num of data pkts used for contention statistics */
4193*4882a593Smuzhiyun 	t_u32 contention_num_samples;
4194*4882a593Smuzhiyun } MLAN_PACK_END mlan_wifi_wmm_ac_stat;
4195*4882a593Smuzhiyun 
4196*4882a593Smuzhiyun /** interface statistics */
4197*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
4198*4882a593Smuzhiyun 	/** access point beacon received count from connected AP */
4199*4882a593Smuzhiyun 	t_u32 beacon_rx;
4200*4882a593Smuzhiyun 	/** Average beacon offset encountered (beacon_TSF - TBTT)
4201*4882a593Smuzhiyun 	 *    the average_tsf_offset field is used so as to calculate the
4202*4882a593Smuzhiyun 	 *    typical beacon contention time on the channel as well may be
4203*4882a593Smuzhiyun 	 *    used to debug beacon synchronization and related power consumption
4204*4882a593Smuzhiyun 	 * issue
4205*4882a593Smuzhiyun 	 */
4206*4882a593Smuzhiyun 	t_u64 average_tsf_offset;
4207*4882a593Smuzhiyun 	/** indicate that this AP typically leaks packets beyond the driver
4208*4882a593Smuzhiyun 	 * guard time */
4209*4882a593Smuzhiyun 	t_u32 leaky_ap_detected;
4210*4882a593Smuzhiyun 	/** average number of frame leaked by AP after frame with PM bit set was
4211*4882a593Smuzhiyun 	 * ACK'ed by AP */
4212*4882a593Smuzhiyun 	t_u32 leaky_ap_avg_num_frames_leaked;
4213*4882a593Smuzhiyun 	/** Guard time currently in force (when implementing IEEE power
4214*4882a593Smuzhiyun 	 * management based on frame control PM bit), How long driver waits
4215*4882a593Smuzhiyun 	 * before shutting down the radio and after receiving an ACK for a data
4216*4882a593Smuzhiyun 	 * frame with PM bit set)
4217*4882a593Smuzhiyun 	 */
4218*4882a593Smuzhiyun 	t_u32 leaky_ap_guard_time;
4219*4882a593Smuzhiyun 	/** access point mgmt frames received count from connected AP (including
4220*4882a593Smuzhiyun 	 * Beacon) */
4221*4882a593Smuzhiyun 	t_u32 mgmt_rx;
4222*4882a593Smuzhiyun 	/** action frames received count */
4223*4882a593Smuzhiyun 	t_u32 mgmt_action_rx;
4224*4882a593Smuzhiyun 	/** action frames transmit count */
4225*4882a593Smuzhiyun 	t_u32 mgmt_action_tx;
4226*4882a593Smuzhiyun 	/** access Point Beacon and Management frames RSSI (averaged) */
4227*4882a593Smuzhiyun 	t_u32 rssi_mgmt;
4228*4882a593Smuzhiyun 	/** access Point Data Frames RSSI (averaged) from connected AP */
4229*4882a593Smuzhiyun 	t_u32 rssi_data;
4230*4882a593Smuzhiyun 	/** access Point ACK RSSI (averaged) from connected AP */
4231*4882a593Smuzhiyun 	t_u32 rssi_ack;
4232*4882a593Smuzhiyun 	/** per ac data packet statistics */
4233*4882a593Smuzhiyun 	mlan_wifi_wmm_ac_stat ac[MAX_AC_QUEUES];
4234*4882a593Smuzhiyun 	/** number of peers */
4235*4882a593Smuzhiyun 	t_u32 num_peers;
4236*4882a593Smuzhiyun 	/** per peer statistics */
4237*4882a593Smuzhiyun 	mlan_wifi_peer_info peer_info[];
4238*4882a593Smuzhiyun } MLAN_PACK_END mlan_wifi_iface_stat;
4239*4882a593Smuzhiyun 
4240*4882a593Smuzhiyun /** MrvlIETypes_llStatIface_t */
4241*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIETypes_llStatIface_t {
4242*4882a593Smuzhiyun 	/** Type */
4243*4882a593Smuzhiyun 	t_u16 type;
4244*4882a593Smuzhiyun 	/** Length */
4245*4882a593Smuzhiyun 	t_u16 len;
4246*4882a593Smuzhiyun 	/** Frame Control */
4247*4882a593Smuzhiyun 	mlan_wifi_iface_stat ifaceStat;
4248*4882a593Smuzhiyun 	/* t_u8 frame_contents[]; */
4249*4882a593Smuzhiyun } MLAN_PACK_END MrvlIETypes_llStatIface_t;
4250*4882a593Smuzhiyun 
4251*4882a593Smuzhiyun /** MrvlIETypes_llStatRadio_t */
4252*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIETypes_llStatRadio_t {
4253*4882a593Smuzhiyun 	/** Type */
4254*4882a593Smuzhiyun 	t_u16 type;
4255*4882a593Smuzhiyun 	/** Length */
4256*4882a593Smuzhiyun 	t_u16 len;
4257*4882a593Smuzhiyun 	/** Frame Control */
4258*4882a593Smuzhiyun 	mlan_wifi_radio_stat radioStat[MAX_RADIO];
4259*4882a593Smuzhiyun 	/* t_u8 frame_contents[]; */
4260*4882a593Smuzhiyun } MLAN_PACK_END MrvlIETypes_llStatRadio_t;
4261*4882a593Smuzhiyun 
4262*4882a593Smuzhiyun #define TYPE_IFACE_STAT MBIT(0)
4263*4882a593Smuzhiyun #define TYPE_RADIO_STAT MBIT(1)
4264*4882a593Smuzhiyun #define TYPE_PEER_INFO MBIT(2)
4265*4882a593Smuzhiyun /** HostCmd_DS_802_11_LINK_STATISTIC */
4266*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_LINK_STATISTIC {
4267*4882a593Smuzhiyun 	/** Action : HostCmd_ACT_GEN_GET/SET/REMOVE */
4268*4882a593Smuzhiyun 	t_u16 action;
4269*4882a593Smuzhiyun 	/** statistic which would be get in action HostCmd_ACT_GEN_GET :
4270*4882a593Smuzhiyun 	 * TYPE_IFACE_STAT/RADIO_STAT/PEER_INFO */
4271*4882a593Smuzhiyun 	t_u16 stat_type;
4272*4882a593Smuzhiyun 	/* threshold to classify the pkts as short or long, packet size <
4273*4882a593Smuzhiyun 	 * mpdu_size_threshold => short */
4274*4882a593Smuzhiyun 	t_u32 mpdu_size_threshold;
4275*4882a593Smuzhiyun 	/* set for field debug mode. Driver should collect all statistics
4276*4882a593Smuzhiyun 	 * regardless of performance impact. */
4277*4882a593Smuzhiyun 	t_u32 aggressive_statistics_gathering;
4278*4882a593Smuzhiyun 	/** Value */
4279*4882a593Smuzhiyun 	t_u8 value[];
4280*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_LINK_STATISTIC;
4281*4882a593Smuzhiyun 
4282*4882a593Smuzhiyun /**_HostCmd_TX_RATE_QUERY */
4283*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_TX_RATE_QUERY {
4284*4882a593Smuzhiyun 	/** Tx rate */
4285*4882a593Smuzhiyun 	t_u8 tx_rate;
4286*4882a593Smuzhiyun 	/** V14 FW: Ht Info
4287*4882a593Smuzhiyun 	 * [Bit 0] RxRate format: LG=0, HT=1
4288*4882a593Smuzhiyun 	 * [Bit 1] HT Bandwidth: BW20 = 0, BW40 = 1
4289*4882a593Smuzhiyun 	 * [Bit 2] HT Guard Interval: LGI = 0, SGI = 1 */
4290*4882a593Smuzhiyun 	/** Tx Rate Info:
4291*4882a593Smuzhiyun 	 * [Bit 0-1] tx rate formate: LG = 0, HT = 1, VHT = 2
4292*4882a593Smuzhiyun 	 * [Bit 2-3] HT/VHT Bandwidth: BW20 = 0, BW40 = 1, BW80 = 2, BW160 = 3
4293*4882a593Smuzhiyun 	 * [Bit 4]   HT/VHT Guard Interval: LGI = 0, SGI = 1
4294*4882a593Smuzhiyun 	 * [Bit4,Bit7] AX Guard Interval: 00, 01, 02 */
4295*4882a593Smuzhiyun 	t_u8 tx_rate_info;
4296*4882a593Smuzhiyun 	/**
4297*4882a593Smuzhiyun 	 * BIT0: DCM
4298*4882a593Smuzhiyun 	 * BIT3-BIT1: tone mode
4299*4882a593Smuzhiyun 	 **  000: 26  tone
4300*4882a593Smuzhiyun 	 **  001: 52  tone
4301*4882a593Smuzhiyun 	 **  010: 106 tone
4302*4882a593Smuzhiyun 	 **  011: 242 tone
4303*4882a593Smuzhiyun 	 **  100: 484 tone
4304*4882a593Smuzhiyun 	 **  101: 996 tone
4305*4882a593Smuzhiyun 	 * BIT7-BIT4: resvd
4306*4882a593Smuzhiyun 	 **/
4307*4882a593Smuzhiyun 	t_u8 ext_tx_rate_info;
4308*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_TX_RATE_QUERY;
4309*4882a593Smuzhiyun 
4310*4882a593Smuzhiyun typedef MLAN_PACK_START struct _hs_config_param {
4311*4882a593Smuzhiyun 	/** bit0=1: broadcast data
4312*4882a593Smuzhiyun 	 * bit1=1: unicast data
4313*4882a593Smuzhiyun 	 * bit2=1: mac events
4314*4882a593Smuzhiyun 	 * bit3=1: multicast data
4315*4882a593Smuzhiyun 	 */
4316*4882a593Smuzhiyun 	t_u32 conditions;
4317*4882a593Smuzhiyun 	/** GPIO pin or 0xff for interface */
4318*4882a593Smuzhiyun 	t_u8 gpio;
4319*4882a593Smuzhiyun 	/** gap in milliseconds or or 0xff for special setting when
4320*4882a593Smuzhiyun 	 *  GPIO is used to wakeup host
4321*4882a593Smuzhiyun 	 */
4322*4882a593Smuzhiyun 	t_u8 gap;
4323*4882a593Smuzhiyun } MLAN_PACK_END hs_config_param;
4324*4882a593Smuzhiyun 
4325*4882a593Smuzhiyun /** HS Action 0x0001 - Configure enhanced host sleep mode,
4326*4882a593Smuzhiyun  * 0x0002 - Activate enhanced host sleep mode
4327*4882a593Smuzhiyun  */
4328*4882a593Smuzhiyun typedef enum _Host_Sleep_Action {
4329*4882a593Smuzhiyun 	HS_CONFIGURE = 0x0001,
4330*4882a593Smuzhiyun 	HS_ACTIVATE = 0x0002,
4331*4882a593Smuzhiyun } Host_Sleep_Action;
4332*4882a593Smuzhiyun 
4333*4882a593Smuzhiyun /** Structure definition for activating enhanced hs */
4334*4882a593Smuzhiyun typedef MLAN_PACK_START struct __hs_activate_param {
4335*4882a593Smuzhiyun 	/** response control 0x00 - response not needed, 0x01 - response needed
4336*4882a593Smuzhiyun 	 */
4337*4882a593Smuzhiyun 	t_u16 resp_ctrl;
4338*4882a593Smuzhiyun } MLAN_PACK_END hs_activate_param;
4339*4882a593Smuzhiyun 
4340*4882a593Smuzhiyun /** HostCmd_DS_802_11_HS_CFG_ENH */
4341*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_HS_CFG_ENH {
4342*4882a593Smuzhiyun 	/** Action 0x0001 - Configure enhanced host sleep mode,
4343*4882a593Smuzhiyun 	 *  0x0002 - Activate enhanced host sleep mode
4344*4882a593Smuzhiyun 	 */
4345*4882a593Smuzhiyun 	t_u16 action;
4346*4882a593Smuzhiyun 
4347*4882a593Smuzhiyun 	union {
4348*4882a593Smuzhiyun 		/** Configure enhanced hs */
4349*4882a593Smuzhiyun 		hs_config_param hs_config;
4350*4882a593Smuzhiyun 		/** Activate enhanced hs */
4351*4882a593Smuzhiyun 		hs_activate_param hs_activate;
4352*4882a593Smuzhiyun 	} params;
4353*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_HS_CFG_ENH;
4354*4882a593Smuzhiyun 
4355*4882a593Smuzhiyun /** HostCmd_CMD_802_11_ROBUSTCOEX */
4356*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_ROBUSTCOEX {
4357*4882a593Smuzhiyun 	/** Action */
4358*4882a593Smuzhiyun 	t_u16 action;
4359*4882a593Smuzhiyun 	/** RSVD */
4360*4882a593Smuzhiyun 	t_u16 rsvd;
4361*4882a593Smuzhiyun 	t_u8 tlv_buf[];
4362*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_ROBUSTCOEX;
4363*4882a593Smuzhiyun 
4364*4882a593Smuzhiyun /** HostCmd_CMD_DMCS_CFG */
4365*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_DMCS_CFG {
4366*4882a593Smuzhiyun 	/** Action */
4367*4882a593Smuzhiyun 	t_u16 action;
4368*4882a593Smuzhiyun 	/** SubCmd of DMCS */
4369*4882a593Smuzhiyun 	t_u16 subcmd;
4370*4882a593Smuzhiyun 	t_u8 tlv_buf[];
4371*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_DMCS_CFG;
4372*4882a593Smuzhiyun 
4373*4882a593Smuzhiyun #if defined(PCIE)
4374*4882a593Smuzhiyun /** HostCmd_CMD_SSU */
4375*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_SSU_CFG {
4376*4882a593Smuzhiyun 	/** Action */
4377*4882a593Smuzhiyun 	t_u16 action;
4378*4882a593Smuzhiyun 	/** # of FFT sample to skip */
4379*4882a593Smuzhiyun 	t_u32 nskip;
4380*4882a593Smuzhiyun 	/** # of FFT sample selected to dump */
4381*4882a593Smuzhiyun 	t_u32 nsel;
4382*4882a593Smuzhiyun 	/** Down sample ADC input for buffering */
4383*4882a593Smuzhiyun 	t_u32 adcdownsample;
4384*4882a593Smuzhiyun 	/** Mask Out ADC Data From Spectral Packet */
4385*4882a593Smuzhiyun 	t_u32 mask_adc_pkt;
4386*4882a593Smuzhiyun 	/** Enable 16-Bit FFT Output Data Precision in Spectral Packet */
4387*4882a593Smuzhiyun 	t_u32 out_16bits;
4388*4882a593Smuzhiyun 	/** Enable power spectrum in dB for spectral packet */
4389*4882a593Smuzhiyun 	t_u32 spec_pwr_enable;
4390*4882a593Smuzhiyun 	/** Enable Spectral Packet Rate Reduction in dB output format */
4391*4882a593Smuzhiyun 	t_u32 rate_deduction;
4392*4882a593Smuzhiyun 	/** # of Spectral packets over which spectral data to be averaged */
4393*4882a593Smuzhiyun 	t_u32 n_pkt_avg;
4394*4882a593Smuzhiyun 	/** ret: Calculated fft length in dw */
4395*4882a593Smuzhiyun 	t_u32 fft_len;
4396*4882a593Smuzhiyun 	/** ret: Calculated adc length in dw */
4397*4882a593Smuzhiyun 	t_u32 adc_len;
4398*4882a593Smuzhiyun 	/** ret: Calculated record length in dw */
4399*4882a593Smuzhiyun 	t_u32 rec_len;
4400*4882a593Smuzhiyun 	/** Mapped address of DMA buffer */
4401*4882a593Smuzhiyun 	t_u32 buffer_base_addr[2];
4402*4882a593Smuzhiyun 	/** Total size of allocated buffer for SSU DMA */
4403*4882a593Smuzhiyun 	t_u32 buffer_pool_size;
4404*4882a593Smuzhiyun 	/** ret: Calculated buffer numbers */
4405*4882a593Smuzhiyun 	t_u32 number_of_buffers;
4406*4882a593Smuzhiyun 	/** ret: Calculated buffer size in byte for each descriptor */
4407*4882a593Smuzhiyun 	t_u32 buffer_size;
4408*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_SSU_CFG;
4409*4882a593Smuzhiyun #endif
4410*4882a593Smuzhiyun 
4411*4882a593Smuzhiyun /** HostCmd_CMD_CSI_START */
4412*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_CSI_CFG {
4413*4882a593Smuzhiyun 	/** Action */
4414*4882a593Smuzhiyun 	t_u16 action;
4415*4882a593Smuzhiyun 	/** Header ID*/
4416*4882a593Smuzhiyun 	t_u32 head_id;
4417*4882a593Smuzhiyun 	/** Tail ID */
4418*4882a593Smuzhiyun 	t_u32 tail_id;
4419*4882a593Smuzhiyun 	/** Number of CSI filters */
4420*4882a593Smuzhiyun 	t_u8 csi_filter_cnt;
4421*4882a593Smuzhiyun 	/** Chip ID */
4422*4882a593Smuzhiyun 	t_u8 chip_id;
4423*4882a593Smuzhiyun 	/** CSI filters */
4424*4882a593Smuzhiyun 	mlan_csi_filter_t csi_filter[CSI_FILTER_MAX];
4425*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_CSI_CFG;
4426*4882a593Smuzhiyun 
4427*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_HAL_PHY_CFG {
4428*4882a593Smuzhiyun 	/** Action */
4429*4882a593Smuzhiyun 	t_u16 action;
4430*4882a593Smuzhiyun 	/** 11b pwr spectral density mask enable/disable */
4431*4882a593Smuzhiyun 	t_u8 dot11b_psd_mask_cfg;
4432*4882a593Smuzhiyun 	/** reserved fields for future hal/phy cfg use */
4433*4882a593Smuzhiyun 	t_u8 reserved[7];
4434*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_HAL_PHY_CFG;
4435*4882a593Smuzhiyun 
4436*4882a593Smuzhiyun /** SNMP_MIB_INDEX */
4437*4882a593Smuzhiyun typedef enum _SNMP_MIB_INDEX {
4438*4882a593Smuzhiyun 	OpRateSet_i = 1,
4439*4882a593Smuzhiyun 	DtimPeriod_i = 3,
4440*4882a593Smuzhiyun 	RtsThresh_i = 5,
4441*4882a593Smuzhiyun 	ShortRetryLim_i = 6,
4442*4882a593Smuzhiyun 	LongRetryLim_i = 7,
4443*4882a593Smuzhiyun 	FragThresh_i = 8,
4444*4882a593Smuzhiyun 	Dot11D_i = 9,
4445*4882a593Smuzhiyun 	Dot11H_i = 10,
4446*4882a593Smuzhiyun 	WwsMode_i = 17,
4447*4882a593Smuzhiyun 	Thermal_i = 34,
4448*4882a593Smuzhiyun 	NullPktPeriod_i = 37,
4449*4882a593Smuzhiyun 	SignalextEnable_i = 41,
4450*4882a593Smuzhiyun 	ECSAEnable_i = 42,
4451*4882a593Smuzhiyun 	StopDeauth_i = 44,
4452*4882a593Smuzhiyun 	Dot11H_fakeRadar = 45,
4453*4882a593Smuzhiyun 	ChanTrackParam_i = 46,
4454*4882a593Smuzhiyun } SNMP_MIB_INDEX;
4455*4882a593Smuzhiyun 
4456*4882a593Smuzhiyun /** max SNMP buf size */
4457*4882a593Smuzhiyun #define MAX_SNMP_BUF_SIZE 128
4458*4882a593Smuzhiyun 
4459*4882a593Smuzhiyun #ifdef UAP_SUPPORT
4460*4882a593Smuzhiyun /**  HostCmd_CMD_802_11_SNMP_MIB */
4461*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_UAP_802_11_SNMP_MIB {
4462*4882a593Smuzhiyun 	/** SNMP query type */
4463*4882a593Smuzhiyun 	t_u16 query_type;
4464*4882a593Smuzhiyun 	/** snmp oid buf */
4465*4882a593Smuzhiyun 	t_u8 snmp_data[];
4466*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_UAP_802_11_SNMP_MIB;
4467*4882a593Smuzhiyun #endif
4468*4882a593Smuzhiyun 
4469*4882a593Smuzhiyun /**  HostCmd_CMD_802_11_SNMP_MIB */
4470*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_SNMP_MIB {
4471*4882a593Smuzhiyun 	/** SNMP query type */
4472*4882a593Smuzhiyun 	t_u16 query_type;
4473*4882a593Smuzhiyun 	/** SNMP object ID */
4474*4882a593Smuzhiyun 	t_u16 oid;
4475*4882a593Smuzhiyun 	/** SNMP buffer size */
4476*4882a593Smuzhiyun 	t_u16 buf_size;
4477*4882a593Smuzhiyun 	/** Value */
4478*4882a593Smuzhiyun 	t_u8 value[1];
4479*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_SNMP_MIB;
4480*4882a593Smuzhiyun 
4481*4882a593Smuzhiyun /** Radio on */
4482*4882a593Smuzhiyun #define RADIO_ON 0x01
4483*4882a593Smuzhiyun /** Radio off */
4484*4882a593Smuzhiyun #define RADIO_OFF 0x00
4485*4882a593Smuzhiyun 
4486*4882a593Smuzhiyun /** HostCmd_CMD_802_11_RADIO_CONTROL */
4487*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_RADIO_CONTROL {
4488*4882a593Smuzhiyun 	/** Action */
4489*4882a593Smuzhiyun 	t_u16 action;
4490*4882a593Smuzhiyun 	/** Control */
4491*4882a593Smuzhiyun 	t_u16 control;
4492*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_RADIO_CONTROL;
4493*4882a593Smuzhiyun 
4494*4882a593Smuzhiyun /** MrvlRateScope_t */
4495*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlRateScope_t {
4496*4882a593Smuzhiyun 	/** Header Type */
4497*4882a593Smuzhiyun 	t_u16 type;
4498*4882a593Smuzhiyun 	/** Header Length */
4499*4882a593Smuzhiyun 	t_u16 length;
4500*4882a593Smuzhiyun 	/** Bitmap of HR/DSSS rates */
4501*4882a593Smuzhiyun 	t_u16 hr_dsss_rate_bitmap;
4502*4882a593Smuzhiyun 	/** Bitmap of OFDM rates */
4503*4882a593Smuzhiyun 	t_u16 ofdm_rate_bitmap;
4504*4882a593Smuzhiyun 	/** Bitmap of HT-MCSs allowed for initial rate */
4505*4882a593Smuzhiyun 	t_u16 ht_mcs_rate_bitmap[8];
4506*4882a593Smuzhiyun 	t_u16 vht_mcs_rate_bitmap[8];
4507*4882a593Smuzhiyun 	t_u16 he_mcs_rate_bitmap[8];
4508*4882a593Smuzhiyun } MLAN_PACK_END MrvlRateScope_t;
4509*4882a593Smuzhiyun 
4510*4882a593Smuzhiyun /** MrvlRateDropPattern_t */
4511*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlRateDropPattern_t {
4512*4882a593Smuzhiyun 	/** Header Type */
4513*4882a593Smuzhiyun 	t_u16 type;
4514*4882a593Smuzhiyun 	/** Header Length */
4515*4882a593Smuzhiyun 	t_u16 length;
4516*4882a593Smuzhiyun 	/** Rate Drop Mode */
4517*4882a593Smuzhiyun 	t_u32 rate_drop_mode;
4518*4882a593Smuzhiyun 	/* MrvlRateDropControl_t RateDropControl[]; */
4519*4882a593Smuzhiyun } MLAN_PACK_END MrvlRateDropPattern_t;
4520*4882a593Smuzhiyun 
4521*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIETypes_rate_setting_t {
4522*4882a593Smuzhiyun 	/** Header */
4523*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
4524*4882a593Smuzhiyun 	/** Rate Setting */
4525*4882a593Smuzhiyun 	t_u16 rate_setting;
4526*4882a593Smuzhiyun } MLAN_PACK_END MrvlIETypes_rate_setting_t;
4527*4882a593Smuzhiyun 
4528*4882a593Smuzhiyun /** HostCmd_DS_TX_RATE_CFG */
4529*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_TX_RATE_CFG {
4530*4882a593Smuzhiyun 	/** Action */
4531*4882a593Smuzhiyun 	t_u16 action;
4532*4882a593Smuzhiyun 	/** V14 FW: cfg_index */
4533*4882a593Smuzhiyun 	/** V15+ FW: reserved_1 */
4534*4882a593Smuzhiyun 	t_u16 cfg_index;
4535*4882a593Smuzhiyun 	/* MrvlRateScope_t RateScope;
4536*4882a593Smuzhiyun 	 * MrvlRateDropPattern_t RateDrop; */
4537*4882a593Smuzhiyun 	t_u8 tlv_buf[];
4538*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_TX_RATE_CFG;
4539*4882a593Smuzhiyun 
4540*4882a593Smuzhiyun /** Power_Group_t */
4541*4882a593Smuzhiyun typedef MLAN_PACK_START struct _Power_Group_t {
4542*4882a593Smuzhiyun 	/** Modulation Class */
4543*4882a593Smuzhiyun 	t_u8 modulation_class;
4544*4882a593Smuzhiyun 	/** MCS Code or Legacy RateID */
4545*4882a593Smuzhiyun 	t_u8 first_rate_code;
4546*4882a593Smuzhiyun 	/** MCS Code or Legacy RateID */
4547*4882a593Smuzhiyun 	t_u8 last_rate_code;
4548*4882a593Smuzhiyun 	/** Power Adjustment Step */
4549*4882a593Smuzhiyun 	t_s8 power_step;
4550*4882a593Smuzhiyun 	/** Minimal Tx Power Level [dBm] */
4551*4882a593Smuzhiyun 	t_s8 power_min;
4552*4882a593Smuzhiyun 	/** Maximal Tx Power Level [dBm] */
4553*4882a593Smuzhiyun 	t_s8 power_max;
4554*4882a593Smuzhiyun 	/** 0: HTBW20, 1: HTBW40 */
4555*4882a593Smuzhiyun 	t_u8 ht_bandwidth;
4556*4882a593Smuzhiyun 	/** Reserved */
4557*4882a593Smuzhiyun 	t_u8 reserved;
4558*4882a593Smuzhiyun } MLAN_PACK_END Power_Group_t;
4559*4882a593Smuzhiyun 
4560*4882a593Smuzhiyun /** MrvlTypes_Power_Group_t */
4561*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlTypes_Power_Group_t {
4562*4882a593Smuzhiyun 	/** Header Type */
4563*4882a593Smuzhiyun 	t_u16 type;
4564*4882a593Smuzhiyun 	/** Header Length */
4565*4882a593Smuzhiyun 	t_u16 length;
4566*4882a593Smuzhiyun 	/* Power_Group_t PowerGroups */
4567*4882a593Smuzhiyun } MLAN_PACK_END MrvlTypes_Power_Group_t;
4568*4882a593Smuzhiyun 
4569*4882a593Smuzhiyun /** HostCmd_CMD_TXPWR_CFG */
4570*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_TXPWR_CFG {
4571*4882a593Smuzhiyun 	/** Action */
4572*4882a593Smuzhiyun 	t_u16 action;
4573*4882a593Smuzhiyun 	/** Power group configuration index */
4574*4882a593Smuzhiyun 	t_u16 cfg_index;
4575*4882a593Smuzhiyun 	/** Power group configuration mode */
4576*4882a593Smuzhiyun 	t_u32 mode;
4577*4882a593Smuzhiyun 	/* MrvlTypes_Power_Group_t PowerGrpCfg[]*/
4578*4882a593Smuzhiyun 	t_u8 tlv_buf[];
4579*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_TXPWR_CFG;
4580*4882a593Smuzhiyun 
4581*4882a593Smuzhiyun /** HostCmd_CMD_802_11_RF_TX_POWER */
4582*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_RF_TX_POWER {
4583*4882a593Smuzhiyun 	/** Action */
4584*4882a593Smuzhiyun 	t_u16 action;
4585*4882a593Smuzhiyun 	/** Current power level */
4586*4882a593Smuzhiyun 	t_s16 current_level;
4587*4882a593Smuzhiyun 	/** Maximum power */
4588*4882a593Smuzhiyun 	t_s8 max_power;
4589*4882a593Smuzhiyun 	/** Minimum power */
4590*4882a593Smuzhiyun 	t_s8 min_power;
4591*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_RF_TX_POWER;
4592*4882a593Smuzhiyun 
4593*4882a593Smuzhiyun /** Connection type infra */
4594*4882a593Smuzhiyun #define CONNECTION_TYPE_INFRA 0
4595*4882a593Smuzhiyun /** Connection type adhoc */
4596*4882a593Smuzhiyun #define CONNECTION_TYPE_ADHOC 1
4597*4882a593Smuzhiyun #ifdef WIFI_DIRECT_SUPPORT
4598*4882a593Smuzhiyun /** BSS Mode: WIFIDIRECT Client */
4599*4882a593Smuzhiyun #define BSS_MODE_WIFIDIRECT_CLIENT 0
4600*4882a593Smuzhiyun /** BSS Mode: WIFIDIRECT GO */
4601*4882a593Smuzhiyun #define BSS_MODE_WIFIDIRECT_GO 2
4602*4882a593Smuzhiyun #endif
4603*4882a593Smuzhiyun /** HostCmd_DS_SET_BSS_MODE */
4604*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_SET_BSS_MODE {
4605*4882a593Smuzhiyun 	/** connection type */
4606*4882a593Smuzhiyun 	t_u8 con_type;
4607*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_SET_BSS_MODE;
4608*4882a593Smuzhiyun 
4609*4882a593Smuzhiyun /** HT Capabilities element */
4610*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIETypes_HTCap_t {
4611*4882a593Smuzhiyun 	/** Header */
4612*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
4613*4882a593Smuzhiyun 
4614*4882a593Smuzhiyun 	/** HTCap struct */
4615*4882a593Smuzhiyun 	HTCap_t ht_cap;
4616*4882a593Smuzhiyun } MLAN_PACK_END MrvlIETypes_HTCap_t;
4617*4882a593Smuzhiyun /** VHT Capabilities element */
4618*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIETypes_VHTCap_t {
4619*4882a593Smuzhiyun 	/** Header */
4620*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
4621*4882a593Smuzhiyun 
4622*4882a593Smuzhiyun 	/** VHTCap struct */
4623*4882a593Smuzhiyun 	VHT_capa_t vht_cap;
4624*4882a593Smuzhiyun } MLAN_PACK_END MrvlIETypes_VHTCap_t;
4625*4882a593Smuzhiyun 
4626*4882a593Smuzhiyun /** HostCmd_DS_REMAIN_ON_CHANNEL */
4627*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_REMAIN_ON_CHANNEL {
4628*4882a593Smuzhiyun 	/** Action 0-GET, 1-SET, 4 CLEAR*/
4629*4882a593Smuzhiyun 	t_u16 action;
4630*4882a593Smuzhiyun 	/** Not used set to zero */
4631*4882a593Smuzhiyun 	t_u8 status;
4632*4882a593Smuzhiyun 	/** Not used set to zero */
4633*4882a593Smuzhiyun 	t_u8 reserved;
4634*4882a593Smuzhiyun 	/** Band cfg */
4635*4882a593Smuzhiyun 	Band_Config_t bandcfg;
4636*4882a593Smuzhiyun 	/** channel */
4637*4882a593Smuzhiyun 	t_u8 channel;
4638*4882a593Smuzhiyun 	/** remain time: Unit ms*/
4639*4882a593Smuzhiyun 	t_u32 remain_period;
4640*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_REMAIN_ON_CHANNEL;
4641*4882a593Smuzhiyun 
4642*4882a593Smuzhiyun #ifdef WIFI_DIRECT_SUPPORT
4643*4882a593Smuzhiyun /** HostCmd_DS_WIFI_DIRECT_MODE */
4644*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_WIFI_DIRECT_MODE {
4645*4882a593Smuzhiyun 	/** Action 0-GET, 1-SET*/
4646*4882a593Smuzhiyun 	t_u16 action;
4647*4882a593Smuzhiyun 	/**0:disable 1:listen 2:GO 3:p2p client 4:find 5:stop find*/
4648*4882a593Smuzhiyun 	t_u16 mode;
4649*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_WIFI_DIRECT_MODE;
4650*4882a593Smuzhiyun 
4651*4882a593Smuzhiyun /** MrvlIEtypes_NoA_setting_t */
4652*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_NoA_setting_t {
4653*4882a593Smuzhiyun 	/** Header */
4654*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
4655*4882a593Smuzhiyun 	/** enable/disable */
4656*4882a593Smuzhiyun 	t_u8 enable;
4657*4882a593Smuzhiyun 	/** index */
4658*4882a593Smuzhiyun 	t_u16 index;
4659*4882a593Smuzhiyun 	/** NoA count */
4660*4882a593Smuzhiyun 	t_u8 noa_count;
4661*4882a593Smuzhiyun 	/** NoA duration */
4662*4882a593Smuzhiyun 	t_u32 noa_duration;
4663*4882a593Smuzhiyun 	/** NoA interval */
4664*4882a593Smuzhiyun 	t_u32 noa_interval;
4665*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_NoA_setting_t;
4666*4882a593Smuzhiyun 
4667*4882a593Smuzhiyun /** MrvlIEtypes_NoA_setting_t */
4668*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_OPP_PS_setting_t {
4669*4882a593Smuzhiyun 	/** Header */
4670*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
4671*4882a593Smuzhiyun 	/** enable/disable && ct_window */
4672*4882a593Smuzhiyun 	t_u8 enable;
4673*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_OPP_PS_setting_t;
4674*4882a593Smuzhiyun 
4675*4882a593Smuzhiyun /** HostCmd_DS_WIFI_DIRECT_PARAM_CONFIG */
4676*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_WIFI_DIRECT_PARAM_CONFIG {
4677*4882a593Smuzhiyun 	/** Action 0-GET, 1-SET */
4678*4882a593Smuzhiyun 	t_u16 action;
4679*4882a593Smuzhiyun 	/** MrvlIEtypes_NoA_setting_t
4680*4882a593Smuzhiyun 	 *  MrvlIEtypes_OPP_PS_setting_t
4681*4882a593Smuzhiyun 	 */
4682*4882a593Smuzhiyun 	t_u8 tlv_buf[];
4683*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_WIFI_DIRECT_PARAM_CONFIG;
4684*4882a593Smuzhiyun #endif
4685*4882a593Smuzhiyun 
4686*4882a593Smuzhiyun /** MrvlIEtypes_GPIO_TSF_LATCH_CONFIG*/
4687*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_GPIO_TSF_LATCH_CONFIG {
4688*4882a593Smuzhiyun 	/** Header */
4689*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
4690*4882a593Smuzhiyun 	/**clock sync Mode */
4691*4882a593Smuzhiyun 	t_u8 clock_sync_mode;
4692*4882a593Smuzhiyun 	/**clock sync Role */
4693*4882a593Smuzhiyun 	t_u8 clock_sync_Role;
4694*4882a593Smuzhiyun 	/**clock sync GPIO Pin Number */
4695*4882a593Smuzhiyun 	t_u8 clock_sync_gpio_pin_number;
4696*4882a593Smuzhiyun 	/**clock sync GPIO Level or Toggle */
4697*4882a593Smuzhiyun 	t_u8 clock_sync_gpio_level_toggle;
4698*4882a593Smuzhiyun 	/**clock sync GPIO Pulse Width */
4699*4882a593Smuzhiyun 	t_u16 clock_sync_gpio_pulse_width;
4700*4882a593Smuzhiyun 
4701*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_GPIO_TSF_LATCH_CONFIG;
4702*4882a593Smuzhiyun 
4703*4882a593Smuzhiyun /** MrvlIEtypes_GPIO_TSF_LATCH_REPORT */
4704*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_GPIO_TSF_LATCH_REPORT {
4705*4882a593Smuzhiyun 	/** Header */
4706*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
4707*4882a593Smuzhiyun 	/**get tsf info format */
4708*4882a593Smuzhiyun 	t_u16 tsf_format;
4709*4882a593Smuzhiyun 	/**tsf info */
4710*4882a593Smuzhiyun 	t_u16 tsf_info;
4711*4882a593Smuzhiyun 	/**tsf */
4712*4882a593Smuzhiyun 	t_u64 tsf;
4713*4882a593Smuzhiyun 	/**Positive or negative offset in microsecond from Beacon TSF to GPIO
4714*4882a593Smuzhiyun 	 * toggle TSF  */
4715*4882a593Smuzhiyun 	t_s32 tsf_offset;
4716*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_GPIO_TSF_LATCH_REPORT;
4717*4882a593Smuzhiyun 
4718*4882a593Smuzhiyun /** HostCmd_DS_GPIO_TSF_LATCH_PARAM_CONFIG */
4719*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_GPIO_TSF_LATCH_PARAM_CONFIG {
4720*4882a593Smuzhiyun 	/** Action 0-GET, 1-SET */
4721*4882a593Smuzhiyun 	t_u16 action;
4722*4882a593Smuzhiyun 	/** MrvlIEtypes_GPIO_TSF_LATCH_CONFIG
4723*4882a593Smuzhiyun 	 *  MrvlIEtypes_GPIO_TSF_LATCH_REPORT
4724*4882a593Smuzhiyun 	 */
4725*4882a593Smuzhiyun 	t_u8 tlv_buf[];
4726*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_GPIO_TSF_LATCH_PARAM_CONFIG;
4727*4882a593Smuzhiyun 
4728*4882a593Smuzhiyun MLAN_PACK_START struct coalesce_filt_field_param {
4729*4882a593Smuzhiyun 	t_u8 operation;
4730*4882a593Smuzhiyun 	t_u8 operand_len;
4731*4882a593Smuzhiyun 	t_u16 offset;
4732*4882a593Smuzhiyun 	t_u8 operand_byte_stream[4];
4733*4882a593Smuzhiyun } MLAN_PACK_END;
4734*4882a593Smuzhiyun 
4735*4882a593Smuzhiyun MLAN_PACK_START struct coalesce_receive_filt_rule {
4736*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
4737*4882a593Smuzhiyun 	t_u8 num_of_fields;
4738*4882a593Smuzhiyun 	t_u8 pkt_type;
4739*4882a593Smuzhiyun 	t_u16 max_coalescing_delay;
4740*4882a593Smuzhiyun 	struct coalesce_filt_field_param params[1];
4741*4882a593Smuzhiyun } MLAN_PACK_END;
4742*4882a593Smuzhiyun 
4743*4882a593Smuzhiyun /** HostCmd_DS_COALESCE_CONFIG */
4744*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_COALESCE_CONFIG {
4745*4882a593Smuzhiyun 	/** Action 0-GET, 1-SET */
4746*4882a593Smuzhiyun 	t_u16 action;
4747*4882a593Smuzhiyun 	t_u16 num_of_rules;
4748*4882a593Smuzhiyun 	struct coalesce_receive_filt_rule rule[1];
4749*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_COALESCE_CONFIG;
4750*4882a593Smuzhiyun 
4751*4882a593Smuzhiyun /** TLV type : FW support max connection TLV */
4752*4882a593Smuzhiyun #define TLV_TYPE_MAX_CONN (PROPRIETARY_TLV_BASE_ID + 0x117) /* 0x0217 */
4753*4882a593Smuzhiyun /** MrvlIEtypes_Max_Conn_t */
4754*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_Max_Conn_t {
4755*4882a593Smuzhiyun 	/** Header */
4756*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
4757*4882a593Smuzhiyun 	/** FW support max P2P connection */
4758*4882a593Smuzhiyun 	t_u8 max_p2p_conn;
4759*4882a593Smuzhiyun 	/** FW support max STA connection */
4760*4882a593Smuzhiyun 	t_u8 max_sta_conn;
4761*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_Max_Conn_t;
4762*4882a593Smuzhiyun 
4763*4882a593Smuzhiyun /** exceed max p2p connection event */
4764*4882a593Smuzhiyun typedef MLAN_PACK_START struct _event_exceed_max_p2p_conn {
4765*4882a593Smuzhiyun 	/** Event ID */
4766*4882a593Smuzhiyun 	t_u16 event_id;
4767*4882a593Smuzhiyun 	/** BSS index number for multiple BSS support */
4768*4882a593Smuzhiyun 	t_u8 bss_index;
4769*4882a593Smuzhiyun 	/** BSS type */
4770*4882a593Smuzhiyun 	t_u8 bss_type;
4771*4882a593Smuzhiyun 	/** When exceed max, the mac address who request p2p connect */
4772*4882a593Smuzhiyun 	t_u8 peer_mac_addr[MLAN_MAC_ADDR_LENGTH];
4773*4882a593Smuzhiyun } MLAN_PACK_END event_exceed_max_p2p_conn;
4774*4882a593Smuzhiyun 
4775*4882a593Smuzhiyun #ifdef STA_SUPPORT
4776*4882a593Smuzhiyun 
4777*4882a593Smuzhiyun /**
4778*4882a593Smuzhiyun  * @brief Structure used internally in the wlan driver to configure a scan.
4779*4882a593Smuzhiyun  *
4780*4882a593Smuzhiyun  * Sent to the command process module to configure the firmware
4781*4882a593Smuzhiyun  *   scan command prepared by wlan_cmd_802_11_scan.
4782*4882a593Smuzhiyun  *
4783*4882a593Smuzhiyun  * @sa wlan_scan_networks
4784*4882a593Smuzhiyun  *
4785*4882a593Smuzhiyun  */
4786*4882a593Smuzhiyun typedef MLAN_PACK_START struct _wlan_scan_cmd_config {
4787*4882a593Smuzhiyun 	/**
4788*4882a593Smuzhiyun 	 *  BSS Type to be sent in the firmware command
4789*4882a593Smuzhiyun 	 *
4790*4882a593Smuzhiyun 	 *  Field can be used to restrict the types of networks returned in the
4791*4882a593Smuzhiyun 	 *    scan.  Valid settings are:
4792*4882a593Smuzhiyun 	 *
4793*4882a593Smuzhiyun 	 *   - MLAN_SCAN_MODE_BSS  (infrastructure)
4794*4882a593Smuzhiyun 	 *   - MLAN_SCAN_MODE_IBSS (adhoc)
4795*4882a593Smuzhiyun 	 *   - MLAN_SCAN_MODE_ANY  (unrestricted, adhoc and infrastructure)
4796*4882a593Smuzhiyun 	 */
4797*4882a593Smuzhiyun 	t_u8 bss_mode;
4798*4882a593Smuzhiyun 
4799*4882a593Smuzhiyun 	/**
4800*4882a593Smuzhiyun 	 *  Specific BSSID used to filter scan results in the firmware
4801*4882a593Smuzhiyun 	 */
4802*4882a593Smuzhiyun 	t_u8 specific_bssid[MLAN_MAC_ADDR_LENGTH];
4803*4882a593Smuzhiyun 
4804*4882a593Smuzhiyun 	/**
4805*4882a593Smuzhiyun 	 *  Length of TLVs sent in command starting at tlvBuffer
4806*4882a593Smuzhiyun 	 */
4807*4882a593Smuzhiyun 	t_u32 tlv_buf_len;
4808*4882a593Smuzhiyun 
4809*4882a593Smuzhiyun 	/**
4810*4882a593Smuzhiyun 	 *  SSID TLV(s) and ChanList TLVs to be sent in the firmware command
4811*4882a593Smuzhiyun 	 *
4812*4882a593Smuzhiyun 	 *  TLV_TYPE_CHANLIST, MrvlIEtypes_ChanListParamSet_t
4813*4882a593Smuzhiyun 	 *  TLV_TYPE_SSID, MrvlIEtypes_SsIdParamSet_t
4814*4882a593Smuzhiyun 	 */
4815*4882a593Smuzhiyun 	t_u8 tlv_buf[1]; /* SSID TLV(s) and ChanList TLVs are stored here */
4816*4882a593Smuzhiyun } MLAN_PACK_END wlan_scan_cmd_config;
4817*4882a593Smuzhiyun 
4818*4882a593Smuzhiyun /**
4819*4882a593Smuzhiyun  *  Sructure to retrieve the scan table
4820*4882a593Smuzhiyun  */
4821*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
4822*4882a593Smuzhiyun 	/**
4823*4882a593Smuzhiyun 	 *  - Zero based scan entry to start retrieval in command request
4824*4882a593Smuzhiyun 	 *  - Number of scans entries returned in command response
4825*4882a593Smuzhiyun 	 */
4826*4882a593Smuzhiyun 	t_u32 scan_number;
4827*4882a593Smuzhiyun 	/**
4828*4882a593Smuzhiyun 	 * Buffer marker for multiple wlan_ioctl_get_scan_table_entry
4829*4882a593Smuzhiyun 	 * structures. Each struct is padded to the nearest 32 bit boundary.
4830*4882a593Smuzhiyun 	 */
4831*4882a593Smuzhiyun 	t_u8 scan_table_entry_buf[1];
4832*4882a593Smuzhiyun } MLAN_PACK_END wlan_get_scan_table_info;
4833*4882a593Smuzhiyun 
4834*4882a593Smuzhiyun /** Generic structure defined for parsing WPA/RSN IEs for GTK/PTK OUIs */
4835*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
4836*4882a593Smuzhiyun 	/** Group key oui */
4837*4882a593Smuzhiyun 	t_u8 GrpKeyOui[4];
4838*4882a593Smuzhiyun 	/** Number of PTKs */
4839*4882a593Smuzhiyun 	t_u8 PtkCnt[2];
4840*4882a593Smuzhiyun 	/** Ptk body starts here */
4841*4882a593Smuzhiyun 	t_u8 PtkBody[4];
4842*4882a593Smuzhiyun } MLAN_PACK_END IEBody;
4843*4882a593Smuzhiyun #endif /* STA_SUPPORT */
4844*4882a593Smuzhiyun 
4845*4882a593Smuzhiyun /*
4846*4882a593Smuzhiyun  * This scan handle Country Information IE(802.11d compliant)
4847*4882a593Smuzhiyun  * Define data structure for HostCmd_CMD_802_11_SCAN
4848*4882a593Smuzhiyun  */
4849*4882a593Smuzhiyun /** HostCmd_DS_802_11_SCAN */
4850*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_SCAN {
4851*4882a593Smuzhiyun 	/** BSS mode */
4852*4882a593Smuzhiyun 	t_u8 bss_mode;
4853*4882a593Smuzhiyun 	/** BSSID */
4854*4882a593Smuzhiyun 	t_u8 bssid[MLAN_MAC_ADDR_LENGTH];
4855*4882a593Smuzhiyun 	/** TLV buffer */
4856*4882a593Smuzhiyun 	t_u8 tlv_buffer[1];
4857*4882a593Smuzhiyun 	/** MrvlIEtypes_SsIdParamSet_t      SsIdParamSet;
4858*4882a593Smuzhiyun 	 *  MrvlIEtypes_ChanListParamSet_t  ChanListParamSet;
4859*4882a593Smuzhiyun 	 *  MrvlIEtypes_RatesParamSet_t     OpRateSet;
4860*4882a593Smuzhiyun 	 */
4861*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_SCAN;
4862*4882a593Smuzhiyun 
4863*4882a593Smuzhiyun /** fw_cap_info bit to indicate enhance ext scan type */
4864*4882a593Smuzhiyun #define ENHANCE_EXT_SCAN_ENABLE MBIT(19)
4865*4882a593Smuzhiyun /** mlan_event_scan_result data structure */
4866*4882a593Smuzhiyun typedef MLAN_PACK_START struct _mlan_event_scan_result {
4867*4882a593Smuzhiyun 	/** Event ID */
4868*4882a593Smuzhiyun 	t_u16 event_id;
4869*4882a593Smuzhiyun 	/** BSS index number for multiple BSS support */
4870*4882a593Smuzhiyun 	t_u8 bss_index;
4871*4882a593Smuzhiyun 	/** BSS type */
4872*4882a593Smuzhiyun 	t_u8 bss_type;
4873*4882a593Smuzhiyun 	/** More event available or not */
4874*4882a593Smuzhiyun 	t_u8 more_event;
4875*4882a593Smuzhiyun 	/** Reserved */
4876*4882a593Smuzhiyun 	t_u8 reserved[3];
4877*4882a593Smuzhiyun 	/** Size of the response buffer */
4878*4882a593Smuzhiyun 	t_u16 buf_size;
4879*4882a593Smuzhiyun 	/** Number of BSS in scan response */
4880*4882a593Smuzhiyun 	t_u8 num_of_set;
4881*4882a593Smuzhiyun } MLAN_PACK_END mlan_event_scan_result, *pmlan_event_scan_result;
4882*4882a593Smuzhiyun 
4883*4882a593Smuzhiyun /** ext scan status report event */
4884*4882a593Smuzhiyun typedef MLAN_PACK_START struct _mlan_event_scan_status {
4885*4882a593Smuzhiyun 	/** Event ID */
4886*4882a593Smuzhiyun 	t_u16 event_id;
4887*4882a593Smuzhiyun 	/** BSS index number for multiple BSS support */
4888*4882a593Smuzhiyun 	t_u8 bss_index;
4889*4882a593Smuzhiyun 	/** BSS type */
4890*4882a593Smuzhiyun 	t_u8 bss_type;
4891*4882a593Smuzhiyun 	/** scan status */
4892*4882a593Smuzhiyun 	t_u8 scan_status;
4893*4882a593Smuzhiyun 	/** result */
4894*4882a593Smuzhiyun 	t_u16 buf_len;
4895*4882a593Smuzhiyun 	/** event buf */
4896*4882a593Smuzhiyun 	t_u8 event_buf[];
4897*4882a593Smuzhiyun } MLAN_PACK_END mlan_event_scan_status, *pmlan_event_scan_status;
4898*4882a593Smuzhiyun 
4899*4882a593Smuzhiyun /*
4900*4882a593Smuzhiyun  * This scan handle Country Information IE(802.11d compliant)
4901*4882a593Smuzhiyun  * Define data structure for HostCmd_CMD_802_11_SCAN_EXT
4902*4882a593Smuzhiyun  */
4903*4882a593Smuzhiyun /** HostCmd_DS_802_11_SCAN_EXT */
4904*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_SCAN_EXT {
4905*4882a593Smuzhiyun 	/** Scan type for ext scan
4906*4882a593Smuzhiyun 	 *  0: default type: cmd resp after ext scan report event
4907*4882a593Smuzhiyun 	 *  1: enhanced type: cmd resp before ext scan report event
4908*4882a593Smuzhiyun 	 *  2: scan cancelled: cancel scan during scan processing
4909*4882a593Smuzhiyun 	 */
4910*4882a593Smuzhiyun 	t_u8 ext_scan_type;
4911*4882a593Smuzhiyun 	/** Reserved */
4912*4882a593Smuzhiyun 	t_u8 reserved[3];
4913*4882a593Smuzhiyun 	/** TLV buffer */
4914*4882a593Smuzhiyun 	t_u8 tlv_buffer[1];
4915*4882a593Smuzhiyun 	/** MrvlIEtypes_Bssid_List_t            BssIdList;
4916*4882a593Smuzhiyun 	 *  MrvlIEtypes_SsIdParamSet_t          SSIDParamSet;
4917*4882a593Smuzhiyun 	 *  MrvlIEtypes_ChanListParamSet_t      ChanListParamSet;
4918*4882a593Smuzhiyun 	 *  MrvlIEtypes_RatesParamSet_t         OpRateSet;
4919*4882a593Smuzhiyun 	 *  MrvlIEtypes_NumProbes_t             NumProbes;
4920*4882a593Smuzhiyun 	 *  MrvlIEtypes_WildCardSsIdParamSet_t  WildCardSSIDParamSet;
4921*4882a593Smuzhiyun 	 *  MrvlIEtypes_BssMode_t               BssMode;
4922*4882a593Smuzhiyun 	 */
4923*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_SCAN_EXT;
4924*4882a593Smuzhiyun 
4925*4882a593Smuzhiyun /** MrvlIEtypes_BssMode */
4926*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_BssMode_t {
4927*4882a593Smuzhiyun 	/** Header */
4928*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
4929*4882a593Smuzhiyun 	/* INFRA/IBSS/AUTO */
4930*4882a593Smuzhiyun 	t_u8 bss_mode;
4931*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_BssMode_t;
4932*4882a593Smuzhiyun 
4933*4882a593Smuzhiyun /** BSS scan Rsp */
4934*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_Bss_Scan_Rsp_t {
4935*4882a593Smuzhiyun 	/** Header */
4936*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
4937*4882a593Smuzhiyun 	/** BSSID of the BSS descriptor */
4938*4882a593Smuzhiyun 	t_u8 bssid[MLAN_MAC_ADDR_LENGTH];
4939*4882a593Smuzhiyun 	/** Beacon/Probe response buffer */
4940*4882a593Smuzhiyun 	t_u8 frame_body[1];
4941*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_Bss_Scan_Rsp_t;
4942*4882a593Smuzhiyun 
4943*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_Bss_Scan_Info_t {
4944*4882a593Smuzhiyun 	/** Header */
4945*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
4946*4882a593Smuzhiyun 	/** RSSI for scan entry */
4947*4882a593Smuzhiyun 	t_s16 rssi;
4948*4882a593Smuzhiyun 	/** Channel ANPI */
4949*4882a593Smuzhiyun 	t_s16 anpi;
4950*4882a593Smuzhiyun 	/** Channel load (parts per 255) */
4951*4882a593Smuzhiyun 	t_u8 cca_busy_fraction;
4952*4882a593Smuzhiyun 	/** Band */
4953*4882a593Smuzhiyun 	Band_Config_t bandcfg;
4954*4882a593Smuzhiyun 	/** Channel */
4955*4882a593Smuzhiyun 	t_u8 channel;
4956*4882a593Smuzhiyun 	/** Reserved */
4957*4882a593Smuzhiyun 	t_u8 reserved;
4958*4882a593Smuzhiyun 	/** TSF data */
4959*4882a593Smuzhiyun 	t_u64 tsf;
4960*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_Bss_Scan_Info_t;
4961*4882a593Smuzhiyun 
4962*4882a593Smuzhiyun /** HostCmd_DS_RX_MGMT_IND */
4963*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_RX_MGMT_IND {
4964*4882a593Smuzhiyun 	/** Action */
4965*4882a593Smuzhiyun 	t_u16 action;
4966*4882a593Smuzhiyun 	/** Mgmt frame subtype mask */
4967*4882a593Smuzhiyun 	t_u32 mgmt_subtype_mask;
4968*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_RX_MGMT_IND;
4969*4882a593Smuzhiyun 
4970*4882a593Smuzhiyun /** HostCmd_DS_802_11_SCAN_RSP */
4971*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_SCAN_RSP {
4972*4882a593Smuzhiyun 	/** Size of BSS descriptor */
4973*4882a593Smuzhiyun 	t_u16 bss_descript_size;
4974*4882a593Smuzhiyun 	/** Numner of sets */
4975*4882a593Smuzhiyun 	t_u8 number_of_sets;
4976*4882a593Smuzhiyun 	/** BSS descriptor and TLV buffer */
4977*4882a593Smuzhiyun 	t_u8 bss_desc_and_tlv_buffer[1];
4978*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_SCAN_RSP;
4979*4882a593Smuzhiyun 
4980*4882a593Smuzhiyun /** HostCmd_DS_802_11_BG_SCAN_CONFIG */
4981*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_BG_SCAN_CONFIG {
4982*4882a593Smuzhiyun 	/** action */
4983*4882a593Smuzhiyun 	t_u16 action;
4984*4882a593Smuzhiyun 	/** 0: disable, 1: enable */
4985*4882a593Smuzhiyun 	t_u8 enable;
4986*4882a593Smuzhiyun 	/** bss type */
4987*4882a593Smuzhiyun 	t_u8 bss_type;
4988*4882a593Smuzhiyun 	/** num of channel per scan */
4989*4882a593Smuzhiyun 	t_u8 chan_per_scan;
4990*4882a593Smuzhiyun 	/** reserved field */
4991*4882a593Smuzhiyun 	t_u8 reserved;
4992*4882a593Smuzhiyun 	/** reserved field */
4993*4882a593Smuzhiyun 	t_u16 reserved1;
4994*4882a593Smuzhiyun 	/** interval between consecutive scans */
4995*4882a593Smuzhiyun 	t_u32 scan_interval;
4996*4882a593Smuzhiyun 	/** reserved field */
4997*4882a593Smuzhiyun 	t_u32 reserved2;
4998*4882a593Smuzhiyun 	/** condition to trigger report to host */
4999*4882a593Smuzhiyun 	t_u32 report_condition;
5000*4882a593Smuzhiyun 	/** reserved field */
5001*4882a593Smuzhiyun 	t_u16 reserved3;
5002*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_BG_SCAN_CONFIG;
5003*4882a593Smuzhiyun 
5004*4882a593Smuzhiyun /** HostCmd_DS_802_11_BG_SCAN_QUERY */
5005*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_BG_SCAN_QUERY {
5006*4882a593Smuzhiyun 	/** Flush */
5007*4882a593Smuzhiyun 	t_u8 flush;
5008*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_BG_SCAN_QUERY;
5009*4882a593Smuzhiyun 
5010*4882a593Smuzhiyun /** HostCmd_DS_802_11_BG_SCAN_QUERY_RSP */
5011*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_BG_SCAN_QUERY_RSP {
5012*4882a593Smuzhiyun 	/** Report condition */
5013*4882a593Smuzhiyun 	t_u32 report_condition;
5014*4882a593Smuzhiyun 	/** Scan response */
5015*4882a593Smuzhiyun 	HostCmd_DS_802_11_SCAN_RSP scan_resp;
5016*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_BG_SCAN_QUERY_RSP;
5017*4882a593Smuzhiyun 
5018*4882a593Smuzhiyun /** MrvlIEtypes_StartLater_t */
5019*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_StartLater_t {
5020*4882a593Smuzhiyun 	/** Header */
5021*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5022*4882a593Smuzhiyun 	/* 0 - BGScan start immediately, 1 - BGScan will start later after "Scan
5023*4882a593Smuzhiyun 	 * Interval" */
5024*4882a593Smuzhiyun 	t_u16 value;
5025*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_StartLater_t;
5026*4882a593Smuzhiyun 
5027*4882a593Smuzhiyun /** MrvlIEtypes_RepeatCount_t */
5028*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_RepeatCount_t {
5029*4882a593Smuzhiyun 	/** Header */
5030*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5031*4882a593Smuzhiyun 	/* Repeat count */
5032*4882a593Smuzhiyun 	t_u16 repeat_count;
5033*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_RepeatCount_t;
5034*4882a593Smuzhiyun 
5035*4882a593Smuzhiyun /** MrvlIEtypes_DomainParamSet_t */
5036*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_DomainParamSet {
5037*4882a593Smuzhiyun 	/** Header */
5038*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5039*4882a593Smuzhiyun 	/** Country code */
5040*4882a593Smuzhiyun 	t_u8 country_code[COUNTRY_CODE_LEN];
5041*4882a593Smuzhiyun 	/** Set of subbands */
5042*4882a593Smuzhiyun 	IEEEtypes_SubbandSet_t sub_band[1];
5043*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_DomainParamSet_t;
5044*4882a593Smuzhiyun 
5045*4882a593Smuzhiyun /** HostCmd_DS_802_11D_DOMAIN_INFO */
5046*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11D_DOMAIN_INFO {
5047*4882a593Smuzhiyun 	/** Action */
5048*4882a593Smuzhiyun 	t_u16 action;
5049*4882a593Smuzhiyun 	/** Domain parameter set */
5050*4882a593Smuzhiyun 	MrvlIEtypes_DomainParamSet_t domain;
5051*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11D_DOMAIN_INFO;
5052*4882a593Smuzhiyun 
5053*4882a593Smuzhiyun /** HostCmd_DS_802_11D_DOMAIN_INFO_RSP */
5054*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11D_DOMAIN_INFO_RSP {
5055*4882a593Smuzhiyun 	/** Action */
5056*4882a593Smuzhiyun 	t_u16 action;
5057*4882a593Smuzhiyun 	/** Domain parameter set */
5058*4882a593Smuzhiyun 	MrvlIEtypes_DomainParamSet_t domain;
5059*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11D_DOMAIN_INFO_RSP;
5060*4882a593Smuzhiyun 
5061*4882a593Smuzhiyun /** HostCmd_DS_11N_ADDBA_REQ */
5062*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_11N_ADDBA_REQ {
5063*4882a593Smuzhiyun 	/** Result of the ADDBA Request Operation */
5064*4882a593Smuzhiyun 	t_u8 add_req_result;
5065*4882a593Smuzhiyun 	/** Peer MAC address */
5066*4882a593Smuzhiyun 	t_u8 peer_mac_addr[MLAN_MAC_ADDR_LENGTH];
5067*4882a593Smuzhiyun 	/** Dialog Token */
5068*4882a593Smuzhiyun 	t_u8 dialog_token;
5069*4882a593Smuzhiyun 	/** Block Ack Parameter Set */
5070*4882a593Smuzhiyun 	t_u16 block_ack_param_set;
5071*4882a593Smuzhiyun 	/** Block Act Timeout Value */
5072*4882a593Smuzhiyun 	t_u16 block_ack_tmo;
5073*4882a593Smuzhiyun 	/** Starting Sequence Number */
5074*4882a593Smuzhiyun 	t_u16 ssn;
5075*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_11N_ADDBA_REQ;
5076*4882a593Smuzhiyun 
5077*4882a593Smuzhiyun /** HostCmd_DS_11N_ADDBA_RSP */
5078*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_11N_ADDBA_RSP {
5079*4882a593Smuzhiyun 	/** Result of the ADDBA Response Operation */
5080*4882a593Smuzhiyun 	t_u8 add_rsp_result;
5081*4882a593Smuzhiyun 	/** Peer MAC address */
5082*4882a593Smuzhiyun 	t_u8 peer_mac_addr[MLAN_MAC_ADDR_LENGTH];
5083*4882a593Smuzhiyun 	/** Dialog Token */
5084*4882a593Smuzhiyun 	t_u8 dialog_token;
5085*4882a593Smuzhiyun 	/** Status Code */
5086*4882a593Smuzhiyun 	t_u16 status_code;
5087*4882a593Smuzhiyun 	/** Block Ack Parameter Set */
5088*4882a593Smuzhiyun 	t_u16 block_ack_param_set;
5089*4882a593Smuzhiyun 	/** Block Act Timeout Value */
5090*4882a593Smuzhiyun 	t_u16 block_ack_tmo;
5091*4882a593Smuzhiyun 	/** Starting Sequence Number */
5092*4882a593Smuzhiyun 	t_u16 ssn;
5093*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_11N_ADDBA_RSP;
5094*4882a593Smuzhiyun 
5095*4882a593Smuzhiyun /** HostCmd_DS_11N_DELBA */
5096*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_11N_DELBA {
5097*4882a593Smuzhiyun 	/** Result of the ADDBA Request Operation */
5098*4882a593Smuzhiyun 	t_u8 del_result;
5099*4882a593Smuzhiyun 	/** Peer MAC address */
5100*4882a593Smuzhiyun 	t_u8 peer_mac_addr[MLAN_MAC_ADDR_LENGTH];
5101*4882a593Smuzhiyun 	/** Delete Block Ack Parameter Set */
5102*4882a593Smuzhiyun 	t_u16 del_ba_param_set;
5103*4882a593Smuzhiyun 	/** Reason Code sent for DELBA */
5104*4882a593Smuzhiyun 	t_u16 reason_code;
5105*4882a593Smuzhiyun 	/** Reserved */
5106*4882a593Smuzhiyun 	t_u8 reserved;
5107*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_11N_DELBA;
5108*4882a593Smuzhiyun 
5109*4882a593Smuzhiyun /** HostCmd_DS_11N_BATIMEOUT */
5110*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_11N_BATIMEOUT {
5111*4882a593Smuzhiyun 	/** TID */
5112*4882a593Smuzhiyun 	t_u8 tid;
5113*4882a593Smuzhiyun 	/** Peer MAC address */
5114*4882a593Smuzhiyun 	t_u8 peer_mac_addr[MLAN_MAC_ADDR_LENGTH];
5115*4882a593Smuzhiyun 	/** Delete Block Ack Parameter Set */
5116*4882a593Smuzhiyun 	t_u8 origninator;
5117*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_11N_BATIMEOUT;
5118*4882a593Smuzhiyun 
5119*4882a593Smuzhiyun /** HostCmd_DS_11N_CFG */
5120*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_11N_CFG {
5121*4882a593Smuzhiyun 	/** Action */
5122*4882a593Smuzhiyun 	t_u16 action;
5123*4882a593Smuzhiyun 	/** HTTxCap */
5124*4882a593Smuzhiyun 	t_u16 ht_tx_cap;
5125*4882a593Smuzhiyun 	/** HTTxInfo */
5126*4882a593Smuzhiyun 	t_u16 ht_tx_info;
5127*4882a593Smuzhiyun 	/** Misc configuration */
5128*4882a593Smuzhiyun 	t_u16 misc_config;
5129*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_11N_CFG;
5130*4882a593Smuzhiyun 
5131*4882a593Smuzhiyun /** HostCmd_DS_11N_CFG */
5132*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_REJECT_ADDBA_REQ {
5133*4882a593Smuzhiyun 	/** Action */
5134*4882a593Smuzhiyun 	t_u16 action;
5135*4882a593Smuzhiyun 	/** Bit0    : host sleep activated
5136*4882a593Smuzhiyun 	 *  Bit1    : auto reconnect enabled
5137*4882a593Smuzhiyun 	 *  Others  : reserved
5138*4882a593Smuzhiyun 	 */
5139*4882a593Smuzhiyun 	t_u32 conditions;
5140*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_REJECT_ADDBA_REQ;
5141*4882a593Smuzhiyun 
5142*4882a593Smuzhiyun /** HostCmd_DS_TXBUF_CFG*/
5143*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_TXBUF_CFG {
5144*4882a593Smuzhiyun 	/** Action */
5145*4882a593Smuzhiyun 	t_u16 action;
5146*4882a593Smuzhiyun 	/** Buffer Size */
5147*4882a593Smuzhiyun 	t_u16 buff_size;
5148*4882a593Smuzhiyun 	/** End Port_for Multiport */
5149*4882a593Smuzhiyun 	t_u16 mp_end_port;
5150*4882a593Smuzhiyun 	/** Reserved */
5151*4882a593Smuzhiyun 	t_u16 reserved3;
5152*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_TXBUF_CFG;
5153*4882a593Smuzhiyun 
5154*4882a593Smuzhiyun /** HostCmd_DS_AMSDU_AGGR_CTRL */
5155*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_AMSDU_AGGR_CTRL {
5156*4882a593Smuzhiyun 	/** Action */
5157*4882a593Smuzhiyun 	t_u16 action;
5158*4882a593Smuzhiyun 	/** Enable */
5159*4882a593Smuzhiyun 	t_u16 enable;
5160*4882a593Smuzhiyun 	/** Get the current Buffer Size valid */
5161*4882a593Smuzhiyun 	t_u16 curr_buf_size;
5162*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_AMSDU_AGGR_CTRL;
5163*4882a593Smuzhiyun 
5164*4882a593Smuzhiyun /** HostCmd_DS_11AC_CFG */
5165*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_11AC_CFG {
5166*4882a593Smuzhiyun 	/** Action */
5167*4882a593Smuzhiyun 	t_u16 action;
5168*4882a593Smuzhiyun 	/** BandConfig */
5169*4882a593Smuzhiyun 	t_u8 band_config;
5170*4882a593Smuzhiyun 	/** Misc Configuration */
5171*4882a593Smuzhiyun 	t_u8 misc_config;
5172*4882a593Smuzhiyun 	/** VHT Capability Info */
5173*4882a593Smuzhiyun 	t_u32 vht_cap_info;
5174*4882a593Smuzhiyun 	/** VHT Support MCS Set */
5175*4882a593Smuzhiyun 	t_u8 vht_supp_mcs_set[VHT_MCS_SET_LEN];
5176*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_11AC_CFG;
5177*4882a593Smuzhiyun 
5178*4882a593Smuzhiyun /** HostCmd_DS_11ACTXBUF_CFG*/
5179*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_11ACTXBUF_CFG {
5180*4882a593Smuzhiyun 	/** Action */
5181*4882a593Smuzhiyun 	t_u16 action;
5182*4882a593Smuzhiyun 	/** Buffer Size */
5183*4882a593Smuzhiyun 	t_u16 buff_size;
5184*4882a593Smuzhiyun 	/** End Port_for Multiport */
5185*4882a593Smuzhiyun 	t_u16 mp_end_port;
5186*4882a593Smuzhiyun 	/** Reserved */
5187*4882a593Smuzhiyun 	t_u16 reserved3;
5188*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_11ACTXBUF_CFG;
5189*4882a593Smuzhiyun 
5190*4882a593Smuzhiyun /** HostCmd_DS_11AX_CFG */
5191*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_11AX_CFG {
5192*4882a593Smuzhiyun 	/** Action */
5193*4882a593Smuzhiyun 	t_u16 action;
5194*4882a593Smuzhiyun 	/** BandConfig */
5195*4882a593Smuzhiyun 	t_u8 band_config;
5196*4882a593Smuzhiyun 	/** TLV for HE capability or HE operation */
5197*4882a593Smuzhiyun 	t_u8 val[];
5198*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_11AX_CFG;
5199*4882a593Smuzhiyun 
5200*4882a593Smuzhiyun /** HostCmd_DS_11AX_CMD_CFG */
5201*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_11AX_CMD_CFG {
5202*4882a593Smuzhiyun 	/** Action */
5203*4882a593Smuzhiyun 	t_u16 action;
5204*4882a593Smuzhiyun 	/** CMD_SUBID */
5205*4882a593Smuzhiyun 	t_u16 sub_id;
5206*4882a593Smuzhiyun 	/** TLV or value for cmd */
5207*4882a593Smuzhiyun 	t_u8 val[];
5208*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_11AX_CMD_CFG;
5209*4882a593Smuzhiyun 
5210*4882a593Smuzhiyun /** HostCmd_DS_RANGE_EXT */
5211*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_RANGE_EXT {
5212*4882a593Smuzhiyun 	/** Action */
5213*4882a593Smuzhiyun 	t_u16 action;
5214*4882a593Smuzhiyun 	/** Range ext mode */
5215*4882a593Smuzhiyun 	t_u8 mode;
5216*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_RANGE_EXT;
5217*4882a593Smuzhiyun 
5218*4882a593Smuzhiyun /** Type definition of hostcmd_twt_setup */
5219*4882a593Smuzhiyun typedef struct MLAN_PACK_START _hostcmd_twt_setup {
5220*4882a593Smuzhiyun 	/** Implicit, 0: TWT session is explicit, 1: Session is implicit */
5221*4882a593Smuzhiyun 	t_u8 implicit;
5222*4882a593Smuzhiyun 	/** Announced, 0: Unannounced, 1: Announced TWT */
5223*4882a593Smuzhiyun 	t_u8 announced;
5224*4882a593Smuzhiyun 	/** Trigger Enabled, 0: Non-Trigger enabled, 1: Trigger enabled TWT */
5225*4882a593Smuzhiyun 	t_u8 trigger_enabled;
5226*4882a593Smuzhiyun 	/** TWT Information Disabled, 0: TWT info enabled, 1: TWT info disabled
5227*4882a593Smuzhiyun 	 */
5228*4882a593Smuzhiyun 	t_u8 twt_info_disabled;
5229*4882a593Smuzhiyun 	/** Negotiation Type, 0: Future Individual TWT SP start time, 1: Next
5230*4882a593Smuzhiyun 	 * Wake TBTT time */
5231*4882a593Smuzhiyun 	t_u8 negotiation_type;
5232*4882a593Smuzhiyun 	/** TWT Wakeup Duration, time after which the TWT requesting STA can
5233*4882a593Smuzhiyun 	 * transition to doze state */
5234*4882a593Smuzhiyun 	t_u8 twt_wakeup_duration;
5235*4882a593Smuzhiyun 	/** Flow Identifier. Range: [0-7]*/
5236*4882a593Smuzhiyun 	t_u8 flow_identifier;
5237*4882a593Smuzhiyun 	/** Hard Constraint, 0: FW can tweak the TWT setup parameters if it is
5238*4882a593Smuzhiyun 	 *rejected by AP.
5239*4882a593Smuzhiyun 	 ** 1: Firmware should not tweak any parameters. */
5240*4882a593Smuzhiyun 	t_u8 hard_constraint;
5241*4882a593Smuzhiyun 	/** TWT Exponent, Range: [0-63] */
5242*4882a593Smuzhiyun 	t_u8 twt_exponent;
5243*4882a593Smuzhiyun 	/** TWT Mantissa Range: [0-sizeof(UINT16)] */
5244*4882a593Smuzhiyun 	t_u16 twt_mantissa;
5245*4882a593Smuzhiyun 	/** TWT Request Type, 0: REQUEST_TWT, 1: SUGGEST_TWT*/
5246*4882a593Smuzhiyun 	t_u8 twt_request;
5247*4882a593Smuzhiyun 	/** TWT Setup State. Set to 0 by driver, filled by FW in response*/
5248*4882a593Smuzhiyun 	t_u8 twt_setup_state;
5249*4882a593Smuzhiyun 	/** Reserved, set to 0. */
5250*4882a593Smuzhiyun 	t_u8 reserved[2];
5251*4882a593Smuzhiyun } MLAN_PACK_END hostcmd_twt_setup, *phostcmd_twt_setup;
5252*4882a593Smuzhiyun 
5253*4882a593Smuzhiyun /** Type definition of hostcmd_twt_teardown */
5254*4882a593Smuzhiyun typedef struct MLAN_PACK_START _hostcmd_twt_teardown {
5255*4882a593Smuzhiyun 	/** TWT Flow Identifier. Range: [0-7] */
5256*4882a593Smuzhiyun 	t_u8 flow_identifier;
5257*4882a593Smuzhiyun 	/** Negotiation Type. 0: Future Individual TWT SP start time, 1: Next
5258*4882a593Smuzhiyun 	 * Wake TBTT time */
5259*4882a593Smuzhiyun 	t_u8 negotiation_type;
5260*4882a593Smuzhiyun 	/** Tear down all TWT. 1: To teardown all TWT, 0 otherwise */
5261*4882a593Smuzhiyun 	t_u8 teardown_all_twt;
5262*4882a593Smuzhiyun 	/** TWT Teardown State. Set to 0 by driver, filled by FW in response */
5263*4882a593Smuzhiyun 	t_u8 twt_teardown_state;
5264*4882a593Smuzhiyun 	/** Reserved, set to 0. */
5265*4882a593Smuzhiyun 	t_u8 reserved[3];
5266*4882a593Smuzhiyun } MLAN_PACK_END hostcmd_twt_teardown, *phostcmd_twt_teardown;
5267*4882a593Smuzhiyun 
5268*4882a593Smuzhiyun /** HostCmd_DS_TWT_CFG */
5269*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_TWT_CFG {
5270*4882a593Smuzhiyun 	/** Action */
5271*4882a593Smuzhiyun 	t_u16 action;
5272*4882a593Smuzhiyun 	/** CMD_SUBID */
5273*4882a593Smuzhiyun 	t_u16 sub_id;
5274*4882a593Smuzhiyun 	/** TWT Setup/Teardown configuration parameters */
5275*4882a593Smuzhiyun 	union {
5276*4882a593Smuzhiyun 		/** TWT Setup config for Sub ID: MLAN_11AX_TWT_SETUP_SUBID */
5277*4882a593Smuzhiyun 		hostcmd_twt_setup twt_setup;
5278*4882a593Smuzhiyun 		/** TWT Teardown config for Sub ID: MLAN_11AX_TWT_TEARDOWN_SUBID
5279*4882a593Smuzhiyun 		 */
5280*4882a593Smuzhiyun 		hostcmd_twt_teardown twt_teardown;
5281*4882a593Smuzhiyun 	} param;
5282*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_TWT_CFG;
5283*4882a593Smuzhiyun 
5284*4882a593Smuzhiyun /** HostCmd_DS_ECL_SYSTEM_CLOCK_CONFIG */
5285*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_ECL_SYSTEM_CLOCK_CONFIG {
5286*4882a593Smuzhiyun 	/** Action */
5287*4882a593Smuzhiyun 	t_u16 action;
5288*4882a593Smuzhiyun 	/** Current system clock */
5289*4882a593Smuzhiyun 	t_u16 cur_sys_clk;
5290*4882a593Smuzhiyun 	/** Clock type */
5291*4882a593Smuzhiyun 	t_u16 sys_clk_type;
5292*4882a593Smuzhiyun 	/** Length of clocks */
5293*4882a593Smuzhiyun 	t_u16 sys_clk_len;
5294*4882a593Smuzhiyun 	/** System clocks */
5295*4882a593Smuzhiyun 	t_u16 sys_clk[16];
5296*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_ECL_SYSTEM_CLOCK_CONFIG;
5297*4882a593Smuzhiyun 
5298*4882a593Smuzhiyun /** MrvlIEtypes_WmmParamSet_t */
5299*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_WmmParamSet_t {
5300*4882a593Smuzhiyun 	/** Header */
5301*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5302*4882a593Smuzhiyun 	/** WMM IE */
5303*4882a593Smuzhiyun 	t_u8 wmm_ie[1];
5304*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_WmmParamSet_t;
5305*4882a593Smuzhiyun 
5306*4882a593Smuzhiyun /** MrvlIEtypes_WmmQueueStatus_t */
5307*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
5308*4882a593Smuzhiyun 	/** Header */
5309*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5310*4882a593Smuzhiyun 	/** Queue index */
5311*4882a593Smuzhiyun 	t_u8 queue_index;
5312*4882a593Smuzhiyun 	/** Disabled flag */
5313*4882a593Smuzhiyun 	t_u8 disabled;
5314*4882a593Smuzhiyun 	/** Medium time allocation in 32us units*/
5315*4882a593Smuzhiyun 	t_u16 medium_time;
5316*4882a593Smuzhiyun 	/** Flow required flag */
5317*4882a593Smuzhiyun 	t_u8 flow_required;
5318*4882a593Smuzhiyun 	/** Flow created flag */
5319*4882a593Smuzhiyun 	t_u8 flow_created;
5320*4882a593Smuzhiyun 	/** Reserved */
5321*4882a593Smuzhiyun 	t_u32 reserved;
5322*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_WmmQueueStatus_t;
5323*4882a593Smuzhiyun 
5324*4882a593Smuzhiyun /** Size of a TSPEC.  Used to allocate necessary buffer space in commands */
5325*4882a593Smuzhiyun #define WMM_TSPEC_SIZE 63
5326*4882a593Smuzhiyun 
5327*4882a593Smuzhiyun /** Extra IE bytes allocated in messages for appended IEs after a TSPEC */
5328*4882a593Smuzhiyun #define WMM_ADDTS_EXTRA_IE_BYTES 256
5329*4882a593Smuzhiyun 
5330*4882a593Smuzhiyun /** Extra TLV bytes allocated in messages for configuring WMM Queues */
5331*4882a593Smuzhiyun #define WMM_QUEUE_CONFIG_EXTRA_TLV_BYTES 64
5332*4882a593Smuzhiyun 
5333*4882a593Smuzhiyun /** Number of bins in the histogram for the HostCmd_DS_WMM_QUEUE_STATS */
5334*4882a593Smuzhiyun #define WMM_STATS_PKTS_HIST_BINS 7
5335*4882a593Smuzhiyun 
5336*4882a593Smuzhiyun /**
5337*4882a593Smuzhiyun  *  @brief Firmware command structure to retrieve the firmware WMM status.
5338*4882a593Smuzhiyun  *
5339*4882a593Smuzhiyun  *  Used to retrieve the status of each WMM AC Queue in TLV
5340*4882a593Smuzhiyun  *    format (MrvlIEtypes_WmmQueueStatus_t) as well as the current WMM
5341*4882a593Smuzhiyun  *    parameter IE advertised by the AP.
5342*4882a593Smuzhiyun  *
5343*4882a593Smuzhiyun  *  Used in response to a EVENT_WMM_STATUS_CHANGE event signaling
5344*4882a593Smuzhiyun  *    a QOS change on one of the ACs or a change in the WMM Parameter in
5345*4882a593Smuzhiyun  *    the Beacon.
5346*4882a593Smuzhiyun  *
5347*4882a593Smuzhiyun  *  TLV based command, byte arrays used for max sizing purpose. There are no
5348*4882a593Smuzhiyun  *    arguments sent in the command, the TLVs are returned by the firmware.
5349*4882a593Smuzhiyun  */
5350*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
5351*4882a593Smuzhiyun 	/** Queue status TLV */
5352*4882a593Smuzhiyun 	t_u8 queue_status_tlv[sizeof(MrvlIEtypes_WmmQueueStatus_t) *
5353*4882a593Smuzhiyun 			      MAX_AC_QUEUES];
5354*4882a593Smuzhiyun 	/** WMM parameter TLV */
5355*4882a593Smuzhiyun 	t_u8 wmm_param_tlv[sizeof(IEEEtypes_WmmParameter_t) + 2];
5356*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_WMM_GET_STATUS;
5357*4882a593Smuzhiyun 
5358*4882a593Smuzhiyun /**
5359*4882a593Smuzhiyun  *  @brief Command structure for the HostCmd_CMD_WMM_ADDTS_REQ firmware command
5360*4882a593Smuzhiyun  */
5361*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
5362*4882a593Smuzhiyun 	mlan_cmd_result_e command_result; /**< Command result */
5363*4882a593Smuzhiyun 	t_u32 timeout_ms; /**< Timeout value in milliseconds */
5364*4882a593Smuzhiyun 	t_u8 dialog_token; /**< Dialog token */
5365*4882a593Smuzhiyun 	t_u8 ieee_status_code; /**< IEEE status code */
5366*4882a593Smuzhiyun 	t_u8 tspec_data[WMM_TSPEC_SIZE]; /**< TSPEC data */
5367*4882a593Smuzhiyun 	t_u8 addts_extra_ie_buf[WMM_ADDTS_EXTRA_IE_BYTES]; /**< Extra IE buffer
5368*4882a593Smuzhiyun 							    */
5369*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_WMM_ADDTS_REQ;
5370*4882a593Smuzhiyun 
5371*4882a593Smuzhiyun /**
5372*4882a593Smuzhiyun  *  @brief Command structure for the HostCmd_CMD_WMM_DELTS_REQ firmware command
5373*4882a593Smuzhiyun  */
5374*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
5375*4882a593Smuzhiyun 	mlan_cmd_result_e command_result; /**< Command result */
5376*4882a593Smuzhiyun 	t_u8 dialog_token; /**< Dialog token */
5377*4882a593Smuzhiyun 	t_u8 ieee_reason_code; /**< IEEE reason code */
5378*4882a593Smuzhiyun 	t_u8 tspec_data[WMM_TSPEC_SIZE]; /**< TSPEC data */
5379*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_WMM_DELTS_REQ;
5380*4882a593Smuzhiyun 
5381*4882a593Smuzhiyun /**
5382*4882a593Smuzhiyun  *  @brief Command structure for the HostCmd_CMD_WMM_QUEUE_CONFIG firmware cmd
5383*4882a593Smuzhiyun  *
5384*4882a593Smuzhiyun  *  Set/Get/Default the Queue parameters for a specific AC in the firmware.
5385*4882a593Smuzhiyun  */
5386*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
5387*4882a593Smuzhiyun 	mlan_wmm_queue_config_action_e action; /**< Set, Get, or Default */
5388*4882a593Smuzhiyun 	mlan_wmm_ac_e access_category; /**< WMM_AC_BK(0) to WMM_AC_VO(3) */
5389*4882a593Smuzhiyun 	/** @brief MSDU lifetime expiry per 802.11e
5390*4882a593Smuzhiyun 	 *
5391*4882a593Smuzhiyun 	 *   - Ignored if 0 on a set command
5392*4882a593Smuzhiyun 	 *   - Set to the 802.11e specified 500 TUs when defaulted
5393*4882a593Smuzhiyun 	 */
5394*4882a593Smuzhiyun 	t_u16 msdu_lifetime_expiry;
5395*4882a593Smuzhiyun 	t_u8 tlv_buffer[WMM_QUEUE_CONFIG_EXTRA_TLV_BYTES]; /**< Not supported */
5396*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_WMM_QUEUE_CONFIG;
5397*4882a593Smuzhiyun 
5398*4882a593Smuzhiyun /**
5399*4882a593Smuzhiyun  *  @brief Command structure for the HostCmd_CMD_WMM_QUEUE_STATS firmware cmd
5400*4882a593Smuzhiyun  *
5401*4882a593Smuzhiyun  *  Turn statistical collection on/off for a given AC or retrieve the
5402*4882a593Smuzhiyun  *    accumulated stats for an AC and clear them in the firmware.
5403*4882a593Smuzhiyun  */
5404*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
5405*4882a593Smuzhiyun 	mlan_wmm_queue_stats_action_e action; /**< Start, Stop, or Get */
5406*4882a593Smuzhiyun #ifdef BIG_ENDIAN_SUPPORT
5407*4882a593Smuzhiyun 	t_u8 select_bin : 7; /**< WMM_AC_BK(0) to WMM_AC_VO(3), or TID */
5408*4882a593Smuzhiyun 	t_u8 select_is_userpri : 1; /**< Set if select_bin is UP, Clear for AC
5409*4882a593Smuzhiyun 				     */
5410*4882a593Smuzhiyun #else
5411*4882a593Smuzhiyun 	t_u8 select_is_userpri : 1; /**< Set if select_bin is UP, Clear for AC
5412*4882a593Smuzhiyun 				     */
5413*4882a593Smuzhiyun 	t_u8 select_bin : 7; /**< WMM_AC_BK(0) to WMM_AC_VO(3), or TID */
5414*4882a593Smuzhiyun #endif
5415*4882a593Smuzhiyun 	t_u16 pkt_count; /**< Number of successful packets transmitted */
5416*4882a593Smuzhiyun 	t_u16 pkt_loss; /**< Packets lost; not included in pktCount */
5417*4882a593Smuzhiyun 	t_u32 avg_queue_delay; /**< Average Queue delay in microsec */
5418*4882a593Smuzhiyun 	t_u32 avg_tx_delay; /**< Average Transmission delay in microsec */
5419*4882a593Smuzhiyun 	t_u16 used_time; /**< Calc used time - units of 32 microsec */
5420*4882a593Smuzhiyun 	t_u16 policed_time; /**< Calc policed time - units of 32 microsec */
5421*4882a593Smuzhiyun 	/** @brief Queue Delay Histogram; number of packets per queue delay
5422*4882a593Smuzhiyun 	 * range
5423*4882a593Smuzhiyun 	 *
5424*4882a593Smuzhiyun 	 *  [0] -  0ms <= delay < 5ms
5425*4882a593Smuzhiyun 	 *  [1] -  5ms <= delay < 10ms
5426*4882a593Smuzhiyun 	 *  [2] - 10ms <= delay < 20ms
5427*4882a593Smuzhiyun 	 *  [3] - 20ms <= delay < 30ms
5428*4882a593Smuzhiyun 	 *  [4] - 30ms <= delay < 40ms
5429*4882a593Smuzhiyun 	 *  [5] - 40ms <= delay < 50ms
5430*4882a593Smuzhiyun 	 *  [6] - 50ms <= delay < msduLifetime (TUs)
5431*4882a593Smuzhiyun 	 */
5432*4882a593Smuzhiyun 	t_u16 delay_histogram[WMM_STATS_PKTS_HIST_BINS];
5433*4882a593Smuzhiyun 	/** Reserved */
5434*4882a593Smuzhiyun 	t_u16 reserved_1;
5435*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_WMM_QUEUE_STATS;
5436*4882a593Smuzhiyun 
5437*4882a593Smuzhiyun /**
5438*4882a593Smuzhiyun  *  @brief Command structure for the HostCmd_CMD_WMM_TS_STATUS firmware cmd
5439*4882a593Smuzhiyun  *
5440*4882a593Smuzhiyun  *  Query the firmware to get the status of the WMM Traffic Streams
5441*4882a593Smuzhiyun  */
5442*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
5443*4882a593Smuzhiyun 	/** TSID: Range: 0->7 */
5444*4882a593Smuzhiyun 	t_u8 tid;
5445*4882a593Smuzhiyun 	/** TSID specified is valid */
5446*4882a593Smuzhiyun 	t_u8 valid;
5447*4882a593Smuzhiyun 	/** AC TSID is active on */
5448*4882a593Smuzhiyun 	t_u8 access_category;
5449*4882a593Smuzhiyun 	/** UP specified for the TSID */
5450*4882a593Smuzhiyun 	t_u8 user_priority;
5451*4882a593Smuzhiyun 	/** Power save mode for TSID: 0 (legacy), 1 (UAPSD) */
5452*4882a593Smuzhiyun 	t_u8 psb;
5453*4882a593Smuzhiyun 	/** Uplink(1), Downlink(2), Bidirectional(3) */
5454*4882a593Smuzhiyun 	t_u8 flow_dir;
5455*4882a593Smuzhiyun 	/** Medium time granted for the TSID */
5456*4882a593Smuzhiyun 	t_u16 medium_time;
5457*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_WMM_TS_STATUS;
5458*4882a593Smuzhiyun 
5459*4882a593Smuzhiyun /** Firmware status for a specific AC */
5460*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
5461*4882a593Smuzhiyun 	/** Disabled flag */
5462*4882a593Smuzhiyun 	t_u8 disabled;
5463*4882a593Smuzhiyun 	/** Flow required flag */
5464*4882a593Smuzhiyun 	t_u8 flow_required;
5465*4882a593Smuzhiyun 	/** Flow created flag */
5466*4882a593Smuzhiyun 	t_u8 flow_created;
5467*4882a593Smuzhiyun } MLAN_PACK_END WmmAcStatus_t;
5468*4882a593Smuzhiyun 
5469*4882a593Smuzhiyun /**  Local Power Capability */
5470*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_PowerCapability_t {
5471*4882a593Smuzhiyun 	/** Header */
5472*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5473*4882a593Smuzhiyun 	/** Minmum power */
5474*4882a593Smuzhiyun 	t_s8 min_power;
5475*4882a593Smuzhiyun 	/** Maximum power */
5476*4882a593Smuzhiyun 	t_s8 max_power;
5477*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_PowerCapability_t;
5478*4882a593Smuzhiyun 
5479*4882a593Smuzhiyun /** HT Information element */
5480*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIETypes_HTInfo_t {
5481*4882a593Smuzhiyun 	/** Header */
5482*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5483*4882a593Smuzhiyun 
5484*4882a593Smuzhiyun 	/** HTInfo struct */
5485*4882a593Smuzhiyun 	HTInfo_t ht_info;
5486*4882a593Smuzhiyun } MLAN_PACK_END MrvlIETypes_HTInfo_t;
5487*4882a593Smuzhiyun 
5488*4882a593Smuzhiyun /** 20/40 BSS Coexistence element */
5489*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIETypes_2040BSSCo_t {
5490*4882a593Smuzhiyun 	/** Header */
5491*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5492*4882a593Smuzhiyun 
5493*4882a593Smuzhiyun 	/** BSSCo2040_t struct */
5494*4882a593Smuzhiyun 	BSSCo2040_t bss_co_2040;
5495*4882a593Smuzhiyun } MLAN_PACK_END MrvlIETypes_2040BSSCo_t;
5496*4882a593Smuzhiyun 
5497*4882a593Smuzhiyun /** Extended Capabilities element */
5498*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIETypes_ExtCap_t {
5499*4882a593Smuzhiyun 	/** Header */
5500*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5501*4882a593Smuzhiyun 
5502*4882a593Smuzhiyun 	/** ExtCap_t struct */
5503*4882a593Smuzhiyun 	ExtCap_t ext_cap;
5504*4882a593Smuzhiyun } MLAN_PACK_END MrvlIETypes_ExtCap_t;
5505*4882a593Smuzhiyun 
5506*4882a593Smuzhiyun /** Supported operating classes element */
5507*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIETypes_SuppOperClass_t {
5508*4882a593Smuzhiyun 	/** Header */
5509*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5510*4882a593Smuzhiyun 	/** Current operationg class **/
5511*4882a593Smuzhiyun 	t_u8 current_oper_class;
5512*4882a593Smuzhiyun 	/** Operating class list */
5513*4882a593Smuzhiyun 	t_u8 oper_class[1];
5514*4882a593Smuzhiyun } MLAN_PACK_END MrvlIETypes_SuppOperClass_t;
5515*4882a593Smuzhiyun 
5516*4882a593Smuzhiyun /** Oper_class channel bandwidth element */
5517*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_chan_bw_oper_t {
5518*4882a593Smuzhiyun 	/** Header */
5519*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5520*4882a593Smuzhiyun 	/** channel oper bandwidth*/
5521*4882a593Smuzhiyun 	mlan_ds_bw_chan_oper ds_chan_bw_oper;
5522*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_chan_bw_oper_t;
5523*4882a593Smuzhiyun 
5524*4882a593Smuzhiyun /** Qos Info */
5525*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIETypes_qosinfo_t {
5526*4882a593Smuzhiyun 	/** Header */
5527*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5528*4882a593Smuzhiyun 	/** qos_info*/
5529*4882a593Smuzhiyun 	t_u8 qos_info;
5530*4882a593Smuzhiyun } MLAN_PACK_END MrvlIETypes_qosinfo_t;
5531*4882a593Smuzhiyun 
5532*4882a593Smuzhiyun /** Overlapping BSS Scan Parameters element */
5533*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIETypes_OverlapBSSScanParam_t {
5534*4882a593Smuzhiyun 	/** Header */
5535*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5536*4882a593Smuzhiyun 
5537*4882a593Smuzhiyun 	/** OBSSScanParam_t struct */
5538*4882a593Smuzhiyun 	OBSSScanParam_t obss_scan_param;
5539*4882a593Smuzhiyun } MLAN_PACK_END MrvlIETypes_OverlapBSSScanParam_t;
5540*4882a593Smuzhiyun 
5541*4882a593Smuzhiyun /** Set of MCS values that STA desires to use within the BSS */
5542*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIETypes_HTOperationalMCSSet_t {
5543*4882a593Smuzhiyun 	/** Header */
5544*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5545*4882a593Smuzhiyun 
5546*4882a593Smuzhiyun 	/** Bitmap indicating MCSs that STA desires to use within the BSS */
5547*4882a593Smuzhiyun 	t_u8 ht_operational_mcs_bitmap[16];
5548*4882a593Smuzhiyun } MLAN_PACK_END MrvlIETypes_HTOperationalMCSSet_t;
5549*4882a593Smuzhiyun 
5550*4882a593Smuzhiyun /** VHT Operations IE */
5551*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIETypes_VHTOprat_t {
5552*4882a593Smuzhiyun 	/** Header */
5553*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5554*4882a593Smuzhiyun 
5555*4882a593Smuzhiyun 	t_u8 chan_width;
5556*4882a593Smuzhiyun 	t_u8 chan_center_freq_1;
5557*4882a593Smuzhiyun 	t_u8 chan_center_freq_2;
5558*4882a593Smuzhiyun 	/** Basic MCS set map, each 2 bits stands for a Nss */
5559*4882a593Smuzhiyun 	t_u16 basic_MCS_map;
5560*4882a593Smuzhiyun } MLAN_PACK_END MrvlIETypes_VHTOprat_t;
5561*4882a593Smuzhiyun 
5562*4882a593Smuzhiyun /** VHT Transmit Power Envelope IE */
5563*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIETypes_VHTtxpower_t {
5564*4882a593Smuzhiyun 	/** Header */
5565*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5566*4882a593Smuzhiyun 
5567*4882a593Smuzhiyun 	t_u8 max_tx_power;
5568*4882a593Smuzhiyun 	t_u8 chan_center_freq;
5569*4882a593Smuzhiyun 	t_u8 chan_width;
5570*4882a593Smuzhiyun } MLAN_PACK_END MrvlIETypes_VHTtxpower_t;
5571*4882a593Smuzhiyun 
5572*4882a593Smuzhiyun /** Extended Power Constraint IE */
5573*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIETypes_ExtPwerCons_t {
5574*4882a593Smuzhiyun 	/** Header */
5575*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5576*4882a593Smuzhiyun 
5577*4882a593Smuzhiyun 	/** channel width */
5578*4882a593Smuzhiyun 	t_u8 chan_width;
5579*4882a593Smuzhiyun 	/** local power constraint */
5580*4882a593Smuzhiyun 	t_u8 local_power_cons;
5581*4882a593Smuzhiyun } MLAN_PACK_END MrvlIETypes_ExtPwerCons_t;
5582*4882a593Smuzhiyun 
5583*4882a593Smuzhiyun /** Extended BSS Load IE */
5584*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIETypes_ExtBSSload_t {
5585*4882a593Smuzhiyun 	/** Header */
5586*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5587*4882a593Smuzhiyun 
5588*4882a593Smuzhiyun 	t_u8 MU_MIMO_capa_count;
5589*4882a593Smuzhiyun 	t_u8 stream_underutilization;
5590*4882a593Smuzhiyun 	t_u8 VHT40_util;
5591*4882a593Smuzhiyun 	t_u8 VHT80_util;
5592*4882a593Smuzhiyun 	t_u8 VHT160_util;
5593*4882a593Smuzhiyun } MLAN_PACK_END MrvlIETypes_ExtBSSload_t;
5594*4882a593Smuzhiyun 
5595*4882a593Smuzhiyun /** Quiet Channel IE */
5596*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIETypes_QuietChan_t {
5597*4882a593Smuzhiyun 	/** Header */
5598*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5599*4882a593Smuzhiyun 
5600*4882a593Smuzhiyun 	t_u8 AP_quiet_mode;
5601*4882a593Smuzhiyun 	t_u8 quiet_count;
5602*4882a593Smuzhiyun 	t_u8 quiet_period;
5603*4882a593Smuzhiyun 	t_u16 quiet_dur;
5604*4882a593Smuzhiyun 	t_u16 quiet_offset;
5605*4882a593Smuzhiyun } MLAN_PACK_END MrvlIETypes_QuietChan_t;
5606*4882a593Smuzhiyun 
5607*4882a593Smuzhiyun /** Wide Bandwidth Channel Switch IE */
5608*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIETypes_BWSwitch_t {
5609*4882a593Smuzhiyun 	/** Header */
5610*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5611*4882a593Smuzhiyun 
5612*4882a593Smuzhiyun 	t_u8 new_chan_width;
5613*4882a593Smuzhiyun 	t_u8 new_chan_center_freq_1;
5614*4882a593Smuzhiyun 	t_u8 new_chan_center_freq_2;
5615*4882a593Smuzhiyun } MLAN_PACK_END MrvlIETypes_BWSwitch_t;
5616*4882a593Smuzhiyun 
5617*4882a593Smuzhiyun /** AID IE */
5618*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIETypes_AID_t {
5619*4882a593Smuzhiyun 	/** Header */
5620*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5621*4882a593Smuzhiyun 
5622*4882a593Smuzhiyun 	/** AID number */
5623*4882a593Smuzhiyun 	t_u16 AID;
5624*4882a593Smuzhiyun } MLAN_PACK_END MrvlIETypes_AID_t;
5625*4882a593Smuzhiyun 
5626*4882a593Smuzhiyun /** Operating Mode Notification IE */
5627*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIETypes_OperModeNtf_t {
5628*4882a593Smuzhiyun 	/** Header */
5629*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5630*4882a593Smuzhiyun 
5631*4882a593Smuzhiyun 	/** operating mdoe */
5632*4882a593Smuzhiyun 	t_u8 oper_mode;
5633*4882a593Smuzhiyun } MLAN_PACK_END MrvlIETypes_OperModeNtf_t;
5634*4882a593Smuzhiyun 
5635*4882a593Smuzhiyun /** bf global args */
5636*4882a593Smuzhiyun typedef struct MLAN_PACK_START _bf_global_cfg_args {
5637*4882a593Smuzhiyun 	/** Global enable/disable bf */
5638*4882a593Smuzhiyun 	t_u8 bf_enbl;
5639*4882a593Smuzhiyun 	/** Global enable/disable sounding */
5640*4882a593Smuzhiyun 	t_u8 sounding_enbl;
5641*4882a593Smuzhiyun 	/** FB Type */
5642*4882a593Smuzhiyun 	t_u8 fb_type;
5643*4882a593Smuzhiyun 	/** SNR Threshold */
5644*4882a593Smuzhiyun 	t_u8 snr_threshold;
5645*4882a593Smuzhiyun 	/** Sounding interval */
5646*4882a593Smuzhiyun 	t_u16 sounding_interval;
5647*4882a593Smuzhiyun 	/** BF mode */
5648*4882a593Smuzhiyun 	t_u8 bf_mode;
5649*4882a593Smuzhiyun 	/** Reserved */
5650*4882a593Smuzhiyun 	t_u8 reserved;
5651*4882a593Smuzhiyun } MLAN_PACK_END bf_global_cfg_args;
5652*4882a593Smuzhiyun 
5653*4882a593Smuzhiyun /** bf_trigger_sound_args_t */
5654*4882a593Smuzhiyun typedef MLAN_PACK_START struct _bf_trigger_sound_args_t {
5655*4882a593Smuzhiyun 	/** Peer MAC address */
5656*4882a593Smuzhiyun 	t_u8 peer_mac[MLAN_MAC_ADDR_LENGTH];
5657*4882a593Smuzhiyun 	/** Status */
5658*4882a593Smuzhiyun 	t_u8 status;
5659*4882a593Smuzhiyun } MLAN_PACK_END bf_trigger_sound_args_t;
5660*4882a593Smuzhiyun 
5661*4882a593Smuzhiyun /** bf periodicity args */
5662*4882a593Smuzhiyun typedef MLAN_PACK_START struct _bf_periodicity_args {
5663*4882a593Smuzhiyun 	/** Peer MAC address */
5664*4882a593Smuzhiyun 	t_u8 peer_mac[MLAN_MAC_ADDR_LENGTH];
5665*4882a593Smuzhiyun 	/** Current Tx BF Interval */
5666*4882a593Smuzhiyun 	t_u16 interval;
5667*4882a593Smuzhiyun 	/** Status */
5668*4882a593Smuzhiyun 	t_u8 status;
5669*4882a593Smuzhiyun } MLAN_PACK_END bf_periodicity_args;
5670*4882a593Smuzhiyun 
5671*4882a593Smuzhiyun /** bf peer configuration args */
5672*4882a593Smuzhiyun typedef struct MLAN_PACK_START _bf_peer_args {
5673*4882a593Smuzhiyun 	/** Peer MAC address */
5674*4882a593Smuzhiyun 	t_u8 peer_mac[MLAN_MAC_ADDR_LENGTH];
5675*4882a593Smuzhiyun 	/** Reserved */
5676*4882a593Smuzhiyun 	t_u16 reserved;
5677*4882a593Smuzhiyun 	/** Enable/Disable Beamforming */
5678*4882a593Smuzhiyun 	t_u8 bf_enbl;
5679*4882a593Smuzhiyun 	/** Enable/Disable sounding */
5680*4882a593Smuzhiyun 	t_u8 sounding_enbl;
5681*4882a593Smuzhiyun 	/** FB Type */
5682*4882a593Smuzhiyun 	t_u8 fb_type;
5683*4882a593Smuzhiyun } MLAN_PACK_END bf_peer_args;
5684*4882a593Smuzhiyun 
5685*4882a593Smuzhiyun /** bf_snr_thr_t */
5686*4882a593Smuzhiyun typedef MLAN_PACK_START struct _bf_snr_thr_t {
5687*4882a593Smuzhiyun 	/** Peer MAC address */
5688*4882a593Smuzhiyun 	t_u8 peer_mac[MLAN_MAC_ADDR_LENGTH];
5689*4882a593Smuzhiyun 	/** SNR */
5690*4882a593Smuzhiyun 	t_u8 snr;
5691*4882a593Smuzhiyun } MLAN_PACK_END bf_snr_thr_t;
5692*4882a593Smuzhiyun 
5693*4882a593Smuzhiyun /** HostCmd_DS_TX_BF_CFG */
5694*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_TX_BF_CFG {
5695*4882a593Smuzhiyun 	/* Beamforming action */
5696*4882a593Smuzhiyun 	t_u16 bf_action;
5697*4882a593Smuzhiyun 	/* action - SET/GET*/
5698*4882a593Smuzhiyun 	t_u16 action;
5699*4882a593Smuzhiyun 
5700*4882a593Smuzhiyun 	MLAN_PACK_START union {
5701*4882a593Smuzhiyun 		bf_global_cfg_args bf_global_cfg;
5702*4882a593Smuzhiyun 		bf_trigger_sound_args_t bf_sound_args;
5703*4882a593Smuzhiyun 		bf_periodicity_args bf_periodicity;
5704*4882a593Smuzhiyun 		bf_peer_args tx_bf_peer;
5705*4882a593Smuzhiyun 		bf_snr_thr_t bf_snr;
5706*4882a593Smuzhiyun 	} MLAN_PACK_END body;
5707*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_TX_BF_CFG;
5708*4882a593Smuzhiyun 
5709*4882a593Smuzhiyun #ifdef WIFI_DIRECT_SUPPORT
5710*4882a593Smuzhiyun /** MrvlIEtypes_psk_t */
5711*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_psk_t {
5712*4882a593Smuzhiyun 	/** Header */
5713*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5714*4882a593Smuzhiyun 	/** PSK */
5715*4882a593Smuzhiyun 	t_u8 psk[MLAN_MAX_KEY_LENGTH];
5716*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_psk_t;
5717*4882a593Smuzhiyun #endif /* WIFI_DIRECT_SUPPORT */
5718*4882a593Smuzhiyun 
5719*4882a593Smuzhiyun /** Data structure for Link ID */
5720*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIETypes_LinkIDElement_t {
5721*4882a593Smuzhiyun 	/** Header */
5722*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5723*4882a593Smuzhiyun 	/** Bssid */
5724*4882a593Smuzhiyun 	t_u8 bssid[MLAN_MAC_ADDR_LENGTH];
5725*4882a593Smuzhiyun 	/** initial sta address*/
5726*4882a593Smuzhiyun 	t_u8 init_sta[MLAN_MAC_ADDR_LENGTH];
5727*4882a593Smuzhiyun 	/** respose sta address */
5728*4882a593Smuzhiyun 	t_u8 resp_sta[MLAN_MAC_ADDR_LENGTH];
5729*4882a593Smuzhiyun } MLAN_PACK_END MrvlIETypes_LinkIDElement_t;
5730*4882a593Smuzhiyun 
5731*4882a593Smuzhiyun /** MrvlIEtypes_PMK_t */
5732*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_PMK_t {
5733*4882a593Smuzhiyun 	/** Header */
5734*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5735*4882a593Smuzhiyun 	/** PMK */
5736*4882a593Smuzhiyun 	t_u8 pmk[1];
5737*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_PMK_t;
5738*4882a593Smuzhiyun 
5739*4882a593Smuzhiyun /** MrvlIEtypes_Passphrase_t */
5740*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_Passphrase_t {
5741*4882a593Smuzhiyun 	/** Header */
5742*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5743*4882a593Smuzhiyun 	/** Passphrase */
5744*4882a593Smuzhiyun 	char passphrase[1];
5745*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_Passphrase_t;
5746*4882a593Smuzhiyun 
5747*4882a593Smuzhiyun /** MrvlIEtypes_SAE_Password_t */
5748*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_SAE_Password_t {
5749*4882a593Smuzhiyun 	/** Header */
5750*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5751*4882a593Smuzhiyun 	/** SAE Password */
5752*4882a593Smuzhiyun 	char sae_password[1];
5753*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_SAE_Password_t;
5754*4882a593Smuzhiyun 
5755*4882a593Smuzhiyun /** MrvlIEtypes_SAE_PWE_Mode_t */
5756*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_SAE_PWE_Mode_t {
5757*4882a593Smuzhiyun 	/** Header */
5758*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5759*4882a593Smuzhiyun 	/** WPA3 SAE mechanism for PWE derivation */
5760*4882a593Smuzhiyun 	char pwe[1];
5761*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_SAE_PWE_Mode_t;
5762*4882a593Smuzhiyun 
5763*4882a593Smuzhiyun /** SAE H2E capability bit in RSNX */
5764*4882a593Smuzhiyun #define SAE_H2E_BIT 5
5765*4882a593Smuzhiyun 
5766*4882a593Smuzhiyun /* rsnMode -
5767*4882a593Smuzhiyun  *      Bit 0    : No RSN
5768*4882a593Smuzhiyun  *      Bit 1-2  : RFU
5769*4882a593Smuzhiyun  *      Bit 3    : WPA
5770*4882a593Smuzhiyun  *      Bit 4    : WPA-NONE
5771*4882a593Smuzhiyun  *      Bit 5    : WPA2
5772*4882a593Smuzhiyun  *      Bit 6    : AES CCKM
5773*4882a593Smuzhiyun  *      Bit 7-15 : RFU
5774*4882a593Smuzhiyun  */
5775*4882a593Smuzhiyun /** MrvlIEtypes_EncrProto_t */
5776*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_EncrProto_t {
5777*4882a593Smuzhiyun 	/** Header */
5778*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5779*4882a593Smuzhiyun 	/** EncrProto */
5780*4882a593Smuzhiyun 	t_u16 rsn_mode;
5781*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_EncrProto_t;
5782*4882a593Smuzhiyun 
5783*4882a593Smuzhiyun /** MrvlIEtypes_Bssid_t */
5784*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_Bssid_t {
5785*4882a593Smuzhiyun 	/** Header */
5786*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5787*4882a593Smuzhiyun 	/** Bssid */
5788*4882a593Smuzhiyun 	t_u8 bssid[MLAN_MAC_ADDR_LENGTH];
5789*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_Bssid_t;
5790*4882a593Smuzhiyun 
5791*4882a593Smuzhiyun /*
5792*4882a593Smuzhiyun  * This struct will handle GET,SET,CLEAR function for embedded
5793*4882a593Smuzhiyun  * supplicant.
5794*4882a593Smuzhiyun  * Define data structure for HostCmd_CMD_802_11_SUPPLICANT_PMK
5795*4882a593Smuzhiyun  */
5796*4882a593Smuzhiyun /** HostCmd_DS_802_11_SUPPLICANT_PMK */
5797*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_SUPPLICANT_PMK {
5798*4882a593Smuzhiyun 	/** CMD Action GET/SET/CLEAR */
5799*4882a593Smuzhiyun 	t_u16 action;
5800*4882a593Smuzhiyun 	/** CacheResult initialized to 0 */
5801*4882a593Smuzhiyun 	t_u16 cache_result;
5802*4882a593Smuzhiyun 	/** TLV Buffer */
5803*4882a593Smuzhiyun 	t_u8 tlv_buffer[1];
5804*4882a593Smuzhiyun 	/** MrvlIEtypes_SsidParamSet_t  SsidParamSet;
5805*4882a593Smuzhiyun 	 * MrvlIEtypes_PMK_t           Pmk;
5806*4882a593Smuzhiyun 	 * MrvlIEtypes_Passphrase_t    Passphrase;
5807*4882a593Smuzhiyun 	 * MrvlIEtypes_Bssid_t         Bssid;
5808*4882a593Smuzhiyun 	 **/
5809*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_SUPPLICANT_PMK;
5810*4882a593Smuzhiyun 
5811*4882a593Smuzhiyun /*
5812*4882a593Smuzhiyun  * This struct will GET the Supplicant supported bitmaps
5813*4882a593Smuzhiyun  * The GET_CURRENT action will get the network profile used
5814*4882a593Smuzhiyun  * for the current assocation.
5815*4882a593Smuzhiyun  * Define data structure for HostCmd_CMD_802_11_SUPPLICANT_PROFILE
5816*4882a593Smuzhiyun  */
5817*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_SUPPLICANT_PROFILE {
5818*4882a593Smuzhiyun 	/** GET/SET/GET_CURRENT */
5819*4882a593Smuzhiyun 	t_u16 action;
5820*4882a593Smuzhiyun 	/** Reserved */
5821*4882a593Smuzhiyun 	t_u16 reserved;
5822*4882a593Smuzhiyun 	/** TLVBuffer */
5823*4882a593Smuzhiyun 	t_u8 tlv_buf[1];
5824*4882a593Smuzhiyun 	/* MrvlIEtypes_EncrProto_t */
5825*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_SUPPLICANT_PROFILE;
5826*4882a593Smuzhiyun 
5827*4882a593Smuzhiyun /* unicastCipher -
5828*4882a593Smuzhiyun  *      Bit 0   : RFU
5829*4882a593Smuzhiyun  *      Bit 1   : RFU
5830*4882a593Smuzhiyun  *      Bit 2   : TKIP
5831*4882a593Smuzhiyun  *      Bit 3   : AES CCKM
5832*4882a593Smuzhiyun  *      Bit 2-7 : RFU
5833*4882a593Smuzhiyun  * multicastCipher -
5834*4882a593Smuzhiyun  *      Bit 0   : WEP40
5835*4882a593Smuzhiyun  *      Bit 1   : WEP104
5836*4882a593Smuzhiyun  *      Bit 2   : TKIP
5837*4882a593Smuzhiyun  *      Bit 3   : AES
5838*4882a593Smuzhiyun  *      Bit 4-7 : Reserved for now
5839*4882a593Smuzhiyun  */
5840*4882a593Smuzhiyun /** MrvlIEtypes_Cipher_t */
5841*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_Cipher_t {
5842*4882a593Smuzhiyun 	/** Header */
5843*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
5844*4882a593Smuzhiyun 	/** PairCipher */
5845*4882a593Smuzhiyun 	t_u8 pair_cipher;
5846*4882a593Smuzhiyun 	/** GroupCipher */
5847*4882a593Smuzhiyun 	t_u8 group_cipher;
5848*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_Cipher_t;
5849*4882a593Smuzhiyun 
5850*4882a593Smuzhiyun /** RFType */
5851*4882a593Smuzhiyun typedef MLAN_PACK_START struct _RFType_t {
5852*4882a593Smuzhiyun 	/** band info */
5853*4882a593Smuzhiyun 	Band_Config_t bandcfg;
5854*4882a593Smuzhiyun 	/** reserved */
5855*4882a593Smuzhiyun 	t_u8 reserved;
5856*4882a593Smuzhiyun } MLAN_PACK_END RFType_t;
5857*4882a593Smuzhiyun 
5858*4882a593Smuzhiyun /** HostCmd_CMD_802_11_RF_CHANNEL */
5859*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_RF_CHANNEL {
5860*4882a593Smuzhiyun 	/** Action */
5861*4882a593Smuzhiyun 	t_u16 action;
5862*4882a593Smuzhiyun 	/** Current channel */
5863*4882a593Smuzhiyun 	t_u16 current_channel;
5864*4882a593Smuzhiyun 	/** RF type */
5865*4882a593Smuzhiyun 	RFType_t rf_type;
5866*4882a593Smuzhiyun 	/** Reserved field */
5867*4882a593Smuzhiyun 	t_u16 reserved;
5868*4882a593Smuzhiyun #ifdef STA_SUPPORT
5869*4882a593Smuzhiyun 	/** Reserved */
5870*4882a593Smuzhiyun 	t_u8 reserved_1[32];
5871*4882a593Smuzhiyun #else /* STA_SUPPORT */
5872*4882a593Smuzhiyun 	/** List of channels */
5873*4882a593Smuzhiyun 	t_u8 channel_list[32];
5874*4882a593Smuzhiyun #endif /* !STA_SUPPORT */
5875*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_RF_CHANNEL;
5876*4882a593Smuzhiyun 
5877*4882a593Smuzhiyun /** HostCmd_DS_VERSION_EXT */
5878*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_VERSION_EXT {
5879*4882a593Smuzhiyun 	/** Selected version string */
5880*4882a593Smuzhiyun 	t_u8 version_str_sel;
5881*4882a593Smuzhiyun 	/** Version string */
5882*4882a593Smuzhiyun 	char version_str[128];
5883*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_VERSION_EXT;
5884*4882a593Smuzhiyun 
5885*4882a593Smuzhiyun #define TLV_TYPE_CHAN_ATTR_CFG (PROPRIETARY_TLV_BASE_ID + 237)
5886*4882a593Smuzhiyun #define TLV_TYPE_REGION_INFO (PROPRIETARY_TLV_BASE_ID + 238)
5887*4882a593Smuzhiyun #define TLV_TYPE_POWER_TABLE (PROPRIETARY_TLV_BASE_ID + 262)
5888*4882a593Smuzhiyun #define TLV_TYPE_POWER_TABLE_ATTR (PROPRIETARY_TLV_BASE_ID + 317)
5889*4882a593Smuzhiyun /** HostCmd_DS_CHAN_REGION_CFG */
5890*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_CHAN_REGION_CFG {
5891*4882a593Smuzhiyun 	/** Action */
5892*4882a593Smuzhiyun 	t_u16 action;
5893*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_CHAN_REGION_CFG;
5894*4882a593Smuzhiyun 
5895*4882a593Smuzhiyun /** HostCmd_CMD_CW_MODE_CTRL */
5896*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_CW_MODE_CTRL {
5897*4882a593Smuzhiyun 	/** Action for CW Tone Control */
5898*4882a593Smuzhiyun 	t_u16 action;
5899*4882a593Smuzhiyun 	/** Mode of Operation 0: Disbale 1: Tx Continuous Packet 2: Tx
5900*4882a593Smuzhiyun 	 * Continuous Wave */
5901*4882a593Smuzhiyun 	t_u8 mode;
5902*4882a593Smuzhiyun 	/** channel */
5903*4882a593Smuzhiyun 	t_u8 channel;
5904*4882a593Smuzhiyun 	/** channel info*/
5905*4882a593Smuzhiyun 	t_u8 chanInfo;
5906*4882a593Smuzhiyun 	/** Tx Power level in dBm */
5907*4882a593Smuzhiyun 	t_u16 txPower;
5908*4882a593Smuzhiyun 	/** Packet Length */
5909*4882a593Smuzhiyun 	t_u16 pktLength;
5910*4882a593Smuzhiyun 	/** bit rate Info */
5911*4882a593Smuzhiyun 	t_u32 rateInfo;
5912*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_CW_MODE_CTRL;
5913*4882a593Smuzhiyun 
5914*4882a593Smuzhiyun /** HostCmd_CMD_802_11_RF_ANTENNA */
5915*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_RF_ANTENNA {
5916*4882a593Smuzhiyun 	/** Action for Tx antenna */
5917*4882a593Smuzhiyun 	t_u16 action_tx;
5918*4882a593Smuzhiyun 	/** Tx antenna mode Bit0:1, Bit1:2, Bit0-1:1+2, 0xffff: diversity */
5919*4882a593Smuzhiyun 	t_u16 tx_antenna_mode;
5920*4882a593Smuzhiyun 	/** Action for Rx antenna */
5921*4882a593Smuzhiyun 	t_u16 action_rx;
5922*4882a593Smuzhiyun 	/** Rx antenna mode Bit0:1, Bit1:2, Bit0-1:1+2, 0xffff: diversity */
5923*4882a593Smuzhiyun 	t_u16 rx_antenna_mode;
5924*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_RF_ANTENNA;
5925*4882a593Smuzhiyun 
5926*4882a593Smuzhiyun /** HostCmd_DS_802_11_IBSS_STATUS */
5927*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_IBSS_STATUS {
5928*4882a593Smuzhiyun 	/** Action */
5929*4882a593Smuzhiyun 	t_u16 action;
5930*4882a593Smuzhiyun 	/** Enable */
5931*4882a593Smuzhiyun 	t_u16 enable;
5932*4882a593Smuzhiyun 	/** BSSID */
5933*4882a593Smuzhiyun 	t_u8 bssid[MLAN_MAC_ADDR_LENGTH];
5934*4882a593Smuzhiyun 	/** Beacon interval */
5935*4882a593Smuzhiyun 	t_u16 beacon_interval;
5936*4882a593Smuzhiyun 	/** ATIM window interval */
5937*4882a593Smuzhiyun 	t_u16 atim_window;
5938*4882a593Smuzhiyun 	/** User G rate protection */
5939*4882a593Smuzhiyun 	t_u16 use_g_rate_protect;
5940*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_IBSS_STATUS;
5941*4882a593Smuzhiyun 
5942*4882a593Smuzhiyun /** HostCmd_DS_MGMT_IE_LIST_CFG */
5943*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_MGMT_IE_LIST {
5944*4882a593Smuzhiyun 	/** Action */
5945*4882a593Smuzhiyun 	t_u16 action;
5946*4882a593Smuzhiyun 	/** Get/Set mgmt IE */
5947*4882a593Smuzhiyun 	mlan_ds_misc_custom_ie ds_mgmt_ie;
5948*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_MGMT_IE_LIST_CFG;
5949*4882a593Smuzhiyun 
5950*4882a593Smuzhiyun /** HostCmd_DS_TDLS_CONFIG */
5951*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_TDLS_CONFIG {
5952*4882a593Smuzhiyun 	/** Set TDLS configuration */
5953*4882a593Smuzhiyun 	mlan_ds_misc_tdls_config tdls_info;
5954*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_TDLS_CONFIG;
5955*4882a593Smuzhiyun 
5956*4882a593Smuzhiyun /**Action ID for TDLS delete link*/
5957*4882a593Smuzhiyun #define TDLS_DELETE 0x00
5958*4882a593Smuzhiyun /**Action ID for TDLS create link*/
5959*4882a593Smuzhiyun #define TDLS_CREATE 0x01
5960*4882a593Smuzhiyun /**Action ID for TDLS config link*/
5961*4882a593Smuzhiyun #define TDLS_CONFIG 0x02
5962*4882a593Smuzhiyun /** HostCmd_DS_TDLS_OPER */
5963*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_TDLS_OPER {
5964*4882a593Smuzhiyun 	/** Action */
5965*4882a593Smuzhiyun 	t_u16 tdls_action;
5966*4882a593Smuzhiyun 	/**reason*/
5967*4882a593Smuzhiyun 	t_u16 reason;
5968*4882a593Smuzhiyun 	/** peer mac */
5969*4882a593Smuzhiyun 	t_u8 peer_mac[MLAN_MAC_ADDR_LENGTH];
5970*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_TDLS_OPER;
5971*4882a593Smuzhiyun 
5972*4882a593Smuzhiyun /** HostCmd_CMD_MAC_REG_ACCESS */
5973*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_MAC_REG_ACCESS {
5974*4882a593Smuzhiyun 	/** Action */
5975*4882a593Smuzhiyun 	t_u16 action;
5976*4882a593Smuzhiyun 	/** MAC register offset */
5977*4882a593Smuzhiyun 	t_u16 offset;
5978*4882a593Smuzhiyun 	/** MAC register value */
5979*4882a593Smuzhiyun 	t_u32 value;
5980*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_MAC_REG_ACCESS;
5981*4882a593Smuzhiyun 
5982*4882a593Smuzhiyun /** HostCmd_CMD_BCA_REG_ACCESS */
5983*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_BCA_REG_ACCESS {
5984*4882a593Smuzhiyun 	/** Action */
5985*4882a593Smuzhiyun 	t_u16 action;
5986*4882a593Smuzhiyun 	/** BCA register offset */
5987*4882a593Smuzhiyun 	t_u16 offset;
5988*4882a593Smuzhiyun 	/** BCA register value */
5989*4882a593Smuzhiyun 	t_u32 value;
5990*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_BCA_REG_ACCESS;
5991*4882a593Smuzhiyun 
5992*4882a593Smuzhiyun /** HostCmd_CMD_BBP_REG_ACCESS */
5993*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_BBP_REG_ACCESS {
5994*4882a593Smuzhiyun 	/** Acion */
5995*4882a593Smuzhiyun 	t_u16 action;
5996*4882a593Smuzhiyun 	/** BBP register offset */
5997*4882a593Smuzhiyun 	t_u16 offset;
5998*4882a593Smuzhiyun 	/** BBP register value */
5999*4882a593Smuzhiyun 	t_u8 value;
6000*4882a593Smuzhiyun 	/** Reserved field */
6001*4882a593Smuzhiyun 	t_u8 reserved[3];
6002*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_BBP_REG_ACCESS;
6003*4882a593Smuzhiyun 
6004*4882a593Smuzhiyun /**  HostCmd_CMD_RF_REG_ACCESS */
6005*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_RF_REG_ACCESS {
6006*4882a593Smuzhiyun 	/** Action */
6007*4882a593Smuzhiyun 	t_u16 action;
6008*4882a593Smuzhiyun 	/** RF register offset */
6009*4882a593Smuzhiyun 	t_u16 offset;
6010*4882a593Smuzhiyun 	/** RF register value */
6011*4882a593Smuzhiyun 	t_u8 value;
6012*4882a593Smuzhiyun 	/** Reserved field */
6013*4882a593Smuzhiyun 	t_u8 reserved[3];
6014*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_RF_REG_ACCESS;
6015*4882a593Smuzhiyun 
6016*4882a593Smuzhiyun /** HostCmd_DS_802_11_EEPROM_ACCESS */
6017*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_EEPROM_ACCESS {
6018*4882a593Smuzhiyun 	/** Action */
6019*4882a593Smuzhiyun 	t_u16 action;
6020*4882a593Smuzhiyun 
6021*4882a593Smuzhiyun 	/** multiple 4 */
6022*4882a593Smuzhiyun 	t_u16 offset;
6023*4882a593Smuzhiyun 	/** Number of bytes */
6024*4882a593Smuzhiyun 	t_u16 byte_count;
6025*4882a593Smuzhiyun 	/** Value */
6026*4882a593Smuzhiyun 	t_u8 value;
6027*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_EEPROM_ACCESS;
6028*4882a593Smuzhiyun 
6029*4882a593Smuzhiyun /** HostCmd_DS_MEM_ACCESS */
6030*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_MEM_ACCESS {
6031*4882a593Smuzhiyun 	/** Action */
6032*4882a593Smuzhiyun 	t_u16 action;
6033*4882a593Smuzhiyun 	/** Reserved field */
6034*4882a593Smuzhiyun 	t_u16 reserved;
6035*4882a593Smuzhiyun 	/** Address */
6036*4882a593Smuzhiyun 	t_u32 addr;
6037*4882a593Smuzhiyun 	/** Value */
6038*4882a593Smuzhiyun 	t_u32 value;
6039*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_MEM_ACCESS;
6040*4882a593Smuzhiyun 
6041*4882a593Smuzhiyun /** HostCmd_CMD_REG_ACCESS */
6042*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_REG_ACCESS {
6043*4882a593Smuzhiyun 	/** Action */
6044*4882a593Smuzhiyun 	t_u16 action;
6045*4882a593Smuzhiyun 	/** reg type */
6046*4882a593Smuzhiyun 	t_u16 reg_type;
6047*4882a593Smuzhiyun 	/** reserved */
6048*4882a593Smuzhiyun 	t_u16 reserved;
6049*4882a593Smuzhiyun 	/** register offset */
6050*4882a593Smuzhiyun 	t_u16 offset;
6051*4882a593Smuzhiyun 	/** register value */
6052*4882a593Smuzhiyun 	t_u32 value;
6053*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_REG_ACCESS;
6054*4882a593Smuzhiyun 
6055*4882a593Smuzhiyun /** HostCmd_DS_TARGET_ACCESS */
6056*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_TARGET_ACCESS {
6057*4882a593Smuzhiyun 	/** Action */
6058*4882a593Smuzhiyun 	t_u16 action;
6059*4882a593Smuzhiyun 	/** CSU Target Device. 1: CSU, 2: PSU */
6060*4882a593Smuzhiyun 	t_u16 csu_target;
6061*4882a593Smuzhiyun 	/** Target Device Address */
6062*4882a593Smuzhiyun 	t_u16 address;
6063*4882a593Smuzhiyun 	/** Data */
6064*4882a593Smuzhiyun 	t_u8 data;
6065*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_TARGET_ACCESS;
6066*4882a593Smuzhiyun 
6067*4882a593Smuzhiyun /** HostCmd_DS_SUBSCRIBE_EVENT */
6068*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_SUBSCRIBE_EVENT {
6069*4882a593Smuzhiyun 	/** Action */
6070*4882a593Smuzhiyun 	t_u16 action;
6071*4882a593Smuzhiyun 	/** Bitmap of subscribed events */
6072*4882a593Smuzhiyun 	t_u16 event_bitmap;
6073*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_SUBSCRIBE_EVENT;
6074*4882a593Smuzhiyun 
6075*4882a593Smuzhiyun /** HostCmd_DS_OTP_USER_DATA */
6076*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_OTP_USER_DATA {
6077*4882a593Smuzhiyun 	/** Action */
6078*4882a593Smuzhiyun 	t_u16 action;
6079*4882a593Smuzhiyun 	/** Reserved field */
6080*4882a593Smuzhiyun 	t_u16 reserved;
6081*4882a593Smuzhiyun 	/** User data length */
6082*4882a593Smuzhiyun 	t_u16 user_data_length;
6083*4882a593Smuzhiyun 	/** User data */
6084*4882a593Smuzhiyun 	t_u8 user_data[1];
6085*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_OTP_USER_DATA;
6086*4882a593Smuzhiyun 
6087*4882a593Smuzhiyun /** HostCmd_DS_FW_AUTO_RECONNECT */
6088*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_FW_AUTO_RECONNECT {
6089*4882a593Smuzhiyun 	/** ACT_GET/ACT_SET */
6090*4882a593Smuzhiyun 	t_u16 action;
6091*4882a593Smuzhiyun 	/** reconnect counter:
6092*4882a593Smuzhiyun 	 * [0x0]: Do not attempt auto reconnect i.e. disable auto-reconnect
6093*4882a593Smuzhiyun 	 * [0x1-0xFE]: Number of times reconnection needs to be attempted
6094*4882a593Smuzhiyun 	 * [0xFF]: Attempt auto-reconnection forever */
6095*4882a593Smuzhiyun 	t_u8 reconnect_counter;
6096*4882a593Smuzhiyun 	/** reconnect interval */
6097*4882a593Smuzhiyun 	t_u8 reconnect_interval;
6098*4882a593Smuzhiyun 	/** flags:
6099*4882a593Smuzhiyun 	 * [Bit 0]: Set to 1: Firmware should report link-loss to host if AP
6100*4882a593Smuzhiyun 	 * rejects authentication/association while reconnecting Set to 0:
6101*4882a593Smuzhiyun 	 * Default behavior: Firmware does not report link-loss to host on AP
6102*4882a593Smuzhiyun 	 * rejection and continues internally [Bit 1-15]: Reserved */
6103*4882a593Smuzhiyun 	t_u16 flags;
6104*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_FW_AUTO_RECONNECT;
6105*4882a593Smuzhiyun 
6106*4882a593Smuzhiyun /** HostCmd_CMD_HS_WAKEUP_REASON */
6107*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_HS_WAKEUP_REASON {
6108*4882a593Smuzhiyun 	/** wakeupReason:
6109*4882a593Smuzhiyun 	 * 0: unknown
6110*4882a593Smuzhiyun 	 * 1: Broadcast data matched
6111*4882a593Smuzhiyun 	 * 2: Multicast data matched
6112*4882a593Smuzhiyun 	 * 3: Unicast data matched
6113*4882a593Smuzhiyun 	 * 4: Maskable event matched
6114*4882a593Smuzhiyun 	 * 5. Non-maskable event matched
6115*4882a593Smuzhiyun 	 * 6: Non-maskable condition matched (EAPoL rekey)
6116*4882a593Smuzhiyun 	 * 7: Magic pattern matched
6117*4882a593Smuzhiyun 	 * Others: reserved. (set to 0) */
6118*4882a593Smuzhiyun 	t_u16 wakeup_reason;
6119*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_HS_WAKEUP_REASON;
6120*4882a593Smuzhiyun 
6121*4882a593Smuzhiyun /** MrvlIEtypes_HsWakeHoldoff_t */
6122*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_HsWakeHoldoff_t {
6123*4882a593Smuzhiyun 	/** Header */
6124*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6125*4882a593Smuzhiyun 	/** Minimum delay between HsActive and HostWake (in msec) */
6126*4882a593Smuzhiyun 	t_u16 min_wake_holdoff;
6127*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_HsWakeHoldoff_t;
6128*4882a593Smuzhiyun 
6129*4882a593Smuzhiyun /** MrvlIEtypes_PsParamsInHs_t */
6130*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_PsParamsInHs_t {
6131*4882a593Smuzhiyun 	/** Header */
6132*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6133*4882a593Smuzhiyun 	/** Host sleep wake interval(in msec) */
6134*4882a593Smuzhiyun 	t_u32 hs_wake_interval;
6135*4882a593Smuzhiyun 	/** Host sleep inactivity timeout (in msec) */
6136*4882a593Smuzhiyun 	t_u32 hs_inactivity_timeout;
6137*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_PsParamsInHs_t;
6138*4882a593Smuzhiyun 
6139*4882a593Smuzhiyun /** MrvlIEtypes_WakeupSourceGPIO_t */
6140*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_WakeupSourceGPIO_t {
6141*4882a593Smuzhiyun 	/** Header */
6142*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6143*4882a593Smuzhiyun 	/** GPIO for indication of wakeup source */
6144*4882a593Smuzhiyun 	t_u8 ind_gpio;
6145*4882a593Smuzhiyun 	/** Level on ind_gpio for normal wakeup source */
6146*4882a593Smuzhiyun 	t_u8 level;
6147*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_WakeupSourceGPIO_t;
6148*4882a593Smuzhiyun 
6149*4882a593Smuzhiyun /** MrvlIEtypes_RobustcoexSourceGPIO_t */
6150*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_RobustcoexSourceGPIO_t {
6151*4882a593Smuzhiyun 	/** Header */
6152*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6153*4882a593Smuzhiyun 	/** GPIO cfg for external bt request */
6154*4882a593Smuzhiyun 	t_u8 enable;
6155*4882a593Smuzhiyun 	/** GPIO number */
6156*4882a593Smuzhiyun 	t_u8 gpio_num;
6157*4882a593Smuzhiyun 	/** GPIO Polarity */
6158*4882a593Smuzhiyun 	t_u8 gpio_polarity;
6159*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_RobustcoexSourceGPIO_t;
6160*4882a593Smuzhiyun 
6161*4882a593Smuzhiyun #define MAX_NUM_MAC 2
6162*4882a593Smuzhiyun 
6163*4882a593Smuzhiyun typedef MLAN_PACK_START struct _dmcs_chan_status {
6164*4882a593Smuzhiyun 	/** Channel number */
6165*4882a593Smuzhiyun 	t_u8 channel;
6166*4882a593Smuzhiyun 	/** Number of AP on this channel */
6167*4882a593Smuzhiyun 	t_u8 ap_count;
6168*4882a593Smuzhiyun 	/** Number of STA on this channel*/
6169*4882a593Smuzhiyun 	t_u8 sta_count;
6170*4882a593Smuzhiyun } MLAN_PACK_END dmcs_chan_status;
6171*4882a593Smuzhiyun 
6172*4882a593Smuzhiyun typedef MLAN_PACK_START struct _dmcs_status_data {
6173*4882a593Smuzhiyun 	/** radio ID */
6174*4882a593Smuzhiyun 	t_u8 radio_id;
6175*4882a593Smuzhiyun 	/** Running mode
6176*4882a593Smuzhiyun 	 ** 0 - Idle
6177*4882a593Smuzhiyun 	 ** 1 - DBC
6178*4882a593Smuzhiyun 	 ** 2 - DRCS
6179*4882a593Smuzhiyun 	 */
6180*4882a593Smuzhiyun 	t_u8 running_mode;
6181*4882a593Smuzhiyun 	/** Channel status of this radio */
6182*4882a593Smuzhiyun 	dmcs_chan_status chan_status[2];
6183*4882a593Smuzhiyun } MLAN_PACK_END dmcs_status_data;
6184*4882a593Smuzhiyun 
6185*4882a593Smuzhiyun /** MrvlIEtypes_DmcsConfig_t */
6186*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_DmcsConfig_t {
6187*4882a593Smuzhiyun 	/** Header */
6188*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6189*4882a593Smuzhiyun 	/** Mapping policy */
6190*4882a593Smuzhiyun 	t_u8 mapping_policy;
6191*4882a593Smuzhiyun 	/** Radio status of DMCS */
6192*4882a593Smuzhiyun 	dmcs_status_data radio_status[MAX_NUM_MAC];
6193*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_DmcsStatus_t;
6194*4882a593Smuzhiyun 
6195*4882a593Smuzhiyun #define ANTMODE_FW_DECISION 0xff
6196*4882a593Smuzhiyun /** MrvlIEtypes_HS_Antmode_t */
6197*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_HS_Antmode_t {
6198*4882a593Smuzhiyun 	/** Header */
6199*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6200*4882a593Smuzhiyun 	/** Tx Path antenna mode*/
6201*4882a593Smuzhiyun 	t_u8 txpath_antmode;
6202*4882a593Smuzhiyun 	/** Rx Path antenna mode */
6203*4882a593Smuzhiyun 	t_u8 rxpath_antmode;
6204*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_HS_Antmode_t;
6205*4882a593Smuzhiyun 
6206*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_WakeupExtend_t {
6207*4882a593Smuzhiyun 	/** Header */
6208*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6209*4882a593Smuzhiyun 	/** Events that will be forced ignore **/
6210*4882a593Smuzhiyun 	t_u32 event_force_ignore;
6211*4882a593Smuzhiyun 	/** Events that will use extend gap to inform host*/
6212*4882a593Smuzhiyun 	t_u32 event_use_ext_gap;
6213*4882a593Smuzhiyun 	/** Extend gap*/
6214*4882a593Smuzhiyun 	t_u8 ext_gap;
6215*4882a593Smuzhiyun 	/** GPIO wave level*/
6216*4882a593Smuzhiyun 	t_u8 gpio_wave;
6217*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_WakeupExtend_t;
6218*4882a593Smuzhiyun 
6219*4882a593Smuzhiyun #define EVENT_MANAGEMENT_FRAME_WAKEUP 0x00000088
6220*4882a593Smuzhiyun typedef MLAN_PACK_START struct _mgmt_frame_filter {
6221*4882a593Smuzhiyun 	/** action - bitmap
6222*4882a593Smuzhiyun 	 ** On matching rx'd pkt and filter during NON_HOSTSLEEP mode:
6223*4882a593Smuzhiyun 	 **   Action[1]=0  Discard
6224*4882a593Smuzhiyun 	 **   Action[1]=1  Allow
6225*4882a593Smuzhiyun 	 ** Note that default action on non-match is "Allow".
6226*4882a593Smuzhiyun 	 **
6227*4882a593Smuzhiyun 	 ** On matching rx'd pkt and filter during HOSTSLEEP mode:
6228*4882a593Smuzhiyun 	 **   Action[1:0]=00  Discard and Not Wake host
6229*4882a593Smuzhiyun 	 **   Action[1:0]=01  Discard and Wake host
6230*4882a593Smuzhiyun 	 **   Action[1:0]=10  Invalid
6231*4882a593Smuzhiyun 	 ** Note that default action on non-match is "Discard and Not Wake
6232*4882a593Smuzhiyun 	 *host".
6233*4882a593Smuzhiyun 	 **/
6234*4882a593Smuzhiyun 	t_u8 action;
6235*4882a593Smuzhiyun 	/** Frame type(p2p...)
6236*4882a593Smuzhiyun 	 ** type=0: invalid
6237*4882a593Smuzhiyun 	 ** type=1: p2p
6238*4882a593Smuzhiyun 	 ** type=0xff: management frames(assoc req/rsp, probe req/rsp,...)
6239*4882a593Smuzhiyun 	 ** type=others: reserved
6240*4882a593Smuzhiyun 	 **/
6241*4882a593Smuzhiyun 	t_u8 type;
6242*4882a593Smuzhiyun 	/** Frame mask according to each type
6243*4882a593Smuzhiyun 	 ** When type=1 for p2p, frame-mask have following define:
6244*4882a593Smuzhiyun 	 **    Bit      Frame
6245*4882a593Smuzhiyun 	 **     0       GO Negotiation Request
6246*4882a593Smuzhiyun 	 **     1       GO Negotiation Response
6247*4882a593Smuzhiyun 	 **     2       GO Negotiation Confirmation
6248*4882a593Smuzhiyun 	 **     3       P2P Invitation Request
6249*4882a593Smuzhiyun 	 **     4       P2P Invitation Response
6250*4882a593Smuzhiyun 	 **     5       Device Discoverability Request
6251*4882a593Smuzhiyun 	 **     6       Device Discoverability Response
6252*4882a593Smuzhiyun 	 **     7       Provision Discovery Request
6253*4882a593Smuzhiyun 	 **     8       Provision Discovery Response
6254*4882a593Smuzhiyun 	 **     9       Notice of Absence
6255*4882a593Smuzhiyun 	 **     10      P2P Presence Request
6256*4882a593Smuzhiyun 	 **     11      P2P Presence Response
6257*4882a593Smuzhiyun 	 **     12      GO Discoverability Request
6258*4882a593Smuzhiyun 	 **     13-31   Reserved
6259*4882a593Smuzhiyun 	 **
6260*4882a593Smuzhiyun 	 ** When type=others, frame-mask is reserved.
6261*4882a593Smuzhiyun 	 **/
6262*4882a593Smuzhiyun 	t_u32 frame_mask;
6263*4882a593Smuzhiyun } MLAN_PACK_END mgmt_frame_filter;
6264*4882a593Smuzhiyun 
6265*4882a593Smuzhiyun #define MAX_MGMT_FRAME_FILTER 2
6266*4882a593Smuzhiyun /** MrvlIEtypes_MgmtFrameFilter_t */
6267*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_MgmtFrameFilter_t {
6268*4882a593Smuzhiyun 	/** Header */
6269*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6270*4882a593Smuzhiyun 	/** management frame filters */
6271*4882a593Smuzhiyun 	mgmt_frame_filter filter[MAX_MGMT_FRAME_FILTER];
6272*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_MgmtFrameFilter_t;
6273*4882a593Smuzhiyun 
6274*4882a593Smuzhiyun /** HostCmd_DS_INACTIVITY_TIMEOUT_EXT */
6275*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_INACTIVITY_TIMEOUT_EXT {
6276*4882a593Smuzhiyun 	/** ACT_GET/ACT_SET */
6277*4882a593Smuzhiyun 	t_u16 action;
6278*4882a593Smuzhiyun 	/** uS, 0 means 1000uS(1ms) */
6279*4882a593Smuzhiyun 	t_u16 timeout_unit;
6280*4882a593Smuzhiyun 	/** Inactivity timeout for unicast data */
6281*4882a593Smuzhiyun 	t_u16 unicast_timeout;
6282*4882a593Smuzhiyun 	/** Inactivity timeout for multicast data */
6283*4882a593Smuzhiyun 	t_u16 mcast_timeout;
6284*4882a593Smuzhiyun 	/** Timeout for additional RX traffic after Null PM1 packet exchange */
6285*4882a593Smuzhiyun 	t_u16 ps_entry_timeout;
6286*4882a593Smuzhiyun 	/** Reserved to further expansion */
6287*4882a593Smuzhiyun 	t_u16 reserved;
6288*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_INACTIVITY_TIMEOUT_EXT;
6289*4882a593Smuzhiyun 
6290*4882a593Smuzhiyun /** HostCmd_DS_INDEPENDENT_RESET_CFG */
6291*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_INDEPENDENT_RESET_CFG {
6292*4882a593Smuzhiyun 	/** ACT_GET/ACT_SET */
6293*4882a593Smuzhiyun 	t_u16 action;
6294*4882a593Smuzhiyun 	/** out band independent reset */
6295*4882a593Smuzhiyun 	t_u8 ir_mode;
6296*4882a593Smuzhiyun 	/** gpio pin */
6297*4882a593Smuzhiyun 	t_u8 gpio_pin;
6298*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_INDEPENDENT_RESET_CFG;
6299*4882a593Smuzhiyun 
6300*4882a593Smuzhiyun /** HostCmd_DS_802_11_PS_INACTIVITY_TIMEOUT */
6301*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_802_11_PS_INACTIVITY_TIMEOUT {
6302*4882a593Smuzhiyun 	/** ACT_GET/ACT_SET */
6303*4882a593Smuzhiyun 	t_u16 action;
6304*4882a593Smuzhiyun 	/** ps inactivity timeout value */
6305*4882a593Smuzhiyun 	t_u16 inact_tmo;
6306*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_PS_INACTIVITY_TIMEOUT;
6307*4882a593Smuzhiyun 
6308*4882a593Smuzhiyun /** TLV type : STA Mac address */
6309*4882a593Smuzhiyun #define TLV_TYPE_STA_MAC_ADDRESS (PROPRIETARY_TLV_BASE_ID + 0x20) /* 0x0120 */
6310*4882a593Smuzhiyun 
6311*4882a593Smuzhiyun #define TLV_TYPE_RANDOM_MAC (PROPRIETARY_TLV_BASE_ID + 0xEC) /*0x01EC*/
6312*4882a593Smuzhiyun 
6313*4882a593Smuzhiyun /** MrvlIEtypes_MacAddr_t */
6314*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_MacAddr_t {
6315*4882a593Smuzhiyun 	/** Header */
6316*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6317*4882a593Smuzhiyun 	/** mac address */
6318*4882a593Smuzhiyun 	t_u8 mac[MLAN_MAC_ADDR_LENGTH];
6319*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_MacAddr_t;
6320*4882a593Smuzhiyun 
6321*4882a593Smuzhiyun /** Assoc Request */
6322*4882a593Smuzhiyun #define SUBTYPE_ASSOC_REQUEST 0
6323*4882a593Smuzhiyun /** ReAssoc Request */
6324*4882a593Smuzhiyun #define SUBTYPE_REASSOC_REQUEST 2
6325*4882a593Smuzhiyun /** Probe Resp */
6326*4882a593Smuzhiyun #define SUBTYPE_PROBE_RESP 5
6327*4882a593Smuzhiyun /** Disassoc Request */
6328*4882a593Smuzhiyun #define SUBTYPE_DISASSOC 10
6329*4882a593Smuzhiyun /** Auth Request */
6330*4882a593Smuzhiyun #define SUBTYPE_AUTH 11
6331*4882a593Smuzhiyun /** Deauth Request */
6332*4882a593Smuzhiyun #define SUBTYPE_DEAUTH 12
6333*4882a593Smuzhiyun /** Action frame */
6334*4882a593Smuzhiyun #define SUBTYPE_ACTION 13
6335*4882a593Smuzhiyun /** beacon */
6336*4882a593Smuzhiyun #define SUBTYPE_BEACON 8
6337*4882a593Smuzhiyun 
6338*4882a593Smuzhiyun #ifdef UAP_SUPPORT
6339*4882a593Smuzhiyun /** TLV type : AP Channel band Config */
6340*4882a593Smuzhiyun #define TLV_TYPE_UAP_CHAN_BAND_CONFIG                                          \
6341*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x2a) /* 0x012a */
6342*4882a593Smuzhiyun /** TLV type : AP Mac address */
6343*4882a593Smuzhiyun #define TLV_TYPE_UAP_MAC_ADDRESS (PROPRIETARY_TLV_BASE_ID + 0x2b) /* 0x012b */
6344*4882a593Smuzhiyun /** TLV type : AP Beacon period */
6345*4882a593Smuzhiyun #define TLV_TYPE_UAP_BEACON_PERIOD                                             \
6346*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x2c) /* 0x012c                             \
6347*4882a593Smuzhiyun 					  */
6348*4882a593Smuzhiyun /** TLV type : AP DTIM period */
6349*4882a593Smuzhiyun #define TLV_TYPE_UAP_DTIM_PERIOD (PROPRIETARY_TLV_BASE_ID + 0x2d) /* 0x012d */
6350*4882a593Smuzhiyun /** TLV type : AP Tx power */
6351*4882a593Smuzhiyun #define TLV_TYPE_UAP_TX_POWER (PROPRIETARY_TLV_BASE_ID + 0x2f) /* 0x012f */
6352*4882a593Smuzhiyun /** TLV type : AP SSID broadcast control */
6353*4882a593Smuzhiyun #define TLV_TYPE_UAP_BCAST_SSID_CTL                                            \
6354*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x30) /* 0x0130 */
6355*4882a593Smuzhiyun /** TLV type : AP Preamble control */
6356*4882a593Smuzhiyun #define TLV_TYPE_UAP_PREAMBLE_CTL                                              \
6357*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x31) /* 0x0131                             \
6358*4882a593Smuzhiyun 					  */
6359*4882a593Smuzhiyun /** TLV type : AP Antenna control */
6360*4882a593Smuzhiyun #define TLV_TYPE_UAP_ANTENNA_CTL (PROPRIETARY_TLV_BASE_ID + 0x32) /* 0x0132 */
6361*4882a593Smuzhiyun /** TLV type : AP RTS threshold */
6362*4882a593Smuzhiyun #define TLV_TYPE_UAP_RTS_THRESHOLD                                             \
6363*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x33) /* 0x0133                             \
6364*4882a593Smuzhiyun 					  */
6365*4882a593Smuzhiyun /** TLV type : AP Tx data rate */
6366*4882a593Smuzhiyun #define TLV_TYPE_UAP_TX_DATA_RATE                                              \
6367*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x35) /* 0x0135                             \
6368*4882a593Smuzhiyun 					  */
6369*4882a593Smuzhiyun /** TLV type: AP Packet forwarding control */
6370*4882a593Smuzhiyun #define TLV_TYPE_UAP_PKT_FWD_CTL (PROPRIETARY_TLV_BASE_ID + 0x36) /* 0x0136 */
6371*4882a593Smuzhiyun /** TLV type: STA information */
6372*4882a593Smuzhiyun #define TLV_TYPE_UAP_STA_INFO (PROPRIETARY_TLV_BASE_ID + 0x37) /* 0x0137 */
6373*4882a593Smuzhiyun /** TLV type: AP STA MAC address filter */
6374*4882a593Smuzhiyun #define TLV_TYPE_UAP_STA_MAC_ADDR_FILTER                                       \
6375*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x38) /* 0x0138 */
6376*4882a593Smuzhiyun /** TLV type: AP STA ageout timer */
6377*4882a593Smuzhiyun #define TLV_TYPE_UAP_STA_AGEOUT_TIMER                                          \
6378*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x39) /* 0x0139 */
6379*4882a593Smuzhiyun /** TLV type: AP WEP keys */
6380*4882a593Smuzhiyun #define TLV_TYPE_UAP_WEP_KEY (PROPRIETARY_TLV_BASE_ID + 0x3b) /* 0x013b */
6381*4882a593Smuzhiyun /** TLV type: AP WPA passphrase */
6382*4882a593Smuzhiyun #define TLV_TYPE_UAP_WPA_PASSPHRASE                                            \
6383*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x3c) /* 0x013c */
6384*4882a593Smuzhiyun /** TLV type: AP protocol */
6385*4882a593Smuzhiyun #define TLV_TYPE_UAP_ENCRYPT_PROTOCOL                                          \
6386*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x40) /* 0x0140 */
6387*4882a593Smuzhiyun /** TLV type: AP AKMP */
6388*4882a593Smuzhiyun #define TLV_TYPE_UAP_AKMP (PROPRIETARY_TLV_BASE_ID + 0x41) /* 0x0141 */
6389*4882a593Smuzhiyun /** TLV type: AP Fragment threshold */
6390*4882a593Smuzhiyun #define TLV_TYPE_UAP_FRAG_THRESHOLD                                            \
6391*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x46) /* 0x0146 */
6392*4882a593Smuzhiyun /** TLV type: AP Group rekey timer */
6393*4882a593Smuzhiyun #define TLV_TYPE_UAP_GRP_REKEY_TIME                                            \
6394*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x47) /* 0x0147 */
6395*4882a593Smuzhiyun /**TLV type : AP Max Station number */
6396*4882a593Smuzhiyun #define TLV_TYPE_UAP_MAX_STA_CNT (PROPRIETARY_TLV_BASE_ID + 0x55) /* 0x0155 */
6397*4882a593Smuzhiyun /**TLV type : AP Max Station number per chip */
6398*4882a593Smuzhiyun #define TLV_TYPE_UAP_MAX_STA_CNT_PER_CHIP                                      \
6399*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x140) /* 0x0240 */
6400*4882a593Smuzhiyun /**TLV type : AP Retry limit */
6401*4882a593Smuzhiyun #define TLV_TYPE_UAP_RETRY_LIMIT (PROPRIETARY_TLV_BASE_ID + 0x5d) /* 0x015d */
6402*4882a593Smuzhiyun /** TLV type : AP MCBC data rate */
6403*4882a593Smuzhiyun #define TLV_TYPE_UAP_MCBC_DATA_RATE                                            \
6404*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x62) /* 0x0162 */
6405*4882a593Smuzhiyun /**TLV type: AP RSN replay protection */
6406*4882a593Smuzhiyun #define TLV_TYPE_UAP_RSN_REPLAY_PROTECT                                        \
6407*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x64) /* 0x0164 */
6408*4882a593Smuzhiyun /**TLV type: AP mgmt IE passthru mask */
6409*4882a593Smuzhiyun #define TLV_TYPE_UAP_MGMT_IE_PASSTHRU_MASK                                     \
6410*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x70) /* 0x0170 */
6411*4882a593Smuzhiyun 
6412*4882a593Smuzhiyun /**TLV type: AP pairwise handshake timeout */
6413*4882a593Smuzhiyun #define TLV_TYPE_UAP_EAPOL_PWK_HSK_TIMEOUT                                     \
6414*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x75) /* 0x0175 */
6415*4882a593Smuzhiyun /**TLV type: AP pairwise handshake retries */
6416*4882a593Smuzhiyun #define TLV_TYPE_UAP_EAPOL_PWK_HSK_RETRIES                                     \
6417*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x76) /* 0x0176 */
6418*4882a593Smuzhiyun /**TLV type: AP groupwise handshake timeout */
6419*4882a593Smuzhiyun #define TLV_TYPE_UAP_EAPOL_GWK_HSK_TIMEOUT                                     \
6420*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x77) /* 0x0177 */
6421*4882a593Smuzhiyun /**TLV type: AP groupwise handshake retries */
6422*4882a593Smuzhiyun #define TLV_TYPE_UAP_EAPOL_GWK_HSK_RETRIES                                     \
6423*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x78) /* 0x0178 */
6424*4882a593Smuzhiyun /** TLV type: AP PS STA ageout timer */
6425*4882a593Smuzhiyun #define TLV_TYPE_UAP_PS_STA_AGEOUT_TIMER                                       \
6426*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x7b) /* 0x017b */
6427*4882a593Smuzhiyun /** TLV type : Pairwise Cipher */
6428*4882a593Smuzhiyun #define TLV_TYPE_PWK_CIPHER (PROPRIETARY_TLV_BASE_ID + 0x91) /* 0x0191 */
6429*4882a593Smuzhiyun /** TLV type : Group Cipher */
6430*4882a593Smuzhiyun #define TLV_TYPE_GWK_CIPHER (PROPRIETARY_TLV_BASE_ID + 0x92) /* 0x0192 */
6431*4882a593Smuzhiyun /** TLV type : BSS Status */
6432*4882a593Smuzhiyun #define TLV_TYPE_BSS_STATUS (PROPRIETARY_TLV_BASE_ID + 0x93) /* 0x0193 */
6433*4882a593Smuzhiyun /** TLV type :  AP WMM params */
6434*4882a593Smuzhiyun #define TLV_TYPE_AP_WMM_PARAM (PROPRIETARY_TLV_BASE_ID + 0xd0) /* 0x01d0 */
6435*4882a593Smuzhiyun /** TLV type : AP Tx beacon rate */
6436*4882a593Smuzhiyun #define TLV_TYPE_UAP_TX_BEACON_RATE (PROPRIETARY_TLV_BASE_ID + 288) /* 0x0220  \
6437*4882a593Smuzhiyun 								     */
6438*4882a593Smuzhiyun #define NXP_802_11_PER_PEER_STATS_CFG_TLV_ID                                   \
6439*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 346) /* 0x025A */
6440*4882a593Smuzhiyun #define NXP_802_11_PER_PEER_STATS_ENTRY_TLV_ID                                 \
6441*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 347) /* 0x025B */
6442*4882a593Smuzhiyun 
6443*4882a593Smuzhiyun /** MrvlIEtypes_beacon_period_t */
6444*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_beacon_period_t {
6445*4882a593Smuzhiyun 	/** Header */
6446*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6447*4882a593Smuzhiyun 	/** beacon period */
6448*4882a593Smuzhiyun 	t_u16 beacon_period;
6449*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_beacon_period_t;
6450*4882a593Smuzhiyun 
6451*4882a593Smuzhiyun /** MrvlIEtypes_dtim_period_t */
6452*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_dtim_period_t {
6453*4882a593Smuzhiyun 	/** Header */
6454*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6455*4882a593Smuzhiyun 	/** DTIM period */
6456*4882a593Smuzhiyun 	t_u8 dtim_period;
6457*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_dtim_period_t;
6458*4882a593Smuzhiyun 
6459*4882a593Smuzhiyun /** MrvlIEtypes_tx_rate_t */
6460*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_tx_rate_t {
6461*4882a593Smuzhiyun 	/** Header */
6462*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6463*4882a593Smuzhiyun 	/** tx data rate */
6464*4882a593Smuzhiyun 	t_u16 tx_data_rate;
6465*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_tx_rate_t;
6466*4882a593Smuzhiyun 
6467*4882a593Smuzhiyun /** MrvlIEtypes_mcbc_rate_t */
6468*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_mcbc_rate_t {
6469*4882a593Smuzhiyun 	/** Header */
6470*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6471*4882a593Smuzhiyun 	/** mcbc data rate */
6472*4882a593Smuzhiyun 	t_u16 mcbc_data_rate;
6473*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_mcbc_rate_t;
6474*4882a593Smuzhiyun 
6475*4882a593Smuzhiyun /** MrvlIEtypes_tx_power_t */
6476*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_tx_power_t {
6477*4882a593Smuzhiyun 	/** Header */
6478*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6479*4882a593Smuzhiyun 	/** tx power */
6480*4882a593Smuzhiyun 	t_u8 tx_power;
6481*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_tx_power_t;
6482*4882a593Smuzhiyun 
6483*4882a593Smuzhiyun /** MrvlIEtypes_bcast_ssid_t */
6484*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_bcast_ssid_t {
6485*4882a593Smuzhiyun 	/** Header */
6486*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6487*4882a593Smuzhiyun 	/** bcast ssid control*/
6488*4882a593Smuzhiyun 	t_u8 bcast_ssid_ctl;
6489*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_bcast_ssid_t;
6490*4882a593Smuzhiyun 
6491*4882a593Smuzhiyun /** MrvlIEtypes_antenna_mode_t */
6492*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_antenna_mode_t {
6493*4882a593Smuzhiyun 	/** Header */
6494*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6495*4882a593Smuzhiyun 	/** which antenna */
6496*4882a593Smuzhiyun 	t_u8 which_antenna;
6497*4882a593Smuzhiyun 	/** antenna mode*/
6498*4882a593Smuzhiyun 	t_u8 antenna_mode;
6499*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_antenna_mode_t;
6500*4882a593Smuzhiyun 
6501*4882a593Smuzhiyun /** MrvlIEtypes_pkt_forward_t */
6502*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_pkt_forward_t {
6503*4882a593Smuzhiyun 	/** Header */
6504*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6505*4882a593Smuzhiyun 	/** pkt foward control */
6506*4882a593Smuzhiyun 	t_u8 pkt_forward_ctl;
6507*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_pkt_forward_t;
6508*4882a593Smuzhiyun 
6509*4882a593Smuzhiyun /** MrvlIEtypes_max_sta_count_t */
6510*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_max_sta_count_t {
6511*4882a593Smuzhiyun 	/** Header */
6512*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6513*4882a593Smuzhiyun 	/** max station count */
6514*4882a593Smuzhiyun 	t_u16 max_sta_count;
6515*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_max_sta_count_t;
6516*4882a593Smuzhiyun 
6517*4882a593Smuzhiyun /** MrvlIEtypes_uap_max_sta_cnt */
6518*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_uap_max_sta_cnt_t {
6519*4882a593Smuzhiyun 	/** Header */
6520*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6521*4882a593Smuzhiyun 	/** max station count */
6522*4882a593Smuzhiyun 	t_u16 uap_max_sta;
6523*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_uap_max_sta_cnt_t;
6524*4882a593Smuzhiyun 
6525*4882a593Smuzhiyun #define MRVL_ACTION_CHAN_SWITCH_ANNOUNCE (PROPRIETARY_TLV_BASE_ID + 342)
6526*4882a593Smuzhiyun 
6527*4882a593Smuzhiyun /** MrvlIEtypes_uap_chan_switch */
6528*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_action_chan_switch_t {
6529*4882a593Smuzhiyun 	/** Header */
6530*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6531*4882a593Smuzhiyun 	/* 0 send broadcast CSA action frame, 1 send unicast CSA action frame */
6532*4882a593Smuzhiyun 	t_u8 mode;
6533*4882a593Smuzhiyun 	/* number of frame */
6534*4882a593Smuzhiyun 	t_u8 num_pkt;
6535*4882a593Smuzhiyun 	/** reserved */
6536*4882a593Smuzhiyun 	t_u16 reserved;
6537*4882a593Smuzhiyun 	/**ie buf*/
6538*4882a593Smuzhiyun 	t_u8 ie_buf[];
6539*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_action_chan_switch_t;
6540*4882a593Smuzhiyun 
6541*4882a593Smuzhiyun /** MrvlIEtypes_sta_ageout_t */
6542*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_sta_ageout_t {
6543*4882a593Smuzhiyun 	/** Header */
6544*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6545*4882a593Smuzhiyun 	/** station age out timer */
6546*4882a593Smuzhiyun 	t_u32 sta_ageout_timer;
6547*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_sta_ageout_t;
6548*4882a593Smuzhiyun 
6549*4882a593Smuzhiyun /** MrvlIEtypes_rts_threshold_t */
6550*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_rts_threshold_t {
6551*4882a593Smuzhiyun 	/** Header */
6552*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6553*4882a593Smuzhiyun 	/** rts threshold */
6554*4882a593Smuzhiyun 	t_u16 rts_threshold;
6555*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_rts_threshold_t;
6556*4882a593Smuzhiyun 
6557*4882a593Smuzhiyun /** MrvlIEtypes_frag_threshold_t */
6558*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_frag_threshold_t {
6559*4882a593Smuzhiyun 	/** Header */
6560*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6561*4882a593Smuzhiyun 	/** frag threshold */
6562*4882a593Smuzhiyun 	t_u16 frag_threshold;
6563*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_frag_threshold_t;
6564*4882a593Smuzhiyun 
6565*4882a593Smuzhiyun /** MrvlIEtypes_retry_limit_t */
6566*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_retry_limit_t {
6567*4882a593Smuzhiyun 	/** Header */
6568*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6569*4882a593Smuzhiyun 	/** retry limit */
6570*4882a593Smuzhiyun 	t_u8 retry_limit;
6571*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_retry_limit_t;
6572*4882a593Smuzhiyun 
6573*4882a593Smuzhiyun /** MrvlIEtypes_eapol_pwk_hsk_timeout_t */
6574*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_eapol_pwk_hsk_timeout_t {
6575*4882a593Smuzhiyun 	/** Header */
6576*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6577*4882a593Smuzhiyun 	/** pairwise update timeout in milliseconds */
6578*4882a593Smuzhiyun 	t_u32 pairwise_update_timeout;
6579*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_eapol_pwk_hsk_timeout_t;
6580*4882a593Smuzhiyun 
6581*4882a593Smuzhiyun /** MrvlIEtypes_eapol_pwk_hsk_retries_t */
6582*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_eapol_pwk_hsk_retries_t {
6583*4882a593Smuzhiyun 	/** Header */
6584*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6585*4882a593Smuzhiyun 	/** pairwise handshake retries */
6586*4882a593Smuzhiyun 	t_u32 pwk_retries;
6587*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_eapol_pwk_hsk_retries_t;
6588*4882a593Smuzhiyun 
6589*4882a593Smuzhiyun /** MrvlIEtypes_eapol_gwk_hsk_timeout_t */
6590*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_eapol_gwk_hsk_timeout_t {
6591*4882a593Smuzhiyun 	/** Header */
6592*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6593*4882a593Smuzhiyun 	/** groupwise update timeout in milliseconds */
6594*4882a593Smuzhiyun 	t_u32 groupwise_update_timeout;
6595*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_eapol_gwk_hsk_timeout_t;
6596*4882a593Smuzhiyun 
6597*4882a593Smuzhiyun /** MrvlIEtypes_eapol_gwk_hsk_retries_t */
6598*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_eapol_gwk_hsk_retries_t {
6599*4882a593Smuzhiyun 	/** Header */
6600*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6601*4882a593Smuzhiyun 	/** groupwise handshake retries */
6602*4882a593Smuzhiyun 	t_u32 gwk_retries;
6603*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_eapol_gwk_hsk_retries_t;
6604*4882a593Smuzhiyun 
6605*4882a593Smuzhiyun /** MrvlIEtypes_mgmt_ie_passthru_t */
6606*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_mgmt_ie_passthru_t {
6607*4882a593Smuzhiyun 	/** Header */
6608*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6609*4882a593Smuzhiyun 	/** mgmt IE mask value */
6610*4882a593Smuzhiyun 	t_u32 mgmt_ie_mask;
6611*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_mgmt_ie_passthru_t;
6612*4882a593Smuzhiyun 
6613*4882a593Smuzhiyun /** MrvlIEtypes_mac_filter_t */
6614*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_mac_filter_t {
6615*4882a593Smuzhiyun 	/** Header */
6616*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6617*4882a593Smuzhiyun 	/** Filter mode */
6618*4882a593Smuzhiyun 	t_u8 filter_mode;
6619*4882a593Smuzhiyun 	/** Number of STA MACs */
6620*4882a593Smuzhiyun 	t_u8 count;
6621*4882a593Smuzhiyun 	/** STA MAC addresses buffer */
6622*4882a593Smuzhiyun 	t_u8 mac_address[1];
6623*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_mac_filter_t;
6624*4882a593Smuzhiyun 
6625*4882a593Smuzhiyun /** MrvlIEtypes_auth_type_t */
6626*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_auth_type_t {
6627*4882a593Smuzhiyun 	/** Header */
6628*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6629*4882a593Smuzhiyun 	/** Authentication type */
6630*4882a593Smuzhiyun 	t_u8 auth_type;
6631*4882a593Smuzhiyun 	/** PWE derivation */
6632*4882a593Smuzhiyun 	t_u8 PWE_derivation;
6633*4882a593Smuzhiyun 	/** transition disable */
6634*4882a593Smuzhiyun 	t_u8 transition_disable;
6635*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_auth_type_t;
6636*4882a593Smuzhiyun 
6637*4882a593Smuzhiyun /** MrvlIEtypes_encrypt_protocol_t */
6638*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_encrypt_protocol_t {
6639*4882a593Smuzhiyun 	/** Header */
6640*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6641*4882a593Smuzhiyun 	/** encryption protocol */
6642*4882a593Smuzhiyun 	t_u16 protocol;
6643*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_encrypt_protocol_t;
6644*4882a593Smuzhiyun 
6645*4882a593Smuzhiyun /** MrvlIEtypes_pwk_cipher_t */
6646*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_pwk_cipher_t {
6647*4882a593Smuzhiyun 	/** Header */
6648*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6649*4882a593Smuzhiyun 	/** protocol */
6650*4882a593Smuzhiyun 	t_u16 protocol;
6651*4882a593Smuzhiyun 	/** pairwise cipher */
6652*4882a593Smuzhiyun 	t_u8 pairwise_cipher;
6653*4882a593Smuzhiyun 	/** reserved */
6654*4882a593Smuzhiyun 	t_u8 reserved;
6655*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_pwk_cipher_t;
6656*4882a593Smuzhiyun 
6657*4882a593Smuzhiyun /** MrvlIEtypes_gwk_cipher_t */
6658*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_gwk_cipher_t {
6659*4882a593Smuzhiyun 	/** Header */
6660*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6661*4882a593Smuzhiyun 	/** group cipher */
6662*4882a593Smuzhiyun 	t_u8 group_cipher;
6663*4882a593Smuzhiyun 	/** reserved */
6664*4882a593Smuzhiyun 	t_u8 reserved;
6665*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_gwk_cipher_t;
6666*4882a593Smuzhiyun 
6667*4882a593Smuzhiyun /** MrvlIEtypes_akmp_t */
6668*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_akmp_t {
6669*4882a593Smuzhiyun 	/** Header */
6670*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6671*4882a593Smuzhiyun 	/** key management */
6672*4882a593Smuzhiyun 	t_u16 key_mgmt;
6673*4882a593Smuzhiyun 	/** key management operation */
6674*4882a593Smuzhiyun 	t_u16 key_mgmt_operation;
6675*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_akmp_t;
6676*4882a593Smuzhiyun 
6677*4882a593Smuzhiyun /** MrvlIEtypes_passphrase_t */
6678*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_passphrase_t {
6679*4882a593Smuzhiyun 	/** Header */
6680*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6681*4882a593Smuzhiyun 	/** passphrase */
6682*4882a593Smuzhiyun 	t_u8 passphrase[1];
6683*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_passphrase_t;
6684*4882a593Smuzhiyun 
6685*4882a593Smuzhiyun /** MrvlIEtypes_rsn_replay_prot_t */
6686*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_rsn_replay_prot_t {
6687*4882a593Smuzhiyun 	/** Header */
6688*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6689*4882a593Smuzhiyun 	/** rsn replay proection */
6690*4882a593Smuzhiyun 	t_u8 rsn_replay_prot;
6691*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_rsn_replay_prot_t;
6692*4882a593Smuzhiyun 
6693*4882a593Smuzhiyun /** MrvlIEtypes_group_rekey_time_t */
6694*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_group_rekey_time_t {
6695*4882a593Smuzhiyun 	/** Header */
6696*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6697*4882a593Smuzhiyun 	/** group key rekey time */
6698*4882a593Smuzhiyun 	t_u32 gk_rekey_time;
6699*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_group_rekey_time_t;
6700*4882a593Smuzhiyun 
6701*4882a593Smuzhiyun /** MrvlIEtypes_wep_key_t */
6702*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_wep_key_t {
6703*4882a593Smuzhiyun 	/** Header */
6704*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6705*4882a593Smuzhiyun 	/** key index */
6706*4882a593Smuzhiyun 	t_u8 key_index;
6707*4882a593Smuzhiyun 	/** is default */
6708*4882a593Smuzhiyun 	t_u8 is_default;
6709*4882a593Smuzhiyun 	/** key data */
6710*4882a593Smuzhiyun 	t_u8 key[1];
6711*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_wep_key_t;
6712*4882a593Smuzhiyun 
6713*4882a593Smuzhiyun /** MrvlIEtypes_bss_status_t */
6714*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_bss_status_t {
6715*4882a593Smuzhiyun 	/** Header */
6716*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6717*4882a593Smuzhiyun 	/** BSS status, READ only */
6718*4882a593Smuzhiyun 	t_u16 bss_status;
6719*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_bss_status_t;
6720*4882a593Smuzhiyun 
6721*4882a593Smuzhiyun /** MrvlIEtypes_preamble_t */
6722*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_preamble_t {
6723*4882a593Smuzhiyun 	/** Header */
6724*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6725*4882a593Smuzhiyun 	/** preamble type, READ only */
6726*4882a593Smuzhiyun 	t_u8 preamble_type;
6727*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_preamble_t;
6728*4882a593Smuzhiyun 
6729*4882a593Smuzhiyun /** MrvlIEtypes_wmm_parameter_t */
6730*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_wmm_parameter_t {
6731*4882a593Smuzhiyun 	/** Header */
6732*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6733*4882a593Smuzhiyun 	/** WMM parameter */
6734*4882a593Smuzhiyun 	WmmParameter_t wmm_para;
6735*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_wmm_parameter_t;
6736*4882a593Smuzhiyun 
6737*4882a593Smuzhiyun /** MrvlIEtypes_wacp_mode_t */
6738*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_wacp_mode_t {
6739*4882a593Smuzhiyun 	/** Header */
6740*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6741*4882a593Smuzhiyun 	/** wacp_mode */
6742*4882a593Smuzhiyun 	t_u8 wacp_mode;
6743*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_wacp_mode_t;
6744*4882a593Smuzhiyun 
6745*4882a593Smuzhiyun /** SNMP_MIB_UAP_INDEX */
6746*4882a593Smuzhiyun typedef enum _SNMP_MIB_UAP_INDEX {
6747*4882a593Smuzhiyun 	tkip_mic_failures = 0x0b,
6748*4882a593Smuzhiyun 	ccmp_decrypt_errors = 0x0c,
6749*4882a593Smuzhiyun 	wep_undecryptable_count = 0x0d,
6750*4882a593Smuzhiyun 	wep_icv_error_count = 0x0e,
6751*4882a593Smuzhiyun 	decrypt_failure_count = 0xf,
6752*4882a593Smuzhiyun 	dot11_failed_count = 0x12,
6753*4882a593Smuzhiyun 	dot11_retry_count = 0x13,
6754*4882a593Smuzhiyun 	dot11_multi_retry_count = 0x14,
6755*4882a593Smuzhiyun 	dot11_frame_dup_count = 0x15,
6756*4882a593Smuzhiyun 	dot11_rts_success_count = 0x16,
6757*4882a593Smuzhiyun 	dot11_rts_failure_count = 0x17,
6758*4882a593Smuzhiyun 	dot11_ack_failure_count = 0x18,
6759*4882a593Smuzhiyun 	dot11_rx_fragment_count = 0x19,
6760*4882a593Smuzhiyun 	dot11_mcast_rx_frame_count = 0x1a,
6761*4882a593Smuzhiyun 	dot11_fcs_error_count = 0x1b,
6762*4882a593Smuzhiyun 	dot11_tx_frame_count = 0x1c,
6763*4882a593Smuzhiyun 	dot11_rsna_tkip_cm_invoked = 0x1d,
6764*4882a593Smuzhiyun 	dot11_rsna_4way_hshk_failures = 0x1e,
6765*4882a593Smuzhiyun 	dot11_mcast_tx_count = 0x1f,
6766*4882a593Smuzhiyun } SNMP_MIB_UAP_INDEX;
6767*4882a593Smuzhiyun 
6768*4882a593Smuzhiyun /** MrvlIEtypes_snmp_oid_t */
6769*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_snmp_oid_t {
6770*4882a593Smuzhiyun 	/** Header */
6771*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6772*4882a593Smuzhiyun 	/** data */
6773*4882a593Smuzhiyun 	t_u32 data;
6774*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_snmp_oid_t;
6775*4882a593Smuzhiyun 
6776*4882a593Smuzhiyun /** HostCmd_SYS_CONFIG */
6777*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_SYS_CONFIG {
6778*4882a593Smuzhiyun 	/** CMD Action GET/SET*/
6779*4882a593Smuzhiyun 	t_u16 action;
6780*4882a593Smuzhiyun 	/** Tlv buffer */
6781*4882a593Smuzhiyun 	t_u8 tlv_buffer[1];
6782*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_SYS_CONFIG;
6783*4882a593Smuzhiyun 
6784*4882a593Smuzhiyun /** HostCmd_SYS_CONFIG */
6785*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_SYS_INFO {
6786*4882a593Smuzhiyun 	/** sys info */
6787*4882a593Smuzhiyun 	t_u8 sys_info[64];
6788*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_SYS_INFO;
6789*4882a593Smuzhiyun 
6790*4882a593Smuzhiyun /** HostCmd_DS_STA_DEAUTH */
6791*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_STA_DEAUTH {
6792*4882a593Smuzhiyun 	/** mac address */
6793*4882a593Smuzhiyun 	t_u8 mac[MLAN_MAC_ADDR_LENGTH];
6794*4882a593Smuzhiyun 	/** reason code */
6795*4882a593Smuzhiyun 	t_u16 reason;
6796*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_STA_DEAUTH;
6797*4882a593Smuzhiyun 
6798*4882a593Smuzhiyun /** HostCmd_DS_REPORT_MIC */
6799*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_REPORT_MIC {
6800*4882a593Smuzhiyun 	/** mac address */
6801*4882a593Smuzhiyun 	t_u8 mac[MLAN_MAC_ADDR_LENGTH];
6802*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_REPORT_MIC;
6803*4882a593Smuzhiyun 
6804*4882a593Smuzhiyun /** HostCmd_UAP_OPER_CTRL */
6805*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_UAP_OPER_CTRL {
6806*4882a593Smuzhiyun 	/** CMD Action GET/SET*/
6807*4882a593Smuzhiyun 	t_u16 action;
6808*4882a593Smuzhiyun 	/** control*/
6809*4882a593Smuzhiyun 	t_u16 ctrl;
6810*4882a593Smuzhiyun 	/**channel operation*/
6811*4882a593Smuzhiyun 	t_u16 chan_opt;
6812*4882a593Smuzhiyun 	/**channel band tlv*/
6813*4882a593Smuzhiyun 	MrvlIEtypes_channel_band_t channel_band;
6814*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_UAP_OPER_CTRL;
6815*4882a593Smuzhiyun 
6816*4882a593Smuzhiyun /** Host Command id: POWER_MGMT  */
6817*4882a593Smuzhiyun #define HOST_CMD_POWER_MGMT_EXT 0x00ef
6818*4882a593Smuzhiyun /** TLV type: AP Sleep param */
6819*4882a593Smuzhiyun #define TLV_TYPE_AP_SLEEP_PARAM (PROPRIETARY_TLV_BASE_ID + 0x6a) /* 0x016a */
6820*4882a593Smuzhiyun /** TLV type: AP Inactivity Sleep param */
6821*4882a593Smuzhiyun #define TLV_TYPE_AP_INACT_SLEEP_PARAM                                          \
6822*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x6b) /* 0x016b */
6823*4882a593Smuzhiyun 
6824*4882a593Smuzhiyun /** MrvlIEtypes_sleep_param_t */
6825*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_sleep_param_t {
6826*4882a593Smuzhiyun 	/** Header */
6827*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6828*4882a593Smuzhiyun 	/** control bitmap */
6829*4882a593Smuzhiyun 	t_u32 ctrl_bitmap;
6830*4882a593Smuzhiyun 	/** min_sleep */
6831*4882a593Smuzhiyun 	t_u32 min_sleep;
6832*4882a593Smuzhiyun 	/** max_sleep */
6833*4882a593Smuzhiyun 	t_u32 max_sleep;
6834*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_sleep_param_t;
6835*4882a593Smuzhiyun 
6836*4882a593Smuzhiyun /** MrvlIEtypes_inact_sleep_param_t */
6837*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_inact_sleep_param_t {
6838*4882a593Smuzhiyun 	/** Header */
6839*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6840*4882a593Smuzhiyun 	/** inactivity timeout */
6841*4882a593Smuzhiyun 	t_u32 inactivity_to;
6842*4882a593Smuzhiyun 
6843*4882a593Smuzhiyun 	/** min_awake */
6844*4882a593Smuzhiyun 	t_u32 min_awake;
6845*4882a593Smuzhiyun 	/** max_awake */
6846*4882a593Smuzhiyun 	t_u32 max_awake;
6847*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_inact_sleep_param_t;
6848*4882a593Smuzhiyun 
6849*4882a593Smuzhiyun /** HostCmd_DS_POWER_MGMT */
6850*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_POWER_MGMT_EXT {
6851*4882a593Smuzhiyun 	/** CMD Action Get/Set*/
6852*4882a593Smuzhiyun 	t_u16 action;
6853*4882a593Smuzhiyun 	/** power mode */
6854*4882a593Smuzhiyun 	t_u16 power_mode;
6855*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_POWER_MGMT_EXT;
6856*4882a593Smuzhiyun 
6857*4882a593Smuzhiyun /** MrvlIEtypes_ps_sta_ageout_t */
6858*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_ps_sta_ageout_t {
6859*4882a593Smuzhiyun 	/** Header */
6860*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6861*4882a593Smuzhiyun 	/** station age out timer */
6862*4882a593Smuzhiyun 	t_u32 ps_sta_ageout_timer;
6863*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_ps_sta_ageout_t;
6864*4882a593Smuzhiyun 
6865*4882a593Smuzhiyun /** MrvlIEtypes_sta_info_t */
6866*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_sta_info_t {
6867*4882a593Smuzhiyun 	/** Header */
6868*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6869*4882a593Smuzhiyun 	/** STA MAC address */
6870*4882a593Smuzhiyun 	t_u8 mac_address[MLAN_MAC_ADDR_LENGTH];
6871*4882a593Smuzhiyun 	/** Power Mgmt status */
6872*4882a593Smuzhiyun 	t_u8 power_mgmt_status;
6873*4882a593Smuzhiyun 	/** RSSI */
6874*4882a593Smuzhiyun 	t_s8 rssi;
6875*4882a593Smuzhiyun 	/** ie_buf */
6876*4882a593Smuzhiyun 	t_u8 ie_buf[];
6877*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_sta_info_t;
6878*4882a593Smuzhiyun 
6879*4882a593Smuzhiyun /** HostCmd_DS_STA_LIST */
6880*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_STA_LIST {
6881*4882a593Smuzhiyun 	/** Number of STAs */
6882*4882a593Smuzhiyun 	t_u16 sta_count;
6883*4882a593Smuzhiyun 	/* MrvlIEtypes_sta_info_t sta_info[]; */
6884*4882a593Smuzhiyun 	t_u8 tlv_buf[];
6885*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_STA_LIST;
6886*4882a593Smuzhiyun 
6887*4882a593Smuzhiyun /** TLV ID : WAPI Information */
6888*4882a593Smuzhiyun #define TLV_TYPE_AP_WAPI_INFO (PROPRIETARY_TLV_BASE_ID + 0x67) /* 0x0167 */
6889*4882a593Smuzhiyun 
6890*4882a593Smuzhiyun /** MrvlIEtypes_sta_info_t */
6891*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_wapi_info_t {
6892*4882a593Smuzhiyun 	/** Header */
6893*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6894*4882a593Smuzhiyun 	/** Multicast PN */
6895*4882a593Smuzhiyun 	t_u8 multicast_PN[16];
6896*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_wapi_info_t;
6897*4882a593Smuzhiyun #endif /* UAP_SUPPORT */
6898*4882a593Smuzhiyun 
6899*4882a593Smuzhiyun /** HostCmd_DS_TX_RX_HISTOGRAM */
6900*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_TX_RX_HISTOGRAM {
6901*4882a593Smuzhiyun 	/**  Enable or disable  */
6902*4882a593Smuzhiyun 	t_u8 enable;
6903*4882a593Smuzhiyun 	/** Choose to get TX, RX or both */
6904*4882a593Smuzhiyun 	t_u16 action;
6905*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_TX_RX_HISTOGRAM;
6906*4882a593Smuzhiyun 
6907*4882a593Smuzhiyun /** TLV buffer : 2040 coex config */
6908*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_2040_coex_enable_t {
6909*4882a593Smuzhiyun 	/** Header */
6910*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6911*4882a593Smuzhiyun 	/** Enable */
6912*4882a593Smuzhiyun 	t_u8 enable_2040coex;
6913*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_2040_coex_enable_t;
6914*4882a593Smuzhiyun 
6915*4882a593Smuzhiyun /**BT coexit scan time setting*/
6916*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_BtCoexScanTime_t {
6917*4882a593Smuzhiyun 	/** Header */
6918*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6919*4882a593Smuzhiyun 	/**coex scan state  0: disable 1: enable*/
6920*4882a593Smuzhiyun 	t_u8 coex_scan;
6921*4882a593Smuzhiyun 	/**reserved*/
6922*4882a593Smuzhiyun 	t_u8 reserved;
6923*4882a593Smuzhiyun 	/**min scan time*/
6924*4882a593Smuzhiyun 	t_u16 min_scan_time;
6925*4882a593Smuzhiyun 	/**max scan time*/
6926*4882a593Smuzhiyun 	t_u16 max_scan_time;
6927*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_BtCoexScanTime_t;
6928*4882a593Smuzhiyun 
6929*4882a593Smuzhiyun /**BT coexit aggr win size */
6930*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIETypes_BtCoexAggrWinSize_t {
6931*4882a593Smuzhiyun 	/** Header */
6932*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6933*4882a593Smuzhiyun 	/**winsize  0: restore default winsize, 1: use below winsize */
6934*4882a593Smuzhiyun 	t_u8 coex_win_size;
6935*4882a593Smuzhiyun 	/**tx win size*/
6936*4882a593Smuzhiyun 	t_u8 tx_win_size;
6937*4882a593Smuzhiyun 	/**rx win size*/
6938*4882a593Smuzhiyun 	t_u8 rx_win_size;
6939*4882a593Smuzhiyun 	/**reserved*/
6940*4882a593Smuzhiyun 	t_u8 reserved;
6941*4882a593Smuzhiyun } MLAN_PACK_END MrvlIETypes_BtCoexAggrWinSize_t;
6942*4882a593Smuzhiyun 
6943*4882a593Smuzhiyun /** MrvlIEtypes_eapol_pkt_t */
6944*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_eapol_pkt_t {
6945*4882a593Smuzhiyun 	/** Header */
6946*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6947*4882a593Smuzhiyun 	/** eapol pkt buf */
6948*4882a593Smuzhiyun 	t_u8 pkt_buf[];
6949*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_eapol_pkt_t;
6950*4882a593Smuzhiyun 
6951*4882a593Smuzhiyun /** HostCmd_DS_EAPOL_PKT */
6952*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_EAPOL_PKT {
6953*4882a593Smuzhiyun 	/** Action */
6954*4882a593Smuzhiyun 	t_u16 action;
6955*4882a593Smuzhiyun 	/** TLV buffer */
6956*4882a593Smuzhiyun 	MrvlIEtypes_eapol_pkt_t tlv_eapol;
6957*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_EAPOL_PKT;
6958*4882a593Smuzhiyun 
6959*4882a593Smuzhiyun /** HostCmd_DS_OXYGEN_MIMO_SWITCH */
6960*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_MIMO_SWITCH {
6961*4882a593Smuzhiyun 	/** Tx path antanne mode */
6962*4882a593Smuzhiyun 	t_u8 txpath_antmode;
6963*4882a593Smuzhiyun 	/** Rx path antanne mode */
6964*4882a593Smuzhiyun 	t_u8 rxpath_antmode;
6965*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_MIMO_SWITCH;
6966*4882a593Smuzhiyun 
6967*4882a593Smuzhiyun #ifdef RX_PACKET_COALESCE
6968*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_RX_PKT_COAL_CFG {
6969*4882a593Smuzhiyun 	/** Action */
6970*4882a593Smuzhiyun 	t_u16 action;
6971*4882a593Smuzhiyun 	/** Packet threshold */
6972*4882a593Smuzhiyun 	t_u32 packet_threshold;
6973*4882a593Smuzhiyun 	/** Timeout */
6974*4882a593Smuzhiyun 	t_u16 delay;
6975*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_RX_PKT_COAL_CFG;
6976*4882a593Smuzhiyun #endif
6977*4882a593Smuzhiyun 
6978*4882a593Smuzhiyun /** TLV buffer : firmware roam keys */
6979*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_keyParams_t {
6980*4882a593Smuzhiyun 	/** Header */
6981*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6982*4882a593Smuzhiyun 	/** Tlv buffer */
6983*4882a593Smuzhiyun 	t_u8 tlv_buffer[];
6984*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_keyParams_t;
6985*4882a593Smuzhiyun 
6986*4882a593Smuzhiyun /** TLV buffer : firmware roam enable */
6987*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_fw_roam_enable_t {
6988*4882a593Smuzhiyun 	/** Header */
6989*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
6990*4882a593Smuzhiyun 	/** Enable */
6991*4882a593Smuzhiyun 	t_u8 roam_enable;
6992*4882a593Smuzhiyun 	/** User set passphrase*/
6993*4882a593Smuzhiyun 	t_u8 userset_passphrase;
6994*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_fw_roam_enable_t;
6995*4882a593Smuzhiyun /** HostCmd_DS_ROAM_OFFLOAD */
6996*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_ROAM_OFFLOAD {
6997*4882a593Smuzhiyun 	/** Action */
6998*4882a593Smuzhiyun 	t_u16 action;
6999*4882a593Smuzhiyun 	/** tlv */
7000*4882a593Smuzhiyun 	t_u8 tlv[];
7001*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_ROAM_OFFLOAD;
7002*4882a593Smuzhiyun /** HostCmd_DS_ROAM_OFFLOAD_APLIST */
7003*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_roam_aplist_t {
7004*4882a593Smuzhiyun 	/** Header */
7005*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
7006*4882a593Smuzhiyun 	/** AP mac addrs**/
7007*4882a593Smuzhiyun 	t_u8 ap_mac[][MLAN_MAC_ADDR_LENGTH];
7008*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_roam_aplist_t;
7009*4882a593Smuzhiyun /** MrvlIEtypes_fw_roam_trigger_condition_t */
7010*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_fw_roam_trigger_condition_t {
7011*4882a593Smuzhiyun 	/** Header */
7012*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
7013*4882a593Smuzhiyun 	/** Roam offload trigger condition**/
7014*4882a593Smuzhiyun 	t_u16 trigger_condition;
7015*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_fw_roam_trigger_condition_t;
7016*4882a593Smuzhiyun /** MrvlIEtypes_fw_roam_retry_count_t */
7017*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_fw_roam_retry_count_t {
7018*4882a593Smuzhiyun 	/** Header */
7019*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
7020*4882a593Smuzhiyun 	/** Roam offload retry count**/
7021*4882a593Smuzhiyun 	t_u16 retry_count;
7022*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_fw_roam_retry_count_t;
7023*4882a593Smuzhiyun /** MrvlIEtypes_fw_roam_bgscan_setting_t */
7024*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_fw_roam_bgscan_setting_t {
7025*4882a593Smuzhiyun 	/** Header */
7026*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
7027*4882a593Smuzhiyun 	/** Bss type of BG scan during fw roam**/
7028*4882a593Smuzhiyun 	t_u8 bss_type;
7029*4882a593Smuzhiyun 	/** Number of channels scanned during each scan**/
7030*4882a593Smuzhiyun 	t_u8 channels_perscan;
7031*4882a593Smuzhiyun 	/** Interval between consecutive scans**/
7032*4882a593Smuzhiyun 	t_u32 scan_interval;
7033*4882a593Smuzhiyun 	/** Condition to trigger report to host**/
7034*4882a593Smuzhiyun 	t_u32 report_condition;
7035*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_fw_roam_bgscan_setting_t;
7036*4882a593Smuzhiyun /** MrvlIEtypes_para_rssi_t */
7037*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_para_rssi_t {
7038*4882a593Smuzhiyun 	/** Header */
7039*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
7040*4882a593Smuzhiyun 	/** Max value of RSSI threshold**/
7041*4882a593Smuzhiyun 	t_u8 max_rssi;
7042*4882a593Smuzhiyun 	/** Min value of RSSI threshold**/
7043*4882a593Smuzhiyun 	t_u8 min_rssi;
7044*4882a593Smuzhiyun 	/** Adjusting step value of RSSI threshold**/
7045*4882a593Smuzhiyun 	t_u8 step_rssi;
7046*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_para_rssi_t;
7047*4882a593Smuzhiyun /** MrvlIEtypes_band_rssi_t */
7048*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_band_rssi_t {
7049*4882a593Smuzhiyun 	/** Header */
7050*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
7051*4882a593Smuzhiyun 	/** BAND and RSSI gap*/
7052*4882a593Smuzhiyun 	mlan_ds_misc_band_rssi band_rssi;
7053*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_band_rssi_t;
7054*4882a593Smuzhiyun /** MrvlIEtypes_ees_param_set_t */
7055*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_ees_param_set_t {
7056*4882a593Smuzhiyun 	/** Header */
7057*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
7058*4882a593Smuzhiyun 	/** ees params*/
7059*4882a593Smuzhiyun 	mlan_ds_misc_ees_cfg ees_cfg;
7060*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_ees_param_set_t;
7061*4882a593Smuzhiyun /** MrvlIEtypes_roam_blacklist_t */
7062*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_roam_blacklist_t {
7063*4882a593Smuzhiyun 	/** Header */
7064*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
7065*4882a593Smuzhiyun 	/* Black list(BSSID list)*/
7066*4882a593Smuzhiyun 	mlan_ds_misc_roam_offload_aplist blacklist;
7067*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_roam_blacklist_t;
7068*4882a593Smuzhiyun /** MrvlIEtypes_beacon_miss_threshold_t */
7069*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_beacon_miss_threshold_t {
7070*4882a593Smuzhiyun 	/** Header */
7071*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
7072*4882a593Smuzhiyun 	/* Beacon miss threshold*/
7073*4882a593Smuzhiyun 	t_u8 bcn_miss_threshold;
7074*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_beacon_miss_threshold_t;
7075*4882a593Smuzhiyun /** MrvlIEtypes_pre_beacon_miss_threshold_t */
7076*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_pre_beacon_miss_threshold_t {
7077*4882a593Smuzhiyun 	/** Header */
7078*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
7079*4882a593Smuzhiyun 	/* Pre-Beacon miss threshold*/
7080*4882a593Smuzhiyun 	t_u8 pre_bcn_miss_threshold;
7081*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_pre_beacon_miss_threshold_t;
7082*4882a593Smuzhiyun 
7083*4882a593Smuzhiyun /** HostCmd_DS_DYN_BW */
7084*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_DYN_BW {
7085*4882a593Smuzhiyun 	/** Action */
7086*4882a593Smuzhiyun 	t_u16 action;
7087*4882a593Smuzhiyun 	/** Dynamic bandwidth */
7088*4882a593Smuzhiyun 	t_u16 dyn_bw;
7089*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_DYN_BW;
7090*4882a593Smuzhiyun 
7091*4882a593Smuzhiyun /** Host Command ID : Packet aggregation CTRL */
7092*4882a593Smuzhiyun #define HostCmd_CMD_PACKET_AGGR_CTRL 0x0251
7093*4882a593Smuzhiyun 
7094*4882a593Smuzhiyun /** HostCmd_DS_PACKET_AGGR_CTRL */
7095*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_PACKET_AGGR_AGGR_CTRL {
7096*4882a593Smuzhiyun 	/** ACT_GET/ACT_SET */
7097*4882a593Smuzhiyun 	t_u16 action;
7098*4882a593Smuzhiyun 	/** enable aggregation, BIT(0) TX, BIT(1)RX */
7099*4882a593Smuzhiyun 	t_u16 aggr_enable;
7100*4882a593Smuzhiyun 	/** Tx aggregation alignment */
7101*4882a593Smuzhiyun 	t_u16 tx_aggr_max_size;
7102*4882a593Smuzhiyun 	/** Tx aggregation max packet number */
7103*4882a593Smuzhiyun 	t_u16 tx_aggr_max_num;
7104*4882a593Smuzhiyun 	/** Tx aggregation alignment */
7105*4882a593Smuzhiyun 	t_u16 tx_aggr_align;
7106*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_PACKET_AGGR_CTRL;
7107*4882a593Smuzhiyun 
7108*4882a593Smuzhiyun #ifdef USB
7109*4882a593Smuzhiyun /** Host Command ID : Packet aggregation over host interface */
7110*4882a593Smuzhiyun #define HostCmd_CMD_PACKET_AGGR_OVER_HOST_INTERFACE 0x0117
7111*4882a593Smuzhiyun 
7112*4882a593Smuzhiyun /** TLV ID : USB Aggregation parameters */
7113*4882a593Smuzhiyun #define MRVL_USB_AGGR_PARAM_TLV_ID                                             \
7114*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0xB1) /* 0x1B1                              \
7115*4882a593Smuzhiyun 					  */
7116*4882a593Smuzhiyun 
7117*4882a593Smuzhiyun /** TLV size : USB Aggregation parameters, except header */
7118*4882a593Smuzhiyun #define MRVL_USB_AGGR_PARAM_TLV_LEN (14)
7119*4882a593Smuzhiyun 
7120*4882a593Smuzhiyun /** VHT Operations IE */
7121*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIETypes_USBAggrParam_t {
7122*4882a593Smuzhiyun 	/** Header */
7123*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
7124*4882a593Smuzhiyun 
7125*4882a593Smuzhiyun 	/** Enable */
7126*4882a593Smuzhiyun 	t_u16 enable;
7127*4882a593Smuzhiyun 	/** Rx aggregation mode */
7128*4882a593Smuzhiyun 	t_u16 rx_aggr_mode;
7129*4882a593Smuzhiyun 	/** Rx aggregation alignment */
7130*4882a593Smuzhiyun 	t_u16 rx_aggr_align;
7131*4882a593Smuzhiyun 	/** Rx aggregation max packet/size */
7132*4882a593Smuzhiyun 	t_u16 rx_aggr_max;
7133*4882a593Smuzhiyun 	/** Rx aggrgation timeout, in microseconds */
7134*4882a593Smuzhiyun 	t_u16 rx_aggr_tmo;
7135*4882a593Smuzhiyun 	/** Tx aggregation mode */
7136*4882a593Smuzhiyun 	t_u16 tx_aggr_mode;
7137*4882a593Smuzhiyun 	/** Tx aggregation alignment */
7138*4882a593Smuzhiyun 	t_u16 tx_aggr_align;
7139*4882a593Smuzhiyun } MLAN_PACK_END MrvlIETypes_USBAggrParam_t;
7140*4882a593Smuzhiyun 
7141*4882a593Smuzhiyun /** HostCmd_DS_PACKET_AGGR_OVER_HOST_INTERFACE */
7142*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_PACKET_AGGR_OVER_HOST_INTERFACE {
7143*4882a593Smuzhiyun 	/** ACT_GET/ACT_SET */
7144*4882a593Smuzhiyun 	t_u16 action;
7145*4882a593Smuzhiyun 	/**
7146*4882a593Smuzhiyun 	 *  Host interface aggregation control TLV(s) to be sent in the firmware
7147*4882a593Smuzhiyun 	 * command
7148*4882a593Smuzhiyun 	 *
7149*4882a593Smuzhiyun 	 *  TLV_USB_AGGR_PARAM, MrvlIETypes_USBAggrParam_t
7150*4882a593Smuzhiyun 	 */
7151*4882a593Smuzhiyun 	t_u8 tlv_buf[1];
7152*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_PACKET_AGGR_OVER_HOST_INTERFACE;
7153*4882a593Smuzhiyun #endif /* USB */
7154*4882a593Smuzhiyun 
7155*4882a593Smuzhiyun /** HostCmd_CONFIG_LOW_PWR_MODE */
7156*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_CONFIG_LOW_PWR_MODE {
7157*4882a593Smuzhiyun 	/** Enable LPM */
7158*4882a593Smuzhiyun 	t_u8 enable;
7159*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_CONFIG_LOW_PWR_MODE;
7160*4882a593Smuzhiyun 
7161*4882a593Smuzhiyun /** HostCmd_CMD_GET_TSF */
7162*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_TSF {
7163*4882a593Smuzhiyun 	/** tsf value*/
7164*4882a593Smuzhiyun 	t_u64 tsf;
7165*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_TSF;
7166*4882a593Smuzhiyun /* WLAN_GET_TSF*/
7167*4882a593Smuzhiyun 
7168*4882a593Smuzhiyun typedef struct _HostCmd_DS_DFS_REPEATER_MODE {
7169*4882a593Smuzhiyun 	/** Set or Get */
7170*4882a593Smuzhiyun 	t_u16 action;
7171*4882a593Smuzhiyun 	/** 1 on or 0 off */
7172*4882a593Smuzhiyun 	t_u16 mode;
7173*4882a593Smuzhiyun } HostCmd_DS_DFS_REPEATER_MODE;
7174*4882a593Smuzhiyun 
7175*4882a593Smuzhiyun /** HostCmd_DS_BOOT_SLEEP */
7176*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_BOOT_SLEEP {
7177*4882a593Smuzhiyun 	/** Set or Get */
7178*4882a593Smuzhiyun 	t_u16 action;
7179*4882a593Smuzhiyun 	/** 1 on or 0 off */
7180*4882a593Smuzhiyun 	t_u16 enable;
7181*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_BOOT_SLEEP;
7182*4882a593Smuzhiyun 
7183*4882a593Smuzhiyun /**
7184*4882a593Smuzhiyun  * @brief 802.11h Local Power Constraint NXP extended TLV
7185*4882a593Smuzhiyun  */
7186*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7187*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header; /**< NXP TLV header: ID/Len */
7188*4882a593Smuzhiyun 	t_u8 chan; /**< Channel local constraint applies to */
7189*4882a593Smuzhiyun 
7190*4882a593Smuzhiyun 	/** Power constraint included in beacons
7191*4882a593Smuzhiyun 	 *  and used by fw to offset 11d info
7192*4882a593Smuzhiyun 	 */
7193*4882a593Smuzhiyun 	t_u8 constraint;
7194*4882a593Smuzhiyun 
7195*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_LocalPowerConstraint_t;
7196*4882a593Smuzhiyun 
7197*4882a593Smuzhiyun /*
7198*4882a593Smuzhiyun  *
7199*4882a593Smuzhiyun  * Data structures for driver/firmware command processing
7200*4882a593Smuzhiyun  *
7201*4882a593Smuzhiyun  */
7202*4882a593Smuzhiyun 
7203*4882a593Smuzhiyun /**  TPC Info structure sent in CMD_802_11_TPC_INFO command to firmware */
7204*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7205*4882a593Smuzhiyun 	/**< Local constraint */
7206*4882a593Smuzhiyun 	MrvlIEtypes_LocalPowerConstraint_t local_constraint;
7207*4882a593Smuzhiyun 	/**< Power Capability */
7208*4882a593Smuzhiyun 	MrvlIEtypes_PowerCapability_t power_cap;
7209*4882a593Smuzhiyun 
7210*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_TPC_INFO;
7211*4882a593Smuzhiyun 
7212*4882a593Smuzhiyun /**  TPC Request structure sent in CMD_802_11_TPC_ADAPT_REQ
7213*4882a593Smuzhiyun  *  command to firmware
7214*4882a593Smuzhiyun  */
7215*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7216*4882a593Smuzhiyun 	t_u8 dest_mac[MLAN_MAC_ADDR_LENGTH]; /**< Destination STA address  */
7217*4882a593Smuzhiyun 	t_u16 timeout; /**< Response timeout in ms */
7218*4882a593Smuzhiyun 	t_u8 rate_index; /**< IEEE Rate index to send request */
7219*4882a593Smuzhiyun 
7220*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_TpcRequest;
7221*4882a593Smuzhiyun 
7222*4882a593Smuzhiyun /**  TPC Response structure received from the
7223*4882a593Smuzhiyun  *   CMD_802_11_TPC_ADAPT_REQ command
7224*4882a593Smuzhiyun  */
7225*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7226*4882a593Smuzhiyun 	t_u8 tpc_ret_code; /**< Firmware command result status code */
7227*4882a593Smuzhiyun 	t_s8 tx_power; /**< Reported TX Power from the TPC Report element */
7228*4882a593Smuzhiyun 	t_s8 link_margin; /**< Reported link margin from the TPC Report element
7229*4882a593Smuzhiyun 			   */
7230*4882a593Smuzhiyun 	t_s8 rssi; /**< RSSI of the received TPC Report frame */
7231*4882a593Smuzhiyun 
7232*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_TpcResponse;
7233*4882a593Smuzhiyun 
7234*4882a593Smuzhiyun /**  CMD_802_11_TPC_ADAPT_REQ substruct.
7235*4882a593Smuzhiyun  *   Union of the TPC request and response
7236*4882a593Smuzhiyun  */
7237*4882a593Smuzhiyun typedef MLAN_PACK_START union {
7238*4882a593Smuzhiyun 	HostCmd_TpcRequest req; /**< Request struct sent to firmware */
7239*4882a593Smuzhiyun 	HostCmd_TpcResponse resp; /**< Response struct received from firmware */
7240*4882a593Smuzhiyun 
7241*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_TPC_ADAPT_REQ;
7242*4882a593Smuzhiyun 
7243*4882a593Smuzhiyun /**  CMD_802_11_CHAN_SW_ANN firmware command substructure */
7244*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7245*4882a593Smuzhiyun 	t_u8 switch_mode; /**< Set to 1 for a quiet switch request, no STA tx */
7246*4882a593Smuzhiyun 	t_u8 new_chan; /**< Requested new channel */
7247*4882a593Smuzhiyun 	t_u8 switch_count; /**< Number of TBTTs until the switch is to occur */
7248*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_802_11_CHAN_SW_ANN;
7249*4882a593Smuzhiyun 
7250*4882a593Smuzhiyun /**
7251*4882a593Smuzhiyun  * @brief Enumeration of measurement types, including max supported
7252*4882a593Smuzhiyun  *        enum for 11h/11k
7253*4882a593Smuzhiyun  */
7254*4882a593Smuzhiyun typedef MLAN_PACK_START enum _MeasType_t {
7255*4882a593Smuzhiyun 	WLAN_MEAS_BASIC = 0, /**< 11h: Basic */
7256*4882a593Smuzhiyun 	WLAN_MEAS_NUM_TYPES, /**< Number of enumerated measurements */
7257*4882a593Smuzhiyun 	WLAN_MEAS_11H_MAX_TYPE = WLAN_MEAS_BASIC, /**< Max 11h measurement */
7258*4882a593Smuzhiyun 
7259*4882a593Smuzhiyun } MLAN_PACK_END MeasType_t;
7260*4882a593Smuzhiyun 
7261*4882a593Smuzhiyun /**
7262*4882a593Smuzhiyun  * @brief Mode octet of the measurement request element (7.3.2.21)
7263*4882a593Smuzhiyun  */
7264*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7265*4882a593Smuzhiyun #ifdef BIG_ENDIAN_SUPPORT
7266*4882a593Smuzhiyun 	/**< Reserved */
7267*4882a593Smuzhiyun 	t_u8 rsvd5_7 : 3;
7268*4882a593Smuzhiyun 	/**< 11k: duration spec. for meas. is mandatory */
7269*4882a593Smuzhiyun 	t_u8 duration_mandatory : 1;
7270*4882a593Smuzhiyun 	/**< 11h: en/disable report rcpt. of spec. type */
7271*4882a593Smuzhiyun 	t_u8 report : 1;
7272*4882a593Smuzhiyun 	/**< 11h: en/disable requests of specified type */
7273*4882a593Smuzhiyun 	t_u8 request : 1;
7274*4882a593Smuzhiyun 	/**< 11h: enable report/request bits */
7275*4882a593Smuzhiyun 	t_u8 enable : 1;
7276*4882a593Smuzhiyun 	/**< 11k: series or parallel with previous meas */
7277*4882a593Smuzhiyun 	t_u8 parallel : 1;
7278*4882a593Smuzhiyun #else
7279*4882a593Smuzhiyun 	/**< 11k: series or parallel with previous meas */
7280*4882a593Smuzhiyun 	t_u8 parallel : 1;
7281*4882a593Smuzhiyun 	/**< 11h: enable report/request bits */
7282*4882a593Smuzhiyun 	t_u8 enable : 1;
7283*4882a593Smuzhiyun 	/**< 11h: en/disable requests of specified type */
7284*4882a593Smuzhiyun 	t_u8 request : 1;
7285*4882a593Smuzhiyun 	/**< 11h: en/disable report rcpt. of spec. type */
7286*4882a593Smuzhiyun 	t_u8 report : 1;
7287*4882a593Smuzhiyun 	/**< 11k: duration spec. for meas. is mandatory */
7288*4882a593Smuzhiyun 	t_u8 duration_mandatory : 1;
7289*4882a593Smuzhiyun 	/**< Reserved */
7290*4882a593Smuzhiyun 	t_u8 rsvd5_7 : 3;
7291*4882a593Smuzhiyun #endif /* BIG_ENDIAN_SUPPORT */
7292*4882a593Smuzhiyun 
7293*4882a593Smuzhiyun } MLAN_PACK_END MeasReqMode_t;
7294*4882a593Smuzhiyun 
7295*4882a593Smuzhiyun /**
7296*4882a593Smuzhiyun  * @brief Common measurement request structure (7.3.2.21.1 to 7.3.2.21.3)
7297*4882a593Smuzhiyun  */
7298*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7299*4882a593Smuzhiyun 	t_u8 channel; /**< Channel to measure */
7300*4882a593Smuzhiyun 	t_u64 start_time; /**< TSF Start time of measurement (0 for immediate)
7301*4882a593Smuzhiyun 			   */
7302*4882a593Smuzhiyun 	t_u16 duration; /**< TU duration of the measurement */
7303*4882a593Smuzhiyun 
7304*4882a593Smuzhiyun } MLAN_PACK_END MeasReqCommonFormat_t;
7305*4882a593Smuzhiyun 
7306*4882a593Smuzhiyun /**
7307*4882a593Smuzhiyun  * @brief Basic measurement request structure (7.3.2.21.1)
7308*4882a593Smuzhiyun  */
7309*4882a593Smuzhiyun typedef MeasReqCommonFormat_t MeasReqBasic_t;
7310*4882a593Smuzhiyun 
7311*4882a593Smuzhiyun /**
7312*4882a593Smuzhiyun  * @brief CCA measurement request structure (7.3.2.21.2)
7313*4882a593Smuzhiyun  */
7314*4882a593Smuzhiyun typedef MeasReqCommonFormat_t MeasReqCCA_t;
7315*4882a593Smuzhiyun 
7316*4882a593Smuzhiyun /**
7317*4882a593Smuzhiyun  * @brief RPI measurement request structure (7.3.2.21.3)
7318*4882a593Smuzhiyun  */
7319*4882a593Smuzhiyun typedef MeasReqCommonFormat_t MeasReqRPI_t;
7320*4882a593Smuzhiyun 
7321*4882a593Smuzhiyun /**
7322*4882a593Smuzhiyun  * @brief Union of the availble measurement request types.  Passed in the
7323*4882a593Smuzhiyun  *        driver/firmware interface.
7324*4882a593Smuzhiyun  */
7325*4882a593Smuzhiyun typedef union {
7326*4882a593Smuzhiyun 	MeasReqBasic_t basic; /**< Basic measurement request */
7327*4882a593Smuzhiyun 	MeasReqCCA_t cca; /**< CCA measurement request */
7328*4882a593Smuzhiyun 	MeasReqRPI_t rpi; /**< RPI measurement request */
7329*4882a593Smuzhiyun 
7330*4882a593Smuzhiyun } MeasRequest_t;
7331*4882a593Smuzhiyun 
7332*4882a593Smuzhiyun /**
7333*4882a593Smuzhiyun  * @brief Mode octet of the measurement report element (7.3.2.22)
7334*4882a593Smuzhiyun  */
7335*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7336*4882a593Smuzhiyun #ifdef BIG_ENDIAN_SUPPORT
7337*4882a593Smuzhiyun 	t_u8 rsvd3_7 : 5; /**< Reserved */
7338*4882a593Smuzhiyun 	t_u8 refused : 1; /**< Measurement refused */
7339*4882a593Smuzhiyun 	t_u8 incapable : 1; /**< Incapable of performing measurement */
7340*4882a593Smuzhiyun 	t_u8 late : 1; /**< Start TSF time missed for measurement */
7341*4882a593Smuzhiyun #else
7342*4882a593Smuzhiyun 	t_u8 late : 1; /**< Start TSF time missed for measurement */
7343*4882a593Smuzhiyun 	t_u8 incapable : 1; /**< Incapable of performing measurement */
7344*4882a593Smuzhiyun 	t_u8 refused : 1; /**< Measurement refused */
7345*4882a593Smuzhiyun 	t_u8 rsvd3_7 : 5; /**< Reserved */
7346*4882a593Smuzhiyun #endif /* BIG_ENDIAN_SUPPORT */
7347*4882a593Smuzhiyun 
7348*4882a593Smuzhiyun } MLAN_PACK_END MeasRptMode_t;
7349*4882a593Smuzhiyun 
7350*4882a593Smuzhiyun /**
7351*4882a593Smuzhiyun  * @brief Basic measurement report (7.3.2.22.1)
7352*4882a593Smuzhiyun  */
7353*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7354*4882a593Smuzhiyun 	t_u8 channel; /**< Channel to measured */
7355*4882a593Smuzhiyun 	t_u64 start_time; /**< Start time (TSF) of measurement */
7356*4882a593Smuzhiyun 	t_u16 duration; /**< Duration of measurement in TUs */
7357*4882a593Smuzhiyun 	MeasRptBasicMap_t map; /**< Basic measurement report */
7358*4882a593Smuzhiyun 
7359*4882a593Smuzhiyun } MLAN_PACK_END MeasRptBasic_t;
7360*4882a593Smuzhiyun 
7361*4882a593Smuzhiyun /**
7362*4882a593Smuzhiyun  * @brief CCA measurement report (7.3.2.22.2)
7363*4882a593Smuzhiyun  */
7364*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7365*4882a593Smuzhiyun 	t_u8 channel; /**< Channel to measured */
7366*4882a593Smuzhiyun 	t_u64 start_time; /**< Start time (TSF) of measurement */
7367*4882a593Smuzhiyun 	t_u16 duration; /**< Duration of measurement in TUs  */
7368*4882a593Smuzhiyun 	t_u8 busy_fraction; /**< Fractional duration CCA indicated chan busy */
7369*4882a593Smuzhiyun 
7370*4882a593Smuzhiyun } MLAN_PACK_END MeasRptCCA_t;
7371*4882a593Smuzhiyun 
7372*4882a593Smuzhiyun /**
7373*4882a593Smuzhiyun  * @brief RPI measurement report (7.3.2.22.3)
7374*4882a593Smuzhiyun  */
7375*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7376*4882a593Smuzhiyun 	t_u8 channel; /**< Channel to measured  */
7377*4882a593Smuzhiyun 	t_u64 start_time; /**< Start time (TSF) of measurement */
7378*4882a593Smuzhiyun 	t_u16 duration; /**< Duration of measurement in TUs  */
7379*4882a593Smuzhiyun 	t_u8 density[8]; /**< RPI Density histogram report */
7380*4882a593Smuzhiyun 
7381*4882a593Smuzhiyun } MLAN_PACK_END MeasRptRPI_t;
7382*4882a593Smuzhiyun 
7383*4882a593Smuzhiyun /**
7384*4882a593Smuzhiyun  * @brief Union of the availble measurement report types.  Passed in the
7385*4882a593Smuzhiyun  *        driver/firmware interface.
7386*4882a593Smuzhiyun  */
7387*4882a593Smuzhiyun typedef union {
7388*4882a593Smuzhiyun 	MeasRptBasic_t basic; /**< Basic measurement report */
7389*4882a593Smuzhiyun 	MeasRptCCA_t cca; /**< CCA measurement report */
7390*4882a593Smuzhiyun 	MeasRptRPI_t rpi; /**< RPI measurement report */
7391*4882a593Smuzhiyun 
7392*4882a593Smuzhiyun } MeasReport_t;
7393*4882a593Smuzhiyun 
7394*4882a593Smuzhiyun /**
7395*4882a593Smuzhiyun  * @brief Structure passed to firmware to perform a measurement
7396*4882a593Smuzhiyun  */
7397*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7398*4882a593Smuzhiyun 	t_u8 mac_addr[MLAN_MAC_ADDR_LENGTH]; /**< Reporting STA address */
7399*4882a593Smuzhiyun 	t_u8 dialog_token; /**< Measurement dialog toke */
7400*4882a593Smuzhiyun 	MeasReqMode_t req_mode; /**< Report mode  */
7401*4882a593Smuzhiyun 	MeasType_t meas_type; /**< Measurement type */
7402*4882a593Smuzhiyun 	MeasRequest_t req; /**< Measurement request data */
7403*4882a593Smuzhiyun 
7404*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_MEASUREMENT_REQUEST,
7405*4882a593Smuzhiyun 	*pHostCmd_DS_MEASUREMENT_REQUEST;
7406*4882a593Smuzhiyun 
7407*4882a593Smuzhiyun /**
7408*4882a593Smuzhiyun  * @brief Structure passed back from firmware with a measurement report,
7409*4882a593Smuzhiyun  *        also can be to send a measurement report to another STA
7410*4882a593Smuzhiyun  */
7411*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7412*4882a593Smuzhiyun 	t_u8 mac_addr[MLAN_MAC_ADDR_LENGTH]; /**< Reporting STA address */
7413*4882a593Smuzhiyun 	t_u8 dialog_token; /**< Measurement dialog token */
7414*4882a593Smuzhiyun 	MeasRptMode_t rpt_mode; /**< Report mode */
7415*4882a593Smuzhiyun 	MeasType_t meas_type; /**< Measurement type */
7416*4882a593Smuzhiyun 	MeasReport_t rpt; /**< Measurement report data */
7417*4882a593Smuzhiyun 
7418*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_MEASUREMENT_REPORT, *pHostCmd_DS_MEASUREMENT_REPORT;
7419*4882a593Smuzhiyun 
7420*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7421*4882a593Smuzhiyun 	t_u16 startFreq;
7422*4882a593Smuzhiyun 	Band_Config_t bandcfg;
7423*4882a593Smuzhiyun 	t_u8 chanNum;
7424*4882a593Smuzhiyun 
7425*4882a593Smuzhiyun } MLAN_PACK_END MrvlChannelDesc_t;
7426*4882a593Smuzhiyun 
7427*4882a593Smuzhiyun #ifdef OPCHAN
7428*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7429*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header; /**< Header */
7430*4882a593Smuzhiyun 
7431*4882a593Smuzhiyun 	MrvlChannelDesc_t chanDesc;
7432*4882a593Smuzhiyun 
7433*4882a593Smuzhiyun 	t_u16 controlFlags;
7434*4882a593Smuzhiyun 	t_u16 reserved;
7435*4882a593Smuzhiyun 
7436*4882a593Smuzhiyun 	t_u8 actPower;
7437*4882a593Smuzhiyun 	t_u8 mdMinPower;
7438*4882a593Smuzhiyun 	t_u8 mdMaxPower;
7439*4882a593Smuzhiyun 	t_u8 mdPower;
7440*4882a593Smuzhiyun 
7441*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_ChanControlDesc_t;
7442*4882a593Smuzhiyun 
7443*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7444*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header; /**< Header */
7445*4882a593Smuzhiyun 
7446*4882a593Smuzhiyun 	t_u16 chanGroupBitmap;
7447*4882a593Smuzhiyun 	ChanScanMode_t scanMode;
7448*4882a593Smuzhiyun 	t_u8 numChan;
7449*4882a593Smuzhiyun 
7450*4882a593Smuzhiyun 	MrvlChannelDesc_t chanDesc[50];
7451*4882a593Smuzhiyun 
7452*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_ChanGroupControl_t;
7453*4882a593Smuzhiyun 
7454*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7455*4882a593Smuzhiyun 	t_u16 action; /**< CMD Action Get/Set*/
7456*4882a593Smuzhiyun 
7457*4882a593Smuzhiyun 	t_u8 tlv_buffer[1];
7458*4882a593Smuzhiyun 
7459*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_OPCHAN_CONFIG;
7460*4882a593Smuzhiyun 
7461*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7462*4882a593Smuzhiyun 	t_u16 action; /**< CMD Action Get/Set*/
7463*4882a593Smuzhiyun 
7464*4882a593Smuzhiyun 	t_u8 tlv_buffer[1];
7465*4882a593Smuzhiyun 
7466*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_OPCHAN_CHANGROUP_CONFIG;
7467*4882a593Smuzhiyun 
7468*4882a593Smuzhiyun #define HostCmd_CMD_OPCHAN_CONFIG 0x00f8
7469*4882a593Smuzhiyun #define HostCmd_CMD_OPCHAN_CHANGROUP_CONFIG 0x00f9
7470*4882a593Smuzhiyun #endif
7471*4882a593Smuzhiyun 
7472*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7473*4882a593Smuzhiyun 	MrvlIEtypesHeader_t Header; /**< Header */
7474*4882a593Smuzhiyun 
7475*4882a593Smuzhiyun 	MeasRptBasicMap_t map; /**< IEEE 802.11h basic meas report */
7476*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_ChanRpt11hBasic_t;
7477*4882a593Smuzhiyun 
7478*4882a593Smuzhiyun /* MrvlIEtypes_ZeroDfsOperation_t */
7479*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7480*4882a593Smuzhiyun 	/* header */
7481*4882a593Smuzhiyun 	MrvlIEtypesHeader_t Header;
7482*4882a593Smuzhiyun 	/**< 0-DFS Enable/Disable> */
7483*4882a593Smuzhiyun 	t_u8 zero_dfs_enbl;
7484*4882a593Smuzhiyun 
7485*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_ZeroDfsOperation_t;
7486*4882a593Smuzhiyun 
7487*4882a593Smuzhiyun /* MrvlIEtypes_DfsW53Cfg_t*/
7488*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7489*4882a593Smuzhiyun 	/* header */
7490*4882a593Smuzhiyun 	MrvlIEtypesHeader_t Header;
7491*4882a593Smuzhiyun 	/** df53cfg vlue*/
7492*4882a593Smuzhiyun 	t_u8 dfs53cfg;
7493*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_DfsW53Cfg_t;
7494*4882a593Smuzhiyun 
7495*4882a593Smuzhiyun /* MrvlIEtypes_Rgn_dom_code_t*/
7496*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7497*4882a593Smuzhiyun 	/* header */
7498*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
7499*4882a593Smuzhiyun 	/** Domain Code */
7500*4882a593Smuzhiyun 	t_u8 domain_code;
7501*4882a593Smuzhiyun 	/** Reserved field */
7502*4882a593Smuzhiyun 	t_u8 reserved;
7503*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_Rgn_dom_code_t;
7504*4882a593Smuzhiyun 
7505*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7506*4882a593Smuzhiyun 	MrvlChannelDesc_t chan_desc; /**< Channel band, number */
7507*4882a593Smuzhiyun 	t_u32 millisec_dwell_time; /**< Channel dwell time in milliseconds */
7508*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_CHAN_RPT_REQ;
7509*4882a593Smuzhiyun 
7510*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7511*4882a593Smuzhiyun 	t_u32 cmd_result; /**< Rpt request command result (0 == SUCCESS) */
7512*4882a593Smuzhiyun 	t_u64 start_tsf; /**< TSF Measurement started */
7513*4882a593Smuzhiyun 	t_u32 duration; /**< Duration of measurement in microsecs */
7514*4882a593Smuzhiyun 	t_u8 tlv_buffer[1]; /**< TLV Buffer */
7515*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_CHAN_RPT_RSP;
7516*4882a593Smuzhiyun 
7517*4882a593Smuzhiyun /** statistics threshold */
7518*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7519*4882a593Smuzhiyun 	/** Header */
7520*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
7521*4882a593Smuzhiyun 	/** value */
7522*4882a593Smuzhiyun 	t_u8 value;
7523*4882a593Smuzhiyun 	/** reporting frequency */
7524*4882a593Smuzhiyun 	t_u8 frequency;
7525*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_BeaconHighRssiThreshold_t,
7526*4882a593Smuzhiyun 	MrvlIEtypes_BeaconLowRssiThreshold_t,
7527*4882a593Smuzhiyun 	MrvlIEtypes_BeaconHighSnrThreshold_t,
7528*4882a593Smuzhiyun 	MrvlIEtypes_BeaconLowSnrThreshold_t, MrvlIEtypes_FailureCount_t,
7529*4882a593Smuzhiyun 	MrvlIEtypes_DataLowRssiThreshold_t, MrvlIEtypes_DataHighRssiThreshold_t,
7530*4882a593Smuzhiyun 	MrvlIEtypes_DataLowSnrThreshold_t, MrvlIEtypes_DataHighSnrThreshold_t,
7531*4882a593Smuzhiyun 	MrvlIETypes_PreBeaconMissed_t, MrvlIEtypes_BeaconsMissed_t;
7532*4882a593Smuzhiyun 
7533*4882a593Smuzhiyun /** statistics threshold for LinkQuality */
7534*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7535*4882a593Smuzhiyun 	/** Header */
7536*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
7537*4882a593Smuzhiyun 	/** Link SNR threshold (dB) */
7538*4882a593Smuzhiyun 	t_u16 link_snr;
7539*4882a593Smuzhiyun 	/** Link SNR frequency */
7540*4882a593Smuzhiyun 	t_u16 link_snr_freq;
7541*4882a593Smuzhiyun 	/* Second minimum rate value as per the rate table below */
7542*4882a593Smuzhiyun 	t_u16 link_rate;
7543*4882a593Smuzhiyun 	/* Second minimum rate frequency */
7544*4882a593Smuzhiyun 	t_u16 link_rate_freq;
7545*4882a593Smuzhiyun 	/* Tx latency value (us) */
7546*4882a593Smuzhiyun 	t_u16 link_tx_latency;
7547*4882a593Smuzhiyun 	/* Tx latency frequency */
7548*4882a593Smuzhiyun 	t_u16 link_tx_lantency_freq;
7549*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_LinkQualityThreshold_t;
7550*4882a593Smuzhiyun 
7551*4882a593Smuzhiyun #ifdef PCIE
7552*4882a593Smuzhiyun /** PCIE dual descriptor for data/event */
7553*4882a593Smuzhiyun typedef MLAN_PACK_START struct _dual_desc_buf {
7554*4882a593Smuzhiyun 	/** buf size */
7555*4882a593Smuzhiyun 	t_u16 len;
7556*4882a593Smuzhiyun 	/** buffer descriptor flags */
7557*4882a593Smuzhiyun 	t_u16 flags;
7558*4882a593Smuzhiyun 	/** pkt size */
7559*4882a593Smuzhiyun 	t_u16 pkt_size;
7560*4882a593Smuzhiyun 	/** reserved */
7561*4882a593Smuzhiyun 	t_u16 reserved;
7562*4882a593Smuzhiyun 	/** Physical address of the buffer */
7563*4882a593Smuzhiyun 	t_u64 paddr;
7564*4882a593Smuzhiyun } MLAN_PACK_END adma_dual_desc_buf, *padma_dual_desc_buf;
7565*4882a593Smuzhiyun 
7566*4882a593Smuzhiyun #if defined(PCIE8997) || defined(PCIE8897)
7567*4882a593Smuzhiyun /** PCIE ring buffer description for DATA */
7568*4882a593Smuzhiyun typedef MLAN_PACK_START struct _mlan_pcie_data_buf {
7569*4882a593Smuzhiyun 	/** Buffer descriptor flags */
7570*4882a593Smuzhiyun 	t_u16 flags;
7571*4882a593Smuzhiyun 	/** Offset of fragment/pkt to start of ip header */
7572*4882a593Smuzhiyun 	t_u16 offset;
7573*4882a593Smuzhiyun 	/** Fragment length of the buffer */
7574*4882a593Smuzhiyun 	t_u16 frag_len;
7575*4882a593Smuzhiyun 	/** Length of the buffer */
7576*4882a593Smuzhiyun 	t_u16 len;
7577*4882a593Smuzhiyun 	/** Physical address of the buffer */
7578*4882a593Smuzhiyun 	t_u64 paddr;
7579*4882a593Smuzhiyun 	/** Reserved */
7580*4882a593Smuzhiyun 	t_u32 reserved;
7581*4882a593Smuzhiyun } MLAN_PACK_END mlan_pcie_data_buf, *pmlan_pcie_data_buf;
7582*4882a593Smuzhiyun 
7583*4882a593Smuzhiyun /** PCIE ring buffer description for EVENT */
7584*4882a593Smuzhiyun typedef MLAN_PACK_START struct _mlan_pcie_evt_buf {
7585*4882a593Smuzhiyun 	/** Physical address of the buffer */
7586*4882a593Smuzhiyun 	t_u64 paddr;
7587*4882a593Smuzhiyun 	/** Length of the buffer */
7588*4882a593Smuzhiyun 	t_u16 len;
7589*4882a593Smuzhiyun 	/** Buffer descriptor flags */
7590*4882a593Smuzhiyun 	t_u16 flags;
7591*4882a593Smuzhiyun } MLAN_PACK_END mlan_pcie_evt_buf, *pmlan_pcie_evt_buf;
7592*4882a593Smuzhiyun 
7593*4882a593Smuzhiyun /** PCIE host buffer configuration */
7594*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_PCIE_HOST_BUF_DETAILS {
7595*4882a593Smuzhiyun 	/** TX buffer descriptor ring address */
7596*4882a593Smuzhiyun 	t_u32 txbd_addr_lo;
7597*4882a593Smuzhiyun 	t_u32 txbd_addr_hi;
7598*4882a593Smuzhiyun 	/** TX buffer descriptor ring count */
7599*4882a593Smuzhiyun 	t_u32 txbd_count;
7600*4882a593Smuzhiyun 
7601*4882a593Smuzhiyun 	/** RX buffer descriptor ring address */
7602*4882a593Smuzhiyun 	t_u32 rxbd_addr_lo;
7603*4882a593Smuzhiyun 	t_u32 rxbd_addr_hi;
7604*4882a593Smuzhiyun 	/** RX buffer descriptor ring count */
7605*4882a593Smuzhiyun 	t_u32 rxbd_count;
7606*4882a593Smuzhiyun 
7607*4882a593Smuzhiyun 	/** Event buffer descriptor ring address */
7608*4882a593Smuzhiyun 	t_u32 evtbd_addr_lo;
7609*4882a593Smuzhiyun 	t_u32 evtbd_addr_hi;
7610*4882a593Smuzhiyun 	/** Event buffer descriptor ring count */
7611*4882a593Smuzhiyun 	t_u32 evtbd_count;
7612*4882a593Smuzhiyun } HostCmd_DS_PCIE_HOST_BUF_DETAILS;
7613*4882a593Smuzhiyun #endif
7614*4882a593Smuzhiyun #endif
7615*4882a593Smuzhiyun 
7616*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_SENSOR_TEMP {
7617*4882a593Smuzhiyun 	t_u32 temperature;
7618*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_SENSOR_TEMP;
7619*4882a593Smuzhiyun 
7620*4882a593Smuzhiyun #define TLV_TYPE_IPV6_RA_OFFLOAD (PROPRIETARY_TLV_BASE_ID + 0xE6) /** 0x1E6*/
7621*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7622*4882a593Smuzhiyun 	MrvlIEtypesHeader_t Header;
7623*4882a593Smuzhiyun 	t_u8 ipv6_addr[16];
7624*4882a593Smuzhiyun } MLAN_PACK_END MrvlIETypes_IPv6AddrParamSet_t;
7625*4882a593Smuzhiyun 
7626*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_IPV6_RA_OFFLOAD {
7627*4882a593Smuzhiyun 	/** 0x0000: Get IPv6 RA Offload configuration
7628*4882a593Smuzhiyun 	 *  0x0001: Set IPv6 RA Offload configuration
7629*4882a593Smuzhiyun 	 */
7630*4882a593Smuzhiyun 	t_u16 action;
7631*4882a593Smuzhiyun 	/** 0x00: disable IPv6 RA Offload; 0x01: enable IPv6 RA offload */
7632*4882a593Smuzhiyun 	t_u8 enable;
7633*4882a593Smuzhiyun 	MrvlIETypes_IPv6AddrParamSet_t ipv6_addr_param;
7634*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_IPV6_RA_OFFLOAD;
7635*4882a593Smuzhiyun 
7636*4882a593Smuzhiyun #ifdef STA_SUPPORT
7637*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_STA_CONFIGURE {
7638*4882a593Smuzhiyun 	/** Action Set or get */
7639*4882a593Smuzhiyun 	t_u16 action;
7640*4882a593Smuzhiyun 	/** Tlv buffer */
7641*4882a593Smuzhiyun 	t_u8 tlv_buffer[];
7642*4882a593Smuzhiyun 	/**MrvlIEtypes_channel_band_t band_channel; */
7643*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_STA_CONFIGURE;
7644*4882a593Smuzhiyun #endif
7645*4882a593Smuzhiyun 
7646*4882a593Smuzhiyun /** HostCmd_DS_AUTO_TX structure */
7647*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_AUTO_TX {
7648*4882a593Smuzhiyun 	/** Action Set or get */
7649*4882a593Smuzhiyun 	t_u16 action;
7650*4882a593Smuzhiyun 	/** Tlv buffer */
7651*4882a593Smuzhiyun 	t_u8 tlv_buffer[];
7652*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_AUTO_TX;
7653*4882a593Smuzhiyun 
7654*4882a593Smuzhiyun #define OID_CLOUD_KEEP_ALIVE 0
7655*4882a593Smuzhiyun #define EVENT_CLOUD_KEEP_ALIVE_RETRY_FAIL 0x00000085
7656*4882a593Smuzhiyun /** TLV for cloud keep alive control info */
7657*4882a593Smuzhiyun #define TLV_TYPE_CLOUD_KEEP_ALIVE                                              \
7658*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x102) /* 0x0100 + 258 */
7659*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_Cloud_Keep_Alive_t {
7660*4882a593Smuzhiyun 	/** Header */
7661*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
7662*4882a593Smuzhiyun 	/** ID for cloud keep alive */
7663*4882a593Smuzhiyun 	t_u8 keep_alive_id;
7664*4882a593Smuzhiyun 	/** Enable/disable for this ID */
7665*4882a593Smuzhiyun 	t_u8 enable;
7666*4882a593Smuzhiyun 	/** TLV buffer */
7667*4882a593Smuzhiyun 	t_u8 tlv[];
7668*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_Cloud_Keep_Alive_t;
7669*4882a593Smuzhiyun 
7670*4882a593Smuzhiyun /** TLV for cloud keep alive control info */
7671*4882a593Smuzhiyun #define TLV_TYPE_KEEP_ALIVE_CTRL                                               \
7672*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x103) /* 0x0100 + 259 */
7673*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_Keep_Alive_Ctrl_t {
7674*4882a593Smuzhiyun 	/** Header */
7675*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
7676*4882a593Smuzhiyun 	/** period to send keep alive packet */
7677*4882a593Smuzhiyun 	t_u32 snd_interval;
7678*4882a593Smuzhiyun 	/** period to send retry packet */
7679*4882a593Smuzhiyun 	t_u16 retry_interval;
7680*4882a593Smuzhiyun 	/** count to send retry packet */
7681*4882a593Smuzhiyun 	t_u16 retry_count;
7682*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_Keep_Alive_Ctrl_t;
7683*4882a593Smuzhiyun 
7684*4882a593Smuzhiyun /** TLV for cloud keep alive packet */
7685*4882a593Smuzhiyun #define TLV_TYPE_KEEP_ALIVE_PKT                                                \
7686*4882a593Smuzhiyun 	(PROPRIETARY_TLV_BASE_ID + 0x104) /* 0x0100 + 260 */
7687*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_Keep_Alive_Pkt_t {
7688*4882a593Smuzhiyun 	/** Header */
7689*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
7690*4882a593Smuzhiyun 	/** Ethernet Header */
7691*4882a593Smuzhiyun 	Eth803Hdr_t eth_header;
7692*4882a593Smuzhiyun 	/** packet buffer*/
7693*4882a593Smuzhiyun 	t_u8 ip_packet[];
7694*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_Keep_Alive_Pkt_t;
7695*4882a593Smuzhiyun 
7696*4882a593Smuzhiyun /** TLV to indicate firmware only keep probe response while scan */
7697*4882a593Smuzhiyun #define TLV_TYPE_ONLYPROBERESP (PROPRIETARY_TLV_BASE_ID + 0xE9) /* 0x01E9 */
7698*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_OnlyProberesp_t {
7699*4882a593Smuzhiyun 	/** Header */
7700*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
7701*4882a593Smuzhiyun 	/** only keep probe response */
7702*4882a593Smuzhiyun 	t_u8 proberesp_only;
7703*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_OnlyProberesp_t;
7704*4882a593Smuzhiyun 
7705*4882a593Smuzhiyun #if defined(DRV_EMBEDDED_AUTHENTICATOR) || defined(DRV_EMBEDDED_SUPPLICANT)
7706*4882a593Smuzhiyun #define HostCmd_CMD_CRYPTO 0x025e
7707*4882a593Smuzhiyun 
7708*4882a593Smuzhiyun #define HostCmd_CMD_CRYPTO_SUBCMD_PRF_HMAC_SHA1 (0x1)
7709*4882a593Smuzhiyun #define HostCmd_CMD_CRYPTO_SUBCMD_HMAC_SHA1 (0x2)
7710*4882a593Smuzhiyun #define HostCmd_CMD_CRYPTO_SUBCMD_HMAC_SHA256 (0x3)
7711*4882a593Smuzhiyun #define HostCmd_CMD_CRYPTO_SUBCMD_SHA256 (0x4)
7712*4882a593Smuzhiyun #define HostCmd_CMD_CRYPTO_SUBCMD_RIJNDAEL (0x5)
7713*4882a593Smuzhiyun #define HostCmd_CMD_CRYPTO_SUBCMD_RC4 (0x6)
7714*4882a593Smuzhiyun #define HostCmd_CMD_CRYPTO_SUBCMD_MD5 (0x7)
7715*4882a593Smuzhiyun #define HostCmd_CMD_CRYPTO_SUBCMD_MRVL_F (0x8)
7716*4882a593Smuzhiyun #define HostCmd_CMD_CRYPTO_SUBCMD_SHA256_KDF (0x9)
7717*4882a593Smuzhiyun 
7718*4882a593Smuzhiyun #define TLV_TYPE_CRYPTO_KEY (PROPRIETARY_TLV_BASE_ID + 308)
7719*4882a593Smuzhiyun #define TLV_TYPE_CRYPTO_KEY_IV (PROPRIETARY_TLV_BASE_ID + 309)
7720*4882a593Smuzhiyun #define TLV_TYPE_CRYPTO_KEY_PREFIX (PROPRIETARY_TLV_BASE_ID + 310)
7721*4882a593Smuzhiyun #define TLV_TYPE_CRYPTO_KEY_DATA_BLK (PROPRIETARY_TLV_BASE_ID + 311)
7722*4882a593Smuzhiyun 
7723*4882a593Smuzhiyun /** MrvlIEParamSet_t */
7724*4882a593Smuzhiyun typedef MLAN_PACK_START struct {
7725*4882a593Smuzhiyun 	/** Type */
7726*4882a593Smuzhiyun 	t_u16 Type;
7727*4882a593Smuzhiyun 	/** Length */
7728*4882a593Smuzhiyun 	t_u16 Length;
7729*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEParamSet_t;
7730*4882a593Smuzhiyun 
7731*4882a593Smuzhiyun /** HostCmd_DS_CRYPTO */
7732*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_CRYPTO {
7733*4882a593Smuzhiyun 	/** action */
7734*4882a593Smuzhiyun 	t_u16 action;
7735*4882a593Smuzhiyun 	/** subCmdCode */
7736*4882a593Smuzhiyun 	t_u8 subCmdCode;
7737*4882a593Smuzhiyun 	/** subCmd start */
7738*4882a593Smuzhiyun 	t_u8 subCmd[];
7739*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_CRYPTO;
7740*4882a593Smuzhiyun 
7741*4882a593Smuzhiyun /** subcmd_prf_hmac_sha1 used by prf_hmac_sha1, md5 and sha256_kdf */
7742*4882a593Smuzhiyun typedef MLAN_PACK_START struct _subcmd_prf_hmac_sha1 {
7743*4882a593Smuzhiyun 	/** output_len */
7744*4882a593Smuzhiyun 	t_u16 output_len;
7745*4882a593Smuzhiyun 	/** tlv start */
7746*4882a593Smuzhiyun 	t_u8 tlv[];
7747*4882a593Smuzhiyun } MLAN_PACK_END subcmd_prf_hmac_sha1_t, subcmd_md5_t, subcmd_sha256_kdf_t;
7748*4882a593Smuzhiyun 
7749*4882a593Smuzhiyun /** subcmd_hmac_sha1 used by hmac_sha1, hmac_sha256, sha256 */
7750*4882a593Smuzhiyun typedef MLAN_PACK_START struct _subcmd_hmac_sha1 {
7751*4882a593Smuzhiyun 	/** output_len */
7752*4882a593Smuzhiyun 	t_u16 output_len;
7753*4882a593Smuzhiyun 	/** number of data blocks */
7754*4882a593Smuzhiyun 	t_u16 data_blks_nr;
7755*4882a593Smuzhiyun 	/** tlv start */
7756*4882a593Smuzhiyun 	t_u8 tlv[];
7757*4882a593Smuzhiyun } MLAN_PACK_END subcmd_hmac_sha1_t, subcmd_hmac_sha256_t, subcmd_sha256_t;
7758*4882a593Smuzhiyun 
7759*4882a593Smuzhiyun /** subcmd_rijndael, used by rijndael */
7760*4882a593Smuzhiyun typedef MLAN_PACK_START struct _subcmd_rijndael {
7761*4882a593Smuzhiyun 	/** output_len */
7762*4882a593Smuzhiyun 	t_u16 output_len;
7763*4882a593Smuzhiyun 	/** sub action code */
7764*4882a593Smuzhiyun 	t_u8 sub_action_code;
7765*4882a593Smuzhiyun 	/** tlv start */
7766*4882a593Smuzhiyun 	t_u8 tlv[];
7767*4882a593Smuzhiyun } MLAN_PACK_END subcmd_rijndael_t;
7768*4882a593Smuzhiyun 
7769*4882a593Smuzhiyun /** subcmd_rc4, used by rc4 */
7770*4882a593Smuzhiyun typedef MLAN_PACK_START struct _subcmd_rc4 {
7771*4882a593Smuzhiyun 	/** output_len */
7772*4882a593Smuzhiyun 	t_u16 output_len;
7773*4882a593Smuzhiyun 	/** skip bytes */
7774*4882a593Smuzhiyun 	t_u16 skip_bytes;
7775*4882a593Smuzhiyun 	/** tlv start */
7776*4882a593Smuzhiyun 	t_u8 tlv[];
7777*4882a593Smuzhiyun } MLAN_PACK_END subcmd_rc4_t;
7778*4882a593Smuzhiyun 
7779*4882a593Smuzhiyun /** subcmd_mrvf_f, used by mrvl_f*/
7780*4882a593Smuzhiyun typedef MLAN_PACK_START struct _subcmd_mrvf_f {
7781*4882a593Smuzhiyun 	/** output_len */
7782*4882a593Smuzhiyun 	t_u16 output_len;
7783*4882a593Smuzhiyun 	/** iterations */
7784*4882a593Smuzhiyun 	t_u32 iterations;
7785*4882a593Smuzhiyun 	/** count */
7786*4882a593Smuzhiyun 	t_u32 count;
7787*4882a593Smuzhiyun 	/** tlv start */
7788*4882a593Smuzhiyun 	t_u8 tlv[];
7789*4882a593Smuzhiyun } MLAN_PACK_END subcmd_mrvl_f_t;
7790*4882a593Smuzhiyun 
7791*4882a593Smuzhiyun #endif
7792*4882a593Smuzhiyun 
7793*4882a593Smuzhiyun #ifdef UAP_SUPPORT
7794*4882a593Smuzhiyun /** action add station */
7795*4882a593Smuzhiyun #define HostCmd_ACT_ADD_STA 0x1
7796*4882a593Smuzhiyun /** remove station */
7797*4882a593Smuzhiyun #define HostCmd_ACT_REMOVE_STA 0x0
7798*4882a593Smuzhiyun /** HostCmd_DS_ADD_STATION */
7799*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_ADD_STATION {
7800*4882a593Smuzhiyun 	/** 1 -add, 0 --delete */
7801*4882a593Smuzhiyun 	t_u16 action;
7802*4882a593Smuzhiyun 	/** aid */
7803*4882a593Smuzhiyun 	t_u16 aid;
7804*4882a593Smuzhiyun 	/** peer_mac */
7805*4882a593Smuzhiyun 	t_u8 peer_mac[MLAN_MAC_ADDR_LENGTH];
7806*4882a593Smuzhiyun 	/** Listen Interval */
7807*4882a593Smuzhiyun 	int listen_interval;
7808*4882a593Smuzhiyun 	/** Capability Info */
7809*4882a593Smuzhiyun 	t_u16 cap_info;
7810*4882a593Smuzhiyun 	/** tlv start */
7811*4882a593Smuzhiyun 	t_u8 tlv[];
7812*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_ADD_STATION;
7813*4882a593Smuzhiyun 
7814*4882a593Smuzhiyun /** Host Command ID : Add New Station */
7815*4882a593Smuzhiyun #define HostCmd_CMD_ADD_NEW_STATION 0x025f
7816*4882a593Smuzhiyun /** TLV id: station flag */
7817*4882a593Smuzhiyun #define TLV_TYPE_UAP_STA_FLAGS (PROPRIETARY_TLV_BASE_ID + 313)
7818*4882a593Smuzhiyun /**MrvlIEtypes_Sta_Flag_t */
7819*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_StaFlag_t {
7820*4882a593Smuzhiyun 	/** Header */
7821*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
7822*4882a593Smuzhiyun 	/** station flag     */
7823*4882a593Smuzhiyun 	t_u32 sta_flags;
7824*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_StaFlag_t;
7825*4882a593Smuzhiyun #endif
7826*4882a593Smuzhiyun 
7827*4882a593Smuzhiyun /** Host Command ID : _HostCmd_DS_BAND_STEERING */
7828*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_BAND_STEERING {
7829*4882a593Smuzhiyun 	/** ACT_GET/ACT_SET */
7830*4882a593Smuzhiyun 	t_u8 action;
7831*4882a593Smuzhiyun 	/** State */
7832*4882a593Smuzhiyun 	t_u8 state;
7833*4882a593Smuzhiyun 	/** probe requests to be blocked on 2g */
7834*4882a593Smuzhiyun 	t_u8 block_2g_prb_req;
7835*4882a593Smuzhiyun 	/** limit the btm request sent to STA at <max_btm_req_allowed>*/
7836*4882a593Smuzhiyun 	t_u8 max_btm_req_allowed;
7837*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_BAND_STEERING;
7838*4882a593Smuzhiyun 
7839*4882a593Smuzhiyun /** HostCmd_CMD_RX_ABORT_CFG */
7840*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_CMD_RX_ABORT_CFG {
7841*4882a593Smuzhiyun 	/** Action */
7842*4882a593Smuzhiyun 	t_u16 action;
7843*4882a593Smuzhiyun 	/** Enable/disable rx abort on weak pkt rssi */
7844*4882a593Smuzhiyun 	t_u8 enable;
7845*4882a593Smuzhiyun 	/** rx weak rssi pkt threshold */
7846*4882a593Smuzhiyun 	t_s8 rssi_threshold;
7847*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_CMD_RX_ABORT_CFG;
7848*4882a593Smuzhiyun /** HostCmd_CMD_RX_ABORT_CFG_EXT */
7849*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_CMD_RX_ABORT_CFG_EXT {
7850*4882a593Smuzhiyun 	/** Action */
7851*4882a593Smuzhiyun 	t_u16 action;
7852*4882a593Smuzhiyun 	/** Enable/disable dyn rx abort on weak pkt rssi */
7853*4882a593Smuzhiyun 	t_u8 enable;
7854*4882a593Smuzhiyun 	/** specify rssi margin */
7855*4882a593Smuzhiyun 	t_s8 rssi_margin;
7856*4882a593Smuzhiyun 	/** specify ceil rssi threshold */
7857*4882a593Smuzhiyun 	t_s8 ceil_rssi_threshold;
7858*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_CMD_RX_ABORT_CFG_EXT;
7859*4882a593Smuzhiyun 
7860*4882a593Smuzhiyun /** HostCmd_CMD_ARB_CONFIG */
7861*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_CMD_ARB_CONFIG {
7862*4882a593Smuzhiyun 	/** Action */
7863*4882a593Smuzhiyun 	t_u16 action;
7864*4882a593Smuzhiyun 	/** 0-4 */
7865*4882a593Smuzhiyun 	t_u32 arb_mode;
7866*4882a593Smuzhiyun 	/** 1: use FW enhancement, 0: use FW default */
7867*4882a593Smuzhiyun 	t_u32 reserved;
7868*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_CMD_ARB_CONFIG;
7869*4882a593Smuzhiyun 
7870*4882a593Smuzhiyun /** HostCmd_DS_CMD_TX_AMPDU_PROT_MODE */
7871*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_CMD_TX_AMPDU_PROT_MODE {
7872*4882a593Smuzhiyun 	/** Action */
7873*4882a593Smuzhiyun 	t_u16 action;
7874*4882a593Smuzhiyun 	/** Prot mode */
7875*4882a593Smuzhiyun 	t_u16 mode;
7876*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_CMD_TX_AMPDU_PROT_MODE;
7877*4882a593Smuzhiyun 
7878*4882a593Smuzhiyun /** HostCmd_DS_CMD_DOT11MC_UNASSOC_FTM_CFG */
7879*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_CMD_DOT11MC_UNASSOC_FTM_CFG {
7880*4882a593Smuzhiyun 	/** Action */
7881*4882a593Smuzhiyun 	t_u16 action;
7882*4882a593Smuzhiyun 	/** Cfg state */
7883*4882a593Smuzhiyun 	t_u16 state;
7884*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_CMD_DOT11MC_UNASSOC_FTM_CFG;
7885*4882a593Smuzhiyun 
7886*4882a593Smuzhiyun /** HostCmd_CMD_RATE_ADAPT_CFG */
7887*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_CMD_RATE_ADAPT_CFG {
7888*4882a593Smuzhiyun 	/** Action */
7889*4882a593Smuzhiyun 	t_u16 action;
7890*4882a593Smuzhiyun 	/** SR Rateadapt*/
7891*4882a593Smuzhiyun 	t_u8 sr_rateadapt;
7892*4882a593Smuzhiyun 	/** set low threshold */
7893*4882a593Smuzhiyun 	t_u8 ra_low_thresh;
7894*4882a593Smuzhiyun 	/** set high threshold */
7895*4882a593Smuzhiyun 	t_u8 ra_high_thresh;
7896*4882a593Smuzhiyun 	/** set interval */
7897*4882a593Smuzhiyun 	t_u16 ra_interval;
7898*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_CMD_RATE_ADAPT_CFG;
7899*4882a593Smuzhiyun 
7900*4882a593Smuzhiyun /** HostCmd_CMD_CCK_DESENSE_CFG */
7901*4882a593Smuzhiyun typedef MLAN_PACK_START struct _HostCmd_DS_CMD_CCK_DESENSE_CFG {
7902*4882a593Smuzhiyun 	/** Action */
7903*4882a593Smuzhiyun 	t_u16 action;
7904*4882a593Smuzhiyun 	/** cck desense mode: 0:disable 1:normal 2:dynamic */
7905*4882a593Smuzhiyun 	t_u16 mode;
7906*4882a593Smuzhiyun 	/** specify rssi margin */
7907*4882a593Smuzhiyun 	t_s8 margin;
7908*4882a593Smuzhiyun 	/** specify ceil rssi threshold */
7909*4882a593Smuzhiyun 	t_s8 ceil_thresh;
7910*4882a593Smuzhiyun 	/** cck desense "on" interval count */
7911*4882a593Smuzhiyun 	t_u8 num_on_intervals;
7912*4882a593Smuzhiyun 	/** cck desense "off" interval count */
7913*4882a593Smuzhiyun 	t_u8 num_off_intervals;
7914*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_CMD_CCK_DESENSE_CFG;
7915*4882a593Smuzhiyun 
7916*4882a593Smuzhiyun /** HostCmd_DS_COMMAND */
7917*4882a593Smuzhiyun typedef struct MLAN_PACK_START _HostCmd_DS_COMMAND {
7918*4882a593Smuzhiyun 	/** Command Header : Command */
7919*4882a593Smuzhiyun 	t_u16 command;
7920*4882a593Smuzhiyun 	/** Command Header : Size */
7921*4882a593Smuzhiyun 	t_u16 size;
7922*4882a593Smuzhiyun 	/** Command Header : Sequence number */
7923*4882a593Smuzhiyun 	t_u16 seq_num;
7924*4882a593Smuzhiyun 	/** Command Header : Result */
7925*4882a593Smuzhiyun 	t_u16 result;
7926*4882a593Smuzhiyun 	/** Command Body */
7927*4882a593Smuzhiyun 	union {
7928*4882a593Smuzhiyun 		/** Hardware specifications */
7929*4882a593Smuzhiyun 		HostCmd_DS_GET_HW_SPEC hw_spec;
7930*4882a593Smuzhiyun #ifdef SDIO
7931*4882a593Smuzhiyun 		HostCmd_DS_SDIO_SP_RX_AGGR_CFG sdio_rx_aggr;
7932*4882a593Smuzhiyun #endif
7933*4882a593Smuzhiyun 		/** Cfg data */
7934*4882a593Smuzhiyun 		HostCmd_DS_802_11_CFG_DATA cfg_data;
7935*4882a593Smuzhiyun 		/** MAC control */
7936*4882a593Smuzhiyun 		HostCmd_DS_MAC_CONTROL mac_ctrl;
7937*4882a593Smuzhiyun 		/** MAC address */
7938*4882a593Smuzhiyun 		HostCmd_DS_802_11_MAC_ADDRESS mac_addr;
7939*4882a593Smuzhiyun 		/** MAC muticast address */
7940*4882a593Smuzhiyun 		HostCmd_DS_MAC_MULTICAST_ADR mc_addr;
7941*4882a593Smuzhiyun 		/** Get log */
7942*4882a593Smuzhiyun 		HostCmd_DS_802_11_GET_LOG get_log;
7943*4882a593Smuzhiyun 		/** Get link layer statistic */
7944*4882a593Smuzhiyun 		HostCmd_DS_802_11_LINK_STATISTIC get_link_statistic;
7945*4882a593Smuzhiyun 		/** RSSI information */
7946*4882a593Smuzhiyun 		HostCmd_DS_802_11_RSSI_INFO_EXT rssi_info_ext;
7947*4882a593Smuzhiyun 		/** RSSI information */
7948*4882a593Smuzhiyun 		HostCmd_DS_802_11_RSSI_INFO rssi_info;
7949*4882a593Smuzhiyun 		/** RSSI information response */
7950*4882a593Smuzhiyun 		HostCmd_DS_802_11_RSSI_INFO_RSP rssi_info_rsp;
7951*4882a593Smuzhiyun 		/** SNMP MIB */
7952*4882a593Smuzhiyun 		HostCmd_DS_802_11_SNMP_MIB smib;
7953*4882a593Smuzhiyun #ifdef UAP_SUPPORT
7954*4882a593Smuzhiyun 		/** UAP SNMP MIB */
7955*4882a593Smuzhiyun 		HostCmd_DS_UAP_802_11_SNMP_MIB uap_smib;
7956*4882a593Smuzhiyun #endif
7957*4882a593Smuzhiyun 		/** Radio control */
7958*4882a593Smuzhiyun 		HostCmd_DS_802_11_RADIO_CONTROL radio;
7959*4882a593Smuzhiyun 		/** RF channel */
7960*4882a593Smuzhiyun 		HostCmd_DS_802_11_RF_CHANNEL rf_channel;
7961*4882a593Smuzhiyun 		/** Tx rate query */
7962*4882a593Smuzhiyun 		HostCmd_TX_RATE_QUERY tx_rate;
7963*4882a593Smuzhiyun 		/** Tx rate configuration */
7964*4882a593Smuzhiyun 		HostCmd_DS_TX_RATE_CFG tx_rate_cfg;
7965*4882a593Smuzhiyun 		/** Tx power configuration */
7966*4882a593Smuzhiyun 		HostCmd_DS_TXPWR_CFG txp_cfg;
7967*4882a593Smuzhiyun 		/** RF Tx power configuration */
7968*4882a593Smuzhiyun 		HostCmd_DS_802_11_RF_TX_POWER txp;
7969*4882a593Smuzhiyun 
7970*4882a593Smuzhiyun 		/** RF antenna */
7971*4882a593Smuzhiyun 		HostCmd_DS_802_11_RF_ANTENNA antenna;
7972*4882a593Smuzhiyun 
7973*4882a593Smuzhiyun 		/** CW Mode: Tx CW Level control */
7974*4882a593Smuzhiyun 		HostCmd_DS_CW_MODE_CTRL cwmode;
7975*4882a593Smuzhiyun 		/** Enhanced power save command */
7976*4882a593Smuzhiyun 		HostCmd_DS_802_11_PS_MODE_ENH psmode_enh;
7977*4882a593Smuzhiyun 		HostCmd_DS_802_11_HS_CFG_ENH opt_hs_cfg;
7978*4882a593Smuzhiyun 		/** Scan */
7979*4882a593Smuzhiyun 		HostCmd_DS_802_11_SCAN scan;
7980*4882a593Smuzhiyun 		/** Extended Scan */
7981*4882a593Smuzhiyun 		HostCmd_DS_802_11_SCAN_EXT ext_scan;
7982*4882a593Smuzhiyun 
7983*4882a593Smuzhiyun 		/** Mgmt frame subtype mask */
7984*4882a593Smuzhiyun 		HostCmd_DS_RX_MGMT_IND rx_mgmt_ind;
7985*4882a593Smuzhiyun 		/** Scan response */
7986*4882a593Smuzhiyun 		HostCmd_DS_802_11_SCAN_RSP scan_resp;
7987*4882a593Smuzhiyun 
7988*4882a593Smuzhiyun 		HostCmd_DS_802_11_BG_SCAN_CONFIG bg_scan_config;
7989*4882a593Smuzhiyun 		HostCmd_DS_802_11_BG_SCAN_QUERY bg_scan_query;
7990*4882a593Smuzhiyun 		HostCmd_DS_802_11_BG_SCAN_QUERY_RSP bg_scan_query_resp;
7991*4882a593Smuzhiyun 		HostCmd_DS_SUBSCRIBE_EVENT subscribe_event;
7992*4882a593Smuzhiyun 		HostCmd_DS_OTP_USER_DATA otp_user_data;
7993*4882a593Smuzhiyun 		/** Associate */
7994*4882a593Smuzhiyun 		HostCmd_DS_802_11_ASSOCIATE associate;
7995*4882a593Smuzhiyun 
7996*4882a593Smuzhiyun 		/** Associate response */
7997*4882a593Smuzhiyun 		HostCmd_DS_802_11_ASSOCIATE_RSP associate_rsp;
7998*4882a593Smuzhiyun 		/** Deauthenticate */
7999*4882a593Smuzhiyun 		HostCmd_DS_802_11_DEAUTHENTICATE deauth;
8000*4882a593Smuzhiyun 		/** Ad-Hoc start */
8001*4882a593Smuzhiyun 		HostCmd_DS_802_11_AD_HOC_START adhoc_start;
8002*4882a593Smuzhiyun 		/** Ad-Hoc start result */
8003*4882a593Smuzhiyun 		HostCmd_DS_802_11_AD_HOC_START_RESULT adhoc_start_result;
8004*4882a593Smuzhiyun 		/** Ad-Hoc join result */
8005*4882a593Smuzhiyun 		HostCmd_DS_802_11_AD_HOC_JOIN_RESULT adhoc_join_result;
8006*4882a593Smuzhiyun 		/** Ad-Hoc join */
8007*4882a593Smuzhiyun 		HostCmd_DS_802_11_AD_HOC_JOIN adhoc_join;
8008*4882a593Smuzhiyun 		/** Domain information */
8009*4882a593Smuzhiyun 		HostCmd_DS_802_11D_DOMAIN_INFO domain_info;
8010*4882a593Smuzhiyun 		/** Domain information response */
8011*4882a593Smuzhiyun 		HostCmd_DS_802_11D_DOMAIN_INFO_RSP domain_info_resp;
8012*4882a593Smuzhiyun 		HostCmd_DS_802_11_TPC_ADAPT_REQ tpc_req;
8013*4882a593Smuzhiyun 		HostCmd_DS_802_11_TPC_INFO tpc_info;
8014*4882a593Smuzhiyun 		HostCmd_DS_802_11_CHAN_SW_ANN chan_sw_ann;
8015*4882a593Smuzhiyun 		HostCmd_DS_CHAN_RPT_REQ chan_rpt_req;
8016*4882a593Smuzhiyun 		HostCmd_DS_MEASUREMENT_REQUEST meas_req;
8017*4882a593Smuzhiyun 		HostCmd_DS_MEASUREMENT_REPORT meas_rpt;
8018*4882a593Smuzhiyun 		/** Add BA request */
8019*4882a593Smuzhiyun 		HostCmd_DS_11N_ADDBA_REQ add_ba_req;
8020*4882a593Smuzhiyun 		/** Add BA response */
8021*4882a593Smuzhiyun 		HostCmd_DS_11N_ADDBA_RSP add_ba_rsp;
8022*4882a593Smuzhiyun 		/** Delete BA entry */
8023*4882a593Smuzhiyun 		HostCmd_DS_11N_DELBA del_ba;
8024*4882a593Smuzhiyun 		/** Tx buffer configuration */
8025*4882a593Smuzhiyun 		HostCmd_DS_TXBUF_CFG tx_buf;
8026*4882a593Smuzhiyun 		/** AMSDU Aggr Ctrl configuration */
8027*4882a593Smuzhiyun 		HostCmd_DS_AMSDU_AGGR_CTRL amsdu_aggr_ctrl;
8028*4882a593Smuzhiyun 		/** 11n configuration */
8029*4882a593Smuzhiyun 		HostCmd_DS_11N_CFG htcfg;
8030*4882a593Smuzhiyun 		/** reject addba req conditions configuration */
8031*4882a593Smuzhiyun 		HostCmd_DS_REJECT_ADDBA_REQ rejectaddbareq;
8032*4882a593Smuzhiyun 		/* RANDYTODO need add more */
8033*4882a593Smuzhiyun 		/** HostCmd_DS_11AC_CFG */
8034*4882a593Smuzhiyun 		HostCmd_DS_11AC_CFG vhtcfg;
8035*4882a593Smuzhiyun 		/** HostCmd_DS_11ACTXBUF_CFG*/
8036*4882a593Smuzhiyun 		HostCmd_DS_11ACTXBUF_CFG ac_tx_buf;
8037*4882a593Smuzhiyun 		/** 11n configuration */
8038*4882a593Smuzhiyun 		HostCmd_DS_TX_BF_CFG tx_bf_cfg;
8039*4882a593Smuzhiyun 		/** WMM status get */
8040*4882a593Smuzhiyun 		HostCmd_DS_WMM_GET_STATUS get_wmm_status;
8041*4882a593Smuzhiyun 		/** WMM ADDTS */
8042*4882a593Smuzhiyun 		HostCmd_DS_WMM_ADDTS_REQ add_ts;
8043*4882a593Smuzhiyun 		/** WMM DELTS */
8044*4882a593Smuzhiyun 		HostCmd_DS_WMM_DELTS_REQ del_ts;
8045*4882a593Smuzhiyun 		/** WMM set/get queue config */
8046*4882a593Smuzhiyun 		HostCmd_DS_WMM_QUEUE_CONFIG queue_config;
8047*4882a593Smuzhiyun 		/** WMM param config*/
8048*4882a593Smuzhiyun 		HostCmd_DS_WMM_PARAM_CONFIG param_config;
8049*4882a593Smuzhiyun 		/** WMM on/of/get queue statistics */
8050*4882a593Smuzhiyun 		HostCmd_DS_WMM_QUEUE_STATS queue_stats;
8051*4882a593Smuzhiyun 		/** WMM get traffic stream status */
8052*4882a593Smuzhiyun 		HostCmd_DS_WMM_TS_STATUS ts_status;
8053*4882a593Smuzhiyun 		/** Key material */
8054*4882a593Smuzhiyun 		HostCmd_DS_802_11_KEY_MATERIAL key_material;
8055*4882a593Smuzhiyun 		/** GTK Rekey parameters */
8056*4882a593Smuzhiyun 		HostCmd_DS_GTK_REKEY_PARAMS gtk_rekey;
8057*4882a593Smuzhiyun 		/** E-Supplicant PSK */
8058*4882a593Smuzhiyun 		HostCmd_DS_802_11_SUPPLICANT_PMK esupplicant_psk;
8059*4882a593Smuzhiyun 		/** E-Supplicant profile */
8060*4882a593Smuzhiyun 		HostCmd_DS_802_11_SUPPLICANT_PROFILE esupplicant_profile;
8061*4882a593Smuzhiyun 		/** Extended version */
8062*4882a593Smuzhiyun 		HostCmd_DS_VERSION_EXT verext;
8063*4882a593Smuzhiyun 		/** Adhoc Coalescing */
8064*4882a593Smuzhiyun 		HostCmd_DS_802_11_IBSS_STATUS ibss_coalescing;
8065*4882a593Smuzhiyun 		/** Mgmt IE list configuration */
8066*4882a593Smuzhiyun 		HostCmd_DS_MGMT_IE_LIST_CFG mgmt_ie_list;
8067*4882a593Smuzhiyun 		/** TDLS configuration command */
8068*4882a593Smuzhiyun 		HostCmd_DS_TDLS_CONFIG tdls_config_data;
8069*4882a593Smuzhiyun 		/** TDLS operation command */
8070*4882a593Smuzhiyun 		HostCmd_DS_TDLS_OPER tdls_oper_data;
8071*4882a593Smuzhiyun 		/** System clock configuration */
8072*4882a593Smuzhiyun 		HostCmd_DS_ECL_SYSTEM_CLOCK_CONFIG sys_clock_cfg;
8073*4882a593Smuzhiyun 		/** MAC register access */
8074*4882a593Smuzhiyun 		HostCmd_DS_MAC_REG_ACCESS mac_reg;
8075*4882a593Smuzhiyun 		/** BBP register access */
8076*4882a593Smuzhiyun 		HostCmd_DS_BBP_REG_ACCESS bbp_reg;
8077*4882a593Smuzhiyun 		/** RF register access */
8078*4882a593Smuzhiyun 		HostCmd_DS_RF_REG_ACCESS rf_reg;
8079*4882a593Smuzhiyun 		/** EEPROM register access */
8080*4882a593Smuzhiyun 		HostCmd_DS_802_11_EEPROM_ACCESS eeprom;
8081*4882a593Smuzhiyun 		/** Memory access */
8082*4882a593Smuzhiyun 		HostCmd_DS_MEM_ACCESS mem;
8083*4882a593Smuzhiyun 		/** Target device access */
8084*4882a593Smuzhiyun 		HostCmd_DS_TARGET_ACCESS target;
8085*4882a593Smuzhiyun 		/** BCA register access */
8086*4882a593Smuzhiyun 		HostCmd_DS_BCA_REG_ACCESS bca_reg;
8087*4882a593Smuzhiyun 		/** register access */
8088*4882a593Smuzhiyun 		HostCmd_DS_REG_ACCESS reg;
8089*4882a593Smuzhiyun 		/** Inactivity timeout extend */
8090*4882a593Smuzhiyun 		HostCmd_DS_INACTIVITY_TIMEOUT_EXT inactivity_to;
8091*4882a593Smuzhiyun #ifdef UAP_SUPPORT
8092*4882a593Smuzhiyun 		HostCmd_DS_SYS_CONFIG sys_config;
8093*4882a593Smuzhiyun 		HostCmd_DS_SYS_INFO sys_info;
8094*4882a593Smuzhiyun 		HostCmd_DS_STA_DEAUTH sta_deauth;
8095*4882a593Smuzhiyun 		HostCmd_DS_STA_LIST sta_list;
8096*4882a593Smuzhiyun 		HostCmd_DS_POWER_MGMT_EXT pm_cfg;
8097*4882a593Smuzhiyun 		HostCmd_DS_REPORT_MIC report_mic;
8098*4882a593Smuzhiyun 		HostCmd_DS_UAP_OPER_CTRL uap_oper_ctrl;
8099*4882a593Smuzhiyun #endif /* UAP_SUPPORT */
8100*4882a593Smuzhiyun 		HostCmd_DS_TX_RX_HISTOGRAM tx_rx_histogram;
8101*4882a593Smuzhiyun 
8102*4882a593Smuzhiyun 		/** Sleep period command */
8103*4882a593Smuzhiyun 		HostCmd_DS_802_11_SLEEP_PERIOD sleep_pd;
8104*4882a593Smuzhiyun 		/** Sleep params command */
8105*4882a593Smuzhiyun 		HostCmd_DS_802_11_SLEEP_PARAMS sleep_param;
8106*4882a593Smuzhiyun 
8107*4882a593Smuzhiyun #ifdef SDIO
8108*4882a593Smuzhiyun 		/** SDIO GPIO interrupt config command */
8109*4882a593Smuzhiyun 		HostCmd_DS_SDIO_GPIO_INT_CONFIG sdio_gpio_int;
8110*4882a593Smuzhiyun 		HostCmd_DS_SDIO_PULL_CTRL sdio_pull_ctl;
8111*4882a593Smuzhiyun #endif
8112*4882a593Smuzhiyun 		HostCmd_DS_SET_BSS_MODE bss_mode;
8113*4882a593Smuzhiyun 		HostCmd_DS_802_11_NET_MONITOR net_mon;
8114*4882a593Smuzhiyun 		HostCmd_DS_CMD_TX_DATA_PAUSE tx_data_pause;
8115*4882a593Smuzhiyun #if defined(PCIE)
8116*4882a593Smuzhiyun #if defined(PCIE8997) || defined(PCIE8897)
8117*4882a593Smuzhiyun 		HostCmd_DS_PCIE_HOST_BUF_DETAILS pcie_host_spec;
8118*4882a593Smuzhiyun #endif
8119*4882a593Smuzhiyun #endif
8120*4882a593Smuzhiyun 		HostCmd_DS_REMAIN_ON_CHANNEL remain_on_chan;
8121*4882a593Smuzhiyun #ifdef WIFI_DIRECT_SUPPORT
8122*4882a593Smuzhiyun 		HostCmd_DS_WIFI_DIRECT_MODE wifi_direct_mode;
8123*4882a593Smuzhiyun 		HostCmd_DS_WIFI_DIRECT_PARAM_CONFIG p2p_params_config;
8124*4882a593Smuzhiyun #endif
8125*4882a593Smuzhiyun 		HostCmd_DS_GPIO_TSF_LATCH_PARAM_CONFIG gpio_tsf_latch;
8126*4882a593Smuzhiyun 		HostCmd_DS_COALESCE_CONFIG coalesce_config;
8127*4882a593Smuzhiyun 		HostCmd_DS_FW_AUTO_RECONNECT fw_auto_reconnect_cmd;
8128*4882a593Smuzhiyun 		HostCmd_DS_HS_WAKEUP_REASON hs_wakeup_reason;
8129*4882a593Smuzhiyun 		HostCmd_DS_PACKET_AGGR_CTRL aggr_ctrl;
8130*4882a593Smuzhiyun #ifdef USB
8131*4882a593Smuzhiyun 		HostCmd_DS_PACKET_AGGR_OVER_HOST_INTERFACE packet_aggr;
8132*4882a593Smuzhiyun #endif
8133*4882a593Smuzhiyun 		HostCmd_CONFIG_LOW_PWR_MODE low_pwr_mode_cfg;
8134*4882a593Smuzhiyun 		HostCmd_DS_TSF tsf;
8135*4882a593Smuzhiyun 		HostCmd_DS_DFS_REPEATER_MODE dfs_repeater;
8136*4882a593Smuzhiyun #ifdef RX_PACKET_COALESCE
8137*4882a593Smuzhiyun 		HostCmd_DS_RX_PKT_COAL_CFG rx_pkt_coal_cfg;
8138*4882a593Smuzhiyun #endif
8139*4882a593Smuzhiyun 		HostCmd_DS_EAPOL_PKT eapol_pkt;
8140*4882a593Smuzhiyun 		HostCmd_DS_SENSOR_TEMP temp_sensor;
8141*4882a593Smuzhiyun 		HostCMD_DS_APCMD_ACS_SCAN acs_scan;
8142*4882a593Smuzhiyun 		HostCmd_DS_MIMO_SWITCH mimo_switch;
8143*4882a593Smuzhiyun 		HostCmd_DS_IPV6_RA_OFFLOAD ipv6_ra_offload;
8144*4882a593Smuzhiyun #ifdef STA_SUPPORT
8145*4882a593Smuzhiyun 		HostCmd_DS_STA_CONFIGURE sta_cfg;
8146*4882a593Smuzhiyun #endif
8147*4882a593Smuzhiyun 		/** GPIO Independent reset configure */
8148*4882a593Smuzhiyun 		HostCmd_DS_INDEPENDENT_RESET_CFG ind_rst_cfg;
8149*4882a593Smuzhiyun 		HostCmd_DS_802_11_PS_INACTIVITY_TIMEOUT ps_inact_tmo;
8150*4882a593Smuzhiyun 		HostCmd_DS_ROAM_OFFLOAD roam_offload;
8151*4882a593Smuzhiyun 		HostCmd_DS_CHAN_REGION_CFG reg_cfg;
8152*4882a593Smuzhiyun 		HostCmd_DS_AUTO_TX auto_tx;
8153*4882a593Smuzhiyun 		HostCmd_DS_DYN_BW dyn_bw;
8154*4882a593Smuzhiyun 		HostCmd_DS_802_11_ROBUSTCOEX robustcoexparams;
8155*4882a593Smuzhiyun 		HostCmd_DS_DMCS_CFG dmcs;
8156*4882a593Smuzhiyun #if defined(PCIE)
8157*4882a593Smuzhiyun 		HostCmd_DS_SSU_CFG ssu_params;
8158*4882a593Smuzhiyun #endif
8159*4882a593Smuzhiyun 		HostCmd_DS_CSI_CFG csi_params;
8160*4882a593Smuzhiyun 		/** boot sleep configure */
8161*4882a593Smuzhiyun 		HostCmd_DS_BOOT_SLEEP boot_sleep;
8162*4882a593Smuzhiyun #if defined(DRV_EMBEDDED_AUTHENTICATOR) || defined(DRV_EMBEDDED_SUPPLICANT)
8163*4882a593Smuzhiyun 		/** crypto cmd */
8164*4882a593Smuzhiyun 		HostCmd_DS_CRYPTO crypto_cmd;
8165*4882a593Smuzhiyun #endif
8166*4882a593Smuzhiyun #ifdef UAP_SUPPORT
8167*4882a593Smuzhiyun 		/** Add station cmd */
8168*4882a593Smuzhiyun 		HostCmd_DS_ADD_STATION sta_info;
8169*4882a593Smuzhiyun #endif
8170*4882a593Smuzhiyun 		/** HostCmd_DS_11AX_CFG */
8171*4882a593Smuzhiyun 		HostCmd_DS_11AX_CFG axcfg;
8172*4882a593Smuzhiyun 		/** HostCmd_DS_11AX_CMD_CFG */
8173*4882a593Smuzhiyun 		HostCmd_DS_11AX_CMD_CFG axcmd;
8174*4882a593Smuzhiyun 		HostCmd_DS_RANGE_EXT range_ext;
8175*4882a593Smuzhiyun 		/** HostCmd_DS_TWT_CFG */
8176*4882a593Smuzhiyun 		HostCmd_DS_TWT_CFG twtcfg;
8177*4882a593Smuzhiyun 
8178*4882a593Smuzhiyun 		HostCmd_DS_CMD_RX_ABORT_CFG rx_abort_cfg;
8179*4882a593Smuzhiyun 		HostCmd_DS_CMD_RX_ABORT_CFG_EXT rx_abort_cfg_ext;
8180*4882a593Smuzhiyun 		HostCmd_DS_CMD_TX_AMPDU_PROT_MODE tx_ampdu_prot_mode;
8181*4882a593Smuzhiyun 		HostCmd_DS_CMD_RATE_ADAPT_CFG rate_adapt_cfg;
8182*4882a593Smuzhiyun 		HostCmd_DS_CMD_CCK_DESENSE_CFG cck_desense_cfg;
8183*4882a593Smuzhiyun 		/** trpc_config */
8184*4882a593Smuzhiyun 		HostCmd_DS_CHANNEL_TRPC_CONFIG ch_trpc_config;
8185*4882a593Smuzhiyun 		HostCmd_DS_LOW_POWER_MODE_CFG lpm_cfg;
8186*4882a593Smuzhiyun 		HostCmd_DS_BAND_STEERING band_steer_info;
8187*4882a593Smuzhiyun 		HostCmd_DS_BEACON_STUCK_CFG beacon_stuck_cfg;
8188*4882a593Smuzhiyun 		struct mfg_cmd_generic_cfg mfg_generic_cfg;
8189*4882a593Smuzhiyun 		struct mfg_cmd_tx_cont mfg_tx_cont;
8190*4882a593Smuzhiyun 		struct mfg_cmd_tx_frame2 mfg_tx_frame2;
8191*4882a593Smuzhiyun 		struct mfg_Cmd_HE_TBTx_t mfg_he_power;
8192*4882a593Smuzhiyun 		HostCmd_DS_CMD_ARB_CONFIG arb_cfg;
8193*4882a593Smuzhiyun 		HostCmd_DS_CMD_DOT11MC_UNASSOC_FTM_CFG dot11mc_unassoc_ftm_cfg;
8194*4882a593Smuzhiyun 		HostCmd_DS_HAL_PHY_CFG hal_phy_cfg_params;
8195*4882a593Smuzhiyun 		HostCmd_DS_IPS_CONFIG ips_cfg;
8196*4882a593Smuzhiyun 		HostCmd_DS_MC_AGGR_CFG mc_aggr_cfg;
8197*4882a593Smuzhiyun 		HostCmd_DS_STATS stats;
8198*4882a593Smuzhiyun 		HostCmd_DS_GET_CH_LOAD ch_load;
8199*4882a593Smuzhiyun 	} params;
8200*4882a593Smuzhiyun } MLAN_PACK_END HostCmd_DS_COMMAND, *pHostCmd_DS_COMMAND;
8201*4882a593Smuzhiyun 
8202*4882a593Smuzhiyun /** PS_CMD_ConfirmSleep */
8203*4882a593Smuzhiyun typedef MLAN_PACK_START struct _OPT_Confirm_Sleep {
8204*4882a593Smuzhiyun 	/** Command */
8205*4882a593Smuzhiyun 	t_u16 command;
8206*4882a593Smuzhiyun 	/** Size */
8207*4882a593Smuzhiyun 	t_u16 size;
8208*4882a593Smuzhiyun 	/** Sequence number */
8209*4882a593Smuzhiyun 	t_u16 seq_num;
8210*4882a593Smuzhiyun 	/** Result */
8211*4882a593Smuzhiyun 	t_u16 result;
8212*4882a593Smuzhiyun 	/** Action */
8213*4882a593Smuzhiyun 	t_u16 action;
8214*4882a593Smuzhiyun 	/** Sleep comfirm param definition */
8215*4882a593Smuzhiyun 	sleep_confirm_param sleep_cfm;
8216*4882a593Smuzhiyun } MLAN_PACK_END OPT_Confirm_Sleep;
8217*4882a593Smuzhiyun 
8218*4882a593Smuzhiyun typedef struct MLAN_PACK_START _opt_sleep_confirm_buffer {
8219*4882a593Smuzhiyun 	/** Header for interface */
8220*4882a593Smuzhiyun 	t_u32 hdr;
8221*4882a593Smuzhiyun 	/** New power save command used to send
8222*4882a593Smuzhiyun 	 *  sleep confirmation to the firmware */
8223*4882a593Smuzhiyun 	OPT_Confirm_Sleep ps_cfm_sleep;
8224*4882a593Smuzhiyun } MLAN_PACK_END opt_sleep_confirm_buffer;
8225*4882a593Smuzhiyun 
8226*4882a593Smuzhiyun typedef MLAN_PACK_START struct _MrvlIEtypes_Secure_Boot_Uuid_t {
8227*4882a593Smuzhiyun 	/** Header */
8228*4882a593Smuzhiyun 	MrvlIEtypesHeader_t header;
8229*4882a593Smuzhiyun 
8230*4882a593Smuzhiyun 	/** Secure boot uuid lower and higher 8 bytes */
8231*4882a593Smuzhiyun 	t_u64 uuid_lo;
8232*4882a593Smuzhiyun 	t_u64 uuid_hi;
8233*4882a593Smuzhiyun } MLAN_PACK_END MrvlIEtypes_Secure_Boot_Uuid_t;
8234*4882a593Smuzhiyun 
8235*4882a593Smuzhiyun /** req host side download vdll block */
8236*4882a593Smuzhiyun #define VDLL_IND_TYPE_REQ 0
8237*4882a593Smuzhiyun /** notify vdll start offset in firmware image */
8238*4882a593Smuzhiyun #define VDLL_IND_TYPE_OFFSET 1
8239*4882a593Smuzhiyun /** notify vdll download error: signature error */
8240*4882a593Smuzhiyun #define VDLL_IND_TYPE_ERR_SIG 2
8241*4882a593Smuzhiyun /** notify vdll download error: ID error */
8242*4882a593Smuzhiyun #define VDLL_IND_TYPE_ERR_ID 3
8243*4882a593Smuzhiyun 
8244*4882a593Smuzhiyun /** vdll indicate event structure */
8245*4882a593Smuzhiyun typedef MLAN_PACK_START struct _vdll_ind {
8246*4882a593Smuzhiyun 	/*VDLL ind type*/
8247*4882a593Smuzhiyun 	t_u16 type;
8248*4882a593Smuzhiyun 	/*reserved*/
8249*4882a593Smuzhiyun 	t_u16 reserved;
8250*4882a593Smuzhiyun 	/*indicate the offset downloaded so far*/
8251*4882a593Smuzhiyun 	t_u32 offset;
8252*4882a593Smuzhiyun 	/*VDLL block size*/
8253*4882a593Smuzhiyun 	t_u16 block_len;
8254*4882a593Smuzhiyun } MLAN_PACK_END vdll_ind, *pvdll_ind;
8255*4882a593Smuzhiyun #ifdef PRAGMA_PACK
8256*4882a593Smuzhiyun #pragma pack(pop)
8257*4882a593Smuzhiyun #endif
8258*4882a593Smuzhiyun 
8259*4882a593Smuzhiyun #endif /* !_MLAN_FW_H_ */
8260