Browse Source

qcacld-3.0: Disconnect after LFR3 roaming to different channel

vdev mlme chan info isn't updated after LFR3 roaming, so
wlan_hdd_cfg80211_get_channel get old center_freq1 from vdev mlme,
center_freq1 isn't same as center_freq for 20M channel,
cfg80211_chandef_valid return false.

Change-Id: I4037f80627d207bdf9ba60cd9c3b7be82bad81e8
CRs-Fixed: 2746246
jianmin 4 years ago
parent
commit
1ec4f1c8f9
1 changed files with 9 additions and 1 deletions
  1. 9 1
      core/wma/src/wma_scan_roam.c

+ 9 - 1
core/wma/src/wma_scan_roam.c

@@ -2855,6 +2855,7 @@ static void wma_update_phymode_on_roam(tp_wma_handle wma, uint8_t *bssid,
 {
 	enum wlan_phymode bss_phymode;
 	struct wlan_channel *des_chan;
+	struct wlan_channel *bss_chan;
 	struct vdev_mlme_obj *vdev_mlme;
 	uint8_t channel;
 
@@ -2866,9 +2867,16 @@ static void wma_update_phymode_on_roam(tp_wma_handle wma, uint8_t *bssid,
 		wma_get_phy_mode_cb(channel, iface->chan_width, &bss_phymode);
 
 	vdev_mlme = wlan_vdev_mlme_get_cmpt_obj(iface->vdev);
+	/* Update vdev mlme channel info after roaming */
 	des_chan = wlan_vdev_mlme_get_des_chan(iface->vdev);
-
+	bss_chan = wlan_vdev_mlme_get_bss_chan(iface->vdev);
 	des_chan->ch_phymode = bss_phymode;
+	des_chan->ch_freq = chan->mhz;
+	des_chan->ch_cfreq1 = chan->band_center_freq1;
+	des_chan->ch_cfreq2 = chan->band_center_freq2;
+	des_chan->ch_width = iface->chan_width;
+	qdf_mem_copy(bss_chan, des_chan, sizeof(struct wlan_channel));
+
 	if (!vdev_mlme)
 		return;
 	/* Till conversion is not done in WMI we need to fill fw phy mode */