eHalStatus sme_remainOnChnRsp( tpAniSirGlobal pMac, tANI_U8 *pMsg) { eHalStatus status = eHAL_STATUS_SUCCESS; tListElem *pEntry = NULL; tSmeCmd *pCommand = NULL; tANI_BOOLEAN fFound; tSirSmeRsp *pRsp = (tSirSmeRsp *)pMsg; if (pMac->fP2pListenOffload) pEntry = csrLLPeekHead(&pMac->sme.smeScanCmdActiveList, LL_ACCESS_LOCK); else pEntry = csrLLPeekHead(&pMac->sme.smeCmdActiveList, LL_ACCESS_LOCK); if( pEntry ) { pCommand = GET_BASE_ADDR(pEntry, tSmeCmd, Link); if( eSmeCommandRemainOnChannel == pCommand->command ) { remainOnChanCallback callback = pCommand->u.remainChlCmd.callback; /* process the msg */ if( callback ) callback(pMac, pCommand->u.remainChlCmd.callbackCtx, pRsp->statusCode); if (pMac->fP2pListenOffload) { fFound = csrLLRemoveEntry( &pMac->sme.smeScanCmdActiveList, pEntry, LL_ACCESS_LOCK); } else { fFound = csrLLRemoveEntry( &pMac->sme.smeCmdActiveList, pEntry, LL_ACCESS_LOCK); } if (fFound) { /* Now put this command back on the available command list */ smeReleaseCommand(pMac, pCommand); } smeProcessPendingQueue( pMac ); } } return status; }
/* * common routine to remove TDLS cmd from SME command list.. * commands are removed after getting reponse from PE. */ eHalStatus csrTdlsRemoveSmeCmd(tpAniSirGlobal pMac, eSmeCommandType cmdType) { eHalStatus status = eHAL_STATUS_FAILURE; tListElem *pEntry; tSmeCmd *pCommand; pEntry = csrLLPeekHead(&pMac->sme.smeCmdActiveList, LL_ACCESS_LOCK); if( pEntry ) { pCommand = GET_BASE_ADDR(pEntry, tSmeCmd, Link); if( cmdType == pCommand->command ) { if( csrLLRemoveEntry( &pMac->sme.smeCmdActiveList, pEntry, LL_ACCESS_LOCK ) ) { vos_mem_zero( &pCommand->u.tdlsCmd, sizeof( tTdlsCmd ) ); csrReleaseCommand( pMac, pCommand ); smeProcessPendingQueue( pMac ); status = eHAL_STATUS_SUCCESS ; } } } return status ; }