1 /*
2 * Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
3 * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
4 *
5 * Permission to use, copy, modify, and/or distribute this software for
6 * any purpose with or without fee is hereby granted, provided that the
7 * above copyright notice and this permission notice appear in all
8 * copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17 * PERFORMANCE OF THIS SOFTWARE.
18 */
19
20 /*
21 * This file lim_utils.h contains the utility definitions
22 * LIM uses.
23 * Author: Chandra Modumudi
24 * Date: 02/13/02
25 * History:-
26 * Date Modified by Modification Information
27 * --------------------------------------------------------------------
28 */
29 #ifndef __LIM_UTILS_H
30 #define __LIM_UTILS_H
31
32 #include "sir_api.h"
33 #include "sir_debug.h"
34
35 #include "lim_types.h"
36 #include "lim_scan_result_utils.h"
37 #include "lim_timer_utils.h"
38 #include "lim_trace.h"
39 #include "include/wlan_vdev_mlme.h"
40 #include "wlan_mlme_vdev_mgr_interface.h"
41 #include "wlan_qct_sys.h"
42 #include <wlan_cp_stats_chipset_stats.h>
43
44 #define LIM_QOS_AP_SUPPORTS_UAPSD 0x80
45
46 #define LIM_IS_QOS_BSS(ie_struct) \
47 (ie_struct->WMMParams.present || ie_struct->WMMInfoAp.present)
48
49 #define LIM_IS_UAPSD_BSS(ie_struct) \
50 ((ie_struct->WMMParams.present && \
51 (ie_struct->WMMParams.qosInfo & LIM_QOS_AP_SUPPORTS_UAPSD)) || \
52 (ie_struct->WMMInfoAp.present && ie_struct->WMMInfoAp.uapsd))
53
54 #define LIM_AID_MASK 0xC000
55 #define LIM_SPECTRUM_MANAGEMENT_BIT_MASK 0x0100
56 #define LIM_RRM_BIT_MASK 0x1000
57 #define LIM_SHORT_PREAMBLE_BIT_MASK 0x0020
58 #define LIM_IMMEDIATE_BLOCK_ACK_MASK 0x8000
59 #define LIM_MAX_REASSOC_RETRY_LIMIT 2
60
61 #define VHT_MCS_3x3_MASK 0x30
62 #define VHT_MCS_2x2_MASK 0x0C
63
64 #define CENTER_FREQ_DIFF_160MHz 8
65 #define CENTER_FREQ_DIFF_80P80MHz 16
66
67 #define CH_TO_CNTR_FREQ_DIFF_160MHz 14
68 #define CH_TO_CNTR_FREQ_DIFF_80MHz 6
69
70 #define IS_VHT_NSS_1x1(__mcs_map) ((__mcs_map & 0xFFFC) == 0xFFFC)
71
72 #define MGMT_RX_PACKETS_THRESHOLD 200
73
74 /* 11B AP detection bit position */
75 #define OBSS_DETECTION_11B_AP_BIT_MASK 0x0001
76 /* 11B STA detection bit position */
77 #define OBSS_DETECTION_11B_STA_BIT_MASK 0x0002
78 /* 11G AP detection bit position */
79 #define OBSS_DETECTION_11G_AP_BIT_MASK 0x0004
80 /* 11A AP detection bit position */
81 #define OBSS_DETECTION_11A_BIT_MASK 0x0008
82 /* HT legacy detection bit position */
83 #define OBSS_DETECTION_HT_LEGACY_BIT_MASK 0x0010
84 /* HT mixed detection bit position */
85 #define OBSS_DETECTION_HT_MIXED_BIT_MASK 0x0020
86 /* HT 20mhz detection bit position */
87 #define OBSS_DETECTION_HT_20MHZ_BIT_MASK 0x0040
88
89 /**
90 * OBSS detection period in ms, used by firmware to decide
91 * absent detection and also gap between same detection ind.
92 */
93 #define OBSS_DETECTION_PERIOD_MS 4000
94
95 /* To check if 11B AP detection bit set */
96 #define OBSS_DETECTION_IS_11B_AP(_m) ((_m) & OBSS_DETECTION_11B_AP_BIT_MASK)
97 /* To check if 11B STA detection bit set */
98 #define OBSS_DETECTION_IS_11B_STA(_m) ((_m) & OBSS_DETECTION_11B_STA_BIT_MASK)
99 /* To check if 11G AP detection bit set */
100 #define OBSS_DETECTION_IS_11G_AP(_m) ((_m) & OBSS_DETECTION_11G_AP_BIT_MASK)
101 /* To check if 11A AP detection bit set */
102 #define OBSS_DETECTION_IS_11A(_m) ((_m) & OBSS_DETECTION_11A_BIT_MASK)
103 /* To check if HT legacy detection bit set */
104 #define OBSS_DETECTION_IS_HT_LEGACY(_m) \
105 ((_m) & OBSS_DETECTION_HT_LEGACY_BIT_MASK)
106 /* To check if HT mixed detection bit set */
107 #define OBSS_DETECTION_IS_HT_MIXED(_m) ((_m) & OBSS_DETECTION_HT_MIXED_BIT_MASK)
108 /* To check if HT 20mhz detection bit set */
109 #define OBSS_DETECTION_IS_HT_20MHZ(_m) ((_m) & OBSS_DETECTION_HT_20MHZ_BIT_MASK)
110
111 #define MAX_WAIT_FOR_BCN_TX_COMPLETE_FOR_LL_SAP 500
112 #define MAX_WAIT_FOR_BCN_TX_COMPLETE 4000
113
114 #define MAX_WAKELOCK_FOR_CSA 5000
115 #define MAX_WAIT_FOR_CH_WIDTH_UPDATE_COMPLETE 200
116
117 #ifdef WLAN_FEATURE_11BE
118 #define MAX_NUM_PWR_LEVELS 16
119 #else
120 #define MAX_NUM_PWR_LEVELS 8
121 #endif
122
123 /* SR is disabled if NON_SRG is disallowed and SRG INFO is not present */
124 #define SR_DISABLE NON_SRG_PD_SR_DISALLOWED & (~SRG_INFO_PRESENT & 0x0F)
125
126 typedef union uPmfSaQueryTimerId {
127 struct {
128 uint8_t sessionId;
129 uint16_t peerIdx;
130 } fields;
131 uint32_t value;
132 } tPmfSaQueryTimerId, *tpPmfSaQueryTimerId;
133
134 typedef struct last_processed_frame {
135 tSirMacAddr sa;
136 uint16_t seq_num;
137 } last_processed_msg;
138
139 /* LIM utility functions */
140 bool lim_is_valid_frame(last_processed_msg *last_processed_frm,
141 uint8_t *pRxPacketInfo);
142 void lim_update_last_processed_frame(last_processed_msg *last_processed_frm,
143 uint8_t *pRxPacketInfo);
144
145 char *lim_mlm_state_str(tLimMlmStates state);
146 char *lim_sme_state_str(tLimSmeStates state);
147 char *lim_msg_str(uint32_t msgType);
148 char *lim_result_code_str(tSirResultCodes resultCode);
149 char *lim_dot11_mode_str(struct mac_context *mac, uint8_t dot11Mode);
150 void lim_print_mlm_state(struct mac_context *mac, uint16_t logLevel,
151 tLimMlmStates state);
152 void lim_print_sme_state(struct mac_context *mac, uint16_t logLevel,
153 tLimSmeStates state);
154 void lim_print_msg_name(struct mac_context *mac, uint16_t logLevel, uint32_t msgType);
155
156 QDF_STATUS lim_send_set_max_tx_power_req(struct mac_context *mac,
157 int8_t txPower,
158 struct pe_session *pe_session);
159
160 /**
161 * lim_get_num_pwr_levels() - Utility to get number of tx power levels
162 * @is_psd: PSD power check
163 * @ch_width: BSS channel bandwidth
164 *
165 * This function is used to get the number of tx power levels based on
166 * channel bandwidth and psd power.
167 *
168 * Return: number of tx power levels
169 */
170 uint32_t lim_get_num_pwr_levels(bool is_psd,
171 enum phy_ch_width ch_width);
172
173 /**
174 * lim_get_max_tx_power() - Utility to get maximum tx power
175 * @mac: mac handle
176 * @mlme_obj: pointer to struct containing list of tx powers
177 *
178 * This function is used to get the maximum possible tx power from the list
179 * of tx powers mentioned in @attr.
180 *
181 * Return: Max tx power
182 */
183 uint8_t lim_get_max_tx_power(struct mac_context *mac,
184 struct vdev_mlme_obj *mlme_obj);
185 /**
186 * lim_calculate_tpc() - Utility to get maximum tx power
187 * @mac: mac handle
188 * @session: PE Session Entry
189 *
190 * This function is used to get the maximum possible tx power from the list
191 * of tx powers mentioned in @attr.
192 *
193 * Return: None
194 */
195 void lim_calculate_tpc(struct mac_context *mac,
196 struct pe_session *session);
197
198 /* AID pool management functions */
199
200 /**
201 * lim_init_peer_idxpool() -- initializes peer index pool
202 * @mac: mac context
203 * @pe_session: session entry
204 *
205 * This function is called while starting a BSS at AP
206 * to initialize AID pool.
207 *
208 * Return: None
209 */
210 void lim_init_peer_idxpool(struct mac_context *, struct pe_session *);
211 uint16_t lim_assign_peer_idx(struct mac_context *, struct pe_session *);
212
213 /**
214 * lim_create_peer_idxpool() - api to create aid pool
215 * @pe_session: pe session
216 * @idx_pool_size: aid pool size
217 *
218 * Return: true if pool is created successfully
219 */
220 bool lim_create_peer_idxpool(struct pe_session *pe_session,
221 uint8_t idx_pool_size);
222
223 /**
224 * lim_free_peer_idxpool() - api to free aid pool
225 * @pe_session: pe session
226 *
227 * Return: Void
228 */
229 void lim_free_peer_idxpool(struct pe_session *pe_session);
230
231 #ifdef WLAN_FEATURE_11BE_MLO
232 /**
233 * lim_assign_mlo_conn_idx() - api to assign mlo peer station index with given
234 * partner peer station index
235 * @mac: mac context
236 * @pe_session: session entry
237 * @partner_peer_idx: partner peer station index
238 *
239 * Return: peer station index
240 */
241 uint16_t lim_assign_mlo_conn_idx(struct mac_context *mac,
242 struct pe_session *pe_session,
243 uint16_t partner_peer_idx);
244
245 /**
246 * lim_release_mlo_conn_idx() - api to release mlo peer AID
247 * @mac: mac context
248 * @peer_idx: given aid
249 * @pe_session: session entry
250 * @free_aid: trigger mlo mgr to free AID or not. It only can be
251 * true before mlo peer is created. Once mlo peer is
252 * created, AID is freed in mlo peer context.
253 *
254 * Return: Void
255 */
256 void
257 lim_release_mlo_conn_idx(struct mac_context *mac, uint16_t peer_idx,
258 struct pe_session *pe_session, bool free_aid);
259
260 /**
261 * lim_update_sta_mlo_info() - update sta mlo information
262 * @pe_session: session entry
263 * @add_sta_params: pointer to tpAddStaParams
264 * @sta_ds: pointer tpDphHashNode
265 *
266 * Return: Void
267 */
268 void lim_update_sta_mlo_info(struct pe_session *pe_session,
269 tpAddStaParams add_sta_params,
270 tpDphHashNode sta_ds);
271
272 void lim_set_mlo_caps(struct mac_context *mac, struct pe_session *session,
273 uint8_t *ie_start, uint32_t num_bytes);
274
275 QDF_STATUS lim_send_mlo_caps_ie(struct mac_context *mac_ctx,
276 struct wlan_objmgr_vdev *vdev,
277 enum QDF_OPMODE device_mode,
278 uint8_t vdev_id);
279
280 /**
281 * lim_strip_mlo_ie() - Removes the MLO IE data from additional IE data
282 *
283 * @mac_ctx: global MAC context
284 * @add_ie: Additional IE buffer
285 * @add_ielen: Pointer to length of additional IE
286 *
287 * Return: Void
288 */
289 void lim_strip_mlo_ie(struct mac_context *mac_ctx,
290 uint8_t *add_ie, uint16_t *add_ielen);
291
292 /**
293 * lim_set_emlsr_caps() - This API will set EMLSR caps in vdev obj if ELMSR is
294 * supported.
295 * @mac: mac context
296 * @pe_session: session entry
297 *
298 * Return: Void
299 */
300 void lim_set_emlsr_caps(struct mac_context *mac_ctx,
301 struct pe_session *session);
302 #else
lim_assign_mlo_conn_idx(struct mac_context * mac,struct pe_session * pe_session,uint16_t partner_peer_idx)303 static inline uint16_t lim_assign_mlo_conn_idx(struct mac_context *mac,
304 struct pe_session *pe_session,
305 uint16_t partner_peer_idx)
306 {
307 return 0;
308 }
309
310 static inline void
lim_release_mlo_conn_idx(struct mac_context * mac,uint16_t peer_idx,struct pe_session * pe_session,bool free_aid)311 lim_release_mlo_conn_idx(struct mac_context *mac, uint16_t peer_idx,
312 struct pe_session *pe_session, bool free_aid)
313 {
314 }
315
lim_update_sta_mlo_info(struct pe_session * session,tpAddStaParams add_sta_params,tpDphHashNode sta_ds)316 static inline void lim_update_sta_mlo_info(struct pe_session *session,
317 tpAddStaParams add_sta_params,
318 tpDphHashNode sta_ds)
319 {
320 }
321
322 static inline
lim_set_mlo_caps(struct mac_context * mac,struct pe_session * session,uint8_t * ie_start,uint32_t num_bytes)323 void lim_set_mlo_caps(struct mac_context *mac, struct pe_session *session,
324 uint8_t *ie_start, uint32_t num_bytes)
325 {
326 }
327
328 static inline
lim_strip_mlo_ie(struct mac_context * mac_ctx,uint8_t * addn_ie,uint16_t * addn_ielen)329 void lim_strip_mlo_ie(struct mac_context *mac_ctx,
330 uint8_t *addn_ie, uint16_t *addn_ielen)
331 {
332 }
333
334 static inline
lim_send_mlo_caps_ie(struct mac_context * mac_ctx,struct wlan_objmgr_vdev * vdev,enum QDF_OPMODE device_mode,uint8_t vdev_id)335 QDF_STATUS lim_send_mlo_caps_ie(struct mac_context *mac_ctx,
336 struct wlan_objmgr_vdev *vdev,
337 enum QDF_OPMODE device_mode,
338 uint8_t vdev_id)
339 {
340 return QDF_STATUS_E_NOSUPPORT;
341 }
342
lim_set_emlsr_caps(struct mac_context * mac_ctx,struct pe_session * session)343 static inline void lim_set_emlsr_caps(struct mac_context *mac_ctx,
344 struct pe_session *session)
345 {
346 }
347 #endif
348
349 void lim_enable_overlap11g_protection(struct mac_context *mac,
350 tpUpdateBeaconParams pBeaconParams,
351 tpSirMacMgmtHdr pMh,
352 struct pe_session *pe_session);
353 void lim_update_overlap_sta_param(struct mac_context *mac, tSirMacAddr bssId,
354 tpLimProtStaParams pStaParams);
355 void lim_update_short_preamble(struct mac_context *mac, tSirMacAddr peerMacAddr,
356 tpUpdateBeaconParams pBeaconParams,
357 struct pe_session *pe_session);
358 void lim_update_short_slot_time(struct mac_context *mac, tSirMacAddr peerMacAddr,
359 tpUpdateBeaconParams pBeaconParams,
360 struct pe_session *pe_session);
361
362 /*
363 * lim_send_sme_mgmt_frame_ind() - Function to send mgmt frame ind to HDD
364 * @mac_ctx: Pointer to Global MAC structure
365 * @frame_type: Type of mgmt frame
366 * @frame: Frame pointer
367 * @frame_len: Length og mgmt frame
368 * @vdev_id: session id
369 * @rx_freq: Frequency on which packet is received
370 * @rx_rssi: rssi value
371 * @rx_flags: RXMGMT flags to be set for the frame. Defined in enum rxmgmt_flags
372 *
373 * Indicate the Mgmt Frame received to SME to HDD callback
374 * handle Probe_req/Action frame currently
375 *
376 * Return: None
377 */
378 void lim_send_sme_mgmt_frame_ind(struct mac_context *mac_ctx, uint8_t frame_type,
379 uint8_t *frame, uint32_t frame_len,
380 uint16_t vdev_id, uint32_t rx_freq,
381 int8_t rx_rssi, enum rxmgmt_flags rx_flags);
382
383 /*
384 * lim_deactivate_timers() - Function to deactivate lim timers
385 * @mac_ctx: Pointer to global mac structure
386 *
387 * This function is used to deactivate lim timers
388 *
389 * Return: None
390 */
391 void lim_deactivate_timers(struct mac_context *mac_ctx);
392
393 /*
394 * lim_deactivate_timers_for_vdev() - Deactivate lim connection timers
395 * @mac_ctx: Pointer to global mac structure
396 * @vdev_id: vdev id
397 *
398 * This function is used to trigger timeout of lim connection timers to abort
399 * connect request.
400 *
401 * Return: None
402 */
403 void lim_deactivate_timers_for_vdev(struct mac_context *mac_ctx,
404 uint8_t vdev_id);
405
406 /*
407 * The below 'product' check tobe removed if 'Association' is
408 * allowed in IBSS.
409 */
410 void lim_release_peer_idx(struct mac_context *, uint16_t, struct pe_session *);
411
412 void lim_decide_ap_protection(struct mac_context *mac, tSirMacAddr peerMacAddr,
413 tpUpdateBeaconParams pBeaconParams, struct pe_session *);
414 void lim_decide_ap_protection_on_delete(struct mac_context *mac,
415 tpDphHashNode sta,
416 tpUpdateBeaconParams pBeaconParams,
417 struct pe_session *pe_session);
418
419 QDF_STATUS lim_update_11a_protection(struct mac_context *mac,
420 uint8_t enable,
421 uint8_t overlap,
422 tpUpdateBeaconParams pBeaconParams,
423 struct pe_session *);
424 QDF_STATUS lim_enable11g_protection(struct mac_context *mac,
425 uint8_t enable,
426 uint8_t overlap,
427 tpUpdateBeaconParams pBeaconParams,
428 struct pe_session *pe_session);
429 QDF_STATUS lim_enable_ht_protection_from11g(struct mac_context *mac,
430 uint8_t enable,
431 uint8_t overlap,
432 tpUpdateBeaconParams
433 pBeaconParams,
434 struct pe_session *pe_session);
435 QDF_STATUS lim_enable_ht20_protection(struct mac_context *mac,
436 uint8_t enable, uint8_t overlap,
437 tpUpdateBeaconParams pBeaconParams,
438 struct pe_session *pe_session);
439 QDF_STATUS lim_enable_ht_non_gf_protection(struct mac_context *mac,
440 uint8_t enable, uint8_t overlap,
441 tpUpdateBeaconParams
442 pBeaconParams, struct pe_session *);
443 QDF_STATUS lim_enable_ht_rifs_protection(struct mac_context *mac,
444 uint8_t enable, uint8_t overlap,
445 tpUpdateBeaconParams
446 pBeaconParams,
447 struct pe_session *pe_session);
448 QDF_STATUS lim_enable_ht_lsig_txop_protection(struct mac_context *mac,
449 uint8_t enable,
450 uint8_t overlap,
451 tpUpdateBeaconParams
452 pBeaconParams, struct pe_session *);
453 QDF_STATUS lim_enable_short_preamble(struct mac_context *mac,
454 uint8_t enable,
455 tpUpdateBeaconParams pBeaconParams,
456 struct pe_session *pe_session);
457 QDF_STATUS lim_enable_ht_obss_protection(struct mac_context *mac,
458 uint8_t enable, uint8_t overlap,
459 tpUpdateBeaconParams
460 pBeaconParams, struct pe_session *);
461 void lim_decide_sta_protection(struct mac_context *mac,
462 tpSchBeaconStruct pBeaconStruct,
463 tpUpdateBeaconParams pBeaconParams,
464 struct pe_session *pe_session);
465 void lim_decide_sta_protection_on_assoc(struct mac_context *mac,
466 tpSchBeaconStruct pBeaconStruct,
467 struct pe_session *pe_session);
468
469 /**
470 * lim_get_cb_mode_for_freq() - Get cb mode depending on the freq
471 * @mac: pointer to Global MAC structure
472 * @pe_session: pe session
473 * @chan_freq: Freq to get cb mode for
474 *
475 * Return: cb mode allowed for the freq
476 */
477 uint8_t lim_get_cb_mode_for_freq(struct mac_context *mac,
478 struct pe_session *session,
479 qdf_freq_t chan_freq);
480
481 /**
482 * lim_update_sta_run_time_ht_switch_chnl_params() - Process change in HT
483 * bandwidth
484 * @mac: pointer to Global MAC structure
485 * @pHTInfo: ht info IE
486 * @pe_session: pe session
487 *
488 * Return: none
489 */
490 void lim_update_sta_run_time_ht_switch_chnl_params(struct mac_context *mac,
491 tDot11fIEHTInfo *pHTInfo,
492 struct pe_session *pe_session);
493
494 /* Deferred Message Queue read/write */
495 uint8_t lim_write_deferred_msg_q(struct mac_context *mac,
496 struct scheduler_msg *limMsg);
497 struct scheduler_msg *lim_read_deferred_msg_q(struct mac_context *mac);
498 void lim_handle_defer_msg_error(struct mac_context *mac,
499 struct scheduler_msg *pLimMsg);
500
501 /* Deferred Message Queue Reset */
502 void lim_reset_deferred_msg_q(struct mac_context *mac);
503
lim_sys_process_mmh_msg_api(struct mac_context * mac,struct scheduler_msg * msg)504 static inline void lim_sys_process_mmh_msg_api(struct mac_context *mac,
505 struct scheduler_msg *msg)
506 {
507 sys_process_mmh_msg(mac, msg);
508 }
509
510 void lim_handle_update_olbc_cache(struct mac_context *mac);
511
512 uint8_t lim_is_null_ssid(tSirMacSSid *pSsid);
513
514 /* 11h Support */
515 void lim_stop_tx_and_switch_channel(struct mac_context *mac, uint8_t sessionId);
516
517 /**
518 * lim_process_channel_switch() - Process channel switch
519 * @mac: pointer to Global MAC structure
520 * @vdev_id: Vdev on which CSA is happening
521 *
522 * Return: none
523 */
524 void lim_process_channel_switch(struct mac_context *mac, uint8_t vdev_id);
525
526 /**
527 * lim_switch_primary_channel() - switch primary channel of session
528 * @mac: Global MAC structure
529 * @new_channel_freq: new chnannel freq in Mhz
530 * @pe_session: pe session context
531 *
532 * This function changes the current operating channel frequency.
533 *
534 * return qdf_status
535 */
536 QDF_STATUS lim_switch_primary_channel(struct mac_context *mac,
537 uint32_t new_channel_freq,
538 struct pe_session *pe_session);
539
540 /**
541 * lim_switch_primary_secondary_channel() - switch primary and secondary
542 * channel of session
543 * @mac: Global MAC structure
544 * @pe_session: session context
545 *
546 * This function changes the primary and secondary channel.
547 * If 11h is enabled and user provides a "new channel freq"
548 * that is different from the current operating channel,
549 * then we must set this new channel in session context and
550 * assign notify LIM of such change.
551 *
552 * @return qdf_status
553 */
554 QDF_STATUS lim_switch_primary_secondary_channel(struct mac_context *mac,
555 struct pe_session *pe_session);
556
557 void lim_update_sta_run_time_ht_capability(struct mac_context *mac,
558 tDot11fIEHTCaps *pHTCaps);
559 void lim_update_sta_run_time_ht_info(struct mac_context *mac,
560 tDot11fIEHTInfo *pRcvdHTInfo,
561 struct pe_session *pe_session);
562
563 /**
564 * lim_is_channel_valid_for_channel_switch - check channel valid for switching
565 * @mac: Global mac context
566 * @channel_freq: channel freq (MHz)
567 *
568 * This function checks if the channel to which AP is expecting us to switch,
569 * is a valid channel for us.
570 *
571 * Return bool, true if channel is valid
572 */
573 bool lim_is_channel_valid_for_channel_switch(struct mac_context *mac,
574 uint32_t channel_freq);
575
576 QDF_STATUS lim_restore_pre_channel_switch_state(struct mac_context *mac,
577 struct pe_session *pe_session);
578
579 void lim_prepare_for11h_channel_switch(struct mac_context *mac,
580 struct pe_session *pe_session);
581 void lim_switch_channel_cback(struct mac_context *mac, QDF_STATUS status,
582 uint32_t *data, struct pe_session *pe_session);
583
584 /**
585 * lim_assoc_rej_get_remaining_delta() - Get remaining time delta for
586 * the rssi based disallowed list entry
587 * @node: rssi based disallowed list entry
588 *
589 * Return: remaining delta, can be -ve if time has already expired.
590 */
591 int
592 lim_assoc_rej_get_remaining_delta(struct sir_rssi_disallow_lst *node);
593
594 /**
595 * lim_rem_denylist_entry_with_lowest_delta() - Remove the entry with lowest
596 * time delta
597 * @list: rssi based rejected BSSID list
598 *
599 * Return: QDF_STATUS
600 */
601 QDF_STATUS
602 lim_rem_denylist_entry_with_lowest_delta(qdf_list_t *list);
603
lim_get_rf_band(uint32_t chan_freq)604 static inline enum reg_wifi_band lim_get_rf_band(uint32_t chan_freq)
605 {
606 if (WLAN_REG_IS_6GHZ_CHAN_FREQ(chan_freq))
607 return REG_BAND_6G;
608
609 if (WLAN_REG_IS_5GHZ_CH_FREQ(chan_freq))
610 return REG_BAND_5G;
611
612 if (WLAN_REG_IS_24GHZ_CH_FREQ(chan_freq))
613 return REG_BAND_2G;
614
615 return REG_BAND_UNKNOWN;
616 }
617
618 static inline QDF_STATUS
lim_get_mgmt_staid(struct mac_context * mac,uint16_t * staid,struct pe_session * pe_session)619 lim_get_mgmt_staid(struct mac_context *mac, uint16_t *staid,
620 struct pe_session *pe_session)
621 {
622 if (LIM_IS_AP_ROLE(pe_session))
623 *staid = 1;
624 else if (LIM_IS_STA_ROLE(pe_session))
625 *staid = 0;
626 else
627 return QDF_STATUS_E_FAILURE;
628
629 return QDF_STATUS_SUCCESS;
630 }
631
lim_select_cb_mode(tDphHashNode * sta,struct pe_session * pe_session,uint8_t channel,uint8_t chan_bw)632 static inline int lim_select_cb_mode(tDphHashNode *sta,
633 struct pe_session *pe_session, uint8_t channel,
634 uint8_t chan_bw)
635 {
636 if (sta->mlmStaContext.vhtCapability && chan_bw) {
637 if (channel == 36 || channel == 52 || channel == 100 ||
638 channel == 116 || channel == 149) {
639 return PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW - 1;
640 } else if (channel == 40 || channel == 56 || channel == 104 ||
641 channel == 120 || channel == 153) {
642 return PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_LOW - 1;
643 } else if (channel == 44 || channel == 60 || channel == 108 ||
644 channel == 124 || channel == 157) {
645 return PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH - 1;
646 } else if (channel == 48 || channel == 64 || channel == 112 ||
647 channel == 128 || channel == 161) {
648 return PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH - 1;
649 } else if (channel == 165) {
650 return PHY_SINGLE_CHANNEL_CENTERED;
651 }
652 } else if (sta->mlmStaContext.htCapability) {
653 if (channel == 40 || channel == 48 || channel == 56 ||
654 channel == 64 || channel == 104 || channel == 112 ||
655 channel == 120 || channel == 128 || channel == 136 ||
656 channel == 144 || channel == 153 || channel == 161) {
657 return PHY_DOUBLE_CHANNEL_LOW_PRIMARY;
658 } else if (channel == 36 || channel == 44 || channel == 52 ||
659 channel == 60 || channel == 100 ||
660 channel == 108 || channel == 116 ||
661 channel == 124 || channel == 132 ||
662 channel == 140 || channel == 149 ||
663 channel == 157) {
664 return PHY_DOUBLE_CHANNEL_HIGH_PRIMARY;
665 } else if (channel == 165) {
666 return PHY_SINGLE_CHANNEL_CENTERED;
667 }
668 }
669 return PHY_SINGLE_CHANNEL_CENTERED;
670 }
671
672 /* ANI peer station count management and associated actions */
673 void lim_util_count_sta_add(struct mac_context *mac, tpDphHashNode pSta,
674 struct pe_session *pe_session);
675 void lim_util_count_sta_del(struct mac_context *mac, tpDphHashNode pSta,
676 struct pe_session *pe_session);
677
678 uint8_t lim_get_ht_capability(struct mac_context *, uint32_t, struct pe_session *);
679 QDF_STATUS lim_tx_complete(void *context, qdf_nbuf_t buf, bool free);
680
681 QDF_STATUS lim_validate_delts_req(struct mac_context *mac,
682 tpSirDeltsReq pDeltsReq,
683 tSirMacAddr peerMacAddr,
684 struct pe_session *pe_session);
685
686 void lim_pkt_free(struct mac_context *mac,
687 eFrameType frmType, uint8_t *pBD, void *body);
688
689 void lim_get_b_dfrom_rx_packet(struct mac_context *mac, void *body, uint32_t **pBD);
690
691 /**
692 * utils_power_xy() - calc result of base raised to power
693 * @base: Base value
694 * @power: Base raised to this Power value
695 *
696 * Given a base(X) and power(Y), this API will return
697 * the result of base raised to power - (X ^ Y)
698 *
699 * Return: Result of X^Y
700 *
701 */
utils_power_xy(uint16_t base,uint16_t power)702 static inline uint32_t utils_power_xy(uint16_t base, uint16_t power)
703 {
704 uint32_t result = 1, i;
705
706 for (i = 0; i < power; i++)
707 result *= base;
708
709 return result;
710 }
711
712 QDF_STATUS lim_post_sm_state_update(struct mac_context *mac,
713 tSirMacHTMIMOPowerSaveState MIMOPSState,
714 uint8_t *pPeerStaMac, uint8_t sessionId);
715
716 void lim_delete_sta_context(struct mac_context *mac, struct scheduler_msg *limMsg);
717 void lim_delete_dialogue_token_list(struct mac_context *mac);
718
719 /**
720 * lim_get_channel_from_beacon() - extract channel number
721 * from beacon and convert to channel frequency
722 * @mac: Pointer to Global MAC structure
723 * @pBeacon: Pointer to beacon or probe rsp
724 *
725 * Return: channel frequency
726 */
727 uint32_t lim_get_channel_from_beacon(struct mac_context *mac,
728 tpSchBeaconStruct pBeacon);
729
730 /**
731 * lim_get_nw_type() - Get type of the network from
732 * data packet or beacon
733 * @mac: Pointer to Global MAC structure
734 * @chan_freq: Channel frequency
735 * @type: Type of packet
736 * @pBeacon: Pointer to beacon or probe response
737 *
738 * Return: Network type a/b/g
739 */
740 tSirNwType lim_get_nw_type(struct mac_context *mac, uint32_t chan_freq,
741 uint32_t type, tpSchBeaconStruct pBeacon);
742
743 void lim_set_tspec_uapsd_mask_per_session(struct mac_context *mac,
744 struct pe_session *pe_session,
745 struct mac_ts_info *pTsInfo, uint32_t action);
746
747 void lim_handle_heart_beat_timeout_for_session(struct mac_context *mac,
748 struct pe_session *pe_session);
749
750 /**
751 * lim_process_add_sta_rsp() - process WDA_ADD_STA_RSP from WMA
752 * @mac_ctx: Pointer to Global MAC structure
753 * @msg: msg from WMA
754 *
755 * Return: void
756 */
757 void lim_process_add_sta_rsp(struct mac_context *mac_ctx,
758 struct scheduler_msg *msg);
759
760 void lim_update_beacon(struct mac_context *mac);
761
762 void lim_process_ap_mlm_add_sta_rsp(struct mac_context *mac,
763 struct scheduler_msg *limMsgQ,
764 struct pe_session *pe_session);
765
766 /**
767 * lim_process_ap_mlm_del_bss_rsp() - handle del bss response of AP
768 * @mac: Pointer to Global MAC structure
769 * @vdev_stop_rsp: pointer to vdev stop response
770 * @pe_session: pointer to pe_session
771 *
772 * Return: none
773 */
774 void lim_process_ap_mlm_del_bss_rsp(struct mac_context *mac,
775 struct del_bss_resp *vdev_stop_rsp,
776 struct pe_session *pe_session);
777
778 void lim_process_ap_mlm_del_sta_rsp(struct mac_context *mac,
779 struct scheduler_msg *limMsgQ,
780 struct pe_session *pe_session);
781
782 /**
783 * ch_width_in_mhz() - API to get channel space in MHz
784 *
785 * For CH_WIDTH_80P80MHZ, the channel space is max channel space of one
786 * segment - 80MHz.
787 *
788 */
ch_width_in_mhz(enum phy_ch_width ch_width)789 static inline uint16_t ch_width_in_mhz(enum phy_ch_width ch_width)
790 {
791 switch (ch_width) {
792 case CH_WIDTH_40MHZ:
793 return 40;
794 case CH_WIDTH_80MHZ:
795 return 80;
796 case CH_WIDTH_160MHZ:
797 return 160;
798 case CH_WIDTH_80P80MHZ:
799 return 80;
800 case CH_WIDTH_5MHZ:
801 return 5;
802 case CH_WIDTH_10MHZ:
803 return 10;
804 case CH_WIDTH_320MHZ:
805 return 320;
806 default:
807 return 20;
808 }
809 }
810
811 struct pe_session *lim_is_ap_session_active(struct mac_context *mac);
812
813 #define limGetWscIEPtr(mac, ie, ie_len) \
814 wlan_get_vendor_ie_ptr_from_oui(SIR_MAC_WSC_OUI, \
815 SIR_MAC_WSC_OUI_SIZE, ie, ie_len)
816
817 #define limGetP2pIEPtr(mac, ie, ie_len) \
818 wlan_get_vendor_ie_ptr_from_oui(SIR_MAC_P2P_OUI, \
819 SIR_MAC_P2P_OUI_SIZE, ie, ie_len)
820
821 uint8_t lim_get_noa_attr_stream(struct mac_context *mac, uint8_t *pNoaStream,
822 struct pe_session *pe_session);
823
824 uint8_t lim_build_p2p_ie(struct mac_context *mac, uint8_t *ie, uint8_t *data,
825 uint8_t ie_len);
826
827 bool lim_isconnected_on_dfs_freq(struct mac_context *mac_ctx,
828 qdf_freq_t curr_chan_freq);
829
830 uint32_t lim_get_max_rate_flags(struct mac_context *mac_ctx,
831 tpDphHashNode sta_ds);
832
833 bool lim_check_vht_op_mode_change(struct mac_context *mac,
834 struct pe_session *pe_session,
835 uint8_t chanWidth,
836 uint8_t *peerMac);
837 #ifdef WLAN_FEATURE_11AX_BSS_COLOR
838 bool lim_send_he_ie_update(struct mac_context *mac_ctx, struct pe_session *pe_session);
839 #endif
840 bool lim_set_nss_change(struct mac_context *mac, struct pe_session *pe_session,
841 uint8_t rxNss, uint8_t *peerMac);
842 bool lim_check_membership_user_position(struct mac_context *mac,
843 struct pe_session *pe_session,
844 uint32_t membership, uint32_t userPosition);
845
846 /**
847 * enum ack_status - Indicate TX status of ASSOC/AUTH
848 * @ACKED : Ack is received.
849 * @NOT_ACKED : No Ack received.
850 * @SENT_FAIL : Failure while sending.
851 *
852 * Indicate if driver is waiting for ACK status of assoc/auth or ACK received
853 * for ASSOC/AUTH OR NO ACK is received for the assoc/auth sent or assoc/auth
854 * sent failed.
855 */
856 enum assoc_ack_status {
857 ACKED,
858 NOT_ACKED,
859 SENT_FAIL,
860 };
861
862 typedef enum {
863 WLAN_PE_DIAG_SCAN_REQ_EVENT = 0,
864 WLAN_PE_DIAG_SCAN_ABORT_IND_EVENT,
865 WLAN_PE_DIAG_SCAN_RSP_EVENT,
866 WLAN_PE_DIAG_JOIN_REQ_EVENT,
867 WLAN_PE_DIAG_JOIN_RSP_EVENT,
868 WLAN_PE_DIAG_SETCONTEXT_REQ_EVENT,
869 WLAN_PE_DIAG_SETCONTEXT_RSP_EVENT,
870 WLAN_PE_DIAG_REASSOC_REQ_EVENT,
871 WLAN_PE_DIAG_REASSOC_RSP_EVENT,
872 WLAN_PE_DIAG_AUTH_REQ_EVENT,
873 WLAN_PE_DIAG_AUTH_RSP_EVENT = 10,
874 WLAN_PE_DIAG_DISASSOC_REQ_EVENT,
875 WLAN_PE_DIAG_DISASSOC_RSP_EVENT,
876 WLAN_PE_DIAG_DISASSOC_IND_EVENT,
877 WLAN_PE_DIAG_DISASSOC_CNF_EVENT,
878 WLAN_PE_DIAG_DEAUTH_REQ_EVENT,
879 WLAN_PE_DIAG_DEAUTH_RSP_EVENT,
880 WLAN_PE_DIAG_DEAUTH_IND_EVENT,
881 WLAN_PE_DIAG_START_BSS_REQ_EVENT,
882 WLAN_PE_DIAG_START_BSS_RSP_EVENT,
883 WLAN_PE_DIAG_AUTH_IND_EVENT = 20,
884 WLAN_PE_DIAG_ASSOC_IND_EVENT,
885 WLAN_PE_DIAG_ASSOC_CNF_EVENT,
886 WLAN_PE_DIAG_REASSOC_IND_EVENT,
887 WLAN_PE_DIAG_SWITCH_CHL_IND_EVENT,
888 WLAN_PE_DIAG_SWITCH_CHL_RSP_EVENT,
889 WLAN_PE_DIAG_STOP_BSS_REQ_EVENT,
890 WLAN_PE_DIAG_STOP_BSS_RSP_EVENT,
891 WLAN_PE_DIAG_DEAUTH_CNF_EVENT,
892 WLAN_PE_DIAG_ADDTS_REQ_EVENT,
893 WLAN_PE_DIAG_ADDTS_RSP_EVENT = 30,
894 WLAN_PE_DIAG_DELTS_REQ_EVENT,
895 WLAN_PE_DIAG_DELTS_RSP_EVENT,
896 WLAN_PE_DIAG_DELTS_IND_EVENT,
897 WLAN_PE_DIAG_ENTER_BMPS_REQ_EVENT,
898 WLAN_PE_DIAG_ENTER_BMPS_RSP_EVENT,
899 WLAN_PE_DIAG_EXIT_BMPS_REQ_EVENT,
900 WLAN_PE_DIAG_EXIT_BMPS_RSP_EVENT,
901 WLAN_PE_DIAG_EXIT_BMPS_IND_EVENT,
902 WLAN_PE_DIAG_ENTER_IMPS_REQ_EVENT,
903 WLAN_PE_DIAG_ENTER_IMPS_RSP_EVENT = 40,
904 WLAN_PE_DIAG_EXIT_IMPS_REQ_EVENT,
905 WLAN_PE_DIAG_EXIT_IMPS_RSP_EVENT,
906 WLAN_PE_DIAG_ENTER_UAPSD_REQ_EVENT,
907 WLAN_PE_DIAG_ENTER_UAPSD_RSP_EVENT,
908 WLAN_PE_DIAG_EXIT_UAPSD_REQ_EVENT,
909 WLAN_PE_DIAG_EXIT_UAPSD_RSP_EVENT,
910 WLAN_PE_DIAG_WOWL_ADD_BCAST_PTRN_EVENT,
911 WLAN_PE_DIAG_WOWL_DEL_BCAST_PTRN_EVENT,
912 WLAN_PE_DIAG_ENTER_WOWL_REQ_EVENT,
913 WLAN_PE_DIAG_ENTER_WOWL_RSP_EVENT = 50,
914 WLAN_PE_DIAG_EXIT_WOWL_REQ_EVENT,
915 WLAN_PE_DIAG_EXIT_WOWL_RSP_EVENT,
916 WLAN_PE_DIAG_HAL_ADDBA_REQ_EVENT,
917 WLAN_PE_DIAG_HAL_ADDBA_RSP_EVENT,
918 WLAN_PE_DIAG_HAL_DELBA_IND_EVENT,
919 WLAN_PE_DIAG_HB_FAILURE_TIMEOUT,
920 WLAN_PE_DIAG_PRE_AUTH_REQ_EVENT,
921 WLAN_PE_DIAG_PRE_AUTH_RSP_EVENT,
922 WLAN_PE_DIAG_PREAUTH_DONE,
923 WLAN_PE_DIAG_REASSOCIATING = 60,
924 WLAN_PE_DIAG_CONNECTED,
925 WLAN_PE_DIAG_ASSOC_REQ_EVENT,
926 WLAN_PE_DIAG_AUTH_COMP_EVENT,
927 WLAN_PE_DIAG_ASSOC_COMP_EVENT,
928 WLAN_PE_DIAG_AUTH_START_EVENT,
929 WLAN_PE_DIAG_ASSOC_START_EVENT,
930 WLAN_PE_DIAG_REASSOC_START_EVENT,
931 WLAN_PE_DIAG_ROAM_AUTH_START_EVENT,
932 WLAN_PE_DIAG_ROAM_AUTH_COMP_EVENT,
933 WLAN_PE_DIAG_ROAM_ASSOC_START_EVENT = 70,
934 WLAN_PE_DIAG_ROAM_ASSOC_COMP_EVENT,
935 WLAN_PE_DIAG_SCAN_COMPLETE_EVENT,
936 WLAN_PE_DIAG_SCAN_RESULT_FOUND_EVENT,
937 WLAN_PE_DIAG_ASSOC_TIMEOUT,
938 WLAN_PE_DIAG_AUTH_TIMEOUT,
939 WLAN_PE_DIAG_DEAUTH_FRAME_EVENT,
940 WLAN_PE_DIAG_DISASSOC_FRAME_EVENT,
941 WLAN_PE_DIAG_AUTH_ACK_EVENT,
942 WLAN_PE_DIAG_ASSOC_ACK_EVENT,
943 WLAN_PE_DIAG_AUTH_ALGO_NUM,
944 } WLAN_PE_DIAG_EVENT_TYPE;
945
946 #ifdef FEATURE_WLAN_DIAG_SUPPORT
947 void lim_diag_event_report(struct mac_context *mac, uint16_t eventType,
948 struct pe_session *pe_session, uint16_t status,
949 uint16_t reasonCode);
950 /**
951 * lim_diag_mgmt_tx_event_report() - to log TX event to external application
952 * @mac_ctx: mac context
953 * @mgmt_hdr: 802.11 mgmt header of given frame
954 * @session: PE session for given frame
955 * @result_code: result code of to be populated in TX frame
956 * @reason_code: reason code if TX OTA status
957 *
958 * Anytime driver sends some mgmt frame down to firmware for OTA delivery,
959 * log mgmt frame through DIAG utility. Don't log frames which come too
960 * excessively.
961 *
962 * Return: void
963 */
964 void lim_diag_mgmt_tx_event_report(struct mac_context *mac_ctx, void *mgmt_hdr,
965 struct pe_session *session, uint16_t result_code,
966 uint16_t reason_code);
967 /**
968 * lim_diag_mgmt_rx_event_report() - to log RX event to external application
969 * @mac_ctx: mac context
970 * @mgmt_hdr: 802.11 mgmt header of given frame
971 * @session: PE session for given frame
972 * @result_code: result code given in RX frame
973 * @reason_code: reason code for RX OTA status
974 *
975 * Anytime driver receives some mgmt frame from firmware OTA,
976 * log mgmt frame through DIAG utility. Don't log frames which come too
977 * excessively.
978 *
979 * Return: void
980 */
981 void lim_diag_mgmt_rx_event_report(struct mac_context *mac_ctx, void *mgmt_hdr,
982 struct pe_session *session, uint16_t result_code,
983 uint16_t reason_code);
984 #else
lim_diag_event_report(struct mac_context * mac,uint16_t eventType,struct pe_session * pe_session,uint16_t status,uint16_t reasonCode)985 static inline void lim_diag_event_report(struct mac_context *mac, uint16_t
986 eventType, struct pe_session *pe_session, uint16_t status,
987 uint16_t reasonCode) {}
988 static inline
lim_diag_mgmt_tx_event_report(struct mac_context * mac_ctx,void * mgmt_hdr,struct pe_session * session,uint16_t result_code,uint16_t reason_code)989 void lim_diag_mgmt_tx_event_report(struct mac_context *mac_ctx, void *mgmt_hdr,
990 struct pe_session *session, uint16_t result_code,
991 uint16_t reason_code) {}
992 static inline
lim_diag_mgmt_rx_event_report(struct mac_context * mac_ctx,void * mgmt_hdr,struct pe_session * session,uint16_t result_code,uint16_t reason_code)993 void lim_diag_mgmt_rx_event_report(struct mac_context *mac_ctx, void *mgmt_hdr,
994 struct pe_session *session, uint16_t result_code,
995 uint16_t reason_code) {}
996 #endif /* FEATURE_WLAN_DIAG_SUPPORT */
997
998 void pe_set_resume_channel(struct mac_context *mac, uint16_t channel,
999 ePhyChanBondState cbState);
1000
1001 void lim_get_short_slot_from_phy_mode(struct mac_context *mac,
1002 struct pe_session *pe_session,
1003 uint32_t phyMode, uint8_t *pShortSlotEnable);
1004
1005 void lim_clean_up_disassoc_deauth_req(struct mac_context *mac, uint8_t *staMac,
1006 bool cleanRxPath);
1007
1008 bool lim_check_disassoc_deauth_ack_pending(struct mac_context *mac,
1009 uint8_t *staMac);
1010
1011 void lim_pmf_sa_query_timer_handler(void *pMacGlobal, uint32_t param);
1012 void lim_pmf_comeback_timer_callback(void *context);
1013 void lim_set_protected_bit(struct mac_context *mac,
1014 struct pe_session *pe_session,
1015 tSirMacAddr peer, tpSirMacMgmtHdr pMacHdr);
1016
1017 void lim_set_ht_caps(struct mac_context *p_mac, uint8_t *p_ie_start,
1018 uint32_t num_bytes);
1019
1020 void lim_set_vht_caps(struct mac_context *p_mac, uint8_t *p_ie_start,
1021 uint32_t num_bytes);
1022 bool lim_validate_received_frame_a1_addr(struct mac_context *mac_ctx,
1023 tSirMacAddr a1, struct pe_session *session);
1024 void lim_set_stads_rtt_cap(tpDphHashNode sta_ds, struct s_ext_cap *ext_cap,
1025 struct mac_context *mac_ctx);
1026
1027 void lim_check_and_reset_protection_params(struct mac_context *mac_ctx);
1028
1029 QDF_STATUS lim_send_ext_cap_ie(struct mac_context *mac_ctx, uint32_t session_id,
1030 tDot11fIEExtCap *extracted_extcap, bool merge);
1031
1032 /**
1033 * lim_send_ies_per_band() - gets ht and vht capability and send to firmware via
1034 * wma
1035 * @mac_ctx: global mac context
1036 * @vdev_id: vdev for which IE is targeted
1037 * @dot11_mode: vdev dot11 mode
1038 * @device_mode: device mode
1039 *
1040 * This function gets ht and vht capability and send to firmware via wma
1041 *
1042 * Return: status of operation
1043 */
1044 QDF_STATUS lim_send_ies_per_band(struct mac_context *mac_ctx,
1045 uint8_t vdev_id,
1046 enum csr_cfgdot11mode dot11_mode,
1047 enum QDF_OPMODE device_mode);
1048
1049 /**
1050 * lim_update_connect_rsn_ie() - Update the connection RSN IE
1051 * @session: PE session
1052 * @rsn_ie_buf: RSN IE buffer
1053 * @pmksa: PMKSA entry for the connecting AP
1054 *
1055 * Return: None
1056 */
1057 void
1058 lim_update_connect_rsn_ie(struct pe_session *session, uint8_t *rsn_ie_buf,
1059 struct wlan_crypto_pmksa *pmksa);
1060
1061 /**
1062 * lim_send_action_frm_tb_ppdu_cfg() - sets action frame in TB PPDU cfg to FW
1063 * @mac_ctx: global MAC context
1064 * @vdev_id: vdev id
1065 * @cfg: config setting
1066 *
1067 * Preapres the vendor action frame and send action frame in HE TB PPDU
1068 * configuration to FW.
1069 *
1070 * Return: QDF_STATUS
1071 */
1072 QDF_STATUS lim_send_action_frm_tb_ppdu_cfg(struct mac_context *mac_ctx,
1073 uint32_t vdev_id,
1074 uint8_t cfg);
1075
1076 void lim_update_extcap_struct(struct mac_context *mac_ctx, uint8_t *buf,
1077 tDot11fIEExtCap *ext_cap);
1078 QDF_STATUS lim_strip_extcap_update_struct(struct mac_context *mac_ctx,
1079 uint8_t *addn_ie, uint16_t *addn_ielen, tDot11fIEExtCap *dst);
1080 void lim_merge_extcap_struct(tDot11fIEExtCap *dst, tDot11fIEExtCap *src,
1081 bool add);
1082
1083 /**
1084 * lim_strip_he_ies_from_add_ies() - This function strip HE IE from add_ie
1085 * @mac_ctx: pointer to mac context
1086 * @pe_session: pointer to PE session
1087 *
1088 * This API is to strip HE IE from add_ie
1089 *
1090 * Return: none
1091 */
1092 void lim_strip_he_ies_from_add_ies(struct mac_context *mac_ctx,
1093 struct pe_session *session);
1094
1095 void lim_strip_eht_ies_from_add_ies(struct mac_context *mac_ctx,
1096 struct pe_session *session);
1097
1098 /**
1099 * lim_strip_wapi_ies_from_add_ies() - This function strip WAPI IE from add_ie
1100 * @mac_ctx: pointer to mac context
1101 * @pe_session: pointer to PE session
1102 *
1103 * This API is to strip WAPI IE from add_ie
1104 *
1105 * Return: none
1106 */
1107 void lim_strip_wapi_ies_from_add_ies(struct mac_context *mac_ctx,
1108 struct pe_session *session);
1109
1110 /**
1111 * lim_del_pmf_sa_query_timer() - This function deletes SA query timer
1112 * @mac_ctx: pointer to mac context
1113 * @pe_session: pointer to PE session
1114 *
1115 * This API is to delete the PMF SA query timer created for each associated STA
1116 *
1117 * Return: none
1118 */
1119 void lim_del_pmf_sa_query_timer(struct mac_context *mac_ctx, struct pe_session *pe_session);
1120
1121 /**
1122 * lim_get_vdev_rmf_capable() - get rmf capable - MFPC
1123 * @mac: mac context
1124 * @session: pe session
1125 *
1126 * Get intersection of local & peer (BSS) RSN caps
1127 * and check MFPC bit.
1128 *
1129 * Return: bool
1130 */
1131 bool lim_get_vdev_rmf_capable(struct mac_context *mac,
1132 struct pe_session *session);
1133
1134 /**
1135 * lim_add_bssid_to_reject_list:- Add rssi reject Ap info to denylist mgr.
1136 * @pdev: pdev
1137 * @entry: info of the BSSID to be put in rssi reject list.
1138 *
1139 * This API will add the passed ap info to the rssi reject list.
1140 *
1141 */
1142 void
1143 lim_add_bssid_to_reject_list(struct wlan_objmgr_pdev *pdev,
1144 struct sir_rssi_disallow_lst *entry);
1145
1146 /**
1147 * lim_strip_op_class_update_struct - strip sup op class IE and populate
1148 * the dot11f structure
1149 * @mac_ctx: global MAC context
1150 * @addn_ie: Additional IE buffer
1151 * @addn_ielen: Length of additional IE
1152 * @dst: Supp operating class IE structure to be updated
1153 *
1154 * This function is used to strip supp op class IE from IE buffer and
1155 * update the passed structure.
1156 *
1157 * Return: QDF_STATUS
1158 */
1159 QDF_STATUS lim_strip_supp_op_class_update_struct(struct mac_context *mac_ctx,
1160 uint8_t *addn_ie, uint16_t *addn_ielen,
1161 tDot11fIESuppOperatingClasses *dst);
1162
1163 uint8_t lim_get_80Mhz_center_channel(uint8_t primary_channel);
1164 void lim_update_obss_scanparams(struct pe_session *session,
1165 tDot11fIEOBSSScanParameters *scan_params);
1166 void lim_init_obss_params(struct mac_context *mac_ctx, struct pe_session *session);
1167 #ifdef WLAN_FEATURE_HOST_ROAM
1168 uint32_t lim_create_timers_host_roam(struct mac_context *mac_ctx);
1169 /**
1170 * lim_delete_timers_host_roam() - Delete timers used in host based roaming
1171 * @mac_ctx: Global MAC context
1172 *
1173 * Delete reassoc and preauth timers
1174 *
1175 * Return: none
1176 */
1177 void lim_delete_timers_host_roam(struct mac_context *mac_ctx);
1178 /**
1179 * lim_deactivate_timers_host_roam() - deactivate timers used in host based
1180 * roaming
1181 * @mac_ctx: Global MAC context
1182 *
1183 * Delete reassoc and preauth timers
1184 *
1185 * Return: none
1186 */
1187 void lim_deactivate_timers_host_roam(struct mac_context *mac_ctx);
1188 void lim_deactivate_and_change_timer_host_roam(struct mac_context *mac_ctx,
1189 uint32_t timer_id);
1190 #else
lim_create_timers_host_roam(struct mac_context * mac_ctx)1191 static inline uint32_t lim_create_timers_host_roam(struct mac_context *mac_ctx)
1192 {
1193 return 0;
1194 }
lim_delete_timers_host_roam(struct mac_context * mac_ctx)1195 static inline void lim_delete_timers_host_roam(struct mac_context *mac_ctx)
1196 {}
lim_deactivate_timers_host_roam(struct mac_context * mac_ctx)1197 static inline void lim_deactivate_timers_host_roam(struct mac_context *mac_ctx) {}
lim_deactivate_and_change_timer_host_roam(struct mac_context * mac_ctx,uint32_t timer_id)1198 static inline void lim_deactivate_and_change_timer_host_roam(
1199 struct mac_context *mac_ctx, uint32_t timer_id)
1200 {}
1201 #endif
1202
1203 uint8_t lim_compute_ext_cap_ie_length(tDot11fIEExtCap *ext_cap);
1204
1205 void lim_update_caps_info_for_bss(struct mac_context *mac_ctx,
1206 uint16_t *caps, uint16_t bss_caps);
1207 void lim_send_set_dtim_period(struct mac_context *mac_ctx, uint8_t dtim_period,
1208 struct pe_session *session);
1209
1210 QDF_STATUS lim_strip_ie(struct mac_context *mac_ctx,
1211 uint8_t *addn_ie, uint16_t *addn_ielen,
1212 uint8_t eid, enum size_of_len_field size_of_len_field,
1213 uint8_t *oui, uint8_t out_len, uint8_t *extracted_ie,
1214 uint32_t eid_max_len);
1215
1216 #define MCSMAPMASK1x1 0x3
1217 #define MCSMAPMASK2x2 0xC
1218
1219 #ifdef WLAN_FEATURE_11AX
1220
1221 /**
1222 * lim_intersect_ap_he_caps() - Intersect AP capability with self STA capability
1223 * @session: pointer to PE session
1224 * @add_bss: pointer to ADD BSS params
1225 * @beacon: pointer to beacon
1226 * @assoc_rsp: pointer to assoc response
1227 * @bss_desc: pointer to BSS description
1228 *
1229 * Return: None
1230 */
1231 void lim_intersect_ap_he_caps(struct pe_session *session,
1232 struct bss_params *add_bss,
1233 tSchBeaconStruct *pBeaconStruct,
1234 tpSirAssocRsp assoc_rsp,
1235 struct bss_description *bss_desc);
1236
1237 /**
1238 * lim_intersect_sta_he_caps() - Intersect STA capability with SAP capability
1239 * @mac_ctx: pointer to the MAC context
1240 * @assoc_req: pointer to assoc request
1241 * @session: pointer to PE session
1242 * @sta_ds: pointer to STA dph hash table entry
1243 *
1244 * Return: None
1245 */
1246 void lim_intersect_sta_he_caps(struct mac_context *mac_ctx,
1247 tpSirAssocReq assoc_req,
1248 struct pe_session *session,
1249 tpDphHashNode sta_ds);
1250
1251 /**
1252 * lim_add_he_cap() - Copy HE capability into Add sta params
1253 * @mac_ctx: Global MAC context
1254 * @pe_session: pe session entry
1255 * @add_sta_params: pointer to add sta params
1256 * @assoc_req: pointer to Assoc request
1257 *
1258 * Return: None
1259 */
1260 void lim_add_he_cap(struct mac_context *mac_ctx, struct pe_session *pe_session,
1261 tpAddStaParams add_sta_params, tpSirAssocReq assoc_req);
1262
1263 /**
1264 * lim_add_self_he_cap() - Copy HE capability into add sta from PE session
1265 * @add_sta_params: pointer to add sta params
1266 * @session: pointer to PE Session
1267 *
1268 * Return: None
1269 */
1270 void lim_add_self_he_cap(tpAddStaParams add_sta_params, struct pe_session *session);
1271
1272 /**
1273 * lim_add_bss_he_cap() - Copy HE capability into ADD BSS params
1274 * @add_bss: pointer to add bss params
1275 * @assoc_rsp: pointer to assoc response
1276 *
1277 * Return: None
1278 */
1279 void lim_add_bss_he_cap(struct bss_params *add_bss, tpSirAssocRsp assoc_rsp);
1280
1281 /**
1282 * lim_add_bss_he_cfg() - Set HE config to BSS params
1283 * @add_bss: pointer to add bss params
1284 * @session: Pointer to Session entry struct
1285 *
1286 * Return: None
1287 */
1288 void lim_add_bss_he_cfg(struct bss_params *add_bss, struct pe_session *session);
1289
1290 /**
1291 * lim_copy_bss_he_cap() - Copy HE capability into PE session from start bss
1292 * @session: pointer to PE session
1293 *
1294 * Return: None
1295 */
1296 void lim_copy_bss_he_cap(struct pe_session *session);
1297
1298 /**
1299 * lim_update_he_caps_mcs() - Update he caps MCS
1300 * @mac: MAC context
1301 * @session: pointer to PE session
1302 *
1303 * Return: None
1304 */
1305 void lim_update_he_caps_mcs(struct mac_context *mac,
1306 struct pe_session *session);
1307
1308
1309 /**
1310 * lim_update_he_6gop_assoc_resp() - Update HE 6GHz op info to BSS params
1311 * @add_bss: pointer to add bss params
1312 * @he_op: Pointer to HE operation info IE
1313 * @session: Pointer to Session entry struct
1314 *
1315 * Return: None
1316 */
1317 void lim_update_he_6gop_assoc_resp(struct bss_params *pAddBssParams,
1318 tDot11fIEhe_op *he_op,
1319 struct pe_session *pe_session);
1320 /**
1321 * lim_copy_join_req_he_cap() - Copy HE capability to PE session from Join req
1322 * and update as per bandwidth supported
1323 * @session: pointer to PE session
1324 *
1325 * Return: None
1326 */
1327 void lim_copy_join_req_he_cap(struct pe_session *session);
1328
1329 /**
1330 * lim_log_he_6g_cap() - Print HE 6G cap IE
1331 * @mac: pointer to MAC context
1332 * @he_6g_cap: pointer to HE 6G cap IE
1333 *
1334 * Print HE 6G caps stored as dot11f structure
1335 *
1336 * Return: None
1337 */
1338 void lim_log_he_6g_cap(struct mac_context *mac,
1339 tDot11fIEhe_6ghz_band_cap *he_6g_cap);
1340
1341 /**
1342 * lim_log_he_op() - Print HE Operation
1343 * @mac: pointer to MAC context
1344 * @he_op: pointer to HE Operation
1345 * @session: pointer to PE session
1346 *
1347 * Print HE operation stored as dot11f structure
1348 *
1349 * Return: None
1350 */
1351 void lim_log_he_op(struct mac_context *mac, tDot11fIEhe_op *he_ops,
1352 struct pe_session *session);
1353
1354 #ifdef WLAN_FEATURE_11AX_BSS_COLOR
1355 /**
1356 * lim_log_he_bss_color() - Print HE bss color
1357 * @mac: pointer to MAC context
1358 * @he_bss_color: pointer to HE bss color
1359 *
1360 * Print HE bss color IE
1361 *
1362 * Return: None
1363 */
1364 void lim_log_he_bss_color(struct mac_context *mac,
1365 tDot11fIEbss_color_change *he_bss_color);
1366 #endif
1367
1368 /**
1369 * lim_log_he_cap() - Print HE capabilities
1370 * @mac: pointer to MAC context
1371 * @he_cap: pointer to HE Capability
1372 *
1373 * Received HE capabilities are converted into dot11f structure.
1374 * This function will print all the HE capabilities as stored
1375 * in the dot11f structure.
1376 *
1377 * Return: None
1378 */
1379 void lim_log_he_cap(struct mac_context *mac, tDot11fIEhe_cap *he_cap);
1380
1381 /**
1382 * lim_check_he_80_mcs11_supp() - Check whether MCS 0-11 rates are supported
1383 * @session: pointer to PE session
1384 * @he_cap: pointer to HE capabilities
1385 *
1386 * Return: true if MCS 0-11 rates are supported
1387 */
1388 bool lim_check_he_80_mcs11_supp(struct pe_session *session,
1389 tDot11fIEhe_cap *he_cap);
1390
1391 void lim_check_and_force_he_ldpc_cap(struct pe_session *session,
1392 tDot11fIEhe_cap *he_cap);
1393
1394 /**
1395 * lim_update_stads_he_caps() - Copy HE capability into STA DPH hash table entry
1396 * @mac_ctx: pointer to mac context
1397 * @sta_ds: pointer to sta dph hash table entry
1398 * @assoc_rsp: pointer to assoc response
1399 * @session_entry: pointer to PE session
1400 * @beacon: pointer to beacon
1401 *
1402 * Return: None
1403 */
1404 void lim_update_stads_he_caps(struct mac_context *mac_ctx,
1405 tpDphHashNode sta_ds, tpSirAssocRsp assoc_rsp,
1406 struct pe_session *session_entry,
1407 tSchBeaconStruct *beacon);
1408
1409 /**
1410 * lim_update_usr_he_cap() - Update HE capability based on userspace
1411 * @mac_ctx: global mac context
1412 * @session: PE session entry
1413 *
1414 * Parse the HE Capability IE and populate the fields to be
1415 * sent to FW as part of add bss and update PE session.
1416 */
1417 void lim_update_usr_he_cap(struct mac_context *mac_ctx, struct pe_session *session);
1418
1419 /**
1420 * lim_decide_he_op() - Determine HE operation elements
1421 * @mac_ctx: global mac context
1422 * @he_ops: mlme he ops
1423 * @session: PE session entry
1424 *
1425 * Parse the HE Operation IE and populate the fields to be
1426 * sent to FW as part of add bss.
1427 */
1428 void lim_decide_he_op(struct mac_context *mac_ctx, uint32_t *mlme_he_ops,
1429 struct pe_session *session);
1430
1431 /**
1432 * lim_update_sta_he_capable(): Update he_capable in add sta params
1433 * @mac: pointer to MAC context
1434 * @add_sta_params: pointer to add sta params
1435 * @sta_ds: pointer to dph hash table entry
1436 * @session_entry: pointer to PE session
1437 *
1438 * Return: None
1439 */
1440 void lim_update_sta_he_capable(struct mac_context *mac,
1441 tpAddStaParams add_sta_params, tpDphHashNode sta_ds,
1442 struct pe_session *session_entry);
1443
lim_is_session_he_capable(struct pe_session * session)1444 static inline bool lim_is_session_he_capable(struct pe_session *session)
1445 {
1446 return session->he_capable;
1447 }
1448
1449 /**
1450 * lim_update_he_bw_cap_mcs(): Update he mcs map per bandwidth
1451 * @session_entry: pointer to PE session
1452 * @beacon: pointer to beacon
1453 *
1454 * Return: None
1455 */
1456 void lim_update_he_bw_cap_mcs(struct pe_session *session,
1457 tSirProbeRespBeacon *beacon);
1458
lim_is_he_6ghz_band(struct pe_session * session)1459 static inline bool lim_is_he_6ghz_band(struct pe_session *session)
1460 {
1461 return session->he_6ghz_band;
1462 }
1463
1464 /**
1465 * lim_get_session_he_frag_cap(): Get session HE fragmentation cap
1466 * @session: pointer to session
1467 *
1468 * Return: HE fragmentation value
1469 */
lim_get_session_he_frag_cap(struct pe_session * session)1470 static inline uint8_t lim_get_session_he_frag_cap(struct pe_session *session)
1471 {
1472 return session->he_config.fragmentation;
1473 }
1474
lim_is_sta_he_capable(tpDphHashNode sta_ds)1475 static inline bool lim_is_sta_he_capable(tpDphHashNode sta_ds)
1476 {
1477 return sta_ds->mlmStaContext.he_capable;
1478 }
1479
1480 /**
1481 * lim_update_bss_he_capable() - Update he_capable in add BSS params
1482 * @mac: pointer to MAC context
1483 * @add_bss: pointer to add BSS params
1484 *
1485 * Return: None
1486 */
1487 void lim_update_bss_he_capable(struct mac_context *mac,
1488 struct bss_params *add_bss);
1489
1490 /**
1491 * lim_update_stads_he_capable() - Update he_capable in sta ds context
1492 * @sta_ds: pointer to sta ds
1493 * @assoc_req: pointer to assoc request
1494 *
1495 * Return: None
1496 */
1497 void lim_update_stads_he_capable(tpDphHashNode sta_ds, tpSirAssocReq assoc_req);
1498
1499 /**
1500 * lim_update_session_he_capable(): Update he_capable in PE session
1501 * @mac: pointer to MAC context
1502 * @session: pointer to PE session
1503 *
1504 * Return: None
1505 */
1506 void lim_update_session_he_capable(struct mac_context *mac, struct pe_session *session);
1507
1508 /**
1509 * lim_update_session_he_capable_chan_switch(): Update he_capable in PE session
1510 * @mac: pointer to MAC context
1511 * @session: pointer to PE session
1512 * @new_chan_freq: new channel frequency Mhz
1513 *
1514 * Update session he capable during AP channel switching
1515 *
1516 * Return: None
1517 */
1518 void lim_update_session_he_capable_chan_switch(struct mac_context *mac,
1519 struct pe_session *session,
1520 uint32_t new_chan_freq);
1521
1522 /**
1523 * lim_set_he_caps() - update HE caps to be sent to FW as part of scan IE
1524 * @mac: pointer to MAC
1525 * @ie_start: pointer to start of IE buffer
1526 * @num_bytes: length of IE buffer
1527 * @band: 2g or 5g band
1528 *
1529 * Return: None
1530 */
1531 void lim_set_he_caps(struct mac_context *mac, uint8_t *ie_start,
1532 uint32_t num_bytes, uint8_t band);
1533
1534 /**
1535 * lim_send_he_caps_ie() - gets HE capability and send to firmware via wma
1536 * @mac_ctx: global mac context
1537 * @device_mode: VDEV op mode
1538 * @vdev_id: vdev for which IE is targeted
1539 *
1540 * This function gets HE capability and send to firmware via wma
1541 *
1542 * Return: QDF_STATUS
1543 */
1544 QDF_STATUS lim_send_he_caps_ie(struct mac_context *mac_ctx,
1545 enum QDF_OPMODE device_mode,
1546 uint8_t vdev_id);
1547
1548 /**
1549 * lim_populate_he_mcs_per_bw() - pouldate HE mcs set per BW (le 80, 160, 80+80)
1550 * @mac_ctx: Global MAC context
1551 * @self_rx: self rx mcs set
1552 * @self_tx: self tx mcs set
1553 * @peer_rx: peer rx mcs set
1554 * @peer_tx: peer tx mcs set
1555 * @nss: nss
1556 * @cfg_rx_param: rx wni param to read
1557 * @cfg_tx_param: tx wni param to read
1558 *
1559 * MCS values are interpreted as in IEEE 11ax-D1.4 spec onwards
1560 * +-----------------------------------------------------+
1561 * | SS8 | SS7 | SS6 | SS5 | SS4 | SS3 | SS2 | SS1 |
1562 * +-----------------------------------------------------+
1563 * | 15-14 | 13-12 | 11-10 | 9-8 | 7-6 | 5-4 | 3-2 | 1-0 |
1564 * +-----------------------------------------------------+
1565 *
1566 * Return: status of operation
1567 */
1568 QDF_STATUS lim_populate_he_mcs_per_bw(struct mac_context *mac_ctx,
1569 uint16_t *supp_rx_mcs,
1570 uint16_t *supp_tx_mcs,
1571 uint16_t peer_rx, uint16_t peer_tx,
1572 uint8_t nss, uint16_t rx_mcs,
1573 uint16_t tx_mcs);
1574
1575 /**
1576 * lim_populate_he_mcs_set() - function to populate HE mcs rate set
1577 * @mac_ctx: pointer to global mac structure
1578 * @rates: pointer to supported rate set
1579 * @peer_vht_caps: pointer to peer HE capabilities
1580 * @session_entry: pe session entry
1581 * @nss: number of spatial streams
1582 *
1583 * Populates HE mcs rate set based on peer and self capabilities
1584 *
1585 * Return: QDF_STATUS
1586 */
1587 QDF_STATUS lim_populate_he_mcs_set(struct mac_context *mac_ctx,
1588 struct supported_rates *rates,
1589 tDot11fIEhe_cap *peer_he_caps,
1590 struct pe_session *session_entry,
1591 uint8_t nss);
1592
1593 /**
1594 * lim_update_stads_he_6ghz_op() - Update sta ds channel info
1595 * @session: pe session
1596 * @sta_ds: pointer to sta ds struct
1597
1598 * Update sta_ds channel width.
1599 *
1600 * Return: void
1601 */
1602 void lim_update_stads_he_6ghz_op(struct pe_session *session,
1603 tpDphHashNode sta_ds);
1604
1605 /**
1606 * lim_update_he_6ghz_band_caps() - Update he 6ghz band caps
1607 * @mac_ctx: Global MAC context
1608 * @pAssocRsp: contains the structured assoc/reassoc Response got from AP
1609 * @add_bss: pointer to ADD BSS params
1610 *
1611 * Update 6ghz band caps based on HE capability
1612 *
1613 * Return: none
1614 */
1615 void lim_update_he_6ghz_band_caps(struct mac_context *mac,
1616 tDot11fIEhe_6ghz_band_cap *he_6ghz_band_cap,
1617 tpAddStaParams params);
1618
1619 #else
lim_add_he_cap(struct mac_context * mac_ctx,struct pe_session * pe_session,tpAddStaParams add_sta_params,tpSirAssocReq assoc_req)1620 static inline void lim_add_he_cap(struct mac_context *mac_ctx,
1621 struct pe_session *pe_session,
1622 tpAddStaParams add_sta_params,
1623 tpSirAssocReq assoc_req)
1624 {
1625 }
1626
lim_add_self_he_cap(tpAddStaParams add_sta_params,struct pe_session * session)1627 static inline void lim_add_self_he_cap(tpAddStaParams add_sta_params,
1628 struct pe_session *session)
1629 {
1630 }
1631
lim_add_bss_he_cap(struct bss_params * add_bss,tpSirAssocRsp assoc_rsp)1632 static inline void lim_add_bss_he_cap(struct bss_params *add_bss,
1633 tpSirAssocRsp assoc_rsp)
1634 {
1635 return;
1636 }
1637
lim_add_bss_he_cfg(struct bss_params * add_bss,struct pe_session * session)1638 static inline void lim_add_bss_he_cfg(struct bss_params *add_bss,
1639 struct pe_session *session)
1640 {
1641 }
1642
lim_update_he_6gop_assoc_resp(struct bss_params * pAddBssParams,tDot11fIEhe_op * he_op,struct pe_session * pe_session)1643 static inline void lim_update_he_6gop_assoc_resp(
1644 struct bss_params *pAddBssParams,
1645 tDot11fIEhe_op *he_op,
1646 struct pe_session *pe_session)
1647 {
1648 }
1649
lim_intersect_ap_he_caps(struct pe_session * session,struct bss_params * add_bss,tSchBeaconStruct * pBeaconStruct,tpSirAssocRsp assoc_rsp,struct bss_description * bss_desc)1650 static inline void lim_intersect_ap_he_caps(struct pe_session *session,
1651 struct bss_params *add_bss,
1652 tSchBeaconStruct *pBeaconStruct,
1653 tpSirAssocRsp assoc_rsp,
1654 struct bss_description *bss_desc)
1655 {
1656 return;
1657 }
1658
lim_intersect_sta_he_caps(struct mac_context * mac_ctx,tpSirAssocReq assoc_req,struct pe_session * session,tpDphHashNode sta_ds)1659 static inline void lim_intersect_sta_he_caps(struct mac_context *mac_ctx,
1660 tpSirAssocReq assoc_req,
1661 struct pe_session *session,
1662 tpDphHashNode sta_ds)
1663 {
1664 }
1665
lim_update_stads_he_caps(struct mac_context * mac_ctx,tpDphHashNode sta_ds,tpSirAssocRsp assoc_rsp,struct pe_session * session_entry,tSchBeaconStruct * beacon)1666 static inline void lim_update_stads_he_caps(struct mac_context *mac_ctx,
1667 tpDphHashNode sta_ds,
1668 tpSirAssocRsp assoc_rsp,
1669 struct pe_session *session_entry,
1670 tSchBeaconStruct *beacon)
1671 {
1672 return;
1673 }
1674
lim_update_usr_he_cap(struct mac_context * mac_ctx,struct pe_session * session)1675 static inline void lim_update_usr_he_cap(struct mac_context *mac_ctx,
1676 struct pe_session *session)
1677 {
1678 }
1679
lim_decide_he_op(struct mac_context * mac_ctx,uint32_t * mlme_he_ops,struct pe_session * session)1680 static inline void lim_decide_he_op(struct mac_context *mac_ctx,
1681 uint32_t *mlme_he_ops, struct pe_session *session)
1682 {
1683 }
1684
1685 static inline
lim_copy_bss_he_cap(struct pe_session * session)1686 void lim_copy_bss_he_cap(struct pe_session *session)
1687 {
1688 }
1689
1690 static inline
lim_update_he_caps_mcs(struct mac_context * mac,struct pe_session * session)1691 void lim_update_he_caps_mcs(struct mac_context *mac, struct pe_session *session)
1692 {
1693 }
1694
lim_copy_join_req_he_cap(struct pe_session * session)1695 static inline void lim_copy_join_req_he_cap(struct pe_session *session)
1696 {
1697 }
1698
lim_log_he_op(struct mac_context * mac,tDot11fIEhe_op * he_ops,struct pe_session * session)1699 static inline void lim_log_he_op(struct mac_context *mac,
1700 tDot11fIEhe_op *he_ops,
1701 struct pe_session *session)
1702 {
1703 }
1704
lim_log_he_cap(struct mac_context * mac,tDot11fIEhe_cap * he_cap)1705 static inline void lim_log_he_cap(struct mac_context *mac,
1706 tDot11fIEhe_cap *he_cap)
1707 {
1708 }
1709
lim_update_sta_he_capable(struct mac_context * mac,tpAddStaParams add_sta_params,tpDphHashNode sta_ds,struct pe_session * session_entry)1710 static inline void lim_update_sta_he_capable(struct mac_context *mac,
1711 tpAddStaParams add_sta_params,
1712 tpDphHashNode sta_ds, struct pe_session *session_entry)
1713 {
1714 }
1715
lim_is_session_he_capable(struct pe_session * session)1716 static inline bool lim_is_session_he_capable(struct pe_session *session)
1717 {
1718 return false;
1719 }
1720
lim_update_he_bw_cap_mcs(struct pe_session * session,tSirProbeRespBeacon * beacon)1721 static inline void lim_update_he_bw_cap_mcs(struct pe_session *session,
1722 tSirProbeRespBeacon *beacon)
1723 {
1724 }
1725
lim_is_he_6ghz_band(struct pe_session * session)1726 static inline bool lim_is_he_6ghz_band(struct pe_session *session)
1727 {
1728 return false;
1729 }
1730
lim_get_session_he_frag_cap(struct pe_session * session)1731 static inline uint8_t lim_get_session_he_frag_cap(struct pe_session *session)
1732 {
1733 return 0;
1734 }
1735
lim_is_sta_he_capable(tpDphHashNode sta_ds)1736 static inline bool lim_is_sta_he_capable(tpDphHashNode sta_ds)
1737 {
1738 return false;
1739 }
1740
lim_update_bss_he_capable(struct mac_context * mac,struct bss_params * add_bss)1741 static inline void lim_update_bss_he_capable(struct mac_context *mac,
1742 struct bss_params *add_bss)
1743 {
1744 }
1745
lim_update_stads_he_capable(tpDphHashNode sta_ds,tpSirAssocReq assoc_req)1746 static inline void lim_update_stads_he_capable(tpDphHashNode sta_ds,
1747 tpSirAssocReq assoc_req)
1748 {
1749 }
1750
lim_update_session_he_capable(struct mac_context * mac,struct pe_session * session)1751 static inline void lim_update_session_he_capable(struct mac_context *mac,
1752 struct pe_session *session)
1753 {
1754 }
1755
1756 static inline
lim_update_session_he_capable_chan_switch(struct mac_context * mac,struct pe_session * session,uint32_t new_chan_freq)1757 void lim_update_session_he_capable_chan_switch(struct mac_context *mac,
1758 struct pe_session *session,
1759 uint32_t new_chan_freq)
1760 {
1761 }
1762
lim_set_he_caps(struct mac_context * mac,struct pe_session * session,uint8_t * ie_start,uint32_t num_bytes,uint8_t band)1763 static inline void lim_set_he_caps(struct mac_context *mac, struct pe_session *session,
1764 uint8_t *ie_start, uint32_t num_bytes,
1765 uint8_t band)
1766 {
1767 }
1768
lim_send_he_caps_ie(struct mac_context * mac_ctx,enum QDF_OPMODE device_mode,uint8_t vdev_id)1769 static inline QDF_STATUS lim_send_he_caps_ie(struct mac_context *mac_ctx,
1770 enum QDF_OPMODE device_mode,
1771 uint8_t vdev_id)
1772 {
1773 return QDF_STATUS_SUCCESS;
1774 }
1775
1776 static inline
lim_populate_he_mcs_set(struct mac_context * mac_ctx,struct supported_rates * rates,tDot11fIEhe_cap * peer_he_caps,struct pe_session * session_entry,uint8_t nss)1777 QDF_STATUS lim_populate_he_mcs_set(struct mac_context *mac_ctx,
1778 struct supported_rates *rates,
1779 tDot11fIEhe_cap *peer_he_caps,
1780 struct pe_session *session_entry,
1781 uint8_t nss)
1782 {
1783 return QDF_STATUS_SUCCESS;
1784 }
1785
1786 static inline void
lim_update_stads_he_6ghz_op(struct pe_session * session,tpDphHashNode sta_ds)1787 lim_update_stads_he_6ghz_op(struct pe_session *session,
1788 tpDphHashNode sta_ds)
1789 {
1790 }
1791
1792 static inline void
lim_update_he_6ghz_band_caps(struct mac_context * mac,tDot11fIEhe_6ghz_band_cap * he_6ghz_band_cap,tpAddStaParams params)1793 lim_update_he_6ghz_band_caps(struct mac_context *mac,
1794 tDot11fIEhe_6ghz_band_cap *he_6ghz_band_cap,
1795 tpAddStaParams params)
1796 {
1797 }
1798 #endif
1799
1800 #ifdef WLAN_FEATURE_11BE
lim_is_session_eht_capable(struct pe_session * session)1801 static inline bool lim_is_session_eht_capable(struct pe_session *session)
1802 {
1803 if (!session)
1804 return false;
1805
1806 return session->eht_capable;
1807 }
1808
lim_is_sta_eht_capable(tpDphHashNode sta_ds)1809 static inline bool lim_is_sta_eht_capable(tpDphHashNode sta_ds)
1810 {
1811 return sta_ds->mlmStaContext.eht_capable;
1812 }
1813
1814 QDF_STATUS lim_strip_eht_op_ie(struct mac_context *mac_ctx,
1815 uint8_t *frame_ies,
1816 uint16_t *ie_buf_size,
1817 uint8_t *eht_op_ie);
1818
1819 QDF_STATUS lim_strip_eht_cap_ie(struct mac_context *mac_ctx,
1820 uint8_t *frame_ies,
1821 uint16_t *ie_buf_size,
1822 uint8_t *eht_cap_ie);
1823
1824 /**
1825 * lim_populate_eht_mcs_set() - function to populate EHT mcs rate set
1826 * @mac_ctx: pointer to global mac structure
1827 * @rates: pointer to supported rate set
1828 * @peer_eht_caps: pointer to peer EHT capabilities
1829 * @session_entry: pe session entry
1830 * @ch_width: channel width of the association
1831 *
1832 * Populates EHT mcs rate set based on peer and self capabilities
1833 *
1834 * Return: QDF_STATUS
1835 */
1836 QDF_STATUS lim_populate_eht_mcs_set(struct mac_context *mac_ctx,
1837 struct supported_rates *rates,
1838 tDot11fIEeht_cap *peer_eht_caps,
1839 struct pe_session *session_entry,
1840 enum phy_ch_width ch_width);
1841
1842 /**
1843 * lim_update_eht_bw_cap_mcs(): Update eht mcs map per bandwidth
1844 * @session_entry: pointer to PE session
1845 * @beacon: pointer to beacon
1846 *
1847 * Return: None
1848 */
1849 void lim_update_eht_bw_cap_mcs(struct pe_session *session,
1850 tSirProbeRespBeacon *beacon);
1851
1852 /**
1853 * lim_add_self_eht_cap() - Copy EHT capability into add sta from PE session
1854 * @add_sta_params: pointer to add sta params
1855 * @session: pointer to PE Session
1856 *
1857 * Return: None
1858 */
1859 void lim_add_self_eht_cap(tpAddStaParams add_sta_params,
1860 struct pe_session *session);
1861
1862 /**
1863 * lim_update_usr_eht_cap() - Update EHT capability based on userspace
1864 * @mac_ctx: global mac context
1865 * @session: PE session entry
1866 *
1867 * Parse the EHT Capability IE and populate the fields to be
1868 * sent to FW as part of add bss and update PE session.
1869 */
1870 void lim_update_usr_eht_cap(struct mac_context *mac_ctx,
1871 struct pe_session *session);
1872
1873 /**
1874 * lim_copy_bss_eht_cap() - Copy EHT capability into PE session from start bss
1875 * @session: pointer to PE session
1876 *
1877 * Return: None
1878 */
1879 void lim_copy_bss_eht_cap(struct pe_session *session);
1880
1881 /**
1882 * lim_copy_join_req_eht_cap() - Copy EHT capability to PE session from Join req
1883 * and update as per bandwidth supported
1884 * @session: pointer to PE session
1885 *
1886 * Return: None
1887 */
1888 void lim_copy_join_req_eht_cap(struct pe_session *session);
1889
1890 /**
1891 * lim_add_eht_cap() - Copy EHT capability into Add sta params
1892 * @mac_ctx: Global MAC context
1893 * @pe_session: pe session entry
1894 * @add_sta_params: pointer to add sta params
1895 * @assoc_req: pointer to Assoc request
1896 *
1897 * Return: None
1898 */
1899 void lim_add_eht_cap(struct mac_context *mac_ctx, struct pe_session *pe_session,
1900 tpAddStaParams add_sta_params, tpSirAssocReq assoc_req);
1901
1902 /**
1903 * lim_intersect_ap_eht_caps() - Intersect AP and self STA EHT capabilities
1904 * @session: pointer to PE session
1905 * @add_bss: pointer to ADD BSS params
1906 * @beacon: pointer to beacon
1907 * @assoc_rsp: pointer to assoc response
1908 *
1909 * Return: None
1910 */
1911 void lim_intersect_ap_eht_caps(struct pe_session *session,
1912 struct bss_params *add_bss,
1913 tSchBeaconStruct *pBeaconStruct,
1914 tpSirAssocRsp assoc_rsp);
1915
1916 /**
1917 * lim_add_bss_eht_cap() - Copy EHT capability into ADD BSS params
1918 * @add_bss: pointer to add bss params
1919 * @assoc_rsp: pointer to assoc response
1920 *
1921 * Return: None
1922 */
1923 void lim_add_bss_eht_cap(struct bss_params *add_bss, tpSirAssocRsp assoc_rsp);
1924
1925 /**
1926 * lim_intersect_sta_eht_caps() - Intersect STA capability with SAP capability
1927 * @mac_ctx: pointer to the MAC context
1928 * @assoc_req: pointer to assoc request
1929 * @session: pointer to PE session
1930 * @sta_ds: pointer to STA dph hash table entry
1931 *
1932 * Return: None
1933 */
1934 void lim_intersect_sta_eht_caps(struct mac_context *mac_ctx,
1935 tpSirAssocReq assoc_req,
1936 struct pe_session *session,
1937 tpDphHashNode sta_ds);
1938
1939 /**
1940 * lim_update_session_eht_capable(): Update eht_capable in PE session
1941 * @mac: pointer to MAC context
1942 * @session: pointer to PE session
1943 *
1944 * Return: None
1945 */
1946 void lim_update_session_eht_capable(struct mac_context *mac,
1947 struct pe_session *session);
1948
1949 /**
1950 * lim_add_bss_eht_cfg() - Set EHT config to BSS params
1951 * @add_bss: pointer to add bss params
1952 * @session: Pointer to Session entry struct
1953 *
1954 * Return: None
1955 */
1956 void lim_add_bss_eht_cfg(struct bss_params *add_bss,
1957 struct pe_session *session);
1958
1959 /**
1960 * lim_decide_eht_op() - Determine EHT operation elements
1961 * @mac_ctx: global mac context
1962 * @eht_ops: mlme eht ops
1963 * @session: PE session entry
1964 *
1965 * Parse the EHT Operation IE and populate the fields to be
1966 * sent to FW as part of add bss.
1967 */
1968 void lim_decide_eht_op(struct mac_context *mac_ctx, uint32_t *mlme_eht_ops,
1969 struct pe_session *session);
1970
1971 /**
1972 * lim_update_stads_eht_capable() - Update eht_capable in sta ds context
1973 * @sta_ds: pointer to sta ds
1974 * @assoc_req: pointer to assoc request
1975 *
1976 * Return: None
1977 */
1978 void lim_update_stads_eht_capable(tpDphHashNode sta_ds,
1979 tpSirAssocReq assoc_req);
1980
1981 /**
1982 * lim_update_sta_eht_capable(): Update eht_capable in add sta params
1983 * @mac: pointer to MAC context
1984 * @add_sta_params: pointer to add sta params
1985 * @sta_ds: pointer to dph hash table entry
1986 * @session_entry: pointer to PE session
1987 *
1988 * Return: None
1989 */
1990 void lim_update_sta_eht_capable(struct mac_context *mac,
1991 tpAddStaParams add_sta_params,
1992 tpDphHashNode sta_ds,
1993 struct pe_session *session_entry);
1994
1995 #ifdef FEATURE_WLAN_TDLS
1996 /**
1997 * lim_update_tdls_sta_eht_capable(): Update eht_capable in add tdls sta params
1998 * @mac: pointer to MAC context
1999 * @add_sta_params: pointer to add sta params
2000 * @sta_ds: pointer to dph hash table entry
2001 * @session_entry: pointer to PE session
2002 *
2003 * Return: None
2004 */
2005 void lim_update_tdls_sta_eht_capable(struct mac_context *mac,
2006 tpAddStaParams add_sta_params,
2007 tpDphHashNode sta_ds,
2008 struct pe_session *session_entry);
2009 #else
2010 static inline
lim_update_tdls_sta_eht_capable(struct mac_context * mac,tpAddStaParams add_sta_params,tpDphHashNode sta_ds,struct pe_session * session_entry)2011 void lim_update_tdls_sta_eht_capable(struct mac_context *mac,
2012 tpAddStaParams add_sta_params,
2013 tpDphHashNode sta_ds,
2014 struct pe_session *session_entry)
2015 {
2016 }
2017 #endif
2018
2019 /**
2020 * lim_update_session_eht_capable_chan_switch(): Update eht_capable in PE
2021 * session
2022 * @mac: pointer to MAC context
2023 * @session: pointer to PE session
2024 * @new_chan_freq: new channel frequency Mhz
2025 *
2026 * Update session eht capable during AP channel switching
2027 *
2028 * Return: None
2029 */
2030 void lim_update_session_eht_capable_chan_switch(struct mac_context *mac,
2031 struct pe_session *session,
2032 uint32_t new_chan_freq);
2033
2034 /**
2035 * lim_update_bss_eht_capable() - Update eht_capable in add BSS params
2036 * @mac: pointer to MAC context
2037 * @add_bss: pointer to add BSS params
2038 *
2039 * Return: None
2040 */
2041 void lim_update_bss_eht_capable(struct mac_context *mac,
2042 struct bss_params *add_bss);
2043
2044 /**
2045 * lim_log_eht_cap() - Print EHT capabilities
2046 * @mac: pointer to MAC context
2047 * @eht_cap: pointer to HE Capability
2048 *
2049 * Received EHT capabilities are converted into dot11f structure.
2050 * This function will print all the EHT capabilities as stored
2051 * in the dot11f structure.
2052 *
2053 * Return: None
2054 */
2055 void lim_log_eht_cap(struct mac_context *mac, tDot11fIEeht_cap *eht_cap);
2056
2057 /**
2058 * lim_set_eht_caps() - update EHT caps to be sent to FW as part of scan IE
2059 * @mac: pointer to MAC
2060 * @ie_start: pointer to start of IE buffer
2061 * @num_bytes: length of IE buffer
2062 * @band: 2g or 5g band
2063 * @vdev_id: vdev id
2064 *
2065 * Return: None
2066 */
2067 void lim_set_eht_caps(struct mac_context *mac, uint8_t *ie_start,
2068 uint32_t num_bytes, uint8_t band, uint8_t vdev_id);
2069
2070 /**
2071 * lim_send_eht_caps_ie() - gets EHT capability and send to firmware via wma
2072 * @mac_ctx: global mac context
2073 * @device_mode: VDEV op mode
2074 * @vdev_id: vdev for which IE is targeted
2075 *
2076 * This function gets EHT capability and send to firmware via wma
2077 *
2078 * Return: QDF_STATUS
2079 */
2080 QDF_STATUS lim_send_eht_caps_ie(struct mac_context *mac_ctx,
2081 enum QDF_OPMODE device_mode,
2082 uint8_t vdev_id);
2083 /**
2084 * lim_log_eht_op() - Print EHT Operation
2085 * @mac: pointer to MAC context
2086 * @eht_op: pointer to EHT Operation
2087 * @session: pointer to PE session
2088 *
2089 * Print EHT operation stored as dot11f structure
2090 *
2091 * Return: None
2092 */
2093 void lim_log_eht_op(struct mac_context *mac, tDot11fIEeht_op *eht_ops,
2094 struct pe_session *session);
2095
2096 /**
2097 * lim_update_stads_eht_caps() - Copy EHT capability into STA DPH hash table
2098 * entry
2099 * @mac_ctx: pointer to mac context
2100 * @sta_ds: pointer to sta dph hash table entry
2101 * @assoc_rsp: pointer to assoc response
2102 * @session_entry: pointer to PE session
2103 * @beacon: pointer to beacon
2104 *
2105 * Return: None
2106 */
2107 void lim_update_stads_eht_caps(struct mac_context *mac_ctx,
2108 tpDphHashNode sta_ds, tpSirAssocRsp assoc_rsp,
2109 struct pe_session *session_entry,
2110 tSchBeaconStruct *beacon);
2111
2112 /**
2113 * lim_update_stads_eht_bw_320mhz() - Set ch_width to 320MHz for sta_ds
2114 * @session: pointer to PE session
2115 * @sta_ds: pointer to sta dph hash table entry
2116 *
2117 * Set ch_width to 320 MHz only when session is in 320 MHz and peer eht
2118 * caps support 320 MHz after eht caps intersection.
2119 *
2120 * Return: None
2121 */
2122 void lim_update_stads_eht_bw_320mhz(struct pe_session *session,
2123 tpDphHashNode sta_ds);
2124
2125 /**
2126 * lim_is_session_chwidth_320mhz() - Check if session chan width is 320 MHz
2127 * @session: pointer to PE session
2128 *
2129 * Check if session channel width is 320 MHz
2130 *
2131 * Return: bool
2132 */
2133 bool lim_is_session_chwidth_320mhz(struct pe_session *session);
2134
2135 /**
2136 * lim_update_eht_caps_mcs() - update eht caps
2137 *
2138 * @mac: Pointer to Global mac structure
2139 * @session: Session pointer of the interface
2140 *
2141 * Return: None
2142 */
2143 void
2144 lim_update_eht_caps_mcs(struct mac_context *mac, struct pe_session *session);
2145
2146 /**
2147 * lim_update_des_chan_puncture() - set puncture_bitmap of des_chan
2148 * @des_chan: pointer to wlan_channel
2149 * @ch_params: pointer to ch_params
2150 *
2151 * Return: void
2152 */
2153 void lim_update_des_chan_puncture(struct wlan_channel *des_chan,
2154 struct ch_params *ch_params);
2155
2156 /**
2157 * lim_overwrite_sta_puncture() - overwrite STA puncture with AP puncture
2158 * @session: session
2159 * @@ch_param: pointer to ch_params
2160 *
2161 * Return: void
2162 */
2163 void lim_overwrite_sta_puncture(struct pe_session *session,
2164 struct ch_params *ch_param);
2165 #else
2166 static inline
lim_update_tdls_sta_eht_capable(struct mac_context * mac,tpAddStaParams add_sta_params,tpDphHashNode sta_ds,struct pe_session * session_entry)2167 void lim_update_tdls_sta_eht_capable(struct mac_context *mac,
2168 tpAddStaParams add_sta_params,
2169 tpDphHashNode sta_ds,
2170 struct pe_session *session_entry)
2171 {
2172 }
2173
lim_is_session_eht_capable(struct pe_session * session)2174 static inline bool lim_is_session_eht_capable(struct pe_session *session)
2175 {
2176 return false;
2177 }
2178
lim_is_sta_eht_capable(tpDphHashNode sta_ds)2179 static inline bool lim_is_sta_eht_capable(tpDphHashNode sta_ds)
2180 {
2181 return false;
2182 }
2183
2184 static inline
lim_strip_eht_op_ie(struct mac_context * mac_ctx,uint8_t * frame_ies,uint16_t * ie_buf_size,uint8_t * eht_op_ie)2185 QDF_STATUS lim_strip_eht_op_ie(struct mac_context *mac_ctx,
2186 uint8_t *frame_ies,
2187 uint16_t *ie_buf_size,
2188 uint8_t *eht_op_ie)
2189 {
2190 return QDF_STATUS_E_FAILURE;
2191 }
2192
2193 static inline
lim_strip_eht_cap_ie(struct mac_context * mac_ctx,uint8_t * frame_ies,uint16_t * ie_buf_size,uint8_t * eht_cap_ie)2194 QDF_STATUS lim_strip_eht_cap_ie(struct mac_context *mac_ctx,
2195 uint8_t *frame_ies,
2196 uint16_t *ie_buf_size,
2197 uint8_t *eht_cap_ie)
2198 {
2199 return QDF_STATUS_E_FAILURE;
2200 }
2201
2202 static inline
lim_populate_eht_mcs_set(struct mac_context * mac_ctx,struct supported_rates * rates,tDot11fIEeht_cap * peer_eht_caps,struct pe_session * session_entry,enum phy_ch_width ch_width)2203 QDF_STATUS lim_populate_eht_mcs_set(struct mac_context *mac_ctx,
2204 struct supported_rates *rates,
2205 tDot11fIEeht_cap *peer_eht_caps,
2206 struct pe_session *session_entry,
2207 enum phy_ch_width ch_width)
2208 {
2209 return QDF_STATUS_SUCCESS;
2210 }
2211
lim_update_eht_bw_cap_mcs(struct pe_session * session,tSirProbeRespBeacon * beacon)2212 static inline void lim_update_eht_bw_cap_mcs(struct pe_session *session,
2213 tSirProbeRespBeacon *beacon)
2214 {
2215 }
2216
lim_add_self_eht_cap(tpAddStaParams add_sta_params,struct pe_session * session)2217 static inline void lim_add_self_eht_cap(tpAddStaParams add_sta_params,
2218 struct pe_session *session)
2219 {
2220 }
2221
lim_update_usr_eht_cap(struct mac_context * mac_ctx,struct pe_session * session)2222 static inline void lim_update_usr_eht_cap(struct mac_context *mac_ctx,
2223 struct pe_session *session)
2224 {
2225 }
2226
lim_copy_bss_eht_cap(struct pe_session * session)2227 static inline void lim_copy_bss_eht_cap(struct pe_session *session)
2228 {
2229 }
2230
lim_copy_join_req_eht_cap(struct pe_session * session)2231 static inline void lim_copy_join_req_eht_cap(struct pe_session *session)
2232 {
2233 }
2234
lim_add_eht_cap(struct mac_context * mac_ctx,struct pe_session * pe_session,tpAddStaParams add_sta_params,tpSirAssocReq assoc_req)2235 static inline void lim_add_eht_cap(struct mac_context *mac_ctx,
2236 struct pe_session *pe_session,
2237 tpAddStaParams add_sta_params,
2238 tpSirAssocReq assoc_req)
2239 {
2240 }
2241
2242 static inline void
lim_intersect_ap_eht_caps(struct pe_session * session,struct bss_params * add_bss,tSchBeaconStruct * pBeaconStruct,tpSirAssocRsp assoc_rsp)2243 lim_intersect_ap_eht_caps(struct pe_session *session,
2244 struct bss_params *add_bss,
2245 tSchBeaconStruct *pBeaconStruct,
2246 tpSirAssocRsp assoc_rsp)
2247 {
2248 }
2249
lim_add_bss_eht_cap(struct bss_params * add_bss,tpSirAssocRsp assoc_rsp)2250 static inline void lim_add_bss_eht_cap(struct bss_params *add_bss,
2251 tpSirAssocRsp assoc_rsp)
2252 {
2253 }
2254
2255 static inline
lim_intersect_sta_eht_caps(struct mac_context * mac_ctx,tpSirAssocReq assoc_req,struct pe_session * session,tpDphHashNode sta_ds)2256 void lim_intersect_sta_eht_caps(struct mac_context *mac_ctx,
2257 tpSirAssocReq assoc_req,
2258 struct pe_session *session,
2259 tpDphHashNode sta_ds)
2260 {
2261 }
2262
2263 static inline
lim_update_session_eht_capable(struct mac_context * mac,struct pe_session * session)2264 void lim_update_session_eht_capable(struct mac_context *mac,
2265 struct pe_session *session)
2266 {
2267 }
2268
2269 static inline void
lim_add_bss_eht_cfg(struct bss_params * add_bss,struct pe_session * session)2270 lim_add_bss_eht_cfg(struct bss_params *add_bss, struct pe_session *session)
2271 {
2272 }
2273
2274 static inline void
lim_decide_eht_op(struct mac_context * mac_ctx,uint32_t * mlme_eht_ops,struct pe_session * session)2275 lim_decide_eht_op(struct mac_context *mac_ctx, uint32_t *mlme_eht_ops,
2276 struct pe_session *session)
2277 {
2278 }
2279
2280 static inline void
lim_update_stads_eht_capable(tpDphHashNode sta_ds,tpSirAssocReq assoc_req)2281 lim_update_stads_eht_capable(tpDphHashNode sta_ds, tpSirAssocReq assoc_req)
2282 {
2283 }
2284
2285 static inline void
lim_update_sta_eht_capable(struct mac_context * mac,tpAddStaParams add_sta_params,tpDphHashNode sta_ds,struct pe_session * session_entry)2286 lim_update_sta_eht_capable(struct mac_context *mac,
2287 tpAddStaParams add_sta_params,
2288 tpDphHashNode sta_ds,
2289 struct pe_session *session_entry)
2290 {
2291 }
2292
2293 static inline void
lim_update_session_eht_capable_chan_switch(struct mac_context * mac,struct pe_session * session,uint32_t new_chan_freq)2294 lim_update_session_eht_capable_chan_switch(struct mac_context *mac,
2295 struct pe_session *session,
2296 uint32_t new_chan_freq)
2297 {
2298 }
2299
2300 static inline void
lim_update_bss_eht_capable(struct mac_context * mac,struct bss_params * add_bss)2301 lim_update_bss_eht_capable(struct mac_context *mac,
2302 struct bss_params *add_bss)
2303 {
2304 }
2305
2306 static inline void
lim_log_eht_cap(struct mac_context * mac,tDot11fIEeht_cap * eht_cap)2307 lim_log_eht_cap(struct mac_context *mac, tDot11fIEeht_cap *eht_cap)
2308 {
2309 }
2310
2311 static inline void
lim_set_eht_caps(struct mac_context * mac,uint8_t * ie_start,uint32_t num_bytes,uint8_t band,uint8_t vdev_id)2312 lim_set_eht_caps(struct mac_context *mac, uint8_t *ie_start,
2313 uint32_t num_bytes, uint8_t band, uint8_t vdev_id)
2314 {
2315 }
2316
2317 static inline QDF_STATUS
lim_send_eht_caps_ie(struct mac_context * mac_ctx,enum QDF_OPMODE device_mode,uint8_t vdev_id)2318 lim_send_eht_caps_ie(struct mac_context *mac_ctx,
2319 enum QDF_OPMODE device_mode, uint8_t vdev_id)
2320 {
2321 return QDF_STATUS_SUCCESS;
2322 }
2323
2324 static inline void
lim_log_eht_op(struct mac_context * mac,tDot11fIEeht_op * eht_ops,struct pe_session * session)2325 lim_log_eht_op(struct mac_context *mac, tDot11fIEeht_op *eht_ops,
2326 struct pe_session *session)
2327 {
2328 }
2329
2330 static inline void
lim_update_stads_eht_caps(struct mac_context * mac_ctx,tpDphHashNode sta_ds,tpSirAssocRsp assoc_rsp,struct pe_session * session_entry,tSchBeaconStruct * beacon)2331 lim_update_stads_eht_caps(struct mac_context *mac_ctx,
2332 tpDphHashNode sta_ds, tpSirAssocRsp assoc_rsp,
2333 struct pe_session *session_entry,
2334 tSchBeaconStruct *beacon)
2335 {
2336 }
2337
2338 static inline void
lim_update_stads_eht_bw_320mhz(struct pe_session * session,tpDphHashNode sta_ds)2339 lim_update_stads_eht_bw_320mhz(struct pe_session *session,
2340 tpDphHashNode sta_ds)
2341 {
2342 }
2343
2344 static inline bool
lim_is_session_chwidth_320mhz(struct pe_session * session)2345 lim_is_session_chwidth_320mhz(struct pe_session *session)
2346 {
2347 return false;
2348 }
2349
2350 static inline void
lim_update_eht_caps_mcs(struct mac_context * mac,struct pe_session * session)2351 lim_update_eht_caps_mcs(struct mac_context *mac, struct pe_session *session)
2352 {
2353 }
2354
2355 static inline void
lim_update_des_chan_puncture(struct wlan_channel * des_chan,struct ch_params * ch_params)2356 lim_update_des_chan_puncture(struct wlan_channel *des_chan,
2357 struct ch_params *ch_params)
2358 {
2359 }
2360
2361 static inline void
lim_overwrite_sta_puncture(struct pe_session * session,struct ch_params * ch_param)2362 lim_overwrite_sta_puncture(struct pe_session *session,
2363 struct ch_params *ch_param)
2364 {
2365 }
2366 #endif /* WLAN_FEATURE_11BE */
2367
2368 #ifdef WLAN_FEATURE_11BE_MLO
2369 /**
2370 * lim_extract_per_link_id() - Extract Link ID per vdev and share with FW
2371 * @session: pointer to PE session
2372 * @add_bss: pointer to ADD BSS params
2373 * @assoc_rsp: pointer to assoc response
2374 *
2375 * Return: None
2376 */
2377 void lim_extract_per_link_id(struct pe_session *session,
2378 struct bss_params *add_bss,
2379 tpSirAssocRsp assoc_rsp);
2380
2381 /**
2382 * lim_extract_ml_info() - Extract ML info and send with FW
2383 * @session: pointer to PE session
2384 * @add_bss: pointer to ADD BSS params
2385 * @assoc_rsp: pointer to assoc response
2386 *
2387 * Return: None
2388 */
2389 void lim_extract_ml_info(struct pe_session *session,
2390 struct bss_params *add_bss,
2391 tpSirAssocRsp assoc_rsp);
2392
2393 /**
2394 * lim_intersect_ap_emlsr_caps() - Intersect AP and self STA EML capabilities
2395 * @mac_ctx: Global MAC context
2396 * @session: pointer to PE session
2397 * @add_bss: pointer to ADD BSS params
2398 * @assoc_rsp: pointer to assoc response
2399 *
2400 * Return: None
2401 */
2402 void lim_intersect_ap_emlsr_caps(struct mac_context *mac_ctx,
2403 struct pe_session *session,
2404 struct bss_params *add_bss,
2405 tpSirAssocRsp assoc_rsp);
2406
2407 /**
2408 * lim_extract_msd_caps() - Extract MLD AP MSD capabilities and assign
2409 * the same caps to link vdev
2410 * @mac_ctx: Global MAC context
2411 * @session: pointer to PE session
2412 * @add_bss: pointer to ADD BSS params
2413 * @assoc_rsp: pointer to assoc response
2414 *
2415 * Return: None
2416 */
2417 void lim_extract_msd_caps(struct mac_context *mac_ctx,
2418 struct pe_session *session,
2419 struct bss_params *add_bss,
2420 tpSirAssocRsp assoc_rsp);
2421 #else
2422 static inline void
lim_extract_per_link_id(struct pe_session * session,struct bss_params * add_bss,tpSirAssocRsp assoc_rsp)2423 lim_extract_per_link_id(struct pe_session *session,
2424 struct bss_params *add_bss,
2425 tpSirAssocRsp assoc_rsp)
2426 {
2427 }
2428
2429 static inline void
lim_extract_ml_info(struct pe_session * session,struct bss_params * add_bss,tpSirAssocRsp assoc_rsp)2430 lim_extract_ml_info(struct pe_session *session,
2431 struct bss_params *add_bss,
2432 tpSirAssocRsp assoc_rsp)
2433 {
2434 }
2435
2436 static inline void
lim_intersect_ap_emlsr_caps(struct mac_context * mac_ctx,struct pe_session * session,struct bss_params * add_bss,tpSirAssocRsp assoc_rsp)2437 lim_intersect_ap_emlsr_caps(struct mac_context *mac_ctx,
2438 struct pe_session *session,
2439 struct bss_params *add_bss,
2440 tpSirAssocRsp assoc_rsp)
2441 {
2442 }
2443
2444 static inline void
lim_extract_msd_caps(struct mac_context * mac_ctx,struct pe_session * session,struct bss_params * add_bss,tpSirAssocRsp assoc_rsp)2445 lim_extract_msd_caps(struct mac_context *mac_ctx,
2446 struct pe_session *session,
2447 struct bss_params *add_bss,
2448 tpSirAssocRsp assoc_rsp)
2449 {
2450 }
2451 #endif /* WLAN_FEATURE_11BE_MLO */
2452
2453 #if defined(CONFIG_BAND_6GHZ) && defined(WLAN_FEATURE_11AX)
2454 /**
2455 * lim_send_he_6g_band_caps_ie() - Send HE 6ghz band caps to FW
2456 * @mac_ctx: Global MAC context
2457 * @vdev_id: vdev id
2458 *
2459 * Send HE 6ghz band capabilities IE to firmware
2460 *
2461 * Return: QDF_STATUS_SUCCESS on success
2462 */
2463 QDF_STATUS lim_send_he_6g_band_caps_ie(struct mac_context *mac_ctx,
2464 uint8_t vdev_id);
2465 #else
2466 static inline
lim_send_he_6g_band_caps_ie(struct mac_context * mac_ctx,uint8_t vdev_id)2467 QDF_STATUS lim_send_he_6g_band_caps_ie(struct mac_context *mac_ctx,
2468 uint8_t vdev_id)
2469 {
2470 return QDF_STATUS_SUCCESS;
2471 }
2472 #endif
2473
2474 /**
2475 * lim_decrement_pending_mgmt_count: Decrement mgmt frame count
2476 * @mac_ctx: Pointer to global MAC structure
2477 *
2478 * This function is used to decrement pe mgmt count once frame
2479 * removed from queue
2480 *
2481 * Return: None
2482 */
2483 void lim_decrement_pending_mgmt_count(struct mac_context *mac_ctx);
2484
2485 /**
2486 * lim_check_if_vendor_oui_match() - Check if the given OUI match in IE buffer
2487 * @mac_ctx: MAC context
2488 * @ie: IE buffer
2489 * @ie_len: length of @ie
2490 *
2491 * This API is used to check if given vendor OUI
2492 * matches in given IE buffer
2493 *
2494 * Return: True, if mataches. False otherwise
2495 */
2496 bool lim_check_if_vendor_oui_match(struct mac_context *mac_ctx,
2497 uint8_t *oui, uint8_t oui_len,
2498 uint8_t *ie, uint8_t ie_len);
2499
2500 QDF_STATUS lim_util_get_type_subtype(void *pkt, uint8_t *type,
2501 uint8_t *subtype);
2502
2503 /**
2504 * lim_get_min_session_txrate() - Get the minimum rate supported in the session
2505 * @session: Pointer to PE session
2506 * @pre_auth_freq: Pointer to pre_auth_freq
2507 *
2508 * This API will find the minimum rate supported by the given PE session and
2509 * return the enum rateid corresponding to the rate.
2510 *
2511 * Return: enum rateid
2512 */
2513 enum rateid lim_get_min_session_txrate(struct pe_session *session,
2514 qdf_freq_t *pre_auth_freq);
2515
2516 /**
2517 * lim_send_dfs_chan_sw_ie_update() - updates the channel switch IE in beacon
2518 * template
2519 *
2520 * @mac_ctx - pointer to global mac context
2521 * @session - A pointer to pesession
2522 * Return None
2523 */
2524 void lim_send_dfs_chan_sw_ie_update(struct mac_context *mac_ctx,
2525 struct pe_session *session);
2526
2527 /**
2528 * lim_process_ap_ecsa_timeout() -process ECSA timeout which decrement csa count
2529 * in beacon and update beacon template in firmware
2530 *
2531 * @data - A pointer to pesession
2532 * Return None
2533 */
2534 void lim_process_ap_ecsa_timeout(void *session);
2535
2536 /**
2537 * lim_send_csa_tx_complete() - send csa tx complete event when beacon
2538 * count decremented to zero
2539 *
2540 * @vdev_id - vdev_id
2541 * Return None
2542 */
2543 void lim_send_csa_tx_complete(uint8_t vdev_id);
2544
2545 /**
2546 * lim_is_csa_tx_pending() - check id csa tx ind not sent
2547 *
2548 * @vdev_id - vdev_id
2549 * Return - true if csa tx ind is not sent else false
2550 */
2551 bool lim_is_csa_tx_pending(uint8_t vdev_id);
2552
2553 /**
2554 * lim_send_stop_bss_failure_resp() -send failure delete bss resp to sme
2555 * @mac_ctx: mac ctx
2556 * @session: session pointer
2557 *
2558 * Return None
2559 */
2560 void lim_send_stop_bss_failure_resp(struct mac_context *mac_ctx,
2561 struct pe_session *session);
2562
2563 /**
2564 * lim_delete_all_peers() -delete all connected peers
2565 * @session: session pointer
2566 *
2567 * Return None
2568 */
2569 void lim_delete_all_peers(struct pe_session *session);
2570
2571 /**
2572 * lim_send_vdev_stop() -send delete bss/stop vdev req
2573 * @session: session pointer
2574 *
2575 * Return QDF_STATUS
2576 */
2577 QDF_STATUS lim_send_vdev_stop(struct pe_session *session);
2578
2579 /**
2580 * lim_send_vdev_stop() -send delete bss/stop vdev req for STA
2581 * @session: session pointer
2582 *
2583 * Return QDF_STATUS
2584 */
2585 QDF_STATUS lim_sta_send_del_bss(struct pe_session *session);
2586
2587 /**
2588 * lim_send_start_bss_confirm() -send start bss confirm req
2589 * @mac_ctx: pointer to global mac structure
2590 * @start_cnf: start confirm structure pointer
2591 *
2592 * Return None
2593 */
2594 void lim_send_start_bss_confirm(struct mac_context *mac_ctx,
2595 tLimMlmStartCnf *start_cnf);
2596
2597 /**
2598 * lim_send_chan_switch_action_frame()- Send an action frame
2599 * containing CSA IE or ECSA IE depending on the connected
2600 * sta capability.
2601 *
2602 * @mac_ctx: pointer to global mac structure
2603 * @new_channel_freq: new channel freq(Mhz) to switch to.
2604 * @ch_bandwidth: ch bw of enum phy_ch_width
2605 * @session_entry: pe session
2606 *
2607 * Return: void
2608 */
2609 void lim_send_chan_switch_action_frame(struct mac_context *mac_ctx,
2610 uint16_t new_channel_freq,
2611 enum phy_ch_width ch_bandwidth,
2612 struct pe_session *session_entry);
2613
2614 /**
2615 * send_extended_chan_switch_action_frame()- function to send ECSA
2616 * action frame for each sta connected to SAP/GO and AP in case of
2617 * STA .
2618 * @mac_ctx: pointer to global mac structure
2619 * @new_channel_freq: new channel to switch to.
2620 * @ch_bandwidth: channel bw of type enum phy_ch_width
2621 * @session_entry: pe session
2622 *
2623 * This function is called to send ECSA frame for STA/CLI and SAP/GO.
2624 *
2625 * Return: void
2626 */
2627 void send_extended_chan_switch_action_frame(struct mac_context *mac_ctx,
2628 uint16_t new_channel_freq,
2629 enum phy_ch_width ch_bandwidth,
2630 struct pe_session *session_entry);
2631
2632 /**
2633 * lim_process_obss_detection_ind() - Process obss detection indication
2634 * @mac_ctx: Pointer to Global MAC structure.
2635 * @obss_detection: obss detection info.
2636 *
2637 * Process obss detection indication and apply necessary protection for
2638 * the given AP session.
2639 *
2640 * Return: QDF_STATUS
2641 */
2642 QDF_STATUS lim_process_obss_detection_ind(struct mac_context *mac_ctx,
2643 struct wmi_obss_detect_info
2644 *obss_detection);
2645
2646 /**
2647 * lim_obss_send_detection_cfg() - Send obss detection configuration to firmware
2648 * @mac_ctx: Pointer to Global MAC structure
2649 * @session: Pointer to session
2650 * @force: Force to send new configuration even if new cfg same as old
2651 *
2652 * Generate new cfg based on current protection status and send new cfg to
2653 * firmware.
2654 *
2655 * Return: QDF_STATUS
2656 */
2657 QDF_STATUS lim_obss_send_detection_cfg(struct mac_context *mac_ctx,
2658 struct pe_session *session,
2659 bool force);
2660
2661 /**
2662 * lim_obss_generate_detection_config() - get new obss offload detection cfg
2663 * @mac_ctx: Pointer to Global MAC structure
2664 * @session: Pointer to session
2665 * @cfg: Obss detection cfg buffer pointer
2666 *
2667 * Generate new cfg based on current protection status.
2668 *
2669 * Return: QDF_STATUS
2670 */
2671 QDF_STATUS lim_obss_generate_detection_config(struct mac_context *mac_ctx,
2672 struct pe_session *session,
2673 struct obss_detection_cfg *cfg);
2674
2675 /**
2676 * lim_enable_obss_detection_config() - Enable obss detection
2677 * @mac_ctx: Pointer to Global MAC structure
2678 * @session: Pointer to session
2679 *
2680 * This function will enable legacy obss detection (by starting timer)
2681 * or also offload based detection based on support.
2682 *
2683 * Return: None
2684 */
2685 void lim_enable_obss_detection_config(struct mac_context *mac_ctx,
2686 struct pe_session *session);
2687
2688 #ifdef WLAN_SUPPORT_TWT
2689 void lim_set_peer_twt_cap(struct pe_session *session, struct s_ext_cap *ext_cap);
2690 #else
lim_set_peer_twt_cap(struct pe_session * session,struct s_ext_cap * ext_cap)2691 static inline void lim_set_peer_twt_cap(struct pe_session *session,
2692 struct s_ext_cap *ext_cap)
2693 {
2694 }
2695 #endif
2696
2697 /**
2698 * lim_rx_invalid_peer_process() - process rx invalid peer indication
2699 * @mac_ctx: Pointer to Global MAC structure
2700 * @lim_msg: Pointer to scheduler message
2701 *
2702 * This function will process the rx data invalid peer indication,
2703 * if the vdev operation mode is SAP, then send the deauth mgmt frame
2704 * to STA.
2705 *
2706 * Return: None
2707 */
2708 void lim_rx_invalid_peer_process(struct mac_context *mac_ctx,
2709 struct scheduler_msg *lim_msg);
2710
2711 /**
2712 * lim_req_send_delba_ind_process() - process send delba indication
2713 * @mac_ctx: mac context
2714 * @lim_msg: lim message
2715 *
2716 * This function will process the send delba indication from DP.
2717 *
2718 * Return: None
2719 */
2720 void lim_req_send_delba_ind_process(struct mac_context *mac_ctx,
2721 struct scheduler_msg *lim_msg);
2722
2723 /**
2724 * lim_send_beacon() - send beacon indication to firmware
2725 * @mac_ctx: Pointer to Global MAC structure
2726 * @session: session pointer
2727 *
2728 * Return: None
2729 */
2730 void lim_send_beacon(struct mac_context *mac_ctx, struct pe_session *session);
2731
2732 /**
2733 * lim_ndi_mlme_vdev_up_transition() - Send event to transition NDI VDEV to UP
2734 * @session: session pointer
2735 *
2736 * Return: None
2737 */
2738 void lim_ndi_mlme_vdev_up_transition(struct pe_session *session);
2739
2740 /**
2741 * lim_sap_move_to_cac_wait_state() - move to cac wait state
2742 * @sap_ctx: SAP context
2743 *
2744 * Return: QDF_STATUS
2745 */
2746 QDF_STATUS lim_sap_move_to_cac_wait_state(struct pe_session *session);
2747
2748 /**
2749 * lim_disconnect_complete - Deliver vdev disconnect complete event or
2750 * STA send deleting bss
2751 * @session: PE session pointer
2752 * @del_bss: Whether to call lim_sta_send_del_bss
2753 *
2754 * API delivers vdev disconnect complete event
2755 *
2756 * Return: None
2757 */
2758 void lim_disconnect_complete(struct pe_session *session, bool del_bss);
2759
2760 /**
2761 * lim_ap_mlme_vdev_rnr_notify() - SAP is changed, notify co-located sap to
2762 * update RNR IE
2763 * @session: PE session pointer
2764 *
2765 * Return: QDF_STATUS
2766 */
2767 QDF_STATUS lim_ap_mlme_vdev_rnr_notify(struct pe_session *session);
2768
2769 /**
2770 * lim_sta_mlme_vdev_stop_send() - send VDEV stop
2771 * @vdev_mlme_obj: VDEV MLME comp object
2772 * @data_len: data size
2773 * @data: event data
2774 *
2775 * API invokes vdev stop
2776 *
2777 * Return: SUCCESS on successful completion of vdev stop
2778 * FAILURE, if it fails due to any
2779 */
2780 QDF_STATUS lim_sta_mlme_vdev_stop_send(struct vdev_mlme_obj *vdev_mlme,
2781 uint16_t data_len, void *data);
2782
2783 /**
2784 * lim_sta_mlme_vdev_req_fail() - send VDEV start req failure
2785 * @vdev_mlme_obj: VDEV MLME comp object
2786 * @data_len: data size
2787 * @data: event data
2788 *
2789 * API invokes vdev stop
2790 *
2791 * Return: SUCCESS on successful completion of req failure operation
2792 * FAILURE, if it fails due to any
2793 */
2794 QDF_STATUS lim_sta_mlme_vdev_req_fail(struct vdev_mlme_obj *vdev_mlme,
2795 uint16_t data_len, void *data);
2796
2797 /**
2798 * lim_sta_mlme_vdev_start_send() - send VDEV start
2799 * @vdev_mlme_obj: VDEV MLME comp object
2800 * @data_len: data size
2801 * @data: event data
2802 *
2803 * API invokes vdev start
2804 *
2805 * Return: SUCCESS on successful completion of vdev start
2806 * FAILURE, if it fails due to any
2807 */
2808 QDF_STATUS lim_sta_mlme_vdev_start_send(struct vdev_mlme_obj *vdev_mlme,
2809 uint16_t data_len, void *data);
2810
2811 /**
2812 * lim_sta_mlme_vdev_restart_send() - send VDEV restart
2813 * @vdev_mlme_obj: VDEV MLME comp object
2814 * @data_len: data size
2815 * @data: event data
2816 *
2817 * API invokes vdev restart
2818 *
2819 * Return: SUCCESS on successful completion of vdev restart
2820 * FAILURE, if it fails due to any
2821 */
2822 QDF_STATUS lim_sta_mlme_vdev_restart_send(struct vdev_mlme_obj *vdev_mlme,
2823 uint16_t data_len, void *data);
2824
2825 /**
2826 * lim_ap_mlme_vdev_start_send() - Invokes VDEV start operation
2827 * @vdev_mlme_obj: VDEV MLME comp object
2828 * @data_len: data size
2829 * @data: event data
2830 *
2831 * API invokes VDEV start operation
2832 *
2833 * Return: SUCCESS on successful completion of start operation
2834 * FAILURE, if it fails due to any
2835 */
2836 QDF_STATUS lim_ap_mlme_vdev_start_send(struct vdev_mlme_obj *vdev_mlme,
2837 uint16_t data_len, void *event);
2838 /*
2839 * lim_ap_mlme_vdev_update_beacon() - Updates beacon
2840 * @vdev_mlme_obj: VDEV MLME comp object
2841 * @op: beacon update type
2842 * @data_len: data size
2843 * @data: event data
2844 *
2845 * API updates/allocates/frees the beacon
2846 *
2847 * Return: SUCCESS on successful update of beacon
2848 * FAILURE, if it fails due to any
2849 */
2850 QDF_STATUS lim_ap_mlme_vdev_update_beacon(struct vdev_mlme_obj *vdev_mlme,
2851 enum beacon_update_op op,
2852 uint16_t data_len, void *data);
2853
2854 /**
2855 * lim_ap_mlme_vdev_up_send() - VDEV up operation
2856 * @vdev_mlme_obj: VDEV MLME comp object
2857 * @data_len: data size
2858 * @data: event data
2859 *
2860 * API invokes VDEV up operations
2861 *
2862 * Return: SUCCESS on successful completion of up operation
2863 * FAILURE, if it fails due to any
2864 */
2865 QDF_STATUS lim_ap_mlme_vdev_up_send(struct vdev_mlme_obj *vdev_mlme,
2866 uint16_t data_len, void *data);
2867
2868 /**
2869 * lim_ap_mlme_vdev_disconnect_peers - Disconnect peers
2870 * @vdev_mlme_obj: VDEV MLME comp object
2871 * @data_len: data size
2872 * @data: event data
2873 *
2874 * API trigger stations disconnection connected with AP
2875 *
2876 * Return: SUCCESS on successful invocation of station disconnection
2877 * FAILURE, if it fails due to any
2878 */
2879 QDF_STATUS lim_ap_mlme_vdev_disconnect_peers(struct vdev_mlme_obj *vdev_mlme,
2880 uint16_t data_len, void *data);
2881
2882 /**
2883 * lim_ap_mlme_vdev_stop_send - Invokes VDEV stop operation
2884 * @vdev_mlme_obj: VDEV MLME comp object
2885 * @data_len: data size
2886 * @data: event data
2887 *
2888 * API invokes VDEV stop operation
2889 *
2890 * Return: SUCCESS on successful completion of stop operation
2891 * FAILURE, if it fails due to any
2892 */
2893 QDF_STATUS lim_ap_mlme_vdev_stop_send(struct vdev_mlme_obj *vdev_mlme,
2894 uint16_t data_len, void *data);
2895
2896 /**
2897 * lim_ap_mlme_vdev_restart_send - Invokes VDEV restart operation
2898 * @vdev_mlme_obj: VDEV MLME comp object
2899 * @data_len: data size
2900 * @data: event data
2901 *
2902 * API invokes VDEV restart operation
2903 *
2904 * Return: SUCCESS on successful completion of restart operation
2905 * FAILURE, if it fails due to any
2906 */
2907 QDF_STATUS lim_ap_mlme_vdev_restart_send(struct vdev_mlme_obj *vdev_mlme,
2908 uint16_t data_len, void *data);
2909
2910 /**
2911 * lim_ap_mlme_vdev_restart_send - Invokes VDEV sta disconnect operation
2912 * @vdev_mlme_obj: VDEV MLME comp object
2913 * @data_len: data size
2914 * @data: event data
2915 *
2916 * API invokes VDEV sta disconnect operation
2917 *
2918 * Return: SUCCESS on successful completion of sta disconnect operation
2919 * FAILURE, if it fails due to any
2920 */
2921 QDF_STATUS
2922 lim_sta_mlme_vdev_sta_disconnect_start(struct vdev_mlme_obj *vdev_mlme,
2923 uint16_t data_len, void *data);
2924
2925 /**
2926 * lim_ap_mlme_vdev_start_req_failed - handle vdev start req failure
2927 * @vdev_mlme_obj: VDEV MLME comp object
2928 * @data_len: data size
2929 * @data: event data
2930 *
2931 * API invokes on START fail response
2932 *
2933 * Return: SUCCESS on successful invocation of callback
2934 * FAILURE, if it fails due to any
2935 */
2936 QDF_STATUS lim_ap_mlme_vdev_start_req_failed(struct vdev_mlme_obj *vdev_mlme,
2937 uint16_t data_len, void *data);
2938
2939 /**
2940 * lim_mon_mlme_vdev_start_send() - Invokes VDEV start operation
2941 * @vdev_mlme_obj: VDEV MLME comp object
2942 * @data_len: data size
2943 * @data: event data
2944 *
2945 * API invokes VDEV start operation
2946 *
2947 * Return: SUCCESS on successful completion of start operation
2948 * FAILURE, if it fails due to any
2949 */
2950 QDF_STATUS lim_mon_mlme_vdev_start_send(struct vdev_mlme_obj *vdev_mlme,
2951 uint16_t data_len, void *event);
2952
2953 /**
2954 * lim_get_capability_info() - Get capability information
2955 * @mac: pointer to mac data
2956 * @pcap: pointer to return capability information
2957 * @pe_session: pointer to pe session
2958 *
2959 * Return: SUCCESS on successful get capability information
2960 * FAILURE, if it fails due to any
2961 */
2962 QDF_STATUS lim_get_capability_info(struct mac_context *mac, uint16_t *pCap,
2963 struct pe_session *pe_session);
2964
2965 /**
2966 * lim_op_class_from_bandwidth() - get op class from bandwidth
2967 * @mac_ctx: mac context
2968 * @channel_freq: channel frequency MHz
2969 * @ch_bandwidth: channel bandwidth
2970 * @offset: second channel offfset
2971 *
2972 * This API can get the operating class based on channel freq,
2973 * bandwidth and second channel offset.
2974 *
2975 * Return: op class
2976 */
2977 uint8_t lim_op_class_from_bandwidth(struct mac_context *mac_ctx,
2978 uint16_t channel_freq,
2979 enum phy_ch_width ch_bandwidth,
2980 enum offset_t offset);
2981
2982 /**
2983 * lim_flush_bssid() - flush bssid from scan cache
2984 * @mac_ctx: pointer to mac data
2985 * @bssid: bssid to be flushed
2986 *
2987 * Return: void
2988 */
2989 void lim_flush_bssid(struct mac_context *mac_ctx, uint8_t *bssid);
2990
2991 /**
2992 * lim_is_sha384_akm() - Function to check if the negotiated AKM for the
2993 * current session is based on sha384 key derivation function.
2994 * @mac_ctx: pointer to mac data
2995 * @akm: negotiated AKM for the current session
2996 *
2997 * Return: true if akm is sha384 based kdf or false
2998 */
2999 bool lim_is_sha384_akm(enum ani_akm_type akm);
3000
3001
3002 /**
3003 * lim_pre_vdev_start() - set set vdev params from session
3004 * @mac: pointer to mac context
3005 * @mlme_obj: vdev mlme obj
3006 * @session: pointer to pe session
3007 *
3008 * Return: QDF_STATUS
3009 */
3010 QDF_STATUS lim_pre_vdev_start(struct mac_context *mac,
3011 struct vdev_mlme_obj *mlme_obj,
3012 struct pe_session *session);
3013
3014 /**
3015 * lim_set_ch_phy_mode() - set channel phy mode
3016 * @vdev: pointer to vdev
3017 *
3018 * Return: QDF_STATUS
3019 */
3020 QDF_STATUS
3021 lim_set_ch_phy_mode(struct wlan_objmgr_vdev *vdev, uint8_t dot11mode);
3022
3023 #if defined(CONFIG_BAND_6GHZ) && defined(WLAN_FEATURE_11AX)
3024 /**
3025 * lim_ap_check_6g_compatible_peer() - check all client support 6Ghz band
3026 * @mac_ctx: mac context
3027 * @session: pe session
3028 *
3029 * Return: void
3030 */
3031 void lim_ap_check_6g_compatible_peer(struct mac_context *mac_ctx,
3032 struct pe_session *session);
3033 #else
lim_ap_check_6g_compatible_peer(struct mac_context * mac_ctx,struct pe_session * session)3034 static inline void lim_ap_check_6g_compatible_peer(
3035 struct mac_context *mac_ctx, struct pe_session *session)
3036 {}
3037 #endif
3038
3039 /**
3040 * enum max_tx_power_interpretation
3041 * @LOCAL_EIRP: Local power interpretation
3042 * @LOCAL_EIRP_PSD: Local PSD power interpretation
3043 * @REGULATORY_CLIENT_EIRP: Regulatory power interpretation
3044 * @REGULATORY_CLIENT_EIRP_PSD: Regulatory PSD power interpretation
3045 */
3046 enum max_tx_power_interpretation {
3047 LOCAL_EIRP = 0,
3048 LOCAL_EIRP_PSD,
3049 REGULATORY_CLIENT_EIRP,
3050 REGULATORY_CLIENT_EIRP_PSD,
3051 };
3052
3053 /**
3054 * lim_parse_tpe_ie() - get the power info from the TPE IE
3055 * @mac_ctx: mac context
3056 * @session: pe session
3057 * @tpe_ies: list of TPE IEs
3058 * @num_tpe_ies: number of TPE IEs in list
3059 * @he_op: HE OP IE
3060 * @has_tpe_updated: flag set to true only if the TPE values have changed
3061 *
3062 * Return: void
3063 */
3064 void lim_parse_tpe_ie(struct mac_context *mac, struct pe_session *session,
3065 tDot11fIEtransmit_power_env *tpe_ies,
3066 uint8_t num_tpe_ies, tDot11fIEhe_op *he_op,
3067 bool *has_tpe_updated);
3068
3069 /**
3070 * lim_process_tpe_ie_from_beacon() - get the TPE IE from the BSS descriptor
3071 * @mac_ctx: mac context
3072 * @session: pe session
3073 * @bss_desc: pointer to BSS descriptor
3074 * @has_tpe_updated: flag set to true only if the TPE values have changed
3075 *
3076 * Return: void
3077 */
3078 void lim_process_tpe_ie_from_beacon(struct mac_context *mac,
3079 struct pe_session *session,
3080 struct bss_description *bss_desc,
3081 bool *has_tpe_updated);
3082
3083 /**
3084 * lim_send_conc_params_update() - Function to check and update params based on
3085 * STA/SAP concurrency.such as EDCA params
3086 * and RTS profile. If updated, it will also
3087 * also send the updated parameters to FW.
3088 *
3089 * Return: void
3090 */
3091 void lim_send_conc_params_update(void);
3092
3093 /**
3094 * lim_is_self_and_peer_ocv_capable() - check whether OCV capable
3095 * @mac: pointer to mac data
3096 * @pe_session: pointer to pe session
3097 .* @peer: peer mac address
3098 *
3099 * Return: true if both self and peer ocv capable
3100 */
3101 bool
3102 lim_is_self_and_peer_ocv_capable(struct mac_context *mac,
3103 uint8_t *peer,
3104 struct pe_session *pe_session);
3105
3106 /**
3107 * lim_fill_oci_params() - fill oci parameters
3108 * @mac: pointer to mac data
3109 * @session: pointer to pe session
3110 .* @oci: pointer of tDot11fIEoci
3111 * @peer: peer mac address
3112 * @tx_chan_width: tx channel width in MHz
3113 *
3114 * Return: void
3115 */
3116 void
3117 lim_fill_oci_params(struct mac_context *mac, struct pe_session *session,
3118 tDot11fIEoci *oci, uint8_t *peer, uint16_t *tx_chan_width);
3119
3120 #ifdef WLAN_FEATURE_SAE
3121 /**
3122 * lim_process_sae_msg() - Process SAE message
3123 * @mac: Global MAC pointer
3124 * @body: Buffer pointer
3125 *
3126 * Return: None
3127 */
3128 void lim_process_sae_msg(struct mac_context *mac, struct sir_sae_msg *body);
3129
3130 /**
3131 * lim_trigger_auth_req_sae() - sends SAE auth request to sme
3132 * @mac_ctx: Global MAC pointer
3133 * @session: pointer to pe session
3134 * @peer_bssid: bssid to do SAE auth
3135 *
3136 * Return: QDF_STATUS
3137 */
3138 QDF_STATUS lim_trigger_auth_req_sae(struct mac_context *mac_ctx,
3139 struct pe_session *session,
3140 struct qdf_mac_addr *peer_bssid);
3141 #else
lim_process_sae_msg(struct mac_context * mac,void * body)3142 static inline void lim_process_sae_msg(struct mac_context *mac, void *body)
3143 {}
3144
lim_trigger_auth_req_sae(struct mac_context * mac_ctx,struct pe_session * session,struct qdf_mac_addr * peer_bssid)3145 static inline QDF_STATUS lim_trigger_auth_req_sae(
3146 struct mac_context *mac_ctx,
3147 struct pe_session *session,
3148 struct qdf_mac_addr *peer_bssid)
3149 {}
3150 #endif
3151
3152 /**
3153 * lim_get_he_max_mcs_idx() - get max mcs index from he cap
3154 * @ch_width: channel width
3155 * @he_cap: pointer to tDot11fIEhe_cap
3156 *
3157 * Return: max mcs index from he cap
3158 */
3159 uint8_t lim_get_he_max_mcs_idx(enum phy_ch_width ch_width,
3160 tDot11fIEhe_cap *he_cap);
3161
3162 /**
3163 * lim_get_vht_max_mcs_idx() - get max mcs index from vht cap
3164 * @vht_cap: pointer to tDot11fIEVHTCaps
3165 *
3166 * Return: max mcs index from vht cap
3167 */
3168 uint8_t lim_get_vht_max_mcs_idx(tDot11fIEVHTCaps *vht_cap);
3169
3170 /**
3171 * lim_get_ht_max_mcs_idx() - get max mcs index from ht cap
3172 * @ht_cap: pointer to tDot11fIEHTCaps
3173 *
3174 * Return: max mcs index from ht cap
3175 */
3176 uint8_t lim_get_ht_max_mcs_idx(tDot11fIEHTCaps *ht_cap);
3177
3178 /**
3179 * lim_get_max_rate_idx() - get max rate index from tSirMacRateSet
3180 * @rateset: pointer to tSirMacRateSet
3181 *
3182 * Return: max rate index from tSirMacRateSet
3183 */
3184 uint8_t lim_get_max_rate_idx(tSirMacRateSet *rateset);
3185
3186 /**
3187 * lim_update_nss() - Function to update NSS
3188 * @mac_ctx: pointer to Global Mac structure
3189 * @sta_ds: pointer to tpDphHashNode
3190 * @rx_nss: Rx NSS in operating mode notification
3191 * @session: pointer to pe_session
3192 *
3193 * function to update NSS
3194 *
3195 * Return: None
3196 */
3197 void lim_update_nss(struct mac_context *mac_ctx, tpDphHashNode sta_ds,
3198 uint8_t rx_nss, struct pe_session *session);
3199
3200 /**
3201 * lim_update_channel_width() - Function to update channel width
3202 * @mac_ctx: pointer to Global Mac structure
3203 * @sta_ptr: pointer to tpDphHashNode
3204 * @session: pointer to pe_session
3205 * @ch_width: Channel width in operating mode notification
3206 * @new_ch_width: Final channel bandwifdth
3207 *
3208 * function to send WMI_PEER_SET_PARAM_CMDID to FW to update ch_width
3209 *
3210 * Return: Success or Failure
3211 */
3212 bool lim_update_channel_width(struct mac_context *mac_ctx,
3213 tpDphHashNode sta_ptr,
3214 struct pe_session *session,
3215 enum phy_ch_width ch_width,
3216 enum phy_ch_width *new_ch_width);
3217
3218 /**
3219 * lim_get_vht_ch_width() - Function to get the VHT
3220 * operating channel width based on frequency params
3221 *
3222 * @vht_cap: Pointer to VHT Caps IE.
3223 * @vht_op: Pointer to VHT Operation IE.
3224 * @ht_info: Pointer to HT Info IE.
3225 *
3226 * Return: VHT channel width
3227 */
3228 uint8_t lim_get_vht_ch_width(tDot11fIEVHTCaps *vht_cap,
3229 tDot11fIEVHTOperation *vht_op,
3230 tDot11fIEHTInfo *ht_info);
3231
3232 /*
3233 * lim_set_tpc_power() - Function to compute and send TPC power level to the
3234 * FW based on the opmode of the pe_session
3235 *
3236 * @mac_ctx: Pointer to Global MAC structure
3237 * @pe_session: Pointer to session
3238 * @bss_desc: Pointer to bss description
3239 *
3240 * Return: TPC status
3241 */
3242 bool
3243 lim_set_tpc_power(struct mac_context *mac_ctx, struct pe_session *session,
3244 struct bss_description *bss_desc);
3245
3246 /**
3247 * lim_update_tx_power() - Function to update the TX power for
3248 * the STA interface based on the SAP concurrency
3249 *
3250 * @mac_ctx: Pointer to Global mac structure
3251 * @sap_session: Session pointer of the SAP
3252 * @sta_session: Session pointer of the STA
3253 * @restore_sta_power: Flag to update the new Tx power for STA
3254 *
3255 * Return: QDF_STATUS
3256 */
3257 QDF_STATUS
3258 lim_update_tx_power(struct mac_context *mac_ctx, struct pe_session *sap_session,
3259 struct pe_session *sta_session, bool restore_sta_power);
3260
3261 /**
3262 * lim_skip_tpc_update_for_sta() - Function to check if the TPC set power
3263 * needs to be skipped for STA.
3264 *
3265 * @mac_ctx: Pointer to Global mac structure
3266 * @sta_session: Session pointer of the STA.
3267 * @sap_session: Session pointer of the SAP
3268 *
3269 * Return: skip tpc for sta
3270 */
3271 bool
3272 lim_skip_tpc_update_for_sta(struct mac_context *mac,
3273 struct pe_session *sta_session,
3274 struct pe_session *sap_session);
3275
3276 #ifdef FEATURE_WLAN_GC_SKIP_JOIN
3277 static inline bool
lim_connect_skip_join_for_gc(struct pe_session * pe_session)3278 lim_connect_skip_join_for_gc(struct pe_session *pe_session)
3279 {
3280 if (pe_session->opmode == QDF_P2P_CLIENT_MODE)
3281 return true;
3282 else
3283 return false;
3284 }
3285 #else
3286 static inline bool
lim_connect_skip_join_for_gc(struct pe_session * pe_session)3287 lim_connect_skip_join_for_gc(struct pe_session *pe_session)
3288 {
3289 return false;
3290 }
3291 #endif
3292
3293 /**
3294 * lim_get_concurrent_session() - Function to get the concurrent session pointer
3295 *
3296 * @mac_ctx: Pointer to Global mac structure
3297 * @vdev_id: vdev id
3298 * @opmode: opmode of the interface
3299 *
3300 * Return: pe_session
3301 */
3302 struct pe_session *
3303 lim_get_concurrent_session(struct mac_context *mac_ctx, uint8_t vdev_id,
3304 enum QDF_OPMODE opmode);
3305
3306 /**
3307 * lim_check_conc_power_for_csa() - Function to change the TX power
3308 * of STA when channel switch happens in SAP
3309 *
3310 * @mac_ctx: Pointer to Global mac structure.
3311 * @session: Session pointer of the SAP.
3312 *
3313 * Return: None
3314 */
3315 void
3316 lim_check_conc_power_for_csa(struct mac_context *mac_ctx,
3317 struct pe_session *session);
3318
3319 /**
3320 * lim_cleanup_power_change() - Function to reset the change_scc_power
3321 * flag in concurrent SAP vdev
3322 *
3323 * @mac_ctx: Pointer to Global mac structure.
3324 * @session: Session pointer of the interface
3325 */
3326 void
3327 lim_cleanup_power_change(struct mac_context *mac_ctx,
3328 struct pe_session *session);
3329
3330 /**
3331 * lim_is_power_change_required_for_sta() - Function to check if the 6 GHz
3332 * STA power level has to be changed
3333 *
3334 * @mac_ctx: Pointer to Global mac structure.
3335 * @sta_session: Session pointer of STA.
3336 * @sap_session: Session pointer of SAP.
3337 *
3338 * Return: restart required for sta
3339 */
3340 bool
3341 lim_is_power_change_required_for_sta(struct mac_context *mac_ctx,
3342 struct pe_session *sta_session,
3343 struct pe_session *sap_session);
3344
3345 /**
3346 * lim_update_tx_pwr_on_ctry_change_cb() - Callback to be invoked by regulatory
3347 * module when country code changes (without channel change) OR if fcc
3348 * constraint is set to true.
3349 * This API calls TPC calculation API to recalculate and update the TX power.
3350 * @vdev_id: vdev id
3351 *
3352 * Return: None
3353 */
3354 void
3355 lim_update_tx_pwr_on_ctry_change_cb(uint8_t vdev_id);
3356
3357 /*
3358 * lim_get_connected_chan_for_mode() - Get connected channel for given opmode
3359 * in given frequency range.
3360 *
3361 * @psoc: Pointer to psoc object
3362 * @opmode: Vdev opmode
3363 * @freq: Frequency
3364 *
3365 * Return: Return connected channel in given frequcy range for given opmode.
3366 */
3367 struct wlan_channel *
3368 lim_get_connected_chan_for_mode(struct wlan_objmgr_psoc *psoc,
3369 enum QDF_OPMODE opmode,
3370 qdf_freq_t start_freq,
3371 qdf_freq_t end_freq);
3372
3373 /**
3374 * lim_convert_vht_chwidth_to_phy_chwidth() - Convert VHT operation
3375 * ch width into phy ch width
3376 *
3377 * @ch_width: VHT op channel width
3378 * @is_40: is 40 MHz
3379 *
3380 * Return: phy chwidth
3381 */
3382 enum phy_ch_width
3383 lim_convert_vht_chwidth_to_phy_chwidth(uint8_t ch_width, bool is_40);
3384
3385 /*
3386 * lim_cmp_ssid() - Compare two SSIDs.
3387 * @ssid: first ssid
3388 * @pe_session: pointer to session
3389 *
3390 * Return: qdf_mem_cmp of ssids
3391 */
3392 uint32_t lim_cmp_ssid(tSirMacSSid *ssid, struct pe_session *pe_session);
3393
3394 /*
3395 * lim_configure_fd_for_existing_6ghz_sap() - Based on the concurrent
3396 * legacy SAP interface UP/DOWN, configure the FD for the 6 GHz SAPs.
3397 * @session: pointer to pe_session
3398 * @is_sap_starting: true if SAP is starting, false if SAP is stopping
3399 *
3400 * Return: None
3401 */
3402 void
3403 lim_configure_fd_for_existing_6ghz_sap(struct pe_session *session,
3404 bool is_sap_starting);
3405
3406 #ifdef WLAN_CHIPSET_STATS
3407 /**
3408 * lim_cp_stats_cstats_log_assoc_resp_evt() - Log chipset stats for assoc resp
3409 *
3410 * @session_entry: pointer to session object
3411 * @dir: Direction
3412 * @status_code: assoc/reassoc status
3413 * @aid: association identifier
3414 * @bssid: bssid
3415 * @da: destination address
3416 * @is_ht: is HT
3417 * @is_vht: is VHT
3418 * @is_he: is HE
3419 * @is_eht: is EHT
3420 * @is_reassoc: is reassoc frame
3421 *
3422 * Return : void
3423 */
3424 void lim_cp_stats_cstats_log_assoc_resp_evt(struct pe_session *session_entry,
3425 enum cstats_dir dir,
3426 uint16_t status_code, uint16_t aid,
3427 uint8_t *bssid, uint8_t *da,
3428 bool is_ht, bool is_vht, bool is_he,
3429 bool is_eht, bool is_reassoc);
3430
3431 /**
3432 * lim_cp_stats_cstats_log_auth_evt() - Log chipset stats for auth frames
3433 *
3434 * @pe_session: pointer to session object
3435 * @dir: direction
3436 * @algo: auth algorithm
3437 * @seq: auth sequence
3438 * @status: Status
3439 *
3440 * Return : void
3441 */
3442 void lim_cp_stats_cstats_log_auth_evt(struct pe_session *pe_session,
3443 enum cstats_dir dir, uint16_t algo,
3444 uint16_t seq, uint16_t status);
3445
3446 /**
3447 * lim_cp_stats_cstats_log_deauth_evt() - Log chipset stats for deauth frames
3448 *
3449 * @pe_session: pointer to session object
3450 * @dir: direction
3451 * @reasonCode: reason code
3452 *
3453 * Return : void
3454 */
3455 void lim_cp_stats_cstats_log_deauth_evt(struct pe_session *pe_session,
3456 enum cstats_dir dir,
3457 uint16_t reasonCode);
3458
3459 /**
3460 * lim_cp_stats_cstats_log_disassoc_evt() - Log chipset stats for disassoc frm
3461 *
3462 * @pe_session: pointer to session object
3463 * @dir: direction
3464 * @reasonCode: reason code
3465 *
3466 * Return : void
3467 */
3468 void lim_cp_stats_cstats_log_disassoc_evt(struct pe_session *pe_session,
3469 enum cstats_dir dir,
3470 uint16_t reasonCode);
3471
3472 /**
3473 * lim_cp_stats_cstats_log_assoc_req_evt() - Log chipset stats for assoc req frm
3474 *
3475 * @pe_session: pointer to session object
3476 * @dir: Direction
3477 * @bssid: bssid
3478 * @sa: source addr
3479 * @ssid_len: ssid length
3480 * @ssid: ssid
3481 * @is_ht: is HT
3482 * @is_vht: is VHT
3483 * @is_he: is HE
3484 * @is_eht: is EHT
3485 * @is_reassoc: is reassociation request
3486 *
3487 * Return : void
3488 */
3489 void lim_cp_stats_cstats_log_assoc_req_evt(struct pe_session *pe_session,
3490 enum cstats_dir dir, uint8_t *bssid,
3491 uint8_t *sa, uint8_t ssid_len,
3492 uint8_t *ssid, bool is_ht,
3493 bool is_vht, bool is_he,
3494 bool is_eht, bool is_reassoc);
3495
3496 /**
3497 * lim_cp_stats_cstats_log_disc_req_evt() : chipset stats for TDLS disc req
3498 *
3499 * @frm: pointer to tDot11fTDLSDisReq
3500 * @pe_session: pointer to session object
3501 *
3502 * Return: void
3503 */
3504 void lim_cp_stats_cstats_log_disc_req_evt(tDot11fTDLSDisReq *frm,
3505 struct pe_session *pe_session);
3506
3507 /**
3508 * lim_cp_stats_cstats_log_disc_resp_evt() : chipset stats for TDLS disc resp
3509 *
3510 * @frm: pointer to tDot11fTDLSDisRsp
3511 * @pe_session: pointer to session object
3512 *
3513 * Return: void
3514 */
3515 void lim_cp_stats_cstats_log_disc_resp_evt(tDot11fTDLSDisRsp *frm,
3516 struct pe_session *pe_session);
3517
3518 /**
3519 * lim_cp_stats_cstats_log_setup_req_evt() : chipset stats for TDLS setup req
3520 *
3521 * @frm: pointer to tDot11fTDLSSetupReq
3522 * @pe_session: pointer to session object
3523 *
3524 * Return: void
3525 */
3526 void lim_cp_stats_cstats_log_setup_req_evt(tDot11fTDLSSetupReq *frm,
3527 struct pe_session *pe_session);
3528
3529 /**
3530 * lim_cp_stats_cstats_log_setup_resp_evt() : chipset stats for TDLS setup resp
3531 *
3532 * @frm: pointer to tDot11fTDLSSetupRsp
3533 * @pe_session: pointer to session object
3534 *
3535 * Return: void
3536 */
3537 void lim_cp_stats_cstats_log_setup_resp_evt(tDot11fTDLSSetupRsp *frm,
3538 struct pe_session *pe_session);
3539
3540 /**
3541 * lim_cp_stats_cstats_log_setup_confirm_evt() : chipset stats for TDLS setup
3542 * confirm
3543 *
3544 * @frm: pointer to tDot11fTDLSSetupCnf
3545 * @pe_session: pointer to session object
3546 *
3547 * Return: void
3548 */
3549 void lim_cp_stats_cstats_log_setup_confirm_evt(tDot11fTDLSSetupCnf *frm,
3550 struct pe_session *pe_session);
3551
3552 /**
3553 * lim_cp_stats_cstats_log_tear_down_evt() : chipset stats for TDLS teardown
3554 *
3555 * @frm: pointer to tDot11fTDLSSetupCnf
3556 * @pe_session: pointer to session object
3557 *
3558 * Return: void
3559 */
3560 void lim_cp_stats_cstats_log_tear_down_evt(tDot11fTDLSTeardown *frm,
3561 struct pe_session *pe_session);
3562
3563 /**
3564 * lim_cp_stats_cstats_log_csa_evt() : chipset stats for CSA event
3565 *
3566 * @pe_session: pointer to session object
3567 * @dir: Direction of the event i.e TX/RX
3568 * @target_freq: Target freq
3569 * @target_ch_width: Target channel width
3570 * @switch_mode: Switch mode
3571 *
3572 * Return: void
3573 */
3574 void lim_cp_stats_cstats_log_csa_evt(struct pe_session *pe_session,
3575 enum cstats_dir dir, uint16_t target_freq,
3576 uint8_t target_ch_width,
3577 uint8_t switch_mode);
3578 #else
3579 static inline void
lim_cp_stats_cstats_log_assoc_resp_evt(struct pe_session * session_entry,enum cstats_dir dir,uint16_t status_code,uint16_t aid,uint8_t * bssid,uint8_t * da,bool is_ht,bool is_vht,bool is_he,bool is_eht,bool is_reassoc)3580 lim_cp_stats_cstats_log_assoc_resp_evt(struct pe_session *session_entry,
3581 enum cstats_dir dir,
3582 uint16_t status_code, uint16_t aid,
3583 uint8_t *bssid, uint8_t *da,
3584 bool is_ht, bool is_vht, bool is_he,
3585 bool is_eht, bool is_reassoc)
3586 {
3587 }
3588
3589 static inline void
lim_cp_stats_cstats_log_auth_evt(struct pe_session * pe_session,enum cstats_dir dir,uint16_t algo,uint16_t seq,uint16_t status)3590 lim_cp_stats_cstats_log_auth_evt(struct pe_session *pe_session,
3591 enum cstats_dir dir, uint16_t algo,
3592 uint16_t seq, uint16_t status)
3593 {
3594 }
3595
3596 static inline void
lim_cp_stats_cstats_log_deauth_evt(struct pe_session * pe_session,enum cstats_dir dir,uint16_t reasonCode)3597 lim_cp_stats_cstats_log_deauth_evt(struct pe_session *pe_session,
3598 enum cstats_dir dir, uint16_t reasonCode)
3599 {
3600 }
3601
3602 static inline void
lim_cp_stats_cstats_log_disassoc_evt(struct pe_session * pe_session,enum cstats_dir dir,uint16_t reasonCode)3603 lim_cp_stats_cstats_log_disassoc_evt(struct pe_session *pe_session,
3604 enum cstats_dir dir, uint16_t reasonCode)
3605 {
3606 }
3607
3608 static inline void
lim_cp_stats_cstats_log_assoc_req_evt(struct pe_session * pe_session,enum cstats_dir dir,uint8_t * bssid,uint8_t * sa,uint8_t ssid_len,uint8_t * ssid,bool is_ht,bool is_vht,bool is_he,bool is_eht,bool is_reassoc)3609 lim_cp_stats_cstats_log_assoc_req_evt(struct pe_session *pe_session,
3610 enum cstats_dir dir, uint8_t *bssid,
3611 uint8_t *sa, uint8_t ssid_len,
3612 uint8_t *ssid, bool is_ht,
3613 bool is_vht, bool is_he,
3614 bool is_eht, bool is_reassoc)
3615 {
3616 }
3617
3618 static inline void
lim_cp_stats_cstats_log_disc_req_evt(tDot11fTDLSDisReq * frm,struct pe_session * pe_session)3619 lim_cp_stats_cstats_log_disc_req_evt(tDot11fTDLSDisReq *frm,
3620 struct pe_session *pe_session)
3621 {
3622 }
3623
3624 static inline void
lim_cp_stats_cstats_log_disc_resp_evt(tDot11fTDLSDisRsp * frm,struct pe_session * pe_session)3625 lim_cp_stats_cstats_log_disc_resp_evt(tDot11fTDLSDisRsp *frm,
3626 struct pe_session *pe_session)
3627 {
3628 }
3629
3630 static inline void
lim_cp_stats_cstats_log_setup_req_evt(tDot11fTDLSSetupReq * frm,struct pe_session * pe_session)3631 lim_cp_stats_cstats_log_setup_req_evt(tDot11fTDLSSetupReq *frm,
3632 struct pe_session *pe_session)
3633 {
3634 }
3635
3636 static inline void
lim_cp_stats_cstats_log_setup_resp_evt(tDot11fTDLSSetupRsp * frm,struct pe_session * pe_session)3637 lim_cp_stats_cstats_log_setup_resp_evt(tDot11fTDLSSetupRsp *frm,
3638 struct pe_session *pe_session)
3639 {
3640 }
3641
3642 static inline void
lim_cp_stats_cstats_log_setup_confirm_evt(tDot11fTDLSSetupCnf * frm,struct pe_session * pe_session)3643 lim_cp_stats_cstats_log_setup_confirm_evt(tDot11fTDLSSetupCnf *frm,
3644 struct pe_session *pe_session)
3645 {
3646 }
3647
3648 static inline void
lim_cp_stats_cstats_log_tear_down_evt(tDot11fTDLSTeardown * frm,struct pe_session * pe_session)3649 lim_cp_stats_cstats_log_tear_down_evt(tDot11fTDLSTeardown *frm,
3650 struct pe_session *pe_session)
3651 {
3652 }
3653
3654 static inline void
lim_cp_stats_cstats_log_csa_evt(struct pe_session * pe_session,enum cstats_dir dir,uint16_t target_freq,uint8_t target_ch_width,uint8_t switch_mode)3655 lim_cp_stats_cstats_log_csa_evt(struct pe_session *pe_session,
3656 enum cstats_dir dir, uint16_t target_freq,
3657 uint8_t target_ch_width, uint8_t switch_mode)
3658 {
3659 }
3660 #endif /* WLAN_CHIPSET_STATS */
3661
3662 #define MAX_TX_PSD_POWER 15
3663
3664 /**
3665 * lim_get_tpe_ie_length() : Get the tpe ie length
3666 * @ch_width: phy channel width
3667 * @tpe_ie: pointer to dot11f TPE IE structure
3668 * @num_tpe: number of TPE IE
3669 *
3670 * Return: tpe ie length
3671 */
3672 uint16_t lim_get_tpe_ie_length(enum phy_ch_width ch_width,
3673 tDot11fIEtransmit_power_env *tpe_ie,
3674 uint16_t num_tpe);
3675
3676 /**
3677 * lim_fill_complete_tpe_ie() : fill tpe ie to target buffer
3678 * @ch_width: phy channel width
3679 * @tpe_ie_len: the total bytes to fill target buffer
3680 * @tpe_ptr: pointer to dot11f TPE IE structure
3681 * @num_tpe: number of TPE IE
3682 * @target: the buffer to fill data
3683 *
3684 * Return: QDF_STATUS
3685 */
3686 QDF_STATUS lim_fill_complete_tpe_ie(enum phy_ch_width ch_width,
3687 uint16_t tpe_ie_len,
3688 tDot11fIEtransmit_power_env *tpe_ptr,
3689 uint16_t num_tpe, uint8_t *target);
3690 #endif /* __LIM_UTILS_H */
3691