qcacld-3.0: Get LL_LT_SAP frequency list

Get LL_LT_SAP frequency list

Change-Id: Ib83247da5cda61b9ef68c5164b73de8bea309831
CRs-Fixed: 3572925
This commit is contained in:
Jyoti Kumari
2023-07-20 15:42:37 +05:30
committed by Rahul Choudhary
szülő 551f20ba53
commit 6409215ea1
14 fájl változott, egészen pontosan 481 új sor hozzáadva és 42 régi sor törölve

Fájl megtekintése

@@ -5376,6 +5376,7 @@ qdf_freq_t policy_mgr_get_lt_ll_sap_freq(struct wlan_objmgr_psoc *psoc);
*/ */
qdf_freq_t policy_mgr_get_ht_ll_sap_freq(struct wlan_objmgr_psoc *psoc); qdf_freq_t policy_mgr_get_ht_ll_sap_freq(struct wlan_objmgr_psoc *psoc);
#ifndef WLAN_FEATURE_LL_LT_SAP
/** /**
* policy_mgr_is_ll_sap_concurrency_valid() - Function to check whether * policy_mgr_is_ll_sap_concurrency_valid() - Function to check whether
* low latency SAP + STA/SAP/GC/GO concurrency allowed or not * low latency SAP + STA/SAP/GC/GO concurrency allowed or not
@@ -5389,7 +5390,15 @@ qdf_freq_t policy_mgr_get_ht_ll_sap_freq(struct wlan_objmgr_psoc *psoc);
bool policy_mgr_is_ll_sap_concurrency_valid(struct wlan_objmgr_psoc *psoc, bool policy_mgr_is_ll_sap_concurrency_valid(struct wlan_objmgr_psoc *psoc,
qdf_freq_t freq, qdf_freq_t freq,
enum policy_mgr_con_mode mode); enum policy_mgr_con_mode mode);
#else
static inline
bool policy_mgr_is_ll_sap_concurrency_valid(struct wlan_objmgr_psoc *psoc,
qdf_freq_t freq,
enum policy_mgr_con_mode mode)
{
return true;
}
#endif
/** /**
* policy_mgr_update_indoor_concurrency() - Function to update the indoor * policy_mgr_update_indoor_concurrency() - Function to update the indoor
* concurrency related regulatory changes * concurrency related regulatory changes
@@ -5649,4 +5658,23 @@ void
policy_mgr_sap_on_non_psc_channel(struct wlan_objmgr_psoc *psoc, policy_mgr_sap_on_non_psc_channel(struct wlan_objmgr_psoc *psoc,
qdf_freq_t *intf_ch_freq, qdf_freq_t *intf_ch_freq,
uint8_t sap_vdev_id); uint8_t sap_vdev_id);
#ifdef WLAN_FEATURE_LL_LT_SAP
/**
* policy_mgr_get_pcl_ch_list_for_ll_sap() - Get PCL channel list for LL_LT_SAP
* @psoc: psoc object
* @pcl: pcl list
* @vdev_id: vdev id
* @info: pointer to connection_info structure
* @connection_count: total number of existing connection present
*
* Return: QDF_STATUS
*/
QDF_STATUS policy_mgr_get_pcl_ch_list_for_ll_sap(
struct wlan_objmgr_psoc *psoc,
struct policy_mgr_pcl_list *pcl,
uint8_t vdev_id,
struct connection_info *info,
uint8_t *connection_count);
#endif
#endif /* __WLAN_POLICY_MGR_API_H */ #endif /* __WLAN_POLICY_MGR_API_H */

Fájl megtekintése

