qcacld-3.0: Move BSS scoring logic to connection manager

Move bss scoring logic to connection manager.

Change-Id: Ie7639853dec303133705c3394bf0577670000c21
CRs-Fixed: 2707108
This commit is contained in:
gaurank kathpalia
2020-05-29 03:27:47 +05:30
committed by nshrivas
parent f2aed55e40
commit 67b87cbde5
20 changed files with 545 additions and 1887 deletions

7
Kbuild
View File

@@ -878,7 +878,6 @@ UMAC_TARGET_SCAN_INC := -I$(WLAN_COMMON_INC)/target_if/scan/inc
UMAC_SCAN_INC := -I$(WLAN_COMMON_INC)/$(UMAC_SCAN_DISP_INC_DIR) UMAC_SCAN_INC := -I$(WLAN_COMMON_INC)/$(UMAC_SCAN_DISP_INC_DIR)
UMAC_SCAN_OBJS := $(UMAC_SCAN_CORE_DIR)/wlan_scan_cache_db.o \ UMAC_SCAN_OBJS := $(UMAC_SCAN_CORE_DIR)/wlan_scan_cache_db.o \
$(UMAC_SCAN_CORE_DIR)/wlan_scan_11d.o \ $(UMAC_SCAN_CORE_DIR)/wlan_scan_11d.o \
$(UMAC_SCAN_CORE_DIR)/wlan_scan_bss_score.o \
$(UMAC_SCAN_CORE_DIR)/wlan_scan_filter.o \ $(UMAC_SCAN_CORE_DIR)/wlan_scan_filter.o \
$(UMAC_SCAN_CORE_DIR)/wlan_scan_main.o \ $(UMAC_SCAN_CORE_DIR)/wlan_scan_main.o \
$(UMAC_SCAN_CORE_DIR)/wlan_scan_manager.o \ $(UMAC_SCAN_CORE_DIR)/wlan_scan_manager.o \
@@ -1165,7 +1164,8 @@ UMAC_MLME_INC := -I$(WLAN_COMMON_INC)/umac/mlme \
-I$(WLAN_COMMON_INC)/umac/mlme/mlme_objmgr/dispatcher/inc \ -I$(WLAN_COMMON_INC)/umac/mlme/mlme_objmgr/dispatcher/inc \
-I$(WLAN_COMMON_INC)/umac/mlme/vdev_mgr/dispatcher/inc \ -I$(WLAN_COMMON_INC)/umac/mlme/vdev_mgr/dispatcher/inc \
-I$(WLAN_COMMON_INC)/umac/mlme/pdev_mgr/dispatcher/inc \ -I$(WLAN_COMMON_INC)/umac/mlme/pdev_mgr/dispatcher/inc \
-I$(WLAN_COMMON_INC)/umac/mlme/psoc_mgr/dispatcher/inc -I$(WLAN_COMMON_INC)/umac/mlme/psoc_mgr/dispatcher/inc \
-I$(WLAN_COMMON_INC)/umac/mlme/connection_mgr/dispatcher/inc
UMAC_MLME_OBJS := $(WLAN_COMMON_ROOT)/umac/mlme/mlme_objmgr/dispatcher/src/wlan_vdev_mlme_main.o \ UMAC_MLME_OBJS := $(WLAN_COMMON_ROOT)/umac/mlme/mlme_objmgr/dispatcher/src/wlan_vdev_mlme_main.o \
$(WLAN_COMMON_ROOT)/umac/mlme/vdev_mgr/core/src/vdev_mlme_sm.o \ $(WLAN_COMMON_ROOT)/umac/mlme/vdev_mgr/core/src/vdev_mlme_sm.o \
@@ -1179,7 +1179,8 @@ UMAC_MLME_OBJS := $(WLAN_COMMON_ROOT)/umac/mlme/mlme_objmgr/dispatcher/src/wlan_
$(WLAN_COMMON_ROOT)/umac/mlme/mlme_objmgr/dispatcher/src/wlan_pdev_mlme_main.o \ $(WLAN_COMMON_ROOT)/umac/mlme/mlme_objmgr/dispatcher/src/wlan_pdev_mlme_main.o \
$(WLAN_COMMON_ROOT)/umac/mlme/pdev_mgr/dispatcher/src/wlan_pdev_mlme_api.o \ $(WLAN_COMMON_ROOT)/umac/mlme/pdev_mgr/dispatcher/src/wlan_pdev_mlme_api.o \
$(WLAN_COMMON_ROOT)/umac/mlme/mlme_objmgr/dispatcher/src/wlan_psoc_mlme_main.o \ $(WLAN_COMMON_ROOT)/umac/mlme/mlme_objmgr/dispatcher/src/wlan_psoc_mlme_main.o \
$(WLAN_COMMON_ROOT)/umac/mlme/psoc_mgr/dispatcher/src/wlan_psoc_mlme_api.o $(WLAN_COMMON_ROOT)/umac/mlme/psoc_mgr/dispatcher/src/wlan_psoc_mlme_api.o \
$(WLAN_COMMON_ROOT)/umac/mlme/connection_mgr/core/src/wlan_cm_bss_scoring.o
######## MLME ############## ######## MLME ##############
MLME_DIR := components/mlme MLME_DIR := components/mlme

View File

