diff --git a/umac/dfs/dispatcher/inc/wlan_dfs_mlme_api.h b/umac/dfs/dispatcher/inc/wlan_dfs_mlme_api.h index 878617eef9..08cbdc7865 100644 --- a/umac/dfs/dispatcher/inc/wlan_dfs_mlme_api.h +++ b/umac/dfs/dispatcher/inc/wlan_dfs_mlme_api.h @@ -243,4 +243,23 @@ void dfs_mlme_restart_vaps_with_non_dfs_chan(struct wlan_objmgr_pdev *pdev, { } #endif + +/** + * dfs_mlme_check_allowed_prim_chanlist() - Check whether the given channel is + * present in the primary allowed channel list or not + * @pdev: Pointer to DFS pdev object. + * @chan_num: Channel number + */ +#if defined(WLAN_SUPPORT_PRIMARY_ALLOWED_CHAN) +bool dfs_mlme_check_allowed_prim_chanlist(struct wlan_objmgr_pdev *pdev, + uint32_t chan_num); + +#else +static inline +bool dfs_mlme_check_allowed_prim_chanlist(struct wlan_objmgr_pdev *pdev, + uint32_t chan_num) +{ + return true; +} +#endif #endif /* _WLAN_DFS_MLME_API_H_ */ diff --git a/umac/dfs/dispatcher/inc/wlan_dfs_ucfg_api.h b/umac/dfs/dispatcher/inc/wlan_dfs_ucfg_api.h index 940af67758..7e6387c527 100644 --- a/umac/dfs/dispatcher/inc/wlan_dfs_ucfg_api.h +++ b/umac/dfs/dispatcher/inc/wlan_dfs_ucfg_api.h @@ -54,6 +54,9 @@ * @mlme_rebuild_chan_list_with_non_dfs_channel: Rebuild channels with non-dfs * channels. * @mlme_restart_vaps_with_non_dfs_chan: Restart vaps with non-dfs channel. + * @mlme_check_allowed_prim_chanlist: Check whether the given channel is + * present in the primary allowed channel + * list or not. */ struct dfs_to_mlme { QDF_STATUS (*pdev_component_obj_attach)(struct wlan_objmgr_pdev *pdev, @@ -130,6 +133,8 @@ struct dfs_to_mlme { (struct wlan_objmgr_pdev *pdev); QDF_STATUS (*mlme_restart_vaps_with_non_dfs_chan) (struct wlan_objmgr_pdev *pdev, int no_chans_avail); + bool (*mlme_check_allowed_prim_chanlist) + (struct wlan_objmgr_pdev *pdev, uint32_t chan_num); }; extern struct dfs_to_mlme global_dfs_to_mlme; diff --git a/umac/dfs/dispatcher/src/wlan_dfs_init_deinit_api.c b/umac/dfs/dispatcher/src/wlan_dfs_init_deinit_api.c index 040bfd4680..895f184dfa 100644 --- a/umac/dfs/dispatcher/src/wlan_dfs_init_deinit_api.c +++ b/umac/dfs/dispatcher/src/wlan_dfs_init_deinit_api.c @@ -83,6 +83,8 @@ void register_dfs_callbacks(void) mlme_dfs_rebuild_chan_list_with_non_dfs_channels; tmp_dfs_to_mlme->mlme_restart_vaps_with_non_dfs_chan = mlme_dfs_restart_vaps_with_non_dfs_chan; + tmp_dfs_to_mlme->mlme_check_allowed_prim_chanlist = + mlme_dfs_check_allowed_prim_chanlist; } #else void register_dfs_callbacks(void) diff --git a/umac/dfs/dispatcher/src/wlan_dfs_mlme_api.c b/umac/dfs/dispatcher/src/wlan_dfs_mlme_api.c index 040744689c..0aa73f9321 100644 --- a/umac/dfs/dispatcher/src/wlan_dfs_mlme_api.c +++ b/umac/dfs/dispatcher/src/wlan_dfs_mlme_api.c @@ -305,3 +305,15 @@ void dfs_mlme_restart_vaps_with_non_dfs_chan(struct wlan_objmgr_pdev *pdev, no_chans_avail); } #endif + +#if defined(WLAN_SUPPORT_PRIMARY_ALLOWED_CHAN) +bool dfs_mlme_check_allowed_prim_chanlist(struct wlan_objmgr_pdev *pdev, + uint32_t chan_num) +{ + if (!global_dfs_to_mlme.mlme_check_allowed_prim_chanlist) + return true; + + return global_dfs_to_mlme.mlme_check_allowed_prim_chanlist(pdev, + chan_num); +} +#endif diff --git a/umac/dfs/dispatcher/src/wlan_dfs_utils_api.c b/umac/dfs/dispatcher/src/wlan_dfs_utils_api.c index 62de86f4bb..9a956aa85d 100644 --- a/umac/dfs/dispatcher/src/wlan_dfs_utils_api.c +++ b/umac/dfs/dispatcher/src/wlan_dfs_utils_api.c @@ -22,6 +22,7 @@ * to outside of DFS component. */ #include "wlan_dfs_utils_api.h" +#include "wlan_dfs_mlme_api.h" #include "../../core/src/dfs.h" #include "../../core/src/dfs_zero_cac.h" #include "../../core/src/dfs_etsi_precac.h" @@ -545,6 +546,9 @@ static void utils_dfs_get_channel_list(struct wlan_objmgr_pdev *pdev, center_freq = tmp_chan_list[i].dfs_ch_freq; flagext = tmp_chan_list[i].dfs_ch_flagext; + if (!dfs_mlme_check_allowed_prim_chanlist(pdev, chan_num)) + continue; + if ((is_curchan_5g) && WLAN_REG_IS_5GHZ_CH(chan_num)) { chan_list[j].dfs_ch_ieee = chan_num; chan_list[j].dfs_ch_freq = center_freq;