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
This commit is contained in:
Abhishek Singh 2020-06-29 14:43:24 +05:30 • committed by snandini
commit c76b71a758
4 changed files with 17 additions and 112 deletions

View file

@ -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

View file

@ -25,6 +25,7 @@
#include <wlan_scan_public_structs.h>
#include <wlan_scan_utils_api.h>
#include "wlan_blm_tgt_api.h"
#include <wlan_cm_bss_score_param.h>
#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

View file

@ -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,

View file

@ -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");