Browse Source

qcacld-3.0: Make User CSA request as sync call

GO on 5 GHz channel 48, MLO STA 5 GHz (48) + 6 GHz (1) is UP.
SAP starts ACS, and before ACS complete, supplicant moves GO
to 5 GHz channel 149. Before GO CSA is completed, SAP ACS
is completed and start AP on 5 GHz channel 157. Then 3 home channels
are on same 5 GHz high band.
Fix by make User CSA as sync call and after GO CSA is completed
SAP should force SCC to low band during SAP starting, then avoid
3 home channels on high band.

Change-Id: I55ee559b47f270322ac3d2da7304dc5e8e104cf1
CRs-Fixed: 3352096
Liangwei Dong 2 years ago
parent
commit
ead07b04fe
1 changed files with 16 additions and 0 deletions
  1. 16 0
      core/hdd/src/wlan_hdd_cfg80211.c

+ 16 - 0
core/hdd/src/wlan_hdd_cfg80211.c

@@ -23995,6 +23995,7 @@ static int __wlan_hdd_cfg80211_channel_switch(struct wiphy *wiphy,
 	int ret;
 	enum phy_ch_width ch_width;
 	bool status;
+	struct hdd_hostapd_state *hostapd_state;
 
 	if (wlan_hdd_validate_vdev_id(adapter->vdev_id))
 		return -EINVAL;
@@ -24023,11 +24024,26 @@ static int __wlan_hdd_cfg80211_channel_switch(struct wiphy *wiphy,
 	hdd_debug("Freq %d width %d ch_width %d",
 		  csa_params->chandef.chan->center_freq,
 		  csa_params->chandef.width, ch_width);
+	hostapd_state = WLAN_HDD_GET_HOSTAP_STATE_PTR(adapter);
+	qdf_event_reset(&hostapd_state->qdf_event);
 
 	ret =
 	    hdd_softap_set_channel_change(dev,
 					  csa_params->chandef.chan->center_freq,
 					  ch_width, false);
+	if (ret) {
+		hdd_err("CSA failed to %d, ret %d",
+			csa_params->chandef.chan->center_freq, ret);
+		return ret;
+	}
+
+	status = qdf_wait_for_event_completion(&hostapd_state->qdf_event,
+					       SME_CMD_START_BSS_TIMEOUT);
+	if (QDF_IS_STATUS_ERROR(status))
+		hdd_err("wait for qdf_event failed!!");
+	else
+		hdd_debug("csa done");
+
 	return ret;
 }