wlan: Fix for not receiving probe request.

Don't receive the probe request frame when we sent P2P action
frame to avoid latency for receiving feedback from firmware.

Change-Id: I40f014c65144d29cbbcf711ea46c4e2a58cb9305
CRs-Fixed: 480347
diff --git a/CORE/HDD/src/wlan_hdd_p2p.c b/CORE/HDD/src/wlan_hdd_p2p.c
index 44953b1..66d9c50 100644
--- a/CORE/HDD/src/wlan_hdd_p2p.c
+++ b/CORE/HDD/src/wlan_hdd_p2p.c
@@ -340,7 +340,8 @@
         sme_RemainOnChannel(
                        WLAN_HDD_GET_HAL_CTX(pAdapter), sessionId,
                        chan->hw_value, duration,
-                       wlan_hdd_remain_on_channel_callback, pAdapter );
+                       wlan_hdd_remain_on_channel_callback, pAdapter,
+                       (tANI_U8)(request_type == REMAIN_ON_CHANNEL_REQUEST)? TRUE:FALSE);
 
         if( REMAIN_ON_CHANNEL_REQUEST == request_type)
         {
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index 0dfddd0..997a732 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -452,6 +452,7 @@
     tANI_U8  chnNum;
     tANI_U8  phyMode;
     tANI_U32 duration;
+    tANI_U8  isProbeRequestAllowed;
     tANI_U8  probeRspIe[1];
 }tSirRemainOnChnReq, *tpSirRemainOnChnReq;
 
diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h
index 4f0fb91..b4eccfd 100644
--- a/CORE/MAC/src/include/sirParams.h
+++ b/CORE/MAC/src/include/sirParams.h
@@ -118,7 +118,8 @@
     eSIR_LINK_FINISH_SCAN_STATE = 11,
     eSIR_LINK_INIT_CAL_STATE    = 12,
     eSIR_LINK_FINISH_CAL_STATE  = 13,
-    eSIR_LINK_LISTEN_STATE = 14
+    eSIR_LINK_LISTEN_STATE      = 14,
+    eSIR_LINK_SEND_ACTION_STATE = 15,
 } tSirLinkState;
 
 
diff --git a/CORE/MAC/src/pe/lim/limP2P.c b/CORE/MAC/src/pe/lim/limP2P.c
index 6801371..d78e8b6 100644
--- a/CORE/MAC/src/pe/lim/limP2P.c
+++ b/CORE/MAC/src/pe/lim/limP2P.c
@@ -194,9 +194,10 @@
                 }
 #endif
 
-                if ((limSetLinkState(pMac, eSIR_LINK_LISTEN_STATE,
-                    nullBssid, pMac->lim.gSelfMacAddr, 
-                    limSetLinkStateP2PCallback, NULL)) != eSIR_SUCCESS)
+                if ((limSetLinkState(pMac, MsgBuff->isProbeRequestAllowed?
+                                     eSIR_LINK_LISTEN_STATE:eSIR_LINK_SEND_ACTION_STATE,
+                                     nullBssid, pMac->lim.gSelfMacAddr,
+                                     limSetLinkStateP2PCallback, NULL)) != eSIR_SUCCESS)
                 {
                     limLog( pMac, LOGE, "Unable to change link state");
                     goto error;
@@ -377,7 +378,8 @@
         goto error;
     }
 
