qcacmn: Set weight of DFS/passive channels in pcl to 0
If force SCC is set and SAP is active then all DFS/disabled channels in PCL should have 0 weight to avoid the STA roaming to these channels. Change-Id: I4519c29477c5108f5131b7caa806505b69efea8b CRs-Fixed: 2135750
This commit is contained in:

committed by
snandini

szülő
606fb3902c
commit
1b30f135af
@@ -2130,4 +2130,19 @@ void policy_mgr_set_cur_conc_system_pref(struct wlan_objmgr_psoc *psoc,
|
||||
*/
|
||||
uint8_t policy_mgr_get_cur_conc_system_pref(struct wlan_objmgr_psoc *psoc);
|
||||
|
||||
/**
|
||||
* policy_mgr_set_weight_of_dfs_passive_channels_to_zero() - set weight of dfs
|
||||
* and passive channels to 0
|
||||
* @psoc: pointer to soc
|
||||
* @pcl_channels: preferred channel list
|
||||
* @len: length of preferred channel list
|
||||
* @weight_list: preferred channel weight list
|
||||
* @weight_len: length of weight list
|
||||
* This function set the weight of dfs and passive channels to 0
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void policy_mgr_set_weight_of_dfs_passive_channels_to_zero(
|
||||
struct wlan_objmgr_psoc *psoc, uint8_t *pcl_channels,
|
||||
uint32_t *len, uint8_t *weight_list, uint32_t weight_len);
|
||||
#endif /* __WLAN_POLICY_MGR_API_H */
|
||||
|
@@ -1674,6 +1674,68 @@ QDF_STATUS policy_mgr_get_connection_channels(struct wlan_objmgr_psoc *psoc,
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* policy_mgr_set_weight_of_dfs_passive_channels_to_zero() - set weight of dfs
|
||||
* and passive channels to 0
|
||||
* @psoc: pointer to soc
|
||||
* @pcl_channels: preferred channel list
|
||||
* @len: length of preferred channel list
|
||||
* @weight_list: preferred channel weight list
|
||||
* @weight_len: length of weight list
|
||||
* This function set the weight of dfs and passive channels to 0
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void policy_mgr_set_weight_of_dfs_passive_channels_to_zero(
|
||||
struct wlan_objmgr_psoc *psoc, uint8_t *pcl_channels,
|
||||
uint32_t *len, uint8_t *weight_list, uint32_t weight_len)
|
||||
{
|
||||
uint8_t i;
|
||||
uint32_t orig_channel_count = 0;
|
||||
bool mcc_to_scc_mode;
|
||||
uint32_t sap_count;
|
||||
enum channel_state channel_state;
|
||||
struct policy_mgr_psoc_priv_obj *pm_ctx;
|
||||
|
||||
pm_ctx = policy_mgr_get_context(psoc);
|
||||
if (!pm_ctx) {
|
||||
policy_mgr_err("Invalid Context");
|
||||
return;
|
||||
}
|
||||
|
||||
mcc_to_scc_mode = policy_mgr_is_force_scc(psoc);
|
||||
sap_count = policy_mgr_mode_specific_connection_count(psoc,
|
||||
PM_SAP_MODE, NULL);
|
||||
policy_mgr_debug("mcc_to_scc_mode %u, sap_count %u", mcc_to_scc_mode,
|
||||
sap_count);
|
||||
|
||||
if (!mcc_to_scc_mode || !sap_count)
|
||||
return;
|
||||
|
||||
if (len)
|
||||
orig_channel_count = QDF_MIN(*len, QDF_MAX_NUM_CHAN);
|
||||
else {
|
||||
policy_mgr_err("invalid number of channel length");
|
||||
return;
|
||||
}
|
||||
|
||||
policy_mgr_debug("Set weight of DFS/passive channels to 0");
|
||||
|
||||
for (i = 0; i < orig_channel_count; i++) {
|
||||
channel_state = reg_get_channel_state(pm_ctx->pdev,
|
||||
pcl_channels[i]);
|
||||
if ((channel_state == CHANNEL_STATE_DISABLE) ||
|
||||
(channel_state == CHANNEL_STATE_INVALID))
|
||||
/* Set weight of inactive channels to 0 */
|
||||
weight_list[i] = 0;
|
||||
|
||||
policy_mgr_debug("chan[%d] - %d, weight[%d] - %d",
|
||||
i, pcl_channels[i], i, weight_list[i]);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* policy_mgr_get_channel_list() - provides the channel list
|
||||
* suggestion for new connection
|
||||
@@ -2119,6 +2181,8 @@ QDF_STATUS policy_mgr_get_channel_list(struct wlan_objmgr_psoc *psoc,
|
||||
policy_mgr_update_with_safe_channel_list(psoc, pcl_channels, len,
|
||||
pcl_weights, weight_len);
|
||||
|
||||
policy_mgr_set_weight_of_dfs_passive_channels_to_zero(psoc,
|
||||
pcl_channels, len, pcl_weights, weight_len);
|
||||
return status;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user