ソースを参照

qcacmn: Use cfg to force band of assoc link

For WFA test, use cfg to force band of assoc link

Change-Id: I503bd87aca7341af4b7805c37e3667eb405d3cd8
CRs-Fixed: 3248005
Jianmin Zhu 2 年 前
コミット
855490e8eb

+ 11 - 2
umac/mlme/connection_mgr/core/src/wlan_cm_connect.c

@@ -1196,19 +1196,28 @@ static QDF_STATUS cm_is_scan_support(struct cm_connect_req *cm_req)
 #endif
 
 #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_FEATURE_11BE_MLO_ADV_FEATURE)
+#define CFG_MLO_ASSOC_LINK_BAND_MAX 0x70
+
 static QDF_STATUS cm_update_mlo_filter(struct wlan_objmgr_pdev *pdev,
+				       struct cm_connect_req *cm_req,
 				       struct scan_filter *filter)
 {
 	struct wlan_objmgr_psoc *psoc;
 
 	psoc = wlan_pdev_get_psoc(pdev);
 	filter->band_bitmap = wlan_mlme_get_sta_mlo_conn_band_bmp(psoc);
-	mlme_debug("band bitmap: %d", filter->band_bitmap);
+	/* Apply assoc band filter only for assoc link */
+	if (cm_req->req.is_non_assoc_link) {
+		filter->band_bitmap =  filter->band_bitmap |
+				       CFG_MLO_ASSOC_LINK_BAND_MAX;
+	}
+	mlme_debug("band bitmap: 0x%x", filter->band_bitmap);
 
 	return QDF_STATUS_SUCCESS;
 }
 #else
 static QDF_STATUS cm_update_mlo_filter(struct wlan_objmgr_pdev *pdev,
+				       struct cm_connect_req *cm_req,
 				       struct scan_filter *filter)
 {
 	return QDF_STATUS_SUCCESS;
@@ -1255,7 +1264,7 @@ static QDF_STATUS cm_connect_get_candidates(struct wlan_objmgr_pdev *pdev,
 	cm_connect_prepare_scan_filter(pdev, cm_ctx, cm_req, filter,
 				       security_valid_for_6ghz);
 
-	cm_update_mlo_filter(pdev, filter);
+	cm_update_mlo_filter(pdev, cm_req, filter);
 
 	candidate_list = wlan_scan_get_result(pdev, filter);
 	if (candidate_list) {

+ 9 - 6
umac/scan/core/src/wlan_scan_filter.c

@@ -693,19 +693,22 @@ static bool scm_check_dot11mode(struct scan_cache_entry *db_entry,
 static bool util_mlo_filter_match(struct scan_filter *filter,
 				  struct scan_cache_entry *db_entry)
 {
-	uint8_t i;
+	uint8_t i, band_bitmap, assoc_band_bitmap;
 	enum reg_wifi_band band;
 	struct partner_link_info *partner_link;
 
 	if (!db_entry->ie_list.multi_link)
 		return true;
-
 	if (!filter->band_bitmap)
 		return true;
 
+	/* Apply assoc band filter only for assoc link */
+	band_bitmap = filter->band_bitmap & 0xf;
+	assoc_band_bitmap = (filter->band_bitmap & 0xf0) >> 4;
 	band = wlan_reg_freq_to_band(db_entry->channel.chan_freq);
-	if (!(filter->band_bitmap & BIT(band))) {
-		scm_debug("bss freq %d not match band bitmap: %d",
+	if ((assoc_band_bitmap && !(band_bitmap & BIT(band) & assoc_band_bitmap)) ||
+	    (!assoc_band_bitmap && !(band_bitmap & BIT(band)))) {
+		scm_debug("bss freq %d not match band bitmap: 0x%x",
 			  db_entry->channel.chan_freq,
 			  filter->band_bitmap);
 		return false;
@@ -713,8 +716,8 @@ static bool util_mlo_filter_match(struct scan_filter *filter,
 	for (i = 0; i < db_entry->ml_info.num_links; i++) {
 		partner_link = &db_entry->ml_info.link_info[i];
 		band = wlan_reg_freq_to_band(partner_link->freq);
-		if (filter->band_bitmap & BIT(band)) {
-			scm_debug("partner freq %d  match band bitmap: %d",
+		if (band_bitmap & BIT(band)) {
+			scm_debug("partner freq %d  match band bitmap: 0x%x",
 				  partner_link->freq,
 				  filter->band_bitmap);
 			partner_link->is_valid_link = true;