qcacld-3.0: Refactor channel change APIs
Use link info pointer as function argument for the following channel change notifying APIs to call for each link info corresponding to the VDEV. 1) hdd_roam_channel_switch_handler() 2) hdd_chan_change_notify() 3) hdd_hostapd_chan_change() Change-Id: Ic78f8ee88524ede97a53c0d4f8b88cff7ed7a3e5 CRs-Fixed: 3523026
This commit is contained in:

committed by
Rahul Choudhary

parent
1427a04c90
commit
60b472aad1
@@ -3612,7 +3612,7 @@ int hdd_update_components_config(struct hdd_context *hdd_ctx);
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* hdd_chan_change_notify() - Function to notify hostapd about channel change
|
* hdd_chan_change_notify() - Function to notify hostapd about channel change
|
||||||
* @adapter: hostapd adapter
|
* @link_info: Link info pointer in HDD adapter
|
||||||
* @dev: Net device structure
|
* @dev: Net device structure
|
||||||
* @chan_change: New channel change parameters
|
* @chan_change: New channel change parameters
|
||||||
* @legacy_phymode: is the phymode legacy
|
* @legacy_phymode: is the phymode legacy
|
||||||
@@ -3622,10 +3622,11 @@ int hdd_update_components_config(struct hdd_context *hdd_ctx);
|
|||||||
* Return: Success on intimating userspace
|
* Return: Success on intimating userspace
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
QDF_STATUS hdd_chan_change_notify(struct hdd_adapter *adapter,
|
QDF_STATUS hdd_chan_change_notify(struct wlan_hdd_link_info *link_info,
|
||||||
struct net_device *dev,
|
struct net_device *dev,
|
||||||
struct hdd_chan_change_params chan_change,
|
struct hdd_chan_change_params chan_change,
|
||||||
bool legacy_phymode);
|
bool legacy_phymode);
|
||||||
|
|
||||||
int wlan_hdd_set_channel(struct wiphy *wiphy,
|
int wlan_hdd_set_channel(struct wiphy *wiphy,
|
||||||
struct net_device *dev,
|
struct net_device *dev,
|
||||||
struct cfg80211_chan_def *chandef,
|
struct cfg80211_chan_def *chandef,
|
||||||
|
@@ -2180,16 +2180,18 @@ hdd_indicate_ese_bcn_report_ind(const struct hdd_adapter *adapter,
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* hdd_roam_channel_switch_handler() - hdd channel switch handler
|
* hdd_roam_channel_switch_handler() - hdd channel switch handler
|
||||||
* @adapter: Pointer to adapter context
|
* @link_info: Link info pointer in HDD adapter
|
||||||
* @roam_info: Pointer to roam info
|
* @roam_info: Pointer to roam info
|
||||||
*
|
*
|
||||||
* Return: None
|
* Return: None
|
||||||
*/
|
*/
|
||||||
static void hdd_roam_channel_switch_handler(struct hdd_adapter *adapter,
|
static void
|
||||||
|
hdd_roam_channel_switch_handler(struct wlan_hdd_link_info *link_info,
|
||||||
struct csr_roam_info *roam_info)
|
struct csr_roam_info *roam_info)
|
||||||
{
|
{
|
||||||
struct hdd_chan_change_params chan_change = {0};
|
struct hdd_chan_change_params chan_change = {0};
|
||||||
QDF_STATUS status;
|
QDF_STATUS status;
|
||||||
|
struct hdd_adapter *adapter = link_info->adapter;
|
||||||
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
||||||
mac_handle_t mac_handle;
|
mac_handle_t mac_handle;
|
||||||
struct hdd_station_ctx *sta_ctx;
|
struct hdd_station_ctx *sta_ctx;
|
||||||
@@ -2203,11 +2205,11 @@ static void hdd_roam_channel_switch_handler(struct hdd_adapter *adapter,
|
|||||||
|
|
||||||
/* Enable Roaming on STA interface which was disabled before CSA */
|
/* Enable Roaming on STA interface which was disabled before CSA */
|
||||||
if (adapter->device_mode == QDF_STA_MODE)
|
if (adapter->device_mode == QDF_STA_MODE)
|
||||||
sme_start_roaming(mac_handle, adapter->deflink->vdev_id,
|
sme_start_roaming(mac_handle, link_info->vdev_id,
|
||||||
REASON_DRIVER_ENABLED,
|
REASON_DRIVER_ENABLED,
|
||||||
RSO_CHANNEL_SWITCH);
|
RSO_CHANNEL_SWITCH);
|
||||||
|
|
||||||
sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter->deflink);
|
sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(link_info);
|
||||||
if (sta_ctx) {
|
if (sta_ctx) {
|
||||||
sta_ctx->conn_info.chan_freq = roam_info->chan_info.mhz;
|
sta_ctx->conn_info.chan_freq = roam_info->chan_info.mhz;
|
||||||
sta_ctx->conn_info.ch_width = roam_info->chan_info.ch_width;
|
sta_ctx->conn_info.ch_width = roam_info->chan_info.ch_width;
|
||||||
@@ -2223,7 +2225,7 @@ static void hdd_roam_channel_switch_handler(struct hdd_adapter *adapter,
|
|||||||
chan_change.chan_params.mhz_freq_seg1 =
|
chan_change.chan_params.mhz_freq_seg1 =
|
||||||
roam_info->chan_info.band_center_freq2;
|
roam_info->chan_info.band_center_freq2;
|
||||||
|
|
||||||
vdev = hdd_objmgr_get_vdev_by_user(adapter->deflink, WLAN_OSIF_ID);
|
vdev = hdd_objmgr_get_vdev_by_user(link_info, WLAN_OSIF_ID);
|
||||||
if (!vdev) {
|
if (!vdev) {
|
||||||
hdd_err("Invalid vdev");
|
hdd_err("Invalid vdev");
|
||||||
return;
|
return;
|
||||||
@@ -2235,13 +2237,13 @@ static void hdd_roam_channel_switch_handler(struct hdd_adapter *adapter,
|
|||||||
hdd_ctx->pdev, sta_ctx->conn_info.bssid.bytes,
|
hdd_ctx->pdev, sta_ctx->conn_info.bssid.bytes,
|
||||||
&connected_vdev))
|
&connected_vdev))
|
||||||
notify = false;
|
notify = false;
|
||||||
else if (adapter->deflink->vdev_id != connected_vdev ||
|
else if (link_info->vdev_id != connected_vdev ||
|
||||||
!ucfg_cm_is_vdev_active(vdev))
|
!ucfg_cm_is_vdev_active(vdev))
|
||||||
notify = false;
|
notify = false;
|
||||||
}
|
}
|
||||||
if (notify) {
|
if (notify) {
|
||||||
status = hdd_chan_change_notify(adapter, adapter->dev,
|
status = hdd_chan_change_notify(link_info,
|
||||||
chan_change,
|
adapter->dev, chan_change,
|
||||||
roam_info->mode ==
|
roam_info->mode ==
|
||||||
SIR_SME_PHY_MODE_LEGACY);
|
SIR_SME_PHY_MODE_LEGACY);
|
||||||
if (QDF_IS_STATUS_ERROR(status))
|
if (QDF_IS_STATUS_ERROR(status))
|
||||||
@@ -2249,10 +2251,10 @@ static void hdd_roam_channel_switch_handler(struct hdd_adapter *adapter,
|
|||||||
} else {
|
} else {
|
||||||
hdd_err("BSS "QDF_MAC_ADDR_FMT" no connected with vdev %d (%d)",
|
hdd_err("BSS "QDF_MAC_ADDR_FMT" no connected with vdev %d (%d)",
|
||||||
QDF_MAC_ADDR_REF(sta_ctx->conn_info.bssid.bytes),
|
QDF_MAC_ADDR_REF(sta_ctx->conn_info.bssid.bytes),
|
||||||
adapter->deflink->vdev_id, connected_vdev);
|
link_info->vdev_id, connected_vdev);
|
||||||
}
|
}
|
||||||
status = policy_mgr_set_hw_mode_on_channel_switch(hdd_ctx->psoc,
|
status = policy_mgr_set_hw_mode_on_channel_switch(hdd_ctx->psoc,
|
||||||
adapter->deflink->vdev_id);
|
link_info->vdev_id);
|
||||||
if (QDF_IS_STATUS_ERROR(status))
|
if (QDF_IS_STATUS_ERROR(status))
|
||||||
hdd_debug("set hw mode change not done");
|
hdd_debug("set hw mode change not done");
|
||||||
|
|
||||||
@@ -2263,12 +2265,12 @@ static void hdd_roam_channel_switch_handler(struct hdd_adapter *adapter,
|
|||||||
if (!is_sap_go_moved_before_sta)
|
if (!is_sap_go_moved_before_sta)
|
||||||
policy_mgr_check_concurrent_intf_and_restart_sap(
|
policy_mgr_check_concurrent_intf_and_restart_sap(
|
||||||
hdd_ctx->psoc,
|
hdd_ctx->psoc,
|
||||||
!!adapter->deflink->session.ap.sap_config.acs_cfg.acs_mode);
|
!!link_info->session.ap.sap_config.acs_cfg.acs_mode);
|
||||||
|
|
||||||
wlan_twt_concurrency_update(hdd_ctx);
|
wlan_twt_concurrency_update(hdd_ctx);
|
||||||
if (adapter->device_mode == QDF_STA_MODE ||
|
if (adapter->device_mode == QDF_STA_MODE ||
|
||||||
adapter->device_mode == QDF_P2P_CLIENT_MODE) {
|
adapter->device_mode == QDF_P2P_CLIENT_MODE) {
|
||||||
vdev = hdd_objmgr_get_vdev_by_user(adapter->deflink,
|
vdev = hdd_objmgr_get_vdev_by_user(link_info,
|
||||||
WLAN_OSIF_ID);
|
WLAN_OSIF_ID);
|
||||||
if (!vdev)
|
if (!vdev)
|
||||||
return;
|
return;
|
||||||
@@ -2368,7 +2370,7 @@ QDF_STATUS hdd_sme_roam_callback(void *context,
|
|||||||
}
|
}
|
||||||
#endif /* FEATURE_WLAN_ESE */
|
#endif /* FEATURE_WLAN_ESE */
|
||||||
case eCSR_ROAM_STA_CHANNEL_SWITCH:
|
case eCSR_ROAM_STA_CHANNEL_SWITCH:
|
||||||
hdd_roam_channel_switch_handler(adapter, roam_info);
|
hdd_roam_channel_switch_handler(link_info, roam_info);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case eCSR_ROAM_NDP_STATUS_UPDATE:
|
case eCSR_ROAM_NDP_STATUS_UPDATE:
|
||||||
|
@@ -959,7 +959,7 @@ wlan_hdd_get_puncture_bitmap(struct hdd_chan_change_params chan_change)
|
|||||||
}
|
}
|
||||||
#endif /* WLAN_FEATURE_11BE */
|
#endif /* WLAN_FEATURE_11BE */
|
||||||
|
|
||||||
QDF_STATUS hdd_chan_change_notify(struct hdd_adapter *adapter,
|
QDF_STATUS hdd_chan_change_notify(struct wlan_hdd_link_info *link_info,
|
||||||
struct net_device *dev,
|
struct net_device *dev,
|
||||||
struct hdd_chan_change_params chan_change,
|
struct hdd_chan_change_params chan_change,
|
||||||
bool legacy_phymode)
|
bool legacy_phymode)
|
||||||
@@ -968,6 +968,7 @@ QDF_STATUS hdd_chan_change_notify(struct hdd_adapter *adapter,
|
|||||||
struct cfg80211_chan_def chandef;
|
struct cfg80211_chan_def chandef;
|
||||||
enum nl80211_channel_type channel_type;
|
enum nl80211_channel_type channel_type;
|
||||||
uint32_t freq;
|
uint32_t freq;
|
||||||
|
struct hdd_adapter *adapter = link_info->adapter;
|
||||||
mac_handle_t mac_handle = adapter->hdd_ctx->mac_handle;
|
mac_handle_t mac_handle = adapter->hdd_ctx->mac_handle;
|
||||||
struct wlan_objmgr_vdev *vdev;
|
struct wlan_objmgr_vdev *vdev;
|
||||||
uint16_t link_id = 0;
|
uint16_t link_id = 0;
|
||||||
@@ -980,7 +981,6 @@ QDF_STATUS hdd_chan_change_notify(struct hdd_adapter *adapter,
|
|||||||
}
|
}
|
||||||
|
|
||||||
freq = chan_change.chan_freq;
|
freq = chan_change.chan_freq;
|
||||||
|
|
||||||
chan = ieee80211_get_channel(adapter->wdev.wiphy, freq);
|
chan = ieee80211_get_channel(adapter->wdev.wiphy, freq);
|
||||||
|
|
||||||
if (!chan) {
|
if (!chan) {
|
||||||
@@ -1043,7 +1043,7 @@ QDF_STATUS hdd_chan_change_notify(struct hdd_adapter *adapter,
|
|||||||
chan_change.chan_params.mhz_freq_seg0;
|
chan_change.chan_params.mhz_freq_seg0;
|
||||||
}
|
}
|
||||||
|
|
||||||
vdev = hdd_objmgr_get_vdev_by_user(adapter->deflink, WLAN_OSIF_ID);
|
vdev = hdd_objmgr_get_vdev_by_user(link_info, WLAN_OSIF_ID);
|
||||||
if (!vdev)
|
if (!vdev)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
@@ -1749,23 +1749,24 @@ hdd_fill_channel_change_puncture(struct hdd_chan_change_params *chan_change,
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* hdd_hostapd_chan_change() - prepare new operation chan info to kernel
|
* hdd_hostapd_chan_change() - prepare new operation chan info to kernel
|
||||||
* @adapter: pointre to hdd_adapter
|
* @link_info: Link info pointer in HDD adapter
|
||||||
* @sap_event: pointer to sap_event
|
* @sap_event: pointer to sap_event
|
||||||
*
|
*
|
||||||
* Return: QDF_STATUS
|
* Return: QDF_STATUS
|
||||||
*/
|
*/
|
||||||
static QDF_STATUS hdd_hostapd_chan_change(struct hdd_adapter *adapter,
|
static QDF_STATUS hdd_hostapd_chan_change(struct wlan_hdd_link_info *link_info,
|
||||||
struct sap_event *sap_event)
|
struct sap_event *sap_event)
|
||||||
{
|
{
|
||||||
struct hdd_chan_change_params chan_change = {0};
|
struct hdd_chan_change_params chan_change = {0};
|
||||||
struct ch_params sap_ch_param = {0};
|
struct ch_params sap_ch_param = {0};
|
||||||
eCsrPhyMode phy_mode;
|
eCsrPhyMode phy_mode;
|
||||||
bool legacy_phymode;
|
bool legacy_phymode;
|
||||||
|
struct hdd_adapter *adapter = link_info->adapter;
|
||||||
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
||||||
struct sap_ch_selected_s *sap_chan_selected =
|
struct sap_ch_selected_s *sap_chan_selected =
|
||||||
&sap_event->sapevt.sap_ch_selected;
|
&sap_event->sapevt.sap_ch_selected;
|
||||||
struct sap_config *sap_config =
|
struct sap_config *sap_config =
|
||||||
&adapter->deflink->session.ap.sap_config;
|
&link_info->session.ap.sap_config;
|
||||||
|
|
||||||
sap_ch_param.ch_width = sap_chan_selected->ch_width;
|
sap_ch_param.ch_width = sap_chan_selected->ch_width;
|
||||||
sap_ch_param.mhz_freq_seg0 =
|
sap_ch_param.mhz_freq_seg0 =
|
||||||
@@ -1782,7 +1783,7 @@ static QDF_STATUS hdd_hostapd_chan_change(struct hdd_adapter *adapter,
|
|||||||
&sap_ch_param, REG_CURRENT_PWR_MODE);
|
&sap_ch_param, REG_CURRENT_PWR_MODE);
|
||||||
|
|
||||||
phy_mode = wlan_sap_get_phymode(
|
phy_mode = wlan_sap_get_phymode(
|
||||||
WLAN_HDD_GET_SAP_CTX_PTR(adapter->deflink));
|
WLAN_HDD_GET_SAP_CTX_PTR(link_info));
|
||||||
|
|
||||||
switch (phy_mode) {
|
switch (phy_mode) {
|
||||||
case eCSR_DOT11_MODE_11n:
|
case eCSR_DOT11_MODE_11n:
|
||||||
@@ -1810,7 +1811,7 @@ static QDF_STATUS hdd_hostapd_chan_change(struct hdd_adapter *adapter,
|
|||||||
sap_chan_selected->vht_seg1_center_ch_freq;
|
sap_chan_selected->vht_seg1_center_ch_freq;
|
||||||
hdd_fill_channel_change_puncture(&chan_change, &sap_ch_param);
|
hdd_fill_channel_change_puncture(&chan_change, &sap_ch_param);
|
||||||
|
|
||||||
return hdd_chan_change_notify(adapter, adapter->dev,
|
return hdd_chan_change_notify(link_info, adapter->dev,
|
||||||
chan_change, legacy_phymode);
|
chan_change, legacy_phymode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2974,7 +2975,7 @@ QDF_STATUS hdd_hostapd_sap_event_cb(struct sap_event *sap_event,
|
|||||||
|
|
||||||
hdd_son_deliver_chan_change_event(
|
hdd_son_deliver_chan_change_event(
|
||||||
adapter, sap_event->sapevt.sap_ch_selected.pri_ch_freq);
|
adapter, sap_event->sapevt.sap_ch_selected.pri_ch_freq);
|
||||||
return hdd_hostapd_chan_change(adapter, sap_event);
|
return hdd_hostapd_chan_change(link_info, sap_event);
|
||||||
case eSAP_ACS_SCAN_SUCCESS_EVENT:
|
case eSAP_ACS_SCAN_SUCCESS_EVENT:
|
||||||
return hdd_handle_acs_scan_event(sap_event, adapter);
|
return hdd_handle_acs_scan_event(sap_event, adapter);
|
||||||
|
|
||||||
@@ -3065,7 +3066,7 @@ QDF_STATUS hdd_hostapd_sap_event_cb(struct sap_event *sap_event,
|
|||||||
if (!QDF_IS_STATUS_SUCCESS(qdf_status))
|
if (!QDF_IS_STATUS_SUCCESS(qdf_status))
|
||||||
hdd_err("qdf_event_set failed! status: %d",
|
hdd_err("qdf_event_set failed! status: %d",
|
||||||
qdf_status);
|
qdf_status);
|
||||||
return hdd_hostapd_chan_change(adapter, sap_event);
|
return hdd_hostapd_chan_change(link_info, sap_event);
|
||||||
default:
|
default:
|
||||||
hdd_debug("SAP message is not handled");
|
hdd_debug("SAP message is not handled");
|
||||||
goto stopbss;
|
goto stopbss;
|
||||||
|
Reference in New Issue
Block a user