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;
}