From a901bcc17e015588b689ad272629c1484e612755 Mon Sep 17 00:00:00 2001 From: Asutosh Mohapatra Date: Mon, 4 Dec 2023 03:35:33 -0800 Subject: [PATCH] qcacld-3.0: Send additional interface combinations to fw As part of set feature set command, update STA_P2P, STA_SAP, STA_NAN, STA_TDLS, STA_SAP_P2P, STA_SAP_NAN, STA_P2P_NAN, STA_P2P_TDLS, STA_SAP_TDLS, STA_NAN_TDLS, STA_SAP_P2P_TDLS, STA_SAP_NAN_TDLS, STA_P2P_P2P_TDLS, STA_P2P_NAN_TDLS iface combinations to fw. Also use WLAN_FEATURE_NO_P2P_CONCURRENCY sta dual p2p support combination. Change-Id: I315c219f79995dedb0c2856d326838351d8a3d5e CRs-Fixed: 3674696 --- .../dispatcher/inc/wlan_mlme_public_struct.h | 40 ++++- .../mlme/dispatcher/src/wlan_mlme_api.c | 167 +++++++++++++++++- core/wma/src/wma_main.c | 4 +- 3 files changed, 204 insertions(+), 7 deletions(-) diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h index 85be5d6cf0..66f566430f 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -2960,6 +2960,42 @@ struct wlan_change_bi { }; #ifdef FEATURE_SET +/** + * enum wlan_mlme_iface_combinations - Iface combinations + * @MLME_IFACE_STA_P2P_SUPPORT: STA + P2P concurrency bit + * @MLME_IFACE_STA_SAP_SUPPORT: STA + SAP concurrency bit + * @MLME_IFACE_STA_NAN_SUPPORT: STA + NAN concurrency bit + * @MLME_IFACE_STA_TDLS_SUPPORT: STA + TDLS concurrency bit + * @MLME_IFACE_STA_DUAL_P2P_SUPPORT: STA + P2P + P2P concurrency bit + * @MLME_IFACE_STA_SAP_P2P_SUPPORT: STA + SAP + P2P concurrency bit + * @MLME_IFACE_STA_SAP_NAN_SUPPORT: STA + SAP + NAN concurrency bit + * @MLME_IFACE_STA_P2P_NAN_SUPPORT: STA + P2P + NAN concurrency bit + * @MLME_IFACE_STA_P2P_TDLS_SUPPORT: STA + P2P + TDLS concurrency bit + * @MLME_IFACE_STA_SAP_TDLS_SUPPORT: STA + SAP + TDLS concurrency bit + * @MLME_IFACE_STA_NAN_TDLS_SUPPORT: STA + NAN + TDLS concurrency bit + * @MLME_IFACE_STA_SAP_P2P_TDLS_SUPPORT: STA + SAP + P2P + TDLS concurrency bit + * @MLME_IFACE_STA_SAP_NAN_TDLS_SUPPORT: STA + SAP + NAN + TDLS concurrency bit + * @MLME_IFACE_STA_P2P_P2P_TDLS_SUPPORT: STA + P2P + P2P + TDLS concurrency bit + * @MLME_IFACE_STA_P2P_NAN_TDLS_SUPPORT: STA + P2P + NAN + TDLS concurrency bit + */ +enum wlan_mlme_iface_combinations { + MLME_IFACE_STA_P2P_SUPPORT = 0x1, + MLME_IFACE_STA_SAP_SUPPORT = 0x2, + MLME_IFACE_STA_NAN_SUPPORT = 0x4, + MLME_IFACE_STA_TDLS_SUPPORT = 0x8, + MLME_IFACE_STA_DUAL_P2P_SUPPORT = 0x10, + MLME_IFACE_STA_SAP_P2P_SUPPORT = 0x20, + MLME_IFACE_STA_SAP_NAN_SUPPORT = 0x40, + MLME_IFACE_STA_P2P_NAN_SUPPORT = 0x80, + MLME_IFACE_STA_P2P_TDLS_SUPPORT = 0x100, + MLME_IFACE_STA_SAP_TDLS_SUPPORT = 0x200, + MLME_IFACE_STA_NAN_TDLS_SUPPORT = 0x400, + MLME_IFACE_STA_SAP_P2P_TDLS_SUPPORT = 0x800, + MLME_IFACE_STA_SAP_NAN_TDLS_SUPPORT = 0x1000, + MLME_IFACE_STA_P2P_P2P_TDLS_SUPPORT = 0x2000, + MLME_IFACE_STA_P2P_NAN_TDLS_SUPPORT = 0x4000, +}; + /** * struct wlan_mlme_features - Mlme feature set structure * @enable_wifi_optimizer: indicates wifi optimizer is enabled or disabled @@ -2979,8 +3015,8 @@ struct wlan_change_bi { * @roaming_ctrl_get_cu: Roaming ctrl get cu enabled or disabled * @vendor_req_1_version: Vendor requirement version 1 * @vendor_req_2_version: Vendor requirement version 2 - * @sta_dual_p2p_support: STA + dual p2p support enabled or not * @enable2x2: Enable 2x2 + * @iface_combinations: iface combination bitmask */ struct wlan_mlme_features { bool enable_wifi_optimizer; @@ -2999,8 +3035,8 @@ struct wlan_mlme_features { bool roaming_ctrl_get_cu; WMI_HOST_VENDOR1_REQ1_VERSION vendor_req_1_version; WMI_HOST_VENDOR1_REQ2_VERSION vendor_req_2_version; - bool sta_dual_p2p_support; bool enable2x2; + uint32_t iface_combinations; }; #endif diff --git a/components/mlme/dispatcher/src/wlan_mlme_api.c b/components/mlme/dispatcher/src/wlan_mlme_api.c index 47d6609d46..e0eb6a9597 100644 --- a/components/mlme/dispatcher/src/wlan_mlme_api.c +++ b/components/mlme/dispatcher/src/wlan_mlme_api.c @@ -7303,7 +7303,8 @@ wlan_mlme_get_adaptive11r_enabled(struct wlan_objmgr_psoc *psoc, bool *val) } #endif -#ifdef WLAN_FEATURE_P2P_P2P_STA +#if defined(WLAN_FEATURE_P2P_P2P_STA) && \ + !defined(WLAN_FEATURE_NO_P2P_CONCURRENCY) static bool wlan_mlme_get_p2p_p2p_host_conc_support(void) { @@ -7317,6 +7318,167 @@ wlan_mlme_get_p2p_p2p_host_conc_support(void) } #endif +#ifndef WLAN_FEATURE_NO_STA_SAP_CONCURRENCY +static bool +wlan_mlme_get_sta_sap_host_conc_support(void) +{ + return true; +} +#else +static bool +wlan_mlme_get_sta_sap_host_conc_support(void) +{ + return false; +} +#endif + +#ifndef WLAN_FEATURE_NO_STA_NAN_CONCURRENCY +static bool +wlan_mlme_get_sta_nan_host_conc_support(void) +{ + return true; +} +#else +static bool +wlan_mlme_get_sta_nan_host_conc_support(void) +{ + return false; +} +#endif + +#ifdef FEATURE_WLAN_TDLS +static bool +wlan_mlme_get_sta_tdls_host_conc_support(void) +{ + return true; +} +#else +static bool +wlan_mlme_get_sta_tdls_host_conc_support(void) +{ + return false; +} +#endif + +#if !defined(WLAN_FEATURE_NO_STA_SAP_CONCURRENCY) && \ + (!defined(WLAN_FEATURE_NO_P2P_CONCURRENCY) || \ + defined(WLAN_FEATURE_STA_SAP_P2P_CONCURRENCY)) +static bool +wlan_mlme_get_sta_sap_p2p_host_conc_support(void) +{ + return true; +} +#else +static bool +wlan_mlme_get_sta_sap_p2p_host_conc_support(void) +{ + return false; +} +#endif + +#if defined(FEATURE_WLAN_TDLS) +static bool +wlan_mlme_get_sta_p2p_tdls_host_conc_support(void) +{ + return true; +} +#else +static bool +wlan_mlme_get_sta_p2p_tdls_host_conc_support(void) +{ + return false; +} +#endif + +#if defined(FEATURE_WLAN_TDLS) && !defined(WLAN_FEATURE_NO_STA_SAP_CONCURRENCY) +static bool +wlan_mlme_get_sta_sap_tdls_host_conc_support(void) +{ + return true; +} +#else +static bool +wlan_mlme_get_sta_sap_tdls_host_conc_support(void) +{ + return false; +} +#endif + +#if defined(FEATURE_WLAN_TDLS) && \ + !defined(WLAN_FEATURE_NO_STA_SAP_CONCURRENCY) && \ + (!defined(WLAN_FEATURE_NO_P2P_CONCURRENCY) || \ + defined(WLAN_FEATURE_STA_SAP_P2P_CONCURRENCY)) + +static bool +wlan_mlme_get_sta_sap_p2p_tdls_host_conc_support(void) +{ + return true; +} +#else +static bool +wlan_mlme_get_sta_sap_p2p_tdls_host_conc_support(void) +{ + return false; +} +#endif + +#if defined(FEATURE_WLAN_TDLS) && defined(WLAN_FEATURE_P2P_P2P_STA) && \ + !defined(WLAN_FEATURE_NO_P2P_CONCURRENCY) +static bool +wlan_mlme_get_sta_p2p_p2p_tdls_host_conc_support(void) +{ + return true; +} +#else +static bool +wlan_mlme_get_sta_p2p_p2p_tdls_host_conc_support(void) +{ + return false; +} +#endif + +/** + * wlan_mlme_set_iface_combinations() - Set interface combinations + * @mlme_feature_set: Pointer to wlan_mlme_features + * + * Return: None + */ +static void +wlan_mlme_set_iface_combinations(struct wlan_mlme_features *mlme_feature_set) +{ + mlme_feature_set->iface_combinations = 0; + mlme_feature_set->iface_combinations |= MLME_IFACE_STA_P2P_SUPPORT; + if (wlan_mlme_get_sta_sap_host_conc_support()) + mlme_feature_set->iface_combinations |= + MLME_IFACE_STA_SAP_SUPPORT; + if (wlan_mlme_get_sta_nan_host_conc_support()) + mlme_feature_set->iface_combinations |= + MLME_IFACE_STA_NAN_SUPPORT; + if (wlan_mlme_get_sta_tdls_host_conc_support()) + mlme_feature_set->iface_combinations |= + MLME_IFACE_STA_TDLS_SUPPORT; + if (wlan_mlme_get_p2p_p2p_host_conc_support()) + mlme_feature_set->iface_combinations |= + MLME_IFACE_STA_DUAL_P2P_SUPPORT; + if (wlan_mlme_get_sta_sap_p2p_host_conc_support()) + mlme_feature_set->iface_combinations |= + MLME_IFACE_STA_SAP_P2P_SUPPORT; + if (wlan_mlme_get_sta_p2p_tdls_host_conc_support()) + mlme_feature_set->iface_combinations |= + MLME_IFACE_STA_P2P_TDLS_SUPPORT; + if (wlan_mlme_get_sta_sap_tdls_host_conc_support()) + mlme_feature_set->iface_combinations |= + MLME_IFACE_STA_SAP_TDLS_SUPPORT; + if (wlan_mlme_get_sta_sap_p2p_tdls_host_conc_support()) + mlme_feature_set->iface_combinations |= + MLME_IFACE_STA_SAP_P2P_TDLS_SUPPORT; + if (wlan_mlme_get_sta_p2p_p2p_tdls_host_conc_support()) + mlme_feature_set->iface_combinations |= + MLME_IFACE_STA_P2P_P2P_TDLS_SUPPORT; + mlme_debug("iface combinations = %x", + mlme_feature_set->iface_combinations); +} + void wlan_mlme_get_feature_info(struct wlan_objmgr_psoc *psoc, struct wlan_mlme_features *mlme_feature_set) { @@ -7363,8 +7525,7 @@ void wlan_mlme_get_feature_info(struct wlan_objmgr_psoc *psoc, mlme_feature_set->vendor_req_2_version = WMI_HOST_VENDOR1_REQ2_VERSION_3_50; - mlme_feature_set->sta_dual_p2p_support = - wlan_mlme_get_p2p_p2p_host_conc_support(); + wlan_mlme_set_iface_combinations(mlme_feature_set); wlan_mlme_get_vht_enable2x2(psoc, &mlme_feature_set->enable2x2); } #endif diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index 0e4f3bde6d..3e91b947f6 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -449,8 +449,8 @@ static void wma_set_feature_set_info(tp_wma_handle wma_handle, mlme_feature_set.roaming_ctrl_get_cu; feature_set->vendor_req_2_version = mlme_feature_set.vendor_req_2_version; - feature_set->sta_dual_p2p_support = - mlme_feature_set.sta_dual_p2p_support; + feature_set->iface_combinations = mlme_feature_set.iface_combinations; + if (mlme_feature_set.enable2x2) feature_set->num_antennas = WMI_HOST_MIMO_2X2; else