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