wlan: Fix ULA Logic to remove EAPOL 4/4 race-condition.

Call ULA done callback from TL when it receives
EAPOL 4/4 packet. ULA done callback unblocks
set key to go through. Remove ULA logic from
SAP mode as it doesn't have race-condition.

Change-Id: Id5e08378019bb31f1829b257d32855a051ac4dcf
CRs-Fixed: 784553
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index b022c69..ac4083d 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -8356,21 +8356,6 @@
         pHostapdState = WLAN_HDD_GET_HOSTAP_STATE_PTR(pAdapter);
         if( pHostapdState->bssState == BSS_START )
         {
-            hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter);
-            vos_status = wlan_hdd_check_ula_done(pAdapter);
-
-            if ( vos_status != VOS_STATUS_SUCCESS )
-            {
-                VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
-                        "[%4d] wlan_hdd_check_ula_done returned ERROR status= %d",
-                        __LINE__, vos_status );
-
-                pHddStaCtx->roam_info.roamingState = HDD_ROAM_STATE_NONE;
-
-                status = -EINVAL;
-                goto end;
-            }
-
             status = WLANSAP_SetKeySta( pVosContext, &setKey);
 
             if ( status != eHAL_STATUS_SUCCESS )
@@ -8438,19 +8423,36 @@
                 setKey.peerMac[4], setKey.peerMac[5],
                 setKey.keyDirection);
 
-        vos_status = wlan_hdd_check_ula_done(pAdapter);
-
-        if ( vos_status != VOS_STATUS_SUCCESS )
+        /* Wait for EAPOL M4 before setting key.
+         * No need to consider Dynamic WEP as we will receive M8.
+         */
+        if ( (setKey.encType == eCSR_ENCRYPT_TYPE_AES ||
+             setKey.encType == eCSR_ENCRYPT_TYPE_TKIP) &&
+             ( 1
+#if defined WLAN_FEATURE_VOWIFI_11R
+               && pHddStaCtx->conn_info.authType != eCSR_AUTH_TYPE_FT_RSN
+               && pHddStaCtx->conn_info.authType != eCSR_AUTH_TYPE_FT_RSN_PSK
+#endif
+#ifdef FEATURE_WLAN_ESE
+               && pHddStaCtx->conn_info.authType != eCSR_AUTH_TYPE_CCKM_WPA
+               && pHddStaCtx->conn_info.authType != eCSR_AUTH_TYPE_CCKM_RSN
+#endif
+               ))
         {
-            VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
+            vos_status = wlan_hdd_check_ula_done(pAdapter);
+
+            if ( vos_status != VOS_STATUS_SUCCESS )
+            {
+               VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
                     "[%4d] wlan_hdd_check_ula_done returned ERROR status= %d",
                     __LINE__, vos_status );
 
-            pHddStaCtx->roam_info.roamingState = HDD_ROAM_STATE_NONE;
+               pHddStaCtx->roam_info.roamingState = HDD_ROAM_STATE_NONE;
 
-            status = -EINVAL;
-            goto end;
+               status = -EINVAL;
+               goto end;
 
+            }
         }
 
 #ifdef WLAN_FEATURE_VOWIFI_11R