Răsfoiți Sursa

qcacmn: Generate all possible unique candidates for MLO AP

For mlo candidate, need generate all possible unique candidates, and try
to connect one by one by sort of score.

For single MLO AP 5 GHz + 6 GHz + 2 GHz
 generates all possible unique candidates as following:
 1. 6 GHz + 2 GHz + 5 GHz
 2. 6 GHz + 2 GHz
 3. 6 GHz + 5 GHz
 4. 6 GHz
 5. 5 GHz + 2 GHz
 6. 5 GHz
 7. 2 GHz

Since standby link doesn't contribute to MLO candidate score,
to assure 3 links candidate is tried before 2 links generated,
insert generated candidate after original candidate.

Change-Id: I6c92b02e47563fc9b15e37fcec2ab7025a6554a3
CRs-Fixed: 3750735
Jianmin Zhu 1 an în urmă
părinte
comite
54e0332947
1 a modificat fișierele cu 14 adăugiri și 17 ștergeri
  1. 14 17
      umac/mlme/connection_mgr/core/src/wlan_cm_bss_scoring.c

+ 14 - 17
umac/mlme/connection_mgr/core/src/wlan_cm_bss_scoring.c

@@ -2963,11 +2963,11 @@ next:
 }
 
 /**
- * cm_update_candidate_list_for_vendor() - update candidate list
+ * cm_mlo_generate_candidate_list() - generate candidate list
  * @candidate_list: candidate list
  *
  * For any candidate list this api generates all possible unique
- * candidates
+ * candidates from mlo candidates
  * Input candidate list
  * c1 6 GHz + 2 GHz + 5 GHz
  * c2 2 GHz + 5 GHz + 6 GHz
@@ -2989,7 +2989,7 @@ next:
  *
  * Return none
  */
-static void cm_update_candidate_list_for_vendor(qdf_list_t *candidate_list)
+static void cm_mlo_generate_candidate_list(qdf_list_t *candidate_list)
 {
 	struct scan_cache_entry *tmp_scan_entry = NULL;
 	struct scan_cache_node *scan_entry = NULL, *scan_node = NULL;
@@ -3026,9 +3026,9 @@ static void cm_update_candidate_list_for_vendor(qdf_list_t *candidate_list)
 			link = scan_node->entry->ml_info.link_info;
 			for (j = i; j < num_link; j++)
 				link[j].is_valid_link = false;
-			qdf_list_insert_before(candidate_list,
-					       &scan_node->node,
-					       &scan_entry->node);
+			qdf_list_insert_after(candidate_list,
+					      &scan_node->node,
+					      &scan_entry->node);
 
 			if (i == 1) {
 				tmp_scan_entry = util_scan_copy_cache_entry(
@@ -3049,9 +3049,9 @@ static void cm_update_candidate_list_for_vendor(qdf_list_t *candidate_list)
 				link[0] = tmp;
 				for (j = i; j < num_link; j++)
 					link[j].is_valid_link = false;
-				qdf_list_insert_before(candidate_list,
-						       &scan_node->node,
-						       &scan_entry->node);
+				qdf_list_insert_after(candidate_list,
+						      &scan_node->node,
+						      &scan_entry->node);
 			}
 		}
 next:
@@ -3146,7 +3146,7 @@ static void cm_validate_partner_links(struct wlan_objmgr_psoc *psoc,
 }
 #else
 
-static void cm_update_candidate_list_for_vendor(qdf_list_t *candidate_list)
+static void cm_mlo_generate_candidate_list(qdf_list_t *candidate_list)
 {
 }
 
@@ -3206,8 +3206,7 @@ void wlan_cm_calculate_bss_score(struct wlan_objmgr_pdev *pdev,
 			config->bw_above_20_5ghz, config->vdev_nss_24g,
 			config->vdev_nss_5g);
 
-	if (score_config->vendor_roam_score_algorithm)
-		cm_update_candidate_list_for_vendor(scan_list);
+	cm_mlo_generate_candidate_list(scan_list);
 
 	/* calculate score for each AP */
 	if (qdf_list_peek_front(scan_list, &cur_node) != QDF_STATUS_SUCCESS) {
@@ -3349,11 +3348,9 @@ void wlan_cm_calculate_bss_score(struct wlan_objmgr_pdev *pdev,
 		qdf_mem_free(force_connect_candidate);
 	}
 
-	if (score_config->vendor_roam_score_algorithm) {
-		cm_eliminate_common_candidate(scan_list);
-		/* print all vendor candidates*/
-		cm_print_candidate_list(scan_list);
-	}
+	cm_eliminate_common_candidate(scan_list);
+	/* print all vendor candidates*/
+	cm_print_candidate_list(scan_list);
 }
 
 #ifdef CONFIG_BAND_6GHZ