1 /*
2  * Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2021-2024 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 sir_api.h contains definitions exported by
22  * Sirius software.
23  * Author:        Chandra Modumudi
24  * Date:          04/16/2002
25  * History:-
26  * Date           Modified by    Modification Information
27  * --------------------------------------------------------------------
28  */
29 
30 #ifndef __SIR_API_H
31 #define __SIR_API_H
32 
33 /* legacy definition */
34 typedef void *tpAniSirGlobal;
35 
36 struct mac_context;
37 #include "qdf_types.h"
38 #include "cds_regdomain.h"
39 #include "sir_types.h"
40 #include "sir_mac_prot_def.h"
41 #include "ani_system_defs.h"
42 #include "sir_params.h"
43 #include "cds_regdomain.h"
44 #include "wmi_unified.h"
45 #include "wmi_unified_param.h"
46 #include "ol_txrx_htt_api.h"
47 #include "wlan_reg_services_api.h"
48 #include <dot11f.h>
49 #include "wlan_policy_mgr_api.h"
50 #include "wlan_tdls_public_structs.h"
51 #include "qca_vendor.h"
52 #include "wlan_cp_stats_mc_defs.h"
53 #ifdef WLAN_FEATURE_11BE_MLO
54 #include "wlan_mlo_mgr_public_structs.h"
55 #endif
56 
57 #define OFFSET_OF(structType, fldName)   (&((structType *)0)->fldName)
58 #define WLAN_DOT11_BASIC_RATE_MASK (0x80)
59 #define BITS_ON(_Field, _Bitmask)  ((_Field) |=  (_Bitmask))
60 #define BITS_OFF(_Field, _Bitmask) ((_Field) &= ~(_Bitmask))
61 
62 /* / Max supported channel list */
63 #define SIR_MAX_SUPPORTED_CHANNEL_LIST      96
64 
65 #define SIR_MDIE_SIZE               3   /* MD ID(2 bytes), Capability(1 byte) */
66 
67 #define SIR_MAX_ELEMENT_ID         255
68 
69 #define SIR_BCN_REPORT_MAX_BSS_DESC       8
70 
71 #define SIR_NUM_11B_RATES 4     /* 1,2,5.5,11 */
72 #define SIR_NUM_11A_RATES 8     /* 6,9,12,18,24,36,48,54 */
73 
74 typedef uint8_t tSirIpv4Addr[QDF_IPV4_ADDR_SIZE];
75 
76 #define SIR_VERSION_STRING_LEN 1024
77 typedef uint8_t tSirVersionString[SIR_VERSION_STRING_LEN];
78 
79 /* Periodic Tx pattern offload feature */
80 #define PERIODIC_TX_PTRN_MAX_SIZE 1536
81 #ifndef MAXNUM_PERIODIC_TX_PTRNS
82 #define MAXNUM_PERIODIC_TX_PTRNS 6
83 #endif
84 
85 /* FW response timeout values in milli seconds */
86 #define SIR_PEER_ASSOC_TIMEOUT           (4000) /* 4 seconds */
87 
88 #ifdef FEATURE_RUNTIME_PM
89 /* Add extra PMO_RESUME_TIMEOUT for runtime PM resume timeout */
90 #define SIR_PEER_CREATE_RESPONSE_TIMEOUT (4000 + PMO_RESUME_TIMEOUT)
91 #define SIR_DELETE_STA_TIMEOUT           (4000 + PMO_RESUME_TIMEOUT)
92 #define SIR_VDEV_PLCY_MGR_TIMEOUT        (4000 + PMO_RESUME_TIMEOUT)
93 #else
94 #define SIR_PEER_CREATE_RESPONSE_TIMEOUT (4000)
95 #define SIR_DELETE_STA_TIMEOUT           (4000) /* 4 seconds */
96 #define SIR_VDEV_PLCY_MGR_TIMEOUT        (4000)
97 #endif
98 
99 #define MAX_POWER_DBG_ARGS_SUPPORTED 8
100 #define QOS_MAP_MAX_EX  21
101 #define QOS_MAP_RANGE_NUM 8
102 #define QOS_MAP_LEN_MIN (QOS_MAP_RANGE_NUM * 2)
103 #define QOS_MAP_LEN_MAX \
104 	(QOS_MAP_LEN_MIN + 2 * QOS_MAP_MAX_EX)
105 #define NUM_CHAINS_MAX  2
106 
107 /* Maximum number of realms present in fils indication element */
108 #define SIR_MAX_REALM_COUNT 7
109 /* Realm length */
110 #define SIR_REALM_LEN 2
111 /* Cache ID length */
112 #define CACHE_ID_LEN 2
113 
114 /* Maximum peer station number query one time */
115 #define MAX_PEER_STA 12
116 
117 /* Maximum number of peers for SAP */
118 #ifndef SIR_SAP_MAX_NUM_PEERS
119 #define SIR_SAP_MAX_NUM_PEERS 32
120 #endif
121 
122 #define SIR_KEK_KEY_LEN 16
123 #define SIR_KEK_KEY_LEN_FILS 64
124 
125 #define SIR_FILS_HLP_OUI_TYPE  "\x5"
126 #define SIR_FILS_HLP_OUI_LEN   1
127 #define SIR_FILS_HLP_IE_LEN    2048
128 
129 #define SIR_REPLAY_CTR_LEN 8
130 #ifdef WLAN_FEATURE_ROAM_OFFLOAD
131 #define SIR_UAPSD_BITOFFSET_ACVO     0
132 #define SIR_UAPSD_BITOFFSET_ACVI     1
133 #define SIR_UAPSD_BITOFFSET_ACBK     2
134 #define SIR_UAPSD_BITOFFSET_ACBE     3
135 
136 #define SIR_UAPSD_FLAG_ACVO     (1 << SIR_UAPSD_BITOFFSET_ACVO)
137 #define SIR_UAPSD_FLAG_ACVI     (1 << SIR_UAPSD_BITOFFSET_ACVI)
138 #define SIR_UAPSD_FLAG_ACBK     (1 << SIR_UAPSD_BITOFFSET_ACBK)
139 #define SIR_UAPSD_FLAG_ACBE     (1 << SIR_UAPSD_BITOFFSET_ACBE)
140 #define SIR_UAPSD_GET(ac, mask)      (((mask) & (SIR_UAPSD_FLAG_ ## ac)) >> SIR_UAPSD_BITOFFSET_ ## ac)
141 
142 #endif
143 
144 /* Maximum management packet data unit length */
145 #define MAX_MGMT_MPDU_LEN 2304
146 
147 struct scheduler_msg;
148 
149 /**
150  * enum sir_roam_op_code - Operation to be done by the callback.
151  * @SIR_ROAM_SYNCH_PROPAGATION: Propagate the new BSS info after roaming.
152  * @SIR_ROAMING_DEREGISTER_STA: Deregister the old STA after roaming.
153  * @SIR_ROAMING_START: Firmware started roaming operation
154  * @SIR_ROAMING_ABORT: Firmware aborted roaming operation, still connected.
155  * @SIR_ROAM_SYNCH_COMPLETE: Roam sync propagation is complete.
156  * @SIR_ROAMING_INVOKE_FAIL: Firmware roaming failed.
157  * @SIR_ROAMING_DEAUTH: Firmware indicates deauth.
158  */
159 enum sir_roam_op_code {
160 	SIR_ROAM_SYNCH_PROPAGATION = 1,
161 	SIR_ROAMING_DEREGISTER_STA,
162 	SIR_ROAMING_START,
163 	SIR_ROAMING_ABORT,
164 	SIR_ROAM_SYNCH_COMPLETE,
165 	SIR_ROAM_SYNCH_NAPI_OFF,
166 	SIR_ROAMING_INVOKE_FAIL,
167 	SIR_ROAMING_DEAUTH,
168 };
169 
170 /**
171  * enum ps_state - State of the power save
172  * @FULL_POWER_MODE: for Full power mode
173  * @LEGACY_POWER_SAVE_MODE: For Legacy Power Save mode
174  * @UAPSD_MODE: for UAPSD power save
175  */
176 enum ps_state {
177 	FULL_POWER_MODE,
178 	LEGACY_POWER_SAVE_MODE,
179 	UAPSD_MODE
180 };
181 
182 /**
183  * \var g_phy_rates_suppt
184  *
185  * \brief Rate support lookup table
186  *
187  *
188  * This is a  lookup table indexing rates &  configuration parameters to
189  * support.  Given a rate (in  unites of 0.5Mpbs) & three bools (MIMO
190  * Enabled, Channel  Bonding Enabled, & Concatenation  Enabled), one can
191  * determine  whether  the given  rate  is  supported  by computing  two
192  * indices.  The  first maps  the rate to  table row as  indicated below
193  * (i.e. eHddSuppRate_6Mbps maps to  row zero, eHddSuppRate_9Mbps to row
194  * 1, and so on).  Index two can be computed like so:
195  *
196  * \code
197  *  idx2 = ( fEsf  ? 0x4 : 0x0 ) |
198  *         ( fCb   ? 0x2 : 0x0 ) |
199  *         ( fMimo ? 0x1 : 0x0 );
200  * \endcode
201  *
202  *
203  * Given that:
204  *
205  *  \code
206  *  fSupported = g_phy_rates_suppt[idx1][idx2];
207  *  \endcode
208  *
209  *
210  * This table is based on  the document "PHY Supported Rates.doc".  This
211  * table is  permissive in that a  rate is reflected  as being supported
212  * even  when turning  off an  enabled feature  would be  required.  For
213  * instance, "PHY Supported Rates"  lists 42Mpbs as unsupported when CB,
214  * ESF, &  MIMO are all  on.  However,  if we turn  off either of  CB or
215  * MIMO, it then becomes supported.   Therefore, we mark it as supported
216  * even in index 7 of this table.
217  *
218  *
219  */
220 
221 static const bool g_phy_rates_suppt[24][8] = {
222 
223 	/* SSF   SSF    SSF    SSF    ESF    ESF    ESF    ESF */
224 	/* SIMO  MIMO   SIMO   MIMO   SIMO   MIMO   SIMO   MIMO */
225 	/* No CB No CB  CB     CB     No CB  No CB  CB     CB */
226 	{true, true, true, true, true, true, true, true},       /* 6Mbps */
227 	{true, true, true, true, true, true, true, true},       /* 9Mbps */
228 	{true, true, true, true, true, true, true, true},       /* 12Mbps */
229 	{true, true, true, true, true, true, true, true},       /* 18Mbps */
230 	{false, false, true, true, false, false, true, true},   /* 20Mbps */
231 	{true, true, true, true, true, true, true, true},       /* 24Mbps */
232 	{true, true, true, true, true, true, true, true},       /* 36Mbps */
233 	{false, false, true, true, false, true, true, true},    /* 40Mbps */
234 	{false, false, true, true, false, true, true, true},    /* 42Mbps */
235 	{true, true, true, true, true, true, true, true},       /* 48Mbps */
236 	{true, true, true, true, true, true, true, true},       /* 54Mbps */
237 	{false, true, true, true, false, true, true, true},     /* 72Mbps */
238 	{false, false, true, true, false, true, true, true},    /* 80Mbps */
239 	{false, false, true, true, false, true, true, true},    /* 84Mbps */
240 	{false, true, true, true, false, true, true, true},     /* 96Mbps */
241 	{false, true, true, true, false, true, true, true},     /* 108Mbps */
242 	{false, false, true, true, false, true, true, true},    /* 120Mbps */
243 	{false, false, true, true, false, true, true, true},    /* 126Mbps */
244 	{false, false, false, true, false, false, false, true}, /* 144Mbps */
245 	{false, false, false, true, false, false, false, true}, /* 160Mbps */
246 	{false, false, false, true, false, false, false, true}, /* 168Mbps */
247 	{false, false, false, true, false, false, false, true}, /* 192Mbps */
248 	{false, false, false, true, false, false, false, true}, /* 216Mbps */
249 	{false, false, false, true, false, false, false, true}, /* 240Mbps */
250 };
251 
252 typedef enum {
253 	/* 11b rates */
254 	SUPP_RATE_1_MBPS   =   1 * 2,
255 	SUPP_RATE_2_MBPS   =   2 * 2,
256 	SUPP_RATE_5_MBPS =     11,
257 	SUPP_RATE_11_MBPS  =   11 * 2,
258 
259 	/* 11a / 11g rates */
260 	SUPP_RATE_6_MBPS   =   6 * 2,
261 	SUPP_RATE_9_MBPS   =   9 * 2,
262 	SUPP_RATE_12_MBPS  =   12 * 2,
263 	SUPP_RATE_18_MBPS  =   18 * 2,
264 	SUPP_RATE_24_MBPS  =   24 * 2,
265 	SUPP_RATE_36_MBPS  =   36 * 2,
266 	SUPP_RATE_48_MBPS  =   48 * 2,
267 	SUPP_RATE_54_MBPS  =   54 * 2,
268 
269 	/* Airgo prop. rates */
270 	SUPP_RATE_20_MBPS   =  20 * 2,
271 	SUPP_RATE_40_MBPS   =  40 * 2,
272 	SUPP_RATE_42_MBPS   =  42 * 2,
273 	SUPP_RATE_72_MBPS   =  72 * 2,
274 	SUPP_RATE_80_MBPS   =  80 * 2,
275 	SUPP_RATE_84_MBPS   =  84 * 2,
276 	SUPP_RATE_96_MBPS   =  96 * 2,
277 	SUPP_RATE_108_MBPS  =  108 * 2,
278 	SUPP_RATE_120_MBPS  =  120 * 2,
279 	SUPP_RATE_126_MBPS  =  126 * 2,
280 	SUPP_RATE_144_MBPS  =  144 * 2,
281 	SUPP_RATE_160_MBPS  =  160 * 2,
282 	SUPP_RATE_168_MBPS  =  168 * 2,
283 	SUPP_RATE_192_MBPS  =  192 * 2,
284 	SUPP_RATE_216_MBPS  =  216 * 2,
285 	SUPP_RATE_240_MBPS  =  240 * 2
286 } eCsrSupportedRates;
287 
288 /**
289  * struct ps_params - maintain power save state and USAPD params
290  * @mac_ctx: mac_ctx
291  * @session_id: Session Id.
292  * @ps_state : State of the power save
293  * @uapsd_per_ac_trigger_enable_mask: dynamic UPASD mask setting
294  *		derived from AddTS Rsp and DelTS frame.
295  *		If a particular AC bit is set, it means AC is trigger  enabled.
296  * @uapsd_per_ac_delivery_enable_mask: dynamic UPASD mask setting
297  *		derived from AddTS Rsp and DelTs frame.
298  *		If a particular AC bit is set, it means AC is delivery enabled.
299  * @ac_admit_mask: used for AC downgrade. This is a dynamic mask
300  *		setting which keep tracks of ACs being admitted.
301  *		If bit is set to 0: That particular AC is not admitted
302  *		If bit is set to 1: That particular AC is admitted
303  * @uapsd_per_ac_bit_mask: This is a static UAPSD mask setting
304  *		derived from SME_JOIN_REQ and SME_REASSOC_REQ.
305  *		If a particular AC bit is set, it means the AC is both
306  *		trigger enabled and delivery enabled.
307  * @auto_ps_enable_timer: Upon expiration of this timer	Power Save Offload
308  *		module will try to enable sta mode ps
309  */
310 
311 struct ps_params {
312 	void *mac_ctx;
313 	uint32_t     session_id;
314 	enum    ps_state ps_state;
315 	uint8_t uapsd_per_ac_trigger_enable_mask;
316 	uint8_t uapsd_per_ac_delivery_enable_mask;
317 	uint8_t ac_admit_mask[SIR_MAC_DIRECTION_DIRECT];
318 	uint8_t uapsd_per_ac_bit_mask;
319 	qdf_mc_timer_t auto_ps_enable_timer;
320 };
321 
322 /* Type declarations used by Firmware and Host software */
323 
324 /* Scan type enum used in scan request */
325 typedef enum eSirScanType {
326 	eSIR_PASSIVE_SCAN,
327 	eSIR_ACTIVE_SCAN,
328 	eSIR_BEACON_TABLE,
329 } tSirScanType;
330 
331 /**
332  * struct roam_scan_ch_resp - roam scan chan list response to userspace
333  * @vdev_id: vdev id
334  * @num_channels: number of roam scan channels
335  * @command_resp: command response or async event
336  * @chan_list: list of roam scan channels
337  */
338 struct roam_scan_ch_resp {
339 	uint16_t vdev_id;
340 	uint16_t num_channels;
341 	uint32_t command_resp;
342 	uint32_t *chan_list;
343 };
344 
345 /**
346  * struct wlan_beacon_report - Beacon info to be send to userspace
347  * @vdev_id: vdev id
348  * @ssid: ssid present in beacon
349  * @bssid: bssid present in beacon
350  * @frequency: channel frequency in MHz
351  * @beacon_interval: Interval between two consecutive beacons
352  * @time_stamp: time stamp at which beacon received from AP
353  * @boot_time: Boot time when beacon received
354  */
355 struct wlan_beacon_report {
356 	uint8_t vdev_id;
357 	struct wlan_ssid ssid;
358 	struct qdf_mac_addr bssid;
359 	uint32_t frequency;
360 	uint16_t beacon_interval;
361 	qdf_time_t time_stamp;
362 	qdf_time_t boot_time;
363 };
364 
365 
366 /* / Result codes Firmware return to Host SW */
367 typedef enum eSirResultCodes {
368 	eSIR_SME_SUCCESS,
369 	eSIR_LOGE_EXCEPTION,
370 	eSIR_SME_INVALID_PARAMETERS = 500,
371 	eSIR_SME_UNEXPECTED_REQ_RESULT_CODE,
372 	eSIR_SME_RESOURCES_UNAVAILABLE,
373 	/* Unable to find a BssDescription */
374 	eSIR_SME_SCAN_FAILED,
375 	/* matching requested scan criteria */
376 	eSIR_SME_BSS_ALREADY_STARTED_OR_JOINED,
377 	eSIR_SME_LOST_LINK_WITH_PEER_RESULT_CODE,
378 	eSIR_SME_REFUSED,
379 	eSIR_SME_JOIN_DEAUTH_FROM_AP_DURING_ADD_STA,
380 	eSIR_SME_JOIN_TIMEOUT_RESULT_CODE,
381 	eSIR_SME_AUTH_TIMEOUT_RESULT_CODE,
382 	eSIR_SME_ASSOC_TIMEOUT_RESULT_CODE,
383 	eSIR_SME_REASSOC_TIMEOUT_RESULT_CODE,
384 	eSIR_SME_MAX_NUM_OF_PRE_AUTH_REACHED,
385 	eSIR_SME_AUTH_REFUSED,
386 	eSIR_SME_INVALID_WEP_DEFAULT_KEY,
387 	eSIR_SME_NO_KEY_MAPPING_KEY_FOR_PEER,
388 	eSIR_SME_ASSOC_REFUSED,
389 	eSIR_SME_REASSOC_REFUSED,
390 	/* Recvd Deauth while join/pre-auth */
391 	eSIR_SME_DEAUTH_WHILE_JOIN,
392 	eSIR_SME_STA_NOT_AUTHENTICATED,
393 	eSIR_SME_STA_NOT_ASSOCIATED,
394 	eSIR_SME_ALREADY_JOINED_A_BSS,
395 	/* Given in SME_SCAN_RSP msg */
396 	eSIR_SME_MORE_SCAN_RESULTS_FOLLOW,
397 	/* that more SME_SCAN_RSP */
398 	/* messages are following. */
399 	/* SME_SCAN_RSP message with */
400 	/* eSIR_SME_SUCCESS status */
401 	/* code is the last one. */
402 	/* Sent in SME_JOIN/REASSOC_RSP */
403 	eSIR_SME_INVALID_ASSOC_RSP_RXED,
404 	/* messages upon receiving */
405 	/* invalid Re/Assoc Rsp frame. */
406 	/* STOP BSS triggered by MIC failures: MAC software to
407 	 * disassoc all stations
408 	 */
409 	eSIR_SME_MIC_COUNTER_MEASURES,
410 	/* with MIC_FAILURE reason code and perform the stop bss operation */
411 	/* didn't get rsp from peer within timeout interval */
412 	eSIR_SME_ADDTS_RSP_TIMEOUT,
413 	/* didn't get success rsp from HAL */
414 	eSIR_SME_ADDTS_RSP_FAILED,
415 	/* failed to send ch switch act frm */
416 	eSIR_SME_CHANNEL_SWITCH_FAIL,
417 	eSIR_SME_INVALID_STATE,
418 	/* SIR_HAL_SIR_HAL_INIT_SCAN_RSP returned failed status */
419 	eSIR_SME_HAL_SCAN_INIT_FAILED,
420 	/* SIR_HAL_END_SCAN_RSP returned failed status */
421 	eSIR_SME_HAL_SCAN_END_FAILED,
422 	/* SIR_HAL_FINISH_SCAN_RSP returned failed status */
423 	eSIR_SME_HAL_SCAN_FINISH_FAILED,
424 	/* Failed to send a message to HAL */
425 	eSIR_SME_HAL_SEND_MESSAGE_FAIL,
426 	/* Failed to stop the bss */
427 	eSIR_SME_STOP_BSS_FAILURE,
428 	eSIR_SME_WOWL_ENTER_REQ_FAILED,
429 	eSIR_SME_WOWL_EXIT_REQ_FAILED,
430 	eSIR_SME_FT_REASSOC_TIMEOUT_FAILURE,
431 	eSIR_SME_FT_REASSOC_FAILURE,
432 	eSIR_SME_SEND_ACTION_FAIL,
433 	eSIR_SME_DEAUTH_STATUS,
434 	eSIR_PNO_SCAN_SUCCESS,
435 	eSIR_SME_INVALID_SESSION,
436 	eSIR_DONOT_USE_RESULT_CODE = SIR_MAX_ENUM_SIZE
437 } tSirResultCodes;
438 
439 #ifdef WLAN_FEATURE_FILS_SK
440 struct fils_join_rsp_params {
441 	uint8_t *fils_pmk;
442 	uint8_t fils_pmk_len;
443 	uint8_t fils_pmkid[PMKID_LEN];
444 	uint8_t kek[MAX_KEK_LEN];
445 	uint8_t kek_len;
446 	uint8_t tk[MAX_TK_LEN];
447 	uint8_t tk_len;
448 	uint8_t gtk_len;
449 	uint8_t gtk[MAX_GTK_LEN];
450 	struct qdf_mac_addr dst_mac;
451 	struct qdf_mac_addr src_mac;
452 	uint16_t hlp_data_len;
453 	uint8_t hlp_data[FILS_MAX_HLP_DATA_LEN];
454 };
455 #endif
456 
457 #define RMENABLEDCAP_MAX_LEN 5
458 
459 struct rrm_config_param {
460 	uint8_t rrm_enabled;
461 	bool sap_rrm_enabled;
462 	uint8_t max_randn_interval;
463 	uint8_t rm_capability[RMENABLEDCAP_MAX_LEN];
464 };
465 
466 const char *lim_bss_type_to_string(const uint16_t bss_type);
467 /**
468  * struct supported_rates - stores rates/MCS supported
469  * @llbRates: 11b rates in unit of 500kbps
470  * @llaRates: 11a rates in unit of 500kbps
471  * @supportedMCSSet: supported basic MCS, 0-76 bits used, remaining reserved
472  *                    bits 0-15 and 32 should be set.
473  * @rxHighestDataRate: RX Highest Supported Data Rate defines the highest data
474  *                      rate that the STA is able to receive, in unites of 1Mbps
475  *                      This value is derived from "Supported MCS Set field"
476  *                      inside the HT capability element.
477  * @vhtRxMCSMap: Indicates the Maximum MCS(VHT) that can be received for each
478  *                number of spacial streams
479  * @vhtRxHighestDataRate: Indicate the highest VHT data rate that the STA is
480  *                         able to receive
481  * @vhtTxMCSMap: Indicates the Maximum MCS(VHT) that can be transmitted for
482  *                each number of spacial streams
483  * @vhtTxHighestDataRate: Indicate the highest VHT data rate that the STA is
484  *                         able to transmit
485  * @he_rx_mcs: Indicates the Maximum MCS(HE) that can be received for each
486  *              number of spacial streams
487  * @he_tx_mcs: Indicates the Maximum MCS(HE) that can be transmitted for each
488  *              number of spacial streams
489  * @bw_20_rx_max_nss_for_mcs_0_to_7: Indicates MAX RX NSS for MCS from 0 to 7
490  * @bw_20_tx_max_nss_for_mcs_0_to_7: Indicates MAX TX NSS for MCS from 0 to 7
491  * @bw_20_rx_max_nss_for_mcs_8_and_9: Indicates MAX RX NSS for MCS from 8 9
492  * @bw_20_tx_max_nss_for_mcs_8_and_9: Indicates MAX TX NSS for MCS from 8 9
493  * @bw_20_rx_max_nss_for_mcs_10_and_11:Indicates MAX RX NSS for MCS from 10 11
494  * @bw_20_tx_max_nss_for_mcs_10_and_11: Indicates MAX TX NSS for MCS from 10 11
495  * @bw_20_rx_max_nss_for_mcs_12_and_13: Indicates MAX RX NSS for MCS from 12 13
496  * @bw_20_tx_max_nss_for_mcs_12_and_13: Indicates MAX TX NSS for MCS from 12 13
497  * @bw_le_80_rx_max_nss_for_mcs_0_to_7: Indicates MAX RX NSS for MCS from 0 to 7
498  * @bw_le_80_tx_max_nss_for_mcs_0_to_7: Indicates MAX TX NSS for MCS from 0 to 7
499  * @bw_le_80_rx_max_nss_for_mcs_8_and_9: Indicates MAX RX NSS for MCS from 8 9
500  * @bw_le_80_tx_max_nss_for_mcs_8_and_9: Indicates MAX TX NSS for MCS from 8 9
501  * @bw_le_80_rx_max_nss_for_mcs_10_and_11:Indicates MAX RX NSS for MCS from
502  *                                        10 11
503  * @bw_le_80_tx_max_nss_for_mcs_10_and_11: Indicates MAX TX NSS for MCS from
504  *                                         10 11
505  * @bw_le_80_rx_max_nss_for_mcs_12_and_13: Indicates MAX RX NSS for MCS from
506  *                                         12 13
507  * @bw_le_80_tx_max_nss_for_mcs_12_and_13: Indicates MAX TX NSS for MCS from
508  *                                         12 13
509  * @bw_160_rx_max_nss_for_mcs_0_to_7: Indicates MAX RX NSS for MCS from 0 to 7
510  * @bw_160_tx_max_nss_for_mcs_0_to_7: Indicates MAX TX NSS for MCS from 0 to 7
511  * @bw_160_rx_max_nss_for_mcs_8_and_9: Indicates MAX RX NSS for MCS from 8 9
512  * @bw_160_tx_max_nss_for_mcs_8_and_9: Indicates MAX TX NSS for MCS from 8 9
513  * @bw_160_rx_max_nss_for_mcs_10_and_11:Indicates MAX RX NSS for MCS from
514  *                                        10 11
515  * @bw_160_tx_max_nss_for_mcs_10_and_11: Indicates MAX TX NSS for MCS from
516  *                                         10 11
517  * @bw_160_rx_max_nss_for_mcs_12_and_13: Indicates MAX RX NSS for MCS from
518  *                                         12 13
519  * @bw_160_tx_max_nss_for_mcs_12_and_13: Indicates MAX TX NSS for MCS from
520  *                                         12 13
521  * @bw_320_rx_max_nss_for_mcs_0_to_7: Indicates MAX RX NSS for MCS from 0 to 7
522  * @bw_320_tx_max_nss_for_mcs_0_to_7: Indicates MAX TX NSS for MCS from 0 to 7
523  * @bw_320_rx_max_nss_for_mcs_8_and_9: Indicates MAX RX NSS for MCS from 8 9
524  * @bw_320_tx_max_nss_for_mcs_8_and_9: Indicates MAX TX NSS for MCS from 8 9
525  * @bw_320_rx_max_nss_for_mcs_10_and_11:Indicates MAX RX NSS for MCS from
526  *                                        10 11
527  * @bw_320_tx_max_nss_for_mcs_10_and_11: Indicates MAX TX NSS for MCS from
528  *                                         10 11
529  * @bw_320_rx_max_nss_for_mcs_12_and_13: Indicates MAX RX NSS for MCS from
530  *                                         12 13
531  * @bw_320_tx_max_nss_for_mcs_12_and_13: Indicates MAX TX NSS for MCS from
532  *                                         12 13
533  */
534 struct supported_rates {
535 	uint16_t llbRates[SIR_NUM_11B_RATES];
536 	uint16_t llaRates[SIR_NUM_11A_RATES];
537 	uint8_t supportedMCSSet[SIR_MAC_MAX_SUPPORTED_MCS_SET];
538 	uint16_t rxHighestDataRate;
539 	uint16_t vhtRxMCSMap;
540 	uint16_t vhtRxHighestDataRate;
541 	uint16_t vhtTxMCSMap;
542 	uint16_t vhtTxHighestDataRate;
543 #ifdef WLAN_FEATURE_11AX
544 	uint16_t rx_he_mcs_map_lt_80;
545 	uint16_t tx_he_mcs_map_lt_80;
546 	uint16_t rx_he_mcs_map_160;
547 	uint16_t tx_he_mcs_map_160;
548 	uint16_t rx_he_mcs_map_80_80;
549 	uint16_t tx_he_mcs_map_80_80;
550 #endif
551 #ifdef WLAN_FEATURE_11BE
552 	uint32_t bw_20_rx_max_nss_for_mcs_0_to_7:4;
553 	uint32_t bw_20_tx_max_nss_for_mcs_0_to_7:4;
554 	uint32_t bw_20_rx_max_nss_for_mcs_8_and_9:4;
555 	uint32_t bw_20_tx_max_nss_for_mcs_8_and_9:4;
556 	uint32_t bw_20_rx_max_nss_for_mcs_10_and_11:4;
557 	uint32_t bw_20_tx_max_nss_for_mcs_10_and_11:4;
558 	uint32_t bw_20_rx_max_nss_for_mcs_12_and_13:4;
559 	uint32_t bw_20_tx_max_nss_for_mcs_12_and_13:4;
560 	uint32_t bw_le_80_rx_max_nss_for_mcs_0_to_9:4;
561 	uint32_t bw_le_80_tx_max_nss_for_mcs_0_to_9:4;
562 	uint32_t bw_le_80_rx_max_nss_for_mcs_10_and_11:4;
563 	uint32_t bw_le_80_tx_max_nss_for_mcs_10_and_11:4;
564 	uint32_t bw_le_80_rx_max_nss_for_mcs_12_and_13:4;
565 	uint32_t bw_le_80_tx_max_nss_for_mcs_12_and_13:4;
566 	uint32_t bw_160_rx_max_nss_for_mcs_0_to_9:4;
567 	uint32_t bw_160_tx_max_nss_for_mcs_0_to_9:4;
568 	uint32_t bw_160_rx_max_nss_for_mcs_10_and_11:4;
569 	uint32_t bw_160_tx_max_nss_for_mcs_10_and_11:4;
570 	uint32_t bw_160_rx_max_nss_for_mcs_12_and_13:4;
571 	uint32_t bw_160_tx_max_nss_for_mcs_12_and_13:4;
572 	uint32_t bw_320_rx_max_nss_for_mcs_0_to_9:4;
573 	uint32_t bw_320_tx_max_nss_for_mcs_0_to_9:4;
574 	uint32_t bw_320_rx_max_nss_for_mcs_10_and_11:4;
575 	uint32_t bw_320_tx_max_nss_for_mcs_10_and_11:4;
576 	uint8_t bw_320_rx_max_nss_for_mcs_12_and_13:4;
577 	uint8_t bw_320_tx_max_nss_for_mcs_12_and_13:4;
578 #endif
579 };
580 
581 struct register_mgmt_frame {
582 	uint16_t messageType;
583 	uint16_t length;
584 	uint8_t sessionId;
585 	bool registerFrame;
586 	uint16_t frameType;
587 	uint16_t matchLen;
588 	QDF_FLEX_ARRAY(uint8_t, matchData);
589 };
590 
591 /* / Generic type for sending a response message */
592 /* / with result code to host software */
593 typedef struct sSirSmeRsp {
594 	uint16_t messageType;   /* eWNI_SME_*_RSP */
595 	uint16_t length;
596 	uint8_t vdev_id;
597 	tSirResultCodes status_code;
598 	struct wlan_objmgr_psoc *psoc;
599 } tSirSmeRsp, *tpSirSmeRsp;
600 
601 struct bss_description;
602 struct roam_offload_synch_ind;
603 struct roam_pmkid_req_event;
604 
605 /**
606  * typedef pe_roam_synch_fn_t - PE roam synch callback routine pointer
607  * @mac_ctx: Global MAC context
608  * @vdev_id: vdev id
609  * @roam_sync_ind_ptr: Structure with roam synch parameters
610  * @ie_len: ie length
611  * @reason: Reason for calling the callback
612  *
613  * This type is for callbacks registered with WMA to complete the roam synch
614  * propagation at PE level. It also fills the BSS descriptor, which will be
615  * helpful to complete the roam synch propagation.
616  *
617  * Return: Success or Failure.
618  */
619 typedef QDF_STATUS
620 (*pe_roam_synch_fn_t)(struct mac_context *mac_ctx,
621 		      uint8_t vdev_id,
622 		      struct roam_offload_synch_ind *roam_sync_ind_ptr,
623 		      uint16_t ie_len,
624 		      enum sir_roam_op_code reason);
625 
626 /**
627  * typedef stop_roaming_fn_t - Stop roaming routine pointer
628  * @mac_handle: Pointer to opaque mac handle
629  * @session_id: Session Identifier
630  * @reason: Reason for calling the callback
631  * @requestor: Requestor for disabling roaming in driver
632  *
633  * This type is for callbacks registered with WMA to stop roaming on the given
634  * session ID
635  *
636  * Return: Success or Failure.
637  */
638 typedef QDF_STATUS
639 (*stop_roaming_fn_t)(mac_handle_t mac_handle,
640 		     uint8_t session_id, uint8_t reason,
641 		     enum wlan_cm_rso_control_requestor requestor);
642 
643 /**
644  * typedef set_ies_fn_t - Set IEs routine pointer
645  * @mac_ctx: Global MAC context
646  * @vdev_id: vdev id
647  * @dot11_mode: dot11 mode
648  * @opmode: device opmode
649  *
650  * This type is for callbacks registered with WMA to set the IEs for a
651  * given vdev id to the firmware.
652  *
653  * Return: Success or Failure
654  */
655 typedef QDF_STATUS
656 (*set_ies_fn_t)(struct mac_context *mac_ctx, uint8_t vdev_id,
657 		uint16_t dot11_mode, enum QDF_OPMODE device_mode);
658 
659 /* / Definition for indicating all modules ready on STA */
660 struct sme_ready_req {
661 	uint16_t messageType;   /* eWNI_SME_SYS_READY_IND */
662 	uint16_t length;
663 	QDF_STATUS (*csr_roam_auth_event_handle_cb)(struct mac_context *mac,
664 						    uint8_t vdev_id,
665 						    struct qdf_mac_addr bssid,
666 						    uint32_t akm);
667 	pe_roam_synch_fn_t pe_roam_synch_cb;
668 	stop_roaming_fn_t stop_roaming_cb;
669 	QDF_STATUS (*sme_msg_cb)(struct mac_context *mac,
670 				 struct scheduler_msg *msg);
671 	QDF_STATUS (*pe_disconnect_cb) (struct mac_context *mac,
672 					uint8_t vdev_id,
673 					uint8_t *deauth_disassoc_frame,
674 					uint16_t deauth_disassoc_frame_len,
675 					uint16_t reason_code);
676 	set_ies_fn_t pe_roam_set_ie_cb;
677 };
678 
679 /**
680  * struct s_sir_set_hw_mode - Set HW mode request
681  * @messageType: Message type
682  * @length: Length of the message
683  * @set_hw: Params containing the HW mode index and callback
684  */
685 struct s_sir_set_hw_mode {
686 	uint16_t messageType;
687 	uint16_t length;
688 	struct policy_mgr_hw_mode set_hw;
689 };
690 
691 /**
692  * struct sir_set_dual_mac_cfg - Set Dual mac config request
693  * @message_type: Message type
694  * @length: Length of the message
695  * @set_dual_mac: Params containing the dual mac config and callback
696  */
697 struct sir_set_dual_mac_cfg {
698 	uint16_t message_type;
699 	uint16_t length;
700 	struct policy_mgr_dual_mac_config set_dual_mac;
701 };
702 
703 /**
704  * struct sir_antenna_mode_param - antenna mode param
705  * @num_tx_chains: Number of TX chains
706  * @num_rx_chains: Number of RX chains
707  * @set_antenna_mode_resp: callback to set antenna mode command
708  * @set_antenna_mode_ctx: callback context to set antenna mode command
709  */
710 struct sir_antenna_mode_param {
711 	uint32_t num_tx_chains;
712 	uint32_t num_rx_chains;
713 	void *set_antenna_mode_resp;
714 	void *set_antenna_mode_ctx;
715 };
716 
717 /**
718  * struct sir_set_antenna_mode - Set antenna mode request
719  * @message_type: Message type
720  * @length: Length of the message
721  * @set_antenna_mode: Params containing antenna mode params
722  */
723 struct sir_set_antenna_mode {
724 	uint16_t message_type;
725 	uint16_t length;
726 	struct sir_antenna_mode_param set_antenna_mode;
727 };
728 
729 /**
730  * enum bss_type - Enum for BSS type used in scanning/joining etc.
731  *
732  * @eSIR_INFRASTRUCTURE_MODE: Infrastructure station
733  * @eSIR_INFRA_AP_MODE: softAP mode
734  * @eSIR_AUTO_MODE: Auto role
735  * @eSIR_MONITOR_MODE: Monitor mode
736  * @eSIR_NDI_MODE: NAN datapath mode
737  */
738 enum bss_type {
739 	eSIR_INFRASTRUCTURE_MODE,
740 	eSIR_INFRA_AP_MODE,
741 	eSIR_AUTO_MODE,
742 	eSIR_MONITOR_MODE,
743 	eSIR_NDI_MODE,
744 	eSIR_DONOT_USE_BSS_TYPE = SIR_MAX_ENUM_SIZE
745 };
746 
747 /* / Power Capability info used in 11H */
748 struct power_cap_info {
749 	uint8_t minTxPower;
750 	uint8_t maxTxPower;
751 };
752 
753 /* / Supported Channel info used in 11H */
754 struct supported_channels {
755 	uint8_t numChnl;
756 	uint8_t channelList[SIR_MAX_SUPPORTED_CHANNEL_LIST];
757 };
758 
759 typedef enum eSirNwType {
760 	eSIR_11A_NW_TYPE,
761 	eSIR_11B_NW_TYPE,
762 	eSIR_11G_NW_TYPE,
763 	eSIR_11N_NW_TYPE,
764 	eSIR_11AC_NW_TYPE,
765 	eSIR_11AX_NW_TYPE,
766 	eSIR_11BE_NW_TYPE,
767 	eSIR_DONOT_USE_NW_TYPE = SIR_MAX_ENUM_SIZE
768 } tSirNwType;
769 
770 struct add_ie_params {
771 	uint16_t probeRespDataLen;
772 	uint8_t *probeRespData_buff;
773 	uint16_t assocRespDataLen;
774 	uint8_t *assocRespData_buff;
775 	uint16_t probeRespBCNDataLen;
776 	uint8_t *probeRespBCNData_buff;
777 };
778 
779 #define GET_IE_LEN_IN_BSS(lenInBss) (lenInBss + sizeof(lenInBss) - \
780 			    ((uintptr_t)OFFSET_OF(struct bss_description,\
781 						  ieFields)))
782 
783 #define WSCIE_PROBE_RSP_LEN (317 + 2)
784 
785 #ifdef WLAN_FEATURE_FILS_SK
786 /* struct fils_ind_elements: elements parsed from fils indication present
787  * in beacon/probe resp
788  * @realm_cnt: number of realm present
789  * @realm: realms
790  * @is_fils_sk_supported: if FILS SK supported
791  * @is_cache_id_present: if cache id present
792  * @cache_id: cache id
793  */
794 struct fils_ind_elements {
795 	uint16_t realm_cnt;
796 	uint8_t realm[SIR_MAX_REALM_COUNT][SIR_REALM_LEN];
797 	bool is_fils_sk_supported;
798 	bool is_cache_id_present;
799 	uint8_t cache_id[CACHE_ID_LEN];
800 };
801 #endif
802 
803 struct bss_description {
804 	/* offset of the ieFields from bssId. */
805 	uint16_t length;
806 	tSirMacAddr bssId;
807 	unsigned long scansystimensec;
808 	uint32_t timeStamp[2];
809 	uint16_t beaconInterval;
810 	uint16_t capabilityInfo;
811 	tSirNwType nwType;      /* Indicates 11a/b/g */
812 	int8_t rssi;
813 	int8_t rssi_raw;
814 	int8_t sinr;
815 	/* channel frequency what peer sent in beacon/probersp. */
816 	uint32_t chan_freq;
817 	/* Based on system time, not a relative time. */
818 	uint64_t received_time;
819 	uint32_t parentTSF;
820 	uint32_t startTSF[2];
821 	uint8_t mdiePresent;
822 	/* MDIE for 11r, picked from the beacons */
823 	uint8_t mdie[SIR_MDIE_SIZE];
824 #ifdef FEATURE_WLAN_ESE
825 	uint16_t QBSSLoad_present;
826 	uint16_t QBSSLoad_avail;
827 #endif
828 	/* whether it is from a probe rsp */
829 	uint8_t fProbeRsp;
830 	tSirMacSeqCtl seq_ctrl;
831 	uint32_t tsf_delta;
832 	struct scan_mbssid_info mbssid_info;
833 #ifdef WLAN_FEATURE_FILS_SK
834 	struct fils_ind_elements fils_info_element;
835 #endif
836 	uint32_t assoc_disallowed;
837 	uint32_t adaptive_11r_ap;
838 	uint32_t mbo_oce_enabled_ap;
839 #if defined(WLAN_SAE_SINGLE_PMK) && defined(WLAN_FEATURE_ROAM_OFFLOAD)
840 	uint32_t is_single_pmk;
841 #endif
842 	/* Please keep the structure 4 bytes aligned above the ieFields */
843 	QDF_FLEX_ARRAY(uint32_t, ieFields);
844 };
845 
846 /* / Definition for response message to previously */
847 /* / issued start BSS request */
848 /* / MAC ---> */
849 struct start_bss_rsp {
850 	uint8_t vdev_id;
851 	tSirResultCodes status_code;
852 	uint32_t staId;         /* Station ID for Self */
853 };
854 
855 struct report_channel_list {
856 	uint8_t num_channels;
857 	uint32_t chan_freq_lst[SIR_ESE_MAX_MEAS_IE_REQS];
858 };
859 
860 #ifdef FEATURE_OEM_DATA_SUPPORT
861 struct oem_data_req {
862 	uint32_t data_len;
863 	uint8_t *data;
864 };
865 
866 struct oem_data_rsp {
867 	uint32_t rsp_len;
868 	uint8_t *data;
869 };
870 #endif /* FEATURE_OEM_DATA_SUPPORT */
871 
872 #ifdef FEATURE_WLAN_ESE
873 typedef struct ese_wmm_tspec_ie {
874 	uint16_t         traffic_type:1;
875 	uint16_t                 tsid:4;
876 	uint16_t            direction:2;
877 	uint16_t        access_policy:2;
878 	uint16_t          aggregation:1;
879 	uint16_t                  psb:1;
880 	uint16_t        user_priority:3;
881 	uint16_t       tsinfo_ack_pol:2;
882 	uint8_t          tsinfo_rsvd:7;
883 	uint8_t      burst_size_defn:1;
884 	uint16_t                 size:15;
885 	uint16_t                fixed:1;
886 	uint16_t            max_msdu_size;
887 	uint32_t            min_service_int;
888 	uint32_t            max_service_int;
889 	uint32_t            inactivity_int;
890 	uint32_t            suspension_int;
891 	uint32_t            service_start_time;
892 	uint32_t            min_data_rate;
893 	uint32_t            mean_data_rate;
894 	uint32_t            peak_data_rate;
895 	uint32_t            burst_size;
896 	uint32_t            delay_bound;
897 	uint32_t            min_phy_rate;
898 	uint16_t            surplus_bw_allowance;
899 	uint16_t            medium_time;
900 } qdf_packed ese_wmm_tspec_ie;
901 
902 typedef struct sTspecInfo {
903 	uint8_t valid;
904 	struct mac_tspec_ie tspec;
905 } tTspecInfo;
906 
907 typedef struct sESETspecTspecInfo {
908 	uint8_t numTspecs;
909 	tTspecInfo tspec[ESE_MAX_TSPEC_IES];
910 } tESETspecInfo;
911 
912 struct tsm_ie {
913 	uint8_t tsid;
914 	uint8_t state;
915 	uint16_t msmt_interval;
916 };
917 
918 struct tsm_ie_ind {
919 	struct tsm_ie tsm_ie;
920 	uint8_t sessionId;
921 };
922 
923 typedef struct sAniTrafStrmMetrics {
924 	uint16_t UplinkPktQueueDly;
925 	uint16_t UplinkPktQueueDlyHist[4];
926 	uint32_t UplinkPktTxDly;
927 	uint16_t UplinkPktLoss;
928 	uint16_t UplinkPktCount;
929 	uint8_t RoamingCount;
930 	uint16_t RoamingDly;
931 } tAniTrafStrmMetrics, *tpAniTrafStrmMetrics;
932 
933 typedef struct sAniGetTsmStatsReq {
934 	/* Common for all types are requests */
935 	uint16_t msgType;       /* message type is same as the request type */
936 	uint16_t msgLen;        /* length of the entire request */
937 	uint8_t tid;            /* traffic id */
938 	struct qdf_mac_addr bssId;
939 	void *tsmStatsCallback;
940 	void *pDevContext;      /* device context */
941 } tAniGetTsmStatsReq, *tpAniGetTsmStatsReq;
942 
943 typedef struct sAniGetTsmStatsRsp {
944 	/* Common for all types are responses */
945 	uint16_t msgType;       /*
946 				 * message type is same as
947 				 * the request type
948 				 */
949 	uint16_t msgLen;        /*
950 				 * length of the entire request,
951 				 * includes the pStatsBuf length too
952 				 */
953 	uint8_t sessionId;
954 	uint32_t rc;            /* success/failure */
955 	struct qdf_mac_addr bssid; /* bssid to get the tsm stats for */
956 	tAniTrafStrmMetrics tsmMetrics;
957 	void *tsmStatsReq;      /* tsm stats request backup */
958 } tAniGetTsmStatsRsp, *tpAniGetTsmStatsRsp;
959 
960 struct ese_bcn_report_bss_info {
961 	tBcnReportFields bcnReportFields;
962 	uint8_t ieLen;
963 	uint8_t *pBuf;
964 };
965 
966 struct ese_bcn_report_rsp {
967 	uint16_t measurementToken;
968 	uint8_t flag;        /* Flag to report measurement done and more data */
969 	uint8_t numBss;
970 	struct ese_bcn_report_bss_info
971 				bcnRepBssInfo[SIR_BCN_REPORT_MAX_BSS_DESC];
972 };
973 
974 #define TSRS_11AG_RATE_6MBPS   0xC
975 #define TSRS_11B_RATE_5_5MBPS  0xB
976 
977 struct ese_tsrs_ie {
978 	uint8_t tsid;
979 	uint8_t rates[8];
980 };
981 
982 struct ese_tsm_ie {
983 	uint8_t tsid;
984 	uint8_t state;
985 	uint16_t msmt_interval;
986 };
987 
988 typedef struct sTSMStats {
989 	uint8_t tid;
990 	struct qdf_mac_addr bssid;
991 	tTrafStrmMetrics tsmMetrics;
992 } tTSMStats, *tpTSMStats;
993 typedef struct sEseTSMContext {
994 	uint8_t tid;
995 	struct ese_tsm_ie tsmInfo;
996 	tTrafStrmMetrics tsmMetrics;
997 } tEseTSMContext, *tpEseTSMContext;
998 typedef struct sEsePEContext {
999 	tEseTSMContext tsm;
1000 } tEsePEContext, *tpEsePEContext;
1001 
1002 #endif /* FEATURE_WLAN_ESE */
1003 
1004 /* Warning Do not add any new param in this struct */
1005 struct join_req {
1006 	tSirRSNie rsnIE;
1007 	tSirAddie addIEScan;
1008 	tSirAddie addIEAssoc;
1009 #ifdef WLAN_FEATURE_11BE_MLO
1010 	struct mlo_partner_info partner_info;
1011 	uint8_t assoc_link_id;
1012 	bool is_ml_probe_req_sent;
1013 #endif
1014 	/* Warning:::::::::::: Do not add any new param in this struct */
1015 	/* Pls make this as last variable in struct */
1016 	struct bss_description bssDescription;
1017 	/*
1018 	 * WARNING: Pls make bssDescription as last variable in struct
1019 	 * join_req as it has ieFields followed after this bss
1020 	 * description. Adding a variable after this corrupts the ieFields
1021 	 */
1022 };
1023 
1024 struct oem_channel_info {
1025 	uint32_t mhz;
1026 	uint32_t band_center_freq1;
1027 	uint32_t band_center_freq2;
1028 	uint32_t info;
1029 	uint32_t reg_info_1;
1030 	uint32_t reg_info_2;
1031 	uint8_t nss;
1032 	uint32_t rate_flags;
1033 	uint8_t sec_ch_offset;
1034 	enum phy_ch_width ch_width;
1035 };
1036 
1037 enum sir_sme_phy_mode {
1038 	SIR_SME_PHY_MODE_LEGACY = 0,
1039 	SIR_SME_PHY_MODE_HT = 1,
1040 	SIR_SME_PHY_MODE_VHT = 2
1041 };
1042 
1043 /* / Definition for Association indication from peer */
1044 /* / MAC ---> */
1045 struct assoc_ind {
1046 	uint16_t messageType;   /* eWNI_SME_ASSOC_IND */
1047 	uint16_t length;
1048 	uint8_t sessionId;
1049 	tSirMacAddr peerMacAddr;
1050 	uint16_t aid;
1051 	tSirMacAddr bssId;      /* Self BSSID */
1052 	uint16_t staId;         /* Station ID for peer */
1053 	tAniAuthType authType;
1054 	enum ani_akm_type akm_type;
1055 	tAniSSID ssId;          /* SSID used by STA to associate */
1056 	tSirWAPIie wapiIE;      /* WAPI IE received from peer */
1057 	tSirRSNie rsnIE;        /* RSN IE received from peer */
1058 	/* Additional IE received from peer, which possibly include
1059 	 * WSC IE and/or P2P IE
1060 	 */
1061 	tSirAddie addIE;
1062 
1063 	/* powerCap & supportedChannels are present only when */
1064 	/* spectrumMgtIndicator flag is set */
1065 	bool spectrumMgtIndicator;
1066 	struct power_cap_info powerCap;
1067 	struct supported_channels supportedChannels;
1068 	bool wmmEnabledSta; /* if present - STA is WMM enabled */
1069 	bool reassocReq;
1070 	/* Required for indicating the frames to upper layer */
1071 	uint32_t assocReqLength;
1072 	uint8_t *assocReqPtr;
1073 
1074 	/* Timing measurement capability */
1075 	uint8_t timingMeasCap;
1076 	struct oem_channel_info chan_info;
1077 	bool ampdu;
1078 	bool sgi_enable;
1079 	bool tx_stbc;
1080 	bool rx_stbc;
1081 	tSirMacHTChannelWidth ch_width;
1082 	enum sir_sme_phy_mode mode;
1083 	uint8_t max_supp_idx;
1084 	uint8_t max_ext_idx;
1085 	uint8_t max_mcs_idx;
1086 	uint8_t max_real_mcs_idx;
1087 	uint8_t rx_mcs_map;
1088 	uint8_t tx_mcs_map;
1089 	/* Extended CSA capability of station */
1090 	uint8_t ecsa_capable;
1091 	uint32_t ext_cap;
1092 	uint8_t supported_band;
1093 	tDot11fIEHTCaps HTCaps;
1094 	tDot11fIEVHTCaps VHTCaps;
1095 	bool he_caps_present;
1096 	bool eht_caps_present;
1097 	tSirMacCapabilityInfo capability_info;
1098 	bool is_sae_authenticated;
1099 	const uint8_t *owe_ie;
1100 	uint32_t owe_ie_len;
1101 	uint16_t owe_status;
1102 	const uint8_t *ft_ie;
1103 	uint32_t ft_ie_len;
1104 	uint16_t ft_status;
1105 	bool need_assoc_rsp_tx_cb;
1106 	tSirMacAddr peer_mld_addr;
1107 };
1108 
1109 /**
1110  * struct owe_assoc_ind - owe association indication
1111  * @node : List entry element
1112  * @assoc_ind: pointer to assoc ind
1113  */
1114 struct owe_assoc_ind {
1115 	qdf_list_node_t node;
1116 	struct assoc_ind *assoc_ind;
1117 };
1118 
1119 /**
1120  * struct ft_assoc_ind - ft association indication
1121  * @node: List entry element
1122  * @assoc_ind: pointer to assoc ind
1123  */
1124 struct ft_assoc_ind {
1125 	qdf_list_node_t node;
1126 	struct assoc_ind *assoc_ind;
1127 };
1128 
1129 /* / Definition for Association confirm */
1130 /* / ---> MAC */
1131 struct assoc_cnf {
1132 	uint16_t messageType;   /* eWNI_SME_ASSOC_CNF */
1133 	uint16_t length;
1134 	tSirResultCodes status_code;
1135 	struct qdf_mac_addr bssid;      /* Self BSSID */
1136 	struct qdf_mac_addr peer_macaddr;
1137 	uint16_t aid;
1138 	enum wlan_status_code mac_status_code;
1139 	uint8_t *owe_ie;
1140 	uint32_t owe_ie_len;
1141 	uint8_t *ft_ie;
1142 	uint32_t ft_ie_len;
1143 	bool need_assoc_rsp_tx_cb;
1144 };
1145 
1146 /**
1147  * Table below indicates what information is passed for each of
1148  * the Wireless Media status change notifications:
1149  *
1150  * Status Change code               Status change info
1151  * ----------------------------------------------------------------------
1152  * eSIR_SME_DEAUTH_FROM_PEER        Reason code received in DEAUTH frame
1153  * eSIR_SME_DISASSOC_FROM_PEER      Reason code received in DISASSOC frame
1154  * eSIR_SME_LOST_LINK_WITH_PEER     None
1155  * eSIR_SME_CHANNEL_SWITCH          New channel number
1156  * eSIR_SME_RADAR_DETECTED          Indicates that radar is detected
1157  * eSIR_SME_AP_CAPS_CHANGED         Indicates that capabilities of the AP
1158  *                                  that STA is currently associated with
1159  *                                  have changed.
1160  */
1161 
1162 /* Definition for Disassociation request */
1163 struct disassoc_req {
1164 	uint16_t messageType;   /* eWNI_SME_DISASSOC_REQ */
1165 	uint16_t length;
1166 	uint8_t sessionId;      /* Session ID */
1167 	struct qdf_mac_addr bssid;      /* Peer BSSID */
1168 	struct qdf_mac_addr peer_macaddr;
1169 	uint16_t reasonCode;
1170 	/* This flag tells LIM whether to send the disassoc OTA or not */
1171 	/* This will be set in while handing off from one AP to other */
1172 	uint8_t doNotSendOverTheAir;
1173 	bool process_ho_fail;
1174 };
1175 
1176 /* / Definition for Disassociation response */
1177 struct disassoc_rsp {
1178 	uint16_t messageType;   /* eWNI_SME_DISASSOC_RSP */
1179 	uint16_t length;
1180 	uint8_t sessionId;      /* Session ID */
1181 	tSirResultCodes status_code;
1182 	struct qdf_mac_addr peer_macaddr;
1183 	uint16_t staId;
1184 };
1185 
1186 /* / Definition for Disassociation indication from peer */
1187 struct disassoc_ind {
1188 	uint16_t messageType;   /* eWNI_SME_DISASSOC_IND */
1189 	uint16_t length;
1190 	uint8_t vdev_id;
1191 	tSirResultCodes status_code;
1192 	struct qdf_mac_addr bssid;
1193 	struct qdf_mac_addr peer_macaddr;
1194 	struct qdf_mac_addr peer_mld_addr;
1195 	uint16_t staId;
1196 	uint32_t reasonCode;
1197 	bool from_ap;
1198 };
1199 
1200 /* / Definition for Disassociation confirm */
1201 /* / MAC ---> */
1202 struct disassoc_cnf {
1203 	uint16_t messageType;   /* eWNI_SME_DISASSOC_CNF */
1204 	uint16_t length;
1205 	uint8_t vdev_id;
1206 	tSirResultCodes status_code;
1207 	struct qdf_mac_addr bssid;
1208 	struct qdf_mac_addr peer_macaddr;
1209 };
1210 
1211 /**
1212  * struct sir_sme_discon_done_ind  - disconnect done indiaction
1213  * @message_type: msg type
1214  * @length: length of msg
1215  * @session_id: session id of the indication
1216  * @reason_code: reason for disconnect indication
1217  * @peer_mac: peer mac
1218  */
1219 struct sir_sme_discon_done_ind {
1220 	uint16_t           message_type;
1221 	uint16_t           length;
1222 	uint8_t            session_id;
1223 	tSirResultCodes    reason_code;
1224 	tSirMacAddr        peer_mac;
1225 };
1226 
1227 /* / Definition for Deauthetication request */
1228 struct deauth_req {
1229 	uint16_t messageType;   /* eWNI_SME_DEAUTH_REQ */
1230 	uint16_t length;
1231 	uint8_t vdev_id;      /* Session ID */
1232 	struct qdf_mac_addr bssid;      /* AP BSSID */
1233 	struct qdf_mac_addr peer_macaddr;
1234 	uint16_t reasonCode;
1235 };
1236 
1237 /**
1238  * struct deauth_retry_params - deauth retry params
1239  * @peer_mac: peer mac
1240  * @reason_code: reason for disconnect indication
1241  * @retry_cnt: retry count
1242  */
1243 struct deauth_retry_params {
1244 	struct qdf_mac_addr peer_macaddr;
1245 	uint16_t reason_code;
1246 	uint8_t retry_cnt;
1247 };
1248 
1249 /* / Definition for Deauthetication response */
1250 struct deauth_rsp {
1251 	uint16_t messageType;   /* eWNI_SME_DEAUTH_RSP */
1252 	uint16_t length;
1253 	uint8_t sessionId;      /* Session ID */
1254 	tSirResultCodes status_code;
1255 	struct qdf_mac_addr peer_macaddr;
1256 };
1257 
1258 /* / Definition for Deauthetication indication from peer */
1259 struct deauth_ind {
1260 	uint16_t messageType;   /* eWNI_SME_DEAUTH_IND */
1261 	uint16_t length;
1262 	uint8_t vdev_id;
1263 	tSirResultCodes status_code;
1264 	struct qdf_mac_addr bssid;      /* AP BSSID */
1265 	struct qdf_mac_addr peer_macaddr;
1266 	struct qdf_mac_addr peer_mld_addr;
1267 
1268 	uint16_t staId;
1269 	uint32_t reasonCode;
1270 	int8_t rssi;
1271 	bool from_ap;
1272 };
1273 
1274 /* / Definition for Deauthetication confirm */
1275 struct deauth_cnf {
1276 	uint16_t messageType;   /* eWNI_SME_DEAUTH_CNF */
1277 	uint16_t length;
1278 	uint8_t vdev_id;
1279 	tSirResultCodes status_code;
1280 	struct qdf_mac_addr bssid;
1281 	struct qdf_mac_addr peer_macaddr;
1282 };
1283 
1284 struct stop_bss_req {
1285 	uint8_t vdev_id;
1286 	uint32_t cmd_id;
1287 };
1288 
1289 struct stop_bss_rsp {
1290 	uint8_t vdev_id;
1291 	tSirResultCodes status_code;
1292 };
1293 
1294 /* / Definition for Channel Switch indication for station */
1295 /* / MAC ---> */
1296 struct switch_channel_ind {
1297 	uint16_t messageType;   /* eWNI_SME_SWITCH_CHL_IND */
1298 	uint16_t length;
1299 	uint8_t sessionId;
1300 	uint32_t freq;
1301 	struct ch_params chan_params;
1302 	struct qdf_mac_addr bssid;      /* BSSID */
1303 	QDF_STATUS status;
1304 	enum wlan_phymode ch_phymode;
1305 };
1306 
1307 /* / Definition for MIC failure indication */
1308 /* / MAC ---> */
1309 /* / MAC reports this each time a MIC failure occurs on Rx TKIP packet */
1310 struct mic_failure_ind {
1311 	uint16_t messageType;   /* eWNI_SME_MIC_FAILURE_IND */
1312 	uint16_t length;
1313 	uint8_t sessionId;
1314 	struct qdf_mac_addr bssId;
1315 	tSirMicFailureInfo info;
1316 };
1317 
1318 struct missed_beacon_ind {
1319 	uint16_t messageType;   /* eWNI_SME_MISSED_BEACON_IND */
1320 	uint16_t length;
1321 	uint8_t bss_idx;
1322 	int32_t rssi;
1323 };
1324 
1325 /* / Definition for Set Context response */
1326 /* / MAC ---> */
1327 struct set_context_rsp {
1328 	uint16_t messageType;   /* eWNI_SME_SET_CONTEXT_RSP */
1329 	uint16_t length;
1330 	uint8_t sessionId;      /* Session ID */
1331 	tSirResultCodes status_code;
1332 	struct qdf_mac_addr peer_macaddr;
1333 };
1334 
1335 typedef struct sAniGetSnrReq {
1336 	/* Common for all types are requests */
1337 	uint16_t msgType;       /* message type is same as the request type */
1338 	uint16_t msgLen;        /* length of the entire request */
1339 	uint8_t sessionId;
1340 	void *snrCallback;
1341 	void *pDevContext;      /* device context */
1342 	int8_t snr;
1343 } tAniGetSnrReq, *tpAniGetSnrReq;
1344 
1345 /* generic country code change request MSG structure */
1346 typedef struct sAniGenericChangeCountryCodeReq {
1347 	uint16_t msgType;       /* message type is same as the request type */
1348 	uint16_t msgLen;        /* length of the entire request */
1349 	uint8_t countryCode[REG_ALPHA2_LEN + 1];  /* 3 char country code */
1350 } tAniGenericChangeCountryCodeReq, *tpAniGenericChangeCountryCodeReq;
1351 
1352 /**
1353  * struct sAniDHCPStopInd - DHCP Stop indication message
1354  * @msgType: message type is same as the request type
1355  * @msgLen: length of the entire request
1356  * @device_mode: Mode of the device(ex:STA, AP)
1357  * @adapterMacAddr: MAC address of the adapter
1358  * @peerMacAddr: MAC address of the connected peer
1359  */
1360 typedef struct sAniDHCPStopInd {
1361 	uint16_t msgType;
1362 	uint16_t msgLen;
1363 	uint8_t device_mode;
1364 	struct qdf_mac_addr adapterMacAddr;
1365 	struct qdf_mac_addr peerMacAddr;
1366 } tAniDHCPInd, *tpAniDHCPInd;
1367 
1368 /**********************PE Statistics end*************************/
1369 
1370 typedef struct sSirP2PNoaAttr {
1371 #ifdef ANI_BIG_BYTE_ENDIAN
1372 	uint32_t index:8;
1373 	uint32_t oppPsFlag:1;
1374 	uint32_t ctWin:7;
1375 	uint32_t rsvd1:16;
1376 #else
1377 	uint32_t rsvd1:16;
1378 	uint32_t ctWin:7;
1379 	uint32_t oppPsFlag:1;
1380 	uint32_t index:8;
1381 #endif
1382 
1383 #ifdef ANI_BIG_BYTE_ENDIAN
1384 	uint32_t uNoa1IntervalCnt:8;
1385 	uint32_t rsvd2:24;
1386 #else
1387 	uint32_t rsvd2:24;
1388 	uint32_t uNoa1IntervalCnt:8;
1389 #endif
1390 	uint32_t uNoa1Duration;
1391 	uint32_t uNoa1Interval;
1392 	uint32_t uNoa1StartTime;
1393 
1394 #ifdef ANI_BIG_BYTE_ENDIAN
1395 	uint32_t uNoa2IntervalCnt:8;
1396 	uint32_t rsvd3:24;
1397 #else
1398 	uint32_t rsvd3:24;
1399 	uint32_t uNoa2IntervalCnt:8;
1400 #endif
1401 	uint32_t uNoa2Duration;
1402 	uint32_t uNoa2Interval;
1403 	uint32_t uNoa2StartTime;
1404 } tSirP2PNoaAttr, *tpSirP2PNoaAttr;
1405 
1406 typedef struct sSirTclasInfo {
1407 	tSirMacTclasIE tclas;
1408 	uint8_t version;        /* applies only for classifier type ip */
1409 	union {
1410 		tSirMacTclasParamEthernet eth;
1411 		tSirMacTclasParamIPv4 ipv4;
1412 		tSirMacTclasParamIPv6 ipv6;
1413 		tSirMacTclasParam8021dq t8021dq;
1414 	} qdf_packed tclasParams;
1415 } qdf_packed tSirTclasInfo;
1416 
1417 typedef struct sSirAddtsReqInfo {
1418 	uint8_t dialogToken;
1419 	struct mac_tspec_ie tspec;
1420 
1421 	uint8_t numTclas;       /* number of Tclas elements */
1422 	tSirTclasInfo tclasInfo[SIR_MAC_TCLASIE_MAXNUM];
1423 	uint8_t tclasProc;
1424 #if defined(FEATURE_WLAN_ESE)
1425 	struct ese_tsrs_ie tsrsIE;
1426 	uint8_t tsrsPresent:1;
1427 #endif
1428 	uint8_t wmeTspecPresent:1;
1429 	uint8_t wsmTspecPresent:1;
1430 	uint8_t lleTspecPresent:1;
1431 	uint8_t tclasProcPresent:1;
1432 } tSirAddtsReqInfo, *tpSirAddtsReqInfo;
1433 
1434 typedef struct sSirAddtsRspInfo {
1435 	uint8_t dialogToken;
1436 	enum wlan_status_code status;
1437 	tSirMacTsDelayIE delay;
1438 
1439 	struct mac_tspec_ie tspec;
1440 	uint8_t numTclas;       /* number of Tclas elements */
1441 	tSirTclasInfo tclasInfo[SIR_MAC_TCLASIE_MAXNUM];
1442 	uint8_t tclasProc;
1443 	tSirMacScheduleIE schedule;
1444 #ifdef FEATURE_WLAN_ESE
1445 	struct ese_tsm_ie tsmIE;
1446 	uint8_t tsmPresent:1;
1447 #endif
1448 	uint8_t wmeTspecPresent:1;
1449 	uint8_t wsmTspecPresent:1;
1450 	uint8_t lleTspecPresent:1;
1451 	uint8_t tclasProcPresent:1;
1452 	uint8_t schedulePresent:1;
1453 } tSirAddtsRspInfo, *tpSirAddtsRspInfo;
1454 
1455 /* / Add a tspec as defined */
1456 typedef struct sSirAddtsReq {
1457 	uint16_t messageType;   /* eWNI_SME_ADDTS_REQ */
1458 	uint16_t length;
1459 	uint8_t sessionId;      /* Session ID */
1460 	struct qdf_mac_addr bssid;      /* BSSID */
1461 	uint32_t timeout;       /* in ms */
1462 	uint8_t rspReqd;
1463 	tSirAddtsReqInfo req;
1464 } tSirAddtsReq, *tpSirAddtsReq;
1465 
1466 typedef struct sSirAddtsRsp {
1467 	uint16_t messageType;   /* eWNI_SME_ADDTS_RSP */
1468 	uint16_t length;
1469 	uint8_t sessionId;      /* sme sessionId  Added for BT-AMP support */
1470 	uint32_t rc;            /* return code */
1471 	tSirAddtsRspInfo rsp;
1472 } tSirAddtsRsp, *tpSirAddtsRsp;
1473 
1474 typedef struct sSirDeltsReq {
1475 	uint16_t messageType;   /* eWNI_SME_DELTS_REQ */
1476 	uint16_t length;
1477 	uint8_t sessionId;      /* Session ID */
1478 	struct qdf_mac_addr bssid;      /* BSSID */
1479 	uint16_t aid;           /* use 0 if macAddr is being specified */
1480 	struct qdf_mac_addr macaddr;    /* only on AP to specify the STA */
1481 	uint8_t rspReqd;
1482 	struct delts_req_info req;
1483 } tSirDeltsReq, *tpSirDeltsReq;
1484 
1485 typedef struct sSirDeltsRsp {
1486 	uint16_t messageType;   /* eWNI_SME_DELTS_RSP */
1487 	uint16_t length;
1488 	uint8_t sessionId;
1489 	uint32_t rc;
1490 	uint16_t aid;           /* use 0 if macAddr is being specified */
1491 	struct qdf_mac_addr macaddr;    /* only on AP to specify the STA */
1492 	struct delts_req_info rsp;
1493 } tSirDeltsRsp, *tpSirDeltsRsp;
1494 
1495 typedef struct sSirAggrQosReqInfo {
1496 	uint16_t tspecIdx;
1497 	tSirAddtsReqInfo aggrAddTsInfo[QCA_WLAN_AC_ALL];
1498 } tSirAggrQosReqInfo, *tpSirAggrQosReqInfo;
1499 
1500 typedef struct sSirAggrQosReq {
1501 	uint16_t messageType;   /* eWNI_SME_ADDTS_REQ */
1502 	uint16_t length;
1503 	uint8_t sessionId;      /* Session ID */
1504 	struct qdf_mac_addr bssid;      /* BSSID */
1505 	uint32_t timeout;       /* in ms */
1506 	uint8_t rspReqd;
1507 	tSirAggrQosReqInfo aggrInfo;
1508 } tSirAggrQosReq;
1509 
1510 typedef struct sSirAggrQosRspInfo {
1511 	uint16_t tspecIdx;
1512 	tSirAddtsRspInfo aggrRsp[QCA_WLAN_AC_ALL];
1513 } tSirAggrQosRspInfo, *tpSirAggrQosRspInfo;
1514 
1515 typedef struct sSirAggrQosRsp {
1516 	uint16_t messageType;
1517 	uint16_t length;
1518 	uint8_t sessionId;
1519 	tSirAggrQosRspInfo aggrInfo;
1520 } tSirAggrQosRsp, *tpSirAggrQosRsp;
1521 
1522 
1523 struct qos_map_set {
1524 	uint8_t present;
1525 	uint8_t num_dscp_exceptions;
1526 	uint8_t dscp_exceptions[QOS_MAP_MAX_EX][2];
1527 	uint8_t dscp_range[QOS_MAP_RANGE_NUM][2];
1528 };
1529 
1530 typedef struct sSmeMaxAssocInd {
1531 	uint16_t mesgType;      /* eWNI_SME_MAX_ASSOC_EXCEEDED */
1532 	uint16_t mesgLen;
1533 	uint8_t sessionId;
1534 	/* the new peer that got rejected max assoc limit reached */
1535 	struct qdf_mac_addr peer_mac;
1536 } tSmeMaxAssocInd, *tpSmeMaxAssocInd;
1537 
1538 #define SIR_MAX_NAME_SIZE 64
1539 #define SIR_MAX_TEXT_SIZE 32
1540 
1541 typedef struct sSirName {
1542 	uint8_t num_name;
1543 	uint8_t name[SIR_MAX_NAME_SIZE];
1544 } tSirName;
1545 
1546 typedef struct sSirText {
1547 	uint8_t num_text;
1548 	uint8_t text[SIR_MAX_TEXT_SIZE];
1549 } tSirText;
1550 
1551 #define SIR_WPS_PROBRSP_VER_PRESENT    0x00000001
1552 #define SIR_WPS_PROBRSP_STATE_PRESENT    0x00000002
1553 #define SIR_WPS_PROBRSP_APSETUPLOCK_PRESENT    0x00000004
1554 #define SIR_WPS_PROBRSP_SELECTEDREGISTRA_PRESENT    0x00000008
1555 #define SIR_WPS_PROBRSP_DEVICEPASSWORDID_PRESENT    0x00000010
1556 #define SIR_WPS_PROBRSP_SELECTEDREGISTRACFGMETHOD_PRESENT    0x00000020
1557 #define SIR_WPS_PROBRSP_RESPONSETYPE_PRESENT    0x00000040
1558 #define SIR_WPS_PROBRSP_UUIDE_PRESENT    0x00000080
1559 #define SIR_WPS_PROBRSP_MANUFACTURE_PRESENT    0x00000100
1560 #define SIR_WPS_PROBRSP_MODELNAME_PRESENT    0x00000200
1561 #define SIR_WPS_PROBRSP_MODELNUMBER_PRESENT    0x00000400
1562 #define SIR_WPS_PROBRSP_SERIALNUMBER_PRESENT    0x00000800
1563 #define SIR_WPS_PROBRSP_PRIMARYDEVICETYPE_PRESENT    0x00001000
1564 #define SIR_WPS_PROBRSP_DEVICENAME_PRESENT    0x00002000
1565 #define SIR_WPS_PROBRSP_CONFIGMETHODS_PRESENT    0x00004000
1566 #define SIR_WPS_PROBRSP_RF_BANDS_PRESENT    0x00008000
1567 
1568 typedef struct sSirWPSProbeRspIE {
1569 	uint32_t FieldPresent;
1570 	uint32_t Version;       /* Version. 0x10 = version 1.0, 0x11 = etc. */
1571 	uint32_t wpsState;      /* 1 = unconfigured, 2 = configured. */
1572 	bool APSetupLocked;     /* Must be included if value is true */
1573 	/*
1574 	 * BOOL:  indicates if the user has recently activated a Registrar to
1575 	 * add an Enrollee.
1576 	 */
1577 	bool SelectedRegistra;
1578 	uint16_t DevicePasswordID;      /* Device Password ID */
1579 	/* Selected Registrar config method */
1580 	uint16_t SelectedRegistraCfgMethod;
1581 	uint8_t ResponseType;   /* Response type */
1582 	uint8_t UUID_E[16];     /* Unique identifier of the AP. */
1583 	tSirName Manufacture;
1584 	tSirText ModelName;
1585 	tSirText ModelNumber;
1586 	tSirText SerialNumber;
1587 	/* Device Category ID: 1Computer, 2Input Device, ... */
1588 	uint32_t PrimaryDeviceCategory;
1589 	/* Vendor specific OUI for Device Sub Category */
1590 	uint8_t PrimaryDeviceOUI[4];
1591 	/*
1592 	   Device Sub Category ID: 1-PC, 2-Server if Device Category ID
1593 	 * is computer
1594 	 */
1595 	uint32_t DeviceSubCategory;
1596 	tSirText DeviceName;
1597 	uint16_t ConfigMethod;  /* Configuration method */
1598 	uint8_t RFBand;         /* RF bands available on the AP */
1599 } tSirWPSProbeRspIE;
1600 
1601 #define SIR_WPS_BEACON_VER_PRESENT    0x00000001
1602 #define SIR_WPS_BEACON_STATE_PRESENT    0x00000002
1603 #define SIR_WPS_BEACON_APSETUPLOCK_PRESENT    0x00000004
1604 #define SIR_WPS_BEACON_SELECTEDREGISTRA_PRESENT    0x00000008
1605 #define SIR_WPS_BEACON_DEVICEPASSWORDID_PRESENT    0x00000010
1606 #define SIR_WPS_BEACON_SELECTEDREGISTRACFGMETHOD_PRESENT    0x00000020
1607 #define SIR_WPS_BEACON_UUIDE_PRESENT    0x00000080
1608 #define SIR_WPS_BEACON_RF_BANDS_PRESENT    0x00000100
1609 #define SIR_WPS_UUID_LEN 16
1610 
1611 typedef struct sSirWPSBeaconIE {
1612 	uint32_t FieldPresent;
1613 	uint32_t Version;       /* Version. 0x10 = version 1.0, 0x11 = etc. */
1614 	uint32_t wpsState;      /* 1 = unconfigured, 2 = configured. */
1615 	bool APSetupLocked;     /* Must be included if value is true */
1616 	/*
1617 	 * BOOL:  indicates if the user has recently activated a Registrar to
1618 	 * add an Enrollee.
1619 	 */
1620 	bool SelectedRegistra;
1621 	uint16_t DevicePasswordID;      /* Device Password ID */
1622 	/* Selected Registrar config method */
1623 	uint16_t SelectedRegistraCfgMethod;
1624 	uint8_t UUID_E[SIR_WPS_UUID_LEN];     /* Unique identifier of the AP. */
1625 	uint8_t RFBand;         /* RF bands available on the AP */
1626 } tSirWPSBeaconIE;
1627 
1628 typedef struct sSirAPWPSIEs {
1629 	tSirWPSProbeRspIE SirWPSProbeRspIE;     /*WPS Set Probe Response IE */
1630 	tSirWPSBeaconIE SirWPSBeaconIE; /*WPS Set Beacon IE */
1631 } tSirAPWPSIEs, *tpSiriAPWPSIEs;
1632 
1633 struct update_config {
1634 	uint16_t messageType;   /* eWNI_SME_UPDATE_CONFIG */
1635 	uint16_t length;
1636 	uint8_t vdev_id;
1637 	uint16_t capab;
1638 	uint32_t value;
1639 };
1640 
1641 /*
1642  * enum sir_update_session_param_type - session param type
1643  * @SIR_PARAM_SSID_HIDDEN: ssidHidden parameter
1644  */
1645 enum sir_update_session_param_type {
1646 	SIR_PARAM_SSID_HIDDEN,
1647 };
1648 
1649 /*
1650  * struct sir_update_session_param
1651  * @message_type: SME message type
1652  * @length: size of struct sir_update_session_param
1653  * @vdev_id: vdev ID
1654  * @param_type: parameter to be updated
1655  * @param_val: Parameter value to update
1656  */
1657 struct sir_update_session_param {
1658 	uint16_t message_type;
1659 	uint16_t length;
1660 	uint8_t vdev_id;
1661 	uint32_t param_type;
1662 	uint32_t param_val;
1663 };
1664 
1665 /**
1666  * struct sir_set_he_bss_color
1667  * @message_type: SME message type
1668  * @length: size of struct sir_set_he_bss_color
1669  * @vdev_id: vdev ID
1670  * @bss_color: bss color value
1671  */
1672 struct sir_set_he_bss_color {
1673 	uint16_t message_type;
1674 	uint16_t length;
1675 	uint8_t vdev_id;
1676 	uint8_t bss_color;
1677 };
1678 
1679 /**
1680  * struct sir_cfg_obss_scan
1681  * @message_type: SME message type
1682  * @length: size of struct sir_cfg_obss_scan
1683  * @vdev_id: vdev ID
1684  * @is_scan_reconfig: true for NDP session
1685  */
1686 struct sir_cfg_obss_scan {
1687 	uint16_t message_type;
1688 	uint16_t length;
1689 	uint8_t vdev_id;
1690 	bool is_scan_reconfig;
1691 };
1692 
1693 /**
1694  * struct sir_create_session - Used for creating session in monitor mode
1695  * @type: SME host message type.
1696  * @msg_len: Length of the message.
1697  * @bss_id: bss_id for creating the session.
1698  */
1699 struct sir_create_session {
1700 	uint16_t type;
1701 	uint16_t msg_len;
1702 	uint8_t vdev_id;
1703 	struct qdf_mac_addr bss_id;
1704 };
1705 
1706 /**
1707  * struct sir_delete_session - Used for deleting session in monitor mode
1708  * @type: SME host message type.
1709  * @msg_len: Length of the message.
1710  * @vdev_id: vdev id.
1711  */
1712 struct sir_delete_session {
1713 	uint16_t type;
1714 	uint16_t msg_len;
1715 	uint8_t vdev_id;
1716 };
1717 
1718 #ifdef QCA_HT_2040_COEX
1719 struct set_ht2040_mode {
1720 	uint16_t messageType;
1721 	uint16_t length;
1722 	uint8_t cbMode;
1723 	bool obssEnabled;
1724 	struct qdf_mac_addr bssid;
1725 	uint8_t sessionId;      /* Session ID */
1726 };
1727 #endif
1728 
1729 #define SIR_WPS_PBC_WALK_TIME   120     /* 120 Second */
1730 
1731 typedef struct sSirWPSPBCSession {
1732 	struct sSirWPSPBCSession *next;
1733 	struct qdf_mac_addr addr;
1734 	uint8_t uuid_e[SIR_WPS_UUID_LEN];
1735 	uint32_t timestamp;
1736 } tSirWPSPBCSession;
1737 
1738 typedef struct sSirWPSPBCProbeReq {
1739 	struct qdf_mac_addr peer_macaddr;
1740 	uint16_t probeReqIELen;
1741 	uint8_t probeReqIE[512];
1742 } tSirWPSPBCProbeReq, *tpSirWPSPBCProbeReq;
1743 
1744 /* probereq from peer, when wsc is enabled */
1745 typedef struct sSirSmeProbeReqInd {
1746 	uint16_t messageType;   /*  eWNI_SME_WPS_PBC_PROBE_REQ_IND */
1747 	uint16_t length;
1748 	uint8_t sessionId;
1749 	struct qdf_mac_addr bssid;
1750 	tSirWPSPBCProbeReq WPSPBCProbeReq;
1751 } tSirSmeProbeReqInd, *tpSirSmeProbeReqInd;
1752 
1753 #define SIR_ROAM_SCAN_MAX_PB_REQ_SIZE    450
1754 /* Occupied channel list remains static */
1755 #define CHANNEL_LIST_STATIC                   1
1756 /* Occupied channel list can be dynamic */
1757 #define CHANNEL_LIST_DYNAMIC                  2
1758 
1759 /* SME -> HAL - This is the host offload request. */
1760 #define SIR_IPV6_NS_OFFLOAD                         2
1761 #define SIR_OFFLOAD_DISABLE                         0
1762 #define SIR_OFFLOAD_ENABLE                          1
1763 
1764 struct sir_host_offload_req {
1765 	uint8_t offloadType;
1766 	uint8_t enableOrDisable;
1767 	uint32_t num_ns_offload_count;
1768 	union {
1769 		uint8_t hostIpv4Addr[QDF_IPV4_ADDR_SIZE];
1770 		uint8_t hostIpv6Addr[QDF_IPV6_ADDR_SIZE];
1771 	} params;
1772 	struct qdf_mac_addr bssid;
1773 };
1774 
1775 /* Packet Types. */
1776 #define SIR_KEEP_ALIVE_NULL_PKT              1
1777 #define SIR_KEEP_ALIVE_UNSOLICIT_ARP_RSP     2
1778 #define SIR_KEEP_ALIVE_MGMT_FRAME            5
1779 
1780 /* Keep Alive request. */
1781 struct keep_alive_req {
1782 	uint8_t packetType;
1783 	uint32_t timePeriod;
1784 	tSirIpv4Addr hostIpv4Addr;
1785 	tSirIpv4Addr destIpv4Addr;
1786 	struct qdf_mac_addr dest_macaddr;
1787 	struct qdf_mac_addr bssid;
1788 	uint8_t sessionId;
1789 };
1790 
1791 /**
1792  * enum rxmgmt_flags - flags for received management frame.
1793  * @RXMGMT_FLAG_NONE: Default value to indicate no flags are set.
1794  * @RXMGMT_FLAG_EXTERNAL_AUTH: frame can be used for external authentication
1795  *			       by upper layers.
1796  */
1797 enum rxmgmt_flags {
1798 	RXMGMT_FLAG_NONE,
1799 	RXMGMT_FLAG_EXTERNAL_AUTH = 1 << 1,
1800 };
1801 
1802 typedef struct sSirSmeMgmtFrameInd {
1803 	uint16_t frame_len;
1804 	uint32_t rx_freq;
1805 	uint8_t sessionId;
1806 	uint8_t frameType;
1807 	int8_t rxRssi;
1808 	enum rxmgmt_flags rx_flags;
1809 	QDF_FLEX_ARRAY(uint8_t, frameBuf);
1810 } tSirSmeMgmtFrameInd, *tpSirSmeMgmtFrameInd;
1811 
1812 typedef void (*sir_mgmt_frame_ind_callback)(tSirSmeMgmtFrameInd *frame_ind);
1813 /**
1814  * struct sir_sme_mgmt_frame_cb_req - Register a
1815  * management frame callback req
1816  *
1817  * @message_type: message id
1818  * @length: msg length
1819  * @callback: callback for management frame indication
1820  */
1821 struct sir_sme_mgmt_frame_cb_req {
1822 	uint16_t message_type;
1823 	uint16_t length;
1824 	sir_mgmt_frame_ind_callback callback;
1825 };
1826 
1827 typedef struct sSirSmeUnprotMgmtFrameInd {
1828 	uint8_t sessionId;
1829 	uint8_t frameType;
1830 	uint8_t frameLen;
1831 	QDF_FLEX_ARRAY(uint8_t, frameBuf);
1832 } tSirSmeUnprotMgmtFrameInd, *tpSirSmeUnprotMgmtFrameInd;
1833 
1834 #ifdef WLAN_FEATURE_EXTWOW_SUPPORT
1835 
1836 typedef enum ext_wow_type {
1837 	EXT_WOW_TYPE_APP_TYPE1, /* wow type: only enable wakeup for app type1 */
1838 	EXT_WOW_TYPE_APP_TYPE2, /* wow type: only enable wakeup for app type2 */
1839 	EXT_WOW_TYPE_APP_TYPE1_2,  /* wow type: enable wakeup for app type1&2 */
1840 } EXT_WOW_TYPE;
1841 
1842 typedef struct {
1843 	uint8_t vdev_id;
1844 	EXT_WOW_TYPE type;
1845 	uint32_t wakeup_pin_num;
1846 } tSirExtWoWParams, *tpSirExtWoWParams;
1847 
1848 typedef struct {
1849 	uint8_t vdev_id;
1850 	struct qdf_mac_addr wakee_mac_addr;
1851 	uint8_t identification_id[8];
1852 	uint8_t password[16];
1853 	uint32_t id_length;
1854 	uint32_t pass_length;
1855 } tSirAppType1Params, *tpSirAppType1Params;
1856 
1857 typedef struct {
1858 	uint8_t vdev_id;
1859 
1860 	uint8_t rc4_key[16];
1861 	uint32_t rc4_key_len;
1862 
1863 	/** ip header parameter */
1864 	uint32_t ip_id;         /* NC id */
1865 	uint32_t ip_device_ip;  /* NC IP address */
1866 	uint32_t ip_server_ip;  /* Push server IP address */
1867 
1868 	/** tcp header parameter */
1869 	uint16_t tcp_src_port;  /* NC TCP port */
1870 	uint16_t tcp_dst_port;  /* Push server TCP port */
1871 	uint32_t tcp_seq;
1872 	uint32_t tcp_ack_seq;
1873 
1874 	uint32_t keepalive_init;        /* Initial ping interval */
1875 	uint32_t keepalive_min; /* Minimum ping interval */
1876 	uint32_t keepalive_max; /* Maximum ping interval */
1877 	uint32_t keepalive_inc; /* Increment of ping interval */
1878 
1879 	struct qdf_mac_addr gateway_mac;
1880 	uint32_t tcp_tx_timeout_val;
1881 	uint32_t tcp_rx_timeout_val;
1882 } tSirAppType2Params, *tpSirAppType2Params;
1883 #endif
1884 
1885 #ifdef WLAN_FEATURE_ROAM_OFFLOAD
1886 typedef struct {
1887 	uint8_t acvo_uapsd:1;
1888 	uint8_t acvi_uapsd:1;
1889 	uint8_t acbk_uapsd:1;
1890 	uint8_t acbe_uapsd:1;
1891 	uint8_t reserved:4;
1892 } tSirAcUapsd, *tpSirAcUapsd;
1893 #endif
1894 
1895 /**
1896  * struct pmkid_mode_bits - Bit flags for PMKID usage in RSN IE
1897  * @fw_okc: Opportunistic key caching enable in firmware
1898  * @fw_pmksa_cache: PMKSA caching enable in firmware, remember previously
1899  *                  visited BSSID/PMK pairs
1900  */
1901 struct pmkid_mode_bits {
1902 	uint32_t fw_okc:1;
1903 	uint32_t fw_pmksa_cache:1;
1904 	uint32_t unused:30;
1905 };
1906 
1907 /**
1908  * struct roam_init_params - Firmware roam module initialization parameters
1909  * @vdev_id: vdev for which the roaming has to be enabled/disabled
1910  * @enable:  flag to init/deinit roam module
1911  */
1912 struct roam_init_params {
1913 	uint8_t vdev_id;
1914 	uint8_t enable;
1915 };
1916 
1917 /**
1918  * struct roam_sync_timeout_timer_info - Info related to roam sync timer
1919  * @vdev_id: Vdev id for which host waiting roam sync ind from fw
1920  */
1921 struct roam_sync_timeout_timer_info {
1922 	uint8_t vdev_id;
1923 };
1924 
1925 struct roam_offload_scan_rsp {
1926 	uint8_t sessionId;
1927 	uint32_t reason;
1928 };
1929 
1930 /*---------------------------------------------------------------------------
1931    Packet Filtering Parameters
1932    ---------------------------------------------------------------------------*/
1933 #define    SIR_MAX_FILTER_TEST_DATA_LEN       8
1934 #define    SIR_MAX_FILTER_TEST_DATA_OFFSET  200
1935 #define    SIR_MAX_NUM_MULTICAST_ADDRESS    240
1936 
1937 /* */
1938 /* Multicast Address List Parameters */
1939 /* */
1940 typedef struct sSirRcvFltMcAddrList {
1941 	uint32_t ulMulticastAddrCnt;
1942 	struct qdf_mac_addr multicastAddr[SIR_MAX_NUM_MULTICAST_ADDRESS];
1943 	struct qdf_mac_addr self_macaddr;
1944 	struct qdf_mac_addr bssid;
1945 	uint8_t action;
1946 } tSirRcvFltMcAddrList, *tpSirRcvFltMcAddrList;
1947 
1948 /**
1949  * struct sir_wifi_start_log - Structure to store the params sent to start/
1950  * stop logging
1951  * @name:          Attribute which indicates the type of logging like per packet
1952  *                 statistics, connectivity etc.
1953  * @verbose_level: Verbose level which can be 0,1,2,3
1954  * @is_iwpriv_command: Set 1 for iwpriv command
1955  * @ini_triggered: triggered using ini
1956  * @user_triggered: triggered by user
1957  * @size: pktlog buffer size
1958  * @is_pktlog_buff_clear: clear the pktlog buffer
1959  */
1960 struct sir_wifi_start_log {
1961 	uint32_t ring_id;
1962 	uint32_t verbose_level;
1963 	uint32_t is_iwpriv_command;
1964 	bool ini_triggered;
1965 	uint8_t user_triggered;
1966 	int size;
1967 	bool is_pktlog_buff_clear;
1968 };
1969 
1970 
1971 /**
1972  * struct sir_pcl_list - Format of PCL
1973  * @pcl_list: List of preferred channels
1974  * @weight_list: Weights of the PCL
1975  * @pcl_len: Number of channels in the PCL
1976  */
1977 struct sir_pcl_list {
1978 	uint32_t pcl_len;
1979 	uint8_t pcl_list[NUM_CHANNELS];
1980 	uint8_t weight_list[NUM_CHANNELS];
1981 };
1982 
1983 /**
1984  * struct sir_pcl_chan_weights - Params to get the valid weighed list
1985  * @pcl_list: Preferred channel list already sorted in the order of preference
1986  * @pcl_len: Length of the PCL
1987  * @saved_chan_list: Valid channel list updated as part of
1988  * WMA_UPDATE_CHAN_LIST_REQ
1989  * @saved_num_chan: Length of the valid channel list
1990  * @weighed_valid_list: Weights of the valid channel list. This will have one
1991  * to one mapping with valid_chan_list. FW expects channel order and size to be
1992  * as per the list provided in WMI_SCAN_CHAN_LIST_CMDID.
1993  * @weight_list: Weights assigned by policy manager
1994  */
1995 struct sir_pcl_chan_weights {
1996 	uint8_t pcl_list[NUM_CHANNELS];
1997 	uint32_t pcl_len;
1998 	uint8_t saved_chan_list[NUM_CHANNELS];
1999 	uint32_t saved_num_chan;
2000 	uint8_t weighed_valid_list[NUM_CHANNELS];
2001 	uint8_t weight_list[NUM_CHANNELS];
2002 };
2003 
2004 /**
2005  * struct sir_hw_mode_params - HW mode params
2006  * @mac0_tx_ss: MAC0 Tx spatial stream
2007  * @mac0_rx_ss: MAC0 Rx spatial stream
2008  * @mac1_tx_ss: MAC1 Tx spatial stream
2009  * @mac1_rx_ss: MAC1 Rx spatial stream
2010  * @mac0_bw: MAC0 bandwidth
2011  * @mac1_bw: MAC1 bandwidth
2012  * @dbs_cap: DBS capabality
2013  * @agile_dfs_cap: Agile DFS capabality
2014  */
2015 struct sir_hw_mode_params {
2016 	uint8_t mac0_tx_ss;
2017 	uint8_t mac0_rx_ss;
2018 	uint8_t mac1_tx_ss;
2019 	uint8_t mac1_rx_ss;
2020 	uint8_t mac0_bw;
2021 	uint8_t mac1_bw;
2022 	uint8_t dbs_cap;
2023 	uint8_t agile_dfs_cap;
2024 	uint8_t sbs_cap;
2025 };
2026 
2027 /**
2028  * struct sir_set_hw_mode_resp - HW mode response
2029  * @status: Status
2030  * @cfgd_hw_mode_index: Configured HW mode index
2031  * @num_vdev_mac_entries: Number of vdev-mac id entries
2032  * @vdev_mac_map: vdev id-mac id map
2033  */
2034 struct sir_set_hw_mode_resp {
2035 	uint32_t status;
2036 	uint32_t cfgd_hw_mode_index;
2037 	uint32_t num_vdev_mac_entries;
2038 	struct policy_mgr_vdev_mac_map vdev_mac_map[MAX_VDEV_SUPPORTED];
2039 };
2040 
2041 /**
2042  * struct sir_dual_mac_config_resp - Dual MAC config response
2043  * @status: Status of setting the dual mac configuration
2044  */
2045 struct sir_dual_mac_config_resp {
2046 	uint32_t status;
2047 };
2048 
2049 /**
2050  * enum set_antenna_mode_status - Status of set antenna mode
2051  * command
2052  * @SET_ANTENNA_MODE_STATUS_OK: command successful
2053  * @SET_ANTENNA_MODE_STATUS_EINVAL: invalid antenna mode
2054  * @SET_ANTENNA_MODE_STATUS_ECANCELED: mode change cancelled
2055  * @SET_ANTENNA_MODE_STATUS_ENOTSUP: mode not supported
2056  */
2057 enum set_antenna_mode_status {
2058 	SET_ANTENNA_MODE_STATUS_OK,
2059 	SET_ANTENNA_MODE_STATUS_EINVAL,
2060 	SET_ANTENNA_MODE_STATUS_ECANCELED,
2061 	SET_ANTENNA_MODE_STATUS_ENOTSUP,
2062 };
2063 
2064 /**
2065  * struct sir_antenna_mode_resp - set antenna mode response
2066  * @status: Status of setting the antenna mode
2067  */
2068 struct sir_antenna_mode_resp {
2069 	enum set_antenna_mode_status status;
2070 };
2071 
2072 typedef struct sSirWlanExcludeUnencryptParam {
2073 	bool excludeUnencrypt;
2074 	struct qdf_mac_addr bssid;
2075 } tSirWlanExcludeUnencryptParam, *tpSirWlanExcludeUnencryptParam;
2076 
2077 typedef enum {
2078 	P2P_SCAN_TYPE_SEARCH = 1,       /* P2P Search */
2079 	P2P_SCAN_TYPE_LISTEN    /* P2P Listen */
2080 } tSirP2pScanType;
2081 
2082 typedef struct sAniHandoffReq {
2083 	/* Common for all types are requests */
2084 	uint16_t msgType;       /* message type is same as the request type */
2085 	uint16_t msgLen;        /* length of the entire request */
2086 	uint8_t sessionId;
2087 	uint8_t bssid[QDF_MAC_ADDR_SIZE];
2088 	uint32_t ch_freq;
2089 	uint8_t handoff_src;
2090 } tAniHandoffReq, *tpAniHandoffReq;
2091 
2092 /**
2093  * sir_scan_event_type - scan event types used in LIM
2094  * @SIR_SCAN_EVENT_STARTED - scan command accepted by FW
2095  * @SIR_SCAN_EVENT_COMPLETED - scan has been completed by FW
2096  * @SIR_SCAN_EVENT_BSS_CHANNEL - FW is going to move to HOME channel
2097  * @SIR_SCAN_EVENT_FOREIGN_CHANNEL - FW is going to move to FOREIGN channel
2098  * @SIR_SCAN_EVENT_DEQUEUED - scan request got dequeued
2099  * @SIR_SCAN_EVENT_PREEMPTED - preempted by other high priority scan
2100  * @SIR_SCAN_EVENT_START_FAILED - scan start failed
2101  * @SIR_SCAN_EVENT_RESTARTED - scan restarted
2102  * @SIR_SCAN_EVENT_MAX - max value for event type
2103 */
2104 enum sir_scan_event_type {
2105 	SIR_SCAN_EVENT_STARTED = 0x1,
2106 	SIR_SCAN_EVENT_COMPLETED = 0x2,
2107 	SIR_SCAN_EVENT_BSS_CHANNEL = 0x4,
2108 	SIR_SCAN_EVENT_FOREIGN_CHANNEL = 0x8,
2109 	SIR_SCAN_EVENT_DEQUEUED = 0x10,
2110 	SIR_SCAN_EVENT_PREEMPTED = 0x20,
2111 	SIR_SCAN_EVENT_START_FAILED = 0x40,
2112 	SIR_SCAN_EVENT_RESTARTED = 0x80,
2113 	SIR_SCAN_EVENT_MAX = 0x8000
2114 };
2115 
2116 typedef struct sSirScanOffloadEvent {
2117 	enum sir_scan_event_type event;
2118 	tSirResultCodes reasonCode;
2119 	uint32_t chanFreq;
2120 	uint32_t requestor;
2121 	uint32_t scanId;
2122 	tSirP2pScanType p2pScanType;
2123 	uint8_t sessionId;
2124 } tSirScanOffloadEvent, *tpSirScanOffloadEvent;
2125 
2126 /**
2127  * struct sSirUpdateChanParam - channel parameters
2128  * @freq: Frequency of the channel
2129  * @pwr: power level
2130  * @dfsSet: is dfs supported or not
2131  * @half_rate: is the channel operating at 10MHz
2132  * @quarter_rate: is the channel operating at 5MHz
2133  * @nan_disabled: is NAN disabled on @freq
2134  */
2135 typedef struct sSirUpdateChanParam {
2136 	uint32_t freq;
2137 	uint8_t pwr;
2138 	bool dfsSet;
2139 	bool half_rate;
2140 	bool quarter_rate;
2141 	bool nan_disabled;
2142 } tSirUpdateChanParam, *tpSirUpdateChanParam;
2143 
2144 typedef struct sSirUpdateChan {
2145 	uint8_t numChan;
2146 	uint8_t ht_en;
2147 	uint8_t vht_en;
2148 	uint8_t vht_24_en;
2149 	bool he_en;
2150 	bool eht_en;
2151 	QDF_FLEX_ARRAY(tSirUpdateChanParam, chanParam);
2152 } tSirUpdateChanList, *tpSirUpdateChanList;
2153 
2154 typedef enum eSirAddonPsReq {
2155 	eSIR_ADDON_NOTHING,
2156 	eSIR_ADDON_ENABLE_UAPSD,
2157 	eSIR_ADDON_DISABLE_UAPSD
2158 } tSirAddonPsReq;
2159 
2160 #ifdef FEATURE_WLAN_CH_AVOID
2161 typedef struct sSirChAvoidUpdateReq {
2162 	uint32_t reserved_param;
2163 } tSirChAvoidUpdateReq;
2164 #endif /* FEATURE_WLAN_CH_AVOID */
2165 
2166 struct link_speed_info {
2167 	/* MAC Address for the peer */
2168 	struct qdf_mac_addr peer_macaddr;
2169 	uint32_t estLinkSpeed;  /* Linkspeed from firmware */
2170 };
2171 
2172 /**
2173  * struct sir_isolation_resp - isolation info related structure
2174  * @isolation_chain0: isolation value for chain 0
2175  * @isolation_chain1: isolation value for chain 1
2176  * @isolation_chain2: isolation value for chain 2
2177  * @isolation_chain3: isolation value for chain 3
2178  */
2179 struct sir_isolation_resp {
2180 	uint32_t isolation_chain0:8,
2181 		 isolation_chain1:8,
2182 		 isolation_chain2:8,
2183 		 isolation_chain3:8;
2184 };
2185 
2186 typedef struct sSirAddPeriodicTxPtrn {
2187 	/* MAC Address for the adapter */
2188 	struct qdf_mac_addr mac_address;
2189 	uint8_t ucPtrnId;       /* Pattern ID */
2190 	uint16_t ucPtrnSize;    /* Pattern size */
2191 	uint32_t usPtrnIntervalMs;      /* In msec */
2192 	uint8_t ucPattern[PERIODIC_TX_PTRN_MAX_SIZE];   /* Pattern buffer */
2193 } tSirAddPeriodicTxPtrn, *tpSirAddPeriodicTxPtrn;
2194 
2195 typedef struct sSirDelPeriodicTxPtrn {
2196 	/* MAC Address for the adapter */
2197 	struct qdf_mac_addr mac_address;
2198 	uint8_t ucPtrnId;       /* Pattern ID */
2199 } tSirDelPeriodicTxPtrn, *tpSirDelPeriodicTxPtrn;
2200 
2201 #ifdef WLAN_FEATURE_EXTWOW_SUPPORT
2202 typedef struct {
2203 	uint16_t mesgType;
2204 	uint16_t mesgLen;
2205 	bool status;
2206 } tSirReadyToExtWoWInd, *tpSirReadyToExtWoWInd;
2207 #endif
2208 typedef struct sSirRateUpdateInd {
2209 	uint8_t nss;            /* 0: 1x1, 1: 2x2 */
2210 	struct qdf_mac_addr bssid;
2211 	enum QDF_OPMODE dev_mode;
2212 	int32_t bcastDataRate;  /* bcast rate unit Mbpsx10, -1:not used */
2213 
2214 	/*
2215 	 * 0 implies MCAST RA, positive value implies fixed rate,
2216 	 * -1 implies ignore this param
2217 	 */
2218 	int32_t reliableMcastDataRate;  /* unit Mbpsx10 */
2219 
2220 	/* TX flag to differentiate between HT20, HT40 etc */
2221 	enum tx_rate_info reliableMcastDataRateTxFlag;
2222 
2223 	/*
2224 	 * MCAST(or BCAST) fixed data rate in 2.4 GHz, unit Mbpsx10,
2225 	 * 0 implies ignore
2226 	 */
2227 	uint32_t mcastDataRate24GHz;
2228 
2229 	/* TX flag to differentiate between HT20, HT40 etc */
2230 	enum tx_rate_info mcastDataRate24GHzTxFlag;
2231 
2232 	/*
2233 	 * MCAST(or BCAST) fixed data rate in 5 GHz,
2234 	 * unit Mbpsx10, 0 implies ignore
2235 	 */
2236 	uint32_t mcastDataRate5GHz;
2237 
2238 	/* TX flag to differentiate between HT20, HT40 etc */
2239 	enum tx_rate_info mcastDataRate5GHzTxFlag;
2240 
2241 } tSirRateUpdateInd, *tpSirRateUpdateInd;
2242 
2243 #define SIR_DFS_MAX_20M_SUB_CH 8
2244 #define SIR_80MHZ_START_CENTER_CH_DIFF 6
2245 
2246 typedef struct sSirSmeDfsChannelList {
2247 	uint32_t nchannels;
2248 	/* Ch num including bonded channels on which the RADAR is present */
2249 	uint8_t channels[SIR_DFS_MAX_20M_SUB_CH];
2250 } tSirSmeDfsChannelList, *tpSirSmeDfsChannelList;
2251 
2252 typedef struct sSirChanChangeResponse {
2253 	uint8_t sessionId;
2254 	uint32_t new_op_freq;
2255 	uint8_t channelChangeStatus;
2256 } tSirChanChangeResponse, *tpSirChanChangeResponse;
2257 
2258 typedef struct sSirStartBeaconIndication {
2259 	uint16_t messageType;
2260 	uint16_t messageLen;
2261 	uint8_t beaconStartStatus;
2262 	uint8_t bssid[QDF_MAC_ADDR_SIZE];
2263 } tSirStartBeaconIndication, *tpSirStartBeaconIndication;
2264 
2265 /* additional IE type */
2266 typedef enum tUpdateIEsType {
2267 	eUPDATE_IE_NONE,
2268 	eUPDATE_IE_PROBE_BCN,
2269 	eUPDATE_IE_PROBE_RESP,
2270 	eUPDATE_IE_ASSOC_RESP,
2271 
2272 	/* Add type above this line */
2273 	/* this is used to reset all buffer */
2274 	eUPDATE_IE_ALL,
2275 	eUPDATE_IE_MAX
2276 } eUpdateIEsType;
2277 
2278 /* Modify particular IE in addition IE for prob resp Bcn */
2279 typedef struct sSirModifyIE {
2280 	struct qdf_mac_addr bssid;
2281 	uint16_t vdev_id;
2282 	bool notify;
2283 	uint8_t ieID;
2284 	uint8_t ieIDLen;        /*ie length as per spec */
2285 	uint16_t ieBufferlength;
2286 	uint8_t *pIEBuffer;
2287 	int32_t oui_length;
2288 
2289 } tSirModifyIE, *tpSirModifyIE;
2290 
2291 struct send_add_ba_req {
2292 	uint8_t mac_addr[QDF_MAC_ADDR_SIZE];
2293 	struct addba_send_params param;
2294 };
2295 
2296 /* Message format for Update IE message sent to PE  */
2297 typedef struct sSirModifyIEsInd {
2298 	uint16_t msgType;
2299 	uint16_t msgLen;
2300 	tSirModifyIE modifyIE;
2301 	eUpdateIEsType updateType;
2302 } tSirModifyIEsInd, *tpSirModifyIEsInd;
2303 
2304 /* Message format for Update IE message sent to PE  */
2305 typedef struct sSirUpdateIE {
2306 	struct qdf_mac_addr bssid;
2307 	uint16_t vdev_id;
2308 	bool append;
2309 	bool notify;
2310 	uint16_t ieBufferlength;
2311 	uint8_t *pAdditionIEBuffer;
2312 } tSirUpdateIE, *tpSirUpdateIE;
2313 
2314 /* Message format for Update IE message sent to PE  */
2315 typedef struct sSirUpdateIEsInd {
2316 	uint16_t msgType;
2317 	uint16_t msgLen;
2318 	tSirUpdateIE updateIE;
2319 	eUpdateIEsType updateType;
2320 } tSirUpdateIEsInd, *tpSirUpdateIEsInd;
2321 
2322 /* Message format for requesting channel switch announcement to lower layers */
2323 typedef struct sSirDfsCsaIeRequest {
2324 	uint16_t msgType;
2325 	uint16_t msgLen;
2326 	uint32_t target_chan_freq;
2327 	uint8_t csaIeRequired;
2328 	uint8_t bssid[QDF_MAC_ADDR_SIZE];
2329 	struct ch_params ch_params;
2330 	uint8_t  ch_switch_beacon_cnt;
2331 	uint8_t  ch_switch_mode;
2332 	uint8_t  dfs_ch_switch_disable;
2333 	uint32_t new_chan_cac_ms;
2334 } tSirDfsCsaIeRequest, *tpSirDfsCsaIeRequest;
2335 
2336 /* Indication from lower layer indicating the completion of first beacon send
2337  * after the beacon template update
2338  */
2339 typedef struct sSirFirstBeaconTxCompleteInd {
2340 	uint16_t messageType;   /* eWNI_SME_MISSED_BEACON_IND */
2341 	uint16_t length;
2342 	uint8_t bss_idx;
2343 } tSirFirstBeaconTxCompleteInd, *tpSirFirstBeaconTxCompleteInd;
2344 
2345 typedef struct sSirSmeCSAIeTxCompleteRsp {
2346 	uint8_t sessionId;
2347 	uint8_t chanSwIeTxStatus;
2348 } tSirSmeCSAIeTxCompleteRsp, *tpSirSmeCSAIeTxCompleteRsp;
2349 
2350 /* Thermal Mitigation*/
2351 
2352 typedef struct {
2353 	uint16_t minTempThreshold;
2354 	uint16_t maxTempThreshold;
2355 } t_thermal_level_info, *tp_thermal_level_info;
2356 
2357 typedef enum {
2358 	WLAN_WMA_THERMAL_LEVEL_0,
2359 	WLAN_WMA_THERMAL_LEVEL_1,
2360 	WLAN_WMA_THERMAL_LEVEL_2,
2361 	WLAN_WMA_THERMAL_LEVEL_3,
2362 	WLAN_WMA_THERMAL_LEVEL_4,
2363 	WLAN_WMA_THERMAL_LEVEL_5,
2364 	WLAN_WMA_MAX_THERMAL_LEVELS
2365 } t_thermal_level;
2366 
2367 #define WLAN_THROTTLE_DUTY_CYCLE_LEVEL_MAX (6)
2368 
2369 typedef struct {
2370 	/* Array of thermal levels */
2371 	t_thermal_level_info thermalLevels[WLAN_WMA_MAX_THERMAL_LEVELS];
2372 	uint8_t thermalCurrLevel;
2373 	uint8_t thermalMgmtEnabled;
2374 	uint32_t throttlePeriod;
2375 	uint8_t throttle_duty_cycle_tbl[WLAN_THROTTLE_DUTY_CYCLE_LEVEL_MAX];
2376 	enum thermal_mgmt_action_code thermal_action;
2377 } t_thermal_mgmt, *tp_thermal_mgmt;
2378 
2379 struct tx_power_limit {
2380 	/* Thermal limits for 2g and 5g */
2381 	uint32_t txPower2g;
2382 	uint32_t txPower5g;
2383 };
2384 
2385 enum bad_peer_thresh_levels {
2386 	WLAN_WMA_IEEE80211_B_LEVEL = 0,
2387 	WLAN_WMA_IEEE80211_AG_LEVEL,
2388 	WLAN_WMA_IEEE80211_N_LEVEL,
2389 	WLAN_WMA_IEEE80211_AC_LEVEL,
2390 	WLAN_WMA_IEEE80211_AX_LEVEL,
2391 	WLAN_WMA_IEEE80211_MAX_LEVEL,
2392 };
2393 
2394 #define NUM_OF_RATE_THRESH_MAX    (4)
2395 struct t_bad_peer_info {
2396 	uint32_t cond;
2397 	uint32_t delta;
2398 	uint32_t percentage;
2399 	uint32_t thresh[NUM_OF_RATE_THRESH_MAX];
2400 	uint32_t txlimit;
2401 };
2402 
2403 struct t_bad_peer_txtcl_config {
2404 	/* Array of thermal levels */
2405 	struct t_bad_peer_info threshold[WLAN_WMA_IEEE80211_MAX_LEVEL];
2406 	uint32_t enable;
2407 	uint32_t period;
2408 	uint32_t txq_limit;
2409 	uint32_t tgt_backoff;
2410 	uint32_t tgt_report_prd;
2411 };
2412 
2413 /* notify MODEM power state to FW */
2414 typedef struct {
2415 	uint32_t param;
2416 } tSirModemPowerStateInd, *tpSirModemPowerStateInd;
2417 
2418 #ifdef WLAN_FEATURE_STATS_EXT
2419 typedef struct {
2420 	uint32_t vdev_id;
2421 	uint32_t event_data_len;
2422 	uint8_t event_data[];
2423 } tSirStatsExtEvent, *tpSirStatsExtEvent;
2424 #endif
2425 
2426 /**
2427  * struct sir_wisa_params - WISA Mode Parameters
2428  * @mode: WISA mode
2429  * @session_id: Session ID of vdev
2430  */
2431 struct sir_wisa_params {
2432 	bool mode;
2433 	uint8_t vdev_id;
2434 };
2435 
2436 /**
2437  * typedef enum wifi_scan_flags - wifi scan flags
2438  * @WIFI_SCAN_FLAG_INTERRUPTED: Indicates that scan results are not complete
2439  *				because probes were not sent on some channels
2440  */
2441 typedef enum {
2442 	WIFI_SCAN_FLAG_INTERRUPTED = 1,
2443 } wifi_scan_flags;
2444 
2445 typedef enum {
2446 	WIFI_BAND_UNSPECIFIED,
2447 	WIFI_BAND_BG = 1,       /* 2.4 GHz */
2448 	WIFI_BAND_A = 2,        /* 5 GHz without DFS */
2449 	WIFI_BAND_ABG = 3,      /* 2.4 GHz + 5 GHz; no DFS */
2450 	WIFI_BAND_A_DFS_ONLY = 4,       /* 5 GHz DFS only */
2451 	/* 5 is reserved */
2452 	WIFI_BAND_A_WITH_DFS = 6,       /* 5 GHz with DFS */
2453 	WIFI_BAND_ABG_WITH_DFS = 7,     /* 2.4 GHz + 5 GHz with DFS */
2454 
2455 	/* Keep it last */
2456 	WIFI_BAND_MAX
2457 } tWifiBand;
2458 
2459 #ifdef FEATURE_WLAN_EXTSCAN
2460 
2461 #define WLAN_EXTSCAN_MAX_CHANNELS                 36
2462 #define WLAN_EXTSCAN_MAX_BUCKETS                  16
2463 #define WLAN_EXTSCAN_MAX_SIGNIFICANT_CHANGE_APS   64
2464 
2465 typedef enum {
2466 	eSIR_EXTSCAN_INVALID,
2467 	eSIR_EXTSCAN_START_RSP,
2468 	eSIR_EXTSCAN_STOP_RSP,
2469 	eSIR_EXTSCAN_CACHED_RESULTS_RSP,
2470 	eSIR_EXTSCAN_SET_BSSID_HOTLIST_RSP,
2471 	eSIR_EXTSCAN_RESET_BSSID_HOTLIST_RSP,
2472 	eSIR_EXTSCAN_SET_SIGNIFICANT_WIFI_CHANGE_RSP,
2473 	eSIR_EXTSCAN_RESET_SIGNIFICANT_WIFI_CHANGE_RSP,
2474 
2475 	eSIR_EXTSCAN_GET_CAPABILITIES_IND,
2476 	eSIR_EXTSCAN_HOTLIST_MATCH_IND,
2477 	eSIR_EXTSCAN_SIGNIFICANT_WIFI_CHANGE_RESULTS_IND,
2478 	eSIR_EXTSCAN_CACHED_RESULTS_IND,
2479 	eSIR_EXTSCAN_SCAN_RES_AVAILABLE_IND,
2480 	eSIR_EXTSCAN_SCAN_PROGRESS_EVENT_IND,
2481 	eSIR_EXTSCAN_FULL_SCAN_RESULT_IND,
2482 	eSIR_EPNO_NETWORK_FOUND_IND,
2483 	eSIR_PASSPOINT_NETWORK_FOUND_IND,
2484 	eSIR_EXTSCAN_SET_SSID_HOTLIST_RSP,
2485 	eSIR_EXTSCAN_RESET_SSID_HOTLIST_RSP,
2486 
2487 	/* Keep this last */
2488 	eSIR_EXTSCAN_CALLBACK_TYPE_MAX,
2489 } tSirExtScanCallbackType;
2490 
2491 /**
2492  * enum wifi_extscan_event_type - extscan event type
2493  * @WIFI_EXTSCAN_RESULTS_AVAILABLE: reported when REPORT_EVENTS_EACH_SCAN is set
2494  *		and a scan cycle completes. WIFI_SCAN_THRESHOLD_NUM_SCANS or
2495  *		WIFI_SCAN_THRESHOLD_PERCENT can be reported instead if the
2496  *		reason for the event is available; however, at most one of
2497  *		these events should be reported per scan.
2498  * @WIFI_EXTSCAN_THRESHOLD_NUM_SCANS: can be reported when
2499  *		REPORT_EVENTS_EACH_SCAN is not set and
2500  *		report_threshold_num_scans is reached.
2501  * @WIFI_EXTSCAN_THRESHOLD_PERCENT: can be reported when REPORT_EVENTS_EACH_SCAN
2502  *		is not set and report_threshold_percent is reached.
2503  * @WIFI_SCAN_DISABLED: reported when currently executing gscans are disabled
2504  *		start_gscan will need to be called again in order to continue
2505  *		scanning.
2506  * @WIFI_EXTSCAN_BUCKET_STARTED_EVENT: Bucket started event
2507  *		This event is consumed in driver only.
2508  * @WIFI_EXTSCAN_CYCLE_STARTED_EVENT: Cycle started event.
2509  *		This event is consumed in driver only.
2510  * @WIFI_EXTSCAN_CYCLE_COMPLETED_EVENT: Cycle complete event. This event
2511  *		triggers @WIFI_EXTSCAN_RESULTS_AVAILABLE to the user space.
2512  */
2513 enum wifi_extscan_event_type {
2514 	WIFI_EXTSCAN_RESULTS_AVAILABLE,
2515 	WIFI_EXTSCAN_THRESHOLD_NUM_SCANS,
2516 	WIFI_EXTSCAN_THRESHOLD_PERCENT,
2517 	WIFI_SCAN_DISABLED,
2518 
2519 	WIFI_EXTSCAN_BUCKET_STARTED_EVENT = 0x10,
2520 	WIFI_EXTSCAN_CYCLE_STARTED_EVENT,
2521 	WIFI_EXTSCAN_CYCLE_COMPLETED_EVENT,
2522 };
2523 
2524 /**
2525  * enum extscan_configuration_flags - extscan config flags
2526  * @EXTSCAN_LP_EXTENDED_BATCHING: extended batching
2527  */
2528 enum extscan_configuration_flags {
2529 	EXTSCAN_LP_EXTENDED_BATCHING = 0x00000001,
2530 };
2531 
2532 /**
2533  * struct ext_scan_capabilities_response - extscan capabilities response data
2534  * @requestId: request identifier
2535  * @status:    status
2536  * @max_scan_cache_size: total space allocated for scan (in bytes)
2537  * @max_scan_buckets: maximum number of channel buckets
2538  * @max_ap_cache_per_scan: maximum number of APs that can be stored per scan
2539  * @max_rssi_sample_size: number of RSSI samples used for averaging RSSI
2540  * @ax_scan_reporting_threshold: max possible report_threshold
2541  * @max_hotlist_bssids: maximum number of entries for hotlist APs
2542  * @max_significant_wifi_change_aps: maximum number of entries for
2543  *				significant wifi change APs
2544  * @max_bssid_history_entries: number of BSSID/RSSI entries that device can hold
2545  * @max_hotlist_ssids: maximum number of entries for hotlist SSIDs
2546  * @max_number_epno_networks: max number of epno entries
2547  * @max_number_epno_networks_by_ssid: max number of epno entries
2548  *			if ssid is specified, that is, epno entries for
2549  *			which an exact match is required,
2550  *			or entries corresponding to hidden ssids
2551  * @max_number_of_allow_listed_ssid: max number of allow listed SSIDs
2552  * @max_number_of_deny_listed_bssid: max number of deny listed BSSIDs
2553  */
2554 struct ext_scan_capabilities_response {
2555 	uint32_t requestId;
2556 	uint32_t status;
2557 
2558 	uint32_t max_scan_cache_size;
2559 	uint32_t max_scan_buckets;
2560 	uint32_t max_ap_cache_per_scan;
2561 	uint32_t max_rssi_sample_size;
2562 	uint32_t max_scan_reporting_threshold;
2563 
2564 	uint32_t max_hotlist_bssids;
2565 	uint32_t max_significant_wifi_change_aps;
2566 
2567 	uint32_t max_bssid_history_entries;
2568 	uint32_t max_hotlist_ssids;
2569 	uint32_t max_number_epno_networks;
2570 	uint32_t max_number_epno_networks_by_ssid;
2571 	uint32_t max_number_of_allow_listed_ssid;
2572 	uint32_t max_number_of_deny_listed_bssid;
2573 };
2574 
2575 typedef struct {
2576 	/* Time of discovery */
2577 	uint64_t ts;
2578 
2579 	/* Null terminated SSID */
2580 	uint8_t ssid[WLAN_SSID_MAX_LEN + 1];
2581 
2582 	struct qdf_mac_addr bssid;
2583 
2584 	/* Frequency in MHz */
2585 	uint32_t channel;
2586 
2587 	/* RSSI in dBm */
2588 	int32_t rssi;
2589 
2590 	/* RTT in nanoseconds */
2591 	uint32_t rtt;
2592 
2593 	/* Standard deviation in rtt */
2594 	uint32_t rtt_sd;
2595 
2596 	/* Period advertised in the beacon */
2597 	uint16_t beaconPeriod;
2598 
2599 	/* Capabilities advertised in the beacon */
2600 	uint16_t capability;
2601 
2602 	uint16_t ieLength;
2603 
2604 	uint8_t ieData[];
2605 } tSirWifiScanResult, *tpSirWifiScanResult;
2606 
2607 /**
2608  * struct extscan_hotlist_match - extscan hotlist match
2609  * @requestId: request identifier
2610  * @numOfAps: number of bssids retrieved by the scan
2611  * @moreData: 0 - for last fragment
2612  *	      1 - still more fragment(s) coming
2613  * @ap: wifi scan result
2614  */
2615 struct extscan_hotlist_match {
2616 	uint32_t    requestId;
2617 	bool        moreData;
2618 	bool        ap_found;
2619 	uint32_t    numOfAps;
2620 	tSirWifiScanResult   ap[];
2621 };
2622 
2623 /**
2624  * struct extscan_cached_scan_result - extscan cached scan result
2625  * @scan_id: a unique identifier for the scan unit
2626  * @flags: a bitmask with additional information about scan
2627  * @num_results: number of bssids retrieved by the scan
2628  * @buckets_scanned: bitmask of buckets scanned in current extscan cycle
2629  * @ap: wifi scan bssid results info
2630  */
2631 struct extscan_cached_scan_result {
2632 	uint32_t    scan_id;
2633 	uint32_t    flags;
2634 	uint32_t    num_results;
2635 	uint32_t    buckets_scanned;
2636 	tSirWifiScanResult *ap;
2637 };
2638 
2639 /**
2640  * struct extscan_cached_scan_results - extscan cached scan results
2641  * @request_id: request identifier
2642  * @more_data: 0 - for last fragment
2643  *	       1 - still more fragment(s) coming
2644  * @num_scan_ids: number of scan ids
2645  * @result: wifi scan result
2646  */
2647 struct extscan_cached_scan_results {
2648 	uint32_t    request_id;
2649 	bool        more_data;
2650 	uint32_t    num_scan_ids;
2651 	struct extscan_cached_scan_result  *result;
2652 };
2653 
2654 
2655 /**
2656  * struct tSirWifiFullScanResultEvent - extscan full scan event
2657  * @request_id: request identifier
2658  * @moreData: 0 - for last fragment
2659  *             1 - still more fragment(s) coming
2660  * @ap: bssid info
2661  *
2662  * Reported when each probe response is received, if report_events
2663  * enabled in struct wifi_scan_cmd_req_params
2664  */
2665 typedef struct {
2666 	uint32_t            requestId;
2667 	bool                moreData;
2668 	tSirWifiScanResult  ap;
2669 } tSirWifiFullScanResultEvent, *tpSirWifiFullScanResultEvent;
2670 
2671 /**
2672  * struct pno_match_found - epno match found
2673  * @request_id: request identifier
2674  * @moreData: 0 - for last fragment
2675      * 1 - still more fragment(s) coming
2676  * @num_results: number of bssids, driver sends this event to upper layer
2677  *		 for every beacon, hence %num_results is always set to 1.
2678  * @ap: bssid info
2679  *
2680  * Reported when each beacon probe response is received with
2681  * epno match found tag.
2682      */
2683 struct pno_match_found {
2684 	uint32_t            request_id;
2685 	bool                more_data;
2686 	uint32_t            num_results;
2687 	tSirWifiScanResult  ap[];
2688 };
2689 
2690 /**
2691  * struct sir_extscan_generic_response -
2692  *	Generic ExtScan Response structure
2693  * @request_id: ID of the request
2694  * @status: operation status returned by firmware
2695  */
2696 struct sir_extscan_generic_response {
2697 	uint32_t request_id;
2698 	uint32_t status;
2699 };
2700 
2701 typedef struct {
2702 	struct qdf_mac_addr bssid;
2703 	uint32_t channel;
2704 	uint32_t numOfRssi;
2705 
2706 	/* Rssi history in db */
2707 	int32_t rssi[];
2708 } tSirWifiSignificantChange, *tpSirWifiSignificantChange;
2709 
2710 typedef struct {
2711 	uint32_t requestId;
2712 
2713 	bool moreData;
2714 	uint32_t numResults;
2715 	tSirWifiSignificantChange ap[];
2716 } tSirWifiSignificantChangeEvent, *tpSirWifiSignificantChangeEvent;
2717 
2718 typedef struct {
2719 	uint32_t requestId;
2720 	uint32_t numResultsAvailable;
2721 } tSirExtScanResultsAvailableIndParams, *tpSirExtScanResultsAvailableIndParams;
2722 
2723 typedef struct {
2724 	uint32_t requestId;
2725 	uint32_t status;
2726 	uint8_t scanEventType;
2727 	uint32_t   buckets_scanned;
2728 } tSirExtScanOnScanEventIndParams, *tpSirExtScanOnScanEventIndParams;
2729 
2730 #define MAX_EPNO_NETWORKS 64
2731 
2732 #define SIR_PASSPOINT_LIST_MAX_NETWORKS 8
2733 
2734 /**
2735  * struct wifi_passpoint_match - wifi passpoint network match
2736  * @id: network block identifier for the matched network
2737  * @anqp_len: length of ANQP blob
2738  * @ap: scan result, with channel and beacon information
2739  * @anqp: ANQP data, in the information_element format
2740  */
2741 struct wifi_passpoint_match {
2742 	uint32_t  request_id;
2743 	uint32_t  id;
2744 	uint32_t  anqp_len;
2745 	tSirWifiScanResult ap;
2746 	uint8_t   anqp[];
2747 };
2748 #endif /* FEATURE_WLAN_EXTSCAN */
2749 
2750 #ifdef FEATURE_WLAN_AUTO_SHUTDOWN
2751 struct auto_shutdown_cmd {
2752 	uint32_t timer_val;
2753 };
2754 #endif
2755 
2756 #ifdef WLAN_POWER_DEBUG
2757 /**
2758  * struct power_stats_response - Power stats response
2759  * @cumulative_sleep_time_ms: cumulative sleep time in ms
2760  * @cumulative_total_on_time_ms: total awake time in ms
2761  * @deep_sleep_enter_counter: deep sleep enter counter
2762  * @last_deep_sleep_enter_tstamp_ms: last deep sleep enter timestamp
2763  * @debug_register_fmt: debug registers format
2764  * @num_debug_register: number of debug registers
2765  * @debug_registers: Pointer to the debug registers buffer
2766  */
2767 struct power_stats_response {
2768 	uint32_t cumulative_sleep_time_ms;
2769 	uint32_t cumulative_total_on_time_ms;
2770 	uint32_t deep_sleep_enter_counter;
2771 	uint32_t last_deep_sleep_enter_tstamp_ms;
2772 	uint32_t debug_register_fmt;
2773 	uint32_t num_debug_register;
2774 	uint32_t *debug_registers;
2775 };
2776 #endif
2777 
2778 #ifdef WLAN_FEATURE_BEACON_RECEPTION_STATS
2779 #define MAX_BCNMISS_BITMAP 8
2780 /**
2781  * struct bcn_reception_stats_rsp - beacon stats response
2782  * @total_bcn_cnt: total beacon count (tbtt instances)
2783  * @total_bmiss_cnt: Total beacon miss count in last 255 beacons, max 255
2784  * @bmiss_bitmap: This bitmap indicates the status of the last 255 beacons.
2785  * If a bit is set, that means the corresponding beacon was missed.
2786  * Bit 0 of bmiss_bitmap[0] represents the most recent beacon.
2787  * The total_bcn_cnt field indicates how many bits within bmiss_bitmap
2788  * are valid.
2789  */
2790 struct bcn_reception_stats_rsp {
2791 	uint32_t vdev_id;
2792 	uint32_t total_bcn_cnt;
2793 	uint32_t total_bmiss_cnt;
2794 	uint32_t bmiss_bitmap[MAX_BCNMISS_BITMAP];
2795 };
2796 #endif
2797 
2798 /**
2799  * struct lfr_firmware_status - LFR status in firmware
2800  * @is_disabled: Is LFR disabled in FW
2801  * @disable_lfr_event: Disable attempt done in FW
2802  */
2803 struct lfr_firmware_status {
2804 	uint32_t is_disabled;
2805 	struct completion disable_lfr_event;
2806 };
2807 
2808 /**
2809  * struct rso_cmd_status - RSO Command status
2810  * @vdev_id: Vdev ID for which RSO command sent
2811  * @status: Status of RSO command sent to FW
2812  */
2813 struct rso_cmd_status {
2814 	uint32_t vdev_id;
2815 	bool status;
2816 };
2817 
2818 enum {
2819 	SIR_AP_RX_DATA_OFFLOAD             = 0x00,
2820 	SIR_STA_RX_DATA_OFFLOAD            = 0x01,
2821 };
2822 
2823 /**
2824  * struct sir_set_vdev_ies_per_band
2825  * @msg_type: message type
2826  * @len: message length
2827  * @vdev_id: vdev id
2828  *
2829  * Message wrapper structure for eWNI_SME_SET_VDEV_IES_PER_BAND.
2830  */
2831 struct sir_set_vdev_ies_per_band {
2832 	uint16_t msg_type;
2833 	uint16_t len;
2834 	uint32_t vdev_id;
2835 	uint16_t dot11_mode;
2836 	enum QDF_OPMODE device_mode;
2837 };
2838 
2839 /**
2840  * struct sir_set_ht_vht_cfg - ht, vht IE config
2841  * @msg_type: message type
2842  * @len: message length
2843  * @pdev_id: pdev id
2844  * @nss: Nss value
2845  * @dot11mode: Dot11 mode.
2846  *
2847  * Message wrapper structure for set HT/VHT IE req.
2848  */
2849 struct sir_set_ht_vht_cfg {
2850 	uint16_t msg_type;
2851 	uint16_t len;
2852 	uint32_t pdev_id;
2853 	uint32_t nss;
2854 	uint32_t dot11mode;
2855 };
2856 
2857 #define WIFI_INVALID_PEER_ID            (-1)
2858 #define WIFI_INVALID_VDEV_ID            (-1)
2859 #define WIFI_MAX_AC                     (4)
2860 #define RATE_STAT_MCS_MASK              (0xFF00)
2861 #define RATE_STAT_GET_MCS_INDEX(x)      (((x) & RATE_STAT_MCS_MASK) >> 8)
2862 
2863 typedef struct {
2864 	uint32_t paramId;
2865 	uint8_t ifaceId;
2866 	uint32_t rspId;
2867 	uint32_t moreResultToFollow;
2868 	uint32_t nr_received;
2869 	union {
2870 		uint32_t num_peers;
2871 		uint32_t num_radio;
2872 	};
2873 
2874 	uint32_t peer_event_number;
2875 	/* Variable  length field - Do not add anything after this */
2876 	uint8_t results[];
2877 } tSirLLStatsResults, *tpSirLLStatsResults;
2878 
2879 #ifdef WLAN_FEATURE_LINK_LAYER_STATS
2880 /*---------------------------------------------------------------------------
2881    WLAN_HAL_LL_NOTIFY_STATS
2882    ---------------------------------------------------------------------------*/
2883 
2884 /******************************LINK LAYER Statistics**********************/
2885 
2886 typedef struct {
2887 	uint32_t reqId;
2888 	uint8_t staId;
2889 	uint32_t mpduSizeThreshold;
2890 	uint32_t aggressiveStatisticsGathering;
2891 } tSirLLStatsSetReq, *tpSirLLStatsSetReq;
2892 
2893 typedef struct {
2894 	uint32_t reqId;
2895 	uint8_t staId;
2896 	uint32_t paramIdMask;
2897 	bool is_mlo_req;
2898 	uint32_t mlo_vdev_id_bitmap;
2899 } tSirLLStatsGetReq, *tpSirLLStatsGetReq;
2900 
2901 typedef struct {
2902 	uint32_t reqId;
2903 	uint8_t staId;
2904 	uint32_t statsClearReqMask;
2905 	uint8_t stopReq;
2906 } tSirLLStatsClearReq, *tpSirLLStatsClearReq;
2907 
2908 typedef enum {
2909 	WIFI_DISCONNECTED = 0,
2910 	WIFI_AUTHENTICATING = 1,
2911 	WIFI_ASSOCIATING = 2,
2912 	WIFI_ASSOCIATED = 3,
2913 	WIFI_EAPOL_STARTED = 4, /* if done by firmware/driver */
2914 	WIFI_EAPOL_COMPLETED = 5,       /* if done by firmware/driver */
2915 } tSirWifiConnectionState;
2916 
2917 typedef enum {
2918 	WIFI_ROAMING_IDLE = 0,
2919 	WIFI_ROAMING_ACTIVE = 1,
2920 } tSirWifiRoamState;
2921 
2922 typedef enum {
2923 	WIFI_INTERFACE_STA = 0,
2924 	WIFI_INTERFACE_SOFTAP = 1,
2925 	WIFI_INTERFACE_IBSS = 2,
2926 	WIFI_INTERFACE_P2P_CLIENT = 3,
2927 	WIFI_INTERFACE_P2P_GO = 4,
2928 	WIFI_INTERFACE_NAN = 5,
2929 	WIFI_INTERFACE_MESH = 6,
2930 	WIFI_INTERFACE_NDI = 7,
2931 } tSirWifiInterfaceMode;
2932 
2933 /* set for QOS association */
2934 #define WIFI_CAPABILITY_QOS          0x00000001
2935 /* set for protected assoc (802.11 beacon frame control protected bit set) */
2936 #define WIFI_CAPABILITY_PROTECTED    0x00000002
2937 /* set if 802.11 Extended Capabilities element interworking bit is set */
2938 #define WIFI_CAPABILITY_INTERWORKING 0x00000004
2939 /* set for HS20 association */
2940 #define WIFI_CAPABILITY_HS20         0x00000008
2941 /* set is 802.11 Extended Capabilities element UTF-8 SSID bit is set */
2942 #define WIFI_CAPABILITY_SSID_UTF8    0x00000010
2943 /* set is 802.11 Country Element is present */
2944 #define WIFI_CAPABILITY_COUNTRY      0x00000020
2945 
2946 struct wifi_interface_info {
2947 	/* tSirWifiInterfaceMode */
2948 	/* interface mode */
2949 	uint8_t mode;
2950 	/* interface mac address (self) */
2951 	struct qdf_mac_addr macAddr;
2952 	/* tSirWifiConnectionState */
2953 	/* connection state (valid for STA, CLI only) */
2954 	uint8_t state;
2955 	/* tSirWifiRoamState */
2956 	/* roaming state */
2957 	uint32_t roaming;
2958 	/* WIFI_CAPABILITY_XXX (self) */
2959 	uint32_t capabilities;
2960 	/* null terminated SSID */
2961 	uint8_t ssid[33];
2962 	/* bssid */
2963 	struct qdf_mac_addr bssid;
2964 	/* country string advertised by AP */
2965 	uint8_t apCountryStr[REG_ALPHA2_LEN + 1];
2966 	/* country string for this association */
2967 	uint8_t countryStr[REG_ALPHA2_LEN + 1];
2968 	uint8_t time_slice_duty_cycle;
2969 };
2970 
2971 /**
2972  * struct wifi_channel_info - channel information
2973  * @width: channel width (20, 40, 80, 80+80, 160)
2974  * @center_freq: primary 20 MHz channel
2975  * @center_freq0: center frequency (MHz) first segment
2976  * @center_freq1: center frequency (MHz) second segment
2977  */
2978 struct wifi_channel_info {
2979 	enum phy_ch_width width;
2980 	uint32_t center_freq;
2981 	uint32_t center_freq0;
2982 	uint32_t center_freq1;
2983 };
2984 
2985 /**
2986  * struct wifi_rate_info - wifi rate information
2987  * @preamble: 0:OFDM, 1:CCK, 2:HT 3:VHT 4..7 reserved
2988  * @nss: 0:1x1, 1:2x2, 3:3x3, 4:4x4
2989  * @bw: 0:20MHz, 1:40Mhz, 2:80Mhz, 3:160Mhz
2990  * @rate_or_mcs_index:
2991  * * OFDM/CCK: rate code per ieee std in units of 0.5mbps
2992  * * HT/VHT: mcs index
2993  * @reserved: reserved
2994  * @bitrate: bitrate units of 100 Kbps
2995  */
2996 struct wifi_rate_info {
2997 	uint32_t preamble:3;
2998 	uint32_t nss:2;
2999 	uint32_t bw:3;
3000 	uint32_t rate_or_mcs_index:8;
3001 	uint32_t reserved:16;
3002 	uint32_t bitrate;
3003 };
3004 
3005 /**
3006  * struct wifi_channel_stats - channel statistics
3007  * @channel: channel for which the stats are applicable
3008  * @on_time: msecs the radio is awake
3009  * @cca_busy_time: secs the CCA register is busy excluding own tx_time
3010  * @tx_time: msecs the radio is transmitting on this channel
3011  * @rx_time: msecs the radio is in active receive on this channel
3012  */
3013 struct wifi_channel_stats {
3014 	struct wifi_channel_info channel;
3015 	uint32_t on_time;
3016 	uint32_t cca_busy_time;
3017 	uint32_t tx_time;
3018 	uint32_t rx_time;
3019 
3020 };
3021 
3022 /**
3023  * struct wifi_radio_stats - per-radio statistics
3024  * @radio: wifi radio for which the stats are applicable
3025  * @on_time: msecs the radio is awake
3026  * @tx_time: msecs the radio is transmitting
3027  * @rx_time: msecs the radio is in active receive
3028  * @on_time_scan: msecs the radio is awake due to all scan
3029  * @on_time_nbd: msecs the radio is awake due to NAN
3030  * @on_time_gscan: msecs the radio is awake due to Gscan
3031  * @on_time_roam_scan: msecs the radio is awake due to roam scan
3032  * @on_time_pno_scan: msecs the radio is awake due to PNO scan
3033  * @on_time_hs20: msecs the radio is awake due to HS2.0 scans and GAS exchange
3034  * @on_time_host_scan: msecs the radio is awake due to Host initiated scan
3035  * @on_time_lpi_scan: msecs the radio is awake due to LPI scan
3036  * @total_num_tx_power_levels: @tx_time_per_power_level record count
3037  * @tx_time_per_power_level:  tx time (in milliseconds) per TPC level (0.5 dBm)
3038  * @more_channels: If more channels are there and will come in next event
3039  * @num_channels: @channels record count
3040  * @channels: per-channel statistics
3041  */
3042 struct wifi_radio_stats {
3043 	uint32_t radio;
3044 	uint32_t on_time;
3045 	uint32_t tx_time;
3046 	uint32_t rx_time;
3047 	uint32_t on_time_scan;
3048 	uint32_t on_time_nbd;
3049 	uint32_t on_time_gscan;
3050 	uint32_t on_time_roam_scan;
3051 	uint32_t on_time_pno_scan;
3052 	uint32_t on_time_hs20;
3053 	uint32_t on_time_host_scan;
3054 	uint32_t on_time_lpi_scan;
3055 	uint32_t total_num_tx_power_levels;
3056 	uint32_t *tx_time_per_power_level;
3057 	uint32_t more_channels;
3058 	uint32_t num_channels;
3059 	struct wifi_channel_stats *channels;
3060 };
3061 
3062 /**
3063  * struct wifi_rate_stat - per rate statistics
3064  * @rate: rate information
3065  * @tx_mpdu: number of successfully transmitted data pkts (ACK rcvd)
3066  * @rx_mpdu: number of received data pkts
3067  * @mpdu_lost: number of data packet losses (no ACK)
3068  * @retries: total number of data pkt retries *
3069  * @retries_short: number of short data pkt retries
3070  * @retries_long: number of long data pkt retries
3071  */
3072 struct wifi_rate_stat {
3073 	struct wifi_rate_info rate;
3074 	uint32_t tx_mpdu;
3075 	uint32_t rx_mpdu;
3076 	uint32_t mpdu_lost;
3077 	uint32_t retries;
3078 	uint32_t retries_short;
3079 	uint32_t retries_long;
3080 };
3081 
3082 /* wifi peer type */
3083 typedef enum {
3084 	WIFI_PEER_STA,
3085 	WIFI_PEER_AP,
3086 	WIFI_PEER_P2P_GO,
3087 	WIFI_PEER_P2P_CLIENT,
3088 	WIFI_PEER_NAN,
3089 	WIFI_PEER_TDLS,
3090 	WIFI_PEER_INVALID,
3091 } tSirWifiPeerType;
3092 
3093 /**
3094  * struct wifi_peer_info - per peer information
3095  * @type: peer type (AP, TDLS, GO etc.)
3096  * @peer_macaddr: mac address
3097  * @capabilities: peer WIFI_CAPABILITY_XXX
3098  * @power_saving: peer power saving mode
3099  * @num_rate: number of rates
3100  * @rate_stats: per rate statistics, number of entries  = @num_rate
3101  */
3102 struct wifi_peer_info {
3103 	enum wmi_peer_type type;
3104 	struct qdf_mac_addr peer_macaddr;
3105 	uint32_t capabilities;
3106 	union {
3107 		uint32_t power_saving;
3108 		uint32_t num_rate;
3109 	};
3110 	struct wifi_rate_stat rate_stats[];
3111 };
3112 
3113 /**
3114  * struct wifi_interface_stats - Interface statistics
3115  * @info: struct containing the current state of the interface
3116  * @rts_succ_cnt: number of RTS/CTS sequence success
3117  * @rts_fail_cnt: number of RTS/CTS sequence failures
3118  * @ppdu_succ_cnt: number of PPDUs transmitted
3119  * @ppdu_fail_cnt: number of PPDUs that failed to transmit
3120  * @link_stats: link-level statistics
3121  * @ac_stats: per-Access Category statistics
3122  * @num_offload_stats: @offload_stats record count
3123  * @offload_stats: per-offload statistics
3124  * @powersave_stats: powersave statistics
3125  * @vdev_id: vdev id
3126  *
3127  * Statistics corresponding to 2nd most LSB in wifi statistics bitmap
3128  * for getting statistics
3129  */
3130 struct wifi_interface_stats {
3131 	struct wifi_interface_info info;
3132 	uint32_t rts_succ_cnt;
3133 	uint32_t rts_fail_cnt;
3134 	uint32_t ppdu_succ_cnt;
3135 	uint32_t ppdu_fail_cnt;
3136 	wmi_iface_link_stats link_stats;
3137 	wmi_wmm_ac_stats ac_stats[WIFI_AC_MAX];
3138 	uint32_t num_offload_stats;
3139 	wmi_iface_offload_stats offload_stats[WMI_OFFLOAD_STATS_TYPE_MAX];
3140 	wmi_iface_powersave_stats powersave_stats;
3141 	uint8_t vdev_id;
3142 };
3143 
3144 /**
3145  * struct wifi_peer_stat - peer statistics
3146  * @num_peers: number of peers
3147  * @peer_info: per peer statistics
3148  *
3149  * Peer statistics - corresponding to 3rd most LSB in
3150  * wifi statistics bitmap for getting statistics
3151  */
3152 struct wifi_peer_stat {
3153 	uint32_t num_peers;
3154 	struct wifi_peer_info peer_info[];
3155 };
3156 
3157 /* wifi statistics bitmap  for getting statistics */
3158 #define WMI_LINK_STATS_RADIO          0x00000001
3159 #define WMI_LINK_STATS_IFACE          0x00000002
3160 #define WMI_LINK_STATS_ALL_PEER       0x00000004
3161 #define WMI_LINK_STATS_PER_PEER       0x00000008
3162 
3163 /* wifi statistics bitmap  for clearing statistics */
3164 /* all radio statistics */
3165 #define WIFI_STATS_RADIO              0x00000001
3166 /* cca_busy_time (within radio statistics) */
3167 #define WIFI_STATS_RADIO_CCA          0x00000002
3168 /* all channel statistics (within radio statistics) */
3169 #define WIFI_STATS_RADIO_CHANNELS     0x00000004
3170 /* all scan statistics (within radio statistics) */
3171 #define WIFI_STATS_RADIO_SCAN         0x00000008
3172 /* all interface statistics */
3173 #define WIFI_STATS_IFACE              0x00000010
3174 /* all tx rate statistics (within interface statistics) */
3175 #define WIFI_STATS_IFACE_TXRATE       0x00000020
3176 /* all ac statistics (within interface statistics) */
3177 #define WIFI_STATS_IFACE_AC           0x00000040
3178 /* all contention (min, max, avg) statistics (within ac statistics) */
3179 #define WIFI_STATS_IFACE_CONTENTION   0x00000080
3180 /* All peer stats on this interface */
3181 #define WIFI_STATS_IFACE_ALL_PEER      0x00000100
3182 /* Clear particular peer stats depending on the peer_mac */
3183 #define WIFI_STATS_IFACE_PER_PEER      0x00000200
3184 
3185 /**
3186  * struct sir_wifi_iface_tx_fail - TX failure event
3187  * @tid: TX TID
3188  * @msdu_num: TX MSDU failed counter
3189  * @status: TX status from HTT message.
3190  *          Only failure status will be involved.
3191  */
3192 struct sir_wifi_iface_tx_fail {
3193 	uint8_t  tid;
3194 	uint16_t msdu_num;
3195 	enum htt_tx_status status;
3196 };
3197 
3198 /**
3199  * struct sir_wifi_chan_cca_stats - channal CCA stats
3200  * @vdev_id: vdev ID
3201  * @idle_time: percentage of idle time, no TX, no RX, no interference
3202  * @tx_time: percentage of time transmitting packets
3203  * @rx_in_bss_time: percentage of time receiving packets in current BSS
3204  * @rx_out_bss_time: percentage of time receiving packets not in current BSS
3205  * @rx_busy_time: percentage of time interference detected
3206  * @rx_in_bad_cond_time: percentage of time receiving packets with errors
3207  *	or packets flagged as retransmission or seqnum discontinued.
3208  * @tx_in_bad_cond_time: percentage of time the device transmitted packets
3209  *	that haven't been ACKed.
3210  * @wlan_not_avail_time: percentage of time the chip is unable to
3211  *	work in normal conditions.
3212  */
3213 struct sir_wifi_chan_cca_stats {
3214 	uint32_t vdev_id;
3215 	uint32_t idle_time;
3216 	uint32_t tx_time;
3217 	uint32_t rx_in_bss_time;
3218 	uint32_t rx_out_bss_time;
3219 	uint32_t rx_busy_time;
3220 	uint32_t rx_in_bad_cond_time;
3221 	uint32_t tx_in_bad_cond_time;
3222 	uint32_t wlan_not_avail_time;
3223 };
3224 
3225 #define WIFI_MAX_CHAINS                 8
3226 
3227 /**
3228  * struct sir_wifi_peer_signal_stats - peer signal stats
3229  * @vdev_id: vdev ID
3230  * @peer_id: peer ID
3231  * @per_ant_snr: per antenna SNR
3232  * @nf: peer background noise
3233  * @per_ant_rx_mpdus: MPDUs received per antenna
3234  * @per_ant_tx_mpdus: MPDUs transferred per antenna
3235  * @num_chain: valid chain count
3236  */
3237 struct sir_wifi_peer_signal_stats {
3238 	uint32_t vdev_id;
3239 	uint32_t peer_id;
3240 
3241 	/* per antenna SNR in current bss */
3242 	int32_t per_ant_snr[WIFI_MAX_CHAINS];
3243 
3244 	/* Background noise */
3245 	int32_t nf[WIFI_MAX_CHAINS];
3246 
3247 	uint32_t per_ant_rx_mpdus[WIFI_MAX_CHAINS];
3248 	uint32_t per_ant_tx_mpdus[WIFI_MAX_CHAINS];
3249 	uint32_t num_chain;
3250 };
3251 
3252 #define WIFI_VDEV_NUM           4
3253 #define WFIF_MCS_NUM            10
3254 #define WIFI_AGGR_NUM           8
3255 #define WIFI_DELAY_SIZE         11
3256 
3257 /**
3258  * struct sir_wifi_tx - per AC tx stats
3259  * @msdus: number of totoal MSDUs on MAC layer in the period
3260  * @mpdus: number of totoal MPDUs on MAC layer in the period
3261  * @ppdus: number of totoal PPDUs on PHY layer in the period
3262  * @bytes: bytes of tx data on MAC layer in the period
3263  * @drops: number of TX packets cancelled due to any reason in the period,
3264  *	such as WMM limitation/bandwidth limitation/radio congestion
3265  * @drop_bytes: bytes of dropped TX packets in the period
3266  * @retries: number of unacked transmissions of MPDUs
3267  * @failed: number of packets have not been ACKed despite retried
3268  * @aggr_len: length of the MPDU aggregation size buffer
3269  * @mpdu_aggr_size: histogram of MPDU aggregation size
3270  * @success_mcs_len: length of success mcs buffer
3271  * @success_mcs: histogram of successful received MPDUs encoding rate
3272  * @fail_mcs_len: length of failed mcs buffer
3273  * @fail_mcs: histogram of failed received MPDUs encoding rate
3274  * @delay_len: length of the delay histofram buffer
3275  * @delay: histogram of delays on MAC layer
3276  */
3277 struct sir_wifi_tx {
3278 	uint32_t msdus;
3279 	uint32_t mpdus;
3280 	uint32_t ppdus;
3281 	uint32_t bytes;
3282 	uint32_t drops;
3283 	uint32_t drop_bytes;
3284 	uint32_t retries;
3285 	uint32_t failed;
3286 	uint32_t aggr_len;
3287 	uint32_t *mpdu_aggr_size;
3288 	uint32_t success_mcs_len;
3289 	uint32_t *success_mcs;
3290 	uint32_t fail_mcs_len;
3291 	uint32_t *fail_mcs;
3292 	uint32_t delay_len;
3293 	uint32_t *delay;
3294 };
3295 
3296 /**
3297  * struct sir_wifi_rx - per AC rx stats
3298  * @mpdus: number of RX packets on MAC layer
3299  * @bytes: bytes of RX packets on MAC layer
3300  * @ppdus: number of RX packets on PHY layer
3301  * @ppdu_bytes: bytes of RX packets on PHY layer
3302  * @mpdu_lost: number of discontinuity in seqnum
3303  * @mpdu_retry: number of RX packets flagged as retransmissions
3304  * @mpdu_dup: number of RX packets identified as duplicates
3305  * @mpdu_discard: number of RX packets discarded
3306  * @aggr_len: length of MPDU aggregation histogram buffer
3307  * @mpdu_aggr: histogram of MPDU aggregation size
3308  * @mcs_len: length of mcs histogram buffer
3309  * @mcs: histogram of encoding rate.
3310  */
3311 struct sir_wifi_rx {
3312 	uint32_t mpdus;
3313 	uint32_t bytes;
3314 	uint32_t ppdus;
3315 	uint32_t ppdu_bytes;
3316 	uint32_t mpdu_lost;
3317 	uint32_t mpdu_retry;
3318 	uint32_t mpdu_dup;
3319 	uint32_t mpdu_discard;
3320 	uint32_t aggr_len;
3321 	uint32_t *mpdu_aggr;
3322 	uint32_t mcs_len;
3323 	uint32_t *mcs;
3324 };
3325 
3326 /**
3327  * struct sir_wifi_ll_ext_wmm_ac_stats - stats for WMM AC
3328  * @type: WMM AC type
3329  * @tx_stats: pointer to TX stats
3330  * @rx_stats: pointer to RX stats
3331  */
3332 struct sir_wifi_ll_ext_wmm_ac_stats {
3333 	uint32_t type;
3334 	struct sir_wifi_tx *tx_stats;
3335 	struct sir_wifi_rx *rx_stats;
3336 };
3337 
3338 /**
3339  * struct sir_wifi_ll_ext_peer_stats - per peer stats
3340  * @peer_id: peer ID
3341  * @vdev_id: VDEV ID
3342  * @mac_address: MAC address
3343  * @sta_ps_inds: how many times STAs go to sleep
3344  * @sta_ps_durs: total sleep time of STAs (units in ms)
3345  * @rx_probe_reqs: number of probe requests received
3346  * @rx_oth_mgmts: number of other management frames received,
3347  *		  not including probe requests
3348  * @peer_signal_stat: signal stats
3349  * @ac_stats: WMM BE/BK/VI/VO stats
3350  */
3351 struct sir_wifi_ll_ext_peer_stats {
3352 	uint32_t peer_id;
3353 	uint32_t vdev_id;
3354 	tSirMacAddr mac_address;
3355 	uint32_t sta_ps_inds;
3356 	uint32_t sta_ps_durs;
3357 	uint32_t rx_probe_reqs;
3358 	uint32_t rx_oth_mgmts;
3359 	struct sir_wifi_peer_signal_stats peer_signal_stats;
3360 	struct sir_wifi_ll_ext_wmm_ac_stats ac_stats[WIFI_MAX_AC];
3361 };
3362 
3363 /**
3364  * struct sir_wifi_ll_ext_stats - link layer stats report
3365  * @trigger_cond_id:  Indicate what triggered this event.
3366  *	1: timeout. 2: threshold
3367  * @cca_chgd_bitmap: Bitmap to indicate changed channel CCA stats
3368  *	which exceeded the thresholds
3369  * @sig_chgd_bitmap: Bitmap to indicate changed peer signal stats
3370  *	which exceeded the thresholds
3371  * @tx_chgd_bitmap: Bitmap to indicate changed TX counters
3372  *	which exceeded the thresholds
3373  * @rx_chgd_bitmap: Bitmap to indicate changed RX counters
3374  *	which exceeded the thresholds
3375  * @chan_cca_stats: channel CCA stats
3376  * @peer_signal_stats: peer signal stats
3377  * @tx_mpdu_aggr_array_len: length of TX MPDU aggregation buffer
3378  * @tx_succ_mcs_array_len: length of mcs buffer for ACKed MPDUs
3379  * @tx_fail_mcs_array_len: length of mcs buffer for no-ACKed MPDUs
3380  * @tx_delay_array_len: length of delay stats buffer
3381  * @rx_mpdu_aggr_array_len: length of RX MPDU aggregation buffer
3382  * @rx_mcs_array_len: length of RX mcs stats buffer
3383  * @peer_stats: peer stats
3384  * @cca: physical channel CCA stats
3385  * @stats: pointer to stats data buffer.
3386  *
3387  * Structure of the whole statistics is like this:
3388  *     ---------------------------------
3389  *     |      trigger_cond_i           |
3390  *     +-------------------------------+
3391  *     |      cca_chgd_bitmap          |
3392  *     +-------------------------------+
3393  *     |      sig_chgd_bitmap          |
3394  *     +-------------------------------+
3395  *     |      tx_chgd_bitmap           |
3396  *     +-------------------------------+
3397  *     |      rx_chgd_bitmap           |
3398  *     +-------------------------------+
3399  *     |      peer_num                 |
3400  *     +-------------------------------+
3401  *     |      channel_num              |
3402  *     +-------------------------------+
3403  *     |      tx_mpdu_aggr_array_len   |
3404  *     +-------------------------------+
3405  *     |      tx_succ_mcs_array_len    |
3406  *     +-------------------------------+
3407  *     |      tx_fail_mcs_array_len    |
3408  *     +-------------------------------+
3409  *     |      tx_delay_array_len       |
3410  *     +-------------------------------+
3411  *     |      rx_mpdu_aggr_array_len   |
3412  *     +-------------------------------+
3413  *     |      rx_mcs_array_len         |
3414  *     +-------------------------------+
3415  *     |      pointer to CCA stats     |
3416  *     +-------------------------------+
3417  *     |      pointer to peer stats    |
3418  *     +-------------------------------+
3419  *     |      CCA stats                |
3420  *     +-------------------------------+
3421  *     |      peer_stats               |----+
3422  *     +-------------------------------+    |
3423  *     |      per peer signals stats   |<---+
3424  *     |        peer0 ~ peern          |    |
3425  *     +-------------------------------+    |
3426  *     | TX aggr/mcs parameters array  |    |
3427  *     | Length of this buffer is      |    |
3428  *     | configurable for user layer.  |<-+ |
3429  *     +-------------------------------+  | |
3430  *     |      per peer tx stats        |--+ |
3431  *     |         BE                    | <--+
3432  *     |         BK                    |    |
3433  *     |         VI                    |    |
3434  *     |         VO                    |    |
3435  *     +-------------------------------+    |
3436  *     | TX aggr/mcs parameters array  |    |
3437  *     | Length of this buffer is      |    |
3438  *     | configurable for user layer.  |<-+ |
3439  *     +-------------------------------+  | |
3440  *     |      peer peer rx stats       |--+ |
3441  *     |         BE                    | <--+
3442  *     |         BE                    |
3443  *     |         BK                    |
3444  *     |         VI                    |
3445  *     |         VO                    |
3446  *     ---------------------------------
3447  */
3448 struct sir_wifi_ll_ext_stats {
3449 	uint32_t trigger_cond_id;
3450 	uint32_t cca_chgd_bitmap;
3451 	uint32_t sig_chgd_bitmap;
3452 	uint32_t tx_chgd_bitmap;
3453 	uint32_t rx_chgd_bitmap;
3454 	uint8_t peer_num;
3455 	uint8_t channel_num;
3456 	uint32_t tx_mpdu_aggr_array_len;
3457 	uint32_t tx_succ_mcs_array_len;
3458 	uint32_t tx_fail_mcs_array_len;
3459 	uint32_t tx_delay_array_len;
3460 	uint32_t rx_mpdu_aggr_array_len;
3461 	uint32_t rx_mcs_array_len;
3462 	struct sir_wifi_ll_ext_peer_stats *peer_stats;
3463 	struct sir_wifi_chan_cca_stats *cca;
3464 	uint8_t stats[];
3465 };
3466 
3467 /**
3468  * struct sir_channel_cca_threshold - threshold for channel CCA
3469  * @idle_time: idle time, no TX, no RX, no interference
3470  * @tx_time: time transmitting packets
3471  * @rx_in_bss_time: time receiving packets in current BSSs
3472  * @rx_out_bss_time: time receiving packets not in current BSSs
3473  * @rx_busy_time: time interference detected
3474  * @rx_in_bad_cond_time: receiving packets with errors
3475  * @tx_in_bad_cond_time: time transmitted packets not been ACKed
3476  * @wlan_not_avail_time: wlan card cannot work
3477  */
3478 struct sir_channel_cca_threshold {
3479 	uint32_t idle_time;
3480 	uint32_t tx_time;
3481 	uint32_t rx_in_bss_time;
3482 	uint32_t rx_out_bss_time;
3483 	uint32_t rx_busy_time;
3484 	uint32_t rx_in_bad_cond_time;
3485 	uint32_t tx_in_bad_cond_time;
3486 	uint32_t wlan_not_avail_time;
3487 };
3488 
3489 /**
3490  * struct sir_signal_threshold - threshold for per peer sigbal
3491  * @snr: signal to noise rate
3492  * @nf: noise floor
3493  */
3494 struct sir_signal_threshold {
3495 	uint32_t snr;
3496 	uint32_t nf;
3497 };
3498 
3499 /**
3500  * struct sir_tx_threshold - threshold for TX
3501  * @msdu: TX MSDUs on MAC layer
3502  * @mpdu: TX MPDUs on MAC layer
3503  * @ppdu: TX PPDUs on MAC layer
3504  * @bytes: TX bytes on MAC layer
3505  * @msdu_drop: drooped MSDUs
3506  * @byte_drop: dropped Bytes
3507  * @mpdu_retry: MPDU not acked
3508  * @ppdu_fail: PPDUs which received no block ack
3509  * @aggregation: aggregation size
3510  * @succ_mcs: histogram of encoding rate for acked PPDUs
3511  * @fail_mcs: histogram of encoding rate for no-acked PPDUs
3512  */
3513 struct sir_tx_threshold {
3514 	uint32_t msdu;
3515 	uint32_t mpdu;
3516 	uint32_t ppdu;
3517 	uint32_t bytes;
3518 	uint32_t msdu_drop;
3519 	uint32_t byte_drop;
3520 	uint32_t mpdu_retry;
3521 	uint32_t mpdu_fail;
3522 	uint32_t ppdu_fail;
3523 	uint32_t aggregation;
3524 	uint32_t succ_mcs;
3525 	uint32_t fail_mcs;
3526 	uint32_t delay;
3527 };
3528 
3529 /**
3530  * struct sir_rx_threshold - threshold for RX
3531  * @mpdu: RX MPDUs on MAC layer
3532  * @bytes: RX bytes on MAC layer
3533  * @ppdu: RX PPDU on PHY layer
3534  * @ppdu_bytes: RX bytes on PHY layer
3535  * @disorder: discontinuity in seqnum
3536  * @mpdu_retry: MPDUs flagged as retry
3537  * @mpdu_dup: MPDUs identified as duplicated
3538  * @aggregation: aggregation size
3539  * @mcs: histogram of encoding rate for PPDUs
3540  * @ps_inds: power save indication
3541  * @ps_durs: total time in power save
3542  * @probe_reqs: probe request received
3543  * @other_mgmt: other MGMT frames received
3544  */
3545 struct sir_rx_threshold {
3546 	uint32_t mpdu;
3547 	uint32_t bytes;
3548 	uint32_t ppdu;
3549 	uint32_t ppdu_bytes;
3550 	uint32_t disorder;
3551 	uint32_t mpdu_lost;
3552 	uint32_t mpdu_retry;
3553 	uint32_t mpdu_dup;
3554 	uint32_t mpdu_discard;
3555 	uint32_t aggregation;
3556 	uint32_t mcs;
3557 	uint32_t ps_inds;
3558 	uint32_t ps_durs;
3559 	uint32_t probe_reqs;
3560 	uint32_t other_mgmt;
3561 };
3562 
3563 /**
3564  * struct sir_wifi_ll_ext_stats_threshold - Threshold for stats update
3565  * @period: MAC counter indication period (unit in ms)
3566  * @enable: if threshold mechanism is enabled or disabled
3567  * @enable_bitmap: whether dedicated threshold is enabed.
3568  *     Every MAC counter has a dedicated threshold. If the dedicated
3569  *     threshold is not set in the bitmap, global threshold will take
3570  *     effect.
3571  * @global: whether clobal threshold is enabled.
3572  *     When both global and dedicated threshold are disabled, MAC counter
3573  *     will indicate stats periodically.
3574  * @global_threshold: global threshold value
3575  * @cca_bitmap: bitmap for CCA.
3576  *     Bit0: idle time
3577  *     Bit1: tx time
3578  *     Bit2: RX in BSS
3579  *     Bit3: RX out of BSS
3580  *     Bit4: medium busy
3581  *     Bit5: RX bad
3582  *     Bit6: TX bad
3583  *     Bit7: WLAN card not available
3584  * @signal_bitmap:
3585  *     Bit0: Per channel SNR counter
3586  *     Bit1: Per channel noise floor counter
3587  * @tx_bitmap:  bitmap for TX counters
3588  *     Bit0: TX counter unit in MSDU
3589  *     Bit1: TX counter unit in MPDU
3590  *     Bit2: TX counter unit in PPDU
3591  *     Bit3: TX counter unit in byte
3592  *     Bit4: Dropped MSDUs
3593  *     Bit5: Dropped Bytes
3594  *     Bit6: MPDU retry counter
3595  *     Bit7: MPDU failure counter
3596  *     Bit8: PPDU failure counter
3597  *     Bit9: MPDU aggregation counter
3598  *     Bit10: MCS counter for ACKed MPDUs
3599  *     Bit11: MCS counter for Failed MPDUs
3600  *     Bit12: TX Delay counter
3601  * @rx_bitmap:bitmap for RX counters
3602  *     Bit0: MAC RX counter unit in MPDU
3603  *     Bit1: MAC RX counter unit in byte
3604  *     Bit2: PHY RX counter unit in PPDU
3605  *     Bit3: PHY RX counter unit in byte
3606  *     Bit4: Disorder counter
3607  *     Bit5: Retry counter
3608  *     Bit6: Duplication counter
3609  *     Bit7: Discard counter
3610  *     Bit8: MPDU aggregation size counter
3611  *     Bit9: MCS counter
3612  *     Bit10: Peer STA power state change (wake to sleep) counter
3613  *     Bit11: Peer STA power save counter, total time in PS mode
3614  *     Bit12: Probe request counter
3615  *     Bit13: Other management frames counter
3616  * @cca_thresh: CCA threshold
3617  * @signal_thresh: signal threshold
3618  * @tx_thresh: TX threshold
3619  * @rx_thresh: RX threshold
3620  *
3621  * Generally, Link layer statistics is reported periodically. But if the
3622  * variation of one stats of compared to the previous notification exceeds
3623  * a threshold, FW will report the new stats immediately.
3624  * This structure contains threshold for different counters.
3625  */
3626 struct sir_ll_ext_stats_threshold {
3627 	uint32_t period;
3628 	uint32_t enable;
3629 	uint32_t enable_bitmap;
3630 	uint32_t global;
3631 	uint32_t global_threshold;
3632 	uint32_t cca_bitmap;
3633 	uint32_t signal_bitmap;
3634 	uint32_t tx_bitmap;
3635 	uint32_t rx_bitmap;
3636 	struct sir_channel_cca_threshold cca;
3637 	struct sir_signal_threshold signal;
3638 	struct sir_tx_threshold tx;
3639 	struct sir_rx_threshold rx;
3640 };
3641 
3642 #define LL_STATS_MIN_PERIOD          10
3643 #define LL_STATS_INVALID_PERIOD      0xFFFFFFFF
3644 
3645 /* Result ID for LL stats extension */
3646 #define WMI_LL_STATS_EXT_PS_CHG             0x00000100
3647 #define WMI_LL_STATS_EXT_TX_FAIL            0x00000200
3648 #define WMI_LL_STATS_EXT_MAC_COUNTER        0x00000400
3649 #endif /* WLAN_FEATURE_LINK_LAYER_STATS */
3650 
3651 typedef struct sAniGetLinkStatus {
3652 	uint16_t msgType;       /* message type is same as the request type */
3653 	uint16_t msgLen;        /* length of the entire request */
3654 	uint8_t linkStatus;
3655 	uint8_t sessionId;
3656 } tAniGetLinkStatus, *tpAniGetLinkStatus;
3657 
3658 /**
3659  * struct sir_lost_link_info - lost link information structure.
3660  *
3661  * @vdev_id: vdev_id from WMA. some modules call sessionId.
3662  * @rssi: rssi at disconnection time.
3663  *
3664  * driver uses this structure to communicate information collected at
3665  * disconnection time.
3666  */
3667 struct sir_lost_link_info {
3668 	uint32_t vdev_id;
3669 	int32_t rssi;
3670 };
3671 
3672 /* find the size of given member within a structure */
3673 #ifndef member_size
3674 #define member_size(type, member) (sizeof(((type *)0)->member))
3675 #endif
3676 
3677 #define RTT_INVALID                     0x00
3678 #define RTT_TIMING_MEAS_CAPABILITY      0x01
3679 #define RTT_FINE_TIME_MEAS_INITIATOR_CAPABILITY 0x02
3680 #define RTT_FINE_TIME_MEAS_RESPONDER_CAPABILITY 0x03
3681 
3682 /* number of neighbor reports that we can handle in Neighbor Report Response */
3683 #define MAX_SUPPORTED_NEIGHBOR_RPT 15
3684 
3685 /**
3686  * struct sir_stats_avg_factor
3687  * @vdev_id: session id
3688  * @stats_avg_factor: average factor
3689  */
3690 struct sir_stats_avg_factor {
3691 	uint8_t vdev_id;
3692 	uint16_t stats_avg_factor;
3693 };
3694 
3695 /**
3696  * struct sir_guard_time_request
3697  * @vdev_id: session id
3698  * @guard_time: guard time
3699  */
3700 struct sir_guard_time_request {
3701 	uint8_t vdev_id;
3702 	uint32_t guard_time;
3703 };
3704 
3705 /* Max number of rates allowed in Supported Rates IE */
3706 #define MAX_NUM_SUPPORTED_RATES (8)
3707 
3708 /**
3709  * struct rssi_breach_event - rssi breached event structure
3710  * @request_id: request id
3711  * @session_id: session id
3712  * @curr_rssi: current rssi
3713  * @curr_bssid: current bssid
3714  */
3715 struct rssi_breach_event {
3716 	uint32_t     request_id;
3717 	uint32_t     session_id;
3718 	int8_t       curr_rssi;
3719 	struct qdf_mac_addr  curr_bssid;
3720 };
3721 
3722 /**
3723  * struct chip_pwr_save_fail_detected_params - chip power save failure detected
3724  * event params
3725  * @failure_reason_code:failure reason code
3726  * @wake_lock_bitmap:bitmap for modules voting against sleep for long duration.
3727  */
3728 struct chip_pwr_save_fail_detected_params {
3729 	uint32_t     failure_reason_code;
3730 	uint32_t     wake_lock_bitmap[4];
3731 };
3732 
3733 #define MAX_NUM_FW_SEGMENTS 4
3734 
3735 /**
3736  * DEFAULT_SCAN_IE_ID - Identifier for the collection of IE's added
3737  * by default to the probe request
3738  */
3739 #define DEFAULT_SCAN_IE_ID 256
3740 
3741  /* MAX_DEFAULT_SCAN_IE_LEN - Maximum length of Default Scan IE's */
3742 #define MAX_DEFAULT_SCAN_IE_LEN 2048
3743 
3744  /* Extended Capabilities IE header(IE Id + IE Length) length */
3745 #define EXT_CAP_IE_HDR_LEN 2
3746 
3747 /**
3748  * struct hdd_default_scan_ie - HDD default scan IE structure
3749  * @message_type: message type to be set with eWNI_SME_DEFAULT_SCAN_IE
3750  * @length: length of the struct hdd_default_scan_ie
3751  * @vdev_id: vdev_id
3752  * @ie_len: Default scan IE length
3753  * @ie_data: Pointer to default scan IE data
3754  */
3755 struct hdd_default_scan_ie {
3756 	uint16_t message_type;
3757 	uint16_t length;
3758 	uint16_t vdev_id;
3759 	uint16_t ie_len;
3760 	uint8_t ie_data[MAX_DEFAULT_SCAN_IE_LEN];
3761 };
3762 
3763 /**
3764  * struct vdev_ie_info - IE info
3765  * @vdev_id - vdev for which the IE is being sent
3766  * @ie_id - ID of the IE
3767  * @length - length of the IE data
3768  * @band - indicates IE is intended for which band
3769  * @data - IE data
3770  *
3771  * This structure is used to store the IE information.
3772  */
3773 struct vdev_ie_info {
3774 	uint32_t vdev_id;
3775 	uint32_t ie_id;
3776 	uint32_t length;
3777 	uint32_t band;
3778 	uint8_t *data;
3779 };
3780 
3781 /**
3782  * struct send_extcap_ie - used to pass send_extcap_ie msg from SME to PE
3783  * @type - MSG type
3784  * @length - length of the message
3785  * @seesion_id - session_id for which the message is intended for
3786  *
3787  * This structure is used to pass send_extcap_ie msg from SME to PE
3788  */
3789 struct send_extcap_ie {
3790 	uint16_t msg_type; /* eWNI_SME_SET_IE_REQ */
3791 	uint16_t length;
3792 	uint8_t session_id;
3793 };
3794 
3795 typedef void (*antenna_mode_cb)(uint32_t status, void *context);
3796 
3797 /**
3798  * struct cfg_action_frm_tb_ppdu - action frame TB PPDU cfg
3799  * @vdev_id - vdev id
3800  * @cfg - enable/disable
3801  * @frm_len - frame length
3802  * @data - frame data
3803  *
3804  * This structure is used to cfg action frame tb ppdu.
3805  */
3806 struct cfg_action_frm_tb_ppdu {
3807 	uint8_t vdev_id;
3808 	uint8_t cfg;
3809 	uint8_t frm_len;
3810 	uint8_t *data;
3811 };
3812 
3813 /**
3814  * struct sir_nss_update_request
3815  * @msgType: nss update msg type
3816  * @msgLen: length of the msg
3817  * @new_nss: new spatial stream value
3818  * @ch_width: channel width - optional
3819  * @vdev_id: session id
3820  */
3821 struct sir_nss_update_request {
3822 	uint16_t msgType;
3823 	uint16_t msgLen;
3824 	uint8_t  new_nss;
3825 	uint8_t ch_width;
3826 	uint32_t vdev_id;
3827 };
3828 
3829 /**
3830  * struct sir_sap_ch_width_update
3831  * @msgType: ch_width update msg type
3832  * @msgLen: length of the msg
3833  * @ch_width: channel width
3834  * @vdev_id: vdev id
3835  */
3836 struct sir_sap_ch_width_update {
3837 	uint16_t msgType;
3838 	uint16_t msgLen;
3839 	enum phy_ch_width ch_width;
3840 	uint32_t vdev_id;
3841 };
3842 
3843 /**
3844  * enum sir_bcn_update_reason: bcn update reason
3845  * @REASON_DEFAULT: reason default
3846  * @REASON_NSS_UPDATE: If NSS is updated
3847  * @REASON_CONFIG_UPDATE: Config update
3848  * @REASON_SET_HT2040: HT2040 update
3849  * @REASON_COLOR_CHANGE: Color change
3850  * @REASON_CHANNEL_SWITCH: channel switch
3851  * @REASON_MLO_IE_UPDATE: mlo ie update
3852  * @REASON_RNR_UPDATE: SAP is changed, notify co-located SAP
3853  */
3854 enum sir_bcn_update_reason {
3855 	REASON_DEFAULT = 0,
3856 	REASON_NSS_UPDATE = 1,
3857 	REASON_CONFIG_UPDATE = 2,
3858 	REASON_SET_HT2040 = 3,
3859 	REASON_COLOR_CHANGE = 4,
3860 	REASON_CHANNEL_SWITCH = 5,
3861 	REASON_MLO_IE_UPDATE = 6,
3862 	REASON_RNR_UPDATE = 7,
3863 	REASON_CH_WIDTH_UPDATE = 8,
3864 };
3865 
3866 /**
3867  * struct sir_bcn_update_rsp
3868  *
3869  * @vdev_id: session for which bcn was updated
3870  * @reason: bcn update reason
3871  * @status: status of the beacon sent to FW
3872  */
3873 struct sir_bcn_update_rsp {
3874 	uint8_t vdev_id;
3875 	enum sir_bcn_update_reason reason;
3876 	QDF_STATUS status;
3877 };
3878 
3879 struct sir_qos_params {
3880 	uint8_t aifsn;
3881 	uint8_t cwmin;
3882 	uint8_t cwmax;
3883 };
3884 
3885 /**
3886  * struct sir_sme_ext_change_chan_req - channel change request
3887  * @message_type: message id
3888  * @length: msg length
3889  * @new_channel: new channel
3890  * @vdev_id: vdev id
3891  */
3892 struct sir_sme_ext_cng_chan_req {
3893 	uint16_t  message_type; /* eWNI_SME_EXT_CHANGE_CHANNEL */
3894 	uint16_t  length;
3895 	uint32_t  new_ch_freq;
3896 	uint8_t   vdev_id;
3897 };
3898 
3899 #define IGNORE_NUD_FAIL                      0
3900 #define DISCONNECT_AFTER_NUD_FAIL            1
3901 #define ROAM_AFTER_NUD_FAIL                  2
3902 #define DISCONNECT_AFTER_ROAM_FAIL           3
3903 
3904 /**
3905  * struct sir_sme_ext_change_chan_ind.
3906  * @session_id: session id
3907  * @new_chan_freq: new channel frequency to change to
3908  */
3909 struct sir_sme_ext_cng_chan_ind {
3910 	uint8_t  session_id;
3911 	uint32_t  new_chan_freq;
3912 };
3913 
3914 /**
3915  * struct stsf - the basic stsf structure
3916  *
3917  * @vdev_id: vdev id
3918  * @tsf_low: low 32bits of tsf
3919  * @tsf_high: high 32bits of tsf
3920  * @soc_timer_low: low 32bits of synced SOC timer value
3921  * @soc_timer_high: high 32bits of synced SOC timer value
3922  * @global_tsf_low: low 32bits of tsf64
3923  * @global_tsf_high: high 32bits of tsf64
3924  * @mac_id: MAC identifier
3925  * @mac_id_valid: Indicate if mac_id is valid or not
3926  * @tsf_id: TSF-ID corresponding to the TSF value
3927  * @tsf_id_valid: flag indicating whether TSD-ID is valid
3928  *
3929  * Driver uses this structure to store the tsf information.
3930  */
3931 struct stsf {
3932 	uint32_t vdev_id;
3933 	uint32_t tsf_low;
3934 	uint32_t tsf_high;
3935 	uint32_t soc_timer_low;
3936 	uint32_t soc_timer_high;
3937 	uint32_t global_tsf_low;
3938 	uint32_t global_tsf_high;
3939 	uint32_t mac_id;
3940 	uint32_t mac_id_valid;
3941 	uint32_t tsf_id;
3942 	uint32_t tsf_id_valid;
3943 };
3944 
3945 /* ie + extn ie */
3946 #define SIR_BCN_FLT_MAX_ELEMS_IE_LIST (8 + 8)
3947 /**
3948  * struct beacon_filter_param - parameters for beacon filtering
3949  * @vdev_id: vdev id
3950  * @ie_map: bitwise map of IEs that needs to be filtered
3951  *
3952  */
3953 struct beacon_filter_param {
3954 	uint32_t   vdev_id;
3955 	uint32_t   ie_map[SIR_BCN_FLT_MAX_ELEMS_IE_LIST];
3956 };
3957 
3958 /**
3959  * struct adaptive_dwelltime_params - the adaptive dwelltime params
3960  * @vdev_id: vdev id
3961  * @is_enabled: Adaptive dwell time is enabled/disabled
3962  * @dwelltime_mode: global default adaptive dwell mode
3963  * @lpf_weight: weight to calculate the average low pass
3964  * filter for channel congestion
3965  * @passive_mon_intval: intval to monitor wifi activity in passive scan in msec
3966  * @wifi_act_threshold: % of wifi activity used in passive scan 0-100
3967  *
3968  */
3969 struct adaptive_dwelltime_params {
3970 	uint32_t  vdev_id;
3971 	bool      is_enabled;
3972 	uint8_t   dwelltime_mode;
3973 	uint8_t   lpf_weight;
3974 	uint8_t   passive_mon_intval;
3975 	uint8_t   wifi_act_threshold;
3976 };
3977 
3978 /**
3979  * enum obss_ht40_scancmd_type - obss scan command type
3980  * @HT40_OBSS_SCAN_PARAM_START: OBSS scan start
3981  * @HT40_OBSS_SCAN_PARAM_UPDATE: OBSS scan param update
3982  */
3983 enum obss_ht40_scancmd_type {
3984 	HT40_OBSS_SCAN_PARAM_START,
3985 	HT40_OBSS_SCAN_PARAM_UPDATE
3986 };
3987 
3988 /**
3989  * struct sme_obss_ht40_scanind_msg - sme obss scan params
3990  * @msg_type: message type
3991  * @length: message length
3992  * @mac_addr: mac address
3993  */
3994 struct sme_obss_ht40_scanind_msg {
3995 	uint16_t               msg_type;
3996 	uint16_t               length;
3997 	struct qdf_mac_addr    mac_addr;
3998 };
3999 
4000 /**
4001  * struct obss_ht40_scanind - ht40 obss scan request
4002  * @cmd: message type
4003  * @scan_type: message length
4004  * @obss_passive_dwelltime: obss passive dwelltime
4005  * @obss_active_dwelltime: obss active dwelltime
4006  * @obss_width_trigger_interval: scan interval
4007  * @obss_passive_total_per_channel: total passive scan time per channel
4008  * @obss_active_total_per_channel: total active scan time per channel
4009  * @bsswidth_ch_trans_delay: OBSS transition delay time
4010  * @obss_activity_threshold: OBSS activity threshold
4011  * @self_sta_idx: self sta identification
4012  * @bss_id: BSS index
4013  * @fortymhz_intolerent: Ht40mhz intolerance
4014  * @channel_count: channel count
4015  * @chan_freq_list: List of channel frequencies in MHz
4016  * @current_operatingclass: operating class
4017  * @iefield_len: ie's length
4018  * @iefiled: ie's information
4019  */
4020 struct obss_ht40_scanind {
4021 	enum obss_ht40_scancmd_type cmd;
4022 	enum eSirScanType scan_type;
4023 	/* In TUs */
4024 	uint16_t obss_passive_dwelltime;
4025 	uint16_t obss_active_dwelltime;
4026 	/* In seconds */
4027 	uint16_t obss_width_trigger_interval;
4028 	/* In TU's */
4029 	uint16_t obss_passive_total_per_channel;
4030 	uint16_t obss_active_total_per_channel;
4031 	uint16_t bsswidth_ch_trans_delay;
4032 	uint16_t obss_activity_threshold;
4033 	uint8_t  self_sta_idx;
4034 	uint8_t bss_id;
4035 	uint8_t fortymhz_intolerent;
4036 	uint8_t channel_count;
4037 	uint32_t chan_freq_list[CFG_VALID_CHANNEL_LIST_LEN];
4038 	uint8_t current_operatingclass;
4039 	uint16_t iefield_len;
4040 	uint8_t  iefield[SIR_ROAM_SCAN_MAX_PB_REQ_SIZE];
4041 };
4042 
4043 /**
4044  * struct obss_scanparam - OBSS scan parameters
4045  * @obss_passive_dwelltime: message type
4046  * @obss_active_dwelltime: message length
4047  * @obss_width_trigger_interval: obss passive dwelltime
4048  * @obss_passive_total_per_channel: obss passive total scan time
4049  * @obss_active_total_per_channel: obss active total scan time
4050  * @bsswidth_ch_trans_delay: OBSS transition delay time
4051  * @obss_activity_threshold: OBSS activity threshold
4052  */
4053 struct obss_scanparam {
4054 	uint16_t obss_passive_dwelltime;
4055 	uint16_t obss_active_dwelltime;
4056 	uint16_t obss_width_trigger_interval;
4057 	uint16_t obss_passive_total_per_channel;
4058 	uint16_t obss_active_total_per_channel;
4059 	uint16_t bsswidth_ch_trans_delay;
4060 	uint16_t obss_activity_threshold;
4061 };
4062 
4063 /**
4064  * struct sir_apf_set_offload - set apf filter instructions
4065  * @session_id: session identifier
4066  * @version: host apf version
4067  * @filter_id: Filter ID for APF filter
4068  * @total_length: The total length of the full instruction
4069  *                total_length equal to 0 means reset
4070  * @current_offset: current offset, 0 means start a new setting
4071  * @current_length: Length of current @program
4072  * @program: APF instructions
4073  */
4074 struct sir_apf_set_offload {
4075 	uint8_t  session_id;
4076 	uint32_t version;
4077 	uint32_t filter_id;
4078 	uint32_t total_length;
4079 	uint32_t current_offset;
4080 	uint32_t current_length;
4081 	uint8_t  *program;
4082 };
4083 
4084 /**
4085  * struct sir_apf_offload_capabilities - get apf Capabilities
4086  * @apf_version: fw's implement version
4087  * @max_apf_filters: max filters that fw supports
4088  * @max_bytes_for_apf_inst: the max bytes that can be used as apf instructions
4089  */
4090 struct sir_apf_get_offload {
4091 	uint32_t apf_version;
4092 	uint32_t max_apf_filters;
4093 	uint32_t max_bytes_for_apf_inst;
4094 };
4095 
4096 #ifdef WLAN_FEATURE_NAN
4097 /**
4098  * enum ndp_end_type - NDP end type
4099  * @NDP_END_TYPE_UNSPECIFIED: type is unspecified
4100  * @NDP_END_TYPE_PEER_UNAVAILABLE: type is peer unavailable
4101  * @NDP_END_TYPE_OTA_FRAME: NDP end frame received from peer
4102  *
4103  */
4104 enum ndp_end_type {
4105 	NDP_END_TYPE_UNSPECIFIED = 0x00,
4106 	NDP_END_TYPE_PEER_UNAVAILABLE = 0x01,
4107 	NDP_END_TYPE_OTA_FRAME = 0x02,
4108 };
4109 
4110 /**
4111  * enum ndp_end_reason_code - NDP end reason code
4112  * @NDP_END_REASON_UNSPECIFIED: reason is unspecified
4113  * @NDP_END_REASON_INACTIVITY: reason is peer inactivity
4114  * @NDP_END_REASON_PEER_DATA_END: data end indication received from peer
4115  *
4116  */
4117 enum ndp_end_reason_code {
4118 	NDP_END_REASON_UNSPECIFIED = 0x00,
4119 	NDP_END_REASON_INACTIVITY = 0x01,
4120 	NDP_END_REASON_PEER_DATA_END = 0x02,
4121 };
4122 
4123 /**
4124  * enum nan_status_type - NDP status type
4125  * @NDP_RSP_STATUS_SUCCESS: request was successful
4126  * @NDP_RSP_STATUS_ERROR: request failed
4127  */
4128 enum nan_status_type {
4129 	NDP_RSP_STATUS_SUCCESS = 0x00,
4130 	NDP_RSP_STATUS_ERROR = 0x01,
4131 };
4132 
4133 /**
4134  * enum nan_reason_code - NDP command rsp reason code value
4135  * @NDP_UNSUPPORTED_CONCURRENCY: Will be used in unsupported concurrency cases
4136  * @NDP_NAN_DATA_IFACE_CREATE_FAILED: ndi create failed
4137  * @NDP_NAN_DATA_IFACE_DELETE_FAILED: ndi delete failed
4138  * @NDP_DATA_INITIATOR_REQ_FAILED: data initiator request failed
4139  * @NDP_DATA_RESPONDER_REQ_FAILED: data responder request failed
4140  * @NDP_INVALID_SERVICE_INSTANCE_ID: invalid service instance id
4141  * @NDP_INVALID_NDP_INSTANCE_ID: invalid ndp instance id
4142  * @NDP_INVALID_RSP_CODE: invalid response code in ndp responder request
4143  * @NDP_INVALID_APP_INFO_LEN: invalid app info length
4144  * @NDP_NMF_REQ_FAIL: OTA nan mgmt frame failure for data request
4145  * @NDP_NMF_RSP_FAIL: OTA nan mgmt frame failure for data response
4146  * @NDP_NMF_CNF_FAIL: OTA nan mgmt frame failure for confirm
4147  * @NDP_END_FAILED: ndp end failed
4148  * @NDP_NMF_END_REQ_FAIL: OTA nan mgmt frame failure for data end
4149  * @NDP_VENDOR_SPECIFIC_ERROR: other vendor specific failures
4150  */
4151 enum nan_reason_code {
4152 	NDP_UNSUPPORTED_CONCURRENCY = 9000,
4153 	NDP_NAN_DATA_IFACE_CREATE_FAILED = 9001,
4154 	NDP_NAN_DATA_IFACE_DELETE_FAILED = 9002,
4155 	NDP_DATA_INITIATOR_REQ_FAILED = 9003,
4156 	NDP_DATA_RESPONDER_REQ_FAILED = 9004,
4157 	NDP_INVALID_SERVICE_INSTANCE_ID = 9005,
4158 	NDP_INVALID_NDP_INSTANCE_ID = 9006,
4159 	NDP_INVALID_RSP_CODE = 9007,
4160 	NDP_INVALID_APP_INFO_LEN = 9008,
4161 	NDP_NMF_REQ_FAIL = 9009,
4162 	NDP_NMF_RSP_FAIL = 9010,
4163 	NDP_NMF_CNF_FAIL = 9011,
4164 	NDP_END_FAILED = 9012,
4165 	NDP_NMF_END_REQ_FAIL = 9013,
4166 	/* 9500 onwards vendor specific error codes */
4167 	NDP_VENDOR_SPECIFIC_ERROR = 9500,
4168 };
4169 
4170 /**
4171  * struct ndi_create_rsp - ndi create response params
4172  * @status: request status
4173  * @reason: reason if any
4174  *
4175  */
4176 struct ndi_create_rsp {
4177 	uint32_t status;
4178 	uint32_t reason;
4179 	uint8_t sta_id;
4180 };
4181 
4182 /**
4183  * struct ndi_delete_rsp - ndi delete response params
4184  * @status: request status
4185  * @reason: reason if any
4186  *
4187  */
4188 struct ndi_delete_rsp {
4189 	uint32_t status;
4190 	uint32_t reason;
4191 };
4192 
4193 /**
4194  * struct peer_ndp_map  - mapping of NDP instances to peer to VDEV
4195  * @vdev_id: session id of the interface over which ndp is being created
4196  * @peer_ndi_mac_addr: peer NDI mac address
4197  * @num_active_ndp_sessions: number of active NDP sessions on the peer
4198  * @type: NDP end indication type
4199  * @reason_code: NDP end indication reason code
4200  * @ndp_instance_id: NDP instance ID
4201  *
4202  */
4203 struct peer_ndp_map {
4204 	uint32_t vdev_id;
4205 	struct qdf_mac_addr peer_ndi_mac_addr;
4206 	uint32_t num_active_ndp_sessions;
4207 	enum ndp_end_type type;
4208 	enum ndp_end_reason_code reason_code;
4209 	uint32_t ndp_instance_id;
4210 };
4211 
4212 #endif /* WLAN_FEATURE_NAN */
4213 
4214 /**
4215  * struct sir_p2p_lo_start - p2p listen offload start
4216  * @vdev_id: vdev identifier
4217  * @ctl_flags: control flag
4218  * @freq: p2p listen frequency
4219  * @period: listen offload period
4220  * @interval: listen offload interval
4221  * @count: number listen offload intervals
4222  * @device_types: device types
4223  * @dev_types_len: device types length
4224  * @probe_resp_tmplt: probe response template
4225  * @probe_resp_len: probe response template length
4226  */
4227 struct sir_p2p_lo_start {
4228 	uint32_t vdev_id;
4229 	uint32_t ctl_flags;
4230 	uint32_t freq;
4231 	uint32_t period;
4232 	uint32_t interval;
4233 	uint32_t count;
4234 	uint8_t  *device_types;
4235 	uint32_t dev_types_len;
4236 	uint8_t  *probe_resp_tmplt;
4237 	uint32_t probe_resp_len;
4238 };
4239 
4240 /**
4241  * struct sir_p2p_lo_event - P2P listen offload stop event
4242  * @vdev_id: vdev identifier
4243  * @reason_code: P2P listen offload stop reason
4244  */
4245 struct sir_p2p_lo_event {
4246 	uint32_t vdev_id;
4247 	uint32_t reason_code;
4248 };
4249 
4250 /**
4251  * struct sir_hal_pwr_dbg_cmd - unit test command parameters
4252  * @pdev_id: pdev id
4253  * @module_id: module id
4254  * @num_args: number of arguments
4255  * @args: arguments
4256  */
4257 struct sir_mac_pwr_dbg_cmd {
4258 	uint32_t pdev_id;
4259 	uint32_t module_id;
4260 	uint32_t num_args;
4261 	uint32_t args[MAX_POWER_DBG_ARGS_SUPPORTED];
4262 };
4263 
4264 /**
4265  * struct sme_send_disassoc_frm_req - send disassoc request frame
4266  * @msg_type: message type
4267  * @length: length of message
4268  * @vdev_id: vdev id
4269  * @peer_mac: peer mac address
4270  * @reason: reason for disassoc
4271  * @wait_for_ack: wait for acknowledgment
4272  **/
4273  struct sme_send_disassoc_frm_req {
4274 	uint16_t msg_type;
4275 	uint16_t length;
4276 	uint8_t vdev_id;
4277 	uint8_t peer_mac[6];
4278 	uint16_t reason;
4279 	uint8_t wait_for_ack;
4280  };
4281 
4282 /**
4283  * struct sme_update_access_policy_vendor_ie - update vendor ie and access
4284  * policy
4285  * @msg_type: message id
4286  * @msg_len: message length
4287  * @vdev_id: vdev id
4288  * @ie: vendor ie
4289  * @access_policy: access policy for vendor ie
4290  */
4291 struct sme_update_access_policy_vendor_ie {
4292 	uint16_t msg_type;
4293 	uint16_t length;
4294 	uint32_t vdev_id;
4295 	uint8_t ie[WLAN_MAX_IE_LEN + 2];
4296 	uint8_t access_policy;
4297 };
4298 
4299 /**
4300  * struct sme_tx_fail_cnt_threshold - tx failure count for disconnect to fw
4301  * @session_id: Session id
4302  * @tx_fail_cnt_threshold: Tx failure count to do disconnect
4303  */
4304 struct sme_tx_fail_cnt_threshold {
4305 	uint8_t session_id;
4306 	uint32_t tx_fail_cnt_threshold;
4307 };
4308 
4309 /**
4310  * struct sme_short_retry_limit - transmission retry limit for short frames.
4311  * @session_id: Session id
4312  * @short_retry_limit: transmission retry limit for short frame.
4313  *
4314  */
4315 struct sme_short_retry_limit {
4316 	uint8_t session_id;
4317 	uint32_t short_retry_limit;
4318 };
4319 
4320 /**
4321  * struct sme_long_retry_limit - transmission retry limit for long frames
4322  * @session_id: Session id
4323  * @short_retry_limit: transmission retry limit for long frames.
4324  *
4325  */
4326 struct sme_long_retry_limit {
4327 	uint8_t session_id;
4328 	uint32_t long_retry_limit;
4329 };
4330 
4331 /**
4332  * struct sme_addba_accept - Allow/reject the addba request frame
4333  * @session_id: Session id
4334  * @addba_accept: Allow/reject the addba request frame
4335  */
4336 struct sme_addba_accept {
4337 	uint8_t session_id;
4338 	uint8_t addba_accept;
4339 };
4340 
4341 /**
4342  * struct sme_sta_inactivity_timeout - set sta_inactivity_timeout
4343  * @session_id: session Id.
4344  * @sta_inactivity_timeout: Timeout to disconnect STA after there
4345  * is no activity.
4346  */
4347 struct sme_sta_inactivity_timeout {
4348 	uint8_t session_id;
4349 	uint32_t sta_inactivity_timeout;
4350 };
4351 
4352 /**
4353  * struct sme_vdev_pause - Pause vdev for a defined time interval
4354  * @session_id: Session id
4355  * @vdev_pause_duration: vdev pause duration
4356  */
4357 struct sme_vdev_pause {
4358 	uint8_t session_id;
4359 	uint8_t vdev_pause_duration;
4360 };
4361 
4362 /*
4363  * struct wow_pulse_mode - WoW Pulse set cmd struct
4364  * @wow_pulse_enable: enable or disable this feature
4365  * @wow_pulse_pin: GPIO PIN for Pulse
4366  * @wow_pulse_interval_low: Pulse interval low
4367  * @wow_pulse_interval_high: Pulse interval high
4368  * @wow_pulse_repeat_count: Pulse repeat count
4369  * @wow_pulse_init_state: Pulse init level
4370  *
4371  * SME uses this structure to configure wow pulse info
4372  * and send it to WMA
4373  */
4374 struct wow_pulse_mode {
4375 	bool                       wow_pulse_enable;
4376 	uint8_t                    wow_pulse_pin;
4377 	uint16_t                   wow_pulse_interval_high;
4378 	uint16_t                   wow_pulse_interval_low;
4379 	uint32_t                   wow_pulse_repeat_count;
4380 	uint32_t                   wow_pulse_init_state;
4381 };
4382 
4383 
4384 /**
4385  * umac_send_mb_message_to_mac(): post message to umac
4386  * @msg: opaque message pointer
4387  *
4388  * Return: QDF status
4389  */
4390 QDF_STATUS umac_send_mb_message_to_mac(void *msg);
4391 
4392 /**
4393  * struct scan_chan_info - channel info
4394  * @freq: radio frequence
4395  * @cmd flag: cmd flag
4396  * @noise_floor: noise floor
4397  * @cycle_count: cycle count
4398  * @rx_clear_count: rx clear count
4399  * @tx_frame_count: TX frame count
4400  * @clock_freq: clock frequence MHZ
4401  * @cca_busy_subband_info: CCA busy for each possible 20Mhz subbands
4402  * of the wideband scan channel
4403  */
4404 struct scan_chan_info {
4405 	uint32_t freq;
4406 	uint32_t cmd_flag;
4407 	uint32_t noise_floor;
4408 	uint32_t cycle_count;
4409 	uint32_t rx_clear_count;
4410 	uint32_t tx_frame_count;
4411 	uint32_t clock_freq;
4412 	struct wide_band_scan_chan_info subband_info;
4413 };
4414 
4415 /**
4416  * enum wow_resume_trigger - resume trigger override setting values
4417  * @WOW_RESUME_TRIGGER_DEFAULT: fw to use platform default resume trigger
4418  * @WOW_RESUME_TRIGGER_HTC_WAKEUP: force fw to use HTC Wakeup to resume
4419  * @WOW_RESUME_TRIGGER_GPIO: force fw to use GPIO to resume
4420  * @WOW_RESUME_TRIGGER_COUNT: number of resume trigger options
4421  */
4422 enum wow_resume_trigger {
4423 	/* always first */
4424 	WOW_RESUME_TRIGGER_DEFAULT = 0,
4425 	WOW_RESUME_TRIGGER_HTC_WAKEUP,
4426 	WOW_RESUME_TRIGGER_GPIO,
4427 	/* always last */
4428 	WOW_RESUME_TRIGGER_COUNT
4429 };
4430 
4431 /**
4432  * enum wow_interface_pause - interface pause override setting values
4433  * @WOW_INTERFACE_PAUSE_DEFAULT: use platform default interface pause setting
4434  * @WOW_INTERFACE_PAUSE_ENABLE: force interface pause setting to enabled
4435  * @WOW_INTERFACE_PAUSE_DISABLE: force interface pause setting to disabled
4436  * @WOW_INTERFACE_PAUSE_COUNT: number of interface pause options
4437  */
4438 enum wow_interface_pause {
4439 	/* always first */
4440 	WOW_INTERFACE_PAUSE_DEFAULT = 0,
4441 	WOW_INTERFACE_PAUSE_ENABLE,
4442 	WOW_INTERFACE_PAUSE_DISABLE,
4443 	/* always last */
4444 	WOW_INTERFACE_PAUSE_COUNT
4445 };
4446 
4447 /**
4448  * struct wow_enable_params - A collection of wow enable override parameters
4449  * @is_unit_test: true to notify fw this is a unit-test suspend
4450  * @interface_pause: used to override the interface pause indication sent to fw
4451  * @resume_trigger: used to force fw to use a particular resume method
4452  */
4453 struct wow_enable_params {
4454 	bool is_unit_test;
4455 	enum wow_interface_pause interface_pause;
4456 	enum wow_resume_trigger resume_trigger;
4457 };
4458 
4459 #define HE_LTF_1X	0
4460 #define HE_LTF_2X	1
4461 #define HE_LTF_4X	2
4462 
4463 #define HE_LTF_ALL	0x7
4464 #define HE_SGI_MASK	0xFF00
4465 
4466 #define AUTO_RATE_GI_400NS	8
4467 #define AUTO_RATE_GI_800NS	9
4468 #define AUTO_RATE_GI_1600NS	10
4469 #define AUTO_RATE_GI_3200NS	11
4470 
4471 #define AUTO_RATE_LDPC_DIS_BIT	16
4472 
4473 #define SET_AUTO_RATE_SGI_VAL(set_val, bit_mask) \
4474 	(set_val = (set_val & HE_LTF_ALL) | bit_mask)
4475 
4476 #define SET_AUTO_RATE_HE_LTF_VAL(set_val, bit_mask) \
4477 	(set_val = (set_val & HE_SGI_MASK) | bit_mask)
4478 
4479 #define MSCS_OUI_TYPE "\x58"
4480 #define MSCS_OUI_SIZE 1
4481 
4482 #ifdef WLAN_FEATURE_11AX
4483 #define HE_CAP_OUI_TYPE "\x23"
4484 #define HE_CAP_OUI_SIZE 1
4485 #define HE_OP_OUI_TYPE "\x24"
4486 #define HE_OP_OUI_SIZE 1
4487 
4488 #define HE_RU_ALLOC_INDX0_MASK (0x01 << 0)
4489 #define HE_RU_ALLOC_INDX1_MASK (0x01 << 1)
4490 #define HE_RU_ALLOC_INDX2_MASK (0x01 << 2)
4491 #define HE_RU_ALLOC_INDX3_MASK (0x01 << 3)
4492 
4493 /* 3 bits for NSS and 4 bits for RU Index */
4494 #define HE_PPET_NSS_LEN 3
4495 #define HE_PEPT_RU_IDX_LEN 4
4496 #define HE_PPET_NSS_RU_LEN (HE_PPET_NSS_LEN + HE_PEPT_RU_IDX_LEN)
4497 #define HE_PPET_SIZE 3
4498 #define HE_BYTE_SIZE 8
4499 
4500 struct ppet_hdr {
4501 	uint8_t nss:3;
4502 	uint8_t ru_idx_mask:4;
4503 	uint8_t remaining:1;
4504 };
4505 
4506 /* MAX PPET size = 7 bits + (max_nss X max_ru_number X 6) = 25 bytes */
4507 #define HE_MAX_PPET_SIZE WNI_CFG_HE_PPET_LEN
4508 
4509 #define HE_MAX_PHY_CAP_SIZE 3
4510 
4511 #define HE_CH_WIDTH_GET_BIT(ch_wd, bit)      (((ch_wd) >> (bit)) & 1)
4512 #define HE_CH_WIDTH_COMBINE(b0, b1, b2, b3, b4, b5, b6)             \
4513 	((uint8_t)(b0) | ((b1) << 1) | ((b2) << 2) |  ((b3) << 3) | \
4514 	((b4) << 4) | ((b5) << 5) | ((b6) << 6))
4515 #define HE_CH_WIDTH_CLR_BIT(ch_wd, bit)      (((ch_wd) >> (bit)) & ~1)
4516 
4517 /*
4518  * MCS values are interpreted as in IEEE 11ax-D1.4 spec onwards
4519  * +-----------------------------------------------------+
4520  * |  SS8  |  SS7  |  SS6  | SS5 | SS4 | SS3 | SS2 | SS1 |
4521  * +-----------------------------------------------------+
4522  * | 15-14 | 13-12 | 11-10 | 9-8 | 7-6 | 5-4 | 3-2 | 1-0 |
4523  * +-----------------------------------------------------+
4524  */
4525 #define HE_MCS_NSS_SHIFT(nss)                 (((nss) - 1) << 1)
4526 #define HE_MCS_MSK_4_NSS(nss)                 (3 << HE_MCS_NSS_SHIFT(nss))
4527 #define HE_MCS_INV_MSK_4_NSS(nss)             (~HE_MCS_MSK_4_NSS(nss))
4528 #define HE_GET_MCS_4_NSS(mcs_set, nss)             \
4529 	(((mcs_set) >> HE_MCS_NSS_SHIFT(nss)) & 3)
4530 #define HE_SET_MCS_4_NSS(mcs_set, mcs, nss)        \
4531 	(((mcs_set) & HE_MCS_INV_MSK_4_NSS(nss)) | \
4532 	((mcs) << HE_MCS_NSS_SHIFT(nss)))
4533 #define HE_MCS_IS_NSS_ENABLED(mcs_set, nss)        \
4534 	((HE_MCS_MSK_4_NSS(nss) & (mcs_set)) != HE_MCS_MSK_4_NSS(nss))
4535 
4536 #define HE_MCS_ALL_DISABLED                   0xFFFF
4537 
4538 #define HE_MCS_0_7     0x0
4539 #define HE_MCS_0_9     0x1
4540 #define HE_MCS_0_11    0x2
4541 #define HE_MCS_DISABLE 0x3
4542 
4543 #define HE_6G_MIN_MPDU_START_SAPCE_BIT_POS 0
4544 #define HE_6G_MAX_AMPDU_LEN_EXP_BIT_POS 3
4545 #define HE_6G_MAX_MPDU_LEN_BIT_POS 6
4546 #define HE_6G_SMPS_BIT_POS 9
4547 #define HE_6G_RD_RESP_BIT_POS 11
4548 #define HE_6G_RX_ANT_PATTERN_BIT_POS 12
4549 #define HE_6G_TX_ANT_PATTERN_BIT_POS 13
4550 
4551 /*
4552  * Following formuala has been arrived at using karnaugh map and unit tested
4553  * with sample code. Take MCS for each NSS as 2 bit value first and solve for
4554  * 2 bit intersection of NSS. Use following table/Matrix as guide for solving
4555  * K-Maps
4556  * MCS 1\MCS 2    00         01         10         11
4557  *    00          00         00         00         11
4558  *    01          00         01         01         11
4559  *    10          00         01         10         11
4560  *    11          11         11         11         11
4561  * if output MCS is o1o0, then as per K-map reduction:
4562  * o0 = m1.m0 | n1.n0 | (~m1).m0.(n1^n0) | (~n1).n0.(m1^m0)
4563  * o1 = m1.m0 | n1.n0 | m1.(~m0).n1.(~n0)
4564  *
4565  * Please note: Calculating MCS intersection is 80211 protocol specific and
4566  * should be implemented in PE. WMA can use this macro rather than calling any
4567  * lim API to do the intersection.
4568  */
4569 #define HE_INTERSECT_MCS_BITS_PER_NSS(m1, m0, n1, n0)                \
4570 	(((m1 & m0) | (n1 & n0) | (((~m1) & m0) & (n1 ^ n0))  |      \
4571 	(((~n1) & n0) & (m1 ^ m0))) | (((m1 & m0) | (n1 & n0) |      \
4572 	(m1 & ~m0 & n1 & ~n0)) << 1))
4573 
4574 /* following takes MCS as 2 bits */
4575 #define HE_INTERSECT_MCS_PER_NSS(mcs_1, mcs_2)                       \
4576 	HE_INTERSECT_MCS_BITS_PER_NSS((mcs_1 >> 1), (mcs_1 & 1),     \
4577 				      (mcs_2 >> 1), (mcs_2 & 1))
4578 
4579 /* following takes MCS as 16 bits */
4580 #define HE_INTERSECT_MCS(mcs_1, mcs_2)                             ( \
4581 	HE_INTERSECT_MCS_PER_NSS(HE_GET_MCS_4_NSS(mcs_1, 1),         \
4582 		HE_GET_MCS_4_NSS(mcs_2, 1)) << HE_MCS_NSS_SHIFT(1) | \
4583 	HE_INTERSECT_MCS_PER_NSS(HE_GET_MCS_4_NSS(mcs_1, 2),         \
4584 		HE_GET_MCS_4_NSS(mcs_2, 2)) << HE_MCS_NSS_SHIFT(2) | \
4585 	HE_INTERSECT_MCS_PER_NSS(HE_GET_MCS_4_NSS(mcs_1, 3),         \
4586 		HE_GET_MCS_4_NSS(mcs_2, 3)) << HE_MCS_NSS_SHIFT(3) | \
4587 	HE_INTERSECT_MCS_PER_NSS(HE_GET_MCS_4_NSS(mcs_1, 4),         \
4588 		HE_GET_MCS_4_NSS(mcs_2, 4)) << HE_MCS_NSS_SHIFT(4) | \
4589 	HE_INTERSECT_MCS_PER_NSS(HE_GET_MCS_4_NSS(mcs_1, 5),         \
4590 		HE_GET_MCS_4_NSS(mcs_2, 5)) << HE_MCS_NSS_SHIFT(5) | \
4591 	HE_INTERSECT_MCS_PER_NSS(HE_GET_MCS_4_NSS(mcs_1, 6),         \
4592 		HE_GET_MCS_4_NSS(mcs_2, 6)) << HE_MCS_NSS_SHIFT(6) | \
4593 	HE_INTERSECT_MCS_PER_NSS(HE_GET_MCS_4_NSS(mcs_1, 7),         \
4594 		HE_GET_MCS_4_NSS(mcs_2, 7)) << HE_MCS_NSS_SHIFT(7) | \
4595 	HE_INTERSECT_MCS_PER_NSS(HE_GET_MCS_4_NSS(mcs_1, 8),         \
4596 		HE_GET_MCS_4_NSS(mcs_2, 8)) << HE_MCS_NSS_SHIFT(8))
4597 
4598 /**
4599  * struct he_capability - to store 11ax HE capabilities
4600  * @phy_cap: HE PHY capabilities
4601  * @mac_cap: HE MAC capabilities
4602  * @mcs: HE MCS
4603  * @ppet: HE PPE threshold
4604  */
4605 struct he_capability {
4606 	uint32_t phy_cap[HE_MAX_PHY_CAP_SIZE];
4607 	uint32_t mac_cap;
4608 	uint32_t mcs;
4609 	struct wlan_psoc_host_ppe_threshold ppet;
4610 };
4611 #endif
4612 
4613 #define HE_GET_NSS(mcs, nss)                                         \
4614 	do {                                                         \
4615 		(nss) = 0;                                           \
4616 		while ((((mcs) >> ((nss)*2)) & 3) != 3 && nss < 8)   \
4617 			(nss)++;                                     \
4618 	} while (0)
4619 
4620 #ifdef WLAN_FEATURE_11BE
4621 #define EHT_MAX_PHY_CAP_SIZE 3
4622 #define EHT_OP_OUI_TYPE "\x6a"
4623 #define EHT_OP_OUI_SIZE 1
4624 
4625 #define MLO_IE_OUI_TYPE "\x6b"
4626 #define MLO_IE_OUI_SIZE 1
4627 
4628 #define EHT_CAP_OUI_TYPE "\x6c"
4629 #define EHT_CAP_OUI_SIZE 1
4630 
4631 /**
4632  * struct eht_capability - to store 11be EHT capabilities
4633  * @phy_cap: EHT PHY capabilities
4634  * @mac_cap: EHT MAC capabilities
4635  * @mcs: EHT MCS
4636  */
4637 struct eht_capability {
4638 	uint32_t phy_cap[EHT_MAX_PHY_CAP_SIZE];
4639 	uint32_t mac_cap;
4640 	uint32_t mcs;
4641 };
4642 #endif
4643 /**
4644  * struct rsp_stats - arp packet stats
4645  * @arp_req_enqueue: fw tx count
4646  * @arp_req_tx_success: tx ack count
4647  * @arp_req_tx_failure: tx ack fail count
4648  * @arp_rsp_recvd: rx fw count
4649  * @out_of_order_arp_rsp_drop_cnt: out of order count
4650  * @dad_detected: dad detected
4651  * @connect_status: connection status
4652  * @ba_session_establishment_status: BA session status
4653  * @connect_stats_present: connectivity stats present or not
4654  * @tcp_ack_recvd: tcp syn ack's count
4655  * @icmpv4_rsp_recvd: icmpv4 responses count
4656  */
4657 struct rsp_stats {
4658 	uint32_t vdev_id;
4659 	uint32_t arp_req_enqueue;
4660 	uint32_t arp_req_tx_success;
4661 	uint32_t arp_req_tx_failure;
4662 	uint32_t arp_rsp_recvd;
4663 	uint32_t out_of_order_arp_rsp_drop_cnt;
4664 	uint32_t dad_detected;
4665 	uint32_t connect_status;
4666 	uint32_t ba_session_establishment_status;
4667 	bool connect_stats_present;
4668 	uint32_t tcp_ack_recvd;
4669 	uint32_t icmpv4_rsp_recvd;
4670 };
4671 
4672 /**
4673  * struct set_arp_stats_params - set/reset arp stats
4674  * @vdev_id: session id
4675  * @flag: enable/disable stats
4676  * @pkt_type: type of packet(1 - arp)
4677  * @ip_addr: subnet ipv4 address in case of encrypted packets
4678  * @pkt_type_bitmap: pkt bitmap
4679  * @tcp_src_port: tcp src port for pkt tracking
4680  * @tcp_dst_port: tcp dst port for pkt tracking
4681  * @icmp_ipv4: target ipv4 address to track ping packets
4682  * @reserved: reserved
4683  */
4684 struct set_arp_stats_params {
4685 	uint32_t vdev_id;
4686 	uint8_t flag;
4687 	uint8_t pkt_type;
4688 	uint32_t ip_addr;
4689 	uint32_t pkt_type_bitmap;
4690 	uint32_t tcp_src_port;
4691 	uint32_t tcp_dst_port;
4692 	uint32_t icmp_ipv4;
4693 	uint32_t reserved;
4694 };
4695 
4696 /**
4697  * struct get_arp_stats_params - get arp stats from firmware
4698  * @pkt_type: packet type(1 - ARP)
4699  * @vdev_id: session id
4700  */
4701 struct get_arp_stats_params {
4702 	uint8_t pkt_type;
4703 	uint32_t vdev_id;
4704 };
4705 
4706 typedef void (*sme_rcpi_callback)(void *context, struct qdf_mac_addr mac_addr,
4707 				  int32_t rcpi, QDF_STATUS status);
4708 /**
4709  * struct sme_rcpi_req - structure for querying rcpi info
4710  * @session_id: session for which rcpi is required
4711  * @measurement_type: type of measurement from enum rcpi_measurement_type
4712  * @rcpi_callback: callback function to be invoked for rcpi response
4713  * @rcpi_context: context info for rcpi callback
4714  * @mac_addr: peer addr for which rcpi is required
4715  */
4716 struct sme_rcpi_req {
4717 	uint32_t session_id;
4718 	enum rcpi_measurement_type measurement_type;
4719 	sme_rcpi_callback rcpi_callback;
4720 	void *rcpi_context;
4721 	struct qdf_mac_addr mac_addr;
4722 };
4723 
4724 /*
4725  * @SCAN_REJECT_DEFAULT: default value
4726  * @CONNECTION_IN_PROGRESS: connection is in progress
4727  * @REASSOC_IN_PROGRESS: reassociation is in progress
4728  * @EAPOL_IN_PROGRESS: STA/P2P-CLI is in middle of EAPOL/WPS exchange
4729  * @SAP_EAPOL_IN_PROGRESS: SAP/P2P-GO is in middle of EAPOL/WPS exchange
4730  * @SAP_CONNECTION_IN_PROGRESS: SAP/P2P-GO is in middle of connection.
4731  * @NAN_ENABLE_DISABLE_IN_PROGRESS: NAN is in middle of enable/disable discovery
4732  */
4733 enum scan_reject_states {
4734 	SCAN_REJECT_DEFAULT = 0,
4735 	CONNECTION_IN_PROGRESS,
4736 	REASSOC_IN_PROGRESS,
4737 	EAPOL_IN_PROGRESS,
4738 	SAP_EAPOL_IN_PROGRESS,
4739 	SAP_CONNECTION_IN_PROGRESS,
4740 	NAN_ENABLE_DISABLE_IN_PROGRESS,
4741 };
4742 
4743 /**
4744  * sir_sme_rx_aggr_hole_ind - sme rx aggr hole indication
4745  * @hole_cnt: num of holes detected
4746  * @hole_info_array: hole info
4747  */
4748 struct sir_sme_rx_aggr_hole_ind {
4749 	uint32_t hole_cnt;
4750 	uint32_t hole_info_array[];
4751 };
4752 
4753 /**
4754  * struct sir_set_rx_reorder_timeout_val - rx reorder timeout
4755  * @rx_timeout_pri: reorder timeout for AC
4756  *                  rx_timeout_pri[0] : AC_VO
4757  *                  rx_timeout_pri[1] : AC_VI
4758  *                  rx_timeout_pri[2] : AC_BE
4759  *                  rx_timeout_pri[3] : AC_BK
4760  */
4761 struct sir_set_rx_reorder_timeout_val {
4762 	uint32_t rx_timeout_pri[4];
4763 };
4764 
4765 /**
4766  * struct sir_peer_set_rx_blocksize - set rx blocksize
4767  * @vdev_id: vdev id
4768  * @peer_macaddr: peer mac address
4769  * @rx_block_ack_win_limit: windows size limitation
4770  */
4771 struct sir_peer_set_rx_blocksize {
4772 	uint32_t vdev_id;
4773 	struct qdf_mac_addr peer_macaddr;
4774 	uint32_t rx_block_ack_win_limit;
4775 };
4776 
4777 /**
4778  * struct sir_rssi_disallow_lst - Structure holding Rssi based avoid candidate
4779  * list
4780  * @node: Node pointer
4781  * @bssid: BSSID of the AP
4782  * @retry_delay: Retry delay received during last rejection in ms
4783  * @ expected_rssi: RSSI at which STA can initiate
4784  * @time_during_rejection: Timestamp during last rejection in millisec
4785  * @reject_reason: reason to add the BSSID to DLM
4786  * @source: Source of adding the BSSID to DLM
4787  * @original_timeout: original timeout sent by the AP
4788  * @received_time: Timestamp when the AP was added to the Denylist
4789  */
4790 struct sir_rssi_disallow_lst {
4791 	qdf_list_node_t node;
4792 	struct qdf_mac_addr bssid;
4793 	uint32_t retry_delay;
4794 	int8_t expected_rssi;
4795 	qdf_time_t time_during_rejection;
4796 	enum dlm_reject_ap_reason reject_reason;
4797 	enum dlm_reject_ap_source source;
4798 	uint32_t original_timeout;
4799 	qdf_time_t received_time;
4800 };
4801 
4802 /**
4803  * struct chain_rssi_result - chain rssi result
4804  * num_chains_valid: valid chain num
4805  * @chain_rssi: chain rssi result as dBm unit
4806  * @chain_evm: error vector magnitude
4807  * @ant_id: antenna id
4808  */
4809 #define CHAIN_MAX_NUM 8
4810 struct chain_rssi_result {
4811 	uint32_t num_chains_valid;
4812 	uint32_t chain_rssi[CHAIN_MAX_NUM];
4813 	int32_t chain_evm[CHAIN_MAX_NUM];
4814 	uint32_t ant_id[CHAIN_MAX_NUM];
4815 };
4816 
4817 /**
4818  * struct get_chain_rssi_req_params - get chain rssi req params
4819  * @peer_macaddr: specific peer mac address
4820  * @session_id: session id
4821  */
4822 struct get_chain_rssi_req_params {
4823 	struct qdf_mac_addr peer_macaddr;
4824 	uint8_t session_id;
4825 };
4826 
4827 /*
4828  * struct sir_limit_off_chan - limit off-channel command parameters
4829  * @vdev_id: vdev id
4830  * @is_tos_active: status of the traffic (active/inactive)
4831  * @max_off_chan_time: max allowed off channel time
4832  * @rest_time: home channel time
4833  * @skip_dfs_chans: skip dfs channels during scan
4834  */
4835 struct sir_limit_off_chan {
4836 	uint8_t vdev_id;
4837 	bool is_tos_active;
4838 	uint32_t max_off_chan_time;
4839 	uint32_t rest_time;
4840 	bool skip_dfs_chans;
4841 };
4842 
4843 typedef void (*roam_scan_stats_cb)(void *context,
4844 				   struct wmi_roam_scan_stats_res *res);
4845 
4846 /**
4847  * struct sir_roam_scan_stats - Stores roam scan context
4848  * @vdev_id: vdev id
4849  * @cb: callback to be invoked for roam scan stats response
4850  * @context: context of callback
4851  */
4852 struct sir_roam_scan_stats {
4853 	uint32_t vdev_id;
4854 	roam_scan_stats_cb cb;
4855 	void *context;
4856 };
4857 
4858 /**
4859  * struct sae_info - SAE info used for commit/confirm messages
4860  * @msg_type: Message type
4861  * @msg_len: length of message
4862  * @vdev_id: vdev id
4863  * @peer_mac_addr: peer MAC address
4864  * @ssid: SSID
4865  * @akm: key mgmt suite used
4866  */
4867 struct sir_sae_info {
4868 	uint16_t msg_type;
4869 	uint16_t msg_len;
4870 	uint32_t vdev_id;
4871 	struct qdf_mac_addr peer_mac_addr;
4872 	tSirMacSSid ssid;
4873 	uint32_t akm;
4874 };
4875 
4876 /**
4877  * struct sir_sae_msg - SAE msg used for message posting
4878  * @message_type: message type
4879  * @length: message length
4880  * @vdev_id: vdev id
4881  * @sae_status: SAE status, 0: Success, Non-zero: Failure.
4882  * @pmkid: PMKID derived as part of SAE authentication
4883  * @peer_mac_addr: peer MAC address
4884  * @result_code: This carries the reason of the SAE auth failure.
4885  *               Currently, SAE authentication failure may happen due to
4886  *               1. Authentication failure detected as part of SAE auth frame
4887  *                  exchanges and validation.
4888  *               2. Deauth received from AP while SAE authentication is in
4889  *                  progress.
4890  */
4891 struct sir_sae_msg {
4892 	uint16_t message_type;
4893 	uint16_t length;
4894 	uint16_t vdev_id;
4895 	uint8_t pmkid[PMKID_LEN];
4896 	uint8_t sae_status;
4897 	tSirMacAddr peer_mac_addr;
4898 	tSirResultCodes result_code;
4899 };
4900 
4901 #ifdef WLAN_FEATURE_MOTION_DETECTION
4902 /**
4903  * struct sir_md_evt - motion detection event status
4904  * @vdev_id: vdev id
4905  * @status: md event status
4906  */
4907 struct sir_md_evt {
4908 	uint8_t vdev_id;
4909 	uint32_t status;
4910 };
4911 
4912 /**
4913  * struct sir_md_bl_evt - motion detection baseline event values
4914  * @vdev_id: vdev id
4915  * @bl_baseline_value: baseline correlation value calculated during baselining
4916  * @bl_max_corr_reserved: max corr value obtained during baselining phase in %
4917  * @bl_min_corr_reserved: min corr value obtained during baselining phase in %
4918  */
4919 struct sir_md_bl_evt {
4920 	uint8_t vdev_id;
4921 	uint32_t bl_baseline_value;
4922 	uint32_t bl_max_corr_reserved;
4923 	uint32_t bl_min_corr_reserved;
4924 };
4925 #endif /* WLAN_FEATURE_MOTION_DETECTION */
4926 
4927 #ifdef WLAN_MWS_INFO_DEBUGFS
4928 /**
4929  * struct sir_get_mws_coex_info - Get MWS coex info
4930  * @vdev_id: vdev id
4931  * @cmd_id: wmi mws-coex command IDs
4932  */
4933 struct sir_get_mws_coex_info {
4934 	uint32_t vdev_id;
4935 	uint32_t cmd_id;
4936 };
4937 #endif /* WLAN_MWS_INFO_DEBUGFS */
4938 
4939 /*
4940  * struct sir_update_session_txq_edca_param
4941  * @message_type: SME message type
4942  * @length: size of struct sir_update_session_txq_edca_param
4943  * @vdev_id: vdev ID
4944  * @txq_edca_params: txq edca parameter to update
4945  */
4946 struct sir_update_session_txq_edca_param {
4947 	uint16_t message_type;
4948 	uint16_t length;
4949 	uint8_t vdev_id;
4950 	tSirMacEdcaParamRecord txq_edca_params;
4951 };
4952 
4953 /* struct channel_change_req - Change channel
4954  * request for SAP
4955  * @vdev_id: vdev id
4956  * @target_chan_freq: New channel frequency
4957  * @sec_ch_offset: second channel offset
4958  * @center_freq_seg0: channel center freq 0
4959  * @center_freq_seg1: channel center freq 1
4960  * @target_punc_bitmap: New channel puncturing bitmap
4961  * @dot11mode: dot11 mode
4962  * @nw_type: nw type
4963  * @cac_duration_ms:  cac duration in ms
4964  * @dfs_regdomain: dfs regdomain
4965  * @opr_rates: operational rates
4966  * @ext_rates: extended rates
4967  */
4968 struct channel_change_req {
4969 	uint8_t vdev_id;
4970 	uint32_t target_chan_freq;
4971 	uint8_t sec_ch_offset;
4972 	enum phy_ch_width ch_width;
4973 	uint8_t center_freq_seg0;
4974 	uint8_t center_freq_seg1;
4975 #ifdef WLAN_FEATURE_11BE
4976 	uint16_t target_punc_bitmap;
4977 #endif
4978 	uint32_t dot11mode;
4979 	tSirNwType nw_type;
4980 	uint32_t cac_duration_ms;
4981 	uint32_t dfs_regdomain;
4982 	tSirMacRateSet opr_rates;
4983 	tSirMacRateSet ext_rates;
4984 };
4985 
4986 /* struct start_bss_config - Start BSS
4987  * request configurations
4988  * @vdev_id: vdev id
4989  * @cmd_id: serialization command id
4990  * @ssId: ssid
4991  * @dtimPeriod: dtim period
4992  * @ssidHidden: hidden ssid parameter
4993  * @privacy: ssid privacy
4994  * @authType: authentication type
4995  * @rsnIE: RSN IE of the AP
4996  * @add_ie_params: additional IEs
4997  * @oper_ch_freq: operating frequency
4998  * @vht_channel_width: channel width
4999  * @center_freq_seg0: channel center freq 0
5000  * @center_freq_seg1: channel center freq 1
5001  * @sec_ch_offset: secondary channel offset
5002  * @wps_state: wps config
5003  * @dot11mode: dot11 mode
5004  * @nwType: nw type
5005  * @operationalRateSet: operational rates
5006  * @extendedRateSet: extended rates
5007  * @beacon_tx_rate: Tx rate for beacon
5008  * @cac_duration_ms: cac duration in ms
5009  * @dfs_regdomain: dfs regdomain
5010  */
5011 struct start_bss_config {
5012 	uint8_t vdev_id;
5013 	uint32_t cmd_id;
5014 	tSirMacSSid ssId;
5015 	uint16_t beaconInterval;
5016 	uint32_t dtimPeriod;
5017 	uint8_t ssidHidden;
5018 
5019 	uint8_t privacy;
5020 	tAniAuthType authType;
5021 	tSirRSNie rsnIE;
5022 	struct add_ie_params add_ie_params;
5023 
5024 	uint32_t oper_ch_freq;
5025 	uint8_t vht_channel_width;
5026 	uint8_t center_freq_seg0;
5027 	uint8_t center_freq_seg1;
5028 	uint8_t sec_ch_offset;
5029 
5030 	uint8_t wps_state;
5031 	uint8_t dot11mode;
5032 	tSirNwType nwType;
5033 
5034 	tSirMacRateSet operationalRateSet;
5035 	tSirMacRateSet extendedRateSet;
5036 	uint16_t beacon_tx_rate;
5037 	uint32_t cac_duration_ms;
5038 	uint32_t dfs_regdomain;
5039 };
5040 
5041 #endif /* __SIR_API_H */
5042