]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/net/wireless/mwifiex/fw.h
1184141839ae435ea78098e6695401abf263dd4f
[karo-tx-linux.git] / drivers / net / wireless / mwifiex / fw.h
1 /*
2  * Marvell Wireless LAN device driver: Firmware specific macros & structures
3  *
4  * Copyright (C) 2011, Marvell International Ltd.
5  *
6  * This software file (the "File") is distributed by Marvell International
7  * Ltd. under the terms of the GNU General Public License Version 2, June 1991
8  * (the "License").  You may use, redistribute and/or modify this File in
9  * accordance with the terms and conditions of the License, a copy of which
10  * is available by writing to the Free Software Foundation, Inc.,
11  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the
12  * worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
13  *
14  * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE
16  * ARE EXPRESSLY DISCLAIMED.  The License provides additional details about
17  * this warranty disclaimer.
18  */
19
20 #ifndef _MWIFIEX_FW_H_
21 #define _MWIFIEX_FW_H_
22
23 #include <linux/if_ether.h>
24
25
26 #define INTF_HEADER_LEN     4
27
28 struct rfc_1042_hdr {
29         u8 llc_dsap;
30         u8 llc_ssap;
31         u8 llc_ctrl;
32         u8 snap_oui[3];
33         u16 snap_type;
34 };
35
36 struct rx_packet_hdr {
37         struct ethhdr eth803_hdr;
38         struct rfc_1042_hdr rfc1042_hdr;
39 };
40
41 struct tx_packet_hdr {
42         struct ethhdr eth803_hdr;
43         struct rfc_1042_hdr rfc1042_hdr;
44 };
45
46 #define B_SUPPORTED_RATES               5
47 #define G_SUPPORTED_RATES               9
48 #define BG_SUPPORTED_RATES              13
49 #define A_SUPPORTED_RATES               9
50 #define HOSTCMD_SUPPORTED_RATES         14
51 #define N_SUPPORTED_RATES               3
52 #define ALL_802_11_BANDS           (BAND_A | BAND_B | BAND_G | BAND_GN)
53
54 #define FW_MULTI_BANDS_SUPPORT  (BIT(8) | BIT(9) | BIT(10) | BIT(11))
55 #define IS_SUPPORT_MULTI_BANDS(adapter)        \
56         (adapter->fw_cap_info & FW_MULTI_BANDS_SUPPORT)
57 #define GET_FW_DEFAULT_BANDS(adapter)  \
58         ((adapter->fw_cap_info >> 8) & ALL_802_11_BANDS)
59
60 #define HostCmd_WEP_KEY_INDEX_MASK              0x3fff
61
62 #define KEY_INFO_ENABLED        0x01
63 enum KEY_TYPE_ID {
64         KEY_TYPE_ID_WEP = 0,
65         KEY_TYPE_ID_TKIP,
66         KEY_TYPE_ID_AES,
67         KEY_TYPE_ID_WAPI,
68 };
69 #define KEY_MCAST       BIT(0)
70 #define KEY_UNICAST     BIT(1)
71 #define KEY_ENABLED     BIT(2)
72
73 #define WAPI_KEY_LEN                    50
74
75 #define MAX_POLL_TRIES                  100
76
77 #define MAX_MULTI_INTERFACE_POLL_TRIES  1000
78
79 #define MAX_FIRMWARE_POLL_TRIES                 100
80
81 #define FIRMWARE_READY_SDIO                             0xfedc
82 #define FIRMWARE_READY_PCIE                             0xfedcba00
83
84 enum mwifiex_usb_ep {
85         MWIFIEX_USB_EP_CMD_EVENT = 1,
86         MWIFIEX_USB_EP_DATA = 2,
87 };
88
89 enum MWIFIEX_802_11_PRIVACY_FILTER {
90         MWIFIEX_802_11_PRIV_FILTER_ACCEPT_ALL,
91         MWIFIEX_802_11_PRIV_FILTER_8021X_WEP
92 };
93
94 #define CAL_SNR(RSSI, NF)               ((s16)((s16)(RSSI)-(s16)(NF)))
95
96 #define UAP_BSS_PARAMS_I                        0
97 #define UAP_CUSTOM_IE_I                         1
98 #define MWIFIEX_AUTO_IDX_MASK                   0xffff
99 #define MWIFIEX_DELETE_MASK                     0x0000
100 #define MGMT_MASK_ASSOC_REQ                     0x01
101 #define MGMT_MASK_REASSOC_REQ                   0x04
102 #define MGMT_MASK_ASSOC_RESP                    0x02
103 #define MGMT_MASK_REASSOC_RESP                  0x08
104 #define MGMT_MASK_PROBE_REQ                     0x10
105 #define MGMT_MASK_PROBE_RESP                    0x20
106 #define MGMT_MASK_BEACON                        0x100
107
108 #define TLV_TYPE_UAP_SSID                       0x0000
109
110 #define PROPRIETARY_TLV_BASE_ID                 0x0100
111 #define TLV_TYPE_KEY_MATERIAL       (PROPRIETARY_TLV_BASE_ID + 0)
112 #define TLV_TYPE_CHANLIST           (PROPRIETARY_TLV_BASE_ID + 1)
113 #define TLV_TYPE_NUMPROBES          (PROPRIETARY_TLV_BASE_ID + 2)
114 #define TLV_TYPE_RSSI_LOW           (PROPRIETARY_TLV_BASE_ID + 4)
115 #define TLV_TYPE_PASSTHROUGH        (PROPRIETARY_TLV_BASE_ID + 10)
116 #define TLV_TYPE_WMMQSTATUS         (PROPRIETARY_TLV_BASE_ID + 16)
117 #define TLV_TYPE_WILDCARDSSID       (PROPRIETARY_TLV_BASE_ID + 18)
118 #define TLV_TYPE_TSFTIMESTAMP       (PROPRIETARY_TLV_BASE_ID + 19)
119 #define TLV_TYPE_RSSI_HIGH          (PROPRIETARY_TLV_BASE_ID + 22)
120 #define TLV_TYPE_AUTH_TYPE          (PROPRIETARY_TLV_BASE_ID + 31)
121 #define TLV_TYPE_STA_MAC_ADDR       (PROPRIETARY_TLV_BASE_ID + 32)
122 #define TLV_TYPE_CHANNELBANDLIST    (PROPRIETARY_TLV_BASE_ID + 42)
123 #define TLV_TYPE_UAP_BEACON_PERIOD  (PROPRIETARY_TLV_BASE_ID + 44)
124 #define TLV_TYPE_UAP_DTIM_PERIOD    (PROPRIETARY_TLV_BASE_ID + 45)
125 #define TLV_TYPE_UAP_BCAST_SSID     (PROPRIETARY_TLV_BASE_ID + 48)
126 #define TLV_TYPE_UAP_RTS_THRESHOLD  (PROPRIETARY_TLV_BASE_ID + 51)
127 #define TLV_TYPE_UAP_WEP_KEY        (PROPRIETARY_TLV_BASE_ID + 59)
128 #define TLV_TYPE_UAP_WPA_PASSPHRASE (PROPRIETARY_TLV_BASE_ID + 60)
129 #define TLV_TYPE_UAP_ENCRY_PROTOCOL (PROPRIETARY_TLV_BASE_ID + 64)
130 #define TLV_TYPE_UAP_AKMP           (PROPRIETARY_TLV_BASE_ID + 65)
131 #define TLV_TYPE_UAP_FRAG_THRESHOLD (PROPRIETARY_TLV_BASE_ID + 70)
132 #define TLV_TYPE_RATE_DROP_CONTROL  (PROPRIETARY_TLV_BASE_ID + 82)
133 #define TLV_TYPE_RATE_SCOPE         (PROPRIETARY_TLV_BASE_ID + 83)
134 #define TLV_TYPE_POWER_GROUP        (PROPRIETARY_TLV_BASE_ID + 84)
135 #define TLV_TYPE_UAP_RETRY_LIMIT    (PROPRIETARY_TLV_BASE_ID + 93)
136 #define TLV_TYPE_WAPI_IE            (PROPRIETARY_TLV_BASE_ID + 94)
137 #define TLV_TYPE_UAP_MGMT_FRAME     (PROPRIETARY_TLV_BASE_ID + 104)
138 #define TLV_TYPE_MGMT_IE            (PROPRIETARY_TLV_BASE_ID + 105)
139 #define TLV_TYPE_AUTO_DS_PARAM      (PROPRIETARY_TLV_BASE_ID + 113)
140 #define TLV_TYPE_PS_PARAM           (PROPRIETARY_TLV_BASE_ID + 114)
141 #define TLV_TYPE_PWK_CIPHER         (PROPRIETARY_TLV_BASE_ID + 145)
142 #define TLV_TYPE_GWK_CIPHER         (PROPRIETARY_TLV_BASE_ID + 146)
143
144 #define MWIFIEX_TX_DATA_BUF_SIZE_2K        2048
145
146 #define SSN_MASK         0xfff0
147
148 #define BA_RESULT_SUCCESS        0x0
149 #define BA_RESULT_TIMEOUT        0x2
150
151 #define IS_BASTREAM_SETUP(ptr)  (ptr->ba_status)
152
153 #define BA_STREAM_NOT_ALLOWED   0xff
154
155 #define IS_11N_ENABLED(priv) ((priv->adapter->config_bands & BAND_GN || \
156                         priv->adapter->config_bands & BAND_AN) && \
157                         priv->curr_bss_params.bss_descriptor.bcn_ht_cap)
158 #define INITIATOR_BIT(DelBAParamSet) (((DelBAParamSet) &\
159                         BIT(DELBA_INITIATOR_POS)) >> DELBA_INITIATOR_POS)
160
161 #define MWIFIEX_TX_DATA_BUF_SIZE_4K        4096
162 #define MWIFIEX_TX_DATA_BUF_SIZE_8K        8192
163
164 #define ISSUPP_11NENABLED(FwCapInfo) (FwCapInfo & BIT(11))
165
166 #define MWIFIEX_DEF_HT_CAP      (IEEE80211_HT_CAP_DSSSCCK40 | \
167                                  (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT) | \
168                                  IEEE80211_HT_CAP_SM_PS)
169
170 #define MWIFIEX_DEF_AMPDU       IEEE80211_HT_AMPDU_PARM_FACTOR
171
172 /* dev_cap bitmap
173  * BIT
174  * 0-16         reserved
175  * 17           IEEE80211_HT_CAP_SUP_WIDTH_20_40
176  * 18-22        reserved
177  * 23           IEEE80211_HT_CAP_SGI_20
178  * 24           IEEE80211_HT_CAP_SGI_40
179  * 25           IEEE80211_HT_CAP_TX_STBC
180  * 26           IEEE80211_HT_CAP_RX_STBC
181  * 27-28        reserved
182  * 29           IEEE80211_HT_CAP_GRN_FLD
183  * 30-31        reserved
184  */
185 #define ISSUPP_CHANWIDTH40(Dot11nDevCap) (Dot11nDevCap & BIT(17))
186 #define ISSUPP_SHORTGI20(Dot11nDevCap) (Dot11nDevCap & BIT(23))
187 #define ISSUPP_SHORTGI40(Dot11nDevCap) (Dot11nDevCap & BIT(24))
188 #define ISSUPP_TXSTBC(Dot11nDevCap) (Dot11nDevCap & BIT(25))
189 #define ISSUPP_RXSTBC(Dot11nDevCap) (Dot11nDevCap & BIT(26))
190 #define ISSUPP_GREENFIELD(Dot11nDevCap) (Dot11nDevCap & BIT(29))
191
192 /* httxcfg bitmap
193  * 0            reserved
194  * 1            20/40 Mhz enable(1)/disable(0)
195  * 2-3          reserved
196  * 4            green field enable(1)/disable(0)
197  * 5            short GI in 20 Mhz enable(1)/disable(0)
198  * 6            short GI in 40 Mhz enable(1)/disable(0)
199  * 7-15         reserved
200  */
201 #define MWIFIEX_FW_DEF_HTTXCFG (BIT(1) | BIT(4) | BIT(5) | BIT(6))
202
203 #define GET_RXMCSSUPP(DevMCSSupported) (DevMCSSupported & 0x0f)
204 #define SETHT_MCS32(x) (x[4] |= 1)
205 #define HT_STREAM_2X2   0x22
206
207 #define SET_SECONDARYCHAN(RadioType, SECCHAN) (RadioType |= (SECCHAN << 4))
208
209 #define LLC_SNAP_LEN    8
210
211 #define MOD_CLASS_HR_DSSS       0x03
212 #define MOD_CLASS_OFDM          0x07
213 #define MOD_CLASS_HT            0x08
214 #define HT_BW_20    0
215 #define HT_BW_40    1
216
217 #define HostCmd_CMD_GET_HW_SPEC                       0x0003
218 #define HostCmd_CMD_802_11_SCAN                       0x0006
219 #define HostCmd_CMD_802_11_GET_LOG                    0x000b
220 #define HostCmd_CMD_MAC_MULTICAST_ADR                 0x0010
221 #define HostCmd_CMD_802_11_EEPROM_ACCESS              0x0059
222 #define HostCmd_CMD_802_11_ASSOCIATE                  0x0012
223 #define HostCmd_CMD_802_11_SNMP_MIB                   0x0016
224 #define HostCmd_CMD_MAC_REG_ACCESS                    0x0019
225 #define HostCmd_CMD_BBP_REG_ACCESS                    0x001a
226 #define HostCmd_CMD_RF_REG_ACCESS                     0x001b
227 #define HostCmd_CMD_PMIC_REG_ACCESS                   0x00ad
228 #define HostCmd_CMD_802_11_RF_CHANNEL                 0x001d
229 #define HostCmd_CMD_802_11_DEAUTHENTICATE             0x0024
230 #define HostCmd_CMD_MAC_CONTROL                       0x0028
231 #define HostCmd_CMD_802_11_AD_HOC_START               0x002b
232 #define HostCmd_CMD_802_11_AD_HOC_JOIN                0x002c
233 #define HostCmd_CMD_802_11_AD_HOC_STOP                0x0040
234 #define HostCmd_CMD_802_11_MAC_ADDRESS                0x004D
235 #define HostCmd_CMD_802_11D_DOMAIN_INFO               0x005b
236 #define HostCmd_CMD_802_11_KEY_MATERIAL               0x005e
237 #define HostCmd_CMD_802_11_BG_SCAN_QUERY              0x006c
238 #define HostCmd_CMD_WMM_GET_STATUS                    0x0071
239 #define HostCmd_CMD_802_11_SUBSCRIBE_EVENT            0x0075
240 #define HostCmd_CMD_802_11_TX_RATE_QUERY              0x007f
241 #define HostCmd_CMD_802_11_IBSS_COALESCING_STATUS     0x0083
242 #define HostCmd_CMD_VERSION_EXT                       0x0097
243 #define HostCmd_CMD_RSSI_INFO                         0x00a4
244 #define HostCmd_CMD_FUNC_INIT                         0x00a9
245 #define HostCmd_CMD_FUNC_SHUTDOWN                     0x00aa
246 #define HostCmd_CMD_UAP_SYS_CONFIG                    0x00b0
247 #define HostCmd_CMD_UAP_BSS_START                     0x00b1
248 #define HostCmd_CMD_UAP_BSS_STOP                      0x00b2
249 #define HostCmd_CMD_11N_CFG                           0x00cd
250 #define HostCmd_CMD_11N_ADDBA_REQ                     0x00ce
251 #define HostCmd_CMD_11N_ADDBA_RSP                     0x00cf
252 #define HostCmd_CMD_11N_DELBA                         0x00d0
253 #define HostCmd_CMD_RECONFIGURE_TX_BUFF               0x00d9
254 #define HostCmd_CMD_AMSDU_AGGR_CTRL                   0x00df
255 #define HostCmd_CMD_TXPWR_CFG                         0x00d1
256 #define HostCmd_CMD_TX_RATE_CFG                       0x00d6
257 #define HostCmd_CMD_802_11_PS_MODE_ENH                0x00e4
258 #define HostCmd_CMD_802_11_HS_CFG_ENH                 0x00e5
259 #define HostCmd_CMD_CAU_REG_ACCESS                    0x00ed
260 #define HostCmd_CMD_SET_BSS_MODE                      0x00f7
261 #define HostCmd_CMD_PCIE_DESC_DETAILS                 0x00fa
262
263 #define PROTOCOL_NO_SECURITY        0x01
264 #define PROTOCOL_STATIC_WEP         0x02
265 #define PROTOCOL_WPA                0x08
266 #define PROTOCOL_WPA2               0x20
267 #define PROTOCOL_WPA2_MIXED         0x28
268 #define PROTOCOL_EAP                0x40
269 #define KEY_MGMT_NONE               0x04
270 #define KEY_MGMT_PSK                0x02
271 #define KEY_MGMT_EAP                0x01
272 #define CIPHER_TKIP                 0x04
273 #define CIPHER_AES_CCMP             0x08
274 #define VALID_CIPHER_BITMAP         0x0c
275
276 enum ENH_PS_MODES {
277         EN_PS = 1,
278         DIS_PS = 2,
279         EN_AUTO_DS = 3,
280         DIS_AUTO_DS = 4,
281         SLEEP_CONFIRM = 5,
282         GET_PS = 0,
283         EN_AUTO_PS = 0xff,
284         DIS_AUTO_PS = 0xfe,
285 };
286
287 #define HostCmd_RET_BIT                       0x8000
288 #define HostCmd_ACT_GEN_GET                   0x0000
289 #define HostCmd_ACT_GEN_SET                   0x0001
290 #define HostCmd_ACT_BITWISE_SET               0x0002
291 #define HostCmd_ACT_BITWISE_CLR               0x0003
292 #define HostCmd_RESULT_OK                     0x0000
293
294 #define HostCmd_ACT_MAC_RX_ON                 0x0001
295 #define HostCmd_ACT_MAC_TX_ON                 0x0002
296 #define HostCmd_ACT_MAC_WEP_ENABLE            0x0008
297 #define HostCmd_ACT_MAC_ETHERNETII_ENABLE     0x0010
298 #define HostCmd_ACT_MAC_PROMISCUOUS_ENABLE    0x0080
299 #define HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE  0x0100
300 #define HostCmd_ACT_MAC_ADHOC_G_PROTECTION_ON     0x2000
301
302 #define HostCmd_BSS_MODE_IBSS               0x0002
303 #define HostCmd_BSS_MODE_ANY                0x0003
304
305 #define HostCmd_SCAN_RADIO_TYPE_BG          0
306 #define HostCmd_SCAN_RADIO_TYPE_A           1
307
308 #define HOST_SLEEP_CFG_CANCEL           0xffffffff
309 #define HOST_SLEEP_CFG_COND_DEF         0x0000000f
310 #define HOST_SLEEP_CFG_GPIO_DEF         0xff
311 #define HOST_SLEEP_CFG_GAP_DEF          0
312
313 #define CMD_F_HOSTCMD           (1 << 0)
314 #define CMD_F_CANCELED          (1 << 1)
315
316 #define HostCmd_CMD_ID_MASK             0x0fff
317
318 #define HostCmd_SEQ_NUM_MASK            0x00ff
319
320 #define HostCmd_BSS_NUM_MASK            0x0f00
321
322 #define HostCmd_BSS_TYPE_MASK           0xf000
323
324 #define HostCmd_SET_SEQ_NO_BSS_INFO(seq, num, type) {   \
325         (((seq) & 0x00ff) |                             \
326          (((num) & 0x000f) << 8)) |                     \
327         (((type) & 0x000f) << 12);                  }
328
329 #define HostCmd_GET_SEQ_NO(seq)       \
330         ((seq) & HostCmd_SEQ_NUM_MASK)
331
332 #define HostCmd_GET_BSS_NO(seq)         \
333         (((seq) & HostCmd_BSS_NUM_MASK) >> 8)
334
335 #define HostCmd_GET_BSS_TYPE(seq)       \
336         (((seq) & HostCmd_BSS_TYPE_MASK) >> 12)
337
338 #define EVENT_DUMMY_HOST_WAKEUP_SIGNAL  0x00000001
339 #define EVENT_LINK_LOST                 0x00000003
340 #define EVENT_LINK_SENSED               0x00000004
341 #define EVENT_MIB_CHANGED               0x00000006
342 #define EVENT_INIT_DONE                 0x00000007
343 #define EVENT_DEAUTHENTICATED           0x00000008
344 #define EVENT_DISASSOCIATED             0x00000009
345 #define EVENT_PS_AWAKE                  0x0000000a
346 #define EVENT_PS_SLEEP                  0x0000000b
347 #define EVENT_MIC_ERR_MULTICAST         0x0000000d
348 #define EVENT_MIC_ERR_UNICAST           0x0000000e
349 #define EVENT_DEEP_SLEEP_AWAKE          0x00000010
350 #define EVENT_ADHOC_BCN_LOST            0x00000011
351
352 #define EVENT_WMM_STATUS_CHANGE         0x00000017
353 #define EVENT_BG_SCAN_REPORT            0x00000018
354 #define EVENT_RSSI_LOW                  0x00000019
355 #define EVENT_SNR_LOW                   0x0000001a
356 #define EVENT_MAX_FAIL                  0x0000001b
357 #define EVENT_RSSI_HIGH                 0x0000001c
358 #define EVENT_SNR_HIGH                  0x0000001d
359 #define EVENT_IBSS_COALESCED            0x0000001e
360 #define EVENT_DATA_RSSI_LOW             0x00000024
361 #define EVENT_DATA_SNR_LOW              0x00000025
362 #define EVENT_DATA_RSSI_HIGH            0x00000026
363 #define EVENT_DATA_SNR_HIGH             0x00000027
364 #define EVENT_LINK_QUALITY              0x00000028
365 #define EVENT_PORT_RELEASE              0x0000002b
366 #define EVENT_UAP_STA_DEAUTH            0x0000002c
367 #define EVENT_UAP_STA_ASSOC             0x0000002d
368 #define EVENT_UAP_BSS_START             0x0000002e
369 #define EVENT_PRE_BEACON_LOST           0x00000031
370 #define EVENT_ADDBA                     0x00000033
371 #define EVENT_DELBA                     0x00000034
372 #define EVENT_BA_STREAM_TIEMOUT         0x00000037
373 #define EVENT_AMSDU_AGGR_CTRL           0x00000042
374 #define EVENT_UAP_BSS_IDLE              0x00000043
375 #define EVENT_UAP_BSS_ACTIVE            0x00000044
376 #define EVENT_WEP_ICV_ERR               0x00000046
377 #define EVENT_HS_ACT_REQ                0x00000047
378 #define EVENT_BW_CHANGE                 0x00000048
379 #define EVENT_UAP_MIC_COUNTERMEASURES   0x0000004c
380 #define EVENT_HOSTWAKE_STAIE            0x0000004d
381
382 #define EVENT_ID_MASK                   0xffff
383 #define BSS_NUM_MASK                    0xf
384
385 #define EVENT_GET_BSS_NUM(event_cause)          \
386         (((event_cause) >> 16) & BSS_NUM_MASK)
387
388 #define EVENT_GET_BSS_TYPE(event_cause)         \
389         (((event_cause) >> 24) & 0x00ff)
390
391 struct mwifiex_ie_types_header {
392         __le16 type;
393         __le16 len;
394 } __packed;
395
396 struct mwifiex_ie_types_data {
397         struct mwifiex_ie_types_header header;
398         u8 data[1];
399 } __packed;
400
401 #define MWIFIEX_TxPD_POWER_MGMT_NULL_PACKET 0x01
402 #define MWIFIEX_TxPD_POWER_MGMT_LAST_PACKET 0x08
403
404 struct txpd {
405         u8 bss_type;
406         u8 bss_num;
407         __le16 tx_pkt_length;
408         __le16 tx_pkt_offset;
409         __le16 tx_pkt_type;
410         __le32 tx_control;
411         u8 priority;
412         u8 flags;
413         u8 pkt_delay_2ms;
414         u8 reserved1;
415 } __packed;
416
417 struct rxpd {
418         u8 bss_type;
419         u8 bss_num;
420         u16 rx_pkt_length;
421         u16 rx_pkt_offset;
422         u16 rx_pkt_type;
423         u16 seq_num;
424         u8 priority;
425         u8 rx_rate;
426         s8 snr;
427         s8 nf;
428         /* Ht Info [Bit 0] RxRate format: LG=0, HT=1
429          * [Bit 1]  HT Bandwidth: BW20 = 0, BW40 = 1
430          * [Bit 2]  HT Guard Interval: LGI = 0, SGI = 1 */
431         u8 ht_info;
432         u8 reserved;
433 } __packed;
434
435 enum mwifiex_chan_scan_mode_bitmasks {
436         MWIFIEX_PASSIVE_SCAN = BIT(0),
437         MWIFIEX_DISABLE_CHAN_FILT = BIT(1),
438 };
439
440 struct mwifiex_chan_scan_param_set {
441         u8 radio_type;
442         u8 chan_number;
443         u8 chan_scan_mode_bitmap;
444         __le16 min_scan_time;
445         __le16 max_scan_time;
446 } __packed;
447
448 struct mwifiex_ie_types_chan_list_param_set {
449         struct mwifiex_ie_types_header header;
450         struct mwifiex_chan_scan_param_set chan_scan_param[1];
451 } __packed;
452
453 struct chan_band_param_set {
454         u8 radio_type;
455         u8 chan_number;
456 };
457
458 struct mwifiex_ie_types_chan_band_list_param_set {
459         struct mwifiex_ie_types_header header;
460         struct chan_band_param_set chan_band_param[1];
461 } __packed;
462
463 struct mwifiex_ie_types_rates_param_set {
464         struct mwifiex_ie_types_header header;
465         u8 rates[1];
466 } __packed;
467
468 struct mwifiex_ie_types_ssid_param_set {
469         struct mwifiex_ie_types_header header;
470         u8 ssid[1];
471 } __packed;
472
473 struct mwifiex_ie_types_num_probes {
474         struct mwifiex_ie_types_header header;
475         __le16 num_probes;
476 } __packed;
477
478 struct mwifiex_ie_types_wildcard_ssid_params {
479         struct mwifiex_ie_types_header header;
480         u8 max_ssid_length;
481         u8 ssid[1];
482 } __packed;
483
484 #define TSF_DATA_SIZE            8
485 struct mwifiex_ie_types_tsf_timestamp {
486         struct mwifiex_ie_types_header header;
487         u8 tsf_data[1];
488 } __packed;
489
490 struct mwifiex_cf_param_set {
491         u8 cfp_cnt;
492         u8 cfp_period;
493         u16 cfp_max_duration;
494         u16 cfp_duration_remaining;
495 } __packed;
496
497 struct mwifiex_ibss_param_set {
498         u16 atim_window;
499 } __packed;
500
501 struct mwifiex_ie_types_ss_param_set {
502         struct mwifiex_ie_types_header header;
503         union {
504                 struct mwifiex_cf_param_set cf_param_set[1];
505                 struct mwifiex_ibss_param_set ibss_param_set[1];
506         } cf_ibss;
507 } __packed;
508
509 struct mwifiex_fh_param_set {
510         u16 dwell_time;
511         u8 hop_set;
512         u8 hop_pattern;
513         u8 hop_index;
514 } __packed;
515
516 struct mwifiex_ds_param_set {
517         u8 current_chan;
518 } __packed;
519
520 struct mwifiex_ie_types_phy_param_set {
521         struct mwifiex_ie_types_header header;
522         union {
523                 struct mwifiex_fh_param_set fh_param_set[1];
524                 struct mwifiex_ds_param_set ds_param_set[1];
525         } fh_ds;
526 } __packed;
527
528 struct mwifiex_ie_types_auth_type {
529         struct mwifiex_ie_types_header header;
530         __le16 auth_type;
531 } __packed;
532
533 struct mwifiex_ie_types_vendor_param_set {
534         struct mwifiex_ie_types_header header;
535         u8 ie[MWIFIEX_MAX_VSIE_LEN];
536 };
537
538 struct mwifiex_ie_types_rsn_param_set {
539         struct mwifiex_ie_types_header header;
540         u8 rsn_ie[1];
541 } __packed;
542
543 #define KEYPARAMSET_FIXED_LEN 6
544
545 struct mwifiex_ie_type_key_param_set {
546         __le16 type;
547         __le16 length;
548         __le16 key_type_id;
549         __le16 key_info;
550         __le16 key_len;
551         u8 key[50];
552 } __packed;
553
554 struct host_cmd_ds_802_11_key_material {
555         __le16 action;
556         struct mwifiex_ie_type_key_param_set key_param_set;
557 } __packed;
558
559 struct host_cmd_ds_gen {
560         u16 command;
561         u16 size;
562         u16 seq_num;
563         u16 result;
564 };
565
566 #define S_DS_GEN        sizeof(struct host_cmd_ds_gen)
567
568 enum sleep_resp_ctrl {
569         RESP_NOT_NEEDED = 0,
570         RESP_NEEDED,
571 };
572
573 struct mwifiex_ps_param {
574         __le16 null_pkt_interval;
575         __le16 multiple_dtims;
576         __le16 bcn_miss_timeout;
577         __le16 local_listen_interval;
578         __le16 adhoc_wake_period;
579         __le16 mode;
580         __le16 delay_to_ps;
581 };
582
583 #define BITMAP_AUTO_DS         0x01
584 #define BITMAP_STA_PS          0x10
585
586 struct mwifiex_ie_types_auto_ds_param {
587         struct mwifiex_ie_types_header header;
588         __le16 deep_sleep_timeout;
589 } __packed;
590
591 struct mwifiex_ie_types_ps_param {
592         struct mwifiex_ie_types_header header;
593         struct mwifiex_ps_param param;
594 } __packed;
595
596 struct host_cmd_ds_802_11_ps_mode_enh {
597         __le16 action;
598
599         union {
600                 struct mwifiex_ps_param opt_ps;
601                 __le16 ps_bitmap;
602         } params;
603 } __packed;
604
605 struct host_cmd_ds_get_hw_spec {
606         __le16 hw_if_version;
607         __le16 version;
608         __le16 reserved;
609         __le16 num_of_mcast_adr;
610         u8 permanent_addr[ETH_ALEN];
611         __le16 region_code;
612         __le16 number_of_antenna;
613         __le32 fw_release_number;
614         __le32 reserved_1;
615         __le32 reserved_2;
616         __le32 reserved_3;
617         __le32 fw_cap_info;
618         __le32 dot_11n_dev_cap;
619         u8 dev_mcs_support;
620         __le16 mp_end_port;     /* SDIO only, reserved for other interfacces */
621         __le16 reserved_4;
622 } __packed;
623
624 struct host_cmd_ds_802_11_rssi_info {
625         __le16 action;
626         __le16 ndata;
627         __le16 nbcn;
628         __le16 reserved[9];
629         long long reserved_1;
630 };
631
632 struct host_cmd_ds_802_11_rssi_info_rsp {
633         __le16 action;
634         __le16 ndata;
635         __le16 nbcn;
636         __le16 data_rssi_last;
637         __le16 data_nf_last;
638         __le16 data_rssi_avg;
639         __le16 data_nf_avg;
640         __le16 bcn_rssi_last;
641         __le16 bcn_nf_last;
642         __le16 bcn_rssi_avg;
643         __le16 bcn_nf_avg;
644         long long tsf_bcn;
645 };
646
647 struct host_cmd_ds_802_11_mac_address {
648         __le16 action;
649         u8 mac_addr[ETH_ALEN];
650 };
651
652 struct host_cmd_ds_mac_control {
653         __le16 action;
654         __le16 reserved;
655 };
656
657 struct host_cmd_ds_mac_multicast_adr {
658         __le16 action;
659         __le16 num_of_adrs;
660         u8 mac_list[MWIFIEX_MAX_MULTICAST_LIST_SIZE][ETH_ALEN];
661 } __packed;
662
663 struct host_cmd_ds_802_11_deauthenticate {
664         u8 mac_addr[ETH_ALEN];
665         __le16 reason_code;
666 } __packed;
667
668 struct host_cmd_ds_802_11_associate {
669         u8 peer_sta_addr[ETH_ALEN];
670         __le16 cap_info_bitmap;
671         __le16 listen_interval;
672         __le16 beacon_period;
673         u8 dtim_period;
674 } __packed;
675
676 struct ieee_types_assoc_rsp {
677         __le16 cap_info_bitmap;
678         __le16 status_code;
679         __le16 a_id;
680         u8 ie_buffer[1];
681 } __packed;
682
683 struct host_cmd_ds_802_11_associate_rsp {
684         struct ieee_types_assoc_rsp assoc_rsp;
685 } __packed;
686
687 struct ieee_types_cf_param_set {
688         u8 element_id;
689         u8 len;
690         u8 cfp_cnt;
691         u8 cfp_period;
692         u16 cfp_max_duration;
693         u16 cfp_duration_remaining;
694 } __packed;
695
696 struct ieee_types_ibss_param_set {
697         u8 element_id;
698         u8 len;
699         __le16 atim_window;
700 } __packed;
701
702 union ieee_types_ss_param_set {
703         struct ieee_types_cf_param_set cf_param_set;
704         struct ieee_types_ibss_param_set ibss_param_set;
705 } __packed;
706
707 struct ieee_types_fh_param_set {
708         u8 element_id;
709         u8 len;
710         __le16 dwell_time;
711         u8 hop_set;
712         u8 hop_pattern;
713         u8 hop_index;
714 } __packed;
715
716 struct ieee_types_ds_param_set {
717         u8 element_id;
718         u8 len;
719         u8 current_chan;
720 } __packed;
721
722 union ieee_types_phy_param_set {
723         struct ieee_types_fh_param_set fh_param_set;
724         struct ieee_types_ds_param_set ds_param_set;
725 } __packed;
726
727 struct host_cmd_ds_802_11_ad_hoc_start {
728         u8 ssid[IEEE80211_MAX_SSID_LEN];
729         u8 bss_mode;
730         __le16 beacon_period;
731         u8 dtim_period;
732         union ieee_types_ss_param_set ss_param_set;
733         union ieee_types_phy_param_set phy_param_set;
734         u16 reserved1;
735         __le16 cap_info_bitmap;
736         u8 data_rate[HOSTCMD_SUPPORTED_RATES];
737 } __packed;
738
739 struct host_cmd_ds_802_11_ad_hoc_result {
740         u8 pad[3];
741         u8 bssid[ETH_ALEN];
742 } __packed;
743
744 struct adhoc_bss_desc {
745         u8 bssid[ETH_ALEN];
746         u8 ssid[IEEE80211_MAX_SSID_LEN];
747         u8 bss_mode;
748         __le16 beacon_period;
749         u8 dtim_period;
750         u8 time_stamp[8];
751         u8 local_time[8];
752         union ieee_types_phy_param_set phy_param_set;
753         union ieee_types_ss_param_set ss_param_set;
754         __le16 cap_info_bitmap;
755         u8 data_rates[HOSTCMD_SUPPORTED_RATES];
756
757         /*
758          *  DO NOT ADD ANY FIELDS TO THIS STRUCTURE.
759          *  It is used in the Adhoc join command and will cause a
760          *  binary layout mismatch with the firmware
761          */
762 } __packed;
763
764 struct host_cmd_ds_802_11_ad_hoc_join {
765         struct adhoc_bss_desc bss_descriptor;
766         u16 reserved1;
767         u16 reserved2;
768 } __packed;
769
770 struct host_cmd_ds_802_11_get_log {
771         __le32 mcast_tx_frame;
772         __le32 failed;
773         __le32 retry;
774         __le32 multi_retry;
775         __le32 frame_dup;
776         __le32 rts_success;
777         __le32 rts_failure;
778         __le32 ack_failure;
779         __le32 rx_frag;
780         __le32 mcast_rx_frame;
781         __le32 fcs_error;
782         __le32 tx_frame;
783         __le32 reserved;
784         __le32 wep_icv_err_cnt[4];
785 };
786
787 struct host_cmd_ds_tx_rate_query {
788         u8 tx_rate;
789         /* Ht Info [Bit 0] RxRate format: LG=0, HT=1
790          * [Bit 1]  HT Bandwidth: BW20 = 0, BW40 = 1
791          * [Bit 2]  HT Guard Interval: LGI = 0, SGI = 1 */
792         u8 ht_info;
793 } __packed;
794
795 enum Host_Sleep_Action {
796         HS_CONFIGURE = 0x0001,
797         HS_ACTIVATE  = 0x0002,
798 };
799
800 struct mwifiex_hs_config_param {
801         __le32 conditions;
802         u8 gpio;
803         u8 gap;
804 } __packed;
805
806 struct hs_activate_param {
807         u16 resp_ctrl;
808 } __packed;
809
810 struct host_cmd_ds_802_11_hs_cfg_enh {
811         __le16 action;
812
813         union {
814                 struct mwifiex_hs_config_param hs_config;
815                 struct hs_activate_param hs_activate;
816         } params;
817 } __packed;
818
819 enum SNMP_MIB_INDEX {
820         OP_RATE_SET_I = 1,
821         DTIM_PERIOD_I = 3,
822         RTS_THRESH_I = 5,
823         SHORT_RETRY_LIM_I = 6,
824         LONG_RETRY_LIM_I = 7,
825         FRAG_THRESH_I = 8,
826         DOT11D_I = 9,
827 };
828
829 #define MAX_SNMP_BUF_SIZE   128
830
831 struct host_cmd_ds_802_11_snmp_mib {
832         __le16 query_type;
833         __le16 oid;
834         __le16 buf_size;
835         u8 value[1];
836 } __packed;
837
838 struct mwifiex_rate_scope {
839         __le16 type;
840         __le16 length;
841         __le16 hr_dsss_rate_bitmap;
842         __le16 ofdm_rate_bitmap;
843         __le16 ht_mcs_rate_bitmap[8];
844 } __packed;
845
846 struct mwifiex_rate_drop_pattern {
847         __le16 type;
848         __le16 length;
849         __le32 rate_drop_mode;
850 } __packed;
851
852 struct host_cmd_ds_tx_rate_cfg {
853         __le16 action;
854         __le16 cfg_index;
855 } __packed;
856
857 struct mwifiex_power_group {
858         u8 modulation_class;
859         u8 first_rate_code;
860         u8 last_rate_code;
861         s8 power_step;
862         s8 power_min;
863         s8 power_max;
864         u8 ht_bandwidth;
865         u8 reserved;
866 } __packed;
867
868 struct mwifiex_types_power_group {
869         u16 type;
870         u16 length;
871 } __packed;
872
873 struct host_cmd_ds_txpwr_cfg {
874         __le16 action;
875         __le16 cfg_index;
876         __le32 mode;
877 } __packed;
878
879 struct mwifiex_bcn_param {
880         u8 bssid[ETH_ALEN];
881         u8 rssi;
882         __le64 timestamp;
883         __le16 beacon_period;
884         __le16 cap_info_bitmap;
885 } __packed;
886
887 #define MWIFIEX_USER_SCAN_CHAN_MAX             50
888
889 #define MWIFIEX_MAX_SSID_LIST_LENGTH         10
890
891 struct mwifiex_scan_cmd_config {
892         /*
893          *  BSS mode to be sent in the firmware command
894          */
895         u8 bss_mode;
896
897         /* Specific BSSID used to filter scan results in the firmware */
898         u8 specific_bssid[ETH_ALEN];
899
900         /* Length of TLVs sent in command starting at tlvBuffer */
901         u32 tlv_buf_len;
902
903         /*
904          *  SSID TLV(s) and ChanList TLVs to be sent in the firmware command
905          *
906          *  TLV_TYPE_CHANLIST, mwifiex_ie_types_chan_list_param_set
907          *  WLAN_EID_SSID, mwifiex_ie_types_ssid_param_set
908          */
909         u8 tlv_buf[1];  /* SSID TLV(s) and ChanList TLVs are stored
910                                    here */
911 } __packed;
912
913 struct mwifiex_user_scan_chan {
914         u8 chan_number;
915         u8 radio_type;
916         u8 scan_type;
917         u8 reserved;
918         u32 scan_time;
919 } __packed;
920
921 struct mwifiex_user_scan_cfg {
922         /*
923          *  BSS mode to be sent in the firmware command
924          */
925         u8 bss_mode;
926         /* Configure the number of probe requests for active chan scans */
927         u8 num_probes;
928         u8 reserved;
929         /* BSSID filter sent in the firmware command to limit the results */
930         u8 specific_bssid[ETH_ALEN];
931         /* SSID filter list used in the firmware to limit the scan results */
932         struct cfg80211_ssid *ssid_list;
933         u8 num_ssids;
934         /* Variable number (fixed maximum) of channels to scan up */
935         struct mwifiex_user_scan_chan chan_list[MWIFIEX_USER_SCAN_CHAN_MAX];
936 } __packed;
937
938 struct ie_body {
939         u8 grp_key_oui[4];
940         u8 ptk_cnt[2];
941         u8 ptk_body[4];
942 } __packed;
943
944 struct host_cmd_ds_802_11_scan {
945         u8 bss_mode;
946         u8 bssid[ETH_ALEN];
947         u8 tlv_buffer[1];
948 } __packed;
949
950 struct host_cmd_ds_802_11_scan_rsp {
951         __le16 bss_descript_size;
952         u8 number_of_sets;
953         u8 bss_desc_and_tlv_buffer[1];
954 } __packed;
955
956 struct host_cmd_ds_802_11_bg_scan_query {
957         u8 flush;
958 } __packed;
959
960 struct host_cmd_ds_802_11_bg_scan_query_rsp {
961         u32 report_condition;
962         struct host_cmd_ds_802_11_scan_rsp scan_resp;
963 } __packed;
964
965 struct mwifiex_ietypes_domain_param_set {
966         struct mwifiex_ie_types_header header;
967         u8 country_code[IEEE80211_COUNTRY_STRING_LEN];
968         struct ieee80211_country_ie_triplet triplet[1];
969 } __packed;
970
971 struct host_cmd_ds_802_11d_domain_info {
972         __le16 action;
973         struct mwifiex_ietypes_domain_param_set domain;
974 } __packed;
975
976 struct host_cmd_ds_802_11d_domain_info_rsp {
977         __le16 action;
978         struct mwifiex_ietypes_domain_param_set domain;
979 } __packed;
980
981 struct host_cmd_ds_11n_addba_req {
982         u8 add_req_result;
983         u8 peer_mac_addr[ETH_ALEN];
984         u8 dialog_token;
985         __le16 block_ack_param_set;
986         __le16 block_ack_tmo;
987         __le16 ssn;
988 } __packed;
989
990 struct host_cmd_ds_11n_addba_rsp {
991         u8 add_rsp_result;
992         u8 peer_mac_addr[ETH_ALEN];
993         u8 dialog_token;
994         __le16 status_code;
995         __le16 block_ack_param_set;
996         __le16 block_ack_tmo;
997         __le16 ssn;
998 } __packed;
999
1000 struct host_cmd_ds_11n_delba {
1001         u8 del_result;
1002         u8 peer_mac_addr[ETH_ALEN];
1003         __le16 del_ba_param_set;
1004         __le16 reason_code;
1005         u8 reserved;
1006 } __packed;
1007
1008 struct host_cmd_ds_11n_batimeout {
1009         u8 tid;
1010         u8 peer_mac_addr[ETH_ALEN];
1011         u8 origninator;
1012 } __packed;
1013
1014 struct host_cmd_ds_11n_cfg {
1015         __le16 action;
1016         __le16 ht_tx_cap;
1017         __le16 ht_tx_info;
1018 } __packed;
1019
1020 struct host_cmd_ds_txbuf_cfg {
1021         __le16 action;
1022         __le16 buff_size;
1023         __le16 mp_end_port;     /* SDIO only, reserved for other interfacces */
1024         __le16 reserved3;
1025 } __packed;
1026
1027 struct host_cmd_ds_amsdu_aggr_ctrl {
1028         __le16 action;
1029         __le16 enable;
1030         __le16 curr_buf_size;
1031 } __packed;
1032
1033 struct mwifiex_ie_types_wmm_param_set {
1034         struct mwifiex_ie_types_header header;
1035         u8 wmm_ie[1];
1036 };
1037
1038 struct mwifiex_ie_types_wmm_queue_status {
1039         struct mwifiex_ie_types_header header;
1040         u8 queue_index;
1041         u8 disabled;
1042         u16 medium_time;
1043         u8 flow_required;
1044         u8 flow_created;
1045         u32 reserved;
1046 };
1047
1048 struct ieee_types_vendor_header {
1049         u8 element_id;
1050         u8 len;
1051         u8 oui[4];      /* 0~2: oui, 3: oui_type */
1052         u8 oui_subtype;
1053         u8 version;
1054 } __packed;
1055
1056 struct ieee_types_wmm_ac_parameters {
1057         u8 aci_aifsn_bitmap;
1058         u8 ecw_bitmap;
1059         __le16 tx_op_limit;
1060 } __packed;
1061
1062 struct ieee_types_wmm_parameter {
1063         /*
1064          * WMM Parameter IE - Vendor Specific Header:
1065          *   element_id  [221/0xdd]
1066          *   Len         [24]
1067          *   Oui         [00:50:f2]
1068          *   OuiType     [2]
1069          *   OuiSubType  [1]
1070          *   Version     [1]
1071          */
1072         struct ieee_types_vendor_header vend_hdr;
1073         u8 qos_info_bitmap;
1074         u8 reserved;
1075         struct ieee_types_wmm_ac_parameters ac_params[IEEE80211_NUM_ACS];
1076 } __packed;
1077
1078 struct ieee_types_wmm_info {
1079
1080         /*
1081          * WMM Info IE - Vendor Specific Header:
1082          *   element_id  [221/0xdd]
1083          *   Len         [7]
1084          *   Oui         [00:50:f2]
1085          *   OuiType     [2]
1086          *   OuiSubType  [0]
1087          *   Version     [1]
1088          */
1089         struct ieee_types_vendor_header vend_hdr;
1090
1091         u8 qos_info_bitmap;
1092 } __packed;
1093
1094 struct host_cmd_ds_wmm_get_status {
1095         u8 queue_status_tlv[sizeof(struct mwifiex_ie_types_wmm_queue_status) *
1096                               IEEE80211_NUM_ACS];
1097         u8 wmm_param_tlv[sizeof(struct ieee_types_wmm_parameter) + 2];
1098 } __packed;
1099
1100 struct mwifiex_wmm_ac_status {
1101         u8 disabled;
1102         u8 flow_required;
1103         u8 flow_created;
1104 };
1105
1106 struct mwifiex_ie_types_htcap {
1107         struct mwifiex_ie_types_header header;
1108         struct ieee80211_ht_cap ht_cap;
1109 } __packed;
1110
1111 struct mwifiex_ie_types_htinfo {
1112         struct mwifiex_ie_types_header header;
1113         struct ieee80211_ht_operation ht_oper;
1114 } __packed;
1115
1116 struct mwifiex_ie_types_2040bssco {
1117         struct mwifiex_ie_types_header header;
1118         u8 bss_co_2040;
1119 } __packed;
1120
1121 struct mwifiex_ie_types_extcap {
1122         struct mwifiex_ie_types_header header;
1123         u8 ext_cap;
1124 } __packed;
1125
1126 struct host_cmd_ds_mac_reg_access {
1127         __le16 action;
1128         __le16 offset;
1129         __le32 value;
1130 } __packed;
1131
1132 struct host_cmd_ds_bbp_reg_access {
1133         __le16 action;
1134         __le16 offset;
1135         u8 value;
1136         u8 reserved[3];
1137 } __packed;
1138
1139 struct host_cmd_ds_rf_reg_access {
1140         __le16 action;
1141         __le16 offset;
1142         u8 value;
1143         u8 reserved[3];
1144 } __packed;
1145
1146 struct host_cmd_ds_pmic_reg_access {
1147         __le16 action;
1148         __le16 offset;
1149         u8 value;
1150         u8 reserved[3];
1151 } __packed;
1152
1153 struct host_cmd_ds_802_11_eeprom_access {
1154         __le16 action;
1155
1156         __le16 offset;
1157         __le16 byte_count;
1158         u8 value;
1159 } __packed;
1160
1161 struct host_cmd_tlv {
1162         __le16 type;
1163         __le16 len;
1164 } __packed;
1165
1166 struct mwifiex_assoc_event {
1167         u8 sta_addr[ETH_ALEN];
1168         __le16 type;
1169         __le16 len;
1170         __le16 frame_control;
1171         __le16 cap_info;
1172         __le16 listen_interval;
1173         u8 data[0];
1174 } __packed;
1175
1176 struct host_cmd_ds_sys_config {
1177         __le16 action;
1178         u8 tlv[0];
1179 };
1180
1181 struct host_cmd_tlv_akmp {
1182         struct host_cmd_tlv tlv;
1183         __le16 key_mgmt;
1184         __le16 key_mgmt_operation;
1185 } __packed;
1186
1187 struct host_cmd_tlv_pwk_cipher {
1188         struct host_cmd_tlv tlv;
1189         __le16 proto;
1190         u8 cipher;
1191         u8 reserved;
1192 } __packed;
1193
1194 struct host_cmd_tlv_gwk_cipher {
1195         struct host_cmd_tlv tlv;
1196         u8 cipher;
1197         u8 reserved;
1198 } __packed;
1199
1200 struct host_cmd_tlv_passphrase {
1201         struct host_cmd_tlv tlv;
1202         u8 passphrase[0];
1203 } __packed;
1204
1205 struct host_cmd_tlv_wep_key {
1206         struct host_cmd_tlv tlv;
1207         u8 key_index;
1208         u8 is_default;
1209         u8 key[1];
1210 };
1211
1212 struct host_cmd_tlv_auth_type {
1213         struct host_cmd_tlv tlv;
1214         u8 auth_type;
1215 } __packed;
1216
1217 struct host_cmd_tlv_encrypt_protocol {
1218         struct host_cmd_tlv tlv;
1219         __le16 proto;
1220 } __packed;
1221
1222 struct host_cmd_tlv_ssid {
1223         struct host_cmd_tlv tlv;
1224         u8 ssid[0];
1225 } __packed;
1226
1227 struct host_cmd_tlv_bcast_ssid {
1228         struct host_cmd_tlv tlv;
1229         u8 bcast_ctl;
1230 } __packed;
1231
1232 struct host_cmd_tlv_beacon_period {
1233         struct host_cmd_tlv tlv;
1234         __le16 period;
1235 } __packed;
1236
1237 struct host_cmd_tlv_dtim_period {
1238         struct host_cmd_tlv tlv;
1239         u8 period;
1240 } __packed;
1241
1242 struct host_cmd_tlv_frag_threshold {
1243         struct host_cmd_tlv tlv;
1244         __le16 frag_thr;
1245 } __packed;
1246
1247 struct host_cmd_tlv_rts_threshold {
1248         struct host_cmd_tlv tlv;
1249         __le16 rts_thr;
1250 } __packed;
1251
1252 struct host_cmd_tlv_retry_limit {
1253         struct host_cmd_tlv tlv;
1254         u8 limit;
1255 } __packed;
1256
1257 struct host_cmd_tlv_mac_addr {
1258         struct host_cmd_tlv tlv;
1259         u8 mac_addr[ETH_ALEN];
1260 } __packed;
1261
1262 struct host_cmd_tlv_channel_band {
1263         struct host_cmd_tlv tlv;
1264         u8 band_config;
1265         u8 channel;
1266 } __packed;
1267
1268 struct host_cmd_ds_802_11_rf_channel {
1269         __le16 action;
1270         __le16 current_channel;
1271         __le16 rf_type;
1272         __le16 reserved;
1273         u8 reserved_1[32];
1274 } __packed;
1275
1276 struct host_cmd_ds_version_ext {
1277         u8 version_str_sel;
1278         char version_str[128];
1279 } __packed;
1280
1281 struct host_cmd_ds_802_11_ibss_status {
1282         __le16 action;
1283         __le16 enable;
1284         u8 bssid[ETH_ALEN];
1285         __le16 beacon_interval;
1286         __le16 atim_window;
1287         __le16 use_g_rate_protect;
1288 } __packed;
1289
1290 #define CONNECTION_TYPE_INFRA   0
1291 #define CONNECTION_TYPE_ADHOC   1
1292
1293 struct host_cmd_ds_set_bss_mode {
1294         u8 con_type;
1295 } __packed;
1296
1297 struct host_cmd_ds_pcie_details {
1298         /* TX buffer descriptor ring address */
1299         u32 txbd_addr_lo;
1300         u32 txbd_addr_hi;
1301         /* TX buffer descriptor ring count */
1302         u32 txbd_count;
1303
1304         /* RX buffer descriptor ring address */
1305         u32 rxbd_addr_lo;
1306         u32 rxbd_addr_hi;
1307         /* RX buffer descriptor ring count */
1308         u32 rxbd_count;
1309
1310         /* Event buffer descriptor ring address */
1311         u32 evtbd_addr_lo;
1312         u32 evtbd_addr_hi;
1313         /* Event buffer descriptor ring count */
1314         u32 evtbd_count;
1315
1316         /* Sleep cookie buffer physical address */
1317         u32 sleep_cookie_addr_lo;
1318         u32 sleep_cookie_addr_hi;
1319 } __packed;
1320
1321 struct mwifiex_ie_types_rssi_threshold {
1322         struct mwifiex_ie_types_header header;
1323         u8 abs_value;
1324         u8 evt_freq;
1325 } __packed;
1326
1327 struct host_cmd_ds_802_11_subsc_evt {
1328         __le16 action;
1329         __le16 events;
1330 } __packed;
1331
1332 struct mwifiex_ie {
1333         __le16 ie_index;
1334         __le16 mgmt_subtype_mask;
1335         __le16 ie_length;
1336         u8 ie_buffer[IEEE_MAX_IE_SIZE];
1337 } __packed;
1338
1339 #define MAX_MGMT_IE_INDEX       16
1340 struct mwifiex_ie_list {
1341         __le16 type;
1342         __le16 len;
1343         struct mwifiex_ie ie_list[MAX_MGMT_IE_INDEX];
1344 } __packed;
1345
1346 struct host_cmd_ds_command {
1347         __le16 command;
1348         __le16 size;
1349         __le16 seq_num;
1350         __le16 result;
1351         union {
1352                 struct host_cmd_ds_get_hw_spec hw_spec;
1353                 struct host_cmd_ds_mac_control mac_ctrl;
1354                 struct host_cmd_ds_802_11_mac_address mac_addr;
1355                 struct host_cmd_ds_mac_multicast_adr mc_addr;
1356                 struct host_cmd_ds_802_11_get_log get_log;
1357                 struct host_cmd_ds_802_11_rssi_info rssi_info;
1358                 struct host_cmd_ds_802_11_rssi_info_rsp rssi_info_rsp;
1359                 struct host_cmd_ds_802_11_snmp_mib smib;
1360                 struct host_cmd_ds_802_11_rf_channel rf_channel;
1361                 struct host_cmd_ds_tx_rate_query tx_rate;
1362                 struct host_cmd_ds_tx_rate_cfg tx_rate_cfg;
1363                 struct host_cmd_ds_txpwr_cfg txp_cfg;
1364                 struct host_cmd_ds_802_11_ps_mode_enh psmode_enh;
1365                 struct host_cmd_ds_802_11_hs_cfg_enh opt_hs_cfg;
1366                 struct host_cmd_ds_802_11_scan scan;
1367                 struct host_cmd_ds_802_11_scan_rsp scan_resp;
1368                 struct host_cmd_ds_802_11_bg_scan_query bg_scan_query;
1369                 struct host_cmd_ds_802_11_bg_scan_query_rsp bg_scan_query_resp;
1370                 struct host_cmd_ds_802_11_associate associate;
1371                 struct host_cmd_ds_802_11_associate_rsp associate_rsp;
1372                 struct host_cmd_ds_802_11_deauthenticate deauth;
1373                 struct host_cmd_ds_802_11_ad_hoc_start adhoc_start;
1374                 struct host_cmd_ds_802_11_ad_hoc_result adhoc_result;
1375                 struct host_cmd_ds_802_11_ad_hoc_join adhoc_join;
1376                 struct host_cmd_ds_802_11d_domain_info domain_info;
1377                 struct host_cmd_ds_802_11d_domain_info_rsp domain_info_resp;
1378                 struct host_cmd_ds_11n_addba_req add_ba_req;
1379                 struct host_cmd_ds_11n_addba_rsp add_ba_rsp;
1380                 struct host_cmd_ds_11n_delba del_ba;
1381                 struct host_cmd_ds_txbuf_cfg tx_buf;
1382                 struct host_cmd_ds_amsdu_aggr_ctrl amsdu_aggr_ctrl;
1383                 struct host_cmd_ds_11n_cfg htcfg;
1384                 struct host_cmd_ds_wmm_get_status get_wmm_status;
1385                 struct host_cmd_ds_802_11_key_material key_material;
1386                 struct host_cmd_ds_version_ext verext;
1387                 struct host_cmd_ds_802_11_ibss_status ibss_coalescing;
1388                 struct host_cmd_ds_mac_reg_access mac_reg;
1389                 struct host_cmd_ds_bbp_reg_access bbp_reg;
1390                 struct host_cmd_ds_rf_reg_access rf_reg;
1391                 struct host_cmd_ds_pmic_reg_access pmic_reg;
1392                 struct host_cmd_ds_set_bss_mode bss_mode;
1393                 struct host_cmd_ds_pcie_details pcie_host_spec;
1394                 struct host_cmd_ds_802_11_eeprom_access eeprom;
1395                 struct host_cmd_ds_802_11_subsc_evt subsc_evt;
1396                 struct host_cmd_ds_sys_config uap_sys_config;
1397         } params;
1398 } __packed;
1399
1400 struct mwifiex_opt_sleep_confirm {
1401         __le16 command;
1402         __le16 size;
1403         __le16 seq_num;
1404         __le16 result;
1405         __le16 action;
1406         __le16 resp_ctrl;
1407 } __packed;
1408 #endif /* !_MWIFIEX_FW_H_ */