wlan: Add changes to send SAE auth frame to user space

propagation from qcacld-3.0 to prima

Add changes to send authentication response frame to user space
when authentication type is SAE.

Change-Id: I0b28b7550d629d6fe9f5661538ea71687f5dd989
CRs-Fixed: 2531070
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 988f27e..6a05948 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -347,6 +347,7 @@
     [NL80211_IFTYPE_STATION] = {
         .tx = 0xffff,
         .rx = BIT(SIR_MAC_MGMT_ACTION) |
+            BIT(SIR_MAC_MGMT_AUTH) |
             BIT(SIR_MAC_MGMT_PROBE_REQ),
     },
     [NL80211_IFTYPE_AP] = {
diff --git a/CORE/MAC/src/pe/lim/limProcessAuthFrame.c b/CORE/MAC/src/pe/lim/limProcessAuthFrame.c
index 894549f..58583e0 100644
--- a/CORE/MAC/src/pe/lim/limProcessAuthFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessAuthFrame.c
@@ -101,6 +101,41 @@
     return valid;
 }
 
+#ifdef WLAN_FEATURE_SAE
+/**
+ * lim_process_sae_auth_frame()-Process SAE authentication frame
+ * @mac_ctx: MAC context
+ * @rx_pkt_info: Rx packet
+ * @pe_session: PE session
+ *
+ * Return: None
+ */
+static void lim_process_sae_auth_frame(tpAniSirGlobal mac_ctx,
+                                       uint8_t *rx_pkt_info,
+                                       tpPESession pe_session)
+{
+    tpSirMacMgmtHdr mac_hdr;
+
+    mac_hdr = WDA_GET_RX_MAC_HEADER(rx_pkt_info);
+
+    limLog(mac_ctx, LOG1, FL("Received SAE Auth frame type %d subtype %d"),
+           mac_hdr->fc.type, mac_hdr->fc.subType);
+
+    if (pe_session->limMlmState != eLIM_MLM_WT_SAE_AUTH_STATE)
+        limLog(mac_ctx, LOGE,
+               FL("received SAE auth response in unexpected state %x"),
+               pe_session->limMlmState);
+
+    limSendSmeMgmtFrameInd(mac_ctx, pe_session->peSessionId,
+                           rx_pkt_info, pe_session,
+                           WDA_GET_RX_RSSI_DB(rx_pkt_info));
+}
+#else
+static void lim_process_sae_auth_frame(tpAniSirGlobal mac_ctx,
+                                       uint8_t *rx_pkt_info,
+                                       tpPESession pe_session)
+{}
+#endif
 
 /**
  * limProcessAuthFrame
@@ -162,6 +197,7 @@
     tpDphHashNode           pStaDs = NULL;
     tANI_U16                assocId = 0;
     tANI_U16                currSeqNo = 0;
+    tANI_U16                auth_alg = 0;
     /* Added For BT -AMP support */
     // Get pointer to Authentication frame header and body
  
@@ -199,6 +235,9 @@
 
     pBody = WDA_GET_RX_MPDU_DATA(pRxPacketInfo);
 
+    auth_alg = *(uint16_t *)pBody;
+    limLog(pMac, LOG1, FL("auth_alg %d "), auth_alg);
+
     //PELOG3(sirDumpBuf(pMac, SIR_LIM_MODULE_ID, LOG3, (tANI_U8*)pBd, ((tpHalBufDesc) pBd)->mpduDataOffset + frameLen);)
 
     //Restore default failure timeout
@@ -588,6 +627,10 @@
 
             goto free;
         } // else if (wlan_cfgGetInt(CFG_PRIVACY_OPTION_IMPLEMENTED))
+    } else if ((auth_alg ==
+        eSIR_AUTH_TYPE_SAE) && (LIM_IS_STA_ROLE(psessionEntry))) {
+        lim_process_sae_auth_frame(pMac, pRxPacketInfo, psessionEntry);
+        goto free;
     } // if (fc.wep)
     else
     {