-    if ((limSetLinkState(pMac, eSIR_LINK_LISTEN_STATE,nullBssid,
+    if ((limSetLinkState(pMac, MsgRemainonChannel->isProbeRequestAllowed?
+                         eSIR_LINK_LISTEN_STATE:eSIR_LINK_SEND_ACTION_STATE,nullBssid,
                          pMac->lim.gSelfMacAddr, limSetLinkStateP2PCallback, 
                          NULL)) != eSIR_SUCCESS)
     {
diff --git a/CORE/SAP/src/sapModule.c b/CORE/SAP/src/sapModule.c
index b6a184f..7eecc95 100644
--- a/CORE/SAP/src/sapModule.c
+++ b/CORE/SAP/src/sapModule.c
@@ -39,6 +39,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
+
 /*===========================================================================
 
                       s a p M o d u l e . C
@@ -53,9 +54,9 @@
 
   Are listed for each API below.
 
-  Copyright (c) 2010 QUALCOMM Incorporated.
+  Copyright (c) 2010 Qualcomm Technologies, Inc.
   All Rights Reserved.
-  Qualcomm Confidential and Proprietary
+  Qualcomm Technologies Confidential and Proprietary
 ===========================================================================*/
 
 /*===========================================================================
@@ -675,82 +676,6 @@
 }// WLANSAP_StartBss
 
 /*==========================================================================
-  FUNCTION    WLANSAP_SetMacACL
-
-  DESCRIPTION
-    This api function provides SAP to set mac list entry in accept list as well
-    as deny list
-
-  DEPENDENCIES
-
-  PARAMETERS
-
-    IN
-    pContext            : Pointer to Sap Context structure
-    pQctCommitConfig    : Pointer to configuration structure passed down from
-                          HDD(HostApd for Android)
-
-  RETURN VALUE
-    The result code associated with performing the operation
-
-    VOS_STATUS_E_FAULT: Pointer to SAP cb is NULL ; access would cause a page
-                         fault
-    VOS_STATUS_SUCCESS: Success
-
-  SIDE EFFECTS
-============================================================================*/
-VOS_STATUS
-WLANSAP_SetMacACL
-(
-    v_PVOID_t  pvosGCtx,   //pwextCtx
-    tsap_Config_t *pConfig
-)
-{
-    VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
-    ptSapContext  pSapCtx = NULL;
-
-    VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
-                 "WLANSAP_SetMacACL");
-
-    if (VOS_STA_SAP_MODE == vos_get_conparam ())
-    {
-        pSapCtx = VOS_GET_SAP_CB(pvosGCtx);
-        if ( NULL == pSapCtx )
-        {
-            VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
-                       "%s: Invalid SAP pointer from pvosGCtx", __func__);
-            return VOS_STATUS_E_FAULT;
-        }
-
-        // Copy MAC filtering settings to sap context
-        pSapCtx->eSapMacAddrAclMode = pConfig->SapMacaddr_acl;
-
-        if (eSAP_DENY_UNLESS_ACCEPTED == pSapCtx->eSapMacAddrAclMode)
-        {
-            vos_mem_copy(pSapCtx->acceptMacList, pConfig->accept_mac,
-                                                 sizeof(pConfig->accept_mac));
-            pSapCtx->nAcceptMac = pConfig->num_accept_mac;
-            sapSortMacList(pSapCtx->acceptMacList, pSapCtx->nAcceptMac);
-        }
-        else if (eSAP_ACCEPT_UNLESS_DENIED == pSapCtx->eSapMacAddrAclMode)
-        {
-            vos_mem_copy(pSapCtx->denyMacList, pConfig->deny_mac,
-                                               sizeof(pConfig->deny_mac));
-            pSapCtx->nDenyMac = pConfig->num_deny_mac;
-            sapSortMacList(pSapCtx->denyMacList, pSapCtx->nDenyMac);
-        }
-    }
-    else
-    {
-        VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
-                       "%s : SoftAp role has not been enabled", __func__);
-        return VOS_STATUS_E_FAULT;
-    }
-
-    return vosStatus;
-}//WLANSAP_SetMacACL
-
-/*==========================================================================
   FUNCTION    WLANSAP_StopBss
 
   DESCRIPTION
@@ -1087,7 +1012,7 @@
             {
                 //error check
                 // if list is already at max, return failure
-                if (pSapCtx->nAcceptMac == MAX_ACL_MAC_ADDRESS)
+                if (pSapCtx->nAcceptMac == MAX_MAC_ADDRESS_ACCEPTED)
                 {
                     VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
                             "White list is already maxed out. Cannot accept %02x:%02x:%02x:%02x:%02x:%02x",
@@ -1150,7 +1075,7 @@
             {
                 //error check
                 // if list is already at max, return failure
-                if (pSapCtx->nDenyMac == MAX_ACL_MAC_ADDRESS)
+                if (pSapCtx->nDenyMac == MAX_MAC_ADDRESS_ACCEPTED)
                 {
                     VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
                             "Black list is already maxed out. Cannot accept %02x:%02x:%02x:%02x:%02x:%02x",
@@ -2176,7 +2101,7 @@
         }
 
         halStatus = sme_RemainOnChannel( hHal, pSapCtx->sessionId,
-                          channel, duration, callback, pContext );
+                          channel, duration, callback, pContext, TRUE );
 
         if( eHAL_STATUS_SUCCESS == halStatus )
         {
diff --git a/CORE/SME/inc/p2p_Api.h b/CORE/SME/inc/p2p_Api.h
index c0b7554..a751f54 100644
--- a/CORE/SME/inc/p2p_Api.h
+++ b/CORE/SME/inc/p2p_Api.h
@@ -39,14 +39,16 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
+
+
 /******************************************************************************
 *
 * Name:  p2p_Api.h
 *
 * Description: P2P FSM defines.
 *
-* Copyright 2008 (c) Qualcomm, Incorporated.  All Rights Reserved.
-* Qualcomm Confidential and Proprietary.
+* Copyright 2008 (c) Qualcomm Technologies, Inc.  All Rights Reserved.
+* Qualcomm Technologies Confidential and Proprietary.
 *
 ******************************************************************************/
 
@@ -489,11 +491,11 @@
 #endif
 } tp2pContext, *tPp2pContext;
 
