xref: /wlan-driver/qcacld-3.0/core/mac/src/include/parser_api.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for
6*5113495bSYour Name  * any purpose with or without fee is hereby granted, provided that the
7*5113495bSYour Name  * above copyright notice and this permission notice appear in all
8*5113495bSYour Name  * copies.
9*5113495bSYour Name  *
10*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11*5113495bSYour Name  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12*5113495bSYour Name  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13*5113495bSYour Name  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14*5113495bSYour Name  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15*5113495bSYour Name  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16*5113495bSYour Name  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*5113495bSYour Name  * PERFORMANCE OF THIS SOFTWARE.
18*5113495bSYour Name  */
19*5113495bSYour Name 
20*5113495bSYour Name /*
21*5113495bSYour Name  * This file parser_api.h contains the definitions used
22*5113495bSYour Name  * for parsing received 802.11 frames
23*5113495bSYour Name  * Author:        Chandra Modumudi
24*5113495bSYour Name  * Date:          02/11/02
25*5113495bSYour Name  * History:-
26*5113495bSYour Name  * Date           Modified by    Modification Information
27*5113495bSYour Name  * --------------------------------------------------------------------
28*5113495bSYour Name  *
29*5113495bSYour Name  */
30*5113495bSYour Name #ifndef __PARSE_H__
31*5113495bSYour Name #define __PARSE_H__
32*5113495bSYour Name 
33*5113495bSYour Name #include "qdf_types.h"
34*5113495bSYour Name #include "sir_mac_prop_exts.h"
35*5113495bSYour Name #include "dot11f.h"
36*5113495bSYour Name #include "lim_ft_defs.h"
37*5113495bSYour Name #include "lim_session.h"
38*5113495bSYour Name #include "wlan_mlme_main.h"
39*5113495bSYour Name #include <wlan_mlo_mgr_public_structs.h>
40*5113495bSYour Name 
41*5113495bSYour Name #define COUNTRY_STRING_LENGTH    (3)
42*5113495bSYour Name #define COUNTRY_INFO_MAX_CHANNEL (84)
43*5113495bSYour Name #define MAX_SIZE_OF_TRIPLETS_IN_COUNTRY_IE (COUNTRY_STRING_LENGTH * \
44*5113495bSYour Name 						COUNTRY_INFO_MAX_CHANNEL)
45*5113495bSYour Name #define HIGHEST_24GHZ_CHANNEL_NUM  (14)
46*5113495bSYour Name 
47*5113495bSYour Name #define IS_24G_CH(__chNum) ((__chNum > 0) && (__chNum < 15))
48*5113495bSYour Name #define IS_5G_CH(__chNum) ((__chNum >= 36) && (__chNum <= 165))
49*5113495bSYour Name #define IS_2X2_CHAIN(__chain) ((__chain & 0x3) == 0x3)
50*5113495bSYour Name #define DISABLE_NSS2_MCS 0xC
51*5113495bSYour Name #define VHT_1x1_MCS9_MAP 0x2
52*5113495bSYour Name #define VHT_2x2_MCS9_MAP 0xA
53*5113495bSYour Name #define VHT_1x1_MCS8_VAL 0xFFFD
54*5113495bSYour Name #define VHT_2x2_MCS8_VAL 0xFFF5
55*5113495bSYour Name #define VHT_1x1_MCS_MASK 0x3
56*5113495bSYour Name #define VHT_2x2_MCS_MASK 0xF
57*5113495bSYour Name #define DISABLE_VHT_MCS_9(mcs, nss) \
58*5113495bSYour Name 	(mcs = (nss > 1) ? VHT_2x2_MCS8_VAL : VHT_1x1_MCS8_VAL)
59*5113495bSYour Name 
60*5113495bSYour Name #define NSS_1x1_MODE 1
61*5113495bSYour Name #define NSS_2x2_MODE 2
62*5113495bSYour Name #define NSS_3x3_MODE 3
63*5113495bSYour Name #define NSS_4x4_MODE 4
64*5113495bSYour Name #define MBO_IE_ASSOC_DISALLOWED_SUBATTR_ID 0x04
65*5113495bSYour Name 
66*5113495bSYour Name #define SIZE_OF_FIXED_PARAM 12
67*5113495bSYour Name #define SIZE_OF_TAG_PARAM_NUM 1
68*5113495bSYour Name #define SIZE_OF_TAG_PARAM_LEN 1
69*5113495bSYour Name #define RSNIEID 0x30
70*5113495bSYour Name #define RSNIE_CAPABILITY_LEN 2
71*5113495bSYour Name #define DEFAULT_RSNIE_CAP_VAL 0x00
72*5113495bSYour Name 
73*5113495bSYour Name #define SIZE_MASK 0x7FFF
74*5113495bSYour Name #define FIXED_MASK 0x8000
75*5113495bSYour Name 
76*5113495bSYour Name #define MAX_TPE_IES 8
77*5113495bSYour Name 
78*5113495bSYour Name #ifdef FEATURE_AP_MCC_CH_AVOIDANCE
79*5113495bSYour Name #define QCOM_VENDOR_IE_MCC_AVOID_CH 0x01
80*5113495bSYour Name 
81*5113495bSYour Name struct sAvoidChannelIE {
82*5113495bSYour Name 	/* following must be 0xDD (221) */
83*5113495bSYour Name 	uint8_t tag_number;
84*5113495bSYour Name 	uint8_t length;
85*5113495bSYour Name 	/* following must be 00-A0-C6 */
86*5113495bSYour Name 	uint8_t oui[3];
87*5113495bSYour Name 	/* following must be 0x01 */
88*5113495bSYour Name 	uint8_t type;
89*5113495bSYour Name 	uint8_t channel;
90*5113495bSYour Name };
91*5113495bSYour Name #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */
92*5113495bSYour Name 
93*5113495bSYour Name /*
94*5113495bSYour Name  * Host driver uses TBTT info of length 13
95*5113495bSYour Name  * in the RNR IE for legacy SAPs.
96*5113495bSYour Name  */
97*5113495bSYour Name #define CURRENT_RNR_TBTT_INFO_LEN 13
98*5113495bSYour Name 
99*5113495bSYour Name typedef struct sSirCountryInformation {
100*5113495bSYour Name 	uint8_t countryString[COUNTRY_STRING_LENGTH];
101*5113495bSYour Name 	uint8_t numIntervals;   /* number of channel intervals */
102*5113495bSYour Name 	struct channelPowerLim {
103*5113495bSYour Name 		uint8_t channelNumber;
104*5113495bSYour Name 		uint8_t numChannel;
105*5113495bSYour Name 		uint8_t maxTransmitPower;
106*5113495bSYour Name 	} channelTransmitPower[COUNTRY_INFO_MAX_CHANNEL];
107*5113495bSYour Name } tSirCountryInformation, *tpSirCountryInformation;
108*5113495bSYour Name 
109*5113495bSYour Name #ifdef WLAN_FEATURE_FILS_SK
110*5113495bSYour Name #define SIR_MAX_IDENTIFIER_CNT 7
111*5113495bSYour Name #define SIR_CACHE_IDENTIFIER_LEN 2
112*5113495bSYour Name #define SIR_HESSID_LEN 6
113*5113495bSYour Name #define SIR_MAX_KEY_CNT 7
114*5113495bSYour Name #define SIR_MAX_KEY_LEN 48
115*5113495bSYour Name #define SIR_FILS_IND_ELEM_OFFSET 2
116*5113495bSYour Name /*
117*5113495bSYour Name  * struct public_key_identifier: structure for public key identifier
118*5113495bSYour Name  * present in fils indication element
119*5113495bSYour Name  * @is_present: if Key info is present
120*5113495bSYour Name  * @key_cnt:  number of keys present
121*5113495bSYour Name  * @key_type: type of key used
122*5113495bSYour Name  * @length: length of key
123*5113495bSYour Name  * @key: key data
124*5113495bSYour Name  */
125*5113495bSYour Name struct public_key_identifier {
126*5113495bSYour Name 	bool is_present;
127*5113495bSYour Name 	uint8_t key_cnt;
128*5113495bSYour Name 	uint8_t key_type;
129*5113495bSYour Name 	uint8_t length;
130*5113495bSYour Name 	uint8_t key[SIR_MAX_KEY_CNT][SIR_MAX_KEY_LEN];
131*5113495bSYour Name };
132*5113495bSYour Name 
133*5113495bSYour Name /*
134*5113495bSYour Name  * struct fils_cache_identifier: structure for fils cache identifier
135*5113495bSYour Name  * present in fils indication element
136*5113495bSYour Name  * @is_present: if cache identifier is present
137*5113495bSYour Name  * @identifier: cache identifier
138*5113495bSYour Name  */
139*5113495bSYour Name struct fils_cache_identifier {
140*5113495bSYour Name 	bool is_present;
141*5113495bSYour Name 	uint8_t identifier[SIR_CACHE_IDENTIFIER_LEN];
142*5113495bSYour Name };
143*5113495bSYour Name 
144*5113495bSYour Name /*
145*5113495bSYour Name  * struct fils_hessid: structure for fils hessid
146*5113495bSYour Name  * present in fils indication element
147*5113495bSYour Name  * @is_present: if hessid info is present
148*5113495bSYour Name  * @hessid: hessid data
149*5113495bSYour Name  */
150*5113495bSYour Name struct fils_hessid {
151*5113495bSYour Name 	bool is_present;
152*5113495bSYour Name 	uint8_t hessid[SIR_HESSID_LEN];
153*5113495bSYour Name };
154*5113495bSYour Name 
155*5113495bSYour Name /*
156*5113495bSYour Name  * struct fils_realm_identifier: structure for fils_realm_identifier
157*5113495bSYour Name  * present in fils indication element
158*5113495bSYour Name  * @is_present: if realm info is present
159*5113495bSYour Name  * @realm_cnt: realm count
160*5113495bSYour Name  * @realm: realm data
161*5113495bSYour Name  */
162*5113495bSYour Name struct fils_realm_identifier {
163*5113495bSYour Name 	bool is_present;
164*5113495bSYour Name 	uint8_t realm_cnt;
165*5113495bSYour Name 	uint8_t realm[SIR_MAX_REALM_COUNT][SIR_REALM_LEN];
166*5113495bSYour Name };
167*5113495bSYour Name 
168*5113495bSYour Name /*
169*5113495bSYour Name  * struct sir_fils_indication: structure for fils indication element
170*5113495bSYour Name  * @is_present: if indication element is present
171*5113495bSYour Name  * @is_ip_config_supported: if IP config is supported
172*5113495bSYour Name  * @is_fils_sk_auth_supported: if fils sk suppprted
173*5113495bSYour Name  * @is_fils_sk_auth_pfs_supported: if fils sk with pfs supported
174*5113495bSYour Name  * @is_pk_auth_supported: if fils public key supported
175*5113495bSYour Name  * @cache_identifier: fils cache idenfier info
176*5113495bSYour Name  * @hessid: fils hessid info
177*5113495bSYour Name  * @realm_identifier: fils realm info
178*5113495bSYour Name  * @key_identifier: fils key identifier info
179*5113495bSYour Name  */
180*5113495bSYour Name struct sir_fils_indication {
181*5113495bSYour Name 	bool is_present;
182*5113495bSYour Name 	uint8_t is_ip_config_supported;
183*5113495bSYour Name 	uint8_t is_fils_sk_auth_supported;
184*5113495bSYour Name 	uint8_t is_fils_sk_auth_pfs_supported;
185*5113495bSYour Name 	uint8_t is_pk_auth_supported;
186*5113495bSYour Name 	struct fils_cache_identifier cache_identifier;
187*5113495bSYour Name 	struct fils_hessid hessid;
188*5113495bSYour Name 	struct fils_realm_identifier realm_identifier;
189*5113495bSYour Name 	struct public_key_identifier key_identifier;
190*5113495bSYour Name };
191*5113495bSYour Name #endif
192*5113495bSYour Name 
193*5113495bSYour Name enum operating_class_num {
194*5113495bSYour Name 	OP_CLASS_131 = 131,
195*5113495bSYour Name 	OP_CLASS_132,
196*5113495bSYour Name 	OP_CLASS_133,
197*5113495bSYour Name 	OP_CLASS_134,
198*5113495bSYour Name 	OP_CLASS_135,
199*5113495bSYour Name 	OP_CLASS_136,
200*5113495bSYour Name };
201*5113495bSYour Name 
202*5113495bSYour Name enum operating_extension_identifier {
203*5113495bSYour Name 	OP_CLASS_ID_200 = 200,
204*5113495bSYour Name 	OP_CLASS_ID_201,
205*5113495bSYour Name };
206*5113495bSYour Name 
207*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
208*5113495bSYour Name struct sir_multi_link_ie {
209*5113495bSYour Name 	uint8_t num_of_mlo_ie;
210*5113495bSYour Name 	bool mlo_ie_present;
211*5113495bSYour Name 	struct wlan_mlo_ie mlo_ie;
212*5113495bSYour Name };
213*5113495bSYour Name #endif
214*5113495bSYour Name 
215*5113495bSYour Name /* Structure common to Beacons & Probe Responses */
216*5113495bSYour Name typedef struct sSirProbeRespBeacon {
217*5113495bSYour Name 	tSirMacTimeStamp timeStamp;
218*5113495bSYour Name 	uint16_t beaconInterval;
219*5113495bSYour Name 	tSirMacCapabilityInfo capabilityInfo;
220*5113495bSYour Name 
221*5113495bSYour Name 	tSirMacSSid ssId;
222*5113495bSYour Name 	tSirMacRateSet supportedRates;
223*5113495bSYour Name 	tSirMacRateSet extendedRates;
224*5113495bSYour Name 	uint32_t chan_freq;
225*5113495bSYour Name 	tSirMacCfParamSet cfParamSet;
226*5113495bSYour Name 	tSirMacTim tim;
227*5113495bSYour Name 	tSirMacEdcaParamSetIE edcaParams;
228*5113495bSYour Name 	tSirMacQosCapabilityIE qosCapability;
229*5113495bSYour Name 
230*5113495bSYour Name 	tSirCountryInformation countryInfoParam;
231*5113495bSYour Name 	tSirMacWpaInfo wpa;
232*5113495bSYour Name 	tSirMacRsnInfo rsn;
233*5113495bSYour Name 
234*5113495bSYour Name 	tSirMacErpInfo erpIEInfo;
235*5113495bSYour Name 
236*5113495bSYour Name 	tDot11fIEPowerConstraints localPowerConstraint;
237*5113495bSYour Name 	tDot11fIETPCReport tpcReport;
238*5113495bSYour Name 	tDot11fIEChanSwitchAnn channelSwitchIE;
239*5113495bSYour Name 	tDot11fIEsec_chan_offset_ele sec_chan_offset;
240*5113495bSYour Name 	tDot11fIEext_chan_switch_ann ext_chan_switch;
241*5113495bSYour Name 	tDot11fIESuppOperatingClasses supp_operating_classes;
242*5113495bSYour Name 	tSirMacAddr bssid;
243*5113495bSYour Name 	tDot11fIEQuiet quietIE;
244*5113495bSYour Name 	tDot11fIEHTCaps HTCaps;
245*5113495bSYour Name 	tDot11fIEHTInfo HTInfo;
246*5113495bSYour Name 	tDot11fIEP2PProbeRes P2PProbeRes;
247*5113495bSYour Name 	uint8_t mdie[SIR_MDIE_SIZE];
248*5113495bSYour Name #ifdef FEATURE_WLAN_ESE
249*5113495bSYour Name 	tDot11fIEESETxmitPower eseTxPwr;
250*5113495bSYour Name 	tDot11fIEQBSSLoad QBSSLoad;
251*5113495bSYour Name #endif
252*5113495bSYour Name 	uint8_t ssidPresent;
253*5113495bSYour Name 	uint8_t suppRatesPresent;
254*5113495bSYour Name 	uint8_t extendedRatesPresent;
255*5113495bSYour Name 	uint8_t supp_operating_class_present;
256*5113495bSYour Name 	uint8_t cfPresent;
257*5113495bSYour Name 	uint8_t dsParamsPresent;
258*5113495bSYour Name 	uint8_t timPresent;
259*5113495bSYour Name 
260*5113495bSYour Name 	uint8_t edcaPresent;
261*5113495bSYour Name 	uint8_t qosCapabilityPresent;
262*5113495bSYour Name 	uint8_t wmeEdcaPresent;
263*5113495bSYour Name 	uint8_t wmeInfoPresent;
264*5113495bSYour Name 	uint8_t wsmCapablePresent;
265*5113495bSYour Name 
266*5113495bSYour Name 	uint8_t countryInfoPresent;
267*5113495bSYour Name 	uint8_t wpaPresent;
268*5113495bSYour Name 	uint8_t rsnPresent;
269*5113495bSYour Name 	uint8_t erpPresent;
270*5113495bSYour Name 	uint8_t channelSwitchPresent;
271*5113495bSYour Name 	uint8_t sec_chan_offset_present;
272*5113495bSYour Name 	uint8_t ext_chan_switch_present;
273*5113495bSYour Name 	uint8_t quietIEPresent;
274*5113495bSYour Name 	uint8_t tpcReportPresent;
275*5113495bSYour Name 	uint8_t powerConstraintPresent;
276*5113495bSYour Name 
277*5113495bSYour Name 	uint8_t mdiePresent;
278*5113495bSYour Name 
279*5113495bSYour Name 	tDot11fIEVHTCaps VHTCaps;
280*5113495bSYour Name 	tDot11fIEVHTOperation VHTOperation;
281*5113495bSYour Name 	tDot11fIEVHTExtBssLoad VHTExtBssLoad;
282*5113495bSYour Name 	tDot11fIEExtCap ext_cap;
283*5113495bSYour Name 	tDot11fIEOperatingMode OperatingMode;
284*5113495bSYour Name 	uint8_t WiderBWChanSwitchAnnPresent;
285*5113495bSYour Name 	tDot11fIEWiderBWChanSwitchAnn WiderBWChanSwitchAnn;
286*5113495bSYour Name 	uint8_t Vendor1IEPresent;
287*5113495bSYour Name 	tDot11fIEvendor_vht_ie vendor_vht_ie;
288*5113495bSYour Name 	uint8_t Vendor3IEPresent;
289*5113495bSYour Name 	tDot11fIEhs20vendor_ie hs20vendor_ie;
290*5113495bSYour Name #ifdef FEATURE_AP_MCC_CH_AVOIDANCE
291*5113495bSYour Name 	tDot11fIEQComVendorIE   AvoidChannelIE;
292*5113495bSYour Name #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */
293*5113495bSYour Name #ifdef FEATURE_WLAN_ESE
294*5113495bSYour Name 	uint8_t    is_ese_ver_ie_present;
295*5113495bSYour Name #endif
296*5113495bSYour Name 	tDot11fIEOBSSScanParameters obss_scanparams;
297*5113495bSYour Name 	bool MBO_IE_present;
298*5113495bSYour Name 	uint8_t MBO_capability;
299*5113495bSYour Name 	bool assoc_disallowed;
300*5113495bSYour Name 	uint8_t assoc_disallowed_reason;
301*5113495bSYour Name 	tDot11fIEqcn_ie qcn_ie;
302*5113495bSYour Name 	tDot11fIEhe_cap he_cap;
303*5113495bSYour Name 	tDot11fIEhe_op he_op;
304*5113495bSYour Name #ifdef WLAN_FEATURE_SR
305*5113495bSYour Name 	tDot11fIEspatial_reuse srp_ie;
306*5113495bSYour Name #endif
307*5113495bSYour Name 	tDot11fIEeht_cap eht_cap;
308*5113495bSYour Name 	tDot11fIEeht_op eht_op;
309*5113495bSYour Name #ifdef WLAN_FEATURE_11AX_BSS_COLOR
310*5113495bSYour Name 	tDot11fIEbss_color_change vendor_he_bss_color_change;
311*5113495bSYour Name #endif
312*5113495bSYour Name #ifdef WLAN_FEATURE_FILS_SK
313*5113495bSYour Name 	struct sir_fils_indication fils_ind;
314*5113495bSYour Name #endif
315*5113495bSYour Name 	uint8_t num_transmit_power_env;
316*5113495bSYour Name 	tDot11fIEtransmit_power_env transmit_power_env[MAX_TPE_IES];
317*5113495bSYour Name 	uint8_t ap_power_type;
318*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
319*5113495bSYour Name 	struct sir_multi_link_ie mlo_ie;
320*5113495bSYour Name 	struct wlan_t2lm_context t2lm_ctx;
321*5113495bSYour Name #endif
322*5113495bSYour Name 	tDot11fIEWMMParams wmm_params;
323*5113495bSYour Name } tSirProbeRespBeacon, *tpSirProbeRespBeacon;
324*5113495bSYour Name 
325*5113495bSYour Name /* probe Request structure */
326*5113495bSYour Name typedef struct sSirProbeReq {
327*5113495bSYour Name 	tSirMacSSid ssId;
328*5113495bSYour Name 	tSirMacRateSet supportedRates;
329*5113495bSYour Name 	tSirMacRateSet extendedRates;
330*5113495bSYour Name 	tDot11fIEWscProbeReq probeReqWscIeInfo;
331*5113495bSYour Name 	tDot11fIEHTCaps HTCaps;
332*5113495bSYour Name 	uint8_t ssidPresent;
333*5113495bSYour Name 	uint8_t suppRatesPresent;
334*5113495bSYour Name 	uint8_t extendedRatesPresent;
335*5113495bSYour Name 	uint8_t wscIePresent;
336*5113495bSYour Name 	uint8_t p2pIePresent;
337*5113495bSYour Name 	tDot11fIEVHTCaps VHTCaps;
338*5113495bSYour Name 	tDot11fIEhe_cap he_cap;
339*5113495bSYour Name } tSirProbeReq, *tpSirProbeReq;
340*5113495bSYour Name 
341*5113495bSYour Name /* / Association Request structure (one day to be replaced by */
342*5113495bSYour Name /* / tDot11fAssocRequest) */
343*5113495bSYour Name typedef struct sSirAssocReq {
344*5113495bSYour Name 
345*5113495bSYour Name 	tSirMacCapabilityInfo capabilityInfo;
346*5113495bSYour Name 	uint16_t listenInterval;
347*5113495bSYour Name 	tSirMacAddr currentApAddr;      /* only in reassoc frames */
348*5113495bSYour Name 	tSirMacSSid ssId;
349*5113495bSYour Name 	tSirMacRateSet supportedRates;
350*5113495bSYour Name 	tSirMacRateSet extendedRates;
351*5113495bSYour Name 
352*5113495bSYour Name 	tSirAddtsReqInfo addtsReq;
353*5113495bSYour Name 	tSirMacQosCapabilityStaIE qosCapability;
354*5113495bSYour Name 
355*5113495bSYour Name 	tSirMacWapiInfo wapi;
356*5113495bSYour Name 	tSirMacWpaInfo wpa;
357*5113495bSYour Name 	tSirMacRsnInfo rsn;
358*5113495bSYour Name 	tSirAddie addIE;
359*5113495bSYour Name 
360*5113495bSYour Name 	tSirMacPowerCapabilityIE powerCapability;
361*5113495bSYour Name 	tSirMacSupportedChannelIE supportedChannels;
362*5113495bSYour Name 	tDot11fIEHTCaps HTCaps;
363*5113495bSYour Name 	tDot11fIEWMMInfoStation WMMInfoStation;
364*5113495bSYour Name 	tDot11fIESuppOperatingClasses supp_operating_classes;
365*5113495bSYour Name 	/* / This is set if the frame is a reassoc request: */
366*5113495bSYour Name 	uint8_t reassocRequest;
367*5113495bSYour Name 	uint8_t ssidPresent;
368*5113495bSYour Name 	uint8_t suppRatesPresent;
369*5113495bSYour Name 	uint8_t extendedRatesPresent;
370*5113495bSYour Name 
371*5113495bSYour Name 	uint8_t wmeInfoPresent;
372*5113495bSYour Name 	uint8_t qosCapabilityPresent;
373*5113495bSYour Name 	uint8_t addtsPresent;
374*5113495bSYour Name 	uint8_t wsmCapablePresent;
375*5113495bSYour Name 
376*5113495bSYour Name 	uint8_t wapiPresent;
377*5113495bSYour Name 	uint8_t wpaPresent;
378*5113495bSYour Name 	uint8_t rsnPresent;
379*5113495bSYour Name 	uint8_t addIEPresent;
380*5113495bSYour Name 
381*5113495bSYour Name 	uint8_t powerCapabilityPresent;
382*5113495bSYour Name 	uint8_t supportedChannelsPresent;
383*5113495bSYour Name 	/* keeping copy of association request received, this is
384*5113495bSYour Name 	   required for indicating the frame to upper layers */
385*5113495bSYour Name 	qdf_nbuf_t assoc_req_buf;
386*5113495bSYour Name 	uint32_t assocReqFrameLength;
387*5113495bSYour Name 	uint8_t *assocReqFrame;
388*5113495bSYour Name 	tDot11fIEVHTCaps VHTCaps;
389*5113495bSYour Name 	tDot11fIEOperatingMode operMode;
390*5113495bSYour Name 	tDot11fIEExtCap ExtCap;
391*5113495bSYour Name 	tDot11fIEbss_max_idle_period bss_max_idle_period;
392*5113495bSYour Name 	tDot11fIEvendor_vht_ie vendor_vht_ie;
393*5113495bSYour Name 	tDot11fIEhs20vendor_ie hs20vendor_ie;
394*5113495bSYour Name 	tDot11fIEhe_cap he_cap;
395*5113495bSYour Name 	tDot11fIEhe_6ghz_band_cap he_6ghz_band_cap;
396*5113495bSYour Name 	tDot11fIEqcn_ie qcn_ie;
397*5113495bSYour Name 	tDot11fIEeht_cap eht_cap;
398*5113495bSYour Name 	bool is_sae_authenticated;
399*5113495bSYour Name 	struct mlo_partner_info mlo_info;
400*5113495bSYour Name 	uint8_t mld_mac[QDF_MAC_ADDR_SIZE];
401*5113495bSYour Name } tSirAssocReq, *tpSirAssocReq;
402*5113495bSYour Name 
403*5113495bSYour Name #define FTIE_SUBELEM_R1KH_ID 1
404*5113495bSYour Name #define FTIE_SUBELEM_GTK     2
405*5113495bSYour Name #define FTIE_SUBELEM_R0KH_ID 3
406*5113495bSYour Name #define FTIE_SUBELEM_IGTK    4
407*5113495bSYour Name #define FTIE_SUBELEM_OCI     5
408*5113495bSYour Name 
409*5113495bSYour Name #define FTIE_R1KH_LEN 6
410*5113495bSYour Name #define FTIE_R0KH_MAX_LEN 48
411*5113495bSYour Name 
412*5113495bSYour Name /**
413*5113495bSYour Name  * struct wlan_sha384_ftinfo_subelem - subelements of FTIE
414*5113495bSYour Name  * @r1kh_id: FT R1 Key holder ID
415*5113495bSYour Name  * @gtk: Ft group temporal key
416*5113495bSYour Name  * @gtk_len: GTK length
417*5113495bSYour Name  * @r0kh_id: FT R0 Key Holder ID
418*5113495bSYour Name  * @igtk: FT IGTK used for 11w
419*5113495bSYour Name  * @igtk_len: IGTK length
420*5113495bSYour Name  */
421*5113495bSYour Name struct wlan_sha384_ftinfo_subelem {
422*5113495bSYour Name 	tDot11fIER1KH_ID r1kh_id;
423*5113495bSYour Name 	uint8_t *gtk;
424*5113495bSYour Name 	uint8_t gtk_len;
425*5113495bSYour Name 	tDot11fIER0KH_ID r0kh_id;
426*5113495bSYour Name 	uint8_t *igtk;
427*5113495bSYour Name 	uint8_t igtk_len;
428*5113495bSYour Name };
429*5113495bSYour Name 
430*5113495bSYour Name #define MIC_CONTROL_BYTES 2
431*5113495bSYour Name #define MIC_SHA384_BYTES  24
432*5113495bSYour Name #define NONCE_BYTES       32
433*5113495bSYour Name 
434*5113495bSYour Name /**
435*5113495bSYour Name  * struct wlan_sha384_ftinfo - FTE for sha384 based AKMs
436*5113495bSYour Name  * @mic_control: FTIE mic control field of 2 bytes
437*5113495bSYour Name  * @mic: MIC present in the FTIE assoc Response
438*5113495bSYour Name  * @anonce: Anonce sent by the AP
439*5113495bSYour Name  * @snonce: Snonce field in the FTIE
440*5113495bSYour Name  */
441*5113495bSYour Name struct wlan_sha384_ftinfo {
442*5113495bSYour Name 	uint8_t mic_control[MIC_CONTROL_BYTES];
443*5113495bSYour Name 	uint8_t mic[MIC_SHA384_BYTES];
444*5113495bSYour Name 	uint8_t anonce[NONCE_BYTES];
445*5113495bSYour Name 	uint8_t snonce[NONCE_BYTES];
446*5113495bSYour Name };
447*5113495bSYour Name 
448*5113495bSYour Name /* / Association Response structure (one day to be replaced by */
449*5113495bSYour Name /* / tDot11fAssocRequest) */
450*5113495bSYour Name typedef struct sSirAssocRsp {
451*5113495bSYour Name 
452*5113495bSYour Name 	tSirMacCapabilityInfo capabilityInfo;
453*5113495bSYour Name 	uint16_t aid;
454*5113495bSYour Name 	uint16_t status_code;
455*5113495bSYour Name 	tSirMacRateSet supportedRates;
456*5113495bSYour Name 	tSirMacRateSet extendedRates;
457*5113495bSYour Name 	tSirMacEdcaParamSetIE edca;
458*5113495bSYour Name 	tSirAddtsRspInfo addtsRsp;
459*5113495bSYour Name 	tDot11fIEHTCaps HTCaps;
460*5113495bSYour Name 	tDot11fIEHTInfo HTInfo;
461*5113495bSYour Name 	tDot11fIEFTInfo FTInfo;
462*5113495bSYour Name 	struct wlan_sha384_ftinfo sha384_ft_info;
463*5113495bSYour Name 	struct wlan_sha384_ftinfo_subelem sha384_ft_subelem;
464*5113495bSYour Name 	uint8_t mdie[SIR_MDIE_SIZE];
465*5113495bSYour Name 	uint8_t num_RICData;
466*5113495bSYour Name 	tDot11fIERICDataDesc RICData[2];
467*5113495bSYour Name 
468*5113495bSYour Name #ifdef FEATURE_WLAN_ESE
469*5113495bSYour Name 	uint8_t num_tspecs;
470*5113495bSYour Name 	tDot11fIEWMMTSPEC TSPECInfo[ESE_MAX_TSPEC_IES];
471*5113495bSYour Name 	struct ese_tsm_ie tsmIE;
472*5113495bSYour Name #endif
473*5113495bSYour Name 
474*5113495bSYour Name 	uint8_t suppRatesPresent;
475*5113495bSYour Name 	uint8_t extendedRatesPresent;
476*5113495bSYour Name 
477*5113495bSYour Name 	uint8_t edcaPresent;
478*5113495bSYour Name 	uint8_t wmeEdcaPresent;
479*5113495bSYour Name 	uint8_t addtsPresent;
480*5113495bSYour Name 	uint8_t wsmCapablePresent;
481*5113495bSYour Name 	uint8_t ftinfoPresent;
482*5113495bSYour Name 	uint8_t mdiePresent;
483*5113495bSYour Name 	uint8_t ricPresent;
484*5113495bSYour Name #ifdef FEATURE_WLAN_ESE
485*5113495bSYour Name 	uint8_t tspecPresent;
486*5113495bSYour Name 	uint8_t tsmPresent;
487*5113495bSYour Name #endif
488*5113495bSYour Name 	tDot11fIEVHTCaps VHTCaps;
489*5113495bSYour Name 	tDot11fIEVHTOperation VHTOperation;
490*5113495bSYour Name 	tDot11fIEExtCap ExtCap;
491*5113495bSYour Name 	tDot11fIEOperatingMode oper_mode_ntf;
492*5113495bSYour Name 	struct qos_map_set QosMapSet;
493*5113495bSYour Name 	tDot11fIETimeoutInterval TimeoutInterval;
494*5113495bSYour Name 	tDot11fIERRMEnabledCap rrm_caps;
495*5113495bSYour Name 	tDot11fIEvendor_vht_ie vendor_vht_ie;
496*5113495bSYour Name 	tDot11fIEOBSSScanParameters obss_scanparams;
497*5113495bSYour Name 	tDot11fTLVrssi_assoc_rej rssi_assoc_rej;
498*5113495bSYour Name 	tDot11fIEqcn_ie qcn_ie;
499*5113495bSYour Name 	tDot11fIEhe_cap he_cap;
500*5113495bSYour Name 	tDot11fIEhe_op he_op;
501*5113495bSYour Name #ifdef WLAN_FEATURE_SR
502*5113495bSYour Name 	tDot11fIEspatial_reuse srp_ie;
503*5113495bSYour Name #endif
504*5113495bSYour Name 	tDot11fIEhe_6ghz_band_cap he_6ghz_band_cap;
505*5113495bSYour Name 	tDot11fIEeht_cap eht_cap;
506*5113495bSYour Name 	tDot11fIEeht_op eht_op;
507*5113495bSYour Name 	bool mu_edca_present;
508*5113495bSYour Name 	tSirMacEdcaParamSetIE mu_edca;
509*5113495bSYour Name 	tDot11fIEbss_max_idle_period bss_max_idle_period;
510*5113495bSYour Name #ifdef WLAN_FEATURE_FILS_SK
511*5113495bSYour Name 	tDot11fIEfils_session fils_session;
512*5113495bSYour Name 	tDot11fIEfils_key_confirmation fils_key_auth;
513*5113495bSYour Name 	tDot11fIEfils_kde fils_kde;
514*5113495bSYour Name 	struct qdf_mac_addr dst_mac;
515*5113495bSYour Name 	struct qdf_mac_addr src_mac;
516*5113495bSYour Name 	uint16_t hlp_data_len;
517*5113495bSYour Name 	uint8_t hlp_data[FILS_MAX_HLP_DATA_LEN];
518*5113495bSYour Name #endif
519*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
520*5113495bSYour Name 	struct sir_multi_link_ie mlo_ie;
521*5113495bSYour Name 	struct wlan_t2lm_context t2lm_ctx;
522*5113495bSYour Name #endif
523*5113495bSYour Name } tSirAssocRsp, *tpSirAssocRsp;
524*5113495bSYour Name 
525*5113495bSYour Name #ifdef FEATURE_WLAN_ESE
526*5113495bSYour Name /* Structure to hold ESE Beacon report mandatory IEs */
527*5113495bSYour Name typedef struct sSirEseBcnReportMandatoryIe {
528*5113495bSYour Name 	tSirMacSSid ssId;
529*5113495bSYour Name 	tSirMacRateSet supportedRates;
530*5113495bSYour Name 	tSirMacFHParamSet fhParamSet;
531*5113495bSYour Name 	tSirMacDsParamSetIE dsParamSet;
532*5113495bSYour Name 	tSirMacCfParamSet cfParamSet;
533*5113495bSYour Name 	tSirMacTim tim;
534*5113495bSYour Name 	tSirMacRRMEnabledCap rmEnabledCapabilities;
535*5113495bSYour Name 
536*5113495bSYour Name 	uint8_t ssidPresent;
537*5113495bSYour Name 	uint8_t suppRatesPresent;
538*5113495bSYour Name 	uint8_t fhParamPresent;
539*5113495bSYour Name 	uint8_t dsParamsPresent;
540*5113495bSYour Name 	uint8_t cfPresent;
541*5113495bSYour Name 	uint8_t timPresent;
542*5113495bSYour Name 	uint8_t rrmPresent;
543*5113495bSYour Name } tSirEseBcnReportMandatoryIe, *tpSirEseBcnReportMandatoryIe;
544*5113495bSYour Name #endif /* FEATURE_WLAN_ESE */
545*5113495bSYour Name 
546*5113495bSYour Name /**
547*5113495bSYour Name  * struct s_ext_cap - holds bitfields of extended capability IE
548*5113495bSYour Name  *
549*5113495bSYour Name  * s_ext_cap holds bitfields of extended capability IE. In dot11f files
550*5113495bSYour Name  * extended capability IE information is stored as an array of bytes.
551*5113495bSYour Name  * This structure is used to encode/decode the byte array present in
552*5113495bSYour Name  * dot11f IE structure.
553*5113495bSYour Name  */
554*5113495bSYour Name 
555*5113495bSYour Name struct s_ext_cap {
556*5113495bSYour Name 	uint8_t bss_coexist_mgmt_support:1;
557*5113495bSYour Name 	uint8_t reserved1:1;
558*5113495bSYour Name 	uint8_t ext_chan_switch:1;
559*5113495bSYour Name 	uint8_t reserved2:1;
560*5113495bSYour Name 	uint8_t psmp_cap:1;
561*5113495bSYour Name 	uint8_t reserved3:1;
562*5113495bSYour Name 	uint8_t spsmp_cap:1;
563*5113495bSYour Name 	uint8_t event:1;
564*5113495bSYour Name 	uint8_t diagnostics:1;
565*5113495bSYour Name 	uint8_t multi_diagnostics:1;
566*5113495bSYour Name 	uint8_t loc_tracking:1;
567*5113495bSYour Name 	uint8_t fms:1;
568*5113495bSYour Name 	uint8_t proxy_arp_service:1;
569*5113495bSYour Name 	uint8_t co_loc_intf_reporting:1;
570*5113495bSYour Name 	uint8_t civic_loc:1;
571*5113495bSYour Name 	uint8_t geospatial_loc:1;
572*5113495bSYour Name 	uint8_t tfs:1;
573*5113495bSYour Name 	uint8_t wnm_sleep_mode:1;
574*5113495bSYour Name 	uint8_t tim_broadcast:1;
575*5113495bSYour Name 	uint8_t bss_transition:1;
576*5113495bSYour Name 	uint8_t qos_traffic_cap:1;
577*5113495bSYour Name 	uint8_t ac_sta_cnt:1;
578*5113495bSYour Name 	uint8_t multi_bssid:1;
579*5113495bSYour Name 	uint8_t timing_meas:1;
580*5113495bSYour Name 	uint8_t chan_usage:1;
581*5113495bSYour Name 	uint8_t ssid_list:1;
582*5113495bSYour Name 	uint8_t dms:1;
583*5113495bSYour Name 	uint8_t utctsf_offset:1;
584*5113495bSYour Name 	uint8_t tdls_peer_uapsd_buffer_sta:1;
585*5113495bSYour Name 	uint8_t tdls_peer_psm_supp:1;
586*5113495bSYour Name 	uint8_t tdls_channel_switching:1;
587*5113495bSYour Name 	uint8_t interworking_service:1;
588*5113495bSYour Name 	uint8_t qos_map:1;
589*5113495bSYour Name 	uint8_t ebr:1;
590*5113495bSYour Name 	uint8_t sspn_interface:1;
591*5113495bSYour Name 	uint8_t reserved4:1;
592*5113495bSYour Name 	uint8_t msg_cf_cap:1;
593*5113495bSYour Name 	uint8_t tdls_support:1;
594*5113495bSYour Name 	uint8_t tdls_prohibited:1;
595*5113495bSYour Name 	uint8_t tdls_chan_swit_prohibited:1;
596*5113495bSYour Name 	uint8_t reject_unadmitted_traffic:1;
597*5113495bSYour Name 	uint8_t service_interval_granularity:3;
598*5113495bSYour Name 	uint8_t identifier_loc:1;
599*5113495bSYour Name 	uint8_t uapsd_coexistence:1;
600*5113495bSYour Name 	uint8_t wnm_notification:1;
601*5113495bSYour Name 	uint8_t qa_bcapbility:1;
602*5113495bSYour Name 	uint8_t utf8_ssid:1;
603*5113495bSYour Name 	uint8_t qmf_activated:1;
604*5113495bSYour Name 	uint8_t qm_frecon_act:1;
605*5113495bSYour Name 	uint8_t robust_av_streaming:1;
606*5113495bSYour Name 	uint8_t advanced_gcr:1;
607*5113495bSYour Name 	uint8_t mesh_gcr:1;
608*5113495bSYour Name 	uint8_t scs:1;
609*5113495bSYour Name 	uint8_t q_load_report:1;
610*5113495bSYour Name 	uint8_t alternate_edca:1;
611*5113495bSYour Name 	uint8_t unprot_txo_pneg:1;
612*5113495bSYour Name 	uint8_t prot_txo_pneg:1;
613*5113495bSYour Name 	uint8_t reserved6:1;
614*5113495bSYour Name 	uint8_t prot_q_load_report:1;
615*5113495bSYour Name 	uint8_t tdls_wider_bw:1;
616*5113495bSYour Name 	uint8_t oper_mode_notification:1;
617*5113495bSYour Name 	uint8_t max_num_of_msdu_bit1:1;
618*5113495bSYour Name 	uint8_t max_num_of_msdu_bit2:1;
619*5113495bSYour Name 	uint8_t chan_sch_mgmt:1;
620*5113495bSYour Name 	uint8_t geo_db_inband_en_signal:1;
621*5113495bSYour Name 	uint8_t nw_chan_control:1;
622*5113495bSYour Name 	uint8_t white_space_map:1;
623*5113495bSYour Name 	uint8_t chan_avail_query:1;
624*5113495bSYour Name 	uint8_t fine_time_meas_responder:1;
625*5113495bSYour Name 	uint8_t fine_time_meas_initiator:1;
626*5113495bSYour Name 	uint8_t fils_capability:1;
627*5113495bSYour Name 	uint8_t ext_spectrum_management:1;
628*5113495bSYour Name 	uint8_t future_channel_guidance:1;
629*5113495bSYour Name 	uint8_t reserved7:2;
630*5113495bSYour Name 	uint8_t twt_requestor_support:1;
631*5113495bSYour Name 	uint8_t twt_responder_support:1;
632*5113495bSYour Name 	uint8_t reserved8: 1;
633*5113495bSYour Name 	uint8_t reserved9: 4;
634*5113495bSYour Name 	uint8_t beacon_protection_enable: 1;
635*5113495bSYour Name };
636*5113495bSYour Name 
637*5113495bSYour Name void swap_bit_field16(uint16_t in, uint16_t *out);
638*5113495bSYour Name 
639*5113495bSYour Name /* Currently implemented as "shims" between callers & the new framesc- */
640*5113495bSYour Name /* generated code: */
641*5113495bSYour Name 
642*5113495bSYour Name QDF_STATUS
643*5113495bSYour Name sir_convert_probe_req_frame2_struct(struct mac_context *mac,
644*5113495bSYour Name 				uint8_t *frame, uint32_t len,
645*5113495bSYour Name 				tpSirProbeReq probe);
646*5113495bSYour Name 
647*5113495bSYour Name QDF_STATUS
648*5113495bSYour Name sir_convert_probe_frame2_struct(struct mac_context *mac, uint8_t *frame,
649*5113495bSYour Name 				uint32_t len, tpSirProbeRespBeacon probe);
650*5113495bSYour Name 
651*5113495bSYour Name enum wlan_status_code
652*5113495bSYour Name sir_convert_assoc_req_frame2_struct(struct mac_context *mac,
653*5113495bSYour Name 				    uint8_t *frame, uint32_t len,
654*5113495bSYour Name 				    tpSirAssocReq assoc);
655*5113495bSYour Name /**
656*5113495bSYour Name  * wlan_parse_ftie_sha384() - Parse the FT IE if akm uses sha384 KDF
657*5113495bSYour Name  * @frame: Pointer to the association response frame
658*5113495bSYour Name  * @frame_len: Length of the assoc response frame
659*5113495bSYour Name  * @assoc_rsp: Destination assoc response structure in PE to which the FTIE
660*5113495bSYour Name  * needs to be parsed and copied
661*5113495bSYour Name  *
662*5113495bSYour Name  * Return: QDF_STATUS
663*5113495bSYour Name  */
664*5113495bSYour Name QDF_STATUS
665*5113495bSYour Name wlan_parse_ftie_sha384(uint8_t *frame, uint32_t frame_len,
666*5113495bSYour Name 		       struct sSirAssocRsp *assoc_rsp);
667*5113495bSYour Name 
668*5113495bSYour Name QDF_STATUS
669*5113495bSYour Name sir_convert_assoc_resp_frame2_struct(struct mac_context *mac,
670*5113495bSYour Name 				struct pe_session *session_entry,
671*5113495bSYour Name 				uint8_t *frame, uint32_t len,
672*5113495bSYour Name 				tpSirAssocRsp assoc);
673*5113495bSYour Name 
674*5113495bSYour Name enum wlan_status_code
675*5113495bSYour Name sir_convert_reassoc_req_frame2_struct(struct mac_context *mac,
676*5113495bSYour Name 				uint8_t *frame, uint32_t len,
677*5113495bSYour Name 				tpSirAssocReq assoc);
678*5113495bSYour Name 
679*5113495bSYour Name QDF_STATUS
680*5113495bSYour Name sir_parse_beacon_ie(struct mac_context *mac,
681*5113495bSYour Name 		tpSirProbeRespBeacon pBeaconStruct,
682*5113495bSYour Name 		uint8_t *pPayload, uint32_t payloadLength);
683*5113495bSYour Name 
684*5113495bSYour Name QDF_STATUS
685*5113495bSYour Name sir_convert_beacon_frame2_struct(struct mac_context *mac,
686*5113495bSYour Name 				uint8_t *pBeaconFrame,
687*5113495bSYour Name 				tpSirProbeRespBeacon pBeaconStruct);
688*5113495bSYour Name 
689*5113495bSYour Name QDF_STATUS
690*5113495bSYour Name sir_convert_auth_frame2_struct(struct mac_context *mac,
691*5113495bSYour Name 			uint8_t *frame, uint32_t len,
692*5113495bSYour Name 			tpSirMacAuthFrameBody auth);
693*5113495bSYour Name 
694*5113495bSYour Name QDF_STATUS
695*5113495bSYour Name sir_convert_addts_rsp2_struct(struct mac_context *mac,
696*5113495bSYour Name 			uint8_t *frame, uint32_t len,
697*5113495bSYour Name 			tSirAddtsRspInfo *addts);
698*5113495bSYour Name 
699*5113495bSYour Name QDF_STATUS
700*5113495bSYour Name sir_convert_delts_req2_struct(struct mac_context *mac,
701*5113495bSYour Name 			uint8_t *frame, uint32_t len,
702*5113495bSYour Name 			struct delts_req_info *delTs);
703*5113495bSYour Name QDF_STATUS
704*5113495bSYour Name sir_convert_qos_map_configure_frame2_struct(struct mac_context *mac,
705*5113495bSYour Name 					uint8_t *pFrame, uint32_t nFrame,
706*5113495bSYour Name 					struct qos_map_set *pQosMapSet);
707*5113495bSYour Name 
708*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
709*5113495bSYour Name QDF_STATUS
710*5113495bSYour Name sir_convert_mlo_probe_rsp_frame2_struct(uint8_t *ml_ie,
711*5113495bSYour Name 					uint32_t ml_ie_total_len,
712*5113495bSYour Name 					struct sir_multi_link_ie *mlo_ie_ptr);
713*5113495bSYour Name 
714*5113495bSYour Name QDF_STATUS
715*5113495bSYour Name populate_dot11f_mlo_caps(struct mac_context *mac_ctx,
716*5113495bSYour Name 			 struct pe_session *session,
717*5113495bSYour Name 			 struct wlan_mlo_ie *mlo_ie);
718*5113495bSYour Name #endif
719*5113495bSYour Name 
720*5113495bSYour Name #ifdef ANI_SUPPORT_11H
721*5113495bSYour Name QDF_STATUS
722*5113495bSYour Name sir_convert_tpc_req_frame2_struct(struct mac_context *, uint8_t *,
723*5113495bSYour Name 				tpSirMacTpcReqActionFrame, uint32_t);
724*5113495bSYour Name 
725*5113495bSYour Name QDF_STATUS
726*5113495bSYour Name sir_convert_meas_req_frame2_struct(struct mac_context *, uint8_t *,
727*5113495bSYour Name 				tpSirMacMeasReqActionFrame, uint32_t);
728*5113495bSYour Name #endif
729*5113495bSYour Name 
730*5113495bSYour Name /**
731*5113495bSYour Name  * \brief Populated a tDot11fFfCapabilities
732*5113495bSYour Name  *
733*5113495bSYour Name  * \param mac Pointer to the global MAC data structure
734*5113495bSYour Name  *
735*5113495bSYour Name  * \param pDot11f Address of a tDot11fFfCapabilities to be filled in
736*5113495bSYour Name  *
737*5113495bSYour Name  *
738*5113495bSYour Name  * \note If SIR_MAC_PROP_CAPABILITY_11EQOS is enabled, we'll clear the QOS
739*5113495bSYour Name  * bit in pDot11f
740*5113495bSYour Name  *
741*5113495bSYour Name  *
742*5113495bSYour Name  */
743*5113495bSYour Name 
744*5113495bSYour Name QDF_STATUS
745*5113495bSYour Name populate_dot11f_capabilities(struct mac_context *mac,
746*5113495bSYour Name 			tDot11fFfCapabilities *pDot11f,
747*5113495bSYour Name 			struct pe_session *pe_session);
748*5113495bSYour Name /**
749*5113495bSYour Name  * populate_dot11f_max_chan_switch_time() - populate max chan switch time
750*5113495bSYour Name  * @mac: pointer to mac
751*5113495bSYour Name  * @pDot11f: pointer to tDot11fIEmax_chan_switch_time
752*5113495bSYour Name  * @pe_session: pe session
753*5113495bSYour Name  *
754*5113495bSYour Name  * Return: Void
755*5113495bSYour Name  */
756*5113495bSYour Name void
757*5113495bSYour Name populate_dot11f_max_chan_switch_time(struct mac_context *mac,
758*5113495bSYour Name 				     tDot11fIEmax_chan_switch_time *pDot11f,
759*5113495bSYour Name 				     struct pe_session *pe_session);
760*5113495bSYour Name 
761*5113495bSYour Name /**
762*5113495bSYour Name  * populate_dot11f_non_inheritance() - populate non inheritance
763*5113495bSYour Name  * @mac_ctx: pointer to mac
764*5113495bSYour Name  * @non_inheritance: pointer to tDot11fIEnon_inheritance
765*5113495bSYour Name  * @non_inher_ie_lists: non inheritance IE list
766*5113495bSYour Name  * @non_inher_ext_ie_lists: non inheritance extend IE list
767*5113495bSYour Name  * @non_inher_len: non inheritance IE list length
768*5113495bSYour Name  * @non_inher_ext_len: non inheritance Extend IE list length
769*5113495bSYour Name  */
770*5113495bSYour Name void populate_dot11f_non_inheritance(
771*5113495bSYour Name 			struct mac_context *mac_ctx,
772*5113495bSYour Name 			tDot11fIEnon_inheritance *non_inheritance,
773*5113495bSYour Name 			uint8_t *non_inher_ie_lists,
774*5113495bSYour Name 			uint8_t *non_inher_ext_ie_lists,
775*5113495bSYour Name 			uint8_t non_inher_len, uint8_t non_inher_ext_len);
776*5113495bSYour Name 
777*5113495bSYour Name /* / Populate a tDot11fIEChanSwitchAnn */
778*5113495bSYour Name void
779*5113495bSYour Name populate_dot11f_chan_switch_ann(struct mac_context *mac,
780*5113495bSYour Name 				tDot11fIEChanSwitchAnn *pDot11f,
781*5113495bSYour Name 				struct pe_session *pe_session);
782*5113495bSYour Name 
783*5113495bSYour Name void
784*5113495bSYour Name populate_dot_11_f_ext_chann_switch_ann(struct mac_context *mac_ptr,
785*5113495bSYour Name 				tDot11fIEext_chan_switch_ann *dot_11_ptr,
786*5113495bSYour Name 				struct pe_session *session_entry);
787*5113495bSYour Name 
788*5113495bSYour Name void
789*5113495bSYour Name populate_dot11f_tx_power_env(struct mac_context *mac,
790*5113495bSYour Name 			     tDot11fIEtransmit_power_env *pDot11f,
791*5113495bSYour Name 			     enum phy_ch_width ch_width, uint32_t chan_freq,
792*5113495bSYour Name 			     uint16_t *num_tpe, bool is_ch_switch);
793*5113495bSYour Name 
794*5113495bSYour Name /* / Populate a tDot11fIEChannelSwitchWrapper */
795*5113495bSYour Name void
796*5113495bSYour Name populate_dot11f_chan_switch_wrapper(struct mac_context *mac,
797*5113495bSYour Name 				tDot11fIEChannelSwitchWrapper *pDot11f,
798*5113495bSYour Name 				struct pe_session *pe_session);
799*5113495bSYour Name 
800*5113495bSYour Name /* / Populate a tDot11fIECountry */
801*5113495bSYour Name QDF_STATUS
802*5113495bSYour Name populate_dot11f_country(struct mac_context *mac,
803*5113495bSYour Name 			tDot11fIECountry *pDot11f, struct pe_session *pe_session);
804*5113495bSYour Name 
805*5113495bSYour Name /* Populated a populate_dot11f_ds_params */
806*5113495bSYour Name QDF_STATUS
807*5113495bSYour Name populate_dot11f_ds_params(struct mac_context *mac,
808*5113495bSYour Name 			tDot11fIEDSParams *pDot11f, qdf_freq_t freq);
809*5113495bSYour Name 
810*5113495bSYour Name /* / Populated a tDot11fIEEDCAParamSet */
811*5113495bSYour Name void
812*5113495bSYour Name populate_dot11f_edca_param_set(struct mac_context *mac,
813*5113495bSYour Name 			tDot11fIEEDCAParamSet *pDot11f,
814*5113495bSYour Name 			struct pe_session *pe_session);
815*5113495bSYour Name 
816*5113495bSYour Name QDF_STATUS
817*5113495bSYour Name populate_dot11f_erp_info(struct mac_context *mac,
818*5113495bSYour Name 			tDot11fIEERPInfo *pDot11f, struct pe_session *pe_session);
819*5113495bSYour Name 
820*5113495bSYour Name QDF_STATUS
821*5113495bSYour Name populate_dot11f_ext_supp_rates(struct mac_context *mac,
822*5113495bSYour Name 			uint8_t nChannelNum, tDot11fIEExtSuppRates *pDot11f,
823*5113495bSYour Name 			struct pe_session *pe_session);
824*5113495bSYour Name 
825*5113495bSYour Name /**
826*5113495bSYour Name  * populate_dot11f_beacon_report() - Populate the Beacon Report IE
827*5113495bSYour Name  * @mac: Pointer to the global MAC context
828*5113495bSYour Name  * @pDot11f: Pointer to the measurement report structure
829*5113495bSYour Name  * @pBeaconReport: Pointer to the Beacon Report structure
830*5113495bSYour Name  * @is_last_frame: is the current report last or more reports to follow
831*5113495bSYour Name  *
832*5113495bSYour Name  * Return: QDF Status
833*5113495bSYour Name  */
834*5113495bSYour Name QDF_STATUS
835*5113495bSYour Name populate_dot11f_beacon_report(struct mac_context *mac,
836*5113495bSYour Name 			tDot11fIEMeasurementReport *pDot11f,
837*5113495bSYour Name 			tSirMacBeaconReport *pBeaconReport,
838*5113495bSYour Name 			bool is_last_frame);
839*5113495bSYour Name 
840*5113495bSYour Name /**
841*5113495bSYour Name  * populate_dot11f_chan_load_report() - populate the chan load Report IE
842*5113495bSYour Name  * @mac: pointer to the global MAC context
843*5113495bSYour Name  * @dot11f: pointer to the measurement report structure
844*5113495bSYour Name  * @channel_load_report: pointer to the chan load Report structure
845*5113495bSYour Name  *
846*5113495bSYour Name  * Return: none
847*5113495bSYour Name  */
848*5113495bSYour Name void
849*5113495bSYour Name populate_dot11f_chan_load_report(struct mac_context *mac,
850*5113495bSYour Name 				 tDot11fIEMeasurementReport *dot11f,
851*5113495bSYour Name 				 struct chan_load_report *channel_load_report);
852*5113495bSYour Name 
853*5113495bSYour Name /**
854*5113495bSYour Name  * populate_dot11f_rrm_sta_stats_report() - Populate RRM STA STATS Report IE
855*5113495bSYour Name  * @mac: Pointer to the global MAC context
856*5113495bSYour Name  * @pdot11f: Pointer to the measurement report structure
857*5113495bSYour Name  * @statistics_report: Pointer to the RRM STA STATS Report structure
858*5113495bSYour Name  *
859*5113495bSYour Name  * Return: QDF Status
860*5113495bSYour Name  */
861*5113495bSYour Name QDF_STATUS
862*5113495bSYour Name populate_dot11f_rrm_sta_stats_report(
863*5113495bSYour Name 		struct mac_context *mac, tDot11fIEMeasurementReport *pdot11f,
864*5113495bSYour Name 		struct statistics_report *statistics_report);
865*5113495bSYour Name 
866*5113495bSYour Name /**
867*5113495bSYour Name  * \brief Populate a tDot11fIEExtSuppRates
868*5113495bSYour Name  *
869*5113495bSYour Name  *
870*5113495bSYour Name  * \param mac Pointer to the global MAC data structure
871*5113495bSYour Name  *
872*5113495bSYour Name  * \param nChannelNum Channel on which the enclosing frame will be going out
873*5113495bSYour Name  *
874*5113495bSYour Name  * \param pDot11f Address of a tDot11fIEExtSuppRates struct to be filled in.
875*5113495bSYour Name  *
876*5113495bSYour Name  *
877*5113495bSYour Name  * This method is a NOP if the channel is greater than 14.
878*5113495bSYour Name  *
879*5113495bSYour Name  *
880*5113495bSYour Name  */
881*5113495bSYour Name 
882*5113495bSYour Name QDF_STATUS
883*5113495bSYour Name populate_dot11f_ext_supp_rates1(struct mac_context *mac,
884*5113495bSYour Name 				uint8_t nChannelNum,
885*5113495bSYour Name 				tDot11fIEExtSuppRates *pDot11f);
886*5113495bSYour Name 
887*5113495bSYour Name QDF_STATUS
888*5113495bSYour Name populate_dot11f_ht_caps(struct mac_context *mac,
889*5113495bSYour Name 			struct pe_session *pe_session, tDot11fIEHTCaps *pDot11f);
890*5113495bSYour Name 
891*5113495bSYour Name QDF_STATUS
892*5113495bSYour Name populate_dot11f_ht_info(struct mac_context *mac,
893*5113495bSYour Name 			tDot11fIEHTInfo *pDot11f, struct pe_session *pe_session);
894*5113495bSYour Name 
895*5113495bSYour Name 
896*5113495bSYour Name #ifdef ANI_SUPPORT_11H
897*5113495bSYour Name QDF_STATUS
898*5113495bSYour Name populate_dot11f_measurement_report0(struct mac_context *mac,
899*5113495bSYour Name 				tpSirMacMeasReqActionFrame pReq,
900*5113495bSYour Name 				tDot11fIEMeasurementReport *pDot11f);
901*5113495bSYour Name 
902*5113495bSYour Name /* / Populate a tDot11fIEMeasurementReport when the report type is CCA */
903*5113495bSYour Name QDF_STATUS
904*5113495bSYour Name populate_dot11f_measurement_report1(struct mac_context *mac,
905*5113495bSYour Name 				tpSirMacMeasReqActionFrame pReq,
906*5113495bSYour Name 				tDot11fIEMeasurementReport *pDot11f);
907*5113495bSYour Name 
908*5113495bSYour Name /* / Populate a tDot11fIEMeasurementReport when the report type is RPI Hist */
909*5113495bSYour Name QDF_STATUS
910*5113495bSYour Name populate_dot11f_measurement_report2(struct mac_context *mac,
911*5113495bSYour Name 				tpSirMacMeasReqActionFrame pReq,
912*5113495bSYour Name 				tDot11fIEMeasurementReport *pDot11f);
913*5113495bSYour Name #endif /* ANI_SUPPORT_11H */
914*5113495bSYour Name 
915*5113495bSYour Name /* / Populate a tDot11fIEPowerCaps */
916*5113495bSYour Name void
917*5113495bSYour Name populate_dot11f_power_caps(struct mac_context *mac,
918*5113495bSYour Name 			tDot11fIEPowerCaps *pCaps,
919*5113495bSYour Name 			uint8_t nAssocType, struct pe_session *pe_session);
920*5113495bSYour Name 
921*5113495bSYour Name /* / Populate a tDot11fIEPowerConstraints */
922*5113495bSYour Name QDF_STATUS
923*5113495bSYour Name populate_dot11f_power_constraints(struct mac_context *mac,
924*5113495bSYour Name 				tDot11fIEPowerConstraints *pDot11f);
925*5113495bSYour Name 
926*5113495bSYour Name void
927*5113495bSYour Name populate_dot11f_qos_caps_station(struct mac_context *mac, struct pe_session *session,
928*5113495bSYour Name 				tDot11fIEQOSCapsStation *pDot11f);
929*5113495bSYour Name 
930*5113495bSYour Name QDF_STATUS
931*5113495bSYour Name populate_dot11f_rsn(struct mac_context *mac,
932*5113495bSYour Name 		tpSirRSNie pRsnIe, tDot11fIERSN *pDot11f);
933*5113495bSYour Name 
934*5113495bSYour Name QDF_STATUS
935*5113495bSYour Name populate_dot11f_rsn_opaque(struct mac_context *mac,
936*5113495bSYour Name 		tpSirRSNie pRsnIe, tDot11fIERSNOpaque *pDot11f);
937*5113495bSYour Name 
938*5113495bSYour Name #if defined(FEATURE_WLAN_WAPI)
939*5113495bSYour Name QDF_STATUS
940*5113495bSYour Name populate_dot11f_wapi(struct mac_context *mac,
941*5113495bSYour Name 		     tpSirRSNie pRsnIe, tDot11fIEWAPI *pDot11f);
942*5113495bSYour Name 
943*5113495bSYour Name QDF_STATUS populate_dot11f_wapi_opaque(struct mac_context *mac,
944*5113495bSYour Name 				       tpSirRSNie pRsnIe,
945*5113495bSYour Name 				       tDot11fIEWAPIOpaque *pDot11f);
946*5113495bSYour Name #else
947*5113495bSYour Name static inline QDF_STATUS
populate_dot11f_wapi(struct mac_context * mac,tpSirRSNie pRsnIe,tDot11fIEWAPI * pDot11f)948*5113495bSYour Name populate_dot11f_wapi(struct mac_context *mac,
949*5113495bSYour Name 		     tpSirRSNie pRsnIe, tDot11fIEWAPI *pDot11f)
950*5113495bSYour Name {
951*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
952*5113495bSYour Name }
953*5113495bSYour Name 
954*5113495bSYour Name static inline QDF_STATUS
populate_dot11f_wapi_opaque(struct mac_context * mac,tpSirRSNie pRsnIe,tDot11fIEWAPIOpaque * pDot11f)955*5113495bSYour Name populate_dot11f_wapi_opaque(struct mac_context *mac,
956*5113495bSYour Name 			    tpSirRSNie pRsnIe,
957*5113495bSYour Name 			    tDot11fIEWAPIOpaque *pDot11f)
958*5113495bSYour Name {
959*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
960*5113495bSYour Name }
961*5113495bSYour Name #endif /* defined(FEATURE_WLAN_WAPI) */
962*5113495bSYour Name 
963*5113495bSYour Name /* / Populate a tDot11fIESSID given a tSirMacSSid */
964*5113495bSYour Name void
965*5113495bSYour Name populate_dot11f_ssid(struct mac_context *mac,
966*5113495bSYour Name 		tSirMacSSid *pInternal, tDot11fIESSID *pDot11f);
967*5113495bSYour Name 
968*5113495bSYour Name /* / Populate a tDot11fIESSID from CFG */
969*5113495bSYour Name QDF_STATUS populate_dot11f_ssid2(struct pe_session *pe_session,
970*5113495bSYour Name 				tDot11fIESSID *pDot11f);
971*5113495bSYour Name 
972*5113495bSYour Name /**
973*5113495bSYour Name  * \brief Populate a tDot11fIESchedule
974*5113495bSYour Name  *
975*5113495bSYour Name  * \sa populate_dot11f_wmm_schedule
976*5113495bSYour Name  *
977*5113495bSYour Name  *
978*5113495bSYour Name  * \param pSchedule Address of a tSirMacScheduleIE struct
979*5113495bSYour Name  *
980*5113495bSYour Name  * \param pDot11f Address of a tDot11fIESchedule to be filled in
981*5113495bSYour Name  *
982*5113495bSYour Name  *
983*5113495bSYour Name  */
984*5113495bSYour Name 
985*5113495bSYour Name void
986*5113495bSYour Name populate_dot11f_schedule(tSirMacScheduleIE *pSchedule,
987*5113495bSYour Name 			tDot11fIESchedule *pDot11f);
988*5113495bSYour Name 
989*5113495bSYour Name void
990*5113495bSYour Name populate_dot11f_supp_channels(struct mac_context *mac,
991*5113495bSYour Name 			tDot11fIESuppChannels *pDot11f,
992*5113495bSYour Name 			uint8_t nAssocType, struct pe_session *pe_session);
993*5113495bSYour Name 
994*5113495bSYour Name /**
995*5113495bSYour Name  * \brief Populated a tDot11fIESuppRates
996*5113495bSYour Name  *
997*5113495bSYour Name  *
998*5113495bSYour Name  * \param mac Pointer to the global MAC data structure
999*5113495bSYour Name  *
1000*5113495bSYour Name  * \param nChannelNum Channel the enclosing frame will be going out on; see
1001*5113495bSYour Name  * below
1002*5113495bSYour Name  *
1003*5113495bSYour Name  * \param pDot11f Address of a tDot11fIESuppRates struct to be filled in.
1004*5113495bSYour Name  *
1005*5113495bSYour Name  *
1006*5113495bSYour Name  * If nChannelNum is greater than 13, the supported rates will be
1007*5113495bSYour Name  * WNI_CFG_SUPPORTED_RATES_11B.  If it is less than or equal to 13, the
1008*5113495bSYour Name  * supported rates will be WNI_CFG_SUPPORTED_RATES_11A.  If nChannelNum is
1009*5113495bSYour Name  * set to the sentinel value POPULATE_DOT11F_RATES_OPERATIONAL, the struct
1010*5113495bSYour Name  * will be populated with WNI_CFG_OPERATIONAL_RATE_SET.
1011*5113495bSYour Name  *
1012*5113495bSYour Name  *
1013*5113495bSYour Name  */
1014*5113495bSYour Name 
1015*5113495bSYour Name #define POPULATE_DOT11F_RATES_OPERATIONAL (0xff)
1016*5113495bSYour Name 
1017*5113495bSYour Name QDF_STATUS
1018*5113495bSYour Name populate_dot11f_supp_rates(struct mac_context *mac,
1019*5113495bSYour Name 			uint8_t nChannelNum,
1020*5113495bSYour Name 			tDot11fIESuppRates *pDot11f, struct pe_session *);
1021*5113495bSYour Name 
1022*5113495bSYour Name QDF_STATUS
1023*5113495bSYour Name populate_dot11f_rates_tdls(struct mac_context *p_mac,
1024*5113495bSYour Name 			tDot11fIESuppRates *p_supp_rates,
1025*5113495bSYour Name 			tDot11fIEExtSuppRates *p_ext_supp_rates,
1026*5113495bSYour Name 			uint8_t curr_oper_channel);
1027*5113495bSYour Name 
1028*5113495bSYour Name QDF_STATUS populate_dot11f_tpc_report(struct mac_context *mac,
1029*5113495bSYour Name 					tDot11fIETPCReport *pDot11f,
1030*5113495bSYour Name 					struct pe_session *pe_session);
1031*5113495bSYour Name 
1032*5113495bSYour Name /* / Populate a tDot11FfTSInfo */
1033*5113495bSYour Name void populate_dot11f_ts_info(struct mac_ts_info *pInfo,
1034*5113495bSYour Name 			     tDot11fFfTSInfo *pDot11f);
1035*5113495bSYour Name 
1036*5113495bSYour Name void populate_dot11f_wmm(struct mac_context *mac,
1037*5113495bSYour Name 			tDot11fIEWMMInfoAp *pInfo,
1038*5113495bSYour Name 			tDot11fIEWMMParams *pParams,
1039*5113495bSYour Name 			tDot11fIEWMMCaps *pCaps, struct pe_session *pe_session);
1040*5113495bSYour Name 
1041*5113495bSYour Name void populate_dot11f_wmm_caps(tDot11fIEWMMCaps *pCaps);
1042*5113495bSYour Name 
1043*5113495bSYour Name #if defined(FEATURE_WLAN_ESE)
1044*5113495bSYour Name /* Fill the ESE version IE */
1045*5113495bSYour Name void populate_dot11f_ese_version(tDot11fIEESEVersion *pESEVersion);
1046*5113495bSYour Name /* Fill the Radio Management Capability */
1047*5113495bSYour Name void populate_dot11f_ese_rad_mgmt_cap(tDot11fIEESERadMgmtCap *pESERadMgmtCap);
1048*5113495bSYour Name /* Fill the CCKM IE */
1049*5113495bSYour Name QDF_STATUS populate_dot11f_ese_cckm_opaque(struct mac_context *mac,
1050*5113495bSYour Name 					struct mlme_connect_info *connect_info,
1051*5113495bSYour Name 					tDot11fIEESECckmOpaque *pDot11f);
1052*5113495bSYour Name 
1053*5113495bSYour Name void populate_dot11_tsrsie(struct mac_context *mac,
1054*5113495bSYour Name 			struct ese_tsrs_ie *pOld,
1055*5113495bSYour Name 			tDot11fIEESETrafStrmRateSet *pDot11f,
1056*5113495bSYour Name 			uint8_t rate_length);
1057*5113495bSYour Name #ifdef WLAN_FEATURE_HOST_ROAM
1058*5113495bSYour Name void populate_dot11f_re_assoc_tspec(struct mac_context *mac,
1059*5113495bSYour Name 				tDot11fReAssocRequest *pReassoc,
1060*5113495bSYour Name 				struct pe_session *pe_session);
1061*5113495bSYour Name #endif
1062*5113495bSYour Name QDF_STATUS
1063*5113495bSYour Name sir_beacon_ie_ese_bcn_report(struct mac_context *mac,
1064*5113495bSYour Name 		uint8_t *pPayload, const uint32_t payloadLength,
1065*5113495bSYour Name 		uint8_t **outIeBuf, uint32_t *pOutIeLen);
1066*5113495bSYour Name 
1067*5113495bSYour Name /**
1068*5113495bSYour Name  * ese_populate_wmm_tspec() - Populates TSPEC info for
1069*5113495bSYour Name  * reassoc
1070*5113495bSYour Name  * @source: source structure
1071*5113495bSYour Name  * @dest: destination structure
1072*5113495bSYour Name  *
1073*5113495bSYour Name  * This function copies TSPEC parameters from source
1074*5113495bSYour Name  * structure to destination structure.
1075*5113495bSYour Name  *
1076*5113495bSYour Name  * Return: None
1077*5113495bSYour Name  */
1078*5113495bSYour Name void ese_populate_wmm_tspec(struct mac_tspec_ie *source,
1079*5113495bSYour Name 			    ese_wmm_tspec_ie *dest);
1080*5113495bSYour Name 
1081*5113495bSYour Name #endif
1082*5113495bSYour Name 
1083*5113495bSYour Name void populate_dot11f_wmm_info_ap(struct mac_context *mac,
1084*5113495bSYour Name 				tDot11fIEWMMInfoAp *pInfo,
1085*5113495bSYour Name 				struct pe_session *pe_session);
1086*5113495bSYour Name 
1087*5113495bSYour Name void populate_dot11f_wmm_info_station_per_session(struct mac_context *mac,
1088*5113495bSYour Name 					struct pe_session *pe_session,
1089*5113495bSYour Name 					tDot11fIEWMMInfoStation *pInfo);
1090*5113495bSYour Name 
1091*5113495bSYour Name void populate_dot11f_wmm_params(struct mac_context *mac,
1092*5113495bSYour Name 				tDot11fIEWMMParams *pParams,
1093*5113495bSYour Name 				struct pe_session *pe_session);
1094*5113495bSYour Name 
1095*5113495bSYour Name QDF_STATUS
1096*5113495bSYour Name populate_dot11f_wpa(struct mac_context *mac,
1097*5113495bSYour Name 		tpSirRSNie pRsnIe, tDot11fIEWPA *pDot11f);
1098*5113495bSYour Name 
1099*5113495bSYour Name QDF_STATUS
1100*5113495bSYour Name populate_dot11f_wpa_opaque(struct mac_context *mac,
1101*5113495bSYour Name 			tpSirRSNie pRsnIe, tDot11fIEWPAOpaque *pDot11f);
1102*5113495bSYour Name 
1103*5113495bSYour Name void populate_dot11f_tspec(struct mac_tspec_ie *pOld, tDot11fIETSPEC *pDot11f);
1104*5113495bSYour Name 
1105*5113495bSYour Name void populate_dot11f_wmmtspec(struct mac_tspec_ie *pOld,
1106*5113495bSYour Name 			      tDot11fIEWMMTSPEC *pDot11f);
1107*5113495bSYour Name 
1108*5113495bSYour Name #ifdef WLAN_FEATURE_MSCS
1109*5113495bSYour Name void
1110*5113495bSYour Name populate_dot11f_mscs_dec_element(struct mscs_req_info *mscs_req,
1111*5113495bSYour Name 				 tDot11fmscs_request_action_frame *dot11f);
1112*5113495bSYour Name #endif
1113*5113495bSYour Name 
1114*5113495bSYour Name QDF_STATUS
1115*5113495bSYour Name populate_dot11f_tclas(struct mac_context *mac,
1116*5113495bSYour Name 		tSirTclasInfo *pOld, tDot11fIETCLAS *pDot11f);
1117*5113495bSYour Name 
1118*5113495bSYour Name QDF_STATUS
1119*5113495bSYour Name populate_dot11f_wmmtclas(struct mac_context *mac,
1120*5113495bSYour Name 			tSirTclasInfo *pOld, tDot11fIEWMMTCLAS *pDot11f);
1121*5113495bSYour Name 
1122*5113495bSYour Name QDF_STATUS populate_dot11f_wsc(struct mac_context *mac,
1123*5113495bSYour Name 			tDot11fIEWscBeacon *pDot11f);
1124*5113495bSYour Name 
1125*5113495bSYour Name QDF_STATUS populate_dot11f_wsc_registrar_info(struct mac_context *mac,
1126*5113495bSYour Name 						tDot11fIEWscBeacon *pDot11f);
1127*5113495bSYour Name 
1128*5113495bSYour Name QDF_STATUS de_populate_dot11f_wsc_registrar_info(struct mac_context *mac,
1129*5113495bSYour Name 						tDot11fIEWscBeacon *pDot11f);
1130*5113495bSYour Name 
1131*5113495bSYour Name QDF_STATUS populate_dot11f_probe_res_wpsi_es(struct mac_context *mac,
1132*5113495bSYour Name 						tDot11fIEWscProbeRes *pDot11f,
1133*5113495bSYour Name 						struct pe_session *pe_session);
1134*5113495bSYour Name QDF_STATUS populate_dot11f_beacon_wpsi_es(struct mac_context *mac,
1135*5113495bSYour Name 					tDot11fIEWscBeacon *pDot11f,
1136*5113495bSYour Name 					struct pe_session *pe_session);
1137*5113495bSYour Name 
1138*5113495bSYour Name QDF_STATUS populate_dot11f_wsc_in_probe_res(struct mac_context *mac,
1139*5113495bSYour Name 					tDot11fIEWscProbeRes *pDot11f);
1140*5113495bSYour Name 
1141*5113495bSYour Name QDF_STATUS
1142*5113495bSYour Name populate_dot11f_wsc_registrar_info_in_probe_res(struct mac_context *mac,
1143*5113495bSYour Name 					tDot11fIEWscProbeRes *pDot11f);
1144*5113495bSYour Name 
1145*5113495bSYour Name QDF_STATUS
1146*5113495bSYour Name de_populate_dot11f_wsc_registrar_info_in_probe_res(struct mac_context *mac,
1147*5113495bSYour Name 						tDot11fIEWscProbeRes *pDot11f);
1148*5113495bSYour Name 
1149*5113495bSYour Name QDF_STATUS populate_dot11_assoc_res_p2p_ie(struct mac_context *mac,
1150*5113495bSYour Name 					tDot11fIEP2PAssocRes *pDot11f,
1151*5113495bSYour Name 					tpSirAssocReq pRcvdAssocReq);
1152*5113495bSYour Name 
1153*5113495bSYour Name QDF_STATUS populate_dot11f_wfatpc(struct mac_context *mac,
1154*5113495bSYour Name 				tDot11fIEWFATPC *pDot11f, uint8_t txPower,
1155*5113495bSYour Name 				uint8_t linkMargin);
1156*5113495bSYour Name 
1157*5113495bSYour Name QDF_STATUS populate_dot11f_rrm_ie(struct mac_context *mac,
1158*5113495bSYour Name 				tDot11fIERRMEnabledCap *pDot11f,
1159*5113495bSYour Name 				struct pe_session *pe_session);
1160*5113495bSYour Name 
1161*5113495bSYour Name void populate_mdie(struct mac_context *mac, tDot11fIEMobilityDomain *pDot11f,
1162*5113495bSYour Name 		   uint8_t mdie[]);
1163*5113495bSYour Name 
1164*5113495bSYour Name #ifdef WLAN_FEATURE_FILS_SK
1165*5113495bSYour Name /**
1166*5113495bSYour Name  * populate_fils_ft_info() - Populate FTIE into assoc request frame
1167*5113495bSYour Name  * @mac: Global mac context
1168*5113495bSYour Name  * @ft_info: pointer to assoc request frame FT IE buffer
1169*5113495bSYour Name  * @pe_session: pointer to PE session
1170*5113495bSYour Name  *
1171*5113495bSYour Name  * Return: None
1172*5113495bSYour Name  */
1173*5113495bSYour Name void populate_fils_ft_info(struct mac_context *mac, tDot11fIEFTInfo *ft_info,
1174*5113495bSYour Name 			   struct pe_session *pe_session);
1175*5113495bSYour Name #else
1176*5113495bSYour Name static inline
populate_fils_ft_info(struct mac_context * mac,tDot11fIEFTInfo * ft_info,struct pe_session * pe_session)1177*5113495bSYour Name void populate_fils_ft_info(struct mac_context *mac, tDot11fIEFTInfo *ft_info,
1178*5113495bSYour Name 			   struct pe_session *pe_session)
1179*5113495bSYour Name {}
1180*5113495bSYour Name #endif
1181*5113495bSYour Name 
1182*5113495bSYour Name void populate_dot11f_assoc_rsp_rates(struct mac_context *mac,
1183*5113495bSYour Name 				tDot11fIESuppRates *pSupp,
1184*5113495bSYour Name 				tDot11fIEExtSuppRates *pExt,
1185*5113495bSYour Name 				uint16_t *_11bRates, uint16_t *_11aRates);
1186*5113495bSYour Name 
1187*5113495bSYour Name int find_ie_location(struct mac_context *mac, tpSirRSNie pRsnIe, uint8_t EID);
1188*5113495bSYour Name 
1189*5113495bSYour Name /**
1190*5113495bSYour Name  * wlan_get_cb_mode() - Get channel bonding mode from beacon
1191*5113495bSYour Name  * @mac: Global mac context
1192*5113495bSYour Name  * @ch_freq: channel frequency
1193*5113495bSYour Name  * @ie_struct: beacon ie struct
1194*5113495bSYour Name  * @pe_session: pointer to PE session
1195*5113495bSYour Name  *
1196*5113495bSYour Name  * Return: ePhyChanBondState
1197*5113495bSYour Name  */
1198*5113495bSYour Name ePhyChanBondState wlan_get_cb_mode(struct mac_context *mac,
1199*5113495bSYour Name 				   qdf_freq_t ch_freq,
1200*5113495bSYour Name 				   tDot11fBeaconIEs *ie_struct,
1201*5113495bSYour Name 				   struct pe_session *pe_session);
1202*5113495bSYour Name 
1203*5113495bSYour Name void lim_log_vht_cap(struct mac_context *mac, tDot11fIEVHTCaps *pDot11f);
1204*5113495bSYour Name 
1205*5113495bSYour Name QDF_STATUS
1206*5113495bSYour Name populate_dot11f_vht_caps(struct mac_context *mac, struct pe_session *pe_session,
1207*5113495bSYour Name 			tDot11fIEVHTCaps *pDot11f);
1208*5113495bSYour Name 
1209*5113495bSYour Name QDF_STATUS
1210*5113495bSYour Name populate_dot11f_vht_operation(struct mac_context *mac,
1211*5113495bSYour Name 			struct pe_session *pe_session,
1212*5113495bSYour Name 			tDot11fIEVHTOperation *pDot11f);
1213*5113495bSYour Name 
1214*5113495bSYour Name QDF_STATUS
1215*5113495bSYour Name populate_dot11f_ext_cap(struct mac_context *mac, bool isVHTEnabled,
1216*5113495bSYour Name 			tDot11fIEExtCap *pDot11f, struct pe_session *pe_session);
1217*5113495bSYour Name 
1218*5113495bSYour Name void populate_dot11f_qcn_ie(struct mac_context *mac,
1219*5113495bSYour Name 			    struct pe_session *pe_session,
1220*5113495bSYour Name 			    tDot11fIEqcn_ie *qcn_ie,
1221*5113495bSYour Name 			    uint8_t attr_id);
1222*5113495bSYour Name 
1223*5113495bSYour Name void populate_dot11f_bss_max_idle(struct mac_context *mac,
1224*5113495bSYour Name 				  struct pe_session *session,
1225*5113495bSYour Name 				  tDot11fIEbss_max_idle_period *max_idle_ie);
1226*5113495bSYour Name 
1227*5113495bSYour Name #ifdef WLAN_FEATURE_FILS_SK
1228*5113495bSYour Name /**
1229*5113495bSYour Name  * populate_dot11f_fils_params() - Populate FILS IE to frame
1230*5113495bSYour Name  * @mac_ctx: global mac context
1231*5113495bSYour Name  * @frm: Assoc request frame
1232*5113495bSYour Name  * @pe_session: PE session
1233*5113495bSYour Name  *
1234*5113495bSYour Name  * This API is used to populate FILS IE to Association request
1235*5113495bSYour Name  *
1236*5113495bSYour Name  * Return: None
1237*5113495bSYour Name  */
1238*5113495bSYour Name void populate_dot11f_fils_params(struct mac_context *mac_ctx,
1239*5113495bSYour Name 				 tDot11fAssocRequest * frm,
1240*5113495bSYour Name 				 struct pe_session *pe_session);
1241*5113495bSYour Name #else
populate_dot11f_fils_params(struct mac_context * mac_ctx,tDot11fAssocRequest * frm,struct pe_session * pe_session)1242*5113495bSYour Name static inline void populate_dot11f_fils_params(struct mac_context *mac_ctx,
1243*5113495bSYour Name 				 tDot11fAssocRequest *frm,
1244*5113495bSYour Name 				 struct pe_session *pe_session)
1245*5113495bSYour Name { }
1246*5113495bSYour Name #endif
1247*5113495bSYour Name 
1248*5113495bSYour Name QDF_STATUS
1249*5113495bSYour Name populate_dot11f_operating_mode(struct mac_context *mac,
1250*5113495bSYour Name 			tDot11fIEOperatingMode *pDot11f,
1251*5113495bSYour Name 			struct pe_session *pe_session);
1252*5113495bSYour Name 
1253*5113495bSYour Name void populate_dot11f_timeout_interval(struct mac_context *mac,
1254*5113495bSYour Name 				tDot11fIETimeoutInterval *pDot11f,
1255*5113495bSYour Name 				uint8_t type, uint32_t value);
1256*5113495bSYour Name 
1257*5113495bSYour Name #ifdef FEATURE_AP_MCC_CH_AVOIDANCE
1258*5113495bSYour Name /* Populate a tDot11fIEQComVendorIE */
1259*5113495bSYour Name void
1260*5113495bSYour Name populate_dot11f_avoid_channel_ie(struct mac_context *mac_ctx,
1261*5113495bSYour Name 				tDot11fIEQComVendorIE *dot11f,
1262*5113495bSYour Name 				struct pe_session *session_entry);
1263*5113495bSYour Name #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */
1264*5113495bSYour Name 
1265*5113495bSYour Name QDF_STATUS populate_dot11f_timing_advert_frame(struct mac_context *mac,
1266*5113495bSYour Name 	tDot11fTimingAdvertisementFrame *frame);
1267*5113495bSYour Name void populate_dot11_supp_operating_classes(struct mac_context *mac_ptr,
1268*5113495bSYour Name 	tDot11fIESuppOperatingClasses *dot_11_ptr, struct pe_session *session_entry);
1269*5113495bSYour Name 
1270*5113495bSYour Name QDF_STATUS
1271*5113495bSYour Name sir_validate_and_rectify_ies(struct mac_context *mac_ctx,
1272*5113495bSYour Name 				uint8_t *mgmt_frame,
1273*5113495bSYour Name 				uint32_t frame_bytes,
1274*5113495bSYour Name 				uint32_t *missing_rsn_bytes);
1275*5113495bSYour Name /**
1276*5113495bSYour Name  * sir_copy_caps_info() - Copy Caps info from tDot11fFfCapabilities to
1277*5113495bSYour Name  *                        beacon/probe response structure.
1278*5113495bSYour Name  * @mac_ctx: MAC Context
1279*5113495bSYour Name  * @caps: tDot11fFfCapabilities structure
1280*5113495bSYour Name  * @pProbeResp: beacon/probe response structure
1281*5113495bSYour Name  *
1282*5113495bSYour Name  * Copy the caps info to beacon/probe response structure
1283*5113495bSYour Name  *
1284*5113495bSYour Name  * Return: None
1285*5113495bSYour Name  */
1286*5113495bSYour Name void sir_copy_caps_info(struct mac_context *mac_ctx, tDot11fFfCapabilities caps,
1287*5113495bSYour Name 			tpSirProbeRespBeacon pProbeResp);
1288*5113495bSYour Name 
1289*5113495bSYour Name #ifdef WLAN_FEATURE_FILS_SK
1290*5113495bSYour Name /**
1291*5113495bSYour Name  * update_fils_data: update fils params from beacon/probe response
1292*5113495bSYour Name  * @fils_ind: pointer to sir_fils_indication
1293*5113495bSYour Name  * @fils_indication: pointer to tDot11fIEfils_indication
1294*5113495bSYour Name  *
1295*5113495bSYour Name  * Return: None
1296*5113495bSYour Name  */
1297*5113495bSYour Name void update_fils_data(struct sir_fils_indication *fils_ind,
1298*5113495bSYour Name 				 tDot11fIEfils_indication * fils_indication);
1299*5113495bSYour Name #endif
1300*5113495bSYour Name #ifdef WLAN_FEATURE_11AX
1301*5113495bSYour Name /**
1302*5113495bSYour Name  * populate_dot11f_he_caps() - populate he capabilities IE
1303*5113495bSYour Name  *                             in beacon/probe response structure
1304*5113495bSYour Name  * @mac_context: pointer to mac context
1305*5113495bSYour Name  * @pe_session: pointer to pe session
1306*5113495bSYour Name  * @he_cap: he capability IE
1307*5113495bSYour Name  *
1308*5113495bSYour Name  * Return: QDF_STATUS
1309*5113495bSYour Name  */
1310*5113495bSYour Name QDF_STATUS populate_dot11f_he_caps(struct mac_context *, struct pe_session *,
1311*5113495bSYour Name 				   tDot11fIEhe_cap *);
1312*5113495bSYour Name 
1313*5113495bSYour Name /**
1314*5113495bSYour Name  * populate_dot11f_he_caps_by_band() - pouldate HE Capability IE by band
1315*5113495bSYour Name  * @mac_ctx: Global MAC context
1316*5113495bSYour Name  * @is_2g: is 2G band
1317*5113495bSYour Name  * @eht_cap: pointer to HE capability IE
1318*5113495bSYour Name  * @session: pointer to pe session
1319*5113495bSYour Name  *
1320*5113495bSYour Name  * Populate the HE capability IE based on band.
1321*5113495bSYour Name  */
1322*5113495bSYour Name QDF_STATUS
1323*5113495bSYour Name populate_dot11f_he_caps_by_band(struct mac_context *mac_ctx,
1324*5113495bSYour Name 				bool is_2g,
1325*5113495bSYour Name 				tDot11fIEhe_cap *he_cap,
1326*5113495bSYour Name 				struct pe_session *session);
1327*5113495bSYour Name 
1328*5113495bSYour Name /**
1329*5113495bSYour Name  * populate_dot11f_he_operation() - populate he operation IE
1330*5113495bSYour Name  *                                  in beacon/probe response structure
1331*5113495bSYour Name  * @mac_context: pointer to mac context
1332*5113495bSYour Name  * @pe_session: pointer to pe session
1333*5113495bSYour Name  * @he_op: he operation IE
1334*5113495bSYour Name  *
1335*5113495bSYour Name  * Return: QDF_STATUS
1336*5113495bSYour Name  */
1337*5113495bSYour Name QDF_STATUS populate_dot11f_he_operation(struct mac_context *, struct pe_session *,
1338*5113495bSYour Name 					tDot11fIEhe_op *);
1339*5113495bSYour Name 
1340*5113495bSYour Name /**
1341*5113495bSYour Name  * populate_dot11f_sr_info() - populate tDot11fIEspatial_reuse to
1342*5113495bSYour Name  *                             beacon/probe response structure.
1343*5113495bSYour Name  * @mac_context: pointer to mac context
1344*5113495bSYour Name  * @pe_session: pointer to pe session
1345*5113495bSYour Name  * @sr_info: spatial reuse IE
1346*5113495bSYour Name  *
1347*5113495bSYour Name  * Return: QDF_STATUS
1348*5113495bSYour Name  */
1349*5113495bSYour Name QDF_STATUS populate_dot11f_sr_info(struct mac_context *mac_ctx,
1350*5113495bSYour Name 				   struct pe_session *session,
1351*5113495bSYour Name 				   tDot11fIEspatial_reuse *sr_info);
1352*5113495bSYour Name 
1353*5113495bSYour Name /**
1354*5113495bSYour Name  * populate_dot11f_he_6ghz_cap() - populdate HE 6GHz caps IE
1355*5113495bSYour Name  * @mac_ctx: Global MAC context
1356*5113495bSYour Name  * @session: PE session
1357*5113495bSYour Name  * @he_6g_cap: pointer to HE 6GHz IE
1358*5113495bSYour Name  *
1359*5113495bSYour Name  * Populdate the HE 6GHz IE based on the session.
1360*5113495bSYour Name  */
1361*5113495bSYour Name QDF_STATUS
1362*5113495bSYour Name populate_dot11f_he_6ghz_cap(struct mac_context *mac_ctx,
1363*5113495bSYour Name 			    struct pe_session *session,
1364*5113495bSYour Name 			    tDot11fIEhe_6ghz_band_cap *he_6g_cap);
1365*5113495bSYour Name #ifdef WLAN_FEATURE_11AX_BSS_COLOR
1366*5113495bSYour Name QDF_STATUS populate_dot11f_he_bss_color_change(struct mac_context *mac_ctx,
1367*5113495bSYour Name 				struct pe_session *session,
1368*5113495bSYour Name 				tDot11fIEbss_color_change *bss_color);
1369*5113495bSYour Name #else
populate_dot11f_he_bss_color_change(struct mac_context * mac_ctx,struct pe_session * session,tDot11fIEbss_color_change * bss_color)1370*5113495bSYour Name static inline QDF_STATUS populate_dot11f_he_bss_color_change(
1371*5113495bSYour Name 				struct mac_context *mac_ctx,
1372*5113495bSYour Name 				struct pe_session *session,
1373*5113495bSYour Name 				tDot11fIEbss_color_change *bss_color)
1374*5113495bSYour Name {
1375*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
1376*5113495bSYour Name }
1377*5113495bSYour Name #endif
1378*5113495bSYour Name #else
populate_dot11f_he_caps(struct mac_context * mac_ctx,struct pe_session * session,tDot11fIEhe_cap * he_cap)1379*5113495bSYour Name static inline QDF_STATUS populate_dot11f_he_caps(struct mac_context *mac_ctx,
1380*5113495bSYour Name 			struct pe_session *session, tDot11fIEhe_cap *he_cap)
1381*5113495bSYour Name {
1382*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
1383*5113495bSYour Name }
1384*5113495bSYour Name 
1385*5113495bSYour Name static inline QDF_STATUS
populate_dot11f_he_caps_by_band(struct mac_context * mac_ctx,bool is_2g,tDot11fIEhe_cap * he_cap)1386*5113495bSYour Name populate_dot11f_he_caps_by_band(struct mac_context *mac_ctx,
1387*5113495bSYour Name 				bool is_2g,
1388*5113495bSYour Name 				tDot11fIEhe_cap *he_cap)
1389*5113495bSYour Name {
1390*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
1391*5113495bSYour Name }
1392*5113495bSYour Name 
populate_dot11f_he_operation(struct mac_context * mac_ctx,struct pe_session * session,tDot11fIEhe_op * he_op)1393*5113495bSYour Name static inline QDF_STATUS populate_dot11f_he_operation(struct mac_context *mac_ctx,
1394*5113495bSYour Name 			struct pe_session *session, tDot11fIEhe_op *he_op)
1395*5113495bSYour Name {
1396*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
1397*5113495bSYour Name }
1398*5113495bSYour Name 
1399*5113495bSYour Name static inline QDF_STATUS
populate_dot11f_he_6ghz_cap(struct mac_context * mac_ctx,struct pe_session * session,tDot11fIEhe_6ghz_band_cap * he_6g_cap)1400*5113495bSYour Name populate_dot11f_he_6ghz_cap(struct mac_context *mac_ctx,
1401*5113495bSYour Name 			    struct pe_session *session,
1402*5113495bSYour Name 			    tDot11fIEhe_6ghz_band_cap *he_6g_cap)
1403*5113495bSYour Name {
1404*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
1405*5113495bSYour Name }
1406*5113495bSYour Name 
populate_dot11f_he_bss_color_change(struct mac_context * mac_ctx,struct pe_session * session,tDot11fIEbss_color_change * bss_color)1407*5113495bSYour Name static inline QDF_STATUS populate_dot11f_he_bss_color_change(
1408*5113495bSYour Name 				struct mac_context *mac_ctx,
1409*5113495bSYour Name 				struct pe_session *session,
1410*5113495bSYour Name 				tDot11fIEbss_color_change *bss_color)
1411*5113495bSYour Name {
1412*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
1413*5113495bSYour Name }
1414*5113495bSYour Name 
populate_dot11f_sr_info(struct mac_context * mac_ctx,struct pe_session * session,tDot11fIEspatial_reuse * sr_info)1415*5113495bSYour Name static inline QDF_STATUS populate_dot11f_sr_info(
1416*5113495bSYour Name 					struct mac_context *mac_ctx,
1417*5113495bSYour Name 					struct pe_session *session,
1418*5113495bSYour Name 					tDot11fIEspatial_reuse *sr_info)
1419*5113495bSYour Name {
1420*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
1421*5113495bSYour Name }
1422*5113495bSYour Name #endif
1423*5113495bSYour Name 
1424*5113495bSYour Name #if defined(WLAN_FEATURE_11AX) && defined(WLAN_SUPPORT_TWT)
1425*5113495bSYour Name /**
1426*5113495bSYour Name  * populate_dot11f_twt_extended_caps() - populate TWT extended capabilities
1427*5113495bSYour Name  * @mac_ctx: Global MAC context.
1428*5113495bSYour Name  * @pe_session: Pointer to the PE session.
1429*5113495bSYour Name  * @dot11f: Pointer to the extended capabilities of the session.
1430*5113495bSYour Name  *
1431*5113495bSYour Name  * Populate the TWT extended capabilities based on the target and INI support.
1432*5113495bSYour Name  *
1433*5113495bSYour Name  * Return: QDF_STATUS Success or Failure
1434*5113495bSYour Name  */
1435*5113495bSYour Name QDF_STATUS populate_dot11f_twt_extended_caps(struct mac_context *mac_ctx,
1436*5113495bSYour Name 					     struct pe_session *pe_session,
1437*5113495bSYour Name 					     tDot11fIEExtCap *dot11f);
1438*5113495bSYour Name #else
1439*5113495bSYour Name static inline
populate_dot11f_twt_extended_caps(struct mac_context * mac_ctx,struct pe_session * pe_session,tDot11fIEExtCap * dot11f)1440*5113495bSYour Name QDF_STATUS populate_dot11f_twt_extended_caps(struct mac_context *mac_ctx,
1441*5113495bSYour Name 					     struct pe_session *pe_session,
1442*5113495bSYour Name 					     tDot11fIEExtCap *dot11f)
1443*5113495bSYour Name {
1444*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
1445*5113495bSYour Name }
1446*5113495bSYour Name #endif
1447*5113495bSYour Name 
1448*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
1449*5113495bSYour Name /**
1450*5113495bSYour Name  * populate_dot11f_assoc_rsp_mlo_ie() - populate mlo ie for assoc response
1451*5113495bSYour Name  * @mac_ctx: Global MAC context
1452*5113495bSYour Name  * @session: PE session
1453*5113495bSYour Name  * @sta: Pointer to tpDphHashNode
1454*5113495bSYour Name  * @frm: Assoc response frame
1455*5113495bSYour Name  *
1456*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS of no error
1457*5113495bSYour Name  */
1458*5113495bSYour Name QDF_STATUS populate_dot11f_assoc_rsp_mlo_ie(struct mac_context *mac_ctx,
1459*5113495bSYour Name 					    struct pe_session *session,
1460*5113495bSYour Name 					    tpDphHashNode sta,
1461*5113495bSYour Name 					    tDot11fAssocResponse *frm);
1462*5113495bSYour Name 
1463*5113495bSYour Name /**
1464*5113495bSYour Name  * populate_dot11f_bcn_mlo_ie() - populate mlo ie for beacon
1465*5113495bSYour Name  * @mac_ctx: Global MAC context
1466*5113495bSYour Name  * @session: PE session
1467*5113495bSYour Name  *
1468*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS of no error
1469*5113495bSYour Name  */
1470*5113495bSYour Name QDF_STATUS populate_dot11f_bcn_mlo_ie(struct mac_context *mac_ctx,
1471*5113495bSYour Name 				      struct pe_session *session);
1472*5113495bSYour Name 
1473*5113495bSYour Name /**
1474*5113495bSYour Name  * populate_dot11f_probe_req_mlo_ie() - populate mlo ie for probe req
1475*5113495bSYour Name  * @mac_ctx: Global MAC context
1476*5113495bSYour Name  * @session: PE session
1477*5113495bSYour Name  *
1478*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS of no error
1479*5113495bSYour Name  */
1480*5113495bSYour Name QDF_STATUS populate_dot11f_probe_req_mlo_ie(struct mac_context *mac_ctx,
1481*5113495bSYour Name 					    struct pe_session *session);
1482*5113495bSYour Name 
1483*5113495bSYour Name /**
1484*5113495bSYour Name  * populate_dot11f_tdls_mgmt_mlo_ie() - populate mlo ie for tdls mgmt frame
1485*5113495bSYour Name  * @mac_ctx: Global MAC context
1486*5113495bSYour Name  * @session: PE session
1487*5113495bSYour Name  *
1488*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS of no error
1489*5113495bSYour Name  */
1490*5113495bSYour Name QDF_STATUS populate_dot11f_tdls_mgmt_mlo_ie(struct mac_context *mac_ctx,
1491*5113495bSYour Name 					    struct pe_session *session);
1492*5113495bSYour Name 
1493*5113495bSYour Name /**
1494*5113495bSYour Name  * populate_dot11f_mlo_rnr() - populate rnr for mlo
1495*5113495bSYour Name  * @mac_ctx: Global MAC context
1496*5113495bSYour Name  * @session: PE session
1497*5113495bSYour Name  * @dot11f: tDot11fIEreduced_neighbor_report to be filled
1498*5113495bSYour Name  *
1499*5113495bSYour Name  * Return: void
1500*5113495bSYour Name  */
1501*5113495bSYour Name void populate_dot11f_mlo_rnr(struct mac_context *mac_ctx,
1502*5113495bSYour Name 			     struct pe_session *pe_session,
1503*5113495bSYour Name 			     tDot11fIEreduced_neighbor_report *dot11f);
1504*5113495bSYour Name 
1505*5113495bSYour Name /**
1506*5113495bSYour Name  * populate_dot11f_rnr_tbtt_info_16() - populate rnr with tbtt_info length 16
1507*5113495bSYour Name  * @mac_ctx: pointer to mac_context
1508*5113495bSYour Name  * @pe_session: pe session
1509*5113495bSYour Name  * @rnr_session: session to populate in rnr ie
1510*5113495bSYour Name  * @dot11f: tDot11fIEreduced_neighbor_report to be filled
1511*5113495bSYour Name  *
1512*5113495bSYour Name  * Return: void
1513*5113495bSYour Name  */
1514*5113495bSYour Name void populate_dot11f_rnr_tbtt_info_16(struct mac_context *mac_ctx,
1515*5113495bSYour Name 				      struct pe_session *pe_session,
1516*5113495bSYour Name 				      struct pe_session *rnr_session,
1517*5113495bSYour Name 				      tDot11fIEreduced_neighbor_report *dot11f);
1518*5113495bSYour Name 
1519*5113495bSYour Name #else
populate_dot11f_mlo_rnr(struct mac_context * mac_ctx,struct pe_session * pe_session,tDot11fIEreduced_neighbor_report * dot11f)1520*5113495bSYour Name static inline void populate_dot11f_mlo_rnr(
1521*5113495bSYour Name 				struct mac_context *mac_ctx,
1522*5113495bSYour Name 				struct pe_session *pe_session,
1523*5113495bSYour Name 				tDot11fIEreduced_neighbor_report *dot11f)
1524*5113495bSYour Name {
1525*5113495bSYour Name }
1526*5113495bSYour Name 
populate_dot11f_rnr_tbtt_info_16(struct mac_context * mac_ctx,struct pe_session * pe_session,struct pe_session * rnr_session,tDot11fIEreduced_neighbor_report * dot11f)1527*5113495bSYour Name static inline void populate_dot11f_rnr_tbtt_info_16(
1528*5113495bSYour Name 			struct mac_context *mac_ctx,
1529*5113495bSYour Name 			struct pe_session *pe_session,
1530*5113495bSYour Name 			struct pe_session *rnr_session,
1531*5113495bSYour Name 			tDot11fIEreduced_neighbor_report *dot11f)
1532*5113495bSYour Name {
1533*5113495bSYour Name }
1534*5113495bSYour Name #endif /* WLAN_FEATURE_11BE_MLO */
1535*5113495bSYour Name 
1536*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
1537*5113495bSYour Name /**
1538*5113495bSYour Name  * populate_dot11f_eht_caps() - pouldate EHT Capability IE
1539*5113495bSYour Name  * @mac_ctx: Global MAC context
1540*5113495bSYour Name  * @session: PE session
1541*5113495bSYour Name  * @eht_cap: pointer to EHT capability IE
1542*5113495bSYour Name  *
1543*5113495bSYour Name  * Populate the EHT capability IE based on the session.
1544*5113495bSYour Name  */
1545*5113495bSYour Name QDF_STATUS populate_dot11f_eht_caps(struct mac_context *mac_ctx,
1546*5113495bSYour Name 				    struct pe_session *session,
1547*5113495bSYour Name 				    tDot11fIEeht_cap *eht_cap);
1548*5113495bSYour Name 
1549*5113495bSYour Name /**
1550*5113495bSYour Name  * populate_dot11f_eht_caps_by_band() - pouldate EHT Capability IE by band
1551*5113495bSYour Name  * @mac_ctx: Global MAC context
1552*5113495bSYour Name  * @is_2g: is 2G band
1553*5113495bSYour Name  * @eht_cap: pointer to EHT capability IE
1554*5113495bSYour Name  * @session: pe session
1555*5113495bSYour Name  *
1556*5113495bSYour Name  * Populate the EHT capability IE based on band.
1557*5113495bSYour Name  */
1558*5113495bSYour Name QDF_STATUS
1559*5113495bSYour Name populate_dot11f_eht_caps_by_band(struct mac_context *mac_ctx,
1560*5113495bSYour Name 				 bool is_2g, tDot11fIEeht_cap *eht_cap,
1561*5113495bSYour Name 				 struct pe_session *session);
1562*5113495bSYour Name 
1563*5113495bSYour Name /**
1564*5113495bSYour Name  * populate_dot11f_eht_operation() - pouldate EHT Operation IE
1565*5113495bSYour Name  * @mac_ctx: Global MAC context
1566*5113495bSYour Name  * @session: PE session
1567*5113495bSYour Name  * @eht_op: pointer to EHT Operation IE
1568*5113495bSYour Name  *
1569*5113495bSYour Name  * Populdate the EHT Operation IE based on the session.
1570*5113495bSYour Name  */
1571*5113495bSYour Name QDF_STATUS populate_dot11f_eht_operation(struct mac_context *mac_ctx,
1572*5113495bSYour Name 					 struct pe_session *session,
1573*5113495bSYour Name 					 tDot11fIEeht_op *eht_op);
1574*5113495bSYour Name 
1575*5113495bSYour Name /**
1576*5113495bSYour Name  * populate_dot11f_bw_ind_element() - pouldate bandwidth ind element
1577*5113495bSYour Name  * @mac_ctx: Global MAC context
1578*5113495bSYour Name  * @session: PE session
1579*5113495bSYour Name  * @bw_ind: pointer to bw ind element IE
1580*5113495bSYour Name  *
1581*5113495bSYour Name  * QDF_STATUS
1582*5113495bSYour Name  */
1583*5113495bSYour Name QDF_STATUS populate_dot11f_bw_ind_element(struct mac_context *mac_ctx,
1584*5113495bSYour Name 					  struct pe_session *session,
1585*5113495bSYour Name 					  tDot11fIEbw_ind_element *bw_ind);
1586*5113495bSYour Name 
1587*5113495bSYour Name /**
1588*5113495bSYour Name  * lim_ieee80211_pack_ehtcap() - Pack EHT capabilities IE
1589*5113495bSYour Name  * @ie: output pointer for eht capabilities IE
1590*5113495bSYour Name  * @dot11f_eht_cap: dot11f EHT capabilities IE structure
1591*5113495bSYour Name  * @dot11f_he_cap: dot11f HE capabilities IE structure
1592*5113495bSYour Name  * @is_band_2g: Flag to indicate whether operating band is 2g or not
1593*5113495bSYour Name  *
1594*5113495bSYour Name  * This API is used to encode EHT capabilities IE which is of variable in
1595*5113495bSYour Name  * length depending on the HE capabilities IE content.
1596*5113495bSYour Name  *
1597*5113495bSYour Name  * Return: Void
1598*5113495bSYour Name  */
1599*5113495bSYour Name void lim_ieee80211_pack_ehtcap(uint8_t *ie, tDot11fIEeht_cap dot11f_eht_cap,
1600*5113495bSYour Name 			       tDot11fIEhe_cap dot11f_he_cap, bool is_band_2g);
1601*5113495bSYour Name 
1602*5113495bSYour Name /**
1603*5113495bSYour Name  * lim_strip_and_decode_eht_cap() - API to decode EHT capabilities IE
1604*5113495bSYour Name  * @ie: source ie address
1605*5113495bSYour Name  * @ie_len: source ie length
1606*5113495bSYour Name  * @dot11f_eht_cap: output pointer to dot11f EHT capabilities IE structure
1607*5113495bSYour Name  * @dot11f_he_cap: dot11f HE capabilities IE structure
1608*5113495bSYour Name  * @freq: frequency
1609*5113495bSYour Name  *
1610*5113495bSYour Name  * This API is used to strip and decode EHT caps IE which is of variable in
1611*5113495bSYour Name  * length depending on the HE capabilities IE content.
1612*5113495bSYour Name  *
1613*5113495bSYour Name  * Return: QDF_STATUS
1614*5113495bSYour Name  */
1615*5113495bSYour Name QDF_STATUS lim_strip_and_decode_eht_cap(uint8_t *ie, uint16_t ie_len,
1616*5113495bSYour Name 					tDot11fIEeht_cap *dot11f_eht_cap,
1617*5113495bSYour Name 					tDot11fIEhe_cap dot11f_he_cap,
1618*5113495bSYour Name 					uint16_t freq);
1619*5113495bSYour Name 
1620*5113495bSYour Name /**
1621*5113495bSYour Name  * lim_ieee80211_pack_ehtop() - Pack EHT Operations IE
1622*5113495bSYour Name  * @ie: output pointer for eht operations IE
1623*5113495bSYour Name  * @dot11f_eht_cap: dot11f EHT operations IE structure
1624*5113495bSYour Name  * @dot11f_vht_op: dot11f VHT operation IE structure
1625*5113495bSYour Name  * @dot11f_he_op: dot11f HE operation IE structure
1626*5113495bSYour Name  * @dot11f_ht_info: dot11f HT info IE structure
1627*5113495bSYour Name  *
1628*5113495bSYour Name  * This API is used to encode EHT operations IE which is of variable in
1629*5113495bSYour Name  * length depending on the HE capabilities IE content.
1630*5113495bSYour Name  *
1631*5113495bSYour Name  * Return: Void
1632*5113495bSYour Name  */
1633*5113495bSYour Name void lim_ieee80211_pack_ehtop(uint8_t *ie, tDot11fIEeht_op dot11f_eht_op,
1634*5113495bSYour Name 			      tDot11fIEVHTOperation dot11f_vht_op,
1635*5113495bSYour Name 			      tDot11fIEhe_op dot11f_he_op,
1636*5113495bSYour Name 			      tDot11fIEHTInfo dot11f_ht_info);
1637*5113495bSYour Name 
1638*5113495bSYour Name /**
1639*5113495bSYour Name  * lim_strip_and_decode_eht_op() - API to decode EHT Operations IE
1640*5113495bSYour Name  * @ie: source ie address
1641*5113495bSYour Name  * @ie_len: source ie length
1642*5113495bSYour Name  * @dot11f_eht_op: output pointer to dot11f EHT Operations IE structure
1643*5113495bSYour Name  * @dot11f_vht_op: dot11f VHT operation IE structure
1644*5113495bSYour Name  * @dot11f_he_op: dot11f HE operation IE structure
1645*5113495bSYour Name  * @dot11f_ht_info: dot11f HT info IE structure
1646*5113495bSYour Name  *
1647*5113495bSYour Name  * This API is used to strip and decode EHT operations IE which is of variable
1648*5113495bSYour Name  * in length depending on the HE capabilities IE content.
1649*5113495bSYour Name  *
1650*5113495bSYour Name  * Return: QDF_STATUS
1651*5113495bSYour Name  */
1652*5113495bSYour Name QDF_STATUS lim_strip_and_decode_eht_op(uint8_t *ie, uint16_t ie_len,
1653*5113495bSYour Name 				       tDot11fIEeht_op *dot11f_eht_op,
1654*5113495bSYour Name 				       tDot11fIEVHTOperation dot11f_vht_op,
1655*5113495bSYour Name 				       tDot11fIEhe_op dot11f_he_op,
1656*5113495bSYour Name 				       tDot11fIEHTInfo dot11f_ht_info);
1657*5113495bSYour Name 
1658*5113495bSYour Name #else
1659*5113495bSYour Name static inline QDF_STATUS
populate_dot11f_eht_caps(struct mac_context * mac_ctx,struct pe_session * session,tDot11fIEeht_cap * eht_cap)1660*5113495bSYour Name populate_dot11f_eht_caps(struct mac_context *mac_ctx,
1661*5113495bSYour Name 			 struct pe_session *session, tDot11fIEeht_cap *eht_cap)
1662*5113495bSYour Name {
1663*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
1664*5113495bSYour Name }
1665*5113495bSYour Name 
1666*5113495bSYour Name static inline QDF_STATUS
populate_dot11f_eht_caps_by_band(struct mac_context * mac_ctx,bool is_2g,tDot11fIEeht_cap * eht_cap,struct pe_session * session)1667*5113495bSYour Name populate_dot11f_eht_caps_by_band(struct mac_context *mac_ctx,
1668*5113495bSYour Name 				 bool is_2g,
1669*5113495bSYour Name 				 tDot11fIEeht_cap *eht_cap,
1670*5113495bSYour Name 				 struct pe_session *session)
1671*5113495bSYour Name {
1672*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
1673*5113495bSYour Name }
1674*5113495bSYour Name 
1675*5113495bSYour Name static inline QDF_STATUS
populate_dot11f_eht_operation(struct mac_context * mac_ctx,struct pe_session * session,tDot11fIEeht_op * eht_op)1676*5113495bSYour Name populate_dot11f_eht_operation(struct mac_context *mac_ctx,
1677*5113495bSYour Name 			      struct pe_session *session,
1678*5113495bSYour Name 			      tDot11fIEeht_op *eht_op)
1679*5113495bSYour Name {
1680*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
1681*5113495bSYour Name }
1682*5113495bSYour Name 
1683*5113495bSYour Name static inline
populate_dot11f_bw_ind_element(struct mac_context * mac_ctx,struct pe_session * session,tDot11fIEbw_ind_element * bw_ind)1684*5113495bSYour Name QDF_STATUS populate_dot11f_bw_ind_element(struct mac_context *mac_ctx,
1685*5113495bSYour Name 					  struct pe_session *session,
1686*5113495bSYour Name 					  tDot11fIEbw_ind_element *bw_ind)
1687*5113495bSYour Name {
1688*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
1689*5113495bSYour Name }
1690*5113495bSYour Name 
lim_ieee80211_pack_ehtcap(uint8_t * ie,tDot11fIEeht_cap dot11f_eht_cap,tDot11fIEhe_cap dot11f_he_cap,bool is_band_2g)1691*5113495bSYour Name static inline void lim_ieee80211_pack_ehtcap(uint8_t *ie,
1692*5113495bSYour Name 					     tDot11fIEeht_cap dot11f_eht_cap,
1693*5113495bSYour Name 					     tDot11fIEhe_cap dot11f_he_cap,
1694*5113495bSYour Name 					     bool is_band_2g)
1695*5113495bSYour Name {
1696*5113495bSYour Name }
1697*5113495bSYour Name 
1698*5113495bSYour Name static inline
lim_strip_and_decode_eht_cap(uint8_t * ie,uint16_t ie_len,tDot11fIEeht_cap * dot11f_eht_cap,tDot11fIEhe_cap dot11f_he_cap,uint16_t freq)1699*5113495bSYour Name QDF_STATUS lim_strip_and_decode_eht_cap(uint8_t *ie, uint16_t ie_len,
1700*5113495bSYour Name 					tDot11fIEeht_cap *dot11f_eht_cap,
1701*5113495bSYour Name 					tDot11fIEhe_cap dot11f_he_cap,
1702*5113495bSYour Name 					uint16_t freq)
1703*5113495bSYour Name {
1704*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
1705*5113495bSYour Name }
1706*5113495bSYour Name 
lim_ieee80211_pack_ehtop(uint8_t * ie,tDot11fIEeht_op dot11f_eht_op,tDot11fIEVHTOperation dot11f_vht_op,tDot11fIEhe_op dot11f_he_op,tDot11fIEHTInfo dot11f_ht_info)1707*5113495bSYour Name static inline void lim_ieee80211_pack_ehtop(uint8_t *ie,
1708*5113495bSYour Name 					    tDot11fIEeht_op dot11f_eht_op,
1709*5113495bSYour Name 					    tDot11fIEVHTOperation dot11f_vht_op,
1710*5113495bSYour Name 					    tDot11fIEhe_op dot11f_he_op,
1711*5113495bSYour Name 					    tDot11fIEHTInfo dot11f_ht_info)
1712*5113495bSYour Name {
1713*5113495bSYour Name }
1714*5113495bSYour Name 
1715*5113495bSYour Name static inline
lim_strip_and_decode_eht_op(uint8_t * ie,uint16_t ie_len,tDot11fIEeht_op * dot11f_eht_op,tDot11fIEVHTOperation dot11f_vht_op,tDot11fIEhe_op dot11f_he_op,tDot11fIEHTInfo dot11f_ht_info)1716*5113495bSYour Name QDF_STATUS lim_strip_and_decode_eht_op(uint8_t *ie, uint16_t ie_len,
1717*5113495bSYour Name 				       tDot11fIEeht_op *dot11f_eht_op,
1718*5113495bSYour Name 				       tDot11fIEVHTOperation dot11f_vht_op,
1719*5113495bSYour Name 				       tDot11fIEhe_op dot11f_he_op,
1720*5113495bSYour Name 				       tDot11fIEHTInfo dot11f_ht_info)
1721*5113495bSYour Name {
1722*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
1723*5113495bSYour Name }
1724*5113495bSYour Name #endif
1725*5113495bSYour Name 
1726*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
1727*5113495bSYour Name /**
1728*5113495bSYour Name  * populate_dot11f_auth_mlo_ie() - populate MLO IE in Auth frame
1729*5113495bSYour Name  * @mac_ctx: Global MAC context
1730*5113495bSYour Name  * @pe_session: PE session
1731*5113495bSYour Name  * @mlo_ie: pointer to MLO IE struct
1732*5113495bSYour Name  *
1733*5113495bSYour Name  * Return: Success if MLO IE is populated in Auth frame, else Failure
1734*5113495bSYour Name  *
1735*5113495bSYour Name  * Populate the MLO IE in Auth frame based on the session.
1736*5113495bSYour Name  */
1737*5113495bSYour Name QDF_STATUS populate_dot11f_auth_mlo_ie(struct mac_context *mac_ctx,
1738*5113495bSYour Name 				       struct pe_session *pe_session,
1739*5113495bSYour Name 				       struct wlan_mlo_ie *mlo_ie);
1740*5113495bSYour Name 
1741*5113495bSYour Name /**
1742*5113495bSYour Name  * populate_dot11f_assoc_req_mlo_ie() - populate MLO Operation IE in assoc req
1743*5113495bSYour Name  * @mac_ctx: Global MAC context
1744*5113495bSYour Name  * @session: PE session
1745*5113495bSYour Name  * @frm: Pointer to Assoc Req IE
1746*5113495bSYour Name  *
1747*5113495bSYour Name  * Populate the mlo IE in assoc req based on the session.
1748*5113495bSYour Name  */
1749*5113495bSYour Name QDF_STATUS
1750*5113495bSYour Name populate_dot11f_assoc_req_mlo_ie(struct mac_context *mac_ctx,
1751*5113495bSYour Name 				 struct pe_session *session,
1752*5113495bSYour Name 				 tDot11fAssocRequest *frm);
1753*5113495bSYour Name 
1754*5113495bSYour Name /**
1755*5113495bSYour Name  * populate_dot11f_mlo_ie() - populate MLO Operation IE
1756*5113495bSYour Name  * @mac_ctx: Global MAC context
1757*5113495bSYour Name  * @vdev: Pointer to vdev
1758*5113495bSYour Name  * @mlo_ie: Pointer to MLO Operation IE
1759*5113495bSYour Name  *
1760*5113495bSYour Name  * Populate mlo IE for vdev by self capability.
1761*5113495bSYour Name  */
1762*5113495bSYour Name QDF_STATUS populate_dot11f_mlo_ie(struct mac_context *mac_ctx,
1763*5113495bSYour Name 				  struct wlan_objmgr_vdev *vdev,
1764*5113495bSYour Name 				  struct wlan_mlo_ie *mlo_ie);
1765*5113495bSYour Name #endif
1766*5113495bSYour Name 
1767*5113495bSYour Name /**
1768*5113495bSYour Name  * populate_dot11f_btm_extended_caps() - populate btm extended capabilities
1769*5113495bSYour Name  * @mac_ctx: Global MAC context.
1770*5113495bSYour Name  * @pe_session: Pointer to the PE session.
1771*5113495bSYour Name  * @dot11f: Pointer to the extended capabilities of the session.
1772*5113495bSYour Name  *
1773*5113495bSYour Name  * Disable btm for SAE types for Helium firmware limit
1774*5113495bSYour Name  *
1775*5113495bSYour Name  * Return: QDF_STATUS Success or Failure
1776*5113495bSYour Name  */
1777*5113495bSYour Name QDF_STATUS populate_dot11f_btm_extended_caps(struct mac_context *mac_ctx,
1778*5113495bSYour Name 					     struct pe_session *pe_session,
1779*5113495bSYour Name 					     struct sDot11fIEExtCap *dot11f);
1780*5113495bSYour Name 
1781*5113495bSYour Name /**
1782*5113495bSYour Name  * lim_truncate_ppet: truncates ppet of trailing zeros
1783*5113495bSYour Name  * @ppet: ppet to truncate
1784*5113495bSYour Name  * max_len: max length of ppet
1785*5113495bSYour Name  *
1786*5113495bSYour Name  * Return: new length after truncation
1787*5113495bSYour Name  */
lim_truncate_ppet(uint8_t * ppet,uint32_t max_len)1788*5113495bSYour Name static inline uint32_t lim_truncate_ppet(uint8_t *ppet, uint32_t max_len)
1789*5113495bSYour Name {
1790*5113495bSYour Name 	while (max_len) {
1791*5113495bSYour Name 		if (ppet[max_len - 1])
1792*5113495bSYour Name 			break;
1793*5113495bSYour Name 		max_len--;
1794*5113495bSYour Name 	}
1795*5113495bSYour Name 	return max_len;
1796*5113495bSYour Name }
1797*5113495bSYour Name 
1798*5113495bSYour Name QDF_STATUS wlan_parse_bss_description_ies(struct mac_context *mac_ctx,
1799*5113495bSYour Name 					  struct bss_description *bss_desc,
1800*5113495bSYour Name 					  tDot11fBeaconIEs *ie_struct);
1801*5113495bSYour Name 
1802*5113495bSYour Name QDF_STATUS
1803*5113495bSYour Name wlan_get_parsed_bss_description_ies(struct mac_context *mac_ctx,
1804*5113495bSYour Name 				    struct bss_description *bss_desc,
1805*5113495bSYour Name 				    tDot11fBeaconIEs **ie_struct);
1806*5113495bSYour Name 
1807*5113495bSYour Name void wlan_populate_basic_rates(tSirMacRateSet *rate_set, bool is_ofdm_rates,
1808*5113495bSYour Name 			       bool is_basic_rates);
1809*5113495bSYour Name 
1810*5113495bSYour Name uint32_t wlan_get_11h_power_constraint(struct mac_context *mac_ctx,
1811*5113495bSYour Name 				       tDot11fIEPowerConstraints *constraints);
1812*5113495bSYour Name 
1813*5113495bSYour Name QDF_STATUS
1814*5113495bSYour Name wlan_fill_bss_desc_from_scan_entry(struct mac_context *mac_ctx,
1815*5113495bSYour Name 				   struct bss_description *bss_desc,
1816*5113495bSYour Name 				   struct scan_cache_entry *scan_entry);
1817*5113495bSYour Name 
1818*5113495bSYour Name /**
1819*5113495bSYour Name  * wlan_get_ielen_from_bss_description() - to get IE length
1820*5113495bSYour Name  * from struct bss_description structure
1821*5113495bSYour Name  * @pBssDescr: pBssDescr
1822*5113495bSYour Name  *
1823*5113495bSYour Name  * This function is called in various places to get IE length
1824*5113495bSYour Name  * from struct bss_description structure
1825*5113495bSYour Name  *
1826*5113495bSYour Name  * @Return: total IE length
1827*5113495bSYour Name  */
1828*5113495bSYour Name uint16_t
1829*5113495bSYour Name wlan_get_ielen_from_bss_description(struct bss_description *bss_desc);
1830*5113495bSYour Name 
1831*5113495bSYour Name bool wlan_rates_is_dot11_rate_supported(struct mac_context *mac_ctx,
1832*5113495bSYour Name 					uint8_t rate);
1833*5113495bSYour Name 
1834*5113495bSYour Name bool wlan_check_rate_bitmap(uint8_t rate, uint16_t rate_bitmap);
1835*5113495bSYour Name 
1836*5113495bSYour Name QDF_STATUS wlan_get_rate_set(struct mac_context *mac,
1837*5113495bSYour Name 			     tDot11fBeaconIEs *ie_struct,
1838*5113495bSYour Name 			     struct pe_session *pe_session);
1839*5113495bSYour Name 
1840*5113495bSYour Name void wlan_add_rate_bitmap(uint8_t rate, uint16_t *rate_bitmap);
1841*5113495bSYour Name 
1842*5113495bSYour Name /**
1843*5113495bSYour Name  * dot11f_parse_assoc_response() - API to parse Assoc IE buffer to struct
1844*5113495bSYour Name  * @mac_ctx: MAC context
1845*5113495bSYour Name  * @p_buf: Pointer to the assoc IE buffer
1846*5113495bSYour Name  * @n_buf: length of the @p_buf
1847*5113495bSYour Name  * @p_frm: Struct to populate the IE buffer after parsing
1848*5113495bSYour Name  * @append_ie: Boolean to indicate whether to reset @p_frm or not. If @append_ie
1849*5113495bSYour Name  *             is true, @p_frm struct is not reset to zeros.
1850*5113495bSYour Name  *
1851*5113495bSYour Name  * Return: QDF_STATUS
1852*5113495bSYour Name  */
1853*5113495bSYour Name QDF_STATUS dot11f_parse_assoc_response(struct mac_context *mac_ctx,
1854*5113495bSYour Name 				       uint8_t *p_buf, uint32_t n_buf,
1855*5113495bSYour Name 				       tDot11fAssocResponse *p_frm,
1856*5113495bSYour Name 				       bool append_ie);
1857*5113495bSYour Name 
1858*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
1859*5113495bSYour Name /**
1860*5113495bSYour Name  * dot11f_parse_assoc_rsp_mlo_partner_info() - get mlo partner info in assoc rsp
1861*5113495bSYour Name  * @pe_session: pointer to PE session
1862*5113495bSYour Name  * @pframe: pointer of assoc response buffer
1863*5113495bSYour Name  * @nframe: length of assoc response buffer
1864*5113495bSYour Name  *
1865*5113495bSYour Name  * Return: none
1866*5113495bSYour Name  */
1867*5113495bSYour Name void dot11f_parse_assoc_rsp_mlo_partner_info(struct pe_session *pe_session,
1868*5113495bSYour Name 					     uint8_t *pframe, uint32_t nframe);
1869*5113495bSYour Name #else
1870*5113495bSYour Name static inline void
dot11f_parse_assoc_rsp_mlo_partner_info(struct pe_session * pe_session,uint8_t * pframe,uint32_t nframe)1871*5113495bSYour Name dot11f_parse_assoc_rsp_mlo_partner_info(struct pe_session *pe_session,
1872*5113495bSYour Name 					uint8_t *pframe, uint32_t nframe)
1873*5113495bSYour Name {
1874*5113495bSYour Name }
1875*5113495bSYour Name #endif
1876*5113495bSYour Name 
1877*5113495bSYour Name /**
1878*5113495bSYour Name  * populate_dot11f_6g_rnr() - populate rnr with 6g bss information
1879*5113495bSYour Name  * @mac_ctx: MAC context
1880*5113495bSYour Name  * @session: reporting session
1881*5113495bSYour Name  * @dot11f: pointer to tDot11fIEreduced_neighbor_report to fill
1882*5113495bSYour Name  *
1883*5113495bSYour Name  * Return: none
1884*5113495bSYour Name  */
1885*5113495bSYour Name void populate_dot11f_6g_rnr(struct mac_context *mac_ctx,
1886*5113495bSYour Name 			    struct pe_session *session,
1887*5113495bSYour Name 			    tDot11fIEreduced_neighbor_report *dot11f);
1888*5113495bSYour Name 
1889*5113495bSYour Name /**
1890*5113495bSYour Name  * populate_dot11f_rnr_tbtt_info() - populate rnr for the tbtt_len specified
1891*5113495bSYour Name  * @mac_ctx: pointer to mac_context
1892*5113495bSYour Name  * @pe_session: pe session
1893*5113495bSYour Name  * @rnr_session: session to populate in rnr ie
1894*5113495bSYour Name  * @dot11f: tDot11fIEreduced_neighbor_report to be filled
1895*5113495bSYour Name  * @tbtt_len: length of the TBTT params
1896*5113495bSYour Name  *
1897*5113495bSYour Name  * Return: QDF STATUS
1898*5113495bSYour Name  */
1899*5113495bSYour Name QDF_STATUS
1900*5113495bSYour Name populate_dot11f_rnr_tbtt_info(struct mac_context *mac_ctx,
1901*5113495bSYour Name 			      struct pe_session *pe_session,
1902*5113495bSYour Name 			      struct pe_session *rnr_session,
1903*5113495bSYour Name 			      tDot11fIEreduced_neighbor_report *dot11f,
1904*5113495bSYour Name 			      uint8_t tbtt_len);
1905*5113495bSYour Name 
1906*5113495bSYour Name /**
1907*5113495bSYour Name  * populate_dot11f_edca_pifs_param_set() - populate edca/pifs param ie
1908*5113495bSYour Name  * @mac: Mac context
1909*5113495bSYour Name  * @qcn_ie: pointer to tDot11fIEqcn_ie
1910*5113495bSYour Name  *
1911*5113495bSYour Name  * Return: none
1912*5113495bSYour Name  */
1913*5113495bSYour Name void populate_dot11f_edca_pifs_param_set(
1914*5113495bSYour Name 				struct mac_context *mac,
1915*5113495bSYour Name 				tDot11fIEqcn_ie *qcn_ie);
1916*5113495bSYour Name 
1917*5113495bSYour Name /**
1918*5113495bSYour Name  * populate_dot11f_bcn_prot_caps() - populate Beacon protection extended caps
1919*5113495bSYour Name  *
1920*5113495bSYour Name  * @mac_ctx: Global MAC context.
1921*5113495bSYour Name  * @pe_session: Pointer to the PE session.
1922*5113495bSYour Name  * @dot11f: Pointer to the extended capabilities of the session.
1923*5113495bSYour Name  *
1924*5113495bSYour Name  * Populate the Beacon protection extended capabilities based on the target and
1925*5113495bSYour Name  * INI support.
1926*5113495bSYour Name  *
1927*5113495bSYour Name  * Return: QDF_STATUS Success or Failure
1928*5113495bSYour Name  */
1929*5113495bSYour Name QDF_STATUS populate_dot11f_bcn_prot_extcaps(struct mac_context *mac_ctx,
1930*5113495bSYour Name 					    struct pe_session *pe_session,
1931*5113495bSYour Name 					    tDot11fIEExtCap *dot11f);
1932*5113495bSYour Name #endif /* __PARSE_H__ */
1933