@@ -1696,21 +1696,6 @@ static void mlme_init_lfr_cfg(struct wlan_objmgr_psoc *psoc,
mlme_init_subnet_detection(psoc, lfr); mlme_init_subnet_detection(psoc, lfr);
} }
static uint32_t
mlme_limit_max_per_index_score(uint32_t per_index_score)
{
uint8_t i, score;
for (i = 0; i < MAX_INDEX_PER_INI; i++) {
score = WLAN_GET_SCORE_PERCENTAGE(per_index_score, i);
if (score > MAX_PCT_SCORE)
WLAN_SET_SCORE_PERCENTAGE(per_index_score,
MAX_PCT_SCORE, i);
}
return per_index_score;
}
static void mlme_init_power_cfg(struct wlan_objmgr_psoc *psoc, static void mlme_init_power_cfg(struct wlan_objmgr_psoc *psoc,
struct wlan_mlme_power *power) struct wlan_mlme_power *power)
{ {
@@ -1739,145 +1724,13 @@ static void mlme_init_power_cfg(struct wlan_objmgr_psoc *psoc,
(uint8_t)cfg_default(CFG_LOCAL_POWER_CONSTRAINT); (uint8_t)cfg_default(CFG_LOCAL_POWER_CONSTRAINT);
} }
static void mlme_init_scoring_cfg(struct wlan_objmgr_psoc *psoc, static void mlme_init_roam_scoring_cfg(struct wlan_objmgr_psoc *psoc,
struct wlan_mlme_scoring_cfg *scoring_cfg) struct wlan_mlme_roam_scoring_cfg *scoring_cfg)
{ {
uint32_t total_weight;
scoring_cfg->vendor_roam_score_algorithm = scoring_cfg->vendor_roam_score_algorithm =
cfg_get(psoc, CFG_VENDOR_ROAM_SCORE_ALGORITHM); cfg_get(psoc, CFG_VENDOR_ROAM_SCORE_ALGORITHM);
scoring_cfg->enable_scoring_for_roam = scoring_cfg->enable_scoring_for_roam =
cfg_get(psoc, CFG_ENABLE_SCORING_FOR_ROAM); cfg_get(psoc, CFG_ENABLE_SCORING_FOR_ROAM);
scoring_cfg->weight_cfg.rssi_weightage =
cfg_get(psoc, CFG_SCORING_RSSI_WEIGHTAGE);
scoring_cfg->weight_cfg.ht_caps_weightage =
cfg_get(psoc, CFG_SCORING_HT_CAPS_WEIGHTAGE);
scoring_cfg->weight_cfg.vht_caps_weightage =
cfg_get(psoc, CFG_SCORING_VHT_CAPS_WEIGHTAGE);
scoring_cfg->weight_cfg.he_caps_weightage =
cfg_get(psoc, CFG_SCORING_HE_CAPS_WEIGHTAGE);
scoring_cfg->weight_cfg.chan_width_weightage =
cfg_get(psoc, CFG_SCORING_CHAN_WIDTH_WEIGHTAGE);
scoring_cfg->weight_cfg.chan_band_weightage =
cfg_get(psoc, CFG_SCORING_CHAN_BAND_WEIGHTAGE);
scoring_cfg->weight_cfg.nss_weightage =
cfg_get(psoc, CFG_SCORING_NSS_WEIGHTAGE);
scoring_cfg->weight_cfg.beamforming_cap_weightage =
cfg_get(psoc, CFG_SCORING_BEAMFORM_CAP_WEIGHTAGE);
scoring_cfg->weight_cfg.pcl_weightage =
cfg_get(psoc, CFG_SCORING_PCL_WEIGHTAGE);
scoring_cfg->weight_cfg.channel_congestion_weightage =
cfg_get(psoc, CFG_SCORING_CHAN_CONGESTION_WEIGHTAGE);
scoring_cfg->weight_cfg.oce_wan_weightage =
cfg_get(psoc, CFG_SCORING_OCE_WAN_WEIGHTAGE);
scoring_cfg->weight_cfg.oce_ap_tx_pwr_weightage =
cfg_get(psoc, CFG_OCE_AP_TX_PWR_WEIGHTAGE);
scoring_cfg->weight_cfg.oce_subnet_id_weightage =
cfg_get(psoc, CFG_OCE_SUBNET_ID_WEIGHTAGE);
total_weight = scoring_cfg->weight_cfg.rssi_weightage +
scoring_cfg->weight_cfg.ht_caps_weightage +
scoring_cfg->weight_cfg.vht_caps_weightage +
scoring_cfg->weight_cfg.he_caps_weightage +
scoring_cfg->weight_cfg.chan_width_weightage +
scoring_cfg->weight_cfg.chan_band_weightage +
scoring_cfg->weight_cfg.nss_weightage +
scoring_cfg->weight_cfg.beamforming_cap_weightage +
scoring_cfg->weight_cfg.pcl_weightage +
scoring_cfg->weight_cfg.channel_congestion_weightage +
scoring_cfg->weight_cfg.oce_wan_weightage +
scoring_cfg->weight_cfg.oce_ap_tx_pwr_weightage +
scoring_cfg->weight_cfg.oce_subnet_id_weightage;
/*
* If configured weights are greater than max weight,
* fallback to default weights
*/
if (total_weight > BEST_CANDIDATE_MAX_WEIGHT) {
mlme_legacy_err("Total weight greater than %d, using default weights",
BEST_CANDIDATE_MAX_WEIGHT);
scoring_cfg->weight_cfg.rssi_weightage = RSSI_WEIGHTAGE;
scoring_cfg->weight_cfg.ht_caps_weightage =
HT_CAPABILITY_WEIGHTAGE;
scoring_cfg->weight_cfg.vht_caps_weightage =
VHT_CAP_WEIGHTAGE;
scoring_cfg->weight_cfg.he_caps_weightage = HE_CAP_WEIGHTAGE;
scoring_cfg->weight_cfg.chan_width_weightage =
CHAN_WIDTH_WEIGHTAGE;
scoring_cfg->weight_cfg.chan_band_weightage =
CHAN_BAND_WEIGHTAGE;
scoring_cfg->weight_cfg.nss_weightage = NSS_WEIGHTAGE;
scoring_cfg->weight_cfg.beamforming_cap_weightage =
BEAMFORMING_CAP_WEIGHTAGE;
scoring_cfg->weight_cfg.pcl_weightage = PCL_WEIGHT;
scoring_cfg->weight_cfg.channel_congestion_weightage =
CHANNEL_CONGESTION_WEIGHTAGE;
scoring_cfg->weight_cfg.oce_wan_weightage = OCE_WAN_WEIGHTAGE;
scoring_cfg->weight_cfg.oce_ap_tx_pwr_weightage =
OCE_AP_TX_POWER_WEIGHTAGE;
scoring_cfg->weight_cfg.oce_subnet_id_weightage =
OCE_SUBNET_ID_WEIGHTAGE;
}
scoring_cfg->rssi_score.best_rssi_threshold =
cfg_get(psoc, CFG_SCORING_BEST_RSSI_THRESHOLD);
scoring_cfg->rssi_score.good_rssi_threshold =
cfg_get(psoc, CFG_SCORING_GOOD_RSSI_THRESHOLD);
scoring_cfg->rssi_score.bad_rssi_threshold =
cfg_get(psoc, CFG_SCORING_BAD_RSSI_THRESHOLD);
scoring_cfg->rssi_score.good_rssi_pcnt =
cfg_get(psoc, CFG_SCORING_GOOD_RSSI_PERCENT);
scoring_cfg->rssi_score.bad_rssi_pcnt =
cfg_get(psoc, CFG_SCORING_BAD_RSSI_PERCENT);
scoring_cfg->rssi_score.good_rssi_bucket_size =
cfg_get(psoc, CFG_SCORING_GOOD_RSSI_BUCKET_SIZE);
scoring_cfg->rssi_score.bad_rssi_bucket_size =
cfg_get(psoc, CFG_SCORING_BAD_RSSI_BUCKET_SIZE);
scoring_cfg->rssi_score.rssi_pref_5g_rssi_thresh =
cfg_get(psoc, CFG_SCORING_RSSI_PREF_5G_THRESHOLD);
scoring_cfg->bandwidth_weight_per_index =
mlme_limit_max_per_index_score(
cfg_get(psoc, CFG_SCORING_BW_WEIGHT_PER_IDX));
scoring_cfg->nss_weight_per_index =
mlme_limit_max_per_index_score(
cfg_get(psoc, CFG_SCORING_NSS_WEIGHT_PER_IDX));
scoring_cfg->band_weight_per_index =
mlme_limit_max_per_index_score(
cfg_get(psoc, CFG_SCORING_BAND_WEIGHT_PER_IDX));
scoring_cfg->esp_qbss_scoring.num_slot =
cfg_get(psoc, CFG_SCORING_NUM_ESP_QBSS_SLOTS);
scoring_cfg->esp_qbss_scoring.score_pcnt3_to_0 =
mlme_limit_max_per_index_score(
cfg_get(psoc, CFG_SCORING_ESP_QBSS_SCORE_IDX_3_TO_0));
scoring_cfg->esp_qbss_scoring.score_pcnt7_to_4 =
mlme_limit_max_per_index_score(
cfg_get(psoc, CFG_SCORING_ESP_QBSS_SCORE_IDX_7_TO_4));
scoring_cfg->esp_qbss_scoring.score_pcnt11_to_8 =
mlme_limit_max_per_index_score(
cfg_get(psoc, CFG_SCORING_ESP_QBSS_SCORE_IDX_11_TO_8));
scoring_cfg->esp_qbss_scoring.score_pcnt15_to_12 =
mlme_limit_max_per_index_score(
cfg_get(psoc, CFG_SCORING_ESP_QBSS_SCORE_IDX_15_TO_12));
scoring_cfg->oce_wan_scoring.num_slot =
cfg_get(psoc, CFG_SCORING_NUM_OCE_WAN_SLOTS);
scoring_cfg->oce_wan_scoring.score_pcnt3_to_0 =
mlme_limit_max_per_index_score(
cfg_get(psoc, CFG_SCORING_OCE_WAN_SCORE_IDX_3_TO_0));
scoring_cfg->oce_wan_scoring.score_pcnt7_to_4 =
mlme_limit_max_per_index_score(
cfg_get(psoc, CFG_SCORING_OCE_WAN_SCORE_IDX_7_TO_4));
scoring_cfg->oce_wan_scoring.score_pcnt11_to_8 =
mlme_limit_max_per_index_score(
cfg_get(psoc, CFG_SCORING_OCE_WAN_SCORE_IDX_11_TO_8));
scoring_cfg->oce_wan_scoring.score_pcnt15_to_12 =
mlme_limit_max_per_index_score(
cfg_get(psoc, CFG_SCORING_OCE_WAN_SCORE_IDX_15_TO_12));
scoring_cfg->roam_trigger_bitmap = scoring_cfg->roam_trigger_bitmap =
cfg_get(psoc, CFG_ROAM_SCORE_DELTA_TRIGGER_BITMAP); cfg_get(psoc, CFG_ROAM_SCORE_DELTA_TRIGGER_BITMAP);
scoring_cfg->roam_score_delta = cfg_get(psoc, CFG_ROAM_SCORE_DELTA); scoring_cfg->roam_score_delta = cfg_get(psoc, CFG_ROAM_SCORE_DELTA);
@@ -2379,7 +2232,7 @@ QDF_STATUS mlme_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc)
mlme_init_twt_cfg(psoc, &mlme_cfg->twt_cfg); mlme_init_twt_cfg(psoc, &mlme_cfg->twt_cfg);
mlme_init_lfr_cfg(psoc, &mlme_cfg->lfr); mlme_init_lfr_cfg(psoc, &mlme_cfg->lfr);
mlme_init_feature_flag_in_cfg(psoc, &mlme_cfg->feature_flags); mlme_init_feature_flag_in_cfg(psoc, &mlme_cfg->feature_flags);
mlme_init_scoring_cfg(psoc, &mlme_cfg->scoring); mlme_init_roam_scoring_cfg(psoc, &mlme_cfg->roam_scoring);
mlme_init_dot11_mode_cfg(&mlme_cfg->dot11_mode); mlme_init_dot11_mode_cfg(&mlme_cfg->dot11_mode);
mlme_init_threshold_cfg(psoc, &mlme_cfg->threshold); mlme_init_threshold_cfg(psoc, &mlme_cfg->threshold);
mlme_init_acs_cfg(psoc, &mlme_cfg->acs); mlme_init_acs_cfg(psoc, &mlme_cfg->acs);

View File

@@ -48,7 +48,7 @@
#include "cfg_mlme_sap.h" #include "cfg_mlme_sap.h"
#include "cfg_mlme_stats.h" #include "cfg_mlme_stats.h"
#include "cfg_mlme_twt.h" #include "cfg_mlme_twt.h"
#include "cfg_mlme_scoring.h" #include "cfg_mlme_roam_scoring.h"
#include "cfg_mlme_oce.h" #include "cfg_mlme_oce.h"
#include "cfg_mlme_threshold.h" #include "cfg_mlme_threshold.h"
#include "cfg_mlme_feature_flag.h" #include "cfg_mlme_feature_flag.h"
@@ -88,7 +88,7 @@
CFG_REG_ALL \ CFG_REG_ALL \
CFG_SAP_ALL \ CFG_SAP_ALL \
CFG_SAP_PROTECTION_ALL \ CFG_SAP_PROTECTION_ALL \
CFG_SCORING_ALL \ CFG_ROAM_SCORING_ALL \
CFG_STA_ALL \ CFG_STA_ALL \
CFG_STATS_ALL \ CFG_STATS_ALL \
CFG_THRESHOLD_ALL \ CFG_THRESHOLD_ALL \

View File

@@ -0,0 +1,330 @@
/*
* Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/**
* DOC: This file contains roam specific SCORING related CFG/INI Items.
*/
#ifndef __CFG_MLME_ROAM_SCORING_H
#define __CFG_MLME_ROAM_SCORING_H
/*
* <ini>
* roam_score_delta_bitmap - bitmap to enable roam triggers on
* which roam score delta is to be applied during roam candidate
* selection
* @Min: 0
* @Max: 0xffffffff
* @Default: 0xffffffff
*
* Bitmap value of the following roam triggers:
* ROAM_TRIGGER_REASON_NONE - B0,
* ROAM_TRIGGER_REASON_PER - B1,
* ROAM_TRIGGER_REASON_BMISS - B2,
* ROAM_TRIGGER_REASON_LOW_RSSI - B3,
* ROAM_TRIGGER_REASON_HIGH_RSSI - B4,
* ROAM_TRIGGER_REASON_PERIODIC - B5,
* ROAM_TRIGGER_REASON_MAWC - B6,
* ROAM_TRIGGER_REASON_DENSE - B7,
* ROAM_TRIGGER_REASON_BACKGROUND - B8,
* ROAM_TRIGGER_REASON_FORCED - B9,
* ROAM_TRIGGER_REASON_BTM - B10,
* ROAM_TRIGGER_REASON_UNIT_TEST - B11,
* ROAM_TRIGGER_REASON_BSS_LOAD - B12
* ROAM_TRIGGER_REASON_DISASSOC - B13
* ROAM_TRIGGER_REASON_IDLE_ROAM - B14
*
* When the bit corresponding to a particular roam trigger reason
* is set, the value of "roam_score_delta" is expected over the
* roam score of the current connected AP, for that triggered roam
*
* Related: None
*
* Supported Feature: Roaming
*
* Usage: External
*
* </ini>
*/
#define CFG_ROAM_SCORE_DELTA_TRIGGER_BITMAP CFG_INI_UINT( \
"roam_score_delta_bitmap", \
0, \
0xFFFFFFFF, \
0xFFFFFFFF, \
CFG_VALUE_OR_DEFAULT, \
"Bitmap for various roam triggers")
/*
* <ini>
* roam_score_delta - Percentage increment in roam score value
* that is expected from a roaming candidate AP.
* @Min: 0
* @Max: 100
* @Default: 0
*
* This ini is used to provide the percentage increment value over roam
* score for the candidate APs so that they can be preferred over current
* AP for roaming.
*
* Related: None
*
* Supported Feature: Roaming
*
* Usage: External
*
* </ini>
*/
#define CFG_ROAM_SCORE_DELTA CFG_INI_UINT( \
"roam_score_delta", \
0, \
100, \
0, \
CFG_VALUE_OR_DEFAULT, \
"candidate AP's percentage roam score delta")
/*
* <ini>
* min_roam_score_delta - Difference of roam score values between connected
* AP and roam candidate AP.
* @Min: 0
* @Max: 10000
* @Default: 0
*
* This ini is used during CU and low rssi based roam triggers, consider
* AP as roam candidate only if its roam score is better than connected
* AP score by at least min_roam_score_delta.
* If user configured "roam_score_delta" and "min_roam_score_delta" both,
* then firmware selects roam candidate AP by considering values of both
* INIs.
* Example: If DUT is connected with AP1 and roam candidate AP2 has roam
* score greater than roam_score_delta and min_roam_score_delta then only
* firmware will trigger roaming to AP2.
*
* Related: roam_score_delta
*
* Supported Feature: Roaming
*
* Usage: Internal
*
* </ini>
*/
#define CFG_CAND_MIN_ROAM_SCORE_DELTA CFG_INI_UINT( \
"min_roam_score_delta", \
0, \
10000, \
0, \
CFG_VALUE_OR_DEFAULT, \
"Diff between connected AP's and candidate AP's roam score")
/*
* <ini>
* enable_scoring_for_roam - enable/disable scoring logic in FW for candidate
* selection during roaming
*
* @Min: 0
* @Max: 1
* @Default: 1
*
* This ini is used to enable/disable scoring logic in FW for candidate
* selection during roaming.
*
* Supported Feature: STA Candidate selection by FW during roaming based on
* scoring logic.
*
* Usage: External
*
* </ini>
*/
#define CFG_ENABLE_SCORING_FOR_ROAM CFG_INI_BOOL( \
"enable_scoring_for_roam", \
1, \
"Enable Scoring for Roam")
/*
* <cfg>
* apsd_enabled - Enable automatic power save delivery
* @Min: 0
* @Max: 1
* @Default: 0
*
* Supported Feature: Power save
*
* Usage: Internal
*
* </cfg>
*/
#define CFG_APSD_ENABLED CFG_BOOL( \
"apsd_enabled", \
0, \
"Enable APSD")
/*
* <ini>
* candidate_min_rssi_for_disconnect - Candidate AP minimum RSSI in
* idle roam trigger(in dBm).
* @Min: -120
* @Max: 0
* @Default: -70
*
* Minimum RSSI value of the candidate AP to consider it as candidate for
* roaming when roam trigger is Deauthentication/Disconnection from current
* AP. This value will be sent to firmware over the WMI_ROAM_AP_PROFILE
* wmi command in the roam_min_rssi_param_list tlv.
*
* Related: enable_idle_roam.
*
* Supported Feature: Roaming
*
* Usage: Internal/External
*
* </ini>
*/
#define CFG_DISCONNECT_ROAM_TRIGGER_MIN_RSSI CFG_INI_INT( \
"candidate_min_rssi_for_disconnect", \
-120, \
0, \
-70, \
CFG_VALUE_OR_DEFAULT, \
"Minimum RSSI of candidate AP for Disconnect roam trigger")
/*
* <ini>
* candidate_min_rssi_for_beacon_miss - Candidate AP minimum RSSI for beacon
* miss roam trigger (in dBm)
* @Min: -120
* @Max: 0
* @Default: -70
*
* Minimum RSSI value of the candidate AP to consider it as candidate for
* roaming when roam trigger is disconnection from current AP due to beacon
* miss. This value will be sent to firmware over the WMI_ROAM_AP_PROFILE
* wmi command in the roam_min_rssi_param_list tlv.
*
* Related: None
*
* Supported Feature: Roaming
*
* Usage: Internal/External
*
* </ini>
*/
#define CFG_BMISS_ROAM_MIN_RSSI CFG_INI_INT( \
"candidate_min_rssi_for_beacon_miss", \
-120, \
0, \
-70, \
CFG_VALUE_OR_DEFAULT, \
"Minimum RSSI of candidate AP for Bmiss roam trigger")
/*
* <ini>
* idle_roam_score_delta - Roam score delta value in percentage for idle roam.
* @Min: 0
* @Max: 100
* @Default: 0
*
* This ini is used to configure the minimum change in roam score
* value of the AP to consider it as candidate for
* roaming when roam trigger is due to idle state of sta.
* This value will be sent to firmware over the WMI_ROAM_AP_PROFILE wmi
* command in the roam_score_delta_param_list tlv.
* Related: None
*
* Supported Feature: Roaming
*
* Usage: External
*
* </ini>
*/
#define CFG_IDLE_ROAM_SCORE_DELTA CFG_INI_UINT( \
"idle_roam_score_delta", \
0, \
100, \
0, \
CFG_VALUE_OR_DEFAULT, \
"Roam score delta for Idle roam trigger")
/*
* <ini>
* btm_roam_score_delta - Roam score delta value in percentage for BTM triggered
* roaming.
* @Min: 0
* @Max: 100
* @Default: 0
*
* This ini is used to configure the minimum change in roam score
* value of the AP to consider it as candidate when the sta is disconnected
* from the current AP due to BTM kickout.
* This value will be sent to firmware over the WMI_ROAM_AP_PROFILE wmi
* command in the roam_score_delta_param_list tlv.
*
* Related: None
*
* Supported Feature: Roaming
*
* Usage: External
*
* </ini>
*/
#define CFG_BTM_ROAM_SCORE_DELTA CFG_INI_UINT( \
"btm_roam_score_delta", \
0, \
100, \
0, \
CFG_VALUE_OR_DEFAULT, \
"Roam score delta for BTM roam trigger")
/*
* <ini>
* vendor_roam_score_algorithm - Algorithm to calculate AP score
* @Min: 0
* @Max: 1
* @Default: 0
*
* By default the value is 0 and default roam algorithm will be used.
* When the value is 1, the V2 roaming algorithm will be used:
* For this V2 algo, AP score calculation is based on below equation:
* AP Score = (RSSIfactor * rssiweight(0.65)) + (CUfactor *cuweight(0.35))
*
* Related: None
*
* Supported Feature: roam score algorithm
*
* Usage: External
*
* </ini>
*/
#define CFG_VENDOR_ROAM_SCORE_ALGORITHM CFG_INI_UINT( \
"vendor_roam_score_algorithm", \
0, \
1, \
0, \
CFG_VALUE_OR_DEFAULT, \
"Roam candidate selection score algorithm")
#define CFG_ROAM_SCORING_ALL \
CFG(CFG_ROAM_SCORE_DELTA_TRIGGER_BITMAP) \
CFG(CFG_ROAM_SCORE_DELTA) \
CFG(CFG_CAND_MIN_ROAM_SCORE_DELTA) \
CFG(CFG_ENABLE_SCORING_FOR_ROAM) \
CFG(CFG_APSD_ENABLED) \
CFG(CFG_DISCONNECT_ROAM_TRIGGER_MIN_RSSI) \
CFG(CFG_BMISS_ROAM_MIN_RSSI) \
CFG(CFG_IDLE_ROAM_SCORE_DELTA) \
CFG(CFG_BTM_ROAM_SCORE_DELTA) \
CFG(CFG_VENDOR_ROAM_SCORE_ALGORITHM)
#endif /* __CFG_MLME_ROAM_SCORING_H */

