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