diff --git a/init_deinit/dispatcher/src/dispatcher_init_deinit.c b/init_deinit/dispatcher/src/dispatcher_init_deinit.c index 505f9012e7f6..c7fb503c4912 100644 --- a/init_deinit/dispatcher/src/dispatcher_init_deinit.c +++ b/init_deinit/dispatcher/src/dispatcher_init_deinit.c @@ -563,7 +563,7 @@ static QDF_STATUS dispatcher_dfs_psoc_enable(struct wlan_objmgr_psoc *psoc) static QDF_STATUS dispatcher_dfs_psoc_disable(struct wlan_objmgr_psoc *psoc) { - return QDF_STATUS_SUCCESS; + return wifi_dfs_psoc_disable(psoc); } #else static QDF_STATUS dispatcher_init_dfs(void) diff --git a/umac/dfs/core/src/dfs.h b/umac/dfs/core/src/dfs.h index 85831b320244..77edfe494991 100644 --- a/umac/dfs/core/src/dfs.h +++ b/umac/dfs/core/src/dfs.h @@ -803,11 +803,11 @@ struct wlan_dfs { os_timer_t dfs_cac_timer; os_timer_t dfs_cac_valid_timer; int dfs_cac_timeout_override; - int8_t dfs_enable:1, - dfs_cac_timer_running:1, - dfs_ignore_dfs:1, - dfs_ignore_cac:1, - dfs_cac_valid:1; + uint8_t dfs_enable:1, + dfs_cac_timer_running:1, + dfs_ignore_dfs:1, + dfs_ignore_cac:1, + dfs_cac_valid:1; uint32_t dfs_cac_valid_time; os_timer_t dfs_precac_timer; int dfs_precac_timeout_override; diff --git a/umac/dfs/dispatcher/inc/wlan_dfs_init_deinit_api.h b/umac/dfs/dispatcher/inc/wlan_dfs_init_deinit_api.h index a35214ddd18e..4da0c94b85c7 100644 --- a/umac/dfs/dispatcher/inc/wlan_dfs_init_deinit_api.h +++ b/umac/dfs/dispatcher/inc/wlan_dfs_init_deinit_api.h @@ -69,4 +69,10 @@ QDF_STATUS wlan_dfs_pdev_obj_destroy_notification(struct wlan_objmgr_pdev *pdev, */ QDF_STATUS wifi_dfs_psoc_enable(struct wlan_objmgr_psoc *psoc); +/** + * wifi_dfs_psoc_disable() - handles deregistering dfs event handlers. + * @psoc: psoc object. + */ +QDF_STATUS wifi_dfs_psoc_disable(struct wlan_objmgr_psoc *psoc); + #endif /* _WLAN_DFS_INIT_DEINIT_API_H_ */ 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 190fe641be95..66de12dcefbf 100644 --- a/umac/dfs/dispatcher/src/wlan_dfs_init_deinit_api.c +++ b/umac/dfs/dispatcher/src/wlan_dfs_init_deinit_api.c @@ -31,6 +31,7 @@ #include "wlan_dfs_init_deinit_api.h" #include "../../core/src/dfs.h" #include "a_types.h" +#include "wlan_serialization_api.h" struct dfs_to_mlme global_dfs_to_mlme; @@ -203,17 +204,82 @@ QDF_STATUS wlan_dfs_pdev_obj_destroy_notification(struct wlan_objmgr_pdev *pdev, return QDF_STATUS_SUCCESS; } +static void dfs_scan_serialization_comp_info_cb( + struct wlan_objmgr_vdev *vdev, + union wlan_serialization_rules_info *comp_info) +{ + struct wlan_dfs *dfs; + struct wlan_objmgr_pdev *pdev; + + if (!comp_info) { + DFS_PRINTK("%s: comp_info is NULL\n", __func__); + return; + } + + if (!vdev) { + DFS_PRINTK("%s: vdev is NULL\n", __func__); + return; + } + + pdev = wlan_vdev_get_pdev(vdev); + if (!pdev) { + DFS_PRINTK("%s: pdev is NULL\n", __func__); + return; + } + + dfs = wlan_pdev_get_dfs_obj(pdev); + if (dfs == NULL) { + DFS_PRINTK("%s: dfs is NULL\n", __func__); + return; + } + + if (dfs_is_ap_cac_timer_running(dfs)) + comp_info->scan_info.is_cac_in_progress = true; + else + comp_info->scan_info.is_cac_in_progress = false; +} + QDF_STATUS wifi_dfs_psoc_enable(struct wlan_objmgr_psoc *psoc) { + QDF_STATUS status; bool dfs_offload = DFS_OFFLOAD_IS_ENABLED(psoc->service_param.service_bitmap); DFS_PRINTK("%s: dfs_offload %d\n", __func__, dfs_offload); - if (QDF_STATUS_SUCCESS != tgt_dfs_reg_ev_handler(psoc, dfs_offload)) { + status = tgt_dfs_reg_ev_handler(psoc, dfs_offload); + if (status != QDF_STATUS_SUCCESS) { DFS_PRINTK("%s: tgt_dfs_reg_ev_handler failed\n", __func__); return QDF_STATUS_E_FAILURE; } + status = wlan_serialization_register_comp_info_cb(psoc, + WLAN_UMAC_COMP_DFS, + WLAN_SER_CMD_SCAN, + dfs_scan_serialization_comp_info_cb); + if (status != QDF_STATUS_SUCCESS) { + DFS_PRINTK( + "%s :Serialize scan cmd register failed\n", + __func__); + return status; + } + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS wifi_dfs_psoc_disable(struct wlan_objmgr_psoc *psoc) +{ + QDF_STATUS status; + + status = wlan_serialization_deregister_comp_info_cb(psoc, + WLAN_UMAC_COMP_DFS, + WLAN_SER_CMD_SCAN); + if (status != QDF_STATUS_SUCCESS) { + DFS_PRINTK( + "%s :Serialize scan cmd deregister failed\n", + __func__); + return status; + } + return QDF_STATUS_SUCCESS; } diff --git a/umac/scan/dispatcher/src/wlan_scan_ucfg_api.c b/umac/scan/dispatcher/src/wlan_scan_ucfg_api.c index da27314aeba4..34901cbaf15a 100644 --- a/umac/scan/dispatcher/src/wlan_scan_ucfg_api.c +++ b/umac/scan/dispatcher/src/wlan_scan_ucfg_api.c @@ -1334,13 +1334,13 @@ static bool scm_serialization_scan_rules_cb( uint8_t comp_id) { switch (comp_id) { - case QDF_MODULE_ID_TDLS: + case WLAN_UMAC_COMP_TDLS: if (comp_info->scan_info.is_tdls_in_progress) { scm_info("Cancel scan. Tdls in progress"); return false; } break; - case QDF_MODULE_ID_DFS: + case WLAN_UMAC_COMP_DFS: if (comp_info->scan_info.is_cac_in_progress) { scm_info("Cancel scan. CAC in progress"); return false;