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