Browse Source

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
Padma, Santhosh Kumar 7 years ago
parent
commit
9668240906
2 changed files with 25 additions and 7 deletions
  1. 21 7
      core/wma/src/wma_mgmt.c
  2. 4 0
      core/wma/src/wma_scan_roam.c

+ 21 - 7
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;
 

+ 4 - 0
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;
 	}