-
 eHalStatus sme_RemainOnChannel( tHalHandle hHal, tANI_U8 sessionId,
                                 tANI_U8 channel, tANI_U32 duration,
-                                remainOnChanCallback callback, 
-                                void *pContext );
+                                remainOnChanCallback callback,
+                                void *pContext,
+                                tANI_U8 isP2PProbeReqAllowed);
 eHalStatus sme_ReportProbeReq( tHalHandle hHal, tANI_U8 flag );
 eHalStatus sme_updateP2pIe( tHalHandle hHal, void *p2pIe, 
                             tANI_U32 p2pIeLength );
@@ -509,11 +511,14 @@
 eHalStatus p2pRemainOnChannel( tHalHandle hHal, tANI_U8 sessionId,
                                tANI_U8 channel, tANI_U32 duration,
                                remainOnChanCallback callback, void *pContext,
+                               tANI_U8 isP2PProbeReqAllowed,
                                eP2PRemainOnChnReason reason);
 #else
 eHalStatus p2pRemainOnChannel( tHalHandle hHal, tANI_U8 sessionId,
                                tANI_U8 channel, tANI_U32 duration,
-                               remainOnChanCallback callback, void *pContext);
+                               remainOnChanCallback callback,
+                               void *pContext,
+                               tANI_U8 isP2PProbeReqAllowed);
 #endif
 eHalStatus p2pSendAction( tHalHandle hHal, tANI_U8 sessionId,
                           const tANI_U8 *pBuf, tANI_U32 len,
diff --git a/CORE/SME/inc/smeInside.h b/CORE/SME/inc/smeInside.h
index c885744..e2c09c1 100644
--- a/CORE/SME/inc/smeInside.h
+++ b/CORE/SME/inc/smeInside.h
@@ -112,6 +112,7 @@
     tANI_U8 chn;
     tANI_U8 phyMode;
     tANI_U32 duration;
+    tANI_U8 isP2PProbeReqAllowed;
     void* callback;
     void* callbackCtx;
 }tRemainChlCmd;
diff --git a/CORE/SME/src/p2p/p2p_Api.c b/CORE/SME/src/p2p/p2p_Api.c
index 75efe47..87be42b 100644
--- a/CORE/SME/src/p2p/p2p_Api.c
+++ b/CORE/SME/src/p2p/p2p_Api.c
@@ -39,6 +39,8 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
+
+
 #include "sme_Api.h"
 #include "smsDebug.h"
 #include "csrInsideApi.h"
