blob: afbfd5e339e6f0613fe4e3f7613de17f32650d9a [file] [log] [blame]
Prakash Dhavali7090c5f2015-11-02 17:55:19 -08001/*
2 * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved.
3 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*
23 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
26 */
27
28/*
29 * This file parser_api.h contains the definitions used
30 * for parsing received 802.11 frames
31 * Author: Chandra Modumudi
32 * Date: 02/11/02
33 * History:-
34 * Date Modified by Modification Information
35 * --------------------------------------------------------------------
36 *
37 */
38#ifndef __PARSE_H__
39#define __PARSE_H__
40
41#include <stdarg.h>
42#include "sir_mac_prop_exts.h"
43#include "dot11f.h"
44#ifdef WLAN_FEATURE_VOWIFI_11R
45#include "lim_ft_defs.h"
46#endif
47#include "lim_session.h"
48
49#define COUNTRY_STRING_LENGTH (3)
50#define COUNTRY_INFO_MAX_CHANNEL (84)
51#define MAX_SIZE_OF_TRIPLETS_IN_COUNTRY_IE (COUNTRY_STRING_LENGTH * \
52 COUNTRY_INFO_MAX_CHANNEL)
53#define HIGHEST_24GHZ_CHANNEL_NUM (14)
54
55#define IS_24G_CH(__chNum) ((__chNum > 0) && (__chNum < 15))
56#define IS_5G_CH(__chNum) ((__chNum >= 36) && (__chNum <= 165))
57#define IS_2X2_CHAIN(__chain) ((__chain & 0x3) == 0x3)
58#define DISABLE_NSS2_MCS 0xC
59
60#ifdef FEATURE_AP_MCC_CH_AVOIDANCE
61#define QCOM_VENDOR_IE_MCC_AVOID_CH 0x01
62
63struct sAvoidChannelIE {
64 /* following must be 0xDD (221) */
65 uint8_t tag_number;
66 uint8_t length;
67 /* following must be 00-A0-C6 */
68 uint8_t oui[3];
69 /* following must be 0x01 */
70 uint8_t type;
71 uint8_t channel;
72};
73#endif /* FEATURE_AP_MCC_CH_AVOIDANCE */
74
75typedef struct sSirCountryInformation {
76 uint8_t countryString[COUNTRY_STRING_LENGTH];
77 uint8_t numIntervals; /* number of channel intervals */
78 struct channelPowerLim {
79 uint8_t channelNumber;
80 uint8_t numChannel;
81 uint8_t maxTransmitPower;
82 } channelTransmitPower[COUNTRY_INFO_MAX_CHANNEL];
83} tSirCountryInformation, *tpSirCountryInformation;
84
85/* Structure common to Beacons & Probe Responses */
86typedef struct sSirProbeRespBeacon {
87 tSirMacTimeStamp timeStamp;
88 uint16_t beaconInterval;
89 tSirMacCapabilityInfo capabilityInfo;
90
91 tSirMacSSid ssId;
92 tSirMacRateSet supportedRates;
93 tSirMacRateSet extendedRates;
94 tSirMacChanNum channelNumber;
95 tSirMacCfParamSet cfParamSet;
96 tSirMacTim tim;
97 tSirMacEdcaParamSetIE edcaParams;
98 tSirMacQosCapabilityIE qosCapability;
99
100 tSirCountryInformation countryInfoParam;
101 tSirMacWpaInfo wpa;
102 tSirMacRsnInfo rsn;
103
104 tSirMacErpInfo erpIEInfo;
105
106 tSirPropIEStruct propIEinfo;
107 tDot11fIEPowerConstraints localPowerConstraint;
108 tDot11fIETPCReport tpcReport;
109 tDot11fIEChanSwitchAnn channelSwitchIE;
110 tDot11fIEsec_chan_offset_ele sec_chan_offset;
111 tDot11fIEext_chan_switch_ann ext_chan_switch;
112 tSirMacAddr bssid;
113 tDot11fIEQuiet quietIE;
114 tDot11fIEHTCaps HTCaps;
115 tDot11fIEHTInfo HTInfo;
116 tDot11fIEP2PProbeRes P2PProbeRes;
117#ifdef WLAN_FEATURE_VOWIFI_11R
118 uint8_t mdie[SIR_MDIE_SIZE];
119#endif
120#ifdef FEATURE_WLAN_ESE
121 tDot11fIEESETxmitPower eseTxPwr;
122 tDot11fIEQBSSLoad QBSSLoad;
123#endif
124 uint8_t ssidPresent;
125 uint8_t suppRatesPresent;
126 uint8_t extendedRatesPresent;
127 uint8_t cfPresent;
128 uint8_t dsParamsPresent;
129 uint8_t timPresent;
130
131 uint8_t edcaPresent;
132 uint8_t qosCapabilityPresent;
133 uint8_t wmeEdcaPresent;
134 uint8_t wmeInfoPresent;
135 uint8_t wsmCapablePresent;
136
137 uint8_t countryInfoPresent;
138 uint8_t wpaPresent;
139 uint8_t rsnPresent;
140 uint8_t erpPresent;
141 uint8_t channelSwitchPresent;
142 uint8_t sec_chan_offset_present;
143 uint8_t ext_chan_switch_present;
144 uint8_t quietIEPresent;
145 uint8_t tpcReportPresent;
146 uint8_t powerConstraintPresent;
147
148#ifdef WLAN_FEATURE_VOWIFI_11R
149 uint8_t mdiePresent;
150#endif
151
152#ifdef WLAN_FEATURE_11AC
153 tDot11fIEVHTCaps VHTCaps;
154 tDot11fIEVHTOperation VHTOperation;
155 tDot11fIEVHTExtBssLoad VHTExtBssLoad;
156 tDot11fIEOperatingMode OperatingMode;
157 uint8_t WiderBWChanSwitchAnnPresent;
158 tDot11fIEWiderBWChanSwitchAnn WiderBWChanSwitchAnn;
159#endif
160 uint8_t Vendor1IEPresent;
161 tDot11fIEvendor2_ie vendor2_ie;
162 uint8_t Vendor3IEPresent;
163 tDot11fIEIBSSParams IBSSParams;
164#ifdef FEATURE_AP_MCC_CH_AVOIDANCE
165 tDot11fIEQComVendorIE AvoidChannelIE;
166#endif /* FEATURE_AP_MCC_CH_AVOIDANCE */
167#ifdef FEATURE_WLAN_ESE
168 uint8_t is_ese_ver_ie_present;
169#endif
170} tSirProbeRespBeacon, *tpSirProbeRespBeacon;
171
172/* probe Request structure */
173typedef struct sSirProbeReq {
174 tSirMacSSid ssId;
175 tSirMacRateSet supportedRates;
176 tSirMacRateSet extendedRates;
177 tDot11fIEWscProbeReq probeReqWscIeInfo;
178 tDot11fIEHTCaps HTCaps;
179 uint8_t ssidPresent;
180 uint8_t suppRatesPresent;
181 uint8_t extendedRatesPresent;
182 uint8_t wscIePresent;
183 uint8_t p2pIePresent;
184#ifdef WLAN_FEATURE_11AC
185 tDot11fIEVHTCaps VHTCaps;
186#endif
187
188} tSirProbeReq, *tpSirProbeReq;
189
190/* / Association Request structure (one day to be replaced by */
191/* / tDot11fAssocRequest) */
192typedef struct sSirAssocReq {
193
194 tSirMacCapabilityInfo capabilityInfo;
195 uint16_t listenInterval;
196 tSirMacAddr currentApAddr; /* only in reassoc frames */
197 tSirMacSSid ssId;
198 tSirMacRateSet supportedRates;
199 tSirMacRateSet extendedRates;
200
201 tSirAddtsReqInfo addtsReq;
202 tSirMacQosCapabilityStaIE qosCapability;
203
204 tSirMacWapiInfo wapi;
205 tSirMacWpaInfo wpa;
206 tSirMacRsnInfo rsn;
207 tSirAddie addIE;
208
209 tSirPropIEStruct propIEinfo;
210 tSirMacPowerCapabilityIE powerCapability;
211 tSirMacSupportedChannelIE supportedChannels;
212 tDot11fIEHTCaps HTCaps;
213 tDot11fIEWMMInfoStation WMMInfoStation;
214 /* / This is set if the frame is a reassoc request: */
215 uint8_t reassocRequest;
216 uint8_t ssidPresent;
217 uint8_t suppRatesPresent;
218 uint8_t extendedRatesPresent;
219
220 uint8_t wmeInfoPresent;
221 uint8_t qosCapabilityPresent;
222 uint8_t addtsPresent;
223 uint8_t wsmCapablePresent;
224
225 uint8_t wapiPresent;
226 uint8_t wpaPresent;
227 uint8_t rsnPresent;
228 uint8_t addIEPresent;
229
230 uint8_t powerCapabilityPresent;
231 uint8_t supportedChannelsPresent;
232 /* keeping copy of association request received, this is
233 required for indicating the frame to upper layers */
234 uint32_t assocReqFrameLength;
235 uint8_t *assocReqFrame;
236#ifdef WLAN_FEATURE_11AC
237 tDot11fIEVHTCaps VHTCaps;
238 tDot11fIEOperatingMode operMode;
239#endif
240 tDot11fIEExtCap ExtCap;
241} tSirAssocReq, *tpSirAssocReq;
242
243/* / Association Response structure (one day to be replaced by */
244/* / tDot11fAssocRequest) */
245typedef struct sSirAssocRsp {
246
247 tSirMacCapabilityInfo capabilityInfo;
248 uint16_t aid;
249 uint16_t statusCode;
250 tSirMacRateSet supportedRates;
251 tSirMacRateSet extendedRates;
252 tSirPropIEStruct propIEinfo;
253 tSirMacEdcaParamSetIE edca;
254 tSirAddtsRspInfo addtsRsp;
255 tDot11fIEHTCaps HTCaps;
256 tDot11fIEHTInfo HTInfo;
257#if defined WLAN_FEATURE_VOWIFI_11R
258 tDot11fIEFTInfo FTInfo;
259 uint8_t mdie[SIR_MDIE_SIZE];
260 uint8_t num_RICData;
261 tDot11fIERICDataDesc RICData[2];
262#endif
263
264#ifdef FEATURE_WLAN_ESE
265 uint8_t num_tspecs;
266 tDot11fIEWMMTSPEC TSPECInfo[SIR_ESE_MAX_TSPEC_IES];
267 tSirMacESETSMIE tsmIE;
268#endif
269
270 uint8_t suppRatesPresent;
271 uint8_t extendedRatesPresent;
272
273 uint8_t edcaPresent;
274 uint8_t wmeEdcaPresent;
275 uint8_t addtsPresent;
276 uint8_t wsmCapablePresent;
277#if defined WLAN_FEATURE_VOWIFI_11R
278 uint8_t ftinfoPresent;
279 uint8_t mdiePresent;
280 uint8_t ricPresent;
281#endif
282#ifdef FEATURE_WLAN_ESE
283 uint8_t tspecPresent;
284 uint8_t tsmPresent;
285#endif
286#ifdef WLAN_FEATURE_11AC
287 tDot11fIEVHTCaps VHTCaps;
288 tDot11fIEVHTOperation VHTOperation;
289#endif
290 tDot11fIEExtCap ExtCap;
291 tSirQosMapSet QosMapSet;
292#ifdef WLAN_FEATURE_11W
293 tDot11fIETimeoutInterval TimeoutInterval;
294#endif
295 tDot11fIEvendor2_ie vendor2_ie;
296} tSirAssocRsp, *tpSirAssocRsp;
297
298#if defined(FEATURE_WLAN_ESE_UPLOAD)
299/* Structure to hold ESE Beacon report mandatory IEs */
300typedef struct sSirEseBcnReportMandatoryIe {
301 tSirMacSSid ssId;
302 tSirMacRateSet supportedRates;
303 tSirMacFHParamSet fhParamSet;
304 tSirMacDsParamSetIE dsParamSet;
305 tSirMacCfParamSet cfParamSet;
306 tSirMacIBSSParams ibssParamSet;
307 tSirMacTim tim;
308 tSirMacRRMEnabledCap rmEnabledCapabilities;
309
310 uint8_t ssidPresent;
311 uint8_t suppRatesPresent;
312 uint8_t fhParamPresent;
313 uint8_t dsParamsPresent;
314 uint8_t cfPresent;
315 uint8_t ibssParamPresent;
316 uint8_t timPresent;
317 uint8_t rrmPresent;
318} tSirEseBcnReportMandatoryIe, *tpSirEseBcnReportMandatoryIe;
319#endif /* FEATURE_WLAN_ESE_UPLOAD */
320
321/**
322 * struct s_ext_cap - holds bitfields of extended capability IE
323 *
324 * s_ext_cap holds bitfields of extended capability IE. In dot11f files
325 * extended capability IE information is stored as an array of bytes.
326 * This structure is used to encode/decode the byte array present in
327 * dot11f IE structure.
328 */
329
330struct s_ext_cap {
331 uint8_t bss_coexist_mgmt_support:1;
332 uint8_t reserved1:1;
333 uint8_t ext_chan_switch:1;
334 uint8_t reserved2:1;
335 uint8_t psmp_cap:1;
336 uint8_t reserved3:1;
337 uint8_t spsmp_cap:1;
338 uint8_t event:1;
339 uint8_t diagnostics:1;
340 uint8_t multi_diagnostics:1;
341 uint8_t loc_tracking:1;
342 uint8_t fms:1;
343 uint8_t proxy_arp_service:1;
344 uint8_t co_loc_intf_reporting:1;
345 uint8_t civic_loc:1;
346 uint8_t geospatial_loc:1;
347 uint8_t tfs:1;
348 uint8_t wnm_sleep_mode:1;
349 uint8_t tim_broadcast:1;
350 uint8_t bss_transition:1;
351 uint8_t qos_traffic_cap:1;
352 uint8_t ac_sta_cnt:1;
353 uint8_t multi_bssid:1;
354 uint8_t timing_meas:1;
355 uint8_t chan_usage:1;
356 uint8_t ssid_list:1;
357 uint8_t dms:1;
358 uint8_t utctsf_offset:1;
359 uint8_t tdls_peer_uapsd_buffer_sta:1;
360 uint8_t tdls_peer_psm_supp:1;
361 uint8_t tdls_channel_switching:1;
362 uint8_t interworking_service:1;
363 uint8_t qos_map:1;
364 uint8_t ebr:1;
365 uint8_t sspn_interface:1;
366 uint8_t reserved4:1;
367 uint8_t msg_cf_cap:1;
368 uint8_t tdls_support:1;
369 uint8_t tdls_prohibited:1;
370 uint8_t tdls_chan_swit_prohibited:1;
371 uint8_t reject_unadmitted_traffic:1;
372 uint8_t service_interval_granularity:3;
373 uint8_t identifier_loc:1;
374 uint8_t uapsd_coexistence:1;
375 uint8_t wnm_notification:1;
376 uint8_t qa_bcapbility:1;
377 uint8_t utf8_ssid:1;
378 uint8_t qmf_activated:1;
379 uint8_t qm_frecon_act:1;
380 uint8_t robust_av_streaming:1;
381 uint8_t advanced_gcr:1;
382 uint8_t mesh_gcr:1;
383 uint8_t scs:1;
384 uint8_t q_load_report:1;
385 uint8_t alternate_edca:1;
386 uint8_t unprot_txo_pneg:1;
387 uint8_t prot_txo_pneg:1;
388 uint8_t reserved6:1;
389 uint8_t prot_q_load_report:1;
390 uint8_t tdls_wider_bw:1;
391 uint8_t oper_mode_notification:1;
392 uint8_t max_num_of_msdu_bit1:1;
393 uint8_t max_num_of_msdu_bit2:1;
394 uint8_t chan_sch_mgmt:1;
395 uint8_t geo_db_inband_en_signal:1;
396 uint8_t nw_chan_control:1;
397 uint8_t white_space_map:1;
398 uint8_t chan_avail_query:1;
399 uint8_t fine_time_meas_responder:1;
400 uint8_t fine_time_meas_initiator:1;
401};
402
403uint8_t sirIsPropCapabilityEnabled(struct sAniSirGlobal *pMac, uint32_t bitnum);
404
405void dot11f_log(tpAniSirGlobal pMac, int nSev, const char *lpszFormat, ...);
406
407#define CFG_GET_INT(nStatus, pMac, nItem, cfg) do { \
408 (nStatus) = wlan_cfg_get_int((pMac), (nItem), &(cfg)); \
409 if (eSIR_SUCCESS != (nStatus)) { \
410 dot11f_log((pMac), LOGP, FL("Failed to retrieve nItem from CFG (%d)."), (nStatus)); \
411 return nStatus; \
412 } \
413} while (0)
414
415#define CFG_GET_INT_NO_STATUS(nStatus, pMac, nItem, cfg) do { \
416 (nStatus) = wlan_cfg_get_int((pMac), (nItem), &(cfg)); \
417 if (eSIR_SUCCESS != (nStatus)) { \
418 dot11f_log((pMac), LOGP, FL("Failed to retrieve nItem from CFG (%d)."), (nStatus)); \
419 return; \
420 } \
421} while (0)
422
423#define CFG_GET_STR(nStatus, pMac, nItem, cfg, nCfg, nMaxCfg) do { \
424 (nCfg) = (nMaxCfg); \
425 (nStatus) = wlan_cfg_get_str((pMac), (nItem), (cfg), &(nCfg)); \
426 if (eSIR_SUCCESS != (nStatus)) { \
427 dot11f_log((pMac), LOGP, FL("Failed to retrieve nItem from CFG (%d)."), (nStatus)); \
428 return nStatus; \
429 } \
430} while (0)
431
432#define CFG_GET_STR_NO_STATUS(nStatus, pMac, nItem, cfg, nCfg, nMaxCfg) do { \
433 (nCfg) = (nMaxCfg); \
434 (nStatus) = wlan_cfg_get_str((pMac), (nItem), (cfg), &(nCfg)); \
435 if (eSIR_SUCCESS != (nStatus)) { \
436 dot11f_log((pMac), LOGP, FL("Failed to retrieve nItem from CFG (%d)."), (nStatus)); \
437 return; \
438 } \
439} while (0)
440
441void swap_bit_field16(uint16_t in, uint16_t *out);
442
443/* Currently implemented as "shims" between callers & the new framesc- */
444/* generated code: */
445
446tSirRetStatus
447sir_convert_probe_req_frame2_struct(struct sAniSirGlobal *pMac,
448 uint8_t *frame, uint32_t len,
449 tpSirProbeReq probe);
450
451tSirRetStatus
452sir_convert_probe_frame2_struct(struct sAniSirGlobal *pMac, uint8_t *frame,
453 uint32_t len, tpSirProbeRespBeacon probe);
454
455tSirRetStatus
456sir_convert_assoc_req_frame2_struct(struct sAniSirGlobal *pMac,
457 uint8_t *frame, uint32_t len,
458 tpSirAssocReq assoc);
459
460tSirRetStatus
461sir_convert_assoc_resp_frame2_struct(struct sAniSirGlobal *pMac,
462 uint8_t *frame, uint32_t len,
463 tpSirAssocRsp assoc);
464
465tSirRetStatus
466sir_convert_reassoc_req_frame2_struct(struct sAniSirGlobal *pMac,
467 uint8_t *frame, uint32_t len,
468 tpSirAssocReq assoc);
469
470tSirRetStatus
471sir_parse_beacon_ie(struct sAniSirGlobal *pMac,
472 tpSirProbeRespBeacon pBeaconStruct,
473 uint8_t *pPayload, uint32_t payloadLength);
474
475#if defined(FEATURE_WLAN_ESE_UPLOAD)
476tSirRetStatus
477sir_beacon_ie_ese_bcn_report(tpAniSirGlobal pMac,
478 uint8_t *pPayload, const uint32_t payloadLength,
479 uint8_t **outIeBuf, uint32_t *pOutIeLen);
480#endif /* FEATURE_WLAN_ESE_UPLOAD */
481
482tSirRetStatus
483sir_convert_beacon_frame2_struct(struct sAniSirGlobal *pMac,
484 uint8_t *pBeaconFrame,
485 tpSirProbeRespBeacon pBeaconStruct);
486
487tSirRetStatus
488sir_convert_auth_frame2_struct(struct sAniSirGlobal *pMac,
489 uint8_t *frame, uint32_t len,
490 tpSirMacAuthFrameBody auth);
491
492tSirRetStatus
493sir_convert_addts_req2_struct(struct sAniSirGlobal *pMac,
494 uint8_t *frame, uint32_t len,
495 tSirAddtsReqInfo *addTs);
496
497tSirRetStatus
498sir_convert_addts_rsp2_struct(struct sAniSirGlobal *pMac,
499 uint8_t *frame, uint32_t len,
500 tSirAddtsRspInfo *addts);
501
502tSirRetStatus
503sir_convert_delts_req2_struct(struct sAniSirGlobal *pMac,
504 uint8_t *frame, uint32_t len,
505 tSirDeltsReqInfo *delTs);
506tSirRetStatus
507sir_convert_qos_map_configure_frame2_struct(tpAniSirGlobal pMac,
508 uint8_t *pFrame, uint32_t nFrame,
509 tSirQosMapSet *pQosMapSet);
510
511#ifdef ANI_SUPPORT_11H
512tSirRetStatus
513sir_convert_tpc_req_frame2_struct(struct sAniSirGlobal *, uint8_t *,
514 tpSirMacTpcReqActionFrame, uint32_t);
515
516tSirRetStatus
517sir_convert_meas_req_frame2_struct(struct sAniSirGlobal *, uint8_t *,
518 tpSirMacMeasReqActionFrame, uint32_t);
519#endif
520
521/**
522 * \brief Populated a tDot11fFfCapabilities
523 *
524 * \sa PopulatedDot11fCapabilities2
525 *
526 *
527 * \param pMac Pointer to the global MAC data structure
528 *
529 * \param pDot11f Address of a tDot11fFfCapabilities to be filled in
530 *
531 *
532 * \note If SIR_MAC_PROP_CAPABILITY_11EQOS is enabled, we'll clear the QOS
533 * bit in pDot11f
534 *
535 *
536 */
537
538tSirRetStatus
539populate_dot11f_capabilities(tpAniSirGlobal pMac,
540 tDot11fFfCapabilities *pDot11f,
541 tpPESession psessionEntry);
542
543/**
544 * \brief Populated a tDot11fFfCapabilities
545 *
546 * \sa PopulatedDot11fCapabilities2
547 *
548 *
549 * \param pMac Pointer to the global MAC data structure
550 *
551 * \param pDot11f Address of a tDot11fFfCapabilities to be filled in
552 *
553 * \param pSta Pointer to a tDphHashNode representing a peer
554 *
555 *
556 * \note If SIR_MAC_PROP_CAPABILITY_11EQOS is enabled on our peer, we'll
557 * clear the QOS bit in pDot11f
558 *
559 *
560 */
561
562struct sDphHashNode;
563
564tSirRetStatus
565populate_dot11f_capabilities2(tpAniSirGlobal pMac,
566 tDot11fFfCapabilities *pDot11f,
567 struct sDphHashNode *pSta,
568 tpPESession psessionEntry);
569
570/* / Populate a tDot11fIEChanSwitchAnn */
571void
572populate_dot11f_chan_switch_ann(tpAniSirGlobal pMac,
573 tDot11fIEChanSwitchAnn *pDot11f,
574 tpPESession psessionEntry);
575
576void
577populate_dot_11_f_ext_chann_switch_ann(tpAniSirGlobal mac_ptr,
578 tDot11fIEext_chan_switch_ann *dot_11_ptr,
579 tpPESession session_entry);
580
581/* / Populate a tDot11fIEChannelSwitchWrapper */
582void
583populate_dot11f_chan_switch_wrapper(tpAniSirGlobal pMac,
584 tDot11fIEChannelSwitchWrapper *pDot11f,
585 tpPESession psessionEntry);
586
587/* / Populate a tDot11fIECountry */
588tSirRetStatus
589populate_dot11f_country(tpAniSirGlobal pMac,
590 tDot11fIECountry *pDot11f, tpPESession psessionEntry);
591
592/* Populated a populate_dot11f_ds_params */
593tSirRetStatus
594populate_dot11f_ds_params(tpAniSirGlobal pMac,
595 tDot11fIEDSParams *pDot11f, uint8_t channel);
596
597/* / Populated a tDot11fIEEDCAParamSet */
598void
599populate_dot11f_edca_param_set(tpAniSirGlobal pMac,
600 tDot11fIEEDCAParamSet *pDot11f,
601 tpPESession psessionEntry);
602
603tSirRetStatus
604populate_dot11f_erp_info(tpAniSirGlobal pMac,
605 tDot11fIEERPInfo *pDot11f, tpPESession psessionEntry);
606
607tSirRetStatus
608populate_dot11f_ext_supp_rates(tpAniSirGlobal pMac,
609 uint8_t nChannelNum, tDot11fIEExtSuppRates *pDot11f,
610 tpPESession psessionEntry);
611
612#if defined WLAN_FEATURE_VOWIFI
613tSirRetStatus
614populate_dot11f_beacon_report(tpAniSirGlobal pMac,
615 tDot11fIEMeasurementReport *pDot11f,
616 tSirMacBeaconReport *pBeaconReport);
617#endif
618
619/**
620 * \brief Populate a tDot11fIEExtSuppRates
621 *
622 *
623 * \param pMac Pointer to the global MAC data structure
624 *
625 * \param nChannelNum Channel on which the enclosing frame will be going out
626 *
627 * \param pDot11f Address of a tDot11fIEExtSuppRates struct to be filled in.
628 *
629 *
630 * This method is a NOP if the channel is greater than 14.
631 *
632 *
633 */
634
635tSirRetStatus
636populate_dot11f_ext_supp_rates1(tpAniSirGlobal pMac,
637 uint8_t nChannelNum,
638 tDot11fIEExtSuppRates *pDot11f);
639
640tSirRetStatus
641populate_dot11f_ht_caps(tpAniSirGlobal pMac,
642 tpPESession psessionEntry, tDot11fIEHTCaps *pDot11f);
643
644tSirRetStatus
645populate_dot11f_ht_info(tpAniSirGlobal pMac,
646 tDot11fIEHTInfo *pDot11f, tpPESession psessionEntry);
647
648void populate_dot11f_ibss_params(tpAniSirGlobal pMac,
649 tDot11fIEIBSSParams *pDot11f,
650 tpPESession psessionEntry);
651
652#ifdef ANI_SUPPORT_11H
653tSirRetStatus
654populate_dot11f_measurement_report0(tpAniSirGlobal pMac,
655 tpSirMacMeasReqActionFrame pReq,
656 tDot11fIEMeasurementReport *pDot11f);
657
658/* / Populate a tDot11fIEMeasurementReport when the report type is CCA */
659tSirRetStatus
660populate_dot11f_measurement_report1(tpAniSirGlobal pMac,
661 tpSirMacMeasReqActionFrame pReq,
662 tDot11fIEMeasurementReport *pDot11f);
663
664/* / Populate a tDot11fIEMeasurementReport when the report type is RPI Hist */
665tSirRetStatus
666populate_dot11f_measurement_report2(tpAniSirGlobal pMac,
667 tpSirMacMeasReqActionFrame pReq,
668 tDot11fIEMeasurementReport *pDot11f);
669#endif /* ANI_SUPPORT_11H */
670
671/* / Populate a tDot11fIEPowerCaps */
672void
673populate_dot11f_power_caps(tpAniSirGlobal pMac,
674 tDot11fIEPowerCaps *pCaps,
675 uint8_t nAssocType, tpPESession psessionEntry);
676
677/* / Populate a tDot11fIEPowerConstraints */
678tSirRetStatus
679populate_dot11f_power_constraints(tpAniSirGlobal pMac,
680 tDot11fIEPowerConstraints *pDot11f);
681
682void
683populate_dot11f_qos_caps_ap(tpAniSirGlobal pMac,
684 tDot11fIEQOSCapsAp *pDot11f,
685 tpPESession psessionEntry);
686
687void
688populate_dot11f_qos_caps_station(tpAniSirGlobal pMac,
689 tDot11fIEQOSCapsStation *pDot11f);
690
691tSirRetStatus
692populate_dot11f_rsn(tpAniSirGlobal pMac,
693 tpSirRSNie pRsnIe, tDot11fIERSN *pDot11f);
694
695tSirRetStatus
696populate_dot11f_rsn_opaque(tpAniSirGlobal pMac,
697 tpSirRSNie pRsnIe, tDot11fIERSNOpaque *pDot11f);
698
699#if defined(FEATURE_WLAN_WAPI)
700
701tSirRetStatus
702populate_dot11f_wapi(tpAniSirGlobal pMac,
703 tpSirRSNie pRsnIe, tDot11fIEWAPI *pDot11f);
704
705tSirRetStatus populate_dot11f_wapi_opaque(tpAniSirGlobal pMac,
706 tpSirRSNie pRsnIe,
707 tDot11fIEWAPIOpaque *pDot11f);
708
709#endif /* defined(FEATURE_WLAN_WAPI) */
710
711/* / Populate a tDot11fIESSID given a tSirMacSSid */
712void
713populate_dot11f_ssid(tpAniSirGlobal pMac,
714 tSirMacSSid *pInternal, tDot11fIESSID *pDot11f);
715
716/* / Populate a tDot11fIESSID from CFG */
717tSirRetStatus populate_dot11f_ssid2(tpAniSirGlobal pMac,
718 tDot11fIESSID *pDot11f);
719
720/**
721 * \brief Populate a tDot11fIESchedule
722 *
723 * \sa populate_dot11f_wmm_schedule
724 *
725 *
726 * \param pSchedule Address of a tSirMacScheduleIE struct
727 *
728 * \param pDot11f Address of a tDot11fIESchedule to be filled in
729 *
730 *
731 */
732
733void
734populate_dot11f_schedule(tSirMacScheduleIE *pSchedule,
735 tDot11fIESchedule *pDot11f);
736
737void
738populate_dot11f_supp_channels(tpAniSirGlobal pMac,
739 tDot11fIESuppChannels *pDot11f,
740 uint8_t nAssocType, tpPESession psessionEntry);
741
742/**
743 * \brief Populated a tDot11fIESuppRates
744 *
745 *
746 * \param pMac Pointer to the global MAC data structure
747 *
748 * \param nChannelNum Channel the enclosing frame will be going out on; see
749 * below
750 *
751 * \param pDot11f Address of a tDot11fIESuppRates struct to be filled in.
752 *
753 *
754 * If nChannelNum is greater than 13, the supported rates will be
755 * WNI_CFG_SUPPORTED_RATES_11B. If it is less than or equal to 13, the
756 * supported rates will be WNI_CFG_SUPPORTED_RATES_11A. If nChannelNum is
757 * set to the sentinel value POPULATE_DOT11F_RATES_OPERATIONAL, the struct
758 * will be populated with WNI_CFG_OPERATIONAL_RATE_SET.
759 *
760 *
761 */
762
763#define POPULATE_DOT11F_RATES_OPERATIONAL (0xff)
764
765tSirRetStatus
766populate_dot11f_supp_rates(tpAniSirGlobal pMac,
767 uint8_t nChannelNum,
768 tDot11fIESuppRates *pDot11f, tpPESession);
769
770tSirRetStatus
771populate_dot11f_rates_tdls(tpAniSirGlobal p_mac,
772 tDot11fIESuppRates *p_supp_rates,
773 tDot11fIEExtSuppRates *p_ext_supp_rates);
774
775tSirRetStatus populate_dot11f_tpc_report(tpAniSirGlobal pMac,
776 tDot11fIETPCReport *pDot11f,
777 tpPESession psessionEntry);
778
779/* / Populate a tDot11FfTSInfo */
780void populate_dot11f_ts_info(tSirMacTSInfo *pInfo, tDot11fFfTSInfo *pDot11f);
781
782void populate_dot11f_wmm(tpAniSirGlobal pMac,
783 tDot11fIEWMMInfoAp *pInfo,
784 tDot11fIEWMMParams *pParams,
785 tDot11fIEWMMCaps *pCaps, tpPESession psessionEntry);
786
787void populate_dot11f_wmm_caps(tDot11fIEWMMCaps *pCaps);
788
789#if defined(FEATURE_WLAN_ESE)
790/* Fill the ESE version IE */
791void populate_dot11f_ese_version(tDot11fIEESEVersion *pESEVersion);
792/* Fill the Radio Management Capability */
793void populate_dot11f_ese_rad_mgmt_cap(tDot11fIEESERadMgmtCap *pESERadMgmtCap);
794/* Fill the CCKM IE */
795tSirRetStatus populate_dot11f_ese_cckm_opaque(tpAniSirGlobal pMac,
796 tpSirCCKMie pCCKMie,
797 tDot11fIEESECckmOpaque *pDot11f);
798
799void populate_dot11_tsrsie(tpAniSirGlobal pMac,
800 tSirMacESETSRSIE *pOld,
801 tDot11fIEESETrafStrmRateSet *pDot11f,
802 uint8_t rate_length);
803void populate_dot11f_re_assoc_tspec(tpAniSirGlobal pMac,
804 tDot11fReAssocRequest *pReassoc,
805 tpPESession psessionEntry);
806#endif
807
808void populate_dot11f_wmm_info_ap(tpAniSirGlobal pMac,
809 tDot11fIEWMMInfoAp *pInfo,
810 tpPESession psessionEntry);
811
812void populate_dot11f_wmm_info_station_per_session(tpAniSirGlobal pMac,
813 tpPESession psessionEntry,
814 tDot11fIEWMMInfoStation *pInfo);
815
816void populate_dot11f_wmm_params(tpAniSirGlobal pMac,
817 tDot11fIEWMMParams *pParams,
818 tpPESession psessionEntry);
819
820/**
821 * \brief Populate a tDot11fIEWMMSchedule
822 *
823 * \sa PopulatedDot11fSchedule
824 *
825 *
826 * \param pSchedule Address of a tSirMacScheduleIE struct
827 *
828 * \param pDot11f Address of a tDot11fIEWMMSchedule to be filled in
829 *
830 *
831 */
832
833void
834populate_dot11f_wmm_schedule(tSirMacScheduleIE *pSchedule,
835 tDot11fIEWMMSchedule *pDot11f);
836
837tSirRetStatus
838populate_dot11f_wpa(tpAniSirGlobal pMac,
839 tpSirRSNie pRsnIe, tDot11fIEWPA *pDot11f);
840
841tSirRetStatus
842populate_dot11f_wpa_opaque(tpAniSirGlobal pMac,
843 tpSirRSNie pRsnIe, tDot11fIEWPAOpaque *pDot11f);
844
845void populate_dot11f_tspec(tSirMacTspecIE *pOld, tDot11fIETSPEC *pDot11f);
846
847void populate_dot11f_wmmtspec(tSirMacTspecIE *pOld, tDot11fIEWMMTSPEC *pDot11f);
848
849tSirRetStatus
850populate_dot11f_tclas(tpAniSirGlobal pMac,
851 tSirTclasInfo *pOld, tDot11fIETCLAS *pDot11f);
852
853tSirRetStatus
854populate_dot11f_wmmtclas(tpAniSirGlobal pMac,
855 tSirTclasInfo *pOld, tDot11fIEWMMTCLAS *pDot11f);
856
857tSirRetStatus populate_dot11f_wsc(tpAniSirGlobal pMac,
858 tDot11fIEWscBeacon *pDot11f);
859
860tSirRetStatus populate_dot11f_wsc_registrar_info(tpAniSirGlobal pMac,
861 tDot11fIEWscBeacon *pDot11f);
862
863tSirRetStatus de_populate_dot11f_wsc_registrar_info(tpAniSirGlobal pMac,
864 tDot11fIEWscBeacon *pDot11f);
865
866tSirRetStatus populate_dot11f_probe_res_wpsi_es(tpAniSirGlobal pMac,
867 tDot11fIEWscProbeRes *pDot11f,
868 tpPESession psessionEntry);
869tSirRetStatus populate_dot11f_assoc_res_wpsi_es(tpAniSirGlobal pMac,
870 tDot11fIEWscAssocRes *pDot11f,
871 tpPESession psessionEntry);
872tSirRetStatus populate_dot11f_beacon_wpsi_es(tpAniSirGlobal pMac,
873 tDot11fIEWscBeacon *pDot11f,
874 tpPESession psessionEntry);
875
876tSirRetStatus populate_dot11f_wsc_in_probe_res(tpAniSirGlobal pMac,
877 tDot11fIEWscProbeRes *pDot11f);
878
879tSirRetStatus
880populate_dot11f_wsc_registrar_info_in_probe_res(tpAniSirGlobal pMac,
881 tDot11fIEWscProbeRes *pDot11f);
882
883tSirRetStatus
884de_populate_dot11f_wsc_registrar_info_in_probe_res(tpAniSirGlobal pMac,
885 tDot11fIEWscProbeRes *pDot11f);
886
887tSirRetStatus populate_dot11f_assoc_res_wsc_ie(tpAniSirGlobal pMac,
888 tDot11fIEWscAssocRes *pDot11f,
889 tpSirAssocReq pRcvdAssocReq);
890
891tSirRetStatus populate_dot11_assoc_res_p2p_ie(tpAniSirGlobal pMac,
892 tDot11fIEP2PAssocRes *pDot11f,
893 tpSirAssocReq pRcvdAssocReq);
894
895tSirRetStatus populate_dot11f_wscInAssocRes(tpAniSirGlobal pMac,
896 tDot11fIEWscAssocRes *pDot11f);
897
898#if defined WLAN_FEATURE_VOWIFI
899tSirRetStatus populate_dot11f_wfatpc(tpAniSirGlobal pMac,
900 tDot11fIEWFATPC *pDot11f, uint8_t txPower,
901 uint8_t linkMargin);
902
903tSirRetStatus populate_dot11f_rrm_ie(tpAniSirGlobal pMac,
904 tDot11fIERRMEnabledCap *pDot11f,
905 tpPESession psessionEntry);
906#endif
907
908#if defined WLAN_FEATURE_VOWIFI_11R
909void populate_mdie(tpAniSirGlobal pMac,
910 tDot11fIEMobilityDomain * pDot11f, uint8_t mdie[]);
911void populate_ft_info(tpAniSirGlobal pMac, tDot11fIEFTInfo *pDot11f);
912#endif
913
914void populate_dot11f_assoc_rsp_rates(tpAniSirGlobal pMac,
915 tDot11fIESuppRates *pSupp,
916 tDot11fIEExtSuppRates *pExt,
917 uint16_t *_11bRates, uint16_t *_11aRates);
918
919int find_ie_location(tpAniSirGlobal pMac, tpSirRSNie pRsnIe, uint8_t EID);
920
921#ifdef WLAN_FEATURE_11AC
922tSirRetStatus
923populate_dot11f_vht_caps(tpAniSirGlobal pMac, tpPESession psessionEntry,
924 tDot11fIEVHTCaps *pDot11f);
925
926tSirRetStatus
927populate_dot11f_vht_operation(tpAniSirGlobal pMac,
928 tpPESession psessionEntry,
929 tDot11fIEVHTOperation *pDot11f);
930
931tSirRetStatus
932populate_dot11f_vht_ext_bss_load(tpAniSirGlobal pMac,
933 tDot11fIEVHTExtBssLoad *pDot11f);
934
935tSirRetStatus
936populate_dot11f_ext_cap(tpAniSirGlobal pMac, bool isVHTEnabled,
937 tDot11fIEExtCap *pDot11f, tpPESession psessionEntry);
938
939tSirRetStatus
940populate_dot11f_operating_mode(tpAniSirGlobal pMac,
941 tDot11fIEOperatingMode *pDot11f,
942 tpPESession psessionEntry);
943
944void
945populate_dot11f_wider_bw_chan_switch_ann(tpAniSirGlobal pMac,
946 tDot11fIEWiderBWChanSwitchAnn *pDot11f,
947 tpPESession psessionEntry);
948#endif
949
950void populate_dot11f_timeout_interval(tpAniSirGlobal pMac,
951 tDot11fIETimeoutInterval *pDot11f,
952 uint8_t type, uint32_t value);
953
954#ifdef FEATURE_AP_MCC_CH_AVOIDANCE
955/* Populate a tDot11fIEQComVendorIE */
956void
957populate_dot11f_avoid_channel_ie(tpAniSirGlobal mac_ctx,
958 tDot11fIEQComVendorIE *dot11f,
959 tpPESession session_entry);
960#endif /* FEATURE_AP_MCC_CH_AVOIDANCE */
961
962tSirRetStatus populate_dot11f_timing_advert_frame(tpAniSirGlobal pMac,
963 tDot11fTimingAdvertisementFrame *frame);
964
965#endif /* __PARSE_H__ */