1  /* SPDX-License-Identifier: ISC */
2  /*
3   * Copyright (c) 2005-2011 Atheros Communications Inc.
4   * Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
5   * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
6   * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
7   */
8  
9  #ifndef _WMI_H_
10  #define _WMI_H_
11  
12  #include <linux/types.h>
13  #include <linux/ieee80211.h>
14  
15  /*
16   * This file specifies the WMI interface for the Unified Software
17   * Architecture.
18   *
19   * It includes definitions of all the commands and events. Commands are
20   * messages from the host to the target. Events and Replies are messages
21   * from the target to the host.
22   *
23   * Ownership of correctness in regards to WMI commands belongs to the host
24   * driver and the target is not required to validate parameters for value,
25   * proper range, or any other checking.
26   *
27   * Guidelines for extending this interface are below.
28   *
29   * 1. Add new WMI commands ONLY within the specified range - 0x9000 - 0x9fff
30   *
31   * 2. Use ONLY u32 type for defining member variables within WMI
32   *    command/event structures. Do not use u8, u16, bool or
33   *    enum types within these structures.
34   *
35   * 3. DO NOT define bit fields within structures. Implement bit fields
36   *    using masks if necessary. Do not use the programming language's bit
37   *    field definition.
38   *
39   * 4. Define macros for encode/decode of u8, u16 fields within
40   *    the u32 variables. Use these macros for set/get of these fields.
41   *    Try to use this to optimize the structure without bloating it with
42   *    u32 variables for every lower sized field.
43   *
44   * 5. Do not use PACK/UNPACK attributes for the structures as each member
45   *    variable is already 4-byte aligned by virtue of being a u32
46   *    type.
47   *
48   * 6. Comment each parameter part of the WMI command/event structure by
49   *    using the 2 stars at the beginning of C comment instead of one star to
50   *    enable HTML document generation using Doxygen.
51   *
52   */
53  
54  /* Control Path */
55  struct wmi_cmd_hdr {
56  	__le32 cmd_id;
57  } __packed;
58  
59  #define WMI_CMD_HDR_CMD_ID_MASK   0x00FFFFFF
60  #define WMI_CMD_HDR_CMD_ID_LSB    0
61  #define WMI_CMD_HDR_PLT_PRIV_MASK 0xFF000000
62  #define WMI_CMD_HDR_PLT_PRIV_LSB  24
63  
64  #define HTC_PROTOCOL_VERSION    0x0002
65  #define WMI_PROTOCOL_VERSION    0x0002
66  
67  /*
68   * There is no signed version of __le32, so for a temporary solution come
69   * up with our own version. The idea is from fs/ntfs/endian.h.
70   *
71   * Use a_ prefix so that it doesn't conflict if we get proper support to
72   * linux/types.h.
73   */
74  typedef __s32 __bitwise a_sle32;
75  
a_cpu_to_sle32(s32 val)76  static inline a_sle32 a_cpu_to_sle32(s32 val)
77  {
78  	return (__force a_sle32)cpu_to_le32(val);
79  }
80  
a_sle32_to_cpu(a_sle32 val)81  static inline s32 a_sle32_to_cpu(a_sle32 val)
82  {
83  	return le32_to_cpu((__force __le32)val);
84  }
85  
86  enum wmi_service {
87  	WMI_SERVICE_BEACON_OFFLOAD = 0,
88  	WMI_SERVICE_SCAN_OFFLOAD,
89  	WMI_SERVICE_ROAM_OFFLOAD,
90  	WMI_SERVICE_BCN_MISS_OFFLOAD,
91  	WMI_SERVICE_STA_PWRSAVE,
92  	WMI_SERVICE_STA_ADVANCED_PWRSAVE,
93  	WMI_SERVICE_AP_UAPSD,
94  	WMI_SERVICE_AP_DFS,
95  	WMI_SERVICE_11AC,
96  	WMI_SERVICE_BLOCKACK,
97  	WMI_SERVICE_PHYERR,
98  	WMI_SERVICE_BCN_FILTER,
99  	WMI_SERVICE_RTT,
100  	WMI_SERVICE_RATECTRL,
101  	WMI_SERVICE_WOW,
102  	WMI_SERVICE_RATECTRL_CACHE,
103  	WMI_SERVICE_IRAM_TIDS,
104  	WMI_SERVICE_ARPNS_OFFLOAD,
105  	WMI_SERVICE_NLO,
106  	WMI_SERVICE_GTK_OFFLOAD,
107  	WMI_SERVICE_SCAN_SCH,
108  	WMI_SERVICE_CSA_OFFLOAD,
109  	WMI_SERVICE_CHATTER,
110  	WMI_SERVICE_COEX_FREQAVOID,
111  	WMI_SERVICE_PACKET_POWER_SAVE,
112  	WMI_SERVICE_FORCE_FW_HANG,
113  	WMI_SERVICE_GPIO,
114  	WMI_SERVICE_STA_DTIM_PS_MODULATED_DTIM,
115  	WMI_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG,
116  	WMI_SERVICE_STA_UAPSD_VAR_AUTO_TRIG,
117  	WMI_SERVICE_STA_KEEP_ALIVE,
118  	WMI_SERVICE_TX_ENCAP,
119  	WMI_SERVICE_BURST,
120  	WMI_SERVICE_SMART_ANTENNA_SW_SUPPORT,
121  	WMI_SERVICE_SMART_ANTENNA_HW_SUPPORT,
122  	WMI_SERVICE_ROAM_SCAN_OFFLOAD,
123  	WMI_SERVICE_AP_PS_DETECT_OUT_OF_SYNC,
124  	WMI_SERVICE_EARLY_RX,
125  	WMI_SERVICE_STA_SMPS,
126  	WMI_SERVICE_FWTEST,
127  	WMI_SERVICE_STA_WMMAC,
128  	WMI_SERVICE_TDLS,
129  	WMI_SERVICE_MCC_BCN_INTERVAL_CHANGE,
130  	WMI_SERVICE_ADAPTIVE_OCS,
131  	WMI_SERVICE_BA_SSN_SUPPORT,
132  	WMI_SERVICE_FILTER_IPSEC_NATKEEPALIVE,
133  	WMI_SERVICE_WLAN_HB,
134  	WMI_SERVICE_LTE_ANT_SHARE_SUPPORT,
135  	WMI_SERVICE_BATCH_SCAN,
136  	WMI_SERVICE_QPOWER,
137  	WMI_SERVICE_PLMREQ,
138  	WMI_SERVICE_THERMAL_MGMT,
139  	WMI_SERVICE_RMC,
140  	WMI_SERVICE_MHF_OFFLOAD,
141  	WMI_SERVICE_COEX_SAR,
142  	WMI_SERVICE_BCN_TXRATE_OVERRIDE,
143  	WMI_SERVICE_NAN,
144  	WMI_SERVICE_L1SS_STAT,
145  	WMI_SERVICE_ESTIMATE_LINKSPEED,
146  	WMI_SERVICE_OBSS_SCAN,
147  	WMI_SERVICE_TDLS_OFFCHAN,
148  	WMI_SERVICE_TDLS_UAPSD_BUFFER_STA,
149  	WMI_SERVICE_TDLS_UAPSD_SLEEP_STA,
150  	WMI_SERVICE_IBSS_PWRSAVE,
151  	WMI_SERVICE_LPASS,
152  	WMI_SERVICE_EXTSCAN,
153  	WMI_SERVICE_D0WOW,
154  	WMI_SERVICE_HSOFFLOAD,
155  	WMI_SERVICE_ROAM_HO_OFFLOAD,
156  	WMI_SERVICE_RX_FULL_REORDER,
157  	WMI_SERVICE_DHCP_OFFLOAD,
158  	WMI_SERVICE_STA_RX_IPA_OFFLOAD_SUPPORT,
159  	WMI_SERVICE_MDNS_OFFLOAD,
160  	WMI_SERVICE_SAP_AUTH_OFFLOAD,
161  	WMI_SERVICE_ATF,
162  	WMI_SERVICE_COEX_GPIO,
163  	WMI_SERVICE_ENHANCED_PROXY_STA,
164  	WMI_SERVICE_TT,
165  	WMI_SERVICE_PEER_CACHING,
166  	WMI_SERVICE_AUX_SPECTRAL_INTF,
167  	WMI_SERVICE_AUX_CHAN_LOAD_INTF,
168  	WMI_SERVICE_BSS_CHANNEL_INFO_64,
169  	WMI_SERVICE_EXT_RES_CFG_SUPPORT,
170  	WMI_SERVICE_MESH_11S,
171  	WMI_SERVICE_MESH_NON_11S,
172  	WMI_SERVICE_PEER_STATS,
173  	WMI_SERVICE_RESTRT_CHNL_SUPPORT,
174  	WMI_SERVICE_PERIODIC_CHAN_STAT_SUPPORT,
175  	WMI_SERVICE_TX_MODE_PUSH_ONLY,
176  	WMI_SERVICE_TX_MODE_PUSH_PULL,
177  	WMI_SERVICE_TX_MODE_DYNAMIC,
178  	WMI_SERVICE_VDEV_RX_FILTER,
179  	WMI_SERVICE_BTCOEX,
180  	WMI_SERVICE_CHECK_CAL_VERSION,
181  	WMI_SERVICE_DBGLOG_WARN2,
182  	WMI_SERVICE_BTCOEX_DUTY_CYCLE,
183  	WMI_SERVICE_4_WIRE_COEX_SUPPORT,
184  	WMI_SERVICE_EXTENDED_NSS_SUPPORT,
185  	WMI_SERVICE_PROG_GPIO_BAND_SELECT,
186  	WMI_SERVICE_SMART_LOGGING_SUPPORT,
187  	WMI_SERVICE_TDLS_CONN_TRACKER_IN_HOST_MODE,
188  	WMI_SERVICE_TDLS_EXPLICIT_MODE_ONLY,
189  	WMI_SERVICE_MGMT_TX_WMI,
190  	WMI_SERVICE_TDLS_WIDER_BANDWIDTH,
191  	WMI_SERVICE_HTT_MGMT_TX_COMP_VALID_FLAGS,
192  	WMI_SERVICE_HOST_DFS_CHECK_SUPPORT,
193  	WMI_SERVICE_TPC_STATS_FINAL,
194  	WMI_SERVICE_RESET_CHIP,
195  	WMI_SERVICE_SPOOF_MAC_SUPPORT,
196  	WMI_SERVICE_TX_DATA_ACK_RSSI,
197  	WMI_SERVICE_VDEV_DIFFERENT_BEACON_INTERVAL_SUPPORT,
198  	WMI_SERVICE_VDEV_DISABLE_4_ADDR_SRC_LRN_SUPPORT,
199  	WMI_SERVICE_BB_TIMING_CONFIG_SUPPORT,
200  	WMI_SERVICE_THERM_THROT,
201  	WMI_SERVICE_RTT_RESPONDER_ROLE,
202  	WMI_SERVICE_PER_PACKET_SW_ENCRYPT,
203  	WMI_SERVICE_REPORT_AIRTIME,
204  	WMI_SERVICE_SYNC_DELETE_CMDS,
205  	WMI_SERVICE_TX_PWR_PER_PEER,
206  	WMI_SERVICE_SUPPORT_EXTEND_ADDRESS,
207  	WMI_SERVICE_PEER_TID_CONFIGS_SUPPORT,
208  	WMI_SERVICE_EXT_PEER_TID_CONFIGS_SUPPORT,
209  
210  	/* Remember to add the new value to wmi_service_name()! */
211  
212  	/* keep last */
213  	WMI_SERVICE_MAX,
214  };
215  
216  enum wmi_10x_service {
217  	WMI_10X_SERVICE_BEACON_OFFLOAD = 0,
218  	WMI_10X_SERVICE_SCAN_OFFLOAD,
219  	WMI_10X_SERVICE_ROAM_OFFLOAD,
220  	WMI_10X_SERVICE_BCN_MISS_OFFLOAD,
221  	WMI_10X_SERVICE_STA_PWRSAVE,
222  	WMI_10X_SERVICE_STA_ADVANCED_PWRSAVE,
223  	WMI_10X_SERVICE_AP_UAPSD,
224  	WMI_10X_SERVICE_AP_DFS,
225  	WMI_10X_SERVICE_11AC,
226  	WMI_10X_SERVICE_BLOCKACK,
227  	WMI_10X_SERVICE_PHYERR,
228  	WMI_10X_SERVICE_BCN_FILTER,
229  	WMI_10X_SERVICE_RTT,
230  	WMI_10X_SERVICE_RATECTRL,
231  	WMI_10X_SERVICE_WOW,
232  	WMI_10X_SERVICE_RATECTRL_CACHE,
233  	WMI_10X_SERVICE_IRAM_TIDS,
234  	WMI_10X_SERVICE_BURST,
235  
236  	/* introduced in 10.2 */
237  	WMI_10X_SERVICE_SMART_ANTENNA_SW_SUPPORT,
238  	WMI_10X_SERVICE_FORCE_FW_HANG,
239  	WMI_10X_SERVICE_SMART_ANTENNA_HW_SUPPORT,
240  	WMI_10X_SERVICE_ATF,
241  	WMI_10X_SERVICE_COEX_GPIO,
242  	WMI_10X_SERVICE_AUX_SPECTRAL_INTF,
243  	WMI_10X_SERVICE_AUX_CHAN_LOAD_INTF,
244  	WMI_10X_SERVICE_BSS_CHANNEL_INFO_64,
245  	WMI_10X_SERVICE_MESH,
246  	WMI_10X_SERVICE_EXT_RES_CFG_SUPPORT,
247  	WMI_10X_SERVICE_PEER_STATS,
248  	WMI_10X_SERVICE_RESET_CHIP,
249  	WMI_10X_SERVICE_HTT_MGMT_TX_COMP_VALID_FLAGS,
250  	WMI_10X_SERVICE_VDEV_BCN_RATE_CONTROL,
251  	WMI_10X_SERVICE_PER_PACKET_SW_ENCRYPT,
252  	WMI_10X_SERVICE_BB_TIMING_CONFIG_SUPPORT,
253  };
254  
255  enum wmi_main_service {
256  	WMI_MAIN_SERVICE_BEACON_OFFLOAD = 0,
257  	WMI_MAIN_SERVICE_SCAN_OFFLOAD,
258  	WMI_MAIN_SERVICE_ROAM_OFFLOAD,
259  	WMI_MAIN_SERVICE_BCN_MISS_OFFLOAD,
260  	WMI_MAIN_SERVICE_STA_PWRSAVE,
261  	WMI_MAIN_SERVICE_STA_ADVANCED_PWRSAVE,
262  	WMI_MAIN_SERVICE_AP_UAPSD,
263  	WMI_MAIN_SERVICE_AP_DFS,
264  	WMI_MAIN_SERVICE_11AC,
265  	WMI_MAIN_SERVICE_BLOCKACK,
266  	WMI_MAIN_SERVICE_PHYERR,
267  	WMI_MAIN_SERVICE_BCN_FILTER,
268  	WMI_MAIN_SERVICE_RTT,
269  	WMI_MAIN_SERVICE_RATECTRL,
270  	WMI_MAIN_SERVICE_WOW,
271  	WMI_MAIN_SERVICE_RATECTRL_CACHE,
272  	WMI_MAIN_SERVICE_IRAM_TIDS,
273  	WMI_MAIN_SERVICE_ARPNS_OFFLOAD,
274  	WMI_MAIN_SERVICE_NLO,
275  	WMI_MAIN_SERVICE_GTK_OFFLOAD,
276  	WMI_MAIN_SERVICE_SCAN_SCH,
277  	WMI_MAIN_SERVICE_CSA_OFFLOAD,
278  	WMI_MAIN_SERVICE_CHATTER,
279  	WMI_MAIN_SERVICE_COEX_FREQAVOID,
280  	WMI_MAIN_SERVICE_PACKET_POWER_SAVE,
281  	WMI_MAIN_SERVICE_FORCE_FW_HANG,
282  	WMI_MAIN_SERVICE_GPIO,
283  	WMI_MAIN_SERVICE_STA_DTIM_PS_MODULATED_DTIM,
284  	WMI_MAIN_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG,
285  	WMI_MAIN_SERVICE_STA_UAPSD_VAR_AUTO_TRIG,
286  	WMI_MAIN_SERVICE_STA_KEEP_ALIVE,
287  	WMI_MAIN_SERVICE_TX_ENCAP,
288  };
289  
290  enum wmi_10_4_service {
291  	WMI_10_4_SERVICE_BEACON_OFFLOAD = 0,
292  	WMI_10_4_SERVICE_SCAN_OFFLOAD,
293  	WMI_10_4_SERVICE_ROAM_OFFLOAD,
294  	WMI_10_4_SERVICE_BCN_MISS_OFFLOAD,
295  	WMI_10_4_SERVICE_STA_PWRSAVE,
296  	WMI_10_4_SERVICE_STA_ADVANCED_PWRSAVE,
297  	WMI_10_4_SERVICE_AP_UAPSD,
298  	WMI_10_4_SERVICE_AP_DFS,
299  	WMI_10_4_SERVICE_11AC,
300  	WMI_10_4_SERVICE_BLOCKACK,
301  	WMI_10_4_SERVICE_PHYERR,
302  	WMI_10_4_SERVICE_BCN_FILTER,
303  	WMI_10_4_SERVICE_RTT,
304  	WMI_10_4_SERVICE_RATECTRL,
305  	WMI_10_4_SERVICE_WOW,
306  	WMI_10_4_SERVICE_RATECTRL_CACHE,
307  	WMI_10_4_SERVICE_IRAM_TIDS,
308  	WMI_10_4_SERVICE_BURST,
309  	WMI_10_4_SERVICE_SMART_ANTENNA_SW_SUPPORT,
310  	WMI_10_4_SERVICE_GTK_OFFLOAD,
311  	WMI_10_4_SERVICE_SCAN_SCH,
312  	WMI_10_4_SERVICE_CSA_OFFLOAD,
313  	WMI_10_4_SERVICE_CHATTER,
314  	WMI_10_4_SERVICE_COEX_FREQAVOID,
315  	WMI_10_4_SERVICE_PACKET_POWER_SAVE,
316  	WMI_10_4_SERVICE_FORCE_FW_HANG,
317  	WMI_10_4_SERVICE_SMART_ANTENNA_HW_SUPPORT,
318  	WMI_10_4_SERVICE_GPIO,
319  	WMI_10_4_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG,
320  	WMI_10_4_SERVICE_STA_UAPSD_VAR_AUTO_TRIG,
321  	WMI_10_4_SERVICE_STA_KEEP_ALIVE,
322  	WMI_10_4_SERVICE_TX_ENCAP,
323  	WMI_10_4_SERVICE_AP_PS_DETECT_OUT_OF_SYNC,
324  	WMI_10_4_SERVICE_EARLY_RX,
325  	WMI_10_4_SERVICE_ENHANCED_PROXY_STA,
326  	WMI_10_4_SERVICE_TT,
327  	WMI_10_4_SERVICE_ATF,
328  	WMI_10_4_SERVICE_PEER_CACHING,
329  	WMI_10_4_SERVICE_COEX_GPIO,
330  	WMI_10_4_SERVICE_AUX_SPECTRAL_INTF,
331  	WMI_10_4_SERVICE_AUX_CHAN_LOAD_INTF,
332  	WMI_10_4_SERVICE_BSS_CHANNEL_INFO_64,
333  	WMI_10_4_SERVICE_EXT_RES_CFG_SUPPORT,
334  	WMI_10_4_SERVICE_MESH_NON_11S,
335  	WMI_10_4_SERVICE_RESTRT_CHNL_SUPPORT,
336  	WMI_10_4_SERVICE_PEER_STATS,
337  	WMI_10_4_SERVICE_MESH_11S,
338  	WMI_10_4_SERVICE_PERIODIC_CHAN_STAT_SUPPORT,
339  	WMI_10_4_SERVICE_TX_MODE_PUSH_ONLY,
340  	WMI_10_4_SERVICE_TX_MODE_PUSH_PULL,
341  	WMI_10_4_SERVICE_TX_MODE_DYNAMIC,
342  	WMI_10_4_SERVICE_VDEV_RX_FILTER,
343  	WMI_10_4_SERVICE_BTCOEX,
344  	WMI_10_4_SERVICE_CHECK_CAL_VERSION,
345  	WMI_10_4_SERVICE_DBGLOG_WARN2,
346  	WMI_10_4_SERVICE_BTCOEX_DUTY_CYCLE,
347  	WMI_10_4_SERVICE_4_WIRE_COEX_SUPPORT,
348  	WMI_10_4_SERVICE_EXTENDED_NSS_SUPPORT,
349  	WMI_10_4_SERVICE_PROG_GPIO_BAND_SELECT,
350  	WMI_10_4_SERVICE_SMART_LOGGING_SUPPORT,
351  	WMI_10_4_SERVICE_TDLS,
352  	WMI_10_4_SERVICE_TDLS_OFFCHAN,
353  	WMI_10_4_SERVICE_TDLS_UAPSD_BUFFER_STA,
354  	WMI_10_4_SERVICE_TDLS_UAPSD_SLEEP_STA,
355  	WMI_10_4_SERVICE_TDLS_CONN_TRACKER_IN_HOST_MODE,
356  	WMI_10_4_SERVICE_TDLS_EXPLICIT_MODE_ONLY,
357  	WMI_10_4_SERVICE_TDLS_WIDER_BANDWIDTH,
358  	WMI_10_4_SERVICE_HTT_MGMT_TX_COMP_VALID_FLAGS,
359  	WMI_10_4_SERVICE_HOST_DFS_CHECK_SUPPORT,
360  	WMI_10_4_SERVICE_TPC_STATS_FINAL,
361  	WMI_10_4_SERVICE_CFR_CAPTURE_SUPPORT,
362  	WMI_10_4_SERVICE_TX_DATA_ACK_RSSI,
363  	WMI_10_4_SERVICE_CFR_CAPTURE_IND_MSG_TYPE_LEGACY,
364  	WMI_10_4_SERVICE_PER_PACKET_SW_ENCRYPT,
365  	WMI_10_4_SERVICE_PEER_TID_CONFIGS_SUPPORT,
366  	WMI_10_4_SERVICE_VDEV_BCN_RATE_CONTROL,
367  	WMI_10_4_SERVICE_VDEV_DIFFERENT_BEACON_INTERVAL_SUPPORT,
368  	WMI_10_4_SERVICE_HTT_ASSERT_TRIGGER_SUPPORT,
369  	WMI_10_4_SERVICE_VDEV_FILTER_NEIGHBOR_RX_PACKETS,
370  	WMI_10_4_SERVICE_VDEV_DISABLE_4_ADDR_SRC_LRN_SUPPORT,
371  	WMI_10_4_SERVICE_PEER_CHWIDTH_CHANGE,
372  	WMI_10_4_SERVICE_RX_FILTER_OUT_COUNT,
373  	WMI_10_4_SERVICE_RTT_RESPONDER_ROLE,
374  	WMI_10_4_SERVICE_EXT_PEER_TID_CONFIGS_SUPPORT,
375  	WMI_10_4_SERVICE_REPORT_AIRTIME,
376  	WMI_10_4_SERVICE_TX_PWR_PER_PEER,
377  	WMI_10_4_SERVICE_FETCH_PEER_TX_PN,
378  	WMI_10_4_SERVICE_MULTIPLE_VDEV_RESTART,
379  	WMI_10_4_SERVICE_ENHANCED_RADIO_COUNTERS,
380  	WMI_10_4_SERVICE_QINQ_SUPPORT,
381  	WMI_10_4_SERVICE_RESET_CHIP,
382  };
383  
wmi_service_name(enum wmi_service service_id)384  static inline char *wmi_service_name(enum wmi_service service_id)
385  {
386  #define SVCSTR(x) case x: return #x
387  
388  	switch (service_id) {
389  	SVCSTR(WMI_SERVICE_BEACON_OFFLOAD);
390  	SVCSTR(WMI_SERVICE_SCAN_OFFLOAD);
391  	SVCSTR(WMI_SERVICE_ROAM_OFFLOAD);
392  	SVCSTR(WMI_SERVICE_BCN_MISS_OFFLOAD);
393  	SVCSTR(WMI_SERVICE_STA_PWRSAVE);
394  	SVCSTR(WMI_SERVICE_STA_ADVANCED_PWRSAVE);
395  	SVCSTR(WMI_SERVICE_AP_UAPSD);
396  	SVCSTR(WMI_SERVICE_AP_DFS);
397  	SVCSTR(WMI_SERVICE_11AC);
398  	SVCSTR(WMI_SERVICE_BLOCKACK);
399  	SVCSTR(WMI_SERVICE_PHYERR);
400  	SVCSTR(WMI_SERVICE_BCN_FILTER);
401  	SVCSTR(WMI_SERVICE_RTT);
402  	SVCSTR(WMI_SERVICE_RATECTRL);
403  	SVCSTR(WMI_SERVICE_WOW);
404  	SVCSTR(WMI_SERVICE_RATECTRL_CACHE);
405  	SVCSTR(WMI_SERVICE_IRAM_TIDS);
406  	SVCSTR(WMI_SERVICE_ARPNS_OFFLOAD);
407  	SVCSTR(WMI_SERVICE_NLO);
408  	SVCSTR(WMI_SERVICE_GTK_OFFLOAD);
409  	SVCSTR(WMI_SERVICE_SCAN_SCH);
410  	SVCSTR(WMI_SERVICE_CSA_OFFLOAD);
411  	SVCSTR(WMI_SERVICE_CHATTER);
412  	SVCSTR(WMI_SERVICE_COEX_FREQAVOID);
413  	SVCSTR(WMI_SERVICE_PACKET_POWER_SAVE);
414  	SVCSTR(WMI_SERVICE_FORCE_FW_HANG);
415  	SVCSTR(WMI_SERVICE_GPIO);
416  	SVCSTR(WMI_SERVICE_STA_DTIM_PS_MODULATED_DTIM);
417  	SVCSTR(WMI_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG);
418  	SVCSTR(WMI_SERVICE_STA_UAPSD_VAR_AUTO_TRIG);
419  	SVCSTR(WMI_SERVICE_STA_KEEP_ALIVE);
420  	SVCSTR(WMI_SERVICE_TX_ENCAP);
421  	SVCSTR(WMI_SERVICE_BURST);
422  	SVCSTR(WMI_SERVICE_SMART_ANTENNA_SW_SUPPORT);
423  	SVCSTR(WMI_SERVICE_SMART_ANTENNA_HW_SUPPORT);
424  	SVCSTR(WMI_SERVICE_ROAM_SCAN_OFFLOAD);
425  	SVCSTR(WMI_SERVICE_AP_PS_DETECT_OUT_OF_SYNC);
426  	SVCSTR(WMI_SERVICE_EARLY_RX);
427  	SVCSTR(WMI_SERVICE_STA_SMPS);
428  	SVCSTR(WMI_SERVICE_FWTEST);
429  	SVCSTR(WMI_SERVICE_STA_WMMAC);
430  	SVCSTR(WMI_SERVICE_TDLS);
431  	SVCSTR(WMI_SERVICE_MCC_BCN_INTERVAL_CHANGE);
432  	SVCSTR(WMI_SERVICE_ADAPTIVE_OCS);
433  	SVCSTR(WMI_SERVICE_BA_SSN_SUPPORT);
434  	SVCSTR(WMI_SERVICE_FILTER_IPSEC_NATKEEPALIVE);
435  	SVCSTR(WMI_SERVICE_WLAN_HB);
436  	SVCSTR(WMI_SERVICE_LTE_ANT_SHARE_SUPPORT);
437  	SVCSTR(WMI_SERVICE_BATCH_SCAN);
438  	SVCSTR(WMI_SERVICE_QPOWER);
439  	SVCSTR(WMI_SERVICE_PLMREQ);
440  	SVCSTR(WMI_SERVICE_THERMAL_MGMT);
441  	SVCSTR(WMI_SERVICE_RMC);
442  	SVCSTR(WMI_SERVICE_MHF_OFFLOAD);
443  	SVCSTR(WMI_SERVICE_COEX_SAR);
444  	SVCSTR(WMI_SERVICE_BCN_TXRATE_OVERRIDE);
445  	SVCSTR(WMI_SERVICE_NAN);
446  	SVCSTR(WMI_SERVICE_L1SS_STAT);
447  	SVCSTR(WMI_SERVICE_ESTIMATE_LINKSPEED);
448  	SVCSTR(WMI_SERVICE_OBSS_SCAN);
449  	SVCSTR(WMI_SERVICE_TDLS_OFFCHAN);
450  	SVCSTR(WMI_SERVICE_TDLS_UAPSD_BUFFER_STA);
451  	SVCSTR(WMI_SERVICE_TDLS_UAPSD_SLEEP_STA);
452  	SVCSTR(WMI_SERVICE_IBSS_PWRSAVE);
453  	SVCSTR(WMI_SERVICE_LPASS);
454  	SVCSTR(WMI_SERVICE_EXTSCAN);
455  	SVCSTR(WMI_SERVICE_D0WOW);
456  	SVCSTR(WMI_SERVICE_HSOFFLOAD);
457  	SVCSTR(WMI_SERVICE_ROAM_HO_OFFLOAD);
458  	SVCSTR(WMI_SERVICE_RX_FULL_REORDER);
459  	SVCSTR(WMI_SERVICE_DHCP_OFFLOAD);
460  	SVCSTR(WMI_SERVICE_STA_RX_IPA_OFFLOAD_SUPPORT);
461  	SVCSTR(WMI_SERVICE_MDNS_OFFLOAD);
462  	SVCSTR(WMI_SERVICE_SAP_AUTH_OFFLOAD);
463  	SVCSTR(WMI_SERVICE_ATF);
464  	SVCSTR(WMI_SERVICE_COEX_GPIO);
465  	SVCSTR(WMI_SERVICE_ENHANCED_PROXY_STA);
466  	SVCSTR(WMI_SERVICE_TT);
467  	SVCSTR(WMI_SERVICE_PEER_CACHING);
468  	SVCSTR(WMI_SERVICE_AUX_SPECTRAL_INTF);
469  	SVCSTR(WMI_SERVICE_AUX_CHAN_LOAD_INTF);
470  	SVCSTR(WMI_SERVICE_BSS_CHANNEL_INFO_64);
471  	SVCSTR(WMI_SERVICE_EXT_RES_CFG_SUPPORT);
472  	SVCSTR(WMI_SERVICE_MESH_11S);
473  	SVCSTR(WMI_SERVICE_MESH_NON_11S);
474  	SVCSTR(WMI_SERVICE_PEER_STATS);
475  	SVCSTR(WMI_SERVICE_RESTRT_CHNL_SUPPORT);
476  	SVCSTR(WMI_SERVICE_PERIODIC_CHAN_STAT_SUPPORT);
477  	SVCSTR(WMI_SERVICE_TX_MODE_PUSH_ONLY);
478  	SVCSTR(WMI_SERVICE_TX_MODE_PUSH_PULL);
479  	SVCSTR(WMI_SERVICE_TX_MODE_DYNAMIC);
480  	SVCSTR(WMI_SERVICE_VDEV_RX_FILTER);
481  	SVCSTR(WMI_SERVICE_BTCOEX);
482  	SVCSTR(WMI_SERVICE_CHECK_CAL_VERSION);
483  	SVCSTR(WMI_SERVICE_DBGLOG_WARN2);
484  	SVCSTR(WMI_SERVICE_BTCOEX_DUTY_CYCLE);
485  	SVCSTR(WMI_SERVICE_4_WIRE_COEX_SUPPORT);
486  	SVCSTR(WMI_SERVICE_EXTENDED_NSS_SUPPORT);
487  	SVCSTR(WMI_SERVICE_PROG_GPIO_BAND_SELECT);
488  	SVCSTR(WMI_SERVICE_SMART_LOGGING_SUPPORT);
489  	SVCSTR(WMI_SERVICE_TDLS_CONN_TRACKER_IN_HOST_MODE);
490  	SVCSTR(WMI_SERVICE_TDLS_EXPLICIT_MODE_ONLY);
491  	SVCSTR(WMI_SERVICE_MGMT_TX_WMI);
492  	SVCSTR(WMI_SERVICE_TDLS_WIDER_BANDWIDTH);
493  	SVCSTR(WMI_SERVICE_HTT_MGMT_TX_COMP_VALID_FLAGS);
494  	SVCSTR(WMI_SERVICE_HOST_DFS_CHECK_SUPPORT);
495  	SVCSTR(WMI_SERVICE_TPC_STATS_FINAL);
496  	SVCSTR(WMI_SERVICE_RESET_CHIP);
497  	SVCSTR(WMI_SERVICE_SPOOF_MAC_SUPPORT);
498  	SVCSTR(WMI_SERVICE_TX_DATA_ACK_RSSI);
499  	SVCSTR(WMI_SERVICE_VDEV_DIFFERENT_BEACON_INTERVAL_SUPPORT);
500  	SVCSTR(WMI_SERVICE_VDEV_DISABLE_4_ADDR_SRC_LRN_SUPPORT);
501  	SVCSTR(WMI_SERVICE_BB_TIMING_CONFIG_SUPPORT);
502  	SVCSTR(WMI_SERVICE_THERM_THROT);
503  	SVCSTR(WMI_SERVICE_RTT_RESPONDER_ROLE);
504  	SVCSTR(WMI_SERVICE_PER_PACKET_SW_ENCRYPT);
505  	SVCSTR(WMI_SERVICE_REPORT_AIRTIME);
506  	SVCSTR(WMI_SERVICE_SYNC_DELETE_CMDS);
507  	SVCSTR(WMI_SERVICE_TX_PWR_PER_PEER);
508  	SVCSTR(WMI_SERVICE_SUPPORT_EXTEND_ADDRESS);
509  	SVCSTR(WMI_SERVICE_PEER_TID_CONFIGS_SUPPORT);
510  	SVCSTR(WMI_SERVICE_EXT_PEER_TID_CONFIGS_SUPPORT);
511  
512  	case WMI_SERVICE_MAX:
513  		return NULL;
514  	}
515  
516  #undef SVCSTR
517  
518  	return NULL;
519  }
520  
521  #define WMI_SERVICE_IS_ENABLED(wmi_svc_bmap, svc_id, len) \
522  	((svc_id) < (len) && \
523  	 __le32_to_cpu((wmi_svc_bmap)[(svc_id) / (sizeof(u32))]) & \
524  	 BIT((svc_id) % (sizeof(u32))))
525  
526  /* This extension is required to accommodate new services, current limit
527   * for wmi_services is 64 as target is using only 4-bits of each 32-bit
528   * wmi_service word. Extending this to make use of remaining unused bits
529   * for new services.
530   */
531  #define WMI_EXT_SERVICE_IS_ENABLED(wmi_svc_bmap, svc_id, len) \
532  	((svc_id) >= (len) && \
533  	__le32_to_cpu((wmi_svc_bmap)[((svc_id) - (len)) / 28]) & \
534  	BIT(((((svc_id) - (len)) % 28) & 0x1f) + 4))
535  
536  #define SVCMAP(x, y, len) \
537  	do { \
538  		if ((WMI_SERVICE_IS_ENABLED((in), (x), (len))) || \
539  		    (WMI_EXT_SERVICE_IS_ENABLED((in), (x), (len)))) \
540  			__set_bit(y, out); \
541  	} while (0)
542  
wmi_10x_svc_map(const __le32 * in,unsigned long * out,size_t len)543  static inline void wmi_10x_svc_map(const __le32 *in, unsigned long *out,
544  				   size_t len)
545  {
546  	SVCMAP(WMI_10X_SERVICE_BEACON_OFFLOAD,
547  	       WMI_SERVICE_BEACON_OFFLOAD, len);
548  	SVCMAP(WMI_10X_SERVICE_SCAN_OFFLOAD,
549  	       WMI_SERVICE_SCAN_OFFLOAD, len);
550  	SVCMAP(WMI_10X_SERVICE_ROAM_OFFLOAD,
551  	       WMI_SERVICE_ROAM_OFFLOAD, len);
552  	SVCMAP(WMI_10X_SERVICE_BCN_MISS_OFFLOAD,
553  	       WMI_SERVICE_BCN_MISS_OFFLOAD, len);
554  	SVCMAP(WMI_10X_SERVICE_STA_PWRSAVE,
555  	       WMI_SERVICE_STA_PWRSAVE, len);
556  	SVCMAP(WMI_10X_SERVICE_STA_ADVANCED_PWRSAVE,
557  	       WMI_SERVICE_STA_ADVANCED_PWRSAVE, len);
558  	SVCMAP(WMI_10X_SERVICE_AP_UAPSD,
559  	       WMI_SERVICE_AP_UAPSD, len);
560  	SVCMAP(WMI_10X_SERVICE_AP_DFS,
561  	       WMI_SERVICE_AP_DFS, len);
562  	SVCMAP(WMI_10X_SERVICE_11AC,
563  	       WMI_SERVICE_11AC, len);
564  	SVCMAP(WMI_10X_SERVICE_BLOCKACK,
565  	       WMI_SERVICE_BLOCKACK, len);
566  	SVCMAP(WMI_10X_SERVICE_PHYERR,
567  	       WMI_SERVICE_PHYERR, len);
568  	SVCMAP(WMI_10X_SERVICE_BCN_FILTER,
569  	       WMI_SERVICE_BCN_FILTER, len);
570  	SVCMAP(WMI_10X_SERVICE_RTT,
571  	       WMI_SERVICE_RTT, len);
572  	SVCMAP(WMI_10X_SERVICE_RATECTRL,
573  	       WMI_SERVICE_RATECTRL, len);
574  	SVCMAP(WMI_10X_SERVICE_WOW,
575  	       WMI_SERVICE_WOW, len);
576  	SVCMAP(WMI_10X_SERVICE_RATECTRL_CACHE,
577  	       WMI_SERVICE_RATECTRL_CACHE, len);
578  	SVCMAP(WMI_10X_SERVICE_IRAM_TIDS,
579  	       WMI_SERVICE_IRAM_TIDS, len);
580  	SVCMAP(WMI_10X_SERVICE_BURST,
581  	       WMI_SERVICE_BURST, len);
582  	SVCMAP(WMI_10X_SERVICE_SMART_ANTENNA_SW_SUPPORT,
583  	       WMI_SERVICE_SMART_ANTENNA_SW_SUPPORT, len);
584  	SVCMAP(WMI_10X_SERVICE_FORCE_FW_HANG,
585  	       WMI_SERVICE_FORCE_FW_HANG, len);
586  	SVCMAP(WMI_10X_SERVICE_SMART_ANTENNA_HW_SUPPORT,
587  	       WMI_SERVICE_SMART_ANTENNA_HW_SUPPORT, len);
588  	SVCMAP(WMI_10X_SERVICE_ATF,
589  	       WMI_SERVICE_ATF, len);
590  	SVCMAP(WMI_10X_SERVICE_COEX_GPIO,
591  	       WMI_SERVICE_COEX_GPIO, len);
592  	SVCMAP(WMI_10X_SERVICE_AUX_SPECTRAL_INTF,
593  	       WMI_SERVICE_AUX_SPECTRAL_INTF, len);
594  	SVCMAP(WMI_10X_SERVICE_AUX_CHAN_LOAD_INTF,
595  	       WMI_SERVICE_AUX_CHAN_LOAD_INTF, len);
596  	SVCMAP(WMI_10X_SERVICE_BSS_CHANNEL_INFO_64,
597  	       WMI_SERVICE_BSS_CHANNEL_INFO_64, len);
598  	SVCMAP(WMI_10X_SERVICE_MESH,
599  	       WMI_SERVICE_MESH_11S, len);
600  	SVCMAP(WMI_10X_SERVICE_EXT_RES_CFG_SUPPORT,
601  	       WMI_SERVICE_EXT_RES_CFG_SUPPORT, len);
602  	SVCMAP(WMI_10X_SERVICE_PEER_STATS,
603  	       WMI_SERVICE_PEER_STATS, len);
604  	SVCMAP(WMI_10X_SERVICE_RESET_CHIP,
605  	       WMI_SERVICE_RESET_CHIP, len);
606  	SVCMAP(WMI_10X_SERVICE_HTT_MGMT_TX_COMP_VALID_FLAGS,
607  	       WMI_SERVICE_HTT_MGMT_TX_COMP_VALID_FLAGS, len);
608  	SVCMAP(WMI_10X_SERVICE_BB_TIMING_CONFIG_SUPPORT,
609  	       WMI_SERVICE_BB_TIMING_CONFIG_SUPPORT, len);
610  	SVCMAP(WMI_10X_SERVICE_PER_PACKET_SW_ENCRYPT,
611  	       WMI_SERVICE_PER_PACKET_SW_ENCRYPT, len);
612  }
613  
wmi_main_svc_map(const __le32 * in,unsigned long * out,size_t len)614  static inline void wmi_main_svc_map(const __le32 *in, unsigned long *out,
615  				    size_t len)
616  {
617  	SVCMAP(WMI_MAIN_SERVICE_BEACON_OFFLOAD,
618  	       WMI_SERVICE_BEACON_OFFLOAD, len);
619  	SVCMAP(WMI_MAIN_SERVICE_SCAN_OFFLOAD,
620  	       WMI_SERVICE_SCAN_OFFLOAD, len);
621  	SVCMAP(WMI_MAIN_SERVICE_ROAM_OFFLOAD,
622  	       WMI_SERVICE_ROAM_OFFLOAD, len);
623  	SVCMAP(WMI_MAIN_SERVICE_BCN_MISS_OFFLOAD,
624  	       WMI_SERVICE_BCN_MISS_OFFLOAD, len);
625  	SVCMAP(WMI_MAIN_SERVICE_STA_PWRSAVE,
626  	       WMI_SERVICE_STA_PWRSAVE, len);
627  	SVCMAP(WMI_MAIN_SERVICE_STA_ADVANCED_PWRSAVE,
628  	       WMI_SERVICE_STA_ADVANCED_PWRSAVE, len);
629  	SVCMAP(WMI_MAIN_SERVICE_AP_UAPSD,
630  	       WMI_SERVICE_AP_UAPSD, len);
631  	SVCMAP(WMI_MAIN_SERVICE_AP_DFS,
632  	       WMI_SERVICE_AP_DFS, len);
633  	SVCMAP(WMI_MAIN_SERVICE_11AC,
634  	       WMI_SERVICE_11AC, len);
635  	SVCMAP(WMI_MAIN_SERVICE_BLOCKACK,
636  	       WMI_SERVICE_BLOCKACK, len);
637  	SVCMAP(WMI_MAIN_SERVICE_PHYERR,
638  	       WMI_SERVICE_PHYERR, len);
639  	SVCMAP(WMI_MAIN_SERVICE_BCN_FILTER,
640  	       WMI_SERVICE_BCN_FILTER, len);
641  	SVCMAP(WMI_MAIN_SERVICE_RTT,
642  	       WMI_SERVICE_RTT, len);
643  	SVCMAP(WMI_MAIN_SERVICE_RATECTRL,
644  	       WMI_SERVICE_RATECTRL, len);
645  	SVCMAP(WMI_MAIN_SERVICE_WOW,
646  	       WMI_SERVICE_WOW, len);
647  	SVCMAP(WMI_MAIN_SERVICE_RATECTRL_CACHE,
648  	       WMI_SERVICE_RATECTRL_CACHE, len);
649  	SVCMAP(WMI_MAIN_SERVICE_IRAM_TIDS,
650  	       WMI_SERVICE_IRAM_TIDS, len);
651  	SVCMAP(WMI_MAIN_SERVICE_ARPNS_OFFLOAD,
652  	       WMI_SERVICE_ARPNS_OFFLOAD, len);
653  	SVCMAP(WMI_MAIN_SERVICE_NLO,
654  	       WMI_SERVICE_NLO, len);
655  	SVCMAP(WMI_MAIN_SERVICE_GTK_OFFLOAD,
656  	       WMI_SERVICE_GTK_OFFLOAD, len);
657  	SVCMAP(WMI_MAIN_SERVICE_SCAN_SCH,
658  	       WMI_SERVICE_SCAN_SCH, len);
659  	SVCMAP(WMI_MAIN_SERVICE_CSA_OFFLOAD,
660  	       WMI_SERVICE_CSA_OFFLOAD, len);
661  	SVCMAP(WMI_MAIN_SERVICE_CHATTER,
662  	       WMI_SERVICE_CHATTER, len);
663  	SVCMAP(WMI_MAIN_SERVICE_COEX_FREQAVOID,
664  	       WMI_SERVICE_COEX_FREQAVOID, len);
665  	SVCMAP(WMI_MAIN_SERVICE_PACKET_POWER_SAVE,
666  	       WMI_SERVICE_PACKET_POWER_SAVE, len);
667  	SVCMAP(WMI_MAIN_SERVICE_FORCE_FW_HANG,
668  	       WMI_SERVICE_FORCE_FW_HANG, len);
669  	SVCMAP(WMI_MAIN_SERVICE_GPIO,
670  	       WMI_SERVICE_GPIO, len);
671  	SVCMAP(WMI_MAIN_SERVICE_STA_DTIM_PS_MODULATED_DTIM,
672  	       WMI_SERVICE_STA_DTIM_PS_MODULATED_DTIM, len);
673  	SVCMAP(WMI_MAIN_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG,
674  	       WMI_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG, len);
675  	SVCMAP(WMI_MAIN_SERVICE_STA_UAPSD_VAR_AUTO_TRIG,
676  	       WMI_SERVICE_STA_UAPSD_VAR_AUTO_TRIG, len);
677  	SVCMAP(WMI_MAIN_SERVICE_STA_KEEP_ALIVE,
678  	       WMI_SERVICE_STA_KEEP_ALIVE, len);
679  	SVCMAP(WMI_MAIN_SERVICE_TX_ENCAP,
680  	       WMI_SERVICE_TX_ENCAP, len);
681  }
682  
wmi_10_4_svc_map(const __le32 * in,unsigned long * out,size_t len)683  static inline void wmi_10_4_svc_map(const __le32 *in, unsigned long *out,
684  				    size_t len)
685  {
686  	SVCMAP(WMI_10_4_SERVICE_BEACON_OFFLOAD,
687  	       WMI_SERVICE_BEACON_OFFLOAD, len);
688  	SVCMAP(WMI_10_4_SERVICE_SCAN_OFFLOAD,
689  	       WMI_SERVICE_SCAN_OFFLOAD, len);
690  	SVCMAP(WMI_10_4_SERVICE_ROAM_OFFLOAD,
691  	       WMI_SERVICE_ROAM_OFFLOAD, len);
692  	SVCMAP(WMI_10_4_SERVICE_BCN_MISS_OFFLOAD,
693  	       WMI_SERVICE_BCN_MISS_OFFLOAD, len);
694  	SVCMAP(WMI_10_4_SERVICE_STA_PWRSAVE,
695  	       WMI_SERVICE_STA_PWRSAVE, len);
696  	SVCMAP(WMI_10_4_SERVICE_STA_ADVANCED_PWRSAVE,
697  	       WMI_SERVICE_STA_ADVANCED_PWRSAVE, len);
698  	SVCMAP(WMI_10_4_SERVICE_AP_UAPSD,
699  	       WMI_SERVICE_AP_UAPSD, len);
700  	SVCMAP(WMI_10_4_SERVICE_AP_DFS,
701  	       WMI_SERVICE_AP_DFS, len);
702  	SVCMAP(WMI_10_4_SERVICE_11AC,
703  	       WMI_SERVICE_11AC, len);
704  	SVCMAP(WMI_10_4_SERVICE_BLOCKACK,
705  	       WMI_SERVICE_BLOCKACK, len);
706  	SVCMAP(WMI_10_4_SERVICE_PHYERR,
707  	       WMI_SERVICE_PHYERR, len);
708  	SVCMAP(WMI_10_4_SERVICE_BCN_FILTER,
709  	       WMI_SERVICE_BCN_FILTER, len);
710  	SVCMAP(WMI_10_4_SERVICE_RTT,
711  	       WMI_SERVICE_RTT, len);
712  	SVCMAP(WMI_10_4_SERVICE_RATECTRL,
713  	       WMI_SERVICE_RATECTRL, len);
714  	SVCMAP(WMI_10_4_SERVICE_WOW,
715  	       WMI_SERVICE_WOW, len);
716  	SVCMAP(WMI_10_4_SERVICE_RATECTRL_CACHE,
717  	       WMI_SERVICE_RATECTRL_CACHE, len);
718  	SVCMAP(WMI_10_4_SERVICE_IRAM_TIDS,
719  	       WMI_SERVICE_IRAM_TIDS, len);
720  	SVCMAP(WMI_10_4_SERVICE_BURST,
721  	       WMI_SERVICE_BURST, len);
722  	SVCMAP(WMI_10_4_SERVICE_SMART_ANTENNA_SW_SUPPORT,
723  	       WMI_SERVICE_SMART_ANTENNA_SW_SUPPORT, len);
724  	SVCMAP(WMI_10_4_SERVICE_GTK_OFFLOAD,
725  	       WMI_SERVICE_GTK_OFFLOAD, len);
726  	SVCMAP(WMI_10_4_SERVICE_SCAN_SCH,
727  	       WMI_SERVICE_SCAN_SCH, len);
728  	SVCMAP(WMI_10_4_SERVICE_CSA_OFFLOAD,
729  	       WMI_SERVICE_CSA_OFFLOAD, len);
730  	SVCMAP(WMI_10_4_SERVICE_CHATTER,
731  	       WMI_SERVICE_CHATTER, len);
732  	SVCMAP(WMI_10_4_SERVICE_COEX_FREQAVOID,
733  	       WMI_SERVICE_COEX_FREQAVOID, len);
734  	SVCMAP(WMI_10_4_SERVICE_PACKET_POWER_SAVE,
735  	       WMI_SERVICE_PACKET_POWER_SAVE, len);
736  	SVCMAP(WMI_10_4_SERVICE_FORCE_FW_HANG,
737  	       WMI_SERVICE_FORCE_FW_HANG, len);
738  	SVCMAP(WMI_10_4_SERVICE_SMART_ANTENNA_HW_SUPPORT,
739  	       WMI_SERVICE_SMART_ANTENNA_HW_SUPPORT, len);
740  	SVCMAP(WMI_10_4_SERVICE_GPIO,
741  	       WMI_SERVICE_GPIO, len);
742  	SVCMAP(WMI_10_4_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG,
743  	       WMI_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG, len);
744  	SVCMAP(WMI_10_4_SERVICE_STA_UAPSD_VAR_AUTO_TRIG,
745  	       WMI_SERVICE_STA_UAPSD_VAR_AUTO_TRIG, len);
746  	SVCMAP(WMI_10_4_SERVICE_STA_KEEP_ALIVE,
747  	       WMI_SERVICE_STA_KEEP_ALIVE, len);
748  	SVCMAP(WMI_10_4_SERVICE_TX_ENCAP,
749  	       WMI_SERVICE_TX_ENCAP, len);
750  	SVCMAP(WMI_10_4_SERVICE_AP_PS_DETECT_OUT_OF_SYNC,
751  	       WMI_SERVICE_AP_PS_DETECT_OUT_OF_SYNC, len);
752  	SVCMAP(WMI_10_4_SERVICE_EARLY_RX,
753  	       WMI_SERVICE_EARLY_RX, len);
754  	SVCMAP(WMI_10_4_SERVICE_ENHANCED_PROXY_STA,
755  	       WMI_SERVICE_ENHANCED_PROXY_STA, len);
756  	SVCMAP(WMI_10_4_SERVICE_TT,
757  	       WMI_SERVICE_TT, len);
758  	SVCMAP(WMI_10_4_SERVICE_ATF,
759  	       WMI_SERVICE_ATF, len);
760  	SVCMAP(WMI_10_4_SERVICE_PEER_CACHING,
761  	       WMI_SERVICE_PEER_CACHING, len);
762  	SVCMAP(WMI_10_4_SERVICE_COEX_GPIO,
763  	       WMI_SERVICE_COEX_GPIO, len);
764  	SVCMAP(WMI_10_4_SERVICE_AUX_SPECTRAL_INTF,
765  	       WMI_SERVICE_AUX_SPECTRAL_INTF, len);
766  	SVCMAP(WMI_10_4_SERVICE_AUX_CHAN_LOAD_INTF,
767  	       WMI_SERVICE_AUX_CHAN_LOAD_INTF, len);
768  	SVCMAP(WMI_10_4_SERVICE_BSS_CHANNEL_INFO_64,
769  	       WMI_SERVICE_BSS_CHANNEL_INFO_64, len);
770  	SVCMAP(WMI_10_4_SERVICE_EXT_RES_CFG_SUPPORT,
771  	       WMI_SERVICE_EXT_RES_CFG_SUPPORT, len);
772  	SVCMAP(WMI_10_4_SERVICE_MESH_NON_11S,
773  	       WMI_SERVICE_MESH_NON_11S, len);
774  	SVCMAP(WMI_10_4_SERVICE_RESTRT_CHNL_SUPPORT,
775  	       WMI_SERVICE_RESTRT_CHNL_SUPPORT, len);
776  	SVCMAP(WMI_10_4_SERVICE_PEER_STATS,
777  	       WMI_SERVICE_PEER_STATS, len);
778  	SVCMAP(WMI_10_4_SERVICE_MESH_11S,
779  	       WMI_SERVICE_MESH_11S, len);
780  	SVCMAP(WMI_10_4_SERVICE_PERIODIC_CHAN_STAT_SUPPORT,
781  	       WMI_SERVICE_PERIODIC_CHAN_STAT_SUPPORT, len);
782  	SVCMAP(WMI_10_4_SERVICE_TX_MODE_PUSH_ONLY,
783  	       WMI_SERVICE_TX_MODE_PUSH_ONLY, len);
784  	SVCMAP(WMI_10_4_SERVICE_TX_MODE_PUSH_PULL,
785  	       WMI_SERVICE_TX_MODE_PUSH_PULL, len);
786  	SVCMAP(WMI_10_4_SERVICE_TX_MODE_DYNAMIC,
787  	       WMI_SERVICE_TX_MODE_DYNAMIC, len);
788  	SVCMAP(WMI_10_4_SERVICE_VDEV_RX_FILTER,
789  	       WMI_SERVICE_VDEV_RX_FILTER, len);
790  	SVCMAP(WMI_10_4_SERVICE_BTCOEX,
791  	       WMI_SERVICE_BTCOEX, len);
792  	SVCMAP(WMI_10_4_SERVICE_CHECK_CAL_VERSION,
793  	       WMI_SERVICE_CHECK_CAL_VERSION, len);
794  	SVCMAP(WMI_10_4_SERVICE_DBGLOG_WARN2,
795  	       WMI_SERVICE_DBGLOG_WARN2, len);
796  	SVCMAP(WMI_10_4_SERVICE_BTCOEX_DUTY_CYCLE,
797  	       WMI_SERVICE_BTCOEX_DUTY_CYCLE, len);
798  	SVCMAP(WMI_10_4_SERVICE_4_WIRE_COEX_SUPPORT,
799  	       WMI_SERVICE_4_WIRE_COEX_SUPPORT, len);
800  	SVCMAP(WMI_10_4_SERVICE_EXTENDED_NSS_SUPPORT,
801  	       WMI_SERVICE_EXTENDED_NSS_SUPPORT, len);
802  	SVCMAP(WMI_10_4_SERVICE_PROG_GPIO_BAND_SELECT,
803  	       WMI_SERVICE_PROG_GPIO_BAND_SELECT, len);
804  	SVCMAP(WMI_10_4_SERVICE_SMART_LOGGING_SUPPORT,
805  	       WMI_SERVICE_SMART_LOGGING_SUPPORT, len);
806  	SVCMAP(WMI_10_4_SERVICE_TDLS,
807  	       WMI_SERVICE_TDLS, len);
808  	SVCMAP(WMI_10_4_SERVICE_TDLS_OFFCHAN,
809  	       WMI_SERVICE_TDLS_OFFCHAN, len);
810  	SVCMAP(WMI_10_4_SERVICE_TDLS_UAPSD_BUFFER_STA,
811  	       WMI_SERVICE_TDLS_UAPSD_BUFFER_STA, len);
812  	SVCMAP(WMI_10_4_SERVICE_TDLS_UAPSD_SLEEP_STA,
813  	       WMI_SERVICE_TDLS_UAPSD_SLEEP_STA, len);
814  	SVCMAP(WMI_10_4_SERVICE_TDLS_CONN_TRACKER_IN_HOST_MODE,
815  	       WMI_SERVICE_TDLS_CONN_TRACKER_IN_HOST_MODE, len);
816  	SVCMAP(WMI_10_4_SERVICE_TDLS_EXPLICIT_MODE_ONLY,
817  	       WMI_SERVICE_TDLS_EXPLICIT_MODE_ONLY, len);
818  	SVCMAP(WMI_10_4_SERVICE_TDLS_WIDER_BANDWIDTH,
819  	       WMI_SERVICE_TDLS_WIDER_BANDWIDTH, len);
820  	SVCMAP(WMI_10_4_SERVICE_HTT_MGMT_TX_COMP_VALID_FLAGS,
821  	       WMI_SERVICE_HTT_MGMT_TX_COMP_VALID_FLAGS, len);
822  	SVCMAP(WMI_10_4_SERVICE_HOST_DFS_CHECK_SUPPORT,
823  	       WMI_SERVICE_HOST_DFS_CHECK_SUPPORT, len);
824  	SVCMAP(WMI_10_4_SERVICE_TPC_STATS_FINAL,
825  	       WMI_SERVICE_TPC_STATS_FINAL, len);
826  	SVCMAP(WMI_10_4_SERVICE_TX_DATA_ACK_RSSI,
827  	       WMI_SERVICE_TX_DATA_ACK_RSSI, len);
828  	SVCMAP(WMI_10_4_SERVICE_VDEV_DIFFERENT_BEACON_INTERVAL_SUPPORT,
829  	       WMI_SERVICE_VDEV_DIFFERENT_BEACON_INTERVAL_SUPPORT, len);
830  	SVCMAP(WMI_10_4_SERVICE_VDEV_DISABLE_4_ADDR_SRC_LRN_SUPPORT,
831  	       WMI_SERVICE_VDEV_DISABLE_4_ADDR_SRC_LRN_SUPPORT, len);
832  	SVCMAP(WMI_10_4_SERVICE_RTT_RESPONDER_ROLE,
833  	       WMI_SERVICE_RTT_RESPONDER_ROLE, len);
834  	SVCMAP(WMI_10_4_SERVICE_PER_PACKET_SW_ENCRYPT,
835  	       WMI_SERVICE_PER_PACKET_SW_ENCRYPT, len);
836  	SVCMAP(WMI_10_4_SERVICE_REPORT_AIRTIME,
837  	       WMI_SERVICE_REPORT_AIRTIME, len);
838  	SVCMAP(WMI_10_4_SERVICE_TX_PWR_PER_PEER,
839  	       WMI_SERVICE_TX_PWR_PER_PEER, len);
840  	SVCMAP(WMI_10_4_SERVICE_RESET_CHIP,
841  	       WMI_SERVICE_RESET_CHIP, len);
842  	SVCMAP(WMI_10_4_SERVICE_PEER_TID_CONFIGS_SUPPORT,
843  	       WMI_SERVICE_PEER_TID_CONFIGS_SUPPORT, len);
844  	SVCMAP(WMI_10_4_SERVICE_EXT_PEER_TID_CONFIGS_SUPPORT,
845  	       WMI_SERVICE_PEER_TID_CONFIGS_SUPPORT, len);
846  }
847  
848  #undef SVCMAP
849  
850  /* 2 word representation of MAC addr */
851  struct wmi_mac_addr {
852  	union {
853  		u8 addr[6];
854  		struct {
855  			u32 word0;
856  			u32 word1;
857  		} __packed;
858  	} __packed;
859  } __packed;
860  
861  struct wmi_cmd_map {
862  	u32 init_cmdid;
863  	u32 start_scan_cmdid;
864  	u32 stop_scan_cmdid;
865  	u32 scan_chan_list_cmdid;
866  	u32 scan_sch_prio_tbl_cmdid;
867  	u32 scan_prob_req_oui_cmdid;
868  	u32 pdev_set_regdomain_cmdid;
869  	u32 pdev_set_channel_cmdid;
870  	u32 pdev_set_param_cmdid;
871  	u32 pdev_pktlog_enable_cmdid;
872  	u32 pdev_pktlog_disable_cmdid;
873  	u32 pdev_set_wmm_params_cmdid;
874  	u32 pdev_set_ht_cap_ie_cmdid;
875  	u32 pdev_set_vht_cap_ie_cmdid;
876  	u32 pdev_set_dscp_tid_map_cmdid;
877  	u32 pdev_set_quiet_mode_cmdid;
878  	u32 pdev_green_ap_ps_enable_cmdid;
879  	u32 pdev_get_tpc_config_cmdid;
880  	u32 pdev_set_base_macaddr_cmdid;
881  	u32 vdev_create_cmdid;
882  	u32 vdev_delete_cmdid;
883  	u32 vdev_start_request_cmdid;
884  	u32 vdev_restart_request_cmdid;
885  	u32 vdev_up_cmdid;
886  	u32 vdev_stop_cmdid;
887  	u32 vdev_down_cmdid;
888  	u32 vdev_set_param_cmdid;
889  	u32 vdev_install_key_cmdid;
890  	u32 peer_create_cmdid;
891  	u32 peer_delete_cmdid;
892  	u32 peer_flush_tids_cmdid;
893  	u32 peer_set_param_cmdid;
894  	u32 peer_assoc_cmdid;
895  	u32 peer_add_wds_entry_cmdid;
896  	u32 peer_remove_wds_entry_cmdid;
897  	u32 peer_mcast_group_cmdid;
898  	u32 bcn_tx_cmdid;
899  	u32 pdev_send_bcn_cmdid;
900  	u32 bcn_tmpl_cmdid;
901  	u32 bcn_filter_rx_cmdid;
902  	u32 prb_req_filter_rx_cmdid;
903  	u32 mgmt_tx_cmdid;
904  	u32 mgmt_tx_send_cmdid;
905  	u32 prb_tmpl_cmdid;
906  	u32 addba_clear_resp_cmdid;
907  	u32 addba_send_cmdid;
908  	u32 addba_status_cmdid;
909  	u32 delba_send_cmdid;
910  	u32 addba_set_resp_cmdid;
911  	u32 send_singleamsdu_cmdid;
912  	u32 sta_powersave_mode_cmdid;
913  	u32 sta_powersave_param_cmdid;
914  	u32 sta_mimo_ps_mode_cmdid;
915  	u32 pdev_dfs_enable_cmdid;
916  	u32 pdev_dfs_disable_cmdid;
917  	u32 roam_scan_mode;
918  	u32 roam_scan_rssi_threshold;
919  	u32 roam_scan_period;
920  	u32 roam_scan_rssi_change_threshold;
921  	u32 roam_ap_profile;
922  	u32 ofl_scan_add_ap_profile;
923  	u32 ofl_scan_remove_ap_profile;
924  	u32 ofl_scan_period;
925  	u32 p2p_dev_set_device_info;
926  	u32 p2p_dev_set_discoverability;
927  	u32 p2p_go_set_beacon_ie;
928  	u32 p2p_go_set_probe_resp_ie;
929  	u32 p2p_set_vendor_ie_data_cmdid;
930  	u32 ap_ps_peer_param_cmdid;
931  	u32 ap_ps_peer_uapsd_coex_cmdid;
932  	u32 peer_rate_retry_sched_cmdid;
933  	u32 wlan_profile_trigger_cmdid;
934  	u32 wlan_profile_set_hist_intvl_cmdid;
935  	u32 wlan_profile_get_profile_data_cmdid;
936  	u32 wlan_profile_enable_profile_id_cmdid;
937  	u32 wlan_profile_list_profile_id_cmdid;
938  	u32 pdev_suspend_cmdid;
939  	u32 pdev_resume_cmdid;
940  	u32 add_bcn_filter_cmdid;
941  	u32 rmv_bcn_filter_cmdid;
942  	u32 wow_add_wake_pattern_cmdid;
943  	u32 wow_del_wake_pattern_cmdid;
944  	u32 wow_enable_disable_wake_event_cmdid;
945  	u32 wow_enable_cmdid;
946  	u32 wow_hostwakeup_from_sleep_cmdid;
947  	u32 rtt_measreq_cmdid;
948  	u32 rtt_tsf_cmdid;
949  	u32 vdev_spectral_scan_configure_cmdid;
950  	u32 vdev_spectral_scan_enable_cmdid;
951  	u32 request_stats_cmdid;
952  	u32 request_peer_stats_info_cmdid;
953  	u32 set_arp_ns_offload_cmdid;
954  	u32 network_list_offload_config_cmdid;
955  	u32 gtk_offload_cmdid;
956  	u32 csa_offload_enable_cmdid;
957  	u32 csa_offload_chanswitch_cmdid;
958  	u32 chatter_set_mode_cmdid;
959  	u32 peer_tid_addba_cmdid;
960  	u32 peer_tid_delba_cmdid;
961  	u32 sta_dtim_ps_method_cmdid;
962  	u32 sta_uapsd_auto_trig_cmdid;
963  	u32 sta_keepalive_cmd;
964  	u32 echo_cmdid;
965  	u32 pdev_utf_cmdid;
966  	u32 dbglog_cfg_cmdid;
967  	u32 pdev_qvit_cmdid;
968  	u32 pdev_ftm_intg_cmdid;
969  	u32 vdev_set_keepalive_cmdid;
970  	u32 vdev_get_keepalive_cmdid;
971  	u32 force_fw_hang_cmdid;
972  	u32 gpio_config_cmdid;
973  	u32 gpio_output_cmdid;
974  	u32 pdev_get_temperature_cmdid;
975  	u32 vdev_set_wmm_params_cmdid;
976  	u32 tdls_set_state_cmdid;
977  	u32 tdls_peer_update_cmdid;
978  	u32 adaptive_qcs_cmdid;
979  	u32 scan_update_request_cmdid;
980  	u32 vdev_standby_response_cmdid;
981  	u32 vdev_resume_response_cmdid;
982  	u32 wlan_peer_caching_add_peer_cmdid;
983  	u32 wlan_peer_caching_evict_peer_cmdid;
984  	u32 wlan_peer_caching_restore_peer_cmdid;
985  	u32 wlan_peer_caching_print_all_peers_info_cmdid;
986  	u32 peer_update_wds_entry_cmdid;
987  	u32 peer_add_proxy_sta_entry_cmdid;
988  	u32 rtt_keepalive_cmdid;
989  	u32 oem_req_cmdid;
990  	u32 nan_cmdid;
991  	u32 vdev_ratemask_cmdid;
992  	u32 qboost_cfg_cmdid;
993  	u32 pdev_smart_ant_enable_cmdid;
994  	u32 pdev_smart_ant_set_rx_antenna_cmdid;
995  	u32 peer_smart_ant_set_tx_antenna_cmdid;
996  	u32 peer_smart_ant_set_train_info_cmdid;
997  	u32 peer_smart_ant_set_node_config_ops_cmdid;
998  	u32 pdev_set_antenna_switch_table_cmdid;
999  	u32 pdev_set_ctl_table_cmdid;
1000  	u32 pdev_set_mimogain_table_cmdid;
1001  	u32 pdev_ratepwr_table_cmdid;
1002  	u32 pdev_ratepwr_chainmsk_table_cmdid;
1003  	u32 pdev_fips_cmdid;
1004  	u32 tt_set_conf_cmdid;
1005  	u32 fwtest_cmdid;
1006  	u32 vdev_atf_request_cmdid;
1007  	u32 peer_atf_request_cmdid;
1008  	u32 pdev_get_ani_cck_config_cmdid;
1009  	u32 pdev_get_ani_ofdm_config_cmdid;
1010  	u32 pdev_reserve_ast_entry_cmdid;
1011  	u32 pdev_get_nfcal_power_cmdid;
1012  	u32 pdev_get_tpc_cmdid;
1013  	u32 pdev_get_ast_info_cmdid;
1014  	u32 vdev_set_dscp_tid_map_cmdid;
1015  	u32 pdev_get_info_cmdid;
1016  	u32 vdev_get_info_cmdid;
1017  	u32 vdev_filter_neighbor_rx_packets_cmdid;
1018  	u32 mu_cal_start_cmdid;
1019  	u32 set_cca_params_cmdid;
1020  	u32 pdev_bss_chan_info_request_cmdid;
1021  	u32 pdev_enable_adaptive_cca_cmdid;
1022  	u32 ext_resource_cfg_cmdid;
1023  	u32 vdev_set_ie_cmdid;
1024  	u32 set_lteu_config_cmdid;
1025  	u32 atf_ssid_grouping_request_cmdid;
1026  	u32 peer_atf_ext_request_cmdid;
1027  	u32 set_periodic_channel_stats_cfg_cmdid;
1028  	u32 peer_bwf_request_cmdid;
1029  	u32 btcoex_cfg_cmdid;
1030  	u32 peer_tx_mu_txmit_count_cmdid;
1031  	u32 peer_tx_mu_txmit_rstcnt_cmdid;
1032  	u32 peer_gid_userpos_list_cmdid;
1033  	u32 pdev_check_cal_version_cmdid;
1034  	u32 coex_version_cfg_cmid;
1035  	u32 pdev_get_rx_filter_cmdid;
1036  	u32 pdev_extended_nss_cfg_cmdid;
1037  	u32 vdev_set_scan_nac_rssi_cmdid;
1038  	u32 prog_gpio_band_select_cmdid;
1039  	u32 config_smart_logging_cmdid;
1040  	u32 debug_fatal_condition_cmdid;
1041  	u32 get_tsf_timer_cmdid;
1042  	u32 pdev_get_tpc_table_cmdid;
1043  	u32 vdev_sifs_trigger_time_cmdid;
1044  	u32 pdev_wds_entry_list_cmdid;
1045  	u32 tdls_set_offchan_mode_cmdid;
1046  	u32 radar_found_cmdid;
1047  	u32 set_bb_timing_cmdid;
1048  	u32 per_peer_per_tid_config_cmdid;
1049  };
1050  
1051  /*
1052   * wmi command groups.
1053   */
1054  enum wmi_cmd_group {
1055  	/* 0 to 2 are reserved */
1056  	WMI_GRP_START = 0x3,
1057  	WMI_GRP_SCAN = WMI_GRP_START,
1058  	WMI_GRP_PDEV,
1059  	WMI_GRP_VDEV,
1060  	WMI_GRP_PEER,
1061  	WMI_GRP_MGMT,
1062  	WMI_GRP_BA_NEG,
1063  	WMI_GRP_STA_PS,
1064  	WMI_GRP_DFS,
1065  	WMI_GRP_ROAM,
1066  	WMI_GRP_OFL_SCAN,
1067  	WMI_GRP_P2P,
1068  	WMI_GRP_AP_PS,
1069  	WMI_GRP_RATE_CTRL,
1070  	WMI_GRP_PROFILE,
1071  	WMI_GRP_SUSPEND,
1072  	WMI_GRP_BCN_FILTER,
1073  	WMI_GRP_WOW,
1074  	WMI_GRP_RTT,
1075  	WMI_GRP_SPECTRAL,
1076  	WMI_GRP_STATS,
1077  	WMI_GRP_ARP_NS_OFL,
1078  	WMI_GRP_NLO_OFL,
1079  	WMI_GRP_GTK_OFL,
1080  	WMI_GRP_CSA_OFL,
1081  	WMI_GRP_CHATTER,
1082  	WMI_GRP_TID_ADDBA,
1083  	WMI_GRP_MISC,
1084  	WMI_GRP_GPIO,
1085  };
1086  
1087  #define WMI_CMD_GRP(grp_id) (((grp_id) << 12) | 0x1)
1088  #define WMI_EVT_GRP_START_ID(grp_id) (((grp_id) << 12) | 0x1)
1089  
1090  #define WMI_CMD_UNSUPPORTED 0
1091  
1092  /* Command IDs and command events for MAIN FW. */
1093  enum wmi_cmd_id {
1094  	WMI_INIT_CMDID = 0x1,
1095  
1096  	/* Scan specific commands */
1097  	WMI_START_SCAN_CMDID = WMI_CMD_GRP(WMI_GRP_SCAN),
1098  	WMI_STOP_SCAN_CMDID,
1099  	WMI_SCAN_CHAN_LIST_CMDID,
1100  	WMI_SCAN_SCH_PRIO_TBL_CMDID,
1101  
1102  	/* PDEV (physical device) specific commands */
1103  	WMI_PDEV_SET_REGDOMAIN_CMDID = WMI_CMD_GRP(WMI_GRP_PDEV),
1104  	WMI_PDEV_SET_CHANNEL_CMDID,
1105  	WMI_PDEV_SET_PARAM_CMDID,
1106  	WMI_PDEV_PKTLOG_ENABLE_CMDID,
1107  	WMI_PDEV_PKTLOG_DISABLE_CMDID,
1108  	WMI_PDEV_SET_WMM_PARAMS_CMDID,
1109  	WMI_PDEV_SET_HT_CAP_IE_CMDID,
1110  	WMI_PDEV_SET_VHT_CAP_IE_CMDID,
1111  	WMI_PDEV_SET_DSCP_TID_MAP_CMDID,
1112  	WMI_PDEV_SET_QUIET_MODE_CMDID,
1113  	WMI_PDEV_GREEN_AP_PS_ENABLE_CMDID,
1114  	WMI_PDEV_GET_TPC_CONFIG_CMDID,
1115  	WMI_PDEV_SET_BASE_MACADDR_CMDID,
1116  
1117  	/* VDEV (virtual device) specific commands */
1118  	WMI_VDEV_CREATE_CMDID = WMI_CMD_GRP(WMI_GRP_VDEV),
1119  	WMI_VDEV_DELETE_CMDID,
1120  	WMI_VDEV_START_REQUEST_CMDID,
1121  	WMI_VDEV_RESTART_REQUEST_CMDID,
1122  	WMI_VDEV_UP_CMDID,
1123  	WMI_VDEV_STOP_CMDID,
1124  	WMI_VDEV_DOWN_CMDID,
1125  	WMI_VDEV_SET_PARAM_CMDID,
1126  	WMI_VDEV_INSTALL_KEY_CMDID,
1127  
1128  	/* peer specific commands */
1129  	WMI_PEER_CREATE_CMDID = WMI_CMD_GRP(WMI_GRP_PEER),
1130  	WMI_PEER_DELETE_CMDID,
1131  	WMI_PEER_FLUSH_TIDS_CMDID,
1132  	WMI_PEER_SET_PARAM_CMDID,
1133  	WMI_PEER_ASSOC_CMDID,
1134  	WMI_PEER_ADD_WDS_ENTRY_CMDID,
1135  	WMI_PEER_REMOVE_WDS_ENTRY_CMDID,
1136  	WMI_PEER_MCAST_GROUP_CMDID,
1137  
1138  	/* beacon/management specific commands */
1139  	WMI_BCN_TX_CMDID = WMI_CMD_GRP(WMI_GRP_MGMT),
1140  	WMI_PDEV_SEND_BCN_CMDID,
1141  	WMI_BCN_TMPL_CMDID,
1142  	WMI_BCN_FILTER_RX_CMDID,
1143  	WMI_PRB_REQ_FILTER_RX_CMDID,
1144  	WMI_MGMT_TX_CMDID,
1145  	WMI_PRB_TMPL_CMDID,
1146  
1147  	/* commands to directly control BA negotiation directly from host. */
1148  	WMI_ADDBA_CLEAR_RESP_CMDID = WMI_CMD_GRP(WMI_GRP_BA_NEG),
1149  	WMI_ADDBA_SEND_CMDID,
1150  	WMI_ADDBA_STATUS_CMDID,
1151  	WMI_DELBA_SEND_CMDID,
1152  	WMI_ADDBA_SET_RESP_CMDID,
1153  	WMI_SEND_SINGLEAMSDU_CMDID,
1154  
1155  	/* Station power save specific config */
1156  	WMI_STA_POWERSAVE_MODE_CMDID = WMI_CMD_GRP(WMI_GRP_STA_PS),
1157  	WMI_STA_POWERSAVE_PARAM_CMDID,
1158  	WMI_STA_MIMO_PS_MODE_CMDID,
1159  
1160  	/** DFS-specific commands */
1161  	WMI_PDEV_DFS_ENABLE_CMDID = WMI_CMD_GRP(WMI_GRP_DFS),
1162  	WMI_PDEV_DFS_DISABLE_CMDID,
1163  
1164  	/* Roaming specific  commands */
1165  	WMI_ROAM_SCAN_MODE = WMI_CMD_GRP(WMI_GRP_ROAM),
1166  	WMI_ROAM_SCAN_RSSI_THRESHOLD,
1167  	WMI_ROAM_SCAN_PERIOD,
1168  	WMI_ROAM_SCAN_RSSI_CHANGE_THRESHOLD,
1169  	WMI_ROAM_AP_PROFILE,
1170  
1171  	/* offload scan specific commands */
1172  	WMI_OFL_SCAN_ADD_AP_PROFILE = WMI_CMD_GRP(WMI_GRP_OFL_SCAN),
1173  	WMI_OFL_SCAN_REMOVE_AP_PROFILE,
1174  	WMI_OFL_SCAN_PERIOD,
1175  
1176  	/* P2P specific commands */
1177  	WMI_P2P_DEV_SET_DEVICE_INFO = WMI_CMD_GRP(WMI_GRP_P2P),
1178  	WMI_P2P_DEV_SET_DISCOVERABILITY,
1179  	WMI_P2P_GO_SET_BEACON_IE,
1180  	WMI_P2P_GO_SET_PROBE_RESP_IE,
1181  	WMI_P2P_SET_VENDOR_IE_DATA_CMDID,
1182  
1183  	/* AP power save specific config */
1184  	WMI_AP_PS_PEER_PARAM_CMDID = WMI_CMD_GRP(WMI_GRP_AP_PS),
1185  	WMI_AP_PS_PEER_UAPSD_COEX_CMDID,
1186  
1187  	/* Rate-control specific commands */
1188  	WMI_PEER_RATE_RETRY_SCHED_CMDID =
1189  	WMI_CMD_GRP(WMI_GRP_RATE_CTRL),
1190  
1191  	/* WLAN Profiling commands. */
1192  	WMI_WLAN_PROFILE_TRIGGER_CMDID = WMI_CMD_GRP(WMI_GRP_PROFILE),
1193  	WMI_WLAN_PROFILE_SET_HIST_INTVL_CMDID,
1194  	WMI_WLAN_PROFILE_GET_PROFILE_DATA_CMDID,
1195  	WMI_WLAN_PROFILE_ENABLE_PROFILE_ID_CMDID,
1196  	WMI_WLAN_PROFILE_LIST_PROFILE_ID_CMDID,
1197  
1198  	/* Suspend resume command Ids */
1199  	WMI_PDEV_SUSPEND_CMDID = WMI_CMD_GRP(WMI_GRP_SUSPEND),
1200  	WMI_PDEV_RESUME_CMDID,
1201  
1202  	/* Beacon filter commands */
1203  	WMI_ADD_BCN_FILTER_CMDID = WMI_CMD_GRP(WMI_GRP_BCN_FILTER),
1204  	WMI_RMV_BCN_FILTER_CMDID,
1205  
1206  	/* WOW Specific WMI commands*/
1207  	WMI_WOW_ADD_WAKE_PATTERN_CMDID = WMI_CMD_GRP(WMI_GRP_WOW),
1208  	WMI_WOW_DEL_WAKE_PATTERN_CMDID,
1209  	WMI_WOW_ENABLE_DISABLE_WAKE_EVENT_CMDID,
1210  	WMI_WOW_ENABLE_CMDID,
1211  	WMI_WOW_HOSTWAKEUP_FROM_SLEEP_CMDID,
1212  
1213  	/* RTT measurement related cmd */
1214  	WMI_RTT_MEASREQ_CMDID = WMI_CMD_GRP(WMI_GRP_RTT),
1215  	WMI_RTT_TSF_CMDID,
1216  
1217  	/* spectral scan commands */
1218  	WMI_VDEV_SPECTRAL_SCAN_CONFIGURE_CMDID = WMI_CMD_GRP(WMI_GRP_SPECTRAL),
1219  	WMI_VDEV_SPECTRAL_SCAN_ENABLE_CMDID,
1220  
1221  	/* F/W stats */
1222  	WMI_REQUEST_STATS_CMDID = WMI_CMD_GRP(WMI_GRP_STATS),
1223  
1224  	/* ARP OFFLOAD REQUEST*/
1225  	WMI_SET_ARP_NS_OFFLOAD_CMDID = WMI_CMD_GRP(WMI_GRP_ARP_NS_OFL),
1226  
1227  	/* NS offload confid*/
1228  	WMI_NETWORK_LIST_OFFLOAD_CONFIG_CMDID = WMI_CMD_GRP(WMI_GRP_NLO_OFL),
1229  
1230  	/* GTK offload Specific WMI commands*/
1231  	WMI_GTK_OFFLOAD_CMDID = WMI_CMD_GRP(WMI_GRP_GTK_OFL),
1232  
1233  	/* CSA offload Specific WMI commands*/
1234  	WMI_CSA_OFFLOAD_ENABLE_CMDID = WMI_CMD_GRP(WMI_GRP_CSA_OFL),
1235  	WMI_CSA_OFFLOAD_CHANSWITCH_CMDID,
1236  
1237  	/* Chatter commands*/
1238  	WMI_CHATTER_SET_MODE_CMDID = WMI_CMD_GRP(WMI_GRP_CHATTER),
1239  
1240  	/* addba specific commands */
1241  	WMI_PEER_TID_ADDBA_CMDID = WMI_CMD_GRP(WMI_GRP_TID_ADDBA),
1242  	WMI_PEER_TID_DELBA_CMDID,
1243  
1244  	/* set station mimo powersave method */
1245  	WMI_STA_DTIM_PS_METHOD_CMDID,
1246  	/* Configure the Station UAPSD AC Auto Trigger Parameters */
1247  	WMI_STA_UAPSD_AUTO_TRIG_CMDID,
1248  
1249  	/* STA Keep alive parameter configuration,
1250  	 * Requires WMI_SERVICE_STA_KEEP_ALIVE
1251  	 */
1252  	WMI_STA_KEEPALIVE_CMD,
1253  
1254  	/* misc command group */
1255  	WMI_ECHO_CMDID = WMI_CMD_GRP(WMI_GRP_MISC),
1256  	WMI_PDEV_UTF_CMDID,
1257  	WMI_DBGLOG_CFG_CMDID,
1258  	WMI_PDEV_QVIT_CMDID,
1259  	WMI_PDEV_FTM_INTG_CMDID,
1260  	WMI_VDEV_SET_KEEPALIVE_CMDID,
1261  	WMI_VDEV_GET_KEEPALIVE_CMDID,
1262  	WMI_FORCE_FW_HANG_CMDID,
1263  
1264  	/* GPIO Configuration */
1265  	WMI_GPIO_CONFIG_CMDID = WMI_CMD_GRP(WMI_GRP_GPIO),
1266  	WMI_GPIO_OUTPUT_CMDID,
1267  };
1268  
1269  enum wmi_event_id {
1270  	WMI_SERVICE_READY_EVENTID = 0x1,
1271  	WMI_READY_EVENTID,
1272  	WMI_SERVICE_AVAILABLE_EVENTID,
1273  
1274  	/* Scan specific events */
1275  	WMI_SCAN_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_SCAN),
1276  
1277  	/* PDEV specific events */
1278  	WMI_PDEV_TPC_CONFIG_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_PDEV),
1279  	WMI_CHAN_INFO_EVENTID,
1280  	WMI_PHYERR_EVENTID,
1281  
1282  	/* VDEV specific events */
1283  	WMI_VDEV_START_RESP_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_VDEV),
1284  	WMI_VDEV_STOPPED_EVENTID,
1285  	WMI_VDEV_INSTALL_KEY_COMPLETE_EVENTID,
1286  
1287  	/* peer specific events */
1288  	WMI_PEER_STA_KICKOUT_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_PEER),
1289  
1290  	/* beacon/mgmt specific events */
1291  	WMI_MGMT_RX_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_MGMT),
1292  	WMI_HOST_SWBA_EVENTID,
1293  	WMI_TBTTOFFSET_UPDATE_EVENTID,
1294  
1295  	/* ADDBA Related WMI Events*/
1296  	WMI_TX_DELBA_COMPLETE_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_BA_NEG),
1297  	WMI_TX_ADDBA_COMPLETE_EVENTID,
1298  
1299  	/* Roam event to trigger roaming on host */
1300  	WMI_ROAM_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_ROAM),
1301  	WMI_PROFILE_MATCH,
1302  
1303  	/* WoW */
1304  	WMI_WOW_WAKEUP_HOST_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_WOW),
1305  
1306  	/* RTT */
1307  	WMI_RTT_MEASUREMENT_REPORT_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_RTT),
1308  	WMI_TSF_MEASUREMENT_REPORT_EVENTID,
1309  	WMI_RTT_ERROR_REPORT_EVENTID,
1310  
1311  	/* GTK offload */
1312  	WMI_GTK_OFFLOAD_STATUS_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_GTK_OFL),
1313  	WMI_GTK_REKEY_FAIL_EVENTID,
1314  
1315  	/* CSA IE received event */
1316  	WMI_CSA_HANDLING_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_CSA_OFL),
1317  
1318  	/* Misc events */
1319  	WMI_ECHO_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_MISC),
1320  	WMI_PDEV_UTF_EVENTID,
1321  	WMI_DEBUG_MESG_EVENTID,
1322  	WMI_UPDATE_STATS_EVENTID,
1323  	WMI_DEBUG_PRINT_EVENTID,
1324  	WMI_DCS_INTERFERENCE_EVENTID,
1325  	WMI_PDEV_QVIT_EVENTID,
1326  	WMI_WLAN_PROFILE_DATA_EVENTID,
1327  	WMI_PDEV_FTM_INTG_EVENTID,
1328  	WMI_WLAN_FREQ_AVOID_EVENTID,
1329  	WMI_VDEV_GET_KEEPALIVE_EVENTID,
1330  
1331  	/* GPIO Event */
1332  	WMI_GPIO_INPUT_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_GPIO),
1333  };
1334  
1335  /* Command IDs and command events for 10.X firmware */
1336  enum wmi_10x_cmd_id {
1337  	WMI_10X_START_CMDID = 0x9000,
1338  	WMI_10X_END_CMDID = 0x9FFF,
1339  
1340  	/* initialize the wlan sub system */
1341  	WMI_10X_INIT_CMDID,
1342  
1343  	/* Scan specific commands */
1344  
1345  	WMI_10X_START_SCAN_CMDID = WMI_10X_START_CMDID,
1346  	WMI_10X_STOP_SCAN_CMDID,
1347  	WMI_10X_SCAN_CHAN_LIST_CMDID,
1348  	WMI_10X_ECHO_CMDID,
1349  
1350  	/* PDEV(physical device) specific commands */
1351  	WMI_10X_PDEV_SET_REGDOMAIN_CMDID,
1352  	WMI_10X_PDEV_SET_CHANNEL_CMDID,
1353  	WMI_10X_PDEV_SET_PARAM_CMDID,
1354  	WMI_10X_PDEV_PKTLOG_ENABLE_CMDID,
1355  	WMI_10X_PDEV_PKTLOG_DISABLE_CMDID,
1356  	WMI_10X_PDEV_SET_WMM_PARAMS_CMDID,
1357  	WMI_10X_PDEV_SET_HT_CAP_IE_CMDID,
1358  	WMI_10X_PDEV_SET_VHT_CAP_IE_CMDID,
1359  	WMI_10X_PDEV_SET_BASE_MACADDR_CMDID,
1360  	WMI_10X_PDEV_SET_DSCP_TID_MAP_CMDID,
1361  	WMI_10X_PDEV_SET_QUIET_MODE_CMDID,
1362  	WMI_10X_PDEV_GREEN_AP_PS_ENABLE_CMDID,
1363  	WMI_10X_PDEV_GET_TPC_CONFIG_CMDID,
1364  
1365  	/* VDEV(virtual device) specific commands */
1366  	WMI_10X_VDEV_CREATE_CMDID,
1367  	WMI_10X_VDEV_DELETE_CMDID,
1368  	WMI_10X_VDEV_START_REQUEST_CMDID,
1369  	WMI_10X_VDEV_RESTART_REQUEST_CMDID,
1370  	WMI_10X_VDEV_UP_CMDID,
1371  	WMI_10X_VDEV_STOP_CMDID,
1372  	WMI_10X_VDEV_DOWN_CMDID,
1373  	WMI_10X_VDEV_STANDBY_RESPONSE_CMDID,
1374  	WMI_10X_VDEV_RESUME_RESPONSE_CMDID,
1375  	WMI_10X_VDEV_SET_PARAM_CMDID,
1376  	WMI_10X_VDEV_INSTALL_KEY_CMDID,
1377  
1378  	/* peer specific commands */
1379  	WMI_10X_PEER_CREATE_CMDID,
1380  	WMI_10X_PEER_DELETE_CMDID,
1381  	WMI_10X_PEER_FLUSH_TIDS_CMDID,
1382  	WMI_10X_PEER_SET_PARAM_CMDID,
1383  	WMI_10X_PEER_ASSOC_CMDID,
1384  	WMI_10X_PEER_ADD_WDS_ENTRY_CMDID,
1385  	WMI_10X_PEER_REMOVE_WDS_ENTRY_CMDID,
1386  	WMI_10X_PEER_MCAST_GROUP_CMDID,
1387  
1388  	/* beacon/management specific commands */
1389  
1390  	WMI_10X_BCN_TX_CMDID,
1391  	WMI_10X_BCN_PRB_TMPL_CMDID,
1392  	WMI_10X_BCN_FILTER_RX_CMDID,
1393  	WMI_10X_PRB_REQ_FILTER_RX_CMDID,
1394  	WMI_10X_MGMT_TX_CMDID,
1395  
1396  	/* commands to directly control ba negotiation directly from host. */
1397  	WMI_10X_ADDBA_CLEAR_RESP_CMDID,
1398  	WMI_10X_ADDBA_SEND_CMDID,
1399  	WMI_10X_ADDBA_STATUS_CMDID,
1400  	WMI_10X_DELBA_SEND_CMDID,
1401  	WMI_10X_ADDBA_SET_RESP_CMDID,
1402  	WMI_10X_SEND_SINGLEAMSDU_CMDID,
1403  
1404  	/* Station power save specific config */
1405  	WMI_10X_STA_POWERSAVE_MODE_CMDID,
1406  	WMI_10X_STA_POWERSAVE_PARAM_CMDID,
1407  	WMI_10X_STA_MIMO_PS_MODE_CMDID,
1408  
1409  	/* set debug log config */
1410  	WMI_10X_DBGLOG_CFG_CMDID,
1411  
1412  	/* DFS-specific commands */
1413  	WMI_10X_PDEV_DFS_ENABLE_CMDID,
1414  	WMI_10X_PDEV_DFS_DISABLE_CMDID,
1415  
1416  	/* QVIT specific command id */
1417  	WMI_10X_PDEV_QVIT_CMDID,
1418  
1419  	/* Offload Scan and Roaming related  commands */
1420  	WMI_10X_ROAM_SCAN_MODE,
1421  	WMI_10X_ROAM_SCAN_RSSI_THRESHOLD,
1422  	WMI_10X_ROAM_SCAN_PERIOD,
1423  	WMI_10X_ROAM_SCAN_RSSI_CHANGE_THRESHOLD,
1424  	WMI_10X_ROAM_AP_PROFILE,
1425  	WMI_10X_OFL_SCAN_ADD_AP_PROFILE,
1426  	WMI_10X_OFL_SCAN_REMOVE_AP_PROFILE,
1427  	WMI_10X_OFL_SCAN_PERIOD,
1428  
1429  	/* P2P specific commands */
1430  	WMI_10X_P2P_DEV_SET_DEVICE_INFO,
1431  	WMI_10X_P2P_DEV_SET_DISCOVERABILITY,
1432  	WMI_10X_P2P_GO_SET_BEACON_IE,
1433  	WMI_10X_P2P_GO_SET_PROBE_RESP_IE,
1434  
1435  	/* AP power save specific config */
1436  	WMI_10X_AP_PS_PEER_PARAM_CMDID,
1437  	WMI_10X_AP_PS_PEER_UAPSD_COEX_CMDID,
1438  
1439  	/* Rate-control specific commands */
1440  	WMI_10X_PEER_RATE_RETRY_SCHED_CMDID,
1441  
1442  	/* WLAN Profiling commands. */
1443  	WMI_10X_WLAN_PROFILE_TRIGGER_CMDID,
1444  	WMI_10X_WLAN_PROFILE_SET_HIST_INTVL_CMDID,
1445  	WMI_10X_WLAN_PROFILE_GET_PROFILE_DATA_CMDID,
1446  	WMI_10X_WLAN_PROFILE_ENABLE_PROFILE_ID_CMDID,
1447  	WMI_10X_WLAN_PROFILE_LIST_PROFILE_ID_CMDID,
1448  
1449  	/* Suspend resume command Ids */
1450  	WMI_10X_PDEV_SUSPEND_CMDID,
1451  	WMI_10X_PDEV_RESUME_CMDID,
1452  
1453  	/* Beacon filter commands */
1454  	WMI_10X_ADD_BCN_FILTER_CMDID,
1455  	WMI_10X_RMV_BCN_FILTER_CMDID,
1456  
1457  	/* WOW Specific WMI commands*/
1458  	WMI_10X_WOW_ADD_WAKE_PATTERN_CMDID,
1459  	WMI_10X_WOW_DEL_WAKE_PATTERN_CMDID,
1460  	WMI_10X_WOW_ENABLE_DISABLE_WAKE_EVENT_CMDID,
1461  	WMI_10X_WOW_ENABLE_CMDID,
1462  	WMI_10X_WOW_HOSTWAKEUP_FROM_SLEEP_CMDID,
1463  
1464  	/* RTT measurement related cmd */
1465  	WMI_10X_RTT_MEASREQ_CMDID,
1466  	WMI_10X_RTT_TSF_CMDID,
1467  
1468  	/* transmit beacon by value */
1469  	WMI_10X_PDEV_SEND_BCN_CMDID,
1470  
1471  	/* F/W stats */
1472  	WMI_10X_VDEV_SPECTRAL_SCAN_CONFIGURE_CMDID,
1473  	WMI_10X_VDEV_SPECTRAL_SCAN_ENABLE_CMDID,
1474  	WMI_10X_REQUEST_STATS_CMDID,
1475  
1476  	/* GPIO Configuration */
1477  	WMI_10X_GPIO_CONFIG_CMDID,
1478  	WMI_10X_GPIO_OUTPUT_CMDID,
1479  
1480  	WMI_10X_PDEV_UTF_CMDID = WMI_10X_END_CMDID - 1,
1481  };
1482  
1483  enum wmi_10x_event_id {
1484  	WMI_10X_SERVICE_READY_EVENTID = 0x8000,
1485  	WMI_10X_READY_EVENTID,
1486  	WMI_10X_START_EVENTID = 0x9000,
1487  	WMI_10X_END_EVENTID = 0x9FFF,
1488  
1489  	/* Scan specific events */
1490  	WMI_10X_SCAN_EVENTID = WMI_10X_START_EVENTID,
1491  	WMI_10X_ECHO_EVENTID,
1492  	WMI_10X_DEBUG_MESG_EVENTID,
1493  	WMI_10X_UPDATE_STATS_EVENTID,
1494  
1495  	/* Instantaneous RSSI event */
1496  	WMI_10X_INST_RSSI_STATS_EVENTID,
1497  
1498  	/* VDEV specific events */
1499  	WMI_10X_VDEV_START_RESP_EVENTID,
1500  	WMI_10X_VDEV_STANDBY_REQ_EVENTID,
1501  	WMI_10X_VDEV_RESUME_REQ_EVENTID,
1502  	WMI_10X_VDEV_STOPPED_EVENTID,
1503  
1504  	/* peer  specific events */
1505  	WMI_10X_PEER_STA_KICKOUT_EVENTID,
1506  
1507  	/* beacon/mgmt specific events */
1508  	WMI_10X_HOST_SWBA_EVENTID,
1509  	WMI_10X_TBTTOFFSET_UPDATE_EVENTID,
1510  	WMI_10X_MGMT_RX_EVENTID,
1511  
1512  	/* Channel stats event */
1513  	WMI_10X_CHAN_INFO_EVENTID,
1514  
1515  	/* PHY Error specific WMI event */
1516  	WMI_10X_PHYERR_EVENTID,
1517  
1518  	/* Roam event to trigger roaming on host */
1519  	WMI_10X_ROAM_EVENTID,
1520  
1521  	/* matching AP found from list of profiles */
1522  	WMI_10X_PROFILE_MATCH,
1523  
1524  	/* debug print message used for tracing FW code while debugging */
1525  	WMI_10X_DEBUG_PRINT_EVENTID,
1526  	/* VI spoecific event */
1527  	WMI_10X_PDEV_QVIT_EVENTID,
1528  	/* FW code profile data in response to profile request */
1529  	WMI_10X_WLAN_PROFILE_DATA_EVENTID,
1530  
1531  	/*RTT related event ID*/
1532  	WMI_10X_RTT_MEASUREMENT_REPORT_EVENTID,
1533  	WMI_10X_TSF_MEASUREMENT_REPORT_EVENTID,
1534  	WMI_10X_RTT_ERROR_REPORT_EVENTID,
1535  
1536  	WMI_10X_WOW_WAKEUP_HOST_EVENTID,
1537  	WMI_10X_DCS_INTERFERENCE_EVENTID,
1538  
1539  	/* TPC config for the current operating channel */
1540  	WMI_10X_PDEV_TPC_CONFIG_EVENTID,
1541  
1542  	WMI_10X_GPIO_INPUT_EVENTID,
1543  	WMI_10X_PDEV_UTF_EVENTID = WMI_10X_END_EVENTID - 1,
1544  };
1545  
1546  enum wmi_10_2_cmd_id {
1547  	WMI_10_2_START_CMDID = 0x9000,
1548  	WMI_10_2_END_CMDID = 0x9FFF,
1549  	WMI_10_2_INIT_CMDID,
1550  	WMI_10_2_START_SCAN_CMDID = WMI_10_2_START_CMDID,
1551  	WMI_10_2_STOP_SCAN_CMDID,
1552  	WMI_10_2_SCAN_CHAN_LIST_CMDID,
1553  	WMI_10_2_ECHO_CMDID,
1554  	WMI_10_2_PDEV_SET_REGDOMAIN_CMDID,
1555  	WMI_10_2_PDEV_SET_CHANNEL_CMDID,
1556  	WMI_10_2_PDEV_SET_PARAM_CMDID,
1557  	WMI_10_2_PDEV_PKTLOG_ENABLE_CMDID,
1558  	WMI_10_2_PDEV_PKTLOG_DISABLE_CMDID,
1559  	WMI_10_2_PDEV_SET_WMM_PARAMS_CMDID,
1560  	WMI_10_2_PDEV_SET_HT_CAP_IE_CMDID,
1561  	WMI_10_2_PDEV_SET_VHT_CAP_IE_CMDID,
1562  	WMI_10_2_PDEV_SET_BASE_MACADDR_CMDID,
1563  	WMI_10_2_PDEV_SET_QUIET_MODE_CMDID,
1564  	WMI_10_2_PDEV_GREEN_AP_PS_ENABLE_CMDID,
1565  	WMI_10_2_PDEV_GET_TPC_CONFIG_CMDID,
1566  	WMI_10_2_VDEV_CREATE_CMDID,
1567  	WMI_10_2_VDEV_DELETE_CMDID,
1568  	WMI_10_2_VDEV_START_REQUEST_CMDID,
1569  	WMI_10_2_VDEV_RESTART_REQUEST_CMDID,
1570  	WMI_10_2_VDEV_UP_CMDID,
1571  	WMI_10_2_VDEV_STOP_CMDID,
1572  	WMI_10_2_VDEV_DOWN_CMDID,
1573  	WMI_10_2_VDEV_STANDBY_RESPONSE_CMDID,
1574  	WMI_10_2_VDEV_RESUME_RESPONSE_CMDID,
1575  	WMI_10_2_VDEV_SET_PARAM_CMDID,
1576  	WMI_10_2_VDEV_INSTALL_KEY_CMDID,
1577  	WMI_10_2_VDEV_SET_DSCP_TID_MAP_CMDID,
1578  	WMI_10_2_PEER_CREATE_CMDID,
1579  	WMI_10_2_PEER_DELETE_CMDID,
1580  	WMI_10_2_PEER_FLUSH_TIDS_CMDID,
1581  	WMI_10_2_PEER_SET_PARAM_CMDID,
1582  	WMI_10_2_PEER_ASSOC_CMDID,
1583  	WMI_10_2_PEER_ADD_WDS_ENTRY_CMDID,
1584  	WMI_10_2_PEER_UPDATE_WDS_ENTRY_CMDID,
1585  	WMI_10_2_PEER_REMOVE_WDS_ENTRY_CMDID,
1586  	WMI_10_2_PEER_MCAST_GROUP_CMDID,
1587  	WMI_10_2_BCN_TX_CMDID,
1588  	WMI_10_2_BCN_PRB_TMPL_CMDID,
1589  	WMI_10_2_BCN_FILTER_RX_CMDID,
1590  	WMI_10_2_PRB_REQ_FILTER_RX_CMDID,
1591  	WMI_10_2_MGMT_TX_CMDID,
1592  	WMI_10_2_ADDBA_CLEAR_RESP_CMDID,
1593  	WMI_10_2_ADDBA_SEND_CMDID,
1594  	WMI_10_2_ADDBA_STATUS_CMDID,
1595  	WMI_10_2_DELBA_SEND_CMDID,
1596  	WMI_10_2_ADDBA_SET_RESP_CMDID,
1597  	WMI_10_2_SEND_SINGLEAMSDU_CMDID,
1598  	WMI_10_2_STA_POWERSAVE_MODE_CMDID,
1599  	WMI_10_2_STA_POWERSAVE_PARAM_CMDID,
1600  	WMI_10_2_STA_MIMO_PS_MODE_CMDID,
1601  	WMI_10_2_DBGLOG_CFG_CMDID,
1602  	WMI_10_2_PDEV_DFS_ENABLE_CMDID,
1603  	WMI_10_2_PDEV_DFS_DISABLE_CMDID,
1604  	WMI_10_2_PDEV_QVIT_CMDID,
1605  	WMI_10_2_ROAM_SCAN_MODE,
1606  	WMI_10_2_ROAM_SCAN_RSSI_THRESHOLD,
1607  	WMI_10_2_ROAM_SCAN_PERIOD,
1608  	WMI_10_2_ROAM_SCAN_RSSI_CHANGE_THRESHOLD,
1609  	WMI_10_2_ROAM_AP_PROFILE,
1610  	WMI_10_2_OFL_SCAN_ADD_AP_PROFILE,
1611  	WMI_10_2_OFL_SCAN_REMOVE_AP_PROFILE,
1612  	WMI_10_2_OFL_SCAN_PERIOD,
1613  	WMI_10_2_P2P_DEV_SET_DEVICE_INFO,
1614  	WMI_10_2_P2P_DEV_SET_DISCOVERABILITY,
1615  	WMI_10_2_P2P_GO_SET_BEACON_IE,
1616  	WMI_10_2_P2P_GO_SET_PROBE_RESP_IE,
1617  	WMI_10_2_AP_PS_PEER_PARAM_CMDID,
1618  	WMI_10_2_AP_PS_PEER_UAPSD_COEX_CMDID,
1619  	WMI_10_2_PEER_RATE_RETRY_SCHED_CMDID,
1620  	WMI_10_2_WLAN_PROFILE_TRIGGER_CMDID,
1621  	WMI_10_2_WLAN_PROFILE_SET_HIST_INTVL_CMDID,
1622  	WMI_10_2_WLAN_PROFILE_GET_PROFILE_DATA_CMDID,
1623  	WMI_10_2_WLAN_PROFILE_ENABLE_PROFILE_ID_CMDID,
1624  	WMI_10_2_WLAN_PROFILE_LIST_PROFILE_ID_CMDID,
1625  	WMI_10_2_PDEV_SUSPEND_CMDID,
1626  	WMI_10_2_PDEV_RESUME_CMDID,
1627  	WMI_10_2_ADD_BCN_FILTER_CMDID,
1628  	WMI_10_2_RMV_BCN_FILTER_CMDID,
1629  	WMI_10_2_WOW_ADD_WAKE_PATTERN_CMDID,
1630  	WMI_10_2_WOW_DEL_WAKE_PATTERN_CMDID,
1631  	WMI_10_2_WOW_ENABLE_DISABLE_WAKE_EVENT_CMDID,
1632  	WMI_10_2_WOW_ENABLE_CMDID,
1633  	WMI_10_2_WOW_HOSTWAKEUP_FROM_SLEEP_CMDID,
1634  	WMI_10_2_RTT_MEASREQ_CMDID,
1635  	WMI_10_2_RTT_TSF_CMDID,
1636  	WMI_10_2_RTT_KEEPALIVE_CMDID,
1637  	WMI_10_2_PDEV_SEND_BCN_CMDID,
1638  	WMI_10_2_VDEV_SPECTRAL_SCAN_CONFIGURE_CMDID,
1639  	WMI_10_2_VDEV_SPECTRAL_SCAN_ENABLE_CMDID,
1640  	WMI_10_2_REQUEST_STATS_CMDID,
1641  	WMI_10_2_GPIO_CONFIG_CMDID,
1642  	WMI_10_2_GPIO_OUTPUT_CMDID,
1643  	WMI_10_2_VDEV_RATEMASK_CMDID,
1644  	WMI_10_2_PDEV_SMART_ANT_ENABLE_CMDID,
1645  	WMI_10_2_PDEV_SMART_ANT_SET_RX_ANTENNA_CMDID,
1646  	WMI_10_2_PEER_SMART_ANT_SET_TX_ANTENNA_CMDID,
1647  	WMI_10_2_PEER_SMART_ANT_SET_TRAIN_INFO_CMDID,
1648  	WMI_10_2_PEER_SMART_ANT_SET_NODE_CONFIG_OPS_CMDID,
1649  	WMI_10_2_FORCE_FW_HANG_CMDID,
1650  	WMI_10_2_PDEV_SET_ANTENNA_SWITCH_TABLE_CMDID,
1651  	WMI_10_2_PDEV_SET_CTL_TABLE_CMDID,
1652  	WMI_10_2_PDEV_SET_MIMOGAIN_TABLE_CMDID,
1653  	WMI_10_2_PDEV_RATEPWR_TABLE_CMDID,
1654  	WMI_10_2_PDEV_RATEPWR_CHAINMSK_TABLE_CMDID,
1655  	WMI_10_2_PDEV_GET_INFO,
1656  	WMI_10_2_VDEV_GET_INFO,
1657  	WMI_10_2_VDEV_ATF_REQUEST_CMDID,
1658  	WMI_10_2_PEER_ATF_REQUEST_CMDID,
1659  	WMI_10_2_PDEV_GET_TEMPERATURE_CMDID,
1660  	WMI_10_2_MU_CAL_START_CMDID,
1661  	WMI_10_2_SET_LTEU_CONFIG_CMDID,
1662  	WMI_10_2_SET_CCA_PARAMS,
1663  	WMI_10_2_PDEV_BSS_CHAN_INFO_REQUEST_CMDID,
1664  	WMI_10_2_FWTEST_CMDID,
1665  	WMI_10_2_PDEV_SET_BB_TIMING_CONFIG_CMDID,
1666  	WMI_10_2_PDEV_UTF_CMDID = WMI_10_2_END_CMDID - 1,
1667  };
1668  
1669  enum wmi_10_2_event_id {
1670  	WMI_10_2_SERVICE_READY_EVENTID = 0x8000,
1671  	WMI_10_2_READY_EVENTID,
1672  	WMI_10_2_DEBUG_MESG_EVENTID,
1673  	WMI_10_2_START_EVENTID = 0x9000,
1674  	WMI_10_2_END_EVENTID = 0x9FFF,
1675  	WMI_10_2_SCAN_EVENTID = WMI_10_2_START_EVENTID,
1676  	WMI_10_2_ECHO_EVENTID,
1677  	WMI_10_2_UPDATE_STATS_EVENTID,
1678  	WMI_10_2_INST_RSSI_STATS_EVENTID,
1679  	WMI_10_2_VDEV_START_RESP_EVENTID,
1680  	WMI_10_2_VDEV_STANDBY_REQ_EVENTID,
1681  	WMI_10_2_VDEV_RESUME_REQ_EVENTID,
1682  	WMI_10_2_VDEV_STOPPED_EVENTID,
1683  	WMI_10_2_PEER_STA_KICKOUT_EVENTID,
1684  	WMI_10_2_HOST_SWBA_EVENTID,
1685  	WMI_10_2_TBTTOFFSET_UPDATE_EVENTID,
1686  	WMI_10_2_MGMT_RX_EVENTID,
1687  	WMI_10_2_CHAN_INFO_EVENTID,
1688  	WMI_10_2_PHYERR_EVENTID,
1689  	WMI_10_2_ROAM_EVENTID,
1690  	WMI_10_2_PROFILE_MATCH,
1691  	WMI_10_2_DEBUG_PRINT_EVENTID,
1692  	WMI_10_2_PDEV_QVIT_EVENTID,
1693  	WMI_10_2_WLAN_PROFILE_DATA_EVENTID,
1694  	WMI_10_2_RTT_MEASUREMENT_REPORT_EVENTID,
1695  	WMI_10_2_TSF_MEASUREMENT_REPORT_EVENTID,
1696  	WMI_10_2_RTT_ERROR_REPORT_EVENTID,
1697  	WMI_10_2_RTT_KEEPALIVE_EVENTID,
1698  	WMI_10_2_WOW_WAKEUP_HOST_EVENTID,
1699  	WMI_10_2_DCS_INTERFERENCE_EVENTID,
1700  	WMI_10_2_PDEV_TPC_CONFIG_EVENTID,
1701  	WMI_10_2_GPIO_INPUT_EVENTID,
1702  	WMI_10_2_PEER_RATECODE_LIST_EVENTID,
1703  	WMI_10_2_GENERIC_BUFFER_EVENTID,
1704  	WMI_10_2_MCAST_BUF_RELEASE_EVENTID,
1705  	WMI_10_2_MCAST_LIST_AGEOUT_EVENTID,
1706  	WMI_10_2_WDS_PEER_EVENTID,
1707  	WMI_10_2_PEER_STA_PS_STATECHG_EVENTID,
1708  	WMI_10_2_PDEV_TEMPERATURE_EVENTID,
1709  	WMI_10_2_MU_REPORT_EVENTID,
1710  	WMI_10_2_PDEV_BSS_CHAN_INFO_EVENTID,
1711  	WMI_10_2_PDEV_UTF_EVENTID = WMI_10_2_END_EVENTID - 1,
1712  };
1713  
1714  enum wmi_10_4_cmd_id {
1715  	WMI_10_4_START_CMDID = 0x9000,
1716  	WMI_10_4_END_CMDID = 0x9FFF,
1717  	WMI_10_4_INIT_CMDID,
1718  	WMI_10_4_START_SCAN_CMDID = WMI_10_4_START_CMDID,
1719  	WMI_10_4_STOP_SCAN_CMDID,
1720  	WMI_10_4_SCAN_CHAN_LIST_CMDID,
1721  	WMI_10_4_SCAN_SCH_PRIO_TBL_CMDID,
1722  	WMI_10_4_SCAN_UPDATE_REQUEST_CMDID,
1723  	WMI_10_4_ECHO_CMDID,
1724  	WMI_10_4_PDEV_SET_REGDOMAIN_CMDID,
1725  	WMI_10_4_PDEV_SET_CHANNEL_CMDID,
1726  	WMI_10_4_PDEV_SET_PARAM_CMDID,
1727  	WMI_10_4_PDEV_PKTLOG_ENABLE_CMDID,
1728  	WMI_10_4_PDEV_PKTLOG_DISABLE_CMDID,
1729  	WMI_10_4_PDEV_SET_WMM_PARAMS_CMDID,
1730  	WMI_10_4_PDEV_SET_HT_CAP_IE_CMDID,
1731  	WMI_10_4_PDEV_SET_VHT_CAP_IE_CMDID,
1732  	WMI_10_4_PDEV_SET_BASE_MACADDR_CMDID,
1733  	WMI_10_4_PDEV_SET_DSCP_TID_MAP_CMDID,
1734  	WMI_10_4_PDEV_SET_QUIET_MODE_CMDID,
1735  	WMI_10_4_PDEV_GREEN_AP_PS_ENABLE_CMDID,
1736  	WMI_10_4_PDEV_GET_TPC_CONFIG_CMDID,
1737  	WMI_10_4_VDEV_CREATE_CMDID,
1738  	WMI_10_4_VDEV_DELETE_CMDID,
1739  	WMI_10_4_VDEV_START_REQUEST_CMDID,
1740  	WMI_10_4_VDEV_RESTART_REQUEST_CMDID,
1741  	WMI_10_4_VDEV_UP_CMDID,
1742  	WMI_10_4_VDEV_STOP_CMDID,
1743  	WMI_10_4_VDEV_DOWN_CMDID,
1744  	WMI_10_4_VDEV_STANDBY_RESPONSE_CMDID,
1745  	WMI_10_4_VDEV_RESUME_RESPONSE_CMDID,
1746  	WMI_10_4_VDEV_SET_PARAM_CMDID,
1747  	WMI_10_4_VDEV_INSTALL_KEY_CMDID,
1748  	WMI_10_4_WLAN_PEER_CACHING_ADD_PEER_CMDID,
1749  	WMI_10_4_WLAN_PEER_CACHING_EVICT_PEER_CMDID,
1750  	WMI_10_4_WLAN_PEER_CACHING_RESTORE_PEER_CMDID,
1751  	WMI_10_4_WLAN_PEER_CACHING_PRINT_ALL_PEERS_INFO_CMDID,
1752  	WMI_10_4_PEER_CREATE_CMDID,
1753  	WMI_10_4_PEER_DELETE_CMDID,
1754  	WMI_10_4_PEER_FLUSH_TIDS_CMDID,
1755  	WMI_10_4_PEER_SET_PARAM_CMDID,
1756  	WMI_10_4_PEER_ASSOC_CMDID,
1757  	WMI_10_4_PEER_ADD_WDS_ENTRY_CMDID,
1758  	WMI_10_4_PEER_UPDATE_WDS_ENTRY_CMDID,
1759  	WMI_10_4_PEER_REMOVE_WDS_ENTRY_CMDID,
1760  	WMI_10_4_PEER_ADD_PROXY_STA_ENTRY_CMDID,
1761  	WMI_10_4_PEER_MCAST_GROUP_CMDID,
1762  	WMI_10_4_BCN_TX_CMDID,
1763  	WMI_10_4_PDEV_SEND_BCN_CMDID,
1764  	WMI_10_4_BCN_PRB_TMPL_CMDID,
1765  	WMI_10_4_BCN_FILTER_RX_CMDID,
1766  	WMI_10_4_PRB_REQ_FILTER_RX_CMDID,
1767  	WMI_10_4_MGMT_TX_CMDID,
1768  	WMI_10_4_PRB_TMPL_CMDID,
1769  	WMI_10_4_ADDBA_CLEAR_RESP_CMDID,
1770  	WMI_10_4_ADDBA_SEND_CMDID,
1771  	WMI_10_4_ADDBA_STATUS_CMDID,
1772  	WMI_10_4_DELBA_SEND_CMDID,
1773  	WMI_10_4_ADDBA_SET_RESP_CMDID,
1774  	WMI_10_4_SEND_SINGLEAMSDU_CMDID,
1775  	WMI_10_4_STA_POWERSAVE_MODE_CMDID,
1776  	WMI_10_4_STA_POWERSAVE_PARAM_CMDID,
1777  	WMI_10_4_STA_MIMO_PS_MODE_CMDID,
1778  	WMI_10_4_DBGLOG_CFG_CMDID,
1779  	WMI_10_4_PDEV_DFS_ENABLE_CMDID,
1780  	WMI_10_4_PDEV_DFS_DISABLE_CMDID,
1781  	WMI_10_4_PDEV_QVIT_CMDID,
1782  	WMI_10_4_ROAM_SCAN_MODE,
1783  	WMI_10_4_ROAM_SCAN_RSSI_THRESHOLD,
1784  	WMI_10_4_ROAM_SCAN_PERIOD,
1785  	WMI_10_4_ROAM_SCAN_RSSI_CHANGE_THRESHOLD,
1786  	WMI_10_4_ROAM_AP_PROFILE,
1787  	WMI_10_4_OFL_SCAN_ADD_AP_PROFILE,
1788  	WMI_10_4_OFL_SCAN_REMOVE_AP_PROFILE,
1789  	WMI_10_4_OFL_SCAN_PERIOD,
1790  	WMI_10_4_P2P_DEV_SET_DEVICE_INFO,
1791  	WMI_10_4_P2P_DEV_SET_DISCOVERABILITY,
1792  	WMI_10_4_P2P_GO_SET_BEACON_IE,
1793  	WMI_10_4_P2P_GO_SET_PROBE_RESP_IE,
1794  	WMI_10_4_P2P_SET_VENDOR_IE_DATA_CMDID,
1795  	WMI_10_4_AP_PS_PEER_PARAM_CMDID,
1796  	WMI_10_4_AP_PS_PEER_UAPSD_COEX_CMDID,
1797  	WMI_10_4_PEER_RATE_RETRY_SCHED_CMDID,
1798  	WMI_10_4_WLAN_PROFILE_TRIGGER_CMDID,
1799  	WMI_10_4_WLAN_PROFILE_SET_HIST_INTVL_CMDID,
1800  	WMI_10_4_WLAN_PROFILE_GET_PROFILE_DATA_CMDID,
1801  	WMI_10_4_WLAN_PROFILE_ENABLE_PROFILE_ID_CMDID,
1802  	WMI_10_4_WLAN_PROFILE_LIST_PROFILE_ID_CMDID,
1803  	WMI_10_4_PDEV_SUSPEND_CMDID,
1804  	WMI_10_4_PDEV_RESUME_CMDID,
1805  	WMI_10_4_ADD_BCN_FILTER_CMDID,
1806  	WMI_10_4_RMV_BCN_FILTER_CMDID,
1807  	WMI_10_4_WOW_ADD_WAKE_PATTERN_CMDID,
1808  	WMI_10_4_WOW_DEL_WAKE_PATTERN_CMDID,
1809  	WMI_10_4_WOW_ENABLE_DISABLE_WAKE_EVENT_CMDID,
1810  	WMI_10_4_WOW_ENABLE_CMDID,
1811  	WMI_10_4_WOW_HOSTWAKEUP_FROM_SLEEP_CMDID,
1812  	WMI_10_4_RTT_MEASREQ_CMDID,
1813  	WMI_10_4_RTT_TSF_CMDID,
1814  	WMI_10_4_RTT_KEEPALIVE_CMDID,
1815  	WMI_10_4_OEM_REQ_CMDID,
1816  	WMI_10_4_NAN_CMDID,
1817  	WMI_10_4_VDEV_SPECTRAL_SCAN_CONFIGURE_CMDID,
1818  	WMI_10_4_VDEV_SPECTRAL_SCAN_ENABLE_CMDID,
1819  	WMI_10_4_REQUEST_STATS_CMDID,
1820  	WMI_10_4_GPIO_CONFIG_CMDID,
1821  	WMI_10_4_GPIO_OUTPUT_CMDID,
1822  	WMI_10_4_VDEV_RATEMASK_CMDID,
1823  	WMI_10_4_CSA_OFFLOAD_ENABLE_CMDID,
1824  	WMI_10_4_GTK_OFFLOAD_CMDID,
1825  	WMI_10_4_QBOOST_CFG_CMDID,
1826  	WMI_10_4_CSA_OFFLOAD_CHANSWITCH_CMDID,
1827  	WMI_10_4_PDEV_SMART_ANT_ENABLE_CMDID,
1828  	WMI_10_4_PDEV_SMART_ANT_SET_RX_ANTENNA_CMDID,
1829  	WMI_10_4_PEER_SMART_ANT_SET_TX_ANTENNA_CMDID,
1830  	WMI_10_4_PEER_SMART_ANT_SET_TRAIN_INFO_CMDID,
1831  	WMI_10_4_PEER_SMART_ANT_SET_NODE_CONFIG_OPS_CMDID,
1832  	WMI_10_4_VDEV_SET_KEEPALIVE_CMDID,
1833  	WMI_10_4_VDEV_GET_KEEPALIVE_CMDID,
1834  	WMI_10_4_FORCE_FW_HANG_CMDID,
1835  	WMI_10_4_PDEV_SET_ANTENNA_SWITCH_TABLE_CMDID,
1836  	WMI_10_4_PDEV_SET_CTL_TABLE_CMDID,
1837  	WMI_10_4_PDEV_SET_MIMOGAIN_TABLE_CMDID,
1838  	WMI_10_4_PDEV_RATEPWR_TABLE_CMDID,
1839  	WMI_10_4_PDEV_RATEPWR_CHAINMSK_TABLE_CMDID,
1840  	WMI_10_4_PDEV_FIPS_CMDID,
1841  	WMI_10_4_TT_SET_CONF_CMDID,
1842  	WMI_10_4_FWTEST_CMDID,
1843  	WMI_10_4_VDEV_ATF_REQUEST_CMDID,
1844  	WMI_10_4_PEER_ATF_REQUEST_CMDID,
1845  	WMI_10_4_PDEV_GET_ANI_CCK_CONFIG_CMDID,
1846  	WMI_10_4_PDEV_GET_ANI_OFDM_CONFIG_CMDID,
1847  	WMI_10_4_PDEV_RESERVE_AST_ENTRY_CMDID,
1848  	WMI_10_4_PDEV_GET_NFCAL_POWER_CMDID,
1849  	WMI_10_4_PDEV_GET_TPC_CMDID,
1850  	WMI_10_4_PDEV_GET_AST_INFO_CMDID,
1851  	WMI_10_4_VDEV_SET_DSCP_TID_MAP_CMDID,
1852  	WMI_10_4_PDEV_GET_TEMPERATURE_CMDID,
1853  	WMI_10_4_PDEV_GET_INFO_CMDID,
1854  	WMI_10_4_VDEV_GET_INFO_CMDID,
1855  	WMI_10_4_VDEV_FILTER_NEIGHBOR_RX_PACKETS_CMDID,
1856  	WMI_10_4_MU_CAL_START_CMDID,
1857  	WMI_10_4_SET_CCA_PARAMS_CMDID,
1858  	WMI_10_4_PDEV_BSS_CHAN_INFO_REQUEST_CMDID,
1859  	WMI_10_4_EXT_RESOURCE_CFG_CMDID,
1860  	WMI_10_4_VDEV_SET_IE_CMDID,
1861  	WMI_10_4_SET_LTEU_CONFIG_CMDID,
1862  	WMI_10_4_ATF_SSID_GROUPING_REQUEST_CMDID,
1863  	WMI_10_4_PEER_ATF_EXT_REQUEST_CMDID,
1864  	WMI_10_4_SET_PERIODIC_CHANNEL_STATS_CONFIG,
1865  	WMI_10_4_PEER_BWF_REQUEST_CMDID,
1866  	WMI_10_4_BTCOEX_CFG_CMDID,
1867  	WMI_10_4_PEER_TX_MU_TXMIT_COUNT_CMDID,
1868  	WMI_10_4_PEER_TX_MU_TXMIT_RSTCNT_CMDID,
1869  	WMI_10_4_PEER_GID_USERPOS_LIST_CMDID,
1870  	WMI_10_4_PDEV_CHECK_CAL_VERSION_CMDID,
1871  	WMI_10_4_COEX_VERSION_CFG_CMID,
1872  	WMI_10_4_PDEV_GET_RX_FILTER_CMDID,
1873  	WMI_10_4_PDEV_EXTENDED_NSS_CFG_CMDID,
1874  	WMI_10_4_VDEV_SET_SCAN_NAC_RSSI_CMDID,
1875  	WMI_10_4_PROG_GPIO_BAND_SELECT_CMDID,
1876  	WMI_10_4_CONFIG_SMART_LOGGING_CMDID,
1877  	WMI_10_4_DEBUG_FATAL_CONDITION_CMDID,
1878  	WMI_10_4_GET_TSF_TIMER_CMDID,
1879  	WMI_10_4_PDEV_GET_TPC_TABLE_CMDID,
1880  	WMI_10_4_VDEV_SIFS_TRIGGER_TIME_CMDID,
1881  	WMI_10_4_PDEV_WDS_ENTRY_LIST_CMDID,
1882  	WMI_10_4_TDLS_SET_STATE_CMDID,
1883  	WMI_10_4_TDLS_PEER_UPDATE_CMDID,
1884  	WMI_10_4_TDLS_SET_OFFCHAN_MODE_CMDID,
1885  	WMI_10_4_PDEV_SEND_FD_CMDID,
1886  	WMI_10_4_ENABLE_FILS_CMDID,
1887  	WMI_10_4_PDEV_SET_BRIDGE_MACADDR_CMDID,
1888  	WMI_10_4_ATF_GROUP_WMM_AC_CONFIG_REQUEST_CMDID,
1889  	WMI_10_4_RADAR_FOUND_CMDID,
1890  	WMI_10_4_PEER_CFR_CAPTURE_CMDID,
1891  	WMI_10_4_PER_PEER_PER_TID_CONFIG_CMDID,
1892  	WMI_10_4_PDEV_UTF_CMDID = WMI_10_4_END_CMDID - 1,
1893  };
1894  
1895  enum wmi_10_4_event_id {
1896  	WMI_10_4_SERVICE_READY_EVENTID = 0x8000,
1897  	WMI_10_4_READY_EVENTID,
1898  	WMI_10_4_DEBUG_MESG_EVENTID,
1899  	WMI_10_4_START_EVENTID = 0x9000,
1900  	WMI_10_4_END_EVENTID = 0x9FFF,
1901  	WMI_10_4_SCAN_EVENTID = WMI_10_4_START_EVENTID,
1902  	WMI_10_4_ECHO_EVENTID,
1903  	WMI_10_4_UPDATE_STATS_EVENTID,
1904  	WMI_10_4_INST_RSSI_STATS_EVENTID,
1905  	WMI_10_4_VDEV_START_RESP_EVENTID,
1906  	WMI_10_4_VDEV_STANDBY_REQ_EVENTID,
1907  	WMI_10_4_VDEV_RESUME_REQ_EVENTID,
1908  	WMI_10_4_VDEV_STOPPED_EVENTID,
1909  	WMI_10_4_PEER_STA_KICKOUT_EVENTID,
1910  	WMI_10_4_HOST_SWBA_EVENTID,
1911  	WMI_10_4_TBTTOFFSET_UPDATE_EVENTID,
1912  	WMI_10_4_MGMT_RX_EVENTID,
1913  	WMI_10_4_CHAN_INFO_EVENTID,
1914  	WMI_10_4_PHYERR_EVENTID,
1915  	WMI_10_4_ROAM_EVENTID,
1916  	WMI_10_4_PROFILE_MATCH,
1917  	WMI_10_4_DEBUG_PRINT_EVENTID,
1918  	WMI_10_4_PDEV_QVIT_EVENTID,
1919  	WMI_10_4_WLAN_PROFILE_DATA_EVENTID,
1920  	WMI_10_4_RTT_MEASUREMENT_REPORT_EVENTID,
1921  	WMI_10_4_TSF_MEASUREMENT_REPORT_EVENTID,
1922  	WMI_10_4_RTT_ERROR_REPORT_EVENTID,
1923  	WMI_10_4_RTT_KEEPALIVE_EVENTID,
1924  	WMI_10_4_OEM_CAPABILITY_EVENTID,
1925  	WMI_10_4_OEM_MEASUREMENT_REPORT_EVENTID,
1926  	WMI_10_4_OEM_ERROR_REPORT_EVENTID,
1927  	WMI_10_4_NAN_EVENTID,
1928  	WMI_10_4_WOW_WAKEUP_HOST_EVENTID,
1929  	WMI_10_4_GTK_OFFLOAD_STATUS_EVENTID,
1930  	WMI_10_4_GTK_REKEY_FAIL_EVENTID,
1931  	WMI_10_4_DCS_INTERFERENCE_EVENTID,
1932  	WMI_10_4_PDEV_TPC_CONFIG_EVENTID,
1933  	WMI_10_4_CSA_HANDLING_EVENTID,
1934  	WMI_10_4_GPIO_INPUT_EVENTID,
1935  	WMI_10_4_PEER_RATECODE_LIST_EVENTID,
1936  	WMI_10_4_GENERIC_BUFFER_EVENTID,
1937  	WMI_10_4_MCAST_BUF_RELEASE_EVENTID,
1938  	WMI_10_4_MCAST_LIST_AGEOUT_EVENTID,
1939  	WMI_10_4_VDEV_GET_KEEPALIVE_EVENTID,
1940  	WMI_10_4_WDS_PEER_EVENTID,
1941  	WMI_10_4_PEER_STA_PS_STATECHG_EVENTID,
1942  	WMI_10_4_PDEV_FIPS_EVENTID,
1943  	WMI_10_4_TT_STATS_EVENTID,
1944  	WMI_10_4_PDEV_CHANNEL_HOPPING_EVENTID,
1945  	WMI_10_4_PDEV_ANI_CCK_LEVEL_EVENTID,
1946  	WMI_10_4_PDEV_ANI_OFDM_LEVEL_EVENTID,
1947  	WMI_10_4_PDEV_RESERVE_AST_ENTRY_EVENTID,
1948  	WMI_10_4_PDEV_NFCAL_POWER_EVENTID,
1949  	WMI_10_4_PDEV_TPC_EVENTID,
1950  	WMI_10_4_PDEV_GET_AST_INFO_EVENTID,
1951  	WMI_10_4_PDEV_TEMPERATURE_EVENTID,
1952  	WMI_10_4_PDEV_NFCAL_POWER_ALL_CHANNELS_EVENTID,
1953  	WMI_10_4_PDEV_BSS_CHAN_INFO_EVENTID,
1954  	WMI_10_4_MU_REPORT_EVENTID,
1955  	WMI_10_4_TX_DATA_TRAFFIC_CTRL_EVENTID,
1956  	WMI_10_4_PEER_TX_MU_TXMIT_COUNT_EVENTID,
1957  	WMI_10_4_PEER_GID_USERPOS_LIST_EVENTID,
1958  	WMI_10_4_PDEV_CHECK_CAL_VERSION_EVENTID,
1959  	WMI_10_4_ATF_PEER_STATS_EVENTID,
1960  	WMI_10_4_PDEV_GET_RX_FILTER_EVENTID,
1961  	WMI_10_4_NAC_RSSI_EVENTID,
1962  	WMI_10_4_DEBUG_FATAL_CONDITION_EVENTID,
1963  	WMI_10_4_GET_TSF_TIMER_RESP_EVENTID,
1964  	WMI_10_4_PDEV_TPC_TABLE_EVENTID,
1965  	WMI_10_4_PDEV_WDS_ENTRY_LIST_EVENTID,
1966  	WMI_10_4_TDLS_PEER_EVENTID,
1967  	WMI_10_4_HOST_SWFDA_EVENTID,
1968  	WMI_10_4_ESP_ESTIMATE_EVENTID,
1969  	WMI_10_4_DFS_STATUS_CHECK_EVENTID,
1970  	WMI_10_4_PDEV_UTF_EVENTID = WMI_10_4_END_EVENTID - 1,
1971  };
1972  
1973  enum wmi_phy_mode {
1974  	MODE_11A        = 0,   /* 11a Mode */
1975  	MODE_11G        = 1,   /* 11b/g Mode */
1976  	MODE_11B        = 2,   /* 11b Mode */
1977  	MODE_11GONLY    = 3,   /* 11g only Mode */
1978  	MODE_11NA_HT20   = 4,  /* 11a HT20 mode */
1979  	MODE_11NG_HT20   = 5,  /* 11g HT20 mode */
1980  	MODE_11NA_HT40   = 6,  /* 11a HT40 mode */
1981  	MODE_11NG_HT40   = 7,  /* 11g HT40 mode */
1982  	MODE_11AC_VHT20 = 8,
1983  	MODE_11AC_VHT40 = 9,
1984  	MODE_11AC_VHT80 = 10,
1985  	/*    MODE_11AC_VHT160 = 11, */
1986  	MODE_11AC_VHT20_2G = 11,
1987  	MODE_11AC_VHT40_2G = 12,
1988  	MODE_11AC_VHT80_2G = 13,
1989  	MODE_11AC_VHT80_80 = 14,
1990  	MODE_11AC_VHT160 = 15,
1991  	MODE_UNKNOWN    = 16,
1992  	MODE_MAX        = 16
1993  };
1994  
ath10k_wmi_phymode_str(enum wmi_phy_mode mode)1995  static inline const char *ath10k_wmi_phymode_str(enum wmi_phy_mode mode)
1996  {
1997  	switch (mode) {
1998  	case MODE_11A:
1999  		return "11a";
2000  	case MODE_11G:
2001  		return "11g";
2002  	case MODE_11B:
2003  		return "11b";
2004  	case MODE_11GONLY:
2005  		return "11gonly";
2006  	case MODE_11NA_HT20:
2007  		return "11na-ht20";
2008  	case MODE_11NG_HT20:
2009  		return "11ng-ht20";
2010  	case MODE_11NA_HT40:
2011  		return "11na-ht40";
2012  	case MODE_11NG_HT40:
2013  		return "11ng-ht40";
2014  	case MODE_11AC_VHT20:
2015  		return "11ac-vht20";
2016  	case MODE_11AC_VHT40:
2017  		return "11ac-vht40";
2018  	case MODE_11AC_VHT80:
2019  		return "11ac-vht80";
2020  	case MODE_11AC_VHT160:
2021  		return "11ac-vht160";
2022  	case MODE_11AC_VHT80_80:
2023  		return "11ac-vht80+80";
2024  	case MODE_11AC_VHT20_2G:
2025  		return "11ac-vht20-2g";
2026  	case MODE_11AC_VHT40_2G:
2027  		return "11ac-vht40-2g";
2028  	case MODE_11AC_VHT80_2G:
2029  		return "11ac-vht80-2g";
2030  	case MODE_UNKNOWN:
2031  		/* skip */
2032  		break;
2033  
2034  		/* no default handler to allow compiler to check that the
2035  		 * enum is fully handled
2036  		 */
2037  	}
2038  
2039  	return "<unknown>";
2040  }
2041  
2042  #define WMI_CHAN_LIST_TAG	0x1
2043  #define WMI_SSID_LIST_TAG	0x2
2044  #define WMI_BSSID_LIST_TAG	0x3
2045  #define WMI_IE_TAG		0x4
2046  
2047  struct wmi_channel {
2048  	__le32 mhz;
2049  	__le32 band_center_freq1;
2050  	__le32 band_center_freq2; /* valid for 11ac, 80plus80 */
2051  	union {
2052  		__le32 flags; /* WMI_CHAN_FLAG_ */
2053  		struct {
2054  			u8 mode; /* only 6 LSBs */
2055  		} __packed;
2056  	} __packed;
2057  	union {
2058  		__le32 reginfo0;
2059  		struct {
2060  			/* note: power unit is 0.5 dBm */
2061  			u8 min_power;
2062  			u8 max_power;
2063  			u8 reg_power;
2064  			u8 reg_classid;
2065  		} __packed;
2066  	} __packed;
2067  	union {
2068  		__le32 reginfo1;
2069  		struct {
2070  			/* note: power unit is 1 dBm */
2071  			u8 antenna_max;
2072  			/* note: power unit is 0.5 dBm */
2073  			u8 max_tx_power;
2074  		} __packed;
2075  	} __packed;
2076  } __packed;
2077  
2078  struct wmi_channel_arg {
2079  	u32 freq;
2080  	u32 band_center_freq1;
2081  	u32 band_center_freq2;
2082  	bool passive;
2083  	bool allow_ibss;
2084  	bool allow_ht;
2085  	bool allow_vht;
2086  	bool ht40plus;
2087  	bool chan_radar;
2088  	/* note: power unit is 0.5 dBm */
2089  	u32 min_power;
2090  	u32 max_power;
2091  	u32 max_reg_power;
2092  	/* note: power unit is 1 dBm */
2093  	u32 max_antenna_gain;
2094  	u32 reg_class_id;
2095  	enum wmi_phy_mode mode;
2096  };
2097  
2098  enum wmi_channel_change_cause {
2099  	WMI_CHANNEL_CHANGE_CAUSE_NONE = 0,
2100  	WMI_CHANNEL_CHANGE_CAUSE_CSA,
2101  };
2102  
2103  #define WMI_CHAN_FLAG_HT40_PLUS      (1 << 6)
2104  #define WMI_CHAN_FLAG_PASSIVE        (1 << 7)
2105  #define WMI_CHAN_FLAG_ADHOC_ALLOWED  (1 << 8)
2106  #define WMI_CHAN_FLAG_AP_DISABLED    (1 << 9)
2107  #define WMI_CHAN_FLAG_DFS            (1 << 10)
2108  #define WMI_CHAN_FLAG_ALLOW_HT       (1 << 11)
2109  #define WMI_CHAN_FLAG_ALLOW_VHT      (1 << 12)
2110  
2111  /* Indicate reason for channel switch */
2112  #define WMI_CHANNEL_CHANGE_CAUSE_CSA (1 << 13)
2113  /* DFS required on channel for 2nd segment of VHT160 and VHT80+80*/
2114  #define WMI_CHAN_FLAG_DFS_CFREQ2  (1 << 15)
2115  #define WMI_MAX_SPATIAL_STREAM        3 /* default max ss */
2116  
2117  /* HT Capabilities*/
2118  #define WMI_HT_CAP_ENABLED                0x0001   /* HT Enabled/ disabled */
2119  #define WMI_HT_CAP_HT20_SGI       0x0002   /* Short Guard Interval with HT20 */
2120  #define WMI_HT_CAP_DYNAMIC_SMPS           0x0004   /* Dynamic MIMO powersave */
2121  #define WMI_HT_CAP_TX_STBC                0x0008   /* B3 TX STBC */
2122  #define WMI_HT_CAP_TX_STBC_MASK_SHIFT     3
2123  #define WMI_HT_CAP_RX_STBC                0x0030   /* B4-B5 RX STBC */
2124  #define WMI_HT_CAP_RX_STBC_MASK_SHIFT     4
2125  #define WMI_HT_CAP_LDPC                   0x0040   /* LDPC supported */
2126  #define WMI_HT_CAP_L_SIG_TXOP_PROT        0x0080   /* L-SIG TXOP Protection */
2127  #define WMI_HT_CAP_MPDU_DENSITY           0x0700   /* MPDU Density */
2128  #define WMI_HT_CAP_MPDU_DENSITY_MASK_SHIFT 8
2129  #define WMI_HT_CAP_HT40_SGI               0x0800
2130  #define WMI_HT_CAP_RX_LDPC                0x1000   /* LDPC RX support */
2131  #define WMI_HT_CAP_TX_LDPC                0x2000   /* LDPC TX support */
2132  
2133  #define WMI_HT_CAP_DEFAULT_ALL (WMI_HT_CAP_ENABLED       | \
2134  				WMI_HT_CAP_HT20_SGI      | \
2135  				WMI_HT_CAP_HT40_SGI      | \
2136  				WMI_HT_CAP_TX_STBC       | \
2137  				WMI_HT_CAP_RX_STBC       | \
2138  				WMI_HT_CAP_LDPC)
2139  
2140  /*
2141   * WMI_VHT_CAP_* these maps to ieee 802.11ac vht capability information
2142   * field. The fields not defined here are not supported, or reserved.
2143   * Do not change these masks and if you have to add new one follow the
2144   * bitmask as specified by 802.11ac draft.
2145   */
2146  
2147  #define WMI_VHT_CAP_MAX_MPDU_LEN_MASK            0x00000003
2148  #define WMI_VHT_CAP_RX_LDPC                      0x00000010
2149  #define WMI_VHT_CAP_SGI_80MHZ                    0x00000020
2150  #define WMI_VHT_CAP_SGI_160MHZ                   0x00000040
2151  #define WMI_VHT_CAP_TX_STBC                      0x00000080
2152  #define WMI_VHT_CAP_RX_STBC_MASK                 0x00000300
2153  #define WMI_VHT_CAP_RX_STBC_MASK_SHIFT           8
2154  #define WMI_VHT_CAP_SU_BFER                      0x00000800
2155  #define WMI_VHT_CAP_SU_BFEE                      0x00001000
2156  #define WMI_VHT_CAP_MAX_CS_ANT_MASK              0x0000E000
2157  #define WMI_VHT_CAP_MAX_CS_ANT_MASK_SHIFT        13
2158  #define WMI_VHT_CAP_MAX_SND_DIM_MASK             0x00070000
2159  #define WMI_VHT_CAP_MAX_SND_DIM_MASK_SHIFT       16
2160  #define WMI_VHT_CAP_MU_BFER                      0x00080000
2161  #define WMI_VHT_CAP_MU_BFEE                      0x00100000
2162  #define WMI_VHT_CAP_MAX_AMPDU_LEN_EXP            0x03800000
2163  #define WMI_VHT_CAP_MAX_AMPDU_LEN_EXP_SHIFT      23
2164  #define WMI_VHT_CAP_RX_FIXED_ANT                 0x10000000
2165  #define WMI_VHT_CAP_TX_FIXED_ANT                 0x20000000
2166  
2167  /* The following also refer for max HT AMSDU */
2168  #define WMI_VHT_CAP_MAX_MPDU_LEN_3839            0x00000000
2169  #define WMI_VHT_CAP_MAX_MPDU_LEN_7935            0x00000001
2170  #define WMI_VHT_CAP_MAX_MPDU_LEN_11454           0x00000002
2171  
2172  #define WMI_VHT_CAP_DEFAULT_ALL (WMI_VHT_CAP_MAX_MPDU_LEN_11454  | \
2173  				 WMI_VHT_CAP_RX_LDPC             | \
2174  				 WMI_VHT_CAP_SGI_80MHZ           | \
2175  				 WMI_VHT_CAP_TX_STBC             | \
2176  				 WMI_VHT_CAP_RX_STBC_MASK        | \
2177  				 WMI_VHT_CAP_MAX_AMPDU_LEN_EXP   | \
2178  				 WMI_VHT_CAP_RX_FIXED_ANT        | \
2179  				 WMI_VHT_CAP_TX_FIXED_ANT)
2180  
2181  /*
2182   * Interested readers refer to Rx/Tx MCS Map definition as defined in
2183   * 802.11ac
2184   */
2185  #define WMI_VHT_MAX_MCS_4_SS_MASK(r, ss)      ((3 & (r)) << (((ss) - 1) << 1))
2186  #define WMI_VHT_MAX_SUPP_RATE_MASK           0x1fff0000
2187  #define WMI_VHT_MAX_SUPP_RATE_MASK_SHIFT     16
2188  
2189  enum {
2190  	REGDMN_MODE_11A              = 0x00001, /* 11a channels */
2191  	REGDMN_MODE_TURBO            = 0x00002, /* 11a turbo-only channels */
2192  	REGDMN_MODE_11B              = 0x00004, /* 11b channels */
2193  	REGDMN_MODE_PUREG            = 0x00008, /* 11g channels (OFDM only) */
2194  	REGDMN_MODE_11G              = 0x00008, /* XXX historical */
2195  	REGDMN_MODE_108G             = 0x00020, /* 11a+Turbo channels */
2196  	REGDMN_MODE_108A             = 0x00040, /* 11g+Turbo channels */
2197  	REGDMN_MODE_XR               = 0x00100, /* XR channels */
2198  	REGDMN_MODE_11A_HALF_RATE    = 0x00200, /* 11A half rate channels */
2199  	REGDMN_MODE_11A_QUARTER_RATE = 0x00400, /* 11A quarter rate channels */
2200  	REGDMN_MODE_11NG_HT20        = 0x00800, /* 11N-G HT20 channels */
2201  	REGDMN_MODE_11NA_HT20        = 0x01000, /* 11N-A HT20 channels */
2202  	REGDMN_MODE_11NG_HT40PLUS    = 0x02000, /* 11N-G HT40 + channels */
2203  	REGDMN_MODE_11NG_HT40MINUS   = 0x04000, /* 11N-G HT40 - channels */
2204  	REGDMN_MODE_11NA_HT40PLUS    = 0x08000, /* 11N-A HT40 + channels */
2205  	REGDMN_MODE_11NA_HT40MINUS   = 0x10000, /* 11N-A HT40 - channels */
2206  	REGDMN_MODE_11AC_VHT20       = 0x20000, /* 5Ghz, VHT20 */
2207  	REGDMN_MODE_11AC_VHT40PLUS   = 0x40000, /* 5Ghz, VHT40 + channels */
2208  	REGDMN_MODE_11AC_VHT40MINUS  = 0x80000, /* 5Ghz  VHT40 - channels */
2209  	REGDMN_MODE_11AC_VHT80       = 0x100000, /* 5Ghz, VHT80 channels */
2210  	REGDMN_MODE_11AC_VHT160      = 0x200000,     /* 5Ghz, VHT160 channels */
2211  	REGDMN_MODE_11AC_VHT80_80    = 0x400000,     /* 5Ghz, VHT80+80 channels */
2212  	REGDMN_MODE_ALL              = 0xffffffff
2213  };
2214  
2215  #define REGDMN_CAP1_CHAN_HALF_RATE        0x00000001
2216  #define REGDMN_CAP1_CHAN_QUARTER_RATE     0x00000002
2217  #define REGDMN_CAP1_CHAN_HAL49GHZ         0x00000004
2218  
2219  /* regulatory capabilities */
2220  #define REGDMN_EEPROM_EEREGCAP_EN_FCC_MIDBAND   0x0040
2221  #define REGDMN_EEPROM_EEREGCAP_EN_KK_U1_EVEN    0x0080
2222  #define REGDMN_EEPROM_EEREGCAP_EN_KK_U2         0x0100
2223  #define REGDMN_EEPROM_EEREGCAP_EN_KK_MIDBAND    0x0200
2224  #define REGDMN_EEPROM_EEREGCAP_EN_KK_U1_ODD     0x0400
2225  #define REGDMN_EEPROM_EEREGCAP_EN_KK_NEW_11A    0x0800
2226  
2227  struct hal_reg_capabilities {
2228  	/* regdomain value specified in EEPROM */
2229  	__le32 eeprom_rd;
2230  	/*regdomain */
2231  	__le32 eeprom_rd_ext;
2232  	/* CAP1 capabilities bit map. */
2233  	__le32 regcap1;
2234  	/* REGDMN EEPROM CAP. */
2235  	__le32 regcap2;
2236  	/* REGDMN MODE */
2237  	__le32 wireless_modes;
2238  	__le32 low_2ghz_chan;
2239  	__le32 high_2ghz_chan;
2240  	__le32 low_5ghz_chan;
2241  	__le32 high_5ghz_chan;
2242  } __packed;
2243  
2244  enum wlan_mode_capability {
2245  	WHAL_WLAN_11A_CAPABILITY   = 0x1,
2246  	WHAL_WLAN_11G_CAPABILITY   = 0x2,
2247  	WHAL_WLAN_11AG_CAPABILITY  = 0x3,
2248  };
2249  
2250  /* structure used by FW for requesting host memory */
2251  struct wlan_host_mem_req {
2252  	/* ID of the request */
2253  	__le32 req_id;
2254  	/* size of the  of each unit */
2255  	__le32 unit_size;
2256  	/* flags to  indicate that
2257  	 * the number units is dependent
2258  	 * on number of resources(num vdevs num peers .. etc)
2259  	 */
2260  	__le32 num_unit_info;
2261  	/*
2262  	 * actual number of units to allocate . if flags in the num_unit_info
2263  	 * indicate that number of units is tied to number of a particular
2264  	 * resource to allocate then  num_units filed is set to 0 and host
2265  	 * will derive the number units from number of the resources it is
2266  	 * requesting.
2267  	 */
2268  	__le32 num_units;
2269  } __packed;
2270  
2271  /*
2272   * The following struct holds optional payload for
2273   * wmi_service_ready_event,e.g., 11ac pass some of the
2274   * device capability to the host.
2275   */
2276  struct wmi_service_ready_event {
2277  	__le32 sw_version;
2278  	__le32 sw_version_1;
2279  	__le32 abi_version;
2280  	/* WMI_PHY_CAPABILITY */
2281  	__le32 phy_capability;
2282  	/* Maximum number of frag table entries that SW will populate less 1 */
2283  	__le32 max_frag_entry;
2284  	__le32 wmi_service_bitmap[16];
2285  	__le32 num_rf_chains;
2286  	/*
2287  	 * The following field is only valid for service type
2288  	 * WMI_SERVICE_11AC
2289  	 */
2290  	__le32 ht_cap_info; /* WMI HT Capability */
2291  	__le32 vht_cap_info; /* VHT capability info field of 802.11ac */
2292  	__le32 vht_supp_mcs; /* VHT Supported MCS Set field Rx/Tx same */
2293  	__le32 hw_min_tx_power;
2294  	__le32 hw_max_tx_power;
2295  	struct hal_reg_capabilities hal_reg_capabilities;
2296  	__le32 sys_cap_info;
2297  	__le32 min_pkt_size_enable; /* Enterprise mode short pkt enable */
2298  	/*
2299  	 * Max beacon and Probe Response IE offload size
2300  	 * (includes optional P2P IEs)
2301  	 */
2302  	__le32 max_bcn_ie_size;
2303  	/*
2304  	 * request to host to allocate a chuck of memory and pss it down to FW
2305  	 * via WM_INIT. FW uses this as FW extesnsion memory for saving its
2306  	 * data structures. Only valid for low latency interfaces like PCIE
2307  	 * where FW can access this memory directly (or) by DMA.
2308  	 */
2309  	__le32 num_mem_reqs;
2310  	struct wlan_host_mem_req mem_reqs[];
2311  } __packed;
2312  
2313  /* This is the definition from 10.X firmware branch */
2314  struct wmi_10x_service_ready_event {
2315  	__le32 sw_version;
2316  	__le32 abi_version;
2317  
2318  	/* WMI_PHY_CAPABILITY */
2319  	__le32 phy_capability;
2320  
2321  	/* Maximum number of frag table entries that SW will populate less 1 */
2322  	__le32 max_frag_entry;
2323  	__le32 wmi_service_bitmap[16];
2324  	__le32 num_rf_chains;
2325  
2326  	/*
2327  	 * The following field is only valid for service type
2328  	 * WMI_SERVICE_11AC
2329  	 */
2330  	__le32 ht_cap_info; /* WMI HT Capability */
2331  	__le32 vht_cap_info; /* VHT capability info field of 802.11ac */
2332  	__le32 vht_supp_mcs; /* VHT Supported MCS Set field Rx/Tx same */
2333  	__le32 hw_min_tx_power;
2334  	__le32 hw_max_tx_power;
2335  
2336  	struct hal_reg_capabilities hal_reg_capabilities;
2337  
2338  	__le32 sys_cap_info;
2339  	__le32 min_pkt_size_enable; /* Enterprise mode short pkt enable */
2340  
2341  	/*
2342  	 * request to host to allocate a chuck of memory and pss it down to FW
2343  	 * via WM_INIT. FW uses this as FW extesnsion memory for saving its
2344  	 * data structures. Only valid for low latency interfaces like PCIE
2345  	 * where FW can access this memory directly (or) by DMA.
2346  	 */
2347  	__le32 num_mem_reqs;
2348  
2349  	struct wlan_host_mem_req mem_reqs[];
2350  } __packed;
2351  
2352  #define WMI_SERVICE_READY_TIMEOUT_HZ (5 * HZ)
2353  #define WMI_UNIFIED_READY_TIMEOUT_HZ (5 * HZ)
2354  
2355  struct wmi_ready_event {
2356  	__le32 sw_version;
2357  	__le32 abi_version;
2358  	struct wmi_mac_addr mac_addr;
2359  	__le32 status;
2360  } __packed;
2361  
2362  struct wmi_resource_config {
2363  	/* number of virtual devices (VAPs) to support */
2364  	__le32 num_vdevs;
2365  
2366  	/* number of peer nodes to support */
2367  	__le32 num_peers;
2368  
2369  	/*
2370  	 * In offload mode target supports features like WOW, chatter and
2371  	 * other protocol offloads. In order to support them some
2372  	 * functionalities like reorder buffering, PN checking need to be
2373  	 * done in target. This determines maximum number of peers supported
2374  	 * by target in offload mode
2375  	 */
2376  	__le32 num_offload_peers;
2377  
2378  	/* For target-based RX reordering */
2379  	__le32 num_offload_reorder_bufs;
2380  
2381  	/* number of keys per peer */
2382  	__le32 num_peer_keys;
2383  
2384  	/* total number of TX/RX data TIDs */
2385  	__le32 num_tids;
2386  
2387  	/*
2388  	 * max skid for resolving hash collisions
2389  	 *
2390  	 *   The address search table is sparse, so that if two MAC addresses
2391  	 *   result in the same hash value, the second of these conflicting
2392  	 *   entries can slide to the next index in the address search table,
2393  	 *   and use it, if it is unoccupied.  This ast_skid_limit parameter
2394  	 *   specifies the upper bound on how many subsequent indices to search
2395  	 *   over to find an unoccupied space.
2396  	 */
2397  	__le32 ast_skid_limit;
2398  
2399  	/*
2400  	 * the nominal chain mask for transmit
2401  	 *
2402  	 *   The chain mask may be modified dynamically, e.g. to operate AP
2403  	 *   tx with a reduced number of chains if no clients are associated.
2404  	 *   This configuration parameter specifies the nominal chain-mask that
2405  	 *   should be used when not operating with a reduced set of tx chains.
2406  	 */
2407  	__le32 tx_chain_mask;
2408  
2409  	/*
2410  	 * the nominal chain mask for receive
2411  	 *
2412  	 *   The chain mask may be modified dynamically, e.g. for a client
2413  	 *   to use a reduced number of chains for receive if the traffic to
2414  	 *   the client is low enough that it doesn't require downlink MIMO
2415  	 *   or antenna diversity.
2416  	 *   This configuration parameter specifies the nominal chain-mask that
2417  	 *   should be used when not operating with a reduced set of rx chains.
2418  	 */
2419  	__le32 rx_chain_mask;
2420  
2421  	/*
2422  	 * what rx reorder timeout (ms) to use for the AC
2423  	 *
2424  	 *   Each WMM access class (voice, video, best-effort, background) will
2425  	 *   have its own timeout value to dictate how long to wait for missing
2426  	 *   rx MPDUs to arrive before flushing subsequent MPDUs that have
2427  	 *   already been received.
2428  	 *   This parameter specifies the timeout in milliseconds for each
2429  	 *   class.
2430  	 */
2431  	__le32 rx_timeout_pri_vi;
2432  	__le32 rx_timeout_pri_vo;
2433  	__le32 rx_timeout_pri_be;
2434  	__le32 rx_timeout_pri_bk;
2435  
2436  	/*
2437  	 * what mode the rx should decap packets to
2438  	 *
2439  	 *   MAC can decap to RAW (no decap), native wifi or Ethernet types
2440  	 *   THis setting also determines the default TX behavior, however TX
2441  	 *   behavior can be modified on a per VAP basis during VAP init
2442  	 */
2443  	__le32 rx_decap_mode;
2444  
2445  	/* what is the maximum number of scan requests that can be queued */
2446  	__le32 scan_max_pending_reqs;
2447  
2448  	/* maximum VDEV that could use BMISS offload */
2449  	__le32 bmiss_offload_max_vdev;
2450  
2451  	/* maximum VDEV that could use offload roaming */
2452  	__le32 roam_offload_max_vdev;
2453  
2454  	/* maximum AP profiles that would push to offload roaming */
2455  	__le32 roam_offload_max_ap_profiles;
2456  
2457  	/*
2458  	 * how many groups to use for mcast->ucast conversion
2459  	 *
2460  	 *   The target's WAL maintains a table to hold information regarding
2461  	 *   which peers belong to a given multicast group, so that if
2462  	 *   multicast->unicast conversion is enabled, the target can convert
2463  	 *   multicast tx frames to a series of unicast tx frames, to each
2464  	 *   peer within the multicast group.
2465  	     This num_mcast_groups configuration parameter tells the target how
2466  	 *   many multicast groups to provide storage for within its multicast
2467  	 *   group membership table.
2468  	 */
2469  	__le32 num_mcast_groups;
2470  
2471  	/*
2472  	 * size to alloc for the mcast membership table
2473  	 *
2474  	 *   This num_mcast_table_elems configuration parameter tells the
2475  	 *   target how many peer elements it needs to provide storage for in
2476  	 *   its multicast group membership table.
2477  	 *   These multicast group membership table elements are shared by the
2478  	 *   multicast groups stored within the table.
2479  	 */
2480  	__le32 num_mcast_table_elems;
2481  
2482  	/*
2483  	 * whether/how to do multicast->unicast conversion
2484  	 *
2485  	 *   This configuration parameter specifies whether the target should
2486  	 *   perform multicast --> unicast conversion on transmit, and if so,
2487  	 *   what to do if it finds no entries in its multicast group
2488  	 *   membership table for the multicast IP address in the tx frame.
2489  	 *   Configuration value:
2490  	 *   0 -> Do not perform multicast to unicast conversion.
2491  	 *   1 -> Convert multicast frames to unicast, if the IP multicast
2492  	 *        address from the tx frame is found in the multicast group
2493  	 *        membership table.  If the IP multicast address is not found,
2494  	 *        drop the frame.
2495  	 *   2 -> Convert multicast frames to unicast, if the IP multicast
2496  	 *        address from the tx frame is found in the multicast group
2497  	 *        membership table.  If the IP multicast address is not found,
2498  	 *        transmit the frame as multicast.
2499  	 */
2500  	__le32 mcast2ucast_mode;
2501  
2502  	/*
2503  	 * how much memory to allocate for a tx PPDU dbg log
2504  	 *
2505  	 *   This parameter controls how much memory the target will allocate
2506  	 *   to store a log of tx PPDU meta-information (how large the PPDU
2507  	 *   was, when it was sent, whether it was successful, etc.)
2508  	 */
2509  	__le32 tx_dbg_log_size;
2510  
2511  	/* how many AST entries to be allocated for WDS */
2512  	__le32 num_wds_entries;
2513  
2514  	/*
2515  	 * MAC DMA burst size, e.g., For target PCI limit can be
2516  	 * 0 -default, 1 256B
2517  	 */
2518  	__le32 dma_burst_size;
2519  
2520  	/*
2521  	 * Fixed delimiters to be inserted after every MPDU to
2522  	 * account for interface latency to avoid underrun.
2523  	 */
2524  	__le32 mac_aggr_delim;
2525  
2526  	/*
2527  	 *   determine whether target is responsible for detecting duplicate
2528  	 *   non-aggregate MPDU and timing out stale fragments.
2529  	 *
2530  	 *   A-MPDU reordering is always performed on the target.
2531  	 *
2532  	 *   0: target responsible for frag timeout and dup checking
2533  	 *   1: host responsible for frag timeout and dup checking
2534  	 */
2535  	__le32 rx_skip_defrag_timeout_dup_detection_check;
2536  
2537  	/*
2538  	 * Configuration for VoW :
2539  	 * No of Video Nodes to be supported
2540  	 * and Max no of descriptors for each Video link (node).
2541  	 */
2542  	__le32 vow_config;
2543  
2544  	/* maximum VDEV that could use GTK offload */
2545  	__le32 gtk_offload_max_vdev;
2546  
2547  	/* Number of msdu descriptors target should use */
2548  	__le32 num_msdu_desc;
2549  
2550  	/*
2551  	 * Max. number of Tx fragments per MSDU
2552  	 *  This parameter controls the max number of Tx fragments per MSDU.
2553  	 *  This is sent by the target as part of the WMI_SERVICE_READY event
2554  	 *  and is overridden by the OS shim as required.
2555  	 */
2556  	__le32 max_frag_entries;
2557  } __packed;
2558  
2559  struct wmi_resource_config_10x {
2560  	/* number of virtual devices (VAPs) to support */
2561  	__le32 num_vdevs;
2562  
2563  	/* number of peer nodes to support */
2564  	__le32 num_peers;
2565  
2566  	/* number of keys per peer */
2567  	__le32 num_peer_keys;
2568  
2569  	/* total number of TX/RX data TIDs */
2570  	__le32 num_tids;
2571  
2572  	/*
2573  	 * max skid for resolving hash collisions
2574  	 *
2575  	 *   The address search table is sparse, so that if two MAC addresses
2576  	 *   result in the same hash value, the second of these conflicting
2577  	 *   entries can slide to the next index in the address search table,
2578  	 *   and use it, if it is unoccupied.  This ast_skid_limit parameter
2579  	 *   specifies the upper bound on how many subsequent indices to search
2580  	 *   over to find an unoccupied space.
2581  	 */
2582  	__le32 ast_skid_limit;
2583  
2584  	/*
2585  	 * the nominal chain mask for transmit
2586  	 *
2587  	 *   The chain mask may be modified dynamically, e.g. to operate AP
2588  	 *   tx with a reduced number of chains if no clients are associated.
2589  	 *   This configuration parameter specifies the nominal chain-mask that
2590  	 *   should be used when not operating with a reduced set of tx chains.
2591  	 */
2592  	__le32 tx_chain_mask;
2593  
2594  	/*
2595  	 * the nominal chain mask for receive
2596  	 *
2597  	 *   The chain mask may be modified dynamically, e.g. for a client
2598  	 *   to use a reduced number of chains for receive if the traffic to
2599  	 *   the client is low enough that it doesn't require downlink MIMO
2600  	 *   or antenna diversity.
2601  	 *   This configuration parameter specifies the nominal chain-mask that
2602  	 *   should be used when not operating with a reduced set of rx chains.
2603  	 */
2604  	__le32 rx_chain_mask;
2605  
2606  	/*
2607  	 * what rx reorder timeout (ms) to use for the AC
2608  	 *
2609  	 *   Each WMM access class (voice, video, best-effort, background) will
2610  	 *   have its own timeout value to dictate how long to wait for missing
2611  	 *   rx MPDUs to arrive before flushing subsequent MPDUs that have
2612  	 *   already been received.
2613  	 *   This parameter specifies the timeout in milliseconds for each
2614  	 *   class.
2615  	 */
2616  	__le32 rx_timeout_pri_vi;
2617  	__le32 rx_timeout_pri_vo;
2618  	__le32 rx_timeout_pri_be;
2619  	__le32 rx_timeout_pri_bk;
2620  
2621  	/*
2622  	 * what mode the rx should decap packets to
2623  	 *
2624  	 *   MAC can decap to RAW (no decap), native wifi or Ethernet types
2625  	 *   THis setting also determines the default TX behavior, however TX
2626  	 *   behavior can be modified on a per VAP basis during VAP init
2627  	 */
2628  	__le32 rx_decap_mode;
2629  
2630  	/* what is the maximum number of scan requests that can be queued */
2631  	__le32 scan_max_pending_reqs;
2632  
2633  	/* maximum VDEV that could use BMISS offload */
2634  	__le32 bmiss_offload_max_vdev;
2635  
2636  	/* maximum VDEV that could use offload roaming */
2637  	__le32 roam_offload_max_vdev;
2638  
2639  	/* maximum AP profiles that would push to offload roaming */
2640  	__le32 roam_offload_max_ap_profiles;
2641  
2642  	/*
2643  	 * how many groups to use for mcast->ucast conversion
2644  	 *
2645  	 *   The target's WAL maintains a table to hold information regarding
2646  	 *   which peers belong to a given multicast group, so that if
2647  	 *   multicast->unicast conversion is enabled, the target can convert
2648  	 *   multicast tx frames to a series of unicast tx frames, to each
2649  	 *   peer within the multicast group.
2650  	     This num_mcast_groups configuration parameter tells the target how
2651  	 *   many multicast groups to provide storage for within its multicast
2652  	 *   group membership table.
2653  	 */
2654  	__le32 num_mcast_groups;
2655  
2656  	/*
2657  	 * size to alloc for the mcast membership table
2658  	 *
2659  	 *   This num_mcast_table_elems configuration parameter tells the
2660  	 *   target how many peer elements it needs to provide storage for in
2661  	 *   its multicast group membership table.
2662  	 *   These multicast group membership table elements are shared by the
2663  	 *   multicast groups stored within the table.
2664  	 */
2665  	__le32 num_mcast_table_elems;
2666  
2667  	/*
2668  	 * whether/how to do multicast->unicast conversion
2669  	 *
2670  	 *   This configuration parameter specifies whether the target should
2671  	 *   perform multicast --> unicast conversion on transmit, and if so,
2672  	 *   what to do if it finds no entries in its multicast group
2673  	 *   membership table for the multicast IP address in the tx frame.
2674  	 *   Configuration value:
2675  	 *   0 -> Do not perform multicast to unicast conversion.
2676  	 *   1 -> Convert multicast frames to unicast, if the IP multicast
2677  	 *        address from the tx frame is found in the multicast group
2678  	 *        membership table.  If the IP multicast address is not found,
2679  	 *        drop the frame.
2680  	 *   2 -> Convert multicast frames to unicast, if the IP multicast
2681  	 *        address from the tx frame is found in the multicast group
2682  	 *        membership table.  If the IP multicast address is not found,
2683  	 *        transmit the frame as multicast.
2684  	 */
2685  	__le32 mcast2ucast_mode;
2686  
2687  	/*
2688  	 * how much memory to allocate for a tx PPDU dbg log
2689  	 *
2690  	 *   This parameter controls how much memory the target will allocate
2691  	 *   to store a log of tx PPDU meta-information (how large the PPDU
2692  	 *   was, when it was sent, whether it was successful, etc.)
2693  	 */
2694  	__le32 tx_dbg_log_size;
2695  
2696  	/* how many AST entries to be allocated for WDS */
2697  	__le32 num_wds_entries;
2698  
2699  	/*
2700  	 * MAC DMA burst size, e.g., For target PCI limit can be
2701  	 * 0 -default, 1 256B
2702  	 */
2703  	__le32 dma_burst_size;
2704  
2705  	/*
2706  	 * Fixed delimiters to be inserted after every MPDU to
2707  	 * account for interface latency to avoid underrun.
2708  	 */
2709  	__le32 mac_aggr_delim;
2710  
2711  	/*
2712  	 *   determine whether target is responsible for detecting duplicate
2713  	 *   non-aggregate MPDU and timing out stale fragments.
2714  	 *
2715  	 *   A-MPDU reordering is always performed on the target.
2716  	 *
2717  	 *   0: target responsible for frag timeout and dup checking
2718  	 *   1: host responsible for frag timeout and dup checking
2719  	 */
2720  	__le32 rx_skip_defrag_timeout_dup_detection_check;
2721  
2722  	/*
2723  	 * Configuration for VoW :
2724  	 * No of Video Nodes to be supported
2725  	 * and Max no of descriptors for each Video link (node).
2726  	 */
2727  	__le32 vow_config;
2728  
2729  	/* Number of msdu descriptors target should use */
2730  	__le32 num_msdu_desc;
2731  
2732  	/*
2733  	 * Max. number of Tx fragments per MSDU
2734  	 *  This parameter controls the max number of Tx fragments per MSDU.
2735  	 *  This is sent by the target as part of the WMI_SERVICE_READY event
2736  	 *  and is overridden by the OS shim as required.
2737  	 */
2738  	__le32 max_frag_entries;
2739  } __packed;
2740  
2741  enum wmi_10_2_feature_mask {
2742  	WMI_10_2_RX_BATCH_MODE = BIT(0),
2743  	WMI_10_2_ATF_CONFIG    = BIT(1),
2744  	WMI_10_2_COEX_GPIO     = BIT(3),
2745  	WMI_10_2_BSS_CHAN_INFO = BIT(6),
2746  	WMI_10_2_PEER_STATS    = BIT(7),
2747  };
2748  
2749  struct wmi_resource_config_10_2 {
2750  	struct wmi_resource_config_10x common;
2751  	__le32 max_peer_ext_stats;
2752  	__le32 smart_ant_cap; /* 0-disable, 1-enable */
2753  	__le32 bk_min_free;
2754  	__le32 be_min_free;
2755  	__le32 vi_min_free;
2756  	__le32 vo_min_free;
2757  	__le32 feature_mask;
2758  } __packed;
2759  
2760  #define NUM_UNITS_IS_NUM_VDEVS         BIT(0)
2761  #define NUM_UNITS_IS_NUM_PEERS         BIT(1)
2762  #define NUM_UNITS_IS_NUM_ACTIVE_PEERS  BIT(2)
2763  
2764  struct wmi_resource_config_10_4 {
2765  	/* Number of virtual devices (VAPs) to support */
2766  	__le32 num_vdevs;
2767  
2768  	/* Number of peer nodes to support */
2769  	__le32 num_peers;
2770  
2771  	/* Number of active peer nodes to support */
2772  	__le32 num_active_peers;
2773  
2774  	/* In offload mode, target supports features like WOW, chatter and other
2775  	 * protocol offloads. In order to support them some functionalities like
2776  	 * reorder buffering, PN checking need to be done in target.
2777  	 * This determines maximum number of peers supported by target in
2778  	 * offload mode.
2779  	 */
2780  	__le32 num_offload_peers;
2781  
2782  	/* Number of reorder buffers available for doing target based reorder
2783  	 * Rx reorder buffering
2784  	 */
2785  	__le32 num_offload_reorder_buffs;
2786  
2787  	/* Number of keys per peer */
2788  	__le32 num_peer_keys;
2789  
2790  	/* Total number of TX/RX data TIDs */
2791  	__le32 num_tids;
2792  
2793  	/* Max skid for resolving hash collisions.
2794  	 * The address search table is sparse, so that if two MAC addresses
2795  	 * result in the same hash value, the second of these conflicting
2796  	 * entries can slide to the next index in the address search table,
2797  	 * and use it, if it is unoccupied.  This ast_skid_limit parameter
2798  	 * specifies the upper bound on how many subsequent indices to search
2799  	 * over to find an unoccupied space.
2800  	 */
2801  	__le32 ast_skid_limit;
2802  
2803  	/* The nominal chain mask for transmit.
2804  	 * The chain mask may be modified dynamically, e.g. to operate AP tx
2805  	 * with a reduced number of chains if no clients are associated.
2806  	 * This configuration parameter specifies the nominal chain-mask that
2807  	 * should be used when not operating with a reduced set of tx chains.
2808  	 */
2809  	__le32 tx_chain_mask;
2810  
2811  	/* The nominal chain mask for receive.
2812  	 * The chain mask may be modified dynamically, e.g. for a client to use
2813  	 * a reduced number of chains for receive if the traffic to the client
2814  	 * is low enough that it doesn't require downlink MIMO or antenna
2815  	 * diversity. This configuration parameter specifies the nominal
2816  	 * chain-mask that should be used when not operating with a reduced
2817  	 * set of rx chains.
2818  	 */
2819  	__le32 rx_chain_mask;
2820  
2821  	/* What rx reorder timeout (ms) to use for the AC.
2822  	 * Each WMM access class (voice, video, best-effort, background) will
2823  	 * have its own timeout value to dictate how long to wait for missing
2824  	 * rx MPDUs to arrive before flushing subsequent MPDUs that have already
2825  	 * been received. This parameter specifies the timeout in milliseconds
2826  	 * for each class.
2827  	 */
2828  	__le32 rx_timeout_pri[4];
2829  
2830  	/* What mode the rx should decap packets to.
2831  	 * MAC can decap to RAW (no decap), native wifi or Ethernet types.
2832  	 * This setting also determines the default TX behavior, however TX
2833  	 * behavior can be modified on a per VAP basis during VAP init
2834  	 */
2835  	__le32 rx_decap_mode;
2836  
2837  	__le32 scan_max_pending_req;
2838  
2839  	__le32 bmiss_offload_max_vdev;
2840  
2841  	__le32 roam_offload_max_vdev;
2842  
2843  	__le32 roam_offload_max_ap_profiles;
2844  
2845  	/* How many groups to use for mcast->ucast conversion.
2846  	 * The target's WAL maintains a table to hold information regarding
2847  	 * which peers belong to a given multicast group, so that if
2848  	 * multicast->unicast conversion is enabled, the target can convert
2849  	 * multicast tx frames to a series of unicast tx frames, to each peer
2850  	 * within the multicast group. This num_mcast_groups configuration
2851  	 * parameter tells the target how many multicast groups to provide
2852  	 * storage for within its multicast group membership table.
2853  	 */
2854  	__le32 num_mcast_groups;
2855  
2856  	/* Size to alloc for the mcast membership table.
2857  	 * This num_mcast_table_elems configuration parameter tells the target
2858  	 * how many peer elements it needs to provide storage for in its
2859  	 * multicast group membership table. These multicast group membership
2860  	 * table elements are shared by the multicast groups stored within
2861  	 * the table.
2862  	 */
2863  	__le32 num_mcast_table_elems;
2864  
2865  	/* Whether/how to do multicast->unicast conversion.
2866  	 * This configuration parameter specifies whether the target should
2867  	 * perform multicast --> unicast conversion on transmit, and if so,
2868  	 * what to do if it finds no entries in its multicast group membership
2869  	 * table for the multicast IP address in the tx frame.
2870  	 * Configuration value:
2871  	 * 0 -> Do not perform multicast to unicast conversion.
2872  	 * 1 -> Convert multicast frames to unicast, if the IP multicast address
2873  	 *      from the tx frame is found in the multicast group membership
2874  	 *      table.  If the IP multicast address is not found, drop the frame
2875  	 * 2 -> Convert multicast frames to unicast, if the IP multicast address
2876  	 *      from the tx frame is found in the multicast group membership
2877  	 *      table.  If the IP multicast address is not found, transmit the
2878  	 *      frame as multicast.
2879  	 */
2880  	__le32 mcast2ucast_mode;
2881  
2882  	/* How much memory to allocate for a tx PPDU dbg log.
2883  	 * This parameter controls how much memory the target will allocate to
2884  	 * store a log of tx PPDU meta-information (how large the PPDU was,
2885  	 * when it was sent, whether it was successful, etc.)
2886  	 */
2887  	__le32 tx_dbg_log_size;
2888  
2889  	/* How many AST entries to be allocated for WDS */
2890  	__le32 num_wds_entries;
2891  
2892  	/* MAC DMA burst size. 0 -default, 1 -256B */
2893  	__le32 dma_burst_size;
2894  
2895  	/* Fixed delimiters to be inserted after every MPDU to account for
2896  	 * interface latency to avoid underrun.
2897  	 */
2898  	__le32 mac_aggr_delim;
2899  
2900  	/* Determine whether target is responsible for detecting duplicate
2901  	 * non-aggregate MPDU and timing out stale fragments. A-MPDU reordering
2902  	 * is always performed on the target.
2903  	 *
2904  	 * 0: target responsible for frag timeout and dup checking
2905  	 * 1: host responsible for frag timeout and dup checking
2906  	 */
2907  	__le32 rx_skip_defrag_timeout_dup_detection_check;
2908  
2909  	/* Configuration for VoW : No of Video nodes to be supported and max
2910  	 * no of descriptors for each video link (node).
2911  	 */
2912  	__le32 vow_config;
2913  
2914  	/* Maximum vdev that could use gtk offload */
2915  	__le32 gtk_offload_max_vdev;
2916  
2917  	/* Number of msdu descriptors target should use */
2918  	__le32 num_msdu_desc;
2919  
2920  	/* Max number of tx fragments per MSDU.
2921  	 * This parameter controls the max number of tx fragments per MSDU.
2922  	 * This will passed by target as part of the WMI_SERVICE_READY event
2923  	 * and is overridden by the OS shim as required.
2924  	 */
2925  	__le32 max_frag_entries;
2926  
2927  	/* Max number of extended peer stats.
2928  	 * This parameter controls the max number of peers for which extended
2929  	 * statistics are supported by target
2930  	 */
2931  	__le32 max_peer_ext_stats;
2932  
2933  	/* Smart antenna capabilities information.
2934  	 * 1 - Smart antenna is enabled
2935  	 * 0 - Smart antenna is disabled
2936  	 * In future this can contain smart antenna specific capabilities.
2937  	 */
2938  	__le32 smart_ant_cap;
2939  
2940  	/* User can configure the buffers allocated for each AC (BE, BK, VI, VO)
2941  	 * during init.
2942  	 */
2943  	__le32 bk_minfree;
2944  	__le32 be_minfree;
2945  	__le32 vi_minfree;
2946  	__le32 vo_minfree;
2947  
2948  	/* Rx batch mode capability.
2949  	 * 1 - Rx batch mode enabled
2950  	 * 0 - Rx batch mode disabled
2951  	 */
2952  	__le32 rx_batchmode;
2953  
2954  	/* Thermal throttling capability.
2955  	 * 1 - Capable of thermal throttling
2956  	 * 0 - Not capable of thermal throttling
2957  	 */
2958  	__le32 tt_support;
2959  
2960  	/* ATF configuration.
2961  	 * 1  - Enable ATF
2962  	 * 0  - Disable ATF
2963  	 */
2964  	__le32 atf_config;
2965  
2966  	/* Configure padding to manage IP header un-alignment
2967  	 * 1  - Enable padding
2968  	 * 0  - Disable padding
2969  	 */
2970  	__le32 iphdr_pad_config;
2971  
2972  	/* qwrap configuration (bits 15-0)
2973  	 * 1  - This is qwrap configuration
2974  	 * 0  - This is not qwrap
2975  	 *
2976  	 * Bits 31-16 is alloc_frag_desc_for_data_pkt (1 enables, 0 disables)
2977  	 * In order to get ack-RSSI reporting and to specify the tx-rate for
2978  	 * individual frames, this option must be enabled.  This uses an extra
2979  	 * 4 bytes per tx-msdu descriptor, so don't enable it unless you need it.
2980  	 */
2981  	__le32 qwrap_config;
2982  } __packed;
2983  
2984  enum wmi_coex_version {
2985  	WMI_NO_COEX_VERSION_SUPPORT	= 0,
2986  	/* 3 wire coex support*/
2987  	WMI_COEX_VERSION_1		= 1,
2988  	/* 2.5 wire coex support*/
2989  	WMI_COEX_VERSION_2		= 2,
2990  	/* 2.5 wire coex with duty cycle support */
2991  	WMI_COEX_VERSION_3		= 3,
2992  	/* 4 wire coex support*/
2993  	WMI_COEX_VERSION_4		= 4,
2994  };
2995  
2996  /**
2997   * enum wmi_10_4_feature_mask - WMI 10.4 feature enable/disable flags
2998   * @WMI_10_4_LTEU_SUPPORT: LTEU config
2999   * @WMI_10_4_COEX_GPIO_SUPPORT: COEX GPIO config
3000   * @WMI_10_4_AUX_RADIO_SPECTRAL_INTF: AUX Radio Enhancement for spectral scan
3001   * @WMI_10_4_AUX_RADIO_CHAN_LOAD_INTF: AUX Radio Enhancement for chan load scan
3002   * @WMI_10_4_BSS_CHANNEL_INFO_64: BSS channel info stats
3003   * @WMI_10_4_PEER_STATS: Per station stats
3004   * @WMI_10_4_VDEV_STATS: Per vdev stats
3005   * @WMI_10_4_TDLS: Implicit TDLS support in firmware enable/disable
3006   * @WMI_10_4_TDLS_OFFCHAN: TDLS offchannel support enable/disable
3007   * @WMI_10_4_TDLS_UAPSD_BUFFER_STA: TDLS buffer sta support enable/disable
3008   * @WMI_10_4_TDLS_UAPSD_SLEEP_STA: TDLS sleep sta support enable/disable
3009   * @WMI_10_4_TDLS_CONN_TRACKER_IN_HOST_MODE: TDLS connection tracker in host
3010   *	enable/disable
3011   * @WMI_10_4_TDLS_EXPLICIT_MODE_ONLY: Explicit TDLS mode enable/disable
3012   * @WMI_10_4_TX_DATA_ACK_RSSI: Enable DATA ACK RSSI if firmware is capable
3013   * @WMI_10_4_EXT_PEER_TID_CONFIGS_SUPPORT:  Firmware supports Extended Peer
3014   *	TID configuration for QoS related settings
3015   * @WMI_10_4_REPORT_AIRTIME: Firmware supports transmit airtime reporting
3016   */
3017  enum wmi_10_4_feature_mask {
3018  	WMI_10_4_LTEU_SUPPORT			= BIT(0),
3019  	WMI_10_4_COEX_GPIO_SUPPORT		= BIT(1),
3020  	WMI_10_4_AUX_RADIO_SPECTRAL_INTF	= BIT(2),
3021  	WMI_10_4_AUX_RADIO_CHAN_LOAD_INTF	= BIT(3),
3022  	WMI_10_4_BSS_CHANNEL_INFO_64		= BIT(4),
3023  	WMI_10_4_PEER_STATS			= BIT(5),
3024  	WMI_10_4_VDEV_STATS			= BIT(6),
3025  	WMI_10_4_TDLS				= BIT(7),
3026  	WMI_10_4_TDLS_OFFCHAN			= BIT(8),
3027  	WMI_10_4_TDLS_UAPSD_BUFFER_STA		= BIT(9),
3028  	WMI_10_4_TDLS_UAPSD_SLEEP_STA		= BIT(10),
3029  	WMI_10_4_TDLS_CONN_TRACKER_IN_HOST_MODE = BIT(11),
3030  	WMI_10_4_TDLS_EXPLICIT_MODE_ONLY	= BIT(12),
3031  	WMI_10_4_TX_DATA_ACK_RSSI               = BIT(16),
3032  	WMI_10_4_EXT_PEER_TID_CONFIGS_SUPPORT	= BIT(17),
3033  	WMI_10_4_REPORT_AIRTIME			= BIT(18),
3034  
3035  };
3036  
3037  /* WMI_GPIO_CONFIG_CMDID */
3038  enum {
3039  	WMI_GPIO_PULL_NONE,
3040  	WMI_GPIO_PULL_UP,
3041  	WMI_GPIO_PULL_DOWN,
3042  };
3043  
3044  enum {
3045  	WMI_GPIO_INTTYPE_DISABLE,
3046  	WMI_GPIO_INTTYPE_RISING_EDGE,
3047  	WMI_GPIO_INTTYPE_FALLING_EDGE,
3048  	WMI_GPIO_INTTYPE_BOTH_EDGE,
3049  	WMI_GPIO_INTTYPE_LEVEL_LOW,
3050  	WMI_GPIO_INTTYPE_LEVEL_HIGH
3051  };
3052  
3053  /* WMI_GPIO_CONFIG_CMDID */
3054  struct wmi_gpio_config_cmd {
3055  	__le32 gpio_num;             /* GPIO number to be setup */
3056  	__le32 input;                /* 0 - Output/ 1 - Input */
3057  	__le32 pull_type;            /* Pull type defined above */
3058  	__le32 intr_mode;            /* Interrupt mode defined above (Input) */
3059  } __packed;
3060  
3061  /* WMI_GPIO_OUTPUT_CMDID */
3062  struct wmi_gpio_output_cmd {
3063  	__le32 gpio_num;    /* GPIO number to be setup */
3064  	__le32 set;         /* Set the GPIO pin*/
3065  } __packed;
3066  
3067  /* WMI_GPIO_INPUT_EVENTID */
3068  struct wmi_gpio_input_event {
3069  	__le32 gpio_num;    /* GPIO number which changed state */
3070  } __packed;
3071  
3072  struct wmi_ext_resource_config_10_4_cmd {
3073  	/* contains enum wmi_host_platform_type */
3074  	__le32 host_platform_config;
3075  	/* see enum wmi_10_4_feature_mask */
3076  	__le32 fw_feature_bitmap;
3077  	/* WLAN priority GPIO number */
3078  	__le32 wlan_gpio_priority;
3079  	/* see enum wmi_coex_version */
3080  	__le32 coex_version;
3081  	/* COEX GPIO config */
3082  	__le32 coex_gpio_pin1;
3083  	__le32 coex_gpio_pin2;
3084  	__le32 coex_gpio_pin3;
3085  	/* number of vdevs allowed to perform tdls */
3086  	__le32 num_tdls_vdevs;
3087  	/* number of peers to track per TDLS vdev */
3088  	__le32 num_tdls_conn_table_entries;
3089  	/* number of tdls sleep sta supported */
3090  	__le32 max_tdls_concurrent_sleep_sta;
3091  	/* number of tdls buffer sta supported */
3092  	__le32 max_tdls_concurrent_buffer_sta;
3093  };
3094  
3095  /* structure describing host memory chunk. */
3096  struct host_memory_chunk {
3097  	/* id of the request that is passed up in service ready */
3098  	__le32 req_id;
3099  	/* the physical address the memory chunk */
3100  	__le32 ptr;
3101  	/* size of the chunk */
3102  	__le32 size;
3103  } __packed;
3104  
3105  #define WMI_IRAM_RECOVERY_HOST_MEM_REQ_ID 8
3106  
3107  struct wmi_host_mem_chunks {
3108  	__le32 count;
3109  	/* some fw revisions require at least 1 chunk regardless of count */
3110  	union {
3111  		struct host_memory_chunk item;
3112  		DECLARE_FLEX_ARRAY(struct host_memory_chunk, items);
3113  	};
3114  } __packed;
3115  
3116  struct wmi_init_cmd {
3117  	struct wmi_resource_config resource_config;
3118  	struct wmi_host_mem_chunks mem_chunks;
3119  } __packed;
3120  
3121  /* _10x structure is from 10.X FW API */
3122  struct wmi_init_cmd_10x {
3123  	struct wmi_resource_config_10x resource_config;
3124  	struct wmi_host_mem_chunks mem_chunks;
3125  } __packed;
3126  
3127  struct wmi_init_cmd_10_2 {
3128  	struct wmi_resource_config_10_2 resource_config;
3129  	struct wmi_host_mem_chunks mem_chunks;
3130  } __packed;
3131  
3132  struct wmi_init_cmd_10_4 {
3133  	struct wmi_resource_config_10_4 resource_config;
3134  	struct wmi_host_mem_chunks mem_chunks;
3135  } __packed;
3136  
3137  struct wmi_chan_list_entry {
3138  	__le16 freq;
3139  	u8 phy_mode; /* valid for 10.2 only */
3140  	u8 reserved;
3141  } __packed;
3142  
3143  /* TLV for channel list */
3144  struct wmi_chan_list {
3145  	__le32 tag; /* WMI_CHAN_LIST_TAG */
3146  	__le32 num_chan;
3147  	struct wmi_chan_list_entry channel_list[];
3148  } __packed;
3149  
3150  struct wmi_bssid_list {
3151  	__le32 tag; /* WMI_BSSID_LIST_TAG */
3152  	__le32 num_bssid;
3153  	struct wmi_mac_addr bssid_list[];
3154  } __packed;
3155  
3156  struct wmi_ie_data {
3157  	__le32 tag; /* WMI_IE_TAG */
3158  	__le32 ie_len;
3159  	u8 ie_data[];
3160  } __packed;
3161  
3162  struct wmi_ssid {
3163  	__le32 ssid_len;
3164  	u8 ssid[32];
3165  } __packed;
3166  
3167  struct wmi_ssid_list {
3168  	__le32 tag; /* WMI_SSID_LIST_TAG */
3169  	__le32 num_ssids;
3170  	struct wmi_ssid ssids[];
3171  } __packed;
3172  
3173  /* prefix used by scan requestor ids on the host */
3174  #define WMI_HOST_SCAN_REQUESTOR_ID_PREFIX 0xA000
3175  
3176  /* prefix used by scan request ids generated on the host */
3177  /* host cycles through the lower 12 bits to generate ids */
3178  #define WMI_HOST_SCAN_REQ_ID_PREFIX 0xA000
3179  
3180  #define WLAN_SCAN_PARAMS_MAX_SSID    16
3181  #define WLAN_SCAN_PARAMS_MAX_BSSID   4
3182  #define WLAN_SCAN_PARAMS_MAX_IE_LEN  256
3183  
3184  /* Values lower than this may be refused by some firmware revisions with a scan
3185   * completion with a timedout reason.
3186   */
3187  #define WMI_SCAN_CHAN_MIN_TIME_MSEC 40
3188  
3189  /* Scan priority numbers must be sequential, starting with 0 */
3190  enum wmi_scan_priority {
3191  	WMI_SCAN_PRIORITY_VERY_LOW = 0,
3192  	WMI_SCAN_PRIORITY_LOW,
3193  	WMI_SCAN_PRIORITY_MEDIUM,
3194  	WMI_SCAN_PRIORITY_HIGH,
3195  	WMI_SCAN_PRIORITY_VERY_HIGH,
3196  	WMI_SCAN_PRIORITY_COUNT   /* number of priorities supported */
3197  };
3198  
3199  struct wmi_start_scan_common {
3200  	/* Scan ID */
3201  	__le32 scan_id;
3202  	/* Scan requestor ID */
3203  	__le32 scan_req_id;
3204  	/* VDEV id(interface) that is requesting scan */
3205  	__le32 vdev_id;
3206  	/* Scan Priority, input to scan scheduler */
3207  	__le32 scan_priority;
3208  	/* Scan events subscription */
3209  	__le32 notify_scan_events;
3210  	/* dwell time in msec on active channels */
3211  	__le32 dwell_time_active;
3212  	/* dwell time in msec on passive channels */
3213  	__le32 dwell_time_passive;
3214  	/*
3215  	 * min time in msec on the BSS channel,only valid if at least one
3216  	 * VDEV is active
3217  	 */
3218  	__le32 min_rest_time;
3219  	/*
3220  	 * max rest time in msec on the BSS channel,only valid if at least
3221  	 * one VDEV is active
3222  	 */
3223  	/*
3224  	 * the scanner will rest on the bss channel at least min_rest_time
3225  	 * after min_rest_time the scanner will start checking for tx/rx
3226  	 * activity on all VDEVs. if there is no activity the scanner will
3227  	 * switch to off channel. if there is activity the scanner will let
3228  	 * the radio on the bss channel until max_rest_time expires.at
3229  	 * max_rest_time scanner will switch to off channel irrespective of
3230  	 * activity. activity is determined by the idle_time parameter.
3231  	 */
3232  	__le32 max_rest_time;
3233  	/*
3234  	 * time before sending next set of probe requests.
3235  	 * The scanner keeps repeating probe requests transmission with
3236  	 * period specified by repeat_probe_time.
3237  	 * The number of probe requests specified depends on the ssid_list
3238  	 * and bssid_list
3239  	 */
3240  	__le32 repeat_probe_time;
3241  	/* time in msec between 2 consecutive probe requests with in a set. */
3242  	__le32 probe_spacing_time;
3243  	/*
3244  	 * data inactivity time in msec on bss channel that will be used by
3245  	 * scanner for measuring the inactivity.
3246  	 */
3247  	__le32 idle_time;
3248  	/* maximum time in msec allowed for scan  */
3249  	__le32 max_scan_time;
3250  	/*
3251  	 * delay in msec before sending first probe request after switching
3252  	 * to a channel
3253  	 */
3254  	__le32 probe_delay;
3255  	/* Scan control flags */
3256  	__le32 scan_ctrl_flags;
3257  } __packed;
3258  
3259  struct wmi_start_scan_cmd {
3260  	struct wmi_start_scan_common common;
3261  	__le32 burst_duration_ms;
3262  	u8 tlvs[];
3263  } __packed;
3264  
3265  /* This is the definition from 10.X firmware branch */
3266  struct wmi_10x_start_scan_cmd {
3267  	struct wmi_start_scan_common common;
3268  	u8 tlvs[];
3269  } __packed;
3270  
3271  struct wmi_ssid_arg {
3272  	int len;
3273  	const u8 *ssid;
3274  };
3275  
3276  struct wmi_bssid_arg {
3277  	const u8 *bssid;
3278  };
3279  
3280  struct wmi_start_scan_arg {
3281  	u32 scan_id;
3282  	u32 scan_req_id;
3283  	u32 vdev_id;
3284  	u32 scan_priority;
3285  	u32 notify_scan_events;
3286  	u32 dwell_time_active;
3287  	u32 dwell_time_passive;
3288  	u32 min_rest_time;
3289  	u32 max_rest_time;
3290  	u32 repeat_probe_time;
3291  	u32 probe_spacing_time;
3292  	u32 idle_time;
3293  	u32 max_scan_time;
3294  	u32 probe_delay;
3295  	u32 scan_ctrl_flags;
3296  	u32 burst_duration_ms;
3297  
3298  	u32 ie_len;
3299  	u32 n_channels;
3300  	u32 n_ssids;
3301  	u32 n_bssids;
3302  
3303  	u8 ie[WLAN_SCAN_PARAMS_MAX_IE_LEN];
3304  	u16 channels[64];
3305  	struct wmi_ssid_arg ssids[WLAN_SCAN_PARAMS_MAX_SSID];
3306  	struct wmi_bssid_arg bssids[WLAN_SCAN_PARAMS_MAX_BSSID];
3307  	struct wmi_mac_addr mac_addr;
3308  	struct wmi_mac_addr mac_mask;
3309  };
3310  
3311  /* scan control flags */
3312  
3313  /* passively scan all channels including active channels */
3314  #define WMI_SCAN_FLAG_PASSIVE        0x1
3315  /* add wild card ssid probe request even though ssid_list is specified. */
3316  #define WMI_SCAN_ADD_BCAST_PROBE_REQ 0x2
3317  /* add cck rates to rates/xrate ie for the generated probe request */
3318  #define WMI_SCAN_ADD_CCK_RATES 0x4
3319  /* add ofdm rates to rates/xrate ie for the generated probe request */
3320  #define WMI_SCAN_ADD_OFDM_RATES 0x8
3321  /* To enable indication of Chan load and Noise floor to host */
3322  #define WMI_SCAN_CHAN_STAT_EVENT 0x10
3323  /* Filter Probe request frames  */
3324  #define WMI_SCAN_FILTER_PROBE_REQ 0x20
3325  /* When set, DFS channels will not be scanned */
3326  #define WMI_SCAN_BYPASS_DFS_CHN 0x40
3327  /* Different FW scan engine may choose to bail out on errors.
3328   * Allow the driver to have influence over that.
3329   */
3330  #define WMI_SCAN_CONTINUE_ON_ERROR 0x80
3331  
3332  /* Use random MAC address for TA for Probe Request frame and add
3333   * OUI specified by WMI_SCAN_PROB_REQ_OUI_CMDID to the Probe Request frame.
3334   * if OUI is not set by WMI_SCAN_PROB_REQ_OUI_CMDID then the flag is ignored.
3335   */
3336  #define WMI_SCAN_ADD_SPOOFED_MAC_IN_PROBE_REQ   0x1000
3337  
3338  /* WMI_SCAN_CLASS_MASK must be the same value as IEEE80211_SCAN_CLASS_MASK */
3339  #define WMI_SCAN_CLASS_MASK 0xFF000000
3340  
3341  enum wmi_stop_scan_type {
3342  	WMI_SCAN_STOP_ONE	= 0x00000000, /* stop by scan_id */
3343  	WMI_SCAN_STOP_VDEV_ALL	= 0x01000000, /* stop by vdev_id */
3344  	WMI_SCAN_STOP_ALL	= 0x04000000, /* stop all scans */
3345  };
3346  
3347  struct wmi_stop_scan_cmd {
3348  	__le32 scan_req_id;
3349  	__le32 scan_id;
3350  	__le32 req_type;
3351  	__le32 vdev_id;
3352  } __packed;
3353  
3354  struct wmi_stop_scan_arg {
3355  	u32 req_id;
3356  	enum wmi_stop_scan_type req_type;
3357  	union {
3358  		u32 scan_id;
3359  		u32 vdev_id;
3360  	} u;
3361  };
3362  
3363  struct wmi_scan_chan_list_cmd {
3364  	__le32 num_scan_chans;
3365  	struct wmi_channel chan_info[];
3366  } __packed;
3367  
3368  struct wmi_scan_chan_list_arg {
3369  	u32 n_channels;
3370  	struct wmi_channel_arg *channels;
3371  };
3372  
3373  enum wmi_bss_filter {
3374  	WMI_BSS_FILTER_NONE = 0,        /* no beacons forwarded */
3375  	WMI_BSS_FILTER_ALL,             /* all beacons forwarded */
3376  	WMI_BSS_FILTER_PROFILE,         /* only beacons matching profile */
3377  	WMI_BSS_FILTER_ALL_BUT_PROFILE, /* all but beacons matching profile */
3378  	WMI_BSS_FILTER_CURRENT_BSS,     /* only beacons matching current BSS */
3379  	WMI_BSS_FILTER_ALL_BUT_BSS,     /* all but beacons matching BSS */
3380  	WMI_BSS_FILTER_PROBED_SSID,     /* beacons matching probed ssid */
3381  	WMI_BSS_FILTER_LAST_BSS,        /* marker only */
3382  };
3383  
3384  enum wmi_scan_event_type {
3385  	WMI_SCAN_EVENT_STARTED              = BIT(0),
3386  	WMI_SCAN_EVENT_COMPLETED            = BIT(1),
3387  	WMI_SCAN_EVENT_BSS_CHANNEL          = BIT(2),
3388  	WMI_SCAN_EVENT_FOREIGN_CHANNEL      = BIT(3),
3389  	WMI_SCAN_EVENT_DEQUEUED             = BIT(4),
3390  	/* possibly by high-prio scan */
3391  	WMI_SCAN_EVENT_PREEMPTED            = BIT(5),
3392  	WMI_SCAN_EVENT_START_FAILED         = BIT(6),
3393  	WMI_SCAN_EVENT_RESTARTED            = BIT(7),
3394  	WMI_SCAN_EVENT_FOREIGN_CHANNEL_EXIT = BIT(8),
3395  	WMI_SCAN_EVENT_MAX                  = BIT(15),
3396  };
3397  
3398  enum wmi_scan_completion_reason {
3399  	WMI_SCAN_REASON_COMPLETED,
3400  	WMI_SCAN_REASON_CANCELLED,
3401  	WMI_SCAN_REASON_PREEMPTED,
3402  	WMI_SCAN_REASON_TIMEDOUT,
3403  	WMI_SCAN_REASON_INTERNAL_FAILURE,
3404  	WMI_SCAN_REASON_MAX,
3405  };
3406  
3407  struct wmi_scan_event {
3408  	__le32 event_type; /* %WMI_SCAN_EVENT_ */
3409  	__le32 reason; /* %WMI_SCAN_REASON_ */
3410  	__le32 channel_freq; /* only valid for WMI_SCAN_EVENT_FOREIGN_CHANNEL */
3411  	__le32 scan_req_id;
3412  	__le32 scan_id;
3413  	__le32 vdev_id;
3414  } __packed;
3415  
3416  /*
3417   * This defines how much headroom is kept in the
3418   * receive frame between the descriptor and the
3419   * payload, in order for the WMI PHY error and
3420   * management handler to insert header contents.
3421   *
3422   * This is in bytes.
3423   */
3424  #define WMI_MGMT_RX_HDR_HEADROOM    52
3425  
3426  /*
3427   * This event will be used for sending scan results
3428   * as well as rx mgmt frames to the host. The rx buffer
3429   * will be sent as part of this WMI event. It would be a
3430   * good idea to pass all the fields in the RX status
3431   * descriptor up to the host.
3432   */
3433  struct wmi_mgmt_rx_hdr_v1 {
3434  	__le32 channel;
3435  	__le32 snr;
3436  	__le32 rate;
3437  	__le32 phy_mode;
3438  	__le32 buf_len;
3439  	__le32 status; /* %WMI_RX_STATUS_ */
3440  } __packed;
3441  
3442  struct wmi_mgmt_rx_hdr_v2 {
3443  	struct wmi_mgmt_rx_hdr_v1 v1;
3444  	__le32 rssi_ctl[4];
3445  } __packed;
3446  
3447  struct wmi_mgmt_rx_event_v1 {
3448  	struct wmi_mgmt_rx_hdr_v1 hdr;
3449  	u8 buf[];
3450  } __packed;
3451  
3452  struct wmi_mgmt_rx_event_v2 {
3453  	struct wmi_mgmt_rx_hdr_v2 hdr;
3454  	u8 buf[];
3455  } __packed;
3456  
3457  struct wmi_10_4_mgmt_rx_hdr {
3458  	__le32 channel;
3459  	__le32 snr;
3460  	    u8 rssi_ctl[4];
3461  	__le32 rate;
3462  	__le32 phy_mode;
3463  	__le32 buf_len;
3464  	__le32 status;
3465  } __packed;
3466  
3467  struct wmi_10_4_mgmt_rx_event {
3468  	struct wmi_10_4_mgmt_rx_hdr hdr;
3469  	u8 buf[];
3470  } __packed;
3471  
3472  struct wmi_mgmt_rx_ext_info {
3473  	__le64 rx_mac_timestamp;
3474  } __packed __aligned(4);
3475  
3476  #define WMI_RX_STATUS_OK			0x00
3477  #define WMI_RX_STATUS_ERR_CRC			0x01
3478  #define WMI_RX_STATUS_ERR_DECRYPT		0x08
3479  #define WMI_RX_STATUS_ERR_MIC			0x10
3480  #define WMI_RX_STATUS_ERR_KEY_CACHE_MISS	0x20
3481  /* Extension data at the end of mgmt frame */
3482  #define WMI_RX_STATUS_EXT_INFO		0x40
3483  
3484  #define PHY_ERROR_GEN_SPECTRAL_SCAN		0x26
3485  #define PHY_ERROR_GEN_FALSE_RADAR_EXT		0x24
3486  #define PHY_ERROR_GEN_RADAR			0x05
3487  
3488  #define PHY_ERROR_10_4_RADAR_MASK               0x4
3489  #define PHY_ERROR_10_4_SPECTRAL_SCAN_MASK       0x4000000
3490  
3491  enum phy_err_type {
3492  	PHY_ERROR_UNKNOWN,
3493  	PHY_ERROR_SPECTRAL_SCAN,
3494  	PHY_ERROR_FALSE_RADAR_EXT,
3495  	PHY_ERROR_RADAR
3496  };
3497  
3498  struct wmi_phyerr {
3499  	__le32 tsf_timestamp;
3500  	__le16 freq1;
3501  	__le16 freq2;
3502  	u8 rssi_combined;
3503  	u8 chan_width_mhz;
3504  	u8 phy_err_code;
3505  	u8 rsvd0;
3506  	__le32 rssi_chains[4];
3507  	__le16 nf_chains[4];
3508  	__le32 buf_len;
3509  	u8 buf[];
3510  } __packed;
3511  
3512  struct wmi_phyerr_event {
3513  	__le32 num_phyerrs;
3514  	__le32 tsf_l32;
3515  	__le32 tsf_u32;
3516  
3517  	/* array of struct wmi_phyerr */
3518  	u8 phyerrs[];
3519  } __packed;
3520  
3521  struct wmi_10_4_phyerr_event {
3522  	__le32 tsf_l32;
3523  	__le32 tsf_u32;
3524  	__le16 freq1;
3525  	__le16 freq2;
3526  	u8 rssi_combined;
3527  	u8 chan_width_mhz;
3528  	u8 phy_err_code;
3529  	u8 rsvd0;
3530  	__le32 rssi_chains[4];
3531  	__le16 nf_chains[4];
3532  	__le32 phy_err_mask[2];
3533  	__le32 tsf_timestamp;
3534  	__le32 buf_len;
3535  	u8 buf[];
3536  } __packed;
3537  
3538  struct wmi_radar_found_info {
3539  	__le32 pri_min;
3540  	__le32 pri_max;
3541  	__le32 width_min;
3542  	__le32 width_max;
3543  	__le32 sidx_min;
3544  	__le32 sidx_max;
3545  } __packed;
3546  
3547  enum wmi_radar_confirmation_status {
3548  	/* Detected radar was due to SW pulses */
3549  	WMI_SW_RADAR_DETECTED    = 0,
3550  
3551  	WMI_RADAR_DETECTION_FAIL = 1,
3552  
3553  	/* Real radar detected */
3554  	WMI_HW_RADAR_DETECTED    = 2,
3555  };
3556  
3557  #define PHYERR_TLV_SIG				0xBB
3558  #define PHYERR_TLV_TAG_SEARCH_FFT_REPORT	0xFB
3559  #define PHYERR_TLV_TAG_RADAR_PULSE_SUMMARY	0xF8
3560  #define PHYERR_TLV_TAG_SPECTRAL_SUMMARY_REPORT	0xF9
3561  
3562  struct phyerr_radar_report {
3563  	__le32 reg0; /* RADAR_REPORT_REG0_* */
3564  	__le32 reg1; /* RADAR_REPORT_REG1_* */
3565  } __packed;
3566  
3567  #define RADAR_REPORT_REG0_PULSE_IS_CHIRP_MASK		0x80000000
3568  #define RADAR_REPORT_REG0_PULSE_IS_CHIRP_LSB		31
3569  
3570  #define RADAR_REPORT_REG0_PULSE_IS_MAX_WIDTH_MASK	0x40000000
3571  #define RADAR_REPORT_REG0_PULSE_IS_MAX_WIDTH_LSB	30
3572  
3573  #define RADAR_REPORT_REG0_AGC_TOTAL_GAIN_MASK		0x3FF00000
3574  #define RADAR_REPORT_REG0_AGC_TOTAL_GAIN_LSB		20
3575  
3576  #define RADAR_REPORT_REG0_PULSE_DELTA_DIFF_MASK		0x000F0000
3577  #define RADAR_REPORT_REG0_PULSE_DELTA_DIFF_LSB		16
3578  
3579  #define RADAR_REPORT_REG0_PULSE_DELTA_PEAK_MASK		0x0000FC00
3580  #define RADAR_REPORT_REG0_PULSE_DELTA_PEAK_LSB		10
3581  
3582  #define RADAR_REPORT_REG0_PULSE_SIDX_MASK		0x000003FF
3583  #define RADAR_REPORT_REG0_PULSE_SIDX_LSB		0
3584  
3585  #define RADAR_REPORT_REG1_PULSE_SRCH_FFT_VALID_MASK	0x80000000
3586  #define RADAR_REPORT_REG1_PULSE_SRCH_FFT_VALID_LSB	31
3587  
3588  #define RADAR_REPORT_REG1_PULSE_AGC_MB_GAIN_MASK	0x7F000000
3589  #define RADAR_REPORT_REG1_PULSE_AGC_MB_GAIN_LSB		24
3590  
3591  #define RADAR_REPORT_REG1_PULSE_SUBCHAN_MASK_MASK	0x00FF0000
3592  #define RADAR_REPORT_REG1_PULSE_SUBCHAN_MASK_LSB	16
3593  
3594  #define RADAR_REPORT_REG1_PULSE_TSF_OFFSET_MASK		0x0000FF00
3595  #define RADAR_REPORT_REG1_PULSE_TSF_OFFSET_LSB		8
3596  
3597  #define RADAR_REPORT_REG1_PULSE_DUR_MASK		0x000000FF
3598  #define RADAR_REPORT_REG1_PULSE_DUR_LSB			0
3599  
3600  struct phyerr_fft_report {
3601  	__le32 reg0; /* SEARCH_FFT_REPORT_REG0_ * */
3602  	__le32 reg1; /* SEARCH_FFT_REPORT_REG1_ * */
3603  } __packed;
3604  
3605  #define SEARCH_FFT_REPORT_REG0_TOTAL_GAIN_DB_MASK	0xFF800000
3606  #define SEARCH_FFT_REPORT_REG0_TOTAL_GAIN_DB_LSB	23
3607  
3608  #define SEARCH_FFT_REPORT_REG0_BASE_PWR_DB_MASK		0x007FC000
3609  #define SEARCH_FFT_REPORT_REG0_BASE_PWR_DB_LSB		14
3610  
3611  #define SEARCH_FFT_REPORT_REG0_FFT_CHN_IDX_MASK		0x00003000
3612  #define SEARCH_FFT_REPORT_REG0_FFT_CHN_IDX_LSB		12
3613  
3614  #define SEARCH_FFT_REPORT_REG0_PEAK_SIDX_MASK		0x00000FFF
3615  #define SEARCH_FFT_REPORT_REG0_PEAK_SIDX_LSB		0
3616  
3617  #define SEARCH_FFT_REPORT_REG1_RELPWR_DB_MASK		0xFC000000
3618  #define SEARCH_FFT_REPORT_REG1_RELPWR_DB_LSB		26
3619  
3620  #define SEARCH_FFT_REPORT_REG1_AVGPWR_DB_MASK		0x03FC0000
3621  #define SEARCH_FFT_REPORT_REG1_AVGPWR_DB_LSB		18
3622  
3623  #define SEARCH_FFT_REPORT_REG1_PEAK_MAG_MASK		0x0003FF00
3624  #define SEARCH_FFT_REPORT_REG1_PEAK_MAG_LSB		8
3625  
3626  #define SEARCH_FFT_REPORT_REG1_NUM_STR_BINS_IB_MASK	0x000000FF
3627  #define SEARCH_FFT_REPORT_REG1_NUM_STR_BINS_IB_LSB	0
3628  
3629  struct phyerr_tlv {
3630  	__le16 len;
3631  	u8 tag;
3632  	u8 sig;
3633  } __packed;
3634  
3635  #define DFS_RSSI_POSSIBLY_FALSE			50
3636  #define DFS_PEAK_MAG_THOLD_POSSIBLY_FALSE	40
3637  
3638  struct wmi_mgmt_tx_hdr {
3639  	__le32 vdev_id;
3640  	struct wmi_mac_addr peer_macaddr;
3641  	__le32 tx_rate;
3642  	__le32 tx_power;
3643  	__le32 buf_len;
3644  } __packed;
3645  
3646  struct wmi_mgmt_tx_cmd {
3647  	struct wmi_mgmt_tx_hdr hdr;
3648  	u8 buf[];
3649  } __packed;
3650  
3651  struct wmi_echo_event {
3652  	__le32 value;
3653  } __packed;
3654  
3655  struct wmi_echo_cmd {
3656  	__le32 value;
3657  } __packed;
3658  
3659  struct wmi_pdev_set_regdomain_cmd {
3660  	__le32 reg_domain;
3661  	__le32 reg_domain_2G;
3662  	__le32 reg_domain_5G;
3663  	__le32 conformance_test_limit_2G;
3664  	__le32 conformance_test_limit_5G;
3665  } __packed;
3666  
3667  enum wmi_dfs_region {
3668  	/* Uninitialized dfs domain */
3669  	WMI_UNINIT_DFS_DOMAIN = 0,
3670  
3671  	/* FCC3 dfs domain */
3672  	WMI_FCC_DFS_DOMAIN = 1,
3673  
3674  	/* ETSI dfs domain */
3675  	WMI_ETSI_DFS_DOMAIN = 2,
3676  
3677  	/*Japan dfs domain */
3678  	WMI_MKK4_DFS_DOMAIN = 3,
3679  };
3680  
3681  struct wmi_pdev_set_regdomain_cmd_10x {
3682  	__le32 reg_domain;
3683  	__le32 reg_domain_2G;
3684  	__le32 reg_domain_5G;
3685  	__le32 conformance_test_limit_2G;
3686  	__le32 conformance_test_limit_5G;
3687  
3688  	/* dfs domain from wmi_dfs_region */
3689  	__le32 dfs_domain;
3690  } __packed;
3691  
3692  /* Command to set/unset chip in quiet mode */
3693  struct wmi_pdev_set_quiet_cmd {
3694  	/* period in TUs */
3695  	__le32 period;
3696  
3697  	/* duration in TUs */
3698  	__le32 duration;
3699  
3700  	/* offset in TUs */
3701  	__le32 next_start;
3702  
3703  	/* enable/disable */
3704  	__le32 enabled;
3705  } __packed;
3706  
3707  /*
3708   * 802.11g protection mode.
3709   */
3710  enum ath10k_protmode {
3711  	ATH10K_PROT_NONE     = 0,    /* no protection */
3712  	ATH10K_PROT_CTSONLY  = 1,    /* CTS to self */
3713  	ATH10K_PROT_RTSCTS   = 2,    /* RTS-CTS */
3714  };
3715  
3716  enum wmi_rtscts_profile {
3717  	WMI_RTSCTS_FOR_NO_RATESERIES = 0,
3718  	WMI_RTSCTS_FOR_SECOND_RATESERIES,
3719  	WMI_RTSCTS_ACROSS_SW_RETRIES
3720  };
3721  
3722  #define WMI_RTSCTS_ENABLED		1
3723  #define WMI_RTSCTS_SET_MASK		0x0f
3724  #define WMI_RTSCTS_SET_LSB		0
3725  
3726  #define WMI_RTSCTS_PROFILE_MASK		0xf0
3727  #define WMI_RTSCTS_PROFILE_LSB		4
3728  
3729  enum wmi_beacon_gen_mode {
3730  	WMI_BEACON_STAGGERED_MODE = 0,
3731  	WMI_BEACON_BURST_MODE = 1
3732  };
3733  
3734  enum wmi_csa_event_ies_present_flag {
3735  	WMI_CSA_IE_PRESENT = 0x00000001,
3736  	WMI_XCSA_IE_PRESENT = 0x00000002,
3737  	WMI_WBW_IE_PRESENT = 0x00000004,
3738  	WMI_CSWARP_IE_PRESENT = 0x00000008,
3739  };
3740  
3741  /* wmi CSA receive event from beacon frame */
3742  struct wmi_csa_event {
3743  	__le32 i_fc_dur;
3744  	/* Bit 0-15: FC */
3745  	/* Bit 16-31: DUR */
3746  	struct wmi_mac_addr i_addr1;
3747  	struct wmi_mac_addr i_addr2;
3748  	__le32 csa_ie[2];
3749  	__le32 xcsa_ie[2];
3750  	__le32 wb_ie[2];
3751  	__le32 cswarp_ie;
3752  	__le32 ies_present_flag; /* wmi_csa_event_ies_present_flag */
3753  } __packed;
3754  
3755  /* the definition of different PDEV parameters */
3756  #define PDEV_DEFAULT_STATS_UPDATE_PERIOD    500
3757  #define VDEV_DEFAULT_STATS_UPDATE_PERIOD    500
3758  #define PEER_DEFAULT_STATS_UPDATE_PERIOD    500
3759  
3760  struct wmi_pdev_param_map {
3761  	u32 tx_chain_mask;
3762  	u32 rx_chain_mask;
3763  	u32 txpower_limit2g;
3764  	u32 txpower_limit5g;
3765  	u32 txpower_scale;
3766  	u32 beacon_gen_mode;
3767  	u32 beacon_tx_mode;
3768  	u32 resmgr_offchan_mode;
3769  	u32 protection_mode;
3770  	u32 dynamic_bw;
3771  	u32 non_agg_sw_retry_th;
3772  	u32 agg_sw_retry_th;
3773  	u32 sta_kickout_th;
3774  	u32 ac_aggrsize_scaling;
3775  	u32 ltr_enable;
3776  	u32 ltr_ac_latency_be;
3777  	u32 ltr_ac_latency_bk;
3778  	u32 ltr_ac_latency_vi;
3779  	u32 ltr_ac_latency_vo;
3780  	u32 ltr_ac_latency_timeout;
3781  	u32 ltr_sleep_override;
3782  	u32 ltr_rx_override;
3783  	u32 ltr_tx_activity_timeout;
3784  	u32 l1ss_enable;
3785  	u32 dsleep_enable;
3786  	u32 pcielp_txbuf_flush;
3787  	u32 pcielp_txbuf_watermark;
3788  	u32 pcielp_txbuf_tmo_en;
3789  	u32 pcielp_txbuf_tmo_value;
3790  	u32 pdev_stats_update_period;
3791  	u32 vdev_stats_update_period;
3792  	u32 peer_stats_update_period;
3793  	u32 bcnflt_stats_update_period;
3794  	u32 pmf_qos;
3795  	u32 arp_ac_override;
3796  	u32 dcs;
3797  	u32 ani_enable;
3798  	u32 ani_poll_period;
3799  	u32 ani_listen_period;
3800  	u32 ani_ofdm_level;
3801  	u32 ani_cck_level;
3802  	u32 dyntxchain;
3803  	u32 proxy_sta;
3804  	u32 idle_ps_config;
3805  	u32 power_gating_sleep;
3806  	u32 fast_channel_reset;
3807  	u32 burst_dur;
3808  	u32 burst_enable;
3809  	u32 cal_period;
3810  	u32 aggr_burst;
3811  	u32 rx_decap_mode;
3812  	u32 smart_antenna_default_antenna;
3813  	u32 igmpmld_override;
3814  	u32 igmpmld_tid;
3815  	u32 antenna_gain;
3816  	u32 rx_filter;
3817  	u32 set_mcast_to_ucast_tid;
3818  	u32 proxy_sta_mode;
3819  	u32 set_mcast2ucast_mode;
3820  	u32 set_mcast2ucast_buffer;
3821  	u32 remove_mcast2ucast_buffer;
3822  	u32 peer_sta_ps_statechg_enable;
3823  	u32 igmpmld_ac_override;
3824  	u32 block_interbss;
3825  	u32 set_disable_reset_cmdid;
3826  	u32 set_msdu_ttl_cmdid;
3827  	u32 set_ppdu_duration_cmdid;
3828  	u32 txbf_sound_period_cmdid;
3829  	u32 set_promisc_mode_cmdid;
3830  	u32 set_burst_mode_cmdid;
3831  	u32 en_stats;
3832  	u32 mu_group_policy;
3833  	u32 noise_detection;
3834  	u32 noise_threshold;
3835  	u32 dpd_enable;
3836  	u32 set_mcast_bcast_echo;
3837  	u32 atf_strict_sch;
3838  	u32 atf_sched_duration;
3839  	u32 ant_plzn;
3840  	u32 mgmt_retry_limit;
3841  	u32 sensitivity_level;
3842  	u32 signed_txpower_2g;
3843  	u32 signed_txpower_5g;
3844  	u32 enable_per_tid_amsdu;
3845  	u32 enable_per_tid_ampdu;
3846  	u32 cca_threshold;
3847  	u32 rts_fixed_rate;
3848  	u32 pdev_reset;
3849  	u32 wapi_mbssid_offset;
3850  	u32 arp_srcaddr;
3851  	u32 arp_dstaddr;
3852  	u32 enable_btcoex;
3853  	u32 rfkill_config;
3854  	u32 rfkill_enable;
3855  	u32 peer_stats_info_enable;
3856  };
3857  
3858  #define WMI_PDEV_PARAM_UNSUPPORTED 0
3859  
3860  enum wmi_pdev_param {
3861  	/* TX chain mask */
3862  	WMI_PDEV_PARAM_TX_CHAIN_MASK = 0x1,
3863  	/* RX chain mask */
3864  	WMI_PDEV_PARAM_RX_CHAIN_MASK,
3865  	/* TX power limit for 2G Radio */
3866  	WMI_PDEV_PARAM_TXPOWER_LIMIT2G,
3867  	/* TX power limit for 5G Radio */
3868  	WMI_PDEV_PARAM_TXPOWER_LIMIT5G,
3869  	/* TX power scale */
3870  	WMI_PDEV_PARAM_TXPOWER_SCALE,
3871  	/* Beacon generation mode . 0: host, 1: target   */
3872  	WMI_PDEV_PARAM_BEACON_GEN_MODE,
3873  	/* Beacon generation mode . 0: staggered 1: bursted   */
3874  	WMI_PDEV_PARAM_BEACON_TX_MODE,
3875  	/*
3876  	 * Resource manager off chan mode .
3877  	 * 0: turn off offchan mode. 1: turn on offchan mode
3878  	 */
3879  	WMI_PDEV_PARAM_RESMGR_OFFCHAN_MODE,
3880  	/*
3881  	 * Protection mode:
3882  	 * 0: no protection 1:use CTS-to-self 2: use RTS/CTS
3883  	 */
3884  	WMI_PDEV_PARAM_PROTECTION_MODE,
3885  	/*
3886  	 * Dynamic bandwidth - 0: disable, 1: enable
3887  	 *
3888  	 * When enabled HW rate control tries different bandwidths when
3889  	 * retransmitting frames.
3890  	 */
3891  	WMI_PDEV_PARAM_DYNAMIC_BW,
3892  	/* Non aggregate/ 11g sw retry threshold.0-disable */
3893  	WMI_PDEV_PARAM_NON_AGG_SW_RETRY_TH,
3894  	/* aggregate sw retry threshold. 0-disable*/
3895  	WMI_PDEV_PARAM_AGG_SW_RETRY_TH,
3896  	/* Station kickout threshold (non of consecutive failures).0-disable */
3897  	WMI_PDEV_PARAM_STA_KICKOUT_TH,
3898  	/* Aggerate size scaling configuration per AC */
3899  	WMI_PDEV_PARAM_AC_AGGRSIZE_SCALING,
3900  	/* LTR enable */
3901  	WMI_PDEV_PARAM_LTR_ENABLE,
3902  	/* LTR latency for BE, in us */
3903  	WMI_PDEV_PARAM_LTR_AC_LATENCY_BE,
3904  	/* LTR latency for BK, in us */
3905  	WMI_PDEV_PARAM_LTR_AC_LATENCY_BK,
3906  	/* LTR latency for VI, in us */
3907  	WMI_PDEV_PARAM_LTR_AC_LATENCY_VI,
3908  	/* LTR latency for VO, in us  */
3909  	WMI_PDEV_PARAM_LTR_AC_LATENCY_VO,
3910  	/* LTR AC latency timeout, in ms */
3911  	WMI_PDEV_PARAM_LTR_AC_LATENCY_TIMEOUT,
3912  	/* LTR platform latency override, in us */
3913  	WMI_PDEV_PARAM_LTR_SLEEP_OVERRIDE,
3914  	/* LTR-RX override, in us */
3915  	WMI_PDEV_PARAM_LTR_RX_OVERRIDE,
3916  	/* Tx activity timeout for LTR, in us */
3917  	WMI_PDEV_PARAM_LTR_TX_ACTIVITY_TIMEOUT,
3918  	/* L1SS state machine enable */
3919  	WMI_PDEV_PARAM_L1SS_ENABLE,
3920  	/* Deep sleep state machine enable */
3921  	WMI_PDEV_PARAM_DSLEEP_ENABLE,
3922  	/* RX buffering flush enable */
3923  	WMI_PDEV_PARAM_PCIELP_TXBUF_FLUSH,
3924  	/* RX buffering matermark */
3925  	WMI_PDEV_PARAM_PCIELP_TXBUF_WATERMARK,
3926  	/* RX buffering timeout enable */
3927  	WMI_PDEV_PARAM_PCIELP_TXBUF_TMO_EN,
3928  	/* RX buffering timeout value */
3929  	WMI_PDEV_PARAM_PCIELP_TXBUF_TMO_VALUE,
3930  	/* pdev level stats update period in ms */
3931  	WMI_PDEV_PARAM_PDEV_STATS_UPDATE_PERIOD,
3932  	/* vdev level stats update period in ms */
3933  	WMI_PDEV_PARAM_VDEV_STATS_UPDATE_PERIOD,
3934  	/* peer level stats update period in ms */
3935  	WMI_PDEV_PARAM_PEER_STATS_UPDATE_PERIOD,
3936  	/* beacon filter status update period */
3937  	WMI_PDEV_PARAM_BCNFLT_STATS_UPDATE_PERIOD,
3938  	/* QOS Mgmt frame protection MFP/PMF 0: disable, 1: enable */
3939  	WMI_PDEV_PARAM_PMF_QOS,
3940  	/* Access category on which ARP frames are sent */
3941  	WMI_PDEV_PARAM_ARP_AC_OVERRIDE,
3942  	/* DCS configuration */
3943  	WMI_PDEV_PARAM_DCS,
3944  	/* Enable/Disable ANI on target */
3945  	WMI_PDEV_PARAM_ANI_ENABLE,
3946  	/* configure the ANI polling period */
3947  	WMI_PDEV_PARAM_ANI_POLL_PERIOD,
3948  	/* configure the ANI listening period */
3949  	WMI_PDEV_PARAM_ANI_LISTEN_PERIOD,
3950  	/* configure OFDM immunity level */
3951  	WMI_PDEV_PARAM_ANI_OFDM_LEVEL,
3952  	/* configure CCK immunity level */
3953  	WMI_PDEV_PARAM_ANI_CCK_LEVEL,
3954  	/* Enable/Disable CDD for 1x1 STAs in rate control module */
3955  	WMI_PDEV_PARAM_DYNTXCHAIN,
3956  	/* Enable/Disable proxy STA */
3957  	WMI_PDEV_PARAM_PROXY_STA,
3958  	/* Enable/Disable low power state when all VDEVs are inactive/idle. */
3959  	WMI_PDEV_PARAM_IDLE_PS_CONFIG,
3960  	/* Enable/Disable power gating sleep */
3961  	WMI_PDEV_PARAM_POWER_GATING_SLEEP,
3962  };
3963  
3964  enum wmi_10x_pdev_param {
3965  	/* TX chian mask */
3966  	WMI_10X_PDEV_PARAM_TX_CHAIN_MASK = 0x1,
3967  	/* RX chian mask */
3968  	WMI_10X_PDEV_PARAM_RX_CHAIN_MASK,
3969  	/* TX power limit for 2G Radio */
3970  	WMI_10X_PDEV_PARAM_TXPOWER_LIMIT2G,
3971  	/* TX power limit for 5G Radio */
3972  	WMI_10X_PDEV_PARAM_TXPOWER_LIMIT5G,
3973  	/* TX power scale */
3974  	WMI_10X_PDEV_PARAM_TXPOWER_SCALE,
3975  	/* Beacon generation mode . 0: host, 1: target   */
3976  	WMI_10X_PDEV_PARAM_BEACON_GEN_MODE,
3977  	/* Beacon generation mode . 0: staggered 1: bursted   */
3978  	WMI_10X_PDEV_PARAM_BEACON_TX_MODE,
3979  	/*
3980  	 * Resource manager off chan mode .
3981  	 * 0: turn off offchan mode. 1: turn on offchan mode
3982  	 */
3983  	WMI_10X_PDEV_PARAM_RESMGR_OFFCHAN_MODE,
3984  	/*
3985  	 * Protection mode:
3986  	 * 0: no protection 1:use CTS-to-self 2: use RTS/CTS
3987  	 */
3988  	WMI_10X_PDEV_PARAM_PROTECTION_MODE,
3989  	/* Dynamic bandwidth 0: disable 1: enable */
3990  	WMI_10X_PDEV_PARAM_DYNAMIC_BW,
3991  	/* Non aggregate/ 11g sw retry threshold.0-disable */
3992  	WMI_10X_PDEV_PARAM_NON_AGG_SW_RETRY_TH,
3993  	/* aggregate sw retry threshold. 0-disable*/
3994  	WMI_10X_PDEV_PARAM_AGG_SW_RETRY_TH,
3995  	/* Station kickout threshold (non of consecutive failures).0-disable */
3996  	WMI_10X_PDEV_PARAM_STA_KICKOUT_TH,
3997  	/* Aggerate size scaling configuration per AC */
3998  	WMI_10X_PDEV_PARAM_AC_AGGRSIZE_SCALING,
3999  	/* LTR enable */
4000  	WMI_10X_PDEV_PARAM_LTR_ENABLE,
4001  	/* LTR latency for BE, in us */
4002  	WMI_10X_PDEV_PARAM_LTR_AC_LATENCY_BE,
4003  	/* LTR latency for BK, in us */
4004  	WMI_10X_PDEV_PARAM_LTR_AC_LATENCY_BK,
4005  	/* LTR latency for VI, in us */
4006  	WMI_10X_PDEV_PARAM_LTR_AC_LATENCY_VI,
4007  	/* LTR latency for VO, in us  */
4008  	WMI_10X_PDEV_PARAM_LTR_AC_LATENCY_VO,
4009  	/* LTR AC latency timeout, in ms */
4010  	WMI_10X_PDEV_PARAM_LTR_AC_LATENCY_TIMEOUT,
4011  	/* LTR platform latency override, in us */
4012  	WMI_10X_PDEV_PARAM_LTR_SLEEP_OVERRIDE,
4013  	/* LTR-RX override, in us */
4014  	WMI_10X_PDEV_PARAM_LTR_RX_OVERRIDE,
4015  	/* Tx activity timeout for LTR, in us */
4016  	WMI_10X_PDEV_PARAM_LTR_TX_ACTIVITY_TIMEOUT,
4017  	/* L1SS state machine enable */
4018  	WMI_10X_PDEV_PARAM_L1SS_ENABLE,
4019  	/* Deep sleep state machine enable */
4020  	WMI_10X_PDEV_PARAM_DSLEEP_ENABLE,
4021  	/* pdev level stats update period in ms */
4022  	WMI_10X_PDEV_PARAM_PDEV_STATS_UPDATE_PERIOD,
4023  	/* vdev level stats update period in ms */
4024  	WMI_10X_PDEV_PARAM_VDEV_STATS_UPDATE_PERIOD,
4025  	/* peer level stats update period in ms */
4026  	WMI_10X_PDEV_PARAM_PEER_STATS_UPDATE_PERIOD,
4027  	/* beacon filter status update period */
4028  	WMI_10X_PDEV_PARAM_BCNFLT_STATS_UPDATE_PERIOD,
4029  	/* QOS Mgmt frame protection MFP/PMF 0: disable, 1: enable */
4030  	WMI_10X_PDEV_PARAM_PMF_QOS,
4031  	/* Access category on which ARP and DHCP frames are sent */
4032  	WMI_10X_PDEV_PARAM_ARPDHCP_AC_OVERRIDE,
4033  	/* DCS configuration */
4034  	WMI_10X_PDEV_PARAM_DCS,
4035  	/* Enable/Disable ANI on target */
4036  	WMI_10X_PDEV_PARAM_ANI_ENABLE,
4037  	/* configure the ANI polling period */
4038  	WMI_10X_PDEV_PARAM_ANI_POLL_PERIOD,
4039  	/* configure the ANI listening period */
4040  	WMI_10X_PDEV_PARAM_ANI_LISTEN_PERIOD,
4041  	/* configure OFDM immunity level */
4042  	WMI_10X_PDEV_PARAM_ANI_OFDM_LEVEL,
4043  	/* configure CCK immunity level */
4044  	WMI_10X_PDEV_PARAM_ANI_CCK_LEVEL,
4045  	/* Enable/Disable CDD for 1x1 STAs in rate control module */
4046  	WMI_10X_PDEV_PARAM_DYNTXCHAIN,
4047  	/* Enable/Disable Fast channel reset*/
4048  	WMI_10X_PDEV_PARAM_FAST_CHANNEL_RESET,
4049  	/* Set Bursting DUR */
4050  	WMI_10X_PDEV_PARAM_BURST_DUR,
4051  	/* Set Bursting Enable*/
4052  	WMI_10X_PDEV_PARAM_BURST_ENABLE,
4053  
4054  	/* following are available as of firmware 10.2 */
4055  	WMI_10X_PDEV_PARAM_SMART_ANTENNA_DEFAULT_ANTENNA,
4056  	WMI_10X_PDEV_PARAM_IGMPMLD_OVERRIDE,
4057  	WMI_10X_PDEV_PARAM_IGMPMLD_TID,
4058  	WMI_10X_PDEV_PARAM_ANTENNA_GAIN,
4059  	WMI_10X_PDEV_PARAM_RX_DECAP_MODE,
4060  	WMI_10X_PDEV_PARAM_RX_FILTER,
4061  	WMI_10X_PDEV_PARAM_SET_MCAST_TO_UCAST_TID,
4062  	WMI_10X_PDEV_PARAM_PROXY_STA_MODE,
4063  	WMI_10X_PDEV_PARAM_SET_MCAST2UCAST_MODE,
4064  	WMI_10X_PDEV_PARAM_SET_MCAST2UCAST_BUFFER,
4065  	WMI_10X_PDEV_PARAM_REMOVE_MCAST2UCAST_BUFFER,
4066  	WMI_10X_PDEV_PARAM_PEER_STA_PS_STATECHG_ENABLE,
4067  	WMI_10X_PDEV_PARAM_RTS_FIXED_RATE,
4068  	WMI_10X_PDEV_PARAM_CAL_PERIOD,
4069  	WMI_10X_PDEV_PARAM_ATF_STRICT_SCH,
4070  	WMI_10X_PDEV_PARAM_ATF_SCHED_DURATION,
4071  	WMI_10X_PDEV_PARAM_SET_PROMISC_MODE_CMDID,
4072  	WMI_10X_PDEV_PARAM_PDEV_RESET
4073  };
4074  
4075  enum wmi_10_4_pdev_param {
4076  	WMI_10_4_PDEV_PARAM_TX_CHAIN_MASK = 0x1,
4077  	WMI_10_4_PDEV_PARAM_RX_CHAIN_MASK,
4078  	WMI_10_4_PDEV_PARAM_TXPOWER_LIMIT2G,
4079  	WMI_10_4_PDEV_PARAM_TXPOWER_LIMIT5G,
4080  	WMI_10_4_PDEV_PARAM_TXPOWER_SCALE,
4081  	WMI_10_4_PDEV_PARAM_BEACON_GEN_MODE,
4082  	WMI_10_4_PDEV_PARAM_BEACON_TX_MODE,
4083  	WMI_10_4_PDEV_PARAM_RESMGR_OFFCHAN_MODE,
4084  	WMI_10_4_PDEV_PARAM_PROTECTION_MODE,
4085  	WMI_10_4_PDEV_PARAM_DYNAMIC_BW,
4086  	WMI_10_4_PDEV_PARAM_NON_AGG_SW_RETRY_TH,
4087  	WMI_10_4_PDEV_PARAM_AGG_SW_RETRY_TH,
4088  	WMI_10_4_PDEV_PARAM_STA_KICKOUT_TH,
4089  	WMI_10_4_PDEV_PARAM_AC_AGGRSIZE_SCALING,
4090  	WMI_10_4_PDEV_PARAM_LTR_ENABLE,
4091  	WMI_10_4_PDEV_PARAM_LTR_AC_LATENCY_BE,
4092  	WMI_10_4_PDEV_PARAM_LTR_AC_LATENCY_BK,
4093  	WMI_10_4_PDEV_PARAM_LTR_AC_LATENCY_VI,
4094  	WMI_10_4_PDEV_PARAM_LTR_AC_LATENCY_VO,
4095  	WMI_10_4_PDEV_PARAM_LTR_AC_LATENCY_TIMEOUT,
4096  	WMI_10_4_PDEV_PARAM_LTR_SLEEP_OVERRIDE,
4097  	WMI_10_4_PDEV_PARAM_LTR_RX_OVERRIDE,
4098  	WMI_10_4_PDEV_PARAM_LTR_TX_ACTIVITY_TIMEOUT,
4099  	WMI_10_4_PDEV_PARAM_L1SS_ENABLE,
4100  	WMI_10_4_PDEV_PARAM_DSLEEP_ENABLE,
4101  	WMI_10_4_PDEV_PARAM_PCIELP_TXBUF_FLUSH,
4102  	WMI_10_4_PDEV_PARAM_PCIELP_TXBUF_WATERMARK,
4103  	WMI_10_4_PDEV_PARAM_PCIELP_TXBUF_TMO_EN,
4104  	WMI_10_4_PDEV_PARAM_PCIELP_TXBUF_TMO_VALUE,
4105  	WMI_10_4_PDEV_PARAM_PDEV_STATS_UPDATE_PERIOD,
4106  	WMI_10_4_PDEV_PARAM_VDEV_STATS_UPDATE_PERIOD,
4107  	WMI_10_4_PDEV_PARAM_PEER_STATS_UPDATE_PERIOD,
4108  	WMI_10_4_PDEV_PARAM_BCNFLT_STATS_UPDATE_PERIOD,
4109  	WMI_10_4_PDEV_PARAM_PMF_QOS,
4110  	WMI_10_4_PDEV_PARAM_ARP_AC_OVERRIDE,
4111  	WMI_10_4_PDEV_PARAM_DCS,
4112  	WMI_10_4_PDEV_PARAM_ANI_ENABLE,
4113  	WMI_10_4_PDEV_PARAM_ANI_POLL_PERIOD,
4114  	WMI_10_4_PDEV_PARAM_ANI_LISTEN_PERIOD,
4115  	WMI_10_4_PDEV_PARAM_ANI_OFDM_LEVEL,
4116  	WMI_10_4_PDEV_PARAM_ANI_CCK_LEVEL,
4117  	WMI_10_4_PDEV_PARAM_DYNTXCHAIN,
4118  	WMI_10_4_PDEV_PARAM_PROXY_STA,
4119  	WMI_10_4_PDEV_PARAM_IDLE_PS_CONFIG,
4120  	WMI_10_4_PDEV_PARAM_POWER_GATING_SLEEP,
4121  	WMI_10_4_PDEV_PARAM_AGGR_BURST,
4122  	WMI_10_4_PDEV_PARAM_RX_DECAP_MODE,
4123  	WMI_10_4_PDEV_PARAM_FAST_CHANNEL_RESET,
4124  	WMI_10_4_PDEV_PARAM_BURST_DUR,
4125  	WMI_10_4_PDEV_PARAM_BURST_ENABLE,
4126  	WMI_10_4_PDEV_PARAM_SMART_ANTENNA_DEFAULT_ANTENNA,
4127  	WMI_10_4_PDEV_PARAM_IGMPMLD_OVERRIDE,
4128  	WMI_10_4_PDEV_PARAM_IGMPMLD_TID,
4129  	WMI_10_4_PDEV_PARAM_ANTENNA_GAIN,
4130  	WMI_10_4_PDEV_PARAM_RX_FILTER,
4131  	WMI_10_4_PDEV_SET_MCAST_TO_UCAST_TID,
4132  	WMI_10_4_PDEV_PARAM_PROXY_STA_MODE,
4133  	WMI_10_4_PDEV_PARAM_SET_MCAST2UCAST_MODE,
4134  	WMI_10_4_PDEV_PARAM_SET_MCAST2UCAST_BUFFER,
4135  	WMI_10_4_PDEV_PARAM_REMOVE_MCAST2UCAST_BUFFER,
4136  	WMI_10_4_PDEV_PEER_STA_PS_STATECHG_ENABLE,
4137  	WMI_10_4_PDEV_PARAM_IGMPMLD_AC_OVERRIDE,
4138  	WMI_10_4_PDEV_PARAM_BLOCK_INTERBSS,
4139  	WMI_10_4_PDEV_PARAM_SET_DISABLE_RESET_CMDID,
4140  	WMI_10_4_PDEV_PARAM_SET_MSDU_TTL_CMDID,
4141  	WMI_10_4_PDEV_PARAM_SET_PPDU_DURATION_CMDID,
4142  	WMI_10_4_PDEV_PARAM_TXBF_SOUND_PERIOD_CMDID,
4143  	WMI_10_4_PDEV_PARAM_SET_PROMISC_MODE_CMDID,
4144  	WMI_10_4_PDEV_PARAM_SET_BURST_MODE_CMDID,
4145  	WMI_10_4_PDEV_PARAM_EN_STATS,
4146  	WMI_10_4_PDEV_PARAM_MU_GROUP_POLICY,
4147  	WMI_10_4_PDEV_PARAM_NOISE_DETECTION,
4148  	WMI_10_4_PDEV_PARAM_NOISE_THRESHOLD,
4149  	WMI_10_4_PDEV_PARAM_DPD_ENABLE,
4150  	WMI_10_4_PDEV_PARAM_SET_MCAST_BCAST_ECHO,
4151  	WMI_10_4_PDEV_PARAM_ATF_STRICT_SCH,
4152  	WMI_10_4_PDEV_PARAM_ATF_SCHED_DURATION,
4153  	WMI_10_4_PDEV_PARAM_ANT_PLZN,
4154  	WMI_10_4_PDEV_PARAM_MGMT_RETRY_LIMIT,
4155  	WMI_10_4_PDEV_PARAM_SENSITIVITY_LEVEL,
4156  	WMI_10_4_PDEV_PARAM_SIGNED_TXPOWER_2G,
4157  	WMI_10_4_PDEV_PARAM_SIGNED_TXPOWER_5G,
4158  	WMI_10_4_PDEV_PARAM_ENABLE_PER_TID_AMSDU,
4159  	WMI_10_4_PDEV_PARAM_ENABLE_PER_TID_AMPDU,
4160  	WMI_10_4_PDEV_PARAM_CCA_THRESHOLD,
4161  	WMI_10_4_PDEV_PARAM_RTS_FIXED_RATE,
4162  	WMI_10_4_PDEV_PARAM_CAL_PERIOD,
4163  	WMI_10_4_PDEV_PARAM_PDEV_RESET,
4164  	WMI_10_4_PDEV_PARAM_WAPI_MBSSID_OFFSET,
4165  	WMI_10_4_PDEV_PARAM_ARP_SRCADDR,
4166  	WMI_10_4_PDEV_PARAM_ARP_DSTADDR,
4167  	WMI_10_4_PDEV_PARAM_TXPOWER_DECR_DB,
4168  	WMI_10_4_PDEV_PARAM_RX_BATCHMODE,
4169  	WMI_10_4_PDEV_PARAM_PACKET_AGGR_DELAY,
4170  	WMI_10_4_PDEV_PARAM_ATF_OBSS_NOISE_SCH,
4171  	WMI_10_4_PDEV_PARAM_ATF_OBSS_NOISE_SCALING_FACTOR,
4172  	WMI_10_4_PDEV_PARAM_CUST_TXPOWER_SCALE,
4173  	WMI_10_4_PDEV_PARAM_ATF_DYNAMIC_ENABLE,
4174  	WMI_10_4_PDEV_PARAM_ATF_SSID_GROUP_POLICY,
4175  	WMI_10_4_PDEV_PARAM_ENABLE_BTCOEX,
4176  };
4177  
4178  struct wmi_pdev_set_param_cmd {
4179  	__le32 param_id;
4180  	__le32 param_value;
4181  } __packed;
4182  
4183  struct wmi_pdev_set_base_macaddr_cmd {
4184  	struct wmi_mac_addr mac_addr;
4185  } __packed;
4186  
4187  /* valid period is 1 ~ 60000ms, unit in millisecond */
4188  #define WMI_PDEV_PARAM_CAL_PERIOD_MAX 60000
4189  
4190  struct wmi_pdev_get_tpc_config_cmd {
4191  	/* parameter   */
4192  	__le32 param;
4193  } __packed;
4194  
4195  #define WMI_TPC_CONFIG_PARAM		1
4196  #define WMI_TPC_FINAL_RATE_MAX		240
4197  #define WMI_TPC_TX_N_CHAIN		4
4198  #define WMI_TPC_RATE_MAX               (WMI_TPC_TX_N_CHAIN * 65)
4199  #define WMI_TPC_PREAM_TABLE_MAX		10
4200  #define WMI_TPC_FLAG			3
4201  #define WMI_TPC_BUF_SIZE		10
4202  #define WMI_TPC_BEAMFORMING		2
4203  
4204  enum wmi_tpc_table_type {
4205  	WMI_TPC_TABLE_TYPE_CDD = 0,
4206  	WMI_TPC_TABLE_TYPE_STBC = 1,
4207  	WMI_TPC_TABLE_TYPE_TXBF = 2,
4208  };
4209  
4210  enum wmi_tpc_config_event_flag {
4211  	WMI_TPC_CONFIG_EVENT_FLAG_TABLE_CDD	= 0x1,
4212  	WMI_TPC_CONFIG_EVENT_FLAG_TABLE_STBC	= 0x2,
4213  	WMI_TPC_CONFIG_EVENT_FLAG_TABLE_TXBF	= 0x4,
4214  };
4215  
4216  struct wmi_pdev_tpc_config_event {
4217  	__le32 reg_domain;
4218  	__le32 chan_freq;
4219  	__le32 phy_mode;
4220  	__le32 twice_antenna_reduction;
4221  	__le32 twice_max_rd_power;
4222  	a_sle32 twice_antenna_gain;
4223  	__le32 power_limit;
4224  	__le32 rate_max;
4225  	__le32 num_tx_chain;
4226  	__le32 ctl;
4227  	__le32 flags;
4228  	s8 max_reg_allow_pow[WMI_TPC_TX_N_CHAIN];
4229  	s8 max_reg_allow_pow_agcdd[WMI_TPC_TX_N_CHAIN][WMI_TPC_TX_N_CHAIN];
4230  	s8 max_reg_allow_pow_agstbc[WMI_TPC_TX_N_CHAIN][WMI_TPC_TX_N_CHAIN];
4231  	s8 max_reg_allow_pow_agtxbf[WMI_TPC_TX_N_CHAIN][WMI_TPC_TX_N_CHAIN];
4232  	u8 rates_array[WMI_TPC_RATE_MAX];
4233  } __packed;
4234  
4235  /* Transmit power scale factor. */
4236  enum wmi_tp_scale {
4237  	WMI_TP_SCALE_MAX    = 0,	/* no scaling (default) */
4238  	WMI_TP_SCALE_50     = 1,	/* 50% of max (-3 dBm) */
4239  	WMI_TP_SCALE_25     = 2,	/* 25% of max (-6 dBm) */
4240  	WMI_TP_SCALE_12     = 3,	/* 12% of max (-9 dBm) */
4241  	WMI_TP_SCALE_MIN    = 4,	/* min, but still on   */
4242  	WMI_TP_SCALE_SIZE   = 5,	/* max num of enum     */
4243  };
4244  
4245  struct wmi_pdev_tpc_final_table_event {
4246  	__le32 reg_domain;
4247  	__le32 chan_freq;
4248  	__le32 phy_mode;
4249  	__le32 twice_antenna_reduction;
4250  	__le32 twice_max_rd_power;
4251  	a_sle32 twice_antenna_gain;
4252  	__le32 power_limit;
4253  	__le32 rate_max;
4254  	__le32 num_tx_chain;
4255  	__le32 ctl;
4256  	__le32 flags;
4257  	s8 max_reg_allow_pow[WMI_TPC_TX_N_CHAIN];
4258  	s8 max_reg_allow_pow_agcdd[WMI_TPC_TX_N_CHAIN][WMI_TPC_TX_N_CHAIN];
4259  	s8 max_reg_allow_pow_agstbc[WMI_TPC_TX_N_CHAIN][WMI_TPC_TX_N_CHAIN];
4260  	s8 max_reg_allow_pow_agtxbf[WMI_TPC_TX_N_CHAIN][WMI_TPC_TX_N_CHAIN];
4261  	u8 rates_array[WMI_TPC_FINAL_RATE_MAX];
4262  	u8 ctl_power_table[WMI_TPC_BEAMFORMING][WMI_TPC_TX_N_CHAIN]
4263  	   [WMI_TPC_TX_N_CHAIN];
4264  } __packed;
4265  
4266  struct wmi_pdev_get_tpc_table_cmd {
4267  	__le32 param;
4268  } __packed;
4269  
4270  enum wmi_tpc_pream_2ghz {
4271  	WMI_TPC_PREAM_2GHZ_CCK = 0,
4272  	WMI_TPC_PREAM_2GHZ_OFDM,
4273  	WMI_TPC_PREAM_2GHZ_HT20,
4274  	WMI_TPC_PREAM_2GHZ_HT40,
4275  	WMI_TPC_PREAM_2GHZ_VHT20,
4276  	WMI_TPC_PREAM_2GHZ_VHT40,
4277  	WMI_TPC_PREAM_2GHZ_VHT80,
4278  };
4279  
4280  enum wmi_tpc_pream_5ghz {
4281  	WMI_TPC_PREAM_5GHZ_OFDM = 1,
4282  	WMI_TPC_PREAM_5GHZ_HT20,
4283  	WMI_TPC_PREAM_5GHZ_HT40,
4284  	WMI_TPC_PREAM_5GHZ_VHT20,
4285  	WMI_TPC_PREAM_5GHZ_VHT40,
4286  	WMI_TPC_PREAM_5GHZ_VHT80,
4287  	WMI_TPC_PREAM_5GHZ_HTCUP,
4288  };
4289  
4290  #define	WMI_PEER_PS_STATE_DISABLED	2
4291  
4292  struct wmi_peer_sta_ps_state_chg_event {
4293  	struct wmi_mac_addr peer_macaddr;
4294  	__le32 peer_ps_state;
4295  } __packed;
4296  
4297  #define WMI_MAX_DEBUG_MESG (sizeof(u32) * 32)
4298  
4299  struct wmi_debug_mesg_event {
4300  	/* message buffer, NULL terminated */
4301  	char bufp[WMI_MAX_DEBUG_MESG];
4302  } __packed;
4303  
4304  enum {
4305  	/* P2P device */
4306  	VDEV_SUBTYPE_P2PDEV = 0,
4307  	/* P2P client */
4308  	VDEV_SUBTYPE_P2PCLI,
4309  	/* P2P GO */
4310  	VDEV_SUBTYPE_P2PGO,
4311  	/* BT3.0 HS */
4312  	VDEV_SUBTYPE_BT,
4313  };
4314  
4315  struct wmi_pdev_set_channel_cmd {
4316  	/* idnore power , only use flags , mode and freq */
4317  	struct wmi_channel chan;
4318  } __packed;
4319  
4320  struct wmi_pdev_pktlog_enable_cmd {
4321  	__le32 ev_bitmap;
4322  } __packed;
4323  
4324  /* Customize the DSCP (bit) to TID (0-7) mapping for QOS */
4325  #define WMI_DSCP_MAP_MAX    (64)
4326  struct wmi_pdev_set_dscp_tid_map_cmd {
4327  	/* map indicating DSCP to TID conversion */
4328  	__le32 dscp_to_tid_map[WMI_DSCP_MAP_MAX];
4329  } __packed;
4330  
4331  enum mcast_bcast_rate_id {
4332  	WMI_SET_MCAST_RATE,
4333  	WMI_SET_BCAST_RATE
4334  };
4335  
4336  struct mcast_bcast_rate {
4337  	enum mcast_bcast_rate_id rate_id;
4338  	__le32 rate;
4339  } __packed;
4340  
4341  struct wmi_wmm_params {
4342  	__le32 cwmin;
4343  	__le32 cwmax;
4344  	__le32 aifs;
4345  	__le32 txop;
4346  	__le32 acm;
4347  	__le32 no_ack;
4348  } __packed;
4349  
4350  struct wmi_pdev_set_wmm_params {
4351  	struct wmi_wmm_params ac_be;
4352  	struct wmi_wmm_params ac_bk;
4353  	struct wmi_wmm_params ac_vi;
4354  	struct wmi_wmm_params ac_vo;
4355  } __packed;
4356  
4357  struct wmi_wmm_params_arg {
4358  	u32 cwmin;
4359  	u32 cwmax;
4360  	u32 aifs;
4361  	u32 txop;
4362  	u32 acm;
4363  	u32 no_ack;
4364  };
4365  
4366  struct wmi_wmm_params_all_arg {
4367  	struct wmi_wmm_params_arg ac_be;
4368  	struct wmi_wmm_params_arg ac_bk;
4369  	struct wmi_wmm_params_arg ac_vi;
4370  	struct wmi_wmm_params_arg ac_vo;
4371  };
4372  
4373  struct wmi_pdev_stats_tx {
4374  	/* Num HTT cookies queued to dispatch list */
4375  	__le32 comp_queued;
4376  
4377  	/* Num HTT cookies dispatched */
4378  	__le32 comp_delivered;
4379  
4380  	/* Num MSDU queued to WAL */
4381  	__le32 msdu_enqued;
4382  
4383  	/* Num MPDU queue to WAL */
4384  	__le32 mpdu_enqued;
4385  
4386  	/* Num MSDUs dropped by WMM limit */
4387  	__le32 wmm_drop;
4388  
4389  	/* Num Local frames queued */
4390  	__le32 local_enqued;
4391  
4392  	/* Num Local frames done */
4393  	__le32 local_freed;
4394  
4395  	/* Num queued to HW */
4396  	__le32 hw_queued;
4397  
4398  	/* Num PPDU reaped from HW */
4399  	__le32 hw_reaped;
4400  
4401  	/* Num underruns */
4402  	__le32 underrun;
4403  
4404  	/* Num PPDUs cleaned up in TX abort */
4405  	__le32 tx_abort;
4406  
4407  	/* Num MPDUs requeued by SW */
4408  	__le32 mpdus_requeued;
4409  
4410  	/* excessive retries */
4411  	__le32 tx_ko;
4412  
4413  	/* data hw rate code */
4414  	__le32 data_rc;
4415  
4416  	/* Scheduler self triggers */
4417  	__le32 self_triggers;
4418  
4419  	/* frames dropped due to excessive sw retries */
4420  	__le32 sw_retry_failure;
4421  
4422  	/* illegal rate phy errors  */
4423  	__le32 illgl_rate_phy_err;
4424  
4425  	/* wal pdev continuous xretry */
4426  	__le32 pdev_cont_xretry;
4427  
4428  	/* wal pdev continuous xretry */
4429  	__le32 pdev_tx_timeout;
4430  
4431  	/* wal pdev resets  */
4432  	__le32 pdev_resets;
4433  
4434  	/* frames dropped due to non-availability of stateless TIDs */
4435  	__le32 stateless_tid_alloc_failure;
4436  
4437  	__le32 phy_underrun;
4438  
4439  	/* MPDU is more than txop limit */
4440  	__le32 txop_ovf;
4441  } __packed;
4442  
4443  struct wmi_10_4_pdev_stats_tx {
4444  	/* Num HTT cookies queued to dispatch list */
4445  	__le32 comp_queued;
4446  
4447  	/* Num HTT cookies dispatched */
4448  	__le32 comp_delivered;
4449  
4450  	/* Num MSDU queued to WAL */
4451  	__le32 msdu_enqued;
4452  
4453  	/* Num MPDU queue to WAL */
4454  	__le32 mpdu_enqued;
4455  
4456  	/* Num MSDUs dropped by WMM limit */
4457  	__le32 wmm_drop;
4458  
4459  	/* Num Local frames queued */
4460  	__le32 local_enqued;
4461  
4462  	/* Num Local frames done */
4463  	__le32 local_freed;
4464  
4465  	/* Num queued to HW */
4466  	__le32 hw_queued;
4467  
4468  	/* Num PPDU reaped from HW */
4469  	__le32 hw_reaped;
4470  
4471  	/* Num underruns */
4472  	__le32 underrun;
4473  
4474  	/* HW Paused. */
4475  	__le32  hw_paused;
4476  
4477  	/* Num PPDUs cleaned up in TX abort */
4478  	__le32 tx_abort;
4479  
4480  	/* Num MPDUs requeued by SW */
4481  	__le32 mpdus_requeued;
4482  
4483  	/* excessive retries */
4484  	__le32 tx_ko;
4485  
4486  	/* data hw rate code */
4487  	__le32 data_rc;
4488  
4489  	/* Scheduler self triggers */
4490  	__le32 self_triggers;
4491  
4492  	/* frames dropped due to excessive sw retries */
4493  	__le32 sw_retry_failure;
4494  
4495  	/* illegal rate phy errors  */
4496  	__le32 illgl_rate_phy_err;
4497  
4498  	/* wal pdev continuous xretry */
4499  	__le32 pdev_cont_xretry;
4500  
4501  	/* wal pdev tx timeouts */
4502  	__le32 pdev_tx_timeout;
4503  
4504  	/* wal pdev resets  */
4505  	__le32 pdev_resets;
4506  
4507  	/* frames dropped due to non-availability of stateless TIDs */
4508  	__le32 stateless_tid_alloc_failure;
4509  
4510  	__le32 phy_underrun;
4511  
4512  	/* MPDU is more than txop limit */
4513  	__le32 txop_ovf;
4514  
4515  	/* Number of Sequences posted */
4516  	__le32 seq_posted;
4517  
4518  	/* Number of Sequences failed queueing */
4519  	__le32 seq_failed_queueing;
4520  
4521  	/* Number of Sequences completed */
4522  	__le32 seq_completed;
4523  
4524  	/* Number of Sequences restarted */
4525  	__le32 seq_restarted;
4526  
4527  	/* Number of MU Sequences posted */
4528  	__le32 mu_seq_posted;
4529  
4530  	/* Num MPDUs flushed by SW, HWPAUSED,SW TXABORT(Reset,channel change) */
4531  	__le32 mpdus_sw_flush;
4532  
4533  	/* Num MPDUs filtered by HW, all filter condition (TTL expired) */
4534  	__le32 mpdus_hw_filter;
4535  
4536  	/* Num MPDUs truncated by PDG
4537  	 * (TXOP, TBTT, PPDU_duration based on rate, dyn_bw)
4538  	 */
4539  	__le32 mpdus_truncated;
4540  
4541  	/* Num MPDUs that was tried but didn't receive ACK or BA */
4542  	__le32 mpdus_ack_failed;
4543  
4544  	/* Num MPDUs that was dropped due to expiry. */
4545  	__le32 mpdus_expired;
4546  } __packed;
4547  
4548  struct wmi_pdev_stats_rx {
4549  	/* Cnts any change in ring routing mid-ppdu */
4550  	__le32 mid_ppdu_route_change;
4551  
4552  	/* Total number of statuses processed */
4553  	__le32 status_rcvd;
4554  
4555  	/* Extra frags on rings 0-3 */
4556  	__le32 r0_frags;
4557  	__le32 r1_frags;
4558  	__le32 r2_frags;
4559  	__le32 r3_frags;
4560  
4561  	/* MSDUs / MPDUs delivered to HTT */
4562  	__le32 htt_msdus;
4563  	__le32 htt_mpdus;
4564  
4565  	/* MSDUs / MPDUs delivered to local stack */
4566  	__le32 loc_msdus;
4567  	__le32 loc_mpdus;
4568  
4569  	/* AMSDUs that have more MSDUs than the status ring size */
4570  	__le32 oversize_amsdu;
4571  
4572  	/* Number of PHY errors */
4573  	__le32 phy_errs;
4574  
4575  	/* Number of PHY errors drops */
4576  	__le32 phy_err_drop;
4577  
4578  	/* Number of mpdu errors - FCS, MIC, ENC etc. */
4579  	__le32 mpdu_errs;
4580  } __packed;
4581  
4582  struct wmi_pdev_stats_peer {
4583  	/* REMOVE THIS ONCE REAL PEER STAT COUNTERS ARE ADDED */
4584  	__le32 dummy;
4585  } __packed;
4586  
4587  enum wmi_stats_id {
4588  	WMI_STAT_PEER = BIT(0),
4589  	WMI_STAT_AP = BIT(1),
4590  	WMI_STAT_PDEV = BIT(2),
4591  	WMI_STAT_VDEV = BIT(3),
4592  	WMI_STAT_BCNFLT = BIT(4),
4593  	WMI_STAT_VDEV_RATE = BIT(5),
4594  };
4595  
4596  enum wmi_10_4_stats_id {
4597  	WMI_10_4_STAT_PEER		= BIT(0),
4598  	WMI_10_4_STAT_AP		= BIT(1),
4599  	WMI_10_4_STAT_INST		= BIT(2),
4600  	WMI_10_4_STAT_PEER_EXTD		= BIT(3),
4601  	WMI_10_4_STAT_VDEV_EXTD		= BIT(4),
4602  };
4603  
4604  enum wmi_tlv_stats_id {
4605  	WMI_TLV_STAT_PEER	= BIT(0),
4606  	WMI_TLV_STAT_AP		= BIT(1),
4607  	WMI_TLV_STAT_PDEV	= BIT(2),
4608  	WMI_TLV_STAT_VDEV	= BIT(3),
4609  	WMI_TLV_STAT_PEER_EXTD  = BIT(10),
4610  };
4611  
4612  struct wlan_inst_rssi_args {
4613  	__le16 cfg_retry_count;
4614  	__le16 retry_count;
4615  };
4616  
4617  struct wmi_request_stats_cmd {
4618  	__le32 stats_id;
4619  
4620  	__le32 vdev_id;
4621  
4622  	/* peer MAC address */
4623  	struct wmi_mac_addr peer_macaddr;
4624  
4625  	/* Instantaneous RSSI arguments */
4626  	struct wlan_inst_rssi_args inst_rssi_args;
4627  } __packed;
4628  
4629  enum wmi_peer_stats_info_request_type {
4630  	/* request stats of one specified peer */
4631  	WMI_REQUEST_ONE_PEER_STATS_INFO = 0x01,
4632  	/* request stats of all peers belong to specified VDEV */
4633  	WMI_REQUEST_VDEV_ALL_PEER_STATS_INFO = 0x02,
4634  };
4635  
4636  /* Suspend option */
4637  enum {
4638  	/* suspend */
4639  	WMI_PDEV_SUSPEND,
4640  
4641  	/* suspend and disable all interrupts */
4642  	WMI_PDEV_SUSPEND_AND_DISABLE_INTR,
4643  };
4644  
4645  struct wmi_pdev_suspend_cmd {
4646  	/* suspend option sent to target */
4647  	__le32 suspend_opt;
4648  } __packed;
4649  
4650  struct wmi_stats_event {
4651  	__le32 stats_id; /* WMI_STAT_ */
4652  	/*
4653  	 * number of pdev stats event structures
4654  	 * (wmi_pdev_stats) 0 or 1
4655  	 */
4656  	__le32 num_pdev_stats;
4657  	/*
4658  	 * number of vdev stats event structures
4659  	 * (wmi_vdev_stats) 0 or max vdevs
4660  	 */
4661  	__le32 num_vdev_stats;
4662  	/*
4663  	 * number of peer stats event structures
4664  	 * (wmi_peer_stats) 0 or max peers
4665  	 */
4666  	__le32 num_peer_stats;
4667  	__le32 num_bcnflt_stats;
4668  	/*
4669  	 * followed by
4670  	 *   num_pdev_stats * size of(struct wmi_pdev_stats)
4671  	 *   num_vdev_stats * size of(struct wmi_vdev_stats)
4672  	 *   num_peer_stats * size of(struct wmi_peer_stats)
4673  	 *
4674  	 *  By having a zero sized array, the pointer to data area
4675  	 *  becomes available without increasing the struct size
4676  	 */
4677  	u8 data[];
4678  } __packed;
4679  
4680  struct wmi_10_2_stats_event {
4681  	__le32 stats_id; /* %WMI_REQUEST_ */
4682  	__le32 num_pdev_stats;
4683  	__le32 num_pdev_ext_stats;
4684  	__le32 num_vdev_stats;
4685  	__le32 num_peer_stats;
4686  	__le32 num_bcnflt_stats;
4687  	u8 data[];
4688  } __packed;
4689  
4690  /*
4691   * PDEV statistics
4692   * TODO: add all PDEV stats here
4693   */
4694  struct wmi_pdev_stats_base {
4695  	__le32 chan_nf;
4696  	__le32 tx_frame_count; /* Cycles spent transmitting frames */
4697  	__le32 rx_frame_count; /* Cycles spent receiving frames */
4698  	__le32 rx_clear_count; /* Total channel busy time, evidently */
4699  	__le32 cycle_count; /* Total on-channel time */
4700  	__le32 phy_err_count;
4701  	__le32 chan_tx_pwr;
4702  } __packed;
4703  
4704  struct wmi_pdev_stats {
4705  	struct wmi_pdev_stats_base base;
4706  	struct wmi_pdev_stats_tx tx;
4707  	struct wmi_pdev_stats_rx rx;
4708  	struct wmi_pdev_stats_peer peer;
4709  } __packed;
4710  
4711  struct wmi_pdev_stats_extra {
4712  	__le32 ack_rx_bad;
4713  	__le32 rts_bad;
4714  	__le32 rts_good;
4715  	__le32 fcs_bad;
4716  	__le32 no_beacons;
4717  	__le32 mib_int_count;
4718  } __packed;
4719  
4720  struct wmi_10x_pdev_stats {
4721  	struct wmi_pdev_stats_base base;
4722  	struct wmi_pdev_stats_tx tx;
4723  	struct wmi_pdev_stats_rx rx;
4724  	struct wmi_pdev_stats_peer peer;
4725  	struct wmi_pdev_stats_extra extra;
4726  } __packed;
4727  
4728  struct wmi_pdev_stats_mem {
4729  	__le32 dram_free;
4730  	__le32 iram_free;
4731  } __packed;
4732  
4733  struct wmi_10_2_pdev_stats {
4734  	struct wmi_pdev_stats_base base;
4735  	struct wmi_pdev_stats_tx tx;
4736  	__le32 mc_drop;
4737  	struct wmi_pdev_stats_rx rx;
4738  	__le32 pdev_rx_timeout;
4739  	struct wmi_pdev_stats_mem mem;
4740  	struct wmi_pdev_stats_peer peer;
4741  	struct wmi_pdev_stats_extra extra;
4742  } __packed;
4743  
4744  struct wmi_10_4_pdev_stats {
4745  	struct wmi_pdev_stats_base base;
4746  	struct wmi_10_4_pdev_stats_tx tx;
4747  	struct wmi_pdev_stats_rx rx;
4748  	__le32 rx_ovfl_errs;
4749  	struct wmi_pdev_stats_mem mem;
4750  	__le32 sram_free_size;
4751  	struct wmi_pdev_stats_extra extra;
4752  } __packed;
4753  
4754  /*
4755   * VDEV statistics
4756   */
4757  
4758  #define WMI_VDEV_STATS_FTM_COUNT_VALID	BIT(31)
4759  #define WMI_VDEV_STATS_FTM_COUNT_LSB	0
4760  #define WMI_VDEV_STATS_FTM_COUNT_MASK	0x7fffffff
4761  
4762  struct wmi_vdev_stats {
4763  	__le32 vdev_id;
4764  } __packed;
4765  
4766  struct wmi_vdev_stats_extd {
4767  	__le32 vdev_id;
4768  	__le32 ppdu_aggr_cnt;
4769  	__le32 ppdu_noack;
4770  	__le32 mpdu_queued;
4771  	__le32 ppdu_nonaggr_cnt;
4772  	__le32 mpdu_sw_requeued;
4773  	__le32 mpdu_suc_retry;
4774  	__le32 mpdu_suc_multitry;
4775  	__le32 mpdu_fail_retry;
4776  	__le32 tx_ftm_suc;
4777  	__le32 tx_ftm_suc_retry;
4778  	__le32 tx_ftm_fail;
4779  	__le32 rx_ftmr_cnt;
4780  	__le32 rx_ftmr_dup_cnt;
4781  	__le32 rx_iftmr_cnt;
4782  	__le32 rx_iftmr_dup_cnt;
4783  	__le32 reserved[6];
4784  } __packed;
4785  
4786  /*
4787   * peer statistics.
4788   * TODO: add more stats
4789   */
4790  struct wmi_peer_stats {
4791  	struct wmi_mac_addr peer_macaddr;
4792  	__le32 peer_rssi;
4793  	__le32 peer_tx_rate;
4794  } __packed;
4795  
4796  struct wmi_10x_peer_stats {
4797  	struct wmi_peer_stats old;
4798  	__le32 peer_rx_rate;
4799  } __packed;
4800  
4801  struct wmi_10_2_peer_stats {
4802  	struct wmi_peer_stats old;
4803  	__le32 peer_rx_rate;
4804  	__le32 current_per;
4805  	__le32 retries;
4806  	__le32 tx_rate_count;
4807  	__le32 max_4ms_frame_len;
4808  	__le32 total_sub_frames;
4809  	__le32 tx_bytes;
4810  	__le32 num_pkt_loss_overflow[4];
4811  	__le32 num_pkt_loss_excess_retry[4];
4812  } __packed;
4813  
4814  struct wmi_10_2_4_peer_stats {
4815  	struct wmi_10_2_peer_stats common;
4816  	__le32 peer_rssi_changed;
4817  } __packed;
4818  
4819  struct wmi_10_2_4_ext_peer_stats {
4820  	struct wmi_10_2_peer_stats common;
4821  	__le32 peer_rssi_changed;
4822  	__le32 rx_duration;
4823  } __packed;
4824  
4825  struct wmi_10_4_peer_stats {
4826  	struct wmi_mac_addr peer_macaddr;
4827  	__le32 peer_rssi;
4828  	__le32 peer_rssi_seq_num;
4829  	__le32 peer_tx_rate;
4830  	__le32 peer_rx_rate;
4831  	__le32 current_per;
4832  	__le32 retries;
4833  	__le32 tx_rate_count;
4834  	__le32 max_4ms_frame_len;
4835  	__le32 total_sub_frames;
4836  	__le32 tx_bytes;
4837  	__le32 num_pkt_loss_overflow[4];
4838  	__le32 num_pkt_loss_excess_retry[4];
4839  	__le32 peer_rssi_changed;
4840  } __packed;
4841  
4842  struct wmi_10_4_peer_extd_stats {
4843  	struct wmi_mac_addr peer_macaddr;
4844  	__le32 inactive_time;
4845  	__le32 peer_chain_rssi;
4846  	__le32 rx_duration;
4847  	__le32 reserved[10];
4848  } __packed;
4849  
4850  struct wmi_10_4_bss_bcn_stats {
4851  	__le32 vdev_id;
4852  	__le32 bss_bcns_dropped;
4853  	__le32 bss_bcn_delivered;
4854  } __packed;
4855  
4856  struct wmi_10_4_bss_bcn_filter_stats {
4857  	__le32 bcns_dropped;
4858  	__le32 bcns_delivered;
4859  	__le32 active_filters;
4860  	struct wmi_10_4_bss_bcn_stats bss_stats;
4861  } __packed;
4862  
4863  struct wmi_10_2_pdev_ext_stats {
4864  	__le32 rx_rssi_comb;
4865  	__le32 rx_rssi[4];
4866  	__le32 rx_mcs[10];
4867  	__le32 tx_mcs[10];
4868  	__le32 ack_rssi;
4869  } __packed;
4870  
4871  struct wmi_vdev_create_cmd {
4872  	__le32 vdev_id;
4873  	__le32 vdev_type;
4874  	__le32 vdev_subtype;
4875  	struct wmi_mac_addr vdev_macaddr;
4876  } __packed;
4877  
4878  enum wmi_vdev_type {
4879  	WMI_VDEV_TYPE_AP      = 1,
4880  	WMI_VDEV_TYPE_STA     = 2,
4881  	WMI_VDEV_TYPE_IBSS    = 3,
4882  	WMI_VDEV_TYPE_MONITOR = 4,
4883  };
4884  
4885  enum wmi_vdev_subtype {
4886  	WMI_VDEV_SUBTYPE_NONE,
4887  	WMI_VDEV_SUBTYPE_P2P_DEVICE,
4888  	WMI_VDEV_SUBTYPE_P2P_CLIENT,
4889  	WMI_VDEV_SUBTYPE_P2P_GO,
4890  	WMI_VDEV_SUBTYPE_PROXY_STA,
4891  	WMI_VDEV_SUBTYPE_MESH_11S,
4892  	WMI_VDEV_SUBTYPE_MESH_NON_11S,
4893  };
4894  
4895  enum wmi_vdev_subtype_legacy {
4896  	WMI_VDEV_SUBTYPE_LEGACY_NONE      = 0,
4897  	WMI_VDEV_SUBTYPE_LEGACY_P2P_DEV   = 1,
4898  	WMI_VDEV_SUBTYPE_LEGACY_P2P_CLI   = 2,
4899  	WMI_VDEV_SUBTYPE_LEGACY_P2P_GO    = 3,
4900  	WMI_VDEV_SUBTYPE_LEGACY_PROXY_STA = 4,
4901  };
4902  
4903  enum wmi_vdev_subtype_10_2_4 {
4904  	WMI_VDEV_SUBTYPE_10_2_4_NONE      = 0,
4905  	WMI_VDEV_SUBTYPE_10_2_4_P2P_DEV   = 1,
4906  	WMI_VDEV_SUBTYPE_10_2_4_P2P_CLI   = 2,
4907  	WMI_VDEV_SUBTYPE_10_2_4_P2P_GO    = 3,
4908  	WMI_VDEV_SUBTYPE_10_2_4_PROXY_STA = 4,
4909  	WMI_VDEV_SUBTYPE_10_2_4_MESH_11S  = 5,
4910  };
4911  
4912  enum wmi_vdev_subtype_10_4 {
4913  	WMI_VDEV_SUBTYPE_10_4_NONE         = 0,
4914  	WMI_VDEV_SUBTYPE_10_4_P2P_DEV      = 1,
4915  	WMI_VDEV_SUBTYPE_10_4_P2P_CLI      = 2,
4916  	WMI_VDEV_SUBTYPE_10_4_P2P_GO       = 3,
4917  	WMI_VDEV_SUBTYPE_10_4_PROXY_STA    = 4,
4918  	WMI_VDEV_SUBTYPE_10_4_MESH_NON_11S = 5,
4919  	WMI_VDEV_SUBTYPE_10_4_MESH_11S     = 6,
4920  };
4921  
4922  /* values for vdev_subtype */
4923  
4924  /* values for vdev_start_request flags */
4925  /*
4926   * Indicates that AP VDEV uses hidden ssid. only valid for
4927   *  AP/GO
4928   */
4929  #define WMI_VDEV_START_HIDDEN_SSID  (1 << 0)
4930  /*
4931   * Indicates if robust management frame/management frame
4932   *  protection is enabled. For GO/AP vdevs, it indicates that
4933   *  it may support station/client associations with RMF enabled.
4934   *  For STA/client vdevs, it indicates that sta will
4935   *  associate with AP with RMF enabled.
4936   */
4937  #define WMI_VDEV_START_PMF_ENABLED  (1 << 1)
4938  
4939  struct wmi_p2p_noa_descriptor {
4940  	__le32 type_count; /* 255: continuous schedule, 0: reserved */
4941  	__le32 duration;  /* Absent period duration in micro seconds */
4942  	__le32 interval;   /* Absent period interval in micro seconds */
4943  	__le32 start_time; /* 32 bit tsf time when in starts */
4944  } __packed;
4945  
4946  struct wmi_vdev_start_request_cmd {
4947  	/* WMI channel */
4948  	struct wmi_channel chan;
4949  	/* unique id identifying the VDEV, generated by the caller */
4950  	__le32 vdev_id;
4951  	/* requestor id identifying the caller module */
4952  	__le32 requestor_id;
4953  	/* beacon interval from received beacon */
4954  	__le32 beacon_interval;
4955  	/* DTIM Period from the received beacon */
4956  	__le32 dtim_period;
4957  	/* Flags */
4958  	__le32 flags;
4959  	/* ssid field. Only valid for AP/GO/IBSS/BTAmp VDEV type. */
4960  	struct wmi_ssid ssid;
4961  	/* beacon/probe response xmit rate. Applicable for SoftAP. */
4962  	__le32 bcn_tx_rate;
4963  	/* beacon/probe response xmit power. Applicable for SoftAP. */
4964  	__le32 bcn_tx_power;
4965  	/* number of p2p NOA descriptor(s) from scan entry */
4966  	__le32 num_noa_descriptors;
4967  	/*
4968  	 * Disable H/W ack. This used by WMI_VDEV_RESTART_REQUEST_CMDID.
4969  	 * During CAC, Our HW shouldn't ack ditected frames
4970  	 */
4971  	__le32 disable_hw_ack;
4972  	/* actual p2p NOA descriptor from scan entry */
4973  	struct wmi_p2p_noa_descriptor noa_descriptors[2];
4974  } __packed;
4975  
4976  struct wmi_vdev_restart_request_cmd {
4977  	struct wmi_vdev_start_request_cmd vdev_start_request_cmd;
4978  } __packed;
4979  
4980  struct wmi_vdev_start_request_arg {
4981  	u32 vdev_id;
4982  	struct wmi_channel_arg channel;
4983  	u32 bcn_intval;
4984  	u32 dtim_period;
4985  	u8 *ssid;
4986  	u32 ssid_len;
4987  	u32 bcn_tx_rate;
4988  	u32 bcn_tx_power;
4989  	bool disable_hw_ack;
4990  	bool hidden_ssid;
4991  	bool pmf_enabled;
4992  };
4993  
4994  struct wmi_vdev_delete_cmd {
4995  	/* unique id identifying the VDEV, generated by the caller */
4996  	__le32 vdev_id;
4997  } __packed;
4998  
4999  struct wmi_vdev_up_cmd {
5000  	__le32 vdev_id;
5001  	__le32 vdev_assoc_id;
5002  	struct wmi_mac_addr vdev_bssid;
5003  } __packed;
5004  
5005  struct wmi_vdev_stop_cmd {
5006  	__le32 vdev_id;
5007  } __packed;
5008  
5009  struct wmi_vdev_down_cmd {
5010  	__le32 vdev_id;
5011  } __packed;
5012  
5013  struct wmi_vdev_standby_response_cmd {
5014  	/* unique id identifying the VDEV, generated by the caller */
5015  	__le32 vdev_id;
5016  } __packed;
5017  
5018  struct wmi_vdev_resume_response_cmd {
5019  	/* unique id identifying the VDEV, generated by the caller */
5020  	__le32 vdev_id;
5021  } __packed;
5022  
5023  struct wmi_vdev_set_param_cmd {
5024  	__le32 vdev_id;
5025  	__le32 param_id;
5026  	__le32 param_value;
5027  } __packed;
5028  
5029  #define WMI_MAX_KEY_INDEX   3
5030  #define WMI_MAX_KEY_LEN     32
5031  
5032  #define WMI_KEY_PAIRWISE 0x00
5033  #define WMI_KEY_GROUP    0x01
5034  #define WMI_KEY_TX_USAGE 0x02 /* default tx key - static wep */
5035  
5036  struct wmi_key_seq_counter {
5037  	__le32 key_seq_counter_l;
5038  	__le32 key_seq_counter_h;
5039  } __packed;
5040  
5041  enum wmi_cipher_suites {
5042  	WMI_CIPHER_NONE,
5043  	WMI_CIPHER_WEP,
5044  	WMI_CIPHER_TKIP,
5045  	WMI_CIPHER_AES_OCB,
5046  	WMI_CIPHER_AES_CCM,
5047  	WMI_CIPHER_WAPI,
5048  	WMI_CIPHER_CKIP,
5049  	WMI_CIPHER_AES_CMAC,
5050  	WMI_CIPHER_AES_GCM,
5051  };
5052  
5053  enum wmi_tlv_cipher_suites {
5054  	WMI_TLV_CIPHER_NONE,
5055  	WMI_TLV_CIPHER_WEP,
5056  	WMI_TLV_CIPHER_TKIP,
5057  	WMI_TLV_CIPHER_AES_OCB,
5058  	WMI_TLV_CIPHER_AES_CCM,
5059  	WMI_TLV_CIPHER_WAPI,
5060  	WMI_TLV_CIPHER_CKIP,
5061  	WMI_TLV_CIPHER_AES_CMAC,
5062  	WMI_TLV_CIPHER_ANY,
5063  	WMI_TLV_CIPHER_AES_GCM,
5064  };
5065  
5066  struct wmi_vdev_install_key_cmd {
5067  	__le32 vdev_id;
5068  	struct wmi_mac_addr peer_macaddr;
5069  	__le32 key_idx;
5070  	__le32 key_flags;
5071  	__le32 key_cipher; /* %WMI_CIPHER_ */
5072  	struct wmi_key_seq_counter key_rsc_counter;
5073  	struct wmi_key_seq_counter key_global_rsc_counter;
5074  	struct wmi_key_seq_counter key_tsc_counter;
5075  	u8 wpi_key_rsc_counter[16];
5076  	u8 wpi_key_tsc_counter[16];
5077  	__le32 key_len;
5078  	__le32 key_txmic_len;
5079  	__le32 key_rxmic_len;
5080  
5081  	/* contains key followed by tx mic followed by rx mic */
5082  	u8 key_data[];
5083  } __packed;
5084  
5085  struct wmi_vdev_install_key_arg {
5086  	u32 vdev_id;
5087  	const u8 *macaddr;
5088  	u32 key_idx;
5089  	u32 key_flags;
5090  	u32 key_cipher;
5091  	u32 key_len;
5092  	u32 key_txmic_len;
5093  	u32 key_rxmic_len;
5094  	const void *key_data;
5095  };
5096  
5097  /*
5098   * vdev fixed rate format:
5099   * - preamble - b7:b6 - see WMI_RATE_PREMABLE_
5100   * - nss      - b5:b4 - ss number (0 mean 1ss)
5101   * - rate_mcs - b3:b0 - as below
5102   *    CCK:  0 - 11Mbps, 1 - 5,5Mbps, 2 - 2Mbps, 3 - 1Mbps,
5103   *          4 - 11Mbps (s), 5 - 5,5Mbps (s), 6 - 2Mbps (s)
5104   *    OFDM: 0 - 48Mbps, 1 - 24Mbps, 2 - 12Mbps, 3 - 6Mbps,
5105   *          4 - 54Mbps, 5 - 36Mbps, 6 - 18Mbps, 7 - 9Mbps
5106   *    HT/VHT: MCS index
5107   */
5108  
5109  /* Preamble types to be used with VDEV fixed rate configuration */
5110  enum wmi_rate_preamble {
5111  	WMI_RATE_PREAMBLE_OFDM,
5112  	WMI_RATE_PREAMBLE_CCK,
5113  	WMI_RATE_PREAMBLE_HT,
5114  	WMI_RATE_PREAMBLE_VHT,
5115  };
5116  
5117  #define ATH10K_HW_NSS(rate)		(1 + (((rate) >> 4) & 0x3))
5118  #define ATH10K_HW_PREAMBLE(rate)	(((rate) >> 6) & 0x3)
5119  #define ATH10K_HW_MCS_RATE(rate)	((rate) & 0xf)
5120  #define ATH10K_HW_LEGACY_RATE(rate)	((rate) & 0x3f)
5121  #define ATH10K_HW_BW(flags)		(((flags) >> 3) & 0x3)
5122  #define ATH10K_HW_GI(flags)		(((flags) >> 5) & 0x1)
5123  #define ATH10K_HW_RATECODE(rate, nss, preamble) \
5124  	(((preamble) << 6) | ((nss) << 4) | (rate))
5125  #define ATH10K_HW_AMPDU(flags)		((flags) & 0x1)
5126  #define ATH10K_HW_BA_FAIL(flags)	(((flags) >> 1) & 0x3)
5127  #define ATH10K_FW_SKIPPED_RATE_CTRL(flags)	(((flags) >> 6) & 0x1)
5128  
5129  #define ATH10K_VHT_MCS_NUM	10
5130  #define ATH10K_BW_NUM		6
5131  #define ATH10K_NSS_NUM		4
5132  #define ATH10K_LEGACY_NUM	12
5133  #define ATH10K_GI_NUM		2
5134  #define ATH10K_HT_MCS_NUM	32
5135  #define ATH10K_RATE_TABLE_NUM	320
5136  #define ATH10K_RATE_INFO_FLAGS_SGI_BIT	2
5137  
5138  /* Value to disable fixed rate setting */
5139  #define WMI_FIXED_RATE_NONE    (0xff)
5140  
5141  struct wmi_peer_param_map {
5142  	u32 smps_state;
5143  	u32 ampdu;
5144  	u32 authorize;
5145  	u32 chan_width;
5146  	u32 nss;
5147  	u32 use_4addr;
5148  	u32 membership;
5149  	u32 use_fixed_power;
5150  	u32 user_pos;
5151  	u32 crit_proto_hint_enabled;
5152  	u32 tx_fail_cnt_thr;
5153  	u32 set_hw_retry_cts2s;
5154  	u32 ibss_atim_win_len;
5155  	u32 debug;
5156  	u32 phymode;
5157  	u32 dummy_var;
5158  };
5159  
5160  struct wmi_vdev_param_map {
5161  	u32 rts_threshold;
5162  	u32 fragmentation_threshold;
5163  	u32 beacon_interval;
5164  	u32 listen_interval;
5165  	u32 multicast_rate;
5166  	u32 mgmt_tx_rate;
5167  	u32 slot_time;
5168  	u32 preamble;
5169  	u32 swba_time;
5170  	u32 wmi_vdev_stats_update_period;
5171  	u32 wmi_vdev_pwrsave_ageout_time;
5172  	u32 wmi_vdev_host_swba_interval;
5173  	u32 dtim_period;
5174  	u32 wmi_vdev_oc_scheduler_air_time_limit;
5175  	u32 wds;
5176  	u32 atim_window;
5177  	u32 bmiss_count_max;
5178  	u32 bmiss_first_bcnt;
5179  	u32 bmiss_final_bcnt;
5180  	u32 feature_wmm;
5181  	u32 chwidth;
5182  	u32 chextoffset;
5183  	u32 disable_htprotection;
5184  	u32 sta_quickkickout;
5185  	u32 mgmt_rate;
5186  	u32 protection_mode;
5187  	u32 fixed_rate;
5188  	u32 sgi;
5189  	u32 ldpc;
5190  	u32 tx_stbc;
5191  	u32 rx_stbc;
5192  	u32 intra_bss_fwd;
5193  	u32 def_keyid;
5194  	u32 nss;
5195  	u32 bcast_data_rate;
5196  	u32 mcast_data_rate;
5197  	u32 mcast_indicate;
5198  	u32 dhcp_indicate;
5199  	u32 unknown_dest_indicate;
5200  	u32 ap_keepalive_min_idle_inactive_time_secs;
5201  	u32 ap_keepalive_max_idle_inactive_time_secs;
5202  	u32 ap_keepalive_max_unresponsive_time_secs;
5203  	u32 ap_enable_nawds;
5204  	u32 mcast2ucast_set;
5205  	u32 enable_rtscts;
5206  	u32 txbf;
5207  	u32 packet_powersave;
5208  	u32 drop_unencry;
5209  	u32 tx_encap_type;
5210  	u32 ap_detect_out_of_sync_sleeping_sta_time_secs;
5211  	u32 rc_num_retries;
5212  	u32 cabq_maxdur;
5213  	u32 mfptest_set;
5214  	u32 rts_fixed_rate;
5215  	u32 vht_sgimask;
5216  	u32 vht80_ratemask;
5217  	u32 early_rx_adjust_enable;
5218  	u32 early_rx_tgt_bmiss_num;
5219  	u32 early_rx_bmiss_sample_cycle;
5220  	u32 early_rx_slop_step;
5221  	u32 early_rx_init_slop;
5222  	u32 early_rx_adjust_pause;
5223  	u32 proxy_sta;
5224  	u32 meru_vc;
5225  	u32 rx_decap_type;
5226  	u32 bw_nss_ratemask;
5227  	u32 inc_tsf;
5228  	u32 dec_tsf;
5229  	u32 disable_4addr_src_lrn;
5230  	u32 rtt_responder_role;
5231  };
5232  
5233  #define WMI_VDEV_PARAM_UNSUPPORTED 0
5234  
5235  /* the definition of different VDEV parameters */
5236  enum wmi_vdev_param {
5237  	/* RTS Threshold */
5238  	WMI_VDEV_PARAM_RTS_THRESHOLD = 0x1,
5239  	/* Fragmentation threshold */
5240  	WMI_VDEV_PARAM_FRAGMENTATION_THRESHOLD,
5241  	/* beacon interval in TUs */
5242  	WMI_VDEV_PARAM_BEACON_INTERVAL,
5243  	/* Listen interval in TUs */
5244  	WMI_VDEV_PARAM_LISTEN_INTERVAL,
5245  	/* multicast rate in Mbps */
5246  	WMI_VDEV_PARAM_MULTICAST_RATE,
5247  	/* management frame rate in Mbps */
5248  	WMI_VDEV_PARAM_MGMT_TX_RATE,
5249  	/* slot time (long vs short) */
5250  	WMI_VDEV_PARAM_SLOT_TIME,
5251  	/* preamble (long vs short) */
5252  	WMI_VDEV_PARAM_PREAMBLE,
5253  	/* SWBA time (time before tbtt in msec) */
5254  	WMI_VDEV_PARAM_SWBA_TIME,
5255  	/* time period for updating VDEV stats */
5256  	WMI_VDEV_STATS_UPDATE_PERIOD,
5257  	/* age out time in msec for frames queued for station in power save */
5258  	WMI_VDEV_PWRSAVE_AGEOUT_TIME,
5259  	/*
5260  	 * Host SWBA interval (time in msec before tbtt for SWBA event
5261  	 * generation).
5262  	 */
5263  	WMI_VDEV_HOST_SWBA_INTERVAL,
5264  	/* DTIM period (specified in units of num beacon intervals) */
5265  	WMI_VDEV_PARAM_DTIM_PERIOD,
5266  	/*
5267  	 * scheduler air time limit for this VDEV. used by off chan
5268  	 * scheduler.
5269  	 */
5270  	WMI_VDEV_OC_SCHEDULER_AIR_TIME_LIMIT,
5271  	/* enable/disable WDS for this VDEV  */
5272  	WMI_VDEV_PARAM_WDS,
5273  	/* ATIM Window */
5274  	WMI_VDEV_PARAM_ATIM_WINDOW,
5275  	/* BMISS max */
5276  	WMI_VDEV_PARAM_BMISS_COUNT_MAX,
5277  	/* BMISS first time */
5278  	WMI_VDEV_PARAM_BMISS_FIRST_BCNT,
5279  	/* BMISS final time */
5280  	WMI_VDEV_PARAM_BMISS_FINAL_BCNT,
5281  	/* WMM enables/disabled */
5282  	WMI_VDEV_PARAM_FEATURE_WMM,
5283  	/* Channel width */
5284  	WMI_VDEV_PARAM_CHWIDTH,
5285  	/* Channel Offset */
5286  	WMI_VDEV_PARAM_CHEXTOFFSET,
5287  	/* Disable HT Protection */
5288  	WMI_VDEV_PARAM_DISABLE_HTPROTECTION,
5289  	/* Quick STA Kickout */
5290  	WMI_VDEV_PARAM_STA_QUICKKICKOUT,
5291  	/* Rate to be used with Management frames */
5292  	WMI_VDEV_PARAM_MGMT_RATE,
5293  	/* Protection Mode */
5294  	WMI_VDEV_PARAM_PROTECTION_MODE,
5295  	/* Fixed rate setting */
5296  	WMI_VDEV_PARAM_FIXED_RATE,
5297  	/* Short GI Enable/Disable */
5298  	WMI_VDEV_PARAM_SGI,
5299  	/* Enable LDPC */
5300  	WMI_VDEV_PARAM_LDPC,
5301  	/* Enable Tx STBC */
5302  	WMI_VDEV_PARAM_TX_STBC,
5303  	/* Enable Rx STBC */
5304  	WMI_VDEV_PARAM_RX_STBC,
5305  	/* Intra BSS forwarding  */
5306  	WMI_VDEV_PARAM_INTRA_BSS_FWD,
5307  	/* Setting Default xmit key for Vdev */
5308  	WMI_VDEV_PARAM_DEF_KEYID,
5309  	/* NSS width */
5310  	WMI_VDEV_PARAM_NSS,
5311  	/* Set the custom rate for the broadcast data frames */
5312  	WMI_VDEV_PARAM_BCAST_DATA_RATE,
5313  	/* Set the custom rate (rate-code) for multicast data frames */
5314  	WMI_VDEV_PARAM_MCAST_DATA_RATE,
5315  	/* Tx multicast packet indicate Enable/Disable */
5316  	WMI_VDEV_PARAM_MCAST_INDICATE,
5317  	/* Tx DHCP packet indicate Enable/Disable */
5318  	WMI_VDEV_PARAM_DHCP_INDICATE,
5319  	/* Enable host inspection of Tx unicast packet to unknown destination */
5320  	WMI_VDEV_PARAM_UNKNOWN_DEST_INDICATE,
5321  
5322  	/* The minimum amount of time AP begins to consider STA inactive */
5323  	WMI_VDEV_PARAM_AP_KEEPALIVE_MIN_IDLE_INACTIVE_TIME_SECS,
5324  
5325  	/*
5326  	 * An associated STA is considered inactive when there is no recent
5327  	 * TX/RX activity and no downlink frames are buffered for it. Once a
5328  	 * STA exceeds the maximum idle inactive time, the AP will send an
5329  	 * 802.11 data-null as a keep alive to verify the STA is still
5330  	 * associated. If the STA does ACK the data-null, or if the data-null
5331  	 * is buffered and the STA does not retrieve it, the STA will be
5332  	 * considered unresponsive
5333  	 * (see WMI_VDEV_AP_KEEPALIVE_MAX_UNRESPONSIVE_TIME_SECS).
5334  	 */
5335  	WMI_VDEV_PARAM_AP_KEEPALIVE_MAX_IDLE_INACTIVE_TIME_SECS,
5336  
5337  	/*
5338  	 * An associated STA is considered unresponsive if there is no recent
5339  	 * TX/RX activity and downlink frames are buffered for it. Once a STA
5340  	 * exceeds the maximum unresponsive time, the AP will send a
5341  	 * WMI_STA_KICKOUT event to the host so the STA can be deleted.
5342  	 */
5343  	WMI_VDEV_PARAM_AP_KEEPALIVE_MAX_UNRESPONSIVE_TIME_SECS,
5344  
5345  	/* Enable NAWDS : MCAST INSPECT Enable, NAWDS Flag set */
5346  	WMI_VDEV_PARAM_AP_ENABLE_NAWDS,
5347  	/* Enable/Disable RTS-CTS */
5348  	WMI_VDEV_PARAM_ENABLE_RTSCTS,
5349  	/* Enable TXBFee/er */
5350  	WMI_VDEV_PARAM_TXBF,
5351  
5352  	/* Set packet power save */
5353  	WMI_VDEV_PARAM_PACKET_POWERSAVE,
5354  
5355  	/*
5356  	 * Drops un-encrypted packets if eceived in an encrypted connection
5357  	 * otherwise forwards to host.
5358  	 */
5359  	WMI_VDEV_PARAM_DROP_UNENCRY,
5360  
5361  	/*
5362  	 * Set the encapsulation type for frames.
5363  	 */
5364  	WMI_VDEV_PARAM_TX_ENCAP_TYPE,
5365  };
5366  
5367  /* the definition of different VDEV parameters */
5368  enum wmi_10x_vdev_param {
5369  	/* RTS Threshold */
5370  	WMI_10X_VDEV_PARAM_RTS_THRESHOLD = 0x1,
5371  	/* Fragmentation threshold */
5372  	WMI_10X_VDEV_PARAM_FRAGMENTATION_THRESHOLD,
5373  	/* beacon interval in TUs */
5374  	WMI_10X_VDEV_PARAM_BEACON_INTERVAL,
5375  	/* Listen interval in TUs */
5376  	WMI_10X_VDEV_PARAM_LISTEN_INTERVAL,
5377  	/* multicast rate in Mbps */
5378  	WMI_10X_VDEV_PARAM_MULTICAST_RATE,
5379  	/* management frame rate in Mbps */
5380  	WMI_10X_VDEV_PARAM_MGMT_TX_RATE,
5381  	/* slot time (long vs short) */
5382  	WMI_10X_VDEV_PARAM_SLOT_TIME,
5383  	/* preamble (long vs short) */
5384  	WMI_10X_VDEV_PARAM_PREAMBLE,
5385  	/* SWBA time (time before tbtt in msec) */
5386  	WMI_10X_VDEV_PARAM_SWBA_TIME,
5387  	/* time period for updating VDEV stats */
5388  	WMI_10X_VDEV_STATS_UPDATE_PERIOD,
5389  	/* age out time in msec for frames queued for station in power save */
5390  	WMI_10X_VDEV_PWRSAVE_AGEOUT_TIME,
5391  	/*
5392  	 * Host SWBA interval (time in msec before tbtt for SWBA event
5393  	 * generation).
5394  	 */
5395  	WMI_10X_VDEV_HOST_SWBA_INTERVAL,
5396  	/* DTIM period (specified in units of num beacon intervals) */
5397  	WMI_10X_VDEV_PARAM_DTIM_PERIOD,
5398  	/*
5399  	 * scheduler air time limit for this VDEV. used by off chan
5400  	 * scheduler.
5401  	 */
5402  	WMI_10X_VDEV_OC_SCHEDULER_AIR_TIME_LIMIT,
5403  	/* enable/disable WDS for this VDEV  */
5404  	WMI_10X_VDEV_PARAM_WDS,
5405  	/* ATIM Window */
5406  	WMI_10X_VDEV_PARAM_ATIM_WINDOW,
5407  	/* BMISS max */
5408  	WMI_10X_VDEV_PARAM_BMISS_COUNT_MAX,
5409  	/* WMM enables/disabled */
5410  	WMI_10X_VDEV_PARAM_FEATURE_WMM,
5411  	/* Channel width */
5412  	WMI_10X_VDEV_PARAM_CHWIDTH,
5413  	/* Channel Offset */
5414  	WMI_10X_VDEV_PARAM_CHEXTOFFSET,
5415  	/* Disable HT Protection */
5416  	WMI_10X_VDEV_PARAM_DISABLE_HTPROTECTION,
5417  	/* Quick STA Kickout */
5418  	WMI_10X_VDEV_PARAM_STA_QUICKKICKOUT,
5419  	/* Rate to be used with Management frames */
5420  	WMI_10X_VDEV_PARAM_MGMT_RATE,
5421  	/* Protection Mode */
5422  	WMI_10X_VDEV_PARAM_PROTECTION_MODE,
5423  	/* Fixed rate setting */
5424  	WMI_10X_VDEV_PARAM_FIXED_RATE,
5425  	/* Short GI Enable/Disable */
5426  	WMI_10X_VDEV_PARAM_SGI,
5427  	/* Enable LDPC */
5428  	WMI_10X_VDEV_PARAM_LDPC,
5429  	/* Enable Tx STBC */
5430  	WMI_10X_VDEV_PARAM_TX_STBC,
5431  	/* Enable Rx STBC */
5432  	WMI_10X_VDEV_PARAM_RX_STBC,
5433  	/* Intra BSS forwarding  */
5434  	WMI_10X_VDEV_PARAM_INTRA_BSS_FWD,
5435  	/* Setting Default xmit key for Vdev */
5436  	WMI_10X_VDEV_PARAM_DEF_KEYID,
5437  	/* NSS width */
5438  	WMI_10X_VDEV_PARAM_NSS,
5439  	/* Set the custom rate for the broadcast data frames */
5440  	WMI_10X_VDEV_PARAM_BCAST_DATA_RATE,
5441  	/* Set the custom rate (rate-code) for multicast data frames */
5442  	WMI_10X_VDEV_PARAM_MCAST_DATA_RATE,
5443  	/* Tx multicast packet indicate Enable/Disable */
5444  	WMI_10X_VDEV_PARAM_MCAST_INDICATE,
5445  	/* Tx DHCP packet indicate Enable/Disable */
5446  	WMI_10X_VDEV_PARAM_DHCP_INDICATE,
5447  	/* Enable host inspection of Tx unicast packet to unknown destination */
5448  	WMI_10X_VDEV_PARAM_UNKNOWN_DEST_INDICATE,
5449  
5450  	/* The minimum amount of time AP begins to consider STA inactive */
5451  	WMI_10X_VDEV_PARAM_AP_KEEPALIVE_MIN_IDLE_INACTIVE_TIME_SECS,
5452  
5453  	/*
5454  	 * An associated STA is considered inactive when there is no recent
5455  	 * TX/RX activity and no downlink frames are buffered for it. Once a
5456  	 * STA exceeds the maximum idle inactive time, the AP will send an
5457  	 * 802.11 data-null as a keep alive to verify the STA is still
5458  	 * associated. If the STA does ACK the data-null, or if the data-null
5459  	 * is buffered and the STA does not retrieve it, the STA will be
5460  	 * considered unresponsive
5461  	 * (see WMI_10X_VDEV_AP_KEEPALIVE_MAX_UNRESPONSIVE_TIME_SECS).
5462  	 */
5463  	WMI_10X_VDEV_PARAM_AP_KEEPALIVE_MAX_IDLE_INACTIVE_TIME_SECS,
5464  
5465  	/*
5466  	 * An associated STA is considered unresponsive if there is no recent
5467  	 * TX/RX activity and downlink frames are buffered for it. Once a STA
5468  	 * exceeds the maximum unresponsive time, the AP will send a
5469  	 * WMI_10X_STA_KICKOUT event to the host so the STA can be deleted.
5470  	 */
5471  	WMI_10X_VDEV_PARAM_AP_KEEPALIVE_MAX_UNRESPONSIVE_TIME_SECS,
5472  
5473  	/* Enable NAWDS : MCAST INSPECT Enable, NAWDS Flag set */
5474  	WMI_10X_VDEV_PARAM_AP_ENABLE_NAWDS,
5475  
5476  	WMI_10X_VDEV_PARAM_MCAST2UCAST_SET,
5477  	/* Enable/Disable RTS-CTS */
5478  	WMI_10X_VDEV_PARAM_ENABLE_RTSCTS,
5479  
5480  	WMI_10X_VDEV_PARAM_AP_DETECT_OUT_OF_SYNC_SLEEPING_STA_TIME_SECS,
5481  
5482  	/* following are available as of firmware 10.2 */
5483  	WMI_10X_VDEV_PARAM_TX_ENCAP_TYPE,
5484  	WMI_10X_VDEV_PARAM_CABQ_MAXDUR,
5485  	WMI_10X_VDEV_PARAM_MFPTEST_SET,
5486  	WMI_10X_VDEV_PARAM_RTS_FIXED_RATE,
5487  	WMI_10X_VDEV_PARAM_VHT_SGIMASK,
5488  	WMI_10X_VDEV_PARAM_VHT80_RATEMASK,
5489  	WMI_10X_VDEV_PARAM_TSF_INCREMENT,
5490  };
5491  
5492  enum wmi_10_4_vdev_param {
5493  	WMI_10_4_VDEV_PARAM_RTS_THRESHOLD = 0x1,
5494  	WMI_10_4_VDEV_PARAM_FRAGMENTATION_THRESHOLD,
5495  	WMI_10_4_VDEV_PARAM_BEACON_INTERVAL,
5496  	WMI_10_4_VDEV_PARAM_LISTEN_INTERVAL,
5497  	WMI_10_4_VDEV_PARAM_MULTICAST_RATE,
5498  	WMI_10_4_VDEV_PARAM_MGMT_TX_RATE,
5499  	WMI_10_4_VDEV_PARAM_SLOT_TIME,
5500  	WMI_10_4_VDEV_PARAM_PREAMBLE,
5501  	WMI_10_4_VDEV_PARAM_SWBA_TIME,
5502  	WMI_10_4_VDEV_STATS_UPDATE_PERIOD,
5503  	WMI_10_4_VDEV_PWRSAVE_AGEOUT_TIME,
5504  	WMI_10_4_VDEV_HOST_SWBA_INTERVAL,
5505  	WMI_10_4_VDEV_PARAM_DTIM_PERIOD,
5506  	WMI_10_4_VDEV_OC_SCHEDULER_AIR_TIME_LIMIT,
5507  	WMI_10_4_VDEV_PARAM_WDS,
5508  	WMI_10_4_VDEV_PARAM_ATIM_WINDOW,
5509  	WMI_10_4_VDEV_PARAM_BMISS_COUNT_MAX,
5510  	WMI_10_4_VDEV_PARAM_BMISS_FIRST_BCNT,
5511  	WMI_10_4_VDEV_PARAM_BMISS_FINAL_BCNT,
5512  	WMI_10_4_VDEV_PARAM_FEATURE_WMM,
5513  	WMI_10_4_VDEV_PARAM_CHWIDTH,
5514  	WMI_10_4_VDEV_PARAM_CHEXTOFFSET,
5515  	WMI_10_4_VDEV_PARAM_DISABLE_HTPROTECTION,
5516  	WMI_10_4_VDEV_PARAM_STA_QUICKKICKOUT,
5517  	WMI_10_4_VDEV_PARAM_MGMT_RATE,
5518  	WMI_10_4_VDEV_PARAM_PROTECTION_MODE,
5519  	WMI_10_4_VDEV_PARAM_FIXED_RATE,
5520  	WMI_10_4_VDEV_PARAM_SGI,
5521  	WMI_10_4_VDEV_PARAM_LDPC,
5522  	WMI_10_4_VDEV_PARAM_TX_STBC,
5523  	WMI_10_4_VDEV_PARAM_RX_STBC,
5524  	WMI_10_4_VDEV_PARAM_INTRA_BSS_FWD,
5525  	WMI_10_4_VDEV_PARAM_DEF_KEYID,
5526  	WMI_10_4_VDEV_PARAM_NSS,
5527  	WMI_10_4_VDEV_PARAM_BCAST_DATA_RATE,
5528  	WMI_10_4_VDEV_PARAM_MCAST_DATA_RATE,
5529  	WMI_10_4_VDEV_PARAM_MCAST_INDICATE,
5530  	WMI_10_4_VDEV_PARAM_DHCP_INDICATE,
5531  	WMI_10_4_VDEV_PARAM_UNKNOWN_DEST_INDICATE,
5532  	WMI_10_4_VDEV_PARAM_AP_KEEPALIVE_MIN_IDLE_INACTIVE_TIME_SECS,
5533  	WMI_10_4_VDEV_PARAM_AP_KEEPALIVE_MAX_IDLE_INACTIVE_TIME_SECS,
5534  	WMI_10_4_VDEV_PARAM_AP_KEEPALIVE_MAX_UNRESPONSIVE_TIME_SECS,
5535  	WMI_10_4_VDEV_PARAM_AP_ENABLE_NAWDS,
5536  	WMI_10_4_VDEV_PARAM_MCAST2UCAST_SET,
5537  	WMI_10_4_VDEV_PARAM_ENABLE_RTSCTS,
5538  	WMI_10_4_VDEV_PARAM_RC_NUM_RETRIES,
5539  	WMI_10_4_VDEV_PARAM_TXBF,
5540  	WMI_10_4_VDEV_PARAM_PACKET_POWERSAVE,
5541  	WMI_10_4_VDEV_PARAM_DROP_UNENCRY,
5542  	WMI_10_4_VDEV_PARAM_TX_ENCAP_TYPE,
5543  	WMI_10_4_VDEV_PARAM_AP_DETECT_OUT_OF_SYNC_SLEEPING_STA_TIME_SECS,
5544  	WMI_10_4_VDEV_PARAM_CABQ_MAXDUR,
5545  	WMI_10_4_VDEV_PARAM_MFPTEST_SET,
5546  	WMI_10_4_VDEV_PARAM_RTS_FIXED_RATE,
5547  	WMI_10_4_VDEV_PARAM_VHT_SGIMASK,
5548  	WMI_10_4_VDEV_PARAM_VHT80_RATEMASK,
5549  	WMI_10_4_VDEV_PARAM_EARLY_RX_ADJUST_ENABLE,
5550  	WMI_10_4_VDEV_PARAM_EARLY_RX_TGT_BMISS_NUM,
5551  	WMI_10_4_VDEV_PARAM_EARLY_RX_BMISS_SAMPLE_CYCLE,
5552  	WMI_10_4_VDEV_PARAM_EARLY_RX_SLOP_STEP,
5553  	WMI_10_4_VDEV_PARAM_EARLY_RX_INIT_SLOP,
5554  	WMI_10_4_VDEV_PARAM_EARLY_RX_ADJUST_PAUSE,
5555  	WMI_10_4_VDEV_PARAM_PROXY_STA,
5556  	WMI_10_4_VDEV_PARAM_MERU_VC,
5557  	WMI_10_4_VDEV_PARAM_RX_DECAP_TYPE,
5558  	WMI_10_4_VDEV_PARAM_BW_NSS_RATEMASK,
5559  	WMI_10_4_VDEV_PARAM_SENSOR_AP,
5560  	WMI_10_4_VDEV_PARAM_BEACON_RATE,
5561  	WMI_10_4_VDEV_PARAM_DTIM_ENABLE_CTS,
5562  	WMI_10_4_VDEV_PARAM_STA_KICKOUT,
5563  	WMI_10_4_VDEV_PARAM_CAPABILITIES,
5564  	WMI_10_4_VDEV_PARAM_TSF_INCREMENT,
5565  	WMI_10_4_VDEV_PARAM_RX_FILTER,
5566  	WMI_10_4_VDEV_PARAM_MGMT_TX_POWER,
5567  	WMI_10_4_VDEV_PARAM_ATF_SSID_SCHED_POLICY,
5568  	WMI_10_4_VDEV_PARAM_DISABLE_DYN_BW_RTS,
5569  	WMI_10_4_VDEV_PARAM_TSF_DECREMENT,
5570  	WMI_10_4_VDEV_PARAM_SELFGEN_FIXED_RATE,
5571  	WMI_10_4_VDEV_PARAM_AMPDU_SUBFRAME_SIZE_PER_AC,
5572  	WMI_10_4_VDEV_PARAM_NSS_VHT160,
5573  	WMI_10_4_VDEV_PARAM_NSS_VHT80_80,
5574  	WMI_10_4_VDEV_PARAM_AMSDU_SUBFRAME_SIZE_PER_AC,
5575  	WMI_10_4_VDEV_PARAM_DISABLE_CABQ,
5576  	WMI_10_4_VDEV_PARAM_SIFS_TRIGGER_RATE,
5577  	WMI_10_4_VDEV_PARAM_TX_POWER,
5578  	WMI_10_4_VDEV_PARAM_ENABLE_DISABLE_RTT_RESPONDER_ROLE,
5579  	WMI_10_4_VDEV_PARAM_DISABLE_4_ADDR_SRC_LRN,
5580  };
5581  
5582  #define WMI_VDEV_DISABLE_4_ADDR_SRC_LRN 1
5583  
5584  #define WMI_VDEV_PARAM_TXBF_SU_TX_BFEE BIT(0)
5585  #define WMI_VDEV_PARAM_TXBF_MU_TX_BFEE BIT(1)
5586  #define WMI_VDEV_PARAM_TXBF_SU_TX_BFER BIT(2)
5587  #define WMI_VDEV_PARAM_TXBF_MU_TX_BFER BIT(3)
5588  
5589  #define WMI_TXBF_STS_CAP_OFFSET_LSB	4
5590  #define WMI_TXBF_STS_CAP_OFFSET_MASK	0x70
5591  #define WMI_TXBF_CONF_IMPLICIT_BF       BIT(7)
5592  #define WMI_BF_SOUND_DIM_OFFSET_LSB	8
5593  #define WMI_BF_SOUND_DIM_OFFSET_MASK	0xf00
5594  
5595  /* slot time long */
5596  #define WMI_VDEV_SLOT_TIME_LONG		0x1
5597  /* slot time short */
5598  #define WMI_VDEV_SLOT_TIME_SHORT	0x2
5599  /* preablbe long */
5600  #define WMI_VDEV_PREAMBLE_LONG		0x1
5601  /* preablbe short */
5602  #define WMI_VDEV_PREAMBLE_SHORT		0x2
5603  
5604  enum wmi_start_event_param {
5605  	WMI_VDEV_RESP_START_EVENT = 0,
5606  	WMI_VDEV_RESP_RESTART_EVENT,
5607  };
5608  
5609  struct wmi_vdev_start_response_event {
5610  	__le32 vdev_id;
5611  	__le32 req_id;
5612  	__le32 resp_type; /* %WMI_VDEV_RESP_ */
5613  	__le32 status;
5614  } __packed;
5615  
5616  struct wmi_vdev_standby_req_event {
5617  	/* unique id identifying the VDEV, generated by the caller */
5618  	__le32 vdev_id;
5619  } __packed;
5620  
5621  struct wmi_vdev_resume_req_event {
5622  	/* unique id identifying the VDEV, generated by the caller */
5623  	__le32 vdev_id;
5624  } __packed;
5625  
5626  struct wmi_vdev_stopped_event {
5627  	/* unique id identifying the VDEV, generated by the caller */
5628  	__le32 vdev_id;
5629  } __packed;
5630  
5631  /*
5632   * common structure used for simple events
5633   * (stopped, resume_req, standby response)
5634   */
5635  struct wmi_vdev_simple_event {
5636  	/* unique id identifying the VDEV, generated by the caller */
5637  	__le32 vdev_id;
5638  } __packed;
5639  
5640  /* VDEV start response status codes */
5641  /* VDEV successfully started */
5642  #define WMI_INIFIED_VDEV_START_RESPONSE_STATUS_SUCCESS	0x0
5643  
5644  /* requested VDEV not found */
5645  #define WMI_INIFIED_VDEV_START_RESPONSE_INVALID_VDEVID	0x1
5646  
5647  /* unsupported VDEV combination */
5648  #define WMI_INIFIED_VDEV_START_RESPONSE_NOT_SUPPORTED	0x2
5649  
5650  /* TODO: please add more comments if you have in-depth information */
5651  struct wmi_vdev_spectral_conf_cmd {
5652  	__le32 vdev_id;
5653  
5654  	/* number of fft samples to send (0 for infinite) */
5655  	__le32 scan_count;
5656  	__le32 scan_period;
5657  	__le32 scan_priority;
5658  
5659  	/* number of bins in the FFT: 2^(fft_size - bin_scale) */
5660  	__le32 scan_fft_size;
5661  	__le32 scan_gc_ena;
5662  	__le32 scan_restart_ena;
5663  	__le32 scan_noise_floor_ref;
5664  	__le32 scan_init_delay;
5665  	__le32 scan_nb_tone_thr;
5666  	__le32 scan_str_bin_thr;
5667  	__le32 scan_wb_rpt_mode;
5668  	__le32 scan_rssi_rpt_mode;
5669  	__le32 scan_rssi_thr;
5670  	__le32 scan_pwr_format;
5671  
5672  	/* rpt_mode: Format of FFT report to software for spectral scan
5673  	 * triggered FFTs:
5674  	 *	0: No FFT report (only spectral scan summary report)
5675  	 *	1: 2-dword summary of metrics for each completed FFT + spectral
5676  	 *	   scan	summary report
5677  	 *	2: 2-dword summary of metrics for each completed FFT +
5678  	 *	   1x- oversampled bins(in-band) per FFT + spectral scan summary
5679  	 *	   report
5680  	 *	3: 2-dword summary of metrics for each completed FFT +
5681  	 *	   2x- oversampled bins	(all) per FFT + spectral scan summary
5682  	 */
5683  	__le32 scan_rpt_mode;
5684  	__le32 scan_bin_scale;
5685  	__le32 scan_dbm_adj;
5686  	__le32 scan_chn_mask;
5687  } __packed;
5688  
5689  struct wmi_vdev_spectral_conf_arg {
5690  	u32 vdev_id;
5691  	u32 scan_count;
5692  	u32 scan_period;
5693  	u32 scan_priority;
5694  	u32 scan_fft_size;
5695  	u32 scan_gc_ena;
5696  	u32 scan_restart_ena;
5697  	u32 scan_noise_floor_ref;
5698  	u32 scan_init_delay;
5699  	u32 scan_nb_tone_thr;
5700  	u32 scan_str_bin_thr;
5701  	u32 scan_wb_rpt_mode;
5702  	u32 scan_rssi_rpt_mode;
5703  	u32 scan_rssi_thr;
5704  	u32 scan_pwr_format;
5705  	u32 scan_rpt_mode;
5706  	u32 scan_bin_scale;
5707  	u32 scan_dbm_adj;
5708  	u32 scan_chn_mask;
5709  };
5710  
5711  #define WMI_SPECTRAL_ENABLE_DEFAULT              0
5712  #define WMI_SPECTRAL_COUNT_DEFAULT               0
5713  #define WMI_SPECTRAL_PERIOD_DEFAULT             35
5714  #define WMI_SPECTRAL_PRIORITY_DEFAULT            1
5715  #define WMI_SPECTRAL_FFT_SIZE_DEFAULT            7
5716  #define WMI_SPECTRAL_GC_ENA_DEFAULT              1
5717  #define WMI_SPECTRAL_RESTART_ENA_DEFAULT         0
5718  #define WMI_SPECTRAL_NOISE_FLOOR_REF_DEFAULT   -96
5719  #define WMI_SPECTRAL_INIT_DELAY_DEFAULT         80
5720  #define WMI_SPECTRAL_NB_TONE_THR_DEFAULT        12
5721  #define WMI_SPECTRAL_STR_BIN_THR_DEFAULT         8
5722  #define WMI_SPECTRAL_WB_RPT_MODE_DEFAULT         0
5723  #define WMI_SPECTRAL_RSSI_RPT_MODE_DEFAULT       0
5724  #define WMI_SPECTRAL_RSSI_THR_DEFAULT         0xf0
5725  #define WMI_SPECTRAL_PWR_FORMAT_DEFAULT          0
5726  #define WMI_SPECTRAL_RPT_MODE_DEFAULT            2
5727  #define WMI_SPECTRAL_BIN_SCALE_DEFAULT           1
5728  #define WMI_SPECTRAL_DBM_ADJ_DEFAULT             1
5729  #define WMI_SPECTRAL_CHN_MASK_DEFAULT            1
5730  
5731  struct wmi_vdev_spectral_enable_cmd {
5732  	__le32 vdev_id;
5733  	__le32 trigger_cmd;
5734  	__le32 enable_cmd;
5735  } __packed;
5736  
5737  #define WMI_SPECTRAL_TRIGGER_CMD_TRIGGER  1
5738  #define WMI_SPECTRAL_TRIGGER_CMD_CLEAR    2
5739  #define WMI_SPECTRAL_ENABLE_CMD_ENABLE    1
5740  #define WMI_SPECTRAL_ENABLE_CMD_DISABLE   2
5741  
5742  /* Beacon processing related command and event structures */
5743  struct wmi_bcn_tx_hdr {
5744  	__le32 vdev_id;
5745  	__le32 tx_rate;
5746  	__le32 tx_power;
5747  	__le32 bcn_len;
5748  } __packed;
5749  
5750  struct wmi_bcn_tx_cmd {
5751  	struct wmi_bcn_tx_hdr hdr;
5752  	u8 *bcn[];
5753  } __packed;
5754  
5755  struct wmi_bcn_tx_arg {
5756  	u32 vdev_id;
5757  	u32 tx_rate;
5758  	u32 tx_power;
5759  	u32 bcn_len;
5760  	const void *bcn;
5761  };
5762  
5763  enum wmi_bcn_tx_ref_flags {
5764  	WMI_BCN_TX_REF_FLAG_DTIM_ZERO = 0x1,
5765  	WMI_BCN_TX_REF_FLAG_DELIVER_CAB = 0x2,
5766  };
5767  
5768  /* TODO: It is unclear why "no antenna" works while any other seemingly valid
5769   * chainmask yields no beacons on the air at all.
5770   */
5771  #define WMI_BCN_TX_REF_DEF_ANTENNA 0
5772  
5773  struct wmi_bcn_tx_ref_cmd {
5774  	__le32 vdev_id;
5775  	__le32 data_len;
5776  	/* physical address of the frame - dma pointer */
5777  	__le32 data_ptr;
5778  	/* id for host to track */
5779  	__le32 msdu_id;
5780  	/* frame ctrl to setup PPDU desc */
5781  	__le32 frame_control;
5782  	/* to control CABQ traffic: WMI_BCN_TX_REF_FLAG_ */
5783  	__le32 flags;
5784  	/* introduced in 10.2 */
5785  	__le32 antenna_mask;
5786  } __packed;
5787  
5788  /* Beacon filter */
5789  #define WMI_BCN_FILTER_ALL   0 /* Filter all beacons */
5790  #define WMI_BCN_FILTER_NONE  1 /* Pass all beacons */
5791  #define WMI_BCN_FILTER_RSSI  2 /* Pass Beacons RSSI >= RSSI threshold */
5792  #define WMI_BCN_FILTER_BSSID 3 /* Pass Beacons with matching BSSID */
5793  #define WMI_BCN_FILTER_SSID  4 /* Pass Beacons with matching SSID */
5794  
5795  struct wmi_bcn_filter_rx_cmd {
5796  	/* Filter ID */
5797  	__le32 bcn_filter_id;
5798  	/* Filter type - wmi_bcn_filter */
5799  	__le32 bcn_filter;
5800  	/* Buffer len */
5801  	__le32 bcn_filter_len;
5802  	/* Filter info (threshold, BSSID, RSSI) */
5803  	u8 *bcn_filter_buf;
5804  } __packed;
5805  
5806  /* Capabilities and IEs to be passed to firmware */
5807  struct wmi_bcn_prb_info {
5808  	/* Capabilities */
5809  	__le32 caps;
5810  	/* ERP info */
5811  	__le32 erp;
5812  	/* Advanced capabilities */
5813  	/* HT capabilities */
5814  	/* HT Info */
5815  	/* ibss_dfs */
5816  	/* wpa Info */
5817  	/* rsn Info */
5818  	/* rrm info */
5819  	/* ath_ext */
5820  	/* app IE */
5821  } __packed;
5822  
5823  enum wmi_sta_ps_mode {
5824  	/* enable power save for the given STA VDEV */
5825  	WMI_STA_PS_MODE_DISABLED = 0,
5826  	/* disable power save  for a given STA VDEV */
5827  	WMI_STA_PS_MODE_ENABLED = 1,
5828  };
5829  
5830  struct wmi_sta_powersave_mode_cmd {
5831  	/* unique id identifying the VDEV, generated by the caller */
5832  	__le32 vdev_id;
5833  
5834  	/*
5835  	 * Power save mode
5836  	 * (see enum wmi_sta_ps_mode)
5837  	 */
5838  	__le32 sta_ps_mode;
5839  } __packed;
5840  
5841  enum wmi_csa_offload_en {
5842  	WMI_CSA_OFFLOAD_DISABLE = 0,
5843  	WMI_CSA_OFFLOAD_ENABLE = 1,
5844  };
5845  
5846  struct wmi_csa_offload_enable_cmd {
5847  	__le32 vdev_id;
5848  	__le32 csa_offload_enable;
5849  } __packed;
5850  
5851  struct wmi_csa_offload_chanswitch_cmd {
5852  	__le32 vdev_id;
5853  	struct wmi_channel chan;
5854  } __packed;
5855  
5856  /*
5857   * This parameter controls the policy for retrieving frames from AP while the
5858   * STA is in sleep state.
5859   *
5860   * Only takes affect if the sta_ps_mode is enabled
5861   */
5862  enum wmi_sta_ps_param_rx_wake_policy {
5863  	/*
5864  	 * Wake up when ever there is an  RX activity on the VDEV. In this mode
5865  	 * the Power save SM(state machine) will come out of sleep by either
5866  	 * sending null frame (or) a data frame (with PS==0) in response to TIM
5867  	 * bit set in the received beacon frame from AP.
5868  	 */
5869  	WMI_STA_PS_RX_WAKE_POLICY_WAKE = 0,
5870  
5871  	/*
5872  	 * Here the power save state machine will not wakeup in response to TIM
5873  	 * bit, instead it will send a PSPOLL (or) UASPD trigger based on UAPSD
5874  	 * configuration setup by WMISET_PS_SET_UAPSD  WMI command.  When all
5875  	 * access categories are delivery-enabled, the station will send a
5876  	 * UAPSD trigger frame, otherwise it will send a PS-Poll.
5877  	 */
5878  	WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD = 1,
5879  };
5880  
5881  /*
5882   * Number of tx frames/beacon  that cause the power save SM to wake up.
5883   *
5884   * Value 1 causes the SM to wake up for every TX. Value 0 has a special
5885   * meaning, It will cause the SM to never wake up. This is useful if you want
5886   * to keep the system to sleep all the time for some kind of test mode . host
5887   * can change this parameter any time.  It will affect at the next tx frame.
5888   */
5889  enum wmi_sta_ps_param_tx_wake_threshold {
5890  	WMI_STA_PS_TX_WAKE_THRESHOLD_NEVER = 0,
5891  	WMI_STA_PS_TX_WAKE_THRESHOLD_ALWAYS = 1,
5892  
5893  	/*
5894  	 * Values greater than one indicate that many TX attempts per beacon
5895  	 * interval before the STA will wake up
5896  	 */
5897  };
5898  
5899  /*
5900   * The maximum number of PS-Poll frames the FW will send in response to
5901   * traffic advertised in TIM before waking up (by sending a null frame with PS
5902   * = 0). Value 0 has a special meaning: there is no maximum count and the FW
5903   * will send as many PS-Poll as are necessary to retrieve buffered BU. This
5904   * parameter is used when the RX wake policy is
5905   * WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD and ignored when the RX wake
5906   * policy is WMI_STA_PS_RX_WAKE_POLICY_WAKE.
5907   */
5908  enum wmi_sta_ps_param_pspoll_count {
5909  	WMI_STA_PS_PSPOLL_COUNT_NO_MAX = 0,
5910  	/*
5911  	 * Values greater than 0 indicate the maximum number of PS-Poll frames
5912  	 * FW will send before waking up.
5913  	 */
5914  
5915  	/* When u-APSD is enabled the firmware will be very reluctant to exit
5916  	 * STA PS. This could result in very poor Rx performance with STA doing
5917  	 * PS-Poll for each and every buffered frame. This value is a bit
5918  	 * arbitrary.
5919  	 */
5920  	WMI_STA_PS_PSPOLL_COUNT_UAPSD = 3,
5921  };
5922  
5923  /*
5924   * This will include the delivery and trigger enabled state for every AC.
5925   * This is the negotiated state with AP. The host MLME needs to set this based
5926   * on AP capability and the state Set in the association request by the
5927   * station MLME.Lower 8 bits of the value specify the UAPSD configuration.
5928   */
5929  #define WMI_UAPSD_AC_TYPE_DELI 0
5930  #define WMI_UAPSD_AC_TYPE_TRIG 1
5931  
5932  #define WMI_UAPSD_AC_BIT_MASK(ac, type) \
5933  	(type == WMI_UAPSD_AC_TYPE_DELI ? 1 << (ac << 1) : 1 << ((ac << 1) + 1))
5934  
5935  enum wmi_sta_ps_param_uapsd {
5936  	WMI_STA_PS_UAPSD_AC0_DELIVERY_EN = (1 << 0),
5937  	WMI_STA_PS_UAPSD_AC0_TRIGGER_EN  = (1 << 1),
5938  	WMI_STA_PS_UAPSD_AC1_DELIVERY_EN = (1 << 2),
5939  	WMI_STA_PS_UAPSD_AC1_TRIGGER_EN  = (1 << 3),
5940  	WMI_STA_PS_UAPSD_AC2_DELIVERY_EN = (1 << 4),
5941  	WMI_STA_PS_UAPSD_AC2_TRIGGER_EN  = (1 << 5),
5942  	WMI_STA_PS_UAPSD_AC3_DELIVERY_EN = (1 << 6),
5943  	WMI_STA_PS_UAPSD_AC3_TRIGGER_EN  = (1 << 7),
5944  };
5945  
5946  #define WMI_STA_UAPSD_MAX_INTERVAL_MSEC UINT_MAX
5947  
5948  struct wmi_sta_uapsd_auto_trig_param {
5949  	__le32 wmm_ac;
5950  	__le32 user_priority;
5951  	__le32 service_interval;
5952  	__le32 suspend_interval;
5953  	__le32 delay_interval;
5954  };
5955  
5956  struct wmi_sta_uapsd_auto_trig_cmd_fixed_param {
5957  	__le32 vdev_id;
5958  	struct wmi_mac_addr peer_macaddr;
5959  	__le32 num_ac;
5960  };
5961  
5962  struct wmi_sta_uapsd_auto_trig_arg {
5963  	u32 wmm_ac;
5964  	u32 user_priority;
5965  	u32 service_interval;
5966  	u32 suspend_interval;
5967  	u32 delay_interval;
5968  };
5969  
5970  enum wmi_sta_powersave_param {
5971  	/*
5972  	 * Controls how frames are retrievd from AP while STA is sleeping
5973  	 *
5974  	 * (see enum wmi_sta_ps_param_rx_wake_policy)
5975  	 */
5976  	WMI_STA_PS_PARAM_RX_WAKE_POLICY = 0,
5977  
5978  	/*
5979  	 * The STA will go active after this many TX
5980  	 *
5981  	 * (see enum wmi_sta_ps_param_tx_wake_threshold)
5982  	 */
5983  	WMI_STA_PS_PARAM_TX_WAKE_THRESHOLD = 1,
5984  
5985  	/*
5986  	 * Number of PS-Poll to send before STA wakes up
5987  	 *
5988  	 * (see enum wmi_sta_ps_param_pspoll_count)
5989  	 *
5990  	 */
5991  	WMI_STA_PS_PARAM_PSPOLL_COUNT = 2,
5992  
5993  	/*
5994  	 * TX/RX inactivity time in msec before going to sleep.
5995  	 *
5996  	 * The power save SM will monitor tx/rx activity on the VDEV, if no
5997  	 * activity for the specified msec of the parameter the Power save
5998  	 * SM will go to sleep.
5999  	 */
6000  	WMI_STA_PS_PARAM_INACTIVITY_TIME = 3,
6001  
6002  	/*
6003  	 * Set uapsd configuration.
6004  	 *
6005  	 * (see enum wmi_sta_ps_param_uapsd)
6006  	 */
6007  	WMI_STA_PS_PARAM_UAPSD = 4,
6008  };
6009  
6010  struct wmi_sta_powersave_param_cmd {
6011  	__le32 vdev_id;
6012  	__le32 param_id; /* %WMI_STA_PS_PARAM_ */
6013  	__le32 param_value;
6014  } __packed;
6015  
6016  /* No MIMO power save */
6017  #define WMI_STA_MIMO_PS_MODE_DISABLE
6018  /* mimo powersave mode static*/
6019  #define WMI_STA_MIMO_PS_MODE_STATIC
6020  /* mimo powersave mode dynamic */
6021  #define WMI_STA_MIMO_PS_MODE_DYNAMIC
6022  
6023  struct wmi_sta_mimo_ps_mode_cmd {
6024  	/* unique id identifying the VDEV, generated by the caller */
6025  	__le32 vdev_id;
6026  	/* mimo powersave mode as defined above */
6027  	__le32 mimo_pwrsave_mode;
6028  } __packed;
6029  
6030  /* U-APSD configuration of peer station from (re)assoc request and TSPECs */
6031  enum wmi_ap_ps_param_uapsd {
6032  	WMI_AP_PS_UAPSD_AC0_DELIVERY_EN = (1 << 0),
6033  	WMI_AP_PS_UAPSD_AC0_TRIGGER_EN  = (1 << 1),
6034  	WMI_AP_PS_UAPSD_AC1_DELIVERY_EN = (1 << 2),
6035  	WMI_AP_PS_UAPSD_AC1_TRIGGER_EN  = (1 << 3),
6036  	WMI_AP_PS_UAPSD_AC2_DELIVERY_EN = (1 << 4),
6037  	WMI_AP_PS_UAPSD_AC2_TRIGGER_EN  = (1 << 5),
6038  	WMI_AP_PS_UAPSD_AC3_DELIVERY_EN = (1 << 6),
6039  	WMI_AP_PS_UAPSD_AC3_TRIGGER_EN  = (1 << 7),
6040  };
6041  
6042  /* U-APSD maximum service period of peer station */
6043  enum wmi_ap_ps_peer_param_max_sp {
6044  	WMI_AP_PS_PEER_PARAM_MAX_SP_UNLIMITED = 0,
6045  	WMI_AP_PS_PEER_PARAM_MAX_SP_2 = 1,
6046  	WMI_AP_PS_PEER_PARAM_MAX_SP_4 = 2,
6047  	WMI_AP_PS_PEER_PARAM_MAX_SP_6 = 3,
6048  	MAX_WMI_AP_PS_PEER_PARAM_MAX_SP,
6049  };
6050  
6051  /*
6052   * AP power save parameter
6053   * Set a power save specific parameter for a peer station
6054   */
6055  enum wmi_ap_ps_peer_param {
6056  	/* Set uapsd configuration for a given peer.
6057  	 *
6058  	 * Include the delivery and trigger enabled state for every AC.
6059  	 * The host  MLME needs to set this based on AP capability and stations
6060  	 * request Set in the association request  received from the station.
6061  	 *
6062  	 * Lower 8 bits of the value specify the UAPSD configuration.
6063  	 *
6064  	 * (see enum wmi_ap_ps_param_uapsd)
6065  	 * The default value is 0.
6066  	 */
6067  	WMI_AP_PS_PEER_PARAM_UAPSD = 0,
6068  
6069  	/*
6070  	 * Set the service period for a UAPSD capable station
6071  	 *
6072  	 * The service period from wme ie in the (re)assoc request frame.
6073  	 *
6074  	 * (see enum wmi_ap_ps_peer_param_max_sp)
6075  	 */
6076  	WMI_AP_PS_PEER_PARAM_MAX_SP = 1,
6077  
6078  	/* Time in seconds for aging out buffered frames for STA in PS */
6079  	WMI_AP_PS_PEER_PARAM_AGEOUT_TIME = 2,
6080  };
6081  
6082  struct wmi_ap_ps_peer_cmd {
6083  	/* unique id identifying the VDEV, generated by the caller */
6084  	__le32 vdev_id;
6085  
6086  	/* peer MAC address */
6087  	struct wmi_mac_addr peer_macaddr;
6088  
6089  	/* AP powersave param (see enum wmi_ap_ps_peer_param) */
6090  	__le32 param_id;
6091  
6092  	/* AP powersave param value */
6093  	__le32 param_value;
6094  } __packed;
6095  
6096  /* 128 clients = 4 words */
6097  #define WMI_TIM_BITMAP_ARRAY_SIZE 4
6098  
6099  struct wmi_tim_info {
6100  	__le32 tim_len;
6101  	__le32 tim_mcast;
6102  	__le32 tim_bitmap[WMI_TIM_BITMAP_ARRAY_SIZE];
6103  	__le32 tim_changed;
6104  	__le32 tim_num_ps_pending;
6105  } __packed;
6106  
6107  struct wmi_tim_info_arg {
6108  	__le32 tim_len;
6109  	__le32 tim_mcast;
6110  	const __le32 *tim_bitmap;
6111  	__le32 tim_changed;
6112  	__le32 tim_num_ps_pending;
6113  } __packed;
6114  
6115  /* Maximum number of NOA Descriptors supported */
6116  #define WMI_P2P_MAX_NOA_DESCRIPTORS 4
6117  #define WMI_P2P_OPPPS_ENABLE_BIT	BIT(0)
6118  #define WMI_P2P_OPPPS_CTWINDOW_OFFSET	1
6119  #define WMI_P2P_NOA_CHANGED_BIT	BIT(0)
6120  
6121  struct wmi_p2p_noa_info {
6122  	/* Bit 0 - Flag to indicate an update in NOA schedule
6123  	 * Bits 7-1 - Reserved
6124  	 */
6125  	u8 changed;
6126  	/* NOA index */
6127  	u8 index;
6128  	/* Bit 0 - Opp PS state of the AP
6129  	 * Bits 1-7 - Ctwindow in TUs
6130  	 */
6131  	u8 ctwindow_oppps;
6132  	/* Number of NOA descriptors */
6133  	u8 num_descriptors;
6134  
6135  	struct wmi_p2p_noa_descriptor descriptors[WMI_P2P_MAX_NOA_DESCRIPTORS];
6136  } __packed;
6137  
6138  struct wmi_bcn_info {
6139  	struct wmi_tim_info tim_info;
6140  	struct wmi_p2p_noa_info p2p_noa_info;
6141  } __packed;
6142  
6143  struct wmi_host_swba_event {
6144  	__le32 vdev_map;
6145  	struct wmi_bcn_info bcn_info[];
6146  } __packed;
6147  
6148  struct wmi_10_2_4_bcn_info {
6149  	struct wmi_tim_info tim_info;
6150  	/* The 10.2.4 FW doesn't have p2p NOA info */
6151  } __packed;
6152  
6153  struct wmi_10_2_4_host_swba_event {
6154  	__le32 vdev_map;
6155  	struct wmi_10_2_4_bcn_info bcn_info[];
6156  } __packed;
6157  
6158  /* 16 words = 512 client + 1 word = for guard */
6159  #define WMI_10_4_TIM_BITMAP_ARRAY_SIZE 17
6160  
6161  struct wmi_10_4_tim_info {
6162  	__le32 tim_len;
6163  	__le32 tim_mcast;
6164  	__le32 tim_bitmap[WMI_10_4_TIM_BITMAP_ARRAY_SIZE];
6165  	__le32 tim_changed;
6166  	__le32 tim_num_ps_pending;
6167  } __packed;
6168  
6169  #define WMI_10_4_P2P_MAX_NOA_DESCRIPTORS 1
6170  
6171  struct wmi_10_4_p2p_noa_info {
6172  	/* Bit 0 - Flag to indicate an update in NOA schedule
6173  	 * Bits 7-1 - Reserved
6174  	 */
6175  	u8 changed;
6176  	/* NOA index */
6177  	u8 index;
6178  	/* Bit 0 - Opp PS state of the AP
6179  	 * Bits 1-7 - Ctwindow in TUs
6180  	 */
6181  	u8 ctwindow_oppps;
6182  	/* Number of NOA descriptors */
6183  	u8 num_descriptors;
6184  
6185  	struct wmi_p2p_noa_descriptor
6186  		noa_descriptors[WMI_10_4_P2P_MAX_NOA_DESCRIPTORS];
6187  } __packed;
6188  
6189  struct wmi_10_4_bcn_info {
6190  	struct wmi_10_4_tim_info tim_info;
6191  	struct wmi_10_4_p2p_noa_info p2p_noa_info;
6192  } __packed;
6193  
6194  struct wmi_10_4_host_swba_event {
6195  	__le32 vdev_map;
6196  	struct wmi_10_4_bcn_info bcn_info[];
6197  } __packed;
6198  
6199  #define WMI_MAX_AP_VDEV 16
6200  
6201  struct wmi_tbtt_offset_event {
6202  	__le32 vdev_map;
6203  	__le32 tbttoffset_list[WMI_MAX_AP_VDEV];
6204  } __packed;
6205  
6206  struct wmi_peer_create_cmd {
6207  	__le32 vdev_id;
6208  	struct wmi_mac_addr peer_macaddr;
6209  	__le32 peer_type;
6210  } __packed;
6211  
6212  enum wmi_peer_type {
6213  	WMI_PEER_TYPE_DEFAULT = 0,
6214  	WMI_PEER_TYPE_BSS = 1,
6215  	WMI_PEER_TYPE_TDLS = 2,
6216  };
6217  
6218  struct wmi_peer_delete_cmd {
6219  	__le32 vdev_id;
6220  	struct wmi_mac_addr peer_macaddr;
6221  } __packed;
6222  
6223  struct wmi_peer_flush_tids_cmd {
6224  	__le32 vdev_id;
6225  	struct wmi_mac_addr peer_macaddr;
6226  	__le32 peer_tid_bitmap;
6227  } __packed;
6228  
6229  struct wmi_fixed_rate {
6230  	/*
6231  	 * rate mode . 0: disable fixed rate (auto rate)
6232  	 *   1: legacy (non 11n) rate  specified as ieee rate 2*Mbps
6233  	 *   2: ht20 11n rate  specified as mcs index
6234  	 *   3: ht40 11n rate  specified as mcs index
6235  	 */
6236  	__le32  rate_mode;
6237  	/*
6238  	 * 4 rate values for 4 rate series. series 0 is stored in byte 0 (LSB)
6239  	 * and series 3 is stored at byte 3 (MSB)
6240  	 */
6241  	__le32  rate_series;
6242  	/*
6243  	 * 4 retry counts for 4 rate series. retry count for rate 0 is stored
6244  	 * in byte 0 (LSB) and retry count for rate 3 is stored at byte 3
6245  	 * (MSB)
6246  	 */
6247  	__le32  rate_retries;
6248  } __packed;
6249  
6250  struct wmi_peer_fixed_rate_cmd {
6251  	/* unique id identifying the VDEV, generated by the caller */
6252  	__le32 vdev_id;
6253  	/* peer MAC address */
6254  	struct wmi_mac_addr peer_macaddr;
6255  	/* fixed rate */
6256  	struct wmi_fixed_rate peer_fixed_rate;
6257  } __packed;
6258  
6259  #define WMI_MGMT_TID    17
6260  
6261  struct wmi_addba_clear_resp_cmd {
6262  	/* unique id identifying the VDEV, generated by the caller */
6263  	__le32 vdev_id;
6264  	/* peer MAC address */
6265  	struct wmi_mac_addr peer_macaddr;
6266  } __packed;
6267  
6268  struct wmi_addba_send_cmd {
6269  	/* unique id identifying the VDEV, generated by the caller */
6270  	__le32 vdev_id;
6271  	/* peer MAC address */
6272  	struct wmi_mac_addr peer_macaddr;
6273  	/* Tid number */
6274  	__le32 tid;
6275  	/* Buffer/Window size*/
6276  	__le32 buffersize;
6277  } __packed;
6278  
6279  struct wmi_delba_send_cmd {
6280  	/* unique id identifying the VDEV, generated by the caller */
6281  	__le32 vdev_id;
6282  	/* peer MAC address */
6283  	struct wmi_mac_addr peer_macaddr;
6284  	/* Tid number */
6285  	__le32 tid;
6286  	/* Is Initiator */
6287  	__le32 initiator;
6288  	/* Reason code */
6289  	__le32 reasoncode;
6290  } __packed;
6291  
6292  struct wmi_addba_setresponse_cmd {
6293  	/* unique id identifying the vdev, generated by the caller */
6294  	__le32 vdev_id;
6295  	/* peer mac address */
6296  	struct wmi_mac_addr peer_macaddr;
6297  	/* Tid number */
6298  	__le32 tid;
6299  	/* status code */
6300  	__le32 statuscode;
6301  } __packed;
6302  
6303  struct wmi_send_singleamsdu_cmd {
6304  	/* unique id identifying the vdev, generated by the caller */
6305  	__le32 vdev_id;
6306  	/* peer mac address */
6307  	struct wmi_mac_addr peer_macaddr;
6308  	/* Tid number */
6309  	__le32 tid;
6310  } __packed;
6311  
6312  enum wmi_peer_smps_state {
6313  	WMI_PEER_SMPS_PS_NONE = 0x0,
6314  	WMI_PEER_SMPS_STATIC  = 0x1,
6315  	WMI_PEER_SMPS_DYNAMIC = 0x2
6316  };
6317  
6318  enum wmi_peer_chwidth {
6319  	WMI_PEER_CHWIDTH_20MHZ = 0,
6320  	WMI_PEER_CHWIDTH_40MHZ = 1,
6321  	WMI_PEER_CHWIDTH_80MHZ = 2,
6322  	WMI_PEER_CHWIDTH_160MHZ = 3,
6323  };
6324  
6325  enum wmi_peer_param {
6326  	WMI_PEER_SMPS_STATE = 0x1, /* see %wmi_peer_smps_state */
6327  	WMI_PEER_AMPDU      = 0x2,
6328  	WMI_PEER_AUTHORIZE  = 0x3,
6329  	WMI_PEER_CHAN_WIDTH = 0x4,
6330  	WMI_PEER_NSS        = 0x5,
6331  	WMI_PEER_USE_4ADDR  = 0x6,
6332  	WMI_PEER_USE_FIXED_PWR = 0x8,
6333  	WMI_PEER_PARAM_FIXED_RATE = 0x9,
6334  	WMI_PEER_DEBUG      = 0xa,
6335  	WMI_PEER_PHYMODE    = 0xd,
6336  	WMI_PEER_DUMMY_VAR  = 0xff, /* dummy parameter for STA PS workaround */
6337  };
6338  
6339  struct wmi_peer_set_param_cmd {
6340  	__le32 vdev_id;
6341  	struct wmi_mac_addr peer_macaddr;
6342  	__le32 param_id;
6343  	__le32 param_value;
6344  } __packed;
6345  
6346  #define MAX_SUPPORTED_RATES 128
6347  
6348  struct wmi_rate_set {
6349  	/* total number of rates */
6350  	__le32 num_rates;
6351  	/*
6352  	 * rates (each 8bit value) packed into a 32 bit word.
6353  	 * the rates are filled from least significant byte to most
6354  	 * significant byte.
6355  	 */
6356  	__le32 rates[(MAX_SUPPORTED_RATES / 4) + 1];
6357  } __packed;
6358  
6359  struct wmi_rate_set_arg {
6360  	unsigned int num_rates;
6361  	u8 rates[MAX_SUPPORTED_RATES];
6362  };
6363  
6364  /*
6365   * NOTE: It would bea good idea to represent the Tx MCS
6366   * info in one word and Rx in another word. This is split
6367   * into multiple words for convenience
6368   */
6369  struct wmi_vht_rate_set {
6370  	__le32 rx_max_rate; /* Max Rx data rate */
6371  	__le32 rx_mcs_set;  /* Negotiated RX VHT rates */
6372  	__le32 tx_max_rate; /* Max Tx data rate */
6373  	__le32 tx_mcs_set;  /* Negotiated TX VHT rates */
6374  } __packed;
6375  
6376  struct wmi_vht_rate_set_arg {
6377  	u32 rx_max_rate;
6378  	u32 rx_mcs_set;
6379  	u32 tx_max_rate;
6380  	u32 tx_mcs_set;
6381  };
6382  
6383  struct wmi_peer_set_rates_cmd {
6384  	/* peer MAC address */
6385  	struct wmi_mac_addr peer_macaddr;
6386  	/* legacy rate set */
6387  	struct wmi_rate_set peer_legacy_rates;
6388  	/* ht rate set */
6389  	struct wmi_rate_set peer_ht_rates;
6390  } __packed;
6391  
6392  struct wmi_peer_set_q_empty_callback_cmd {
6393  	/* unique id identifying the VDEV, generated by the caller */
6394  	__le32 vdev_id;
6395  	/* peer MAC address */
6396  	struct wmi_mac_addr peer_macaddr;
6397  	__le32 callback_enable;
6398  } __packed;
6399  
6400  struct wmi_peer_flags_map {
6401  	u32 auth;
6402  	u32 qos;
6403  	u32 need_ptk_4_way;
6404  	u32 need_gtk_2_way;
6405  	u32 apsd;
6406  	u32 ht;
6407  	u32 bw40;
6408  	u32 stbc;
6409  	u32 ldbc;
6410  	u32 dyn_mimops;
6411  	u32 static_mimops;
6412  	u32 spatial_mux;
6413  	u32 vht;
6414  	u32 bw80;
6415  	u32 vht_2g;
6416  	u32 pmf;
6417  	u32 bw160;
6418  };
6419  
6420  enum wmi_peer_flags {
6421  	WMI_PEER_AUTH = 0x00000001,
6422  	WMI_PEER_QOS = 0x00000002,
6423  	WMI_PEER_NEED_PTK_4_WAY = 0x00000004,
6424  	WMI_PEER_NEED_GTK_2_WAY = 0x00000010,
6425  	WMI_PEER_APSD = 0x00000800,
6426  	WMI_PEER_HT = 0x00001000,
6427  	WMI_PEER_40MHZ = 0x00002000,
6428  	WMI_PEER_STBC = 0x00008000,
6429  	WMI_PEER_LDPC = 0x00010000,
6430  	WMI_PEER_DYN_MIMOPS = 0x00020000,
6431  	WMI_PEER_STATIC_MIMOPS = 0x00040000,
6432  	WMI_PEER_SPATIAL_MUX = 0x00200000,
6433  	WMI_PEER_VHT = 0x02000000,
6434  	WMI_PEER_80MHZ = 0x04000000,
6435  	WMI_PEER_VHT_2G = 0x08000000,
6436  	WMI_PEER_PMF = 0x10000000,
6437  	WMI_PEER_160MHZ = 0x20000000
6438  };
6439  
6440  enum wmi_10x_peer_flags {
6441  	WMI_10X_PEER_AUTH = 0x00000001,
6442  	WMI_10X_PEER_QOS = 0x00000002,
6443  	WMI_10X_PEER_NEED_PTK_4_WAY = 0x00000004,
6444  	WMI_10X_PEER_NEED_GTK_2_WAY = 0x00000010,
6445  	WMI_10X_PEER_APSD = 0x00000800,
6446  	WMI_10X_PEER_HT = 0x00001000,
6447  	WMI_10X_PEER_40MHZ = 0x00002000,
6448  	WMI_10X_PEER_STBC = 0x00008000,
6449  	WMI_10X_PEER_LDPC = 0x00010000,
6450  	WMI_10X_PEER_DYN_MIMOPS = 0x00020000,
6451  	WMI_10X_PEER_STATIC_MIMOPS = 0x00040000,
6452  	WMI_10X_PEER_SPATIAL_MUX = 0x00200000,
6453  	WMI_10X_PEER_VHT = 0x02000000,
6454  	WMI_10X_PEER_80MHZ = 0x04000000,
6455  	WMI_10X_PEER_160MHZ = 0x20000000
6456  };
6457  
6458  enum wmi_10_2_peer_flags {
6459  	WMI_10_2_PEER_AUTH = 0x00000001,
6460  	WMI_10_2_PEER_QOS = 0x00000002,
6461  	WMI_10_2_PEER_NEED_PTK_4_WAY = 0x00000004,
6462  	WMI_10_2_PEER_NEED_GTK_2_WAY = 0x00000010,
6463  	WMI_10_2_PEER_APSD = 0x00000800,
6464  	WMI_10_2_PEER_HT = 0x00001000,
6465  	WMI_10_2_PEER_40MHZ = 0x00002000,
6466  	WMI_10_2_PEER_STBC = 0x00008000,
6467  	WMI_10_2_PEER_LDPC = 0x00010000,
6468  	WMI_10_2_PEER_DYN_MIMOPS = 0x00020000,
6469  	WMI_10_2_PEER_STATIC_MIMOPS = 0x00040000,
6470  	WMI_10_2_PEER_SPATIAL_MUX = 0x00200000,
6471  	WMI_10_2_PEER_VHT = 0x02000000,
6472  	WMI_10_2_PEER_80MHZ = 0x04000000,
6473  	WMI_10_2_PEER_VHT_2G = 0x08000000,
6474  	WMI_10_2_PEER_PMF = 0x10000000,
6475  	WMI_10_2_PEER_160MHZ = 0x20000000
6476  };
6477  
6478  /*
6479   * Peer rate capabilities.
6480   *
6481   * This is of interest to the ratecontrol
6482   * module which resides in the firmware. The bit definitions are
6483   * consistent with that defined in if_athrate.c.
6484   */
6485  #define WMI_RC_DS_FLAG          0x01
6486  #define WMI_RC_CW40_FLAG        0x02
6487  #define WMI_RC_SGI_FLAG         0x04
6488  #define WMI_RC_HT_FLAG          0x08
6489  #define WMI_RC_RTSCTS_FLAG      0x10
6490  #define WMI_RC_TX_STBC_FLAG     0x20
6491  #define WMI_RC_RX_STBC_FLAG     0xC0
6492  #define WMI_RC_RX_STBC_FLAG_S   6
6493  #define WMI_RC_WEP_TKIP_FLAG    0x100
6494  #define WMI_RC_TS_FLAG          0x200
6495  #define WMI_RC_UAPSD_FLAG       0x400
6496  
6497  /* Maximum listen interval supported by hw in units of beacon interval */
6498  #define ATH10K_MAX_HW_LISTEN_INTERVAL 5
6499  
6500  struct wmi_common_peer_assoc_complete_cmd {
6501  	struct wmi_mac_addr peer_macaddr;
6502  	__le32 vdev_id;
6503  	__le32 peer_new_assoc; /* 1=assoc, 0=reassoc */
6504  	__le32 peer_associd; /* 16 LSBs */
6505  	__le32 peer_flags;
6506  	__le32 peer_caps; /* 16 LSBs */
6507  	__le32 peer_listen_intval;
6508  	__le32 peer_ht_caps;
6509  	__le32 peer_max_mpdu;
6510  	__le32 peer_mpdu_density; /* 0..16 */
6511  	__le32 peer_rate_caps;
6512  	struct wmi_rate_set peer_legacy_rates;
6513  	struct wmi_rate_set peer_ht_rates;
6514  	__le32 peer_nss; /* num of spatial streams */
6515  	__le32 peer_vht_caps;
6516  	__le32 peer_phymode;
6517  	struct wmi_vht_rate_set peer_vht_rates;
6518  };
6519  
6520  struct wmi_main_peer_assoc_complete_cmd {
6521  	struct wmi_common_peer_assoc_complete_cmd cmd;
6522  
6523  	/* HT Operation Element of the peer. Five bytes packed in 2
6524  	 *  INT32 array and filled from lsb to msb.
6525  	 */
6526  	__le32 peer_ht_info[2];
6527  } __packed;
6528  
6529  struct wmi_10_1_peer_assoc_complete_cmd {
6530  	struct wmi_common_peer_assoc_complete_cmd cmd;
6531  } __packed;
6532  
6533  #define WMI_PEER_ASSOC_INFO0_MAX_MCS_IDX_LSB 0
6534  #define WMI_PEER_ASSOC_INFO0_MAX_MCS_IDX_MASK 0x0f
6535  #define WMI_PEER_ASSOC_INFO0_MAX_NSS_LSB 4
6536  #define WMI_PEER_ASSOC_INFO0_MAX_NSS_MASK 0xf0
6537  
6538  struct wmi_10_2_peer_assoc_complete_cmd {
6539  	struct wmi_common_peer_assoc_complete_cmd cmd;
6540  	__le32 info0; /* WMI_PEER_ASSOC_INFO0_ */
6541  } __packed;
6542  
6543  /* NSS Mapping to FW */
6544  #define WMI_PEER_NSS_MAP_ENABLE	BIT(31)
6545  #define WMI_PEER_NSS_160MHZ_MASK	GENMASK(2, 0)
6546  #define WMI_PEER_NSS_80_80MHZ_MASK	GENMASK(5, 3)
6547  
6548  struct wmi_10_4_peer_assoc_complete_cmd {
6549  	struct wmi_10_2_peer_assoc_complete_cmd cmd;
6550  	__le32 peer_bw_rxnss_override;
6551  } __packed;
6552  
6553  struct wmi_peer_assoc_complete_arg {
6554  	u8 addr[ETH_ALEN];
6555  	u32 vdev_id;
6556  	bool peer_reassoc;
6557  	u16 peer_aid;
6558  	u32 peer_flags; /* see %WMI_PEER_ */
6559  	u16 peer_caps;
6560  	u32 peer_listen_intval;
6561  	u32 peer_ht_caps;
6562  	u32 peer_max_mpdu;
6563  	u32 peer_mpdu_density; /* 0..16 */
6564  	u32 peer_rate_caps; /* see %WMI_RC_ */
6565  	struct wmi_rate_set_arg peer_legacy_rates;
6566  	struct wmi_rate_set_arg peer_ht_rates;
6567  	u32 peer_num_spatial_streams;
6568  	u32 peer_vht_caps;
6569  	enum wmi_phy_mode peer_phymode;
6570  	struct wmi_vht_rate_set_arg peer_vht_rates;
6571  	u32 peer_bw_rxnss_override;
6572  };
6573  
6574  struct wmi_peer_add_wds_entry_cmd {
6575  	/* peer MAC address */
6576  	struct wmi_mac_addr peer_macaddr;
6577  	/* wds MAC addr */
6578  	struct wmi_mac_addr wds_macaddr;
6579  } __packed;
6580  
6581  struct wmi_peer_remove_wds_entry_cmd {
6582  	/* wds MAC addr */
6583  	struct wmi_mac_addr wds_macaddr;
6584  } __packed;
6585  
6586  struct wmi_peer_q_empty_callback_event {
6587  	/* peer MAC address */
6588  	struct wmi_mac_addr peer_macaddr;
6589  } __packed;
6590  
6591  /*
6592   * Channel info WMI event
6593   */
6594  struct wmi_chan_info_event {
6595  	__le32 err_code;
6596  	__le32 freq;
6597  	__le32 cmd_flags;
6598  	__le32 noise_floor;
6599  	__le32 rx_clear_count;
6600  	__le32 cycle_count;
6601  } __packed;
6602  
6603  struct wmi_10_4_chan_info_event {
6604  	__le32 err_code;
6605  	__le32 freq;
6606  	__le32 cmd_flags;
6607  	__le32 noise_floor;
6608  	__le32 rx_clear_count;
6609  	__le32 cycle_count;
6610  	__le32 chan_tx_pwr_range;
6611  	__le32 chan_tx_pwr_tp;
6612  	__le32 rx_frame_count;
6613  } __packed;
6614  
6615  struct wmi_peer_sta_kickout_event {
6616  	struct wmi_mac_addr peer_macaddr;
6617  } __packed;
6618  
6619  #define WMI_CHAN_INFO_FLAG_COMPLETE BIT(0)
6620  #define WMI_CHAN_INFO_FLAG_PRE_COMPLETE BIT(1)
6621  
6622  /* Beacon filter wmi command info */
6623  #define BCN_FLT_MAX_SUPPORTED_IES	256
6624  #define BCN_FLT_MAX_ELEMS_IE_LIST	(BCN_FLT_MAX_SUPPORTED_IES / 32)
6625  
6626  struct bss_bcn_stats {
6627  	__le32 vdev_id;
6628  	__le32 bss_bcnsdropped;
6629  	__le32 bss_bcnsdelivered;
6630  } __packed;
6631  
6632  struct bcn_filter_stats {
6633  	__le32 bcns_dropped;
6634  	__le32 bcns_delivered;
6635  	__le32 activefilters;
6636  	struct bss_bcn_stats bss_stats;
6637  } __packed;
6638  
6639  struct wmi_add_bcn_filter_cmd {
6640  	u32 vdev_id;
6641  	u32 ie_map[BCN_FLT_MAX_ELEMS_IE_LIST];
6642  } __packed;
6643  
6644  enum wmi_sta_keepalive_method {
6645  	WMI_STA_KEEPALIVE_METHOD_NULL_FRAME = 1,
6646  	WMI_STA_KEEPALIVE_METHOD_UNSOLICITATED_ARP_RESPONSE = 2,
6647  };
6648  
6649  #define WMI_STA_KEEPALIVE_INTERVAL_DISABLE 0
6650  
6651  /* Firmware crashes if keepalive interval exceeds this limit */
6652  #define WMI_STA_KEEPALIVE_INTERVAL_MAX_SECONDS 0xffff
6653  
6654  /* note: ip4 addresses are in network byte order, i.e. big endian */
6655  struct wmi_sta_keepalive_arp_resp {
6656  	__be32 src_ip4_addr;
6657  	__be32 dest_ip4_addr;
6658  	struct wmi_mac_addr dest_mac_addr;
6659  } __packed;
6660  
6661  struct wmi_sta_keepalive_cmd {
6662  	__le32 vdev_id;
6663  	__le32 enabled;
6664  	__le32 method; /* WMI_STA_KEEPALIVE_METHOD_ */
6665  	__le32 interval; /* in seconds */
6666  	struct wmi_sta_keepalive_arp_resp arp_resp;
6667  } __packed;
6668  
6669  struct wmi_sta_keepalive_arg {
6670  	u32 vdev_id;
6671  	u32 enabled;
6672  	u32 method;
6673  	u32 interval;
6674  	__be32 src_ip4_addr;
6675  	__be32 dest_ip4_addr;
6676  	const u8 dest_mac_addr[ETH_ALEN];
6677  };
6678  
6679  enum wmi_force_fw_hang_type {
6680  	WMI_FORCE_FW_HANG_ASSERT = 1,
6681  	WMI_FORCE_FW_HANG_NO_DETECT,
6682  	WMI_FORCE_FW_HANG_CTRL_EP_FULL,
6683  	WMI_FORCE_FW_HANG_EMPTY_POINT,
6684  	WMI_FORCE_FW_HANG_STACK_OVERFLOW,
6685  	WMI_FORCE_FW_HANG_INFINITE_LOOP,
6686  };
6687  
6688  #define WMI_FORCE_FW_HANG_RANDOM_TIME 0xFFFFFFFF
6689  
6690  struct wmi_force_fw_hang_cmd {
6691  	__le32 type;
6692  	__le32 delay_ms;
6693  } __packed;
6694  
6695  enum wmi_pdev_reset_mode_type {
6696  	WMI_RST_MODE_TX_FLUSH = 1,
6697  	WMI_RST_MODE_WARM_RESET,
6698  	WMI_RST_MODE_COLD_RESET,
6699  	WMI_RST_MODE_WARM_RESET_RESTORE_CAL,
6700  	WMI_RST_MODE_COLD_RESET_RESTORE_CAL,
6701  	WMI_RST_MODE_MAX,
6702  };
6703  
6704  enum ath10k_dbglog_level {
6705  	ATH10K_DBGLOG_LEVEL_VERBOSE = 0,
6706  	ATH10K_DBGLOG_LEVEL_INFO = 1,
6707  	ATH10K_DBGLOG_LEVEL_WARN = 2,
6708  	ATH10K_DBGLOG_LEVEL_ERR = 3,
6709  };
6710  
6711  /* VAP ids to enable dbglog */
6712  #define ATH10K_DBGLOG_CFG_VAP_LOG_LSB		0
6713  #define ATH10K_DBGLOG_CFG_VAP_LOG_MASK		0x0000ffff
6714  
6715  /* to enable dbglog in the firmware */
6716  #define ATH10K_DBGLOG_CFG_REPORTING_ENABLE_LSB	16
6717  #define ATH10K_DBGLOG_CFG_REPORTING_ENABLE_MASK	0x00010000
6718  
6719  /* timestamp resolution */
6720  #define ATH10K_DBGLOG_CFG_RESOLUTION_LSB	17
6721  #define ATH10K_DBGLOG_CFG_RESOLUTION_MASK	0x000E0000
6722  
6723  /* number of queued messages before sending them to the host */
6724  #define ATH10K_DBGLOG_CFG_REPORT_SIZE_LSB	20
6725  #define ATH10K_DBGLOG_CFG_REPORT_SIZE_MASK	0x0ff00000
6726  
6727  /*
6728   * Log levels to enable. This defines the minimum level to enable, this is
6729   * not a bitmask. See enum ath10k_dbglog_level for the values.
6730   */
6731  #define ATH10K_DBGLOG_CFG_LOG_LVL_LSB		28
6732  #define ATH10K_DBGLOG_CFG_LOG_LVL_MASK		0x70000000
6733  
6734  /*
6735   * Note: this is a cleaned up version of a struct firmware uses. For
6736   * example, config_valid was hidden inside an array.
6737   */
6738  struct wmi_dbglog_cfg_cmd {
6739  	/* bitmask to hold mod id config*/
6740  	__le32 module_enable;
6741  
6742  	/* see ATH10K_DBGLOG_CFG_ */
6743  	__le32 config_enable;
6744  
6745  	/* mask of module id bits to be changed */
6746  	__le32 module_valid;
6747  
6748  	/* mask of config bits to be changed, see ATH10K_DBGLOG_CFG_ */
6749  	__le32 config_valid;
6750  } __packed;
6751  
6752  struct wmi_10_4_dbglog_cfg_cmd {
6753  	/* bitmask to hold mod id config*/
6754  	__le64 module_enable;
6755  
6756  	/* see ATH10K_DBGLOG_CFG_ */
6757  	__le32 config_enable;
6758  
6759  	/* mask of module id bits to be changed */
6760  	__le64 module_valid;
6761  
6762  	/* mask of config bits to be changed, see ATH10K_DBGLOG_CFG_ */
6763  	__le32 config_valid;
6764  } __packed;
6765  
6766  enum wmi_roam_reason {
6767  	WMI_ROAM_REASON_BETTER_AP = 1,
6768  	WMI_ROAM_REASON_BEACON_MISS = 2,
6769  	WMI_ROAM_REASON_LOW_RSSI = 3,
6770  	WMI_ROAM_REASON_SUITABLE_AP_FOUND = 4,
6771  	WMI_ROAM_REASON_HO_FAILED = 5,
6772  
6773  	/* keep last */
6774  	WMI_ROAM_REASON_MAX,
6775  };
6776  
6777  struct wmi_roam_ev {
6778  	__le32 vdev_id;
6779  	__le32 reason;
6780  } __packed;
6781  
6782  #define ATH10K_FRAGMT_THRESHOLD_MIN	540
6783  #define ATH10K_FRAGMT_THRESHOLD_MAX	2346
6784  
6785  #define WMI_MAX_EVENT 0x1000
6786  /* Maximum number of pending TXed WMI packets */
6787  #define WMI_SKB_HEADROOM sizeof(struct wmi_cmd_hdr)
6788  
6789  /* By default disable power save for IBSS */
6790  #define ATH10K_DEFAULT_ATIM 0
6791  
6792  #define WMI_MAX_MEM_REQS 16
6793  
6794  struct wmi_scan_ev_arg {
6795  	__le32 event_type; /* %WMI_SCAN_EVENT_ */
6796  	__le32 reason; /* %WMI_SCAN_REASON_ */
6797  	__le32 channel_freq; /* only valid for WMI_SCAN_EVENT_FOREIGN_CHANNEL */
6798  	__le32 scan_req_id;
6799  	__le32 scan_id;
6800  	__le32 vdev_id;
6801  };
6802  
6803  struct mgmt_tx_compl_params {
6804  	u32 desc_id;
6805  	u32 status;
6806  	u32 ppdu_id;
6807  	int ack_rssi;
6808  };
6809  
6810  struct wmi_tlv_mgmt_tx_compl_ev_arg {
6811  	__le32 desc_id;
6812  	__le32 status;
6813  	__le32 pdev_id;
6814  	__le32 ppdu_id;
6815  	__le32 ack_rssi;
6816  };
6817  
6818  struct wmi_tlv_mgmt_tx_bundle_compl_ev_arg {
6819  	__le32 num_reports;
6820  	const __le32 *desc_ids;
6821  	const __le32 *status;
6822  	const __le32 *ppdu_ids;
6823  	const __le32 *ack_rssi;
6824  };
6825  
6826  struct wmi_peer_delete_resp_ev_arg {
6827  	__le32 vdev_id;
6828  	struct wmi_mac_addr peer_addr;
6829  };
6830  
6831  #define WMI_MGMT_RX_NUM_RSSI 4
6832  struct wmi_mgmt_rx_ev_arg {
6833  	__le32 channel;
6834  	__le32 snr;
6835  	__le32 rate;
6836  	__le32 phy_mode;
6837  	__le32 buf_len;
6838  	__le32 status; /* %WMI_RX_STATUS_ */
6839  	struct wmi_mgmt_rx_ext_info ext_info;
6840  	__le32 rssi[WMI_MGMT_RX_NUM_RSSI];
6841  };
6842  
6843  struct wmi_ch_info_ev_arg {
6844  	__le32 err_code;
6845  	__le32 freq;
6846  	__le32 cmd_flags;
6847  	__le32 noise_floor;
6848  	__le32 rx_clear_count;
6849  	__le32 cycle_count;
6850  	__le32 chan_tx_pwr_range;
6851  	__le32 chan_tx_pwr_tp;
6852  	__le32 rx_frame_count;
6853  	__le32 my_bss_rx_cycle_count;
6854  	__le32 rx_11b_mode_data_duration;
6855  	__le32 tx_frame_cnt;
6856  	__le32 mac_clk_mhz;
6857  };
6858  
6859  /* From 10.4 firmware, not sure all have the same values. */
6860  enum wmi_vdev_start_status {
6861  	WMI_VDEV_START_OK = 0,
6862  	WMI_VDEV_START_CHAN_INVALID,
6863  };
6864  
6865  struct wmi_vdev_start_ev_arg {
6866  	__le32 vdev_id;
6867  	__le32 req_id;
6868  	__le32 resp_type; /* %WMI_VDEV_RESP_ */
6869  	__le32 status; /* See wmi_vdev_start_status enum above */
6870  };
6871  
6872  struct wmi_peer_kick_ev_arg {
6873  	const u8 *mac_addr;
6874  };
6875  
6876  struct wmi_swba_ev_arg {
6877  	__le32 vdev_map;
6878  	struct wmi_tim_info_arg tim_info[WMI_MAX_AP_VDEV];
6879  	const struct wmi_p2p_noa_info *noa_info[WMI_MAX_AP_VDEV];
6880  };
6881  
6882  struct wmi_phyerr_ev_arg {
6883  	u32 tsf_timestamp;
6884  	u16 freq1;
6885  	u16 freq2;
6886  	u8 rssi_combined;
6887  	u8 chan_width_mhz;
6888  	u8 phy_err_code;
6889  	u16 nf_chains[4];
6890  	u32 buf_len;
6891  	const u8 *buf;
6892  	u8 hdr_len;
6893  };
6894  
6895  struct wmi_phyerr_hdr_arg {
6896  	u32 num_phyerrs;
6897  	u32 tsf_l32;
6898  	u32 tsf_u32;
6899  	u32 buf_len;
6900  	const void *phyerrs;
6901  };
6902  
6903  struct wmi_dfs_status_ev_arg {
6904  	u32 status;
6905  };
6906  
6907  struct wmi_svc_rdy_ev_arg {
6908  	__le32 min_tx_power;
6909  	__le32 max_tx_power;
6910  	__le32 ht_cap;
6911  	__le32 vht_cap;
6912  	__le32 vht_supp_mcs;
6913  	__le32 sw_ver0;
6914  	__le32 sw_ver1;
6915  	__le32 fw_build;
6916  	__le32 phy_capab;
6917  	__le32 num_rf_chains;
6918  	__le32 eeprom_rd;
6919  	__le32 num_mem_reqs;
6920  	__le32 low_2ghz_chan;
6921  	__le32 high_2ghz_chan;
6922  	__le32 low_5ghz_chan;
6923  	__le32 high_5ghz_chan;
6924  	__le32 sys_cap_info;
6925  	const __le32 *service_map;
6926  	size_t service_map_len;
6927  	const struct wlan_host_mem_req *mem_reqs[WMI_MAX_MEM_REQS];
6928  };
6929  
6930  struct wmi_svc_avail_ev_arg {
6931  	bool service_map_ext_valid;
6932  	__le32 service_map_ext_len;
6933  	const __le32 *service_map_ext;
6934  };
6935  
6936  struct wmi_rdy_ev_arg {
6937  	__le32 sw_version;
6938  	__le32 abi_version;
6939  	__le32 status;
6940  	const u8 *mac_addr;
6941  };
6942  
6943  struct wmi_roam_ev_arg {
6944  	__le32 vdev_id;
6945  	__le32 reason;
6946  	__le32 rssi;
6947  };
6948  
6949  struct wmi_echo_ev_arg {
6950  	__le32 value;
6951  };
6952  
6953  struct wmi_pdev_temperature_event {
6954  	/* temperature value in Celsius degree */
6955  	__le32 temperature;
6956  } __packed;
6957  
6958  struct wmi_pdev_bss_chan_info_event {
6959  	__le32 freq;
6960  	__le32 noise_floor;
6961  	__le64 cycle_busy;
6962  	__le64 cycle_total;
6963  	__le64 cycle_tx;
6964  	__le64 cycle_rx;
6965  	__le64 cycle_rx_bss;
6966  	__le32 reserved;
6967  } __packed;
6968  
6969  /* WOW structures */
6970  enum wmi_wow_wakeup_event {
6971  	WOW_BMISS_EVENT = 0,
6972  	WOW_BETTER_AP_EVENT,
6973  	WOW_DEAUTH_RECVD_EVENT,
6974  	WOW_MAGIC_PKT_RECVD_EVENT,
6975  	WOW_GTK_ERR_EVENT,
6976  	WOW_FOURWAY_HSHAKE_EVENT,
6977  	WOW_EAPOL_RECVD_EVENT,
6978  	WOW_NLO_DETECTED_EVENT,
6979  	WOW_DISASSOC_RECVD_EVENT,
6980  	WOW_PATTERN_MATCH_EVENT,
6981  	WOW_CSA_IE_EVENT,
6982  	WOW_PROBE_REQ_WPS_IE_EVENT,
6983  	WOW_AUTH_REQ_EVENT,
6984  	WOW_ASSOC_REQ_EVENT,
6985  	WOW_HTT_EVENT,
6986  	WOW_RA_MATCH_EVENT,
6987  	WOW_HOST_AUTO_SHUTDOWN_EVENT,
6988  	WOW_IOAC_MAGIC_EVENT,
6989  	WOW_IOAC_SHORT_EVENT,
6990  	WOW_IOAC_EXTEND_EVENT,
6991  	WOW_IOAC_TIMER_EVENT,
6992  	WOW_DFS_PHYERR_RADAR_EVENT,
6993  	WOW_BEACON_EVENT,
6994  	WOW_CLIENT_KICKOUT_EVENT,
6995  	WOW_EVENT_MAX,
6996  };
6997  
6998  #define C2S(x) case x: return #x
6999  
wow_wakeup_event(enum wmi_wow_wakeup_event ev)7000  static inline const char *wow_wakeup_event(enum wmi_wow_wakeup_event ev)
7001  {
7002  	switch (ev) {
7003  	C2S(WOW_BMISS_EVENT);
7004  	C2S(WOW_BETTER_AP_EVENT);
7005  	C2S(WOW_DEAUTH_RECVD_EVENT);
7006  	C2S(WOW_MAGIC_PKT_RECVD_EVENT);
7007  	C2S(WOW_GTK_ERR_EVENT);
7008  	C2S(WOW_FOURWAY_HSHAKE_EVENT);
7009  	C2S(WOW_EAPOL_RECVD_EVENT);
7010  	C2S(WOW_NLO_DETECTED_EVENT);
7011  	C2S(WOW_DISASSOC_RECVD_EVENT);
7012  	C2S(WOW_PATTERN_MATCH_EVENT);
7013  	C2S(WOW_CSA_IE_EVENT);
7014  	C2S(WOW_PROBE_REQ_WPS_IE_EVENT);
7015  	C2S(WOW_AUTH_REQ_EVENT);
7016  	C2S(WOW_ASSOC_REQ_EVENT);
7017  	C2S(WOW_HTT_EVENT);
7018  	C2S(WOW_RA_MATCH_EVENT);
7019  	C2S(WOW_HOST_AUTO_SHUTDOWN_EVENT);
7020  	C2S(WOW_IOAC_MAGIC_EVENT);
7021  	C2S(WOW_IOAC_SHORT_EVENT);
7022  	C2S(WOW_IOAC_EXTEND_EVENT);
7023  	C2S(WOW_IOAC_TIMER_EVENT);
7024  	C2S(WOW_DFS_PHYERR_RADAR_EVENT);
7025  	C2S(WOW_BEACON_EVENT);
7026  	C2S(WOW_CLIENT_KICKOUT_EVENT);
7027  	C2S(WOW_EVENT_MAX);
7028  	default:
7029  		return NULL;
7030  	}
7031  }
7032  
7033  enum wmi_wow_wake_reason {
7034  	WOW_REASON_UNSPECIFIED = -1,
7035  	WOW_REASON_NLOD = 0,
7036  	WOW_REASON_AP_ASSOC_LOST,
7037  	WOW_REASON_LOW_RSSI,
7038  	WOW_REASON_DEAUTH_RECVD,
7039  	WOW_REASON_DISASSOC_RECVD,
7040  	WOW_REASON_GTK_HS_ERR,
7041  	WOW_REASON_EAP_REQ,
7042  	WOW_REASON_FOURWAY_HS_RECV,
7043  	WOW_REASON_TIMER_INTR_RECV,
7044  	WOW_REASON_PATTERN_MATCH_FOUND,
7045  	WOW_REASON_RECV_MAGIC_PATTERN,
7046  	WOW_REASON_P2P_DISC,
7047  	WOW_REASON_WLAN_HB,
7048  	WOW_REASON_CSA_EVENT,
7049  	WOW_REASON_PROBE_REQ_WPS_IE_RECV,
7050  	WOW_REASON_AUTH_REQ_RECV,
7051  	WOW_REASON_ASSOC_REQ_RECV,
7052  	WOW_REASON_HTT_EVENT,
7053  	WOW_REASON_RA_MATCH,
7054  	WOW_REASON_HOST_AUTO_SHUTDOWN,
7055  	WOW_REASON_IOAC_MAGIC_EVENT,
7056  	WOW_REASON_IOAC_SHORT_EVENT,
7057  	WOW_REASON_IOAC_EXTEND_EVENT,
7058  	WOW_REASON_IOAC_TIMER_EVENT,
7059  	WOW_REASON_ROAM_HO,
7060  	WOW_REASON_DFS_PHYERR_RADADR_EVENT,
7061  	WOW_REASON_BEACON_RECV,
7062  	WOW_REASON_CLIENT_KICKOUT_EVENT,
7063  	WOW_REASON_DEBUG_TEST = 0xFF,
7064  };
7065  
wow_reason(enum wmi_wow_wake_reason reason)7066  static inline const char *wow_reason(enum wmi_wow_wake_reason reason)
7067  {
7068  	switch (reason) {
7069  	C2S(WOW_REASON_UNSPECIFIED);
7070  	C2S(WOW_REASON_NLOD);
7071  	C2S(WOW_REASON_AP_ASSOC_LOST);
7072  	C2S(WOW_REASON_LOW_RSSI);
7073  	C2S(WOW_REASON_DEAUTH_RECVD);
7074  	C2S(WOW_REASON_DISASSOC_RECVD);
7075  	C2S(WOW_REASON_GTK_HS_ERR);
7076  	C2S(WOW_REASON_EAP_REQ);
7077  	C2S(WOW_REASON_FOURWAY_HS_RECV);
7078  	C2S(WOW_REASON_TIMER_INTR_RECV);
7079  	C2S(WOW_REASON_PATTERN_MATCH_FOUND);
7080  	C2S(WOW_REASON_RECV_MAGIC_PATTERN);
7081  	C2S(WOW_REASON_P2P_DISC);
7082  	C2S(WOW_REASON_WLAN_HB);
7083  	C2S(WOW_REASON_CSA_EVENT);
7084  	C2S(WOW_REASON_PROBE_REQ_WPS_IE_RECV);
7085  	C2S(WOW_REASON_AUTH_REQ_RECV);
7086  	C2S(WOW_REASON_ASSOC_REQ_RECV);
7087  	C2S(WOW_REASON_HTT_EVENT);
7088  	C2S(WOW_REASON_RA_MATCH);
7089  	C2S(WOW_REASON_HOST_AUTO_SHUTDOWN);
7090  	C2S(WOW_REASON_IOAC_MAGIC_EVENT);
7091  	C2S(WOW_REASON_IOAC_SHORT_EVENT);
7092  	C2S(WOW_REASON_IOAC_EXTEND_EVENT);
7093  	C2S(WOW_REASON_IOAC_TIMER_EVENT);
7094  	C2S(WOW_REASON_ROAM_HO);
7095  	C2S(WOW_REASON_DFS_PHYERR_RADADR_EVENT);
7096  	C2S(WOW_REASON_BEACON_RECV);
7097  	C2S(WOW_REASON_CLIENT_KICKOUT_EVENT);
7098  	C2S(WOW_REASON_DEBUG_TEST);
7099  	default:
7100  		return NULL;
7101  	}
7102  }
7103  
7104  #undef C2S
7105  
7106  struct wmi_wow_ev_arg {
7107  	u32 vdev_id;
7108  	u32 flag;
7109  	enum wmi_wow_wake_reason wake_reason;
7110  	u32 data_len;
7111  };
7112  
7113  #define WOW_MIN_PATTERN_SIZE	1
7114  #define WOW_MAX_PATTERN_SIZE	148
7115  #define WOW_MAX_PKT_OFFSET	128
7116  #define WOW_HDR_LEN	(sizeof(struct ieee80211_hdr_3addr) + \
7117  	sizeof(struct rfc1042_hdr))
7118  #define WOW_MAX_REDUCE	(WOW_HDR_LEN - sizeof(struct ethhdr) - \
7119  	offsetof(struct ieee80211_hdr_3addr, addr1))
7120  
7121  enum wmi_tdls_state {
7122  	WMI_TDLS_DISABLE,
7123  	WMI_TDLS_ENABLE_PASSIVE,
7124  	WMI_TDLS_ENABLE_ACTIVE,
7125  	WMI_TDLS_ENABLE_ACTIVE_EXTERNAL_CONTROL,
7126  };
7127  
7128  enum wmi_tdls_peer_state {
7129  	WMI_TDLS_PEER_STATE_PEERING,
7130  	WMI_TDLS_PEER_STATE_CONNECTED,
7131  	WMI_TDLS_PEER_STATE_TEARDOWN,
7132  };
7133  
7134  struct wmi_tdls_peer_update_cmd_arg {
7135  	u32 vdev_id;
7136  	enum wmi_tdls_peer_state peer_state;
7137  	u8 addr[ETH_ALEN];
7138  };
7139  
7140  #define WMI_TDLS_MAX_SUPP_OPER_CLASSES 32
7141  
7142  #define WMI_TDLS_PEER_SP_MASK	0x60
7143  #define WMI_TDLS_PEER_SP_LSB	5
7144  
7145  enum wmi_tdls_options {
7146  	WMI_TDLS_OFFCHAN_EN = BIT(0),
7147  	WMI_TDLS_BUFFER_STA_EN = BIT(1),
7148  	WMI_TDLS_SLEEP_STA_EN = BIT(2),
7149  };
7150  
7151  enum {
7152  	WMI_TDLS_PEER_QOS_AC_VO = BIT(0),
7153  	WMI_TDLS_PEER_QOS_AC_VI = BIT(1),
7154  	WMI_TDLS_PEER_QOS_AC_BK = BIT(2),
7155  	WMI_TDLS_PEER_QOS_AC_BE = BIT(3),
7156  };
7157  
7158  struct wmi_tdls_peer_capab_arg {
7159  	u8 peer_uapsd_queues;
7160  	u8 peer_max_sp;
7161  	u32 buff_sta_support;
7162  	u32 off_chan_support;
7163  	u32 peer_curr_operclass;
7164  	u32 self_curr_operclass;
7165  	u32 peer_chan_len;
7166  	u32 peer_operclass_len;
7167  	u8 peer_operclass[WMI_TDLS_MAX_SUPP_OPER_CLASSES];
7168  	u32 is_peer_responder;
7169  	u32 pref_offchan_num;
7170  	u32 pref_offchan_bw;
7171  };
7172  
7173  struct wmi_10_4_tdls_set_state_cmd {
7174  	__le32 vdev_id;
7175  	__le32 state;
7176  	__le32 notification_interval_ms;
7177  	__le32 tx_discovery_threshold;
7178  	__le32 tx_teardown_threshold;
7179  	__le32 rssi_teardown_threshold;
7180  	__le32 rssi_delta;
7181  	__le32 tdls_options;
7182  	__le32 tdls_peer_traffic_ind_window;
7183  	__le32 tdls_peer_traffic_response_timeout_ms;
7184  	__le32 tdls_puapsd_mask;
7185  	__le32 tdls_puapsd_inactivity_time_ms;
7186  	__le32 tdls_puapsd_rx_frame_threshold;
7187  	__le32 teardown_notification_ms;
7188  	__le32 tdls_peer_kickout_threshold;
7189  } __packed;
7190  
7191  struct wmi_tdls_peer_capabilities {
7192  	__le32 peer_qos;
7193  	__le32 buff_sta_support;
7194  	__le32 off_chan_support;
7195  	__le32 peer_curr_operclass;
7196  	__le32 self_curr_operclass;
7197  	__le32 peer_chan_len;
7198  	__le32 peer_operclass_len;
7199  	u8 peer_operclass[WMI_TDLS_MAX_SUPP_OPER_CLASSES];
7200  	__le32 is_peer_responder;
7201  	__le32 pref_offchan_num;
7202  	__le32 pref_offchan_bw;
7203  	union {
7204  		/* to match legacy implementation allocate room for
7205  		 * at least one record even if peer_chan_len is 0
7206  		 */
7207  		struct wmi_channel peer_chan_min_allocation;
7208  		DECLARE_FLEX_ARRAY(struct wmi_channel, peer_chan_list);
7209  	};
7210  } __packed;
7211  
7212  struct wmi_10_4_tdls_peer_update_cmd {
7213  	__le32 vdev_id;
7214  	struct wmi_mac_addr peer_macaddr;
7215  	__le32 peer_state;
7216  	__le32 reserved[4];
7217  	struct wmi_tdls_peer_capabilities peer_capab;
7218  } __packed;
7219  
7220  enum wmi_tdls_peer_reason {
7221  	WMI_TDLS_TEARDOWN_REASON_TX,
7222  	WMI_TDLS_TEARDOWN_REASON_RSSI,
7223  	WMI_TDLS_TEARDOWN_REASON_SCAN,
7224  	WMI_TDLS_DISCONNECTED_REASON_PEER_DELETE,
7225  	WMI_TDLS_TEARDOWN_REASON_PTR_TIMEOUT,
7226  	WMI_TDLS_TEARDOWN_REASON_BAD_PTR,
7227  	WMI_TDLS_TEARDOWN_REASON_NO_RESPONSE,
7228  	WMI_TDLS_ENTER_BUF_STA,
7229  	WMI_TDLS_EXIT_BUF_STA,
7230  	WMI_TDLS_ENTER_BT_BUSY_MODE,
7231  	WMI_TDLS_EXIT_BT_BUSY_MODE,
7232  	WMI_TDLS_SCAN_STARTED_EVENT,
7233  	WMI_TDLS_SCAN_COMPLETED_EVENT,
7234  };
7235  
7236  enum wmi_tdls_peer_notification {
7237  	WMI_TDLS_SHOULD_DISCOVER,
7238  	WMI_TDLS_SHOULD_TEARDOWN,
7239  	WMI_TDLS_PEER_DISCONNECTED,
7240  	WMI_TDLS_CONNECTION_TRACKER_NOTIFICATION,
7241  };
7242  
7243  struct wmi_tdls_peer_event {
7244  	struct wmi_mac_addr peer_macaddr;
7245  	/* see enum wmi_tdls_peer_notification*/
7246  	__le32 peer_status;
7247  	/* see enum wmi_tdls_peer_reason */
7248  	__le32 peer_reason;
7249  	__le32 vdev_id;
7250  } __packed;
7251  
7252  enum wmi_tid_aggr_control_conf {
7253  	WMI_TID_CONFIG_AGGR_CONTROL_IGNORE,
7254  	WMI_TID_CONFIG_AGGR_CONTROL_ENABLE,
7255  	WMI_TID_CONFIG_AGGR_CONTROL_DISABLE,
7256  };
7257  
7258  enum wmi_noack_tid_conf {
7259  	WMI_NOACK_TID_CONFIG_IGNORE_ACK_POLICY,
7260  	WMI_PEER_TID_CONFIG_ACK,
7261  	WMI_PEER_TID_CONFIG_NOACK,
7262  };
7263  
7264  enum wmi_tid_rate_ctrl_conf {
7265  	WMI_TID_CONFIG_RATE_CONTROL_IGNORE,
7266  	WMI_TID_CONFIG_RATE_CONTROL_AUTO,
7267  	WMI_TID_CONFIG_RATE_CONTROL_FIXED_RATE,
7268  	WMI_TID_CONFIG_RATE_CONTROL_DEFAULT_LOWEST_RATE,
7269  	WMI_PEER_TID_CONFIG_RATE_UPPER_CAP,
7270  };
7271  
7272  enum wmi_tid_rtscts_control_conf {
7273  	WMI_TID_CONFIG_RTSCTS_CONTROL_ENABLE,
7274  	WMI_TID_CONFIG_RTSCTS_CONTROL_DISABLE,
7275  };
7276  
7277  enum wmi_ext_tid_config_map {
7278  	WMI_EXT_TID_RTS_CTS_CONFIG = BIT(0),
7279  };
7280  
7281  struct wmi_per_peer_per_tid_cfg_arg {
7282  	u32 vdev_id;
7283  	struct wmi_mac_addr peer_macaddr;
7284  	u32 tid;
7285  	enum wmi_noack_tid_conf ack_policy;
7286  	enum wmi_tid_aggr_control_conf aggr_control;
7287  	u8 rate_ctrl;
7288  	u32 retry_count;
7289  	u32 rcode_flags;
7290  	u32 ext_tid_cfg_bitmap;
7291  	u32 rtscts_ctrl;
7292  };
7293  
7294  struct wmi_peer_per_tid_cfg_cmd {
7295  	__le32 vdev_id;
7296  	struct wmi_mac_addr peer_macaddr;
7297  	__le32 tid;
7298  
7299  	/* see enum wmi_noack_tid_conf */
7300  	__le32 ack_policy;
7301  
7302  	/* see enum wmi_tid_aggr_control_conf */
7303  	__le32 aggr_control;
7304  
7305  	/* see enum wmi_tid_rate_ctrl_conf */
7306  	__le32 rate_control;
7307  	__le32 rcode_flags;
7308  	__le32 retry_count;
7309  
7310  	/* See enum wmi_ext_tid_config_map */
7311  	__le32 ext_tid_cfg_bitmap;
7312  
7313  	/* see enum wmi_tid_rtscts_control_conf */
7314  	__le32 rtscts_ctrl;
7315  } __packed;
7316  
7317  enum wmi_txbf_conf {
7318  	WMI_TXBF_CONF_UNSUPPORTED,
7319  	WMI_TXBF_CONF_BEFORE_ASSOC,
7320  	WMI_TXBF_CONF_AFTER_ASSOC,
7321  };
7322  
7323  #define	WMI_CCA_DETECT_LEVEL_AUTO	0
7324  #define	WMI_CCA_DETECT_MARGIN_AUTO	0
7325  
7326  struct wmi_pdev_set_adaptive_cca_params {
7327  	__le32 enable;
7328  	__le32 cca_detect_level;
7329  	__le32 cca_detect_margin;
7330  } __packed;
7331  
7332  #define WMI_PNO_MAX_SCHED_SCAN_PLANS      2
7333  #define WMI_PNO_MAX_SCHED_SCAN_PLAN_INT   7200
7334  #define WMI_PNO_MAX_SCHED_SCAN_PLAN_ITRNS 100
7335  #define WMI_PNO_MAX_NETW_CHANNELS         26
7336  #define WMI_PNO_MAX_NETW_CHANNELS_EX      60
7337  #define WMI_PNO_MAX_SUPP_NETWORKS         WLAN_SCAN_PARAMS_MAX_SSID
7338  #define WMI_PNO_MAX_IE_LENGTH             WLAN_SCAN_PARAMS_MAX_IE_LEN
7339  
7340  /*size based of dot11 declaration without extra IEs as we will not carry those for PNO*/
7341  #define WMI_PNO_MAX_PB_REQ_SIZE    450
7342  
7343  #define WMI_PNO_24G_DEFAULT_CH     1
7344  #define WMI_PNO_5G_DEFAULT_CH      36
7345  
7346  #define WMI_ACTIVE_MAX_CHANNEL_TIME 40
7347  #define WMI_PASSIVE_MAX_CHANNEL_TIME   110
7348  
7349  /* SSID broadcast type */
7350  enum wmi_SSID_bcast_type {
7351  	BCAST_UNKNOWN      = 0,
7352  	BCAST_NORMAL       = 1,
7353  	BCAST_HIDDEN       = 2,
7354  };
7355  
7356  struct wmi_network_type {
7357  	struct wmi_ssid ssid;
7358  	u32 authentication;
7359  	u32 encryption;
7360  	u32 bcast_nw_type;
7361  	u8 channel_count;
7362  	u16 channels[WMI_PNO_MAX_NETW_CHANNELS_EX];
7363  	s32 rssi_threshold;
7364  } __packed;
7365  
7366  struct wmi_pno_scan_req {
7367  	u8 enable;
7368  	u8 vdev_id;
7369  	u8 uc_networks_count;
7370  	struct wmi_network_type a_networks[WMI_PNO_MAX_SUPP_NETWORKS];
7371  	u32 fast_scan_period;
7372  	u32 slow_scan_period;
7373  	u8 fast_scan_max_cycles;
7374  
7375  	bool do_passive_scan;
7376  
7377  	u32 delay_start_time;
7378  	u32 active_min_time;
7379  	u32 active_max_time;
7380  	u32 passive_min_time;
7381  	u32 passive_max_time;
7382  
7383  	/* mac address randomization attributes */
7384  	u32 enable_pno_scan_randomization;
7385  	u8 mac_addr[ETH_ALEN];
7386  	u8 mac_addr_mask[ETH_ALEN];
7387  } __packed;
7388  
7389  enum wmi_host_platform_type {
7390  	WMI_HOST_PLATFORM_HIGH_PERF,
7391  	WMI_HOST_PLATFORM_LOW_PERF,
7392  };
7393  
7394  enum wmi_bss_survey_req_type {
7395  	WMI_BSS_SURVEY_REQ_TYPE_READ = 1,
7396  	WMI_BSS_SURVEY_REQ_TYPE_READ_CLEAR,
7397  };
7398  
7399  struct wmi_pdev_chan_info_req_cmd {
7400  	__le32 type;
7401  	__le32 reserved;
7402  } __packed;
7403  
7404  /* bb timing register configurations */
7405  struct wmi_bb_timing_cfg_arg {
7406  	/* Tx_end to pa off timing */
7407  	u32 bb_tx_timing;
7408  
7409  	/* Tx_end to external pa off timing */
7410  	u32 bb_xpa_timing;
7411  };
7412  
7413  struct wmi_pdev_bb_timing_cfg_cmd {
7414  	/* Tx_end to pa off timing */
7415  	__le32 bb_tx_timing;
7416  
7417  	/* Tx_end to external pa off timing */
7418  	__le32 bb_xpa_timing;
7419  } __packed;
7420  
7421  struct ath10k;
7422  struct ath10k_vif;
7423  struct ath10k_fw_stats_pdev;
7424  struct ath10k_fw_stats_peer;
7425  struct ath10k_fw_stats;
7426  
7427  int ath10k_wmi_attach(struct ath10k *ar);
7428  void ath10k_wmi_detach(struct ath10k *ar);
7429  void ath10k_wmi_free_host_mem(struct ath10k *ar);
7430  int ath10k_wmi_wait_for_service_ready(struct ath10k *ar);
7431  int ath10k_wmi_wait_for_unified_ready(struct ath10k *ar);
7432  
7433  struct sk_buff *ath10k_wmi_alloc_skb(struct ath10k *ar, u32 len);
7434  int ath10k_wmi_connect(struct ath10k *ar);
7435  
7436  int ath10k_wmi_cmd_send(struct ath10k *ar, struct sk_buff *skb, u32 cmd_id);
7437  int ath10k_wmi_cmd_send_nowait(struct ath10k *ar, struct sk_buff *skb,
7438  			       u32 cmd_id);
7439  void ath10k_wmi_start_scan_init(struct ath10k *ar, struct wmi_start_scan_arg *arg);
7440  
7441  void ath10k_wmi_pull_pdev_stats_base(const struct wmi_pdev_stats_base *src,
7442  				     struct ath10k_fw_stats_pdev *dst);
7443  void ath10k_wmi_pull_pdev_stats_tx(const struct wmi_pdev_stats_tx *src,
7444  				   struct ath10k_fw_stats_pdev *dst);
7445  void ath10k_wmi_pull_pdev_stats_rx(const struct wmi_pdev_stats_rx *src,
7446  				   struct ath10k_fw_stats_pdev *dst);
7447  void ath10k_wmi_pull_pdev_stats_extra(const struct wmi_pdev_stats_extra *src,
7448  				      struct ath10k_fw_stats_pdev *dst);
7449  void ath10k_wmi_pull_peer_stats(const struct wmi_peer_stats *src,
7450  				struct ath10k_fw_stats_peer *dst);
7451  void ath10k_wmi_put_host_mem_chunks(struct ath10k *ar,
7452  				    struct wmi_host_mem_chunks *chunks);
7453  void ath10k_wmi_put_start_scan_common(struct wmi_start_scan_common *cmn,
7454  				      const struct wmi_start_scan_arg *arg);
7455  void ath10k_wmi_set_wmm_param(struct wmi_wmm_params *params,
7456  			      const struct wmi_wmm_params_arg *arg);
7457  void ath10k_wmi_put_wmi_channel(struct ath10k *ar, struct wmi_channel *ch,
7458  				const struct wmi_channel_arg *arg);
7459  int ath10k_wmi_start_scan_verify(const struct wmi_start_scan_arg *arg);
7460  
7461  int ath10k_wmi_event_scan(struct ath10k *ar, struct sk_buff *skb);
7462  int ath10k_wmi_event_mgmt_rx(struct ath10k *ar, struct sk_buff *skb);
7463  int ath10k_wmi_event_mgmt_tx_compl(struct ath10k *ar, struct sk_buff *skb);
7464  int ath10k_wmi_event_mgmt_tx_bundle_compl(struct ath10k *ar, struct sk_buff *skb);
7465  void ath10k_wmi_event_chan_info(struct ath10k *ar, struct sk_buff *skb);
7466  void ath10k_wmi_event_echo(struct ath10k *ar, struct sk_buff *skb);
7467  int ath10k_wmi_event_debug_mesg(struct ath10k *ar, struct sk_buff *skb);
7468  void ath10k_wmi_event_update_stats(struct ath10k *ar, struct sk_buff *skb);
7469  void ath10k_wmi_event_vdev_start_resp(struct ath10k *ar, struct sk_buff *skb);
7470  void ath10k_wmi_event_vdev_stopped(struct ath10k *ar, struct sk_buff *skb);
7471  void ath10k_wmi_event_peer_sta_kickout(struct ath10k *ar, struct sk_buff *skb);
7472  void ath10k_wmi_event_host_swba(struct ath10k *ar, struct sk_buff *skb);
7473  void ath10k_wmi_event_tbttoffset_update(struct ath10k *ar, struct sk_buff *skb);
7474  void ath10k_wmi_event_dfs(struct ath10k *ar,
7475  			  struct wmi_phyerr_ev_arg *phyerr, u64 tsf);
7476  void ath10k_wmi_event_spectral_scan(struct ath10k *ar,
7477  				    struct wmi_phyerr_ev_arg *phyerr,
7478  				    u64 tsf);
7479  void ath10k_wmi_event_phyerr(struct ath10k *ar, struct sk_buff *skb);
7480  void ath10k_wmi_event_roam(struct ath10k *ar, struct sk_buff *skb);
7481  void ath10k_wmi_event_profile_match(struct ath10k *ar, struct sk_buff *skb);
7482  void ath10k_wmi_event_debug_print(struct ath10k *ar, struct sk_buff *skb);
7483  void ath10k_wmi_event_pdev_qvit(struct ath10k *ar, struct sk_buff *skb);
7484  void ath10k_wmi_event_wlan_profile_data(struct ath10k *ar, struct sk_buff *skb);
7485  void ath10k_wmi_event_rtt_measurement_report(struct ath10k *ar,
7486  					     struct sk_buff *skb);
7487  void ath10k_wmi_event_tsf_measurement_report(struct ath10k *ar,
7488  					     struct sk_buff *skb);
7489  void ath10k_wmi_event_rtt_error_report(struct ath10k *ar, struct sk_buff *skb);
7490  void ath10k_wmi_event_wow_wakeup_host(struct ath10k *ar, struct sk_buff *skb);
7491  void ath10k_wmi_event_dcs_interference(struct ath10k *ar, struct sk_buff *skb);
7492  void ath10k_wmi_event_pdev_tpc_config(struct ath10k *ar, struct sk_buff *skb);
7493  void ath10k_wmi_event_pdev_ftm_intg(struct ath10k *ar, struct sk_buff *skb);
7494  void ath10k_wmi_event_gtk_offload_status(struct ath10k *ar,
7495  					 struct sk_buff *skb);
7496  void ath10k_wmi_event_gtk_rekey_fail(struct ath10k *ar, struct sk_buff *skb);
7497  void ath10k_wmi_event_delba_complete(struct ath10k *ar, struct sk_buff *skb);
7498  void ath10k_wmi_event_addba_complete(struct ath10k *ar, struct sk_buff *skb);
7499  void ath10k_wmi_event_vdev_install_key_complete(struct ath10k *ar,
7500  						struct sk_buff *skb);
7501  void ath10k_wmi_event_inst_rssi_stats(struct ath10k *ar, struct sk_buff *skb);
7502  void ath10k_wmi_event_vdev_standby_req(struct ath10k *ar, struct sk_buff *skb);
7503  void ath10k_wmi_event_vdev_resume_req(struct ath10k *ar, struct sk_buff *skb);
7504  void ath10k_wmi_event_service_ready(struct ath10k *ar, struct sk_buff *skb);
7505  int ath10k_wmi_event_ready(struct ath10k *ar, struct sk_buff *skb);
7506  void ath10k_wmi_event_service_available(struct ath10k *ar, struct sk_buff *skb);
7507  int ath10k_wmi_op_pull_phyerr_ev(struct ath10k *ar, const void *phyerr_buf,
7508  				 int left_len, struct wmi_phyerr_ev_arg *arg);
7509  void ath10k_wmi_main_op_fw_stats_fill(struct ath10k *ar,
7510  				      struct ath10k_fw_stats *fw_stats,
7511  				      char *buf);
7512  void ath10k_wmi_10x_op_fw_stats_fill(struct ath10k *ar,
7513  				     struct ath10k_fw_stats *fw_stats,
7514  				     char *buf);
7515  void ath10k_wmi_10_4_op_fw_stats_fill(struct ath10k *ar,
7516  				      struct ath10k_fw_stats *fw_stats,
7517  				      char *buf);
7518  int ath10k_wmi_op_get_vdev_subtype(struct ath10k *ar,
7519  				   enum wmi_vdev_subtype subtype);
7520  int ath10k_wmi_barrier(struct ath10k *ar);
7521  void ath10k_wmi_tpc_config_get_rate_code(u8 *rate_code, u16 *pream_table,
7522  					 u32 num_tx_chain);
7523  void ath10k_wmi_event_tpc_final_table(struct ath10k *ar, struct sk_buff *skb);
7524  
7525  #endif /* _WMI_H_ */
7526