qcacld-3.0: Update num tdls vdevs to 2 if fw 11be capab

Update tdls vdevs to 2 if fw 11be capable. Add
WMI_SERVICE_11BE_TDLS_SUPPORT update num tdls vdevs
to 2 for firmware while init_cmd_send_tlv.

Change-Id: I12cced5718cb189ce1f96d204ac64108ccef5ca3
CRs-Fixed: 3436013
This commit is contained in:
Paul Zhang
2023-04-06 21:01:09 +08:00
committed by Madan Koyyalamudi
parent 3f820fd0bf
commit 44804ad746
9 changed files with 170 additions and 4 deletions

View File

@@ -28,6 +28,7 @@
#include "wlan_tdls_peer.h"
#include "wlan_tdls_ct.h"
#include "wlan_tdls_mgmt.h"
#include "wlan_tdls_api.h"
#include "wlan_tdls_tgt_api.h"
#include "wlan_policy_mgr_public_struct.h"
#include "wlan_policy_mgr_api.h"
@@ -993,7 +994,8 @@ bool tdls_check_is_tdls_allowed(struct wlan_objmgr_vdev *vdev)
goto exit;
}
if (wlan_vdev_mlme_is_mlo_vdev(vdev)) {
if (wlan_vdev_mlme_is_mlo_vdev(vdev) &&
!wlan_tdls_is_fw_11be_mlo_capable(tdls_soc_obj->soc)) {
tdls_debug("TDLS not supported on MLO vdev");
goto exit;
}
@@ -1075,6 +1077,7 @@ void tdls_set_ct_mode(struct wlan_objmgr_psoc *psoc,
struct tdls_vdev_priv_obj *tdls_vdev_obj;
uint32_t tdls_feature_flags = 0, sta_count, p2p_count;
bool state = false;
bool tdls_mlo;
QDF_STATUS status;
if (!tdls_check_is_tdls_allowed(vdev))
@@ -1101,7 +1104,8 @@ void tdls_set_ct_mode(struct wlan_objmgr_psoc *psoc,
policy_mgr_mode_specific_connection_count(psoc,
PM_P2P_CLIENT_MODE,
NULL);
if (sta_count == 1 ||
tdls_mlo = wlan_tdls_is_fw_11be_mlo_capable(psoc);
if (sta_count == 1 || (sta_count >= 2 && tdls_mlo) ||
(policy_mgr_get_connection_count_with_mlo(psoc) == 1 &&
p2p_count == 1)) {
state = true;
@@ -1370,6 +1374,7 @@ void tdls_send_update_to_fw(struct tdls_vdev_priv_obj *tdls_vdev_obj,
uint32_t tdls_feature_flags;
QDF_STATUS status;
uint8_t set_state_cnt;
bool tdls_mlo;
tdls_feature_flags = tdls_soc_obj->tdls_configs.tdls_feature_flags;
if (!TDLS_IS_ENABLED(tdls_feature_flags)) {
@@ -1378,6 +1383,14 @@ void tdls_send_update_to_fw(struct tdls_vdev_priv_obj *tdls_vdev_obj,
}
set_state_cnt = tdls_soc_obj->set_state_info.set_state_cnt;
tdls_mlo = wlan_tdls_is_fw_11be_mlo_capable(tdls_soc_obj->soc);
/* for mld tdls, it needs to set the second vdev,
* set set_state_cnt to 0 to bypass the following check.
*/
if (tdls_mlo && sta_connect_event && set_state_cnt == 1)
set_state_cnt = 0;
if ((set_state_cnt == 0 && !sta_connect_event) ||
(set_state_cnt && sta_connect_event)) {
tdls_debug("FW TDLS state is already in requested state");
@@ -1433,7 +1446,8 @@ void tdls_send_update_to_fw(struct tdls_vdev_priv_obj *tdls_vdev_obj,
* channel switch
*/
if (TDLS_IS_OFF_CHANNEL_ENABLED(tdls_feature_flags) &&
!tdls_chan_swit_prohibited)
(!tdls_chan_swit_prohibited) &&
(!wlan_tdls_is_fw_11be_mlo_capable(tdls_soc_obj->soc)))
tdls_info_to_fw->tdls_options = ENA_TDLS_OFFCHAN;
if (TDLS_IS_BUFFER_STA_ENABLED(tdls_feature_flags))

View File

@@ -195,6 +195,7 @@ struct tdls_set_state_info {
* based on this flag.
* @wake_lock: wake lock
* @runtime_lock: runtime lock
* @fw_tdls_mlo_capable: is fw tdls mlo capable
* @tdls_osif_init_cb: Callback to initialize the tdls private
* @tdls_osif_deinit_cb: Callback to deinitialize the tdls private
* @tdls_osif_update_cb: Callback for updating osif params
@@ -249,6 +250,9 @@ struct tdls_soc_priv_obj {
bool is_drv_supported;
qdf_wake_lock_t wake_lock;
qdf_runtime_lock_t runtime_lock;
#endif
#ifdef WLAN_FEATURE_11BE_MLO
bool fw_tdls_mlo_capable;
#endif
tdls_vdev_init_cb tdls_osif_init_cb;
tdls_vdev_deinit_cb tdls_osif_deinit_cb;

View File

@@ -26,7 +26,21 @@
#include "wlan_objmgr_vdev_obj.h"
#ifdef FEATURE_WLAN_TDLS
#ifdef WLAN_FEATURE_11BE_MLO
/**
* wlan_tdls_is_fw_11be_mlo_capable() - Get TDLS 11be mlo capab
* @psoc: psoc context
*
* Return: True if 11be mlo capable
*/
bool wlan_tdls_is_fw_11be_mlo_capable(struct wlan_objmgr_psoc *psoc);
#else
static inline
bool wlan_tdls_is_fw_11be_mlo_capable(struct wlan_objmgr_psoc *psoc)
{
return false;
}
#endif
#ifdef FEATURE_SET
/**
* wlan_tdls_get_features_info() - Get tdls features info
@@ -127,6 +141,12 @@ void wlan_tdls_get_features_info(struct wlan_objmgr_psoc *psoc,
}
#endif
static inline
bool wlan_tdls_is_fw_11be_mlo_capable(struct wlan_objmgr_psoc *psoc)
{
return false;
}
static inline QDF_STATUS wlan_tdls_teardown_links(struct wlan_objmgr_psoc *psoc)
{
return QDF_STATUS_SUCCESS;

View File

@@ -163,6 +163,24 @@ return false;
}
#endif
#ifdef WLAN_FEATURE_11BE
/**
* ucfg_tdls_update_fw_mlo_capability() - update fw mlo capability
* @psoc: psoc object
* @is_fw_tdls_mlo_capable: bool value
*
* Return: none
*/
void ucfg_tdls_update_fw_mlo_capability(struct wlan_objmgr_psoc *psoc,
bool is_fw_tdls_mlo_capable);
#else
static inline
void ucfg_tdls_update_fw_mlo_capability(struct wlan_objmgr_psoc *psoc,
bool is_fw_tdls_mlo_capable)
{
}
#endif
/**
* ucfg_tdls_psoc_enable() - TDLS module enable API
* @psoc: psoc object

View File

@@ -71,6 +71,23 @@ QDF_STATUS wlan_tdls_teardown_links(struct wlan_objmgr_psoc *psoc)
return status;
}
#ifdef WLAN_FEATURE_11BE_MLO
bool wlan_tdls_is_fw_11be_mlo_capable(struct wlan_objmgr_psoc *psoc)
{
struct tdls_soc_priv_obj *soc_obj;
soc_obj = wlan_objmgr_psoc_get_comp_private_obj(psoc,
WLAN_UMAC_COMP_TDLS);
if (!soc_obj) {
tdls_err("Failed to get tdls psoc component");
return false;
}
tdls_debug("FW 11BE capability %d", soc_obj->fw_tdls_mlo_capable);
return soc_obj->fw_tdls_mlo_capable;
}
#endif
void wlan_tdls_teardown_links_sync(struct wlan_objmgr_psoc *psoc)
{
struct tdls_vdev_priv_obj *vdev_priv_obj;

View File

@@ -354,6 +354,23 @@ bool ucfg_tdls_is_fw_wideband_capable(struct wlan_objmgr_psoc *psoc)
return soc_obj->fw_tdls_wideband_capability;
}
#ifdef WLAN_FEATURE_11BE
void ucfg_tdls_update_fw_mlo_capability(struct wlan_objmgr_psoc *psoc,
bool is_fw_tdls_mlo_capable)
{
struct tdls_soc_priv_obj *soc_obj;
soc_obj = wlan_objmgr_psoc_get_comp_private_obj(psoc,
WLAN_UMAC_COMP_TDLS);
if (!soc_obj) {
tdls_err("Failed to get tdls psoc component");
return;
}
soc_obj->fw_tdls_mlo_capable = is_fw_tdls_mlo_capable;
}
#endif
#ifdef WLAN_FEATURE_11AX
void ucfg_tdls_update_fw_11ax_capability(struct wlan_objmgr_psoc *psoc,
bool is_fw_tdls_11ax_capable)

View File

@@ -1522,6 +1522,20 @@ static void hdd_update_fw_tdls_wideband_capability(struct hdd_context *hdd_ctx,
cfg->en_tdls_wideband_support);
}
#ifdef WLAN_FEATURE_11BE
static void hdd_update_fw_tdls_mlo_capability(struct hdd_context *hdd_ctx,
struct wma_tgt_services *cfg)
{
ucfg_tdls_update_fw_mlo_capability(hdd_ctx->psoc,
cfg->en_tdls_mlo_support);
}
#else
static inline
void hdd_update_fw_tdls_mlo_capability(struct hdd_context *hdd_ctx,
struct wma_tgt_services *cfg)
{}
#endif
#ifdef WLAN_FEATURE_11AX
static void hdd_update_fw_tdls_11ax_capability(struct hdd_context *hdd_ctx,
struct wma_tgt_services *cfg)
@@ -1548,6 +1562,11 @@ void hdd_update_fw_tdls_6g_capability(struct hdd_context *hdd_ctx,
{}
#endif
#else
static inline
void hdd_update_fw_tdls_mlo_capability(struct hdd_context *hdd_ctx,
struct wma_tgt_services *cfg)
{}
static inline
void hdd_update_fw_tdls_11ax_capability(struct hdd_context *hdd_ctx,
struct wma_tgt_services *cfg)
@@ -1693,6 +1712,7 @@ static void hdd_update_tgt_services(struct hdd_context *hdd_ctx,
cfg_get(hdd_ctx->psoc,
CFG_THERMAL_MITIGATION_ENABLE);
hdd_update_fw_tdls_11ax_capability(hdd_ctx, cfg);
hdd_update_fw_tdls_mlo_capability(hdd_ctx, cfg);
hdd_set_dynamic_macaddr_update_capability(hdd_ctx, cfg);
hdd_update_fw_tdls_6g_capability(hdd_ctx, cfg);
hdd_update_fw_tdls_wideband_capability(hdd_ctx, cfg);

View File

@@ -41,6 +41,7 @@
* @en_tdls_wideband_support: Get TDLS wideband support
* @en_tdls_11ax_support: Get TDLS ax support
* @en_tdls_6g_support: Get TDLS 6g fw capability
* @en_tdls_mlo_support: Get TDLS mlo fw support
* @en_roam_offload: enable roam offload
* @en_11ax: enable 11ax
* @is_fw_mawc_capable: Motion Aided Wireless Connectivity feature
@@ -80,6 +81,9 @@ struct wma_tgt_services {
bool en_tdls_11ax_support;
bool en_tdls_6g_support;
#endif
#ifdef WLAN_FEATURE_11BE
bool en_tdls_mlo_support;
#endif
#endif /* FEATURE_WLAN_TDLS */
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
bool en_roam_offload;

View File

@@ -3358,6 +3358,25 @@ static void wma_get_service_cap_club_get_sta_in_ll_stats_req(
}
#endif /* FEATURE_CLUB_LL_STATS_AND_GET_STATION */
#ifdef WLAN_FEATURE_11BE_MLO
static void
wma_update_num_tdls_vdevs_if_11be_mlo(struct wlan_objmgr_psoc *psoc,
target_resource_config *wlan_res_cfg)
{
if (!wlan_tdls_is_fw_11be_mlo_capable(psoc))
return;
wlan_res_cfg->num_tdls_vdevs = WLAN_UMAC_MLO_MAX_VDEVS;
wma_debug("update tdls num vdevs %d", wlan_res_cfg->num_tdls_vdevs);
}
#else
static void
wma_update_num_tdls_vdevs_if_11be_mlo(struct wlan_objmgr_psoc *psoc,
target_resource_config *wlan_res_cfg)
{
}
#endif
/**
* wma_open() - Allocate wma context and initialize it.
* @cds_context: cds context
@@ -3545,6 +3564,7 @@ QDF_STATUS wma_open(struct wlan_objmgr_psoc *psoc,
}
wma_set_default_tgt_config(wma_handle, wlan_res_cfg, cds_cfg);
wma_update_num_tdls_vdevs_if_11be_mlo(psoc, wlan_res_cfg);
qdf_status = wlan_mlme_get_tx_chainmask_cck(psoc, &val);
if (qdf_status != QDF_STATUS_SUCCESS) {
@@ -5058,6 +5078,31 @@ wma_get_tdls_wideband_support(struct wmi_unified *wmi_handle,
wmi_service_tdls_wideband_support);
}
#ifdef WLAN_FEATURE_11BE
/**
* wma_get_tdls_mlo_support() - update tgt service with service tdls
* be support
* @wmi_handle: Unified wmi handle
* @cfg: target services
*
* Return: none
*/
static inline void
wma_get_tdls_mlo_support(struct wmi_unified *wmi_handle,
struct wma_tgt_services *cfg)
{
cfg->en_tdls_mlo_support =
wmi_service_enabled(wmi_handle,
wmi_service_tdls_mlo_support);
}
#else
static inline void
wma_get_tdls_mlo_support(struct wmi_unified *wmi_handle,
struct wma_tgt_services *cfg)
{
}
#endif /* WLAN_FEATURE_11BE */
#ifdef WLAN_FEATURE_11AX
/**
* wma_get_tdls_ax_support() - update tgt service with service tdls ax support
@@ -5097,6 +5142,12 @@ wma_get_tdls_6g_support(struct wmi_unified *wmi_handle,
#endif
#else
static inline void
wma_get_tdls_mlo_support(struct wmi_unified *wmi_handle,
struct wma_tgt_services *cfg)
{
}
static inline void
wma_get_tdls_ax_support(struct wmi_unified *wmi_handle,
struct wma_tgt_services *cfg)
@@ -5272,6 +5323,7 @@ static inline void wma_update_target_services(struct wmi_unified *wmi_handle,
wma_get_igmp_offload_enable(wmi_handle, cfg);
wma_get_tdls_ax_support(wmi_handle, cfg);
wma_get_tdls_mlo_support(wmi_handle, cfg);
wma_get_tdls_6g_support(wmi_handle, cfg);
wma_get_tdls_wideband_support(wmi_handle, cfg);
wma_get_dynamic_vdev_macaddr_support(wmi_handle, cfg);