From 1ec4f1c8f93ac4246f3bcd364235b310c60f7f5d Mon Sep 17 00:00:00 2001 From: jianmin Date: Wed, 5 Aug 2020 00:56:28 +0800 Subject: [PATCH] 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 --- core/wma/src/wma_scan_roam.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c index 5470d65449ea..f63130dfd7fe 100644 --- a/core/wma/src/wma_scan_roam.c +++ b/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 */