Răsfoiți Sursa

qcacld-3.0: Fix hw mode change issue in case of DBS

The driver stops the oppurtunitistic timer for DBS, when
the start AP requests come, which results in HW mode stuck
in DBS if the next vdev start request comes on the same MAC
This further results in NSS = 1 for the MAC, hence throughput
decreases.

Fix is to set hw mode to single MAC in case the STA/SAP comes up
in the band/channel

Change-Id: I85664bb5d64f5ce6506f47da4b62328631f01616
CRs-Fixed: 2267106
gaurank kathpalia 6 ani în urmă
părinte
comite
6e40bbc830
1 a modificat fișierele cu 13 adăugiri și 5 ștergeri
  1. 13 5
      core/hdd/src/wlan_hdd_hostapd.c

+ 13 - 5
core/hdd/src/wlan_hdd_hostapd.c

@@ -5466,12 +5466,20 @@ static int __wlan_hdd_cfg80211_start_ap(struct wiphy *wiphy,
 		hdd_err("ERR: clear event failed");
 
 	/*
-	 * Stop opportunistic timer here if running as we are already doing
-	 * hw mode change before vdev start based on the new concurrency
-	 * situation. If timer is not stopped and if it gets triggered before
-	 * VDEV_UP, it will reset the hw mode to some wrong value.
+	 * For Start Ap, the driver checks whether the SAP comes up in a
+	 * different or same band( whether we require DBS or Not).
+	 * If we dont require DBS, then the driver does nothing assuming
+	 * the state would be already in non DBS mode, and just continues
+	 * with vdev up on same MAC, by stoping the opportunistic timer,
+	 * which results in a connection of 1x1 if already the state was in
+	 * DBS. So first stop timer, and check the current hw mode.
+	 * If the SAP comes up in band different from STA, DBS mode is already
+	 * set. IF not, then well check for upgrade, and shift the connection
+	 * back to single MAC 2x2 (if initial was 2x2).
 	 */
-	status = policy_mgr_stop_opportunistic_timer(hdd_ctx->hdd_psoc);
+
+	policy_mgr_checkn_update_hw_mode_single_mac_mode(hdd_ctx->hdd_psoc,
+							 channel);
 	if (status != QDF_STATUS_SUCCESS) {
 		hdd_err("Failed to stop DBS opportunistic timer");
 		return -EINVAL;