wlan: Support for GTK rekey offload

Earlier case supplicant was handling GTK rekeying
even when wlan suspended thus wlan host had to
come out from the sleep for GTK rekeying.
with this change, support for GTK offload has been added
so that firmware will take care of GTK rekey when
wlan is in suspend mode.

CRs-fixed: 467114
Change-Id: Ia7e62e3a0048fd2417edbd052748e3272367a237
diff --git a/CORE/WDI/CP/src/wlan_qct_wdi.c b/CORE/WDI/CP/src/wlan_qct_wdi.c
index a429692..ab41e2d 100644
--- a/CORE/WDI/CP/src/wlan_qct_wdi.c
+++ b/CORE/WDI/CP/src/wlan_qct_wdi.c
@@ -25339,7 +25339,7 @@
   void*                      pUserData
 )
 {
-   WDI_EventInfoType      wdiEventData = {0};
+   WDI_EventInfoType      wdiEventData;
    /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
 
    /*------------------------------------------------------------------------
@@ -25400,7 +25400,7 @@
   void*                          pUserData
 )
 {
-   WDI_EventInfoType      wdiEventData = {0};
+   WDI_EventInfoType      wdiEventData;
    /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
 
    /*------------------------------------------------------------------------
@@ -25572,7 +25572,7 @@
    if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_GTK_OFFLOAD_GETINFO_REQ, 
                          sizeof(halGtkOffloadGetInfoReqParams),
                          &pSendBuffer, &usDataOffset, &usSendSize))||
-       ( usSendSize < ( usDataOffset + sizeof(halGtkOffloadGetInfoReqParams)))
+       ( usSendSize < ( usDataOffset + sizeof(halGtkOffloadGetInfoReqParams))))
    {
       WPAL_TRACE( eWLAN_MODULE_DAL_CTRL,  eWLAN_PAL_TRACE_LEVEL_WARN,
                   "Unable to get send buffer in WDI_ProcessGTKOffloadGetInfoReq() %x %x %x",
@@ -25662,7 +25662,7 @@
                    sizeof(halGtkOffloadRspParams));
 
        wdiGtkOffloadRsparams.ulStatus =   
-                       WDI_HAL_2_WDI_STATUS(halGtkOffloadRspParams.status);
+                       WDI_HAL_2_WDI_STATUS(halGtkOffloadRspParams.ulStatus);
        wdiGtkOffloadRsparams.bssIdx =   
                        halGtkOffloadRspParams.bssIdx;
    }
@@ -25698,6 +25698,7 @@
    WDI_GtkOffloadGetInfoCb   wdiGtkOffloadGetInfoCb = NULL;
    tHalGtkOffloadGetInfoRspParams halGtkOffloadGetInfoRspParams;
    WDI_GtkOffloadGetInfoRspParams wdiGtkOffloadGetInfoRsparams;
+   WDI_BSSSessionType*              pBSSSes = NULL;
 
    /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
 
@@ -25725,7 +25726,7 @@
                    sizeof(halGtkOffloadGetInfoRspParams));
 
        wdiGtkOffloadGetInfoRsparams.ulStatus =   
-                       WDI_HAL_2_WDI_STATUS(halGtkOffloadGetInfoRspParams.status);
+                       WDI_HAL_2_WDI_STATUS(halGtkOffloadGetInfoRspParams.ulStatus);
        wdiGtkOffloadGetInfoRsparams.ullKeyReplayCounter = 
                        halGtkOffloadGetInfoRspParams.ullKeyReplayCounter;
        wdiGtkOffloadGetInfoRsparams.ulTotalRekeyCount = 
@@ -25734,8 +25735,23 @@
                        halGtkOffloadGetInfoRspParams.ulGTKRekeyCount;
        wdiGtkOffloadGetInfoRsparams.ulIGTKRekeyCount = 
                        halGtkOffloadGetInfoRspParams.ulIGTKRekeyCount;
-       wdiGtkOffloadGetInfoRsparams.bssIdx =   
-                      halGtkOffloadGetInfoRspParams.bssIdx;
+
+       wpalMutexAcquire(&pWDICtx->wptMutex);
+       WDI_FindAssocSessionByBSSIdx(pWDICtx, halGtkOffloadGetInfoRspParams.bssIdx,
+                       &pBSSSes);
+
+       if ( NULL == pBSSSes )
+       {
+           WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+                    "Association sequence for this BSS does not exist or "
+                    "association no longer in progress - mysterious HAL response");
+           wpalMutexRelease(&pWDICtx->wptMutex);
+           return WDI_STATUS_E_NOT_ALLOWED;
+       }
+
+       wpalMemoryCopy(wdiGtkOffloadGetInfoRsparams.bssId, pBSSSes->macBSSID,
+                       sizeof (wpt_macAddr));
+       wpalMutexRelease(&pWDICtx->wptMutex);
     }
    else
     {