Loading Kbuild +10 −0 Original line number Diff line number Diff line Loading @@ -3307,6 +3307,11 @@ cppflags-y += -DMON_ENABLE_DROP_FOR_MAC cppflags-y += -DPCI_LINK_STATUS_SANITY cppflags-y += -DDP_MON_RSSI_IN_DBM cppflags-y += -DSYSTEM_PM_CHECK cppflags-y += -DDISABLE_EAPOL_INTRABSS_FWD endif ifeq ($(CONFIG_TX_AGGREGATION_SIZE_ENABLE), y) cppflags-y += -DTX_AGGREGATION_SIZE_ENABLE endif # Enable Low latency optimisation mode Loading Loading @@ -3481,7 +3486,12 @@ cppflags-$(CONFIG_SAR_SAFETY_FEATURE) += -DSAR_SAFETY_FEATURE cppflags-$(CONFIG_WLAN_FEATURE_DP_EVENT_HISTORY) += -DWLAN_FEATURE_DP_EVENT_HISTORY cppflags-$(CONFIG_WLAN_FEATURE_DP_RX_RING_HISTORY) += -DWLAN_FEATURE_DP_RX_RING_HISTORY cppflags-$(CONFIG_WLAN_FEATURE_DP_TX_DESC_HISTORY) += -DWLAN_FEATURE_DP_TX_DESC_HISTORY cppflags-$(CONFIG_REO_QDESC_HISTORY) += -DREO_QDESC_HISTORY cppflags-$(CONFIG_DP_TX_HW_DESC_HISTORY) += -DDP_TX_HW_DESC_HISTORY ifdef CONFIG_QDF_NBUF_HISTORY_SIZE ccflags-y += -DQDF_NBUF_HISTORY_SIZE=$(CONFIG_QDF_NBUF_HISTORY_SIZE) endif cppflags-$(CONFIG_WLAN_DP_PER_RING_TYPE_CONFIG) += -DWLAN_DP_PER_RING_TYPE_CONFIG cppflags-$(CONFIG_WLAN_CE_INTERRUPT_THRESHOLD_CONFIG) += -DWLAN_CE_INTERRUPT_THRESHOLD_CONFIG cppflags-$(CONFIG_SAP_DHCP_FW_IND) += -DSAP_DHCP_FW_IND Loading components/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h +11 −5 Original line number Diff line number Diff line Loading @@ -1465,6 +1465,8 @@ struct policy_mgr_sme_cbacks { * @wlan_hdd_set_sap_csa_reason: Set the sap csa reason in cases like NAN. * @hdd_get_ap_6ghz_capable: get ap vdev 6ghz capable info from hdd ap adapter. * @wlan_hdd_indicate_active_ndp_cnt: indicate active ndp cnt to hdd * @wlan_get_ap_prefer_conc_ch_params: get prefer ap channel bw parameters * based on target channel frequency and concurrent connections. */ struct policy_mgr_hdd_cbacks { void (*sap_restart_chan_switch_cb)(struct wlan_objmgr_psoc *psoc, Loading @@ -1486,6 +1488,10 @@ struct policy_mgr_hdd_cbacks { uint8_t vdev_id); void (*wlan_hdd_indicate_active_ndp_cnt)(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, uint8_t cnt); QDF_STATUS (*wlan_get_ap_prefer_conc_ch_params)( struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, uint32_t chan_freq, struct ch_params *ch_params); }; Loading Loading @@ -3194,18 +3200,18 @@ void policy_mgr_set_weight_of_dfs_passive_channels_to_zero( struct wlan_objmgr_psoc *psoc, uint32_t *pcl, uint32_t *len, uint8_t *weight_list, uint32_t weight_len); /** * policy_mgr_is_sap_allowed_on_dfs_chan() - check if sap allowed on dfs channel * policy_mgr_is_sap_allowed_on_dfs_freq() - check if sap allowed on dfs freq * @pdev: id of objmgr pdev * @vdev_id: vdev id * @channel: channel number * @ch_freq: channel freq * This function is used to check if sta_sap_scc_on_dfs_chan ini is set, * DFS master capability is assumed disabled in the driver. * * Return: true if sap is allowed on dfs channel, * Return: true if sap is allowed on dfs freq, * otherwise false */ bool policy_mgr_is_sap_allowed_on_dfs_chan(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id, uint8_t channel); bool policy_mgr_is_sap_allowed_on_dfs_freq(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id, qdf_freq_t ch_freq); /** * policy_mgr_is_sta_sap_scc_allowed_on_dfs_chan() - check if sta+sap scc * allowed on dfs chan Loading components/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c +37 −4 Original line number Diff line number Diff line Loading @@ -2148,6 +2148,7 @@ static uint32_t policy_mgr_select_2g_chan(struct wlan_objmgr_psoc *psoc) * @sap_ch_freq: SAP starting channel * @sap_vdev_id: sap vdev id * @vdev_opmode: vdev opmode * @ch_params: channel bw parameters * * Validate whether SAP can be forced scc to 6ghz band or not. * If not, select 2G band channel for DBS hw Loading @@ -2157,10 +2158,18 @@ static uint32_t policy_mgr_select_2g_chan(struct wlan_objmgr_psoc *psoc) */ static QDF_STATUS policy_mgr_check_6ghz_sap_conc( struct wlan_objmgr_psoc *psoc, uint32_t *con_ch_freq, uint32_t sap_ch_freq, uint8_t sap_vdev_id, enum QDF_OPMODE vdev_opmode) uint32_t sap_ch_freq, uint8_t sap_vdev_id, enum QDF_OPMODE vdev_opmode, struct ch_params *ch_params) { struct policy_mgr_psoc_priv_obj *pm_ctx; uint32_t ch_freq = *con_ch_freq; pm_ctx = policy_mgr_get_context(psoc); if (!pm_ctx) { policy_mgr_err("Invalid context"); return QDF_STATUS_E_FAILURE; } if (ch_freq && WLAN_REG_IS_6GHZ_CHAN_FREQ(ch_freq) && !WLAN_REG_IS_6GHZ_CHAN_FREQ(sap_ch_freq) && !policy_mgr_get_ap_6ghz_capable(psoc, sap_vdev_id, NULL)) { Loading @@ -2185,6 +2194,10 @@ static QDF_STATUS policy_mgr_check_6ghz_sap_conc( } if (ch_freq != sap_ch_freq) *con_ch_freq = ch_freq; if (*con_ch_freq && pm_ctx->hdd_cbacks.wlan_get_ap_prefer_conc_ch_params) pm_ctx->hdd_cbacks.wlan_get_ap_prefer_conc_ch_params( psoc, sap_vdev_id, ch_freq, ch_params); return QDF_STATUS_SUCCESS; } Loading @@ -2202,6 +2215,7 @@ QDF_STATUS policy_mgr_valid_sap_conc_channel_check( struct wlan_objmgr_vdev *vdev; enum QDF_OPMODE vdev_opmode; bool enable_srd_channel; enum phy_ch_width old_ch_width; vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, sap_vdev_id, WLAN_POLICY_MGR_ID); Loading Loading @@ -2238,18 +2252,24 @@ QDF_STATUS policy_mgr_valid_sap_conc_channel_check( */ if (!ch_freq && sap_ch_freq != policy_mgr_mode_specific_get_channel(psoc, PM_STA_MODE)) { PM_STA_MODE) && sap_ch_freq != policy_mgr_mode_specific_get_channel(psoc, PM_P2P_CLIENT_MODE)) { return QDF_STATUS_SUCCESS; } else if (!ch_freq) { ch_freq = sap_ch_freq; } else if (ch_freq && WLAN_REG_IS_6GHZ_CHAN_FREQ(ch_freq)) { return policy_mgr_check_6ghz_sap_conc( psoc, con_ch_freq, sap_ch_freq, sap_vdev_id, vdev_opmode); vdev_opmode, ch_params); } sta_sap_scc_on_dfs_chan = policy_mgr_is_sta_sap_scc_allowed_on_dfs_chan(psoc); old_ch_width = ch_params->ch_width; if (pm_ctx->hdd_cbacks.wlan_get_ap_prefer_conc_ch_params) pm_ctx->hdd_cbacks.wlan_get_ap_prefer_conc_ch_params( psoc, sap_vdev_id, ch_freq, ch_params); is_dfs = wlan_mlme_check_chan_param_has_dfs( pm_ctx->pdev, ch_params, ch_freq); if (policy_mgr_valid_sta_channel_check(psoc, ch_freq)) { Loading Loading @@ -2299,8 +2319,12 @@ QDF_STATUS policy_mgr_valid_sap_conc_channel_check( } update_chan: if (ch_freq != sap_ch_freq) if (ch_freq != sap_ch_freq || old_ch_width != ch_params->ch_width) *con_ch_freq = ch_freq; if (*con_ch_freq && pm_ctx->hdd_cbacks.wlan_get_ap_prefer_conc_ch_params) pm_ctx->hdd_cbacks.wlan_get_ap_prefer_conc_ch_params( psoc, sap_vdev_id, ch_freq, ch_params); return QDF_STATUS_SUCCESS; } Loading Loading @@ -2430,12 +2454,21 @@ void policy_mgr_change_sap_channel_with_csa(struct wlan_objmgr_psoc *psoc, uint32_t ch_width, bool forced) { struct policy_mgr_psoc_priv_obj *pm_ctx; struct ch_params ch_params = {0}; QDF_STATUS status; pm_ctx = policy_mgr_get_context(psoc); if (!pm_ctx) { policy_mgr_err("Invalid context"); return; } if (pm_ctx->hdd_cbacks.wlan_get_ap_prefer_conc_ch_params) { status = pm_ctx->hdd_cbacks.wlan_get_ap_prefer_conc_ch_params( psoc, vdev_id, ch_freq, &ch_params); if (QDF_IS_STATUS_SUCCESS(status) && ch_width > ch_params.ch_width) ch_width = ch_params.ch_width; } if (pm_ctx->hdd_cbacks.sap_restart_chan_switch_cb) { policy_mgr_info("SAP change change without restart"); Loading components/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c +32 −8 Original line number Diff line number Diff line Loading @@ -1971,6 +1971,14 @@ QDF_STATUS policy_mgr_decr_active_session(struct wlan_objmgr_psoc *psoc, pm_ctx->dp_cbacks.hdd_disable_rx_ol_in_concurrency(false); }; if ((mode == QDF_SAP_MODE || mode == QDF_P2P_GO_MODE) && (policy_mgr_mode_specific_connection_count(psoc, PM_SAP_MODE, NULL) == 0) && (policy_mgr_mode_specific_connection_count(psoc, PM_P2P_GO_MODE, NULL) == 0)) wlan_reg_set_ap_pwr_and_update_chan_list(pm_ctx->pdev, REG_INDOOR_AP); /* Disable RPS if SAP interface has come up */ if (policy_mgr_mode_specific_connection_count(psoc, PM_SAP_MODE, NULL) == 0) { Loading Loading @@ -3992,8 +4000,8 @@ bool policy_mgr_is_force_scc(struct wlan_objmgr_psoc *psoc) QDF_MCC_TO_SCC_WITH_PREFERRED_BAND)); } bool policy_mgr_is_sap_allowed_on_dfs_chan(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id, uint8_t channel) bool policy_mgr_is_sap_allowed_on_dfs_freq(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id, qdf_freq_t ch_freq) { struct wlan_objmgr_psoc *psoc; uint32_t sta_sap_scc_on_dfs_chan; Loading @@ -4016,7 +4024,8 @@ bool policy_mgr_is_sap_allowed_on_dfs_chan(struct wlan_objmgr_pdev *pdev, /* if sta_sap_scc_on_dfs_chan ini is set, DFS master capability is * assumed disabled in the driver. */ if ((wlan_reg_get_channel_state(pdev, channel) == CHANNEL_STATE_DFS) && if ((wlan_reg_get_channel_state_for_freq(pdev, ch_freq) == CHANNEL_STATE_DFS) && !sta_cnt && !gc_cnt && sta_sap_scc_on_dfs_chan && !policy_mgr_get_dfs_master_dynamic_enabled(psoc, vdev_id)) { policy_mgr_err("SAP not allowed on DFS channel if no dfs master capability!!"); Loading Loading @@ -4513,8 +4522,10 @@ bool policy_mgr_is_restart_sap_required(struct wlan_objmgr_psoc *psoc, bool restart_required = false; bool is_sta_p2p_cli; bool is_same_mac; bool sap_on_dfs = false; struct policy_mgr_psoc_priv_obj *pm_ctx; struct policy_mgr_conc_connection_info *connection; bool sta_sap_scc_on_dfs_chan; pm_ctx = policy_mgr_get_context(psoc); if (!pm_ctx) { Loading @@ -4529,8 +4540,14 @@ bool policy_mgr_is_restart_sap_required(struct wlan_objmgr_psoc *psoc, qdf_mutex_acquire(&pm_ctx->qdf_conc_list_lock); connection = pm_conc_connection_list; for (i = 0; i < MAX_NUMBER_OF_CONC_CONNECTIONS; i++) { if (connection[i].vdev_id == vdev_id) { if (connection[i].vdev_id == vdev_id && connection[i].in_use) { mac = connection[i].mac; if (WLAN_REG_IS_5GHZ_CH_FREQ(connection[i].freq) && (connection[i].ch_flagext & (IEEE80211_CHAN_DFS | IEEE80211_CHAN_DFS_CFREQ2))) sap_on_dfs = true; break; } } Loading @@ -4538,18 +4555,25 @@ bool policy_mgr_is_restart_sap_required(struct wlan_objmgr_psoc *psoc, policy_mgr_err("Invalid vdev id: %d", vdev_id); return false; } sta_sap_scc_on_dfs_chan = policy_mgr_is_sta_sap_scc_allowed_on_dfs_chan(psoc); for (i = 0; i < MAX_NUMBER_OF_CONC_CONNECTIONS; i++) { is_sta_p2p_cli = connection[i].in_use && (connection[i].mode == PM_STA_MODE || connection[i].mode == PM_P2P_CLIENT_MODE); if (!is_sta_p2p_cli) continue; is_same_mac = connection[i].freq != freq && (connection[i].mac == mac || !policy_mgr_is_hw_dbs_capable(psoc)); if (is_sta_p2p_cli && is_same_mac) { if (is_same_mac) { restart_required = true; break; } if (connection[i].freq == freq && !sta_sap_scc_on_dfs_chan && sap_on_dfs) { restart_required = true; break; } Loading components/cmn_services/policy_mgr/src/wlan_policy_mgr_init_deinit.c +3 −0 Original line number Diff line number Diff line Loading @@ -708,6 +708,8 @@ QDF_STATUS policy_mgr_register_hdd_cb(struct wlan_objmgr_psoc *psoc, hdd_cbacks->hdd_get_ap_6ghz_capable; pm_ctx->hdd_cbacks.wlan_hdd_indicate_active_ndp_cnt = hdd_cbacks->wlan_hdd_indicate_active_ndp_cnt; pm_ctx->hdd_cbacks.wlan_get_ap_prefer_conc_ch_params = hdd_cbacks->wlan_get_ap_prefer_conc_ch_params; return QDF_STATUS_SUCCESS; } Loading @@ -729,6 +731,7 @@ QDF_STATUS policy_mgr_deregister_hdd_cb(struct wlan_objmgr_psoc *psoc) pm_ctx->hdd_cbacks.hdd_is_chan_switch_in_progress = NULL; pm_ctx->hdd_cbacks.hdd_is_cac_in_progress = NULL; pm_ctx->hdd_cbacks.hdd_get_ap_6ghz_capable = NULL; pm_ctx->hdd_cbacks.wlan_get_ap_prefer_conc_ch_params = NULL; return QDF_STATUS_SUCCESS; } Loading Loading
Kbuild +10 −0 Original line number Diff line number Diff line Loading @@ -3307,6 +3307,11 @@ cppflags-y += -DMON_ENABLE_DROP_FOR_MAC cppflags-y += -DPCI_LINK_STATUS_SANITY cppflags-y += -DDP_MON_RSSI_IN_DBM cppflags-y += -DSYSTEM_PM_CHECK cppflags-y += -DDISABLE_EAPOL_INTRABSS_FWD endif ifeq ($(CONFIG_TX_AGGREGATION_SIZE_ENABLE), y) cppflags-y += -DTX_AGGREGATION_SIZE_ENABLE endif # Enable Low latency optimisation mode Loading Loading @@ -3481,7 +3486,12 @@ cppflags-$(CONFIG_SAR_SAFETY_FEATURE) += -DSAR_SAFETY_FEATURE cppflags-$(CONFIG_WLAN_FEATURE_DP_EVENT_HISTORY) += -DWLAN_FEATURE_DP_EVENT_HISTORY cppflags-$(CONFIG_WLAN_FEATURE_DP_RX_RING_HISTORY) += -DWLAN_FEATURE_DP_RX_RING_HISTORY cppflags-$(CONFIG_WLAN_FEATURE_DP_TX_DESC_HISTORY) += -DWLAN_FEATURE_DP_TX_DESC_HISTORY cppflags-$(CONFIG_REO_QDESC_HISTORY) += -DREO_QDESC_HISTORY cppflags-$(CONFIG_DP_TX_HW_DESC_HISTORY) += -DDP_TX_HW_DESC_HISTORY ifdef CONFIG_QDF_NBUF_HISTORY_SIZE ccflags-y += -DQDF_NBUF_HISTORY_SIZE=$(CONFIG_QDF_NBUF_HISTORY_SIZE) endif cppflags-$(CONFIG_WLAN_DP_PER_RING_TYPE_CONFIG) += -DWLAN_DP_PER_RING_TYPE_CONFIG cppflags-$(CONFIG_WLAN_CE_INTERRUPT_THRESHOLD_CONFIG) += -DWLAN_CE_INTERRUPT_THRESHOLD_CONFIG cppflags-$(CONFIG_SAP_DHCP_FW_IND) += -DSAP_DHCP_FW_IND Loading
components/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h +11 −5 Original line number Diff line number Diff line Loading @@ -1465,6 +1465,8 @@ struct policy_mgr_sme_cbacks { * @wlan_hdd_set_sap_csa_reason: Set the sap csa reason in cases like NAN. * @hdd_get_ap_6ghz_capable: get ap vdev 6ghz capable info from hdd ap adapter. * @wlan_hdd_indicate_active_ndp_cnt: indicate active ndp cnt to hdd * @wlan_get_ap_prefer_conc_ch_params: get prefer ap channel bw parameters * based on target channel frequency and concurrent connections. */ struct policy_mgr_hdd_cbacks { void (*sap_restart_chan_switch_cb)(struct wlan_objmgr_psoc *psoc, Loading @@ -1486,6 +1488,10 @@ struct policy_mgr_hdd_cbacks { uint8_t vdev_id); void (*wlan_hdd_indicate_active_ndp_cnt)(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, uint8_t cnt); QDF_STATUS (*wlan_get_ap_prefer_conc_ch_params)( struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, uint32_t chan_freq, struct ch_params *ch_params); }; Loading Loading @@ -3194,18 +3200,18 @@ void policy_mgr_set_weight_of_dfs_passive_channels_to_zero( struct wlan_objmgr_psoc *psoc, uint32_t *pcl, uint32_t *len, uint8_t *weight_list, uint32_t weight_len); /** * policy_mgr_is_sap_allowed_on_dfs_chan() - check if sap allowed on dfs channel * policy_mgr_is_sap_allowed_on_dfs_freq() - check if sap allowed on dfs freq * @pdev: id of objmgr pdev * @vdev_id: vdev id * @channel: channel number * @ch_freq: channel freq * This function is used to check if sta_sap_scc_on_dfs_chan ini is set, * DFS master capability is assumed disabled in the driver. * * Return: true if sap is allowed on dfs channel, * Return: true if sap is allowed on dfs freq, * otherwise false */ bool policy_mgr_is_sap_allowed_on_dfs_chan(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id, uint8_t channel); bool policy_mgr_is_sap_allowed_on_dfs_freq(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id, qdf_freq_t ch_freq); /** * policy_mgr_is_sta_sap_scc_allowed_on_dfs_chan() - check if sta+sap scc * allowed on dfs chan Loading
components/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c +37 −4 Original line number Diff line number Diff line Loading @@ -2148,6 +2148,7 @@ static uint32_t policy_mgr_select_2g_chan(struct wlan_objmgr_psoc *psoc) * @sap_ch_freq: SAP starting channel * @sap_vdev_id: sap vdev id * @vdev_opmode: vdev opmode * @ch_params: channel bw parameters * * Validate whether SAP can be forced scc to 6ghz band or not. * If not, select 2G band channel for DBS hw Loading @@ -2157,10 +2158,18 @@ static uint32_t policy_mgr_select_2g_chan(struct wlan_objmgr_psoc *psoc) */ static QDF_STATUS policy_mgr_check_6ghz_sap_conc( struct wlan_objmgr_psoc *psoc, uint32_t *con_ch_freq, uint32_t sap_ch_freq, uint8_t sap_vdev_id, enum QDF_OPMODE vdev_opmode) uint32_t sap_ch_freq, uint8_t sap_vdev_id, enum QDF_OPMODE vdev_opmode, struct ch_params *ch_params) { struct policy_mgr_psoc_priv_obj *pm_ctx; uint32_t ch_freq = *con_ch_freq; pm_ctx = policy_mgr_get_context(psoc); if (!pm_ctx) { policy_mgr_err("Invalid context"); return QDF_STATUS_E_FAILURE; } if (ch_freq && WLAN_REG_IS_6GHZ_CHAN_FREQ(ch_freq) && !WLAN_REG_IS_6GHZ_CHAN_FREQ(sap_ch_freq) && !policy_mgr_get_ap_6ghz_capable(psoc, sap_vdev_id, NULL)) { Loading @@ -2185,6 +2194,10 @@ static QDF_STATUS policy_mgr_check_6ghz_sap_conc( } if (ch_freq != sap_ch_freq) *con_ch_freq = ch_freq; if (*con_ch_freq && pm_ctx->hdd_cbacks.wlan_get_ap_prefer_conc_ch_params) pm_ctx->hdd_cbacks.wlan_get_ap_prefer_conc_ch_params( psoc, sap_vdev_id, ch_freq, ch_params); return QDF_STATUS_SUCCESS; } Loading @@ -2202,6 +2215,7 @@ QDF_STATUS policy_mgr_valid_sap_conc_channel_check( struct wlan_objmgr_vdev *vdev; enum QDF_OPMODE vdev_opmode; bool enable_srd_channel; enum phy_ch_width old_ch_width; vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, sap_vdev_id, WLAN_POLICY_MGR_ID); Loading Loading @@ -2238,18 +2252,24 @@ QDF_STATUS policy_mgr_valid_sap_conc_channel_check( */ if (!ch_freq && sap_ch_freq != policy_mgr_mode_specific_get_channel(psoc, PM_STA_MODE)) { PM_STA_MODE) && sap_ch_freq != policy_mgr_mode_specific_get_channel(psoc, PM_P2P_CLIENT_MODE)) { return QDF_STATUS_SUCCESS; } else if (!ch_freq) { ch_freq = sap_ch_freq; } else if (ch_freq && WLAN_REG_IS_6GHZ_CHAN_FREQ(ch_freq)) { return policy_mgr_check_6ghz_sap_conc( psoc, con_ch_freq, sap_ch_freq, sap_vdev_id, vdev_opmode); vdev_opmode, ch_params); } sta_sap_scc_on_dfs_chan = policy_mgr_is_sta_sap_scc_allowed_on_dfs_chan(psoc); old_ch_width = ch_params->ch_width; if (pm_ctx->hdd_cbacks.wlan_get_ap_prefer_conc_ch_params) pm_ctx->hdd_cbacks.wlan_get_ap_prefer_conc_ch_params( psoc, sap_vdev_id, ch_freq, ch_params); is_dfs = wlan_mlme_check_chan_param_has_dfs( pm_ctx->pdev, ch_params, ch_freq); if (policy_mgr_valid_sta_channel_check(psoc, ch_freq)) { Loading Loading @@ -2299,8 +2319,12 @@ QDF_STATUS policy_mgr_valid_sap_conc_channel_check( } update_chan: if (ch_freq != sap_ch_freq) if (ch_freq != sap_ch_freq || old_ch_width != ch_params->ch_width) *con_ch_freq = ch_freq; if (*con_ch_freq && pm_ctx->hdd_cbacks.wlan_get_ap_prefer_conc_ch_params) pm_ctx->hdd_cbacks.wlan_get_ap_prefer_conc_ch_params( psoc, sap_vdev_id, ch_freq, ch_params); return QDF_STATUS_SUCCESS; } Loading Loading @@ -2430,12 +2454,21 @@ void policy_mgr_change_sap_channel_with_csa(struct wlan_objmgr_psoc *psoc, uint32_t ch_width, bool forced) { struct policy_mgr_psoc_priv_obj *pm_ctx; struct ch_params ch_params = {0}; QDF_STATUS status; pm_ctx = policy_mgr_get_context(psoc); if (!pm_ctx) { policy_mgr_err("Invalid context"); return; } if (pm_ctx->hdd_cbacks.wlan_get_ap_prefer_conc_ch_params) { status = pm_ctx->hdd_cbacks.wlan_get_ap_prefer_conc_ch_params( psoc, vdev_id, ch_freq, &ch_params); if (QDF_IS_STATUS_SUCCESS(status) && ch_width > ch_params.ch_width) ch_width = ch_params.ch_width; } if (pm_ctx->hdd_cbacks.sap_restart_chan_switch_cb) { policy_mgr_info("SAP change change without restart"); Loading
components/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c +32 −8 Original line number Diff line number Diff line Loading @@ -1971,6 +1971,14 @@ QDF_STATUS policy_mgr_decr_active_session(struct wlan_objmgr_psoc *psoc, pm_ctx->dp_cbacks.hdd_disable_rx_ol_in_concurrency(false); }; if ((mode == QDF_SAP_MODE || mode == QDF_P2P_GO_MODE) && (policy_mgr_mode_specific_connection_count(psoc, PM_SAP_MODE, NULL) == 0) && (policy_mgr_mode_specific_connection_count(psoc, PM_P2P_GO_MODE, NULL) == 0)) wlan_reg_set_ap_pwr_and_update_chan_list(pm_ctx->pdev, REG_INDOOR_AP); /* Disable RPS if SAP interface has come up */ if (policy_mgr_mode_specific_connection_count(psoc, PM_SAP_MODE, NULL) == 0) { Loading Loading @@ -3992,8 +4000,8 @@ bool policy_mgr_is_force_scc(struct wlan_objmgr_psoc *psoc) QDF_MCC_TO_SCC_WITH_PREFERRED_BAND)); } bool policy_mgr_is_sap_allowed_on_dfs_chan(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id, uint8_t channel) bool policy_mgr_is_sap_allowed_on_dfs_freq(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id, qdf_freq_t ch_freq) { struct wlan_objmgr_psoc *psoc; uint32_t sta_sap_scc_on_dfs_chan; Loading @@ -4016,7 +4024,8 @@ bool policy_mgr_is_sap_allowed_on_dfs_chan(struct wlan_objmgr_pdev *pdev, /* if sta_sap_scc_on_dfs_chan ini is set, DFS master capability is * assumed disabled in the driver. */ if ((wlan_reg_get_channel_state(pdev, channel) == CHANNEL_STATE_DFS) && if ((wlan_reg_get_channel_state_for_freq(pdev, ch_freq) == CHANNEL_STATE_DFS) && !sta_cnt && !gc_cnt && sta_sap_scc_on_dfs_chan && !policy_mgr_get_dfs_master_dynamic_enabled(psoc, vdev_id)) { policy_mgr_err("SAP not allowed on DFS channel if no dfs master capability!!"); Loading Loading @@ -4513,8 +4522,10 @@ bool policy_mgr_is_restart_sap_required(struct wlan_objmgr_psoc *psoc, bool restart_required = false; bool is_sta_p2p_cli; bool is_same_mac; bool sap_on_dfs = false; struct policy_mgr_psoc_priv_obj *pm_ctx; struct policy_mgr_conc_connection_info *connection; bool sta_sap_scc_on_dfs_chan; pm_ctx = policy_mgr_get_context(psoc); if (!pm_ctx) { Loading @@ -4529,8 +4540,14 @@ bool policy_mgr_is_restart_sap_required(struct wlan_objmgr_psoc *psoc, qdf_mutex_acquire(&pm_ctx->qdf_conc_list_lock); connection = pm_conc_connection_list; for (i = 0; i < MAX_NUMBER_OF_CONC_CONNECTIONS; i++) { if (connection[i].vdev_id == vdev_id) { if (connection[i].vdev_id == vdev_id && connection[i].in_use) { mac = connection[i].mac; if (WLAN_REG_IS_5GHZ_CH_FREQ(connection[i].freq) && (connection[i].ch_flagext & (IEEE80211_CHAN_DFS | IEEE80211_CHAN_DFS_CFREQ2))) sap_on_dfs = true; break; } } Loading @@ -4538,18 +4555,25 @@ bool policy_mgr_is_restart_sap_required(struct wlan_objmgr_psoc *psoc, policy_mgr_err("Invalid vdev id: %d", vdev_id); return false; } sta_sap_scc_on_dfs_chan = policy_mgr_is_sta_sap_scc_allowed_on_dfs_chan(psoc); for (i = 0; i < MAX_NUMBER_OF_CONC_CONNECTIONS; i++) { is_sta_p2p_cli = connection[i].in_use && (connection[i].mode == PM_STA_MODE || connection[i].mode == PM_P2P_CLIENT_MODE); if (!is_sta_p2p_cli) continue; is_same_mac = connection[i].freq != freq && (connection[i].mac == mac || !policy_mgr_is_hw_dbs_capable(psoc)); if (is_sta_p2p_cli && is_same_mac) { if (is_same_mac) { restart_required = true; break; } if (connection[i].freq == freq && !sta_sap_scc_on_dfs_chan && sap_on_dfs) { restart_required = true; break; } Loading
components/cmn_services/policy_mgr/src/wlan_policy_mgr_init_deinit.c +3 −0 Original line number Diff line number Diff line Loading @@ -708,6 +708,8 @@ QDF_STATUS policy_mgr_register_hdd_cb(struct wlan_objmgr_psoc *psoc, hdd_cbacks->hdd_get_ap_6ghz_capable; pm_ctx->hdd_cbacks.wlan_hdd_indicate_active_ndp_cnt = hdd_cbacks->wlan_hdd_indicate_active_ndp_cnt; pm_ctx->hdd_cbacks.wlan_get_ap_prefer_conc_ch_params = hdd_cbacks->wlan_get_ap_prefer_conc_ch_params; return QDF_STATUS_SUCCESS; } Loading @@ -729,6 +731,7 @@ QDF_STATUS policy_mgr_deregister_hdd_cb(struct wlan_objmgr_psoc *psoc) pm_ctx->hdd_cbacks.hdd_is_chan_switch_in_progress = NULL; pm_ctx->hdd_cbacks.hdd_is_cac_in_progress = NULL; pm_ctx->hdd_cbacks.hdd_get_ap_6ghz_capable = NULL; pm_ctx->hdd_cbacks.wlan_get_ap_prefer_conc_ch_params = NULL; return QDF_STATUS_SUCCESS; } Loading