Jelajahi Sumber

qcacld-3.0: Set ML adapter only if target supports 11be

The adapter create flag for is_ml_adapter is set to true
by default for mission mode on primary interface and in
hdd_open_adapter() the flag is set but MLD is set only
after checking if target supports 11be. This leads to
adapter being set as ML type but MLD is null.

Check the target 11be capability as before making
adapter ML type and in open adapter for mission mode
bring the is_ml_adapter under if conditional check.

Change-Id: Ic0325ea6fde364e5180e9d164095b79bdabfee41
CRs-Fixed: 3352138
Vinod Kumar Pirla 2 tahun lalu
induk
melakukan
041956887a
2 mengubah file dengan 10 tambahan dan 13 penghapusan
  1. 1 1
      core/hdd/src/wlan_hdd_cfg80211.c
  2. 9 12
      core/hdd/src/wlan_hdd_main.c

+ 1 - 1
core/hdd/src/wlan_hdd_cfg80211.c

@@ -19924,7 +19924,7 @@ hdd_adapter_update_mac_on_mode_change(struct hdd_adapter *adapter,
 		return;
 
 	assoc_adapter = hdd_get_assoc_link_adapter(adapter);
-	if (!assoc_adapter)
+	if (!assoc_adapter || qdf_is_macaddr_zero(&assoc_adapter->mld_addr))
 		return;
 
 	is_mac_equal = qdf_is_macaddr_equal(&assoc_adapter->mac_addr,

+ 9 - 12
core/hdd/src/wlan_hdd_main.c

@@ -7531,7 +7531,7 @@ struct hdd_adapter *hdd_open_adapter(struct hdd_context *hdd_ctx,
 	struct hdd_adapter *adapter = NULL, *sta_adapter = NULL;
 	QDF_STATUS status = QDF_STATUS_E_FAILURE;
 	uint32_t i;
-	bool eht_capab;
+	bool eht_capab = 0;
 
 	status = wlan_hdd_validate_mac_address((struct qdf_mac_addr *)mac_addr);
 	if (QDF_IS_STATUS_ERROR(status)) {
@@ -7727,16 +7727,12 @@ struct hdd_adapter *hdd_open_adapter(struct hdd_context *hdd_ctx,
 		return NULL;
 	}
 
-	if (params->is_ml_adapter) {
+	ucfg_psoc_mlme_get_11be_capab(hdd_ctx->psoc, &eht_capab);
+	if (params->is_ml_adapter && eht_capab) {
 		hdd_adapter_set_ml_adapter(adapter);
-		ucfg_psoc_mlme_get_11be_capab(hdd_ctx->psoc, &eht_capab);
-		if (eht_capab) {
-			qdf_mem_copy(adapter->mld_addr.bytes,
-				     adapter->mac_addr.bytes,
-				     QDF_MAC_ADDR_SIZE);
-			if (params->is_single_link)
-				hdd_adapter_set_sl_ml_adapter(adapter);
-		}
+		qdf_copy_macaddr(&adapter->mld_addr, &adapter->mac_addr);
+		if (params->is_single_link)
+			hdd_adapter_set_sl_ml_adapter(adapter);
 	}
 
 	status = hdd_adapter_feature_update_work_init(adapter);
@@ -15346,7 +15342,7 @@ hdd_open_adapters_for_mission_mode(struct hdd_context *hdd_ctx)
 	QDF_STATUS status;
 	uint8_t *mac_addr;
 	struct hdd_adapter_create_param params = {0};
-	bool eht_capab;
+	bool eht_capab = 0;
 
 	ucfg_mlme_get_dot11p_mode(hdd_ctx->psoc, &dot11p_mode);
 	ucfg_psoc_mlme_get_11be_capab(hdd_ctx->psoc, &eht_capab);
@@ -15359,7 +15355,8 @@ hdd_open_adapters_for_mission_mode(struct hdd_context *hdd_ctx)
 	if (!mac_addr)
 		return QDF_STATUS_E_INVAL;
 
-	params.is_ml_adapter = true;
+	if (eht_capab)
+		params.is_ml_adapter = true;
 	status = hdd_open_adapter_no_trans(hdd_ctx, QDF_STA_MODE,
 					   "wlan%d", mac_addr,
 					   &params);