diff --git a/core/hdd/inc/wlan_hdd_main.h b/core/hdd/inc/wlan_hdd_main.h index 587b2cc2dd..46b2fe8209 100644 --- a/core/hdd/inc/wlan_hdd_main.h +++ b/core/hdd/inc/wlan_hdd_main.h @@ -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 - * @adapter: hostapd adapter + * @link_info: Link info pointer in HDD adapter * @dev: Net device structure * @chan_change: New channel change parameters * @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 * */ -QDF_STATUS hdd_chan_change_notify(struct hdd_adapter *adapter, - struct net_device *dev, - struct hdd_chan_change_params chan_change, - bool legacy_phymode); +QDF_STATUS hdd_chan_change_notify(struct wlan_hdd_link_info *link_info, + struct net_device *dev, + struct hdd_chan_change_params chan_change, + bool legacy_phymode); + int wlan_hdd_set_channel(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_chan_def *chandef, diff --git a/core/hdd/src/wlan_hdd_assoc.c b/core/hdd/src/wlan_hdd_assoc.c index e6dd951b52..96bce4dd82 100644 --- a/core/hdd/src/wlan_hdd_assoc.c +++ b/core/hdd/src/wlan_hdd_assoc.c @@ -2180,16 +2180,18 @@ hdd_indicate_ese_bcn_report_ind(const struct hdd_adapter *adapter, /* * 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 * * Return: None */ -static void hdd_roam_channel_switch_handler(struct hdd_adapter *adapter, - struct csr_roam_info *roam_info) +static void +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}; QDF_STATUS status; + struct hdd_adapter *adapter = link_info->adapter; struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter); mac_handle_t mac_handle; 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 */ 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, 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) { sta_ctx->conn_info.chan_freq = roam_info->chan_info.mhz; 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 = 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) { hdd_err("Invalid vdev"); 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, &connected_vdev)) notify = false; - else if (adapter->deflink->vdev_id != connected_vdev || + else if (link_info->vdev_id != connected_vdev || !ucfg_cm_is_vdev_active(vdev)) notify = false; } if (notify) { - status = hdd_chan_change_notify(adapter, adapter->dev, - chan_change, + status = hdd_chan_change_notify(link_info, + adapter->dev, chan_change, roam_info->mode == SIR_SME_PHY_MODE_LEGACY); if (QDF_IS_STATUS_ERROR(status)) @@ -2249,10 +2251,10 @@ static void hdd_roam_channel_switch_handler(struct hdd_adapter *adapter, } else { hdd_err("BSS "QDF_MAC_ADDR_FMT" no connected with vdev %d (%d)", 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, - adapter->deflink->vdev_id); + link_info->vdev_id); if (QDF_IS_STATUS_ERROR(status)) 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) policy_mgr_check_concurrent_intf_and_restart_sap( 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); if (adapter->device_mode == QDF_STA_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); if (!vdev) return; @@ -2368,7 +2370,7 @@ QDF_STATUS hdd_sme_roam_callback(void *context, } #endif /* FEATURE_WLAN_ESE */ case eCSR_ROAM_STA_CHANNEL_SWITCH: - hdd_roam_channel_switch_handler(adapter, roam_info); + hdd_roam_channel_switch_handler(link_info, roam_info); break; case eCSR_ROAM_NDP_STATUS_UPDATE: diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index 207d50b258..13ab39644d 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -959,15 +959,16 @@ wlan_hdd_get_puncture_bitmap(struct hdd_chan_change_params chan_change) } #endif /* WLAN_FEATURE_11BE */ -QDF_STATUS hdd_chan_change_notify(struct hdd_adapter *adapter, - struct net_device *dev, - struct hdd_chan_change_params chan_change, - bool legacy_phymode) +QDF_STATUS hdd_chan_change_notify(struct wlan_hdd_link_info *link_info, + struct net_device *dev, + struct hdd_chan_change_params chan_change, + bool legacy_phymode) { struct ieee80211_channel *chan; struct cfg80211_chan_def chandef; enum nl80211_channel_type channel_type; uint32_t freq; + struct hdd_adapter *adapter = link_info->adapter; mac_handle_t mac_handle = adapter->hdd_ctx->mac_handle; struct wlan_objmgr_vdev *vdev; uint16_t link_id = 0; @@ -980,7 +981,6 @@ QDF_STATUS hdd_chan_change_notify(struct hdd_adapter *adapter, } freq = chan_change.chan_freq; - chan = ieee80211_get_channel(adapter->wdev.wiphy, freq); if (!chan) { @@ -1043,7 +1043,7 @@ QDF_STATUS hdd_chan_change_notify(struct hdd_adapter *adapter, 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) 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 - * @adapter: pointre to hdd_adapter + * @link_info: Link info pointer in HDD adapter * @sap_event: pointer to sap_event * * 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 hdd_chan_change_params chan_change = {0}; struct ch_params sap_ch_param = {0}; eCsrPhyMode phy_mode; bool legacy_phymode; + struct hdd_adapter *adapter = link_info->adapter; struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter); struct sap_ch_selected_s *sap_chan_selected = &sap_event->sapevt.sap_ch_selected; 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.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); 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) { 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; 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); } @@ -2974,7 +2975,7 @@ QDF_STATUS hdd_hostapd_sap_event_cb(struct sap_event *sap_event, hdd_son_deliver_chan_change_event( 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: 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)) hdd_err("qdf_event_set failed! status: %d", qdf_status); - return hdd_hostapd_chan_change(adapter, sap_event); + return hdd_hostapd_chan_change(link_info, sap_event); default: hdd_debug("SAP message is not handled"); goto stopbss;