@@ -122,6 +124,7 @@
         pMsg->phyMode = p2pRemainonChn->u.remainChlCmd.phyMode;
         pMsg->duration = p2pRemainonChn->u.remainChlCmd.duration;
         pMsg->sessionId = p2pRemainonChn->sessionId;
+        pMsg->isProbeRequestAllowed = p2pRemainonChn->u.remainChlCmd.isP2PProbeReqAllowed;
 #ifdef WLAN_FEATURE_P2P_INTERNAL
         pMsg->sessionId = pSession->sessionId;
         if( p2pContext->probeRspIeLength )
@@ -738,7 +741,7 @@
 eHalStatus p2pRemainOnChannel(tHalHandle hHal, tANI_U8 sessionId,
          tANI_U8 channel, tANI_U32 duration,
         remainOnChanCallback callback, 
-        void *pContext
+        void *pContext, tANI_U8 isP2PProbeReqAllowed
 #ifdef WLAN_FEATURE_P2P_INTERNAL
         , eP2PRemainOnChnReason reason
 #endif
@@ -771,6 +774,7 @@
         pRemainChlCmd->sessionId = sessionId;
         pRemainChlCmd->u.remainChlCmd.chn = channel;
         pRemainChlCmd->u.remainChlCmd.duration = duration;
+        pRemainChlCmd->u.remainChlCmd.isP2PProbeReqAllowed = isP2PProbeReqAllowed;
         pRemainChlCmd->u.remainChlCmd.callback = callback;
         pRemainChlCmd->u.remainChlCmd.callbackCtx = pContext;
     
@@ -1069,7 +1073,7 @@
    p2pContext->PeerFound = TRUE;
    smsLog( pMac, LOGE, "%s Calling remain on channel ", __func__);
    status = p2pRemainOnChannel( pMac, p2pContext->SMEsessionId, p2pContext->P2PListenChannel/*pScanResult->BssDescriptor.channelId*/, P2P_REMAIN_ON_CHAN_TIMEOUT_LOW,
-                                    NULL, NULL, eP2PRemainOnChnReasonSendFrame);
+                                    NULL, NULL, TRUE, eP2PRemainOnChnReasonSendFrame);
    if(status != eHAL_STATUS_SUCCESS)
    {
       smsLog( pMac, LOGE, "%s remain on channel failed", __func__);
@@ -1364,7 +1368,7 @@
 
          if(p2pRemainOnChannel( pMac, pP2pContext->SMEsessionId, 
                                       pP2pContext->P2PListenChannel, P2P_REMAIN_ON_CHAN_TIMEOUT_LOW,
-                                      NULL, NULL, eP2PRemainOnChnReasonSendFrame))
+                                      NULL, NULL, TRUE, eP2PRemainOnChnReasonSendFrame))
          {
             VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,  "%s remain on channel failed", __func__);
          }
