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:
Vinod Kumar Pirla
2023-02-28 07:21:39 -08:00
committed by Rahul Choudhary
parent 1427a04c90
commit 60b472aad1
3 changed files with 36 additions and 32 deletions

View File

@@ -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,

View File

@@ -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
struct csr_roam_info *roam_info) hdd_roam_channel_switch_handler(struct wlan_hdd_link_info *link_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:

View File

@@ -959,15 +959,16 @@ 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)
{ {
struct ieee80211_channel *chan; struct ieee80211_channel *chan;
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;