summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSelvaraj, Sridhar <sselvara@codeaurora.org>2016-12-09 12:49:53 +0530
committerqcabuildsw <qcabuildsw@localhost>2016-12-15 22:38:59 -0800
commit5f798b1712dc9a63285ae4557e7ad8acbea350dd (patch)
treeeafc33ea47c5414da70779c6fb4f08aec11108b1
parent6add1239aa373ab03a379524497433be7ad4787d (diff)
qcacld-3.0: Update BSS in cfg80211 database on channel switch
Currently, on channel switch, driver is updating only channel switch not updating the BSS database of cfg80211. For channel switch, update the BSS with inform_bss Change-Id: If68b8c5ee7ab5b793a819a609ce5eeb022df75b8 CRs-Fixed: 1099452
-rw-r--r--core/hdd/src/wlan_hdd_assoc.c69
1 files changed, 47 insertions, 22 deletions
diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c
index fd71e6fc242b..eb4d04f461c9 100644
--- a/core/hdd/src/wlan_hdd_assoc.c
+++ b/core/hdd/src/wlan_hdd_assoc.c
@@ -4502,6 +4502,51 @@ static inline bool hdd_is_8021x_sha256_auth_type(hdd_station_ctx_t *pHddStaCtx)
}
#endif
+/*
+ * hdd_roam_channel_switch_handler() - hdd channel switch handler
+ * @adapter: Pointer to adapter context
+ * @roam_info: Pointer to roam info
+ *
+ * Return: None
+ */
+static void hdd_roam_channel_switch_handler(hdd_adapter_t *adapter,
+ tCsrRoamInfo *roam_info)
+{
+ struct hdd_chan_change_params chan_change;
+ struct cfg80211_bss *bss;
+ struct net_device *dev = adapter->dev;
+ struct wireless_dev *wdev = dev->ieee80211_ptr;
+ struct wiphy *wiphy = wdev->wiphy;
+ QDF_STATUS status;
+
+ hdd_info("channel switch for session:%d to channel:%d",
+ adapter->sessionId, roam_info->chan_info.chan_id);
+
+ chan_change.chan = roam_info->chan_info.chan_id;
+ chan_change.chan_params.ch_width =
+ roam_info->chan_info.ch_width;
+ chan_change.chan_params.sec_ch_offset =
+ roam_info->chan_info.sec_ch_offset;
+ chan_change.chan_params.center_freq_seg0 =
+ roam_info->chan_info.band_center_freq1;
+ chan_change.chan_params.center_freq_seg1 =
+ roam_info->chan_info.band_center_freq2;
+
+ bss = wlan_hdd_cfg80211_update_bss_db(adapter, roam_info);
+ if (NULL == bss)
+ hdd_err("%s: unable to create BSS entry", adapter->dev->name);
+ else
+ cfg80211_put_bss(wiphy, bss);
+
+ status = hdd_chan_change_notify(adapter, adapter->dev, chan_change);
+ if (QDF_IS_STATUS_ERROR(status))
+ hdd_err("channel change notification failed");
+
+ status = cds_set_hw_mode_on_channel_switch(adapter->sessionId);
+ if (QDF_IS_STATUS_ERROR(status))
+ hdd_info("set hw mode change not done");
+}
+
/**
* hdd_sme_roam_callback() - hdd sme roam callback
* @pContext: pointer to adapter context
@@ -4522,7 +4567,6 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId,
hdd_station_ctx_t *pHddStaCtx = NULL;
QDF_STATUS status = QDF_STATUS_SUCCESS;
hdd_context_t *pHddCtx = NULL;
- struct hdd_chan_change_params chan_change;
struct cfg80211_bss *bss_status;
hdd_info("CSR Callback: status= %d result= %d roamID=%d",
@@ -4843,28 +4887,9 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId,
}
#endif /* FEATURE_WLAN_ESE */
case eCSR_ROAM_STA_CHANNEL_SWITCH:
- hdd_info("channel switch for session:%d to channel:%d",
- pAdapter->sessionId, pRoamInfo->chan_info.chan_id);
-
- chan_change.chan = pRoamInfo->chan_info.chan_id;
- chan_change.chan_params.ch_width =
- pRoamInfo->chan_info.ch_width;
- chan_change.chan_params.sec_ch_offset =
- pRoamInfo->chan_info.sec_ch_offset;
- chan_change.chan_params.center_freq_seg0 =
- pRoamInfo->chan_info.band_center_freq1;
- chan_change.chan_params.center_freq_seg1 =
- pRoamInfo->chan_info.band_center_freq2;
-
- status = hdd_chan_change_notify(pAdapter, pAdapter->dev,
- chan_change);
- if (QDF_IS_STATUS_ERROR(status))
- hdd_err("channel change notification failed");
-
- status = cds_set_hw_mode_on_channel_switch(pAdapter->sessionId);
- if (QDF_IS_STATUS_ERROR(status))
- hdd_info("set hw mode change not done");
+ hdd_roam_channel_switch_handler(pAdapter, pRoamInfo);
break;
+
case eCSR_ROAM_UPDATE_SCAN_RESULT:
if ((NULL != pRoamInfo) && (NULL != pRoamInfo->pBssDesc)) {
bss_status = wlan_hdd_cfg80211_inform_bss_frame(