mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-10 06:09:23 -04:00
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:
parent
c9f082cc99
commit
c76b71a758
4 changed files with 17 additions and 112 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
Loading…
Reference in a new issue