qcacld-3.0: Update primary frequency from object manager
Currently, primary frequency is getting updated from STA context during get_channel callback. This is causing STA disconnect issue after channel switch. This is because sta_context won't contain updated channel information after channel switch. Update primary frequency from object manger. Object manager will contain updated channel information after channel switch. Also update the primary frequency in STA context after channel switch. Change-Id: I059c3627fbd2c254adeb4c7e4407b1518aa0f771 CRs-Fixed: 2758925
Этот коммит содержится в:

коммит произвёл
snandini

родитель
81c343df68
Коммит
8186760f9a
@@ -4194,6 +4194,7 @@ static void hdd_roam_channel_switch_handler(struct hdd_adapter *adapter,
|
||||
QDF_STATUS status;
|
||||
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
||||
mac_handle_t mac_handle = hdd_adapter_get_mac_handle(adapter);
|
||||
struct hdd_station_ctx *sta_ctx;
|
||||
|
||||
/* Enable Roaming on STA interface which was disabled before CSA */
|
||||
if (adapter->device_mode == QDF_STA_MODE)
|
||||
@@ -4201,6 +4202,12 @@ static void hdd_roam_channel_switch_handler(struct hdd_adapter *adapter,
|
||||
REASON_DRIVER_ENABLED,
|
||||
RSO_CHANNEL_SWITCH);
|
||||
|
||||
sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter);
|
||||
if (sta_ctx) {
|
||||
sta_ctx->conn_info.chan_freq = roam_info->chan_info.mhz;
|
||||
sta_ctx->conn_info.ch_width = roam_info->chan_info.ch_width;
|
||||
}
|
||||
|
||||
chan_change.chan_freq = roam_info->chan_info.mhz;
|
||||
chan_change.chan_params.ch_width =
|
||||
roam_info->chan_info.ch_width;
|
||||
|
@@ -24004,8 +24004,6 @@ static int __wlan_hdd_cfg80211_get_channel(struct wiphy *wiphy,
|
||||
if (sta_ctx->conn_info.dot11mode < eCSR_CFG_DOT11_MODE_11N)
|
||||
is_legacy_phymode = true;
|
||||
|
||||
chan_freq = sta_ctx->conn_info.chan_freq;
|
||||
|
||||
} else if ((adapter->device_mode == QDF_SAP_MODE) ||
|
||||
(adapter->device_mode == QDF_P2P_GO_MODE)) {
|
||||
struct hdd_ap_ctx *ap_ctx;
|
||||
@@ -24017,8 +24015,6 @@ static int __wlan_hdd_cfg80211_get_channel(struct wiphy *wiphy,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
chan_freq = ap_ctx->operating_chan_freq;
|
||||
|
||||
switch (ap_ctx->sap_config.SapHw_mode) {
|
||||
case eCSR_DOT11_MODE_11n:
|
||||
case eCSR_DOT11_MODE_11n_ONLY:
|
||||
@@ -24041,6 +24037,7 @@ static int __wlan_hdd_cfg80211_get_channel(struct wiphy *wiphy,
|
||||
if (!vdev)
|
||||
return -EINVAL;
|
||||
|
||||
chan_freq = vdev->vdev_mlme.des_chan->ch_freq;
|
||||
chandef->center_freq1 = vdev->vdev_mlme.des_chan->ch_cfreq1;
|
||||
chandef->center_freq2 = 0;
|
||||
chandef->chan = ieee80211_get_channel(wiphy, chan_freq);
|
||||
@@ -24079,8 +24076,9 @@ static int __wlan_hdd_cfg80211_get_channel(struct wiphy *wiphy,
|
||||
}
|
||||
|
||||
hdd_objmgr_put_vdev(vdev);
|
||||
hdd_debug("ch_width:%d, center_freq1:%d, center_freq2:%d",
|
||||
chandef->width, chandef->center_freq1, chandef->center_freq2);
|
||||
hdd_debug("primary_freq:%d, ch_width:%d, center_freq1:%d, center_freq2:%d",
|
||||
chan_freq, chandef->width, chandef->center_freq1,
|
||||
chandef->center_freq2);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Ссылка в новой задаче
Block a user