From c76b71a758047faa8dbefcdd8bbc85d7dbfdb07e Mon Sep 17 00:00:00 2001 From: Abhishek Singh Date: Mon, 29 Jun 2020 14:43:24 +0530 Subject: [PATCH] qcacld-3.0: Move Blacklist filter while scoring the BSS While BSS are scored apply blacklist logic to remove blacklist AP or move the avoid AP at the end. Change-Id: Id5310ef53d31159104fd40af6670135bb1be4571 CRs-Fixed: 2725144 --- .../blacklist_mgr/core/inc/wlan_blm_core.h | 25 ------ .../blacklist_mgr/core/src/wlan_blm_core.c | 79 ++++--------------- .../dispatcher/inc/wlan_blm_api.h | 18 ----- core/sme/src/csr/csr_api_scan.c | 7 +- 4 files changed, 17 insertions(+), 112 deletions(-) diff --git a/components/blacklist_mgr/core/inc/wlan_blm_core.h b/components/blacklist_mgr/core/inc/wlan_blm_core.h index a89c8e5457e7..961d022a5346 100644 --- a/components/blacklist_mgr/core/inc/wlan_blm_core.h +++ b/components/blacklist_mgr/core/inc/wlan_blm_core.h @@ -143,31 +143,6 @@ struct blm_reject_ap { qdf_time_t connect_timestamp; }; -/** - * enum blm_bssid_action - action taken by driver for the scan results - * @BLM_ACTION_NOP: No operation to be taken for the BSSID in the scan list. - * @BLM_REMOVE_FROM_LIST: Remove the BSSID from the scan list ( Blacklisted APs) - * @BLM_MOVE_AT_LAST: Attach the Ap at last of the scan list (Avoided Aps) - */ -enum blm_bssid_action { - BLM_ACTION_NOP, - BLM_REMOVE_FROM_LIST, - BLM_MOVE_AT_LAST, -}; - -/** - * blm_filter_bssid() - Filter out the bad Aps from the scan list. - * @pdev: Pdev object - * @scan_list: Scan list from the caller - * - * This API will filter out the bad Aps, or add the bad APs at the last - * of the linked list if the APs are to be avoided. - * - * Return: QDF status - */ -QDF_STATUS -blm_filter_bssid(struct wlan_objmgr_pdev *pdev, qdf_list_t *scan_list); - /** * blm_add_bssid_to_reject_list() - Add BSSID to the specific reject list. * @pdev: Pdev object diff --git a/components/blacklist_mgr/core/src/wlan_blm_core.c b/components/blacklist_mgr/core/src/wlan_blm_core.c index 0ff1d15fa2db..38a41e8a6481 100644 --- a/components/blacklist_mgr/core/src/wlan_blm_core.c +++ b/components/blacklist_mgr/core/src/wlan_blm_core.c @@ -25,6 +25,7 @@ #include #include #include "wlan_blm_tgt_api.h" +#include #define SECONDS_TO_MS(params) (params * 1000) #define MINUTES_TO_MS(params) (SECONDS_TO_MS(params) * 60) @@ -132,7 +133,7 @@ blm_update_ap_info(struct blm_reject_ap *blm_entry, struct blm_config *cfg, blm_entry->reject_ap_type); } -static enum blm_bssid_action +static enum cm_blacklist_action blm_prune_old_entries_and_get_action(struct blm_reject_ap *blm_entry, struct blm_config *cfg, struct scan_cache_entry *entry, @@ -149,20 +150,20 @@ blm_prune_old_entries_and_get_action(struct blm_reject_ap *blm_entry, blm_debug("%pM cleared from list", blm_entry->bssid.bytes); qdf_list_remove_node(reject_ap_list, &blm_entry->node); qdf_mem_free(blm_entry); - return BLM_ACTION_NOP; + return CM_BLM_NO_ACTION; } if (BLM_IS_AP_IN_BLACKLIST(blm_entry)) - return BLM_REMOVE_FROM_LIST; + return CM_BLM_REMOVE; if (BLM_IS_AP_IN_AVOIDLIST(blm_entry)) - return BLM_MOVE_AT_LAST; + return CM_BLM_AVOID; - return BLM_ACTION_NOP; + return CM_BLM_NO_ACTION; } -static enum blm_bssid_action +static enum cm_blacklist_action blm_action_on_bssid(struct wlan_objmgr_pdev *pdev, struct scan_cache_entry *entry) { @@ -172,19 +173,19 @@ blm_action_on_bssid(struct wlan_objmgr_pdev *pdev, struct blm_reject_ap *blm_entry = NULL; qdf_list_node_t *cur_node = NULL, *next_node = NULL; QDF_STATUS status; - enum blm_bssid_action action = BLM_ACTION_NOP; + enum cm_blacklist_action action = CM_BLM_NO_ACTION; blm_ctx = blm_get_pdev_obj(pdev); blm_psoc_obj = blm_get_psoc_obj(wlan_pdev_get_psoc(pdev)); if (!blm_ctx || !blm_psoc_obj) { blm_err("blm_ctx or blm_psoc_obj is NULL"); - return BLM_ACTION_NOP; + return CM_BLM_NO_ACTION; } status = qdf_mutex_acquire(&blm_ctx->reject_ap_list_lock); if (QDF_IS_STATUS_ERROR(status)) { blm_err("failed to acquire reject_ap_list_lock"); - return BLM_ACTION_NOP; + return CM_BLM_NO_ACTION; } cfg = &blm_psoc_obj->blm_cfg; @@ -209,64 +210,14 @@ blm_action_on_bssid(struct wlan_objmgr_pdev *pdev, } qdf_mutex_release(&blm_ctx->reject_ap_list_lock); - return BLM_ACTION_NOP; + return CM_BLM_NO_ACTION; } -static void -blm_modify_scan_list(qdf_list_t *scan_list, - struct scan_cache_node *scan_node, - enum blm_bssid_action action) +enum cm_blacklist_action +wlan_blacklist_action_on_bssid(struct wlan_objmgr_pdev *pdev, + struct scan_cache_entry *entry) { - blm_debug("%pM Action %d", scan_node->entry->bssid.bytes, action); - - switch (action) { - case BLM_REMOVE_FROM_LIST: - qdf_list_remove_node(scan_list, &scan_node->node); - util_scan_free_cache_entry(scan_node->entry); - qdf_mem_free(scan_node); - break; - - case BLM_MOVE_AT_LAST: - qdf_list_remove_node(scan_list, &scan_node->node); - qdf_list_insert_back(scan_list, &scan_node->node); - scan_node->entry->bss_score = 0; - break; - - default: - break; - } -} - -QDF_STATUS -blm_filter_bssid(struct wlan_objmgr_pdev *pdev, qdf_list_t *scan_list) -{ - struct scan_cache_node *scan_node = NULL; - uint32_t scan_list_size; - enum blm_bssid_action action; - qdf_list_node_t *cur_node = NULL, *next_node = NULL; - - if (!scan_list || !qdf_list_size(scan_list)) { - blm_debug("Scan list is NULL or No BSSIDs present"); - return QDF_STATUS_E_EMPTY; - } - - scan_list_size = qdf_list_size(scan_list); - qdf_list_peek_front(scan_list, &cur_node); - - while (cur_node && scan_list_size) { - qdf_list_peek_next(scan_list, cur_node, &next_node); - - scan_node = qdf_container_of(cur_node, struct scan_cache_node, - node); - action = blm_action_on_bssid(pdev, scan_node->entry); - if (action != BLM_ACTION_NOP) - blm_modify_scan_list(scan_list, scan_node, action); - cur_node = next_node; - next_node = NULL; - scan_list_size--; - } - - return QDF_STATUS_SUCCESS; + return blm_action_on_bssid(pdev, entry); } static void diff --git a/components/blacklist_mgr/dispatcher/inc/wlan_blm_api.h b/components/blacklist_mgr/dispatcher/inc/wlan_blm_api.h index 75ba78d04ede..1757c8d85758 100644 --- a/components/blacklist_mgr/dispatcher/inc/wlan_blm_api.h +++ b/components/blacklist_mgr/dispatcher/inc/wlan_blm_api.h @@ -29,19 +29,6 @@ #ifdef FEATURE_BLACKLIST_MGR #include "wlan_blm_core.h" -/** - * wlan_blm_filter_bssid() - Wrapper API to blm_filter_bssid - * @pdev: pdev object - * @scan_list: scan list whose results are to filtered out. - * - * This API is a wrapper to blm_filter_bssid. - */ -static inline QDF_STATUS -wlan_blm_filter_bssid(struct wlan_objmgr_pdev *pdev, qdf_list_t *scan_list) -{ - return blm_filter_bssid(pdev, scan_list); -} - /** * wlan_blm_add_bssid_to_reject_list() - Add BSSID to the specific reject list. * @pdev: Pdev object @@ -119,11 +106,6 @@ wlan_blm_get_rssi_blacklist_threshold(struct wlan_objmgr_pdev *pdev) } #else -static inline QDF_STATUS -wlan_blm_filter_bssid(struct wlan_objmgr_pdev *pdev, qdf_list_t *scan_list) -{ - return QDF_STATUS_SUCCESS; -} static inline QDF_STATUS wlan_blm_add_bssid_to_reject_list(struct wlan_objmgr_pdev *pdev, diff --git a/core/sme/src/csr/csr_api_scan.c b/core/sme/src/csr/csr_api_scan.c index 10a3e9404e79..fe2965fc6273 100644 --- a/core/sme/src/csr/csr_api_scan.c +++ b/core/sme/src/csr/csr_api_scan.c @@ -2647,7 +2647,7 @@ static void csr_calculate_scores(struct mac_context *mac_ctx, pcl_lst = NULL; } } - wlan_cm_calculate_bss_score(mac_ctx->psoc, pcl_lst, list, + wlan_cm_calculate_bss_score(mac_ctx->pdev, pcl_lst, list, &filter->bssid_hint); if (pcl_lst) qdf_mem_free(pcl_lst); @@ -2680,11 +2680,8 @@ QDF_STATUS csr_scan_get_result(struct mac_context *mac_ctx, sme_debug("num_entries %d", num_bss); } - if (num_bss && filter && scoring_required) { + if (num_bss && filter && scoring_required) csr_calculate_scores(mac_ctx, filter, list); - /* Filter the blacklisted APs and avoided APs */ - wlan_blm_filter_bssid(pdev, list); - } if (!list || (list && !qdf_list_size(list))) { sme_debug("scan list empty");