File diff suppressed because it is too large Load Diff

View File

@@ -1873,52 +1873,9 @@ struct wlan_mlme_rssi_cfg_score {
uint32_t rssi_pref_5g_rssi_thresh; uint32_t rssi_pref_5g_rssi_thresh;
}; };
/**
* struct wlan_mlme_per_slot_scoring - define % score for differents slots
* for a scoring param.
* num_slot: number of slots in which the param will be divided.
* Max 15. index 0 is used for 'not_present. Num_slot will
* equally divide 100. e.g, if num_slot = 4 slot 0 = 0-25%, slot
* 1 = 26-50% slot 2 = 51-75%, slot 3 = 76-100%
* score_pcnt3_to_0: Conatins score percentage for slot 0-3
* BITS 0-7 :- the scoring pcnt when not present
* BITS 8-15 :- SLOT_1
* BITS 16-23 :- SLOT_2
* BITS 24-31 :- SLOT_3
* score_pcnt7_to_4: Conatins score percentage for slot 4-7
* BITS 0-7 :- SLOT_4
* BITS 8-15 :- SLOT_5
* BITS 16-23 :- SLOT_6
* BITS 24-31 :- SLOT_7
* score_pcnt11_to_8: Conatins score percentage for slot 8-11
* BITS 0-7 :- SLOT_8
* BITS 8-15 :- SLOT_9
* BITS 16-23 :- SLOT_10
* BITS 24-31 :- SLOT_11
* score_pcnt15_to_12: Conatins score percentage for slot 12-15
* BITS 0-7 :- SLOT_12
* BITS 8-15 :- SLOT_13
* BITS 16-23 :- SLOT_14
* BITS 24-31 :- SLOT_15
*/
struct wlan_mlme_per_slot_scoring {
uint32_t num_slot;
uint32_t score_pcnt3_to_0;
uint32_t score_pcnt7_to_4;
uint32_t score_pcnt11_to_8;
uint32_t score_pcnt15_to_12;
};
/* /*
* struct wlan_mlme_score_config - MLME BSS Scoring related config * struct wlan_mlme_roam_scoring_cfg - MLME roam related scoring config
* @enable_scoring_for_roam: Enable/disable BSS Scoring for Roaming * @enable_scoring_for_roam: Enable/disable BSS Scoring for Roaming
* @weight_cfg: Various Weight related Scoring Configs
* @rssi_score: RSSI Scoring related thresholds/percentages config
* @esp_qbss_scoring: ESP QBSS Scoring configs
* @oce_wan_scoring: OCE WAN Scoring Configs
* @bandwidth_weight_per_index: Bandwidth weight per index for scoring logic
* @nss_weight_per_index: NSS weight per index for scoring logic
* @band_weight_per_index: Band weight per index for scoring logic
* @roam_trigger_bitmap: bitmap for various roam triggers * @roam_trigger_bitmap: bitmap for various roam triggers
* @roam_score_delta: percentage delta in roam score * @roam_score_delta: percentage delta in roam score
* @apsd_enabled: Enable automatic power save delivery * @apsd_enabled: Enable automatic power save delivery
@@ -1926,15 +1883,8 @@ struct wlan_mlme_per_slot_scoring {
* @min_roam_score_delta: Minimum difference between connected AP's and * @min_roam_score_delta: Minimum difference between connected AP's and
* candidate AP's roam score to start roaming. * candidate AP's roam score to start roaming.
*/ */
struct wlan_mlme_scoring_cfg { struct wlan_mlme_roam_scoring_cfg {
bool enable_scoring_for_roam; bool enable_scoring_for_roam;
struct wlan_mlme_weight_config weight_cfg;
struct wlan_mlme_rssi_cfg_score rssi_score;
struct wlan_mlme_per_slot_scoring esp_qbss_scoring;
struct wlan_mlme_per_slot_scoring oce_wan_scoring;
uint32_t bandwidth_weight_per_index;
uint32_t nss_weight_per_index;
uint32_t band_weight_per_index;
uint32_t roam_trigger_bitmap; uint32_t roam_trigger_bitmap;
uint32_t roam_score_delta; uint32_t roam_score_delta;
bool apsd_enabled; bool apsd_enabled;
@@ -2297,7 +2247,7 @@ struct wlan_mlme_cfg {
struct wlan_mlme_nss_chains nss_chains_ini_cfg; struct wlan_mlme_nss_chains nss_chains_ini_cfg;
struct wlan_mlme_sta_cfg sta; struct wlan_mlme_sta_cfg sta;
struct wlan_mlme_stats_cfg stats; struct wlan_mlme_stats_cfg stats;
struct wlan_mlme_scoring_cfg scoring; struct wlan_mlme_roam_scoring_cfg roam_scoring;
struct wlan_mlme_oce oce; struct wlan_mlme_oce oce;
struct wlan_mlme_threshold threshold; struct wlan_mlme_threshold threshold;
struct wlan_mlme_timeout timeouts; struct wlan_mlme_timeout timeouts;

View File

@@ -24,6 +24,7 @@
#define _WMI_UNIFIED_ROAM_PARAM_H_ #define _WMI_UNIFIED_ROAM_PARAM_H_
#include <wlan_blm_public_struct.h> #include <wlan_blm_public_struct.h>
#include <wlan_cm_bss_score_param.h>
/** /**
* struct gateway_update_req_param - gateway parameter update request * struct gateway_update_req_param - gateway parameter update request
@@ -296,69 +297,6 @@ struct ap_profile {
uint32_t rssi_abs_thresh; uint32_t rssi_abs_thresh;
}; };
/**
* struct rssi_scoring - rssi scoring param to sortlist selected AP
* @best_rssi_threshold: Roamable AP RSSI equal or better than this threshold,
* full rssi score 100. Units in dBm.
* @good_rssi_threshold: Below threshold, scoring linear percentage between
* rssi_good_pnt and 100. Units in dBm.
* @bad_rssi_threshold: Between good and bad rssi threshold, scoring linear
* % between rssi_bad_pcnt and rssi_good_pct in dBm.
* @good_rssi_pcnt: Used to assigned scoring percentage of each slot between
* best to good rssi threshold. Units in percentage.
* @bad_rssi_pcnt: Used to assigned scoring percentage of each slot between good
* to bad rssi threshold. Unites in percentage.
* @good_bucket_size : bucket size of slot in good zone
* @bad_bucket_size : bucket size of slot in bad zone
* @rssi_pref_5g_rssi_thresh: Below rssi threshold, 5G AP have given preference
* of band percentage. Units in dBm.
*/
struct rssi_scoring {
int32_t best_rssi_threshold;
int32_t good_rssi_threshold;
int32_t bad_rssi_threshold;
uint32_t good_rssi_pcnt;
uint32_t bad_rssi_pcnt;
uint32_t good_bucket_size;
uint32_t bad_bucket_size;
int32_t rssi_pref_5g_rssi_thresh;
};
/**
* struct param_slot_scoring - define % score for differents slots for a
* scoring param.
* @num_slot: number of slots in which the param will be divided.
* Max 15. index 0 is used for 'not_present. Num_slot will
* equally divide 100. e.g, if num_slot = 4 slot 0 = 0-25%, slot
* 1 = 26-50% slot 2 = 51-75%, slot 3 = 76-100%
* @score_pcnt3_to_0: Conatins score percentage for slot 0-3
* BITS 0-7 :- the scoring pcnt when not present
* BITS 8-15 :- SLOT_1
* BITS 16-23 :- SLOT_2
* BITS 24-31 :- SLOT_3
* @score_pcnt7_to_4: Conatins score percentage for slot 4-7
* BITS 0-7 :- SLOT_4
* BITS 8-15 :- SLOT_5
* BITS 16-23 :- SLOT_6
* BITS 24-31 :- SLOT_7
* @score_pcnt11_to_8: Conatins score percentage for slot 8-11
* BITS 0-7 :- SLOT_8
* BITS 8-15 :- SLOT_9
* BITS 16-23 :- SLOT_10
* BITS 24-31 :- SLOT_11
* @score_pcnt15_to_12: Conatins score percentage for slot 12-15
* BITS 0-7 :- SLOT_12
* BITS 8-15 :- SLOT_13
* BITS 16-23 :- SLOT_14
* BITS 24-31 :- SLOT_15
*/
struct param_slot_scoring {
uint32_t num_slot;
uint32_t score_pcnt3_to_0;
uint32_t score_pcnt7_to_4;
uint32_t score_pcnt11_to_8;
uint32_t score_pcnt15_to_12;
};
/** /**
* struct scoring_param - scoring param to sortlist selected AP * struct scoring_param - scoring param to sortlist selected AP
@@ -427,9 +365,9 @@ struct scoring_param {
uint32_t roam_trigger_bitmap; uint32_t roam_trigger_bitmap;
uint32_t vendor_roam_score_algorithm; uint32_t vendor_roam_score_algorithm;
uint32_t cand_min_roam_score_delta; uint32_t cand_min_roam_score_delta;
struct rssi_scoring rssi_scoring; struct rssi_config_score rssi_scoring;
struct param_slot_scoring esp_qbss_scoring; struct per_slot_score esp_qbss_scoring;
struct param_slot_scoring oce_wan_scoring; struct per_slot_score oce_wan_scoring;
}; };
/* /*

View File

@@ -1654,9 +1654,9 @@ send_roam_scan_offload_ap_profile_cmd_tlv(wmi_unified_t wmi_handle,
score_param->rssi_scoring.bad_rssi_pcnt = score_param->rssi_scoring.bad_rssi_pcnt =
ap_profile->param.rssi_scoring.bad_rssi_pcnt; ap_profile->param.rssi_scoring.bad_rssi_pcnt;
score_param->rssi_scoring.good_bucket_size = score_param->rssi_scoring.good_bucket_size =
ap_profile->param.rssi_scoring.good_bucket_size; ap_profile->param.rssi_scoring.good_rssi_bucket_size;
score_param->rssi_scoring.bad_bucket_size = score_param->rssi_scoring.bad_bucket_size =
ap_profile->param.rssi_scoring.bad_bucket_size; ap_profile->param.rssi_scoring.bad_rssi_bucket_size;
score_param->rssi_scoring.rssi_pref_5g_rssi_thresh = score_param->rssi_scoring.rssi_pref_5g_rssi_thresh =
(-1) * ap_profile->param.rssi_scoring.rssi_pref_5g_rssi_thresh; (-1) * ap_profile->param.rssi_scoring.rssi_pref_5g_rssi_thresh;

View File

@@ -3892,13 +3892,11 @@ void hdd_set_rx_mode_rps(bool enable);
/** /**
* hdd_update_score_config - API to update candidate scoring related params * hdd_update_score_config - API to update candidate scoring related params
* configuration parameters * configuration parameters
* @score_config: score config to update * @hdd_ctx: hdd context
* @cfg: config params
* *
* Return: QDF_STATUS * Return: QDF_STATUS
*/ */
QDF_STATUS hdd_update_score_config( QDF_STATUS hdd_update_score_config(struct hdd_context *hdd_ctx);
struct scoring_config *score_config, struct hdd_context *hdd_ctx);
/** /**
* hdd_get_stainfo() - get stainfo for the specified peer * hdd_get_stainfo() - get stainfo for the specified peer

View File

@@ -2469,6 +2469,9 @@ int hdd_update_tgt_cfg(hdd_handle_t hdd_handle, struct wma_tgt_cfg *cfg)
else else
hdd_debug("bcast twt is disable in ini, fw cap %d", hdd_debug("bcast twt is disable in ini, fw cap %d",
cfg->bcast_twt_support); cfg->bcast_twt_support);
hdd_update_score_config(hdd_ctx);
return 0; return 0;
dispatcher_close: dispatcher_close:
@@ -16577,60 +16580,13 @@ void hdd_update_ie_whitelist_attr(struct probe_req_whitelist_attr *ie_whitelist,
ie_whitelist->voui[i] = whitelist.probe_req_voui[i]; ie_whitelist->voui[i] = whitelist.probe_req_voui[i];
} }
QDF_STATUS hdd_update_score_config( QDF_STATUS hdd_update_score_config(struct hdd_context *hdd_ctx)
struct scoring_config *score_config, struct hdd_context *hdd_ctx)
{ {
struct hdd_config *cfg = hdd_ctx->config; struct hdd_config *cfg = hdd_ctx->config;
QDF_STATUS status; eCsrPhyMode phy_mode = hdd_cfg_xlate_to_csr_phy_mode(cfg->dot11Mode);
struct wlan_mlme_nss_chains vdev_ini_cfg;
bool bval = false;
uint32_t channel_bonding_mode;
qdf_mem_zero(&vdev_ini_cfg, sizeof(struct wlan_mlme_nss_chains)); sme_update_score_config(hdd_ctx->mac_handle, phy_mode,
/* Populate the nss chain params from ini for this vdev type */ hdd_ctx->num_rf_chains);
sme_populate_nss_chain_params(hdd_ctx->mac_handle, &vdev_ini_cfg,
QDF_STA_MODE,
hdd_ctx->num_rf_chains);
score_config->vdev_nss_24g = vdev_ini_cfg.rx_nss[NSS_CHAINS_BAND_2GHZ];
score_config->vdev_nss_5g = vdev_ini_cfg.rx_nss[NSS_CHAINS_BAND_5GHZ];
sme_update_score_config(hdd_ctx->mac_handle, score_config);
ucfg_mlme_get_channel_bonding_24ghz(hdd_ctx->psoc,
&channel_bonding_mode);
score_config->cb_mode_24G = channel_bonding_mode;
ucfg_mlme_get_channel_bonding_5ghz(hdd_ctx->psoc,
&channel_bonding_mode);
score_config->cb_mode_5G = channel_bonding_mode;
if (cfg->dot11Mode == eHDD_DOT11_MODE_AUTO ||
cfg->dot11Mode == eHDD_DOT11_MODE_11ax ||
cfg->dot11Mode == eHDD_DOT11_MODE_11ax_ONLY)
score_config->he_cap = 1;
if (score_config->he_cap ||
cfg->dot11Mode == eHDD_DOT11_MODE_11ac ||
cfg->dot11Mode == eHDD_DOT11_MODE_11ac_ONLY)
score_config->vht_cap = 1;
if (score_config->vht_cap || cfg->dot11Mode == eHDD_DOT11_MODE_11n ||
cfg->dot11Mode == eHDD_DOT11_MODE_11n_ONLY)
score_config->ht_cap = 1;
status = ucfg_mlme_get_vht_for_24ghz(hdd_ctx->psoc, &bval);
if (!QDF_IS_STATUS_SUCCESS(status))
hdd_err("Failed to get vht_for_24ghz");
if (score_config->vht_cap && bval)
score_config->vht_24G_cap = 1;
status = ucfg_mlme_get_vht_enable_tx_bf(hdd_ctx->psoc,
&bval);
if (!QDF_IS_STATUS_SUCCESS(status))
hdd_err("unable to get vht_enable_tx_bf");
if (bval)
score_config->beamformee_cap = 1;
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
@@ -16681,12 +16637,6 @@ static int hdd_update_scan_config(struct hdd_context *hdd_ctx)
scan_cfg.sta_miracast_mcc_rest_time = mcast_mcc_rest_time; scan_cfg.sta_miracast_mcc_rest_time = mcast_mcc_rest_time;
hdd_update_ie_whitelist_attr(&scan_cfg.ie_whitelist, hdd_ctx); hdd_update_ie_whitelist_attr(&scan_cfg.ie_whitelist, hdd_ctx);
status = hdd_update_score_config(&scan_cfg.score_config, hdd_ctx);
if (QDF_IS_STATUS_ERROR(status)) {
hdd_err("Failed to update scoring config");
return -EINVAL;
}
status = ucfg_scan_update_user_config(psoc, &scan_cfg); status = ucfg_scan_update_user_config(psoc, &scan_cfg);
if (status != QDF_STATUS_SUCCESS) { if (status != QDF_STATUS_SUCCESS) {
hdd_err("failed pmo psoc configuration"); hdd_err("failed pmo psoc configuration");

View File

@@ -69,8 +69,6 @@
#include <wlan_blm_api.h> #include <wlan_blm_api.h>
#include <lim_assoc_utils.h> #include <lim_assoc_utils.h>
#define ASCII_SPACE_CHARACTER 0x20
/** ------------------------------------------------------------- /** -------------------------------------------------------------
\fn lim_delete_dialogue_token_list \fn lim_delete_dialogue_token_list
\brief deletes the complete lim dialogue token linked list. \brief deletes the complete lim dialogue token linked list.
@@ -8332,7 +8330,7 @@ QDF_STATUS lim_get_capability_info(struct mac_context *mac, uint16_t *pcap,
pcap_info->qos = 1; pcap_info->qos = 1;
/* APSD bit */ /* APSD bit */
if (mac->mlme_cfg->scoring.apsd_enabled) if (mac->mlme_cfg->roam_scoring.apsd_enabled)
pcap_info->apsd = 1; pcap_info->apsd = 1;
pcap_info->rrm = mac->rrm.rrmConfig.rrm_enabled; pcap_info->rrm = mac->rrm.rrmConfig.rrm_enabled;

View File

@@ -5980,7 +5980,7 @@ populate_dot11f_timing_advert_frame(struct mac_context *mac_ctx,
if (mac_ctx->mlme_cfg->wmm_params.qos_enabled) if (mac_ctx->mlme_cfg->wmm_params.qos_enabled)
frame->Capabilities.qos = 1; frame->Capabilities.qos = 1;
if (mac_ctx->mlme_cfg->scoring.apsd_enabled) if (mac_ctx->mlme_cfg->roam_scoring.apsd_enabled)
frame->Capabilities.apsd = 1; frame->Capabilities.apsd = 1;
val = mac_ctx->mlme_cfg->feature_flags.enable_block_ack; val = mac_ctx->mlme_cfg->feature_flags.enable_block_ack;

View File

@@ -3699,12 +3699,13 @@ sme_get_roam_scan_stats(mac_handle_t mac_handle, roam_scan_stats_cb cb,
/** /**
* sme_update_score_config() - Update the Scoring Config from MLME * sme_update_score_config() - Update the Scoring Config from MLME
* @mac_handle: Mac Handle * @mac_handle: Mac Handle
* @score_config: Pointer to the scoring config structure to be populated * @phy_mode: Phymode to be used
* @num_rf_chains: num of RF chains supported by HW
* *
* Return: None * Return: None
*/ */
void sme_update_score_config(mac_handle_t mac_handle, void sme_update_score_config(mac_handle_t mac_handle, eCsrPhyMode phy_mode,
struct scoring_config *score_config); uint8_t num_rf_chains);
/** /**
* sme_enable_fw_module_log_level() - enable fw module log level * sme_enable_fw_module_log_level() - enable fw module log level

View File

@@ -62,6 +62,7 @@
#include <wlan_coex_ucfg_api.h> #include <wlan_coex_ucfg_api.h>
#include "wlan_crypto_global_api.h" #include "wlan_crypto_global_api.h"
#include "wlan_mlme_ucfg_api.h" #include "wlan_mlme_ucfg_api.h"
#include "wlan_psoc_mlme_api.h"
static QDF_STATUS init_sme_cmd_list(struct mac_context *mac); static QDF_STATUS init_sme_cmd_list(struct mac_context *mac);
@@ -2542,7 +2543,7 @@ QDF_STATUS sme_scan_get_result(mac_handle_t mac_handle, uint8_t vdev_id,
0)); 0));
status = sme_acquire_global_lock(&mac->sme); status = sme_acquire_global_lock(&mac->sme);
if (QDF_IS_STATUS_SUCCESS(status)) { if (QDF_IS_STATUS_SUCCESS(status)) {
status = csr_scan_get_result(mac, filter, phResult); status = csr_scan_get_result(mac, filter, phResult, false);
sme_release_global_lock(&mac->sme); sme_release_global_lock(&mac->sme);
} }
@@ -2632,7 +2633,7 @@ QDF_STATUS sme_get_ap_channel_from_scan_cache(
status = sme_acquire_global_lock(&mac_ctx->sme); status = sme_acquire_global_lock(&mac_ctx->sme);
if (QDF_STATUS_SUCCESS == status) { if (QDF_STATUS_SUCCESS == status) {
status = csr_scan_get_result(mac_ctx, scan_filter, status = csr_scan_get_result(mac_ctx, scan_filter,
&filtered_scan_result); &filtered_scan_result, false);
if (QDF_STATUS_SUCCESS == status) { if (QDF_STATUS_SUCCESS == status) {
csr_get_bssdescr_from_scan_handle(filtered_scan_result, csr_get_bssdescr_from_scan_handle(filtered_scan_result,
&first_ap_profile); &first_ap_profile);
@@ -6804,7 +6805,7 @@ sme_restore_default_roaming_params(struct mac_context *mac,
tCsrNeighborRoamControlInfo *roam_info) tCsrNeighborRoamControlInfo *roam_info)
{ {
roam_info->cfgParams.enable_scoring_for_roam = roam_info->cfgParams.enable_scoring_for_roam =
mac->mlme_cfg->scoring.enable_scoring_for_roam; mac->mlme_cfg->roam_scoring.enable_scoring_for_roam;
roam_info->cfgParams.emptyScanRefreshPeriod = roam_info->cfgParams.emptyScanRefreshPeriod =
mac->mlme_cfg->lfr.empty_scan_refresh_period; mac->mlme_cfg->lfr.empty_scan_refresh_period;
roam_info->cfgParams.full_roam_scan_period = roam_info->cfgParams.full_roam_scan_period =
@@ -13740,7 +13741,8 @@ QDF_STATUS sme_get_rssi_snr_by_bssid(mac_handle_t mac_handle,
qdf_mem_copy(scan_filter->bssid_list[0].bytes, qdf_mem_copy(scan_filter->bssid_list[0].bytes,
bssid, sizeof(struct qdf_mac_addr)); bssid, sizeof(struct qdf_mac_addr));
status = csr_scan_get_result(mac_ctx, scan_filter, &result_handle); status = csr_scan_get_result(mac_ctx, scan_filter, &result_handle,
false);
qdf_mem_free(scan_filter); qdf_mem_free(scan_filter);
if (QDF_STATUS_SUCCESS != status) { if (QDF_STATUS_SUCCESS != status) {
sme_debug("parse_scan_result failed"); sme_debug("parse_scan_result failed");
@@ -13804,7 +13806,8 @@ QDF_STATUS sme_get_beacon_frm(mac_handle_t mac_handle,
qdf_mem_copy(scan_filter->bssid_list[0].bytes, qdf_mem_copy(scan_filter->bssid_list[0].bytes,
bssid, sizeof(struct qdf_mac_addr)); bssid, sizeof(struct qdf_mac_addr));
status = csr_scan_get_result(mac_ctx, scan_filter, &result_handle); status = csr_scan_get_result(mac_ctx, scan_filter, &result_handle,
false);
qdf_mem_free(scan_filter); qdf_mem_free(scan_filter);
if (QDF_STATUS_SUCCESS != status) { if (QDF_STATUS_SUCCESS != status) {
sme_err("parse_scan_result failed"); sme_err("parse_scan_result failed");
@@ -15217,86 +15220,66 @@ sme_get_roam_scan_stats(mac_handle_t mac_handle,
return status; return status;
} }
void sme_update_score_config(mac_handle_t mac_handle, void sme_update_score_config(mac_handle_t mac_handle, eCsrPhyMode phy_mode,
struct scoring_config *score_config) uint8_t num_rf_chains)
{ {
struct mac_context *mac_ctx = MAC_CONTEXT(mac_handle); struct mac_context *mac_ctx = MAC_CONTEXT(mac_handle);
struct wlan_mlme_scoring_cfg *mlme_scoring_cfg; struct wlan_mlme_nss_chains vdev_ini_cfg;
bool bval = false;
uint32_t channel_bonding_mode;
QDF_STATUS status;
struct psoc_phy_config config;
mlme_scoring_cfg = &mac_ctx->mlme_cfg->scoring; qdf_mem_zero(&vdev_ini_cfg, sizeof(struct wlan_mlme_nss_chains));
/* Populate the nss chain params from ini for this vdev type */
sme_populate_nss_chain_params(mac_handle, &vdev_ini_cfg,
QDF_STA_MODE, num_rf_chains);
score_config->weight_cfg.rssi_weightage = config.vdev_nss_24g = vdev_ini_cfg.rx_nss[NSS_CHAINS_BAND_2GHZ];
mlme_scoring_cfg->weight_cfg.rssi_weightage; config.vdev_nss_5g = vdev_ini_cfg.rx_nss[NSS_CHAINS_BAND_5GHZ];
score_config->weight_cfg.ht_caps_weightage =
mlme_scoring_cfg->weight_cfg.ht_caps_weightage;
score_config->weight_cfg.vht_caps_weightage =
mlme_scoring_cfg->weight_cfg.vht_caps_weightage;
score_config->weight_cfg.he_caps_weightage =
mlme_scoring_cfg->weight_cfg.he_caps_weightage;
score_config->weight_cfg.chan_width_weightage =
mlme_scoring_cfg->weight_cfg.chan_width_weightage;
score_config->weight_cfg.chan_band_weightage =
mlme_scoring_cfg->weight_cfg.chan_band_weightage;
score_config->weight_cfg.nss_weightage =
mlme_scoring_cfg->weight_cfg.nss_weightage;
score_config->weight_cfg.beamforming_cap_weightage =
mlme_scoring_cfg->weight_cfg.beamforming_cap_weightage;
score_config->weight_cfg.pcl_weightage =
mlme_scoring_cfg->weight_cfg.pcl_weightage;
score_config->weight_cfg.channel_congestion_weightage =
mlme_scoring_cfg->weight_cfg.channel_congestion_weightage;
score_config->weight_cfg.oce_wan_weightage =
mlme_scoring_cfg->weight_cfg.oce_wan_weightage;
score_config->weight_cfg.oce_ap_tx_pwr_weightage =
mlme_scoring_cfg->weight_cfg.oce_ap_tx_pwr_weightage;
score_config->weight_cfg.oce_subnet_id_weightage =
mlme_scoring_cfg->weight_cfg.oce_subnet_id_weightage;
score_config->bandwidth_weight_per_index = if (phy_mode == eCSR_DOT11_MODE_AUTO ||
mlme_scoring_cfg->bandwidth_weight_per_index; phy_mode == eCSR_DOT11_MODE_11ax ||
score_config->nss_weight_per_index = phy_mode == eCSR_DOT11_MODE_11ax_ONLY)
mlme_scoring_cfg->nss_weight_per_index; config.he_cap = 1;
score_config->band_weight_per_index =
mlme_scoring_cfg->band_weight_per_index;
score_config->rssi_score.best_rssi_threshold = if (config.he_cap ||
mlme_scoring_cfg->rssi_score.best_rssi_threshold; phy_mode == eCSR_DOT11_MODE_11ac ||
score_config->rssi_score.good_rssi_threshold = phy_mode == eCSR_DOT11_MODE_11ac_ONLY)
mlme_scoring_cfg->rssi_score.good_rssi_threshold; config.vht_cap = 1;
score_config->rssi_score.bad_rssi_threshold =
mlme_scoring_cfg->rssi_score.bad_rssi_threshold;
score_config->rssi_score.good_rssi_pcnt =
mlme_scoring_cfg->rssi_score.good_rssi_pcnt;
score_config->rssi_score.bad_rssi_pcnt =
mlme_scoring_cfg->rssi_score.bad_rssi_pcnt;
score_config->rssi_score.good_rssi_bucket_size =
mlme_scoring_cfg->rssi_score.good_rssi_bucket_size;
score_config->rssi_score.bad_rssi_bucket_size =
mlme_scoring_cfg->rssi_score.bad_rssi_bucket_size;
score_config->rssi_score.rssi_pref_5g_rssi_thresh =
mlme_scoring_cfg->rssi_score.rssi_pref_5g_rssi_thresh;
score_config->esp_qbss_scoring.num_slot = if (config.vht_cap || phy_mode == eCSR_DOT11_MODE_11n ||
mlme_scoring_cfg->esp_qbss_scoring.num_slot; phy_mode == eCSR_DOT11_MODE_11n_ONLY)
score_config->esp_qbss_scoring.score_pcnt3_to_0 = config.ht_cap = 1;
mlme_scoring_cfg->esp_qbss_scoring.score_pcnt3_to_0;
score_config->esp_qbss_scoring.score_pcnt7_to_4 =
mlme_scoring_cfg->esp_qbss_scoring.score_pcnt7_to_4;
score_config->esp_qbss_scoring.score_pcnt11_to_8 =
mlme_scoring_cfg->esp_qbss_scoring.score_pcnt11_to_8;
score_config->esp_qbss_scoring.score_pcnt15_to_12 =
mlme_scoring_cfg->esp_qbss_scoring.score_pcnt15_to_12;
score_config->oce_wan_scoring.num_slot = if (!IS_FEATURE_SUPPORTED_BY_FW(DOT11AX))
mlme_scoring_cfg->oce_wan_scoring.num_slot; config.he_cap = 0;
score_config->oce_wan_scoring.score_pcnt3_to_0 =
mlme_scoring_cfg->oce_wan_scoring.score_pcnt3_to_0; if (!IS_FEATURE_SUPPORTED_BY_FW(DOT11AC))
score_config->oce_wan_scoring.score_pcnt7_to_4 = config.vht_cap = 0;
mlme_scoring_cfg->oce_wan_scoring.score_pcnt7_to_4;
score_config->oce_wan_scoring.score_pcnt11_to_8 = status = wlan_mlme_get_vht_for_24ghz(mac_ctx->psoc, &bval);
mlme_scoring_cfg->oce_wan_scoring.score_pcnt11_to_8; if (!QDF_IS_STATUS_SUCCESS(status))
score_config->oce_wan_scoring.score_pcnt15_to_12 = sme_err("Failed to get vht_for_24ghz");
mlme_scoring_cfg->oce_wan_scoring.score_pcnt15_to_12; if (config.vht_cap && bval)
config.vht_24G_cap = 1;
status = wlan_mlme_get_vht_enable_tx_bf(mac_ctx->psoc,
&bval);
if (!QDF_IS_STATUS_SUCCESS(status))
sme_err("unable to get vht_enable_tx_bf");
if (bval)
config.beamformee_cap = 1;
ucfg_mlme_get_channel_bonding_24ghz(mac_ctx->psoc,
&channel_bonding_mode);
config.bw_above_20_24ghz = channel_bonding_mode;
ucfg_mlme_get_channel_bonding_5ghz(mac_ctx->psoc,
&channel_bonding_mode);
config.bw_above_20_5ghz = channel_bonding_mode;
wlan_psoc_set_phy_config(mac_ctx->psoc, &config);
} }
void sme_enable_fw_module_log_level(mac_handle_t mac_handle, int vdev_id) void sme_enable_fw_module_log_level(mac_handle_t mac_handle, int vdev_id)

View File

@@ -25,6 +25,7 @@
#include "wma_types.h" #include "wma_types.h"
#include "wma_if.h" /* for STA_INVALID_IDX. */ #include "wma_if.h" /* for STA_INVALID_IDX. */
#include "csr_inside_api.h" #include "csr_inside_api.h"
#include <include/wlan_psoc_mlme.h>
#include "sme_trace.h" #include "sme_trace.h"
#include "sme_qos_internal.h" #include "sme_qos_internal.h"
#include "sme_inside.h" #include "sme_inside.h"
@@ -70,6 +71,7 @@
#include <ol_defines.h> #include <ol_defines.h>
#include "wlan_pkt_capture_ucfg_api.h" #include "wlan_pkt_capture_ucfg_api.h"
#include "wlan_psoc_mlme_api.h"
#define RSN_AUTH_KEY_MGMT_SAE WLAN_RSN_SEL(WLAN_AKM_SAE) #define RSN_AUTH_KEY_MGMT_SAE WLAN_RSN_SEL(WLAN_AKM_SAE)
#define MAX_PWR_FCC_CHAN_12 8 #define MAX_PWR_FCC_CHAN_12 8
@@ -8346,7 +8348,8 @@ QDF_STATUS csr_roam_connect(struct mac_context *mac, uint32_t sessionId,
qdf_mem_free(filter); qdf_mem_free(filter);
goto error; goto error;
} }
status = csr_scan_get_result(mac, filter, &hBSSList); status = csr_scan_get_result(mac, filter, &hBSSList,
opmode == QDF_STA_MODE ? true : false);
qdf_mem_free(filter); qdf_mem_free(filter);
csr_roam_print_candidate_aps(hBSSList); csr_roam_print_candidate_aps(hBSSList);
if (QDF_IS_STATUS_SUCCESS(status)) { if (QDF_IS_STATUS_SUCCESS(status)) {
@@ -9766,7 +9769,7 @@ csr_check_profile_in_scan_cache(struct mac_context *mac_ctx,
qdf_mem_free(scan_filter); qdf_mem_free(scan_filter);
return false; return false;
} }
status = csr_scan_get_result(mac_ctx, scan_filter, hBSSList); status = csr_scan_get_result(mac_ctx, scan_filter, hBSSList, true);
qdf_mem_free(scan_filter); qdf_mem_free(scan_filter);
if (!QDF_IS_STATUS_SUCCESS(status)) { if (!QDF_IS_STATUS_SUCCESS(status)) {
sme_err( sme_err(
@@ -10653,53 +10656,6 @@ static void csr_copy_ssids_from_profile(tCsrSSIDs *ssid_list,
&ssid_list->SSIDList[i].SSID); &ssid_list->SSIDList[i].SSID);
} }
#ifdef WLAN_ADAPTIVE_11R
static void
csr_update_adaptive_11r_scan_filter(struct mac_context *mac_ctx,
struct scan_filter *filter)
{
filter->enable_adaptive_11r =
mac_ctx->mlme_cfg->lfr.enable_adaptive_11r;
}
#else
static inline void
csr_update_adaptive_11r_scan_filter(struct mac_context *mac_ctx,
struct scan_filter *filter)
{
filter->enable_adaptive_11r = false;
}
#endif
void csr_update_connect_n_roam_cmn_filter(struct mac_context *mac_ctx,
struct scan_filter *filter,
enum QDF_OPMODE opmode)
{
enum policy_mgr_con_mode pm_mode;
uint32_t num_entries = 0, pcl_freq_list[NUM_CHANNELS] = {0};
QDF_STATUS status;
/* enable bss scoring for only STA mode */
if (opmode == QDF_STA_MODE)
filter->bss_scoring_required = true;
csr_update_adaptive_11r_scan_filter(mac_ctx, filter);
if (filter->num_of_bssid)
return;
if (policy_mgr_map_concurrency_mode(&opmode, &pm_mode)) {
status = policy_mgr_get_pcl(mac_ctx->psoc, pm_mode,
pcl_freq_list, &num_entries,
filter->pcl_weight_list,
NUM_CHANNELS);
if (QDF_IS_STATUS_ERROR(status))
return;
qdf_mem_copy(filter->pcl_freq_list, pcl_freq_list,
num_entries * sizeof(pcl_freq_list[0]));
filter->num_of_pcl_channels = num_entries;
}
}
#ifdef FEATURE_WLAN_WAPI #ifdef FEATURE_WLAN_WAPI
/** /**
* csr_update_phy_mode: Updates phy mode for wapi * csr_update_phy_mode: Updates phy mode for wapi
@@ -10933,8 +10889,7 @@ csr_roam_get_scan_filter_from_profile(struct mac_context *mac_ctx,
csr_update_fils_scan_filter(filter, profile); csr_update_fils_scan_filter(filter, profile);
csr_update_connect_n_roam_cmn_filter(mac_ctx, filter, csr_update_adaptive_11r_scan_filter(mac_ctx, filter);
profile->csrPersona);
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
@@ -18307,17 +18262,27 @@ static void csr_update_score_params(struct mac_context *mac_ctx,
tpCsrNeighborRoamControlInfo roam_info) tpCsrNeighborRoamControlInfo roam_info)
{ {
struct scoring_param *req_score_params; struct scoring_param *req_score_params;
struct rssi_scoring *req_rssi_score; struct rssi_config_score *req_rssi_score;
struct wlan_mlme_scoring_cfg *bss_score_params; struct wlan_mlme_roam_scoring_cfg *roam_score_params;
struct wlan_mlme_weight_config *weight_config; struct weight_cfg *weight_config;
struct wlan_mlme_rssi_cfg_score *rssi_score; struct rssi_config_score *rssi_score;
struct psoc_mlme_obj *mlme_psoc_obj;
struct per_slot_score *esp_qbss_scoring;
struct per_slot_score *oce_wan_scoring;
mlme_psoc_obj = wlan_psoc_mlme_get_cmpt_obj(mac_ctx->psoc);
if (!mlme_psoc_obj)
return;
req_score_params = &req_buffer->score_params; req_score_params = &req_buffer->score_params;
req_rssi_score = &req_score_params->rssi_scoring; req_rssi_score = &req_score_params->rssi_scoring;
bss_score_params = &mac_ctx->mlme_cfg->scoring; roam_score_params = &mac_ctx->mlme_cfg->roam_scoring;
weight_config = &bss_score_params->weight_cfg; weight_config = &mlme_psoc_obj->score_config.weight_config;
rssi_score = &bss_score_params->rssi_score; rssi_score = &mlme_psoc_obj->score_config.rssi_score;
esp_qbss_scoring = &mlme_psoc_obj->score_config.esp_qbss_scoring;
oce_wan_scoring = &mlme_psoc_obj->score_config.oce_wan_scoring;
if (!roam_info->cfgParams.enable_scoring_for_roam) if (!roam_info->cfgParams.enable_scoring_for_roam)
req_score_params->disable_bitmap = req_score_params->disable_bitmap =
@@ -18343,52 +18308,54 @@ static void csr_update_score_params(struct mac_context *mac_ctx,
weight_config->oce_subnet_id_weightage; weight_config->oce_subnet_id_weightage;
req_score_params->bw_index_score = req_score_params->bw_index_score =
bss_score_params->bandwidth_weight_per_index; mlme_psoc_obj->score_config.bandwidth_weight_per_index;
req_score_params->band_index_score = req_score_params->band_index_score =
bss_score_params->band_weight_per_index; mlme_psoc_obj->score_config.band_weight_per_index;
req_score_params->nss_index_score = req_score_params->nss_index_score =
bss_score_params->nss_weight_per_index; mlme_psoc_obj->score_config.nss_weight_per_index;
req_score_params->vendor_roam_score_algorithm = req_score_params->vendor_roam_score_algorithm =
bss_score_params->vendor_roam_score_algorithm; roam_score_params->vendor_roam_score_algorithm;
req_score_params->roam_score_delta = bss_score_params->roam_score_delta; req_score_params->roam_score_delta =
roam_score_params->roam_score_delta;
req_score_params->roam_trigger_bitmap = req_score_params->roam_trigger_bitmap =
bss_score_params->roam_trigger_bitmap; roam_score_params->roam_trigger_bitmap;
req_rssi_score->best_rssi_threshold = rssi_score->best_rssi_threshold; req_rssi_score->best_rssi_threshold = rssi_score->best_rssi_threshold;
req_rssi_score->good_rssi_threshold = rssi_score->good_rssi_threshold; req_rssi_score->good_rssi_threshold = rssi_score->good_rssi_threshold;
req_rssi_score->bad_rssi_threshold = rssi_score->bad_rssi_threshold; req_rssi_score->bad_rssi_threshold = rssi_score->bad_rssi_threshold;
req_rssi_score->good_rssi_pcnt = rssi_score->good_rssi_pcnt; req_rssi_score->good_rssi_pcnt = rssi_score->good_rssi_pcnt;
req_rssi_score->bad_rssi_pcnt = rssi_score->bad_rssi_pcnt; req_rssi_score->bad_rssi_pcnt = rssi_score->bad_rssi_pcnt;
req_rssi_score->good_bucket_size = rssi_score->good_rssi_bucket_size; req_rssi_score->good_rssi_bucket_size =
req_rssi_score->bad_bucket_size = rssi_score->bad_rssi_bucket_size; rssi_score->good_rssi_bucket_size;
req_rssi_score->bad_rssi_bucket_size = rssi_score->bad_rssi_bucket_size;
req_rssi_score->rssi_pref_5g_rssi_thresh = req_rssi_score->rssi_pref_5g_rssi_thresh =
rssi_score->rssi_pref_5g_rssi_thresh; rssi_score->rssi_pref_5g_rssi_thresh;
req_score_params->esp_qbss_scoring.num_slot = req_score_params->esp_qbss_scoring.num_slot =
bss_score_params->esp_qbss_scoring.num_slot; esp_qbss_scoring->num_slot;
req_score_params->esp_qbss_scoring.score_pcnt3_to_0 = req_score_params->esp_qbss_scoring.score_pcnt3_to_0 =
bss_score_params->esp_qbss_scoring.score_pcnt3_to_0; esp_qbss_scoring->score_pcnt3_to_0;
req_score_params->esp_qbss_scoring.score_pcnt7_to_4 = req_score_params->esp_qbss_scoring.score_pcnt7_to_4 =
bss_score_params->esp_qbss_scoring.score_pcnt7_to_4; esp_qbss_scoring->score_pcnt7_to_4;
req_score_params->esp_qbss_scoring.score_pcnt11_to_8 = req_score_params->esp_qbss_scoring.score_pcnt11_to_8 =
bss_score_params->esp_qbss_scoring.score_pcnt11_to_8; esp_qbss_scoring->score_pcnt11_to_8;
req_score_params->esp_qbss_scoring.score_pcnt15_to_12 = req_score_params->esp_qbss_scoring.score_pcnt15_to_12 =
bss_score_params->esp_qbss_scoring.score_pcnt15_to_12; esp_qbss_scoring->score_pcnt15_to_12;
req_score_params->oce_wan_scoring.num_slot = req_score_params->oce_wan_scoring.num_slot =
bss_score_params->oce_wan_scoring.num_slot; oce_wan_scoring->num_slot;
req_score_params->oce_wan_scoring.score_pcnt3_to_0 = req_score_params->oce_wan_scoring.score_pcnt3_to_0 =
bss_score_params->oce_wan_scoring.score_pcnt3_to_0; oce_wan_scoring->score_pcnt3_to_0;
req_score_params->oce_wan_scoring.score_pcnt7_to_4 = req_score_params->oce_wan_scoring.score_pcnt7_to_4 =
bss_score_params->oce_wan_scoring.score_pcnt7_to_4; oce_wan_scoring->score_pcnt7_to_4;
req_score_params->oce_wan_scoring.score_pcnt11_to_8 = req_score_params->oce_wan_scoring.score_pcnt11_to_8 =
bss_score_params->oce_wan_scoring.score_pcnt11_to_8; oce_wan_scoring->score_pcnt11_to_8;
req_score_params->oce_wan_scoring.score_pcnt15_to_12 = req_score_params->oce_wan_scoring.score_pcnt15_to_12 =
bss_score_params->oce_wan_scoring.score_pcnt15_to_12; oce_wan_scoring->score_pcnt15_to_12;
req_score_params->cand_min_roam_score_delta = req_score_params->cand_min_roam_score_delta =
bss_score_params->min_roam_score_delta; roam_score_params->min_roam_score_delta;
} }
uint8_t csr_get_roam_enabled_sta_sessionid(struct mac_context *mac_ctx) uint8_t csr_get_roam_enabled_sta_sessionid(struct mac_context *mac_ctx)

View File

@@ -53,6 +53,7 @@
#include "qdf_crypto.h" #include "qdf_crypto.h"
#include <wlan_crypto_global_api.h> #include <wlan_crypto_global_api.h>
#include "wlan_reg_ucfg_api.h" #include "wlan_reg_ucfg_api.h"
#include "wlan_cm_bss_score_param.h"
static void csr_set_cfg_valid_channel_list(struct mac_context *mac, static void csr_set_cfg_valid_channel_list(struct mac_context *mac,
uint32_t *pchan_freq_list, uint32_t *pchan_freq_list,
@@ -163,7 +164,7 @@ QDF_STATUS csr_scan_handle_search_for_ssid(struct mac_context *mac_ctx,
qdf_mem_free(filter); qdf_mem_free(filter);
break; break;
} }
status = csr_scan_get_result(mac_ctx, filter, &hBSSList); status = csr_scan_get_result(mac_ctx, filter, &hBSSList, true);
qdf_mem_free(filter); qdf_mem_free(filter);
if (!QDF_IS_STATUS_SUCCESS(status)) if (!QDF_IS_STATUS_SUCCESS(status))
break; break;
@@ -2423,9 +2424,52 @@ static void csr_remove_ap_with_assoc_disallowed(struct mac_context *mac_ctx,
} }
} }
static void csr_get_pcl_chan_weigtage_for_sta(struct mac_context *mac_ctx,
struct pcl_freq_weight_list *pcl_lst)
{
enum QDF_OPMODE opmode = QDF_STA_MODE;
enum policy_mgr_con_mode pm_mode;
uint32_t num_entries = 0;
QDF_STATUS status;
if (!pcl_lst)
return;
if (policy_mgr_map_concurrency_mode(&opmode, &pm_mode)) {
status = policy_mgr_get_pcl(mac_ctx->psoc, pm_mode,
pcl_lst->pcl_freq_list,
&num_entries,
pcl_lst->pcl_weight_list,
NUM_CHANNELS);
if (QDF_IS_STATUS_ERROR(status))
return;
pcl_lst->num_of_pcl_channels = num_entries;
}
}
static void csr_calculate_scores(struct mac_context *mac_ctx,
struct scan_filter *filter, qdf_list_t *list)
{
struct pcl_freq_weight_list *pcl_lst = NULL;
if (!filter->num_of_bssid) {
pcl_lst = qdf_mem_malloc(sizeof(*pcl_lst));
csr_get_pcl_chan_weigtage_for_sta(mac_ctx, pcl_lst);
if (pcl_lst && !pcl_lst->num_of_pcl_channels) {
qdf_mem_free(pcl_lst);
pcl_lst = NULL;
}
}
wlan_cm_calculate_bss_score(mac_ctx->psoc, pcl_lst, list,
&filter->bssid_hint);
if (pcl_lst)
qdf_mem_free(pcl_lst);
}
QDF_STATUS csr_scan_get_result(struct mac_context *mac_ctx, QDF_STATUS csr_scan_get_result(struct mac_context *mac_ctx,
struct scan_filter *filter, struct scan_filter *filter,
tScanResultHandle *results) tScanResultHandle *results,
bool scoring_required)
{ {
QDF_STATUS status; QDF_STATUS status;
struct scan_result_list *ret_list = NULL; struct scan_result_list *ret_list = NULL;
@@ -2449,9 +2493,11 @@ QDF_STATUS csr_scan_get_result(struct mac_context *mac_ctx,
sme_debug("num_entries %d", num_bss); sme_debug("num_entries %d", num_bss);
} }
/* Filter the scan list with the blacklist, rssi reject, avoided APs */ if (num_bss && filter && scoring_required) {
if (filter && filter->bss_scoring_required) csr_calculate_scores(mac_ctx, filter, list);
/* Filter the blacklisted APs and avoided APs */
wlan_blm_filter_bssid(pdev, list); wlan_blm_filter_bssid(pdev, list);
}
if (!list || (list && !qdf_list_size(list))) { if (!list || (list && !qdf_list_size(list))) {
sme_debug("scan list empty"); sme_debug("scan list empty");
@@ -2475,7 +2521,7 @@ QDF_STATUS csr_scan_get_result(struct mac_context *mac_ctx,
/* Fail or No one wants the result. */ /* Fail or No one wants the result. */
csr_scan_result_purge(mac_ctx, (tScanResultHandle) ret_list); csr_scan_result_purge(mac_ctx, (tScanResultHandle) ret_list);
else { else {
if (filter && filter->bss_scoring_required) if (scoring_required)
csr_remove_ap_with_assoc_disallowed(mac_ctx, ret_list); csr_remove_ap_with_assoc_disallowed(mac_ctx, ret_list);
if (!csr_ll_count(&ret_list->List)) { if (!csr_ll_count(&ret_list->List)) {
@@ -2529,7 +2575,7 @@ QDF_STATUS csr_scan_get_result_for_bssid(struct mac_context *mac_ctx,
QDF_MAC_ADDR_SIZE); QDF_MAC_ADDR_SIZE);
status = csr_scan_get_result(mac_ctx, scan_filter, status = csr_scan_get_result(mac_ctx, scan_filter,
&filtered_scan_result); &filtered_scan_result, false);
if (!QDF_IS_STATUS_SUCCESS(status)) { if (!QDF_IS_STATUS_SUCCESS(status)) {
sme_err("Failed to get scan result"); sme_err("Failed to get scan result");

View File

@@ -377,7 +377,7 @@ QDF_STATUS csr_neighbor_roam_process_scan_complete(struct mac_context *mac,
qdf_mem_free(filter); qdf_mem_free(filter);
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
} }
hstatus = csr_scan_get_result(mac, filter, &scanResult); hstatus = csr_scan_get_result(mac, filter, &scanResult, true);
qdf_mem_free(filter); qdf_mem_free(filter);
if (hstatus != QDF_STATUS_SUCCESS) if (hstatus != QDF_STATUS_SUCCESS)
sme_err("Get Scan Result status code %d", hstatus); sme_err("Get Scan Result status code %d", hstatus);

View File

@@ -394,17 +394,29 @@ enum csr_cfgdot11mode csr_find_best_phy_mode(struct mac_context *mac,
void csr_copy_ssids_from_roam_params(struct roam_ext_params *roam_params, void csr_copy_ssids_from_roam_params(struct roam_ext_params *roam_params,
struct scan_filter *filter); struct scan_filter *filter);
#ifdef WLAN_ADAPTIVE_11R
/* /*
* csr_update_connect_n_roam_cmn_filter() - update common scan filter * csr_update_adaptive_11r_scan_filter() - fill adaptive 11r support in filter
* @mac_ctx: pointer to mac context * @mac_ctx: mac ctx
* @filter: scan filter * @filter: scan filter
* @opmode: opmode
* *
* Return void * Return void
*/ */
void csr_update_connect_n_roam_cmn_filter(struct mac_context *mac_ctx, static inline void
struct scan_filter *filter, csr_update_adaptive_11r_scan_filter(struct mac_context *mac_ctx,
enum QDF_OPMODE opmode); struct scan_filter *filter)
{
filter->enable_adaptive_11r =
mac_ctx->mlme_cfg->lfr.enable_adaptive_11r;
}
#else
static inline void
csr_update_adaptive_11r_scan_filter(struct mac_context *mac_ctx,
struct scan_filter *filter)
{
filter->enable_adaptive_11r = false;
}
#endif
/* /*
* csr_covert_enc_type_new() - convert csr enc type to wlan enc type * csr_covert_enc_type_new() - convert csr enc type to wlan enc type
@@ -462,12 +474,14 @@ csr_neighbor_roam_get_scan_filter_from_profile(struct mac_context *mac,
* @mac: Pointer to Global MAC structure * @mac: Pointer to Global MAC structure
* @filter: If pFilter is NULL, all cached results are returned * @filter: If pFilter is NULL, all cached results are returned
* @phResult: an object for the result. * @phResult: an object for the result.
* @scoring_required: if scoding is required for AP
* *
* Return QDF_STATUS * Return QDF_STATUS
*/ */
QDF_STATUS csr_scan_get_result(struct mac_context *mac, QDF_STATUS csr_scan_get_result(struct mac_context *mac,
struct scan_filter *filter, struct scan_filter *filter,
tScanResultHandle *phResult); tScanResultHandle *phResult,
bool scoring_required);
/** /**
* csr_scan_get_result_for_bssid - gets the scan result from scan cache for the * csr_scan_get_result_for_bssid - gets the scan result from scan cache for the

View File

@@ -350,7 +350,6 @@ csr_neighbor_roam_get_scan_filter_from_profile(struct mac_context *mac,
struct roam_ext_params *roam_params; struct roam_ext_params *roam_params;
tCsrChannelInfo *chan_info; tCsrChannelInfo *chan_info;
uint8_t num_ch = 0; uint8_t num_ch = 0;
enum QDF_OPMODE opmode = QDF_STA_MODE;
if (!filter) if (!filter)
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
@@ -425,7 +424,7 @@ csr_neighbor_roam_get_scan_filter_from_profile(struct mac_context *mac,
csr_update_pmf_cap_from_connected_profile(profile, filter); csr_update_pmf_cap_from_connected_profile(profile, filter);
csr_update_connect_n_roam_cmn_filter(mac, filter, opmode); csr_update_adaptive_11r_scan_filter(mac, filter);
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
@@ -1080,7 +1079,7 @@ QDF_STATUS csr_neighbor_roam_init(struct mac_context *mac, uint8_t sessionId)
pNeighborRoamInfo->cfgParams.full_roam_scan_period = pNeighborRoamInfo->cfgParams.full_roam_scan_period =
mac->mlme_cfg->lfr.roam_full_scan_period; mac->mlme_cfg->lfr.roam_full_scan_period;
pNeighborRoamInfo->cfgParams.enable_scoring_for_roam = pNeighborRoamInfo->cfgParams.enable_scoring_for_roam =
mac->mlme_cfg->scoring.enable_scoring_for_roam; mac->mlme_cfg->roam_scoring.enable_scoring_for_roam;
pNeighborRoamInfo->cfgParams.roam_scan_n_probes = pNeighborRoamInfo->cfgParams.roam_scan_n_probes =
mac->mlme_cfg->lfr.roam_scan_n_probes; mac->mlme_cfg->lfr.roam_scan_n_probes;
pNeighborRoamInfo->cfgParams.roam_scan_home_away_time = pNeighborRoamInfo->cfgParams.roam_scan_home_away_time =
@@ -1365,7 +1364,7 @@ static QDF_STATUS csr_neighbor_roam_process_handoff_req(
session_id); session_id);
sme_debug("Filter creation status: %d", status); sme_debug("Filter creation status: %d", status);
status = csr_scan_get_result(mac_ctx, scan_filter, status = csr_scan_get_result(mac_ctx, scan_filter,
&scan_result); &scan_result, true);
qdf_mem_free(scan_filter); qdf_mem_free(scan_filter);
csr_neighbor_roam_process_scan_results(mac_ctx, session_id, csr_neighbor_roam_process_scan_results(mac_ctx, session_id,
&scan_result); &scan_result);

View File

@@ -3953,7 +3953,7 @@ QDF_STATUS wma_roam_scan_fill_self_caps(tp_wma_handle wma_handle,
if (mac->mlme_cfg->wmm_params.qos_enabled) if (mac->mlme_cfg->wmm_params.qos_enabled)
selfCaps.qos = 1; selfCaps.qos = 1;
if (mac->mlme_cfg->scoring.apsd_enabled) if (mac->mlme_cfg->roam_scoring.apsd_enabled)
selfCaps.apsd = 1; selfCaps.apsd = 1;
selfCaps.rrm = mac->rrm.rrmConfig.rrm_enabled; selfCaps.rrm = mac->rrm.rrmConfig.rrm_enabled;