|
@@ -6120,11 +6120,14 @@ bool policy_mgr_is_concurrency_allowed(struct wlan_objmgr_psoc *psoc,
|
|
|
}
|
|
|
|
|
|
if (ch_freq) {
|
|
|
- chan_state = wlan_reg_get_5g_bonded_channel_state_for_freq(
|
|
|
+ if (wlan_reg_is_5ghz_ch_freq(ch_freq)) {
|
|
|
+ chan_state =
|
|
|
+ wlan_reg_get_5g_bonded_channel_state_for_freq(
|
|
|
pm_ctx->pdev, ch_freq,
|
|
|
policy_mgr_get_ch_width(bw));
|
|
|
- if (chan_state == CHANNEL_STATE_DFS)
|
|
|
- is_dfs_ch = true;
|
|
|
+ if (chan_state == CHANNEL_STATE_DFS)
|
|
|
+ is_dfs_ch = true;
|
|
|
+ }
|
|
|
/* don't allow 3rd home channel on same MAC
|
|
|
* also check for single mac target which doesn't
|
|
|
* support interbad MCC as well
|
|
@@ -6160,8 +6163,10 @@ bool policy_mgr_is_concurrency_allowed(struct wlan_objmgr_psoc *psoc,
|
|
|
sta_sap_scc_on_dfs_chan =
|
|
|
policy_mgr_is_sta_sap_scc_allowed_on_dfs_chan(psoc);
|
|
|
go_force_scc = policy_mgr_go_scc_enforced(psoc);
|
|
|
- if ((!sta_sap_scc_on_dfs_chan && mode == PM_SAP_MODE) ||
|
|
|
- (!go_force_scc && mode == PM_P2P_GO_MODE)) {
|
|
|
+ if ((mode == PM_SAP_MODE || mode == PM_P2P_GO_MODE) &&
|
|
|
+ (!sta_sap_scc_on_dfs_chan ||
|
|
|
+ !policy_mgr_is_sta_sap_scc(psoc, ch_freq) ||
|
|
|
+ (!go_force_scc && mode == PM_P2P_GO_MODE))) {
|
|
|
if (is_dfs_ch)
|
|
|
match = policy_mgr_disallow_mcc(psoc,
|
|
|
ch_freq);
|
|
@@ -6265,8 +6270,9 @@ bool policy_mgr_allow_concurrency(struct wlan_objmgr_psoc *psoc,
|
|
|
bool
|
|
|
policy_mgr_allow_concurrency_csa(struct wlan_objmgr_psoc *psoc,
|
|
|
enum policy_mgr_con_mode mode,
|
|
|
- uint32_t ch_freq, uint32_t vdev_id,
|
|
|
- bool forced, enum sap_csa_reason_code reason)
|
|
|
+ uint32_t ch_freq, enum hw_mode_bandwidth bw,
|
|
|
+ uint32_t vdev_id, bool forced,
|
|
|
+ enum sap_csa_reason_code reason)
|
|
|
{
|
|
|
bool allow = false;
|
|
|
struct policy_mgr_conc_connection_info
|
|
@@ -6282,8 +6288,8 @@ policy_mgr_allow_concurrency_csa(struct wlan_objmgr_psoc *psoc,
|
|
|
policy_mgr_err("Invalid Context");
|
|
|
return allow;
|
|
|
}
|
|
|
- policy_mgr_debug("check concurrency_csa vdev:%d ch %d, forced %d, reason %d",
|
|
|
- vdev_id, ch_freq, forced, reason);
|
|
|
+ policy_mgr_debug("check concurrency_csa vdev:%d ch %d bw %d, forced %d, reason %d",
|
|
|
+ vdev_id, ch_freq, bw, forced, reason);
|
|
|
|
|
|
status = policy_mgr_get_chan_by_session_id(psoc, vdev_id,
|
|
|
&old_ch_freq);
|
|
@@ -6325,7 +6331,7 @@ policy_mgr_allow_concurrency_csa(struct wlan_objmgr_psoc *psoc,
|
|
|
WLAN_POLICY_MGR_ID);
|
|
|
conc_ext_flags = policy_mgr_get_conc_ext_flags(vdev, false);
|
|
|
allow = policy_mgr_allow_concurrency(psoc, mode, ch_freq,
|
|
|
- HW_MODE_20_MHZ, conc_ext_flags);
|
|
|
+ bw, conc_ext_flags);
|
|
|
if (vdev)
|
|
|
wlan_objmgr_vdev_release_ref(vdev, WLAN_POLICY_MGR_ID);
|
|
|
|