From 9668240906f68ada8fd7e3083336bcf38a5a3c17 Mon Sep 17 00:00:00 2001 From: "Padma, Santhosh Kumar" Date: Fri, 2 Feb 2018 18:16:27 +0530 Subject: [PATCH] qcacld-3.0: Add support for GMAC offload Add check for GMAC offload capability wmi_service_gmac_offload_support. If firmware supports GMAC offload, trim MMIE when driver receives PMF frame. Otherwise, driver calculates MIC and trims MMIE. Also, add support for suiteB auth types during roaming in e_csr_auth_type_to_rsn_authmode. Change-Id: Id44f44a41297ca3e462d14905f5986f904a639fd CRs-Fixed: 2185819 --- core/wma/src/wma_mgmt.c | 28 +++++++++++++++++++++------- core/wma/src/wma_scan_roam.c | 4 ++++ 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/core/wma/src/wma_mgmt.c b/core/wma/src/wma_mgmt.c index 40c200488b7e..4dfc360e4bf6 100644 --- a/core/wma/src/wma_mgmt.c +++ b/core/wma/src/wma_mgmt.c @@ -3325,6 +3325,8 @@ int wma_process_bip(tp_wma_handle wma_handle, return -EINVAL; } + WMA_LOGD(FL("key_cipher %d key_id %d"), iface->key.key_cipher, key_id); + switch (iface->key.key_cipher) { case WMI_CIPHER_AES_CMAC: if (wmi_service_enabled(wma_handle->wmi_handle, @@ -3350,15 +3352,27 @@ int wma_process_bip(tp_wma_handle wma_handle, break; case WMI_CIPHER_AES_GMAC: - if (cds_is_gmac_mmie_valid(iface->key.key, - iface->key.key_id[key_id - WMA_IGTK_KEY_INDEX_4].ipn, - (uint8_t *) wh, efrm, iface->key.key_length)) { - WMA_LOGD(FL("Protected BC/MC frame GMAC MMIE validation successful")); - /* Remove MMIE */ + if (wmi_service_enabled(wma_handle->wmi_handle, + wmi_service_gmac_offload_support)) { + /* + * if gmac offload is enabled then mmie validation is + * performed in firmware, host just need to trim the + * mmie. + */ + WMA_LOGD(FL("Trim GMAC MMIE")); qdf_nbuf_trim_tail(wbuf, cds_get_gmac_mmie_size()); } else { - WMA_LOGD(FL("BC/MC GMAC MIC error or MMIE not present, dropping the frame")); - return -EINVAL; + if (cds_is_gmac_mmie_valid(iface->key.key, + iface->key.key_id[key_id - WMA_IGTK_KEY_INDEX_4].ipn, + (uint8_t *) wh, efrm, iface->key.key_length)) { + WMA_LOGD(FL("Protected BC/MC frame GMAC MMIE validation successful")); + /* Remove MMIE */ + qdf_nbuf_trim_tail(wbuf, + cds_get_gmac_mmie_size()); + } else { + WMA_LOGD(FL("BC/MC GMAC MIC error or MMIE not present, dropping the frame")); + return -EINVAL; + } } break; diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c index c8fc8e566b75..3a02797214ad 100644 --- a/core/wma/src/wma_scan_roam.c +++ b/core/wma/src/wma_scan_roam.c @@ -673,6 +673,10 @@ A_UINT32 e_csr_auth_type_to_rsn_authmode(eCsrAuthType authtype, return WMI_AUTH_RSNA_FILS_SHA256; case eCSR_AUTH_TYPE_FILS_SHA384: return WMI_AUTH_RSNA_FILS_SHA384; + case eCSR_AUTH_TYPE_SUITEB_EAP_SHA256: + return WMI_AUTH_RSNA_SUITE_B_8021X_SHA256; + case eCSR_AUTH_TYPE_SUITEB_EAP_SHA384: + return WMI_AUTH_RSNA_SUITE_B_8021X_SHA384; default: return WMI_AUTH_NONE; }