qcacld-3.0: Add FW capability check for Multipass SAP

Add check to determine whether FW support multipass
SAP before enabling multipass support

Change-Id: I7db5a7bad6b9ac89c8c4e7c4c177695671402657
CRs-Fixed: 3515310
This commit is contained in:
Vijay Raj
2023-05-30 23:54:44 -07:00
committed by Rahul Choudhary
parent e89ec3ebc6
commit cb03ca8b08
5 changed files with 57 additions and 12 deletions

View File

@@ -3820,6 +3820,14 @@ QDF_STATUS wlan_mlme_get_phy_max_freq_range(struct wlan_objmgr_psoc *psoc,
uint32_t *low_5ghz_chan,
uint32_t *high_5ghz_chan);
/**
* wlan_mlme_is_multipass_sap() -Get multipass sap support
* @psoc: psoc pointer
*
* Return: True, if FW support multipass support.
*/
bool wlan_mlme_is_multipass_sap(struct wlan_objmgr_psoc *psoc);
#ifdef FEATURE_WDS
/**
* wlan_mlme_get_wds_mode() - Check wds mode supported

View File

@@ -2979,6 +2979,21 @@ ucfg_mlme_get_eht_mode(struct wlan_objmgr_psoc *psoc, enum wlan_eht_mode *value)
return wlan_mlme_get_eht_mode(psoc, value);
}
/**
* ucfg_mlme_is_multipass_sap() - check whether FW supports
* multipass sap capabilities
* @psoc: pointer to psoc object
*
* Inline UCFG API to be used by HDD/OSIF callers
*
* Return: True if FW support mulitpass sap
*/
static inline bool
ucfg_mlme_is_multipass_sap(struct wlan_objmgr_psoc *psoc)
{
return wlan_mlme_is_multipass_sap(psoc);
}
/**
* ucfg_mlme_set_emlsr_mode_enabled() - Set eMLSR mode flag
* @psoc: pointer to psoc object

View File

@@ -6077,6 +6077,19 @@ bool mlme_get_user_ps(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
return usr_ps_enable;
}
bool wlan_mlme_is_multipass_sap(struct wlan_objmgr_psoc *psoc)
{
struct target_psoc_info *info;
info = wlan_psoc_get_tgt_if_handle(psoc);
if (!info) {
mlme_legacy_err("target_psoc_info is null");
return QDF_STATUS_E_FAILURE;
}
return target_is_multipass_sap(info);
}
QDF_STATUS wlan_mlme_get_phy_max_freq_range(struct wlan_objmgr_psoc *psoc,
uint32_t *low_2ghz_chan,
uint32_t *high_2ghz_chan,

View File

@@ -20298,12 +20298,14 @@ void wlan_hdd_set_32bytes_kck_support(struct wiphy *wiphy)
#endif
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 5, 0))
static void wlan_hdd_set_vlan_offload(struct wiphy *wiphy)
static void wlan_hdd_set_vlan_offload(struct hdd_context *hdd_ctx)
{
wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_VLAN_OFFLOAD);
if (ucfg_mlme_is_multipass_sap(hdd_ctx->psoc))
wiphy_ext_feature_set(hdd_ctx->wiphy,
NL80211_EXT_FEATURE_VLAN_OFFLOAD);
}
#else
static void wlan_hdd_set_vlan_offload(struct wiphy *wiphy)
static void wlan_hdd_set_vlan_offload(struct hdd_context *hdd_ctx)
{
}
#endif
@@ -20405,7 +20407,7 @@ void wlan_hdd_update_wiphy(struct hdd_context *hdd_ctx)
wlan_hdd_set_ext_kek_kck_support(wiphy);
wlan_hdd_set_32bytes_kck_support(wiphy);
wlan_hdd_set_nan_secure_mode(wiphy);
wlan_hdd_set_vlan_offload(wiphy);
wlan_hdd_set_vlan_offload(hdd_ctx);
}
/**
@@ -21443,10 +21445,14 @@ static int __wlan_hdd_change_station(struct wiphy *wiphy,
* For Encrypted SAP session, this will be done as
* part of eSAP_STA_SET_KEY_EVENT
*/
status = wlan_hdd_set_vlan_config(adapter,
(uint8_t *)mac);
if (QDF_IS_STATUS_ERROR(status))
return 0;
if (ucfg_mlme_is_multipass_sap(hdd_ctx->psoc)) {
status =
wlan_hdd_set_vlan_config(adapter,
(uint8_t *)mac);
if (QDF_IS_STATUS_ERROR(status))
return 0;
}
if (ap_ctx->encryption_type !=
eCSR_ENCRYPT_TYPE_NONE) {
@@ -21946,11 +21952,13 @@ done:
key_index, cipher);
if (!pairwise) {
soc_txrx_handle =
if (ucfg_mlme_is_multipass_sap(hdd_ctx->psoc)) {
soc_txrx_handle =
wlan_psoc_get_dp_handle(hdd_ctx->psoc);
wlan_hdd_set_vlan_groupkey(soc_txrx_handle,
wlan_vdev_get_id(vdev),
params, key_index);
wlan_hdd_set_vlan_groupkey(soc_txrx_handle,
wlan_vdev_get_id(vdev),
params, key_index);
}
}
break;

View File

@@ -48,6 +48,7 @@
#include "wmi_unified_param.h"
#include "wmi.h"
#include "wlan_cm_roam_public_struct.h"
#include "target_if.h"
/* Platform specific configuration for max. no. of fragments */
#define QCA_OL_11AC_TX_MAX_FRAGS 2