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