1 /*
2 * Copyright (c) 2018-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 * DOC: declare internal API related to the mlme component
21 */
22
23 #ifndef _WLAN_MLME_MAIN_H_
24 #define _WLAN_MLME_MAIN_H_
25
26 #include "qdf_periodic_work.h"
27 #include <wlan_mlme_public_struct.h>
28 #include <wlan_objmgr_psoc_obj.h>
29 #include <wlan_objmgr_global_obj.h>
30 #include <wlan_cmn.h>
31 #include <wlan_objmgr_vdev_obj.h>
32 #include <wlan_objmgr_peer_obj.h>
33 #include "wlan_wfa_config_public_struct.h"
34 #include "wlan_connectivity_logging.h"
35
36 #define MAC_MAX_ADD_IE_LENGTH 2048
37 /* Join probe request Retry timer default (200)ms */
38 #define JOIN_PROBE_REQ_TIMER_MS 200
39 #define MAX_JOIN_PROBE_REQ 5
40
41 #define MAX_WAKELOCK_FOR_BSS_COLOR_CHANGE 2000
42
43 /* If AP reported link delete timer less than such value,
44 * host will do link removel directly without wait for the
45 * timer timeout.
46 */
47 #define LINK_REMOVAL_MIN_TIMEOUT_MS 1000
48
49 /*
50 * Following time is used to program WOW_TIMER_PATTERN to FW so that FW will
51 * wake host up to do graceful disconnect in case PEER remains un-authorized
52 * for this long.
53 */
54 #define INSTALL_KEY_TIMEOUT_SEC 70
55 #define INSTALL_KEY_TIMEOUT_MS \
56 (INSTALL_KEY_TIMEOUT_SEC * SYSTEM_TIME_SEC_TO_MSEC)
57 /* 70 seconds, for WPA, WPA2, CCKM */
58 #define WAIT_FOR_KEY_TIMEOUT_PERIOD \
59 (INSTALL_KEY_TIMEOUT_SEC * QDF_MC_TIMER_TO_SEC_UNIT)
60 /* 120 seconds, for WPS */
61 #define WAIT_FOR_WPS_KEY_TIMEOUT_PERIOD (120 * QDF_MC_TIMER_TO_SEC_UNIT)
62
63 #define MLME_PEER_SET_KEY_WAKELOCK_TIMEOUT WAKELOCK_DURATION_RECOMMENDED
64 /* QCN IE definitions */
65 #define QCN_IE_HDR_LEN 6
66
67 #define QCN_IE_VERSION_SUBATTR_ID 1
68 #define QCN_IE_VERSION_SUBATTR_DATA_LEN 2
69 #define QCN_IE_VERSION_SUBATTR_LEN 4
70 #define QCN_IE_VERSION_SUPPORTED 1
71 #define QCN_IE_SUBVERSION_SUPPORTED 0
72
73 #define QCN_IE_ATTR_ID_VERSION 1
74 #define QCN_IE_ATTR_ID_VHT_MCS11 2
75 #define QCN_IE_ATTR_ID_ALL 0xFF
76
77 #define mlme_legacy_fatal(params...) QDF_TRACE_FATAL(QDF_MODULE_ID_MLME, params)
78 #define mlme_legacy_err(params...) QDF_TRACE_ERROR(QDF_MODULE_ID_MLME, params)
79 #define mlme_legacy_warn(params...) QDF_TRACE_WARN(QDF_MODULE_ID_MLME, params)
80 #define mlme_legacy_info(params...) QDF_TRACE_INFO(QDF_MODULE_ID_MLME, params)
81 #define mlme_legacy_debug(params...) QDF_TRACE_DEBUG(QDF_MODULE_ID_MLME, params)
82 #define MAC_B_PR_SSID_OFFSET 12
83
84 enum size_of_len_field {
85 ONE_BYTE = 1,
86 TWO_BYTE = 2
87 };
88
89 enum medium_access_type {
90 MEDIUM_ACCESS_AUTO = 0,
91 MEDIUM_ACCESS_DCF,
92 MEDIUM_ACCESS_11E_EDCF,
93 MEDIUM_ACCESS_WMM_EDCF_DSCP,
94 };
95
96 enum wmm_user_mode {
97 WMM_USER_MODE_AUTO = 0,
98 WMM_USER_MODE_QBSS_ONLY = 1,
99 WMM_USER_MODE_NO_QOS = 2,
100
101 };
102
103 /**
104 * struct peer_mac_addresses -Peer MAC address info
105 * @mac: Provided peer MAC address
106 * @peer_mac: Peer MAC address
107 * @peer_mld: Peer MLD address
108 */
109 struct peer_mac_addresses {
110 struct qdf_mac_addr mac;
111 struct qdf_mac_addr peer_mac;
112 struct qdf_mac_addr peer_mld;
113 };
114
115 struct pwr_channel_info {
116 uint32_t first_freq;
117 uint8_t num_chan;
118 int8_t max_tx_pwr;
119 };
120
121 /**
122 * struct peer_disconnect_stats_param -Peer disconnect stats params
123 * @vdev_id: vdev_id of the SAP vdev on which disconnect stats request is sent
124 * @is_disconn_stats_completed: Indicates if disconnect stats request is
125 * completed or not
126 * @disconn_stats_timer: Disconnect stats timer
127 */
128 struct peer_disconnect_stats_param {
129 uint8_t vdev_id;
130 qdf_atomic_t is_disconn_stats_completed;
131 qdf_mc_timer_t disconn_stats_timer;
132 };
133
134 /**
135 * struct wlan_mlme_rx_ops - structure of tx function pointers for
136 * roaming related commands
137 * @peer_oper_mode_eventid : Rx ops function pointer for operating mode event
138 */
139 struct wlan_mlme_rx_ops {
140 QDF_STATUS (*peer_oper_mode_eventid)(struct wlan_objmgr_psoc *psoc,
141 struct peer_oper_mode_event *data);
142 };
143
144 /**
145 * struct wlan_mlme_tx_ops - structure of mlme tx function pointers
146 * @send_csa_event_status_ind: Tx ops function to send csa event indication
147 *
148 */
149 struct wlan_mlme_tx_ops {
150 QDF_STATUS
151 (*send_csa_event_status_ind)(struct wlan_objmgr_vdev *vdev,
152 uint8_t csa_status);
153 };
154
155 /**
156 * struct wlan_mlme_psoc_ext_obj -MLME ext psoc priv object
157 * @cfg: cfg items
158 * @rso_tx_ops: Roam Tx ops to send roam offload commands to firmware
159 * @rso_rx_ops: Roam Rx ops to receive roam offload events from firmware
160 * @mlme_rx_ops: mlme Rx ops to receive events from firmware
161 * @mlme_tx_ops: mlme tx ops
162 * @wfa_testcmd: WFA config tx ops to send to FW
163 * @disconnect_stats_param: Peer disconnect stats related params for SAP case
164 * @scan_requester_id: mlme scan requester id
165 */
166 struct wlan_mlme_psoc_ext_obj {
167 struct wlan_mlme_cfg cfg;
168 struct wlan_cm_roam_tx_ops rso_tx_ops;
169 struct wlan_cm_roam_rx_ops rso_rx_ops;
170 struct wlan_mlme_rx_ops mlme_rx_ops;
171 struct wlan_mlme_tx_ops mlme_tx_ops;
172 struct wlan_mlme_wfa_cmd wfa_testcmd;
173 struct peer_disconnect_stats_param disconnect_stats_param;
174 wlan_scan_requester scan_requester_id;
175 };
176
177 /**
178 * struct wlan_disconnect_info - WLAN Disconnection Information
179 * @self_discon_ies: Disconnect IEs to be sent in deauth/disassoc frames
180 * originated from driver
181 * @peer_discon_ies: Disconnect IEs received in deauth/disassoc frames
182 * from peer
183 */
184 struct wlan_disconnect_info {
185 struct element_info self_discon_ies;
186 struct element_info peer_discon_ies;
187 };
188
189 /**
190 * struct sae_auth_retry - SAE auth retry Information
191 * @sae_auth_max_retry: Max number of sae auth retries
192 * @sae_auth: SAE auth frame information
193 */
194 struct sae_auth_retry {
195 uint8_t sae_auth_max_retry;
196 struct element_info sae_auth;
197 };
198
199 /**
200 * struct peer_mlme_priv_obj - peer MLME component object
201 * @last_pn_valid: if last PN is valid
202 * @last_pn: last pn received
203 * @rmf_pn_replays: rmf pn replay count
204 * @is_pmf_enabled: True if PMF is enabled
205 * @last_assoc_received_time: last assoc received time
206 * @last_disassoc_deauth_received_time: last disassoc/deauth received time
207 * @twt_ctx: TWT context
208 * @allow_kickout: True if the peer can be kicked out. Peer can't be kicked
209 * out if it is being steered
210 * @nss: Peer NSS
211 * @peer_set_key_wakelock: wakelock to protect peer set key op with firmware
212 * @peer_set_key_runtime_wakelock: runtime pm wakelock for set key
213 * @is_key_wakelock_set: flag to check if key wakelock is pending to release
214 * @assoc_rsp: assoc rsp IE received during connection
215 * @peer_ind_bw: peer indication channel bandwidth
216 */
217 struct peer_mlme_priv_obj {
218 uint8_t last_pn_valid;
219 uint64_t last_pn;
220 uint32_t rmf_pn_replays;
221 bool is_pmf_enabled;
222 qdf_time_t last_assoc_received_time;
223 qdf_time_t last_disassoc_deauth_received_time;
224 #ifdef WLAN_SUPPORT_TWT
225 struct twt_context twt_ctx;
226 #endif
227 #ifdef WLAN_FEATURE_SON
228 bool allow_kickout;
229 #endif
230 uint8_t nss;
231 qdf_wake_lock_t peer_set_key_wakelock;
232 qdf_runtime_lock_t peer_set_key_runtime_wakelock;
233 bool is_key_wakelock_set;
234 struct element_info assoc_rsp;
235 enum phy_ch_width peer_ind_bw;
236 };
237
238 /**
239 * enum vdev_assoc_type - VDEV associate/reassociate type
240 * @VDEV_ASSOC: associate
241 * @VDEV_REASSOC: reassociate
242 * @VDEV_FT_REASSOC: fast reassociate
243 */
244 enum vdev_assoc_type {
245 VDEV_ASSOC,
246 VDEV_REASSOC,
247 VDEV_FT_REASSOC
248 };
249
250 /**
251 * struct wlan_mlme_roam_state_info - Structure containing roaming
252 * state related details
253 * @state: Roaming module state.
254 * @mlme_operations_bitmap: Bitmap containing what mlme operations are in
255 * progress where roaming should not be allowed.
256 */
257 struct wlan_mlme_roam_state_info {
258 enum roam_offload_state state;
259 uint8_t mlme_operations_bitmap;
260 };
261
262 /**
263 * struct wlan_mlme_roaming_config - Roaming configurations structure
264 * @roam_trigger_bitmap: Master bitmap of roaming triggers. If the bitmap is
265 * zero, roaming module will be deinitialized at firmware for this vdev.
266 * @supplicant_disabled_roaming: Enable/disable roam scan in firmware; will be
267 * used by supplicant to do roam invoke after disabling roam scan in firmware,
268 * it is only effective for current connection, it will be cleared during new
269 * connection.
270 */
271 struct wlan_mlme_roaming_config {
272 uint32_t roam_trigger_bitmap;
273 bool supplicant_disabled_roaming;
274 };
275
276 /**
277 * struct wlan_mlme_roam - Roam structure containing roam state and
278 * roam config info
279 * @roam_sm: Structure containing roaming state related details
280 * @roam_cfg: Roaming configurations structure
281 * @sae_single_pmk: Details for sae roaming using single pmk
282 * @set_pmk_pending: RSO update status of PMK from set_key
283 * @sae_auth_ta: SAE pre-auth tx address
284 * @sae_auth_pending: Roaming SAE auth pending
285 */
286 struct wlan_mlme_roam {
287 struct wlan_mlme_roam_state_info roam_sm;
288 struct wlan_mlme_roaming_config roam_cfg;
289 #if defined(WLAN_SAE_SINGLE_PMK) && defined(WLAN_FEATURE_ROAM_OFFLOAD)
290 struct wlan_mlme_sae_single_pmk sae_single_pmk;
291 #endif
292 bool set_pmk_pending;
293 struct qdf_mac_addr sae_auth_ta;
294 uint8_t sae_auth_pending;
295 };
296
297 #ifdef WLAN_FEATURE_MSCS
298 /**
299 * struct tclas_mask - TCLAS Mask Elements for mscs request
300 * @classifier_type: specifies the type of classifier parameters
301 * in TCLAS element. Currently driver supports classifier type = 4 only.
302 * @classifier_mask: Mask for tclas elements. For example, if
303 * classifier type = 4, value of classifier mask is 0x5F.
304 * @info: information of classifier type
305 */
306 struct tclas_mask {
307 uint8_t classifier_type;
308 uint8_t classifier_mask;
309 union {
310 struct {
311 uint8_t reserved[16];
312 } ip_param; /* classifier_type = 4 */
313 } info;
314 };
315
316 /**
317 * enum scs_request_type - scs request type to peer
318 * @SCS_REQ_ADD: To set mscs parameters
319 * @SCS_REQ_REMOVE: Remove mscs parameters
320 * @SCS_REQ_CHANGE: Update mscs parameters
321 */
322 enum scs_request_type {
323 SCS_REQ_ADD = 0,
324 SCS_REQ_REMOVE = 1,
325 SCS_REQ_CHANGE = 2,
326 };
327
328 /**
329 * struct descriptor_element - mscs Descriptor element
330 * @request_type: mscs request type defined in enum scs_request_type
331 * @user_priority_control: To set user priority of tx packet
332 * @stream_timeout: minimum timeout value, in TUs, for maintaining
333 * variable user priority in the MSCS list.
334 * @tclas_mask: to specify how incoming MSDUs are classified into
335 * streams in MSCS
336 * @status_code: status of mscs request
337 */
338 struct descriptor_element {
339 uint8_t request_type;
340 uint16_t user_priority_control;
341 uint64_t stream_timeout;
342 struct tclas_mask tclas_mask;
343 uint8_t status_code;
344 };
345
346 /**
347 * struct mscs_req_info - mscs request information
348 * @vdev_id: session id
349 * @bssid: peer bssid
350 * @dialog_token: Token number of mscs req action frame
351 * @dec: mscs Descriptor element defines information about
352 * the parameters used to classify streams
353 * @is_mscs_req_sent: To Save mscs req request if any (only
354 * one can be outstanding at any time)
355 */
356 struct mscs_req_info {
357 uint8_t vdev_id;
358 struct qdf_mac_addr bssid;
359 uint8_t dialog_token;
360 struct descriptor_element dec;
361 bool is_mscs_req_sent;
362 };
363 #endif
364
365 #ifdef WLAN_FEATURE_HOST_ROAM
366 /**
367 * enum ft_ie_state - ft state
368 * @FT_START_READY: Start before and after 11r assoc
369 * @FT_AUTH_REQ_READY: When we have recvd the 1st or nth auth req
370 * @FT_REASSOC_REQ_WAIT: waiting for reassoc
371 * @FT_SET_KEY_WAIT: waiting for key
372 */
373 enum ft_ie_state {
374 FT_START_READY,
375 FT_AUTH_REQ_READY,
376 FT_REASSOC_REQ_WAIT,
377 FT_SET_KEY_WAIT,
378 };
379 #endif
380
381 /**
382 * struct ft_context - ft related information
383 * @r0kh_id_len: r0kh id len
384 * @r0kh_id: r0kh id
385 * @auth_ft_ie: auth ft ies received during preauth phase
386 * @auth_ie_len: auth ie length
387 * @reassoc_ft_ie: reassoc ft ies received during reassoc phase
388 * @reassoc_ie_len: reassoc ie length
389 * @ric_ies: ric ie
390 * @ric_ies_length: ric ie len
391 * @set_ft_preauth_state: preauth state
392 * @ft_state: ft state
393 * @add_mdie: add mdie in assoc req
394 */
395 struct ft_context {
396 #ifdef WLAN_FEATURE_ROAM_OFFLOAD
397 uint32_t r0kh_id_len;
398 uint8_t r0kh_id[ROAM_R0KH_ID_MAX_LEN];
399 #endif
400 #ifdef WLAN_FEATURE_HOST_ROAM
401 uint8_t auth_ft_ie[MAX_FTIE_SIZE];
402 uint16_t auth_ie_len;
403 uint8_t reassoc_ft_ie[MAX_FTIE_SIZE];
404 uint16_t reassoc_ie_len;
405 uint8_t ric_ies[MAX_FTIE_SIZE];
406 uint16_t ric_ies_length;
407 bool set_ft_preauth_state;
408 enum ft_ie_state ft_state;
409 bool add_mdie;
410 #endif
411 };
412
413 /**
414 * struct assoc_channel_info - store channel info at the time of association
415 * @assoc_ch_width: channel width at the time of initial connection
416 * @omn_ie_ch_width: ch width present in operating mode notification IE of bcn
417 * @sec_2g_freq: secondary 2 GHz freq
418 * @cen320_freq: 320 MHz center freq
419 */
420 struct assoc_channel_info {
421 enum phy_ch_width assoc_ch_width;
422 enum phy_ch_width omn_ie_ch_width;
423 qdf_freq_t sec_2g_freq;
424 qdf_freq_t cen320_freq;
425 };
426
427 /**
428 * struct mlme_connect_info - mlme connect information
429 * @timing_meas_cap: Timing meas cap
430 * @chan_info: oem channel info
431 * @tdls_chan_swit_prohibited: if tdls chan switch is prohobited by AP
432 * @tdls_prohibited: if tdls is prohobited by AP
433 * @uapsd_per_ac_bitmask: Used on STA, this is a static UAPSD mask setting
434 * derived from JOIN_REQ and REASSOC_REQ. If a particular AC bit is set, it
435 * means the AC is both trigger enabled and delivery enabled.
436 * @qos_enabled: is qos enabled
437 * @ft_info: ft related info
438 * @hlp_ie: hldp ie
439 * @hlp_ie_len: hlp ie length
440 * @fils_con_info: Pointer to fils connection info from connect req
441 * @cckm_ie: cck IE
442 * @cckm_ie_len: cckm_ie len
443 * @ese_tspec_info: ese tspec info
444 * @ext_cap_ie: Ext CAP IE
445 * @assoc_btm_cap: BSS transition management cap used in (re)assoc req
446 * @assoc_chan_info: store channel info at the time of association
447 * @force_20mhz_in_24ghz: Only 20 MHz BW allowed in 2.4 GHz
448 *
449 */
450 struct mlme_connect_info {
451 uint8_t timing_meas_cap;
452 struct oem_channel_info chan_info;
453 #ifdef FEATURE_WLAN_TDLS
454 bool tdls_chan_swit_prohibited;
455 bool tdls_prohibited;
456 #endif
457 uint8_t uapsd_per_ac_bitmask;
458 bool qos_enabled;
459 struct ft_context ft_info;
460 #ifdef WLAN_FEATURE_FILS_SK
461 uint8_t *hlp_ie;
462 uint32_t hlp_ie_len;
463 struct wlan_fils_connection_info *fils_con_info;
464 #endif
465 #ifdef FEATURE_WLAN_ESE
466 uint8_t cckm_ie[DOT11F_IE_RSN_MAX_LEN];
467 uint8_t cckm_ie_len;
468 #ifdef WLAN_FEATURE_HOST_ROAM
469 tESETspecInfo ese_tspec_info;
470 #endif
471 #endif
472 uint8_t ext_cap_ie[DOT11F_IE_EXTCAP_MAX_LEN + 2];
473 bool assoc_btm_cap;
474 struct assoc_channel_info assoc_chan_info;
475 bool force_20mhz_in_24ghz;
476 };
477
478 /** struct wait_for_key_timer - wait for key timer object
479 * @vdev: Pointer to vdev
480 * @timer: timer for wati for key
481 */
482 struct wait_for_key_timer {
483 struct wlan_objmgr_vdev *vdev;
484 qdf_mc_timer_t timer;
485 };
486
487 /**
488 * struct mlme_ap_config - VDEV MLME legacy private SAP
489 * related configurations
490 * @user_config_sap_ch_freq : Frequency from userspace to start SAP
491 * @update_required_scc_sta_power: Change the 6 GHz power type of the
492 * concurrent STA
493 * @ap_policy: Concurrent ap policy config
494 * @oper_ch_width: SAP current operating ch_width
495 * @psd_20mhz: PSD power(dBm/MHz) of SAP operating in 20 MHz
496 */
497 struct mlme_ap_config {
498 qdf_freq_t user_config_sap_ch_freq;
499 #ifdef CONFIG_BAND_6GHZ
500 bool update_required_scc_sta_power;
501 #endif
502 enum host_concurrent_ap_policy ap_policy;
503 enum phy_ch_width oper_ch_width;
504 uint8_t psd_20mhz;
505 };
506
507 /**
508 * struct roam_trigger_per - per roam trigger related information
509 * @rx_rate_thresh_percent: percentage of lower than rx rate threshold
510 * @tx_rate_thresh_percent: percentage of lower than tx rate threshold
511 */
512 struct roam_trigger_per {
513 uint8_t rx_rate_thresh_percent;
514 uint8_t tx_rate_thresh_percent;
515 };
516
517 /**
518 * struct roam_trigger_bmiss - bmiss roam trigger related information
519 * @final_bmiss_cnt: final beacon miss count
520 * @consecutive_bmiss_cnt: consecutive beacon miss count
521 * @qos_null_success: is Qos-Null tx Success: 0: success, 1:fail
522 */
523 struct roam_trigger_bmiss {
524 uint32_t final_bmiss_cnt;
525 uint32_t consecutive_bmiss_cnt;
526 bool qos_null_success;
527 };
528
529 /**
530 * struct roam_trigger_poor_rssi - low rssi roam trigger
531 * related information
532 * @current_rssi: Connected AP rssi in dBm
533 * @roam_rssi_threshold: rssi threshold value in dBm
534 * @rx_linkspeed_status: rx linkspeed status, 0:good linkspeed, 1:bad
535 */
536 struct roam_trigger_poor_rssi {
537 int8_t current_rssi;
538 int8_t roam_rssi_threshold;
539 bool rx_linkspeed_status;
540 };
541
542 /**
543 * struct roam_trigger_better_rssi - high rssi roam trigger
544 * related information
545 * @current_rssi: Connected AP rssi in dBm
546 * @hi_rssi_threshold: roam high RSSI threshold
547 */
548 struct roam_trigger_better_rssi {
549 int8_t current_rssi;
550 int8_t hi_rssi_threshold;
551 };
552
553 /**
554 * struct roam_trigger_congestion - congestion roam trigger
555 * related information
556 * @rx_tput: RX Throughput in bytes per second in dense env
557 * @tx_tput: TX Throughput in bytes per second in dense env
558 * @roamable_count: roamable AP count info in dense env
559 */
560 struct roam_trigger_congestion {
561 uint32_t rx_tput;
562 uint32_t tx_tput;
563 uint8_t roamable_count;
564 };
565
566 /**
567 * struct roam_trigger_user_trigger - user roam trigger related information
568 * @invoke_reason: defined in roam_invoke_reason
569 */
570 struct roam_trigger_user_trigger {
571 enum roam_invoke_reason invoke_reason;
572 };
573
574 /**
575 * struct roam_trigger_background - roam trigger related information
576 * @current_rssi: Connected AP rssi in dBm
577 * @data_rssi: data frame rssi in dBm
578 * @data_rssi_threshold: data rssi threshold in dBm
579 */
580 struct roam_trigger_background {
581 int8_t current_rssi;
582 int8_t data_rssi;
583 int8_t data_rssi_threshold;
584 };
585
586 /**
587 * struct roam_trigger_btm - BTM roam trigger related information
588 * @btm_request_mode: mode values are defined in IEEE Std
589 * 802.11-2020, 9.6.13.9
590 * @disassoc_imminent_timer: disassoc time in milliseconds
591 * @validity_internal: Preferred candidate list validity interval in
592 * milliseconds
593 * @candidate_list_count: Number of preferred candidates from BTM request
594 * @btm_response_status_code: Response status values are enumerated in
595 * IEEE Std 802.11-2020, Table 9-428 (BTM status code definitions)
596 * @btm_bss_termination_timeout: BTM BSS termination timeout value in
597 * milliseconds
598 * @btm_mbo_assoc_retry_timeout: BTM MBO assoc retry timeout value in
599 * milliseconds
600 * @btm_req_dialog_token: btm_req_dialog_token: dialog token number in
601 * BTM request frame
602 */
603
604 struct roam_trigger_btm {
605 uint8_t btm_request_mode;
606 uint32_t disassoc_imminent_timer;
607 uint32_t validity_internal;
608 uint8_t candidate_list_count;
609 uint8_t btm_response_status_code;
610 uint32_t btm_bss_termination_timeout;
611 uint32_t btm_mbo_assoc_retry_timeout;
612 uint8_t btm_req_dialog_token;
613 };
614
615 /**
616 * struct roam_trigger_bss_load - BSS Load roam trigger parameters
617 * @cu_load: percentage of Connected AP channel congestion utilization
618 */
619 struct roam_trigger_bss_load {
620 uint8_t cu_load;
621 };
622
623 /**
624 * struct roam_trigger_disconnection - Deauth roaming trigger related
625 * parameters
626 * @deauth_type: 1- Deauthentication 2- Disassociation
627 * @deauth_reason: Status code of the Deauth/Disassoc received, Values
628 * are enumerated in IEEE Std 802.11-2020, Table 9-49 (Reason codes).
629 */
630 struct roam_trigger_disconnection {
631 uint8_t deauth_type;
632 uint16_t deauth_reason;
633 };
634
635 /**
636 * struct roam_trigger_periodic - periodic roam trigger
637 * related information
638 * @periodic_timer_ms: roam scan periodic, milliseconds
639 */
640 struct roam_trigger_periodic {
641 uint32_t periodic_timer_ms;
642 };
643
644 /**
645 * struct roam_trigger_tx_failures - tx failures roam trigger
646 * related information
647 * @kickout_threshold: consecutive tx failure threshold
648 * @kickout_reason: defined in roam_tx_failures_reason
649 */
650 struct roam_trigger_tx_failures {
651 uint32_t kickout_threshold;
652 enum roam_tx_failures_reason kickout_reason;
653 };
654
655 /**
656 * union roam_trigger_condition - union of all types roam trigger info
657 * structures
658 * @roam_per: per roam trigger related information
659 * @roam_bmiss: bmiss roam trigger related information
660 * @roam_poor_rssi: low rssi roam trigger related information
661 * @roam_better_rssi: high rssi roam trigger related information
662 * @roam_congestion: congestion roam trigger related information
663 * @roam_user_trigger: user trigger roam related information
664 * @roam_btm: btm roam trigger related information
665 * @roam_bss_load: bss load roam trigger related information
666 * @roam_disconnection: disconnect roam trigger related information
667 * @roam_periodic: periodic roam trigger related information
668 * @roam_background: background roam trigger related information
669 * @roam_tx_failures: tx failures roam trigger related information
670 */
671 union roam_trigger_condition {
672 struct roam_trigger_per roam_per;
673 struct roam_trigger_bmiss roam_bmiss;
674 struct roam_trigger_poor_rssi roam_poor_rssi;
675 struct roam_trigger_better_rssi roam_better_rssi;
676 struct roam_trigger_congestion roam_congestion;
677 struct roam_trigger_user_trigger roam_user_trigger;
678 struct roam_trigger_btm roam_btm;
679 struct roam_trigger_bss_load roam_bss_load;
680 struct roam_trigger_disconnection roam_disconnection;
681 struct roam_trigger_periodic roam_periodic;
682 struct roam_trigger_background roam_background;
683 struct roam_trigger_tx_failures roam_tx_failures;
684 };
685
686 /**
687 * struct roam_trigger_abort_reason - roam abort related information
688 * @abort_reason_code: detail in roam_abort_reason
689 * @data_rssi: data rssi in dBm
690 * @data_rssi_threshold: data rssi threshold in dBm
691 * @rx_linkspeed_status: rx linkspeed status, 0:good linkspeed, 1:bad
692 */
693 struct roam_trigger_abort_reason {
694 enum roam_abort_reason abort_reason_code;
695 int8_t data_rssi;
696 int8_t data_rssi_threshold;
697 bool rx_linkspeed_status;
698 };
699
700 /**
701 * struct eroam_trigger_info - roam trigger related information
702 * @timestamp: timestamp of roaming start
703 * @trigger_reason: roam trigger reason, enum in roam_trigger_reason
704 * @condition: roam trigger detail information
705 * @abort: roam abort related information
706 * @roam_scan_type: roam scan type, enum in roam_stats_scan_type
707 * @roam_status: roam result, 0 - Roaming is success, 1 - Roaming is failed
708 * @roam_fail_reason: roam fail reason, enum in wlan_roam_failure_reason_code
709 */
710 struct eroam_trigger_info {
711 uint64_t timestamp;
712 uint32_t trigger_reason;
713 union roam_trigger_condition condition;
714 struct roam_trigger_abort_reason abort;
715 enum roam_stats_scan_type roam_scan_type;
716 uint8_t roam_status;
717 enum wlan_roam_failure_reason_code roam_fail_reason;
718 };
719
720 /**
721 * struct roam_scan_chn - each roam scan channel information
722 * @chan_freq: roam scan channel frequency(MHz)
723 * @dwell_type: indicate channel dwell type, enum in roam_scan_dwell_type
724 * @max_dwell_time: max dwell time of each channel
725 */
726 struct roam_scan_chn {
727 uint16_t chan_freq;
728 enum roam_scan_dwell_type dwell_type;
729 uint32_t max_dwell_time;
730 };
731
732 /**
733 * struct eroam_scan_info - all roam scan channel related information
734 * @num_channels: total number of channels scanned during roam scan
735 * @roam_chn: each roam scan channel information
736 * @total_scan_time: total scan time of all roam channel
737 * @original_bssid: connected AP before roam happens, regardless of
738 * the roam resulting in success or failure.
739 * For non-MLO scenario, it indicates the original connected AP BSSID.
740 * For MLO scenario, it indicates the original BSSID of the link
741 * for which the reassociation occurred during the roam.
742 * @roamed_bssid: roamed AP BSSID when roam succeeds.
743 * For non-MLO case, it indicates new AP BSSID which has been
744 * successfully roamed.
745 * For MLO case, it indicates the new AP BSSID of the link on
746 * which the reassociation occurred during the roam.
747 */
748 struct eroam_scan_info {
749 uint8_t num_channels;
750 struct roam_scan_chn roam_chn[MAX_ROAM_SCAN_CHAN];
751 uint32_t total_scan_time;
752 struct qdf_mac_addr original_bssid;
753 struct qdf_mac_addr roamed_bssid;
754 };
755
756 /**
757 * struct eroam_frame_info - frame information during roaming
758 * @frame_type: frame subtype defined in eroam_frame_subtype
759 * @status: frame status defined in eroam_roam_status
760 * @timestamp: timestamp of the auth/assoc/eapol-M1/M2/M3/M4 frame,
761 * if status is successful, indicate received or send success,
762 * if status is failed, timestamp indicate roaming fail at that time
763 * @bssid: Source address for auth/assoc/eapol frame.
764 */
765 struct eroam_frame_info {
766 enum eroam_frame_subtype frame_type;
767 enum eroam_frame_status status;
768 uint64_t timestamp;
769 struct qdf_mac_addr bssid;
770
771 };
772
773 /**
774 * struct enhance_roam_info - enhance roam information
775 * @trigger: roam trigger information
776 * @scan: roam scan information
777 * @timestamp: types of frame information during roaming
778 */
779 struct enhance_roam_info {
780 struct eroam_trigger_info trigger;
781 struct eroam_scan_info scan;
782 struct eroam_frame_info timestamp[WLAN_ROAM_MAX_FRAME_INFO];
783 };
784
785 /**
786 * struct mlme_legacy_priv - VDEV MLME legacy priv object
787 * @chan_switch_in_progress: flag to indicate that channel switch is in progress
788 * @hidden_ssid_restart_in_progress: flag to indicate hidden ssid restart is
789 * in progress
790 * @vdev_start_failed: flag to indicate that vdev start failed.
791 * @connection_fail: flag to indicate connection failed
792 * @cac_required_for_new_channel: if CAC is required for new channel
793 * @follow_ap_edca: if true, it is forced to follow the AP's edca.
794 * @reconn_after_assoc_timeout: reconnect to the same AP if association timeout
795 * @assoc_type: vdev associate/reassociate type
796 * @dynamic_cfg: current configuration of nss, chains for vdev.
797 * @ini_cfg: Max configuration of nss, chains supported for vdev.
798 * @sta_dynamic_oce_value: Dynamic oce flags value for sta
799 * @disconnect_info: Disconnection information
800 * @vdev_stop_type: vdev stop type request
801 * @mlme_roam: Roam offload state
802 * @cm_roam: Roaming configuration
803 * @auth_log: Cached log records for SAE authentication frame
804 * related information.
805 * @roam_info: enhanced roam information include trigger, scan and
806 * frame information.
807 * @roam_cache_num: number of roam information cached in driver
808 * @roam_write_index: indicate current write position of ring buffer
809 * @roam_rd_wr_lock: protect roam buffer write and read
810 * @bigtk_vdev_support: BIGTK feature support for this vdev (SAP)
811 * @sae_retry: SAE auth retry information
812 * @roam_reason_better_ap: roam due to better AP found
813 * @hb_failure_rssi: heartbeat failure AP RSSI
814 * @opr_rate_set: operational rates set
815 * @ext_opr_rate_set: extended operational rates set
816 * @mcs_rate_set: MCS Based rates set
817 * @mscs_req_info: Information related to mscs request
818 * @he_config: he config
819 * @he_sta_obsspd: he_sta_obsspd
820 * @twt_wait_for_notify: TWT session teardown received, wait for
821 * notify event from firmware before next TWT setup is done.
822 * @rso_cfg: per vdev RSO config to be sent to FW
823 * @connect_info: mlme connect information
824 * @wait_key_timer: wait key timer
825 * @eht_config: Eht capability configuration
826 * @last_delba_sent_time: Last delba sent time to handle back to back delba
827 * requests from some IOT APs
828 * @ba_2k_jump_iot_ap: This is set to true if connected to the ba 2k jump IOT AP
829 * @is_usr_ps_enabled: Is Power save enabled
830 * @notify_co_located_ap_upt_rnr: Notify co located AP to update RNR or not
831 * @is_user_std_set: true if user set the @wifi_std
832 * @wifi_std: wifi standard version
833 * @max_mcs_index: Max supported mcs index of vdev
834 * @vdev_traffic_type: to set if vdev is LOW_LATENCY or HIGH_TPUT
835 * @country_ie_for_all_band: take all band channel info in country ie
836 * @mlme_ap: SAP related vdev private configurations
837 * @is_single_link_mlo_roam: Single link mlo roam flag
838 * @bss_color_change_wakelock: wakelock to complete bss color change
839 * operation on bss color collision detection
840 * @bss_color_change_runtime_lock: runtime lock to complete bss color change
841 * @disconnect_runtime_lock: runtime lock to complete disconnection
842 * @keep_alive_period: KEEPALIVE period in seconds
843 */
844 struct mlme_legacy_priv {
845 bool chan_switch_in_progress;
846 bool hidden_ssid_restart_in_progress;
847 bool vdev_start_failed;
848 bool connection_fail;
849 bool cac_required_for_new_channel;
850 bool follow_ap_edca;
851 bool reconn_after_assoc_timeout;
852 enum vdev_assoc_type assoc_type;
853 struct wlan_mlme_nss_chains dynamic_cfg;
854 struct wlan_mlme_nss_chains ini_cfg;
855 uint8_t sta_dynamic_oce_value;
856 struct wlan_disconnect_info disconnect_info;
857 uint32_t vdev_stop_type;
858 struct wlan_mlme_roam mlme_roam;
859 struct wlan_cm_roam cm_roam;
860 #if defined(WLAN_FEATURE_ROAM_OFFLOAD) && \
861 defined(WLAN_FEATURE_CONNECTIVITY_LOGGING)
862 struct wlan_log_record
863 auth_log[MAX_ROAM_CANDIDATE_AP][WLAN_ROAM_MAX_CACHED_AUTH_FRAMES];
864 #elif defined(WLAN_FEATURE_ROAM_OFFLOAD) && defined(CONNECTIVITY_DIAG_EVENT)
865 struct wlan_diag_packet_info
866 auth_log[MAX_ROAM_CANDIDATE_AP][WLAN_ROAM_MAX_CACHED_AUTH_FRAMES];
867 #endif
868 #ifdef WLAN_FEATURE_ROAM_OFFLOAD
869 #ifdef WLAN_FEATURE_ROAM_INFO_STATS
870 struct enhance_roam_info *roam_info;
871 uint32_t roam_cache_num;
872 uint32_t roam_write_index;
873 qdf_mutex_t roam_rd_wr_lock;
874 #endif
875 #endif
876 bool bigtk_vdev_support;
877 struct sae_auth_retry sae_retry;
878 bool roam_reason_better_ap;
879 uint32_t hb_failure_rssi;
880 struct mlme_cfg_str opr_rate_set;
881 struct mlme_cfg_str ext_opr_rate_set;
882 struct mlme_cfg_str mcs_rate_set;
883 bool twt_wait_for_notify;
884 #ifdef WLAN_FEATURE_MSCS
885 struct mscs_req_info mscs_req_info;
886 #endif
887 #ifdef WLAN_FEATURE_11AX
888 tDot11fIEhe_cap he_config;
889 uint32_t he_sta_obsspd;
890 #endif
891 struct mlme_connect_info connect_info;
892 struct wait_for_key_timer wait_key_timer;
893 #ifdef WLAN_FEATURE_11BE
894 tDot11fIEeht_cap eht_config;
895 #endif
896 qdf_time_t last_delba_sent_time;
897 bool ba_2k_jump_iot_ap;
898 bool is_usr_ps_enabled;
899 bool notify_co_located_ap_upt_rnr;
900 bool is_user_std_set;
901 WMI_HOST_WIFI_STANDARD wifi_std;
902 #ifdef WLAN_FEATURE_SON
903 uint8_t max_mcs_index;
904 #endif
905 uint8_t vdev_traffic_type;
906 bool country_ie_for_all_band;
907 struct mlme_ap_config mlme_ap;
908 #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_FEATURE_ROAM_OFFLOAD)
909 bool is_single_link_mlo_roam;
910 #endif
911 qdf_wake_lock_t bss_color_change_wakelock;
912 qdf_runtime_lock_t bss_color_change_runtime_lock;
913 qdf_runtime_lock_t disconnect_runtime_lock;
914 enum reg_6g_ap_type best_6g_power_type;
915 uint16_t keep_alive_period;
916 };
917
918 /**
919 * struct del_bss_resp - params required for del bss response
920 * @status: QDF status
921 * @vdev_id: vdev_id
922 */
923 struct del_bss_resp {
924 QDF_STATUS status;
925 uint8_t vdev_id;
926 };
927
928 /**
929 * mlme_init_rate_config() - initialize rate configuration of vdev
930 * @vdev_mlme: pointer to vdev mlme object
931 *
932 * Return: Success or Failure status
933 */
934 QDF_STATUS mlme_init_rate_config(struct vdev_mlme_obj *vdev_mlme);
935
936 /**
937 * mlme_init_connect_chan_info_config() - initialize channel info for a
938 * connection
939 * @vdev_mlme: pointer to vdev mlme object
940 *
941 * Return: Success or Failure status
942 */
943 QDF_STATUS mlme_init_connect_chan_info_config(struct vdev_mlme_obj *vdev_mlme);
944
945 /**
946 * mlme_get_peer_mic_len() - get mic hdr len and mic length for peer
947 * @psoc: psoc
948 * @pdev_id: pdev id for the peer
949 * @peer_mac: peer mac
950 * @mic_len: mic length for peer
951 * @mic_hdr_len: mic header length for peer
952 *
953 * Return: Success or Failure status
954 */
955 QDF_STATUS mlme_get_peer_mic_len(struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
956 uint8_t *peer_mac, uint8_t *mic_len,
957 uint8_t *mic_hdr_len);
958
959 /**
960 * mlme_peer_object_created_notification(): mlme peer create handler
961 * @peer: peer which is going to created by objmgr
962 * @arg: argument for vdev create handler
963 *
964 * Register this api with objmgr to detect peer is created
965 *
966 * Return: QDF_STATUS status in case of success else return error
967 */
968
969 QDF_STATUS
970 mlme_peer_object_created_notification(struct wlan_objmgr_peer *peer,
971 void *arg);
972
973 /**
974 * mlme_peer_object_destroyed_notification(): mlme peer delete handler
975 * @peer: peer which is going to delete by objmgr
976 * @arg: argument for vdev delete handler
977 *
978 * Register this api with objmgr to detect peer is deleted
979 *
980 * Return: QDF_STATUS status in case of success else return error
981 */
982 QDF_STATUS
983 mlme_peer_object_destroyed_notification(struct wlan_objmgr_peer *peer,
984 void *arg);
985
986 /**
987 * mlme_get_dynamic_oce_flags(): mlme get dynamic oce flags
988 * @vdev: pointer to vdev object
989 *
990 * This api is used to get the dynamic oce flags pointer
991 *
992 * Return: QDF_STATUS status in case of success else return error
993 */
994 uint8_t *mlme_get_dynamic_oce_flags(struct wlan_objmgr_vdev *vdev);
995
996 /**
997 * mlme_get_dynamic_vdev_config() - get the vdev dynamic config params
998 * @vdev: vdev pointer
999 *
1000 * Return: pointer to the dynamic vdev config structure
1001 */
1002 struct wlan_mlme_nss_chains *mlme_get_dynamic_vdev_config(
1003 struct wlan_objmgr_vdev *vdev);
1004
1005 /**
1006 * mlme_get_vdev_he_ops() - Get vdev HE operations IE info
1007 * @psoc: Pointer to PSOC object
1008 * @vdev_id: vdev id
1009 *
1010 * Return: HE ops IE
1011 */
1012 uint32_t mlme_get_vdev_he_ops(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id);
1013
1014 /**
1015 * mlme_connected_chan_stats_request() - process connected channel stats
1016 * request
1017 * @psoc: pointer to psoc object
1018 * @vdev_id: Vdev id
1019 *
1020 * Return: QDF_STATUS
1021 */
1022 QDF_STATUS mlme_connected_chan_stats_request(struct wlan_objmgr_psoc *psoc,
1023 uint8_t vdev_id);
1024
1025 /**
1026 * mlme_get_ini_vdev_config() - get the vdev ini config params
1027 * @vdev: vdev pointer
1028 *
1029 * Return: pointer to the ini vdev config structure
1030 */
1031 struct wlan_mlme_nss_chains *mlme_get_ini_vdev_config(
1032 struct wlan_objmgr_vdev *vdev);
1033
1034 /**
1035 * mlme_cfg_on_psoc_enable() - Populate MLME structure from CFG and INI
1036 * @psoc: pointer to the psoc object
1037 *
1038 * Populate the MLME CFG structure from CFG and INI values using CFG APIs
1039 *
1040 * Return: QDF_STATUS
1041 */
1042 QDF_STATUS mlme_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc);
1043
1044 /**
1045 * mlme_get_psoc_ext_obj() - Get MLME object from psoc
1046 * @psoc: pointer to the psoc object
1047 *
1048 * Get the MLME object pointer from the psoc
1049 *
1050 * Return: pointer to MLME object
1051 */
1052 #define mlme_get_psoc_ext_obj(psoc) \
1053 mlme_get_psoc_ext_obj_fl(psoc, __func__, __LINE__)
1054 struct wlan_mlme_psoc_ext_obj *mlme_get_psoc_ext_obj_fl(struct wlan_objmgr_psoc
1055 *psoc,
1056 const char *func,
1057 uint32_t line);
1058
1059 /**
1060 * mlme_get_sae_auth_retry() - Get sae_auth_retry pointer
1061 * @vdev: vdev pointer
1062 *
1063 * Return: Pointer to struct sae_auth_retry or NULL
1064 */
1065 struct sae_auth_retry *mlme_get_sae_auth_retry(struct wlan_objmgr_vdev *vdev);
1066
1067 /**
1068 * mlme_free_sae_auth_retry() - Free the SAE auth info
1069 * @vdev: vdev pointer
1070 *
1071 * Return: None
1072 */
1073 void mlme_free_sae_auth_retry(struct wlan_objmgr_vdev *vdev);
1074
1075 /**
1076 * mlme_set_self_disconnect_ies() - Set diconnect IEs configured from userspace
1077 * @vdev: vdev pointer
1078 * @ie: pointer for disconnect IEs
1079 *
1080 * Return: None
1081 */
1082 void mlme_set_self_disconnect_ies(struct wlan_objmgr_vdev *vdev,
1083 struct element_info *ie);
1084
1085 /**
1086 * mlme_free_self_disconnect_ies() - Free the self diconnect IEs
1087 * @vdev: vdev pointer
1088 *
1089 * Return: None
1090 */
1091 void mlme_free_self_disconnect_ies(struct wlan_objmgr_vdev *vdev);
1092
1093 /**
1094 * mlme_get_self_disconnect_ies() - Get diconnect IEs from vdev object
1095 * @vdev: vdev pointer
1096 *
1097 * Return: Returns a pointer to the self disconnect IEs present in vdev object
1098 */
1099 struct element_info *mlme_get_self_disconnect_ies(struct wlan_objmgr_vdev *vdev);
1100
1101 /**
1102 * mlme_set_peer_disconnect_ies() - Cache disconnect IEs received from peer
1103 * @vdev: vdev pointer
1104 * @ie: pointer for disconnect IEs
1105 *
1106 * Return: None
1107 */
1108 void mlme_set_peer_disconnect_ies(struct wlan_objmgr_vdev *vdev,
1109 struct element_info *ie);
1110
1111 /**
1112 * mlme_free_peer_disconnect_ies() - Free the peer diconnect IEs
1113 * @vdev: vdev pointer
1114 *
1115 * Return: None
1116 */
1117 void mlme_free_peer_disconnect_ies(struct wlan_objmgr_vdev *vdev);
1118
1119 /**
1120 * mlme_set_follow_ap_edca_flag() - Set follow ap's edca flag
1121 * @vdev: vdev pointer
1122 * @flag: carries if following ap's edca is true or not.
1123 *
1124 * Return: None
1125 */
1126 void mlme_set_follow_ap_edca_flag(struct wlan_objmgr_vdev *vdev, bool flag);
1127
1128 /**
1129 * mlme_get_follow_ap_edca_flag() - Get follow ap's edca flag
1130 * @vdev: vdev pointer
1131 *
1132 * Return: value of follow_ap_edca
1133 */
1134 bool mlme_get_follow_ap_edca_flag(struct wlan_objmgr_vdev *vdev);
1135
1136 /**
1137 * mlme_set_best_6g_power_type() - Set best 6g power type
1138 * @vdev: vdev pointer
1139 * @best_6g_power_type: best 6g power type
1140 *
1141 * Return: None
1142 */
1143 void mlme_set_best_6g_power_type(struct wlan_objmgr_vdev *vdev,
1144 enum reg_6g_ap_type best_6g_power_type);
1145
1146 /**
1147 * mlme_get_best_6g_power_type() - Get best 6g power type
1148 * @vdev: vdev pointer
1149 *
1150 * Return: value of best 6g power type
1151 */
1152 enum reg_6g_ap_type mlme_get_best_6g_power_type(struct wlan_objmgr_vdev *vdev);
1153
1154 /**
1155 * mlme_set_reconn_after_assoc_timeout_flag() - Set reconn after assoc timeout
1156 * flag
1157 * @psoc: soc object
1158 * @vdev_id: vdev id
1159 * @flag: enable or disable reconnect
1160 *
1161 * Return: void
1162 */
1163 void mlme_set_reconn_after_assoc_timeout_flag(struct wlan_objmgr_psoc *psoc,
1164 uint8_t vdev_id, bool flag);
1165
1166 /**
1167 * mlme_get_reconn_after_assoc_timeout_flag() - Get reconn after assoc timeout
1168 * flag
1169 * @psoc: soc object
1170 * @vdev_id: vdev id
1171 *
1172 * Return: true for enabling reconnect, otherwise false
1173 */
1174 bool mlme_get_reconn_after_assoc_timeout_flag(struct wlan_objmgr_psoc *psoc,
1175 uint8_t vdev_id);
1176
1177 /**
1178 * mlme_get_peer_disconnect_ies() - Get diconnect IEs from vdev object
1179 * @vdev: vdev pointer
1180 *
1181 * Return: Returns a pointer to the peer disconnect IEs present in vdev object
1182 */
1183 struct element_info *mlme_get_peer_disconnect_ies(struct wlan_objmgr_vdev *vdev);
1184
1185 /**
1186 * mlme_free_peer_assoc_rsp_ie() - Free the peer Assoc resp IE
1187 * @peer_priv: Peer priv object
1188 *
1189 * Return: None
1190 */
1191 void mlme_free_peer_assoc_rsp_ie(struct peer_mlme_priv_obj *peer_priv);
1192
1193 /**
1194 * mlme_set_peer_assoc_rsp_ie() - Cache Assoc resp IE send to peer
1195 * @psoc: soc object
1196 * @peer_addr: Mac address of requesting peer
1197 * @ie: pointer for assoc resp IEs
1198 *
1199 * Return: None
1200 */
1201 void mlme_set_peer_assoc_rsp_ie(struct wlan_objmgr_psoc *psoc,
1202 uint8_t *peer_addr, struct element_info *ie);
1203
1204 /**
1205 * mlme_set_peer_pmf_status() - set pmf status of peer
1206 * @peer: PEER object
1207 * @is_pmf_enabled: Carries if PMF is enabled or not
1208 *
1209 * is_pmf_enabled will be set to true if PMF is enabled by peer
1210 *
1211 * Return: void
1212 */
1213 void mlme_set_peer_pmf_status(struct wlan_objmgr_peer *peer,
1214 bool is_pmf_enabled);
1215 /**
1216 * mlme_get_peer_pmf_status() - get if peer is of pmf capable
1217 * @peer: PEER object
1218 *
1219 * Return: Value of is_pmf_enabled; True if PMF is enabled by peer
1220 */
1221 bool mlme_get_peer_pmf_status(struct wlan_objmgr_peer *peer);
1222
1223 /**
1224 * wlan_get_opmode_from_vdev_id() - Get opmode from vdevid
1225 * @pdev: pdev pointer
1226 * @vdev_id: vdev id
1227 *
1228 * Return: opmode
1229 */
1230 enum QDF_OPMODE wlan_get_opmode_from_vdev_id(struct wlan_objmgr_pdev *pdev,
1231 uint8_t vdev_id);
1232
1233 /**
1234 * wlan_mlme_get_bssid_vdev_id() - get bss peer mac address(BSSID) using vdev id
1235 * @pdev: pdev
1236 * @vdev_id: vdev_id
1237 * @bss_peer_mac: pointer to bss_peer_mac_address
1238 *
1239 * This API is used to get mac address of bss peer/bssid.
1240 *
1241 * Context: Any context.
1242 *
1243 * Return: QDF_STATUS based on overall success
1244 */
1245 QDF_STATUS wlan_mlme_get_bssid_vdev_id(struct wlan_objmgr_pdev *pdev,
1246 uint8_t vdev_id,
1247 struct qdf_mac_addr *bss_peer_mac);
1248
1249 /**
1250 * mlme_update_freq_in_scan_start_req() - Fill frequencies in wide
1251 * band scan req for mlo connection
1252 * @vdev: vdev common object
1253 * @req: pointer to scan request
1254 * @scan_ch_width: Channel width for which to trigger a wide band scan
1255 * @scan_freq: frequency for which to trigger a wide band RRM scan
1256 * @cen320_freq: 320 MHz center freq
1257 *
1258 * Return: QDF_STATUS
1259 */
1260 QDF_STATUS
1261 mlme_update_freq_in_scan_start_req(struct wlan_objmgr_vdev *vdev,
1262 struct scan_start_request *req,
1263 enum phy_ch_width scan_ch_width,
1264 qdf_freq_t scan_freq,
1265 qdf_freq_t cen320_freq);
1266
1267 /**
1268 * wlan_get_operation_chan_freq() - get operating chan freq of
1269 * given vdev
1270 * @vdev: vdev
1271 *
1272 * Return: chan freq of given vdev id
1273 */
1274 qdf_freq_t wlan_get_operation_chan_freq(struct wlan_objmgr_vdev *vdev);
1275
1276 /**
1277 * wlan_get_operation_chan_freq_vdev_id() - get operating chan freq of
1278 * given vdev id
1279 * @pdev: Pointer to pdev
1280 * @vdev_id: vdev id
1281 *
1282 * Return: chan freq of given vdev id
1283 */
1284 qdf_freq_t wlan_get_operation_chan_freq_vdev_id(struct wlan_objmgr_pdev *pdev,
1285 uint8_t vdev_id);
1286
1287 /**
1288 * wlan_vdev_set_dot11mode - Set the dot11mode of the vdev
1289 * @mac_mlme_cfg: MAC's MLME config pointer
1290 * @device_mode: OPMODE of the vdev
1291 * @vdev_mlme: MLME component of the vdev
1292 *
1293 * Use this API to set the dot11mode of the vdev.
1294 * For non-ML type vdev, this API restricts the connection
1295 * of vdev to 11ax on 11be capable operation.
1296 *
1297 * Return: void
1298 */
1299 void wlan_vdev_set_dot11mode(struct wlan_mlme_cfg *mac_mlme_cfg,
1300 enum QDF_OPMODE device_mode,
1301 struct vdev_mlme_obj *vdev_mlme);
1302
1303 /**
1304 * wlan_is_open_wep_cipher() - check if cipher is open or WEP
1305 * @pdev: Pointer to pdev
1306 * @vdev_id: vdev id
1307 *
1308 * Return: if cipher is open or WEP
1309 */
1310 bool wlan_is_open_wep_cipher(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id);
1311
1312 /**
1313 * wlan_vdev_id_is_open_cipher() - check if cipher is open
1314 * @pdev: Pointer to pdev
1315 * @vdev_id: vdev id
1316 *
1317 * Return: if cipher is open
1318 */
1319 bool wlan_vdev_id_is_open_cipher(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id);
1320
1321 /**
1322 * wlan_vdev_is_open_mode() - check if cipher is open
1323 * @vdev: Pointer to vdev
1324 *
1325 * Return: if cipher is open
1326 */
1327 bool wlan_vdev_is_open_mode(struct wlan_objmgr_vdev *vdev);
1328
1329 /**
1330 * wlan_vdev_id_is_11n_allowed() - check if 11n allowed
1331 * @pdev: Pointer to pdev
1332 * @vdev_id: vdev id
1333 *
1334 * Return: false if cipher is TKIP or WEP
1335 */
1336 bool wlan_vdev_id_is_11n_allowed(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id);
1337
1338 /**
1339 * wlan_is_vdev_id_up() - check if vdev id is in UP state
1340 * @pdev: Pointer to pdev
1341 * @vdev_id: vdev id
1342 *
1343 * Return: if vdev is up
1344 */
1345 bool wlan_is_vdev_id_up(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id);
1346
1347 QDF_STATUS
1348 wlan_get_op_chan_freq_info_vdev_id(struct wlan_objmgr_pdev *pdev,
1349 uint8_t vdev_id, qdf_freq_t *op_freq,
1350 qdf_freq_t *freq_seg_0,
1351 enum phy_ch_width *ch_width);
1352
1353 /**
1354 * wlan_strip_ie() - strip requested IE from IE buffer
1355 * @addn_ie: Additional IE buffer
1356 * @addn_ielen: Length of additional IE
1357 * @eid: EID of IE to strip
1358 * @size_of_len_field: length of IE length field
1359 * @oui: if present matches OUI also
1360 * @oui_length: if previous present, this is length of oui
1361 * @extracted_ie: if not NULL, copy the stripped IE to this buffer
1362 * @eid_max_len: maximum length of IE @eid
1363 *
1364 * This utility function is used to strip of the requested IE if present
1365 * in IE buffer.
1366 *
1367 * Return: QDF_STATUS
1368 */
1369 QDF_STATUS wlan_strip_ie(uint8_t *addn_ie, uint16_t *addn_ielen,
1370 uint8_t eid, enum size_of_len_field size_of_len_field,
1371 uint8_t *oui, uint8_t oui_length,
1372 uint8_t *extracted_ie, uint32_t eid_max_len);
1373
1374 /**
1375 * wlan_is_channel_present_in_list() - check if rfeq is present in the list
1376 * given vdev id
1377 * @freq_lst: given freq list
1378 * @num_chan: num of chan freq
1379 * @chan_freq: chan freq to check
1380 *
1381 * Return: chan freq of given vdev id
1382 */
1383 bool wlan_is_channel_present_in_list(qdf_freq_t *freq_lst,
1384 uint32_t num_chan, qdf_freq_t chan_freq);
1385
1386 /**
1387 * wlan_roam_is_channel_valid() - validate channel frequency
1388 * @reg: regulatory context
1389 * @chan_freq: channel frequency
1390 *
1391 * This function validates channel frequency present in valid channel
1392 * list or not.
1393 *
1394 * Return: true or false
1395 */
1396 bool wlan_roam_is_channel_valid(struct wlan_mlme_reg *reg,
1397 qdf_freq_t chan_freq);
1398
1399 int8_t wlan_get_cfg_max_tx_power(struct wlan_objmgr_psoc *psoc,
1400 struct wlan_objmgr_pdev *pdev,
1401 uint32_t ch_freq);
1402
1403 #if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
1404 /**
1405 * mlme_get_supplicant_disabled_roaming() - Get supplicant disabled roaming
1406 * value for a given vdev.
1407 * @psoc: PSOC pointer
1408 * @vdev_id: Vdev for which the supplicant disabled roaming value is being
1409 * requested
1410 *
1411 * Return: True if supplicant disabled roaming else false
1412 */
1413 bool
1414 mlme_get_supplicant_disabled_roaming(struct wlan_objmgr_psoc *psoc,
1415 uint8_t vdev_id);
1416
1417 /**
1418 * mlme_set_supplicant_disabled_roaming - Set the supplicant disabled
1419 * roaming flag.
1420 * @psoc: PSOC pointer
1421 * @vdev_id: Vdev for which the supplicant disabled roaming needs to
1422 * be set
1423 * @val: value true is to disable RSO and false to enable RSO
1424 *
1425 * Return: None
1426 */
1427 void mlme_set_supplicant_disabled_roaming(struct wlan_objmgr_psoc *psoc,
1428 uint8_t vdev_id, bool val);
1429
1430 /**
1431 * mlme_get_roam_trigger_bitmap() - Get roaming trigger bitmap value for a given
1432 * vdev.
1433 * @psoc: PSOC pointer
1434 * @vdev_id: Vdev for which the roam trigger bitmap is being requested
1435 *
1436 * Return: roaming trigger bitmap
1437 */
1438 uint32_t
1439 mlme_get_roam_trigger_bitmap(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id);
1440
1441 /**
1442 * mlme_set_roam_trigger_bitmap() - Set the roaming trigger bitmap value for
1443 * the given vdev. If the bitmap is zero then roaming is completely disabled
1444 * on the vdev which means roam structure in firmware is not allocated and no
1445 * RSO start/stop commands can be sent
1446 * @psoc: PSOC pointer
1447 * @vdev_id: Vdev for which the roam trigger bitmap is to be set
1448 * @val: bitmap value to set
1449 *
1450 * Return: None
1451 */
1452 void mlme_set_roam_trigger_bitmap(struct wlan_objmgr_psoc *psoc,
1453 uint8_t vdev_id, uint32_t val);
1454
1455 /**
1456 * mlme_get_roam_state() - Get roam state from vdev object
1457 * @psoc: psoc pointer
1458 * @vdev_id: vdev id
1459 *
1460 * Return: Returns roam offload state
1461 */
1462 enum roam_offload_state
1463 mlme_get_roam_state(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id);
1464
1465 /**
1466 * mlme_set_roam_state() - Set roam state in vdev object
1467 * @psoc: psoc pointer
1468 * @vdev_id: vdev id
1469 * @val: roam offload state
1470 *
1471 * Return: None
1472 */
1473 void mlme_set_roam_state(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
1474 enum roam_offload_state val);
1475
1476 /**
1477 * mlme_get_operations_bitmap() - Get the mlme operations bitmap which
1478 * contains the bitmap of mlme operations which have disabled roaming
1479 * temporarily
1480 * @psoc: PSOC pointer
1481 * @vdev_id: vdev for which the mlme operation bitmap is requested
1482 *
1483 * Return: bitmap value
1484 */
1485 uint8_t
1486 mlme_get_operations_bitmap(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id);
1487
1488 /**
1489 * mlme_set_operations_bitmap() - Set the mlme operations bitmap which
1490 * indicates what mlme operations are in progress
1491 * @psoc: PSOC pointer
1492 * @vdev_id: vdev for which the mlme operation bitmap is requested
1493 * @reqs: RSO stop requestor
1494 * @clear: clear bit if true else set bit
1495 *
1496 * Return: None
1497 */
1498 void
1499 mlme_set_operations_bitmap(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
1500 enum wlan_cm_rso_control_requestor reqs, bool clear);
1501 /**
1502 * mlme_clear_operations_bitmap() - Clear mlme operations bitmap which
1503 * indicates what mlme operations are in progress
1504 * @psoc: PSOC pointer
1505 * @vdev_id: vdev for which the mlme operation bitmap is requested
1506 *
1507 * Return: None
1508 */
1509 void
1510 mlme_clear_operations_bitmap(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id);
1511
1512 /**
1513 * mlme_get_cfg_wlm_level() - Get the WLM level value
1514 * @psoc: pointer to psoc object
1515 * @level: level that needs to be filled.
1516 *
1517 * Return: QDF Status
1518 */
1519 QDF_STATUS mlme_get_cfg_wlm_level(struct wlan_objmgr_psoc *psoc,
1520 uint8_t *level);
1521
1522 #ifdef MULTI_CLIENT_LL_SUPPORT
1523 /**
1524 * mlme_get_cfg_multi_client_ll_ini_support() - Get the ini value of wlm multi
1525 * client latency level feature
1526 * @psoc: pointer to psoc object
1527 * @multi_client_ll_support: parameter that needs to be filled.
1528 *
1529 * Return: QDF Status
1530 */
1531 QDF_STATUS
1532 mlme_get_cfg_multi_client_ll_ini_support(struct wlan_objmgr_psoc *psoc,
1533 bool *multi_client_ll_support);
1534 #else
1535 static inline QDF_STATUS
mlme_get_cfg_multi_client_ll_ini_support(struct wlan_objmgr_psoc * psoc,bool * multi_client_ll_support)1536 mlme_get_cfg_multi_client_ll_ini_support(struct wlan_objmgr_psoc *psoc,
1537 bool *multi_client_ll_support)
1538 {
1539 return QDF_STATUS_E_FAILURE;
1540 }
1541 #endif
1542
1543 /**
1544 * mlme_get_cfg_wlm_reset() - Get the WLM reset flag
1545 * @psoc: pointer to psoc object
1546 * @reset: reset that needs to be filled.
1547 *
1548 * Return: QDF Status
1549 */
1550 QDF_STATUS mlme_get_cfg_wlm_reset(struct wlan_objmgr_psoc *psoc,
1551 bool *reset);
1552
1553 #define MLME_IS_ROAM_STATE_RSO_ENABLED(psoc, vdev_id) \
1554 (mlme_get_roam_state(psoc, vdev_id) == WLAN_ROAM_RSO_ENABLED)
1555
1556 #define MLME_IS_ROAM_STATE_DEINIT(psoc, vdev_id) \
1557 (mlme_get_roam_state(psoc, vdev_id) == WLAN_ROAM_DEINIT)
1558
1559 #define MLME_IS_ROAM_STATE_INIT(psoc, vdev_id) \
1560 (mlme_get_roam_state(psoc, vdev_id) == WLAN_ROAM_INIT)
1561
1562 #define MLME_IS_ROAM_STATE_STOPPED(psoc, vdev_id) \
1563 (mlme_get_roam_state(psoc, vdev_id) == WLAN_ROAM_RSO_STOPPED)
1564
1565 #define MLME_IS_ROAM_INITIALIZED(psoc, vdev_id) \
1566 (mlme_get_roam_state(psoc, vdev_id) >= WLAN_ROAM_INIT)
1567 #endif
1568
1569 #ifdef WLAN_FEATURE_ROAM_OFFLOAD
1570 #define MLME_IS_ROAMING_IN_PROG(psoc, vdev_id) \
1571 (mlme_get_roam_state(psoc, vdev_id) == WLAN_ROAMING_IN_PROG)
1572
1573 #define MLME_IS_ROAM_SYNCH_IN_PROGRESS(psoc, vdev_id) \
1574 (mlme_get_roam_state(psoc, vdev_id) == WLAN_ROAM_SYNCH_IN_PROG)
1575
1576 #else
1577 #define MLME_IS_ROAMING_IN_PROG(psoc, vdev_id) (false)
1578 #define MLME_IS_ROAM_SYNCH_IN_PROGRESS(psoc, vdev_id) (false)
1579 #endif
1580
1581 #if defined (WLAN_FEATURE_11BE_MLO) && defined(WLAN_FEATURE_ROAM_OFFLOAD)
1582 #define MLME_IS_MLO_ROAM_SYNCH_IN_PROGRESS(psoc, vdev_id) \
1583 (mlme_get_roam_state(psoc, vdev_id) == WLAN_MLO_ROAM_SYNCH_IN_PROG)
1584 #else
1585 #define MLME_IS_MLO_ROAM_SYNCH_IN_PROGRESS(psoc, vdev_id) (false)
1586 #endif
1587
1588 /**
1589 * mlme_reinit_control_config_lfr_params() - Reinitialize roam control config
1590 * @psoc: PSOC pointer
1591 * @lfr: Pointer of an lfr_cfg buffer to fill.
1592 *
1593 * Reinitialize/restore the param related control roam config lfr params with
1594 * default values of corresponding ini params.
1595 *
1596 * Return: None
1597 */
1598 void mlme_reinit_control_config_lfr_params(struct wlan_objmgr_psoc *psoc,
1599 struct wlan_mlme_lfr_cfg *lfr);
1600
1601 /**
1602 * wlan_mlme_get_mac_vdev_id() - get vdev self mac address using vdev id
1603 * @pdev: pdev
1604 * @vdev_id: vdev_id
1605 * @self_mac: pointer to self_mac_address
1606 *
1607 * This API is used to get self mac address.
1608 *
1609 * Context: Any context.
1610 *
1611 * Return: QDF_STATUS based on overall success
1612 */
1613 QDF_STATUS wlan_mlme_get_mac_vdev_id(struct wlan_objmgr_pdev *pdev,
1614 uint8_t vdev_id,
1615 struct qdf_mac_addr *self_mac);
1616
1617 /**
1618 * wlan_acquire_peer_key_wakelock -api to get key wakelock
1619 * @pdev: pdev
1620 * @mac_addr: peer mac addr
1621 *
1622 * This function acquires wakelock and prevent runtime pm during key
1623 * installation
1624 *
1625 * Return: None
1626 */
1627 void wlan_acquire_peer_key_wakelock(struct wlan_objmgr_pdev *pdev,
1628 uint8_t *mac_addr);
1629
1630 /**
1631 * wlan_release_peer_key_wakelock -api to release key wakelock
1632 * @pdev: pdev
1633 * @mac_addr: peer mac addr
1634 *
1635 * This function releases wakelock and allow runtime pm after key
1636 * installation
1637 *
1638 * Return: None
1639 */
1640 void wlan_release_peer_key_wakelock(struct wlan_objmgr_pdev *pdev,
1641 uint8_t *mac_addr);
1642
1643 /**
1644 * wlan_get_sap_user_config_freq() - Get the user configured frequency
1645 *
1646 * @vdev: pointer to vdev
1647 *
1648 * Return: User configured sap frequency.
1649 */
1650 qdf_freq_t
1651 wlan_get_sap_user_config_freq(struct wlan_objmgr_vdev *vdev);
1652
1653 /**
1654 * wlan_set_sap_user_config_freq() - Set the user configured frequency
1655 *
1656 * @vdev: pointer to vdev
1657 * @freq: user configured SAP frequency
1658 *
1659 * Return: QDF_STATUS
1660 */
1661 QDF_STATUS
1662 wlan_set_sap_user_config_freq(struct wlan_objmgr_vdev *vdev,
1663 qdf_freq_t freq);
1664
1665 #if defined(WLAN_FEATURE_11BE_MLO)
1666 /**
1667 * wlan_clear_mlo_sta_link_removed_flag() - Clear link removal flag on all
1668 * vdev of same ml dev
1669 * @vdev: pointer to vdev
1670 *
1671 * Return: void
1672 */
1673 void wlan_clear_mlo_sta_link_removed_flag(struct wlan_objmgr_vdev *vdev);
1674
1675 /**
1676 * wlan_get_mlo_link_agnostic_flag() - Update mlo link agnostic flag
1677 *
1678 * @vdev: pointer to vdev
1679 * @dest_addr: destination address
1680 *
1681 * Return: true/false
1682 */
1683 bool wlan_get_mlo_link_agnostic_flag(struct wlan_objmgr_vdev *vdev,
1684 uint8_t *dest_addr);
1685 /**
1686 * wlan_set_vdev_link_removed_flag_by_vdev_id() - Set link removal flag
1687 * on vdev
1688 * @psoc: psoc object
1689 * @vdev_id: vdev id
1690 * @removed: link removal flag
1691 *
1692 * Return: QDF_STATUS_SUCCESS if success, otherwise error code
1693 */
1694 QDF_STATUS
1695 wlan_set_vdev_link_removed_flag_by_vdev_id(struct wlan_objmgr_psoc *psoc,
1696 uint8_t vdev_id, bool removed);
1697
1698 /**
1699 * wlan_get_vdev_link_removed_flag_by_vdev_id() - Get link removal flag
1700 * of vdev
1701 * @psoc: psoc object
1702 * @vdev_id: vdev id
1703 *
1704 * Return: true if link is removed on vdev, otherwise false.
1705 */
1706 bool
1707 wlan_get_vdev_link_removed_flag_by_vdev_id(struct wlan_objmgr_psoc *psoc,
1708 uint8_t vdev_id);
1709
1710 /**
1711 * wlan_drop_mgmt_frame_on_link_removal() - Check mgmt frame
1712 * allow dropped due to link removal
1713 * @vdev: pointer to vdev
1714 *
1715 * Return: true if frame can be dropped.
1716 */
1717 bool wlan_drop_mgmt_frame_on_link_removal(struct wlan_objmgr_vdev *vdev);
1718 #else
1719 static inline void
wlan_clear_mlo_sta_link_removed_flag(struct wlan_objmgr_vdev * vdev)1720 wlan_clear_mlo_sta_link_removed_flag(struct wlan_objmgr_vdev *vdev)
1721 {
1722 }
1723
1724 static inline
wlan_get_mlo_link_agnostic_flag(struct wlan_objmgr_vdev * vdev,uint8_t * dest_addr)1725 bool wlan_get_mlo_link_agnostic_flag(struct wlan_objmgr_vdev *vdev,
1726 uint8_t *dest_addr)
1727 {
1728 return false;
1729 }
1730
1731 static inline QDF_STATUS
wlan_set_vdev_link_removed_flag_by_vdev_id(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id,bool removed)1732 wlan_set_vdev_link_removed_flag_by_vdev_id(struct wlan_objmgr_psoc *psoc,
1733 uint8_t vdev_id, bool removed)
1734 {
1735 return QDF_STATUS_SUCCESS;
1736 }
1737
1738 static inline bool
wlan_get_vdev_link_removed_flag_by_vdev_id(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id)1739 wlan_get_vdev_link_removed_flag_by_vdev_id(struct wlan_objmgr_psoc *psoc,
1740 uint8_t vdev_id)
1741 {
1742 return false;
1743 }
1744
1745 static inline bool
wlan_drop_mgmt_frame_on_link_removal(struct wlan_objmgr_vdev * vdev)1746 wlan_drop_mgmt_frame_on_link_removal(struct wlan_objmgr_vdev *vdev)
1747 {
1748 return false;
1749 }
1750 #endif
1751
1752 #ifdef CONFIG_BAND_6GHZ
1753 /**
1754 * wlan_get_tpc_update_required_for_sta() - Get the tpc update required config
1755 * to identify whether the tpc power has changed for concurrent STA interface
1756 *
1757 * @vdev: pointer to SAP vdev
1758 *
1759 * Return: Change scc power config
1760 */
1761 bool
1762 wlan_get_tpc_update_required_for_sta(struct wlan_objmgr_vdev *vdev);
1763
1764 /**
1765 * wlan_set_tpc_update_required_for_sta() - Set the tpc update required config
1766 * for the concurrent STA interface
1767 *
1768 * @vdev: pointer to SAP vdev
1769 * @value: change scc power config
1770 *
1771 * Return: QDF_STATUS
1772 */
1773 QDF_STATUS
1774 wlan_set_tpc_update_required_for_sta(struct wlan_objmgr_vdev *vdev, bool value);
1775 #else
1776 static inline bool
wlan_get_tpc_update_required_for_sta(struct wlan_objmgr_vdev * vdev)1777 wlan_get_tpc_update_required_for_sta(struct wlan_objmgr_vdev *vdev)
1778 {
1779 return false;
1780 }
1781
1782 static inline QDF_STATUS
wlan_set_tpc_update_required_for_sta(struct wlan_objmgr_vdev * vdev,bool value)1783 wlan_set_tpc_update_required_for_sta(struct wlan_objmgr_vdev *vdev, bool value)
1784 {
1785 return QDF_STATUS_SUCCESS;
1786 }
1787 #endif
1788
1789 /**
1790 * wlan_mlme_get_sta_num_tx_chains() - API to get station num tx chains
1791 *
1792 * @psoc: psoc context
1793 * @vdev: pointer to vdev
1794 * @tx_chains : tx_chains out parameter
1795 *
1796 * Return: QDF_STATUS_SUCCESS or QDF_STATUS_FAILURE
1797 */
1798 QDF_STATUS
1799 wlan_mlme_get_sta_num_tx_chains(struct wlan_objmgr_psoc *psoc,
1800 struct wlan_objmgr_vdev *vdev,
1801 uint8_t *tx_chains);
1802
1803 /**
1804 * wlan_mlme_get_sta_tx_nss() - API to get station tx NSS
1805 *
1806 * @psoc: psoc context
1807 * @vdev: pointer to vdev
1808 * @tx_nss : tx_nss out parameter
1809 *
1810 * Return: QDF_STATUS_SUCCESS or QDF_STATUS_FAILURE
1811 */
1812 QDF_STATUS
1813 wlan_mlme_get_sta_tx_nss(struct wlan_objmgr_psoc *psoc,
1814 struct wlan_objmgr_vdev *vdev,
1815 uint8_t *tx_nss);
1816
1817 /**
1818 * wlan_mlme_get_sta_num_rx_chains() - API to get station num rx chains
1819 *
1820 * @psoc: psoc context
1821 * @vdev: pointer to vdev
1822 * @rx_chains : rx_chains out parameter
1823 *
1824 * Return: QDF_STATUS_SUCCESS or QDF_STATUS_FAILURE
1825 */
1826 QDF_STATUS
1827 wlan_mlme_get_sta_num_rx_chains(struct wlan_objmgr_psoc *psoc,
1828 struct wlan_objmgr_vdev *vdev,
1829 uint8_t *rx_chains);
1830
1831 /**
1832 * wlan_mlme_get_sta_rx_nss() - API to get station rx NSS
1833 *
1834 * @psoc: psoc context
1835 * @vdev: pointer to vdev
1836 * @rx_nss : rx_nss out parameter
1837 *
1838 * Return: QDF_STATUS_SUCCESS or QDF_STATUS_FAILURE
1839 */
1840 QDF_STATUS
1841 wlan_mlme_get_sta_rx_nss(struct wlan_objmgr_psoc *psoc,
1842 struct wlan_objmgr_vdev *vdev,
1843 uint8_t *rx_nss);
1844
1845 #ifdef WLAN_FEATURE_ROAM_OFFLOAD
1846 /**
1847 * wlan_mlme_defer_pmk_set_in_roaming() - Set the set_key pending status
1848 *
1849 * @psoc: pointer to psoc
1850 * @vdev_id: vdev id
1851 * @set_pmk_pending: set_key pending status
1852 *
1853 * Return: None
1854 */
1855 void
1856 wlan_mlme_defer_pmk_set_in_roaming(struct wlan_objmgr_psoc *psoc,
1857 uint8_t vdev_id, bool set_pmk_pending);
1858
1859 /**
1860 * wlan_mlme_is_pmk_set_deferred() - Get the set_key pending status
1861 *
1862 * @psoc: pointer to psoc
1863 * @vdev_id: vdev id
1864 *
1865 * Return : set_key pending status
1866 */
1867 bool
1868 wlan_mlme_is_pmk_set_deferred(struct wlan_objmgr_psoc *psoc,
1869 uint8_t vdev_id);
1870 #else
1871 static inline void
wlan_mlme_defer_pmk_set_in_roaming(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id,bool set_pmk_pending)1872 wlan_mlme_defer_pmk_set_in_roaming(struct wlan_objmgr_psoc *psoc,
1873 uint8_t vdev_id, bool set_pmk_pending)
1874 {
1875 }
1876
1877 static inline bool
wlan_mlme_is_pmk_set_deferred(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id)1878 wlan_mlme_is_pmk_set_deferred(struct wlan_objmgr_psoc *psoc,
1879 uint8_t vdev_id)
1880 {
1881 return false;
1882 }
1883 #endif
1884
1885 #ifdef WLAN_FEATURE_SAE
1886 /**
1887 * wlan_vdev_is_sae_auth_type() - is vdev SAE auth type
1888 * @vdev: pointer to vdev
1889 *
1890 * Return: true if vdev is SAE auth type
1891 */
1892 bool wlan_vdev_is_sae_auth_type(struct wlan_objmgr_vdev *vdev);
1893 #endif /* WLAN_FEATURE_SAE */
1894
1895 /**
1896 * wlan_get_rand_from_lst_for_freq()- Get random channel from a given channel
1897 * list.
1898 * @freq_lst: Frequency list
1899 * @num_chan: number of channels
1900 *
1901 * Get random channel from given channel list.
1902 *
1903 * Return: channel frequency.
1904 */
1905 uint16_t wlan_get_rand_from_lst_for_freq(uint16_t *freq_lst,
1906 uint8_t num_chan);
1907 #if defined WLAN_FEATURE_SR
1908 /**
1909 * mlme_sr_update() - MLME sr update callback
1910 * @vdev: vdev object
1911 * @enable: true or false
1912 *
1913 * This function is called to update the SR threshold
1914 */
1915 void mlme_sr_update(struct wlan_objmgr_vdev *vdev, bool enable);
1916
1917 /**
1918 * mlme_sr_is_enable: Check whether SR is enabled or not
1919 * @vdev: object manager vdev
1920 *
1921 * Return: True/False
1922 */
1923 int mlme_sr_is_enable(struct wlan_objmgr_vdev *vdev);
1924 #else
mlme_sr_update(struct wlan_objmgr_vdev * vdev,bool enable)1925 static inline void mlme_sr_update(struct wlan_objmgr_vdev *vdev, bool enable)
1926 {
1927 }
1928
mlme_sr_is_enable(struct wlan_objmgr_vdev * vdev)1929 static inline int mlme_sr_is_enable(struct wlan_objmgr_vdev *vdev)
1930 {
1931 return 0;
1932 }
1933 #endif /* WLAN_FEATURE_SR */
1934
1935 /**
1936 * mlme_peer_oper_mode_change_event_handler() - Handle peer oper mode event
1937 * @scn: handle
1938 * @event: Event data received from firmware
1939 * @len: Event data length received from firmware
1940 */
1941 int mlme_peer_oper_mode_change_event_handler(ol_scn_t scn, uint8_t *event,
1942 uint32_t len);
1943
1944 /**
1945 * wmi_extract_peer_oper_mode_event() - Extract the peer operating
1946 * mode change event and update the new bandwidth
1947 * @wmi_handle: wmi handle
1948 * @event: Event data received from firmware
1949 * @len: Event data length received from firmware
1950 * @data: Extract the event and fill in data
1951 */
1952 QDF_STATUS
1953 wmi_extract_peer_oper_mode_event(wmi_unified_t wmi_handle,
1954 uint8_t *event,
1955 uint32_t len,
1956 struct peer_oper_mode_event *data);
1957
1958 /**
1959 * wlan_mlme_register_rx_ops - Target IF mlme API to register mlme
1960 * related rx op.
1961 * @rx_ops: Pointer to rx ops fp struct
1962 *
1963 * Return: none
1964 */
1965 void wlan_mlme_register_rx_ops(struct wlan_mlme_rx_ops *rx_ops);
1966
1967 /**
1968 * mlme_get_rx_ops - Get mlme rx ops from psoc
1969 * @psoc: psoc
1970 *
1971 * Return: Pointer to rx ops fp struct
1972 */
1973 struct wlan_mlme_rx_ops *
1974 mlme_get_rx_ops(struct wlan_objmgr_psoc *psoc);
1975
1976 #ifdef WLAN_FEATURE_ROAM_OFFLOAD
1977 /**
1978 * wlan_mlme_register_common_events - Wrapper to register common events
1979 * @psoc: psoc
1980 *
1981 * Return: QDF_STATUS
1982 */
1983 QDF_STATUS wlan_mlme_register_common_events(struct wlan_objmgr_psoc *psoc);
1984 #else
1985 static inline QDF_STATUS
wlan_mlme_register_common_events(struct wlan_objmgr_psoc * psoc)1986 wlan_mlme_register_common_events(struct wlan_objmgr_psoc *psoc)
1987 {
1988 return QDF_STATUS_SUCCESS;
1989 }
1990 #endif
1991
1992 /**
1993 * wlan_mlme_send_csa_event_status_ind_cmd() - send csa event status indication
1994 * @vdev: vdev obj
1995 * @csa_status: csa status
1996 *
1997 * Return: QDF_STATUS
1998 */
1999 QDF_STATUS
2000 wlan_mlme_send_csa_event_status_ind_cmd(struct wlan_objmgr_vdev *vdev,
2001 uint8_t csa_status);
2002
2003 /**
2004 * wlan_mlme_get_sap_psd_for_20mhz() - Get the PSD power for 20 MHz
2005 * frequency
2006 * @vdev: pointer to vdev object
2007 *
2008 * Return: psd power
2009 */
2010 uint8_t wlan_mlme_get_sap_psd_for_20mhz(struct wlan_objmgr_vdev *vdev);
2011
2012 /**
2013 * wlan_mlme_set_sap_psd_for_20mhz() - Set the PSD power for 20 MHz
2014 * frequency
2015 * @vdev: pointer to vdev object
2016 * @psd_power : psd power
2017 *
2018 * Return: None
2019 */
2020 QDF_STATUS wlan_mlme_set_sap_psd_for_20mhz(struct wlan_objmgr_vdev *vdev,
2021 uint8_t psd_power);
2022
2023 /**
2024 * wlan_find_peer_and_get_mac_and_mld_addr() - This API find peer from the peer
2025 * list and cache peer MAC and MLD address in the peer_mac_info.
2026 * @psoc: PSOC object
2027 * @peer_mac_info: Peer MAC address info
2028 *
2029 * Return: None
2030 */
2031 QDF_STATUS
2032 wlan_find_peer_and_get_mac_and_mld_addr(
2033 struct wlan_objmgr_psoc *psoc,
2034 struct peer_mac_addresses *peer_mac_info);
2035
2036 #endif
2037