@@ -1470,7 +1474,7 @@
       VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO, "%s Calling RemainOnChannel with duration %d on channel %d",
              __func__, p2pContext->listenDuration, p2pContext->P2PListenChannel);
       status = p2pRemainOnChannel( p2pContext->hHal, p2pContext->SMEsessionId, p2pContext->P2PListenChannel, p2pContext->listenDuration, 
-                                    p2pListenStateDiscoverableCallback, p2pContext, eP2PRemainOnChnReasonListen);
+                                    p2pListenStateDiscoverableCallback, p2pContext, TRUE, eP2PRemainOnChnReasonListen);
    }
    else
    {
@@ -1552,7 +1556,7 @@
                      __func__, pMac->p2pContext[sessionId].listenDuration, pMac->p2pContext[sessionId].P2PListenChannel);
          p2pRemainOnChannel( pMac, pMac->p2pContext[sessionId].SMEsessionId, pMac->p2pContext[sessionId].P2PListenChannel, 
                               pMac->p2pContext[sessionId].listenDuration, p2pListenStateDiscoverableCallback, 
-                              &pMac->p2pContext[sessionId], eP2PRemainOnChnReasonListen);
+                              &pMac->p2pContext[sessionId], TRUE, eP2PRemainOnChnReasonListen);
       }
       else
       {
@@ -1573,7 +1577,7 @@
                      __func__, pMac->p2pContext[sessionId].listenDuration, pMac->p2pContext[sessionId].P2PListenChannel);
          p2pRemainOnChannel( pMac, pMac->p2pContext[sessionId].SMEsessionId, pMac->p2pContext[sessionId].P2PListenChannel, 
                               pMac->p2pContext[sessionId].listenDuration, p2pListenStateDiscoverableCallback, 
-                              &pMac->p2pContext[sessionId], eP2PRemainOnChnReasonListen);
+                              &pMac->p2pContext[sessionId], TRUE, eP2PRemainOnChnReasonListen);
       }
       else
       {
@@ -1605,7 +1609,7 @@
                      __func__, pMac->p2pContext[sessionId].listenDuration, pMac->p2pContext[sessionId].P2PListenChannel);
          p2pRemainOnChannel( pMac, pMac->p2pContext[sessionId].SMEsessionId, pMac->p2pContext[sessionId].P2PListenChannel, 
                               pMac->p2pContext[sessionId].listenDuration, p2pListenStateDiscoverableCallback, 
-                              &pMac->p2pContext[sessionId], eP2PRemainOnChnReasonListen);
+                              &pMac->p2pContext[sessionId], TRUE, eP2PRemainOnChnReasonListen);
       }
       
       break;
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index 4ecbe9d..85dbe6f 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -5641,18 +5641,19 @@
     \param context - HDD Callback param
     \return eHalStatus
   ---------------------------------------------------------------------------*/
-
 eHalStatus sme_RemainOnChannel(tHalHandle hHal, tANI_U8 sessionId,
                                tANI_U8 channel, tANI_U32 duration,
-                               remainOnChanCallback callback, 
-                               void *pContext)
+                               remainOnChanCallback callback,
+                               void *pContext,
+                               tANI_U8 isP2PProbeReqAllowed)
 {
   eHalStatus status = eHAL_STATUS_SUCCESS;
   tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
 
   if ( eHAL_STATUS_SUCCESS == ( status = sme_AcquireGlobalLock( &pMac->sme ) ) )
   {
-    status = p2pRemainOnChannel (hHal, sessionId, channel, duration, callback, pContext
+    status = p2pRemainOnChannel (hHal, sessionId, channel, duration, callback, pContext,
+                                 isP2PProbeReqAllowed
 #ifdef WLAN_FEATURE_P2P_INTERNAL
                                 , eP2PRemainOnChnReasonUnknown
 #endif
diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi.h b/CORE/WDI/CP/inc/wlan_qct_wdi.h
index d18d099..12580a5 100644
--- a/CORE/WDI/CP/inc/wlan_qct_wdi.h
+++ b/CORE/WDI/CP/inc/wlan_qct_wdi.h
@@ -2612,6 +2612,7 @@
     WDI_LINK_INIT_CAL_STATE          = 12,
     WDI_LINK_FINISH_CAL_STATE        = 13,
     WDI_LINK_LISTEN_STATE            = 14,
+    WDI_LINK_SEND_ACTION_STATE       = 15,
     WDI_LINK_MAX                     = 0x7FFFFFFF
 } WDI_LinkStateType;
 
diff --git a/CORE/WDI/CP/src/wlan_qct_wdi.c b/CORE/WDI/CP/src/wlan_qct_wdi.c
index a113a8e..37c4f0f 100644
--- a/CORE/WDI/CP/src/wlan_qct_wdi.c
+++ b/CORE/WDI/CP/src/wlan_qct_wdi.c
@@ -22753,6 +22753,9 @@
   case WDI_LINK_LISTEN_STATE:
     return eSIR_LINK_LISTEN_STATE;
 
+  case WDI_LINK_SEND_ACTION_STATE:
+    return eSIR_LINK_SEND_ACTION_STATE;
+
   default:
     return eSIR_LINK_MAX;
   }