Browse Source

qcacld-3.0: Add new "roam_score_delta" and "roam_score_delta_bitmap" ini

Add two new WCNSS_qcom.ini values:
"roam_score_delta" - Factor by which the new roaming candidate
ap score should be greater than the score of the current
connected AP.
"roam_score_deltabitmap" - Roam triggers for which
roam_score_delta needs to be applied on the roam score of the
candidate AP.

Populate these two values to wlan_mlme_scoring_cfg from cfg
component in mlme_init_scoring_cfg. The values are sent to
firmware over the WMI TLV WMI_ROAM_AP_PROFILE in the below code
flow:
csr_update_score_params()->__lim_process_roam_scan_offload_req()
->wma_process_roaming_config()->wma_roam_scan_offload_ap_profile

Change-Id: I64f2a2328e485418547dae937c657f85225f1457
CRs-Fixed: 2367910
Pragaspathi Thilagaraj 6 years ago
parent
commit
df0f544dab

+ 4 - 0
components/mlme/core/src/wlan_mlme_main.c

@@ -1642,6 +1642,10 @@ static void mlme_init_scoring_cfg(struct wlan_objmgr_psoc *psoc,
 	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 =
+				cfg_get(psoc, CFG_ROAM_TRIGGER_BITMAP);
+	scoring_cfg->roam_score_delta = cfg_get(psoc, CFG_ROAM_SCORE_DELTA);
 }
 
 static void mlme_init_oce_cfg(struct wlan_objmgr_psoc *psoc,

+ 74 - 0
components/mlme/dispatcher/inc/cfg_mlme_scoring.h

@@ -961,6 +961,78 @@
 	CFG_VALUE_OR_DEFAULT, \
 	"OCE WAN Score Index 15 to 12")
 
+/*
+ * <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
+ *
+ * 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_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>
  * enable_scoring_for_roam - enable/disable scoring logic in FW for candidate
@@ -1018,6 +1090,8 @@
 	CFG(CFG_SCORING_OCE_WAN_SCORE_IDX_7_TO_4) \
 	CFG(CFG_SCORING_OCE_WAN_SCORE_IDX_11_TO_8) \
 	CFG(CFG_SCORING_OCE_WAN_SCORE_IDX_15_TO_12) \
+	CFG(CFG_ROAM_TRIGGER_BITMAP) \
+	CFG(CFG_ROAM_SCORE_DELTA) \
 	CFG(CFG_ENABLE_SCORING_FOR_ROAM)
 
 #endif /* __CFG_MLME_SCORING_H */

+ 4 - 0
components/mlme/dispatcher/inc/wlan_mlme_public_struct.h

@@ -1576,6 +1576,8 @@ struct wlan_mlme_per_slot_scoring {
  * @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_score_delta: percentage delta in roam score
  */
 struct wlan_mlme_scoring_cfg {
 	bool enable_scoring_for_roam;
@@ -1586,6 +1588,8 @@ struct wlan_mlme_scoring_cfg {
 	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_score_delta;
 };
 
 /* struct wlan_mlme_threshold - Threshold related config items

+ 4 - 0
core/sme/src/csr/csr_api_roam.c

@@ -18602,6 +18602,10 @@ static void csr_update_score_params(struct mac_context *mac_ctx,
 	req_score_params->nss_index_score =
 		bss_score_params->nss_weight_per_index;
 
+	req_score_params->roam_score_delta = bss_score_params->roam_score_delta;
+	req_score_params->roam_trigger_bitmap =
+				bss_score_params->roam_trigger_bitmap;
+
 	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->bad_rssi_threshold = rssi_score->bad_rssi_threshold;