From 434f955e91ac3dff067467b13db8822ac5050554 Mon Sep 17 00:00:00 2001 From: Bing Sun Date: Fri, 17 Sep 2021 16:04:02 +0800 Subject: [PATCH] qcacld-3.0: Restore mlo ap information during reinit Need save mlo link id and mlo link number information when starting bss. During reinit, restore mlo link id and mlo link number information. Change-Id: Ib188cab76d25eae6bb332b3a2ce3deb07825495b CRs-Fixed: 3039138 --- core/hdd/src/wlan_hdd_hostapd.c | 22 +++++++-------- core/hdd/src/wlan_hdd_hostapd.h | 14 ++++++++++ core/hdd/src/wlan_hdd_main.c | 47 ++++++++++++++++++++++++++++++++- core/sap/inc/sap_api.h | 5 ++++ 4 files changed, 75 insertions(+), 13 deletions(-) diff --git a/core/hdd/src/wlan_hdd_hostapd.c b/core/hdd/src/wlan_hdd_hostapd.c index a5ea115e7b..6a88b5bf3e 100644 --- a/core/hdd/src/wlan_hdd_hostapd.c +++ b/core/hdd/src/wlan_hdd_hostapd.c @@ -5319,6 +5319,10 @@ static QDF_STATUS wlan_hdd_mlo_update(struct hdd_context *hdd_ctx, hdd_err("MLO SAP attach fails"); return QDF_STATUS_E_INVAL; } + + config->mlo_sap = true; + config->link_id = link_id; + config->num_link = num_link; } if (!policy_mgr_is_mlo_sap_concurrency_allowed( @@ -5330,16 +5334,14 @@ static QDF_STATUS wlan_hdd_mlo_update(struct hdd_context *hdd_ctx, return QDF_STATUS_SUCCESS; } -/** - * wlan_hdd_mlo_reset() - reset mlo configuration if start bss fails - * @adapter: Pointer to hostapd adapter - * - * Return: void - */ -static void wlan_hdd_mlo_reset(struct hdd_adapter *adapter) +void wlan_hdd_mlo_reset(struct hdd_adapter *adapter) { - if (wlan_vdev_mlme_is_mlo_ap(adapter->vdev)) + if (wlan_vdev_mlme_is_mlo_ap(adapter->vdev)) { + adapter->session.ap.sap_config.mlo_sap = false; + adapter->session.ap.sap_config.link_id = 0; + adapter->session.ap.sap_config.num_link = 0; mlo_ap_vdev_detach(adapter->vdev); + } } #else static QDF_STATUS wlan_hdd_mlo_update(struct hdd_context *hdd_ctx, @@ -5349,10 +5351,6 @@ static QDF_STATUS wlan_hdd_mlo_update(struct hdd_context *hdd_ctx, { return QDF_STATUS_SUCCESS; } - -static void wlan_hdd_mlo_reset(struct hdd_adapter *adapter) -{ -} #endif /** diff --git a/core/hdd/src/wlan_hdd_hostapd.h b/core/hdd/src/wlan_hdd_hostapd.h index 9efc5a07c2..0b207f7f55 100644 --- a/core/hdd/src/wlan_hdd_hostapd.h +++ b/core/hdd/src/wlan_hdd_hostapd.h @@ -368,4 +368,18 @@ void hdd_stop_sap_due_to_invalid_channel(struct work_struct *work); * Return: true if any sta is connecting */ bool hdd_is_any_sta_connecting(struct hdd_context *hdd_ctx); + +#ifdef WLAN_FEATURE_11BE_MLO +/** + * wlan_hdd_mlo_reset() - reset mlo configuration if start bss fails + * @adapter: Pointer to hostapd adapter + * + * Return: void + */ +void wlan_hdd_mlo_reset(struct hdd_adapter *adapter); +#else +static inline void wlan_hdd_mlo_reset(struct hdd_adapter *adapter) +{ +} +#endif /* end WLAN_FEATURE_11BE_MLO */ #endif /* end #if !defined(WLAN_HDD_HOSTAPD_H) */ diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c index 38587a55f0..6ae4b796fb 100644 --- a/core/hdd/src/wlan_hdd_main.c +++ b/core/hdd/src/wlan_hdd_main.c @@ -211,7 +211,9 @@ #include #include "wlan_hdd_mlo.h" #include - +#ifdef WLAN_FEATURE_11BE_MLO +#include +#endif #ifdef MODULE #define WLAN_MODULE_NAME module_name(THIS_MODULE) #else @@ -15859,6 +15861,43 @@ void wlan_hdd_stop_sap(struct hdd_adapter *ap_adapter) mutex_unlock(&hdd_ctx->sap_lock); } +#ifdef WLAN_FEATURE_11BE_MLO +/** + * wlan_hdd_mlo_sap_reinit() - handle mlo scenario for ssr + * @hdd_ctx: Pointer to hdd context + * @config: Pointer to sap config + * @adapter: Pointer to hostapd adapter + * + * Return: QDF_STATUS + */ +static QDF_STATUS wlan_hdd_mlo_sap_reinit(struct hdd_context *hdd_ctx, + struct sap_config *config, + struct hdd_adapter *adapter) +{ + if (config->mlo_sap) { + if (!mlo_ap_vdev_attach(adapter->vdev, config->link_id, + config->num_link)) { + hdd_err("SAP mlo mgr attach fail"); + return QDF_STATUS_E_INVAL; + } + } + + if (!policy_mgr_is_mlo_sap_concurrency_allowed( + hdd_ctx->psoc, wlan_vdev_mlme_is_mlo_ap(adapter->vdev))) { + hdd_err("MLO SAP concurrency check fails"); + return QDF_STATUS_E_INVAL; + } + + return QDF_STATUS_SUCCESS; +} +#else +static QDF_STATUS wlan_hdd_mlo_sap_reinit(struct hdd_context *hdd_ctx, + struct sap_config *config, + struct hdd_adapter *adapter) +{ + return QDF_STATUS_SUCCESS; +} +#endif /** * wlan_hdd_start_sap() - this function starts bss of SAP. * @ap_adapter: SAP adapter @@ -15902,6 +15941,11 @@ void wlan_hdd_start_sap(struct hdd_adapter *ap_adapter, bool reinit) hdd_ctx->pdev, hdd_ap_ctx->sap_config.chan_freq, 0, &hdd_ap_ctx->sap_config.ch_params); + if (QDF_IS_STATUS_ERROR(wlan_hdd_mlo_sap_reinit(hdd_ctx, sap_config, + ap_adapter))) { + hdd_err("SAP Not able to do mlo attach"); + goto end; + } qdf_event_reset(&hostapd_state->qdf_event); if (wlansap_start_bss(hdd_ap_ctx->sap_context, hdd_hostapd_sap_event_cb, @@ -15935,6 +15979,7 @@ void wlan_hdd_start_sap(struct hdd_adapter *ap_adapter, bool reinit) return; end: + wlan_hdd_mlo_reset(ap_adapter); wlansap_reset_sap_config_add_ie(sap_config, eUPDATE_IE_ALL); mutex_unlock(&hdd_ctx->sap_lock); /* SAP context and beacon cleanup will happen during driver unload diff --git a/core/sap/inc/sap_api.h b/core/sap/inc/sap_api.h index 2999b607b6..28cfc9737e 100644 --- a/core/sap/inc/sap_api.h +++ b/core/sap/inc/sap_api.h @@ -518,6 +518,11 @@ struct sap_config { struct hdd_channel_info *channel_info; uint32_t channel_info_count; bool dfs_cac_offload; +#ifdef WLAN_FEATURE_11BE_MLO + bool mlo_sap; + uint8_t link_id; + uint8_t num_link; +#endif }; #ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE