qcacld-3.0: Add INI support for FIPS handshake offload feature

Add ini support for FIPS 4-way hanshake offload to firmware. FIPS
offload feature will add support to handle LFR 3.0 connection only
(auth/reassoc). If this ini is set then firmware will offload
4-way HS to supplicant. In the Roam sync indication firmware will
inform connected and not authenticated so that supplicant can take
care of 4-way HS.

Change-Id: I3da58910218ffc57094cac4c3cab4572631d9404
CRs-Fixed: 2459182
This commit is contained in:
Yeshwanth Sriram Guntuka 2019-05-24 13:54:15 +05:30 committed by nshrivas
parent b3472f0fcd
commit c52f24d0f4
6 changed files with 67 additions and 1 deletions

View File

@ -432,6 +432,8 @@ static void mlme_init_generic_cfg(struct wlan_objmgr_psoc *psoc,
cfg_get(psoc, CFG_REMOVE_TIME_STAMP_SYNC_CMD);
gen->enable_change_channel_bandwidth =
cfg_get(psoc, CFG_CHANGE_CHANNEL_BANDWIDTH);
gen->disable_4way_hs_offload =
cfg_get(psoc, CFG_DISABLE_4WAY_HS_OFFLOAD);
}
static void mlme_init_edca_ani_cfg(struct wlan_mlme_edca_params *edca_params)

View File

@ -625,6 +625,28 @@
CFG_CHANGE_CHANNEL_BANDWIDTH_DEFAULT, \
"enable change channel bw")
/*
* <ini>
* disable_4way_hs_offload - Enable/Disable 4 way handshake offload to firmware
* @Min: 0
* @Max: 1
* @Default: 0
*
* 0 4-way HS to be handled in firmware
* 1 4-way HS to be handled in supplicant
*
* Related: None
*
* Supported Feature: STA Roaming
*
* Usage: External
*
* </ini>
*/
#define CFG_DISABLE_4WAY_HS_OFFLOAD CFG_INI_BOOL("disable_4way_hs_offload", \
0, \
"Enable/disable 4 way handshake offload to firmware")
#define CFG_GENERIC_ALL \
CFG(CFG_ENABLE_DEBUG_PACKET_LOG) \
CFG(CFG_PMF_SA_QUERY_MAX_RETRIES) \
@ -642,6 +664,7 @@
CFG(CFG_ENABLE_LPASS_SUPPORT) \
CFG(CFG_ENABLE_SELF_RECOVERY) \
CFG(CFG_ENABLE_DEAUTH_TO_DISASSOC_MAP) \
CFG(CFG_DISABLE_4WAY_HS_OFFLOAD) \
CFG(CFG_SAP_DOT11MC) \
CFG(CFG_ENABLE_FATAL_EVENT_TRIGGER) \
CFG(CFG_SUB_20_CHANNEL_WIDTH) \

View File

@ -2214,4 +2214,14 @@ wlan_mlme_get_wps_uuid(struct wlan_mlme_wps_params *wps_params, uint8_t *data);
QDF_STATUS
wlan_mlme_get_self_gen_frm_pwr(struct wlan_objmgr_psoc *psoc,
uint32_t *value);
/*
* wlan_mlme_get_4way_hs_offload() - get 4-way hs offload to fw cfg
* @psoc: pointer to psoc object
* @val: Pointer to the value which will be filled for the caller
*
* Return: QDF Status
*/
QDF_STATUS
wlan_mlme_get_4way_hs_offload(struct wlan_objmgr_psoc *psoc, bool *value);
#endif /* _WLAN_MLME_API_H_ */

View File

@ -1063,6 +1063,7 @@ struct wlan_mlme_chainmask {
* @data_stall_recovery_fw_support: whether FW supports Data stall recovery.
* @enable_change_channel_bandwidth: enable/disable change channel bw in mission
* mode
* @disable_4way_hs_offload: enable/disable 4 way handshake offload to firmware
*/
struct wlan_mlme_generic {
enum band_info band_capability;
@ -1093,6 +1094,7 @@ struct wlan_mlme_generic {
bool enable_remove_time_stamp_sync_cmd;
bool data_stall_recovery_fw_support;
bool enable_change_channel_bandwidth;
bool disable_4way_hs_offload;
};
/*

View File

@ -3415,3 +3415,20 @@ QDF_STATUS wlan_mlme_ibss_power_save_setup(struct wlan_objmgr_psoc *psoc,
return QDF_STATUS_SUCCESS;
}
QDF_STATUS
wlan_mlme_get_4way_hs_offload(struct wlan_objmgr_psoc *psoc, bool *value)
{
struct wlan_mlme_psoc_obj *mlme_obj;
mlme_obj = mlme_get_psoc_obj(psoc);
if (!mlme_obj) {
*value = cfg_default(CFG_DISABLE_4WAY_HS_OFFLOAD);
mlme_legacy_err("Failed to get MLME Obj");
return QDF_STATUS_E_FAILURE;
}
*value = mlme_obj->cfg.gen.disable_4way_hs_offload;
return QDF_STATUS_SUCCESS;
}

View File

@ -62,6 +62,7 @@
#include <wlan_utility.h>
#include <wlan_mlme_main.h>
#include "host_diag_core_log.h"
#include <wlan_mlme_api.h>
/* MCS Based rate table */
/* HT MCS parameters with Nss = 1 */
@ -4460,11 +4461,22 @@ static void wma_set_roam_offload_flag(tp_wma_handle wma, uint8_t vdev_id,
{
QDF_STATUS status;
uint32_t flag = 0;
bool disable_4way_hs_offload;
if (is_set)
if (is_set) {
flag = WMI_ROAM_FW_OFFLOAD_ENABLE_FLAG |
WMI_ROAM_BMISS_FINAL_SCAN_ENABLE_FLAG;
wlan_mlme_get_4way_hs_offload(wma->psoc,
&disable_4way_hs_offload);
/*
* If 4-way HS offload is disabled then let supplicant handle
* 4way HS and firmware will still do LFR3.0 till reassoc phase.
*/
if (disable_4way_hs_offload)
flag |= WMI_VDEV_PARAM_SKIP_ROAM_EAPOL_4WAY_HANDSHAKE;
}
WMA_LOGD("%s: vdev_id:%d, is_set:%d, flag:%d, roam_offload_enabled:%d",
__func__, vdev_id, is_set, flag,
wma->interfaces[vdev_id].roam_offload_enabled);