@@ -1673,6 +1673,9 @@ qdf_freq_t policy_mgr_get_sbs_cut_off_freq(struct wlan_objmgr_psoc *psoc)
return 0; return 0;
} }
if (!policy_mgr_is_hw_sbs_capable(psoc))
return 0;
if (pm_ctx->hw_mode.sbs_lower_band_end_freq) if (pm_ctx->hw_mode.sbs_lower_band_end_freq)
return pm_ctx->hw_mode.sbs_lower_band_end_freq; return pm_ctx->hw_mode.sbs_lower_band_end_freq;
/* /*
@@ -12099,6 +12102,7 @@ qdf_freq_t policy_mgr_get_lt_ll_sap_freq(struct wlan_objmgr_psoc *psoc)
return _policy_mgr_get_ll_sap_freq(psoc, LL_AP_TYPE_LT); return _policy_mgr_get_ll_sap_freq(psoc, LL_AP_TYPE_LT);
} }
#ifndef WLAN_FEATURE_LL_LT_SAP
bool policy_mgr_is_ll_sap_concurrency_valid(struct wlan_objmgr_psoc *psoc, bool policy_mgr_is_ll_sap_concurrency_valid(struct wlan_objmgr_psoc *psoc,
qdf_freq_t freq, qdf_freq_t freq,
enum policy_mgr_con_mode mode) enum policy_mgr_con_mode mode)
@@ -12127,6 +12131,7 @@ bool policy_mgr_is_ll_sap_concurrency_valid(struct wlan_objmgr_psoc *psoc,
return true; return true;
} }
#endif
bool bool
policy_mgr_update_indoor_concurrency(struct wlan_objmgr_psoc *psoc, policy_mgr_update_indoor_concurrency(struct wlan_objmgr_psoc *psoc,

Fájl megtekintése

@@ -4803,3 +4803,57 @@ policy_mgr_get_pcl_channel_for_ll_sap_concurrency(
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
#endif #endif
#ifdef WLAN_FEATURE_LL_LT_SAP
QDF_STATUS policy_mgr_get_pcl_ch_list_for_ll_sap(
struct wlan_objmgr_psoc *psoc,
struct policy_mgr_pcl_list *pcl,
uint8_t vdev_id,
struct connection_info *info,
uint8_t *connection_count)
{
struct policy_mgr_psoc_priv_obj *pm_ctx;
uint8_t num_cxn_del = 0;
struct policy_mgr_conc_connection_info pm_info = {0};
QDF_STATUS status;
pm_ctx = policy_mgr_get_context(psoc);
if (!pm_ctx)
return QDF_STATUS_E_FAILURE;
qdf_mutex_acquire(&pm_ctx->qdf_conc_list_lock);
/*
* Scenario: Standalone XPAN is present and CSA happens on
* LL_LT_SAP interface.
* During CSA, it will check the PCL list to get the new freq.
* Since there is already LL_LT_SAP interface entry in PCL index.
* It will lead to LL_LT_SAP + LL_LT_SAP concurrencies. To avoid
* that, delete the existing connection entry from PCL index,
* get the PCL list and restore it back.
*/
policy_mgr_store_and_del_conn_info_by_vdev_id(psoc, vdev_id,
&pm_info, &num_cxn_del);
status = policy_mgr_get_pcl(psoc, PM_LL_LT_SAP_MODE, pcl->pcl_list,
&pcl->pcl_len, pcl->weight_list,
QDF_ARRAY_SIZE(pcl->weight_list),
vdev_id);
/*
* Get existing connection info before updating LL_LT_SAP freq list
* This will help to avoid updation of SCC channel in LL_LT_SAP
* freq list.
*/
*connection_count = policy_mgr_get_connection_info(psoc, info);
/* Restore the connection entry */
if (num_cxn_del > 0)
policy_mgr_restore_deleted_conn_info(psoc, &pm_info,
num_cxn_del);
qdf_mutex_release(&pm_ctx->qdf_conc_list_lock);
return status;
}
#endif

Fájl megtekintése

