xref: /openbmc/linux/drivers/net/wireless/ath/wil6210/wmi.h (revision c406ea7c7406f00aa1fb6c697d47d070fd222037)
1 /*
2  * Copyright (c) 2012-2014 Qualcomm Atheros, Inc.
3  * Copyright (c) 2006-2012 Wilocity .
4  *
5  * Permission to use, copy, modify, and/or distribute this software for any
6  * purpose with or without fee is hereby granted, provided that the above
7  * copyright notice and this permission notice appear in all copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16  */
17 
18 /*
19  * This file contains the definitions of the WMI protocol specified in the
20  * Wireless Module Interface (WMI) for the Wilocity
21  * MARLON 60 Gigabit wireless solution.
22  * It includes definitions of all the commands and events.
23  * Commands are messages from the host to the WM.
24  * Events are messages from the WM to the host.
25  */
26 
27 #ifndef __WILOCITY_WMI_H__
28 #define __WILOCITY_WMI_H__
29 
30 /* General */
31 #define WILOCITY_MAX_ASSOC_STA (8)
32 #define WILOCITY_DEFAULT_ASSOC_STA (1)
33 #define WMI_MAC_LEN		(6)
34 #define WMI_PROX_RANGE_NUM	(3)
35 #define WMI_MAX_LOSS_DMG_BEACONS	(32)
36 
37 /* List of Commands */
38 enum wmi_command_id {
39 	WMI_CONNECT_CMDID		= 0x0001,
40 	WMI_DISCONNECT_CMDID		= 0x0003,
41 	WMI_DISCONNECT_STA_CMDID	= 0x0004,
42 	WMI_START_SCAN_CMDID		= 0x0007,
43 	WMI_SET_BSS_FILTER_CMDID	= 0x0009,
44 	WMI_SET_PROBED_SSID_CMDID	= 0x000a,
45 	WMI_SET_LISTEN_INT_CMDID	= 0x000b,
46 	WMI_BCON_CTRL_CMDID		= 0x000f,
47 	WMI_ADD_CIPHER_KEY_CMDID	= 0x0016,
48 	WMI_DELETE_CIPHER_KEY_CMDID	= 0x0017,
49 	WMI_SET_APPIE_CMDID		= 0x003f,
50 	WMI_SET_WSC_STATUS_CMDID	= 0x0041,
51 	WMI_PXMT_RANGE_CFG_CMDID	= 0x0042,
52 	WMI_PXMT_SNR2_RANGE_CFG_CMDID	= 0x0043,
53 /*	WMI_FAST_MEM_ACC_MODE_CMDID	= 0x0300, */
54 	WMI_MEM_READ_CMDID		= 0x0800,
55 	WMI_MEM_WR_CMDID		= 0x0801,
56 	WMI_ECHO_CMDID			= 0x0803,
57 	WMI_DEEP_ECHO_CMDID		= 0x0804,
58 	WMI_CONFIG_MAC_CMDID		= 0x0805,
59 	WMI_CONFIG_PHY_DEBUG_CMDID	= 0x0806,
60 	WMI_ADD_DEBUG_TX_PCKT_CMDID	= 0x0808,
61 	WMI_PHY_GET_STATISTICS_CMDID	= 0x0809,
62 	WMI_FS_TUNE_CMDID		= 0x080a,
63 	WMI_CORR_MEASURE_CMDID		= 0x080b,
64 	WMI_READ_RSSI_CMDID		= 0x080c,
65 	WMI_TEMP_SENSE_CMDID		= 0x080e,
66 	WMI_DC_CALIB_CMDID		= 0x080f,
67 	WMI_SEND_TONE_CMDID		= 0x0810,
68 	WMI_IQ_TX_CALIB_CMDID		= 0x0811,
69 	WMI_IQ_RX_CALIB_CMDID		= 0x0812,
70 	WMI_SET_UCODE_IDLE_CMDID	= 0x0813,
71 	WMI_SET_WORK_MODE_CMDID		= 0x0815,
72 	WMI_LO_LEAKAGE_CALIB_CMDID	= 0x0816,
73 	WMI_MARLON_R_ACTIVATE_CMDID	= 0x0817,
74 	WMI_MARLON_R_READ_CMDID		= 0x0818,
75 	WMI_MARLON_R_WRITE_CMDID	= 0x0819,
76 	WMI_MARLON_R_TXRX_SEL_CMDID	= 0x081a,
77 	MAC_IO_STATIC_PARAMS_CMDID	= 0x081b,
78 	MAC_IO_DYNAMIC_PARAMS_CMDID	= 0x081c,
79 	WMI_SILENT_RSSI_CALIB_CMDID	= 0x081d,
80 	WMI_RF_RX_TEST_CMDID		= 0x081e,
81 	WMI_CFG_RX_CHAIN_CMDID		= 0x0820,
82 	WMI_VRING_CFG_CMDID		= 0x0821,
83 	WMI_VRING_BA_EN_CMDID		= 0x0823,
84 	WMI_VRING_BA_DIS_CMDID		= 0x0824,
85 	WMI_RCP_ADDBA_RESP_CMDID	= 0x0825,
86 	WMI_RCP_DELBA_CMDID		= 0x0826,
87 	WMI_SET_SSID_CMDID		= 0x0827,
88 	WMI_GET_SSID_CMDID		= 0x0828,
89 	WMI_SET_PCP_CHANNEL_CMDID	= 0x0829,
90 	WMI_GET_PCP_CHANNEL_CMDID	= 0x082a,
91 	WMI_SW_TX_REQ_CMDID		= 0x082b,
92 	WMI_READ_MAC_RXQ_CMDID		= 0x0830,
93 	WMI_READ_MAC_TXQ_CMDID		= 0x0831,
94 	WMI_WRITE_MAC_RXQ_CMDID		= 0x0832,
95 	WMI_WRITE_MAC_TXQ_CMDID		= 0x0833,
96 	WMI_WRITE_MAC_XQ_FIELD_CMDID	= 0x0834,
97 	WMI_MLME_PUSH_CMDID		= 0x0835,
98 	WMI_BEAMFORMING_MGMT_CMDID	= 0x0836,
99 	WMI_BF_TXSS_MGMT_CMDID		= 0x0837,
100 	WMI_BF_SM_MGMT_CMDID		= 0x0838,
101 	WMI_BF_RXSS_MGMT_CMDID		= 0x0839,
102 	WMI_SET_SECTORS_CMDID		= 0x0849,
103 	WMI_MAINTAIN_PAUSE_CMDID	= 0x0850,
104 	WMI_MAINTAIN_RESUME_CMDID	= 0x0851,
105 	WMI_RS_MGMT_CMDID		= 0x0852,
106 	WMI_RF_MGMT_CMDID		= 0x0853,
107 	WMI_THERMAL_THROTTLING_CTRL_CMDID	= 0x0854,
108 	WMI_THERMAL_THROTTLING_GET_STATUS_CMDID	= 0x0855,
109 	/* Performance monitoring commands */
110 	WMI_BF_CTRL_CMDID		= 0x0862,
111 	WMI_NOTIFY_REQ_CMDID		= 0x0863,
112 	WMI_GET_STATUS_CMDID		= 0x0864,
113 	WMI_UNIT_TEST_CMDID		= 0x0900,
114 	WMI_HICCUP_CMDID		= 0x0901,
115 	WMI_FLASH_READ_CMDID		= 0x0902,
116 	WMI_FLASH_WRITE_CMDID		= 0x0903,
117 	WMI_SECURITY_UNIT_TEST_CMDID	= 0x0904,
118 	/*P2P*/
119 	WMI_P2P_CFG_CMDID		= 0x0910,
120 	WMI_PORT_ALLOCATE_CMDID		= 0x0911,
121 	WMI_PORT_DELETE_CMDID		= 0x0912,
122 	WMI_POWER_MGMT_CFG_CMDID	= 0x0913,
123 	WMI_START_LISTEN_CMDID		= 0x0914,
124 	WMI_START_SEARCH_CMDID		= 0x0915,
125 	WMI_DISCOVERY_START_CMDID	= 0x0916,
126 	WMI_DISCOVERY_STOP_CMDID	= 0x0917,
127 	WMI_PCP_START_CMDID		= 0x0918,
128 	WMI_PCP_STOP_CMDID		= 0x0919,
129 	WMI_GET_PCP_FACTOR_CMDID	= 0x091b,
130 
131 	WMI_SET_MAC_ADDRESS_CMDID	= 0xf003,
132 	WMI_ABORT_SCAN_CMDID		= 0xf007,
133 	WMI_SET_PMK_CMDID		= 0xf028,
134 
135 	WMI_SET_PROMISCUOUS_MODE_CMDID	= 0xf041,
136 	WMI_GET_PMK_CMDID		= 0xf048,
137 	WMI_SET_PASSPHRASE_CMDID	= 0xf049,
138 	WMI_SEND_ASSOC_RES_CMDID	= 0xf04a,
139 	WMI_SET_ASSOC_REQ_RELAY_CMDID	= 0xf04b,
140 	WMI_EAPOL_TX_CMDID		= 0xf04c,
141 	WMI_MAC_ADDR_REQ_CMDID		= 0xf04d,
142 	WMI_FW_VER_CMDID		= 0xf04e,
143 	WMI_PMC_CMDID			= 0xf04f,
144 };
145 
146 /*
147  * Commands data structures
148  */
149 
150 /*
151  * WMI_CONNECT_CMDID
152  */
153 enum wmi_network_type {
154 	WMI_NETTYPE_INFRA		= 0x01,
155 	WMI_NETTYPE_ADHOC		= 0x02,
156 	WMI_NETTYPE_ADHOC_CREATOR	= 0x04,
157 	WMI_NETTYPE_AP			= 0x10,
158 	WMI_NETTYPE_P2P			= 0x20,
159 	WMI_NETTYPE_WBE			= 0x40, /* PCIE over 60g */
160 };
161 
162 enum wmi_dot11_auth_mode {
163 	WMI_AUTH11_OPEN			= 0x01,
164 	WMI_AUTH11_SHARED		= 0x02,
165 	WMI_AUTH11_LEAP			= 0x04,
166 	WMI_AUTH11_WSC			= 0x08,
167 };
168 
169 enum wmi_auth_mode {
170 	WMI_AUTH_NONE			= 0x01,
171 	WMI_AUTH_WPA			= 0x02,
172 	WMI_AUTH_WPA2			= 0x04,
173 	WMI_AUTH_WPA_PSK		= 0x08,
174 	WMI_AUTH_WPA2_PSK		= 0x10,
175 	WMI_AUTH_WPA_CCKM		= 0x20,
176 	WMI_AUTH_WPA2_CCKM		= 0x40,
177 };
178 
179 enum wmi_crypto_type {
180 	WMI_CRYPT_NONE			= 0x01,
181 	WMI_CRYPT_WEP			= 0x02,
182 	WMI_CRYPT_TKIP			= 0x04,
183 	WMI_CRYPT_AES			= 0x08,
184 	WMI_CRYPT_AES_GCMP		= 0x20,
185 };
186 
187 enum wmi_connect_ctrl_flag_bits {
188 	WMI_CONNECT_ASSOC_POLICY_USER		= 0x0001,
189 	WMI_CONNECT_SEND_REASSOC		= 0x0002,
190 	WMI_CONNECT_IGNORE_WPA_GROUP_CIPHER	= 0x0004,
191 	WMI_CONNECT_PROFILE_MATCH_DONE		= 0x0008,
192 	WMI_CONNECT_IGNORE_AAC_BEACON		= 0x0010,
193 	WMI_CONNECT_CSA_FOLLOW_BSS		= 0x0020,
194 	WMI_CONNECT_DO_WPA_OFFLOAD		= 0x0040,
195 	WMI_CONNECT_DO_NOT_DEAUTH		= 0x0080,
196 };
197 
198 #define WMI_MAX_SSID_LEN    (32)
199 
200 struct wmi_connect_cmd {
201 	u8 network_type;
202 	u8 dot11_auth_mode;
203 	u8 auth_mode;
204 	u8 pairwise_crypto_type;
205 	u8 pairwise_crypto_len;
206 	u8 group_crypto_type;
207 	u8 group_crypto_len;
208 	u8 ssid_len;
209 	u8 ssid[WMI_MAX_SSID_LEN];
210 	u8 channel;
211 	u8 reserved0;
212 	u8 bssid[WMI_MAC_LEN];
213 	__le32 ctrl_flags;
214 	u8 dst_mac[WMI_MAC_LEN];
215 	u8 reserved1[2];
216 } __packed;
217 
218 /*
219  * WMI_DISCONNECT_STA_CMDID
220  */
221 struct wmi_disconnect_sta_cmd {
222 	u8 dst_mac[WMI_MAC_LEN];
223 	__le16 disconnect_reason;
224 } __packed;
225 
226 /*
227  * WMI_SET_PMK_CMDID
228  */
229 
230 #define WMI_MIN_KEY_INDEX	(0)
231 #define WMI_MAX_KEY_INDEX	(3)
232 #define WMI_MAX_KEY_LEN		(32)
233 #define WMI_PASSPHRASE_LEN	(64)
234 #define WMI_PMK_LEN		(32)
235 
236 struct  wmi_set_pmk_cmd {
237 	u8 pmk[WMI_PMK_LEN];
238 } __packed;
239 
240 /*
241  * WMI_SET_PASSPHRASE_CMDID
242  */
243 struct wmi_set_passphrase_cmd {
244 	u8 ssid[WMI_MAX_SSID_LEN];
245 	u8 passphrase[WMI_PASSPHRASE_LEN];
246 	u8 ssid_len;
247 	u8 passphrase_len;
248 } __packed;
249 
250 /*
251  * WMI_ADD_CIPHER_KEY_CMDID
252  */
253 enum wmi_key_usage {
254 	WMI_KEY_USE_PAIRWISE	= 0,
255 	WMI_KEY_USE_GROUP	= 1,
256 	WMI_KEY_USE_TX		= 2,  /* default Tx Key - Static WEP only */
257 };
258 
259 struct wmi_add_cipher_key_cmd {
260 	u8 key_index;
261 	u8 key_type;
262 	u8 key_usage;		/* enum wmi_key_usage */
263 	u8 key_len;
264 	u8 key_rsc[8];		/* key replay sequence counter */
265 	u8 key[WMI_MAX_KEY_LEN];
266 	u8 key_op_ctrl;		/* Additional Key Control information */
267 	u8 mac[WMI_MAC_LEN];
268 } __packed;
269 
270 /*
271  * WMI_DELETE_CIPHER_KEY_CMDID
272  */
273 struct wmi_delete_cipher_key_cmd {
274 	u8 key_index;
275 	u8 mac[WMI_MAC_LEN];
276 } __packed;
277 
278 /*
279  * WMI_START_SCAN_CMDID
280  *
281  * Start L1 scan operation
282  *
283  * Returned events:
284  * - WMI_RX_MGMT_PACKET_EVENTID - for every probe resp.
285  * - WMI_SCAN_COMPLETE_EVENTID
286  */
287 enum wmi_scan_type {
288 	WMI_LONG_SCAN		= 0,
289 	WMI_SHORT_SCAN		= 1,
290 	WMI_PBC_SCAN		= 2,
291 	WMI_DIRECT_SCAN		= 3,
292 	WMI_ACTIVE_SCAN		= 4,
293 };
294 
295 struct wmi_start_scan_cmd {
296 	u8 direct_scan_mac_addr[6];
297 	u8 reserved[2];
298 	__le32 home_dwell_time;	/* Max duration in the home channel(ms) */
299 	__le32 force_scan_interval;	/* Time interval between scans (ms)*/
300 	u8 scan_type;		/* wmi_scan_type */
301 	u8 num_channels;		/* how many channels follow */
302 	struct {
303 		u8 channel;
304 		u8 reserved;
305 	} channel_list[0];	/* channels ID's */
306 				/* 0 - 58320 MHz */
307 				/* 1 - 60480 MHz */
308 				/* 2 - 62640 MHz */
309 } __packed;
310 
311 /*
312  * WMI_SET_PROBED_SSID_CMDID
313  */
314 #define MAX_PROBED_SSID_INDEX	(3)
315 
316 enum wmi_ssid_flag {
317 	WMI_SSID_FLAG_DISABLE	= 0,	/* disables entry */
318 	WMI_SSID_FLAG_SPECIFIC	= 1,	/* probes specified ssid */
319 	WMI_SSID_FLAG_ANY	= 2,	/* probes for any ssid */
320 };
321 
322 struct wmi_probed_ssid_cmd {
323 	u8 entry_index;			/* 0 to MAX_PROBED_SSID_INDEX */
324 	u8 flag;			/* enum wmi_ssid_flag */
325 	u8 ssid_len;
326 	u8 ssid[WMI_MAX_SSID_LEN];
327 } __packed;
328 
329 /*
330  * WMI_SET_APPIE_CMDID
331  * Add Application specified IE to a management frame
332  */
333 #define WMI_MAX_IE_LEN		(1024)
334 
335 /*
336  * Frame Types
337  */
338 enum wmi_mgmt_frame_type {
339 	WMI_FRAME_BEACON	= 0,
340 	WMI_FRAME_PROBE_REQ	= 1,
341 	WMI_FRAME_PROBE_RESP	= 2,
342 	WMI_FRAME_ASSOC_REQ	= 3,
343 	WMI_FRAME_ASSOC_RESP	= 4,
344 	WMI_NUM_MGMT_FRAME,
345 };
346 
347 struct wmi_set_appie_cmd {
348 	u8 mgmt_frm_type;	/* enum wmi_mgmt_frame_type */
349 	u8 reserved;
350 	__le16 ie_len;	/* Length of the IE to be added to MGMT frame */
351 	u8 ie_info[0];
352 } __packed;
353 
354 /*
355  * WMI_PXMT_RANGE_CFG_CMDID
356  */
357 struct wmi_pxmt_range_cfg_cmd {
358 	u8 dst_mac[WMI_MAC_LEN];
359 	__le16 range;
360 } __packed;
361 
362 /*
363  * WMI_PXMT_SNR2_RANGE_CFG_CMDID
364  */
365 struct wmi_pxmt_snr2_range_cfg_cmd {
366 	s8 snr2range_arr[WMI_PROX_RANGE_NUM-1];
367 } __packed;
368 
369 /*
370  * WMI_RF_MGMT_CMDID
371  */
372 enum wmi_rf_mgmt_type {
373 	WMI_RF_MGMT_W_DISABLE	= 0,
374 	WMI_RF_MGMT_W_ENABLE	= 1,
375 	WMI_RF_MGMT_GET_STATUS	= 2,
376 };
377 
378 struct wmi_rf_mgmt_cmd {
379 	__le32 rf_mgmt_type;
380 } __packed;
381 
382 /*
383  * WMI_THERMAL_THROTTLING_CTRL_CMDID
384  */
385 #define THERMAL_THROTTLING_USE_DEFAULT_MAX_TXOP_LENGTH	(0xFFFFFFFF)
386 
387 struct wmi_thermal_throttling_ctrl_cmd {
388 	__le32 time_on_usec;
389 	__le32 time_off_usec;
390 	__le32 max_txop_length_usec;
391 } __packed;
392 
393 /*
394  * WMI_RF_RX_TEST_CMDID
395  */
396 struct wmi_rf_rx_test_cmd {
397 	__le32 sector;
398 } __packed;
399 
400 /*
401  * WMI_CORR_MEASURE_CMDID
402  */
403 struct wmi_corr_measure_cmd {
404 	s32 freq_mhz;
405 	__le32 length_samples;
406 	__le32 iterations;
407 } __packed;
408 
409 /*
410  * WMI_SET_SSID_CMDID
411  */
412 struct wmi_set_ssid_cmd {
413 	__le32 ssid_len;
414 	u8 ssid[WMI_MAX_SSID_LEN];
415 } __packed;
416 
417 /*
418  * WMI_SET_PCP_CHANNEL_CMDID
419  */
420 struct wmi_set_pcp_channel_cmd {
421 	u8 channel;
422 	u8 reserved[3];
423 } __packed;
424 
425 /*
426  * WMI_BCON_CTRL_CMDID
427  */
428 struct wmi_bcon_ctrl_cmd {
429 	__le16 bcon_interval;
430 	__le16 frag_num;
431 	__le64 ss_mask;
432 	u8 network_type;
433 	u8 pcp_max_assoc_sta;
434 	u8 disable_sec_offload;
435 	u8 disable_sec;
436 } __packed;
437 
438 /******* P2P ***********/
439 
440 /*
441  * WMI_PORT_ALLOCATE_CMDID
442  */
443 enum wmi_port_role {
444 	WMI_PORT_STA		= 0,
445 	WMI_PORT_PCP		= 1,
446 	WMI_PORT_AP		= 2,
447 	WMI_PORT_P2P_DEV	= 3,
448 	WMI_PORT_P2P_CLIENT	= 4,
449 	WMI_PORT_P2P_GO		= 5,
450 };
451 
452 struct wmi_port_allocate_cmd {
453 	u8 mac[WMI_MAC_LEN];
454 	u8 port_role;
455 	u8 mid;
456 } __packed;
457 
458 /*
459  * WMI_PORT_DELETE_CMDID
460  */
461 struct wmi_delete_port_cmd {
462 	u8 mid;
463 	u8 reserved[3];
464 } __packed;
465 
466 /*
467  * WMI_P2P_CFG_CMDID
468  */
469 enum wmi_discovery_mode {
470 	WMI_DISCOVERY_MODE_NON_OFFLOAD	= 0,
471 	WMI_DISCOVERY_MODE_OFFLOAD	= 1,
472 	WMI_DISCOVERY_MODE_PEER2PEER	= 2,
473 };
474 
475 struct wmi_p2p_cfg_cmd {
476 	u8 discovery_mode;	/* wmi_discovery_mode */
477 	u8 channel;
478 	__le16 bcon_interval; /* base to listen/search duration calculation */
479 } __packed;
480 
481 /*
482  * WMI_POWER_MGMT_CFG_CMDID
483  */
484 enum wmi_power_source_type {
485 	WMI_POWER_SOURCE_BATTERY	= 0,
486 	WMI_POWER_SOURCE_OTHER		= 1,
487 };
488 
489 struct wmi_power_mgmt_cfg_cmd {
490 	u8 power_source;	/* wmi_power_source_type */
491 	u8 reserved[3];
492 } __packed;
493 
494 /*
495  * WMI_PCP_START_CMDID
496  */
497 struct wmi_pcp_start_cmd {
498 	__le16 bcon_interval;
499 	u8 pcp_max_assoc_sta;
500 	u8 reserved0[9];
501 	u8 network_type;
502 	u8 channel;
503 	u8 disable_sec_offload;
504 	u8 disable_sec;
505 } __packed;
506 
507 /*
508  * WMI_SW_TX_REQ_CMDID
509  */
510 struct wmi_sw_tx_req_cmd {
511 	u8 dst_mac[WMI_MAC_LEN];
512 	__le16 len;
513 	u8 payload[0];
514 } __packed;
515 
516 /*
517  * WMI_VRING_CFG_CMDID
518  */
519 
520 struct wmi_sw_ring_cfg {
521 	__le64 ring_mem_base;
522 	__le16 ring_size;
523 	__le16 max_mpdu_size;
524 } __packed;
525 
526 struct wmi_vring_cfg_schd {
527 	__le16 priority;
528 	__le16 timeslot_us;
529 } __packed;
530 
531 enum wmi_vring_cfg_encap_trans_type {
532 	WMI_VRING_ENC_TYPE_802_3		= 0,
533 	WMI_VRING_ENC_TYPE_NATIVE_WIFI		= 1,
534 };
535 
536 enum wmi_vring_cfg_ds_cfg {
537 	WMI_VRING_DS_PBSS			= 0,
538 	WMI_VRING_DS_STATION			= 1,
539 	WMI_VRING_DS_AP				= 2,
540 	WMI_VRING_DS_ADDR4			= 3,
541 };
542 
543 enum wmi_vring_cfg_nwifi_ds_trans_type {
544 	WMI_NWIFI_TX_TRANS_MODE_NO		= 0,
545 	WMI_NWIFI_TX_TRANS_MODE_AP2PBSS		= 1,
546 	WMI_NWIFI_TX_TRANS_MODE_STA2PBSS	= 2,
547 };
548 
549 enum wmi_vring_cfg_schd_params_priority {
550 	WMI_SCH_PRIO_REGULAR			= 0,
551 	WMI_SCH_PRIO_HIGH			= 1,
552 };
553 
554 #define CIDXTID_CID_POS (0)
555 #define CIDXTID_CID_LEN (4)
556 #define CIDXTID_CID_MSK (0xF)
557 #define CIDXTID_TID_POS (4)
558 #define CIDXTID_TID_LEN (4)
559 #define CIDXTID_TID_MSK (0xF0)
560 
561 struct wmi_vring_cfg {
562 	struct wmi_sw_ring_cfg tx_sw_ring;
563 	u8 ringid;				/* 0-23 vrings */
564 
565 	u8 cidxtid;
566 
567 	u8 encap_trans_type;
568 	u8 ds_cfg;				/* 802.3 DS cfg */
569 	u8 nwifi_ds_trans_type;
570 
571 	#define VRING_CFG_MAC_CTRL_LIFETIME_EN_POS (0)
572 	#define VRING_CFG_MAC_CTRL_LIFETIME_EN_LEN (1)
573 	#define VRING_CFG_MAC_CTRL_LIFETIME_EN_MSK (0x1)
574 	#define VRING_CFG_MAC_CTRL_AGGR_EN_POS (1)
575 	#define VRING_CFG_MAC_CTRL_AGGR_EN_LEN (1)
576 	#define VRING_CFG_MAC_CTRL_AGGR_EN_MSK (0x2)
577 	u8 mac_ctrl;
578 
579 	#define VRING_CFG_TO_RESOLUTION_VALUE_POS (0)
580 	#define VRING_CFG_TO_RESOLUTION_VALUE_LEN (6)
581 	#define VRING_CFG_TO_RESOLUTION_VALUE_MSK (0x3F)
582 	u8 to_resolution;
583 	u8 agg_max_wsize;
584 	struct wmi_vring_cfg_schd schd_params;
585 } __packed;
586 
587 enum wmi_vring_cfg_cmd_action {
588 	WMI_VRING_CMD_ADD			= 0,
589 	WMI_VRING_CMD_MODIFY			= 1,
590 	WMI_VRING_CMD_DELETE			= 2,
591 };
592 
593 struct wmi_vring_cfg_cmd {
594 	__le32 action;
595 	struct wmi_vring_cfg vring_cfg;
596 } __packed;
597 
598 /*
599  * WMI_VRING_BA_EN_CMDID
600  */
601 struct wmi_vring_ba_en_cmd {
602 	u8 ringid;
603 	u8 agg_max_wsize;
604 	__le16 ba_timeout;
605 	u8 amsdu;
606 } __packed;
607 
608 /*
609  * WMI_VRING_BA_DIS_CMDID
610  */
611 struct wmi_vring_ba_dis_cmd {
612 	u8 ringid;
613 	u8 reserved;
614 	__le16 reason;
615 } __packed;
616 
617 /*
618  * WMI_NOTIFY_REQ_CMDID
619  */
620 struct wmi_notify_req_cmd {
621 	u8 cid;
622 	u8 year;
623 	u8 month;
624 	u8 day;
625 	__le32 interval_usec;
626 	u8 hour;
627 	u8 minute;
628 	u8 second;
629 	u8 miliseconds;
630 } __packed;
631 
632 /*
633  * WMI_CFG_RX_CHAIN_CMDID
634  */
635 enum wmi_sniffer_cfg_mode {
636 	WMI_SNIFFER_OFF				= 0,
637 	WMI_SNIFFER_ON				= 1,
638 };
639 
640 enum wmi_sniffer_cfg_phy_info_mode {
641 	WMI_SNIFFER_PHY_INFO_DISABLED		= 0,
642 	WMI_SNIFFER_PHY_INFO_ENABLED		= 1,
643 };
644 
645 enum wmi_sniffer_cfg_phy_support {
646 	WMI_SNIFFER_CP				= 0,
647 	WMI_SNIFFER_DP				= 1,
648 	WMI_SNIFFER_BOTH_PHYS			= 2,
649 };
650 
651 struct wmi_sniffer_cfg {
652 	__le32 mode;		/* enum wmi_sniffer_cfg_mode */
653 	__le32 phy_info_mode;	/* enum wmi_sniffer_cfg_phy_info_mode */
654 	__le32 phy_support;	/* enum wmi_sniffer_cfg_phy_support */
655 	u8 channel;
656 	u8 reserved[3];
657 } __packed;
658 
659 enum wmi_cfg_rx_chain_cmd_action {
660 	WMI_RX_CHAIN_ADD			= 0,
661 	WMI_RX_CHAIN_DEL			= 1,
662 };
663 
664 enum wmi_cfg_rx_chain_cmd_decap_trans_type {
665 	WMI_DECAP_TYPE_802_3			= 0,
666 	WMI_DECAP_TYPE_NATIVE_WIFI		= 1,
667 	WMI_DECAP_TYPE_NONE			= 2,
668 };
669 
670 enum wmi_cfg_rx_chain_cmd_nwifi_ds_trans_type {
671 	WMI_NWIFI_RX_TRANS_MODE_NO		= 0,
672 	WMI_NWIFI_RX_TRANS_MODE_PBSS2AP		= 1,
673 	WMI_NWIFI_RX_TRANS_MODE_PBSS2STA	= 2,
674 };
675 
676 enum wmi_cfg_rx_chain_cmd_reorder_type {
677 	WMI_RX_HW_REORDER = 0,
678 	WMI_RX_SW_REORDER = 1,
679 };
680 
681 struct wmi_cfg_rx_chain_cmd {
682 	__le32 action;
683 	struct wmi_sw_ring_cfg rx_sw_ring;
684 	u8 mid;
685 	u8 decap_trans_type;
686 
687 	#define L2_802_3_OFFLOAD_CTRL_VLAN_TAG_INSERTION_POS (0)
688 	#define L2_802_3_OFFLOAD_CTRL_VLAN_TAG_INSERTION_LEN (1)
689 	#define L2_802_3_OFFLOAD_CTRL_VLAN_TAG_INSERTION_MSK (0x1)
690 	#define L2_802_3_OFFLOAD_CTRL_SNAP_KEEP_POS (1)
691 	#define L2_802_3_OFFLOAD_CTRL_SNAP_KEEP_LEN (1)
692 	#define L2_802_3_OFFLOAD_CTRL_SNAP_KEEP_MSK (0x2)
693 	u8 l2_802_3_offload_ctrl;
694 
695 	#define L2_NWIFI_OFFLOAD_CTRL_REMOVE_QOS_POS (0)
696 	#define L2_NWIFI_OFFLOAD_CTRL_REMOVE_QOS_LEN (1)
697 	#define L2_NWIFI_OFFLOAD_CTRL_REMOVE_QOS_MSK (0x1)
698 	#define L2_NWIFI_OFFLOAD_CTRL_REMOVE_PN_POS (1)
699 	#define L2_NWIFI_OFFLOAD_CTRL_REMOVE_PN_LEN (1)
700 	#define L2_NWIFI_OFFLOAD_CTRL_REMOVE_PN_MSK (0x2)
701 	u8 l2_nwifi_offload_ctrl;
702 
703 	u8 vlan_id;
704 	u8 nwifi_ds_trans_type;
705 
706 	#define L3_L4_CTRL_IPV4_CHECKSUM_EN_POS (0)
707 	#define L3_L4_CTRL_IPV4_CHECKSUM_EN_LEN (1)
708 	#define L3_L4_CTRL_IPV4_CHECKSUM_EN_MSK (0x1)
709 	#define L3_L4_CTRL_TCPIP_CHECKSUM_EN_POS (1)
710 	#define L3_L4_CTRL_TCPIP_CHECKSUM_EN_LEN (1)
711 	#define L3_L4_CTRL_TCPIP_CHECKSUM_EN_MSK (0x2)
712 	u8 l3_l4_ctrl;
713 
714 	#define RING_CTRL_OVERRIDE_PREFETCH_THRSH_POS (0)
715 	#define RING_CTRL_OVERRIDE_PREFETCH_THRSH_LEN (1)
716 	#define RING_CTRL_OVERRIDE_PREFETCH_THRSH_MSK (0x1)
717 	#define RING_CTRL_OVERRIDE_WB_THRSH_POS (1)
718 	#define RING_CTRL_OVERRIDE_WB_THRSH_LEN (1)
719 	#define RING_CTRL_OVERRIDE_WB_THRSH_MSK (0x2)
720 	#define RING_CTRL_OVERRIDE_ITR_THRSH_POS (2)
721 	#define RING_CTRL_OVERRIDE_ITR_THRSH_LEN (1)
722 	#define RING_CTRL_OVERRIDE_ITR_THRSH_MSK (0x4)
723 	#define RING_CTRL_OVERRIDE_HOST_THRSH_POS (3)
724 	#define RING_CTRL_OVERRIDE_HOST_THRSH_LEN (1)
725 	#define RING_CTRL_OVERRIDE_HOST_THRSH_MSK (0x8)
726 	u8 ring_ctrl;
727 
728 	__le16 prefetch_thrsh;
729 	__le16 wb_thrsh;
730 	__le32 itr_value;
731 	__le16 host_thrsh;
732 	u8 reorder_type;
733 	u8 reserved;
734 	struct wmi_sniffer_cfg sniffer_cfg;
735 } __packed;
736 
737 /*
738  * WMI_RCP_ADDBA_RESP_CMDID
739  */
740 struct wmi_rcp_addba_resp_cmd {
741 	u8 cidxtid;
742 	u8 dialog_token;
743 	__le16 status_code;
744 	__le16 ba_param_set;	/* ieee80211_ba_parameterset field to send */
745 	__le16 ba_timeout;
746 } __packed;
747 
748 /*
749  * WMI_RCP_DELBA_CMDID
750  */
751 struct wmi_rcp_delba_cmd {
752 	u8 cidxtid;
753 	u8 reserved;
754 	__le16 reason;
755 } __packed;
756 
757 /*
758  * WMI_RCP_ADDBA_REQ_CMDID
759  */
760 struct wmi_rcp_addba_req_cmd {
761 	u8 cidxtid;
762 	u8 dialog_token;
763 	/* ieee80211_ba_parameterset field as it received */
764 	__le16 ba_param_set;
765 	__le16 ba_timeout;
766 	/* ieee80211_ba_seqstrl field as it received */
767 	__le16 ba_seq_ctrl;
768 } __packed;
769 
770 /*
771  * WMI_SET_MAC_ADDRESS_CMDID
772  */
773 struct wmi_set_mac_address_cmd {
774 	u8 mac[WMI_MAC_LEN];
775 	u8 reserved[2];
776 } __packed;
777 
778 /*
779 * WMI_EAPOL_TX_CMDID
780 */
781 struct wmi_eapol_tx_cmd {
782 	u8 dst_mac[WMI_MAC_LEN];
783 	__le16 eapol_len;
784 	u8 eapol[0];
785 } __packed;
786 
787 /*
788  * WMI_ECHO_CMDID
789  *
790  * Check FW is alive
791  *
792  * WMI_DEEP_ECHO_CMDID
793  *
794  * Check FW and ucode are alive
795  *
796  * Returned event: WMI_ECHO_RSP_EVENTID
797  * same event for both commands
798  */
799 struct wmi_echo_cmd {
800 	__le32 value;
801 } __packed;
802 
803 /*
804  * WMI_TEMP_SENSE_CMDID
805  *
806  * Measure MAC and radio temperatures
807  */
808 
809 /* Possible modes for temperature measurement */
810 enum wmi_temperature_measure_mode {
811 	TEMPERATURE_USE_OLD_VALUE	= 0x1,
812 	TEMPERATURE_MEASURE_NOW		= 0x2,
813 };
814 
815 struct wmi_temp_sense_cmd {
816 	__le32 measure_baseband_en;
817 	__le32 measure_rf_en;
818 	__le32 measure_mode;
819 } __packed;
820 
821 /*
822  * WMI Events
823  */
824 
825 /*
826  * List of Events (target to host)
827  */
828 enum wmi_event_id {
829 	WMI_READY_EVENTID			= 0x1001,
830 	WMI_CONNECT_EVENTID			= 0x1002,
831 	WMI_DISCONNECT_EVENTID			= 0x1003,
832 	WMI_SCAN_COMPLETE_EVENTID		= 0x100a,
833 	WMI_REPORT_STATISTICS_EVENTID		= 0x100b,
834 	WMI_RD_MEM_RSP_EVENTID			= 0x1800,
835 	WMI_FW_READY_EVENTID			= 0x1801,
836 	WMI_EXIT_FAST_MEM_ACC_MODE_EVENTID	= 0x0200,
837 	WMI_ECHO_RSP_EVENTID			= 0x1803,
838 	WMI_FS_TUNE_DONE_EVENTID		= 0x180a,
839 	WMI_CORR_MEASURE_EVENTID		= 0x180b,
840 	WMI_READ_RSSI_EVENTID			= 0x180c,
841 	WMI_TEMP_SENSE_DONE_EVENTID		= 0x180e,
842 	WMI_DC_CALIB_DONE_EVENTID		= 0x180f,
843 	WMI_IQ_TX_CALIB_DONE_EVENTID		= 0x1811,
844 	WMI_IQ_RX_CALIB_DONE_EVENTID		= 0x1812,
845 	WMI_SET_WORK_MODE_DONE_EVENTID		= 0x1815,
846 	WMI_LO_LEAKAGE_CALIB_DONE_EVENTID	= 0x1816,
847 	WMI_MARLON_R_ACTIVATE_DONE_EVENTID	= 0x1817,
848 	WMI_MARLON_R_READ_DONE_EVENTID		= 0x1818,
849 	WMI_MARLON_R_WRITE_DONE_EVENTID		= 0x1819,
850 	WMI_MARLON_R_TXRX_SEL_DONE_EVENTID	= 0x181a,
851 	WMI_SILENT_RSSI_CALIB_DONE_EVENTID	= 0x181d,
852 	WMI_RF_RX_TEST_DONE_EVENTID		= 0x181e,
853 	WMI_CFG_RX_CHAIN_DONE_EVENTID		= 0x1820,
854 	WMI_VRING_CFG_DONE_EVENTID		= 0x1821,
855 	WMI_BA_STATUS_EVENTID			= 0x1823,
856 	WMI_RCP_ADDBA_REQ_EVENTID		= 0x1824,
857 	WMI_ADDBA_RESP_SENT_EVENTID		= 0x1825,
858 	WMI_DELBA_EVENTID			= 0x1826,
859 	WMI_GET_SSID_EVENTID			= 0x1828,
860 	WMI_GET_PCP_CHANNEL_EVENTID		= 0x182a,
861 	WMI_SW_TX_COMPLETE_EVENTID		= 0x182b,
862 
863 	WMI_READ_MAC_RXQ_EVENTID		= 0x1830,
864 	WMI_READ_MAC_TXQ_EVENTID		= 0x1831,
865 	WMI_WRITE_MAC_RXQ_EVENTID		= 0x1832,
866 	WMI_WRITE_MAC_TXQ_EVENTID		= 0x1833,
867 	WMI_WRITE_MAC_XQ_FIELD_EVENTID		= 0x1834,
868 
869 	WMI_BEAFORMING_MGMT_DONE_EVENTID	= 0x1836,
870 	WMI_BF_TXSS_MGMT_DONE_EVENTID		= 0x1837,
871 	WMI_BF_RXSS_MGMT_DONE_EVENTID		= 0x1839,
872 	WMI_RS_MGMT_DONE_EVENTID		= 0x1852,
873 	WMI_RF_MGMT_STATUS_EVENTID		= 0x1853,
874 	WMI_THERMAL_THROTTLING_STATUS_EVENTID	= 0x1855,
875 	WMI_BF_SM_MGMT_DONE_EVENTID		= 0x1838,
876 	WMI_RX_MGMT_PACKET_EVENTID		= 0x1840,
877 	WMI_TX_MGMT_PACKET_EVENTID		= 0x1841,
878 
879 	/* Performance monitoring events */
880 	WMI_DATA_PORT_OPEN_EVENTID		= 0x1860,
881 	WMI_WBE_LINKDOWN_EVENTID		= 0x1861,
882 
883 	WMI_BF_CTRL_DONE_EVENTID		= 0x1862,
884 	WMI_NOTIFY_REQ_DONE_EVENTID		= 0x1863,
885 	WMI_GET_STATUS_DONE_EVENTID		= 0x1864,
886 
887 	WMI_UNIT_TEST_EVENTID			= 0x1900,
888 	WMI_FLASH_READ_DONE_EVENTID		= 0x1902,
889 	WMI_FLASH_WRITE_DONE_EVENTID		= 0x1903,
890 	/*P2P*/
891 	WMI_P2P_CFG_DONE_EVENTID		= 0x1910,
892 	WMI_PORT_ALLOCATED_EVENTID		= 0x1911,
893 	WMI_PORT_DELETED_EVENTID		= 0x1912,
894 	WMI_LISTEN_STARTED_EVENTID		= 0x1914,
895 	WMI_SEARCH_STARTED_EVENTID		= 0x1915,
896 	WMI_DISCOVERY_STARTED_EVENTID		= 0x1916,
897 	WMI_DISCOVERY_STOPPED_EVENTID		= 0x1917,
898 	WMI_PCP_STARTED_EVENTID			= 0x1918,
899 	WMI_PCP_STOPPED_EVENTID			= 0x1919,
900 	WMI_PCP_FACTOR_EVENTID			= 0x191a,
901 	WMI_SET_CHANNEL_EVENTID			= 0x9000,
902 	WMI_ASSOC_REQ_EVENTID			= 0x9001,
903 	WMI_EAPOL_RX_EVENTID			= 0x9002,
904 	WMI_MAC_ADDR_RESP_EVENTID		= 0x9003,
905 	WMI_FW_VER_EVENTID			= 0x9004,
906 };
907 
908 /*
909  * Events data structures
910  */
911 
912 enum wmi_fw_status {
913 	WMI_FW_STATUS_SUCCESS,
914 	WMI_FW_STATUS_FAILURE,
915 };
916 
917 /*
918  * WMI_RF_MGMT_STATUS_EVENTID
919  */
920 enum wmi_rf_status {
921 	WMI_RF_ENABLED			= 0,
922 	WMI_RF_DISABLED_HW		= 1,
923 	WMI_RF_DISABLED_SW		= 2,
924 	WMI_RF_DISABLED_HW_SW		= 3,
925 };
926 
927 struct wmi_rf_mgmt_status_event {
928 	__le32 rf_status;
929 } __packed;
930 
931 /*
932  * WMI_THERMAL_THROTTLING_STATUS_EVENTID
933  */
934 struct wmi_thermal_throttling_status_event {
935 	__le32 time_on_usec;
936 	__le32 time_off_usec;
937 	__le32 max_txop_length_usec;
938 } __packed;
939 
940 /*
941  * WMI_GET_STATUS_DONE_EVENTID
942  */
943 struct wmi_get_status_done_event {
944 	__le32 is_associated;
945 	u8 cid;
946 	u8 reserved0[3];
947 	u8 bssid[WMI_MAC_LEN];
948 	u8 channel;
949 	u8 reserved1;
950 	u8 network_type;
951 	u8 reserved2[3];
952 	__le32 ssid_len;
953 	u8 ssid[WMI_MAX_SSID_LEN];
954 	__le32 rf_status;
955 	__le32 is_secured;
956 } __packed;
957 
958 /*
959  * WMI_FW_VER_EVENTID
960  */
961 struct wmi_fw_ver_event {
962 	u8 major;
963 	u8 minor;
964 	__le16 subminor;
965 	__le16 build;
966 } __packed;
967 
968 /*
969 * WMI_MAC_ADDR_RESP_EVENTID
970 */
971 struct wmi_mac_addr_resp_event {
972 	u8 mac[WMI_MAC_LEN];
973 	u8 auth_mode;
974 	u8 crypt_mode;
975 	__le32 offload_mode;
976 } __packed;
977 
978 /*
979 * WMI_EAPOL_RX_EVENTID
980 */
981 struct wmi_eapol_rx_event {
982 	u8 src_mac[WMI_MAC_LEN];
983 	__le16 eapol_len;
984 	u8 eapol[0];
985 } __packed;
986 
987 /*
988 * WMI_READY_EVENTID
989 */
990 enum wmi_phy_capability {
991 	WMI_11A_CAPABILITY		= 1,
992 	WMI_11G_CAPABILITY		= 2,
993 	WMI_11AG_CAPABILITY		= 3,
994 	WMI_11NA_CAPABILITY		= 4,
995 	WMI_11NG_CAPABILITY		= 5,
996 	WMI_11NAG_CAPABILITY		= 6,
997 	WMI_11AD_CAPABILITY		= 7,
998 	WMI_11N_CAPABILITY_OFFSET = WMI_11NA_CAPABILITY - WMI_11A_CAPABILITY,
999 };
1000 
1001 struct wmi_ready_event {
1002 	__le32 sw_version;
1003 	__le32 abi_version;
1004 	u8 mac[WMI_MAC_LEN];
1005 	u8 phy_capability;		/* enum wmi_phy_capability */
1006 	u8 numof_additional_mids;
1007 } __packed;
1008 
1009 /*
1010  * WMI_NOTIFY_REQ_DONE_EVENTID
1011  */
1012 struct wmi_notify_req_done_event {
1013 	__le32 status; /* beamforming status, 0: fail; 1: OK; 2: retrying */
1014 	__le64 tsf;
1015 	__le32 snr_val;
1016 	__le32 tx_tpt;
1017 	__le32 tx_goodput;
1018 	__le32 rx_goodput;
1019 	__le16 bf_mcs;
1020 	__le16 my_rx_sector;
1021 	__le16 my_tx_sector;
1022 	__le16 other_rx_sector;
1023 	__le16 other_tx_sector;
1024 	__le16 range;
1025 	u8 sqi;
1026 	u8 reserved[3];
1027 } __packed;
1028 
1029 /*
1030  * WMI_CONNECT_EVENTID
1031  */
1032 struct wmi_connect_event {
1033 	u8 channel;
1034 	u8 reserved0;
1035 	u8 bssid[WMI_MAC_LEN];
1036 	__le16 listen_interval;
1037 	__le16 beacon_interval;
1038 	u8 network_type;
1039 	u8 reserved1[3];
1040 	u8 beacon_ie_len;
1041 	u8 assoc_req_len;
1042 	u8 assoc_resp_len;
1043 	u8 cid;
1044 	u8 reserved2[3];
1045 	u8 assoc_info[0];
1046 } __packed;
1047 
1048 /*
1049  * WMI_DISCONNECT_EVENTID
1050  */
1051 enum wmi_disconnect_reason {
1052 	WMI_DIS_REASON_NO_NETWORK_AVAIL		= 1,
1053 	WMI_DIS_REASON_LOST_LINK		= 2, /* bmiss */
1054 	WMI_DIS_REASON_DISCONNECT_CMD		= 3,
1055 	WMI_DIS_REASON_BSS_DISCONNECTED		= 4,
1056 	WMI_DIS_REASON_AUTH_FAILED		= 5,
1057 	WMI_DIS_REASON_ASSOC_FAILED		= 6,
1058 	WMI_DIS_REASON_NO_RESOURCES_AVAIL	= 7,
1059 	WMI_DIS_REASON_CSERV_DISCONNECT		= 8,
1060 	WMI_DIS_REASON_INVALID_PROFILE		= 10,
1061 	WMI_DIS_REASON_DOT11H_CHANNEL_SWITCH	= 11,
1062 	WMI_DIS_REASON_PROFILE_MISMATCH		= 12,
1063 	WMI_DIS_REASON_CONNECTION_EVICTED	= 13,
1064 	WMI_DIS_REASON_IBSS_MERGE		= 14,
1065 };
1066 
1067 struct wmi_disconnect_event {
1068 	__le16 protocol_reason_status;	/* reason code, see 802.11 spec. */
1069 	u8 bssid[WMI_MAC_LEN];		/* set if known */
1070 	u8 disconnect_reason;		/* see wmi_disconnect_reason */
1071 	u8 assoc_resp_len;	/* not used */
1072 	u8 assoc_info[0];	/* not used */
1073 } __packed;
1074 
1075 /*
1076  * WMI_SCAN_COMPLETE_EVENTID
1077  */
1078 enum scan_status {
1079 	WMI_SCAN_SUCCESS	= 0,
1080 	WMI_SCAN_FAILED		= 1,
1081 	WMI_SCAN_ABORTED	= 2,
1082 	WMI_SCAN_REJECTED	= 3,
1083 };
1084 
1085 struct wmi_scan_complete_event {
1086 	__le32 status;	/* scan_status */
1087 } __packed;
1088 
1089 /*
1090  * WMI_BA_STATUS_EVENTID
1091  */
1092 enum wmi_vring_ba_status {
1093 	WMI_BA_AGREED			= 0,
1094 	WMI_BA_NON_AGREED		= 1,
1095 	/* BA_EN in middle of teardown flow */
1096 	WMI_BA_TD_WIP			= 2,
1097 	/* BA_DIS or BA_EN in middle of BA SETUP flow */
1098 	WMI_BA_SETUP_WIP		= 3,
1099 	/* BA_EN when the BA session is already active */
1100 	WMI_BA_SESSION_ACTIVE		= 4,
1101 	/* BA_DIS when the BA session is not active */
1102 	WMI_BA_SESSION_NOT_ACTIVE	= 5,
1103 };
1104 
1105 struct wmi_vring_ba_status_event {
1106 	__le16 status; /* enum wmi_vring_ba_status */
1107 	u8 reserved[2];
1108 	u8 ringid;
1109 	u8 agg_wsize;
1110 	__le16 ba_timeout;
1111 	u8 amsdu;
1112 } __packed;
1113 
1114 /*
1115  * WMI_DELBA_EVENTID
1116  */
1117 struct wmi_delba_event {
1118 	u8 cidxtid;
1119 	u8 from_initiator;
1120 	__le16 reason;
1121 } __packed;
1122 
1123 /*
1124  * WMI_VRING_CFG_DONE_EVENTID
1125  */
1126 struct wmi_vring_cfg_done_event {
1127 	u8 ringid;
1128 	u8 status;
1129 	u8 reserved[2];
1130 	__le32 tx_vring_tail_ptr;
1131 } __packed;
1132 
1133 /*
1134  * WMI_ADDBA_RESP_SENT_EVENTID
1135  */
1136 struct wmi_rcp_addba_resp_sent_event {
1137 	u8 cidxtid;
1138 	u8 reserved;
1139 	__le16 status;
1140 } __packed;
1141 
1142 /*
1143  * WMI_RCP_ADDBA_REQ_EVENTID
1144  */
1145 struct wmi_rcp_addba_req_event {
1146 	u8 cidxtid;
1147 	u8 dialog_token;
1148 	__le16 ba_param_set;	/* ieee80211_ba_parameterset as it received */
1149 	__le16 ba_timeout;
1150 	__le16 ba_seq_ctrl;	/* ieee80211_ba_seqstrl field as it received */
1151 } __packed;
1152 
1153 /*
1154  * WMI_CFG_RX_CHAIN_DONE_EVENTID
1155  */
1156 enum wmi_cfg_rx_chain_done_event_status {
1157 	WMI_CFG_RX_CHAIN_SUCCESS	= 1,
1158 };
1159 
1160 struct wmi_cfg_rx_chain_done_event {
1161 	__le32 rx_ring_tail_ptr;	/* Rx V-Ring Tail pointer */
1162 	__le32 status;
1163 } __packed;
1164 
1165 /*
1166  * WMI_WBE_LINKDOWN_EVENTID
1167  */
1168 enum wmi_wbe_link_down_event_reason {
1169 	WMI_WBE_REASON_USER_REQUEST	= 0,
1170 	WMI_WBE_REASON_RX_DISASSOC	= 1,
1171 	WMI_WBE_REASON_BAD_PHY_LINK	= 2,
1172 };
1173 
1174 struct wmi_wbe_link_down_event {
1175 	u8 cid;
1176 	u8 reserved[3];
1177 	__le32 reason;
1178 } __packed;
1179 
1180 /*
1181  * WMI_DATA_PORT_OPEN_EVENTID
1182  */
1183 struct wmi_data_port_open_event {
1184 	u8 cid;
1185 	u8 reserved[3];
1186 } __packed;
1187 
1188 /*
1189  * WMI_GET_PCP_CHANNEL_EVENTID
1190  */
1191 struct wmi_get_pcp_channel_event {
1192 	u8 channel;
1193 	u8 reserved[3];
1194 } __packed;
1195 
1196 /*
1197  * WMI_P2P_CFG_DONE_EVENTID
1198  */
1199 struct wmi_p2p_cfg_done_event {
1200 	u8 status;	/* wmi_fw_status */
1201 	u8 reserved[3];
1202 } __packed;
1203 
1204 /*
1205 * WMI_PORT_ALLOCATED_EVENTID
1206 */
1207 struct wmi_port_allocated_event {
1208 	u8 status;	/* wmi_fw_status */
1209 	u8 reserved[3];
1210 } __packed;
1211 
1212 /*
1213 * WMI_PORT_DELETED_EVENTID
1214 */
1215 struct wmi_port_deleted_event {
1216 	u8 status;	/* wmi_fw_status */
1217 	u8 reserved[3];
1218 } __packed;
1219 
1220 /*
1221  * WMI_LISTEN_STARTED_EVENTID
1222  */
1223 struct wmi_listen_started_event {
1224 	u8 status;	/* wmi_fw_status */
1225 	u8 reserved[3];
1226 } __packed;
1227 
1228 /*
1229  * WMI_SEARCH_STARTED_EVENTID
1230  */
1231 struct wmi_search_started_event {
1232 	u8 status;	/* wmi_fw_status */
1233 	u8 reserved[3];
1234 } __packed;
1235 
1236 /*
1237  * WMI_PCP_STARTED_EVENTID
1238  */
1239 struct wmi_pcp_started_event {
1240 	u8 status;	/* wmi_fw_status */
1241 	u8 reserved[3];
1242 } __packed;
1243 
1244 /*
1245  * WMI_PCP_FACTOR_EVENTID
1246  */
1247 struct wmi_pcp_factor_event {
1248 	__le32 pcp_factor;
1249 } __packed;
1250 
1251 /*
1252  * WMI_SW_TX_COMPLETE_EVENTID
1253  */
1254 enum wmi_sw_tx_status {
1255 	WMI_TX_SW_STATUS_SUCCESS		= 0,
1256 	WMI_TX_SW_STATUS_FAILED_NO_RESOURCES	= 1,
1257 	WMI_TX_SW_STATUS_FAILED_TX		= 2,
1258 };
1259 
1260 struct wmi_sw_tx_complete_event {
1261 	u8 status;	/* enum wmi_sw_tx_status */
1262 	u8 reserved[3];
1263 } __packed;
1264 
1265 /*
1266  * WMI_CORR_MEASURE_EVENTID
1267  */
1268 struct wmi_corr_measure_event {
1269 	s32 i;
1270 	s32 q;
1271 	s32 image_i;
1272 	s32 image_q;
1273 } __packed;
1274 
1275 /*
1276  * WMI_READ_RSSI_EVENTID
1277  */
1278 struct wmi_read_rssi_event {
1279 	__le32 ina_rssi_adc_dbm;
1280 } __packed;
1281 
1282 /*
1283  * WMI_GET_SSID_EVENTID
1284  */
1285 struct wmi_get_ssid_event {
1286 	__le32 ssid_len;
1287 	u8 ssid[WMI_MAX_SSID_LEN];
1288 } __packed;
1289 
1290 /*
1291  * WMI_RX_MGMT_PACKET_EVENTID
1292  */
1293 struct wmi_rx_mgmt_info {
1294 	u8 mcs;
1295 	s8 snr;
1296 	u8 range;
1297 	u8 sqi;
1298 	__le16 stype;
1299 	__le16 status;
1300 	__le32 len;
1301 	u8 qid;
1302 	u8 mid;
1303 	u8 cid;
1304 	u8 channel;	/* From Radio MNGR */
1305 } __packed;
1306 
1307 /*
1308  * WMI_TX_MGMT_PACKET_EVENTID
1309  */
1310 struct wmi_tx_mgmt_packet_event {
1311 	u8 payload[0];
1312 } __packed;
1313 
1314 struct wmi_rx_mgmt_packet_event {
1315 	struct wmi_rx_mgmt_info info;
1316 	u8 payload[0];
1317 } __packed;
1318 
1319 /*
1320  * WMI_ECHO_RSP_EVENTID
1321  */
1322 struct wmi_echo_event {
1323 	__le32 echoed_value;
1324 } __packed;
1325 
1326 /*
1327  * WMI_TEMP_SENSE_DONE_EVENTID
1328  *
1329  * Measure MAC and radio temperatures
1330  */
1331 struct wmi_temp_sense_done_event {
1332 	__le32 baseband_t1000;
1333 	__le32 rf_t1000;
1334 } __packed;
1335 
1336 #endif /* __WILOCITY_WMI_H__ */
1337