xref: /wlan-dirver/qca-wifi-host-cmn/wmi/inc/wmi_unified_param.h (revision 45a38684b07295822dc8eba39e293408f203eec8)
1 /*
2  * Copyright (c) 2016-2020 The Linux Foundation. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for
5  * any purpose with or without fee is hereby granted, provided that the
6  * above copyright notice and this permission notice appear in all
7  * copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16  * PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 /*
20  * This file contains the API definitions for the Unified Wireless Module
21  * Interface (WMI).
22  */
23 
24 #ifndef _WMI_UNIFIED_PARAM_H_
25 #define _WMI_UNIFIED_PARAM_H_
26 
27 #include <wlan_scan_public_structs.h>
28 #ifdef FEATURE_WLAN_TDLS
29 #include <wlan_tdls_public_structs.h>
30 #endif
31 #ifdef WLAN_CONV_SPECTRAL_ENABLE
32 #include <wlan_spectral_public_structs.h>
33 #endif /* WLAN_CONV_SPECTRAL_ENABLE */
34 #include <wlan_vdev_mgr_tgt_if_tx_defs.h>
35 #include <wlan_vdev_mgr_tgt_if_rx_defs.h>
36 
37 #define MAC_MAX_KEY_LENGTH 32
38 #define MAC_PN_LENGTH 8
39 #define MAX_MAC_HEADER_LEN 32
40 #define MIN_MAC_HEADER_LEN 24
41 #define QOS_CONTROL_LEN 2
42 
43 #define WMI_MAC_MAX_SSID_LENGTH              32
44 #ifndef CONFIG_HL_SUPPORT
45 #define mgmt_tx_dl_frm_len 64
46 #else
47 #define mgmt_tx_dl_frm_len 1532
48 #endif
49 #define WMI_SMPS_MASK_LOWER_16BITS 0xFF
50 #define WMI_SMPS_MASK_UPPER_3BITS 0x7
51 #define WMI_SMPS_PARAM_VALUE_S 29
52 #define WMI_UNIT_TEST_MAX_NUM_ARGS 100
53 /* The size of the utc time in bytes. */
54 #define WMI_SIZE_UTC_TIME (10)
55 /* The size of the utc time error in bytes. */
56 #define WMI_SIZE_UTC_TIME_ERROR (5)
57 #define WMI_MCC_MIN_CHANNEL_QUOTA             20
58 #define WMI_MCC_MAX_CHANNEL_QUOTA             80
59 #define WMI_MCC_MIN_NON_ZERO_CHANNEL_LATENCY  30
60 
61 #ifdef WMI_AP_SUPPORT
62 #define WMI_BEACON_TX_BUFFER_SIZE             (1500)
63 #else
64 #define WMI_BEACON_TX_BUFFER_SIZE             (512)
65 #endif
66 
67 #define WMI_WIFI_SCANNING_MAC_OUI_LENGTH      3
68 #define WMI_EXTSCAN_MAX_SIGNIFICANT_CHANGE_APS   64
69 #define WMI_RSSI_THOLD_DEFAULT   -300
70 #define WMI_NLO_FREQ_THRESH          1000
71 #define WMI_SEC_TO_MSEC(sec)         (sec * 1000)
72 #define WMI_MSEC_TO_USEC(msec)	     (msec * 1000)
73 #define WMI_ETH_LEN      64
74 #define WMI_QOS_NUM_TSPEC_MAX 2
75 #define WMI_IPV4_ADDR_LEN       4
76 #define WMI_KEEP_ALIVE_NULL_PKT              1
77 #define WMI_KEEP_ALIVE_UNSOLICIT_ARP_RSP     2
78 #define WMI_MAC_MAX_KEY_LENGTH          32
79 #define WMI_KRK_KEY_LEN     16
80 #ifdef WLAN_FEATURE_ROAM_OFFLOAD
81 #define WMI_BTK_KEY_LEN     32
82 #define WMI_ROAM_R0KH_ID_MAX_LEN    48
83 #define WMI_ROAM_SCAN_PSK_SIZE    48
84 #endif
85 #define WMI_NOISE_FLOOR_DBM_DEFAULT      (-96)
86 #define WMI_EXTSCAN_MAX_HOTLIST_SSIDS                    8
87 #define WMI_ROAM_MAX_CHANNELS                            80
88 #ifdef FEATURE_WLAN_EXTSCAN
89 #define WMI_MAX_EXTSCAN_MSG_SIZE        1536
90 #define WMI_EXTSCAN_REST_TIME           100
91 #define WMI_EXTSCAN_MAX_SCAN_TIME       50000
92 #define WMI_EXTSCAN_BURST_DURATION      150
93 #endif
94 #define WMI_SCAN_NPROBES_DEFAULT            (2)
95 #define WMI_SEC_TO_MSEC(sec)         (sec * 1000)  /* sec to msec */
96 #define WMI_MSEC_TO_USEC(msec)       (msec * 1000) /* msec to usec */
97 #define WMI_NLO_FREQ_THRESH          1000       /* in MHz */
98 
99 #define WMI_SVC_MSG_MAX_SIZE   1536
100 #define MAX_UTF_EVENT_LENGTH	2048
101 #define MAX_WMI_UTF_LEN	252
102 #define MAX_WMI_QVIT_LEN	252
103 #define THERMAL_LEVELS	4
104 #define WMI_HOST_BCN_FLT_MAX_SUPPORTED_IES	256
105 #define WMI_HOST_BCN_FLT_MAX_ELEMS_IE_LIST \
106 			(WMI_HOST_BCN_FLT_MAX_SUPPORTED_IES/32)
107 #define LTEU_MAX_BINS	10
108 #define ATF_ACTIVED_MAX_CLIENTS   50
109 #define ATF_ACTIVED_MAX_ATFGROUPS 16
110 #define CTL_5G_SIZE 1536
111 #define CTL_2G_SIZE 684
112 #define MAX_CTL_SIZE (CTL_5G_SIZE > CTL_2G_SIZE ? CTL_5G_SIZE : CTL_2G_SIZE)
113 #define IEEE80211_MICBUF_SIZE   (8+8)
114 #define IEEE80211_TID_SIZE	17
115 #define WME_NUM_AC	4
116 #define SMART_ANT_MODE_SERIAL   0
117 #define SMART_ANT_MODE_PARALLEL   1
118 #define IEEE80211_WEP_NKID	4   /* number of key ids */
119 #define WPI_IV_LEN	16
120 #define WMI_SCAN_MAX_NUM_BSSID	10
121 #define MAX_CHANS	1023
122 #define TARGET_OEM_CONFIGURE_LCI	0x0A
123 #define RTT_LCI_ALTITUDE_MASK	0x3FFFFFFF
124 #define TARGET_OEM_CONFIGURE_LCR	0x09
125 #define RTT_TIMEOUT_MS 180
126 #define MAX_SUPPORTED_RATES 128
127 #define WMI_HOST_MAX_BUFFER_SIZE	1712
128 #define WMI_HAL_MAX_SANTENNA 4
129 #define WMI_HOST_PDEV_VI_PRIORITY_BIT     (1<<2)
130 #define WMI_HOST_PDEV_BEACON_PRIORITY_BIT (1<<4)
131 #define WMI_HOST_PDEV_MGMT_PRIORITY_BIT   (1<<5)
132 #define WMI_MAX_CMDS 1024
133 
134 #define FIPS_ALIGN 4
135 #define FIPS_ALIGNTO(__addr, __to) \
136 		((((unsigned long int)(__addr)) + (__to) -  1) & ~((__to) - 1))
137 #define FIPS_IS_ALIGNED(__addr, __to) \
138 		(!(((unsigned long int)(__addr)) & ((__to)-1)))
139 
140 #define WMI_HOST_MAX_SERIAL_ANTENNA 2
141 #define WMI_SMART_ANT_MAX_RATE_SERIES 2
142 
143 #define WMI_HOST_F_MS(_v, _f)	\
144 	(((_v) & (_f)) >> (_f##_S))
145 
146 #define WMI_HOST_F_RMW(_var, _v, _f)	\
147 	do {	\
148 		(_var) &= ~(_f);	\
149 		(_var) |= (((_v) << (_f##_S)) & (_f));	\
150 	} while (0)
151 
152 /* vdev capabilities bit mask */
153 #define WMI_HOST_VDEV_BEACON_SUPPORT  0x1
154 #define WMI_HOST_VDEV_WDS_LRN_ENABLED 0x2
155 #define WMI_HOST_VDEV_VOW_ENABLED     0x4
156 #define WMI_HOST_VDEV_IS_BEACON_SUPPORTED(param) \
157 	((param) & WMI_HOST_VDEV_BEACON_SUPPORT)
158 #define WMI_HOST_VDEV_IS_WDS_LRN_ENABLED(param) \
159 	((param) & WMI_HOST_VDEV_WDS_LRN_ENABLED)
160 #define WMI_HOST_VDEV_IS_VOW_ENABLED(param) \
161 	((param) & WMI_HOST_VDEV_VOW_ENABLED)
162 
163 /* TXBF capabilities masks */
164 #define WMI_HOST_TXBF_CONF_SU_TX_BFEE_S 0
165 #define WMI_HOST_TXBF_CONF_SU_TX_BFEE_M 0x1
166 #define WMI_HOST_TXBF_CONF_SU_TX_BFEE \
167 	(WMI_HOST_TXBF_CONF_SU_TX_BFEE_M << WMI_HOST_TXBF_CONF_SU_TX_BFEE_S)
168 #define WMI_HOST_TXBF_CONF_SU_TX_BFEE_GET(x) \
169 	WMI_HOST_F_MS(x, WMI_HOST_TXBF_CONF_SU_TX_BFEE)
170 #define WMI_HOST_TXBF_CONF_SU_TX_BFEE_SET(x, z) \
171 	WMI_HOST_F_RMW(x, z, WMI_HOST_TXBF_CONF_SU_TX_BFEE)
172 
173 #define WMI_HOST_TXBF_CONF_MU_TX_BFEE_S 1
174 #define WMI_HOST_TXBF_CONF_MU_TX_BFEE_M 0x1
175 #define WMI_HOST_TXBF_CONF_MU_TX_BFEE \
176 	(WMI_HOST_TXBF_CONF_MU_TX_BFEE_M << WMI_HOST_TXBF_CONF_MU_TX_BFEE_S)
177 #define WMI_HOST_TXBF_CONF_MU_TX_BFEE_GET(x) \
178 	WMI_HOST_F_MS(x, WMI_HOST_TXBF_CONF_MU_TX_BFEE)
179 #define WMI_HOST_TXBF_CONF_MU_TX_BFEE_SET(x, z) \
180 	WMI_HOST_F_RMW(x, z, WMI_HOST_TXBF_CONF_MU_TX_BFEE)
181 
182 #define WMI_HOST_TXBF_CONF_SU_TX_BFER_S 2
183 #define WMI_HOST_TXBF_CONF_SU_TX_BFER_M 0x1
184 #define WMI_HOST_TXBF_CONF_SU_TX_BFER \
185 	(WMI_HOST_TXBF_CONF_SU_TX_BFER_M << WMI_HOST_TXBF_CONF_SU_TX_BFER_S)
186 #define WMI_HOST_TXBF_CONF_SU_TX_BFER_GET(x) \
187 	WMI_HOST_F_MS(x, WMI_HOST_TXBF_CONF_SU_TX_BFER)
188 #define WMI_HOST_TXBF_CONF_SU_TX_BFER_SET(x, z) \
189 	WMI_HOST_F_RMW(x, z, WMI_HOST_TXBF_CONF_SU_TX_BFER)
190 
191 #define WMI_HOST_TXBF_CONF_MU_TX_BFER_S 3
192 #define WMI_HOST_TXBF_CONF_MU_TX_BFER_M 0x1
193 #define WMI_HOST_TXBF_CONF_MU_TX_BFER \
194 	(WMI_HOST_TXBF_CONF_MU_TX_BFER_M << WMI_HOST_TXBF_CONF_MU_TX_BFER_S)
195 #define WMI_HOST_TXBF_CONF_MU_TX_BFER_GET(x) \
196 	WMI_HOST_F_MS(x, WMI_HOST_TXBF_CONF_MU_TX_BFER)
197 #define WMI_HOST_TXBF_CONF_MU_TX_BFER_SET(x, z) \
198 	WMI_HOST_F_RMW(x, z, WMI_HOST_TXBF_CONF_MU_TX_BFER)
199 
200 #define WMI_HOST_TXBF_CONF_STS_CAP_S 4
201 #define WMI_HOST_TXBF_CONF_STS_CAP_M 0x7
202 #define WMI_HOST_TXBF_CONF_STS_CAP \
203 	(WMI_HOST_TXBF_CONF_STS_CAP_M << WMI_HOST_TXBF_CONF_STS_CAP_S)
204 #define WMI_HOST_TXBF_CONF_STS_CAP_GET(x) \
205 	WMI_HOST_F_MS(x, WMI_HOST_TXBF_CONF_STS_CAP);
206 #define WMI_HOST_TXBF_CONF_STS_CAP_SET(x, z) \
207 	WMI_HOST_F_RMW(x, z, WMI_HOST_TXBF_CONF_STS_CAP)
208 
209 #define WMI_HOST_TXBF_CONF_IMPLICIT_BF_S 7
210 #define WMI_HOST_TXBF_CONF_IMPLICIT_BF_M 0x1
211 #define WMI_HOST_TXBF_CONF_IMPLICIT_BF \
212 	(WMI_HOST_TXBF_CONF_IMPLICIT_BF_M << WMI_HOST_TXBF_CONF_IMPLICIT_BF_S)
213 #define WMI_HOST_TXBF_CONF_IMPLICIT_BF_GET(x) \
214 	WMI_HOST_F_MS(x, WMI_HOST_TXBF_CONF_IMPLICIT_BF)
215 #define WMI_HOST_TXBF_CONF_IMPLICIT_BF_SET(x, z) \
216 	WMI_HOST_F_RMW(x, z, WMI_HOST_TXBF_CONF_IMPLICIT_BF)
217 
218 #define WMI_HOST_TXBF_CONF_BF_SND_DIM_S 8
219 #define WMI_HOST_TXBF_CONF_BF_SND_DIM_M 0x7
220 #define WMI_HOST_TXBF_CONF_BF_SND_DIM \
221 	(WMI_HOST_TXBF_CONF_BF_SND_DIM_M << WMI_HOST_TXBF_CONF_BF_SND_DIM_S)
222 #define WMI_HOST_TXBF_CONF_BF_SND_DIM_GET(x) \
223 	WMI_HOST_F_MS(x, WMI_HOST_TXBF_CONF_BF_SND_DIM)
224 #define WMI_HOST_TXBF_CONF_BF_SND_DIM_SET(x, z) \
225 	WMI_HOST_F_RMW(x, z, WMI_HOST_TXBF_CONF_BF_SND_DIM)
226 
227 /* The following WMI_HOST_HEOPS_BSSCOLOR_XXX macros correspond to the
228  *  WMI_HEOPS_COLOR_XXX macros in the FW wmi_unified.h */
229 #define WMI_HOST_HEOPS_BSSCOLOR_S 0
230 #define WMI_HOST_HEOPS_BSSCOLOR_M 0x3f
231 #define WMI_HOST_HEOPS_BSSCOLOR \
232 	(WMI_HOST_HEOPS_BSSCOLOR_M << WMI_HOST_HEOPS_BSSCOLOR_S)
233 #define WMI_HOST_HEOPS_BSSCOLOR_GET(x) \
234 	WMI_HOST_F_MS(x, WMI_HOST_HEOPS_BSSCOLOR)
235 #define WMI_HOST_HEOPS_BSSCOLOR_SET(x, z) \
236 	WMI_HOST_F_RMW(x, z, WMI_HOST_HEOPS_BSSCOLOR)
237 
238 /* The following WMI_HOST_HEOPS_BSSCOLOR_DISABLE_XXX macros correspond to the
239  *  WMI_HEOPS_BSSCOLORDISABLE_XXX macros in the FW wmi_unified.h */
240 #define WMI_HOST_HEOPS_BSSCOLOR_DISABLE_S 30
241 #define WMI_HOST_HEOPS_BSSCOLOR_DISABLE_M 0x1
242 #define WMI_HOST_HEOPS_BSSCOLOR_DISABLE \
243 	(WMI_HOST_HEOPS_BSSCOLOR_DISABLE_M << WMI_HOST_HEOPS_BSSCOLOR_DISABLE_S)
244 #define WMI_HOST_HEOPS_BSSCOLOR_DISABLE_GET(x) \
245 	WMI_HOST_F_MS(x, WMI_HOST_HEOPS_BSSCOLOR_DISABLE)
246 #define WMI_HOST_HEOPS_BSSCOLOR_DISABLE_SET(x, z) \
247 	WMI_HOST_F_RMW(x, z, WMI_HOST_HEOPS_BSSCOLOR_DISABLE)
248 
249 /* HE BF capabilities mask */
250 #define WMI_HOST_HE_BF_CONF_SU_BFEE_S 0
251 #define WMI_HOST_HE_BF_CONF_SU_BFEE_M 0x1
252 #define WMI_HOST_HE_BF_CONF_SU_BFEE \
253 	(WMI_HOST_HE_BF_CONF_SU_BFEE_M << WMI_HOST_HE_BF_CONF_SU_BFEE_S)
254 #define WMI_HOST_HE_BF_CONF_SU_BFEE_GET(x) \
255 	WMI_HOST_F_MS(x, WMI_HOST_HE_BF_CONF_SU_BFEE)
256 #define WMI_HOST_HE_BF_CONF_SU_BFEE_SET(x, z) \
257 	WMI_HOST_F_RMW(x, z, WMI_HOST_HE_BF_CONF_SU_BFEE)
258 
259 #define WMI_HOST_HE_BF_CONF_SU_BFER_S 1
260 #define WMI_HOST_HE_BF_CONF_SU_BFER_M 0x1
261 #define WMI_HOST_HE_BF_CONF_SU_BFER \
262 	(WMI_HOST_HE_BF_CONF_SU_BFER_M << WMI_HOST_HE_BF_CONF_SU_BFER_S)
263 #define WMI_HOST_HE_BF_CONF_SU_BFER_GET(x) \
264 	WMI_HOST_F_MS(x, WMI_HOST_HE_BF_CONF_SU_BFER)
265 #define WMI_HOST_HE_BF_CONF_SU_BFER_SET(x, z) \
266 	WMI_HOST_F_RMW(x, z, WMI_HOST_HE_BF_CONF_SU_BFER)
267 
268 #define WMI_HOST_HE_BF_CONF_MU_BFEE_S 2
269 #define WMI_HOST_HE_BF_CONF_MU_BFEE_M 0x1
270 #define WMI_HOST_HE_BF_CONF_MU_BFEE \
271 	(WMI_HOST_HE_BF_CONF_MU_BFEE_M << WMI_HOST_HE_BF_CONF_MU_BFEE_S)
272 #define WMI_HOST_HE_BF_CONF_MU_BFEE_GET(x) \
273 	WMI_HOST_F_MS(x, WMI_HOST_HE_BF_CONF_MU_BFEE)
274 #define WMI_HOST_HE_BF_CONF_MU_BFEE_SET(x, z) \
275 	WMI_HOST_F_RMW(x, z, WMI_HOST_HE_BF_CONF_MU_BFEE)
276 
277 #define WMI_HOST_HE_BF_CONF_MU_BFER_S 3
278 #define WMI_HOST_HE_BF_CONF_MU_BFER_M 0x1
279 #define WMI_HOST_HE_BF_CONF_MU_BFER \
280 	(WMI_HOST_HE_BF_CONF_MU_BFER_M << WMI_HOST_HE_BF_CONF_MU_BFER_S)
281 #define WMI_HOST_HE_BF_CONF_MU_BFER_GET(x) \
282 	WMI_HOST_F_MS(x, WMI_HOST_HE_BF_CONF_MU_BFER)
283 #define WMI_HOST_HE_BF_CONF_MU_BFER_SET(x, z) \
284 	WMI_HOST_F_RMW(x, z, WMI_HOST_HE_BF_CONF_MU_BFER)
285 
286 #define WMI_HOST_HE_BF_CONF_DL_OFDMA_S 4
287 #define WMI_HOST_HE_BF_CONF_DL_OFDMA_M 0x1
288 #define WMI_HOST_HE_BF_CONF_DL_OFDMA \
289 	(WMI_HOST_HE_BF_CONF_DL_OFDMA_M << WMI_HOST_HE_BF_CONF_DL_OFDMA_S)
290 #define WMI_HOST_HE_BF_CONF_DL_OFDMA_GET(x) \
291 	WMI_HOST_F_MS(x, WMI_HOST_HE_BF_CONF_DL_OFDMA)
292 #define WMI_HOST_HE_BF_CONF_DL_OFDMA_SET(x, z) \
293 	WMI_HOST_F_RMW(x, z, WMI_HOST_HE_BF_CONF_DL_OFDMA)
294 
295 #define WMI_HOST_HE_BF_CONF_UL_OFDMA_S 5
296 #define WMI_HOST_HE_BF_CONF_UL_OFDMA_M 0x1
297 #define WMI_HOST_HE_BF_CONF_UL_OFDMA \
298 	(WMI_HOST_HE_BF_CONF_UL_OFDMA_M << WMI_HOST_HE_BF_CONF_UL_OFDMA_S)
299 #define WMI_HOST_HE_BF_CONF_UL_OFDMA_GET(x) \
300 	WMI_HOST_F_MS(x, WMI_HOST_HE_BF_CONF_UL_OFDMA)
301 #define WMI_HOST_HE_BF_CONF_UL_OFDMA_SET(x, z) \
302 	WMI_HOST_F_RMW(x, z, WMI_HOST_HE_BF_CONF_UL_OFDMA)
303 
304 #define WMI_HOST_HE_BF_CONF_UL_MUMIMO_S 6
305 #define WMI_HOST_HE_BF_CONF_UL_MUMIMO_M 0x1
306 #define WMI_HOST_HE_BF_CONF_UL_MUMIMO \
307 	(WMI_HOST_HE_BF_CONF_UL_MUMIMO_M << WMI_HOST_HE_BF_CONF_UL_MUMIMO_S)
308 #define WMI_HOST_HE_BF_CONF_UL_MUMIMO_GET(x) \
309 	WMI_HOST_F_MS(x, WMI_HOST_HE_BF_CONF_UL_MUMIMO)
310 #define WMI_HOST_HE_BF_CONF_UL_MUMIMO_SET(x, z) \
311 	WMI_HOST_F_RMW(x, z, WMI_HOST_HE_BF_CONF_UL_MUMIMO)
312 
313 /* HE or VHT Sounding */
314 #define WMI_HOST_HE_VHT_SOUNDING_MODE_S 0
315 #define WMI_HOST_HE_VHT_SOUNDING_MODE_M 0x1
316 #define WMI_HOST_HE_VHT_SOUNDING_MODE \
317 	(WMI_HOST_HE_VHT_SOUNDING_MODE_M << WMI_HOST_HE_VHT_SOUNDING_MODE_S)
318 #define WMI_HOST_HE_VHT_SOUNDING_MODE_GET(x) \
319 	WMI_HOST_F_MS(x, WMI_HOST_HE_VHT_SOUNDING_MODE)
320 #define WMI_HOST_HE_VHT_SOUNDING_MODE_SET(x, z) \
321 	WMI_HOST_F_RMW(x, z, WMI_HOST_HE_VHT_SOUNDING_MODE)
322 
323 /* SU or MU Sounding */
324 #define WMI_HOST_SU_MU_SOUNDING_MODE_S 2
325 #define WMI_HOST_SU_MU_SOUNDING_MODE_M 0x1
326 #define WMI_HOST_SU_MU_SOUNDING_MODE \
327 	(WMI_HOST_SU_MU_SOUNDING_MODE_M << \
328 	 WMI_HOST_SU_MU_SOUNDING_MODE_S)
329 #define WMI_HOST_SU_MU_SOUNDING_MODE_GET(x) \
330 	WMI_HOST_F_MS(x, WMI_HOST_SU_MU_SOUNDING_MODE)
331 #define WMI_HOST_SU_MU_SOUNDING_MODE_SET(x, z) \
332 	WMI_HOST_F_RMW(x, z, WMI_HOST_SU_MU_SOUNDING_MODE)
333 
334 /* Trig or Non-Trig Sounding */
335 #define WMI_HOST_TRIG_NONTRIG_SOUNDING_MODE_S  3
336 #define WMI_HOST_TRIG_NONTRIG_SOUNDING_MODE_M 0x1
337 #define WMI_HOST_TRIG_NONTRIG_SOUNDING_MODE \
338 	(WMI_HOST_TRIG_NONTRIG_SOUNDING_MODE_M << \
339 	 WMI_HOST_TRIG_NONTRIG_SOUNDING_MODE_S)
340 #define WMI_HOST_TRIG_NONTRIG_SOUNDING_MODE_GET(x) \
341 	WMI_HOST_F_MS(x, WMI_HOST_TRIG_NONTRIG_SOUNDING_MODE)
342 #define WMI_HOST_HE_VHT_SU_MU_SOUNDING_MODE_SET(x, z) \
343 	WMI_HOST_F_RMW(x, z, WMI_HOST_TRIG_NONTRIG_SOUNDING_MODE)
344 
345 #define WMI_HOST_TPC_RATE_MAX	160
346 #define WMI_HOST_TPC_TX_NUM_CHAIN	4
347 #define WMI_HOST_RXG_CAL_CHAN_MAX	8
348 #define WMI_HOST_MAX_NUM_CHAINS	8
349 #define WMI_MAX_NUM_OF_RATE_THRESH   4
350 
351 #define WMI_HOST_PDEV_MAX_VDEVS         17
352 
353 /* for QC98XX only */
354 /*6 modes (A, HT20, HT40, VHT20, VHT40, VHT80) * 3 reg dommains
355  */
356 #define WMI_HOST_NUM_CTLS_5G                18
357 /*6 modes (B, G, HT20, HT40, VHT20, VHT40) * 3 reg domains */
358 #define WMI_HOST_NUM_CTLS_2G                18
359 #define WMI_HOST_NUM_BAND_EDGES_5G          8
360 #define WMI_HOST_NUM_BAND_EDGES_2G          4
361 
362 /*Beelinier 5G*/
363 #define WMI_HOST_NUM_CTLS_5G_11A            9
364 #define WMI_HOST_NUM_BAND_EDGES_5G_11A      25
365 #define WMI_HOST_NUM_CTLS_5G_HT20           24
366 #define WMI_HOST_NUM_BAND_EDGES_5G_HT20     25
367 #define WMI_HOST_NUM_CTLS_5G_HT40           18
368 #define WMI_HOST_NUM_BAND_EDGES_5G_HT40     12
369 #define WMI_HOST_NUM_CTLS_5G_HT80           18
370 #define WMI_HOST_NUM_BAND_EDGES_5G_HT80     6
371 #define WMI_HOST_NUM_CTLS_5G_HT160          9
372 #define WMI_HOST_NUM_BAND_EDGES_5G_HT160    2
373 
374 /* Beeliner 2G */
375 #define WMI_HOST_NUM_CTLS_2G_11B            6
376 #define WMI_HOST_NUM_BAND_EDGES_2G_11B      9
377 #define WMI_HOST_NUM_CTLS_2G_20MHZ          30
378 #define WMI_HOST_NUM_BAND_EDGES_2G_20MHZ    11
379 #define WMI_HOST_NUM_CTLS_2G_40MHZ          18
380 #define WMI_HOST_NUM_BAND_EDGES_2G_40MHZ    6
381 
382 /* for QC98XX only */
383 #define WMI_HOST_TX_NUM_CHAIN               0x3
384 #define WMI_HOST_TPC_REGINDEX_MAX           4
385 #define WMI_HOST_ARRAY_GAIN_NUM_STREAMS     2
386 
387 /* AST Index for flow override */
388 #define WMI_CONFIG_MSDU_AST_INDEX_0         0x0
389 #define WMI_CONFIG_MSDU_AST_INDEX_1         0x1
390 #define WMI_CONFIG_MSDU_AST_INDEX_2         0x2
391 #define WMI_CONFIG_MSDU_AST_INDEX_3         0x3
392 
393 #include "qdf_atomic.h"
394 
395 #ifdef BIG_ENDIAN_HOST
396 	/* This API is used in copying in elements to WMI message,
397 	since WMI message uses multilpes of 4 bytes, This API
398 	converts length into multiples of 4 bytes, and performs copy
399 	*/
400 #define WMI_HOST_IF_MSG_COPY_CHAR_ARRAY(destp, srcp, len)  do { \
401 	int j; \
402 	u_int32_t *src, *dest; \
403 	src = (u_int32_t *)srcp; \
404 	dest = (u_int32_t *)destp; \
405 	for (j = 0; j < roundup(len, sizeof(u_int32_t))/4; j++) { \
406 		*(dest+j) = qdf_le32_to_cpu(*(src+j)); \
407 	} \
408 } while (0)
409 #else
410 
411 #define WMI_HOST_IF_MSG_COPY_CHAR_ARRAY(destp, srcp, len) OS_MEMCPY(destp,\
412 		srcp, len)
413 
414 #endif
415 
416 /** macro to convert MAC address from WMI word format to char array */
417 #define WMI_HOST_MAC_ADDR_TO_CHAR_ARRAY(pwmi_mac_addr, c_macaddr) do {	\
418 	(c_macaddr)[0] =  ((pwmi_mac_addr)->mac_addr31to0) & 0xff; \
419 	(c_macaddr)[1] =  (((pwmi_mac_addr)->mac_addr31to0) >> 8) & 0xff; \
420 	(c_macaddr)[2] =  (((pwmi_mac_addr)->mac_addr31to0) >> 16) & 0xff; \
421 	(c_macaddr)[3] =  (((pwmi_mac_addr)->mac_addr31to0) >> 24) & 0xff;  \
422 	(c_macaddr)[4] =  ((pwmi_mac_addr)->mac_addr47to32) & 0xff; \
423 	(c_macaddr)[5] =  (((pwmi_mac_addr)->mac_addr47to32) >> 8) & 0xff; \
424 	} while (0)
425 
426 #define TARGET_INIT_STATUS_SUCCESS   0x0
427 #define TARGET_INIT_STATUS_GEN_FAILED   0x1
428 #define TARGET_GET_INIT_STATUS_REASON(status)	((status) & 0xffff)
429 #define TARGET_GET_INIT_STATUS_MODULE_ID(status) (((status) >> 16) & 0xffff)
430 
431 #define MAX_ASSOC_IE_LENGTH 1024
432 typedef uint32_t TARGET_INIT_STATUS;
433 
434 /**
435  * @brief Opaque handle of wmi structure
436  */
437 struct wmi_unified;
438 typedef struct wmi_unified *wmi_unified_t;
439 
440 typedef void *ol_scn_t;
441 /**
442  * @wmi_event_handler function prototype
443  */
444 typedef int (*wmi_unified_event_handler)(ol_scn_t scn_handle,
445 		 uint8_t *event_buf, uint32_t len);
446 
447 /**
448  * @WMI_HOST_WLAN_PHY_MODE: Host based enum ID for corresponding in
449  * WLAN_PHY_MODE. This should be consistent with WLAN_PHY_MODE always to avoid
450  * breaking the WMI
451  */
452 typedef enum {
453 	WMI_HOST_MODE_11A	= 0,   /* 11a Mode */
454 	WMI_HOST_MODE_11G	= 1,   /* 11b/g Mode */
455 	WMI_HOST_MODE_11B	= 2,   /* 11b Mode */
456 	WMI_HOST_MODE_11GONLY	= 3,   /* 11g only Mode */
457 	WMI_HOST_MODE_11NA_HT20   = 4,  /* 11a HT20 mode */
458 	WMI_HOST_MODE_11NG_HT20   = 5,  /* 11g HT20 mode */
459 	WMI_HOST_MODE_11NA_HT40   = 6,  /* 11a HT40 mode */
460 	WMI_HOST_MODE_11NG_HT40   = 7,  /* 11g HT40 mode */
461 	WMI_HOST_MODE_11AC_VHT20 = 8,
462 	WMI_HOST_MODE_11AC_VHT40 = 9,
463 	WMI_HOST_MODE_11AC_VHT80 = 10,
464 	WMI_HOST_MODE_11AC_VHT20_2G = 11,
465 	WMI_HOST_MODE_11AC_VHT40_2G = 12,
466 	WMI_HOST_MODE_11AC_VHT80_2G = 13,
467 	WMI_HOST_MODE_11AC_VHT80_80 = 14,
468 	WMI_HOST_MODE_11AC_VHT160 = 15,
469 	WMI_HOST_MODE_11AX_HE20 = 16,
470 	WMI_HOST_MODE_11AX_HE40 = 17,
471 	WMI_HOST_MODE_11AX_HE80 = 18,
472 	WMI_HOST_MODE_11AX_HE80_80 = 19,
473 	WMI_HOST_MODE_11AX_HE160 = 20,
474 	WMI_HOST_MODE_11AX_HE20_2G = 21,
475 	WMI_HOST_MODE_11AX_HE40_2G = 22,
476 	WMI_HOST_MODE_11AX_HE80_2G = 23,
477 	WMI_HOST_MODE_UNKNOWN = 24,
478 	WMI_HOST_MODE_MAX = 24
479 } WMI_HOST_WLAN_PHY_MODE;
480 
481 /*
482  * Needs to be removed and use channel_param based
483  * on how it is processed
484  */
485 typedef struct {
486 	/** primary 20 MHz channel frequency in mhz */
487 	uint32_t mhz;
488 	/** Center frequency 1 in MHz*/
489 	uint32_t band_center_freq1;
490 	/** Center frequency 2 in MHz - valid only for 11acvht 80plus80 mode*/
491 	uint32_t band_center_freq2;
492 	/** channel info described below */
493 	uint32_t info;
494 	/** contains min power, max power, reg power and reg class id.  */
495 	uint32_t reg_info_1;
496 	/** contains antennamax */
497 	uint32_t reg_info_2;
498 } wmi_host_channel;
499 
500 /**
501  * enum WMI_HOST_REGDMN_MODE:
502  * @WMI_HOST_REGDMN_MODE_11A: 11a channels
503  * @WMI_HOST_REGDMN_MODE_TURBO: 11a turbo-only channels
504  * @WMI_HOST_REGDMN_MODE_11B: 11b channels
505  * @WMI_HOST_REGDMN_MODE_PUREG: 11g channels (OFDM only)
506  * @WMI_HOST_REGDMN_MODE_11G: historical
507  * @WMI_HOST_REGDMN_MODE_108G: 11g+Turbo channels
508  * @WMI_HOST_REGDMN_MODE_108A: 11a+Turbo channels
509  * @WMI_HOST_REGDMN_MODE_11AC_VHT20_2G: 2GHz, VHT20
510  * @WMI_HOST_REGDMN_MODE_XR: XR channels
511  * @WMI_HOST_REGDMN_MODE_11A_HALF_RATE: 11a half rate channels
512  * @WMI_HOST_REGDMN_MODE_11A_QUARTER_RATE: 11a quarter rate channels
513  * @WMI_HOST_REGDMN_MODE_11NG_HT20: 11ng HT20 channels
514  * @WMI_HOST_REGDMN_MODE_11NA_HT20: 11na HT20 channels
515  * @WMI_HOST_REGDMN_MODE_11NG_HT40PLUS: 11ng HT40+ channels
516  * @WMI_HOST_REGDMN_MODE_11NG_HT40MINUS: 11ng HT40- channels
517  * @WMI_HOST_REGDMN_MODE_11NA_HT40PLUS: 11na HT40+ channels
518  * @WMI_HOST_REGDMN_MODE_11NA_HT40MINUS: 11na HT40- channels
519  * @WMI_HOST_REGDMN_MODE_11AC_VHT20: 5GHz, VHT20
520  * @WMI_HOST_REGDMN_MODE_11AC_VHT40PLUS: 5GHz, VHT40+ channels
521  * @WMI_HOST_REGDMN_MODE_11AC_VHT40MINUS: 5GHz, VHT40- channels
522  * @WMI_HOST_REGDMN_MODE_11AC_VHT80: 5GHz, VHT80 channels
523  * @WMI_HOST_REGDMN_MODE_11AC_VHT160: 5GHz, VHT160 channels
524  * @WMI_HOST_REGDMN_MODE_11AC_VHT80_80: 5GHz, VHT80+80 channels
525  * @WMI_HOST_REGDMN_MODE_11AXG_HE20: 11ax 2.4GHz, HE20 channels
526  * @WMI_HOST_REGDMN_MODE_11AXA_HE20: 11ax 5GHz, HE20 channels
527  * @WMI_HOST_REGDMN_MODE_11AXG_HE40PLUS: 11ax 2.4GHz, HE40+ channels
528  * @WMI_HOST_REGDMN_MODE_11AXG_HE40MINUS: 11ax 2.4GHz, HE40- channels
529  * @WMI_HOST_REGDMN_MODE_11AXA_HE40PLUS: 11ax 5GHz, HE40+ channels
530  * @WMI_HOST_REGDMN_MODE_11AXA_HE40MINUS: 11ax 5GHz, HE40- channels
531  * @WMI_HOST_REGDMN_MODE_11AXA_HE80: 11ax 5GHz, HE80 channels
532  * @WMI_HOST_REGDMN_MODE_11AXA_HE160: 11ax 5GHz, HE160 channels
533  * @WMI_HOST_REGDMN_MODE_11AXA_HE80_80: 11ax 5GHz, HE80+80 channels
534  */
535 typedef enum {
536 	WMI_HOST_REGDMN_MODE_11A = 0x00000001,
537 	WMI_HOST_REGDMN_MODE_TURBO = 0x00000002,
538 	WMI_HOST_REGDMN_MODE_11B = 0x00000004,
539 	WMI_HOST_REGDMN_MODE_PUREG = 0x00000008,
540 	WMI_HOST_REGDMN_MODE_11G = 0x00000008,
541 	WMI_HOST_REGDMN_MODE_108G = 0x00000020,
542 	WMI_HOST_REGDMN_MODE_108A = 0x00000040,
543 	WMI_HOST_REGDMN_MODE_11AC_VHT20_2G = 0x00000080,
544 	WMI_HOST_REGDMN_MODE_XR = 0x00000100,
545 	WMI_HOST_REGDMN_MODE_11A_HALF_RATE = 0x00000200,
546 	WMI_HOST_REGDMN_MODE_11A_QUARTER_RATE = 0x00000400,
547 	WMI_HOST_REGDMN_MODE_11NG_HT20 = 0x00000800,
548 	WMI_HOST_REGDMN_MODE_11NA_HT20 = 0x00001000,
549 	WMI_HOST_REGDMN_MODE_11NG_HT40PLUS = 0x00002000,
550 	WMI_HOST_REGDMN_MODE_11NG_HT40MINUS = 0x00004000,
551 	WMI_HOST_REGDMN_MODE_11NA_HT40PLUS = 0x00008000,
552 	WMI_HOST_REGDMN_MODE_11NA_HT40MINUS = 0x00010000,
553 	WMI_HOST_REGDMN_MODE_11AC_VHT20 = 0x00020000,
554 	WMI_HOST_REGDMN_MODE_11AC_VHT40PLUS = 0x00040000,
555 	WMI_HOST_REGDMN_MODE_11AC_VHT40MINUS = 0x00080000,
556 	WMI_HOST_REGDMN_MODE_11AC_VHT80 = 0x00100000,
557 	WMI_HOST_REGDMN_MODE_11AC_VHT160 = 0x00200000,
558 	WMI_HOST_REGDMN_MODE_11AC_VHT80_80 = 0x00400000,
559 	WMI_HOST_REGDMN_MODE_11AXG_HE20 = 0x00800000,
560 	WMI_HOST_REGDMN_MODE_11AXA_HE20 = 0x01000000,
561 	WMI_HOST_REGDMN_MODE_11AXG_HE40PLUS = 0x02000000,
562 	WMI_HOST_REGDMN_MODE_11AXG_HE40MINUS = 0x04000000,
563 	WMI_HOST_REGDMN_MODE_11AXA_HE40PLUS = 0x08000000,
564 	WMI_HOST_REGDMN_MODE_11AXA_HE40MINUS = 0x10000000,
565 	WMI_HOST_REGDMN_MODE_11AXA_HE80 = 0x20000000,
566 	WMI_HOST_REGDMN_MODE_11AXA_HE160 = 0x40000000,
567 	WMI_HOST_REGDMN_MODE_11AXA_HE80_80 = 0x80000000,
568 	WMI_HOST_REGDMN_MODE_ALL = 0xffffffff
569 } WMI_HOST_REGDMN_MODE;
570 
571 /**
572  * enum WMI_HOST_WLAN_BAND_CAPABILITY: Band capability (2.4 GHz, 5 GHz). Maps to
573  *               WLAN_BAND_CAPABILITY used in firmware header file(s).
574  * @WMI_HOST_WLAN_2G_CAPABILITY: 2.4 GHz capable
575  * @WMI_HOST_WLAN_5G_CAPABILITY: 5 GHz capable
576  */
577 typedef enum {
578 	WMI_HOST_WLAN_2G_CAPABILITY = 0x1,
579 	WMI_HOST_WLAN_5G_CAPABILITY = 0x2,
580 } WMI_HOST_WLAN_BAND_CAPABILITY;
581 
582 /**
583  * enum wmi_host_channel_width: Channel operating width. Maps to
584  *               wmi_channel_width used in firmware header file(s).
585  * @WMI_HOST_CHAN_WIDTH_20: 20 MHz channel operating width
586  * @WMI_HOST_CHAN_WIDTH_40: 40 MHz channel operating width
587  * @WMI_HOST_CHAN_WIDTH_80: 80 MHz channel operating width
588  * @WMI_HOST_CHAN_WIDTH_160: 160 MHz channel operating width
589  * @WMI_HOST_CHAN_WIDTH_80P80: 80+80 MHz channel operating width
590  * @WMI_HOST_CHAN_WIDTH_5: 5 MHz channel operating width
591  * @WMI_HOST_CHAN_WIDTH_10: 10 MHz channel operating width
592  * @WMI_HOST_CHAN_WIDTH_165: 165 MHz channel operating width
593  */
594 typedef enum {
595 	WMI_HOST_CHAN_WIDTH_20    = 0,
596 	WMI_HOST_CHAN_WIDTH_40    = 1,
597 	WMI_HOST_CHAN_WIDTH_80    = 2,
598 	WMI_HOST_CHAN_WIDTH_160   = 3,
599 	WMI_HOST_CHAN_WIDTH_80P80 = 4,
600 	WMI_HOST_CHAN_WIDTH_5     = 5,
601 	WMI_HOST_CHAN_WIDTH_10    = 6,
602 	WMI_HOST_CHAN_WIDTH_165   = 7,
603 } wmi_host_channel_width;
604 
605 #define ATH_EXPONENT_TO_VALUE(v)	((1<<v)-1)
606 #define ATH_TXOP_TO_US(v)		   (v<<5)
607 /* WME stream classes */
608 #define WMI_HOST_AC_BE                          0    /* best effort */
609 #define WMI_HOST_AC_BK                          1    /* background */
610 #define WMI_HOST_AC_VI                          2    /* video */
611 #define WMI_HOST_AC_VO                          3    /* voice */
612 #define WMI_TID_TO_AC(_tid) (\
613 		(((_tid) == 0) || ((_tid) == 3)) ? WMI_HOST_AC_BE : \
614 		(((_tid) == 1) || ((_tid) == 2)) ? WMI_HOST_AC_BK : \
615 		(((_tid) == 4) || ((_tid) == 5)) ? WMI_HOST_AC_VI : \
616 		WMI_HOST_AC_VO)
617 
618 /**
619  * struct channel_param - Channel parameters with all
620  *			info required by target.
621  * @chan_id: channel id
622  * @pwr: channel power
623  * @mhz: channel frequency
624  * @half_rate: is half rate
625  * @quarter_rate: is quarter rate
626  * @dfs_set: is dfs channel
627  * @dfs_set_cfreq2: is secondary freq dfs channel
628  * @is_chan_passive: is this passive channel
629  * @allow_ht: HT allowed in chan
630  * @allow_vht: VHT allowed on chan
631  * @set_agile: is agile mode
632  * @allow_he: HE allowed on chan
633  * @psc_channel: 6 ghz preferred scan chan
634  * @phy_mode: phymode (vht80 or ht40 or ...)
635  * @cfreq1: centre frequency on primary
636  * @cfreq2: centre frequency on secondary
637  * @maxpower: max power for channel
638  * @minpower: min power for channel
639  * @maxreqpower: Max regulatory power
640  * @antennamac: Max antenna
641  * @reg_class_id: Regulatory class id.
642  * @max_bw_supported: max BW supported
643  */
644 
645 struct channel_param {
646 	uint8_t chan_id;
647 	uint8_t pwr;
648 	uint32_t mhz;
649 	uint32_t half_rate:1,
650 		quarter_rate:1,
651 		dfs_set:1,
652 		dfs_set_cfreq2:1,
653 		is_chan_passive:1,
654 		allow_ht:1,
655 		allow_vht:1,
656 		set_agile:1,
657 		allow_he:1,
658 		psc_channel:1;
659 	uint32_t phy_mode;
660 	uint32_t cfreq1;
661 	uint32_t cfreq2;
662 	int8_t   maxpower;
663 	int8_t   minpower;
664 	int8_t   maxregpower;
665 	uint8_t  antennamax;
666 	uint8_t  reg_class_id;
667 	wmi_host_channel_width max_bw_supported;
668 };
669 
670 #ifdef FEATURE_OEM_DATA
671 /**
672  * struct oem_data - oem data to be sent to firmware
673  * @vdev_id: Unique identifier assigned to the vdev
674  * @data_len: len of data
675  * @pdev_id: pdev id to identify the pdev
676  * @pdev_vdev_flag: 0 when vdev is valid, 1 when pdev is valid
677  * @is_host_pdev_id: 1 for host pdev id, 0 otherwise
678  * @data: the pointer to the buffer containing data
679  */
680 struct oem_data {
681 	uint8_t vdev_id;
682 	size_t data_len;
683 	uint8_t pdev_id;
684 	bool pdev_vdev_flag;
685 	bool is_host_pdev_id;
686 	uint8_t *data;
687 };
688 #endif
689 
690 /**
691  * enum nss_chains_band_info - Band info for dynamic nss, chains change feature
692  * @NSS_CHAINS_BAND_2GHZ: 2.4Ghz band
693  * @NSS_CHAINS_BAND_5GHZ: 5Ghz band
694  * @NSS_CHAINS_BAND_MAX: Max bands supported
695  */
696 enum nss_chains_band_info {
697 	NSS_CHAINS_BAND_2GHZ = 0,
698 	NSS_CHAINS_BAND_5GHZ,
699 	NSS_CHAINS_BAND_MAX,
700 };
701 
702 /**
703  * struct vdev_nss_chains -          vdev config of nss, and chains
704  * @num_tx_chains:                   tx chains of vdev config
705  * @num_rx_chains:                   rx chains of vdev config
706  * @tx_nss:                          tx nss of vdev config
707  * @rx_nss:                          rx nss of vdev config
708  * @num_tx_chains_11b:               number of tx chains in 11b mode
709  * @num_tx_chains_11g:               number of tx chains in 11g mode
710  * @num_tx_chains_11a:               number of tx chains in 11a mode
711  * @disable_rx_mrc:                  disable 2 rx chains, in rx nss 1 mode
712  * @disable_tx_mrc:                  disable 2 tx chains, in tx nss 1 mode
713  */
714 struct vdev_nss_chains {
715 	uint32_t num_tx_chains[NSS_CHAINS_BAND_MAX];
716 	uint32_t num_rx_chains[NSS_CHAINS_BAND_MAX];
717 	uint32_t tx_nss[NSS_CHAINS_BAND_MAX];
718 	uint32_t rx_nss[NSS_CHAINS_BAND_MAX];
719 	uint32_t num_tx_chains_11b;
720 	uint32_t num_tx_chains_11g;
721 	uint32_t num_tx_chains_11a;
722 	bool disable_rx_mrc[NSS_CHAINS_BAND_MAX];
723 	bool disable_tx_mrc[NSS_CHAINS_BAND_MAX];
724 };
725 
726 
727 /**
728  * struct peer_delete_params - peer delete cmd parameter
729  * @vdev_id: vdev id
730  */
731 struct peer_delete_params {
732 	uint8_t vdev_id;
733 };
734 
735 /**
736  * struct peer_set_params - peer set cmd parameter
737  * @param_id: parameter id
738  * @param_value: parameter value
739  * @vdev_id: vdev id
740  */
741 struct peer_set_params {
742 	uint32_t param_id;
743 	uint32_t param_value;
744 	uint32_t vdev_id;
745 };
746 
747 /**
748  * struct peer_create_params - peer create cmd parameter
749  * @peer_addr: peer mac addr
750  * @peer_type: peer type
751  * @vdev_id: vdev id
752  */
753 struct peer_create_params {
754 	const uint8_t *peer_addr;
755 	uint32_t peer_type;
756 	uint32_t vdev_id;
757 };
758 
759 /**
760  * struct peer_remove_params - peer remove cmd parameter
761  * @bssid: bss id
762  * @vdev_id: vdev id
763  * @roam_synch_in_progress: flag to indicate if roaming is in progress
764  */
765 struct peer_remove_params {
766 	uint8_t *bssid;
767 	uint8_t vdev_id;
768 	bool roam_synch_in_progress;
769 };
770 
771 /**
772  * Stats ID enums defined in host
773  */
774 typedef enum {
775 	WMI_HOST_REQUEST_PEER_STAT = 0x01,
776 	WMI_HOST_REQUEST_AP_STAT = 0x02,
777 	WMI_HOST_REQUEST_PDEV_STAT = 0x04,
778 	WMI_HOST_REQUEST_VDEV_STAT = 0x08,
779 	WMI_HOST_REQUEST_BCNFLT_STAT = 0x10,
780 	WMI_HOST_REQUEST_VDEV_RATE_STAT = 0x20,
781 	WMI_HOST_REQUEST_INST_STAT  = 0x40,
782 	WMI_HOST_REQUEST_PEER_EXTD_STAT =  0x80,
783 	WMI_HOST_REQUEST_VDEV_EXTD_STAT =  0x100,
784 	WMI_HOST_REQUEST_NAC_RSSI =  0x200,
785 	WMI_HOST_REQUEST_BCN_STAT =  0x800,
786 	WMI_HOST_REQUEST_BCN_STAT_RESET =  0x1000,
787 	WMI_HOST_REQUEST_PEER_RETRY_STAT = 0x2000,
788 	WMI_HOST_REQUEST_PEER_ADV_STATS = 0x4000,
789 } wmi_host_stats_id;
790 
791 typedef struct {
792 	uint16_t cfg_retry_count;
793 	uint16_t retry_count;
794 } wmi_host_inst_rssi_args;
795 
796 /**
797  * struct stats_request_params - stats_request cmd parameter
798  * @stats_id: Bit mask of all the STATS request are specified with values from wmi_host_stats_id
799  * @vdev_id: vdev id
800  * @pdev_id: pdev_id
801  * @wmi_host_inst_rssi_args: Instantaneous rssi stats args
802  */
803 struct stats_request_params {
804 	uint32_t stats_id;
805 	uint8_t vdev_id;
806 	uint8_t pdev_id;
807 	wmi_host_inst_rssi_args rssi_args;
808 };
809 
810 /**
811  * struct bss_chan_info_request_params - BSS chan info params
812  * @param: parameter value
813  */
814 struct bss_chan_info_request_params {
815 	uint32_t param;
816 };
817 
818 /**
819  * struct wow_cmd_params - wow cmd parameter
820  * @enable: wow enable or disable flag
821  * @can_suspend_link: flag to indicate if link can be suspended
822  * @pause_iface_config: interface config
823  */
824 struct wow_cmd_params {
825 	bool enable;
826 	bool can_suspend_link;
827 	uint8_t pause_iface_config;
828 	uint32_t flags;
829 };
830 
831 /**
832  * struct wow_add_wakeup_params - wow wakeup parameter
833  * @type: param type
834  */
835 struct wow_add_wakeup_params {
836 	uint32_t type;
837 };
838 
839 /**
840  * struct wow_add_wakeup_pattern_params - Add WoW pattern params
841  * @pattern_bytes: pointer to pattern bytes
842  * @mask_bytes: pointer to mask bytes
843  * @pattern_len: pattern length
844  * @pattern_id: pattern id
845  */
846 struct wow_add_wakeup_pattern_params {
847 	uint8_t *pattern_bytes;
848 	uint8_t *mask_bytes;
849 	uint32_t pattern_len;
850 	uint32_t pattern_id;
851 };
852 
853 /**
854  * struct wow_remove_wakeup_pattern params - WoW remove pattern param
855  * @pattern_bytes: pointer to pattern bytes
856  * @mask_bytes: Mask bytes
857  * @pattern_id: pattern identifier
858  */
859 struct wow_remove_wakeup_pattern_params {
860 	uint32_t *pattern_bytes;
861 	uint32_t *mask_bytes;
862 	uint32_t pattern_id;
863 };
864 
865 
866 /**
867  * struct packet_enable_params - packet enable cmd parameter
868  * @vdev_id: vdev id
869  * @enable: flag to indicate if parameter can be enabled or disabled
870  */
871 struct packet_enable_params {
872 	uint8_t vdev_id;
873 	bool enable;
874 };
875 
876 /**
877  * struct suspend_params - suspend cmd parameter
878  * @disable_target_intr: disable target interrupt
879  */
880 struct suspend_params {
881 	uint8_t disable_target_intr;
882 };
883 
884 /**
885  * struct pdev_params - pdev set cmd parameter
886  * @param_id: parameter id
887  * @param_value: parameter value
888  * @is_host_pdev_id: indicate whether pdev_id is host pdev_id or not
889  */
890 struct pdev_params {
891 	uint32_t param_id;
892 	uint32_t param_value;
893 	bool is_host_pdev_id;
894 };
895 
896 /**
897  * struct fd_params - FD cmd parameter
898  * @vdev_id: vdev id
899  * @frame_ctrl: frame control field
900  * @wbuf: FD buffer
901  */
902 struct fd_params {
903 	uint8_t vdev_id;
904 	uint16_t frame_ctrl;
905 	qdf_nbuf_t wbuf;
906 };
907 
908 /**
909  * struct bcn_prb_template_params - beacon probe template parameter
910  * @vdev_id: vdev id
911  * @buf_len: Template length
912  * @caps: capabilities field
913  * @erp: ERP field
914  */
915 struct bcn_prb_template_params {
916 	uint8_t vdev_id;
917 	int buf_len;
918 	uint16_t caps;
919 	uint8_t erp;
920 };
921 
922 #define WMI_MAX_SUPPORTED_RATES 128
923 /**
924  * struct target_rate_set - Rate set bitmap
925  * @num_rate: number of rates in rates bitmap
926  * @rates: rates (each 8bit value) packed into a 32 bit word.
927  *      the rates are filled from least significant byte to most
928  *      significant byte.
929  */
930 typedef struct {
931 	uint32_t num_rates;
932 	uint32_t rates[(WMI_MAX_SUPPORTED_RATES / 4) + 1];
933 } target_rate_set;
934 
935 
936 #define WMI_HOST_MAX_NUM_SS		8
937 #define WMI_HOST_MAX_HECAP_PHY_SIZE	3
938 #define WMI_HOST_MAX_HECAP_MAC_SIZE	2
939 #define WMI_HOST_HECAP_MAC_WORD1	0
940 #define WMI_HOST_HECAP_MAC_WORD2	1
941 #define WMI_HOST_MAX_HE_RATE_SET	3
942 
943 #define WMI_HOST_HE_INVALID_MCSNSSMAP (0xFFFF)
944 #define WMI_HOST_HE_TXRX_MCS_NSS_IDX_80    0
945 #define WMI_HOST_HE_TXRX_MCS_NSS_IDX_160   1
946 #define WMI_HOST_HE_TXRX_MCS_NSS_IDX_80_80 2
947 
948 /**
949  * struct wmi_host_ppe_threshold -PPE threshold
950  * @numss_m1: NSS - 1
951  * @ru_bit_mask: RU bit mask indicating the supported RU's
952  * @ppet16_ppet8_ru3_ru0: ppet8 and ppet16 for max num ss
953  */
954 struct wmi_host_ppe_threshold {
955 	uint32_t numss_m1;
956 	uint32_t ru_bit_mask;
957 	uint32_t ppet16_ppet8_ru3_ru0[WMI_HOST_MAX_NUM_SS];
958 };
959 
960 /**
961  * struct wmi_host_mac_addr - host mac addr 2 word representation of MAC addr
962  * @mac_addr31to0: upper 4 bytes of  MAC address
963  * @mac_addr47to32: lower 2 bytes of  MAC address
964  */
965 typedef struct {
966 	uint32_t mac_addr31to0;
967 	uint32_t mac_addr47to32;
968 } wmi_host_mac_addr;
969 
970 /**
971  * struct peer_assoc_params - peer assoc cmd parameter
972  * @vdev_id: vdev id
973  * @peer_new_assoc: peer association type
974  * @peer_associd: peer association id
975  * @peer_caps: peer capabalities
976  * @peer_listen_intval: peer listen interval
977  * @peer_ht_caps: HT capabalities
978  * @peer_max_mpdu: 0 : 8k , 1 : 16k, 2 : 32k, 3 : 64k
979  * @peer_mpdu_density: 3 : 0~7 : 2^(11nAMPDUdensity -4)
980  * @peer_rate_caps: peer rate capabalities
981  * @peer_nss: peer nss
982  * @peer_phymode: peer phymode
983  * @peer_ht_info: peer HT info
984  * @peer_legacy_rates: peer legacy rates
985  * @peer_ht_rates: peer ht rates
986  * @rx_max_rate: max rx rates
987  * @rx_mcs_set: rx mcs
988  * @tx_max_rate: max tx rates
989  * @tx_mcs_set: tx mcs
990  * @vht_capable: VHT capabalities
991  * @min_data_rate: Peer minimum rate
992  * @tx_max_mcs_nss: max tx MCS and NSS
993  * @peer_bw_rxnss_override: Peer BW RX NSS overridden or not.
994  * @is_pmf_enabled: PMF enabled
995  * @is_wme_set: WME enabled
996  * @qos_flag: QoS Flags
997  * @apsd_flag: APSD flags
998  * @ht_flag: HT flags
999  * @bw_40: 40 capabale
1000  * @bw_80: 80 capabale
1001  * @bw_160: 160 capabale
1002  * @stbc_flag: STBC flag
1003  * @ldpc_flag: LDPC flag
1004  * @static_mimops_flag: statis MIMO PS flags
1005  * @dynamic_mimops_flag: Dynamic MIMO PS flags
1006  * @spatial_mux_flag: spatial MUX flags
1007  * @vht_flag: VHT flags
1008  * @vht_ng_flag: VHT on 11N/G flags
1009  * @need_ptk_4_way: Needs 4 way handshake
1010  * @need_gtk_2_way: Needs 2 way GTK
1011  * @auth_flag: Is peer authenticated
1012  * @safe_mode_enabled: Safe enabled for this peer
1013  * @amsdu_disable: AMSDU disble
1014  * @peer_mac: Peer mac address
1015  * @he_flag: HE flags
1016  * @twt_requester: TWT Requester Support bit in Extended Capabilities element
1017  * @twt_responder: TWT Responder Support bit in Extended Capabilities element
1018  * @peer_he_cap_macinfo: Peer HE Cap MAC info
1019  * @peer_he_ops: Peer HE operation info
1020  * @peer_he_cap_phyinfo: Peer HE Cap PHY info
1021  * @peer_he_cap_info_internal: Peer HE internal PHY capability info
1022  * @peer_he_caps_6ghz: Peer HE 6GHz Band Capabilities info
1023  * @peer_he_mcs_count: Peer HE MCS TX/RX MAP count
1024  * @peer_he_rx_mcs_set: Peer HE RX MCS MAP
1025  * @peer_he_tx_mcs_set: Peer HE TX MCS MAP
1026  * @peer_ppet: Peer HE PPET info
1027  */
1028 struct peer_assoc_params {
1029 	uint32_t vdev_id;
1030 	uint32_t peer_new_assoc;
1031 	uint32_t peer_associd;
1032 	uint32_t peer_caps;
1033 	uint32_t peer_listen_intval;
1034 	uint32_t peer_ht_caps;
1035 	uint32_t peer_max_mpdu;
1036 	uint32_t peer_mpdu_density;
1037 	uint32_t peer_rate_caps;
1038 	uint32_t peer_nss;
1039 	uint32_t peer_vht_caps;
1040 	uint32_t peer_phymode;
1041 	uint32_t peer_ht_info[2];
1042 	target_rate_set peer_legacy_rates;
1043 	target_rate_set peer_ht_rates;
1044 	uint32_t rx_max_rate;
1045 	uint32_t rx_mcs_set;
1046 	uint32_t tx_max_rate;
1047 	uint32_t tx_mcs_set;
1048 	uint8_t vht_capable;
1049 	uint8_t min_data_rate;
1050 	uint32_t peer_bw_rxnss_override;
1051 	uint32_t tx_max_mcs_nss;
1052 	uint32_t is_pmf_enabled:1,
1053 		 is_wme_set:1,
1054 		 qos_flag:1,
1055 		 apsd_flag:1,
1056 		 ht_flag:1,
1057 		 bw_40:1,
1058 		 bw_80:1,
1059 		 bw_160:1,
1060 		 stbc_flag:1,
1061 		 ldpc_flag:1,
1062 		 static_mimops_flag:1,
1063 		 dynamic_mimops_flag:1,
1064 		 spatial_mux_flag:1,
1065 		 vht_flag:1,
1066 		 vht_ng_flag:1,
1067 		 need_ptk_4_way:1,
1068 		 need_gtk_2_way:1,
1069 		 auth_flag:1,
1070 		 safe_mode_enabled:1,
1071 		 amsdu_disable:1,
1072 		 p2p_capable_sta:1,
1073 		 inter_bss_peer:1;
1074 	/* Use common structure */
1075 	uint8_t peer_mac[QDF_MAC_ADDR_SIZE];
1076 	bool he_flag;
1077 	bool twt_requester;
1078 	bool twt_responder;
1079 	uint32_t peer_he_cap_macinfo[WMI_HOST_MAX_HECAP_MAC_SIZE];
1080 	uint32_t peer_he_ops;
1081 	uint32_t peer_he_cap_phyinfo[WMI_HOST_MAX_HECAP_PHY_SIZE];
1082 	uint32_t peer_he_cap_info_internal;
1083 	uint32_t peer_he_caps_6ghz;
1084 	uint32_t peer_he_mcs_count;
1085 	uint32_t peer_he_rx_mcs_set[WMI_HOST_MAX_HE_RATE_SET];
1086 	uint32_t peer_he_tx_mcs_set[WMI_HOST_MAX_HE_RATE_SET];
1087 	struct wmi_host_ppe_threshold peer_ppet;
1088 	u_int8_t peer_bsscolor_rept_info;
1089 };
1090 
1091 /**
1092  * struct ap_ps_params - ap ps cmd parameter
1093  * @vdev_id: vdev id
1094  * @param: ap ps parameter
1095  * @value: ap ps parameter value
1096  */
1097 struct ap_ps_params {
1098 	uint32_t vdev_id;
1099 	uint32_t param;
1100 	uint32_t value;
1101 };
1102 
1103 #define WMI_HOST_SCAN_CHAN_FREQ_SHIFT	0
1104 #define WMI_HOST_SCAN_CHAN_FREQ_MASK	0xffff
1105 #define WMI_HOST_SCAN_CHAN_MODE_SHIFT	16
1106 #define WMI_HOST_SCAN_CHAN_MODE_MASK	0xff
1107 
1108 #define WMI_HOST_MAX_CHANS_PER_WMI_CMD  58
1109 
1110 /**
1111  * struct scan_chan_list_params  - scan channel list cmd parameter
1112  * @pdev_id: pdev_id
1113  * @num_chan: no of scan channels
1114  * @nallchans: nall chans
1115  * @append: append to existing chan list
1116  * @max_bw_support_present: max BW support present
1117  * @ch_param: pointer to channel_paramw
1118  */
1119 struct scan_chan_list_params {
1120 	uint32_t pdev_id;
1121 	uint16_t nallchans;
1122 	bool append;
1123 	bool max_bw_support_present;
1124 	struct channel_param ch_param[1];
1125 };
1126 
1127 #ifdef QCA_SUPPORT_AGILE_DFS
1128 /**
1129  * struct vdev_adfs_ch_cfg_params - Agile dfs channel set request params
1130  * @vdev_id: Vdev indentifier
1131  * @ocac_mode: Off Channel CAC mode
1132  * @min_duration_ms: Minimum Off channel CAC duration
1133  * @max_duration_ms: Maximum Off channel CAC duration
1134  * @chan_freq: channel number of precac channel
1135  * @chan_width: Precac Channel width
1136  * @center_freq1: Agile preCAC channel frequency in MHz for 20/40/80/160
1137  *                and left center frequency(5690MHz) for restricted 80p80.
1138  * @center_freq2: Second segment Agile frequency if applicable. 0 for
1139  *                20/40/80/160 and right center frequency(5775MHz) for
1140  *                restricted 80p80.
1141  */
1142 struct vdev_adfs_ch_cfg_params {
1143 	uint32_t vdev_id;
1144 	uint32_t ocac_mode;  /* WMI_ADFS_OCAC_MODE */
1145 	uint32_t min_duration_ms;
1146 	uint32_t max_duration_ms;
1147 	uint32_t chan_freq;
1148 	uint32_t chan_width;
1149 	uint32_t center_freq1; /* in MHz */
1150 	uint32_t center_freq2; /* in MHz */
1151 };
1152 
1153 /**
1154  * struct vdev_adfs_ch_cfg_params - Agile dfs ocac abort command to stop precac.
1155  * @vdev_id: Vdev indentifier
1156  */
1157 struct vdev_adfs_abort_params {
1158 	uint32_t vdev_id;
1159 };
1160 #endif
1161 /**
1162  * struct fw_hang_params - fw hang command parameters
1163  * @type: 0:unused 1: ASSERT, 2:not respond detect command, 3:simulate ep-full
1164  * @delay_time_ms: 0xffffffff means the simulate will delay for random time (0 ~0xffffffff ms)
1165  */
1166 struct fw_hang_params {
1167 	uint32_t type;
1168 	uint32_t delay_time_ms;
1169 };
1170 
1171 /**
1172  * struct pdev_utf_params - pdev utf command parameters
1173  * @utf_payload:
1174  * @len:
1175  * @is_ar900b: is it 900b target
1176  */
1177 struct pdev_utf_params {
1178 	uint8_t *utf_payload;
1179 	uint32_t len;
1180 	bool is_ar900b;
1181 };
1182 
1183 /*Adding this due to dependency on wmi_unified.h
1184  */
1185 typedef struct {
1186 	uint32_t len;
1187 	uint32_t msgref;
1188 	uint32_t segmentInfo;
1189 } QVIT_SEG_HDR_INFO_STRUCT;
1190 
1191 struct pdev_qvit_params {
1192 	uint8_t *utf_payload;
1193 	uint32_t len;
1194 };
1195 /**
1196  * struct crash_inject - crash inject command parameters
1197  * @type: crash inject type
1198  * @delay_time_ms: time in milliseconds for FW to delay the crash
1199  */
1200 struct crash_inject {
1201 	uint32_t type;
1202 	uint32_t delay_time_ms;
1203 };
1204 
1205 /**
1206  * struct dbglog_params - fw deboglog command parameters
1207  * @param: command parameter
1208  * @val: parameter value
1209  * @module_id_bitmap: fixed length module id bitmap
1210  * @bitmap_len: module id bitmap length
1211  * @cfgvalid: cfgvalid
1212  */
1213 struct dbglog_params {
1214 	uint32_t param;
1215 	uint32_t val;
1216 	uint32_t *module_id_bitmap;
1217 	uint32_t bitmap_len;
1218 	uint32_t cfgvalid[3];
1219 };
1220 
1221 /**
1222  * struct seg_hdr_info - header info
1223  * @len: length
1224  * @msgref: message reference
1225  * @segmentInfo: segment info
1226  * @pad: padding
1227  */
1228 struct seg_hdr_info {
1229 	uint32_t len;
1230 	uint32_t msgref;
1231 	uint32_t segmentInfo;
1232 	uint32_t pad;
1233 };
1234 
1235 /**
1236  * struct tx_send_params - TX parameters
1237  * @pwr: Tx frame transmission power
1238  * @mcs_mask: Modulation and coding index mask for transmission
1239  *	      bit  0 -> CCK 1 Mbps rate is allowed
1240  *	      bit  1 -> CCK 2 Mbps rate is allowed
1241  *	      bit  2 -> CCK 5.5 Mbps rate is allowed
1242  *	      bit  3 -> CCK 11 Mbps rate is allowed
1243  *	      bit  4 -> OFDM BPSK modulation, 1/2 coding rate is allowed
1244  *	      bit  5 -> OFDM BPSK modulation, 3/4 coding rate is allowed
1245  *	      bit  6 -> OFDM QPSK modulation, 1/2 coding rate is allowed
1246  *	      bit  7 -> OFDM QPSK modulation, 3/4 coding rate is allowed
1247  *	      bit  8 -> OFDM 16-QAM modulation, 1/2 coding rate is allowed
1248  *	      bit  9 -> OFDM 16-QAM modulation, 3/4 coding rate is allowed
1249  *	      bit 10 -> OFDM 64-QAM modulation, 2/3 coding rate is allowed
1250  *	      bit 11 -> OFDM 64-QAM modulation, 3/4 coding rate is allowed
1251  * @nss_mask: Spatial streams permitted
1252  *	      bit 0: if set, Nss = 1 (non-MIMO) is permitted
1253  *	      bit 1: if set, Nss = 2 (2x2 MIMO) is permitted
1254  *	      bit 2: if set, Nss = 3 (3x3 MIMO) is permitted
1255  *	      bit 3: if set, Nss = 4 (4x4 MIMO) is permitted
1256  *	      bit 4: if set, Nss = 5 (5x5 MIMO) is permitted
1257  *	      bit 5: if set, Nss = 6 (6x6 MIMO) is permitted
1258  *	      bit 6: if set, Nss = 7 (7x7 MIMO) is permitted
1259  *	      bit 7: if set, Nss = 8 (8x8 MIMO) is permitted
1260  *            If no bits are set, target will choose what NSS type to use
1261  * @retry_limit: Maximum number of retries before ACK
1262  * @chain_mask: Chains to be used for transmission
1263  * @bw_mask: Bandwidth to be used for transmission
1264  *	     bit  0 -> 5MHz
1265  *	     bit  1 -> 10MHz
1266  *	     bit  2 -> 20MHz
1267  *	     bit  3 -> 40MHz
1268  *	     bit  4 -> 80MHz
1269  *	     bit  5 -> 160MHz
1270  *	     bit  6 -> 80_80MHz
1271  * @preamble_type: Preamble types for transmission
1272  *	     bit 0: if set, OFDM
1273  *	     bit 1: if set, CCK
1274  *	     bit 2: if set, HT
1275  *	     bit 3: if set, VHT
1276  *	     bit 4: if set, HE
1277  * @frame_type: Data or Management frame
1278  *	        Data:1 Mgmt:0
1279  * @cfr_enable: flag to enable CFR capture
1280  *              0:disable 1:enable
1281  */
1282 struct tx_send_params {
1283 	uint32_t pwr:8,
1284 		 mcs_mask:12,
1285 		 nss_mask:8,
1286 		 retry_limit:4;
1287 	uint32_t chain_mask:8,
1288 		 bw_mask:7,
1289 		 preamble_type:5,
1290 		 frame_type:1,
1291 		 cfr_enable:1,
1292 		 reserved:10;
1293 };
1294 
1295 /**
1296  * struct wmi_mgmt_params - wmi mgmt cmd parameters
1297  * @tx_frame: management tx frame
1298  * @frm_len: frame length
1299  * @vdev_id: vdev id
1300  * @tx_type: type of management frame (determines what callback to use)
1301  * @chanfreq: channel frequency
1302  * @desc_id: descriptor id relyaed back by target
1303  * @pdata: frame data
1304  * @macaddr: macaddr of peer
1305  * @qdf_ctx: qdf context for qdf_nbuf_map
1306  * @tx_param: TX send parameters
1307  * @tx_params_valid: Flag that indicates if TX params are valid
1308  * @use_6mbps: specify whether management frame to transmit should
1309  * @tx_flags: additional configuration flags for mgmt frames
1310  *  use 6 Mbps rather than 1 Mbps min rate(for 5GHz band or P2P)
1311  */
1312 struct wmi_mgmt_params {
1313 	void *tx_frame;
1314 	uint16_t frm_len;
1315 	uint8_t vdev_id;
1316 	uint8_t tx_type;
1317 	uint16_t chanfreq;
1318 	uint16_t desc_id;
1319 	void *pdata;
1320 	uint8_t *macaddr;
1321 	void *qdf_ctx;
1322 	struct tx_send_params tx_param;
1323 	bool tx_params_valid;
1324 	uint8_t use_6mbps;
1325 	uint32_t tx_flags;
1326 };
1327 
1328 /**
1329  * struct wmi_offchan_data_tx_params - wmi offchan data tx cmd parameters
1330  * @tx_frame: management tx frame
1331  * @frm_len: frame length
1332  * @vdev_id: vdev id
1333  * @tx_params_valid: Flag that indicates if TX params are valid
1334  * @chanfreq: channel frequency
1335  * @desc_id: descriptor id relyaed back by target
1336  * @pdata: frame data
1337  * @macaddr: macaddr of peer
1338  * @qdf_ctx: qdf context for qdf_nbuf_map
1339  * @tx_param: TX send parameters
1340  */
1341 struct wmi_offchan_data_tx_params {
1342 	void *tx_frame;
1343 	uint16_t frm_len;
1344 	uint8_t vdev_id;
1345 	bool tx_params_valid;
1346 	uint16_t chanfreq;
1347 	uint16_t desc_id;
1348 	void *pdata;
1349 	uint8_t *macaddr;
1350 	void *qdf_ctx;
1351 	struct tx_send_params tx_param;
1352 };
1353 
1354 /**
1355  * struct sta_uapsd_params - uapsd auto trig params
1356  * @wmm_ac: WMM access category from 0 to 3
1357  * @user_priority: User priority to use in trigger frames
1358  * @service_interval: service interval
1359  * @suspend_interval: suspend interval
1360  * @delay_interval: delay interval
1361  */
1362 struct sta_uapsd_params {
1363 	uint32_t wmm_ac;
1364 	uint32_t user_priority;
1365 	uint32_t service_interval;
1366 	uint32_t suspend_interval;
1367 	uint32_t delay_interval;
1368 };
1369 
1370 /**
1371  * struct ta_uapsd_trig_params - uapsd trigger parameter
1372  * @vdevid: vdev id
1373  * @peer_addr: peer address
1374  * @num_ac: no of access category
1375  * @auto_triggerparam: trigger parameters
1376  */
1377 struct sta_uapsd_trig_params {
1378 	uint32_t vdevid;
1379 	uint8_t peer_addr[QDF_MAC_ADDR_SIZE];
1380 	uint32_t num_ac;
1381 	struct sta_uapsd_params *auto_triggerparam;
1382 };
1383 
1384 #define WMI_NUM_AC                     (4)
1385 #define WMI_MAX_NUM_AC 4
1386 
1387 
1388 enum wmi_peer_rate_report_cond_phy_type {
1389 	WMI_PEER_RATE_REPORT_COND_11B = 0,
1390 	WMI_PEER_RATE_REPORT_COND_11A_G,
1391 	WMI_PEER_RATE_REPORT_COND_11N,
1392 	WMI_PEER_RATE_REPORT_COND_11AC,
1393 	WMI_PEER_RATE_REPORT_COND_MAX_NUM
1394 };
1395 
1396 /**
1397  * struct report_rate_delta - peer specific parameters
1398  * @percent: percentage
1399  * @delta_min: rate min delta
1400  */
1401 struct report_rate_delta {
1402 	uint32_t percent; /* in unit of 12.5% */
1403 	uint32_t delta_min;  /* in unit of Mbps */
1404 };
1405 
1406 /**
1407  * struct report_rate_per_phy - per phy report parameters
1408  * @cond_flags: condition flag val
1409  * @delta: rate delta
1410  * @report_rate_threshold: rate threshold
1411  */
1412 struct report_rate_per_phy {
1413 	/*
1414 	 * PEER_RATE_REPORT_COND_FLAG_DELTA,
1415 	 * PEER_RATE_REPORT_COND_FLAG_THRESHOLD
1416 	 * Any of these two conditions or both of
1417 	 * them can be set.
1418 	 */
1419 	uint32_t cond_flags;
1420 	struct report_rate_delta delta;
1421 	/*
1422 	 * In unit of Mbps. There are at most 4 thresholds
1423 	 * If the threshold count is less than 4, set zero to
1424 	 * the one following the last threshold
1425 	 */
1426 	uint32_t report_rate_threshold[WMI_MAX_NUM_OF_RATE_THRESH];
1427 };
1428 
1429 /**
1430  * struct peer_rate_report_params - peer rate report parameters
1431  * @rate_report_enable: enable rate report param
1432  * @backoff_time: backoff time
1433  * @timer_period: timer
1434  * @report_per_phy: report per phy type
1435  */
1436 struct wmi_peer_rate_report_params {
1437 	uint32_t rate_report_enable;
1438 	uint32_t backoff_time;            /* in unit of msecond */
1439 	uint32_t timer_period;            /* in unit of msecond */
1440 	/*
1441 	 *In the following field, the array index means the phy type,
1442 	 * please see enum wmi_peer_rate_report_cond_phy_type for detail
1443 	 */
1444 	struct report_rate_per_phy report_per_phy[
1445 				WMI_PEER_RATE_REPORT_COND_MAX_NUM];
1446 
1447 };
1448 
1449 /**
1450  * struct t_thermal_cmd_params - thermal command parameters
1451  * @min_temp: minimum temprature
1452  * @max_temp: maximum temprature
1453  * @thermal_enable: thermal enable
1454  */
1455 struct thermal_cmd_params {
1456 	uint16_t min_temp;
1457 	uint16_t max_temp;
1458 	uint8_t thermal_enable;
1459 };
1460 
1461 #define WMI_LRO_IPV4_SEED_ARR_SZ 5
1462 #define WMI_LRO_IPV6_SEED_ARR_SZ 11
1463 
1464 /**
1465  * struct wmi_lro_config_cmd_t - set LRO init parameters
1466  * @lro_enable: indicates whether lro is enabled
1467  * @tcp_flag: If the TCP flags from the packet do not match
1468  * the values in this field after masking with TCP flags mask
1469  * below, packet is not LRO eligible
1470  * @tcp_flag_mask: field for comparing the TCP values provided
1471  * above with the TCP flags field in the received packet
1472  * @toeplitz_hash_ipv4: contains seed needed to compute the flow id
1473  * 5-tuple toeplitz hash for ipv4 packets
1474  * @toeplitz_hash_ipv6: contains seed needed to compute the flow id
1475  * 5-tuple toeplitz hash for ipv6 packets
1476  * @pdev_id: radio on which lro hash is configured
1477  */
1478 struct wmi_lro_config_cmd_t {
1479 	uint32_t lro_enable;
1480 	uint32_t tcp_flag:9,
1481 		tcp_flag_mask:9;
1482 	uint32_t toeplitz_hash_ipv4[WMI_LRO_IPV4_SEED_ARR_SZ];
1483 	uint32_t toeplitz_hash_ipv6[WMI_LRO_IPV6_SEED_ARR_SZ];
1484 	uint32_t pdev_id;
1485 };
1486 
1487 /**
1488  * struct wmi_probe_resp_params - send probe response parameters
1489  * @prb_rsp_template_frm: pointer to template probe response template
1490  * @prb_rsp_template_len: length of probe response template
1491  */
1492 struct wmi_probe_resp_params {
1493 	uint8_t *prb_rsp_template_frm;
1494 	uint32_t prb_rsp_template_len;
1495 };
1496 
1497 /* struct set_key_params: structure containing
1498  *                        installation key parameters
1499  * @vdev_id: vdev id
1500  * @key_len: key length
1501  * @key_idx: key index
1502  * @group_key_idx: group key index for VLAN
1503  * @peer_mac: peer mac address
1504  * @key_flags: key flags, 0:pairwise key, 1:group key, 2:static key
1505  * @key_cipher: key cipher based on security mode
1506  * @key_txmic_len: tx mic length
1507  * @key_rxmic_len: rx mic length
1508  * @key_tsc_counter:  key tx sc counter
1509  * @key_rsc_counter:  key rx sc counter
1510  * @key_rsc_ctr:  key rx sc counter (stack variable, unnecessary heap alloc for
1511  *                key_rsc_counter should be cleaned up eventually)
1512  * @rx_iv: receive IV, applicable only in case of WAPI
1513  * @tx_iv: transmit IV, applicable only in case of WAPI
1514  * @key_data: key data
1515  */
1516 struct set_key_params {
1517 	uint8_t vdev_id;
1518 	uint16_t key_len;
1519 	uint32_t key_idx;
1520 	uint32_t group_key_idx;
1521 	uint8_t peer_mac[QDF_MAC_ADDR_SIZE];
1522 	uint32_t key_flags;
1523 	uint32_t key_cipher;
1524 	uint32_t key_txmic_len;
1525 	uint32_t key_rxmic_len;
1526 	uint64_t key_tsc_counter;
1527 	uint64_t *key_rsc_counter;
1528 	uint64_t key_rsc_ctr;
1529 #if defined(ATH_SUPPORT_WAPI) || defined(FEATURE_WLAN_WAPI)
1530 	uint8_t rx_iv[16];
1531 	uint8_t tx_iv[16];
1532 #endif
1533 	uint8_t key_data[WMI_MAC_MAX_KEY_LENGTH];
1534 };
1535 
1536 /**
1537  * struct scan_mac_oui - oui parameters
1538  * @oui: oui parameters
1539  * @vdev_id: interface id
1540  * @enb_probe_req_sno_randomization: control probe req sequence no randomization
1541  * @ie_whitelist: probe req IE whitelist attrs
1542  */
1543 struct scan_mac_oui {
1544 	uint8_t oui[WMI_WIFI_SCANNING_MAC_OUI_LENGTH];
1545 	uint32_t vdev_id;
1546 	bool enb_probe_req_sno_randomization;
1547 	struct probe_req_whitelist_attr ie_whitelist;
1548 };
1549 
1550 #define WMI_PASSPOINT_REALM_LEN 256
1551 #define WMI_PASSPOINT_ROAMING_CONSORTIUM_ID_NUM 16
1552 #define WMI_PASSPOINT_PLMN_LEN 3
1553 /**
1554  * struct wifi_passpoint_network_param - passpoint network block
1555  * @id: identifier of this network block
1556  * @realm: null terminated UTF8 encoded realm, 0 if unspecified
1557  * @plmn: mcc/mnc combination as per rules, 0s if unspecified
1558  * @roaming_consortium_ids: roaming consortium ids to match, 0s if unspecified
1559  */
1560 struct wifi_passpoint_network_param {
1561 	uint32_t id;
1562 	uint8_t  realm[WMI_PASSPOINT_REALM_LEN];
1563 	uint8_t  plmn[WMI_PASSPOINT_PLMN_LEN];
1564 	int64_t  roaming_consortium_ids[
1565 			WMI_PASSPOINT_ROAMING_CONSORTIUM_ID_NUM];
1566 };
1567 
1568 /**
1569  * struct wifi_passpoint_req_param - passpoint request
1570  * @request_id: request identifier
1571  * @vdev_id: vdev that is the target of the request
1572  * @num_networks: number of valid entries in @networks
1573  * @networks: passpoint networks
1574  */
1575 struct wifi_passpoint_req_param {
1576 	uint32_t request_id;
1577 	uint32_t vdev_id;
1578 	uint32_t num_networks;
1579 	struct wifi_passpoint_network_param networks[];
1580 };
1581 
1582 /* struct mobility_domain_info - structure containing
1583  *                               mobility domain info
1584  * @mdie_present: mobility domain present or not
1585  * @mobility_domain: mobility domain
1586  */
1587 struct mobility_domain_info {
1588 	uint8_t mdie_present;
1589 	uint16_t mobility_domain;
1590 };
1591 
1592 #define WMI_HOST_ROAM_OFFLOAD_NUM_MCS_SET     (16)
1593 
1594 /* This TLV will be filled only in case roam offload
1595  * for wpa2-psk/pmkid/ese/11r is enabled */
1596 typedef struct {
1597 	/*
1598 	 * TLV tag and len; tag equals
1599 	 * WMITLV_TAG_STRUC_wmi_roam_offload_fixed_param
1600 	 */
1601 	uint32_t tlv_header;
1602 	uint32_t rssi_cat_gap;          /* gap for every category bucket */
1603 	uint32_t prefer_5g;             /* prefer select 5G candidate */
1604 	uint32_t select_5g_margin;
1605 	uint32_t reassoc_failure_timeout;       /* reassoc failure timeout */
1606 	uint32_t capability;
1607 	uint32_t ht_caps_info;
1608 	uint32_t ampdu_param;
1609 	uint32_t ht_ext_cap;
1610 	uint32_t ht_txbf;
1611 	uint32_t asel_cap;
1612 	uint32_t qos_enabled;
1613 	uint32_t qos_caps;
1614 	uint32_t wmm_caps;
1615 	/* since this is 4 byte aligned, we don't declare it as tlv array */
1616 	uint32_t mcsset[WMI_HOST_ROAM_OFFLOAD_NUM_MCS_SET >> 2];
1617 	uint32_t ho_delay_for_rx;
1618 	uint32_t roam_preauth_retry_count;
1619 	uint32_t roam_preauth_no_ack_timeout;
1620 } roam_offload_param;
1621 
1622 #define WMI_FILS_MAX_RRK_LENGTH 64
1623 #define WMI_FILS_MAX_RIK_LENGTH WMI_FILS_MAX_RRK_LENGTH
1624 #define WMI_FILS_MAX_REALM_LENGTH 256
1625 #define WMI_FILS_MAX_USERNAME_LENGTH 16
1626 #define WMI_FILS_FT_MAX_LEN 48
1627 
1628 /**
1629  * struct roam_fils_params - Roam FILS params
1630  * @username: username
1631  * @username_length: username length
1632  * @next_erp_seq_num: next ERP sequence number
1633  * @rrk: RRK
1634  * @rrk_length: length of @rrk
1635  * @rik: RIK
1636  * @rik_length: length of @rik
1637  * @realm: realm
1638  * @realm_len: length of @realm
1639  * @fils_ft: xx_key for FT-FILS connection
1640  * @fils_ft_len: length of FT-FILS
1641  */
1642 struct roam_fils_params {
1643 	uint8_t username[WMI_FILS_MAX_USERNAME_LENGTH];
1644 	uint32_t username_length;
1645 	uint32_t next_erp_seq_num;
1646 	uint8_t rrk[WMI_FILS_MAX_RRK_LENGTH];
1647 	uint32_t rrk_length;
1648 	uint8_t rik[WMI_FILS_MAX_RIK_LENGTH];
1649 	uint32_t rik_length;
1650 	uint8_t realm[WMI_FILS_MAX_REALM_LENGTH];
1651 	uint32_t realm_len;
1652 	uint8_t fils_ft[WMI_FILS_FT_MAX_LEN];
1653 	uint8_t fils_ft_len;
1654 };
1655 
1656 /* struct roam_offload_scan_params - structure
1657  *     containing roaming offload scan parameters
1658  * @is_roam_req_valid: flag to tell whether roam req
1659  *                     is valid or NULL
1660  * @mode: stores flags for scan
1661  * @vdev_id: vdev id
1662  * @roam_offload_enabled: flag for offload enable
1663  * @disable_self_roam: disable roaming to self BSSID
1664  * @psk_pmk: pre shared key/pairwise master key
1665  * @pmk_len: length of PMK
1666  * @prefer_5ghz: prefer select 5G candidate
1667  * @roam_rssi_cat_gap: gap for every category bucket
1668  * @select_5ghz_margin: select 5 Ghz margin
1669  * @krk: KRK
1670  * @btk: BTK
1671  * @reassoc_failure_timeout: reassoc failure timeout
1672  * @rokh_id_length: r0kh id length
1673  * @rokh_id: r0kh id
1674  * @roam_key_mgmt_offload_enabled: roam offload flag
1675  * @auth_mode: authentication mode
1676  * @fw_okc: use OKC in firmware
1677  * @fw_pmksa_cache: use PMKSA cache in firmware
1678  * @is_ese_assoc: flag to determine ese assoc
1679  * @mdid: mobility domain info
1680  * @roam_offload_params: roam offload tlv params
1681  * @min_delay_btw_roam_scans: Delay btw two scans
1682  * @roam_trigger_reason_bitmask: Roam reason bitmark
1683  * @roam_offload_params: roam offload tlv params, unused
1684  *     in non tlv target, only for roam offload feature
1685  * @assoc_ie_length: Assoc IE length
1686  * @assoc_ie: Assoc IE buffer
1687  * @add_fils_tlv: add FILS TLV boolean
1688  * @roam_fils_params: roam fils params
1689  * @rct_validity_timer: duration value for which the entries in
1690  * roam candidate table are valid
1691  * @roam_scan_inactivity_time: inactivity monitoring time in ms for which the
1692  * device is considered to be inactive
1693  * @is_sae_same_pmk: Flag to indicate fw whether WLAN_SAE_SINGLE_PMK feature is
1694  * enable or not
1695  * @enable_ft_im_roaming: Flag to enable/disable FT-IM roaming upon receiving
1696  * deauth
1697  * @roam_inactive_data_packet_count: Maximum allowed data packets count during
1698  * roam_scan_inactivity_time.
1699  * @roam_scan_period_after_inactivity: Roam scan period in ms after device is
1700  * in inactive state.
1701  */
1702 struct roam_offload_scan_params {
1703 	uint8_t is_roam_req_valid;
1704 	uint32_t mode;
1705 	uint32_t vdev_id;
1706 #ifdef WLAN_FEATURE_ROAM_OFFLOAD
1707 	uint8_t roam_offload_enabled;
1708 	bool disable_self_roam;
1709 	uint8_t psk_pmk[WMI_ROAM_SCAN_PSK_SIZE];
1710 	uint32_t pmk_len;
1711 	uint8_t prefer_5ghz;
1712 	uint8_t roam_rssi_cat_gap;
1713 	uint8_t select_5ghz_margin;
1714 	uint8_t krk[WMI_KRK_KEY_LEN];
1715 	uint8_t btk[WMI_BTK_KEY_LEN];
1716 	uint32_t reassoc_failure_timeout;
1717 	uint32_t rokh_id_length;
1718 	uint8_t rokh_id[WMI_ROAM_R0KH_ID_MAX_LEN];
1719 	uint8_t roam_key_mgmt_offload_enabled;
1720 	int auth_mode;
1721 	bool fw_okc;
1722 	bool fw_pmksa_cache;
1723 	uint32_t rct_validity_timer;
1724 	bool is_adaptive_11r;
1725 	bool is_sae_same_pmk;
1726 	bool enable_ft_im_roaming;
1727 #endif
1728 	uint32_t min_delay_btw_roam_scans;
1729 	uint32_t roam_trigger_reason_bitmask;
1730 	bool is_ese_assoc;
1731 	bool is_11r_assoc;
1732 	struct mobility_domain_info mdid;
1733 #ifdef WLAN_FEATURE_ROAM_OFFLOAD
1734 	roam_offload_param roam_offload_params;
1735 #endif
1736 	uint32_t assoc_ie_length;
1737 	uint8_t  assoc_ie[MAX_ASSOC_IE_LENGTH];
1738 	bool add_fils_tlv;
1739 	uint32_t roam_scan_inactivity_time;
1740 	uint32_t roam_inactive_data_packet_count;
1741 	uint32_t roam_scan_period_after_inactivity;
1742 #ifdef WLAN_FEATURE_FILS_SK
1743 	struct roam_fils_params roam_fils_params;
1744 #endif
1745 };
1746 
1747 /**
1748  * struct wifi_epno_network - enhanced pno network block
1749  * @ssid: ssid
1750  * @rssi_threshold: threshold for considering this SSID as found, required
1751  *		    granularity for this threshold is 4dBm to 8dBm
1752  * @flags: WIFI_PNO_FLAG_XXX
1753  * @auth_bit_field: auth bit field for matching WPA IE
1754  */
1755 struct wifi_epno_network_params {
1756 	struct wlan_ssid  ssid;
1757 	int8_t       rssi_threshold;
1758 	uint8_t      flags;
1759 	uint8_t      auth_bit_field;
1760 };
1761 
1762 /**
1763  * struct wifi_enhanced_pno_params - enhanced pno network params
1764  * @request_id: request id number
1765  * @vdev_id: vdev id
1766  * @min_5ghz_rssi: minimum 5GHz RSSI for a BSSID to be considered
1767  * @min_24ghz_rssi: minimum 2.4GHz RSSI for a BSSID to be considered
1768  * @initial_score_max: maximum score that a network can have before bonuses
1769  * @current_connection_bonus: only report when there is a network's score this
1770  *    much higher than the current connection
1771  * @same_network_bonus: score bonus for all n/w with the same network flag
1772  * @secure_bonus: score bonus for networks that are not open
1773  * @band_5ghz_bonus: 5GHz RSSI score bonus (applied to all 5GHz networks)
1774  * @num_networks: number of ssids
1775  * @networks: EPNO networks
1776  */
1777 struct wifi_enhanced_pno_params {
1778 	uint32_t    request_id;
1779 	uint32_t    vdev_id;
1780 	uint32_t    min_5ghz_rssi;
1781 	uint32_t    min_24ghz_rssi;
1782 	uint32_t    initial_score_max;
1783 	uint32_t    current_connection_bonus;
1784 	uint32_t    same_network_bonus;
1785 	uint32_t    secure_bonus;
1786 	uint32_t    band_5ghz_bonus;
1787 	uint32_t    num_networks;
1788 	struct wifi_epno_network_params networks[];
1789 };
1790 
1791 enum {
1792 	WMI_AP_RX_DATA_OFFLOAD             = 0x00,
1793 	WMI_STA_RX_DATA_OFFLOAD            = 0x01,
1794 };
1795 
1796 /**
1797  * enum extscan_configuration_flags - extscan config flags
1798  * @WMI_EXTSCAN_LP_EXTENDED_BATCHING: extended batching
1799  */
1800 enum wmi_extscan_configuration_flags {
1801 	WMI_EXTSCAN_LP_EXTENDED_BATCHING = 0x00000001,
1802 };
1803 
1804 /**
1805  * enum extscan_report_events_type - extscan report events type
1806  * @EXTSCAN_REPORT_EVENTS_BUFFER_FULL: report only when scan history is % full
1807  * @EXTSCAN_REPORT_EVENTS_EACH_SCAN: report a scan completion event after scan
1808  * @EXTSCAN_REPORT_EVENTS_FULL_RESULTS: forward scan results
1809  *		(beacons/probe responses + IEs)
1810  *		in real time to HAL, in addition to completion events.
1811  *		Note: To keep backward compatibility,
1812  *		fire completion events regardless of REPORT_EVENTS_EACH_SCAN.
1813  * @EXTSCAN_REPORT_EVENTS_NO_BATCH: controls batching,
1814  *		0 => batching, 1 => no batching
1815  */
1816 enum wmi_extscan_report_events_type {
1817 	WMI_EXTSCAN_REPORT_EVENTS_BUFFER_FULL   = 0x00,
1818 	WMI_EXTSCAN_REPORT_EVENTS_EACH_SCAN     = 0x01,
1819 	WMI_EXTSCAN_REPORT_EVENTS_FULL_RESULTS  = 0x02,
1820 	WMI_EXTSCAN_REPORT_EVENTS_NO_BATCH      = 0x04,
1821 };
1822 
1823 /**
1824  * struct extscan_capabilities_params - ext scan capablities
1825  * @request_id: request_id
1826  * @vdev_id: vdev id
1827  */
1828 struct extscan_capabilities_params {
1829 	uint32_t request_id;
1830 	uint8_t vdev_id;
1831 };
1832 
1833 /**
1834  * struct extscan_capabilities_reset_params - ext scan capablities reset
1835  *                                            parameter
1836  * @request_id: request_id
1837  * @vdev_id: vdev id
1838  */
1839 struct extscan_capabilities_reset_params {
1840 	uint32_t request_id;
1841 	uint8_t vdev_id;
1842 };
1843 
1844 /**
1845  * struct extscan_bssid_hotlist_reset_params - ext scan hotlist reset parameter
1846  * @request_id: request_id
1847  * @vdev_id: vdev id
1848  */
1849 struct extscan_bssid_hotlist_reset_params {
1850 	uint32_t request_id;
1851 	uint8_t vdev_id;
1852 };
1853 
1854 /**
1855  * struct extscan_stop_req_params - ext scan stop parameter
1856  * @request_id: request_id
1857  * @vdev_id: vdev id
1858  */
1859 struct extscan_stop_req_params {
1860 	uint32_t request_id;
1861 	uint8_t vdev_id;
1862 };
1863 
1864 /**
1865  * struct ap_threshold_params - ap threshold parameter
1866  * @bssid: mac address
1867  * @low: low threshold
1868  * @high: high threshold
1869  */
1870 struct ap_threshold_params {
1871 	struct qdf_mac_addr bssid;
1872 	int32_t low;
1873 	int32_t high;
1874 };
1875 
1876 /**
1877  * struct extscan_set_sig_changereq_params - ext scan channel parameter
1878  * @request_id: request_id
1879  * @vdev_id: vdev id
1880  * @rssi_sample_size: Number of samples for averaging RSSI
1881  * @lostap_sample_size: Number of missed samples to confirm AP loss
1882  * @min_breaching: Number of APs breaching threshold required for firmware
1883  * @num_ap: no of scanned ap
1884  * @ap: ap threshold parameter
1885  */
1886 struct extscan_set_sig_changereq_params {
1887 	uint32_t request_id;
1888 	uint8_t vdev_id;
1889 	uint32_t rssi_sample_size;
1890 	uint32_t lostap_sample_size;
1891 	uint32_t min_breaching;
1892 	uint32_t num_ap;
1893 	struct ap_threshold_params ap[WMI_EXTSCAN_MAX_SIGNIFICANT_CHANGE_APS];
1894 };
1895 
1896 /**
1897  * struct extscan_cached_result_params - ext scan cached parameter
1898  * @request_id: request_id
1899  * @vdev_id: vdev id
1900  * @flush: cached results flush
1901  */
1902 struct extscan_cached_result_params {
1903 	uint32_t request_id;
1904 	uint8_t vdev_id;
1905 	bool flush;
1906 };
1907 
1908 #define WMI_WLAN_EXTSCAN_MAX_CHANNELS                 36
1909 #define WMI_WLAN_EXTSCAN_MAX_BUCKETS                  16
1910 #define WMI_WLAN_EXTSCAN_MAX_HOTLIST_APS              128
1911 #define WMI_WLAN_EXTSCAN_MAX_SIGNIFICANT_CHANGE_APS   64
1912 #define WMI_EXTSCAN_MAX_HOTLIST_SSIDS            8
1913 
1914 /**
1915  * struct wifi_scan_channelspec_params - wifi scan channel parameter
1916  * @channel: Frequency in MHz
1917  * @dwell_time_ms: dwell time in milliseconds
1918  * @passive: passive scan
1919  * @channel_class: channel class
1920  */
1921 struct wifi_scan_channelspec_params {
1922 	uint32_t channel;
1923 	uint32_t dwell_time_ms;
1924 	bool passive;
1925 	uint8_t channel_class;
1926 };
1927 
1928 /**
1929  * enum wmi_wifi_band - wifi band
1930  * @WMI_WIFI_BAND_UNSPECIFIED: unspecified band
1931  * @WMI_WIFI_BAND_BG: 2.4 GHz
1932  * @WMI_WIFI_BAND_A: 5 GHz without DFS
1933  * @WMI_WIFI_BAND_ABG: 2.4 GHz + 5 GHz; no DFS
1934  * @WMI_WIFI_BAND_A_DFS_ONLY: 5 GHz DFS only
1935  * @WMI_WIFI_BAND_A_WITH_DFS: 5 GHz with DFS
1936  * @WMI_WIFI_BAND_ABG_WITH_DFS: 2.4 GHz + 5 GHz with DFS
1937  * @WMI_WIFI_BAND_MAX: max range
1938  */
1939 enum wmi_wifi_band {
1940 	WMI_WIFI_BAND_UNSPECIFIED,
1941 	WMI_WIFI_BAND_BG = 1,
1942 	WMI_WIFI_BAND_A = 2,
1943 	WMI_WIFI_BAND_ABG = 3,
1944 	WMI_WIFI_BAND_A_DFS_ONLY = 4,
1945 	/* 5 is reserved */
1946 	WMI_WIFI_BAND_A_WITH_DFS = 6,
1947 	WMI_WIFI_BAND_ABG_WITH_DFS = 7,
1948 	/* Keep it last */
1949 	WMI_WIFI_BAND_MAX
1950 };
1951 
1952 /**
1953  * struct wifi_scan_bucket_params - wifi scan bucket spec
1954  * @bucket: bucket identifier
1955  * @band: wifi band
1956  * @period: Desired period, in millisecond; if this is too
1957  *		low, the firmware should choose to generate results as fast as
1958  *		it can instead of failing the command byte
1959  *		for exponential backoff bucket this is the min_period
1960  * @report_events: 0 => normal reporting (reporting rssi history
1961  *		only, when rssi history buffer is % full)
1962  *		1 => same as 0 + report a scan completion event after scanning
1963  *		this bucket
1964  *		2 => same as 1 + forward scan results
1965  *		(beacons/probe responses + IEs) in real time to HAL
1966  * @max_period: if max_period is non zero or different than period,
1967  *		then this bucket is an exponential backoff bucket and
1968  *		the scan period will grow exponentially as per formula:
1969  *		actual_period(N) = period ^ (N/(step_count+1)) to a
1970  *		maximum period of max_period
1971  * @exponent: for exponential back off bucket: multiplier:
1972  *		new_period = old_period * exponent
1973  * @step_count: for exponential back off bucket, number of scans performed
1974  *		at a given period and until the exponent is applied
1975  * @num_channels: channels to scan; these may include DFS channels
1976  *		Note that a given channel may appear in multiple buckets
1977  * @min_dwell_time_active: per bucket minimum active dwell time
1978  * @max_dwell_time_active: per bucket maximum active dwell time
1979  * @min_dwell_time_passive: per bucket minimum passive dwell time
1980  * @max_dwell_time_passive: per bucket maximum passive dwell time
1981  * @channels: Channel list
1982  */
1983 struct wifi_scan_bucket_params {
1984 	uint8_t         bucket;
1985 	enum wmi_wifi_band   band;
1986 	uint32_t        period;
1987 	uint32_t        report_events;
1988 	uint32_t        max_period;
1989 	uint32_t        exponent;
1990 	uint32_t        step_count;
1991 	uint32_t        num_channels;
1992 	uint32_t        min_dwell_time_active;
1993 	uint32_t        max_dwell_time_active;
1994 	uint32_t        min_dwell_time_passive;
1995 	uint32_t        max_dwell_time_passive;
1996 	struct wifi_scan_channelspec_params
1997 			channels[WMI_WLAN_EXTSCAN_MAX_CHANNELS];
1998 };
1999 
2000 /**
2001  * struct wifi_scan_cmd_req_params - wifi scan command request params
2002  * @base_period: base timer period
2003  * @max_ap_per_scan: max ap per scan
2004  * @report_threshold_percent: report threshold
2005  *	in %, when buffer is this much full, wake up host
2006  * @report_threshold_num_scans: report threshold number of scans
2007  *	in number of scans, wake up host after these many scans
2008  * @request_id: request id
2009  * @vdev_id: vdev that is the target of the request
2010  * @num_buckets: number of buckets
2011  * @min_dwell_time_active: per bucket minimum active dwell time
2012  * @max_dwell_time_active: per bucket maximum active dwell time
2013  * @min_dwell_time_passive: per bucket minimum passive dwell time
2014  * @max_dwell_time_passive: per bucket maximum passive dwell time
2015  * @configuration_flags: configuration flags
2016  * @extscan_adaptive_dwell_mode: adaptive dwelltime mode for extscan
2017  * @buckets: buckets array
2018  */
2019 struct wifi_scan_cmd_req_params {
2020 	uint32_t base_period;
2021 	uint32_t max_ap_per_scan;
2022 	uint32_t report_threshold_percent;
2023 	uint32_t report_threshold_num_scans;
2024 	uint32_t request_id;
2025 	uint8_t  vdev_id;
2026 	uint32_t num_buckets;
2027 	uint32_t min_dwell_time_active;
2028 	uint32_t max_dwell_time_active;
2029 	uint32_t min_dwell_time_passive;
2030 	uint32_t max_dwell_time_passive;
2031 	uint32_t configuration_flags;
2032 	enum scan_dwelltime_adaptive_mode extscan_adaptive_dwell_mode;
2033 	struct wifi_scan_bucket_params buckets[WMI_WLAN_EXTSCAN_MAX_BUCKETS];
2034 };
2035 
2036 /**
2037  * struct mac_ts_info_tfc - mac ts info parameters
2038  * @burstSizeDefn: burst size
2039  * @reserved: reserved
2040  * @ackPolicy: ack policy
2041  * @psb: psb
2042  * @aggregation: aggregation
2043  * @accessPolicy: access policy
2044  * @direction: direction
2045  * @tsid: direction
2046  * @trafficType: traffic type
2047  */
2048 struct mac_ts_info_tfc {
2049 #ifndef ANI_LITTLE_BIT_ENDIAN
2050 	uint8_t burstSizeDefn:1;
2051 	uint8_t reserved:7;
2052 #else
2053 	uint8_t reserved:7;
2054 	uint8_t burstSizeDefn:1;
2055 #endif
2056 
2057 #ifndef ANI_LITTLE_BIT_ENDIAN
2058 	uint16_t ackPolicy:2;
2059 	uint16_t userPrio:3;
2060 	uint16_t psb:1;
2061 	uint16_t aggregation:1;
2062 	uint16_t accessPolicy:2;
2063 	uint16_t direction:2;
2064 	uint16_t tsid:4;
2065 	uint16_t trafficType:1;
2066 #else
2067 	uint16_t trafficType:1;
2068 	uint16_t tsid:4;
2069 	uint16_t direction:2;
2070 	uint16_t accessPolicy:2;
2071 	uint16_t aggregation:1;
2072 	uint16_t psb:1;
2073 	uint16_t userPrio:3;
2074 	uint16_t ackPolicy:2;
2075 #endif
2076 } qdf_packed;
2077 
2078 /**
2079  * struct mac_ts_info_sch - mac ts info schedule parameters
2080  * @rsvd: reserved
2081  * @schedule: schedule bit
2082  */
2083 struct mac_ts_info_sch {
2084 #ifndef ANI_LITTLE_BIT_ENDIAN
2085 	uint8_t rsvd:7;
2086 	uint8_t schedule:1;
2087 #else
2088 	uint8_t schedule:1;
2089 	uint8_t rsvd:7;
2090 #endif
2091 } qdf_packed;
2092 
2093 /**
2094  * struct mac_ts_info_sch - mac ts info schedule parameters
2095  * @traffic: mac tfc parameter
2096  * @schedule: mac schedule parameters
2097  */
2098 struct mac_ts_info {
2099 	struct mac_ts_info_tfc traffic;
2100 	struct mac_ts_info_sch schedule;
2101 } qdf_packed;
2102 
2103 /**
2104  * struct mac_tspec_ie - mac ts spec
2105  * @type: type
2106  * @length: length
2107  * @tsinfo: tsinfo
2108  * @nomMsduSz: nomMsduSz
2109  * @maxMsduSz: maxMsduSz
2110  * @minSvcInterval: minSvcInterval
2111  * @maxSvcInterval: maxSvcInterval
2112  * @inactInterval: inactInterval
2113  * @suspendInterval: suspendInterval
2114  * @svcStartTime: svcStartTime
2115  * @minDataRate: minDataRate
2116  * @meanDataRate: meanDataRate
2117  * @peakDataRate: peakDataRate
2118  * @maxBurstSz: maxBurstSz
2119  * @delayBound: delayBound
2120  * @minPhyRate: minPhyRate
2121  * @surplusBw: surplusBw
2122  * @mediumTime: mediumTime
2123  */
2124 struct mac_tspec_ie {
2125 	uint8_t type;
2126 	uint8_t length;
2127 	struct mac_ts_info tsinfo;
2128 	uint16_t nomMsduSz;
2129 	uint16_t maxMsduSz;
2130 	uint32_t minSvcInterval;
2131 	uint32_t maxSvcInterval;
2132 	uint32_t inactInterval;
2133 	uint32_t suspendInterval;
2134 	uint32_t svcStartTime;
2135 	uint32_t minDataRate;
2136 	uint32_t meanDataRate;
2137 	uint32_t peakDataRate;
2138 	uint32_t maxBurstSz;
2139 	uint32_t delayBound;
2140 	uint32_t minPhyRate;
2141 	uint16_t surplusBw;
2142 	uint16_t mediumTime;
2143 } qdf_packed;
2144 
2145 /**
2146  * struct add_ts_param - ADDTS related parameters
2147  * @vdev_id: vdev id
2148  * @tspec_idx: TSPEC handle uniquely identifying a TSPEC for a STA in a BSS
2149  * @tspec: tspec value
2150  * @status: QDF status
2151  * @pe_session_id: protocol engine session id
2152  * @tsm_interval: TSM interval period passed from UMAC to WMI
2153  * @set_ric_params: Should RIC parameters be set?
2154  */
2155 struct add_ts_param {
2156 	uint8_t vdev_id;
2157 	uint16_t tspec_idx;
2158 	struct mac_tspec_ie tspec;
2159 	QDF_STATUS status;
2160 	uint8_t pe_session_id;
2161 #ifdef FEATURE_WLAN_ESE
2162 	uint16_t tsm_interval;
2163 #endif /* FEATURE_WLAN_ESE */
2164 #ifdef WLAN_FEATURE_ROAM_OFFLOAD
2165 	bool set_ric_params;
2166 #endif /* WLAN_FEATURE_ROAM_OFFLOAD */
2167 };
2168 
2169 /**
2170  * struct delts_req_info - DELTS request parameter
2171  * @tsinfo: ts info
2172  * @tspec: ts spec
2173  * @wmeTspecPresent: wme ts spec flag
2174  * @wsmTspecPresent: wsm ts spec flag
2175  * @lleTspecPresent: lle ts spec flag
2176  */
2177 struct delts_req_info {
2178 	struct mac_ts_info tsinfo;
2179 	struct mac_tspec_ie tspec;
2180 	uint8_t wmeTspecPresent:1;
2181 	uint8_t wsmTspecPresent:1;
2182 	uint8_t lleTspecPresent:1;
2183 };
2184 
2185 /**
2186  * struct del_ts_params - DELTS related parameters
2187  * @tspecIdx: TSPEC identifier uniquely identifying a TSPEC for a STA in a BSS
2188  * @bssId: BSSID
2189  * @sessionId: session id
2190  * @userPrio: user priority
2191  * @delTsInfo: DELTS info
2192  * @setRICparams: RIC parameters
2193  */
2194 struct del_ts_params {
2195 	uint16_t tspecIdx;
2196 	uint8_t bssId[QDF_MAC_ADDR_SIZE];
2197 	uint8_t sessionId;
2198 	uint8_t userPrio;
2199 #ifdef WLAN_FEATURE_ROAM_OFFLOAD
2200 	struct delts_req_info delTsInfo;
2201 	uint8_t setRICparams;
2202 #endif /* WLAN_FEATURE_ROAM_OFFLOAD */
2203 };
2204 
2205 /**
2206  * struct ll_stats_clear_params - ll stats clear parameter
2207  * @req_id: request id
2208  * @vdev_id: vdev id
2209  * @stats_clear_mask: stats clear mask
2210  * @stop_req: stop request
2211  * @peer_macaddr: MAC address of the peer for which stats are to be cleared
2212  */
2213 struct ll_stats_clear_params {
2214 	uint32_t req_id;
2215 	uint8_t vdev_id;
2216 	uint32_t stats_clear_mask;
2217 	uint8_t stop_req;
2218 	struct qdf_mac_addr peer_macaddr;
2219 };
2220 
2221 /**
2222  * struct ll_stats_set_params - ll stats get parameter
2223  * @req_id: request id
2224  * @mpdu_size_threshold: mpdu size threshold
2225  * @aggressive_statistics_gathering: aggressive_statistics_gathering
2226  */
2227 struct ll_stats_set_params {
2228 	uint32_t req_id;
2229 	uint32_t mpdu_size_threshold;
2230 	uint32_t aggressive_statistics_gathering;
2231 };
2232 
2233 /**
2234  * struct ll_stats_get_params - ll stats parameter
2235  * @req_id: request id
2236  * @vdev_id: vdev id
2237  * @param_id_mask: param is mask
2238  * @peer_macaddr: MAC address of the peer for which stats are desired
2239  */
2240 struct ll_stats_get_params {
2241 	uint32_t req_id;
2242 	uint8_t vdev_id;
2243 	uint32_t param_id_mask;
2244 	struct qdf_mac_addr peer_macaddr;
2245 };
2246 
2247 
2248 /**
2249  * struct link_status_params - link stats parameter
2250  * @vdev_id: ID of the vdev for which link status is desired
2251  */
2252 struct link_status_params {
2253 	uint8_t vdev_id;
2254 };
2255 
2256 /**
2257  * struct dhcp_stop_ind_params - DHCP Stop indication message
2258  * @msgtype: message type is same as the request type
2259  * @msglen: length of the entire request
2260  * @device_mode: Mode of the device(ex:STA, AP)
2261  * @adapter_macaddr: MAC address of the adapter
2262  * @peer_macaddr: MAC address of the connected peer
2263  */
2264 struct dhcp_stop_ind_params {
2265 	uint16_t msgtype;
2266 	uint16_t msglen;
2267 	uint8_t device_mode;
2268 	struct qdf_mac_addr adapter_macaddr;
2269 	struct qdf_mac_addr peer_macaddr;
2270 };
2271 
2272 #define    WMI_MAX_FILTER_TEST_DATA_LEN       8
2273 #define    WMI_MAX_NUM_MULTICAST_ADDRESS    240
2274 #define    WMI_MAX_NUM_FILTERS               20
2275 #define    WMI_MAX_NUM_TESTS_PER_FILTER      10
2276 
2277 /**
2278  * enum packet_filter_type - packet filter type
2279  * @WMI_RCV_FILTER_TYPE_INVALID: invalid type
2280  * @WMI_RCV_FILTER_TYPE_FILTER_PKT: filter packet type
2281  * @WMI_RCV_FILTER_TYPE_BUFFER_PKT: buffer packet type
2282  * @WMI_RCV_FILTER_TYPE_MAX_ENUM_SIZE: max enum size
2283  */
2284 enum packet_filter_type {
2285 	WMI_RCV_FILTER_TYPE_INVALID,
2286 	WMI_RCV_FILTER_TYPE_FILTER_PKT,
2287 	WMI_RCV_FILTER_TYPE_BUFFER_PKT,
2288 	WMI_RCV_FILTER_TYPE_MAX_ENUM_SIZE
2289 };
2290 
2291 /**
2292  * enum packet_protocol_type - packet protocol type
2293  * @WMI_FILTER_HDR_TYPE_INVALID: invalid type
2294  * @WMI_FILTER_HDR_TYPE_MAC: mac type
2295  * @WMI_FILTER_HDR_TYPE_ARP: trp type
2296  * @WMI_FILTER_HDR_TYPE_IPV4: ipv4 type
2297  * @WMI_FILTER_HDR_TYPE_IPV6: ipv6 type
2298  * @WMI_FILTER_HDR_TYPE_UDP: udp type
2299  * @WMI_FILTER_HDR_TYPE_MAX: max type
2300  */
2301 enum packet_protocol_type {
2302 	WMI_FILTER_HDR_TYPE_INVALID,
2303 	WMI_FILTER_HDR_TYPE_MAC,
2304 	WMI_FILTER_HDR_TYPE_ARP,
2305 	WMI_FILTER_HDR_TYPE_IPV4,
2306 	WMI_FILTER_HDR_TYPE_IPV6,
2307 	WMI_FILTER_HDR_TYPE_UDP,
2308 	WMI_FILTER_HDR_TYPE_MAX
2309 };
2310 
2311 /**
2312  * enum packet_filter_comp_type - packet filter comparison type
2313  * @WMI_FILTER_CMP_TYPE_INVALID: invalid type
2314  * @WMI_FILTER_CMP_TYPE_EQUAL: type equal
2315  * @WMI_FILTER_CMP_TYPE_MASK_EQUAL: mask equal
2316  * @WMI_FILTER_CMP_TYPE_NOT_EQUAL: type not equal
2317  * @WMI_FILTER_CMP_TYPE_MASK_NOT_EQUAL: mask not equal
2318  * @WMI_FILTER_CMP_TYPE_MAX: max type
2319  */
2320 enum packet_filter_comp_type {
2321 	WMI_FILTER_CMP_TYPE_INVALID,
2322 	WMI_FILTER_CMP_TYPE_EQUAL,
2323 	WMI_FILTER_CMP_TYPE_MASK_EQUAL,
2324 	WMI_FILTER_CMP_TYPE_NOT_EQUAL,
2325 	WMI_FILTER_CMP_TYPE_MASK_NOT_EQUAL,
2326 	WMI_FILTER_CMP_TYPE_MAX
2327 };
2328 
2329 /**
2330  * struct rcv_pkt_filter_params - receive packet filter parameters
2331  * @protocolLayer - protocol layer
2332  * @cmpFlag - comparison flag
2333  * @dataLength - data length
2334  * @dataOffset - data offset
2335  * @reserved - resserved
2336  * @compareData - compare data
2337  * @dataMask - data mask
2338  */
2339 struct rcv_pkt_filter_params {
2340 	enum packet_protocol_type protocolLayer;
2341 	enum packet_filter_comp_type cmpFlag;
2342 	uint16_t dataLength;
2343 	uint8_t dataOffset;
2344 	uint8_t reserved;
2345 	uint8_t compareData[WMI_MAX_FILTER_TEST_DATA_LEN];
2346 	uint8_t dataMask[WMI_MAX_FILTER_TEST_DATA_LEN];
2347 };
2348 
2349 /**
2350  * struct rcv_pkt_filter_config - receive packet filter info
2351  * @filterId - filter id
2352  * @filterType - filter type
2353  * @numFieldParams - no of fields
2354  * @coalesceTime - reserved parameter
2355  * @self_macaddr - self mac address
2356  * @bssid - Bssid of the connected AP
2357  * @paramsData - data parameter
2358  */
2359 struct rcv_pkt_filter_config {
2360 	uint8_t filterId;
2361 	enum packet_filter_type filterType;
2362 	uint32_t numFieldParams;
2363 	uint32_t coalesceTime;
2364 	struct qdf_mac_addr self_macaddr;
2365 	struct qdf_mac_addr bssid;
2366 	struct rcv_pkt_filter_params paramsData[WMI_MAX_NUM_TESTS_PER_FILTER];
2367 };
2368 
2369 /**
2370  * struct cfg_action_frm_tb_ppdu_param - action frm in TB PPDU cfg
2371  * @cfg - enable/disable
2372  * @frm_len - length of the frame
2373  * @data - data pointer
2374  */
2375 struct cfg_action_frm_tb_ppdu_param {
2376 	uint32_t cfg;
2377 	uint32_t frm_len;
2378 	uint8_t *data;
2379 };
2380 
2381 #define WMI_MAX_NUM_FW_SEGMENTS 4
2382 
2383 /**
2384  * struct fw_dump_seg_req_param - individual segment details
2385  * @seg_id - segment id.
2386  * @seg_start_addr_lo - lower address of the segment.
2387  * @seg_start_addr_hi - higher address of the segment.
2388  * @seg_length - length of the segment.
2389  * @dst_addr_lo - lower address of the destination buffer.
2390  * @dst_addr_hi - higher address of the destination buffer.
2391  *
2392  * This structure carries the information to firmware about the
2393  * individual segments. This structure is part of firmware memory
2394  * dump request.
2395  */
2396 struct fw_dump_seg_req_param {
2397 	uint8_t seg_id;
2398 	uint32_t seg_start_addr_lo;
2399 	uint32_t seg_start_addr_hi;
2400 	uint32_t seg_length;
2401 	uint32_t dst_addr_lo;
2402 	uint32_t dst_addr_hi;
2403 };
2404 
2405 /**
2406  * struct fw_dump_req_param - firmware memory dump request details.
2407  * @request_id - request id.
2408  * @num_seg - requested number of segments.
2409  * @fw_dump_seg_req - individual segment information.
2410  *
2411  * This structure carries information about the firmware
2412  * memory dump request.
2413  */
2414 struct fw_dump_req_param {
2415 	uint32_t request_id;
2416 	uint32_t num_seg;
2417 	struct fw_dump_seg_req_param segment[WMI_MAX_NUM_FW_SEGMENTS];
2418 };
2419 
2420 /**
2421  * struct dhcp_offload_info_params - dhcp offload parameters
2422  * @vdev_id: request data length
2423  * @dhcp_offload_enabled: dhcp offload enabled
2424  * @dhcp_client_num: dhcp client no
2425  * @dhcp_srv_addr: dhcp server ip
2426  */
2427 struct dhcp_offload_info_params {
2428 	uint32_t vdev_id;
2429 	bool dhcp_offload_enabled;
2430 	uint32_t dhcp_client_num;
2431 	uint32_t dhcp_srv_addr;
2432 };
2433 
2434 /**
2435  * struct app_type2_params - app type2parameter
2436  * @vdev_id: vdev id
2437  * @rc4_key: rc4 key
2438  * @rc4_key_len: rc4 key length
2439  * @ip_id: NC id
2440  * @ip_device_ip: NC IP address
2441  * @ip_server_ip: Push server IP address
2442  * @tcp_src_port: NC TCP port
2443  * @tcp_dst_port: Push server TCP port
2444  * @tcp_seq: tcp sequence
2445  * @tcp_ack_seq: tcp ack sequence
2446  * @keepalive_init: Initial ping interval
2447  * @keepalive_min: Minimum ping interval
2448  * @keepalive_max: Maximum ping interval
2449  * @keepalive_inc: Increment of ping interval
2450  * @gateway_mac: gateway mac address
2451  * @tcp_tx_timeout_val: tcp tx timeout value
2452  * @tcp_rx_timeout_val: tcp rx timeout value
2453  */
2454 struct app_type2_params {
2455 	uint8_t vdev_id;
2456 	uint8_t rc4_key[16];
2457 	uint32_t rc4_key_len;
2458 	/** ip header parameter */
2459 	uint32_t ip_id;
2460 	uint32_t ip_device_ip;
2461 	uint32_t ip_server_ip;
2462 	/** tcp header parameter */
2463 	uint16_t tcp_src_port;
2464 	uint16_t tcp_dst_port;
2465 	uint32_t tcp_seq;
2466 	uint32_t tcp_ack_seq;
2467 	uint32_t keepalive_init;
2468 	uint32_t keepalive_min;
2469 	uint32_t keepalive_max;
2470 	uint32_t keepalive_inc;
2471 	struct qdf_mac_addr gateway_mac;
2472 	uint32_t tcp_tx_timeout_val;
2473 	uint32_t tcp_rx_timeout_val;
2474 };
2475 
2476 /**
2477  * struct app_type1_params - app type1 parameter
2478  * @vdev_id: vdev id
2479  * @wakee_mac_addr: mac address
2480  * @identification_id: identification id
2481  * @password: password
2482  * @id_length: id length
2483  * @pass_length: password length
2484  */
2485 struct app_type1_params {
2486 	uint8_t vdev_id;
2487 	struct qdf_mac_addr wakee_mac_addr;
2488 	uint8_t identification_id[8];
2489 	uint8_t password[16];
2490 	uint32_t id_length;
2491 	uint32_t pass_length;
2492 };
2493 
2494 /**
2495  * enum wmi_ext_wow_type - wow type
2496  * @WMI_EXT_WOW_TYPE_APP_TYPE1: only enable wakeup for app type1
2497  * @WMI_EXT_WOW_TYPE_APP_TYPE2: only enable wakeup for app type2
2498  * @WMI_EXT_WOW_TYPE_APP_TYPE1_2: enable wakeup for app type1&2
2499  */
2500 enum wmi_ext_wow_type {
2501 	WMI_EXT_WOW_TYPE_APP_TYPE1,
2502 	WMI_EXT_WOW_TYPE_APP_TYPE2,
2503 	WMI_EXT_WOW_TYPE_APP_TYPE1_2,
2504 };
2505 
2506 /**
2507  * struct ext_wow_params - ext wow parameters
2508  * @vdev_id: vdev id
2509  * @type: wow type
2510  * @wakeup_pin_num: wake up gpio no
2511  */
2512 struct ext_wow_params {
2513 	uint8_t vdev_id;
2514 	enum wmi_ext_wow_type type;
2515 	uint32_t wakeup_pin_num;
2516 };
2517 
2518 /**
2519  * struct stats_ext_params - ext stats request
2520  * @vdev_id: vdev id
2521  * @request_data_len: request data length
2522  * @request_data: request data
2523  */
2524 struct stats_ext_params {
2525 	uint32_t vdev_id;
2526 	uint32_t request_data_len;
2527 	uint8_t request_data[];
2528 };
2529 
2530 #define WMI_GTK_OFFLOAD_KEK_BYTES       64
2531 #define WMI_GTK_OFFLOAD_KCK_BYTES       16
2532 #define WMI_GTK_OFFLOAD_ENABLE          0
2533 #define WMI_GTK_OFFLOAD_DISABLE         1
2534 
2535 #define MAX_MEM_CHUNKS 32
2536 /**
2537  * struct wmi_host_mem_chunk - host memory chunk structure
2538  * @vaddr: Pointer to virtual address
2539  * @paddr: Physical address
2540  * @memctx: qdf memory context for mapped address.
2541  * @len: length of chunk
2542  * @req_id: request id from target
2543  */
2544 struct wmi_host_mem_chunk {
2545 	uint32_t *vaddr;
2546 	qdf_dma_addr_t paddr;
2547 	qdf_dma_mem_context(memctx);
2548 	uint32_t len;
2549 	uint32_t req_id;
2550 };
2551 
2552 /**
2553  * struct wmi_wifi_start_log - Structure to store the params sent to start/
2554  * stop logging
2555  * @name:          Attribute which indicates the type of logging like per packet
2556  *                 statistics, connectivity etc.
2557  * @verbose_level: Verbose level which can be 0,1,2,3
2558  * @flag:          Flag field for future use
2559  */
2560 struct wmi_wifi_start_log {
2561 	uint32_t ring_id;
2562 	uint32_t verbose_level;
2563 	uint32_t flag;
2564 };
2565 
2566 /**
2567  * struct wmi_pcl_list - Format of PCL
2568  * @pcl_list: List of preferred channels
2569  * @weight_list: Weights of the PCL
2570  * @pcl_len: Number of channels in the PCL
2571  */
2572 struct wmi_pcl_list {
2573 	uint8_t pcl_list[NUM_CHANNELS];
2574 	uint8_t weight_list[NUM_CHANNELS];
2575 	uint32_t pcl_len;
2576 };
2577 
2578 /**
2579  * struct wmi_hw_mode_params - HW mode params
2580  * @mac0_tx_ss: MAC0 Tx spatial stream
2581  * @mac0_rx_ss: MAC0 Rx spatial stream
2582  * @mac1_tx_ss: MAC1 Tx spatial stream
2583  * @mac1_rx_ss: MAC1 Rx spatial stream
2584  * @mac0_bw: MAC0 bandwidth
2585  * @mac1_bw: MAC1 bandwidth
2586  * @dbs_cap: DBS capabality
2587  * @agile_dfs_cap: Agile DFS capabality
2588  */
2589 struct wmi_hw_mode_params {
2590 	uint8_t mac0_tx_ss;
2591 	uint8_t mac0_rx_ss;
2592 	uint8_t mac1_tx_ss;
2593 	uint8_t mac1_rx_ss;
2594 	uint8_t mac0_bw;
2595 	uint8_t mac1_bw;
2596 	uint8_t dbs_cap;
2597 	uint8_t agile_dfs_cap;
2598 };
2599 
2600 /**
2601  * struct wmi_unit_test_cmd - unit test command parameters
2602  * @vdev_id: vdev id
2603  * @module_id: module id
2604  * @num_args: number of arguments
2605  * @diag_token: dialog token, which identifies the transaction.
2606  *              this number is generated by wifitool and may be used to
2607  *              identify the transaction in the event path
2608  * @args: arguments
2609  */
2610 struct wmi_unit_test_cmd {
2611 	uint32_t vdev_id;
2612 	uint32_t module_id;
2613 	uint32_t num_args;
2614 	uint32_t diag_token;
2615 	uint32_t args[WMI_UNIT_TEST_MAX_NUM_ARGS];
2616 };
2617 
2618 /**
2619  * struct extscan_bssid_hotlist_set_params - set hotlist request
2620  * @request_id: request_id
2621  * @vdev_id: vdev id
2622  * @lost_ap_sample_size: number of samples to confirm AP loss
2623  * @num_ap: Number of hotlist APs
2624  * @ap: hotlist APs
2625  */
2626 struct extscan_bssid_hotlist_set_params {
2627 	uint32_t  request_id;
2628 	uint8_t   vdev_id;
2629 	uint32_t  lost_ap_sample_size;
2630 	uint32_t  num_ap;
2631 	struct ap_threshold_params ap[WMI_WLAN_EXTSCAN_MAX_HOTLIST_APS];
2632 };
2633 
2634 /**
2635  * struct host_mem_req - Host memory request paramseters request by target
2636  * @req_id: Request id to identify the request.
2637  * @unit_size: Size of single unit requested.
2638  * @num_unit_info: Memory chunk info
2639  * @num_units: number of units requested.
2640  * @tgt_num_units: number of units request by target.
2641  */
2642 typedef struct {
2643 	uint32_t	req_id;
2644 	uint32_t	unit_size;
2645 	uint32_t	num_unit_info;
2646 	uint32_t	num_units;
2647 	uint32_t	tgt_num_units;
2648 } host_mem_req;
2649 
2650 #define WMI_HOST_DSCP_MAP_MAX	(64)
2651 
2652 /**
2653  * struct wmi_host_ext_resource_config - Extended resource config
2654  * @host_platform_config: Host plaform configuration.
2655  * @fw_featuew_bitmap: FW feature requested bitmap.
2656  */
2657 typedef struct {
2658 	uint32_t host_platform_config;
2659 
2660 #define WMI_HOST_FW_FEATURE_LTEU_SUPPORT	           0x0001
2661 #define WMI_HOST_FW_FEATURE_COEX_GPIO_SUPPORT	       0x0002
2662 #define WMI_HOST_FW_FEATURE_AUX_RADIO_SPECTRAL_INTF	   0x0004
2663 #define WMI_HOST_FW_FEATURE_AUX_RADIO_CHAN_LOAD_INTF   0x0008
2664 #define WMI_HOST_FW_FEATURE_BSS_CHANNEL_INFO_64	       0x0010
2665 #define WMI_HOST_FW_FEATURE_PEER_STATS                 0x0020
2666 #define WMI_HOST_FW_FEATURE_VDEV_STATS                 0x0040
2667 #define WMI_HOST_FW_FEATURE_VOW_FEATURES               0x00004000
2668 #define WMI_HOST_FW_FEATURE_VOW_STATS                  0x00008000
2669 	/**
2670 	* @brief fw_feature_bitmask - Enable/Disable features in FW
2671 	* @details
2672 	*  The bits in fw_feature_bitmask are used as shown by the masks below:
2673 	*	0x0001 - LTEU Config enable/disable
2674 	*	0x0002 - COEX GPIO Config enable/disable
2675 	*	0x0004 - Aux Radio enhancement for spectral scan enable/disable
2676 	*	0x0008 - Aux Radio enhancement for chan load scan enable/disable
2677 	*	0x0010 - BSS channel info stats enable/disable
2678 	* The features in question are enabled by setting
2679 	* the feature's bit to 1,
2680 	*  or disabled by setting the feature's bit to 0.
2681 	*/
2682 	uint32_t fw_feature_bitmap;
2683 
2684 	/* WLAN priority GPIO number
2685 	 * The target uses a GPIO pin to indicate when it is transmitting
2686 	 * high-priority traffic (e.g. beacon, management, or AC_VI) or
2687 	 * low-priority traffic (e.g. AC_BE, AC_BK).  The HW uses this
2688 	 * WLAN GPIO pin to determine whether to abort WLAN tx in favor of
2689 	 * BT activity.
2690 	 * Which GPIO is used for this WLAN tx traffic priority specification
2691 	 * varies between platforms, so the host needs to indicate to the
2692 	 * target which GPIO to use.
2693 	 */
2694 	uint32_t wlan_priority_gpio;
2695 
2696 	/* Host will notify target which coex algorithm has to be
2697 	 * enabled based on HW, FW capability and device tree config.
2698 	 * Till now the coex algorithms were target specific. Now the
2699 	 * same target can choose between multiple coex algorithms
2700 	 * depending on device tree config on host. For backward
2701 	 * compatibility, version support will have option 0 and will
2702 	 * rely on FW compile time flags to decide the coex version
2703 	 * between VERSION_1, VERSION_2 and VERSION_3. Version info is
2704 	 * mandatory from VERSION_4 onwards for any new coex algorithms.
2705 	 *
2706 	 * 0 = no version support
2707 	 * 1 = COEX_VERSION_1 (3 wire coex)
2708 	 * 2 = COEX_VERSION_2 (2.5 wire coex)
2709 	 * 3 = COEX_VERSION_3 (2.5 wire coex+duty cycle)
2710 	 * 4 = COEX_VERSION_4 (4 wire coex)
2711 	 */
2712 	uint32_t coex_version;
2713 
2714 	/* There are multiple coex implementations on FW to support different
2715 	 * hardwares. Since the coex algos are mutually exclusive, host will
2716 	 * use below fields to send GPIO info to FW and these GPIO pins will
2717 	 * have different usages depending on the feature enabled. This is to
2718 	 * avoid adding multiple GPIO fields here for different features.
2719 	 *
2720 	 * COEX VERSION_4 (4 wire coex) :
2721 	 * 4 wire coex feature uses 1 common input request line from BT/ZB/
2722 	 * Thread which interrupts the WLAN target processor directly, 1 input
2723 	 * priority line from BT and ZB each, 1 output line to grant access to
2724 	 * requesting IOT subsystem. WLAN uses the input priority line to
2725 	 * identify the requesting IOT subsystem. Request is granted based on
2726 	 * IOT interface priority and WLAN traffic. GPIO pin usage is as below:
2727 	 * coex_gpio_pin_1 = BT PRIORITY INPUT GPIO
2728 	 * coex_gpio_pin_2 = ZIGBEE PRIORITY INPUT GPIO
2729 	 * coex_gpio_pin_3 = GRANT OUTPUT GPIO
2730 	 * when a BT active interrupt is raised, WLAN reads
2731 	 * BT and ZB priority input GPIO pins to compare against the coex
2732 	 * priority table and accordingly sets the grant output GPIO to give
2733 	 * access to requesting IOT subsystem.
2734 	 */
2735 	uint32_t coex_gpio_pin_1;
2736 	uint32_t coex_gpio_pin_2;
2737 	uint32_t coex_gpio_pin_3;
2738 
2739 	/* add new members here */
2740 } wmi_host_ext_resource_config;
2741 
2742 /**
2743  * struct set_fwtest_params - FW test params
2744  * @arg: FW param id
2745  * @value: value
2746  */
2747 struct set_fwtest_params {
2748 	uint32_t arg;
2749 	uint32_t value;
2750 };
2751 
2752 /*
2753  * msduq_update_params - MSDUQ update param structure
2754  * @tid_num: TID number
2755  * @msduq_update_mask: update bit mask
2756  * @qdepth_thresh_value: threshold value for the queue depth
2757  */
2758 
2759 #define QDEPTH_THRESH_MAX_UPDATES 1
2760 
2761 typedef struct {
2762 	uint32_t tid_num;
2763 	uint32_t msduq_update_mask;
2764 	uint32_t qdepth_thresh_value;
2765 } msduq_update_params;
2766 
2767 /**
2768  * struct set_qdepth_thresh_params - MSDU Queue Depth Threshold Params
2769  * @vdev_id: vdev id
2770  * @pdev_id: pdev id
2771  * @mac_addr: MAC address
2772  * @num_of_msduq_updates: holds the number of tid updates
2773  */
2774 
2775 struct set_qdepth_thresh_params {
2776 	uint32_t pdev_id;
2777 	uint32_t vdev_id;
2778 	uint8_t mac_addr[QDF_MAC_ADDR_SIZE];
2779 	uint32_t num_of_msduq_updates;
2780 	msduq_update_params update_params[QDEPTH_THRESH_MAX_UPDATES];
2781 };
2782 
2783 /**
2784  * struct peer_chan_width_switch_info - Peer channel width capability params
2785  * @mac_addr: MAC address of peer
2786  * @chan_width: Max supported channel width of peer
2787  *              (enum ieee80211_cwm_width)
2788  */
2789 
2790 struct peer_chan_width_switch_info {
2791 	uint8_t mac_addr[QDF_MAC_ADDR_SIZE];
2792 	uint32_t chan_width;
2793 };
2794 
2795 /**
2796  * struct peer_chan_width_switch_params - Peer channel width capability wrapper
2797  * @num_peers: Total number of peers connected to AP
2798  * @max_peers_per_cmd: Peer limit per WMI command
2799  * @chan_width_peer_list: List of capabilities for all connected peers
2800  */
2801 
2802 struct peer_chan_width_switch_params {
2803 	uint32_t num_peers;
2804 	uint32_t max_peers_per_cmd;
2805 	struct peer_chan_width_switch_info *chan_width_peer_list;
2806 };
2807 
2808 /**
2809  * struct peer_add_wds_entry_params - WDS peer entry add params
2810  * @dest_addr: Pointer to destination macaddr
2811  * @peer_addr: Pointer to peer mac addr
2812  * @flags: flags
2813  * @vdev_id: Vdev id
2814  */
2815 struct peer_add_wds_entry_params {
2816 	const uint8_t *dest_addr;
2817 	uint8_t *peer_addr;
2818 	uint32_t flags;
2819 	uint32_t vdev_id;
2820 };
2821 
2822 /**
2823  * struct peer_del_wds_entry_params - WDS peer entry del params
2824  * @dest_addr: Pointer to destination macaddr
2825  * @vdev_id: Vdev id
2826  */
2827 struct peer_del_wds_entry_params {
2828 	uint8_t *dest_addr;
2829 	uint32_t vdev_id;
2830 };
2831 
2832 /**
2833  * struct set_bridge_mac_addr_params - set bridge MAC addr params
2834  * @dest_addr: Pointer to bridge macaddr
2835  */
2836 struct set_bridge_mac_addr_params {
2837 	uint8_t *bridge_addr;
2838 };
2839 
2840 /**
2841  * struct peer_updatewds_entry_params - WDS peer entry update params
2842  * @wds_macaddr: Pointer to destination macaddr
2843  * @peer_add: Pointer to peer mac addr
2844  * @flags: flags
2845  * @vdev_id: Vdev id
2846  */
2847 struct peer_update_wds_entry_params {
2848 	uint8_t *wds_macaddr;
2849 	uint8_t *peer_macaddr;
2850 	uint32_t flags;
2851 	uint32_t vdev_id;
2852 };
2853 
2854 /**
2855  * struct peer_del_all_wds_entries_params - WDS peer entries del params
2856  * @wds_macaddr: Pointer to destination macaddr
2857  * @peer_macaddr: Pointer to peer mac addr
2858  * @flags: flags
2859  */
2860 struct peer_del_all_wds_entries_params {
2861 	uint8_t *wds_macaddr;
2862 	uint8_t *peer_macaddr;
2863 	uint32_t flags;
2864 };
2865 
2866 /**
2867  * struct set_ps_mode_params - PS mode params
2868  * @vdev_id: vdev id
2869  * @psmode: PS mode
2870  */
2871 struct set_ps_mode_params {
2872 	uint8_t vdev_id;
2873 	uint8_t psmode;
2874 };
2875 
2876 /**
2877  * @struct tt_level_config - Set Thermal throttlling config
2878  * @tmplwm: Temperature low water mark
2879  * @tmphwm: Temperature high water mark
2880  * @dcoffpercent: dc off percentage
2881  * @priority: priority
2882  */
2883 typedef struct {
2884 	uint32_t tmplwm;
2885 	uint32_t tmphwm;
2886 	uint32_t dcoffpercent;
2887 	uint32_t priority;
2888 } tt_level_config;
2889 
2890 /**
2891  * struct thermal_mitigation_params - Thermal mitigation params
2892  * @enable: Enable/Disable Thermal mitigation
2893  * @dc: DC
2894  * @dc_per_event: DC per event
2895  * @num_thermal_conf: Number of thermal configurations to be sent
2896  * @tt_level_config: TT level config params
2897  */
2898 struct thermal_mitigation_params {
2899 	uint32_t pdev_id;
2900 	uint32_t enable;
2901 	uint32_t dc;
2902 	uint32_t dc_per_event;
2903 	uint8_t num_thermal_conf;
2904 	tt_level_config levelconf[THERMAL_LEVELS];
2905 };
2906 
2907 /**
2908  * struct smart_ant_enable_tx_feedback_params - SA tx feeback params
2909  * @enable: Enable TX feedback for SA
2910  */
2911 struct smart_ant_enable_tx_feedback_params {
2912 	int enable;
2913 };
2914 
2915 /**
2916  * struct vdev_spectral_configure_params - SPectral config params
2917  * @vdev_id: VDEV id
2918  * @count: count
2919  * @period: period
2920  * @spectral_pri: Spectral priority
2921  * @fft_size: FFT size
2922  * @gc_enable: GC enable
2923  * @restart_enable: restart enabled
2924  * @noise_floor_ref: Noise floor reference
2925  * @init_delay: Init delays
2926  * @nb_tone_thr: NB tone threshold
2927  * @str_bin_thr: STR BIN threshold
2928  * @wb_rpt_mode: WB BIN threshold
2929  * @rssi_rpt_mode: RSSI report mode
2930  * @rssi_thr: RSSI threshold
2931  * @pwr_format: Power format
2932  * @rpt_mode: Report mdoe
2933  * @bin_scale: BIN scale
2934  * @dbm_adj: DBM adjust
2935  * @chn_mask: chain mask
2936  * @mode: Mode
2937  * @center_freq1: Center frequency 1
2938  * @center_freq2: Center frequency 2
2939  * @chan_freq: Primary channel frequency
2940  * @chan_width: Channel width
2941  */
2942 struct vdev_spectral_configure_params {
2943 	uint8_t vdev_id;
2944 	uint16_t count;
2945 	uint16_t period;
2946 	uint16_t spectral_pri;
2947 	uint16_t fft_size;
2948 	uint16_t gc_enable;
2949 	uint16_t restart_enable;
2950 	uint16_t noise_floor_ref;
2951 	uint16_t init_delay;
2952 	uint16_t nb_tone_thr;
2953 	uint16_t str_bin_thr;
2954 	uint16_t wb_rpt_mode;
2955 	uint16_t rssi_rpt_mode;
2956 	uint16_t rssi_thr;
2957 	uint16_t pwr_format;
2958 	uint16_t rpt_mode;
2959 	uint16_t bin_scale;
2960 	uint16_t dbm_adj;
2961 	uint16_t chn_mask;
2962 	uint16_t mode;
2963 	uint16_t center_freq1;
2964 	uint16_t center_freq2;
2965 	uint16_t chan_freq;
2966 	uint16_t chan_width;
2967 };
2968 
2969 /**
2970  * struct vdev_spectral_enable_params - Spectral enabled params
2971  * @vdev_id: VDEV id
2972  * @active_valid: Active valid
2973  * @active: active
2974  * @enabled_valid: Enabled valid
2975  * @enabled: enabled
2976  * @mode: Mode
2977  */
2978 struct vdev_spectral_enable_params {
2979 	uint8_t vdev_id;
2980 	uint8_t active_valid;
2981 	uint8_t active;
2982 	uint8_t enabled_valid;
2983 	uint8_t enabled;
2984 	uint8_t mode;
2985 };
2986 
2987 #ifdef WLAN_CONV_SPECTRAL_ENABLE
2988 /**
2989  * struct spectral_fft_bin_markers_160_165mhz - Stores the start index
2990  * and length of FFT bins in 165 MHz/Restricted 80p80 or 160 MHz
2991  * mode in targets with a single Spectral detector
2992  * @is_valid: Indicates whether this structure holds valid data
2993  * @start_pri80: Starting index of FFT bins corresponding to primary 80 MHz
2994  *               in 165 MHz/Restricted 80p80 or 160 MHz mode
2995  * @num_pri80: Number of FFT bins corresponding to primary 80 MHz
2996  *             in 165 MHz/Restricted 80p80 or 160 MHz mode
2997  * @start_5mhz: Starting index of FFT bins corresponding to extra 5 MHz
2998  *               in 165 MHz/Restricted 80p80 mode
2999  * @num_5mhz: Number of FFT bins corresponding to extra 5 MHz
3000  *             in 165 MHz/Restricted 80p80 mode
3001  * @start_sec80: Starting index of FFT bins corresponding to secondary 80 MHz
3002  *               in 165 MHz/Restricted 80p80 or 160 MHz mode
3003  * @num_sec80: Number of FFT bins corresponding to secondary 80 MHz
3004  *             in 165 MHz/Restricted 80p80 or 160 MHz mode
3005  */
3006 struct spectral_fft_bin_markers_160_165mhz {
3007 	bool is_valid;
3008 	uint16_t start_pri80;
3009 	uint16_t num_pri80;
3010 	uint16_t start_5mhz;
3011 	uint16_t num_5mhz;
3012 	uint16_t start_sec80;
3013 	uint16_t num_sec80;
3014 };
3015 
3016 /**
3017  * struct spectral_startscan_resp_params - Params from the event send by
3018  * FW as a response to the scan start command
3019  * @pdev_id: Pdev id
3020  * @smode: Spectral scan mode
3021  * @num_fft_bin_index: Number of TLVs with FFT bin start and end indices
3022  */
3023 struct spectral_startscan_resp_params {
3024 	uint32_t pdev_id;
3025 	enum spectral_scan_mode smode;
3026 	uint8_t num_fft_bin_index;
3027 };
3028 #endif
3029 
3030 /**
3031  * struct pdev_set_regdomain_params - PDEV set reg domain params
3032  * @currentRDinuse: Current Reg domain
3033  * @currentRD2G: Current Reg domain 2G
3034  * @currentRD5G: Current Reg domain 5G
3035  * @ctl_2G: CTL 2G
3036  * @ctl_5G: CTL 5G
3037  * @dfsDomain: DFS domain
3038  * @pdev_id: pdev_id
3039  */
3040 struct pdev_set_regdomain_params {
3041 	uint16_t currentRDinuse;
3042 	uint16_t currentRD2G;
3043 	uint16_t currentRD5G;
3044 	uint32_t ctl_2G;
3045 	uint32_t ctl_5G;
3046 	uint8_t dfsDomain;
3047 	uint32_t pdev_id;
3048 };
3049 
3050 /**
3051  * struct set_quiet_mode_params - Set quiet mode params
3052  * @enabled: Enabled
3053  * @period: Quite period
3054  * @intval: Quite interval
3055  * @duration: Quite duration
3056  * @offset: offset
3057  */
3058 struct set_quiet_mode_params {
3059 	uint8_t enabled;
3060 	uint8_t period;
3061 	uint16_t intval;
3062 	uint16_t duration;
3063 	uint16_t offset;
3064 };
3065 
3066 /**
3067  * struct set_bcn_offload_quiet_mode_params - Set quiet mode params
3068  * @vdev_id: Vdev ID
3069  * @period: Quite period
3070  * @duration: Quite duration
3071  * @next_start: Next quiet start
3072  * @flag: 0 - disable, 1 - enable and continuous, 3 - enable and single shot
3073  */
3074 struct set_bcn_offload_quiet_mode_params {
3075 	uint32_t vdev_id;
3076 	uint32_t period;
3077 	uint32_t duration;
3078 	uint32_t next_start;
3079 	uint32_t flag;
3080 };
3081 
3082 /**
3083  * struct set_beacon_filter_params - Set beacon filter params
3084  * @vdev_id: VDEV id
3085  * @ie: Pointer to IE fields
3086  */
3087 struct set_beacon_filter_params {
3088 	uint8_t vdev_id;
3089 	uint32_t *ie;
3090 };
3091 
3092 /**
3093  * struct remove_beacon_filter_params - Remove beacon filter params
3094  * @vdev_id: VDEV id
3095  */
3096 struct remove_beacon_filter_params {
3097 	uint8_t vdev_id;
3098 };
3099 
3100 /**
3101  * struct mgmt_params - Mgmt params
3102  * @vdev_id: vdev id
3103  * @buf_len: length of frame buffer
3104  * @wbuf: frame buffer
3105  */
3106 struct mgmt_params {
3107 	int vdev_id;
3108 	uint32_t buf_len;
3109 	qdf_nbuf_t wbuf;
3110 };
3111 
3112 /**
3113  * struct addba_clearresponse_params - Addba clear response params
3114  * @vdev_id: VDEV id
3115  */
3116 struct addba_clearresponse_params {
3117 	uint8_t vdev_id;
3118 };
3119 
3120 /**
3121  * struct addba_send_params - ADDBA send params
3122  * @vdev_id: vdev id
3123  * @tidno: TID
3124  * @buffersize: buffer size
3125  */
3126 struct addba_send_params {
3127 	uint8_t vdev_id;
3128 	uint8_t tidno;
3129 	uint16_t buffersize;
3130 };
3131 
3132 /**
3133  * struct delba_send_params - DELBA send params
3134  * @vdev_id: vdev id
3135  * @tidno: TID
3136  * @initiator: initiator
3137  * @reasoncode: reason code
3138  */
3139 struct delba_send_params {
3140 	uint8_t vdev_id;
3141 	uint8_t tidno;
3142 	uint8_t initiator;
3143 	uint16_t reasoncode;
3144 };
3145 /**
3146  * struct addba_setresponse_arams - Set ADDBA response params
3147  * @vdev_id: vdev id
3148  * @tidno: TID
3149  * @statuscode: status code in response
3150  */
3151 struct addba_setresponse_params {
3152 	uint8_t vdev_id;
3153 	uint8_t tidno;
3154 	uint16_t statuscode;
3155 };
3156 
3157 /**
3158  * struct singleamsdu_params - Single AMSDU params
3159  * @vdev_id: vdev is
3160  * @tidno: TID
3161  */
3162 struct singleamsdu_params {
3163 	uint8_t vdev_id;
3164 	uint8_t tidno;
3165 };
3166 
3167 /**
3168  * struct set_qbosst_params - Set QBOOST params
3169  * @vdev_id: vdev id
3170  * @value: value
3171  */
3172 struct set_qboost_params {
3173 	uint8_t vdev_id;
3174 	uint32_t value;
3175 };
3176 
3177 /**
3178  * struct mu_scan_params - MU scan params
3179  * @id: id
3180  * @type: type
3181  * @duration: Duration
3182  * @lteu_tx_power: LTEU tx power
3183  */
3184 struct mu_scan_params {
3185 	uint8_t id;
3186 	uint8_t type;
3187 	uint32_t duration;
3188 	uint32_t lteu_tx_power;
3189 	uint32_t rssi_thr_bssid;
3190 	uint32_t rssi_thr_sta;
3191 	uint32_t rssi_thr_sc;
3192 	uint32_t plmn_id;
3193 	uint32_t alpha_num_bssid;
3194 };
3195 
3196 /**
3197  * struct lteu_config_params - LTEU config params
3198  * @lteu_gpio_start: start MU/AP scan after GPIO toggle
3199  * @lteu_num_bins: no. of elements in the following arrays
3200  * @use_actual_nf: whether to use the actual NF obtained or a hardcoded one
3201  * @lteu_weight: weights for MU algo
3202  * @lteu_thresh: thresholds for MU algo
3203  * @lteu_gamma:  gamma's for MU algo
3204  * @lteu_scan_timeout: timeout in ms to gpio toggle
3205  * @alpha_num_ssid: alpha for num active bssid calculation
3206  * @wifi_tx_power: Wifi Tx power
3207  */
3208 struct lteu_config_params {
3209 	uint8_t lteu_gpio_start;
3210 	uint8_t lteu_num_bins;
3211 	uint8_t use_actual_nf;
3212 	uint32_t lteu_weight[LTEU_MAX_BINS];
3213 	uint32_t lteu_thresh[LTEU_MAX_BINS];
3214 	uint32_t lteu_gamma[LTEU_MAX_BINS];
3215 	uint32_t lteu_scan_timeout;
3216 	uint32_t alpha_num_bssid;
3217 	uint32_t wifi_tx_power;
3218 	uint32_t allow_err_packets;
3219 };
3220 
3221 struct wmi_macaddr_t {
3222 	/** upper 4 bytes of  MAC address */
3223 	uint32_t mac_addr31to0;
3224 	/** lower 2 bytes of  MAC address */
3225 	uint32_t mac_addr47to32;
3226 };
3227 
3228 /**
3229  * struct wlan_profile_params - WLAN profile params
3230  * @param_id: param id
3231  * @profile_id: profile id
3232  * @enable: enable
3233  */
3234 struct wlan_profile_params {
3235 	uint32_t param_id;
3236 	uint32_t profile_id;
3237 	uint32_t enable;
3238 };
3239 
3240 /* struct ht_ie_params - HT IE params
3241  * @ie_len: IE length
3242  * @ie_data: pointer to IE data
3243  * @tx_streams: Tx streams supported for this HT IE
3244  * @rx_streams: Rx streams supported for this HT IE
3245  */
3246 struct ht_ie_params {
3247 	uint32_t ie_len;
3248 	uint8_t *ie_data;
3249 	uint32_t tx_streams;
3250 	uint32_t rx_streams;
3251 };
3252 
3253 /* struct vht_ie_params - VHT IE params
3254  * @ie_len: IE length
3255  * @ie_data: pointer to IE data
3256  * @tx_streams: Tx streams supported for this VHT IE
3257  * @rx_streams: Rx streams supported for this VHT IE
3258  */
3259 struct vht_ie_params {
3260 	uint32_t ie_len;
3261 	uint8_t *ie_data;
3262 	uint32_t tx_streams;
3263 	uint32_t rx_streams;
3264 };
3265 
3266 /**
3267  * struct wmi_host_wmeParams - WME params
3268  * @wmep_acm: ACM paramete
3269  * @wmep_aifsn:	AIFSN parameters
3270  * @wmep_logcwmin: cwmin in exponential form
3271  * @wmep_logcwmax: cwmax in exponential form
3272  * @wmep_txopLimit: txopLimit
3273  * @wmep_noackPolicy: No-Ack Policy: 0=ack, 1=no-ack
3274  */
3275 struct wmi_host_wmeParams {
3276 	u_int8_t	wmep_acm;
3277 	u_int8_t	wmep_aifsn;
3278 	u_int8_t	wmep_logcwmin;
3279 	u_int8_t	wmep_logcwmax;
3280 	u_int16_t   wmep_txopLimit;
3281 	u_int8_t	wmep_noackPolicy;
3282 };
3283 
3284 /**
3285  * struct wmm_update_params - WMM update params
3286  * @wmep_array: WME params for each AC
3287  */
3288 struct wmm_update_params {
3289 	struct wmi_host_wmeParams *wmep_array;
3290 };
3291 
3292 /**
3293  * struct wmi_host_wmevParams - WME params
3294  * @wmep_acm: ACM paramete
3295  * @wmep_aifsn:	AIFSN parameters
3296  * @wmep_logcwmin: cwmin in exponential form
3297  * @wmep_logcwmax: cwmax in exponential form
3298  * @wmep_txopLimit: txopLimit
3299  * @wmep_noackPolicy: No-Ack Policy: 0=ack, 1=no-ack
3300  */
3301 struct wmi_host_wme_vparams {
3302 	u_int32_t	acm;
3303 	u_int32_t	aifs;
3304 	u_int32_t	cwmin;
3305 	u_int32_t	cwmax;
3306 	union {
3307 		u_int32_t txoplimit;
3308 		u_int32_t mu_edca_timer;
3309 	};
3310 	u_int32_t	noackpolicy;
3311 };
3312 
3313 /**
3314  * struct ratepwr_table_params - Rate power table params
3315  * @ratepwr_tbl: pointer to rate power table
3316  * @ratepwr_len: rate power table len
3317  */
3318 struct ratepwr_table_params {
3319 	uint8_t *ratepwr_tbl;
3320 	uint16_t ratepwr_len;
3321 };
3322 
3323 /**
3324  * struct ctl_table_params - Ctl table params
3325  * @ctl_array: pointer to ctl array
3326  * @ctl_cmd_len: ctl command length
3327  * @is_2g: is 2G
3328  * @target_type: target type
3329  * @ctl_band: ctl band
3330  * @pdev_id: pdev id
3331  */
3332 struct ctl_table_params {
3333 	uint8_t *ctl_array;
3334 	uint16_t ctl_cmd_len;
3335 	bool is_2g;
3336 	uint32_t target_type;
3337 	uint32_t ctl_band;
3338 	uint32_t pdev_id;
3339 };
3340 
3341 /**
3342  * struct mimogain_table_params - MIMO gain table params
3343  * @array_gain: pointer to array gain table
3344  * @tbl_len: table length
3345  * @multichain_gain_bypass: bypass multichain gain
3346  */
3347 struct mimogain_table_params {
3348 	uint8_t *array_gain;
3349 	uint16_t tbl_len;
3350 	bool multichain_gain_bypass;
3351 	uint32_t pdev_id;
3352 };
3353 
3354 /**
3355  * struct ratepwr_chainmask_params - Rate power chainmask params
3356  * @ratepwr_chain_tbl: pointer to ratepwr chain table
3357  * @num_rate: number of rate in table
3358  * @pream_type: preamble type
3359  * @ops: ops
3360  */
3361 struct ratepwr_chainmsk_params {
3362 	uint32_t *ratepwr_chain_tbl;
3363 	uint16_t num_rate;
3364 	uint8_t pream_type;
3365 	uint8_t ops;
3366 };
3367 
3368 struct macaddr_params {
3369 	uint8_t *macaddr;
3370 };
3371 
3372 /**
3373  * struct acparams_params - acparams config structure
3374  * @ac: AC to configure
3375  * @use_rts: Use rts for this AC
3376  * @aggrsize_scaling: Aggregrate size scaling for the AC
3377  * @min_kbps: min kbps req
3378  */
3379 struct acparams_params {
3380 	uint8_t ac;
3381 	uint8_t use_rts;
3382 	uint8_t aggrsize_scaling;
3383 	uint32_t min_kbps;
3384 };
3385 
3386 /**
3387  * struct vap_dscp_tid_map_params - DSCP tid map params
3388  * @vdev_id: vdev id
3389  * @dscp_to_tid_map: pointer to arry of tid to dscp map table
3390  */
3391 struct vap_dscp_tid_map_params {
3392 	uint8_t vdev_id;
3393 	uint32_t *dscp_to_tid_map;
3394 };
3395 
3396 /**
3397  * struct proxy_ast_reserve_params - Proxy AST reserve params
3398  * @macaddr: macaddr for proxy ast entry
3399  */
3400 struct proxy_ast_reserve_params {
3401 	uint8_t *macaddr;
3402 };
3403 
3404 /**
3405  * struct fips_params - FIPS params config
3406  * @key: pointer to key
3407  * @key_len: length of key
3408  * @data: pointer data buf
3409  * @data_len: length of data buf
3410  * @mode: mode
3411  * @op: operation
3412  * @pdev_id: pdev_id for identifying the MAC
3413  */
3414 struct fips_params {
3415 	uint8_t *key;
3416 	uint32_t key_len;
3417 	uint8_t *data;
3418 	uint32_t data_len;
3419 	uint32_t mode;
3420 	uint32_t op;
3421 	uint32_t pdev_id;
3422 };
3423 
3424 #ifdef WLAN_FEATURE_DISA_FIPS
3425 /**
3426  * struct disa_encrypt_decrypt_req_params - disa encrypt request
3427  * @vdev_id: virtual device id
3428  * @key_flag: This indicates firmware to encrypt/decrypt payload
3429  *    see ENCRYPT_DECRYPT_FLAG
3430  * @key_idx: Index used in storing key
3431  * @key_cipher: cipher used for encryption/decryption
3432  *    Eg: see WMI_CIPHER_AES_CCM for CCMP
3433  * @key_len: length of key data
3434  * @key_txmic_len: length of Tx MIC
3435  * @key_rxmic_len: length of Rx MIC
3436  * @key_data: Key
3437  * @pn: packet number
3438  * @mac_header: MAC header
3439  * @data_len: length of data
3440  * @data: pointer to payload
3441  */
3442 struct disa_encrypt_decrypt_req_params {
3443 	uint32_t vdev_id;
3444 	uint8_t key_flag;
3445 	uint32_t key_idx;
3446 	uint32_t key_cipher;
3447 	uint32_t key_len;
3448 	uint32_t key_txmic_len;
3449 	uint32_t key_rxmic_len;
3450 	uint8_t key_data[MAC_MAX_KEY_LENGTH];
3451 	uint8_t pn[MAC_PN_LENGTH];
3452 	uint8_t mac_header[MAX_MAC_HEADER_LEN];
3453 	uint32_t data_len;
3454 	uint8_t *data;
3455 };
3456 #endif
3457 
3458 /**
3459  * struct mcast_group_update_param - Mcast group table update to target
3460  * @action: Addition/deletion
3461  * @wildcard: iwldcard table entry?
3462  * @mcast_ip_addr: mcast ip address to be updated
3463  * @mcast_ip_addr_bytes: mcast ip addr bytes
3464  * @nsrcs: number of entries in source list
3465  * @filter_mode: filter mode
3466  * @is_action_delete: is delete
3467  * @is_filter_mode_snoop: is filter mode snoop
3468  * @ucast_mac_addr: ucast peer mac subscribed to mcast ip
3469  * @srcs: source mac accpted
3470  * @mask: mask
3471  * @vap_id: vdev id
3472  * @is_mcast_addr_len: is mcast address length
3473  */
3474 struct mcast_group_update_params {
3475 	int action;
3476 	int wildcard;
3477 	uint8_t *mcast_ip_addr;
3478 	int mcast_ip_addr_bytes;
3479 	uint8_t nsrcs;
3480 	uint8_t filter_mode;
3481 	bool is_action_delete;
3482 	bool is_filter_mode_snoop;
3483 	uint8_t *ucast_mac_addr;
3484 	uint8_t *srcs;
3485 	uint8_t *mask;
3486 	uint8_t vap_id;
3487 	bool is_mcast_addr_len;
3488 };
3489 
3490 /**
3491  * struct periodic_chan_stats_param - periodic channel stats req param
3492  * @stats_period: stats period update
3493  * @enable: enable/disable
3494  */
3495 struct periodic_chan_stats_params {
3496 	uint32_t stats_period;
3497 	bool enable;
3498 	uint32_t pdev_id;
3499 };
3500 
3501 /**
3502  * enum wmi_host_packet_power_rate_flags: packer power rate flags
3503  * @WMI_HOST_FLAG_RTSENA: RTS enabled
3504  * @WMI_HOST_FLAG_CTSENA: CTS enabled
3505  * @WMI_HOST_FLAG_STBC: STBC is set
3506  * @WMI_HOST_FLAG_LDPC: LDPC is set
3507  * @WMI_HOST_FLAG_TXBF: Tx Bf enabled
3508  * @WMI_HOST_FLAG_MU2: MU2 data
3509  * @WMI_HOST_FLAG_MU3: MU3 data
3510  * @WMI_HOST_FLAG_SERIES1: Rate series 1
3511  * @WMI_HOST_FLAG_SGI: Short gaurd interval
3512  */
3513 enum wmi_host_packet_power_rate_flags {
3514 	WMI_HOST_FLAG_RTSENA        =  0x0001,
3515 	WMI_HOST_FLAG_CTSENA        =  0x0002,
3516 	WMI_HOST_FLAG_STBC          =  0x0004,
3517 	WMI_HOST_FLAG_LDPC          =  0x0008,
3518 	WMI_HOST_FLAG_TXBF          =  0x0010,
3519 	WMI_HOST_FLAG_MU2           =  0x0020,
3520 	WMI_HOST_FLAG_MU3           =  0x0040,
3521 	WMI_HOST_FLAG_SERIES1       =  0x0080,
3522 	WMI_HOST_FLAG_SGI           =  0x0100,
3523 };
3524 
3525 /**
3526  * enum wmi_host_su_mu_ofdma_flags: packer power su mu ofdma flags
3527  * @WMI_HOST_FLAG_SU: SU Data
3528  * @WMI_HOST_FLAG_DL_MU_MIMO_AC: DL AC MU data
3529  * @WMI_HOST_FLAG_DL_MU_MIMO_AX: DL AX MU data
3530  * @WMI_HOST_FLAG_DL_OFDMA: DL OFDMA data
3531  * @WMI_HOST_FLAG_UL_OFDMA: UL OFDMA data
3532  * @WMI_HOST_FLAG_UL_MU_MIMO: UL MU data
3533  */
3534 enum wmi_host_su_mu_ofdma_flags {
3535 	WMI_HOST_FLAG_SU            =  0x0001,
3536 	WMI_HOST_FLAG_DL_MU_MIMO_AC =  0x0002,
3537 	WMI_HOST_FLAG_DL_MU_MIMO_AX =  0x0003,
3538 	WMI_HOST_FLAG_DL_OFDMA      =  0x0004,
3539 	WMI_HOST_FLAG_UL_OFDMA      =  0x0005,
3540 	WMI_HOST_FLAG_UL_MU_MIMO    =  0x0006,
3541 };
3542 
3543 /**
3544  * enum wmi_host_preamble_type: preamble type
3545  * @WMI_HOST_PREAMBLE_OFDM: ofdm rate
3546  * @WMI_HOST_PREAMBLE_CCK:  cck rate
3547  * @WMI_HOST_PREAMBLE_HT: ht rate
3548  * @WMI_HOST_PREAMBLE_VHT: vht rate
3549  * @WMI_HOST_PREAMBLE_HE: 11ax he rate
3550  */
3551 enum wmi_host_preamble_type {
3552 	WMI_HOST_PREAMBLE_OFDM  =  0,
3553 	WMI_HOST_PREAMBLE_CCK   =  1,
3554 	WMI_HOST_PREAMBLE_HT    =  2,
3555 	WMI_HOST_PREAMBLE_VHT   =  3,
3556 	WMI_HOST_PREAMBLE_HE    =  4,
3557 };
3558 
3559 /**
3560  * struct packet_power_info_params - packet power info params
3561  * @chainmask: chain mask
3562  * @chan_width: channel bandwidth
3563  * @rate_flags: rate flags
3564  * @su_mu_ofdma: su/mu/ofdma flags
3565  * @nss: number of spatial streams
3566  * @preamble: preamble
3567  * @hw_rate:
3568  */
3569 struct packet_power_info_params {
3570 	uint16_t chainmask;
3571 	uint16_t chan_width;
3572 	uint16_t rate_flags;
3573 	uint16_t su_mu_ofdma;
3574 	uint16_t nss;
3575 	uint16_t preamble;
3576 	uint16_t hw_rate;
3577 	uint32_t pdev_id;
3578 };
3579 
3580 /**
3581  * WMI_GPIO_CONFIG_CMDID
3582  */
3583 enum {
3584 	WMI_HOST_GPIO_PULL_NONE,
3585 	WMI_HOST_GPIO_PULL_UP,
3586 	WMI_HOST_GPIO_PULL_DOWN,
3587 };
3588 
3589 /**
3590  * WMI_GPIO_INTTYPE
3591  */
3592 enum {
3593 	WMI_HOST_GPIO_INTTYPE_DISABLE,
3594 	WMI_HOST_GPIO_INTTYPE_RISING_EDGE,
3595 	WMI_HOST_GPIO_INTTYPE_FALLING_EDGE,
3596 	WMI_HOST_GPIO_INTTYPE_BOTH_EDGE,
3597 	WMI_HOST_GPIO_INTTYPE_LEVEL_LOW,
3598 	WMI_HOST_GPIO_INTTYPE_LEVEL_HIGH
3599 };
3600 
3601 /**
3602  * struct wmi_host_gpio_input_event - GPIO input event structure
3603  * @gpio_num: GPIO number which changed state
3604  */
3605 typedef struct {
3606 	uint32_t gpio_num;	/* GPIO number which changed state */
3607 } wmi_host_gpio_input_event;
3608 
3609 /**
3610  * struct gpio_config_params - GPIO config params
3611  * @gpio_num: GPIO number to config
3612  * @input: input/output
3613  * @pull_type: pull type
3614  * @intr_mode: int mode
3615  */
3616 struct gpio_config_params {
3617 	uint32_t gpio_num;
3618 	uint32_t input;
3619 	uint32_t pull_type;
3620 	uint32_t intr_mode;
3621 };
3622 
3623 /**
3624  * struct gpio_output_params - GPIO output params
3625  * @gpio_num: GPIO number to configure
3626  * @set: set/reset
3627  */
3628 struct gpio_output_params {
3629 	uint32_t gpio_num;
3630 	uint32_t set;
3631 };
3632 
3633 /* flags bit 0: to configure wlan priority bitmap */
3634 #define WMI_HOST_BTCOEX_PARAM_FLAGS_WLAN_PRIORITY_BITMAP_BIT (1<<0)
3635 /* flags bit 1: to configure both period and wlan duration */
3636 #define WMI_HOST_BTCOEX_PARAM_FLAGS_DUTY_CYCLE_BIT (1<<1)
3637 struct btcoex_cfg_params {
3638 	/* WLAN priority bitmask for different frame types */
3639 	uint32_t  btcoex_wlan_priority_bitmap;
3640 	/* This command is used to configure different btcoex params
3641 	 * in different situations.The host sets the appropriate bit(s)
3642 	 * in btcoex_param_flags to indicate which configuration parameters
3643 	 * are valid within a particular BT coex config message, so that one
3644 	 * BT configuration parameter can be configured without affecting
3645 	 * other BT configuration parameters.E.g. if the host wants to
3646 	 * configure only btcoex_wlan_priority_bitmap it sets only
3647 	 * WMI_BTCOEX_PARAM_FLAGS_WLAN_PRIORITY_BITMAP_BIT in
3648 	 * btcoex_param_flags so that firmware will not overwrite
3649 	 * other params with default value passed in the command.
3650 	 * Host can also set multiple bits in btcoex_param_flags
3651 	 * to configure more than one param in single message.
3652 	 */
3653 	uint32_t btcoex_param_flags;
3654 	/* period denotes the total time in milliseconds which WLAN and BT share
3655 	 * configured percentage for transmission and reception.
3656 	 */
3657 	uint32_t period;
3658 	/* wlan duration is the time in milliseconds given for wlan
3659 	 * in above period.
3660 	 */
3661 	uint32_t wlan_duration;
3662 };
3663 
3664 #define WMI_HOST_COEX_CONFIG_BUF_MAX_LEN 32 /* 128 bytes */
3665 /**
3666  * coex_ver_cfg_t
3667  * @coex_version: Version for 4 wire coex
3668  * @length: Length of payload buffer based on version
3669  * @config_buf: Payload Buffer
3670  */
3671 typedef struct {
3672 	/* VERSION_4 (4 wire coex) */
3673 	uint32_t coex_version;
3674 
3675 	/* No. of uint32_t elements in payload buffer. Will depend on the coex
3676 	 * version
3677 	 */
3678 	uint32_t length;
3679 
3680 	/* Payload buffer */
3681 	uint32_t config_buf[WMI_HOST_COEX_CONFIG_BUF_MAX_LEN];
3682 } coex_ver_cfg_t;
3683 
3684 #define WMI_HOST_RTT_REPORT_CFR	0
3685 #define WMI_HOST_RTT_NO_REPORT_CFR	1
3686 #define WMI_HOST_RTT_AGGREGATE_REPORT_NON_CFR	2
3687 /**
3688  * struct rtt_meas_req_test_params
3689  * @peer: peer mac address
3690  * @req_frame_type: RTT request frame type
3691  * @req_bw: requested bandwidth
3692  * @req_preamble: Preamble
3693  * @req_num_req: num of requests
3694  * @req_report_type: report type
3695  * @num_measurements: number of measurements
3696  * @asap_mode: priority
3697  * @lci_requested: LCI requested
3698  * @loc_civ_requested:
3699  * @channel_param: channel param
3700  * @req_id: requested id
3701  */
3702 struct rtt_meas_req_test_params {
3703 	uint8_t peer[QDF_MAC_ADDR_SIZE];
3704 	int req_frame_type;
3705 	int req_bw;
3706 	int req_preamble;
3707 	int req_num_req;
3708 	int req_report_type;
3709 	uint32_t num_measurements;
3710 	uint32_t asap_mode;
3711 	uint32_t lci_requested;
3712 	uint32_t loc_civ_requested;
3713 	struct channel_param channel;
3714 	uint8_t req_id;
3715 };
3716 
3717 /**
3718  * struct peer_request_pn_param - PN request params
3719  * @vdev_id: vdev id
3720  * @peer_macaddr: Peer mac address
3721  * @key_type: key type
3722  */
3723 struct peer_request_pn_param {
3724 	uint32_t vdev_id;
3725 	uint8_t  peer_macaddr[QDF_MAC_ADDR_SIZE];
3726 	uint32_t key_type;
3727 };
3728 
3729 /**
3730  * struct rtt_meas_req_params - RTT measurement request params
3731  * @req_id: Request id
3732  * @vdev_id: vdev id
3733  * @is_mode_na: 11NA
3734  * @is_mode_ac: AC
3735  * @is_bw_20: 20
3736  * @is_bw_40: 40
3737  * @is_bw_80: 80
3738  * @sta_mac_addr: pointer to station mac address
3739  * @spoof_mac_addr: pointer to spoof mac address
3740  * @num_probe_rqst: number of probe request
3741  * @channel_param: channel param
3742  */
3743 struct rtt_meas_req_params {
3744 	uint8_t req_id;
3745 	uint8_t vdev_id;
3746 	bool is_mode_na;
3747 	bool is_mode_ac;
3748 	bool is_bw_20;
3749 	bool is_bw_40;
3750 	bool is_bw_80;
3751 	uint8_t *sta_mac_addr;
3752 	uint8_t *spoof_mac_addr;
3753 	uint32_t num_probe_rqst;
3754 	struct channel_param channel;
3755 };
3756 
3757 /**
3758  * struct lci_set_params - LCI params
3759  * @lci_data: pointer to LCI data
3760  * @latitude_unc: latitude
3761  * @latitude_0_12: bits 0 to 1 of latitude
3762  * @latitude_2_33: bits 2 to 33 of latitude
3763  * @longitude_unc: longitude
3764  * @longitude_0_1: bits 0 to 1 of longitude
3765  * @longitude_2_33: bits 2 to 33 of longitude
3766  * @altitude_type: altitude type
3767  * @altitude_unc_0_3: altitude bits 0 - 3
3768  * @altitude_unc_4_5: altitude bits 4 - 5
3769  * @altitude: altitude
3770  * @datum: dataum
3771  * @reg_loc_agmt:
3772  * @reg_loc_dse:
3773  * @dep_sta:
3774  * @version: version
3775  */
3776 struct lci_set_params {
3777 	void *lci_data;
3778 	uint8_t	latitude_unc:6,
3779 		latitude_0_1:2;
3780 	uint32_t latitude_2_33;
3781 	uint8_t	longitude_unc:6,
3782 		longitude_0_1:2;
3783 	uint32_t longitude_2_33;
3784 	uint8_t	altitude_type:4,
3785 		altitude_unc_0_3:4;
3786 	uint32_t altitude_unc_4_5:2,
3787 		altitude:30;
3788 	uint8_t	datum:3,
3789 		reg_loc_agmt:1,
3790 		reg_loc_dse:1,
3791 		dep_sta:1,
3792 		version:2;
3793 	uint8_t *colocated_bss;
3794 	int msg_len;
3795 };
3796 
3797 /**
3798  * struct lcr_set_params - LCR params
3799  * @lcr_data: pointer to lcr data
3800  */
3801 struct lcr_set_params {
3802 	void *lcr_data;
3803 	int msg_len;
3804 };
3805 
3806 /**
3807  * struct rtt_keepalive_req_params - RTT keepalive params
3808  * @macaddr: pointer to macaddress
3809  * @req_id: Request id
3810  * @vdev_id: vdev id
3811  * @stop: start/stop
3812  */
3813 struct rtt_keepalive_req_params {
3814 	uint8_t *macaddr;
3815 	uint8_t req_id;
3816 	uint8_t vdev_id;
3817 	bool stop;
3818 };
3819 
3820 /**
3821  * struct rx_reorder_queue_setup_params  - Reorder queue setup params
3822  * @peer_mac_addr: Peer mac address
3823  * @tid: TID
3824  * @vdev_id: vdev id
3825  * @hw_qdesc_paddr_lo: lower 32 bits of queue desc adddress
3826  * @hw_qdesc_paddr_hi: upper 32 bits of queue desc adddress
3827  * @queue_no: 16-bit number assigned by host for queue
3828  * @ba_window_size_valid: BA window size validity flag
3829  * @ba_window_size: BA window size
3830  */
3831 struct rx_reorder_queue_setup_params {
3832 	uint8_t *peer_macaddr;
3833 	uint16_t tid;
3834 	uint16_t vdev_id;
3835 	uint32_t hw_qdesc_paddr_lo;
3836 	uint32_t hw_qdesc_paddr_hi;
3837 	uint16_t queue_no;
3838 	uint8_t ba_window_size_valid;
3839 	uint16_t ba_window_size;
3840 
3841 };
3842 
3843 /**
3844  * struct rx_reorder_queue_remove_params  - Reorder queue setup params
3845  * @peer_mac_addr: Peer mac address
3846  * @vdev_id: vdev id
3847  * @peer_tid_bitmap: peer tid bitmap
3848  */
3849 struct rx_reorder_queue_remove_params {
3850 	uint8_t *peer_macaddr;
3851 	uint16_t vdev_id;
3852 	uint32_t peer_tid_bitmap;
3853 };
3854 
3855 /**
3856  * struct wmi_host_stats_event - Stats event params
3857  * @stats_id: stats id of type wmi_host_stats_event
3858  * @num_pdev_stats: number of pdev stats event structures 0 or 1
3859  * @num_pdev_ext_stats: number of pdev ext stats event structures
3860  * @num_vdev_stats: number of vdev stats
3861  * @num_peer_stats: number of peer stats event structures 0 or max peers
3862  * @num_peer_extd_stats: number of peer extended stats event structures 0
3863  * or max peers
3864  * @num_bcnflt_stats: number of beacon filter stats
3865  * @num_chan_stats: number of channel stats
3866  * @pdev_id: device id for the radio
3867  * @num_bcn_stats: number of beacon stats
3868  * @num_rssi_stats: number of rssi stats
3869  * @num_peer_adv_stats: number of peer adv stats
3870  * @num_mib_stats: number of mib stats
3871  * @num_mib_extd_stats: number of extended mib stats
3872  * @last_event: specify if the current event is the last event
3873  */
3874 typedef struct {
3875 	wmi_host_stats_id stats_id;
3876 	uint32_t num_pdev_stats;
3877 	uint32_t num_pdev_ext_stats;
3878 	uint32_t num_vdev_stats;
3879 	uint32_t num_peer_stats;
3880 	uint32_t num_peer_extd_stats;
3881 	uint32_t num_bcnflt_stats;
3882 	uint32_t num_chan_stats;
3883 	uint32_t pdev_id;
3884 	uint32_t num_bcn_stats;
3885 	uint32_t num_rssi_stats;
3886 	uint32_t num_peer_adv_stats;
3887 	uint32_t num_mib_stats;
3888 	uint32_t num_mib_extd_stats;
3889 	uint32_t last_event;
3890 } wmi_host_stats_event;
3891 
3892 /**
3893  * struct wmi_host_peer_extd_stats - peer extd stats event structure
3894  * @peer_macaddr: Peer mac address
3895  * @inactive_time: inactive time in secs
3896  * @peer_chain_rssi: peer rssi
3897  * @rx_duration: RX duration
3898  * @peer_tx_bytes: TX bytes
3899  * @last_tx_rate_code: Tx rate code of last frame
3900  * @last_tx_power: Tx power latest
3901  * @atf_tokens_allocated: atf tokens allocated
3902  * @atf_tokens_utilized: atf tokens utilized
3903  * @num_mu_tx_blacklisted: Blacklisted MU Tx count
3904  * @sgi_count: sgi count of the peer
3905  * @rx_mc_bc_cnt: Total number of received multicast & broadcast data frames
3906  * corresponding to this peer, 1 in the MSB of rx_mc_bc_cnt represents a
3907  * valid data
3908  * @rx_retry_cnt: Number of rx retries received from current station
3909  */
3910 typedef struct {
3911 	wmi_host_mac_addr peer_macaddr;
3912 	uint32_t inactive_time;
3913 	uint32_t peer_chain_rssi;
3914 	uint32_t rx_duration;
3915 	uint32_t peer_tx_bytes;
3916 	uint32_t last_tx_rate_code;
3917 	uint32_t last_tx_power;
3918 	uint32_t atf_tokens_allocated;
3919 	uint32_t atf_tokens_utilized;
3920 	uint32_t num_mu_tx_blacklisted;
3921 	uint32_t sgi_count;
3922 	uint32_t rx_mc_bc_cnt;
3923 	uint32_t rx_retry_cnt;
3924 } wmi_host_peer_extd_stats;
3925 
3926 /**
3927  * struct wmi_host_peer_adv_stats - peer adv stats event structure
3928  * @peer_macaddr: mac address
3929  * @fcs_count: fcs count
3930  * @rx_count: rx count
3931  * @rx_bytes: rx bytes
3932  */
3933 struct wmi_host_peer_adv_stats {
3934 	uint8_t peer_macaddr[QDF_MAC_ADDR_SIZE];
3935 	uint32_t fcs_count;
3936 	uint32_t rx_count;
3937 	uint64_t rx_bytes;
3938 };
3939 
3940 /**
3941  * struct wmi_host_pdev_ext_stats - peer ext stats structure
3942  * @rx_rssi_comb: RX rssi
3943  * @rx_rssi_chain0: RX rssi chain 0
3944  * @rx_rssi_chain1: RX rssi chain 1
3945  * @rx_rssi_chain2: RX rssi chain 2
3946  * @rx_rssi_chain3: RX rssi chain 3
3947  * @rx_mcs: RX MCS array
3948  * @tx_mcs: TX MCS array
3949  * @ack_rssi: Ack rssi
3950  */
3951 typedef struct {
3952 	uint32_t	rx_rssi_comb;
3953 	uint32_t	rx_rssi_chain0;
3954 	uint32_t	rx_rssi_chain1;
3955 	uint32_t	rx_rssi_chain2;
3956 	uint32_t	rx_rssi_chain3;
3957 	uint32_t	rx_mcs[10];
3958 	uint32_t	tx_mcs[10];
3959 	uint32_t	ack_rssi;
3960 } wmi_host_pdev_ext_stats;
3961 
3962 /**
3963  * struct wmi_host_dbg_tx_stats - Debug stats
3964  * @comp_queued: Num HTT cookies queued to dispatch list
3965  * @comp_delivered: Num HTT cookies dispatched
3966  * @msdu_enqued: Num MSDU queued to WAL
3967  * @mpdu_enqued: Num MPDU queue to WAL
3968  * @wmm_drop: Num MSDUs dropped by WMM limit
3969  * @local_enqued: Num Local frames queued
3970  * @local_freed: Num Local frames done
3971  * @hw_queued: Num queued to HW
3972  * @hw_reaped: Num PPDU reaped from HW
3973  * @underrun: Num underruns
3974  * @hw_paused: HW Paused.
3975  * @tx_abort: Num PPDUs cleaned up in TX abort
3976  * @mpdus_requed: Num MPDUs requed by SW
3977  * @tx_ko: excessive retries
3978  * @tx_xretry:
3979  * @data_rc: data hw rate code
3980  * @self_triggers: Scheduler self triggers
3981  * @sw_retry_failure: frames dropped due to excessive sw retries
3982  * @illgl_rate_phy_err: illegal rate phy errors
3983  * @pdev_cont_xretry: wal pdev continuous xretry
3984  * @pdev_tx_timeout: wal pdev continuous xretry
3985  * @pdev_resets: wal pdev resets
3986  * @stateless_tid_alloc_failure: frames dropped due to non-availability of
3987  *                               stateless TIDs
3988  * @phy_underrun: PhY/BB underrun
3989  * @txop_ovf: MPDU is more than txop limit
3990  * @seq_posted: Number of Sequences posted
3991  * @seq_failed_queueing: Number of Sequences failed queueing
3992  * @seq_completed: Number of Sequences completed
3993  * @seq_restarted: Number of Sequences restarted
3994  * @mu_seq_posted: Number of MU Sequences posted
3995  * @mpdus_sw_flush: Num MPDUs flushed by SW, HWPAUSED, SW TXABORT
3996  *                  (Reset,channel change)
3997  * @mpdus_hw_filter: Num MPDUs filtered by HW, all filter condition
3998  *                   (TTL expired)
3999  * @mpdus_truncated: Num MPDUs truncated by PDG (TXOP, TBTT,
4000  *                   PPDU_duration based on rate, dyn_bw)
4001  * @mpdus_ack_failed: Num MPDUs that was tried but didn't receive ACK or BA
4002  * @mpdus_expired: Num MPDUs that was dropped du to expiry.
4003  * @mc_dropr: Num mc drops
4004  */
4005 typedef struct {
4006 	int32_t comp_queued;
4007 	int32_t comp_delivered;
4008 	int32_t msdu_enqued;
4009 	int32_t mpdu_enqued;
4010 	int32_t wmm_drop;
4011 	int32_t local_enqued;
4012 	int32_t local_freed;
4013 	int32_t hw_queued;
4014 	int32_t hw_reaped;
4015 	int32_t underrun;
4016 	uint32_t hw_paused;
4017 	int32_t tx_abort;
4018 	int32_t mpdus_requed;
4019 	uint32_t tx_ko;
4020 	uint32_t tx_xretry;
4021 	uint32_t data_rc;
4022 	uint32_t self_triggers;
4023 	uint32_t sw_retry_failure;
4024 	uint32_t illgl_rate_phy_err;
4025 	uint32_t pdev_cont_xretry;
4026 	uint32_t pdev_tx_timeout;
4027 	uint32_t pdev_resets;
4028 	uint32_t stateless_tid_alloc_failure;
4029 	uint32_t phy_underrun;
4030 	uint32_t txop_ovf;
4031 	uint32_t seq_posted;
4032 	uint32_t seq_failed_queueing;
4033 	uint32_t seq_completed;
4034 	uint32_t seq_restarted;
4035 	uint32_t mu_seq_posted;
4036 	int32_t mpdus_sw_flush;
4037 	int32_t mpdus_hw_filter;
4038 	int32_t mpdus_truncated;
4039 	int32_t mpdus_ack_failed;
4040 	int32_t mpdus_expired;
4041 	uint32_t mc_drop;
4042 } wmi_host_dbg_tx_stats;
4043 
4044 /**
4045  * struct wmi_host_dbg_rx_stats - RX Debug stats
4046  * @mid_ppdu_route_change: Cnts any change in ring routing mid-ppdu
4047  * @status_rcvd: Total number of statuses processed
4048  * @r0_frags: Extra frags on rings 0
4049  * @r1_frags: Extra frags on rings 1
4050  * @r2_frags: Extra frags on rings 2
4051  * @r3_frags: Extra frags on rings 3
4052  * @htt_msdus: MSDUs delivered to HTT
4053  * @htt_mpdus: MPDUs delivered to HTT
4054  * @loc_msdus: MSDUs delivered to local stack
4055  * @loc_mpdus: MPDUS delivered to local stack
4056  * @oversize_amsdu: AMSDUs that have more MSDUs than the status ring size
4057  * @phy_errs: Number of PHY errors
4058  * @phy_err_drop: Number of PHY errors drops
4059  * @mpdu_errs: Number of mpdu errors - FCS, MIC, ENC etc.
4060  * @pdev_rx_timeout: Number of rx inactivity timeouts
4061  * @rx_ovfl_errs: Number of rx overflow errors.
4062  */
4063 typedef struct {
4064 	int32_t mid_ppdu_route_change;
4065 	int32_t status_rcvd;
4066 	int32_t r0_frags;
4067 	int32_t r1_frags;
4068 	int32_t r2_frags;
4069 	int32_t r3_frags;
4070 	int32_t htt_msdus;
4071 	int32_t htt_mpdus;
4072 	int32_t loc_msdus;
4073 	int32_t loc_mpdus;
4074 	int32_t oversize_amsdu;
4075 	int32_t phy_errs;
4076 	int32_t phy_err_drop;
4077 	int32_t mpdu_errs;
4078 	uint32_t pdev_rx_timeout;
4079 	int32_t rx_ovfl_errs;
4080 } wmi_host_dbg_rx_stats;
4081 
4082 /** struct wmi_host_dbg_mem_stats - memory stats
4083  * @iram_free_size: IRAM free size on target
4084  * @dram_free_size: DRAM free size on target
4085  * @sram_free_size: SRAM free size on target
4086  */
4087 typedef struct {
4088 	uint32_t iram_free_size;
4089 	uint32_t dram_free_size;
4090 	/* Only Non-TLV */
4091 	uint32_t sram_free_size;
4092 } wmi_host_dbg_mem_stats;
4093 
4094 typedef struct {
4095 	/* Only TLV */
4096 	int32_t dummy;/* REMOVE THIS ONCE REAL PEER STAT COUNTERS ARE ADDED */
4097 } wmi_host_dbg_peer_stats;
4098 
4099 /**
4100  * struct wmi_host_dbg_stats - host debug stats
4101  * @tx: TX stats of type wmi_host_dbg_tx_stats
4102  * @rx: RX stats of type wmi_host_dbg_rx_stats
4103  * @mem: Memory stats of type wmi_host_dbg_mem_stats
4104  * @peer: peer stats of type wmi_host_dbg_peer_stats
4105  */
4106 typedef struct {
4107 	wmi_host_dbg_tx_stats tx;
4108 	wmi_host_dbg_rx_stats rx;
4109 	wmi_host_dbg_mem_stats mem;
4110 	wmi_host_dbg_peer_stats peer;
4111 } wmi_host_dbg_stats;
4112 
4113 /**
4114  * struct wmi_host_pdev_stats - PDEV stats
4115  * @chan_nf: Channel noise floor
4116  * @tx_frame_count: TX frame count
4117  * @rx_frame_count: RX frame count
4118  * @rx_clear_count: rx clear count
4119  * @cycle_count: cycle count
4120  * @phy_err_count: Phy error count
4121  * @chan_tx_pwr: Channel Tx Power
4122  * @pdev_stats: WAL dbg stats
4123  * @ackRcvBad:
4124  * @rtsBad:
4125  * @rtsGood:
4126  * @fcsBad:
4127  * @noBeacons:
4128  * @mib_int_count:
4129  */
4130 typedef struct {
4131 	int32_t chan_nf;
4132 	uint32_t tx_frame_count;
4133 	uint32_t rx_frame_count;
4134 	uint32_t rx_clear_count;
4135 	uint32_t cycle_count;
4136 	uint32_t phy_err_count;
4137 	uint32_t chan_tx_pwr;
4138 	wmi_host_dbg_stats pdev_stats;
4139 	uint32_t	ackRcvBad;
4140 	uint32_t	rtsBad;
4141 	uint32_t	rtsGood;
4142 	uint32_t	fcsBad;
4143 	uint32_t	noBeacons;
4144 	uint32_t	mib_int_count;
4145 } wmi_host_pdev_stats;
4146 
4147 
4148 /**
4149  * struct wmi_unit_test_event - Structure corresponding to WMI Unit test event
4150  * @vdev_id: VDEV ID
4151  * @module_id: MODULE ID
4152  * @diag_token: Diag Token (the number that was generated in the unit-test cmd)
4153  * @flag: flag has 2 bits 0x1 indicates status, and 0x2 indicates done-bit
4154  * @payload_len: payload_len (blindly copied from payload_len field in WMI)
4155  * @buffer_len: actual number of data bytes in the variable data size TLV
4156  *              buffer_len is likely to be the nearest multiple of 4 (from
4157  *              payload_len). both buffer_len and payload_len need to be
4158  *              passed to wifitool so that the driver can be agnostic
4159  *              regarding these differences.
4160  * @buffer: data buffer
4161  */
4162 typedef struct {
4163 	uint32_t vdev_id;
4164 	uint32_t module_id;
4165 	uint32_t diag_token;
4166 	uint32_t flag;
4167 	uint32_t payload_len;
4168 	uint32_t buffer_len;
4169 	uint8_t buffer[1];
4170 } wmi_unit_test_event;
4171 
4172 
4173 /**
4174  * struct wmi_host_snr_info - WMI host Signal to noise ration info
4175  * @bcn_snr: beacon SNR
4176  * @dat_snr: Data frames SNR
4177  */
4178 typedef struct {
4179 	int32_t bcn_snr;
4180 	int32_t dat_snr;
4181 } wmi_host_snr_info;
4182 
4183 #define WMI_HOST_MAX_TX_RATE_VALUES	10	/*Max Tx Rates */
4184 #define WMI_HOST_MAX_RSSI_VALUES	10	/*Max Rssi values */
4185 
4186 /* The WLAN_MAX_AC macro cannot be changed without breaking
4187  *  * WMI compatibility.
4188  *   * The maximum value of access category
4189  *	*/
4190 #define WMI_HOST_WLAN_MAX_AC  4
4191 
4192 /* The WMI_HOST_MAX_CHAINS macro cannot be changed without breaking WMI
4193  * compatibility.
4194  * The maximum value of number of chains
4195  */
4196 #define WMI_HOST_MAX_CHAINS   8
4197 
4198 /**
4199  * struct wmi_host_vdev_stats - vdev stats structure
4200  * @vdev_id: unique id identifying the VDEV, generated by the caller
4201  *        Rest all Only TLV
4202  * @vdev_snr: wmi_host_snr_info
4203  * @tx_frm_cnt: Total number of packets(per AC) that were successfully
4204  *              transmitted (with and without retries,
4205  *              including multi-cast, broadcast)
4206  * @rx_frm_cnt: Total number of packets that were successfully received
4207  *             (after appropriate filter rules including multi-cast, broadcast)
4208  * @multiple_retry_cnt: The number of MSDU packets and MMPDU frames per AC
4209  *      that the 802.11 station successfully transmitted after
4210  *      more than one retransmission attempt
4211  * @fail_cnt: Total number packets(per AC) failed to transmit
4212  * @rts_fail_cnt: Total number of RTS/CTS sequence failures for transmission
4213  *      of a packet
4214  * @rts_succ_cnt: Total number of RTS/CTS sequence success for transmission
4215  *      of a packet
4216  * @rx_err_cnt: The receive error count. HAL will provide the
4217  *      RxP FCS error global
4218  * @rx_discard_cnt: The sum of the receive error count and
4219  *      dropped-receive-buffer error count (FCS error)
4220  * @ack_fail_cnt: Total number packets failed transmit because of no
4221  *      ACK from the remote entity
4222  * @tx_rate_history:History of last ten transmit rate, in units of 500 kbit/sec
4223  * @bcn_rssi_history: History of last ten Beacon rssi of the connected Bss
4224  */
4225 typedef struct {
4226 	uint32_t vdev_id;
4227 	/* Rest all Only TLV */
4228 	wmi_host_snr_info vdev_snr;
4229 	uint32_t tx_frm_cnt[WMI_HOST_WLAN_MAX_AC];
4230 	uint32_t rx_frm_cnt;
4231 	uint32_t multiple_retry_cnt[WMI_HOST_WLAN_MAX_AC];
4232 	uint32_t fail_cnt[WMI_HOST_WLAN_MAX_AC];
4233 	uint32_t rts_fail_cnt;
4234 	uint32_t rts_succ_cnt;
4235 	uint32_t rx_err_cnt;
4236 	uint32_t rx_discard_cnt;
4237 	uint32_t ack_fail_cnt;
4238 	uint32_t tx_rate_history[WMI_HOST_MAX_TX_RATE_VALUES];
4239 	uint32_t bcn_rssi_history[WMI_HOST_MAX_RSSI_VALUES];
4240 } wmi_host_vdev_stats;
4241 
4242 /**
4243  * struct wmi_host_vdev_stats - vdev stats structure
4244  * @vdev_id: unique id identifying the VDEV, generated by the caller
4245  * @tx_bcn_succ_cnt: Total number of beacon frame transmitted successfully
4246  * @tx_bcn_outage_cnt: Total number of failed beacons
4247  */
4248 typedef struct {
4249 	uint32_t vdev_id;
4250 	uint32_t tx_bcn_succ_cnt;
4251 	uint32_t tx_bcn_outage_cnt;
4252 } wmi_host_bcn_stats;
4253 
4254 /**
4255  * struct wmi_host_vdev_extd_stats - VDEV extended stats
4256  * @vdev_id: unique id identifying the VDEV, generated by the caller
4257  * @ppdu_aggr_cnt: No of Aggrs Queued to HW
4258  * @ppdu_noack: No of PPDU's not Acked includes both aggr and nonaggr's
4259  * @mpdu_queued: No of MPDU/Subframes's queued to HW in Aggregates
4260  * @ppdu_nonaggr_cnt: No of NonAggr/MPDU/Subframes's queued to HW
4261  *         in Legacy NonAggregates
4262  * @mpdu_sw_requed: No of MPDU/Subframes's SW requeued includes
4263  *         both Aggr and NonAggr
4264  * @mpdu_suc_retry: No of MPDU/Subframes's transmitted Successfully
4265  *         after Single/mul HW retry
4266  * @mpdu_suc_multitry: No of MPDU/Subframes's transmitted Success
4267  *         after Multiple HW retry
4268  * @mpdu_fail_retry: No of MPDU/Subframes's failed transmission
4269  *         after Multiple HW retry
4270  * @reserved[13]: for future extensions set to 0x0
4271  */
4272 typedef struct {
4273 	uint32_t vdev_id;
4274 	uint32_t ppdu_aggr_cnt;
4275 	uint32_t ppdu_noack;
4276 	uint32_t mpdu_queued;
4277 	uint32_t ppdu_nonaggr_cnt;
4278 	uint32_t mpdu_sw_requed;
4279 	uint32_t mpdu_suc_retry;
4280 	uint32_t mpdu_suc_multitry;
4281 	uint32_t mpdu_fail_retry;
4282 	uint32_t reserved[13];
4283 } wmi_host_vdev_extd_stats;
4284 
4285 /**
4286  * struct wmi_host_vdev_nac_rssi_event - VDEV nac rssi stats
4287  * @vdev_id: unique id identifying the VDEV, generated by the caller
4288  * @last_rssi: rssi
4289  * @avg_rssi: averge rssi
4290  * @rssi_seq_num: rssi sequence number
4291  */
4292 struct wmi_host_vdev_nac_rssi_event {
4293 	uint32_t vdev_id;
4294 	uint32_t last_rssi;
4295 	uint32_t avg_rssi;
4296 	uint32_t rssi_seq_num;
4297 };
4298 
4299 /**
4300  * structure wmi_host_peer_retry_stats - peer retry stats
4301  * @peer_macaddr: peer macaddr
4302  * @retry_counter_wraparnd_ind: wraparound counter indication
4303  * @msdu_success: successfully transmitted msdus
4304  * @msdu_retried: Retried msdus
4305  * @msdu_mul_retried: msdus retried for more than once
4306  * @msdu_failed: msdus failed
4307  * @reserved: for furure extensions
4308  */
4309 struct wmi_host_peer_retry_stats {
4310 	wmi_host_mac_addr peer_macaddr;
4311 	uint32_t retry_counter_wraparnd_ind;
4312 	uint32_t msdus_success;
4313 	uint32_t msdus_retried;
4314 	uint32_t msdus_mul_retried;
4315 	uint32_t msdus_failed;
4316 	uint32_t reserved[4];
4317 };
4318 
4319 /**
4320  * struct wmi_host_per_chain_rssi_stats - VDEV nac rssi stats
4321  * @vdev_id: unique id identifying the VDEV, generated by the caller
4322  * @rssi_avg_beacon: per chain avg rssi for beacon
4323  * @rssi_avg_data: per chain avg rssi for data
4324  * @peer_macaddr: peer macaddr
4325  */
4326 struct wmi_host_per_chain_rssi_stats {
4327 	uint32_t vdev_id;
4328 	int32_t rssi_avg_beacon[WMI_HOST_MAX_CHAINS];
4329 	int32_t rssi_avg_data[WMI_HOST_MAX_CHAINS];
4330 	wmi_host_mac_addr peer_macaddr;
4331 };
4332 
4333 /**
4334  * struct wmi_host_peer_stats - peer stats
4335  * @peer_macaddr: peer MAC address
4336  * @peer_rssi: rssi
4337  * @peer_rssi_seq_num: rssi sequence number
4338  * @peer_tx_rate: last tx data rate used for peer
4339  * @peer_rx_rate: last rx data rate used for peer
4340  * @currentper: Current PER
4341  * @retries: Retries happened during transmission
4342  * @txratecount: Maximum Aggregation Size
4343  * @max4msframelen: Max4msframelen of tx rates used
4344  * @totalsubframes: Total no of subframes
4345  * @txbytes: No of bytes transmitted to the client
4346  * @nobuffs[4]: Packet Loss due to buffer overflows
4347  * @excretries[4]: Packet Loss due to excessive retries
4348  * @peer_rssi_changed: how many times peer's RSSI changed by a
4349  *        non-negligible amount
4350  */
4351 typedef struct {
4352 	wmi_host_mac_addr peer_macaddr;
4353 	int8_t  peer_rssi;
4354 	uint32_t  peer_rssi_seq_num;
4355 	uint32_t  peer_tx_rate;
4356 	uint32_t  peer_rx_rate;
4357 	uint32_t  currentper;
4358 	uint32_t  retries;
4359 	uint32_t  txratecount;
4360 	uint32_t  max4msframelen;
4361 	uint32_t  totalsubframes;
4362 	uint32_t txbytes;
4363 	uint32_t  nobuffs[4];
4364 	uint32_t  excretries[4];
4365 	uint32_t  peer_rssi_changed;
4366 } wmi_host_peer_stats;
4367 
4368 typedef struct {
4369 	uint32_t dummy;
4370 } wmi_host_bcnflt_stats;
4371 
4372 /**
4373  * struct wmi_host_chan_stats - WMI chan stats
4374  * @chan_mhz: Primary channel freq of the channel for which stats are sent
4375  * @sampling_period_us: Time spent on the channel
4376  * @rx_clear_count: Aggregate duration over a sampling period for
4377  *       which channel activity was observed
4378  * @tx_duration_us: Accumalation of the TX PPDU duration over a sampling period
4379  * @rx_duration_us: Accumalation of the RX PPDU duration over a sampling period
4380  */
4381 typedef struct {
4382 	uint32_t chan_mhz;
4383 	uint32_t sampling_period_us;
4384 	uint32_t rx_clear_count;
4385 	uint32_t tx_duration_us;
4386 	uint32_t rx_duration_us;
4387 } wmi_host_chan_stats;
4388 
4389 #ifdef FEATURE_WLAN_TIME_SYNC_FTM
4390 
4391 #define FTM_TIME_SYNC_QTIME_PAIR_MAX 32
4392 
4393 /**
4394  * struct ftm_time_sync_start_stop_param- Get wlan time sync ftm info
4395  * @vdev_id: vdev id
4396  * @timer_interval: periodicity to trigger wlan time sync strobe
4397  * @num_reads: Number of times to trigger wlabn time sync strobe
4398  * @qtime: ref Qtimer value
4399  * @mac_time: ref Mac timer value
4400  */
4401 struct ftm_time_sync_start_stop_params {
4402 	uint32_t vdev_id;
4403 	uint32_t timer_interval;
4404 	uint32_t num_reads;
4405 	uint64_t qtime;
4406 	uint64_t mac_time;
4407 };
4408 
4409 /**
4410  * struct wlan_time_sync_qtime_pair- Get wlan time sync qtime pair value
4411  * @vdev_id: vdev id
4412  * @qtime_master: qtimer value of master
4413  * @qtime_slave: qtimer value of slave
4414  */
4415 struct wlan_time_sync_qtime_pair {
4416 	uint64_t qtime_master;
4417 	uint64_t qtime_slave;
4418 };
4419 
4420 /**
4421  * struct ftm_time_sync_offset- Get ftm time sync offset
4422  * @vdev_id: vdev id
4423  * @num_qtime: number of qtime values received
4424  * @pairs: array of qtime pairs
4425  */
4426 struct ftm_time_sync_offset {
4427 	uint32_t vdev_id;
4428 	uint32_t num_qtime;
4429 	struct wlan_time_sync_qtime_pair pairs[FTM_TIME_SYNC_QTIME_PAIR_MAX];
4430 };
4431 #endif
4432 
4433 #define WMI_EVENT_ID_INVALID 0
4434 /**
4435  * Host based ENUM IDs for events to abstract target enums for event_id
4436  */
4437 typedef enum {
4438 	wmi_service_ready_event_id = 0,
4439 	wmi_ready_event_id,
4440 	wmi_dbg_msg_event_id,
4441 	wmi_scan_event_id,
4442 	wmi_echo_event_id,
4443 	wmi_update_stats_event_id,
4444 	wmi_inst_rssi_stats_event_id,
4445 	wmi_vdev_start_resp_event_id,
4446 	wmi_vdev_standby_req_event_id,
4447 	wmi_vdev_resume_req_event_id,
4448 	wmi_vdev_stopped_event_id,
4449 	wmi_peer_sta_kickout_event_id,
4450 	wmi_host_swba_event_id,
4451 	wmi_tbttoffset_update_event_id,
4452 	wmi_mgmt_rx_event_id,
4453 	wmi_chan_info_event_id,
4454 	wmi_phyerr_event_id,
4455 	wmi_roam_event_id,
4456 	wmi_profile_match,
4457 	wmi_debug_print_event_id,
4458 	wmi_pdev_qvit_event_id,
4459 	wmi_wlan_profile_data_event_id,
4460 	wmi_rtt_meas_report_event_id,
4461 	wmi_tsf_meas_report_event_id,
4462 	wmi_rtt_error_report_event_id,
4463 	wmi_rtt_keepalive_event_id,
4464 	wmi_oem_cap_event_id,
4465 	wmi_oem_meas_report_event_id,
4466 	wmi_oem_report_event_id,
4467 	wmi_nan_event_id,
4468 	wmi_wow_wakeup_host_event_id,
4469 	wmi_gtk_offload_status_event_id,
4470 	wmi_gtk_rekey_fail_event_id,
4471 	wmi_dcs_interference_event_id,
4472 	wmi_pdev_tpc_config_event_id,
4473 	wmi_csa_handling_event_id,
4474 	wmi_gpio_input_event_id,
4475 	wmi_peer_ratecode_list_event_id,
4476 	wmi_generic_buffer_event_id,
4477 	wmi_mcast_buf_release_event_id,
4478 	wmi_mcast_list_ageout_event_id,
4479 	wmi_vdev_get_keepalive_event_id,
4480 	wmi_wds_peer_event_id,
4481 	wmi_peer_sta_ps_statechg_event_id,
4482 	wmi_pdev_fips_event_id,
4483 	wmi_tt_stats_event_id,
4484 	wmi_pdev_channel_hopping_event_id,
4485 	wmi_pdev_ani_cck_level_event_id,
4486 	wmi_pdev_ani_ofdm_level_event_id,
4487 	wmi_pdev_reserve_ast_entry_event_id,
4488 	wmi_pdev_nfcal_power_event_id,
4489 	wmi_pdev_tpc_event_id,
4490 	wmi_pdev_get_ast_info_event_id,
4491 	wmi_pdev_temperature_event_id,
4492 	wmi_pdev_nfcal_power_all_channels_event_id,
4493 	wmi_pdev_bss_chan_info_event_id,
4494 	wmi_mu_report_event_id,
4495 	wmi_pdev_utf_event_id,
4496 	wmi_pdev_dump_event_id,
4497 	wmi_tx_pause_event_id,
4498 	wmi_dfs_radar_event_id,
4499 	wmi_pdev_l1ss_track_event_id,
4500 	wmi_service_ready_ext_event_id,
4501 	wmi_vdev_install_key_complete_event_id,
4502 	wmi_vdev_mcc_bcn_intvl_change_req_event_id,
4503 	wmi_vdev_tsf_report_event_id,
4504 	wmi_peer_info_event_id,
4505 	wmi_peer_tx_fail_cnt_thr_event_id,
4506 	wmi_peer_estimated_linkspeed_event_id,
4507 	wmi_peer_state_event_id,
4508 	wmi_offload_bcn_tx_status_event_id,
4509 	wmi_offload_prob_resp_tx_status_event_id,
4510 	wmi_mgmt_tx_completion_event_id,
4511 	wmi_tx_delba_complete_event_id,
4512 	wmi_tx_addba_complete_event_id,
4513 	wmi_ba_rsp_ssn_event_id,
4514 	wmi_aggr_state_trig_event_id,
4515 	wmi_roam_synch_event_id,
4516 	wmi_roam_synch_frame_event_id,
4517 	wmi_p2p_disc_event_id,
4518 	wmi_p2p_noa_event_id,
4519 	wmi_p2p_lo_stop_event_id,
4520 	wmi_vdev_add_macaddr_rx_filter_event_id,
4521 	wmi_pdev_resume_event_id,
4522 	wmi_d0_wow_disable_ack_event_id,
4523 	wmi_wow_initial_wakeup_event_id,
4524 	wmi_stats_ext_event_id,
4525 	wmi_iface_link_stats_event_id,
4526 	wmi_peer_link_stats_event_id,
4527 	wmi_radio_link_stats_link,
4528 	wmi_update_fw_mem_dump_event_id,
4529 	wmi_diag_event_id_log_supported_event_id,
4530 	wmi_nlo_match_event_id,
4531 	wmi_nlo_scan_complete_event_id,
4532 	wmi_apfind_event_id,
4533 	wmi_passpoint_match_event_id,
4534 	wmi_chatter_pc_query_event_id,
4535 	wmi_pdev_ftm_intg_event_id,
4536 	wmi_wlan_freq_avoid_event_id,
4537 	wmi_thermal_mgmt_event_id,
4538 	wmi_diag_container_event_id,
4539 	wmi_host_auto_shutdown_event_id,
4540 	wmi_update_whal_mib_stats_event_id,
4541 	wmi_update_vdev_rate_stats_event_id,
4542 	wmi_diag_event_id,
4543 	wmi_unit_test_event_id,
4544 	wmi_ocb_set_sched_event_id,
4545 	wmi_dbg_mesg_flush_complete_event_id,
4546 	wmi_rssi_breach_event_id,
4547 	wmi_uploadh_event_id,
4548 	wmi_captureh_event_id,
4549 	wmi_rfkill_state_change_event_id,
4550 	wmi_tdls_peer_event_id,
4551 	wmi_batch_scan_enabled_event_id,
4552 	wmi_batch_scan_result_event_id,
4553 	wmi_lpi_result_event_id,
4554 	wmi_lpi_status_event_id,
4555 	wmi_lpi_handoff_event_id,
4556 	wmi_extscan_start_stop_event_id,
4557 	wmi_extscan_operation_event_id,
4558 	wmi_extscan_table_usage_event_id,
4559 	wmi_extscan_cached_results_event_id,
4560 	wmi_extscan_wlan_change_results_event_id,
4561 	wmi_extscan_hotlist_match_event_id,
4562 	wmi_extscan_capabilities_event_id,
4563 	wmi_extscan_hotlist_ssid_match_event_id,
4564 	wmi_mdns_stats_event_id,
4565 	wmi_sap_ofl_add_sta_event_id,
4566 	wmi_sap_ofl_del_sta_event_id,
4567 	wmi_ocb_set_config_resp_event_id,
4568 	wmi_ocb_get_tsf_timer_resp_event_id,
4569 	wmi_dcc_get_stats_resp_event_id,
4570 	wmi_dcc_update_ndl_resp_event_id,
4571 	wmi_dcc_stats_event_id,
4572 	wmi_soc_set_hw_mode_resp_event_id,
4573 	wmi_soc_hw_mode_transition_event_id,
4574 	wmi_soc_set_dual_mac_config_resp_event_id,
4575 	wmi_tx_data_traffic_ctrl_event_id,
4576 	wmi_peer_tx_mu_txmit_count_event_id,
4577 	wmi_peer_gid_userpos_list_event_id,
4578 	wmi_pdev_check_cal_version_event_id,
4579 	wmi_atf_peer_stats_event_id,
4580 	wmi_peer_delete_response_event_id,
4581 	wmi_peer_delete_all_response_event_id,
4582 	wmi_pdev_csa_switch_count_status_event_id,
4583 	wmi_reg_chan_list_cc_event_id,
4584 	wmi_offchan_data_tx_completion_event,
4585 	wmi_dfs_cac_complete_id,
4586 	wmi_dfs_radar_detection_event_id,
4587 	wmi_ext_tbttoffset_update_event_id,
4588 	wmi_11d_new_country_event_id,
4589 	wmi_get_arp_stats_req_id,
4590 	wmi_service_available_event_id,
4591 	wmi_update_rcpi_event_id,
4592 	wmi_pdev_wds_entry_list_event_id,
4593 	wmi_ndp_initiator_rsp_event_id,
4594 	wmi_ndp_indication_event_id,
4595 	wmi_ndp_confirm_event_id,
4596 	wmi_ndp_responder_rsp_event_id,
4597 	wmi_ndp_end_indication_event_id,
4598 	wmi_ndp_end_rsp_event_id,
4599 	wmi_nan_dmesg_event_id,
4600 	wmi_ndl_schedule_update_event_id,
4601 	wmi_ndp_event_id,
4602 	wmi_oem_response_event_id,
4603 	wmi_peer_stats_info_event_id,
4604 	wmi_pdev_chip_power_stats_event_id,
4605 	wmi_ap_ps_egap_info_event_id,
4606 	wmi_peer_assoc_conf_event_id,
4607 	wmi_vdev_delete_resp_event_id,
4608 	wmi_apf_capability_info_event_id,
4609 	wmi_vdev_encrypt_decrypt_data_rsp_event_id,
4610 	wmi_report_rx_aggr_failure_event_id,
4611 	wmi_pdev_chip_pwr_save_failure_detect_event_id,
4612 	wmi_peer_antdiv_info_event_id,
4613 	wmi_pdev_set_hw_mode_rsp_event_id,
4614 	wmi_pdev_hw_mode_transition_event_id,
4615 	wmi_pdev_set_mac_config_resp_event_id,
4616 	wmi_coex_bt_activity_event_id,
4617 	wmi_mgmt_tx_bundle_completion_event_id,
4618 	wmi_radio_tx_power_level_stats_event_id,
4619 	wmi_report_stats_event_id,
4620 	wmi_dma_buf_release_event_id,
4621 	wmi_sap_obss_detection_report_event_id,
4622 	wmi_obss_color_collision_report_event_id,
4623 	wmi_host_swfda_event_id,
4624 	wmi_sar_get_limits_event_id,
4625 	wmi_pdev_div_rssi_antid_event_id,
4626 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
4627 	wmi_host_dfs_status_check_event_id,
4628 #endif
4629 #ifdef WLAN_SUPPORT_TWT
4630 	wmi_twt_enable_complete_event_id,
4631 	wmi_twt_disable_complete_event_id,
4632 	wmi_twt_add_dialog_complete_event_id,
4633 	wmi_twt_del_dialog_complete_event_id,
4634 	wmi_twt_pause_dialog_complete_event_id,
4635 	wmi_twt_resume_dialog_complete_event_id,
4636 	wmi_twt_session_stats_event_id,
4637 #endif
4638 	wmi_apf_get_vdev_work_memory_resp_event_id,
4639 	wmi_roam_scan_stats_event_id,
4640 	wmi_vdev_ocac_complete_event_id,
4641 
4642 #ifdef OL_ATH_SMART_LOGGING
4643 	wmi_debug_fatal_condition_eventid,
4644 #endif /* OL_ATH_SMART_LOGGING */
4645 	wmi_wlan_sar2_result_event_id,
4646 	wmi_esp_estimate_event_id,
4647 	wmi_pdev_ctl_failsafe_check_event_id,
4648 	wmi_vdev_bcn_reception_stats_event_id,
4649 	wmi_roam_blacklist_event_id,
4650 	wmi_wlm_stats_event_id,
4651 	wmi_peer_cfr_capture_event_id,
4652 	wmi_pdev_cold_boot_cal_event_id,
4653 	wmi_vdev_get_mws_coex_state_eventid,
4654 	wmi_vdev_get_mws_coex_dpwb_state_eventid,
4655 	wmi_vdev_get_mws_coex_tdm_state_eventid,
4656 	wmi_vdev_get_mws_coex_idrx_state_eventid,
4657 	wmi_vdev_get_mws_coex_antenna_sharing_state_eventid,
4658 #ifdef WLAN_FEATURE_INTEROP_ISSUES_AP
4659 	wmi_pdev_interop_issues_ap_event_id,
4660 #endif
4661 	wmi_coex_report_antenna_isolation_event_id,
4662 	wmi_chan_rf_characterization_info_event_id,
4663 	wmi_roam_auth_offload_event_id,
4664 	wmi_service_ready_ext2_event_id,
4665 	wmi_get_elna_bypass_event_id,
4666 	wmi_motion_det_host_eventid,
4667 	wmi_motion_det_base_line_host_eventid,
4668 	wmi_get_ani_level_event_id,
4669 	wmi_peer_tx_pn_response_event_id,
4670 	wmi_roam_stats_event_id,
4671 	wmi_oem_data_event_id,
4672 	wmi_mgmt_offload_data_event_id,
4673 	wmi_pdev_multi_vdev_restart_response_event_id,
4674 	wmi_roam_pmkid_request_event_id,
4675 #ifdef FEATURE_WLAN_TIME_SYNC_FTM
4676 	wmi_wlan_time_sync_ftm_start_stop_event_id,
4677 	wmi_wlan_time_sync_q_master_slave_offset_eventid,
4678 #endif
4679 	wmi_roam_scan_chan_list_id,
4680 	wmi_muedca_params_config_eventid,
4681 	wmi_pdev_sscan_fw_param_eventid,
4682 	wmi_roam_cap_report_event_id,
4683 	wmi_vdev_bcn_latency_event_id,
4684 	wmi_vdev_disconnect_event_id,
4685 	wmi_peer_create_conf_event_id,
4686 	wmi_events_max,
4687 } wmi_conv_event_id;
4688 
4689 #define WMI_UNAVAILABLE_PARAM 0
4690 /**
4691  * Host based ENUM IDs for PDEV params to abstract target enums
4692  */
4693 typedef enum {
4694 	wmi_pdev_param_tx_chain_mask = 0,
4695 	wmi_pdev_param_rx_chain_mask,
4696 	wmi_pdev_param_txpower_limit2g,
4697 	wmi_pdev_param_txpower_limit5g,
4698 	wmi_pdev_param_txpower_scale,
4699 	wmi_pdev_param_beacon_gen_mode,
4700 	wmi_pdev_param_beacon_tx_mode,
4701 	wmi_pdev_param_resmgr_offchan_mode,
4702 	wmi_pdev_param_protection_mode,
4703 	wmi_pdev_param_dynamic_bw,
4704 	wmi_pdev_param_non_agg_sw_retry_th,
4705 	wmi_pdev_param_agg_sw_retry_th,
4706 	wmi_pdev_param_sta_kickout_th,
4707 	wmi_pdev_param_ac_aggrsize_scaling,
4708 	wmi_pdev_param_ltr_enable,
4709 	wmi_pdev_param_ltr_ac_latency_be,
4710 	wmi_pdev_param_ltr_ac_latency_bk,
4711 	wmi_pdev_param_ltr_ac_latency_vi,
4712 	wmi_pdev_param_ltr_ac_latency_vo,
4713 	wmi_pdev_param_ltr_ac_latency_timeout,
4714 	wmi_pdev_param_ltr_sleep_override,
4715 	wmi_pdev_param_ltr_rx_override,
4716 	wmi_pdev_param_ltr_tx_activity_timeout,
4717 	wmi_pdev_param_l1ss_enable,
4718 	wmi_pdev_param_dsleep_enable,
4719 	wmi_pdev_param_pcielp_txbuf_flush,
4720 	wmi_pdev_param_pcielp_txbuf_watermark,
4721 	wmi_pdev_param_pcielp_txbuf_tmo_en,
4722 	wmi_pdev_param_pcielp_txbuf_tmo_value,
4723 	wmi_pdev_param_pdev_stats_update_period,
4724 	wmi_pdev_param_vdev_stats_update_period,
4725 	wmi_pdev_param_peer_stats_update_period,
4726 	wmi_pdev_param_bcnflt_stats_update_period,
4727 	wmi_pdev_param_pmf_qos,
4728 	wmi_pdev_param_arp_ac_override,
4729 	wmi_pdev_param_dcs,
4730 	wmi_pdev_param_ani_enable,
4731 	wmi_pdev_param_ani_poll_period,
4732 	wmi_pdev_param_ani_listen_period,
4733 	wmi_pdev_param_ani_ofdm_level,
4734 	wmi_pdev_param_ani_cck_level,
4735 	wmi_pdev_param_dyntxchain,
4736 	wmi_pdev_param_proxy_sta,
4737 	wmi_pdev_param_idle_ps_config,
4738 	wmi_pdev_param_power_gating_sleep,
4739 	wmi_pdev_param_aggr_burst,
4740 	wmi_pdev_param_rx_decap_mode,
4741 	wmi_pdev_param_fast_channel_reset,
4742 	wmi_pdev_param_burst_dur,
4743 	wmi_pdev_param_burst_enable,
4744 	wmi_pdev_param_smart_antenna_default_antenna,
4745 	wmi_pdev_param_igmpmld_override,
4746 	wmi_pdev_param_igmpmld_tid,
4747 	wmi_pdev_param_antenna_gain,
4748 	wmi_pdev_param_rx_filter,
4749 	wmi_pdev_set_mcast_to_ucast_tid,
4750 	wmi_pdev_param_proxy_sta_mode,
4751 	wmi_pdev_param_set_mcast2ucast_mode,
4752 	wmi_pdev_param_set_mcast2ucast_buffer,
4753 	wmi_pdev_param_remove_mcast2ucast_buffer,
4754 	wmi_pdev_peer_sta_ps_statechg_enable,
4755 	wmi_pdev_param_block_interbss,
4756 	wmi_pdev_param_set_disable_reset_cmdid,
4757 	wmi_pdev_param_set_msdu_ttl_cmdid,
4758 	wmi_pdev_param_set_ppdu_duration_cmdid,
4759 	wmi_pdev_param_txbf_sound_period_cmdid,
4760 	wmi_pdev_param_set_promisc_mode_cmdid,
4761 	wmi_pdev_param_set_burst_mode_cmdid,
4762 	wmi_pdev_param_en_stats,
4763 	wmi_pdev_param_mu_group_policy,
4764 	wmi_pdev_param_noise_detection,
4765 	wmi_pdev_param_noise_threshold,
4766 	wmi_pdev_param_dpd_enable,
4767 	wmi_pdev_param_set_mcast_bcast_echo,
4768 	wmi_pdev_param_atf_strict_sch,
4769 	wmi_pdev_param_atf_sched_duration,
4770 	wmi_pdev_param_ant_plzn,
4771 	wmi_pdev_param_mgmt_retry_limit,
4772 	wmi_pdev_param_sensitivity_level,
4773 	wmi_pdev_param_signed_txpower_2g,
4774 	wmi_pdev_param_signed_txpower_5g,
4775 	wmi_pdev_param_enable_per_tid_amsdu,
4776 	wmi_pdev_param_enable_per_tid_ampdu,
4777 	wmi_pdev_param_cca_threshold,
4778 	wmi_pdev_param_rts_fixed_rate,
4779 	wmi_pdev_param_cal_period,
4780 	wmi_pdev_param_pdev_reset,
4781 	wmi_pdev_param_wapi_mbssid_offset,
4782 	wmi_pdev_param_arp_srcaddr,
4783 	wmi_pdev_param_arp_dstaddr,
4784 	wmi_pdev_param_txpower_decr_db,
4785 	wmi_pdev_param_rx_batchmode,
4786 	wmi_pdev_param_packet_aggr_delay,
4787 	wmi_pdev_param_atf_obss_noise_sch,
4788 	wmi_pdev_param_atf_obss_noise_scaling_factor,
4789 	wmi_pdev_param_cust_txpower_scale,
4790 	wmi_pdev_param_atf_dynamic_enable,
4791 	wmi_pdev_param_atf_ssid_group_policy,
4792 	wmi_pdev_param_rfkill_enable,
4793 	wmi_pdev_param_hw_rfkill_config,
4794 	wmi_pdev_param_low_power_rf_enable,
4795 	wmi_pdev_param_l1ss_track,
4796 	wmi_pdev_param_hyst_en,
4797 	wmi_pdev_param_power_collapse_enable,
4798 	wmi_pdev_param_led_sys_state,
4799 	wmi_pdev_param_led_enable,
4800 	wmi_pdev_param_audio_over_wlan_latency,
4801 	wmi_pdev_param_audio_over_wlan_enable,
4802 	wmi_pdev_param_whal_mib_stats_update_enable,
4803 	wmi_pdev_param_vdev_rate_stats_update_period,
4804 	wmi_pdev_param_cts_cbw,
4805 	wmi_pdev_param_wnts_config,
4806 	wmi_pdev_param_adaptive_early_rx_enable,
4807 	wmi_pdev_param_adaptive_early_rx_min_sleep_slop,
4808 	wmi_pdev_param_adaptive_early_rx_inc_dec_step,
4809 	wmi_pdev_param_early_rx_fix_sleep_slop,
4810 	wmi_pdev_param_bmiss_based_adaptive_bto_enable,
4811 	wmi_pdev_param_bmiss_bto_min_bcn_timeout,
4812 	wmi_pdev_param_bmiss_bto_inc_dec_step,
4813 	wmi_pdev_param_bto_fix_bcn_timeout,
4814 	wmi_pdev_param_ce_based_adaptive_bto_enable,
4815 	wmi_pdev_param_ce_bto_combo_ce_value,
4816 	wmi_pdev_param_tx_chain_mask_2g,
4817 	wmi_pdev_param_rx_chain_mask_2g,
4818 	wmi_pdev_param_tx_chain_mask_5g,
4819 	wmi_pdev_param_rx_chain_mask_5g,
4820 	wmi_pdev_param_tx_chain_mask_cck,
4821 	wmi_pdev_param_tx_chain_mask_1ss,
4822 	wmi_pdev_param_enable_btcoex,
4823 	wmi_pdev_param_atf_peer_stats,
4824 	wmi_pdev_param_btcoex_cfg,
4825 	wmi_pdev_param_mesh_mcast_enable,
4826 	wmi_pdev_param_tx_ack_timeout,
4827 	wmi_pdev_param_soft_tx_chain_mask,
4828 	wmi_pdev_param_cck_tx_enable,
4829 	wmi_pdev_param_esp_indication_period,
4830 	wmi_pdev_param_antenna_gain_half_db,
4831 	wmi_pdev_param_ru26_allowed,
4832 	wmi_pdev_param_esp_ba_window,
4833 	wmi_pdev_param_esp_airtime_fraction,
4834 	wmi_pdev_param_esp_ppdu_duration,
4835 	wmi_pdev_param_use_nol,
4836 	wmi_pdev_param_enable_peer_retry_stats,
4837 	wmi_pdev_param_ul_trig_int,
4838 	wmi_pdev_param_sub_channel_marking,
4839 	wmi_pdev_param_ul_ppdu_duration,
4840 	wmi_pdev_param_equal_ru_allocation_enable,
4841 	wmi_pdev_param_per_peer_prd_cfr_enable,
4842 	wmi_pdev_param_nav_override_config,
4843 	wmi_pdev_param_set_mgmt_ttl,
4844 	wmi_pdev_param_set_prb_rsp_ttl,
4845 	wmi_pdev_param_set_mu_ppdu_duration,
4846 	wmi_pdev_param_set_tbtt_ctrl,
4847 	wmi_pdev_param_set_cmd_obss_pd_threshold,
4848 	wmi_pdev_param_set_cmd_obss_pd_per_ac,
4849 	wmi_pdev_param_set_cong_ctrl_max_msdus,
4850 	wmi_pdev_param_enable_fw_dynamic_he_edca,
4851 	wmi_pdev_param_enable_srp,
4852 	wmi_pdev_param_enable_sr_prohibit,
4853 	wmi_pdev_param_sr_trigger_margin,
4854 	wmi_pdev_param_pream_punct_bw,
4855 	wmi_pdev_param_enable_mbssid_ctrl_frame,
4856 	wmi_pdev_param_max,
4857 } wmi_conv_pdev_params_id;
4858 
4859 
4860 /**
4861  * Host based ENUM IDs for VDEV params to abstract target enums
4862  */
4863 typedef enum {
4864 	wmi_vdev_param_rts_threshold = 0,
4865 	wmi_vdev_param_fragmentation_threshold,
4866 	wmi_vdev_param_beacon_interval,
4867 	wmi_vdev_param_listen_interval,
4868 	wmi_vdev_param_multicast_rate,
4869 	wmi_vdev_param_mgmt_tx_rate,
4870 	wmi_vdev_param_slot_time,
4871 	wmi_vdev_param_preamble,
4872 	wmi_vdev_param_swba_time,
4873 	wmi_vdev_stats_update_period,
4874 	wmi_vdev_pwrsave_ageout_time,
4875 	wmi_vdev_host_swba_interval,
4876 	wmi_vdev_param_dtim_period,
4877 	wmi_vdev_oc_scheduler_air_time_limit,
4878 	wmi_vdev_param_wds,
4879 	wmi_vdev_param_atim_window,
4880 	wmi_vdev_param_bmiss_count_max,
4881 	wmi_vdev_param_bmiss_first_bcnt,
4882 	wmi_vdev_param_bmiss_final_bcnt,
4883 	wmi_vdev_param_feature_wmm,
4884 	wmi_vdev_param_chwidth,
4885 	wmi_vdev_param_chextoffset,
4886 	wmi_vdev_param_disable_htprotection,
4887 	wmi_vdev_param_sta_quickkickout,
4888 	wmi_vdev_param_mgmt_rate,
4889 	wmi_vdev_param_protection_mode,
4890 	wmi_vdev_param_fixed_rate,
4891 	wmi_vdev_param_sgi,
4892 	wmi_vdev_param_ldpc,
4893 	wmi_vdev_param_tx_stbc,
4894 	wmi_vdev_param_rx_stbc,
4895 	wmi_vdev_param_intra_bss_fwd,
4896 	wmi_vdev_param_def_keyid,
4897 	wmi_vdev_param_nss,
4898 	wmi_vdev_param_bcast_data_rate,
4899 	wmi_vdev_param_mcast_data_rate,
4900 	wmi_vdev_param_mcast_indicate,
4901 	wmi_vdev_param_dhcp_indicate,
4902 	wmi_vdev_param_unknown_dest_indicate,
4903 	wmi_vdev_param_ap_keepalive_min_idle_inactive_time_secs,
4904 	wmi_vdev_param_ap_keepalive_max_idle_inactive_time_secs,
4905 	wmi_vdev_param_ap_keepalive_max_unresponsive_time_secs,
4906 	wmi_vdev_param_ap_enable_nawds,
4907 	wmi_vdev_param_mcast2ucast_set,
4908 	wmi_vdev_param_enable_rtscts,
4909 	wmi_vdev_param_rc_num_retries,
4910 	wmi_vdev_param_txbf,
4911 	wmi_vdev_param_packet_powersave,
4912 	wmi_vdev_param_drop_unencry,
4913 	wmi_vdev_param_tx_encap_type,
4914 	wmi_vdev_param_ap_detect_out_of_sync_sleeping_sta_time_secs,
4915 	wmi_vdev_param_cabq_maxdur,
4916 	wmi_vdev_param_mfptest_set,
4917 	wmi_vdev_param_rts_fixed_rate,
4918 	wmi_vdev_param_vht_sgimask,
4919 	wmi_vdev_param_vht80_ratemask,
4920 	wmi_vdev_param_early_rx_adjust_enable,
4921 	wmi_vdev_param_early_rx_tgt_bmiss_num,
4922 	wmi_vdev_param_early_rx_bmiss_sample_cycle,
4923 	wmi_vdev_param_early_rx_slop_step,
4924 	wmi_vdev_param_early_rx_init_slop,
4925 	wmi_vdev_param_early_rx_adjust_pause,
4926 	wmi_vdev_param_proxy_sta,
4927 	wmi_vdev_param_meru_vc,
4928 	wmi_vdev_param_rx_decap_type,
4929 	wmi_vdev_param_bw_nss_ratemask,
4930 	wmi_vdev_param_sensor_ap,
4931 	wmi_vdev_param_beacon_rate,
4932 	wmi_vdev_param_dtim_enable_cts,
4933 	wmi_vdev_param_sta_kickout,
4934 	wmi_vdev_param_tx_pwrlimit,
4935 	wmi_vdev_param_snr_num_for_cal,
4936 	wmi_vdev_param_roam_fw_offload,
4937 	wmi_vdev_param_enable_rmc,
4938 	wmi_vdev_param_ibss_max_bcn_lost_ms,
4939 	wmi_vdev_param_max_rate,
4940 	wmi_vdev_param_early_rx_drift_sample,
4941 	wmi_vdev_param_set_ibss_tx_fail_cnt_thr,
4942 	wmi_vdev_param_ebt_resync_timeout,
4943 	wmi_vdev_param_aggr_trig_event_enable,
4944 	wmi_vdev_param_is_ibss_power_save_allowed,
4945 	wmi_vdev_param_is_power_collapse_allowed,
4946 	wmi_vdev_param_is_awake_on_txrx_enabled,
4947 	wmi_vdev_param_inactivity_cnt,
4948 	wmi_vdev_param_txsp_end_inactivity_time_ms,
4949 	wmi_vdev_param_dtim_policy,
4950 	wmi_vdev_param_ibss_ps_warmup_time_secs,
4951 	wmi_vdev_param_ibss_ps_1rx_chain_in_atim_window_enable,
4952 	wmi_vdev_param_rx_leak_window,
4953 	wmi_vdev_param_stats_avg_factor,
4954 	wmi_vdev_param_disconnect_th,
4955 	wmi_vdev_param_rtscts_rate,
4956 	wmi_vdev_param_mcc_rtscts_protection_enable,
4957 	wmi_vdev_param_mcc_broadcast_probe_enable,
4958 	wmi_vdev_param_capabilities,
4959 	wmi_vdev_param_mgmt_tx_power,
4960 	wmi_vdev_param_atf_ssid_sched_policy,
4961 	wmi_vdev_param_disable_dyn_bw_rts,
4962 	wmi_vdev_param_ampdu_subframe_size_per_ac,
4963 	wmi_vdev_param_he_dcm_enable,
4964 	wmi_vdev_param_he_bss_color,
4965 	wmi_vdev_param_he_range_ext_enable,
4966 	wmi_vdev_param_set_hemu_mode,
4967 	wmi_vdev_param_set_he_ltf,
4968 	wmi_vdev_param_set_heop,
4969 	wmi_vdev_param_disable_cabq,
4970 	wmi_vdev_param_rate_dropdown_bmap,
4971 	wmi_vdev_param_tx_power,
4972 	wmi_vdev_param_set_ba_mode,
4973 	wmi_vdev_param_autorate_misc_cfg,
4974 	wmi_vdev_param_amsdu_subframe_size_per_ac,
4975 	wmi_vdev_param_set_he_sounding_mode,
4976 	wmi_vdev_param_sifs_trigger_rate,
4977 	wmi_vdev_param_ul_shortgi,
4978 	wmi_vdev_param_ul_he_ltf,
4979 	wmi_vdev_param_ul_nss,
4980 	wmi_vdev_param_ul_ppdu_bw,
4981 	wmi_vdev_param_ul_ldpc,
4982 	wmi_vdev_param_ul_stbc,
4983 	wmi_vdev_param_ul_fixed_rate,
4984 	wmi_vdev_param_rawmode_open_war,
4985 	wmi_vdev_param_max_mtu_size,
4986 	wmi_vdev_param_mcast_rc_stale_period,
4987 	wmi_vdev_param_enable_multi_group_key,
4988 	wmi_vdev_param_max_group_keys,
4989 	wmi_vdev_param_enable_mcast_rc,
4990 	wmi_vdev_param_6ghz_params,
4991 	wmi_vdev_param_enable_disable_roam_reason_vsie,
4992 	wmi_vdev_param_set_cmd_obss_pd_threshold,
4993 	wmi_vdev_param_set_cmd_obss_pd_per_ac,
4994 	wmi_vdev_param_enable_srp,
4995 	wmi_vdev_param_nan_config_features,
4996 } wmi_conv_vdev_param_id;
4997 
4998 /**
4999  * Host based ENUM IDs for service bits to abstract target enums
5000  */
5001 typedef enum {
5002 	wmi_service_beacon_offload = 0,
5003 	wmi_service_scan_offload,
5004 	wmi_service_roam_offload,
5005 	wmi_service_bcn_miss_offload,
5006 	wmi_service_sta_pwrsave,
5007 	wmi_service_sta_advanced_pwrsave,
5008 	wmi_service_ap_uapsd,
5009 	wmi_service_ap_dfs,
5010 	wmi_service_11ac,
5011 	wmi_service_blockack,
5012 	wmi_service_phyerr,
5013 	wmi_service_bcn_filter,
5014 	wmi_service_rtt,
5015 	wmi_service_ratectrl,
5016 	wmi_service_wow,
5017 	wmi_service_ratectrl_cache,
5018 	wmi_service_iram_tids,
5019 	wmi_service_burst,
5020 	wmi_service_smart_antenna_sw_support,
5021 	wmi_service_gtk_offload,
5022 	wmi_service_scan_sch,
5023 	wmi_service_csa_offload,
5024 	wmi_service_chatter,
5025 	wmi_service_coex_freqavoid,
5026 	wmi_service_packet_power_save,
5027 	wmi_service_force_fw_hang,
5028 	wmi_service_smart_antenna_hw_support,
5029 	wmi_service_gpio,
5030 	wmi_sta_uapsd_basic_auto_trig,
5031 	wmi_sta_uapsd_var_auto_trig,
5032 	wmi_service_sta_keep_alive,
5033 	wmi_service_tx_encap,
5034 	wmi_service_ap_ps_detect_out_of_sync,
5035 	wmi_service_early_rx,
5036 	wmi_service_enhanced_proxy_sta,
5037 	wmi_service_tt,
5038 	wmi_service_atf,
5039 	wmi_service_peer_caching,
5040 	wmi_service_coex_gpio,
5041 	wmi_service_aux_spectral_intf,
5042 	wmi_service_aux_chan_load_intf,
5043 	wmi_service_bss_channel_info_64,
5044 	wmi_service_ext_res_cfg_support,
5045 	wmi_service_mesh,
5046 	wmi_service_restrt_chnl_support,
5047 	wmi_service_roam_scan_offload,
5048 	wmi_service_arpns_offload,
5049 	wmi_service_nlo,
5050 	wmi_service_sta_dtim_ps_modulated_dtim,
5051 	wmi_service_sta_smps,
5052 	wmi_service_fwtest,
5053 	wmi_service_sta_wmmac,
5054 	wmi_service_tdls,
5055 	wmi_service_mcc_bcn_interval_change,
5056 	wmi_service_adaptive_ocs,
5057 	wmi_service_ba_ssn_support,
5058 	wmi_service_filter_ipsec_natkeepalive,
5059 	wmi_service_wlan_hb,
5060 	wmi_service_lte_ant_share_support,
5061 	wmi_service_batch_scan,
5062 	wmi_service_qpower,
5063 	wmi_service_plmreq,
5064 	wmi_service_thermal_mgmt,
5065 	wmi_service_rmc,
5066 	wmi_service_mhf_offload,
5067 	wmi_service_coex_sar,
5068 	wmi_service_bcn_txrate_override,
5069 	wmi_service_nan,
5070 	wmi_service_l1ss_stat,
5071 	wmi_service_estimate_linkspeed,
5072 	wmi_service_obss_scan,
5073 	wmi_service_tdls_offchan,
5074 	wmi_service_tdls_uapsd_buffer_sta,
5075 	wmi_service_tdls_uapsd_sleep_sta,
5076 	wmi_service_ibss_pwrsave,
5077 	wmi_service_lpass,
5078 	wmi_service_extscan,
5079 	wmi_service_d0wow,
5080 	wmi_service_hsoffload,
5081 	wmi_service_roam_ho_offload,
5082 	wmi_service_rx_full_reorder,
5083 	wmi_service_dhcp_offload,
5084 	wmi_service_sta_rx_ipa_offload_support,
5085 	wmi_service_mdns_offload,
5086 	wmi_service_sap_auth_offload,
5087 	wmi_service_dual_band_simultaneous_support,
5088 	wmi_service_ocb,
5089 	wmi_service_ap_arpns_offload,
5090 	wmi_service_per_band_chainmask_support,
5091 	wmi_service_packet_filter_offload,
5092 	wmi_service_mgmt_tx_htt,
5093 	wmi_service_mgmt_tx_wmi,
5094 	wmi_service_ext_msg,
5095 	wmi_service_mawc,
5096 
5097 	wmi_service_peer_stats,
5098 	wmi_service_mesh_11s,
5099 	wmi_service_periodic_chan_stat_support,
5100 	wmi_service_tx_mode_push_only,
5101 	wmi_service_tx_mode_push_pull,
5102 	wmi_service_tx_mode_dynamic,
5103 	wmi_service_check_cal_version,
5104 	wmi_service_btcoex_duty_cycle,
5105 	wmi_service_4_wire_coex_support,
5106 	wmi_service_multiple_vdev_restart,
5107 	wmi_service_peer_assoc_conf,
5108 	wmi_service_egap,
5109 	wmi_service_sta_pmf_offload,
5110 	wmi_service_unified_wow_capability,
5111 	wmi_service_enterprise_mesh,
5112 	wmi_service_apf_offload,
5113 	wmi_service_sync_delete_cmds,
5114 	wmi_service_ratectrl_limit_max_min_rates,
5115 	wmi_service_nan_data,
5116 	wmi_service_nan_rtt,
5117 	wmi_service_11ax,
5118 	wmi_service_deprecated_replace,
5119 	wmi_service_tdls_conn_tracker_in_host_mode,
5120 	wmi_service_enhanced_mcast_filter,
5121 	wmi_service_half_rate_quarter_rate_support,
5122 	wmi_service_vdev_rx_filter,
5123 	wmi_service_p2p_listen_offload_support,
5124 	wmi_service_mark_first_wakeup_packet,
5125 	wmi_service_multiple_mcast_filter_set,
5126 	wmi_service_host_managed_rx_reorder,
5127 	wmi_service_flash_rdwr_support,
5128 	wmi_service_wlan_stats_report,
5129 	wmi_service_tx_msdu_id_new_partition_support,
5130 	wmi_service_dfs_phyerr_offload,
5131 	wmi_service_rcpi_support,
5132 	wmi_service_fw_mem_dump_support,
5133 	wmi_service_peer_stats_info,
5134 	wmi_service_regulatory_db,
5135 	wmi_service_11d_offload,
5136 	wmi_service_hw_data_filtering,
5137 	wmi_service_pkt_routing,
5138 	wmi_service_offchan_tx_wmi,
5139 	wmi_service_chan_load_info,
5140 	wmi_service_extended_nss_support,
5141 	wmi_service_ack_timeout,
5142 	wmi_service_widebw_scan,
5143 	wmi_service_bcn_offload_start_stop_support,
5144 	wmi_service_offchan_data_tid_support,
5145 	wmi_service_support_dma,
5146 	wmi_service_8ss_tx_bfee,
5147 	wmi_service_fils_support,
5148 	wmi_service_mawc_support,
5149 	wmi_service_wow_wakeup_by_timer_pattern,
5150 	wmi_service_11k_neighbour_report_support,
5151 	wmi_service_ap_obss_detection_offload,
5152 	wmi_service_bss_color_offload,
5153 	wmi_service_gmac_offload_support,
5154 	wmi_service_host_dfs_check_support,
5155 	wmi_service_dual_beacon_on_single_mac_scc_support,
5156 	wmi_service_dual_beacon_on_single_mac_mcc_support,
5157 	wmi_service_twt_requestor,
5158 	wmi_service_twt_responder,
5159 	wmi_service_listen_interval_offload_support,
5160 
5161 #ifdef OL_ATH_SMART_LOGGING
5162 	wmi_service_smart_logging_support,
5163 #endif
5164 	wmi_service_infra_mbssid,
5165 	wmi_service_esp_support,
5166 	wmi_service_obss_spatial_reuse,
5167 	wmi_service_per_vdev_chain_support,
5168 	wmi_service_new_htt_msg_format,
5169 	wmi_service_peer_unmap_cnf_support,
5170 	wmi_service_beacon_reception_stats,
5171 	wmi_service_vdev_latency_config,
5172 	wmi_service_nan_dbs_support,
5173 	wmi_service_ndi_dbs_support,
5174 	wmi_service_nan_sap_support,
5175 	wmi_service_ndi_sap_support,
5176 	wmi_service_nan_disable_support,
5177 	wmi_service_sta_plus_sta_support,
5178 	wmi_service_hw_db2dbm_support,
5179 	wmi_service_wlm_stats_support,
5180 	wmi_service_ul_ru26_allowed,
5181 	wmi_service_cfr_capture_support,
5182 	wmi_service_bcast_twt_support,
5183 	wmi_service_wpa3_ft_sae_support,
5184 	wmi_service_wpa3_ft_suite_b_support,
5185 	wmi_service_ft_fils,
5186 	wmi_service_adaptive_11r_support,
5187 	wmi_service_data_stall_recovery_support,
5188 	wmi_service_tx_compl_tsf64,
5189 	wmi_service_vdev_delete_all_peer,
5190 	wmi_service_three_way_coex_config_legacy,
5191 	wmi_service_rx_fse_support,
5192 	wmi_service_dynamic_hw_mode,
5193 	wmi_service_sae_roam_support,
5194 	wmi_service_owe_roam_support,
5195 	wmi_service_ext2_msg,
5196 	wmi_service_6ghz_support,
5197 	wmi_service_bw_165mhz_support,
5198 	wmi_service_bw_restricted_80p80_support,
5199 	wmi_service_packet_capture_support,
5200 	wmi_service_nan_vdev,
5201 	wmi_service_multiple_vdev_restart_ext,
5202 	wmi_service_peer_delete_no_peer_flush_tids_cmd,
5203 	wmi_service_time_sync_ftm,
5204 	wmi_service_nss_ratio_to_host_support,
5205 	wmi_roam_scan_chan_list_to_host_support,
5206 	wmi_beacon_protection_support,
5207 	wmi_service_sta_nan_ndi_four_port,
5208 	wmi_service_host_scan_stop_vdev_all,
5209 	wmi_service_ema_ap_support,
5210 	wmi_support_extend_address,
5211 	wmi_service_srg_srp_spatial_reuse_support,
5212 	wmi_service_suiteb_roam_support,
5213 	wmi_service_no_interband_mcc_support,
5214 	wmi_service_dual_sta_roam_support,
5215 	wmi_service_peer_create_conf,
5216 	wmi_service_configure_roam_trigger_param_support,
5217 	wmi_service_5dot9_ghz_support,
5218 	wmi_service_cfr_ta_ra_as_fp_support,
5219 	wmi_service_cfr_capture_count_support,
5220 	wmi_services_max,
5221 } wmi_conv_service_ids;
5222 #define WMI_SERVICE_UNAVAILABLE 0xFFFF
5223 
5224 /**
5225  * enum WMI_DBG_PARAM - Debug params
5226  * @WMI_DBGLOG_LOG_LEVEL: Set the loglevel
5227  * @WMI_DBGLOG_VAP_ENABLE:  Enable VAP level debug
5228  * @WMI_DBGLOG_VAP_DISABLE: Disable VAP level debug
5229  * @WMI_DBGLOG_MODULE_ENABLE: Enable MODULE level debug
5230  * @WMI_DBGLOG_MODULE_DISABLE: Disable MODULE level debug
5231  * @WMI_DBGLOG_MOD_LOG_LEVEL: Enable MODULE level debug
5232  * @WMI_DBGLOG_TYPE: set type of the debug output
5233  * @WMI_DBGLOG_REPORT_ENABLE: Enable Disable debug
5234  */
5235 typedef enum {
5236 	WMI_DBGLOG_LOG_LEVEL = 0x1,
5237 	WMI_DBGLOG_VAP_ENABLE,
5238 	WMI_DBGLOG_VAP_DISABLE,
5239 	WMI_DBGLOG_MODULE_ENABLE,
5240 	WMI_DBGLOG_MODULE_DISABLE,
5241 	WMI_DBGLOG_MOD_LOG_LEVEL,
5242 	WMI_DBGLOG_TYPE,
5243 	WMI_DBGLOG_REPORT_ENABLE
5244 } WMI_DBG_PARAM;
5245 
5246 /**
5247  * struct wmi_host_fw_ver - FW version in non-tlv target
5248  * @sw_version: Versin info
5249  * @sw_version_1: Second dword of version
5250  */
5251 struct wmi_host_fw_ver {
5252 	uint32_t    sw_version;
5253 	uint32_t    sw_version_1;
5254 };
5255 
5256 /**
5257  * struct wmi_host_fw_abi_ver - FW version in non-tlv target
5258  * @sw_version: Versin info
5259  * @abi_version: ABI version
5260  */
5261 struct wmi_host_fw_abi_ver {
5262 	uint32_t    sw_version;
5263 	uint32_t    abi_version;
5264 };
5265 
5266 /**
5267  * struct target_resource_config - Resource config sent from host to target
5268  *               abstracted out to include union of both configs
5269  * @num_vdevs: Number vdevs configured
5270  * @num_peers: Number of peers
5271  * @num_active_peers: Number of active peers for peer cache
5272  * @num_offload_peers: Number of offload peers
5273  * @num_offload_reorder_buffs: number of offload reorder buffs
5274  * @num_peer_keys: number of peer keys
5275  * @num_tids: number of tids
5276  * @ast_skid_limit: AST skid limit
5277  * @tx_chain_mask: TX chain mask
5278  * @rx_chain_mask: RX chain mask
5279  * @rx_timeout_pri: RX reorder timeout per AC
5280  * @rx_decap_mode: RX decap mode
5281  * @scan_max_pending_req: Scan mac pending req
5282  * @bmiss_offload_max_vdev: Beacom miss offload max vdevs
5283  * @roam_offload_max_vdev: Roam offload max vdevs
5284  * @roam_offload_max_ap_profiles: roam offload max ap profiles
5285  * @num_mcast_groups: num mcast groups
5286  * @num_mcast_table_elems: number of macst table elems
5287  * @mcast2ucast_mode: mcast enhance mode
5288  * @tx_dbg_log_size: DBG log buf size
5289  * @num_wds_entries: number of WDS entries
5290  * @dma_burst_size: DMA burst size.
5291  * @mac_aggr_delim: Mac aggr delim
5292  * @rx_skip_defrag_timeout_dup_detection_check: Defrag dup check in host?
5293  * @vow_config: vow configuration
5294  * @gtk_offload_max_vdev: Max vdevs for GTK offload
5295  * @num_msdu_desc: Number of msdu desc
5296  * @max_frag_entries: Max frag entries
5297  * @agile_capability: Target Agile Capability
5298  *      End common
5299  * @max_peer_ext_stats: Max peer EXT stats
5300  * @smart_ant_cap: Smart antenna capabilities
5301  * @BK_Minfree: BIN configuration for BK traffic
5302  * @BE_Minfree: BIN configuration for BE traffic
5303  * @VI_Minfree: BIN configuration for VI traffic
5304  * @VO_Minfree: BIN configuration for VO traffic
5305  * @rx_batchmode: RX batch mode
5306  * @tt_support: Thermal throttling support
5307  * @atf_config: ATF config
5308  * @mgmt_comp_evt_bundle_support: bundle support required for mgmt complete evt
5309  * @tx_msdu_new_partition_id_support: new partiition id support for tx msdu
5310  * @peer_unmap_conf_support: peer unmap conf support in fw
5311  * @iphdr_pad_config: ipheader pad config
5312  * @qwrap_config: Qwrap configuration
5313  * @alloc_frag_desc_for_data_pkt: Frag desc for data
5314  *      Added in MCL
5315  * @num_tdls_vdevs:
5316  * @num_tdls_conn_table_entries:
5317  * @beacon_tx_offload_max_vdev:
5318  * @num_multicast_filter_entries:
5319  * @num_wow_filters:
5320  * @num_keep_alive_pattern:
5321  * @keep_alive_pattern_size:
5322  * @max_tdls_concurrent_sleep_sta:
5323  * @max_tdls_concurrent_buffer_sta:
5324  * @wmi_send_separate:
5325  * @num_ocb_vdevs:
5326  * @num_ocb_channels:
5327  * @num_ocb_schedules:
5328  * @num_packet_filters: maximum number of packet filter rules to support
5329  * @num_max_sta_vdevs: maximum number of concurrent station vdevs to support
5330  * @num_ns_ext_tuples_cfg:
5331  * @apf_instruction_size:
5332  * @max_bssid_rx_filters:
5333  * @use_pdev_id:
5334  * @max_num_dbs_scan_duty_cycle: max dbs can duty cycle value
5335  * @cce_disable: disable cce component
5336  * @peer_map_unmap_v2: enable peer map/unmap version 2 messaging
5337  * @twt_ap_pdev_count: Number of MAC on which AP TWT feature is supported
5338  * @twt_ap_sta_count: Max no of STA with which TWT sessions can be formed
5339  *                    by the AP
5340  * @max_bssid_indicator: max number of MBSS VAPs
5341  * @three_way_coex_config_legacy_en: enable three way coex legacy feature
5342  * @max_num_group_keys: max number of group keys supported for VLAN
5343  * @re_ul_resp: enable 11ax UL response feature (UL-OFDMA) for repeater
5344  * @ipa_disable: disable IPA feature
5345  * @ast_1_valid_mask_enable: mask to enable ast index 1
5346  * @ast_2_valid_mask_enable: mask to enable ast index 2
5347  * @ast_3_valid_mask_enable: mask to enable ast index 3
5348  * @ast_0_flow_mask_enable: mask to enable flow support for ast index 0
5349  * @ast_1_flow_mask_enable: mask to enable flow support for ast index 1
5350  * @ast_2_flow_mask_enable: mask to enable flow support for ast index 2
5351  * @ast_3_flow_mask_enable: mask to enable flow support for ast index 3
5352  * @ast_tid_high_mask_enable: enable tid valid mask for high priority flow
5353  * @ast_tid_low_mask_enable: enable tid valid mask for low priority flow
5354  * @nan_separate_iface_support: Separate iface creation for NAN
5355  * @time_sync_ftm: enable ftm based time sync
5356  * @max_rnr_neighbours: Max supported RNR neighbors in multisoc APs
5357  * @ema_max_vap_cnt: Number of maximum EMA tx-vaps at any instance of time
5358  * @ema_max_profile_period: Maximum EMA profile periodicity on any pdev
5359  * @max_ndp_sessions: Max ndp sessions support
5360  * @max_ndi: max number of ndi host supports
5361  */
5362 typedef struct {
5363 	uint32_t num_vdevs;
5364 	uint32_t num_peers;
5365 	uint32_t num_active_peers;
5366 	uint32_t num_offload_peers;
5367 	uint32_t num_offload_reorder_buffs;
5368 	uint32_t num_peer_keys;
5369 	uint32_t num_tids;
5370 	uint32_t ast_skid_limit;
5371 	uint32_t tx_chain_mask;
5372 	uint32_t rx_chain_mask;
5373 	uint32_t rx_timeout_pri[4];
5374 	uint32_t rx_decap_mode;
5375 	uint32_t scan_max_pending_req;
5376 	uint32_t bmiss_offload_max_vdev;
5377 	uint32_t roam_offload_max_vdev;
5378 	uint32_t roam_offload_max_ap_profiles;
5379 	uint32_t num_mcast_groups;
5380 	uint32_t num_mcast_table_elems;
5381 	uint32_t mcast2ucast_mode;
5382 	uint32_t tx_dbg_log_size;
5383 	uint32_t num_wds_entries;
5384 	uint32_t dma_burst_size;
5385 	uint32_t mac_aggr_delim;
5386 	uint32_t rx_skip_defrag_timeout_dup_detection_check;
5387 	uint32_t vow_config;
5388 	uint32_t gtk_offload_max_vdev;
5389 	uint32_t num_msdu_desc; /* Number of msdu desc */
5390 	uint32_t max_frag_entries;
5391 	uint32_t scheduler_params;
5392 	uint32_t agile_capability;
5393 	/* End common */
5394 
5395 	/* Added for Beeliner */
5396 	uint32_t max_peer_ext_stats;
5397 	uint32_t smart_ant_cap;
5398 	uint32_t BK_Minfree;
5399 	uint32_t BE_Minfree;
5400 	uint32_t VI_Minfree;
5401 	uint32_t VO_Minfree;
5402 	uint32_t rx_batchmode;
5403 	uint32_t tt_support;
5404 	uint32_t atf_config:1,
5405 		 mgmt_comp_evt_bundle_support:1,
5406 		 tx_msdu_new_partition_id_support:1,
5407 		 new_htt_msg_format:1,
5408 		 peer_unmap_conf_support:1,
5409 		 pktcapture_support:1;
5410 	uint32_t iphdr_pad_config;
5411 	uint32_t
5412 		qwrap_config:16,
5413 		alloc_frag_desc_for_data_pkt:16;
5414 
5415 	/* Added in MCL */
5416 	uint32_t num_tdls_vdevs;
5417 	uint32_t num_tdls_conn_table_entries;
5418 	uint32_t beacon_tx_offload_max_vdev;
5419 	uint32_t num_multicast_filter_entries;
5420 	uint32_t num_wow_filters;
5421 	uint32_t num_keep_alive_pattern;
5422 	uint32_t keep_alive_pattern_size;
5423 	uint32_t max_tdls_concurrent_sleep_sta;
5424 	uint32_t max_tdls_concurrent_buffer_sta;
5425 	uint32_t wmi_send_separate;
5426 	uint32_t num_ocb_vdevs;
5427 	uint32_t num_ocb_channels;
5428 	uint32_t num_ocb_schedules;
5429 	uint32_t num_packet_filters;
5430 	uint32_t num_max_sta_vdevs;
5431 	uint32_t num_ns_ext_tuples_cfg;
5432 	uint32_t apf_instruction_size;
5433 	uint32_t max_bssid_rx_filters;
5434 	uint32_t use_pdev_id;
5435 	uint32_t max_num_dbs_scan_duty_cycle;
5436 	bool cce_disable;
5437 	bool peer_map_unmap_v2;
5438 	uint32_t twt_ap_pdev_count;
5439 	uint32_t twt_ap_sta_count;
5440 	uint32_t max_bssid_indicator;
5441 	uint32_t eapol_minrate_set:1,
5442 		 eapol_minrate_ac_set:2;
5443 	bool tstamp64_en;
5444 	bool three_way_coex_config_legacy_en;
5445 	uint32_t max_num_group_keys;
5446 	uint32_t re_ul_resp;
5447 	bool ipa_disable;
5448 	uint32_t ast_1_valid_mask_enable:1,
5449 		 ast_2_valid_mask_enable:1,
5450 		 ast_3_valid_mask_enable:1;
5451 	uint32_t ast_0_flow_mask_enable:4,
5452 		 ast_1_flow_mask_enable:4,
5453 		 ast_2_flow_mask_enable:4,
5454 		 ast_3_flow_mask_enable:4,
5455 		 ast_tid_high_mask_enable:8,
5456 		 ast_tid_low_mask_enable:8;
5457 	bool nan_separate_iface_support;
5458 	bool time_sync_ftm;
5459 	uint32_t max_rnr_neighbours;
5460 	uint32_t ema_max_vap_cnt;
5461 	uint32_t ema_max_profile_period;
5462 	uint32_t max_ndp_sessions;
5463 	uint32_t max_ndi;
5464 } target_resource_config;
5465 
5466 /**
5467  * struct wds_addr_event - WDS addr event structure
5468  * @event_type: event type add/delete
5469  * @peer_mac: peer mac
5470  * @dest_mac: destination mac address
5471  * @vdev_id: vdev id
5472  */
5473 typedef struct {
5474 	uint32_t event_type[4];
5475 	u_int8_t peer_mac[QDF_MAC_ADDR_SIZE];
5476 	u_int8_t dest_mac[QDF_MAC_ADDR_SIZE];
5477 	uint32_t vdev_id;
5478 } wds_addr_event_t;
5479 
5480 /**
5481  * Enum replicated for host abstraction with FW
5482  */
5483 typedef enum {
5484 	/* Event respose of START CMD */
5485 	WMI_HOST_VDEV_START_RESP_EVENT = 0,
5486 	/* Event respose of RESTART CMD */
5487 	WMI_HOST_VDEV_RESTART_RESP_EVENT,
5488 } WMI_HOST_START_EVENT_PARAM;
5489 
5490 /**
5491  * struct wmi_host_roam_event - host roam event param
5492  * @vdev_id: vdev id
5493  * @reason: roam reason
5494  * @rssi: RSSI
5495  */
5496 typedef struct {
5497 	uint32_t vdev_id;
5498 	uint32_t reason;
5499 	uint32_t rssi;
5500 } wmi_host_roam_event;
5501 
5502 /**
5503  * ENUM wmi_host_scan_event_type - Scan event type
5504  */
5505 enum wmi_host_scan_event_type {
5506 	WMI_HOST_SCAN_EVENT_STARTED = 0x1,
5507 	WMI_HOST_SCAN_EVENT_COMPLETED = 0x2,
5508 	WMI_HOST_SCAN_EVENT_BSS_CHANNEL = 0x4,
5509 	WMI_HOST_SCAN_EVENT_FOREIGN_CHANNEL = 0x8,
5510 	WMI_HOST_SCAN_EVENT_DEQUEUED = 0x10,
5511 	WMI_HOST_SCAN_EVENT_PREEMPTED = 0x20,
5512 	WMI_HOST_SCAN_EVENT_START_FAILED = 0x40,
5513 	WMI_HOST_SCAN_EVENT_RESTARTED = 0x80,
5514 	WMI_HOST_SCAN_EVENT_FOREIGN_CHANNEL_EXIT = 0x100,
5515 	WMI_HOST_SCAN_EVENT_INVALID = 0x200,
5516 	WMI_HOST_SCAN_EVENT_GPIO_TIMEOUT = 0x400,
5517 	WMI_HOST_SCAN_EVENT_MAX = 0x8000
5518 };
5519 
5520 /**
5521  * ENUM wmi_host_scan_completion_reason - Scan completion event type
5522  */
5523 enum wmi_host_scan_completion_reason {
5524 	/** scan related events */
5525 	WMI_HOST_SCAN_REASON_NONE = 0xFF,
5526 	WMI_HOST_SCAN_REASON_COMPLETED = 0,
5527 	WMI_HOST_SCAN_REASON_CANCELLED = 1,
5528 	WMI_HOST_SCAN_REASON_PREEMPTED = 2,
5529 	WMI_HOST_SCAN_REASON_TIMEDOUT = 3,
5530 	WMI_HOST_SCAN_REASON_INTERNAL_FAILURE = 4,
5531 	WMI_HOST_SCAN_REASON_MAX,
5532 };
5533 
5534 /**
5535  * struct wmi_host_scan_event - Scan event response from target
5536  * @event: event type
5537  * @reason: Reason for event
5538  * @channel_freq: channel frequency
5539  * @requestor: requestor id
5540  * @scan_id: scan id
5541  * @vdev_id: vdev id
5542  */
5543 typedef struct {
5544 	uint32_t event;
5545 	uint32_t reason;
5546 	uint32_t channel_freq;
5547 	uint32_t requestor;
5548 	uint32_t scan_id;
5549 	uint32_t vdev_id;
5550 } wmi_host_scan_event;
5551 
5552 /**
5553  * struct wmi_host_pdev_reserve_ast_entry_event - Reserve AST entry
5554  * @result: result
5555  */
5556 typedef struct {
5557 	uint32_t result;
5558 } wmi_host_pdev_reserve_ast_entry_event;
5559 
5560 /**
5561  * struct wmi_host_mcast_ageout_entry - mcast aged-out entry
5562  * @grp_addr: IPv4/6 mcast group addr
5563  * @vdev_id: vdev id
5564  */
5565 typedef struct {
5566 	uint8_t grp_addr[16];
5567 	uint32_t vdev_id;
5568 } wmi_host_mcast_ageout_entry;
5569 
5570 /**
5571  * struct wmi_host_mcast_list_ageout_event - List of mcast entry aged-out
5572  * @num_entry: Number of mcast entries timed-out
5573  * @entry: List of wmi_host_mcast_ageout_entry
5574  */
5575 typedef struct {
5576 	uint32_t num_entry;
5577 	wmi_host_mcast_ageout_entry entry[1];
5578 } wmi_host_mcast_list_ageout_event;
5579 
5580 /**
5581  * struct wmi_host_pdev_nfcal_power_all_channels_event - NF cal event data
5582  * @nfdbr:
5583  *   chan[0 ~ 7]: {NFCalPower_chain0, NFCalPower_chain1,
5584  *                 NFCalPower_chain2, NFCalPower_chain3,
5585  *                 NFCalPower_chain4, NFCalPower_chain5,
5586  *                 NFCalPower_chain6, NFCalPower_chain7},
5587  * @nfdbm:
5588  *   chan[0 ~ 7]: {NFCalPower_chain0, NFCalPower_chain1,
5589  *                 NFCalPower_chain2, NFCalPower_chain3,
5590  *                 NFCalPower_chain4, NFCalPower_chain5,
5591  *                 NFCalPower_chain6, NFCalPower_chain7},
5592  * @freqnum:
5593  *   chan[0 ~ 7]: frequency number
5594  * @pdev_id: pdev_id
5595  */
5596 typedef struct {
5597 	int8_t nfdbr[WMI_HOST_RXG_CAL_CHAN_MAX * WMI_HOST_MAX_NUM_CHAINS];
5598 	int8_t nfdbm[WMI_HOST_RXG_CAL_CHAN_MAX * WMI_HOST_MAX_NUM_CHAINS];
5599 	uint32_t freqnum[WMI_HOST_RXG_CAL_CHAN_MAX];
5600 	uint32_t pdev_id;
5601 } wmi_host_pdev_nfcal_power_all_channels_event;
5602 
5603 /**
5604  * enum wmi_host_pdev_tpc_event_offset: offsets of TPC events
5605  * @WMI_HOST_TX_POWER_MAX: offset of max tx power
5606  * @WMI_HOST_TX_POWER_MIN: offset of min tx power
5607  * @WMI_HOST_TX_POWER_LEN: size of tpc values
5608  */
5609 enum wmi_host_pdev_tpc_event_offset {
5610 	WMI_HOST_TX_POWER_MAX,
5611 	WMI_HOST_TX_POWER_MIN,
5612 	WMI_HOST_TX_POWER_LEN,
5613 };
5614 
5615 /**
5616  * struct wmi_host_pdev_tpc_event - WMI host pdev TPC event
5617  * @pdev_id: pdev_id
5618  * @tpc:
5619  */
5620 typedef struct {
5621 	uint32_t pdev_id;
5622 	int32_t tpc[WMI_HOST_TX_POWER_LEN];
5623 } wmi_host_pdev_tpc_event;
5624 
5625 /**
5626  * struct wmi_host_pdev_generic_buffer_event
5627  * @buf_type: Buffer type
5628  * @frag_id: Frag id
5629  * @more_frag: more frags pending
5630  * @buf_len: buffer length
5631  * @buf_info: variable length buffer
5632  */
5633 typedef struct {
5634 	uint32_t buf_type;
5635 	uint32_t frag_id;
5636 	uint32_t more_frag;
5637 	uint32_t buf_len;
5638 	uint32_t buf_info[1];
5639 } wmi_host_pdev_generic_buffer_event;
5640 /**
5641  * Enum for host buffer event
5642  */
5643 enum {
5644 	WMI_HOST_BUFFER_TYPE_RATEPWR_TABLE,
5645 	WMI_HOST_BUFFER_TYPE_CTL_TABLE,
5646 };
5647 
5648 /**
5649  * struct wmi_host_pdev_tpc_config_event - host pdev tpc config event
5650  * @pdev_id: pdev_id
5651  * @regDomain:
5652  * @chanFreq:
5653  * @phyMode:
5654  * @twiceAntennaReduction:
5655  * @twiceMaxRDPower:
5656  * @twiceAntennaGain:
5657  * @powerLimit:
5658  * @rateMax:
5659  * @numTxChain:
5660  * @ctl:
5661  * @flags:
5662  * @maxRegAllowedPower:
5663  * @maxRegAllowedPowerAGCDD:
5664  * @maxRegAllowedPowerAGSTBC:
5665  * @maxRegAllowedPowerAGTXBF:
5666  * @ratesArray:
5667  */
5668 typedef struct {
5669 	uint32_t pdev_id;
5670 	uint32_t regDomain;
5671 	uint32_t chanFreq;
5672 	uint32_t phyMode;
5673 	uint32_t twiceAntennaReduction;
5674 	uint32_t twiceMaxRDPower;
5675 	int32_t  twiceAntennaGain;
5676 	uint32_t powerLimit;
5677 	uint32_t rateMax;
5678 	uint32_t numTxChain;
5679 	uint32_t ctl;
5680 	uint32_t flags;
5681 	int8_t  maxRegAllowedPower[WMI_HOST_TPC_TX_NUM_CHAIN];
5682 	int8_t  maxRegAllowedPowerAGCDD[WMI_HOST_TPC_TX_NUM_CHAIN][WMI_HOST_TPC_TX_NUM_CHAIN];
5683 	int8_t  maxRegAllowedPowerAGSTBC[WMI_HOST_TPC_TX_NUM_CHAIN][WMI_HOST_TPC_TX_NUM_CHAIN];
5684 	int8_t  maxRegAllowedPowerAGTXBF[WMI_HOST_TPC_TX_NUM_CHAIN][WMI_HOST_TPC_TX_NUM_CHAIN];
5685 	uint8_t ratesArray[WMI_HOST_TPC_RATE_MAX];
5686 } wmi_host_pdev_tpc_config_event;
5687 /**
5688  * Enums for TPC event
5689  */
5690 typedef enum {
5691 	WMI_HOST_TPC_CONFIG_EVENT_FLAG_TABLE_CDD	= 0x1,
5692 	WMI_HOST_TPC_CONFIG_EVENT_FLAG_TABLE_STBC	= 0x2,
5693 	WMI_HOST_TPC_CONFIG_EVENT_FLAG_TABLE_TXBF	= 0x4,
5694 } WMI_HOST_TPC_CONFIG_EVENT_FLAG;
5695 
5696 /**
5697  * Medium Utilization evaluation algorithms
5698  * These algorithms can be complementary rather than exclusive.
5699  */
5700 typedef enum {
5701 	WMI_HOST_MU_BASIC_ALGO = 0x1,
5702 	WMI_HOST_MU_PER_BSSID_ALGO = 0x2,
5703 	WMI_HOST_MU_HIDDEN_NODE_ALGO = 0x4,
5704 } WMI_HOST_MU_ALGO_TYPE;
5705 /* max MU alg combinations supported by target */
5706 #define WMI_HOST_MU_MAX_ALGO_TYPE 3
5707 
5708 /**
5709  * struct wmi_host_mu_db_entry
5710  * @event_type: 0=AP, 1=STA, 2=Small Cell(SC)
5711  * @bssid_mac_addr: Transmitter MAC if entry is WiFi node. PLMNID if SC
5712  * @tx_addr: Transmitter MAC if entry is WiFi node. PLMNID if SC
5713  * @avg_duration_us: Avg. duration for which node was transmitting
5714  * @avg_rssi: Avg. RSSI of all TX packets by node. Unit dBm
5715  * @mu_percent: % medium utilization by node
5716  */
5717 typedef struct {
5718 	uint32_t     entry_type;
5719 	wmi_host_mac_addr bssid_mac_addr;
5720 	wmi_host_mac_addr tx_addr;
5721 	uint32_t     avg_duration_us;
5722 	uint32_t     avg_rssi;
5723 	uint32_t     mu_percent;
5724 } wmi_host_mu_db_entry;
5725 
5726 /**
5727  * struct wmi_host_mu_report_event - WMI_MU_REPORT_EVENTID
5728  * @mu_request_id: request id
5729  * @status_reason: MU_STATUS_REASON
5730  * @total_mu: MU_ALG_TYPE combinations
5731  * @num_active_bssid: number of active bssid
5732  * @hidden_node_mu : hidden node algo MU per bin
5733  * @num_TA_entries : No. of entries found in MU db report
5734  */
5735 typedef struct {
5736 	uint32_t mu_request_id;
5737 	uint32_t status_reason;
5738 	uint32_t total_mu[WMI_HOST_MU_MAX_ALGO_TYPE];
5739 	uint32_t num_active_bssid;
5740 	uint32_t hidden_node_mu[LTEU_MAX_BINS];
5741 	uint32_t num_TA_entries;
5742 } wmi_host_mu_report_event;
5743 
5744 /**
5745  * struct wmi_host_mgmt_tx_compl_event - TX completion event
5746  * @desc_id: from tx_send_cmd
5747  * @status: WMI_MGMT_TX_COMP_STATUS_TYPE
5748  * @pdev_id: pdev_id
5749  * @ppdu_id: ppdu_id
5750  * @retries_count: retries count
5751  * @tx_tsf: 64 bits completion timestamp
5752  */
5753 typedef struct {
5754 	uint32_t	desc_id;
5755 	uint32_t	status;
5756 	uint32_t	pdev_id;
5757 	uint32_t        ppdu_id;
5758 	uint32_t	retries_count;
5759 	uint64_t	tx_tsf;
5760 } wmi_host_mgmt_tx_compl_event;
5761 
5762 /**
5763  * struct wmi_host_offchan_data_tx_compl_event - TX completion event
5764  * @desc_id: from tx_send_cmd
5765  * @status: VWMI_MGMT_TX_COMP_STATUS_TYPE
5766  * @pdev_id: pdev_id
5767  */
5768 struct wmi_host_offchan_data_tx_compl_event {
5769 	uint32_t desc_id;
5770 	uint32_t status;
5771 	uint32_t pdev_id;
5772 };
5773 
5774 #define WMI_HOST_TIM_BITMAP_ARRAY_SIZE 17
5775 
5776 /**
5777  * struct wmi_host_tim_info - TIM info in SWBA event
5778  * @tim_len: TIM length
5779  * @tim_mcast:
5780  * @tim_bitmap: TIM bitmap
5781  * @tim_changed: TIM changed
5782  * @tim_num_ps_pending: TIM num PS sta pending
5783  * @vdev_id: Vdev id
5784  */
5785 typedef struct {
5786 	uint32_t tim_len;
5787 	uint32_t tim_mcast;
5788 	uint32_t tim_bitmap[WMI_HOST_TIM_BITMAP_ARRAY_SIZE];
5789 	uint32_t tim_changed;
5790 	uint32_t tim_num_ps_pending;
5791 	uint32_t vdev_id;
5792 } wmi_host_tim_info;
5793 
5794 /**
5795  * struct wmi_host_quiet_info - Quiet info in SWBA event
5796  * @vdev_id: vdev_id for quiet info structure
5797  * @tbttcount: quiet start tbtt count
5798  * @period: Beacon interval between quiets
5799  * @duration: TUs of each quiet
5800  * @offset: TUs from TBTT to quiet start
5801  */
5802 typedef struct {
5803 	uint32_t vdev_id;
5804 	uint32_t tbttcount;
5805 	uint32_t period;
5806 	uint32_t duration;
5807 	uint32_t offset;
5808 } wmi_host_quiet_info;
5809 
5810 /**
5811  * struct wmi_host_p2p_noa_descriptor - NoA desc in SWBA event
5812  * @type_count: Absence count
5813  * @duration: NoA duration
5814  * @interval: NoA interval
5815  * @start_time: start time
5816  */
5817 typedef struct {
5818 	uint32_t type_count;
5819 	uint32_t duration;
5820 	uint32_t interval;
5821 	uint32_t start_time;
5822 } wmi_host_p2p_noa_descriptor;
5823 /* Maximum number of NOA Descriptors supported */
5824 #define WMI_HOST_P2P_MAX_NOA_DESCRIPTORS 4
5825 /**
5826  * struct wmi_host_p2p_noa_info - p2p noa information
5827  * @modified: NoA modified
5828  * @index: Index
5829  * @oppPS: Oppurtunstic ps
5830  * @ctwindow: CT window
5831  * @num_descriptors: number of descriptors
5832  * @noa_descriptors: noa descriptors
5833  * @vdev_id: Vdev id
5834  */
5835 typedef struct {
5836 	uint8_t modified;
5837 	uint8_t index;
5838 	uint8_t oppPS;
5839 	uint8_t ctwindow;
5840 	uint8_t num_descriptors;
5841 	wmi_host_p2p_noa_descriptor
5842 		noa_descriptors[WMI_HOST_P2P_MAX_NOA_DESCRIPTORS];
5843 	uint32_t vdev_id;
5844 } wmi_host_p2p_noa_info;
5845 
5846 /**
5847  * struct wmi_host_peer_sta_kickout_event
5848  * @peer_macaddr: peer mac address
5849  * @reason: kickout reason
5850  * @rssi: rssi
5851  * @pdev_id: pdev_id
5852  */
5853 typedef struct {
5854 	uint8_t peer_macaddr[QDF_MAC_ADDR_SIZE];
5855 	uint32_t reason;
5856 	uint32_t rssi;
5857 } wmi_host_peer_sta_kickout_event;
5858 
5859 /**
5860  * struct wmi_host_peer_sta_ps_statechange_event - ST ps state change event
5861  * @peer_macaddr: peer mac address
5862  * @peer_ps_stats: peer PS state
5863  * @pdev_id: pdev_id
5864  */
5865 typedef struct {
5866 	uint8_t peer_macaddr[QDF_MAC_ADDR_SIZE];
5867 	uint32_t peer_ps_state;
5868 } wmi_host_peer_sta_ps_statechange_event;
5869 
5870 /* Maximum CCK, OFDM rates supported */
5871 #define WMI_SA_MAX_CCK_OFDM_RATES 12
5872 /* Maximum MCS rates supported; 4 rates in each dword */
5873 /* Maximum MCS ratecodes with 11ax */
5874 #define WMI_SA_MAX_MCS_RATES 96
5875 #define WMI_SA_MAX_RATE_COUNTERS 4
5876 /* Maximum rate series used for transmission */
5877 #define SA_MAX_RATE_SERIES 2
5878 
5879 #define SA_MAX_LEGACY_RATE_DWORDS 3
5880 #define SA_MAX_HT_RATE_DWORDS 10
5881 #define SA_BYTES_IN_DWORD 4
5882 #define SA_MASK_BYTE 0xff
5883 #define SA_MASK_BYTE3 0xff0000
5884 
5885 /* Support 11ax 11bit ratecode */
5886 #define SA_MASK_RCODE 0x7ff
5887 #define SA_WORD_BITS_LEN 16
5888 #define SA_WORDS_IN_DWORD 2
5889 #define SA_MAX_LEGACY_RATE_WORDS 6
5890 #define SA_MAX_HT_RATE_WORDS 48
5891 
5892 /* TODO: ratecode_160 needs to add for future chips */
5893 /**
5894  * struct wmi_sa_rate_cap - smart antenna rat capabilities
5895  * @pdev_id: pdev_id
5896  * @ratecode_legacy: Rate code array for CCK OFDM
5897  * @ratecode_20: Rate code array for 20MHz BW
5898  * @ratecode_40: Rate code array for 40MHz BW
5899  * @ratecode_80: Rate code array for 80MHz BW
5900  * @ratecount: Max Rate count for each mode
5901  */
5902 typedef struct {
5903 	uint16_t ratecode_legacy[WMI_SA_MAX_CCK_OFDM_RATES];
5904 	uint16_t ratecode_20[WMI_SA_MAX_MCS_RATES];
5905 	uint16_t ratecode_40[WMI_SA_MAX_MCS_RATES];
5906 	uint16_t ratecode_80[WMI_SA_MAX_MCS_RATES];
5907 	uint8_t ratecount[WMI_SA_MAX_RATE_COUNTERS];
5908 } wmi_sa_rate_cap;
5909 
5910 /** Preamble types to be used with VDEV fixed rate configuration */
5911 typedef enum {
5912 	WMI_HOST_RATE_PREAMBLE_OFDM,
5913 	WMI_HOST_RATE_PREAMBLE_CCK,
5914 	WMI_HOST_RATE_PREAMBLE_HT,
5915 	WMI_HOST_RATE_PREAMBLE_VHT,
5916 	WMI_HOST_RATE_PREAMBLE_HE,
5917 } WMI_HOST_RATE_PREAMBLE;
5918 
5919 #define WMI_HOST_FIXED_RATE_NONE	(0xff)
5920 
5921 /** preablbe long */
5922 #define WMI_HOST_VDEV_PREAMBLE_LONG	0x1
5923 /** preablbe short */
5924 #define WMI_HOST_VDEV_PREAMBLE_SHORT	0x2
5925 /** found a better AP */
5926 #define WMI_HOST_ROAM_REASON_BETTER_AP  0x1
5927 /** beacon miss detected */
5928 #define WMI_HOST_ROAM_REASON_BMISS	0x2
5929 /** deauth/disassoc received */
5930 #define WMI_HOST_ROAM_REASON_DEAUTH	0x2
5931 /** connected AP's low rssi condition detected */
5932 #define WMI_HOST_ROAM_REASON_LOW_RSSI  0x3
5933 /** found another AP that matches SSID and Security profile in
5934  * WMI_ROAM_AP_PROFILE, found during scan triggered upon FINAL_BMISS
5935  */
5936 #define WMI_HOST_ROAM_REASON_SUITABLE_AP 0x4
5937 /** LFR3.0 roaming failed, indicate the disconnection to host */
5938 #define WMI_HOST_ROAM_REASON_HO_FAILED  0x5
5939 
5940 /** values for vdev_type */
5941 #define WMI_HOST_VDEV_TYPE_AP	0x1
5942 #define WMI_HOST_VDEV_TYPE_STA	0x2
5943 #define WMI_HOST_VDEV_TYPE_IBSS	0x3
5944 #define WMI_HOST_VDEV_TYPE_MONITOR	0x4
5945 
5946 /** values for vdev_subtype */
5947 #define WMI_HOST_VDEV_SUBTYPE_P2P_DEVICE 0x1
5948 #define WMI_HOST_VDEV_SUBTYPE_P2P_CLIENT 0x2
5949 #define WMI_HOST_VDEV_SUBTYPE_P2P_GO	0x3
5950 #define WMI_HOST_VDEV_SUBTYPE_PROXY_STA  0x4
5951 #define WMI_HOST_VDEV_SUBTYPE_MESH	0x5
5952 
5953 #define WMI_HOST_MGMT_TID	17
5954 /* Disable aging & learning */
5955 #define WMI_HOST_WDS_FLAG_STATIC	0x1
5956 
5957 /**
5958  * Peer param enum abstracted from target
5959  * @WMI_HOST_PEER_MIMO_PS_STATE: mimo powersave state
5960  * @WMI_HOST_PEER_AMPDU: enable/disable AMPDU . initial value (enabled)
5961  * @WMI_HOST_PEER_AUTHORIZE: authorize/unauthorize peer.
5962  *                           initial value is unauthorized (0)
5963  * @WMI_HOST_PEER_CHWIDTH: Peer channel bandwidth
5964  * @WMI_HOST_PEER_NSS: peer NSS
5965  * @WMI_HOST_PEER_USE_4ADDR: USE 4 ADDR
5966  * @WMI_HOST_PEER_EXT_STATS_ENABLE: Enable extended peer stats
5967  * @WMI_HOST_PEER_USE_FIXED_PWR: Use FIXED Pwr,
5968  * @WMI_HOST_PEER_PARAM_FIXED_RATE: Set peer fixed rate
5969  * @WMI_HOST_PEER_SET_MU_WHITELIST: Whitelist peer TIDs
5970  * @WMI_HOST_PEER_MEMBERSHIP: set group membership status
5971  * @WMI_HOST_PEER_USERPOS: User POS
5972  * @WMI_HOST_PEER_CRIT_PROTO_HINT_ENABLED: Critical Protocol Hint enabled
5973  * @WMI_HOST_PEER_TX_FAIL_CNT_THR: Tx Fail count threshold
5974  * @WMI_HOST_PEER_SET_HW_RETRY_CTS2S: Set hardware retry CTS to self
5975  * @WMI_HOST_PEER_IBSS_ATIM_WINDOW_LENGTH: IBSS ATIM window length
5976  * @WMI_HOST_PEER_PHYMODE: Peer Phymode
5977  * @WMI_HOST_PEER_SET_MAC_TX_RATE: Set MAC Tx rate
5978  * @WMI_HOST_PEER_SET_DEFAULT_ROUTING: Set default Rx routing
5979  * @WMI_HOST_PEER_SET_MIN_TX_RATE: Set Minimum T rate
5980  * @WMI_HOST_PEER_NSS_VHT160: peer NSS for 160Mhz
5981  * @WMI_HOST_PEER_NSS_VHT80_80: peer NSS for 80+80MHz
5982  * @WMI_HOST_PEER_PARAM_SU_TXBF_SOUNDING_INTERVAL: Set SU sounding interval
5983  * @WMI_HOST_PEER_PARAM_MU_TXBF_SOUNDING_INTERVAL: Set MU sounding interval
5984  * @WMI_HOST_PEER_PARAM_TXBF_SOUNDING_ENABLE: Enable sounding interval set
5985  * @WMI_HOST_PEER_PARAM_MU_ENABLE: Enable MU support
5986  * @WMI_HOST_PEER_PARAM_OFDMA_ENABLE: Enable OFDMA support
5987  * @WMI_HOST_PEER_PARAM_ENABLE_FT: Notify FT roam
5988  */
5989 enum {
5990 	WMI_HOST_PEER_MIMO_PS_STATE = 0x1,
5991 	WMI_HOST_PEER_AMPDU,
5992 	WMI_HOST_PEER_AUTHORIZE,
5993 	WMI_HOST_PEER_CHWIDTH,
5994 	WMI_HOST_PEER_NSS,
5995 	WMI_HOST_PEER_USE_4ADDR,
5996 	WMI_HOST_PEER_EXT_STATS_ENABLE,
5997 	WMI_HOST_PEER_USE_FIXED_PWR,
5998 	WMI_HOST_PEER_PARAM_FIXED_RATE,
5999 	WMI_HOST_PEER_SET_MU_WHITELIST,
6000 	WMI_HOST_PEER_MEMBERSHIP,
6001 	WMI_HOST_PEER_USERPOS,
6002 	WMI_HOST_PEER_CRIT_PROTO_HINT_ENABLED,
6003 	WMI_HOST_PEER_TX_FAIL_CNT_THR,
6004 	WMI_HOST_PEER_SET_HW_RETRY_CTS2S,
6005 	WMI_HOST_PEER_IBSS_ATIM_WINDOW_LENGTH,
6006 	WMI_HOST_PEER_PHYMODE,
6007 	WMI_HOST_PEER_SET_MAC_TX_RATE,
6008 	WMI_HOST_PEER_SET_DEFAULT_ROUTING,
6009 	WMI_HOST_PEER_SET_MIN_TX_RATE,
6010 	WMI_HOST_PEER_NSS_VHT160,
6011 	WMI_HOST_PEER_NSS_VHT80_80,
6012 	WMI_HOST_PEER_PARAM_SU_TXBF_SOUNDING_INTERVAL,
6013 	WMI_HOST_PEER_PARAM_MU_TXBF_SOUNDING_INTERVAL,
6014 	WMI_HOST_PEER_PARAM_TXBF_SOUNDING_ENABLE,
6015 	WMI_HOST_PEER_PARAM_MU_ENABLE,
6016 	WMI_HOST_PEER_PARAM_OFDMA_ENABLE,
6017 	WMI_HOST_PEER_PARAM_ENABLE_FT,
6018 };
6019 #define WMI_HOST_PEER_MIMO_PS_NONE	0x0
6020 #define WMI_HOST_PEER_MIMO_PS_STATIC	0x1
6021 #define WMI_HOST_PEER_MIMO_PS_DYNAMIC	0x2
6022 typedef enum {
6023 	HOST_PLATFORM_HIGH_PERF,
6024 	HOST_PLATFORM_LOW_PERF,
6025 	HOST_PLATFORM_LOW_PERF_NO_FETCH,
6026 } HOST_PLATFORM_TYPE;
6027 
6028 enum wmi_host_sta_ps_mode {
6029 	/** enable power save for the given STA VDEV */
6030 	WMI_HOST_STA_PS_MODE_DISABLED = 0,
6031 	/** disable power save  for a given STA VDEV */
6032 	WMI_HOST_STA_PS_MODE_ENABLED = 1,
6033 };
6034 enum wmi_host_sta_powersave_param {
6035 	/**
6036 	* Controls how frames are retrievd from AP while STA is sleeping
6037 	*
6038 	* (see enum wmi_sta_ps_param_rx_wake_policy)
6039 	*/
6040 	WMI_HOST_STA_PS_PARAM_RX_WAKE_POLICY = 0,
6041 
6042 	/**
6043 	* The STA will go active after this many TX
6044 	*
6045 	* (see enum wmi_sta_ps_param_tx_wake_threshold)
6046 	*/
6047 	WMI_HOST_STA_PS_PARAM_TX_WAKE_THRESHOLD = 1,
6048 
6049 	/**
6050 	* Number of PS-Poll to send before STA wakes up
6051 	*
6052 	* (see enum wmi_sta_ps_param_pspoll_count)
6053 	*
6054 	*/
6055 	WMI_HOST_STA_PS_PARAM_PSPOLL_COUNT = 2,
6056 
6057 	/**
6058 	* TX/RX inactivity time in msec before going to sleep.
6059 	*
6060 	* The power save SM will monitor tx/rx activity on the VDEV, if no
6061 	* activity for the specified msec of the parameter
6062 	* the Power save SM will go to sleep.
6063 	*/
6064 	WMI_HOST_STA_PS_PARAM_INACTIVITY_TIME = 3,
6065 
6066 	/**
6067 	* Set uapsd configuration.
6068 	*
6069 	* (see enum wmi_sta_ps_param_uapsd)
6070 	*/
6071 	WMI_HOST_STA_PS_PARAM_UAPSD = 4,
6072 };
6073 /* prefix used by scan requestor ids on the host
6074  * replicated here form wmi_unified.h*/
6075 #define WMI_HOST_P_SCAN_REQUESTOR_ID_PREFIX 0xA000
6076 /* prefix used by scan request ids generated on the host */
6077 /* host cycles through the lower 12 bits to generate ids */
6078 #define WMI_HOST_P_SCAN_REQ_ID_PREFIX 0xA000
6079 
6080 #define WMI_HOST_RC_DS_FLAG	0x01	/* Dual stream flag */
6081 #define WMI_HOST_RC_CW40_FLAG	0x02	/* CW 40 */
6082 #define WMI_HOST_RC_SGI_FLAG	0x04	/* Short Guard Interval */
6083 #define WMI_HOST_RC_HT_FLAG	0x08	/* HT */
6084 #define WMI_HOST_RC_RTSCTS_FLAG	0x10	/* RTS-CTS */
6085 #define WMI_HOST_RC_TX_STBC_FLAG	0x20	/* TX STBC */
6086 #define WMI_HOST_RC_RX_STBC_FLAG	0xC0	/* RX STBC ,2 bits */
6087 #define WMI_HOST_RC_RX_STBC_FLAG_S   6	/* RX STBC ,2 bits */
6088 #define WMI_HOST_RC_WEP_TKIP_FLAG	0x100   /* WEP/TKIP encryption */
6089 #define WMI_HOST_RC_TS_FLAG	0x200   /* Three stream flag */
6090 #define WMI_HOST_RC_UAPSD_FLAG	0x400   /* UAPSD Rate Control */
6091 
6092 /** HT Capabilities*/
6093 #define WMI_HOST_HT_CAP_ENABLED	0x0001   /* HT Enabled/ disabled */
6094 /* Short Guard Interval with HT20 */
6095 #define WMI_HOST_HT_CAP_HT20_SGI	0x0002
6096 #define WMI_HOST_HT_CAP_DYNAMIC_SMPS	0x0004   /* Dynamic MIMO powersave */
6097 #define WMI_HOST_HT_CAP_TX_STBC	0x0008   /* B3 TX STBC */
6098 #define WMI_HOST_HT_CAP_TX_STBC_MASK_SHIFT	3
6099 #define WMI_HOST_HT_CAP_RX_STBC	0x0030   /* B4-B5 RX STBC */
6100 #define WMI_HOST_HT_CAP_RX_STBC_MASK_SHIFT	4
6101 #define WMI_HOST_HT_CAP_LDPC	0x0040   /* LDPC supported */
6102 #define WMI_HOST_HT_CAP_L_SIG_TXOP_PROT	0x0080   /* L-SIG TXOP Protection */
6103 #define WMI_HOST_HT_CAP_MPDU_DENSITY	0x0700   /* MPDU Density */
6104 #define WMI_HOST_HT_CAP_MPDU_DENSITY_MASK_SHIFT 8
6105 #define WMI_HOST_HT_CAP_HT40_SGI	0x0800
6106 #define WMI_HOST_HT_CAP_RX_LDPC         0x1000
6107 #define WMI_HOST_HT_CAP_TX_LDPC         0x2000
6108 #define WMI_HOST_HT_CAP_IBF_BFER	0x4000
6109 
6110 /* These macros should be used when we wish to advertise STBC support for
6111  * only 1SS or 2SS or 3SS. */
6112 #define WMI_HOST_HT_CAP_RX_STBC_1SS	0x0010   /* B4-B5 RX STBC */
6113 #define WMI_HOST_HT_CAP_RX_STBC_2SS	0x0020   /* B4-B5 RX STBC */
6114 #define WMI_HOST_HT_CAP_RX_STBC_3SS	0x0030   /* B4-B5 RX STBC */
6115 
6116 
6117 #define WMI_HOST_HT_CAP_DEFAULT_ALL (WMI_HOST_HT_CAP_ENABLED	| \
6118 	WMI_HOST_HT_CAP_HT20_SGI	| \
6119 	WMI_HOST_HT_CAP_HT40_SGI	| \
6120 	WMI_HOST_HT_CAP_TX_STBC	| \
6121 	WMI_HOST_HT_CAP_RX_STBC	| \
6122 	WMI_HOST_HT_CAP_LDPC)
6123 
6124 /* WMI_HOST_VHT_CAP_* these maps to ieee 802.11ac vht capability information
6125    field. The fields not defined here are not supported, or reserved.
6126    Do not change these masks and if you have to add new one follow the
6127    bitmask as specified by 802.11ac draft.
6128 */
6129 
6130 #define WMI_HOST_VHT_CAP_MAX_MPDU_LEN_MASK	0x00000003
6131 #define WMI_HOST_VHT_CAP_RX_LDPC	0x00000010
6132 #define WMI_HOST_VHT_CAP_SGI_80MHZ	0x00000020
6133 #define WMI_HOST_VHT_CAP_SGI_160MHZ	0x00000040
6134 #define WMI_HOST_VHT_CAP_TX_STBC	0x00000080
6135 #define WMI_HOST_VHT_CAP_RX_STBC_MASK	0x00000300
6136 #define WMI_HOST_VHT_CAP_RX_STBC_MASK_SHIFT	8
6137 #define WMI_HOST_VHT_CAP_SU_BFER	0x00000800
6138 #define WMI_HOST_VHT_CAP_SU_BFEE	0x00001000
6139 #define WMI_HOST_VHT_CAP_MAX_CS_ANT_MASK	0x0000E000
6140 #define WMI_HOST_VHT_CAP_MAX_CS_ANT_MASK_SHIFT	13
6141 #define WMI_HOST_VHT_CAP_MAX_SND_DIM_MASK	0x00070000
6142 #define WMI_HOST_VHT_CAP_MAX_SND_DIM_MASK_SHIFT	16
6143 #define WMI_HOST_VHT_CAP_MU_BFER	0x00080000
6144 #define WMI_HOST_VHT_CAP_MU_BFEE	0x00100000
6145 #define WMI_HOST_VHT_CAP_MAX_AMPDU_LEN_EXP	0x03800000
6146 #define WMI_HOST_VHT_CAP_MAX_AMPDU_LEN_EXP_SHIT	23
6147 #define WMI_HOST_VHT_CAP_RX_FIXED_ANT	0x10000000
6148 #define WMI_HOST_VHT_CAP_TX_FIXED_ANT	0x20000000
6149 
6150 #define WMI_HOST_VHT_CAP_MAX_MPDU_LEN_11454	0x00000002
6151 
6152 /* These macros should be used when we wish to advertise STBC support for
6153  * only 1SS or 2SS or 3SS. */
6154 #define WMI_HOST_VHT_CAP_RX_STBC_1SS	0x00000100
6155 #define WMI_HOST_VHT_CAP_RX_STBC_2SS	0x00000200
6156 #define WMI_HOST_VHT_CAP_RX_STBC_3SS	0x00000300
6157 
6158 #define WMI_HOST_VHT_CAP_DEFAULT_ALL (WMI_HOST_VHT_CAP_MAX_MPDU_LEN_11454  | \
6159 	WMI_HOST_VHT_CAP_SGI_80MHZ	|	\
6160 	WMI_HOST_VHT_CAP_TX_STBC	|	\
6161 	WMI_HOST_VHT_CAP_RX_STBC_MASK	|	\
6162 	WMI_HOST_VHT_CAP_RX_LDPC	|	\
6163 	WMI_HOST_VHT_CAP_MAX_AMPDU_LEN_EXP   |	\
6164 	WMI_HOST_VHT_CAP_RX_FIXED_ANT	|	\
6165 	WMI_HOST_VHT_CAP_TX_FIXED_ANT)
6166 
6167 /* Interested readers refer to Rx/Tx MCS Map definition as defined in
6168    802.11ac
6169 */
6170 #define WMI_HOST_VHT_MAX_MCS_4_SS_MASK(r, ss) ((3 & (r)) << (((ss) - 1) << 1))
6171 #define WMI_HOST_VHT_MAX_SUPP_RATE_MASK	0x1fff0000
6172 #define WMI_HOST_VHT_MAX_SUPP_RATE_MASK_SHIFT 16
6173 
6174 /** U-APSD configuration of peer station from (re)assoc request and TSPECs */
6175 enum wmi_host_ap_ps_param_uapsd {
6176 	WMI_HOST_AP_PS_UAPSD_AC0_DELIVERY_EN = (1 << 0),
6177 	WMI_HOST_AP_PS_UAPSD_AC0_TRIGGER_EN  = (1 << 1),
6178 	WMI_HOST_AP_PS_UAPSD_AC1_DELIVERY_EN = (1 << 2),
6179 	WMI_HOST_AP_PS_UAPSD_AC1_TRIGGER_EN  = (1 << 3),
6180 	WMI_HOST_AP_PS_UAPSD_AC2_DELIVERY_EN = (1 << 4),
6181 	WMI_HOST_AP_PS_UAPSD_AC2_TRIGGER_EN  = (1 << 5),
6182 	WMI_HOST_AP_PS_UAPSD_AC3_DELIVERY_EN = (1 << 6),
6183 	WMI_HOST_AP_PS_UAPSD_AC3_TRIGGER_EN  = (1 << 7),
6184 };
6185 /** U-APSD maximum service period of peer station */
6186 enum wmi_host_ap_ps_peer_param_max_sp {
6187 	WMI_HOST_AP_PS_PEER_PARAM_MAX_SP_UNLIMITED = 0,
6188 	WMI_HOST_AP_PS_PEER_PARAM_MAX_SP_2 = 1,
6189 	WMI_HOST_AP_PS_PEER_PARAM_MAX_SP_4 = 2,
6190 	WMI_HOST_AP_PS_PEER_PARAM_MAX_SP_6 = 3,
6191 
6192 	/* keep last! */
6193 	MAX_HOST_WMI_AP_PS_PEER_PARAM_MAX_SP,
6194 };
6195 
6196 #define WMI_HOST_UAPSD_AC_TYPE_DELI 0
6197 #define WMI_HOST_UAPSD_AC_TYPE_TRIG 1
6198 
6199 #define WMI_HOST_UAPSD_AC_BIT_MASK(ac, type) \
6200 	((type ==  WMI_HOST_UAPSD_AC_TYPE_DELI) ? (1<<(ac<<1)) :\
6201 	 (1<<((ac<<1)+1)))
6202 
6203 enum wmi_host_ap_ps_peer_param_wnm_sleep {
6204 	WMI_HOST_AP_PS_PEER_PARAM_WNM_SLEEP_ENABLE,
6205 	WMI_HOST_AP_PS_PEER_PARAM_WNM_SLEEP_DISABLE,
6206 };
6207 
6208 enum wmi_host_ap_ps_peer_param {
6209 	/** Set uapsd configuration for a given peer.
6210 	*
6211 	* This will include the delivery and trigger enabled state for every AC.
6212 	* The host  MLME needs to set this based on AP capability and stations
6213 	* request Set in the association request  received from the station.
6214 	*
6215 	* Lower 8 bits of the value specify the UAPSD configuration.
6216 	*
6217 	* (see enum wmi_ap_ps_param_uapsd)
6218 	* The default value is 0.
6219 	*/
6220 	WMI_HOST_AP_PS_PEER_PARAM_UAPSD = 0,
6221 
6222 	/**
6223 	* Set the service period for a UAPSD capable station
6224 	*
6225 	* The service period from wme ie in the (re)assoc request frame.
6226 	*
6227 	* (see enum wmi_ap_ps_peer_param_max_sp)
6228 	*/
6229 	WMI_HOST_AP_PS_PEER_PARAM_MAX_SP = 1,
6230 
6231 	/** Time in seconds for aging out buffered frames
6232       * for STA in power save */
6233 	WMI_HOST_AP_PS_PEER_PARAM_AGEOUT_TIME = 2,
6234 
6235 	/** Specify frame types that are considered SIFS
6236       * RESP trigger frame */
6237 	WMI_HOST_AP_PS_PEER_PARAM_SIFS_RESP_FRMTYPE = 3,
6238 
6239 	/** Specifies the trigger state of TID.
6240 	* Valid only for UAPSD frame type  */
6241 	WMI_HOST_AP_PS_PEER_PARAM_SIFS_RESP_UAPSD = 4,
6242 
6243 	/** Specifies the WNM sleep state of a STA */
6244 	WMI_HOST_AP_PS_PEER_PARAM_WNM_SLEEP = 5,
6245 };
6246 #define WMI_HOST_RXERR_CRC	0x01 /* CRC error on frame */
6247 #define WMI_HOST_RXERR_DECRYPT	0x08 /* non-Michael decrypt error */
6248 #define WMI_HOST_RXERR_MIC	0x10 /* Michael MIC decrypt error */
6249 #define WMI_HOST_RXERR_KEY_CACHE_MISS 0x20 /* No/incorrect key matter in h/w */
6250 
6251 enum wmi_host_sta_ps_param_rx_wake_policy {
6252 	/* Wake up when ever there is an  RX activity on the VDEV. In this mode
6253 	* the Power save SM(state machine) will come out of sleep by either
6254 	* sending null frame (or) a data frame (with PS==0) in response to TIM
6255 	* bit set in the received beacon frame from AP.
6256 	*/
6257 	WMI_HOST_STA_PS_RX_WAKE_POLICY_WAKE = 0,
6258 
6259 	/* Here the power save state machine will not wakeup in response to TIM
6260 	* bit, instead it will send a PSPOLL (or) UASPD trigger based on UAPSD
6261 	* configuration setup by WMISET_PS_SET_UAPSD  WMI command.  When all
6262 	* access categories are delivery-enabled, the station will send a UAPSD
6263 	* trigger frame, otherwise it will send a PS-Poll.
6264 	*/
6265 	WMI_HOST_STA_PS_RX_WAKE_POLICY_POLL_UAPSD = 1,
6266 };
6267 enum wmi_host_sta_ps_param_pspoll_count {
6268 	WMI_HOST_STA_PS_PSPOLL_COUNT_NO_MAX = 0,
6269 	/* Values greater than 0 indicate the maximum numer of PS-Poll frames FW
6270 	* will send before waking up.
6271 	*/
6272 };
6273 /** Number of tx frames/beacon  that cause the power save SM to wake up.
6274  *
6275  * Value 1 causes the SM to wake up for every TX. Value 0 has a special
6276  * meaning, It will cause the SM to never wake up. This is useful if you want
6277  * to keep the system to sleep all the time for some kind of test mode . host
6278  * can change this parameter any time.  It will affect at the next tx frame.
6279  */
6280 enum wmi_host_sta_ps_param_tx_wake_threshold {
6281 	WMI_HOST_STA_PS_TX_WAKE_THRESHOLD_NEVER = 0,
6282 	WMI_HOST_STA_PS_TX_WAKE_THRESHOLD_ALWAYS = 1,
6283 
6284 	/* Values greater than one indicate that many TX attempts per beacon
6285 	* interval before the STA will wake up
6286 	*/
6287 };
6288 /*
6289  * Transmit power scale factor.
6290  *
6291  */
6292 typedef enum {
6293 	WMI_HOST_TP_SCALE_MAX	= 0,	/* no scaling (default) */
6294 	WMI_HOST_TP_SCALE_50	= 1,	/* 50% of max (-3 dBm) */
6295 	WMI_HOST_TP_SCALE_25	= 2,	/* 25% of max (-6 dBm) */
6296 	WMI_HOST_TP_SCALE_12	= 3,	/* 12% of max (-9 dBm) */
6297 	WMI_HOST_TP_SCALE_MIN	= 4,	/* min, but still on   */
6298 	WMI_HOST_TP_SCALE_SIZE   = 5,	/* max num of enum	*/
6299 } WMI_HOST_TP_SCALE;
6300 enum {
6301 	WMI_HOST_RATEPWR_TABLE_OPS_SET,
6302 	WMI_HOST_RATEPWR_TABLE_OPS_GET,
6303 };
6304 /* reserved up through 0xF */
6305 /**
6306  *  struct wmi_host_dcs_mib_stats - WLAN IM stats from target to host
6307  *      Below statistics are sent from target to host periodically.
6308  *      These are collected at target as long as target is running
6309  *      and target chip is not in sleep.
6310  * @listen_time:
6311  * @reg_tx_frame_cnt:
6312  * @reg_rx_frame_cnt:
6313  * @reg_rxclr_cnt:
6314  * @reg_cycle_cnt: delta cycle count
6315  * @reg_rxclr_ext_cnt:
6316  * @reg_ofdm_phyerr_cnt:
6317  * @reg_cck_phyerr_cnt: CCK err count since last reset, read from register
6318  */
6319 typedef struct _hp_dcs_mib_stats  {
6320 	int32_t    listen_time;
6321 	uint32_t   reg_tx_frame_cnt;
6322 	uint32_t   reg_rx_frame_cnt;
6323 	uint32_t   reg_rxclr_cnt;
6324 	uint32_t   reg_cycle_cnt;
6325 	uint32_t   reg_rxclr_ext_cnt;
6326 	uint32_t   reg_ofdm_phyerr_cnt;
6327 	uint32_t   reg_cck_phyerr_cnt;
6328 } wmi_host_dcs_mib_stats_t;
6329 
6330 /**
6331  * struct wmi_host_dcs_im_tgt_stats - DCS IM target stats
6332  * @reg_tsf32: current running TSF from the TSF-1
6333  * @last_ack_rssi: Known last frame rssi, in case of multiple stations, if
6334  *      and at different ranges, this would not gaurantee that
6335  *      this is the least rssi.
6336  * @tx_waste_time: Sum of all the failed durations in the last
6337  *      one second interval.
6338  * @rx_time: count how many times the hal_rxerr_phy is marked, in this
6339  *      time period
6340  * @phyerr_cnt:
6341  * @mib_stats: wmi_host_dcs_mib_stats_t - collected mib stats as explained
6342  *      in mib structure
6343  * @chan_nf: Channel noise floor (Units are in dBm)
6344  * @my_bss_rx_cycle_count: BSS rx cycle count
6345  * @reg_rxclr_ext40_cnt: extension channel 40Mhz rxclear count
6346  * @reg_rxclr_ext80_cnt: extension channel 80Mhz rxclear count
6347  */
6348 typedef struct _wmi_host_dcs_im_tgt_stats {
6349 	uint32_t                     reg_tsf32;
6350 	uint32_t                     last_ack_rssi;
6351 	uint32_t                     tx_waste_time;
6352 	uint32_t                     rx_time;
6353 	uint32_t                     phyerr_cnt;
6354 	wmi_host_dcs_mib_stats_t     mib_stats;
6355 	uint32_t		     chan_nf;
6356 	uint32_t		     my_bss_rx_cycle_count;
6357 	/* these fields are added here for backward compatibility instead of
6358 	 * wmi_host_dcs_mib_stats_t
6359 	 */
6360 	uint32_t                     reg_rxclr_ext40_cnt;
6361 	uint32_t                     reg_rxclr_ext80_cnt;
6362 } wmi_host_dcs_im_tgt_stats_t;
6363 
6364 #ifndef BIT
6365 #define BIT(n) (1 << (n))
6366 #endif
6367 
6368 /**
6369  * Enum for pktlog req
6370  */
6371 enum {
6372 	WMI_HOST_PKTLOG_EVENT_RX_BIT,
6373 	WMI_HOST_PKTLOG_EVENT_TX_BIT,
6374 	WMI_HOST_PKTLOG_EVENT_RCF_BIT,
6375 	WMI_HOST_PKTLOG_EVENT_RCU_BIT,
6376 	WMI_HOST_PKTLOG_EVENT_DBG_PRINT_BIT,
6377 	WMI_HOST_PKTLOG_EVENT_SMART_ANTENNA_BIT,
6378 	WMI_HOST_PKTLOG_EVENT_H_INFO_BIT,
6379 	WMI_HOST_PKTLOG_EVENT_STEERING_BIT,
6380 	WMI_HOST_PKTLOG_EVENT_TX_DATA_CAPTURE_BIT,
6381 	WMI_HOST_PKTLOG_EVENT_PHY_LOGGING_BIT,
6382 };
6383 
6384 typedef enum {
6385 	WMI_HOST_PKTLOG_EVENT_RX	= BIT(WMI_HOST_PKTLOG_EVENT_RX_BIT),
6386 	WMI_HOST_PKTLOG_EVENT_TX	= BIT(WMI_HOST_PKTLOG_EVENT_TX_BIT),
6387 	WMI_HOST_PKTLOG_EVENT_RCF	=
6388 		BIT(WMI_HOST_PKTLOG_EVENT_RCF_BIT), /* Rate Control Find */
6389 	WMI_HOST_PKTLOG_EVENT_RCU	=
6390 		BIT(WMI_HOST_PKTLOG_EVENT_RCU_BIT), /* Rate Control Update */
6391 	WMI_HOST_PKTLOG_EVENT_DBG_PRINT =
6392 		BIT(WMI_HOST_PKTLOG_EVENT_DBG_PRINT_BIT), /* DEBUG prints */
6393 	/* To support Smart Antenna */
6394 	WMI_HOST_PKTLOG_EVENT_SMART_ANTENNA =
6395 		BIT(WMI_HOST_PKTLOG_EVENT_SMART_ANTENNA_BIT),
6396 	WMI_HOST_PKTLOG_EVENT_H_INFO =
6397 		BIT(WMI_HOST_PKTLOG_EVENT_H_INFO_BIT),
6398 	WMI_HOST_PKTLOG_EVENT_STEERING =
6399 		BIT(WMI_HOST_PKTLOG_EVENT_STEERING_BIT),
6400 	/* To support Tx data Capture */
6401 	WMI_HOST_PKTLOG_EVENT_TX_DATA_CAPTURE =
6402 		BIT(WMI_HOST_PKTLOG_EVENT_TX_DATA_CAPTURE_BIT),
6403 	/* To support PHY logging */
6404 	WMI_HOST_PKTLOG_EVENT_PHY_LOGGING =
6405 		BIT(WMI_HOST_PKTLOG_EVENT_PHY_LOGGING_BIT),
6406 } WMI_HOST_PKTLOG_EVENT;
6407 
6408 /**
6409  * wmi_host_phyerr
6410  *
6411  */
6412 #define WMI_HOST_PHY_ERROR_SPECTRAL_SCAN	0x26
6413 #define WMI_HOST_PHY_ERROR_FALSE_RADAR_EXT	0x24
6414 
6415 #define WMI_HOST_AR900B_DFS_PHYERR_MASK	0x4
6416 #define WMI_HOST_AR900B_SPECTRAL_PHYERR_MASK	0x4000000
6417 
6418 /**
6419  * struct wmi_host_perchain_rssi_info - per chain RSSI info
6420  * @rssi_pri20: RSSI on primary 20
6421  * @rssi_sec20: RSSI on secomdary 20
6422  * @rssi_sec40: RSSI secondary 40
6423  * @rssi_sec80: RSSI secondary 80
6424  */
6425 typedef struct wmi_host_perchain_rssi_info {
6426 	int8_t rssi_pri20;
6427 	int8_t rssi_sec20;
6428 	int8_t rssi_sec40;
6429 	int8_t rssi_sec80;
6430 } wmi_host_perchain_rssi_info_t;
6431 
6432 /**
6433  * struct _wmi_host_rf_info - RF measurement information
6434  * @rssi_comb: RSSI Information
6435  * @pc_rssi_info[4]: For now, we know we are getting information
6436  *      for only 4 chains at max. For future extensions
6437  *      use a define
6438  * @noise_floor: Noise floor information
6439  */
6440 typedef struct _wmi_host_rf_info {
6441 	int8_t rssi_comb;
6442 	wmi_host_perchain_rssi_info_t pc_rssi_info[4];
6443 	int16_t noise_floor[4];
6444 } wmi_host_rf_info_t;
6445 
6446 /**
6447  * struct _wmi_host_chan_info
6448  * @center_freq1: center frequency 1 in MHz
6449  * @center_freq2: center frequency 2 in MHz -valid only for
6450  *                11ACVHT 80PLUS80 mode
6451  * @chan_width: channel width in MHz
6452  */
6453 typedef struct _wmi_host_chan_info {
6454 	u_int16_t center_freq1;
6455 	u_int16_t center_freq2;
6456 	u_int8_t chan_width;
6457 } wmi_host_chan_info_t;
6458 
6459 /**
6460  * struct wmi_host_phyerr
6461  * @rf_info:
6462  * @chan_info:
6463  * @tsf64:
6464  * @phy_err_code:
6465  * @tsf_timestamp:
6466  * @bufp:
6467  * @buf_len:
6468  * @phy_err_mask0:
6469  * @phy_err_mask1:
6470  * @pdev_id: pdev_id
6471  */
6472 typedef struct _wmi_host_phyerr {
6473 	wmi_host_rf_info_t rf_info;
6474 	wmi_host_chan_info_t chan_info;
6475 	uint64_t tsf64;
6476 	int32_t phy_err_code;
6477 	uint32_t tsf_timestamp;
6478 	uint8_t *bufp;
6479 	uint32_t buf_len;
6480 	uint32_t phy_err_mask0;
6481 	uint32_t phy_err_mask1;
6482 	uint32_t pdev_id;
6483 } wmi_host_phyerr_t;
6484 
6485 /**
6486  * struct wmi_host_rtt_event_hdr
6487  * @req_id: request id
6488  * @status: status
6489  * @meas_done: measurement done flag
6490  * @meas_type: measurement type
6491  * @report_type: report type
6492  * @v3_status: v2 status
6493  * @v3_finish:
6494  * @v3_tm_start:
6495  * @num_ap: number of AP
6496  * @result: resuult
6497  * @dest_mac: destination mac
6498  */
6499 typedef struct {
6500 	uint16_t req_id;
6501 	uint16_t status:1,
6502 		meas_done:1,
6503 		meas_type:3,
6504 		report_type:3,
6505 		v3_status:2,
6506 		v3_finish:1,
6507 		v3_tm_start:1,
6508 		num_ap:4;
6509 	uint16_t result;
6510 	uint8_t  dest_mac[QDF_MAC_ADDR_SIZE];
6511 } wmi_host_rtt_event_hdr;
6512 
6513 /**
6514  * struct wmi_host_rtt_meas_event - RTT measurement event
6515  * @chain_mask:
6516  * @bw:
6517  * @rsvd:
6518  * @txrxchain_mask: Bit:0-3:chain mask
6519  *                  Bit 4-5: band width info
6520  *                  00 --Legacy 20, 01 --HT/VHT20
6521  *                  10 --HT/VHT40, 11 -- VHT80
6522  * @tod: resolution of 0.1ns
6523  * @toa: resolution of 0.1ns
6524  * @t3:
6525  * @t4:
6526  * @rssi0:
6527  * @rssi1:
6528  * @rssi2:
6529  * @rssi3:
6530  */
6531 typedef struct {
6532 	uint32_t chain_mask:3,
6533 		bw:2,
6534 		rsvd:27;
6535 	uint32_t txrxchain_mask;
6536 	uint64_t tod;
6537 	uint64_t toa;
6538 	uint64_t t3;
6539 	uint64_t t4;
6540 	uint32_t rssi0;
6541 	uint32_t rssi1;
6542 	uint32_t rssi2;
6543 	uint32_t rssi3;
6544 } wmi_host_rtt_meas_event;
6545 
6546 /*----RTT Report event definition  ----*/
6547 typedef enum {
6548 	/* rtt cmd header parsing error  --terminate */
6549 	WMI_HOST_RTT_COMMAND_HEADER_ERROR = 0,
6550 	/* rtt body parsing error -- skip current STA REQ */
6551 	WMI_HOST_RTT_COMMAND_ERROR,
6552 	/* rtt no resource	-- terminate */
6553 	WMI_HOST_RTT_MODULE_BUSY,
6554 	/* STA exceed the support limit -- only server the first n STA */
6555 	WMI_HOST_RTT_TOO_MANY_STA,
6556 	/* any allocate failure */
6557 	WMI_HOST_RTT_NO_RESOURCE,
6558 	/* can not find vdev with vdev ID - skip current STA REQ */
6559 	WMI_HOST_RTT_VDEV_ERROR,
6560 	/* Tx failure   -- continiue and measure number */
6561 	WMI_HOST_RTT_TRANSIMISSION_ERROR,
6562 	/* wait for first TM timer expire-terminate current STA measurement */
6563 	WMI_HOST_RTT_TM_TIMER_EXPIRE,
6564 	/* we do not support RTT measurement with this type of frame */
6565 	WMI_HOST_RTT_FRAME_TYPE_NOSUPPORT,
6566 	/* whole RTT measurement timer expire-terminate
6567 	** current STA measurement */
6568 	WMI_HOST_RTT_TIMER_EXPIRE,
6569 	/* channel swicth failed */
6570 	WMI_HOST_RTT_CHAN_SWITCH_ERROR,
6571 	/* TMR trans error, this dest peer will be skipped */
6572 	WMI_HOST_RTT_TMR_TRANS_ERROR,
6573 	/* V3 only. If both CFR and Token mismatch, do not report */
6574 	WMI_HOST_RTT_NO_REPORT_BAD_CFR_TOKEN,
6575 	/* For First TM, if CFR is bad, then do not report */
6576 	WMI_HOST_RTT_NO_REPORT_FIRST_TM_BAD_CFR,
6577 	/* do not allow report type2 mix with type 0, 1 */
6578 	WMI_HOST_RTT_REPORT_TYPE2_MIX,
6579 	/* LCI Configuration OK. - Responder only */
6580 	WMI_HOST_RTT_LCI_CFG_OK,
6581 	/* LCR configuration OK. - Responder only */
6582 	WMI_HOST_RTT_LCR_CFG_OK,
6583 	/* Bad configuration LCI (or) LCR request - Responder only */
6584 	WMI_HOST_RTT_CFG_ERROR,
6585 	WMI_HOST_WMI_RTT_REJECT_MAX,
6586 } WMI_HOST_RTT_ERROR_INDICATOR;
6587 typedef struct {
6588 	wmi_host_rtt_event_hdr hdr;
6589 	WMI_HOST_RTT_ERROR_INDICATOR reject_reason;
6590 } wmi_host_rtt_error_report_event;
6591 
6592 #if defined(AR9888)
6593 typedef enum {
6594 	WMI_HOST_PROF_CPU_IDLE,
6595 	WMI_HOST_PROF_PPDU_PROC,
6596 	WMI_HOST_PROF_PPDU_POST,
6597 	WMI_HOST_PROF_HTT_TX_INPUT,
6598 	WMI_HOST_PROF_MSDU_ENQ,
6599 	WMI_HOST_PROF_PPDU_POST_HAL,
6600 	WMI_HOST_PROF_COMPUTE_TX_TIME,
6601 
6602 	/* Add new ID's above this. */
6603 	WMI_HOST_PROF_MAX_ID,
6604 } wmi_host_profile_id_t;
6605 #endif
6606 
6607 #define WMI_HOST_WLAN_PROFILE_MAX_HIST	3
6608 #define WMI_HOST_WLAN_PROFILE_MAX_BIN_CNT 32
6609 
6610 #if defined(AR9888)
6611 #define WMI_HOST_MAX_PROFILE	WMI_HOST_PROF_MAX_ID
6612 #else
6613 #define WMI_HOST_MAX_PROFILE	WMI_HOST_WLAN_PROFILE_MAX_BIN_CNT
6614 #endif
6615 
6616 /**
6617  * struct wmi_host_wlan_profile - Host profile param
6618  * @id: profile id
6619  * @cnt: Count
6620  * @tot:
6621  * @min: minimum
6622  * @max: Mac
6623  * @hist_intvl: history interval
6624  * @hist: profile data history
6625  */
6626 typedef struct {
6627 	uint32_t id;
6628 	uint32_t cnt;
6629 	uint32_t tot;
6630 	uint32_t min;
6631 	uint32_t max;
6632 	uint32_t hist_intvl;
6633 	uint32_t hist[WMI_HOST_WLAN_PROFILE_MAX_HIST];
6634 } wmi_host_wlan_profile_t;
6635 
6636 /**
6637  * struct wmi_host_wlan_profile_ctx_t - profile context
6638  * @tot: time in us
6639  * @tx_msdu_cnt: MSDU TX count
6640  * @tx_mpdu_cnt: MPDU tx count
6641  * @tx_ppdu_cnt: PPDU tx count
6642  * @rx_msdu_cnt: MSDU RX count
6643  * @rx_mpdu_cnt: MPDU RXcount
6644  * @bin_count: Bin count
6645  */
6646 typedef struct {
6647 	uint32_t tot;
6648 	uint32_t tx_msdu_cnt;
6649 	uint32_t tx_mpdu_cnt;
6650 	uint32_t tx_ppdu_cnt;
6651 	uint32_t rx_msdu_cnt;
6652 	uint32_t rx_mpdu_cnt;
6653 	uint32_t bin_count;
6654 } wmi_host_wlan_profile_ctx_t;
6655 
6656 /**
6657  * struct wmi_host_chan_info_event - Channel info WMI event
6658  * @pdev_id: pdev_id
6659  * @err_code: Error code
6660  * @freq: Channel freq
6661  * @cmd_flags: Read flags
6662  * @noise_floor: Noise Floor value
6663  * @rx_clear_count: rx clear count
6664  * @cycle_count: cycle count
6665  * @chan_tx_pwr_range: channel tx power per range
6666  * @chan_tx_pwr_tp: channel tx power per throughput
6667  * @rx_frame_count: rx frame count
6668  * @rx_11b_mode_data_duration: 11b mode data duration
6669  * @my_bss_rx_cycle_count: self BSS rx cycle count
6670  * @tx_frame_cnt: tx frame count
6671  * @mac_clk_mhz: mac clock
6672  * @vdev_id: unique id identifying the VDEV
6673  * @tx_frame_count: tx frame count
6674  * @rx_clear_ext20_count: ext20 frame count
6675  * @rx_clear_ext40_count: ext40 frame count
6676  * @rx_clear_ext80_count: ext80 frame count
6677  * @per_chain_noise_floor: Per chain NF value in dBm
6678  */
6679 typedef struct {
6680 	uint32_t pdev_id;
6681 	uint32_t err_code;
6682 	uint32_t freq;
6683 	uint32_t cmd_flags;
6684 	uint32_t noise_floor;
6685 	uint32_t rx_clear_count;
6686 	uint32_t cycle_count;
6687 	uint32_t chan_tx_pwr_range;
6688 	uint32_t chan_tx_pwr_tp;
6689 	uint32_t rx_frame_count;
6690 	uint32_t rx_11b_mode_data_duration;
6691 	uint32_t my_bss_rx_cycle_count;
6692 	uint32_t tx_frame_cnt;
6693 	uint32_t mac_clk_mhz;
6694 	uint32_t vdev_id;
6695 	uint32_t tx_frame_count;
6696 	uint32_t rx_clear_ext20_count;
6697 	uint32_t rx_clear_ext40_count;
6698 	uint32_t rx_clear_ext80_count;
6699 	uint32_t per_chain_noise_floor[WMI_HOST_MAX_CHAINS];
6700 } wmi_host_chan_info_event;
6701 
6702 /**
6703  * struct wmi_host_pdev_channel_hopping_event
6704  * @pdev_id: pdev_id
6705  * @noise_floor_report_iter: Noise threshold iterations with high values
6706  * @noise_floor_total_iter: Total noise threshold iterations
6707  */
6708 typedef struct {
6709 	uint32_t pdev_id;
6710 	uint32_t noise_floor_report_iter;
6711 	uint32_t noise_floor_total_iter;
6712 } wmi_host_pdev_channel_hopping_event;
6713 
6714 /**
6715  * struct wmi_host_pdev_bss_chan_info_event
6716  * @pdev_id: pdev_id
6717  * @freq: Units in MHz
6718  * @noise_floor: units are dBm
6719  * @rx_clear_count_low:
6720  * @rx_clear_count_high:
6721  * @cycle_count_low:
6722  * @cycle_count_high:
6723  * @tx_cycle_count_low:
6724  * @tx_cycle_count_high:
6725  * @rx_cycle_count_low:
6726  * @rx_cycle_count_high:
6727  * @rx_bss_cycle_count_low:
6728  * @rx_bss_cycle_count_high:
6729  * @reserved:
6730  */
6731 typedef struct {
6732 	uint32_t pdev_id;
6733 	uint32_t freq;
6734 	uint32_t noise_floor;
6735 	uint32_t rx_clear_count_low;
6736 	uint32_t rx_clear_count_high;
6737 	uint32_t cycle_count_low;
6738 	uint32_t cycle_count_high;
6739 	uint32_t tx_cycle_count_low;
6740 	uint32_t tx_cycle_count_high;
6741 	uint32_t rx_cycle_count_low;
6742 	uint32_t rx_cycle_count_high;
6743 	uint32_t rx_bss_cycle_count_low;
6744 	uint32_t rx_bss_cycle_count_high;
6745 	uint32_t reserved;
6746 } wmi_host_pdev_bss_chan_info_event;
6747 
6748 /**
6749  * struct wmi_host_pdev_ctl_failsafe_event
6750  * @ctl_failsafe_status: Indicate if Failsafe value is imposed on CTL
6751  */
6752 struct wmi_host_pdev_ctl_failsafe_event {
6753 	uint32_t ctl_failsafe_status;
6754 };
6755 
6756 #define WMI_HOST_INST_STATS_INVALID_RSSI 0
6757 /**
6758  * struct wmi_host_inst_stats_resp
6759  * @iRSSI: Instantaneous RSSI
6760  * @peer_macaddr: peer mac address
6761  * @pdev_id: pdev_id
6762  */
6763 typedef struct {
6764 	uint32_t iRSSI;
6765 	wmi_host_mac_addr peer_macaddr;
6766 	uint32_t pdev_id;
6767 } wmi_host_inst_stats_resp;
6768 
6769 /* Event definition and new structure addition to send event
6770  * to host to block/unblock tx data traffic based on peer_ast_idx or vdev id
6771  */
6772 #define WMI_HOST_INVALID_PEER_AST_INDEX              0xffff
6773 #define WMI_HOST_TX_DATA_TRAFFIC_CTRL_BLOCK          0x1
6774 #define WMI_HOST_TX_DATA_TRAFFIC_CTRL_UNBLOCK        0x2
6775 /**
6776  * struct wmi_host_tx_data_traffic_ctrl_event
6777  * @peer_ast_idx: For vdev based control, peer_ast_idx will be
6778  *                WMI_INVALID_PEER_AST_INDEX
6779  * @vdev_id: only applies if peer_ast_idx == INVALID
6780  * @ctrl_cmd: WMI_TX_DATA_TRAFFIC_CTRL_BLOCK or
6781  *            WMI_TX_DATA_TRAFFIC_CTRL_UNBLOCK
6782  * @wmm_ac: Indicates AC to be blocked or unblocked
6783  *          Bits  4-31 : Reserved (Shall be zero)
6784  *          Bits  0-3  : WMM AC NO [ BE (1), BK (2), VI (3), VO (4)]
6785  *          Started numbering from 1 to preserve backward compatibility
6786  */
6787 typedef struct {
6788 	uint32_t peer_ast_idx;
6789 	uint32_t vdev_id;
6790 	uint32_t ctrl_cmd;
6791 	uint32_t wmm_ac;
6792 } wmi_host_tx_data_traffic_ctrl_event;
6793 
6794 /**
6795  * struct wmi_host_ath_dcs_cw_int
6796  * @channel: either number or freq in mhz
6797  */
6798 typedef struct {
6799 	uint32_t channel;
6800 } wmi_host_ath_dcs_cw_int;
6801 
6802 #define WMI_MAX_POWER_DBG_ARGS 8
6803 
6804 /**
6805  * struct wmi_power_dbg_params - power debug command parameter
6806  * @pdev_id: subsystem identifier
6807  * @module_id: parameter id
6808  * @num_arg: no of arguments
6809  * @args: arguments
6810  */
6811 struct wmi_power_dbg_params {
6812 	uint32_t pdev_id;
6813 	uint32_t module_id;
6814 	uint32_t num_args;
6815 	uint32_t args[WMI_MAX_POWER_DBG_ARGS];
6816 };
6817 
6818 /**
6819  * struct wmi_fw_dump_seg_req - individual segment details
6820  * @seg_id - segment id.
6821  * @seg_start_addr_lo - lower address of the segment.
6822  * @seg_start_addr_hi - higher address of the segment.
6823  * @seg_length - length of the segment.
6824  * @dst_addr_lo - lower address of the destination buffer.
6825  * @dst_addr_hi - higher address of the destination buffer.
6826  *
6827  * This structure carries the information to firmware about the
6828  * individual segments. This structure is part of firmware memory
6829  * dump request.
6830  */
6831 struct wmi_fw_dump_seg_req {
6832 	uint8_t seg_id;
6833 	uint32_t seg_start_addr_lo;
6834 	uint32_t seg_start_addr_hi;
6835 	uint32_t seg_length;
6836 	uint32_t dst_addr_lo;
6837 	uint32_t dst_addr_hi;
6838 };
6839 
6840 /**
6841  * enum wmi_userspace_log_level - Log level at userspace
6842  * @WMI_LOG_LEVEL_NO_COLLECTION: verbose_level 0 corresponds to no collection
6843  * @WMI_LOG_LEVEL_NORMAL_COLLECT: verbose_level 1 correspond to normal log
6844  * level with minimal user impact. This is the default value.
6845  * @WMI_LOG_LEVEL_ISSUE_REPRO: verbose_level 2 are enabled when user is lazily
6846  * trying to reproduce a problem, wifi performances and power can be impacted
6847  * but device should not otherwise be significantly impacted
6848  * @WMI_LOG_LEVEL_ACTIVE: verbose_level 3+ are used when trying to
6849  * actively debug a problem
6850  *
6851  * Various log levels defined in the userspace for logging applications
6852  */
6853 enum wmi_userspace_log_level {
6854 	WMI_LOG_LEVEL_NO_COLLECTION,
6855 	WMI_LOG_LEVEL_NORMAL_COLLECT,
6856 	WMI_LOG_LEVEL_ISSUE_REPRO,
6857 	WMI_LOG_LEVEL_ACTIVE,
6858 };
6859 
6860 /**
6861  * HW mode config type replicated from FW header
6862  * @WMI_HOST_HW_MODE_SINGLE: Only one PHY is active.
6863  * @WMI_HOST_HW_MODE_DBS: Both PHYs are active in different bands,
6864  *                        one in 2G and another in 5G.
6865  * @WMI_HOST_HW_MODE_SBS_PASSIVE: Both PHYs are in passive mode (only rx) in
6866  *                        same band; no tx allowed.
6867  * @WMI_HOST_HW_MODE_SBS: Both PHYs are active in the same band.
6868  *                        Support for both PHYs within one band is planned
6869  *                        for 5G only(as indicated in WMI_MAC_PHY_CAPABILITIES),
6870  *                        but could be extended to other bands in the future.
6871  *                        The separation of the band between the two PHYs needs
6872  *                        to be communicated separately.
6873  * @WMI_HOST_HW_MODE_DBS_SBS: 3 PHYs, with 2 on the same band doing SBS
6874  *                           as in WMI_HW_MODE_SBS, and 3rd on the other band
6875  * @WMI_HOST_HW_MODE_DBS_OR_SBS: Two PHY with one PHY capabale of both 2G and
6876  *                        5G. It can support SBS (5G + 5G) OR DBS (5G + 2G).
6877  * @WMI_HOST_HW_MODE_FW_INTERNAL: FW specific internal mode
6878  * @WMI_HOST_HW_MODE_2G_PHYB: Only one phy is active. 2G mode on PhyB.
6879  * @WMI_HOST_HW_MODE_MAX: Max hw_mode_id. Used to indicate invalid mode.
6880  * @WMI_HOST_HW_MODE_DETECT: Mode id used by host to choose mode from target
6881  *                        supported modes.
6882  */
6883 enum wmi_host_hw_mode_config_type {
6884 	WMI_HOST_HW_MODE_SINGLE       = 0,
6885 	WMI_HOST_HW_MODE_DBS          = 1,
6886 	WMI_HOST_HW_MODE_SBS_PASSIVE  = 2,
6887 	WMI_HOST_HW_MODE_SBS          = 3,
6888 	WMI_HOST_HW_MODE_DBS_SBS      = 4,
6889 	WMI_HOST_HW_MODE_DBS_OR_SBS   = 5,
6890 	WMI_HOST_HW_MODE_FW_INTERNAL  = 6,
6891 	WMI_HOST_HW_MODE_2G_PHYB      = 7,
6892 	WMI_HOST_HW_MODE_MAX,
6893 	WMI_HOST_HW_MODE_DETECT,
6894 };
6895 
6896 /**
6897  * enum wmi_host_dynamic_hw_mode_config_type - Host defined enum for
6898  * dynamic mode switch
6899  * @WMI_HOST_DYNAMIC_HW_MODE_DISABLED: hw mode switch is disabled
6900  * @WMI_HOST_DYNAMIC_HW_MODE_SLOW: hw mode switch with interface down/up
6901  * @WMI_HOST_DYNAMIC_HW_MODE_FAST: hw mode switch without interface down/up
6902  * @WMI_HOST_DYNAMIC_HW_MODE_MAX: Max value to indicate invalid mode
6903  */
6904 enum wmi_host_dynamic_hw_mode_config_type {
6905 	WMI_HOST_DYNAMIC_HW_MODE_DISABLED = 0,
6906 	WMI_HOST_DYNAMIC_HW_MODE_SLOW     = 1,
6907 	WMI_HOST_DYNAMIC_HW_MODE_FAST     = 2,
6908 	WMI_HOST_DYNAMIC_HW_MODE_MAX,
6909 };
6910 
6911 /*
6912  * struct wmi_host_peer_txmu_cnt_event
6913  * @tx_mu_transmitted - MU-MIMO tx count
6914  */
6915 typedef struct {
6916 	uint32_t tx_mu_transmitted;
6917 } wmi_host_peer_txmu_cnt_event;
6918 
6919 /**
6920  * struct esp_estimation_event - esp airtime estimation event
6921  * @ac_airtime_percentage: Estimated Airtime
6922  * @pdev_id: PDEV_ID of Data
6923  */
6924 struct esp_estimation_event {
6925 	uint32_t ac_airtime_percentage;
6926 	uint32_t pdev_id;
6927 };
6928 
6929 /*
6930  * struct wmi_peer_gid_userpos_list_event
6931  * @usr_list - User list
6932  */
6933 #define GID_OVERLOAD_GROUP_COUNT  15
6934 typedef struct {
6935 	uint32_t usr_list[GID_OVERLOAD_GROUP_COUNT];
6936 } wmi_host_peer_gid_userpos_list_event;
6937 
6938 /**
6939  * enum rcpi_measurement_type - for identifying type of rcpi measurement
6940  * @RCPI_MEASUREMENT_TYPE_AVG_MGMT: avg rcpi of mgmt frames
6941  * @RCPI_MEASUREMENT_TYPE_AVG_DATA: avg rcpi of data frames
6942  * @RCPI_MEASUREMENT_TYPE_LAST_MGMT: rcpi of last mgmt frame
6943  * @RCPI_MEASUREMENT_TYPE_LAST_DATA: rcpi of last data frame
6944  * @RCPI_MEASUREMENT_TYPE_INVALID: invalid rcpi measurement type
6945  */
6946 enum rcpi_measurement_type {
6947 	RCPI_MEASUREMENT_TYPE_AVG_MGMT  = 0x1,
6948 	RCPI_MEASUREMENT_TYPE_AVG_DATA  = 0x2,
6949 	RCPI_MEASUREMENT_TYPE_LAST_MGMT = 0x3,
6950 	RCPI_MEASUREMENT_TYPE_LAST_DATA = 0x4,
6951 	RCPI_MEASUREMENT_TYPE_INVALID = 0x5,
6952 };
6953 
6954 /**
6955  * struct rcpi_req - RCPI req parameter
6956  * @vdev_id: virtual device id
6957  * @measurement_type: type of rcpi from enum wmi_rcpi_measurement_type
6958  * @mac_addr: peer mac addr for which measurement is required
6959  */
6960 struct rcpi_req {
6961 	uint32_t vdev_id;
6962 	enum rcpi_measurement_type measurement_type;
6963 	uint8_t mac_addr[QDF_MAC_ADDR_SIZE];
6964 };
6965 
6966 /**
6967  * struct rcpi_res - RCPI response parameter
6968  * @vdev_id: virtual device id
6969  * @measurement_type: type of rcpi from enum wmi_rcpi_measurement_type
6970  * @mac_addr: peer mac addr for which measurement is required
6971  * @rcpi_value: value of RCPI computed by firmware
6972  */
6973 struct rcpi_res {
6974 	uint32_t vdev_id;
6975 	enum rcpi_measurement_type measurement_type;
6976 	uint8_t mac_addr[QDF_MAC_ADDR_SIZE];
6977 	int32_t rcpi_value;
6978 };
6979 
6980 #define WMI_HOST_BOARD_MCN_STRING_MAX_SIZE 19
6981 #define WMI_HOST_BOARD_MCN_STRING_BUF_SIZE \
6982 	(WMI_HOST_BOARD_MCN_STRING_MAX_SIZE+1) /* null-terminator */
6983 
6984 typedef struct {
6985 	uint32_t software_cal_version;
6986 	uint32_t board_cal_version;
6987 	/* board_mcn_detail:
6988 	 * Provide a calibration message string for the host to display.
6989 	 * Note: on a big-endian host, the 4 bytes within each uint32_t portion
6990 	 * of a WMI message will be automatically byteswapped by the copy engine
6991 	 * as the messages are transferred between host and target, to convert
6992 	 * between the target's little-endianness and the host's big-endianness.
6993 	 * Consequently, a big-endian host should manually unswap the bytes
6994 	 * within the board_mcn_detail string buffer to get the bytes back into
6995 	 * the desired natural order.
6996 	 */
6997 	uint8_t board_mcn_detail[WMI_HOST_BOARD_MCN_STRING_BUF_SIZE];
6998 	uint32_t cal_ok; /* filled with CALIBRATION_STATUS enum value */
6999 } wmi_host_pdev_check_cal_version_event;
7000 
7001 /**
7002  * enum WMI_HOST_CALIBRATION_STATUS - Host defined Enums for cal status
7003  * @WMI_HOST_NO_FEATURE: The board was calibrated with a meta
7004  *                       which did not have this feature
7005  * @WMI_HOST_CALIBRATION_OK: The calibration status is OK
7006  * @WMI_HOST_CALIBRATION_NOT_OK: The calibration status is NOT OK
7007  */
7008 enum WMI_HOST_CALIBRATION_STATUS {
7009 	WMI_HOST_NO_FEATURE = 0,
7010 	WMI_HOST_CALIBRATION_OK,
7011 	WMI_HOST_CALIBRATION_NOT_OK,
7012 };
7013 
7014 /**
7015  * struct wmi_host_pdev_utf_event - Host defined struct to hold utf event data
7016  * @data:        Pointer to data
7017  * @datalen:     Data length
7018  * @pdev_id:     Pdev_id of data
7019  *
7020  */
7021 struct wmi_host_pdev_utf_event {
7022 	uint8_t *data;
7023 	uint16_t datalen;
7024 	uint32_t pdev_id;
7025 };
7026 
7027 /**
7028  * struct wmi_host_utf_seg_header_info - Host defined struct to map seg info in
7029  *                         UTF event
7030  * @len:        segment length
7031  * @msgref:     message reference
7032  * @segment_info: segment info
7033  * @pdev_id:  pdev_id
7034  *
7035  */
7036 struct wmi_host_utf_seg_header_info {
7037 	uint32_t len;
7038 	uint32_t msgref;
7039 	uint32_t segment_info;
7040 	uint32_t pdev_id;
7041 };
7042 
7043 /**
7044  * struct wmi_host_pdev_qvit_event - Host defined struct to hold qvit event data
7045  * @data:        Pointer to data
7046  * @datalen:     Data length
7047  *
7048  */
7049 struct wmi_host_pdev_qvit_event {
7050 	uint8_t *data;
7051 	uint16_t datalen;
7052 	uint32_t pdev_id;
7053 };
7054 
7055 /**
7056  * struct wmi_host_peer_delete_response_event - Peer Delete response event param
7057  * @vdev_id: vdev id
7058  * @mac_address: Peer Mac Address
7059  *
7060  */
7061 struct wmi_host_peer_delete_response_event {
7062 	uint32_t vdev_id;
7063 	struct qdf_mac_addr mac_address;
7064 };
7065 
7066 /**
7067  * @struct wmi_host_dcs_interference_param
7068  * @interference_type: Type of DCS Interference
7069  * @uint32_t pdev_id: pdev id
7070  */
7071 struct wmi_host_dcs_interference_param {
7072 	uint32_t interference_type;
7073 	uint32_t pdev_id;
7074 };
7075 
7076 /**
7077  * struct wmi_host_rf_characterization_event_param - rf characterization table
7078  * @freq: center frequency of primary channel (in MHz)
7079  * @chan_metric: primary channel-specific metric
7080  * @bw: bandwidth of primary channel (in MHz)
7081  */
7082 struct wmi_host_rf_characterization_event_param {
7083 	uint16_t freq;
7084 	uint8_t chan_metric;
7085 	wmi_host_channel_width bw;
7086 };
7087 
7088 /*
7089  * struct wmi_host_fips_event_param: FIPS event param
7090  * @pdev_id: pdev id
7091  * @error_status: Error status: 0 (no err), 1, or OPER_TIMEOUR
7092  * @data_len: FIPS data length
7093  * @data: pointer to data
7094  */
7095 struct wmi_host_fips_event_param {
7096 	uint32_t pdev_id;
7097 	uint32_t error_status;
7098 	uint32_t data_len;
7099 	uint32_t *data;
7100 };
7101 
7102 #ifdef WLAN_FEATURE_DISA_FIPS
7103 /**
7104  * struct disa_encrypt_decrypt_resp_params - disa encrypt response
7105  * @vdev_id: vdev id
7106  * @status: status
7107  * @data_length: data length
7108  * @data: data pointer
7109  */
7110 struct disa_encrypt_decrypt_resp_params {
7111 	uint32_t vdev_id;
7112 	int32_t status;
7113 	uint32_t data_len;
7114 	uint8_t *data;
7115 };
7116 #endif
7117 
7118 /**
7119  * struct wmi_host_proxy_ast_reserve_param
7120  * @pdev_id: pdev id
7121  * @result: result
7122  */
7123 struct wmi_host_proxy_ast_reserve_param {
7124 	uint32_t pdev_id;
7125 	uint32_t result;
7126 };
7127 
7128 /**
7129  * struct wmi_host_pdev_band_to_mac - freq range for mac
7130  * @pdev_id: PDEV ID to identifiy mac
7131  * @start_freq: start frequency value
7132  * @end_freq: end frequency value
7133  */
7134 struct wmi_host_pdev_band_to_mac {
7135 	uint32_t pdev_id;
7136 	uint32_t start_freq;
7137 	uint32_t end_freq;
7138 };
7139 #define WMI_HOST_MAX_PDEV 3
7140 
7141 #ifdef OL_ATH_SMART_LOGGING
7142 
7143 #define WMI_HOST_SMART_LOG_SCENARIO_SET(flag, scenario) ((flag) |= (scenario))
7144 #define WMI_HOST_SMART_LOG_SCENARIO_GET(flag, scenario) ((flag) &  (scenario))
7145 
7146 /**
7147  * enum wmi_host_smart_log_scenario - Smart log scenarios to be enabled/disabled
7148  * @WMI_HOST_SMART_LOG_ALL: All smart logging features.
7149  * @WMI_HOST_SMART_LOG_CE_FULL_DETECT_BY_FW: CE with full detect by FW.
7150  * @WMI_HOST_SMART_LOG_TX_RX_TIMEOUT: Tx/Rx timeout.
7151  * @WMI_HOST_SMART_LOG_STA_KICKOUT: STA Kickout.
7152  * @WMI_HOST_SMART_LOG_BCN_CMD_FAILURE: Beacon command failure.
7153  * @WMI_HOST_SMART_LOG_P1_PING_FAILURE: P1 ping failure. Ping failure detection
7154  * is done by host entities. So, host should be able to control the
7155  * enable/disable of this feature. Yet, this is provided in case the
7156  * corresponding FW specific debugs alone have to be enabled/disabled.
7157  * @WMI_HOST_SMART_LOG_CONNECTION_FAILURE: Connection failure. Connection
7158  * failure detection is done by host entities. So, host should be able to
7159  * control the enable/disable of this feature. Yet, this is provided in case the
7160  * corresponding FW specific debugs alone have to be enabled/disabled.
7161  * @WMI_HOST_SMART_LOG_FW_INITIATED_PKT_LOG: FW Initiated packetlog.
7162  * @WMI_HOST_SMART_LOG_EXTENSION_1: If WMI_HOST_SMART_LOG_EXTENSION_1 is set,
7163  * then the 'log_case_ext_1' field in 'wmi_smart_logging' is used; else
7164  * log_case_ext_1 is ignored.
7165  */
7166 enum wmi_host_smart_log_scenario {
7167 	WMI_HOST_SMART_LOG_ALL                      =        0x0,
7168 	WMI_HOST_SMART_LOG_CE_FULL_DETECT_BY_FW     =        0x1,
7169 	WMI_HOST_SMART_LOG_TX_RX_TIMEOUT            =        0x2,
7170 	WMI_HOST_SMART_LOG_STA_KICKOUT              =        0x4,
7171 	WMI_HOST_SMART_LOG_BCN_CMD_FAILURE          =        0x8,
7172 	WMI_HOST_SMART_LOG_P1_PING_FAILURE          =       0x10,
7173 	WMI_HOST_SMART_LOG_CONNECTION_FAILURE       =       0x20,
7174 	WMI_HOST_SMART_LOG_FW_INITIATED_PKT_LOG     =       0x40,
7175 
7176 	/* New scenarios to be added here */
7177 
7178 	WMI_HOST_SMART_LOG_EXTENSION_1              = 0x80000000,
7179 };
7180 
7181 /**
7182  * struct wmi_fatal_condition_event - Fatal condition event param
7183  * @type: Type of event
7184  * @subtype: Subtype of event
7185  * @type_subtype_specific_data: Data specific to combination of type and
7186  * subtype. This is held in a union with the original "reserved0" for backward
7187  * compatibility with any code that might refer to it. The previously-reserved
7188  * field now holds data under some conditions. The kind of data depends on the
7189  * above "type" and "subtype" fields. The interpretation of the
7190  * type_subtype_specific_data field based on different type + subtype values is
7191  * shown below:
7192  * 1. type == WMI_HOST_FATAL_CONDITION_PACKET_LOG_CONFIG + subtype
7193  * == WMI_HOST_FATAL_SUBTYPE_PACKET_LOG_CONFIG_START ->
7194  * type_subtype_specific_data = WMI_HOST_PKTLOG_EVENT
7195  * For any type+subtype combinations not listed above, the recipient is expected
7196  * to ignore the type_subtype_specific_data field.
7197  */
7198 struct wmi_fatal_condition_event {
7199 	uint32_t type;
7200 	uint32_t subtype;
7201 	union {
7202 		uint32_t reserved0;
7203 		uint32_t type_subtype_specific_data;
7204 	};
7205 };
7206 
7207 /*Currently the Max fatal events is 3 */
7208 #define FATAL_EVENTS_MAX 3
7209 
7210 /**
7211  * struct wmi_debug_fatal_events: Fatal events list
7212  * @num_events:Number of events
7213  * @event[FATAL_EVENTS_MAX]: Each event data
7214  */
7215 struct wmi_debug_fatal_events {
7216 	uint32_t num_events;
7217 	struct wmi_fatal_condition_event event[FATAL_EVENTS_MAX];
7218 };
7219 
7220 /**
7221  * enum wmi_host_fatal_condition_type - Values that 'type' can take in
7222  * wmi_fatal_condition_event
7223  * @WMI_HOST_FATAL_CONDITION_EVENT_COMPLETION: Fatal condition event completion
7224  * @WMI_HOST_FATAL_CONDITION_CE_FAILURE: CE failure
7225  * @WMI_HOST_FATAL_CONDITION_TIMEOUTS: Communication timeouts
7226  * @WMI_HOST_FATAL_CONDITION_CONNECTION_ISSUE: Connection issue
7227  * @WMI_HOST_FATAL_CONDITION_PACKET_LOG_CONFIG: Configuration for FW initiated
7228  * packetlog
7229  */
7230 enum wmi_host_fatal_condition_type {
7231 	WMI_HOST_FATAL_CONDITION_EVENT_COMPLETION,
7232 	WMI_HOST_FATAL_CONDITION_CE_FAILURE,
7233 	WMI_HOST_FATAL_CONDITION_TIMEOUTS,
7234 	WMI_HOST_FATAL_CONDITION_CONNECTION_ISSUE,
7235 	WMI_HOST_FATAL_CONDITION_PACKET_LOG_CONFIG,
7236 };
7237 
7238 /**
7239  * enum wmi_host_fatal_condition_subtype_timeouts - Possible subtypes for
7240  * WMI_HOST_FATAL_CONDITION_TIMEOUTS
7241  * @WMI_HOST_FATAL_SUBTYPE_TX_TIMEOUT: Tx timeout
7242  * @WMI_HOST_FATAL_SUBTYPE_RX_TIMEOUT: Rx timeout
7243  */
7244 enum wmi_host_fatal_condition_subtype_timeouts {
7245 	WMI_HOST_FATAL_SUBTYPE_TX_TIMEOUT,
7246 	WMI_HOST_FATAL_SUBTYPE_RX_TIMEOUT,
7247 };
7248 
7249 /**
7250  * enum wmi_host_fatal_condition_subtype_connection_issue - Possible subtypes
7251  * for WMI_HOST_FATAL_CONDITION_CONNECTION_ISSUE
7252  * @WMI_HOST_FATAL_SUBTYPE_STA_KICKOUT: STA Kickout
7253  * @WMI_HOST_FATAL_SUBTYPE_P1_PING_FAILURE_START_DEBUG: Start debugging for P1
7254  * ping failure
7255  * @WMI_HOST_FATAL_SUBTYPE_P1_PING_FAILURE_STOP_DEBUG: Stop debugging for P1
7256  * ping failure
7257  * @WMI_HOST_FATAL_SUBTYPE_CONNECTION_FAILURE_START_DEBUG: Start debugging for
7258  * connection failure
7259  * @WMI_HOST_FATAL_SUBTYPE_CONNECTION_FAILURE_STOP_DEBUG: Stop debugging for
7260  * connection failure
7261  */
7262 enum wmi_host_fatal_condition_subtype_connection_issue {
7263 	WMI_HOST_FATAL_SUBTYPE_STA_KICKOUT,
7264 	WMI_HOST_FATAL_SUBTYPE_P1_PING_FAILURE_START_DEBUG,
7265 	WMI_HOST_FATAL_SUBTYPE_P1_PING_FAILURE_STOP_DEBUG,
7266 	WMI_HOST_FATAL_SUBTYPE_CONNECTION_FAILURE_START_DEBUG,
7267 	WMI_HOST_FATAL_SUBTYPE_CONNECTION_FAILURE_STOP_DEBUG,
7268 };
7269 
7270 /**
7271  * enum wmi_host_fatal_condition_subtype_packet_log_config - Possible subtypes
7272  * for WMI_HOST_FATAL_CONDITION_PACKET_LOG_CONFIG
7273  * @WMI_HOST_FATAL_SUBTYPE_PACKET_LOG_CONFIG_START: Start FW initiated packetlog
7274  * @WMI_HOST_FATAL_SUBTYPE_PACKET_LOG_CONFIG_STOP: Stop FW initiated packetlog
7275  */
7276 enum wmi_host_fatal_condition_subtype_packet_log_config {
7277 	WMI_HOST_FATAL_SUBTYPE_PACKET_LOG_CONFIG_START,
7278 	WMI_HOST_FATAL_SUBTYPE_PACKET_LOG_CONFIG_STOP,
7279 };
7280 
7281 #endif /* OL_ATH_SMART_LOGGING */
7282 
7283 #define GET_PN_MAX_LEN 16
7284 
7285 /**
7286  * struct wmi_host_get_pn_event - PN event params
7287  * @vdev_id: vdev id
7288  * @peer_macaddr: Peer mac address
7289  * @key_type: key type
7290  * @pn : pn value
7291  */
7292 struct wmi_host_get_pn_event {
7293 	uint32_t vdev_id;
7294 	uint8_t mac_addr[QDF_MAC_ADDR_SIZE];
7295 	uint32_t key_type;
7296 	uint8_t pn[GET_PN_MAX_LEN];
7297 };
7298 
7299 /**
7300  * struct wmi_init_cmd_param - INIT command params
7301  * @target_resource_config: pointer to resource config
7302  * @num_mem_chunks: number of memory chunks
7303  * @struct wmi_host_mem_chunk: pointer to memory chunks
7304  * @hw_mode_index: HW mode index chosen
7305  * @num_band_to_mac: Number of band to mac setting
7306  * @struct wmi_host_pdev_band_to_mac: band to mac setting
7307  */
7308 struct wmi_init_cmd_param {
7309 	target_resource_config *res_cfg;
7310 	uint8_t num_mem_chunks;
7311 	struct wmi_host_mem_chunk *mem_chunks;
7312 	uint32_t hw_mode_id;
7313 	uint32_t num_band_to_mac;
7314 	struct wmi_host_pdev_band_to_mac band_to_mac[WMI_HOST_MAX_PDEV];
7315 };
7316 
7317 /**
7318  * struct pdev_csa_switch_count_status - CSA switch count status event param
7319  * @pdev_id: Physical device identifier
7320  * @current_switch_count: Current CSA switch count
7321  * @num_vdevs: Number of vdevs that need restart
7322  * @vdev_ids: Array containing the vdev ids that need restart
7323  */
7324 struct pdev_csa_switch_count_status {
7325 	uint32_t pdev_id;
7326 	uint32_t current_switch_count;
7327 	uint32_t num_vdevs;
7328 	uint32_t *vdev_ids;
7329 };
7330 
7331 /**
7332  * enum wmi_host_active-apf_mode - FW_ACTIVE_APF_MODE, replicated from FW header
7333  * @WMI_HOST_ACTIVE_APF_DISABLED: APF is disabled for all packets in active mode
7334  * @WMI_HOST_ACTIVE_APF_ENABLED: APF is enabled for all packets in active mode
7335  * @WMI_HOST_ACTIVE_APF_ADAPTIVE: APF is enabled for packets up to some
7336  *	threshold in active mode
7337  */
7338 enum wmi_host_active_apf_mode {
7339 	WMI_HOST_ACTIVE_APF_DISABLED =	(1 << 1),
7340 	WMI_HOST_ACTIVE_APF_ENABLED =	(1 << 2),
7341 	WMI_HOST_ACTIVE_APF_ADAPTIVE =	(1 << 3)
7342 };
7343 
7344 /**
7345  * struct coex_config_params - Coex config command params
7346  * @vdev_id: Virtual AP device identifier
7347  * @config_type: Configuration type - wmi_coex_config_type enum
7348  * @config_arg1: Configuration argument based on config type
7349  * @config_arg2: Configuration argument based on config type
7350  * @config_arg3: Configuration argument based on config type
7351  * @config_arg4: Configuration argument based on config type
7352  * @config_arg5: Configuration argument based on config type
7353  * @config_arg6: Configuration argument based on config type
7354  */
7355 struct coex_config_params {
7356 	uint32_t vdev_id;
7357 	uint32_t config_type;
7358 	uint32_t config_arg1;
7359 	uint32_t config_arg2;
7360 	uint32_t config_arg3;
7361 	uint32_t config_arg4;
7362 	uint32_t config_arg5;
7363 	uint32_t config_arg6;
7364 };
7365 
7366 #define WMI_HOST_PDEV_ID_SOC 0xFF
7367 #define WMI_HOST_PDEV_ID_0   0
7368 #define WMI_HOST_PDEV_ID_1   1
7369 #define WMI_HOST_PDEV_ID_2   2
7370 #define WMI_HOST_PDEV_ID_INVALID 0xFFFFFFFF
7371 
7372 /**
7373  * struct wmi_host_ready_ev_param - Data revieved in ready event
7374  * @status:         FW init status. Success or Failure.
7375  * @num_dscp_table: Number of DSCP table supported in FW
7376  * @num_extra_mac_addr: Extra mac address present in ready event. Used
7377  *                  in DBDC mode to provide multiple mac per pdev.
7378  * @num_total_peer: Total number of peers FW could allocate. Zero means
7379  *                  FW could  allocate num peers requested by host in init.
7380  *                  Otherwise, host need update it max_peer to this value.
7381  * @num_extra_peer: Number of extra peers created and used within FW. Host
7382  *                  should expect peer_id can be num_total_peer + num_extra_peer
7383  *                  but it can create only upto num_total_peer.
7384  * @agile_capability: Boolean specification of whether the target supports
7385  *                  agile DFS, by means of using one 80 MHz radio chain for
7386  *                  radar detection, concurrently with using another radio
7387  *                  chain for non-160 MHz regular operation.
7388  * @max_ast_index: Max number of AST entries that FW could allocate.
7389  * @pktlog_defs_checksum: checksum computed from the definitions of the enums
7390  *                        and structs used within pktlog traces. This is sent
7391  *                        from the FW as part of FW ready event and needs
7392  *                        to be embedded in the pktlog buffer header as version.
7393  */
7394 struct wmi_host_ready_ev_param {
7395 	uint32_t status;
7396 	uint32_t num_dscp_table;
7397 	uint32_t num_extra_mac_addr;
7398 	uint32_t num_total_peer;
7399 	uint32_t num_extra_peer;
7400 	bool agile_capability;
7401 	uint32_t max_ast_index;
7402 	uint32_t pktlog_defs_checksum;
7403 };
7404 
7405 enum bcn_offload_control_param {
7406 	BCN_OFFLD_CTRL_TX_DISABLE = 0,
7407 	BCN_OFFLD_CTRL_TX_ENABLE,
7408 	BCN_OFFLD_CTRL_SWBA_DISABLE,
7409 	BCN_OFFLD_CTRL_SWBA_ENABLE,
7410 };
7411 
7412 /**
7413  * struct bcn_offload_control - Beacon offload control params
7414  * @vdev_id: vdev identifer of VAP to control beacon tx
7415  * @bcn_ctrl_op: values from enum bcn_offload_control_param
7416  */
7417 struct bcn_offload_control {
7418 	uint32_t vdev_id;
7419 	enum bcn_offload_control_param bcn_ctrl_op;
7420 };
7421 
7422 #ifdef OBSS_PD
7423 /**
7424  * struct wmi_host_obss_spatial_reuse_set_param - OBSS_PD_SPATIAL Reuse
7425  *                                                structure
7426  * @enable: Enable/Disable Spatial Reuse
7427  * @obss_min: Minimum OBSS level to use
7428  * @obss_max: Maximum OBSS level to use
7429  * @pdev_id: Pdev id
7430  */
7431 struct wmi_host_obss_spatial_reuse_set_param {
7432 	uint32_t enable;
7433 	int32_t obss_min;
7434 	int32_t obss_max;
7435 	uint32_t vdev_id;
7436 };
7437 
7438 /**
7439  * struct wmi_host_obss_spatial_reuse_set_def_thresh - default obsspd offsets
7440  * @obss_min: Minimum OBSS level to use
7441  * @obss_max: Maximum OBSS level to use
7442  * @vdev_type: vdev_type should be one of WMI_VDEV_TYPE_STA or WMI_VDEV_TYPE_AP
7443  */
7444 struct wmi_host_obss_spatial_reuse_set_def_thresh {
7445 	int32_t obss_min;
7446 	int32_t obss_max;
7447 	uint32_t vdev_type;
7448 };
7449 #endif
7450 
7451 /**
7452  * struct wmi_host_injector_frame_params - Injector frame configuration params
7453  * @vdev_id: vdev identifer of VAP
7454  * @enable: Enable/disable flag for the frame
7455  * @frame_type: Frame type to be enabled
7456  * @frame_inject_period: Periodicity of injector frame transmission
7457  * @dstmac: Destination address to be used for the frame
7458  */
7459 struct wmi_host_injector_frame_params {
7460 	uint32_t vdev_id;
7461 	uint32_t enable;
7462 	uint32_t frame_type;
7463 	uint32_t frame_inject_period;
7464 	uint8_t dstmac[QDF_MAC_ADDR_SIZE];
7465 };
7466 
7467 /**
7468  * struct wds_entry - WDS entry structure
7469  * @peer_mac: peer mac
7470  * @wds_mac: wds mac address
7471  * @flags: flags
7472  */
7473 struct wdsentry {
7474 	u_int8_t peer_mac[QDF_MAC_ADDR_SIZE];
7475 	u_int8_t wds_mac[QDF_MAC_ADDR_SIZE];
7476 	uint32_t flags;
7477 };
7478 
7479 /**
7480  * struct wmi_obss_detection_cfg_param - obss detection cfg
7481  * @vdev_id: vdev id
7482  * @obss_detect_period_ms: detection period in ms
7483  * @obss_11b_ap_detect_mode: detect whether there is 11b ap/ibss
7484  * @obss_11b_sta_detect_mode: detect whether there is 11b sta
7485  *                            connected with other APs
7486  * @obss_11g_ap_detect_mode: detect whether there is 11g AP
7487  * @obss_11a_detect_mode: detect whether there is legacy 11a traffic
7488  * @obss_ht_legacy_detect_mode: detect whether there is ap which is
7489  *                              ht legacy mode
7490  * @obss_ht_mixed_detect_mode: detect whether there is ap which is ht mixed mode
7491  * @obss_ht_20mhz_detect_mode: detect whether there is ap which has 20M only
7492  *                             station
7493  */
7494 struct wmi_obss_detection_cfg_param {
7495 	uint32_t vdev_id;
7496 	uint32_t obss_detect_period_ms;
7497 	uint32_t obss_11b_ap_detect_mode;
7498 	uint32_t obss_11b_sta_detect_mode;
7499 	uint32_t obss_11g_ap_detect_mode;
7500 	uint32_t obss_11a_detect_mode;
7501 	uint32_t obss_ht_legacy_detect_mode;
7502 	uint32_t obss_ht_mixed_detect_mode;
7503 	uint32_t obss_ht_20mhz_detect_mode;
7504 };
7505 
7506 /**
7507  * enum wmi_obss_detection_reason - obss detection event reasons
7508  * @OBSS_OFFLOAD_DETECTION_DISABLED: OBSS detection disabled
7509  * @OBSS_OFFLOAD_DETECTION_PRESENT: OBSS present detection
7510  * @OBSS_OFFLOAD_DETECTION_ABSENT: OBSS absent detection
7511  *
7512  * Defines different types of reasons for obss detection event from firmware.
7513  */
7514 enum wmi_obss_detection_reason {
7515 	OBSS_OFFLOAD_DETECTION_DISABLED = 0,
7516 	OBSS_OFFLOAD_DETECTION_PRESENT  = 1,
7517 	OBSS_OFFLOAD_DETECTION_ABSENT   = 2,
7518 };
7519 
7520 /**
7521  * struct wmi_obss_detect_info - OBSS detection info from firmware
7522  * @vdev_id: ID of the vdev to which this info belongs.
7523  * @reason: Indicate if present or Absent detection,
7524  *          also if not supported offload for this vdev.
7525  * @matched_detection_masks: Detection bit map.
7526  * @matched_bssid_addr: MAC address valid for only if info is present detection.
7527  */
7528 struct wmi_obss_detect_info {
7529 	uint32_t vdev_id;
7530 	enum wmi_obss_detection_reason reason;
7531 	uint32_t matched_detection_masks;
7532 	uint8_t matched_bssid_addr[QDF_MAC_ADDR_SIZE];
7533 };
7534 
7535 #ifdef QCA_SUPPORT_CP_STATS
7536 /**
7537  * struct wmi_host_congestion_stats - host definition of congestion stats
7538  * @vdev_id: ID of the vdev to which this info belongs.
7539  * @congestion: This field holds the congestion percentage =
7540  *                                             (busy_time/total_time)*100
7541  * for the interval from when the vdev was started to the current time
7542  * (or the time at which the vdev was stopped).
7543  */
7544 struct wmi_host_congestion_stats {
7545 	uint32_t vdev_id;
7546 	uint32_t congestion;
7547 };
7548 #endif
7549 
7550 #ifdef FEATURE_WLAN_APF
7551 /**
7552  * struct wmi_apf_write_memory_params - Android Packet Filter write memory
7553  * params
7554  * @vdev_id: VDEV on which APF memory is to be written
7555  * @apf_version: APF version number
7556  * @program_len: Length reserved for program in the APF work memory
7557  * @addr_offset: Relative address in APF work memory to start writing
7558  * @length: Size of the write
7559  * @buf: Pointer to the buffer
7560  */
7561 struct wmi_apf_write_memory_params {
7562 	uint8_t vdev_id;
7563 	uint32_t apf_version;
7564 	uint32_t program_len;
7565 	uint32_t addr_offset;
7566 	uint32_t length;
7567 	uint8_t *buf;
7568 };
7569 
7570 /**
7571  * struct wmi_apf_read_memory_params - Android Packet Filter read memory params
7572  * @vdev_id: vdev id
7573  * @addr_offset: Relative address in APF work memory to read from
7574  * @length: Size of the memory fetch
7575  */
7576 struct wmi_apf_read_memory_params {
7577 	uint8_t vdev_id;
7578 	uint32_t addr_offset;
7579 	uint32_t length;
7580 };
7581 
7582 /**
7583  * struct wmi_apf_read_memory_resp_event_params - Event containing read Android
7584  *	Packet Filter memory response
7585  * @vdev_id: vdev id
7586  * @offset: Read memory offset
7587  * @length: Read memory length
7588  * @more_data: Indicates more data to come
7589  * @data: Pointer to the data
7590  */
7591 struct wmi_apf_read_memory_resp_event_params {
7592 	uint32_t vdev_id;
7593 	uint32_t offset;
7594 	uint32_t length;
7595 	bool more_data;
7596 	uint8_t *data;
7597 };
7598 #endif /* FEATURE_WLAN_APF */
7599 
7600 /* vdev control flags (per bits) */
7601 #define WMI_HOST_VDEV_FLAGS_NON_MBSSID_AP      0x00000001
7602 #define WMI_HOST_VDEV_FLAGS_TRANSMIT_AP        0x00000002
7603 #define WMI_HOST_VDEV_FLAGS_NON_TRANSMIT_AP    0x00000004
7604 
7605 /* Begin of roam scan stats definitions */
7606 
7607 #define WMI_ROAM_SCAN_STATS_MAX             5
7608 #define WMI_ROAM_SCAN_STATS_CANDIDATES_MAX  4
7609 #define WMI_ROAM_SCAN_STATS_CHANNELS_MAX    50
7610 
7611 /**
7612  * struct wmi_roam_scan_stats_req - Structure to hold roam scan stats request
7613  * @vdev_id: interface id
7614  */
7615 struct wmi_roam_scan_stats_req {
7616 	uint32_t vdev_id;
7617 };
7618 
7619 /**
7620  * struct wmi_roam_scan_cand - Roam scan candidates
7621  * @score: score of AP
7622  * @rssi: rssi of the AP
7623  * @freq: center frequency
7624  * @bssid: bssid of AP
7625  */
7626 struct wmi_roam_scan_cand {
7627 	uint32_t score;
7628 	uint32_t rssi;
7629 	uint32_t freq;
7630 	uint8_t  bssid[QDF_MAC_ADDR_SIZE];
7631 };
7632 
7633 /**
7634  * struct wmi_roam_scan_stats_params - Roam scan details
7635  * @time_stamp: time at which this roam scan happened
7636  * @client_id: id of client which triggered this scan
7637  * @num_scan_chans: number of channels that were scanned as part of this scan
7638  * @scan_freqs: frequencies of the channels that were scanned
7639  * @is_roam_successful: whether a successful roaming happened after this scan
7640  * @old_bssid: bssid to which STA is connected just before this scan
7641  * @new_bssid: bssid to which STA is roamed to in case of successful roaming
7642  * @num_roam_candidates: no.of roam candidates that are being reported
7643  * @roam_candidate: roam scan candidate details
7644  * @trigger_id: reason for triggering this roam or roam scan
7645  * @trigger_value: threshold value related to trigger_id
7646  */
7647 struct wmi_roam_scan_stats_params {
7648 	uint64_t time_stamp;
7649 	uint32_t client_id;
7650 	uint32_t num_scan_chans;
7651 	uint32_t scan_freqs[WMI_ROAM_SCAN_STATS_CHANNELS_MAX];
7652 	uint32_t is_roam_successful;
7653 
7654 	/* Bssid to which STA is connected when the roam scan is triggered */
7655 	uint8_t  old_bssid[QDF_MAC_ADDR_SIZE];
7656 
7657 	/*
7658 	 * Bssid to which STA is connected after roaming. Will be valid only
7659 	 * if is_roam_successful is true.
7660 	 */
7661 	uint8_t  new_bssid[QDF_MAC_ADDR_SIZE];
7662 
7663 	/* Number of roam candidates that are being reported in the stats */
7664 	uint32_t num_roam_candidates;
7665 	struct wmi_roam_scan_cand cand[WMI_ROAM_SCAN_STATS_CANDIDATES_MAX];
7666 	uint32_t trigger_id;
7667 	uint32_t trigger_value;
7668 };
7669 
7670 /**
7671  * struct wmi_roam_scan_stats_res - Roam scan stats response from firmware
7672  * @num_roam_scan: number of roam scans triggered
7673  * @roam_scan: place holder to indicate the array of
7674  *             wmi_roam_scan_stats_params followed by this structure
7675  */
7676 struct wmi_roam_scan_stats_res {
7677 	uint32_t num_roam_scans;
7678 	struct wmi_roam_scan_stats_params roam_scan[0];
7679 };
7680 
7681 #define MAX_ROAM_CANDIDATE_AP      9
7682 #define MAX_ROAM_SCAN_CHAN         38
7683 #define MAX_ROAM_SCAN_STATS_TLV    5
7684 
7685 /**
7686  * struct wmi_roam_btm_trigger_data - BTM roam trigger related information
7687  * @btm_request_mode:      BTM request mode - solicited/unsolicited
7688  * @disassoc_timer:        Number of TBTT before AP disassociates the STA in ms
7689  * @validity_interval:     Preferred candidate list validity interval in ms
7690  * @candidate_list_count:  Number of candidates in BTM request.
7691  * @btm_resp_status:       Status code of the BTM response.
7692  * @btm_bss_termination_timeout: BTM BSS termination timeout value
7693  * in milli seconds
7694  * @btm_mbo_assoc_retry_timeout: BTM MBO assoc retry timeout value in
7695  * milli seconds
7696  */
7697 struct wmi_roam_btm_trigger_data {
7698 	uint32_t btm_request_mode;
7699 	uint32_t disassoc_timer;
7700 	uint32_t validity_interval;
7701 	uint32_t candidate_list_count;
7702 	uint32_t btm_resp_status;
7703 	uint32_t btm_bss_termination_timeout;
7704 	uint32_t btm_mbo_assoc_retry_timeout;
7705 };
7706 
7707 /**
7708  * struct wmi_roam_cu_trigger_data - BSS Load roam trigger parameters
7709  * @cu_load: Connected AP CU load percentage
7710  */
7711 struct wmi_roam_cu_trigger_data {
7712 	uint32_t cu_load;
7713 	/* TODO: Add threshold value */
7714 };
7715 
7716 /**
7717  * Struct wmi_roam_rssi_trigger_data - RSSI roam trigger related
7718  * parameters
7719  * @threshold: RSSI threshold value in dBm for LOW rssi roam trigger
7720  */
7721 struct wmi_roam_rssi_trigger_data {
7722 	uint32_t threshold;
7723 };
7724 
7725 /**
7726  * struct wmi_roam_deauth_trigger_data - Deauth roaming trigger related
7727  * parameters
7728  * @type:   1- Deauthentication 2- Disassociation
7729  * @reason: Status code of the Deauth/Disassoc received
7730  */
7731 struct wmi_roam_deauth_trigger_data {
7732 	uint32_t type;
7733 	uint32_t reason;
7734 };
7735 
7736 /**
7737  * struct wmi_roam_wtc_btm_trigger_data - wtc btm roaming trigger related
7738  * parameters
7739  * @roaming_mode: Roaming Mode
7740  * @vsie_trigger_reason: Roam trigger reason present in btm request
7741  * @sub_code: Sub code present in btm request
7742  * @wtc_mode: WTC mode
7743  * @wtc_scan_mode: WTC scan mode
7744  * @wtc_rssi_th: Connected AP threshold
7745  * @wtc_candi_rssi_th: Candidate AP threshold
7746  */
7747 struct wmi_roam_wtc_btm_trigger_data {
7748 	uint32_t roaming_mode;
7749 	uint32_t vsie_trigger_reason;
7750 	uint32_t sub_code;
7751 	uint32_t wtc_mode;
7752 	uint32_t wtc_scan_mode;
7753 	uint32_t wtc_rssi_th;
7754 	uint32_t wtc_candi_rssi_th;
7755 };
7756 
7757 /**
7758  *  struct wmi_roam_candidate_info - Roam scan candidate APs related info
7759  *  @timestamp:   Host timestamp in millisecs
7760  *  @type:        0 - Candidate AP; 1 - Current connected AP.
7761  *  @bssid:       AP bssid.
7762  *  @freq:        Channel frquency
7763  *  @cu_load:     Channel utilization load of the AP.
7764  *  @cu_score:    Channel Utilization score.
7765  *  @rssi:        Candidate AP rssi
7766  *  @rssi_score:  AP RSSI score
7767  *  @total_score: Total score of the candidate AP.
7768  *  @etp:         Estimated throughput value of the AP in Mbps
7769  *  @bl_reason:   Blacklist reason
7770  *  @bl_source:   Source of adding AP to BL
7771  *  @bl_timestamp:This timestamp indicates the time when AP added
7772  *  to blacklist.
7773  *  @bl_original_timeout: Original timeout value in milli seconds
7774  *  when AP added to BL
7775  */
7776 struct wmi_roam_candidate_info {
7777 	uint32_t timestamp;
7778 	uint8_t type;
7779 	struct qdf_mac_addr bssid;
7780 	uint16_t freq;
7781 	uint32_t cu_load;
7782 	uint32_t cu_score;
7783 	uint32_t rssi;
7784 	uint32_t rssi_score;
7785 	uint32_t total_score;
7786 	uint32_t etp;
7787 	uint32_t bl_reason;
7788 	uint32_t bl_source;
7789 	uint32_t bl_timestamp;
7790 	uint32_t bl_original_timeout;
7791 };
7792 
7793 /**
7794  * struct wmi_roam_scan_data - Roam scan event details
7795  * @present:            Flag to check if the roam scan tlv is present
7796  * @type:      0 - Partial roam scan; 1 - Full roam scan
7797  * @num_ap:    Number of candidate APs.
7798  * @num_chan:  Number of channels.
7799  * @next_rssi_threshold: Next roam can trigger rssi threshold
7800  * @chan_freq: List of frequencies scanned as part of roam scan
7801  * @ap: List of candidate AP info
7802  */
7803 struct wmi_roam_scan_data {
7804 	bool present;
7805 	uint16_t type;
7806 	uint16_t num_ap;
7807 	uint16_t num_chan;
7808 	uint32_t next_rssi_threshold;
7809 	uint16_t chan_freq[MAX_ROAM_SCAN_CHAN];
7810 	struct wmi_roam_candidate_info ap[MAX_ROAM_CANDIDATE_AP];
7811 };
7812 
7813 /**
7814  * struct wmi_roam_result - Roam result related info.
7815  * @present:            Flag to check if the roam result tlv is present
7816  * @timestamp:          Host timestamp in millisecs
7817  * @status:             0 - Roaming is success ; 1 - Roaming failed
7818  * @fail_reason:        One of WMI_ROAM_FAIL_REASON_ID
7819  */
7820 struct wmi_roam_result {
7821 	bool present;
7822 	uint32_t timestamp;
7823 	bool status;
7824 	uint32_t fail_reason;
7825 };
7826 
7827 /**
7828  *  struct wmi_neighbor_report_data - Neighbor report/BTM request related
7829  *  data.
7830  *  @present:    Flag to check if the roam 11kv tlv is present
7831  *  @timestamp:  Host timestamp in millisecs
7832  *  @req_type:   1 - BTM query ; 2 - 11K neighbor report request
7833  *  @req_time:   Request timestamp in ms
7834  *  @resp_time:  Response timestamp in ms
7835  *  @freq:       Channel frequency in Mhz
7836  */
7837 struct wmi_neighbor_report_data {
7838 	bool present;
7839 	uint32_t timestamp;
7840 	uint8_t req_type;
7841 	uint32_t req_time;
7842 	uint32_t resp_time;
7843 	uint8_t num_freq;
7844 	uint32_t freq[MAX_ROAM_SCAN_CHAN];
7845 };
7846 
7847 /**
7848  * struct wmi_roam_trigger_info() - Roam trigger related details
7849  * @present:            Flag to check if the roam_trigger_info tlv is present
7850  * @trigger_reason:     Roam trigger reason(enum WMI_ROAM_TRIGGER_REASON_ID)
7851  * @trigger_sub_reason: Sub reason for roam trigger if multiple roam scans
7852  * @current_rssi:       Connected AP RSSI
7853  * @timestamp:          Host timestamp in millisecs when roam scan was triggered
7854  * @btm_trig_data:      BTM roam trigger parameters.
7855  * @cu_trig_data:       BSS Load roam trigger parameters.
7856  * @rssi_trig_data:     RSSI trigger related info.
7857  * @deauth_trig_data:   Deauth roam trigger related info
7858  * @wtc_btm_trig_data:  WTC BTM roam trigger related info
7859  */
7860 struct wmi_roam_trigger_info {
7861 	bool present;
7862 	uint32_t trigger_reason;
7863 	uint32_t trigger_sub_reason;
7864 	uint32_t current_rssi;
7865 	uint32_t timestamp;
7866 	union {
7867 		struct wmi_roam_btm_trigger_data btm_trig_data;
7868 		struct wmi_roam_cu_trigger_data cu_trig_data;
7869 		struct wmi_roam_rssi_trigger_data rssi_trig_data;
7870 		struct wmi_roam_deauth_trigger_data deauth_trig_data;
7871 		struct wmi_roam_wtc_btm_trigger_data wtc_btm_trig_data;
7872 	};
7873 };
7874 
7875 /* End of roam scan stats definitions */
7876 
7877 /**
7878  * enum wmi_obss_color_collision_evt_type - bss color collision event type
7879  * @OBSS_COLOR_COLLISION_DETECTION_DISABLE: OBSS color detection disabled
7880  * @OBSS_COLOR_COLLISION_DETECTION: OBSS color collision detection
7881  * @OBSS_COLOR_FREE_SLOT_TIMER_EXPIRY: OBSS free slot detection with
7882  *                                     within expiry period
7883  * @OBSS_COLOR_FREE_SLOT_AVAILABLE: OBSS free slot detection
7884  *
7885  * Defines different types of type for obss color collision event type.
7886  */
7887 enum wmi_obss_color_collision_evt_type {
7888 	OBSS_COLOR_COLLISION_DETECTION_DISABLE = 0,
7889 	OBSS_COLOR_COLLISION_DETECTION = 1,
7890 	OBSS_COLOR_FREE_SLOT_TIMER_EXPIRY = 2,
7891 	OBSS_COLOR_FREE_SLOT_AVAILABLE = 3,
7892 };
7893 
7894 /**
7895  * struct wmi_obss_color_collision_cfg_param - obss color collision cfg
7896  * @vdev_id: vdev id
7897  * @flags: proposed for future use cases, currently not used.
7898  * @evt_type: bss color collision event.
7899  * @current_bss_color: current bss color.
7900  * @detection_period_ms: scan interval for both AP and STA mode.
7901  * @scan_period_ms: scan period for passive scan to detect collision.
7902  * @free_slot_expiry_time_ms: FW to notify host at timer expiry after
7903  *                            which Host will disable the bss color.
7904  */
7905 struct wmi_obss_color_collision_cfg_param {
7906 	uint32_t vdev_id;
7907 	uint32_t flags;
7908 	enum wmi_obss_color_collision_evt_type evt_type;
7909 	uint32_t current_bss_color;
7910 	uint32_t detection_period_ms;
7911 	uint32_t scan_period_ms;
7912 	uint32_t free_slot_expiry_time_ms;
7913 };
7914 
7915 /**
7916  * struct wmi_obss_color_collision_info - bss color detection info from firmware
7917  * @vdev_id: ID of the vdev to which this info belongs.
7918  * @evt_type: bss color collision event.
7919  * @obss_color_bitmap_bit0to31: Bit set indicating BSS color present.
7920  * @obss_color_bitmap_bit32to63: Bit set indicating BSS color present.
7921  */
7922 struct wmi_obss_color_collision_info {
7923 	uint32_t vdev_id;
7924 	enum wmi_obss_color_collision_evt_type evt_type;
7925 	uint32_t obss_color_bitmap_bit0to31;
7926 	uint32_t obss_color_bitmap_bit32to63;
7927 };
7928 
7929 #ifdef WMI_AP_SUPPORT
7930 /**
7931  * struct vap_pcp_tid_map_params - PCP tid map params
7932  * @vdev_id: vdev id
7933  * @pcp_to_tid_map: pointer to arry of pcp to tid map table
7934  */
7935 struct vap_pcp_tid_map_params {
7936 	uint32_t vdev_id;
7937 	uint32_t *pcp_to_tid_map;
7938 };
7939 
7940 /**
7941  * struct vap_tidmap_prec_params - tidmap precedence params
7942  * @vdev_id: vdev id
7943  * @map_precedence: precedence of tid mapping
7944  */
7945 struct vap_tidmap_prec_params {
7946 	uint32_t vdev_id;
7947 	uint32_t map_precedence;
7948 };
7949 
7950 /**
7951  * struct peer_vlan_config_param - peer vlan config command
7952  * @tx_cmd: Tx command
7953  * @rx_cmd: Rx command
7954  * @tx_strip_insert: Strip or Insert vlan in Tx[0:Strip, 1: Insert]
7955  * @tx_strip_insert_inner: Enable tx_strip_insert operation for inner vlan tag.
7956  * @tx_strip_insert_outer: Enable tx_strip_insert operation for outer vlan tag.
7957  * @rx_strip_c_tag: Strip c_tag
7958  * @rx_strip_s_tag: Strip s_tag
7959  * @rx_insert_c_tag: Insert c_tag
7960  * @rx_insert_s_tag: Insert s_tag
7961  *
7962  * @insert_vlan_inner_tci: Vlan inner tci
7963  * @insert_vlan_inner_tci: Vlan outer tci
7964  *
7965  * @vdev_id: vdev id corresponding to peer.
7966  */
7967 struct peer_vlan_config_param {
7968 	uint16_t tx_cmd:1,
7969 		rx_cmd:1,
7970 		tx_strip_insert:1,
7971 		tx_strip_insert_inner:1,
7972 		tx_strip_insert_outer:1,
7973 		rx_strip_c_tag:1,
7974 		rx_strip_s_tag:1,
7975 		rx_insert_c_tag:1,
7976 		rx_insert_s_tag:1;
7977 	uint16_t insert_vlan_inner_tci;
7978 	uint16_t insert_vlan_outer_tci;
7979 	uint8_t vdev_id;
7980 };
7981 #endif
7982 
7983 /**
7984  * struct wmi_cfr_peer_tx_event_param - CFR peer tx_event params
7985  * @capture_method: CFR data capture method
7986  * @vdev_id: ID of vdev to which this info belongs
7987  * @mac_addr: Peer MAC address. In AP mode, it is the address of connected
7988  *            peer for which CFR capture is needed. In STA mode, this is the
7989  *            address of AP it is connected to.
7990  * @primary_20mhz_chan: Primary 20 MHz channel frequency in MHz
7991  * @bandwidth: BW of measurement
7992  *             0 - 20MHz, 1 - 40MHz, 2 - 80MHz, 3 - 160MHz, 4 - 80+80MHz
7993  * @phy_mode: Phy mode of channel, type - WMI_HOST_WLAN_PHY_MODE
7994  * @band_center_freq1: Center frequency 1 in MHz
7995  * @band_center_freq2: Center frequency 2 in MHz
7996  * @spatial_streams: Number of spatial streams
7997  * @correlation_info_1: Address of data from wmi_dma_buf_release_entry [31:0]
7998  * @correlation_info_2:
7999  *     Bits [3:0]   - Address of data from wmi_dma_buf_release_entry [35:32]
8000  *     Bits [15:4]  - Reserved
8001  *     Bits [31:16] - Hardware PPDU ID [15:0]
8002  * @status:
8003  *     Bits [1:0]   - TX status, if any. 0-OK, 1-XRETRY, 2-DROP, 3-FILTERED.
8004  *     Bits [30:2]  - Reserved
8005  *     Bit  [31]    - Status of the CFR capture of the peer
8006  *                    1 - Successful, 0 - Unsuccessful.
8007  * @timestamp_us: Timestamp in microseconds at which the CFR was captured
8008  *                in the hardware. The clock used for this timestamp is private
8009  *                to the target and not visible to the host. So, Host can
8010  *                interpret only the relative timestamp deltas from one message
8011  *                to the next, but can't interpret the absolute timestamp
8012  *                from a single message
8013  * @counter: Count of the current CFR capture from FW.
8014  *           This is helpful to identify any drops in FW
8015  * @chain_rssi: Per chain RSSI of the peer, for upto WMI_HOST_MAX_CHAINS.
8016  *              Each chain's entry reports the RSSI for different bandwidths.
8017  *     Bits [7:0]   - Primary 20 MHz
8018  *     Bits [15:8]  - Secondary 20 MHz of 40 MHz channel (if applicable)
8019  *     Bits [23:16] - Secondary 40 MHz of 80 MHz channel (if applicable)
8020  *     Bits [31:24] - Secondary 80 MHz of 160 MHz channel (if applicable)
8021  *     Each of these 8-bit RSSI reports is in dBm units. 0x80 means invalid.
8022  *     Unused bytes within used chain_rssi indices will be 0x80.
8023  *     Unused rssi_chain indices will be set to 0x80808080.
8024  * @chain_phase: Per chain phase of peer for upto WMI_HOST_MAX_CHAINS.
8025  */
8026 typedef struct {
8027 	uint32_t capture_method;
8028 	uint32_t vdev_id;
8029 	struct qdf_mac_addr peer_mac_addr;
8030 	uint32_t primary_20mhz_chan;
8031 	uint32_t bandwidth;
8032 	uint32_t phy_mode;
8033 	uint32_t band_center_freq1;
8034 	uint32_t band_center_freq2;
8035 	uint32_t spatial_streams;
8036 	uint32_t correlation_info_1;
8037 	uint32_t correlation_info_2;
8038 	uint32_t status;
8039 	uint32_t timestamp_us;
8040 	uint32_t counter;
8041 	uint32_t chain_rssi[WMI_HOST_MAX_CHAINS];
8042 	uint16_t chain_phase[WMI_HOST_MAX_CHAINS];
8043 } wmi_cfr_peer_tx_event_param;
8044 
8045 /**
8046  * struct wmi_host_oem_indirect_data - Indirect OEM data
8047  * @pdev_id: pdev id
8048  * @len: length of data in bytes
8049  * @addr: 36 bit address
8050  */
8051 struct wmi_host_oem_indirect_data {
8052 	uint32_t pdev_id;
8053 	uint32_t len;
8054 	uint64_t addr;
8055 };
8056 
8057 /**
8058  * struct wmi_oem_response_param - OEM response info
8059  * @num_data1: First data response length
8060  * @num_data2: Second data response length
8061  * @data_1: First data
8062  * @data_2: Second data
8063  * @indirect_data: Indirect data
8064  */
8065 struct wmi_oem_response_param {
8066 	uint32_t num_data1;
8067 	uint32_t num_data2;
8068 	uint8_t  *data_1;
8069 	uint8_t  *data_2;
8070 	struct wmi_host_oem_indirect_data indirect_data;
8071 };
8072 
8073 /**
8074  * struct mws_coex_state - Modem Wireless Subsystem(MWS) coex info
8075  * @vdev_id : vdev id
8076  * @coex_scheme_bitmap: LTE-WLAN coexistence scheme bitmap
8077  * Indicates the final schemes applied for the currrent Coex scenario.
8078  * Bit 0 - TDM policy
8079  * Bit 1 - Forced TDM policy
8080  * Bit 2 - Dynamic Power Back-off policy
8081  * Bit 3 - Channel Avoidance policy
8082  * Bit 4 - Static Power Back-off policy.
8083  * @active_conflict_count : active conflict count
8084  * @potential_conflict_count: Potential conflict count
8085  * @chavd_group0_bitmap : Indicates the WLAN channels to be avoided in
8086  * b/w WLAN CH-1 and WLAN CH-14
8087  * @chavd_group1_bitmap : Indicates the WLAN channels to be avoided in
8088  * WLAN CH-36 and WLAN CH-64
8089  * @chavd_group2_bitmap : Indicates the WLAN channels to be avoided in
8090  * b/w WLAN CH-100 and WLAN CH-140
8091  * @chavd_group2_bitmap : Indicates the WLAN channels to be avoided in
8092  * b/w WLAN CH-149 and WLAN CH-165
8093  */
8094 struct mws_coex_state {
8095 	uint32_t vdev_id;
8096 	uint32_t coex_scheme_bitmap;
8097 	uint32_t active_conflict_count;
8098 	uint32_t potential_conflict_count;
8099 	uint32_t chavd_group0_bitmap;
8100 	uint32_t chavd_group1_bitmap;
8101 	uint32_t chavd_group2_bitmap;
8102 	uint32_t chavd_group3_bitmap;
8103 };
8104 
8105 /**
8106  * struct hdd_mws_coex_dpwb_state - Modem Wireless Subsystem(MWS) coex DPWB info
8107  * @vdev_id : vdev id
8108  * @current_dpwb_state: Current state of the Dynamic Power Back-off SM
8109  * @pnp1_value: Tx power to be applied in next Dynamic Power Back-off cycle
8110  * @lte_dutycycle: Indicates the duty cycle of current LTE frame
8111  * @sinr_wlan_on: LTE SINR value in dB, when WLAN is ON
8112  * @sinr_wlan_off: LTE SINR value in dB, when WLAN is OFF
8113  * @bler_count: LTE blocks with error for the current block err report.
8114  * @block_count: Number of LTE blocks considered for bler count report.
8115  * @wlan_rssi_level: WLAN RSSI level
8116  * @wlan_rssi: WLAN RSSI value in dBm considered in DP backoff algo
8117  * @is_tdm_running: Indicates whether any TDM policy triggered
8118  */
8119 struct mws_coex_dpwb_state {
8120 	uint32_t vdev_id;
8121 	int32_t  current_dpwb_state;
8122 	int32_t  pnp1_value;
8123 	uint32_t lte_dutycycle;
8124 	int32_t  sinr_wlan_on;
8125 	int32_t  sinr_wlan_off;
8126 	uint32_t bler_count;
8127 	uint32_t block_count;
8128 	uint32_t wlan_rssi_level;
8129 	int32_t  wlan_rssi;
8130 	uint32_t is_tdm_running;
8131 };
8132 
8133 /**
8134  * struct mws_coex_tdm_state - Modem Wireless Subsystem(MWS) coex TDM state info
8135  * @vdev_id: vdev id
8136  * @tdm_policy_bitmap: Time Division Multiplexing (TDM) LTE-Coex Policy type.
8137  * @tdm_sf_bitmap: TDM LTE/WLAN sub-frame bitmap.
8138  */
8139 struct mws_coex_tdm_state {
8140 	uint32_t vdev_id;
8141 	uint32_t tdm_policy_bitmap;
8142 	uint32_t tdm_sf_bitmap;
8143 };
8144 
8145 /**
8146  * struct mws_coex_idrx_state - Modem Wireless Subsystem(MWS) coex IDRX state
8147  * @vdev_id: vdev id
8148  * @sub0_techid: SUB0 LTE-coex tech.
8149  * @sub0_policy: SUB0 mitigation policy.
8150  * @sub0_is_link_critical: Set if SUB0 is in link critical state.
8151  * @sub0_static_power: LTE SUB0 imposed static power applied
8152  * to WLAN due to LTE-WLAN coex.
8153  * @sub0_rssi: LTE SUB0 RSSI value in dBm.
8154  * @sub1_techid: SUB1 LTE-coex tech.
8155  * @sub1_policy: SUB1 mitigation policy.
8156  * @sub1_is_link_critical: Set if SUB1 is in link critical state.
8157  * @sub1_static_power: LTE SUB1 imposed static power applied
8158  * to WLAN due to LTE-WLAN coex.
8159  * @sub1_rssi: LTE SUB1 RSSI value in dBm.
8160  */
8161 struct mws_coex_idrx_state {
8162 	uint32_t vdev_id;
8163 	uint32_t sub0_techid;
8164 	uint32_t sub0_policy;
8165 	uint32_t sub0_is_link_critical;
8166 	int32_t  sub0_static_power;
8167 	int32_t  sub0_rssi;
8168 	uint32_t sub1_techid;
8169 	uint32_t sub1_policy;
8170 	uint32_t sub1_is_link_critical;
8171 	int32_t  sub1_static_power;
8172 	int32_t  sub1_rssi;
8173 };
8174 
8175 /**
8176  * struct mws_antenna_sharing_info - MWS Antenna sharing Info
8177  * @vdev_id: vdev id
8178  * @coex_flags: BDF values of Coex flags
8179  * @coex_config: BDF values of Coex Antenna sharing config
8180  * @tx_chain_mask: Tx Chain mask value
8181  * @rx_chain_mask: Rx Chain mask value
8182  * @rx_nss: Currently active Rx Spatial streams
8183  * @force_mrc: Forced MRC policy type
8184  * @rssi_type: RSSI value considered for MRC
8185  * @chain0_rssi: RSSI value measured at Chain-0 in dBm
8186  * @chain1_rssi: RSSI value measured at Chain-1 in dBm
8187  * @combined_rssi: RSSI value of two chains combined in dBm
8188  * @imbalance: Absolute imbalance between two Rx chains in dB
8189  * @mrc_threshold: RSSI threshold defined for the above imbalance value in dBm
8190  * @grant_duration: Antenna grant duration to WLAN, in milliseconds
8191  */
8192 struct mws_antenna_sharing_info {
8193 	uint32_t vdev_id;
8194 	uint32_t coex_flags;
8195 	uint32_t coex_config;
8196 	uint32_t tx_chain_mask;
8197 	uint32_t rx_chain_mask;
8198 	uint32_t rx_nss;
8199 	uint32_t force_mrc;
8200 	uint32_t rssi_type;
8201 	int32_t  chain0_rssi;
8202 	int32_t  chain1_rssi;
8203 	int32_t  combined_rssi;
8204 	uint32_t imbalance;
8205 	int32_t  mrc_threshold;
8206 	uint32_t grant_duration;
8207 };
8208 
8209 #ifdef WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG
8210 /**
8211  * enum wmi_pdev_pkt_routing_op_code_type - packet routing supported opcodes
8212  * @ADD_PKT_ROUTING: Add packet routing command
8213  * @DEL_PKT_ROUTING: Delete packet routing command
8214  *
8215  * Defines supported opcodes for packet routing/tagging
8216  */
8217 enum wmi_pdev_pkt_routing_op_code_type {
8218 	ADD_PKT_ROUTING,
8219 	DEL_PKT_ROUTING,
8220 };
8221 
8222 /**
8223  * enum wmi_pdev_pkt_routing_pkt_type - supported packet types for
8224  * routing & tagging
8225  * @PDEV_PKT_TYPE_ARP_IPV4: Route/Tag for packet type ARP IPv4 (L3)
8226  * @PDEV_PKT_TYPE_NS_IPV6: Route/Tag for packet type NS IPv6 (L3)
8227  * @PDEV_PKT_TYPE_IGMP_IPV4: Route/Tag for packet type IGMP IPv4 (L3)
8228  * @PDEV_PKT_TYPE_MLD_IPV6: Route/Tag for packet type MLD IPv6 (L3)
8229  * @PDEV_PKT_TYPE_DHCP_IPV4: Route/Tag for packet type DHCP IPv4 (APP)
8230  * @PDEV_PKT_TYPE_DHCP_IPV6: Route/Tag for packet type DHCP IPv6 (APP)
8231  * @PDEV_PKT_TYPE_DNS_TCP_IPV4: Route/Tag for packet type TCP DNS IPv4 (APP)
8232  * @PDEV_PKT_TYPE_DNS_TCP_IPV6: Route/Tag for packet type TCP DNS IPv6 (APP)
8233  * @PDEV_PKT_TYPE_DNS_UDP_IPV4: Route/Tag for packet type UDP DNS IPv4 (APP)
8234  * @PDEV_PKT_TYPE_DNS_UDP_IPV6: Route/Tag for packet type UDP DNS IPv6 (APP)
8235  * @PDEV_PKT_TYPE_ICMP_IPV4: Route/Tag for packet type ICMP IPv4 (L3)
8236  * @PDEV_PKT_TYPE_ICMP_IPV6: Route/Tag for packet type ICMP IPv6 (L3)
8237  * @PDEV_PKT_TYPE_TCP_IPV4: Route/Tag for packet type TCP IPv4 (L4)
8238  * @PDEV_PKT_TYPE_TCP_IPV6: Route/Tag for packet type TCP IPv6 (L4)
8239  * @PDEV_PKT_TYPE_UDP_IPV4: Route/Tag for packet type UDP IPv4 (L4)
8240  * @PDEV_PKT_TYPE_UDP_IPV6: Route/Tag for packet type UDP IPv6 (L4)
8241  * @PDEV_PKT_TYPE_IPV4: Route/Tag for packet type IPv4 (L3)
8242  * @PDEV_PKT_TYPE_IPV6: Route/Tag for packet type IPv6 (L3)
8243  * @PDEV_PKT_TYPE_EAP: Route/Tag for packet type EAP (L2)
8244  *
8245  * Defines supported protocol types for routing/tagging
8246  */
8247 enum wmi_pdev_pkt_routing_pkt_type {
8248 	PDEV_PKT_TYPE_ARP_IPV4,
8249 	PDEV_PKT_TYPE_NS_IPV6,
8250 	PDEV_PKT_TYPE_IGMP_IPV4,
8251 	PDEV_PKT_TYPE_MLD_IPV6,
8252 	PDEV_PKT_TYPE_DHCP_IPV4,
8253 	PDEV_PKT_TYPE_DHCP_IPV6,
8254 	PDEV_PKT_TYPE_DNS_TCP_IPV4,
8255 	PDEV_PKT_TYPE_DNS_TCP_IPV6,
8256 	PDEV_PKT_TYPE_DNS_UDP_IPV4,
8257 	PDEV_PKT_TYPE_DNS_UDP_IPV6,
8258 	PDEV_PKT_TYPE_ICMP_IPV4,
8259 	PDEV_PKT_TYPE_ICMP_IPV6,
8260 	PDEV_PKT_TYPE_TCP_IPV4,
8261 	PDEV_PKT_TYPE_TCP_IPV6,
8262 	PDEV_PKT_TYPE_UDP_IPV4,
8263 	PDEV_PKT_TYPE_UDP_IPV6,
8264 	PDEV_PKT_TYPE_IPV4,
8265 	PDEV_PKT_TYPE_IPV6,
8266 	PDEV_PKT_TYPE_EAP,
8267 	PDEV_PKT_TYPE_MAX
8268 };
8269 
8270 /**
8271  * enum wmi_pdev_dest_ring_handler_type - packet routing options post CCE
8272  * tagging
8273  * @PDEV_WIFIRXCCE_USE_CCE_E: Use REO destination ring from CCE
8274  * @PDEV_WIFIRXCCE_USE_ASPT_E: Use REO destination ring from ASPT
8275  * @PDEV_WIFIRXCCE_USE_FT_E: Use REO destination ring from FSE
8276  * @PDEV_WIFIRXCCE_USE_CCE2_E: Use REO destination ring from CCE2
8277  *
8278  * Defines various options for routing policy
8279  */
8280 enum wmi_pdev_dest_ring_handler_type {
8281 	PDEV_WIFIRXCCE_USE_CCE_E  = 0,
8282 	PDEV_WIFIRXCCE_USE_ASPT_E = 1,
8283 	PDEV_WIFIRXCCE_USE_FT_E   = 2,
8284 	PDEV_WIFIRXCCE_USE_CCE2_E = 3,
8285 };
8286 
8287 /**
8288  * struct wmi_rx_pkt_protocol_routing_info - RX packet routing/tagging params
8289  * @pdev_id: pdev id
8290  * @op_code: Opcode option from wmi_pdev_pkt_routing_op_code_type enum
8291  * @routing_type_bitmap: Bitmap of protocol that is being configured. Only
8292  * one protocol can be configured in one command. Supported protocol list
8293  * from enum wmi_pdev_pkt_routing_pkt_type
8294  * @dest_ring_handler: Destination ring selection from enum
8295  * wmi_pdev_dest_ring_handler_type
8296  * @dest_ring: Destination ring number to use if dest ring handler is CCE
8297  * @meta_data: Metadata to tag with for given protocol
8298  */
8299 struct wmi_rx_pkt_protocol_routing_info {
8300 	uint32_t      pdev_id;
8301 	enum wmi_pdev_pkt_routing_op_code_type op_code;
8302 	uint32_t      routing_type_bitmap;
8303 	uint32_t      dest_ring_handler;
8304 	uint32_t      dest_ring;
8305 	uint32_t      meta_data;
8306 };
8307 #endif /* WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG */
8308 
8309 #ifdef FEATURE_ANI_LEVEL_REQUEST
8310 /* Maximum number of freqs for which ANI level can be requested */
8311 #define MAX_NUM_FREQS_FOR_ANI_LEVEL 20
8312 
8313 /* A valid ANI level lies between 0 to 9 */
8314 #define MAX_ANI_LEVEL 9
8315 
8316 struct wmi_host_ani_level_event {
8317 	uint32_t chan_freq;
8318 	uint32_t ani_level;
8319 };
8320 #endif /* FEATURE_ANI_LEVEL_REQUEST */
8321 
8322 #define WMI_HOST_TBTT_OFFSET_INVALID 0xffffffff
8323 #define MAX_SUPPORTED_NEIGHBORS 16
8324 
8325 /* command type for WMI_PDEV_TBTT_OFFSET_SYNC_CMDID */
8326 enum wmi_host_tbtt_offset_cmd_type {
8327 	WMI_HOST_PDEV_GET_TBTT_OFFSET,
8328 	WMI_HOST_PDEV_SET_TBTT_OFFSET,
8329 };
8330 #endif /* _WMI_UNIFIED_PARAM_H_ */
8331