@@ -586,6 +586,25 @@ wlan_handle_emlsr_sta_concurrency(struct wlan_objmgr_psoc *psoc,
QDF_STATUS QDF_STATUS
wlan_ll_sap_sort_channel_list(uint8_t vdev_id, qdf_list_t *list, wlan_ll_sap_sort_channel_list(uint8_t vdev_id, qdf_list_t *list,
struct sap_sel_ch_info *ch_info); struct sap_sel_ch_info *ch_info);
/**
* wlan_ll_sap_free_chan_info() - API to free allocated memory
* @ch_param: pointer to sap_sel_ch_info structure
*
* Return: None
*/
void wlan_ll_sap_free_chan_info(struct sap_sel_ch_info *ch_param);
/**
* wlan_ll_sap_freq_present_in_pcl() - API to check whether given
* frequency is present in PCL or not
* @pcl: pcl list
* @freq: Frequency to check in PCL list
*
* Return: True/False
*/
bool wlan_ll_sap_freq_present_in_pcl(struct policy_mgr_pcl_list *pcl,
qdf_freq_t freq);
#endif #endif
/** /**

Fájl megtekintése

@@ -2288,6 +2288,24 @@ wlan_ll_sap_sort_channel_list(uint8_t vdev_id, qdf_list_t *list,
{ {
return wlansap_sort_channel_list(vdev_id, list, ch_info); return wlansap_sort_channel_list(vdev_id, list, ch_info);
} }
void wlan_ll_sap_free_chan_info(struct sap_sel_ch_info *ch_param)
{
return wlansap_free_chan_info(ch_param);
}
bool wlan_ll_sap_freq_present_in_pcl(struct policy_mgr_pcl_list *pcl,
qdf_freq_t freq)
{
uint8_t i;
for (i = 0; i < pcl->pcl_len; i++) {
if (pcl->pcl_list[i] == freq)
return true;
}
return false;
}
#endif #endif
void void

Fájl megtekintése

@@ -15,10 +15,13 @@
*/ */
#include "wlan_ll_lt_sap_main.h" #include "wlan_ll_lt_sap_main.h"
#include "wlan_scan_ucfg_api.h" #include "wlan_reg_services_api.h"
#include "wlan_ll_sap_public_structs.h"
#include "wlan_policy_mgr_i.h"
#include "wlan_mlme_vdev_mgr_interface.h" #include "wlan_mlme_vdev_mgr_interface.h"
#include "wlan_ll_sap_main.h" #include "wlan_ll_sap_main.h"
#include "wlan_ll_lt_sap_bearer_switch.h" #include "wlan_ll_lt_sap_bearer_switch.h"
#include "wlan_scan_api.h"
bool ll_lt_sap_is_supported(void) bool ll_lt_sap_is_supported(void)
{ {
@@ -28,10 +31,20 @@ bool ll_lt_sap_is_supported(void)
return true; return true;
} }
QDF_STATUS /**
ll_lt_sap_get_sorted_user_config_acs_ch_list(struct wlan_objmgr_psoc *psoc, * ll_lt_sap_get_sorted_user_config_acs_ch_list() - API to get sorted user
uint8_t vdev_id, * configured ACS channel list
struct sap_sel_ch_info *ch_info) * @psoc: Pointer to psoc object
* @vdev_id: Vdev Id
* @ch_info: Pointer to ch_info
*
* Return: None
*/
static
QDF_STATUS ll_lt_sap_get_sorted_user_config_acs_ch_list(
struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
struct sap_sel_ch_info *ch_info)
{ {
struct scan_filter *filter; struct scan_filter *filter;
qdf_list_t *list = NULL; qdf_list_t *list = NULL;
@@ -146,6 +159,249 @@ QDF_STATUS ll_lt_sap_deinit(struct wlan_objmgr_vdev *vdev)
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
static
void ll_lt_sap_update_mac_freq(struct wlan_ll_lt_sap_mac_freq *freq_list,
qdf_freq_t sbs_cut_off_freq,
qdf_freq_t given_freq)
{
if (WLAN_REG_IS_5GHZ_CH_FREQ(given_freq) &&
((sbs_cut_off_freq && given_freq < sbs_cut_off_freq) ||
!sbs_cut_off_freq) && !freq_list->freq_5GHz_low) {
freq_list->freq_5GHz_low = given_freq;
/*
* Update same freq in 5GHz high freq if sbs_cut_off_freq
* is not present
*/
if (!sbs_cut_off_freq)
freq_list->freq_5GHz_high = given_freq;
} else if (WLAN_REG_IS_5GHZ_CH_FREQ(given_freq) &&
((sbs_cut_off_freq && given_freq > sbs_cut_off_freq) ||
!sbs_cut_off_freq) && !freq_list->freq_5GHz_high) {
freq_list->freq_5GHz_high = given_freq;
/*
* Update same freq for 5GHz low freq if sbs_cut_off_freq
* is not present
*/
if (!sbs_cut_off_freq)
freq_list->freq_5GHz_low = given_freq;
} else if (WLAN_REG_IS_6GHZ_CHAN_FREQ(given_freq) &&
!freq_list->freq_6GHz) {
freq_list->freq_6GHz = given_freq;
}
}
/* Threshold value of channel weight */
#define CHANNEL_WEIGHT_THRESHOLD_VALUE 20000
static
void ll_lt_sap_update_freq_list(struct wlan_objmgr_psoc *psoc,
struct sap_sel_ch_info *ch_param,
struct wlan_ll_lt_sap_freq_list *freq_list,
struct policy_mgr_pcl_list *pcl,
struct connection_info *info,
uint8_t connection_count,
uint8_t vdev_id)
{
qdf_freq_t freq, sbs_cut_off_freq;
qdf_freq_t same_mac_freq, standalone_mac_freq;
uint8_t i = 0, count;
enum policy_mgr_con_mode con_mode = PM_MAX_NUM_OF_MODE;
sbs_cut_off_freq = policy_mgr_get_sbs_cut_off_freq(psoc);
for (i = 0; i < ch_param->num_ch; i++) {
if (!ch_param->ch_info[i].valid)
continue;
freq = ch_param->ch_info[i].chan_freq;
/*
* Do not select same channel where LL_LT_SAP was
* present earlier
*/
if (freq_list->prev_freq == freq)
continue;
/* Check if channel is present in PCL or not */
if (!wlan_ll_sap_freq_present_in_pcl(pcl, freq))
continue;
/*
* Store first valid best channel from ACS final list
* This will be used if there is no valid freq present
* within threshold value or no concurrency present
*/
if (!freq_list->best_freq)
freq_list->best_freq = freq;
if (!connection_count)
break;
/*
* Instead of selecting random channel, select those
* channel whose weight is less than
* CHANNEL_WEIGHT_THRESHOLD_VALUE value. This will help
* to get the best channel compartively and avoid multiple
* times of channel switch.
*/
if (ch_param->ch_info[i].weight > CHANNEL_WEIGHT_THRESHOLD_VALUE)
continue;
same_mac_freq = 0;
standalone_mac_freq = 0;
/*
* Loop through all existing connections before updating
* channels for LL_LT_SAP.
*/
for (count = 0; count < connection_count; count++) {
/* Do not select SCC channel to update freq_list */
if (freq == info[count].ch_freq) {
same_mac_freq = 0;
standalone_mac_freq = 0;
break;
}
/*
* Check whether ch_param frequency is in same mac
* or not.
*/
if (policy_mgr_2_freq_always_on_same_mac(
psoc, freq,
info[count].ch_freq)) {
con_mode = policy_mgr_get_mode_by_vdev_id(
psoc, info[count].vdev_id);
/*
* Check whether SAP is present in same mac or
* not. If yes then do not select that frequency
* because two beacon entity can't be in same
* mac.
* Also, do not fill same_mac_freq if it's
* already filled i.e two existing connection
* are present on same mac.
*/
if (con_mode == PM_SAP_MODE || same_mac_freq) {
same_mac_freq = 0;
standalone_mac_freq = 0;
break;
}
same_mac_freq = freq;
} else if (!standalone_mac_freq) {
/*
* Fill standalone_mac_freq only if it's not
* filled
*/
standalone_mac_freq = freq;
}
}
/*
* Scenario: Let say two concurrent connection(other than
* LL_LT_SAP) are present in both mac and one channel from
* ch_param structure needs to select to fill in freq_list for
* LL_LT_SAP.
* Since, there is an existing connection present in both mac
* then there is chance that channel from ch_param structure
* may get select for both same_mac_freq and standalone_mac_freq
*
* But ideally standalone_mac_freq is not free, some existing
* connection is already present in it.
* So, instead of giving priority to fill standalone_mac_freq
* first, fill same_mac_freq first.
*
* Example: Let say 2 concurrent interface present in channel
* 36 and 149. Now channel 48 from ch_param structure needs to
* be validate and fill based on existing interface.
* With respect to channel 36, it will fit to same_mac_freq
* and with respect to channel 149, it will fit to
* standalone_mac_freq. But in standalone_mac_freq, there is
* already existing interface present. So, give priority to
* same_mac_freq to fill the freq list.
*/
if (same_mac_freq)
ll_lt_sap_update_mac_freq(&freq_list->shared_mac,
sbs_cut_off_freq,
same_mac_freq);
else if (standalone_mac_freq)
ll_lt_sap_update_mac_freq(&freq_list->standalone_mac,
sbs_cut_off_freq,
standalone_mac_freq);
if (freq_list->shared_mac.freq_5GHz_low &&
freq_list->shared_mac.freq_5GHz_high &&
freq_list->shared_mac.freq_6GHz &&
freq_list->standalone_mac.freq_5GHz_low &&
freq_list->standalone_mac.freq_5GHz_high &&
freq_list->standalone_mac.freq_6GHz)
break;
}
ll_sap_debug("vdev %d, best %d Shared: low %d high %d 6Ghz %d, Standalone: low %d high %d 6Ghz %d, prev %d, existing connection cnt %d",
vdev_id, freq_list->best_freq,
freq_list->shared_mac.freq_5GHz_low,
freq_list->shared_mac.freq_5GHz_high,
freq_list->shared_mac.freq_6GHz,
freq_list->standalone_mac.freq_5GHz_low,
freq_list->standalone_mac.freq_5GHz_high,
freq_list->standalone_mac.freq_6GHz,
freq_list->prev_freq, connection_count);
}
static
QDF_STATUS ll_lt_sap_get_allowed_freq_list(
struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
struct sap_sel_ch_info *ch_param,
struct wlan_ll_lt_sap_freq_list *freq_list)
{
struct connection_info conn_info[MAX_NUMBER_OF_CONC_CONNECTIONS];
uint8_t count;
struct policy_mgr_pcl_list *pcl;
QDF_STATUS status;
pcl = qdf_mem_malloc(sizeof(*pcl));
if (!pcl)
return QDF_STATUS_E_FAILURE;
status = policy_mgr_get_pcl_ch_list_for_ll_sap(psoc, pcl, vdev_id,
conn_info, &count);
if (QDF_IS_STATUS_ERROR(status))
goto end;
ll_lt_sap_update_freq_list(psoc, ch_param, freq_list, pcl,
conn_info, count, vdev_id);
status = QDF_STATUS_SUCCESS;
end:
qdf_mem_free(pcl);
return status;
}
QDF_STATUS ll_lt_sap_get_freq_list(struct wlan_objmgr_psoc *psoc,
struct wlan_ll_lt_sap_freq_list *freq_list,
uint8_t vdev_id)
{
struct sap_sel_ch_info ch_param = { NULL, 0 };
QDF_STATUS status;
/*
* This memory will be allocated in sap_chan_sel_init() as part
* of sap_sort_channel_list(). But the caller has to free up the
* allocated memory
*/
status = ll_lt_sap_get_sorted_user_config_acs_ch_list(psoc, vdev_id,
&ch_param);
if (!ch_param.num_ch || QDF_IS_STATUS_ERROR(status))
goto release_mem;
status = ll_lt_sap_get_allowed_freq_list(psoc, vdev_id, &ch_param,
freq_list);
release_mem:
wlan_ll_sap_free_chan_info(&ch_param);
return status;
}
QDF_STATUS ll_lt_sap_switch_bearer_to_ble(struct wlan_objmgr_psoc *psoc, QDF_STATUS ll_lt_sap_switch_bearer_to_ble(struct wlan_objmgr_psoc *psoc,
struct wlan_bearer_switch_request *bs_request) struct wlan_bearer_switch_request *bs_request)
{ {

Fájl megtekintése

@@ -36,18 +36,17 @@
bool ll_lt_sap_is_supported(void); bool ll_lt_sap_is_supported(void);
/** /**
* ll_lt_sap_get_sorted_user_config_acs_ch_list() - API to get sorted user * ll_lt_sap_get_freq_list() - API to get frequency list for LL_LT_SAP
* configured channel list
* @psoc: Pointer to psoc object * @psoc: Pointer to psoc object
* @freq_list: Pointer to wlan_ll_lt_sap_freq_list structure
* @vdev_id: Vdev Id * @vdev_id: Vdev Id
* @ch_info: Pointer to ch_info
* *
* Return: QDF_STATUS * Return: QDF_STATUS
*/ */
QDF_STATUS ll_lt_sap_get_sorted_user_config_acs_ch_list( QDF_STATUS ll_lt_sap_get_freq_list(struct wlan_objmgr_psoc *psoc,
struct wlan_objmgr_psoc *psoc, struct wlan_ll_lt_sap_freq_list *freq_list,
uint8_t vdev_id, uint8_t vdev_id);
struct sap_sel_ch_info *ch_info);
/* /*
* ll_lt_sap_init() - Initialize ll_lt_sap infrastructure * ll_lt_sap_init() - Initialize ll_lt_sap infrastructure
* @vdev: Pointer to vdev * @vdev: Pointer to vdev

Fájl megtekintése

@@ -16,7 +16,7 @@
/** /**
* DOC: contains ll_lt_sap API definitions specific to the bearer * DOC: contains ll_lt_sap API definitions specific to the bearer
* switch functionalities * switch, channel selection functionalities
*/ */
#ifndef _WLAN_LL_LT_SAP_API_H_ #ifndef _WLAN_LL_LT_SAP_API_H_
@@ -24,6 +24,7 @@
#include <wlan_cmn.h> #include <wlan_cmn.h>
#include <wlan_objmgr_vdev_obj.h> #include <wlan_objmgr_vdev_obj.h>
#include "wlan_objmgr_psoc_obj.h"
#include "wlan_ll_sap_public_structs.h" #include "wlan_ll_sap_public_structs.h"
#include "wlan_cm_public_struct.h" #include "wlan_cm_public_struct.h"
@@ -77,8 +78,19 @@ QDF_STATUS wlan_ll_sap_switch_bearer_on_sta_connect_complete(
struct wlan_objmgr_psoc *psoc, struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id); uint8_t vdev_id);
/**
* wlan_ll_lt_sap_get_freq_list() - Get frequency list for LL_LT_SAP
* @psoc: Pointer to psoc object
* @freq_list: Pointer to wlan_ll_lt_sap_freq_list structure
* @vdev_id: Vdev Id
*
* Return: QDF_STATUS
*/
QDF_STATUS wlan_ll_lt_sap_get_freq_list(
struct wlan_objmgr_psoc *psoc,
struct wlan_ll_lt_sap_freq_list *freq_list,
uint8_t vdev_id);
#else #else
static inline wlan_bs_req_id static inline wlan_bs_req_id
wlan_ll_lt_sap_bearer_switch_get_id(struct wlan_objmgr_vdev *vdev) wlan_ll_lt_sap_bearer_switch_get_id(struct wlan_objmgr_vdev *vdev)
{ {
@@ -109,5 +121,14 @@ wlan_ll_sap_switch_bearer_on_sta_connect_complete(struct wlan_objmgr_psoc *psoc,
{ {
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
static inline
QDF_STATUS wlan_ll_lt_sap_get_freq_list(
struct wlan_objmgr_psoc *psoc,
struct wlan_ll_lt_sap_freq_list *freq_list,
uint8_t vdev_id)
{
return QDF_STATUS_E_FAILURE;
}
#endif /* WLAN_FEATURE_LL_LT_SAP */ #endif /* WLAN_FEATURE_LL_LT_SAP */
#endif /* _WLAN_LL_LT_SAP_API_H_ */ #endif /* _WLAN_LL_LT_SAP_API_H_ */

Fájl megtekintése

@@ -16,11 +16,11 @@
/** /**
* DOC: contains ll_lt_sap structure definitions specific to the bearer * DOC: contains ll_lt_sap structure definitions specific to the bearer
* switch functionalities * switch and channel selection functionalities
*/ */
#ifndef _WLAN_LL_LT_SAP_BEARER_SWITCH_PUBLIC_STRUCTS_H_ #ifndef _WLAN_LL_SAP_PUBLIC_STRUCTS_H_
#define _WLAN_LL_LT_SAP_BEARER_SWITCH_PUBLIC_STRUCTS_H_ #define _WLAN_LL_SAP_PUBLIC_STRUCTS_H_
#include "wlan_objmgr_psoc_obj.h" #include "wlan_objmgr_psoc_obj.h"
#include <qdf_status.h> #include <qdf_status.h>
@@ -68,7 +68,38 @@ enum bearer_switch_req_source {
BEARER_SWITCH_REQ_MAX, BEARER_SWITCH_REQ_MAX,
}; };
/** /**
* struct wlan_ll_lt_sap_mac_freq: LL_LT_SAP mac frequency
* @freq_5GHz_low: Low 5GHz frequency
* @freq_5GHz_high: High 5GHz frequency
* @freq_6GHz: 6GHz frequency
*/
struct wlan_ll_lt_sap_mac_freq {
qdf_freq_t freq_5GHz_low;
qdf_freq_t freq_5GHz_high;
qdf_freq_t freq_6GHz;
};
/**
* struct wlan_ll_lt_sap_freq_list: LL_LT_SAP frequency list structure
* @standalone_mac: Select frequency from mac which doesn't have any
* concurrent interface present.
* @shared_mac: Select frequency from mac which has one concurrent
* interface present.
* @best_freq: Best freq present in ACS final list. This freq can be
* use to bring LL_LT_SAP if none of the above channels are present
* @prev_freq: Previous/current freq on which LL_LT_SAP is present.
* This will be use to avoid SCC channel selection while updating this
* list. This freq should be filled by user.
*/
struct wlan_ll_lt_sap_freq_list {
struct wlan_ll_lt_sap_mac_freq standalone_mac;
struct wlan_ll_lt_sap_mac_freq shared_mac;
qdf_freq_t best_freq;
qdf_freq_t prev_freq;
};
/**
* typedef bearer_switch_requester_cb() - Callback function, which will * typedef bearer_switch_requester_cb() - Callback function, which will
* be invoked with the bearer switch request status. * be invoked with the bearer switch request status.
* @psoc: Psoc pointer * @psoc: Psoc pointer
@@ -123,5 +154,4 @@ struct ll_sap_ops {
struct wlan_objmgr_vdev *vdev, struct wlan_objmgr_vdev *vdev,
enum bearer_switch_req_type req_type); enum bearer_switch_req_type req_type);
}; };
#endif /* _WLAN_LL_SAP_PUBLIC_STRUCTS_H_ */
#endif /* _WLAN_LL_LT_SAP_BEARER_SWITCH_PUBLIC_STRUCTS_H_ */

Fájl megtekintése

@@ -153,3 +153,11 @@ QDF_STATUS wlan_ll_sap_switch_bearer_on_sta_connect_complete(
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
QDF_STATUS wlan_ll_lt_sap_get_freq_list(
struct wlan_objmgr_psoc *psoc,
struct wlan_ll_lt_sap_freq_list *freq_list,
uint8_t vdev_id)
{
return ll_lt_sap_get_freq_list(psoc, freq_list, vdev_id);
}

Fájl megtekintése

@@ -1959,6 +1959,14 @@ int wlansap_update_sap_chan_list(struct sap_config *sap_config,
QDF_STATUS wlansap_sort_channel_list(uint8_t vdev_id, qdf_list_t *list, QDF_STATUS wlansap_sort_channel_list(uint8_t vdev_id, qdf_list_t *list,
struct sap_sel_ch_info *ch_info); struct sap_sel_ch_info *ch_info);
/**
* wlansap_free_chan_info() - API to free allocated memory
* @ch_param: Pointer to sap_sel_ch_info structure
*
* Return: None
*/
void wlansap_free_chan_info(struct sap_sel_ch_info *ch_param);
/** /**
* wlansap_get_user_config_acs_ch_list() - Get user config ACS channel list * wlansap_get_user_config_acs_ch_list() - Get user config ACS channel list
* @vdev_id: Vdev Id * @vdev_id: Vdev Id

Fájl megtekintése

@@ -1655,27 +1655,7 @@ debug_info:
sap_clear_channel_status(mac); sap_clear_channel_status(mac);
} }
/*========================================================================== void sap_chan_sel_exit(struct sap_sel_ch_info *ch_info_params)
FUNCTION sap_chan_sel_exit
DESCRIPTION
Exit function for free out the allocated memory, to be called
at the end of the dfsSelectChannel function
DEPENDENCIES
NA.
PARAMETERS
IN
ch_info_params : Pointer to the tSapChSelSpectInfo structure
RETURN VALUE
void : NULL
SIDE EFFECTS
============================================================================*/
static void sap_chan_sel_exit(struct sap_sel_ch_info *ch_info_params)
{ {
/* Free all the allocated memory */ /* Free all the allocated memory */
qdf_mem_free(ch_info_params->ch_info); qdf_mem_free(ch_info_params->ch_info);

Fájl megtekintése

@@ -316,6 +316,14 @@ QDF_STATUS wlansap_pre_start_bss_acs_scan_callback(mac_handle_t mac_handle,
uint32_t scanid, uint32_t scanid,
eCsrScanStatus scan_status); eCsrScanStatus scan_status);
/**
* sap_chan_sel_exit() - Exit function for free out the allocated memory,
* @ch_info_params: Pointer to sap_sel_ch_info structure
*
* Return: None
*/
void sap_chan_sel_exit(struct sap_sel_ch_info *ch_info_params);
/** /**
* sap_sort_channel_list() - Sort channel list based on channel weight * sap_sort_channel_list() - Sort channel list based on channel weight
* @mac_ctx: Pointer to mac_context * @mac_ctx: Pointer to mac_context

Fájl megtekintése

@@ -4373,6 +4373,11 @@ QDF_STATUS wlansap_sort_channel_list(uint8_t vdev_id, qdf_list_t *list,
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
void wlansap_free_chan_info(struct sap_sel_ch_info *ch_param)
{
sap_chan_sel_exit(ch_param);
}
void wlansap_get_user_config_acs_ch_list(uint8_t vdev_id, void wlansap_get_user_config_acs_ch_list(uint8_t vdev_id,
struct scan_filter *filter) struct scan_filter *filter)
{ {