qcacld-3.0: Handle wmi_key_material_ext tlv of ROAM_SYNCH event

With current design, firmware sends the kck, kek and replay
counters as part of wmi_key_material tlv over the
WMI_ROAM_SYNCH_EVENTID event. But the maximum supported kck key
length in wmi_key_material was 16 bytes. But for FT Suite-B
(akm 00:0f:ac:13), the kck_bits is 24 bytes long and cannot be
sent over wmi_key_material. So firmware sends kck, kek and
replay counter values over the new tlv wmi_key_material_ext.

Host driver copies the kck key with fixed 16 byte length to the
upper layers. Introduce kck_length parameter in csr_roam_info
and roam_offload_synch_ind structures and copy kck based on this
length.

Also fix maximum number of AKM suites supported to 5, as some
certification test cases advertise 5 akms.

Change-Id: Iab050e3e3f7efead8070a02094998d15f7ffcbd0
CRs-Fixed: 2400770
Этот коммит содержится в:
Pragaspathi Thilagaraj
2019-02-19 00:42:28 +05:30
коммит произвёл nshrivas
родитель e9b9132f7e
Коммит 957b7ecf57
6 изменённых файлов: 45 добавлений и 5 удалений

Просмотреть файл

@@ -1690,6 +1690,7 @@ static void mlme_init_lfr_cfg(struct wlan_objmgr_psoc *psoc,
cfg_get(psoc, CFG_ROAM_INACTIVE_COUNT);
lfr->roam_scan_period_after_inactivity =
cfg_get(psoc, CFG_POST_INACTIVITY_ROAM_SCAN_PERIOD);
lfr->fw_akm_bitmap = 0;
mlme_init_roam_offload_cfg(psoc, lfr);
mlme_init_ese_cfg(psoc, lfr);

Просмотреть файл

@@ -1267,6 +1267,14 @@ struct bss_load_trigger {
int32_t rssi_threshold_24ghz;
};
/*
* AKM suites supported by firmware for
* roaming
*/
#define AKM_FT_SAE 0
#define AKM_FT_SUITEB_SHA384 1
#define AKM_FT_FILS 2
/*
* @mawc_roam_enabled: Enable/Disable MAWC during roaming
* @enable_fast_roam_in_concurrency:Enable LFR roaming on STA during concurrency
@@ -1362,6 +1370,7 @@ struct bss_load_trigger {
* during roam_scan_inactivity_time.
* @roam_scan_period_after_inactivity: Roam scan period after device was in
* inactive state
* @fw_akm_bitmap: Supported Akm suites of firmware
*/
struct wlan_mlme_lfr_cfg {
bool mawc_roam_enabled;
@@ -1459,6 +1468,7 @@ struct wlan_mlme_lfr_cfg {
uint32_t roam_scan_inactivity_time;
uint32_t roam_inactive_data_packet_count;
uint32_t roam_scan_period_after_inactivity;
uint32_t fw_akm_bitmap;
};
/**

Просмотреть файл

@@ -1079,6 +1079,7 @@ ucfg_mlme_set_roaming_offload(struct wlan_objmgr_psoc *psoc,
return QDF_STATUS_SUCCESS;
}
#endif
/**
* ucfg_mlme_get_first_scan_bucket_threshold() - Get first scan bucket thre
* @psoc: pointer to psoc object
@@ -1090,6 +1091,18 @@ QDF_STATUS
ucfg_mlme_get_first_scan_bucket_threshold(struct wlan_objmgr_psoc *psoc,
uint8_t *val);
/**
* ucfg_mlme_set_fw_supported_roaming_akm() - update the supported roaming
* akm suites advertised by the firmware via wmi service capability
* @psoc: pointer to psoc object
* @val: bitmap value based on firmware capabilities
*
* Return: QDF Status
*/
QDF_STATUS
ucfg_mlme_set_fw_supported_roaming_akm(struct wlan_objmgr_psoc *psoc,
uint32_t val);
/**
* ucfg_mlme_is_mawc_enabled() - MAWC enabled or not
* @psoc: pointer to psoc object

Просмотреть файл

@@ -774,6 +774,20 @@ ucfg_mlme_get_first_scan_bucket_threshold(struct wlan_objmgr_psoc *psoc,
return QDF_STATUS_SUCCESS;
}
QDF_STATUS
ucfg_mlme_set_fw_supported_roaming_akm(struct wlan_objmgr_psoc *psoc,
uint32_t val)
{
struct wlan_mlme_psoc_obj *mlme_obj;
mlme_obj = mlme_get_psoc_obj(psoc);
if (!mlme_obj)
return QDF_STATUS_E_INVAL;
mlme_obj->cfg.lfr.fw_akm_bitmap = val;
return QDF_STATUS_SUCCESS;
}
QDF_STATUS
ucfg_mlme_is_mawc_enabled(struct wlan_objmgr_psoc *psoc, bool *val)
{