qcacld-3.0: Migrate validate beacon interval API

Move the beacon interval validation logic from the CSR module to the
interface manager module.
Add a path to send events to the SAP event handler from the MLME
module.

Change-Id: Ia86f219b3f209b53e7818a80f95b2c0555550736
CRs-fixed: 2796676
This commit is contained in:
Lincoln Tran
2020-10-12 17:00:26 -07:00
committed by snandini
parent 4dc88ec52f
commit 746140e284
12 changed files with 772 additions and 503 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -54,6 +54,49 @@ struct bssid_search_arg {
uint8_t vdev_id;
};
/**
* allow_mcc_go_diff_bi_definition - Defines the config values for allowing
* different beacon intervals between P2P-G0 and STA
* @ALLOW_MCC_GO_DIFF_BI_WFA_CERT: GO Beacon interval is not changed.
* MCC GO doesn't work well in optimized way. In worst scenario, it may
* invite STA disconnection.
* @ALLOW_MCC_GO_DIFF_BI_WORKAROUND: Workaround 1 disassoc all the clients and
* update beacon Interval.
* @ALLOW_MCC_GO_DIFF_BI_TEAR_DOWN: Tear down the P2P link in
* auto/Non-autonomous -GO case.
* @ALLOW_MCC_GO_DIFF_BI_NO_DISCONNECT: Don't disconnect the P2P client in
* autonomous/Non-autonomous -GO case update the BI dynamically
*/
enum allow_mcc_go_diff_bi_definition {
ALLOW_MCC_GO_DIFF_BI_WFA_CERT = 1,
ALLOW_MCC_GO_DIFF_BI_WORKAROUND,
ALLOW_MCC_GO_DIFF_BI_TEAR_DOWN,
ALLOW_MCC_GO_DIFF_BI_NO_DISCONNECT,
};
/**
* struct beacon_interval_arg - Contains beacon interval validation arguments
* @curr_vdev_id: current iterator vdev ID
* @curr_bss_opmode: current iterator BSS's opmode
* @ch_freq: current operating channel frequency
* @bss_beacon_interval: beacon interval that can be updated by callee
* @status: status to be filled by callee
* @is_done: boolean to stop iterating
* @update_beacon_interval: boolean to mark beacon interval as updated by callee
*
* This structure is used to pass the candidate validation information to the
* callback
*/
struct beacon_interval_arg {
uint8_t curr_vdev_id;
enum QDF_OPMODE curr_bss_opmode;
qdf_freq_t ch_freq;
uint16_t bss_beacon_interval;
QDF_STATUS status;
bool is_done;
bool update_beacon_interval;
};
/**
* if_mgr_enable_roaming() - interface manager enable roaming
* @pdev: pdev object
@@ -120,6 +163,23 @@ QDF_STATUS if_mgr_enable_roaming_after_p2p_disconnect(
struct wlan_objmgr_vdev *vdev,
enum wlan_cm_rso_control_requestor requestor);
/**
* if_mgr_is_beacon_interval_valid() - checks if the concurrent session is
* valid
* @pdev: pdev object
* @vdev_id: vdev ID
* @candidate: concurrent candidate info
*
* This function validates the beacon interval with all other active vdevs.
*
* Context: It should run in thread context
*
* Return: true if session is valid, false if not
*/
bool if_mgr_is_beacon_interval_valid(struct wlan_objmgr_pdev *pdev,
uint8_t vdev_id,
struct validate_bss_data *candidate);
/**
* if_mgr_validate_candidate() - validate candidate event handler
* @vdev: vdev object