prima: WLAN Driver Release 3.2.0.9
diff --git a/CORE/MAC/src/pe/pmm/pmmApi.c b/CORE/MAC/src/pe/pmm/pmmApi.c
index 2070549..79a4d12 100644
--- a/CORE/MAC/src/pe/pmm/pmmApi.c
+++ b/CORE/MAC/src/pe/pmm/pmmApi.c
@@ -246,7 +246,7 @@
/* Disable heartbeat timer as well */
if(pMac->lim.limTimers.gLimHeartBeatTimer.pMac)
{
- MTRACE(macTrace(pMac, TRACE_CODE_TIMER_DEACTIVATE, 0, eLIM_HEART_BEAT_TIMER));
+ MTRACE(macTrace(pMac, TRACE_CODE_TIMER_DEACTIVATE, NO_SESSION, eLIM_HEART_BEAT_TIMER));
tx_timer_deactivate(&pMac->lim.limTimers.gLimHeartBeatTimer);
}
}
@@ -428,8 +428,8 @@
if ( ((pMac->pmm.gPmmState != ePMM_STATE_READY) &&
(pMac->pmm.gPmmState != ePMM_STATE_BMPS_WAKEUP)) ||
limIsSystemInScanState(pMac) ||
- (pMac->lim.gLimSpecMgmt.dot11hChanSwState == eLIM_11H_CHANSW_RUNNING) ||
- (pMac->lim.gLimSpecMgmt.quietState == eLIM_QUIET_RUNNING))
+ limIsChanSwitchRunning(pMac) ||
+ limIsInQuietDuration(pMac) )
{
PELOGE(pmmLog(pMac, LOGE,
FL("pmmBmps: BMPS Request received in invalid state PMM=%d, SME=%d, rejecting the initpwrsave request\n"),
@@ -524,6 +524,7 @@
tSirRetStatus retStatus = eSIR_SUCCESS;
tpExitBmpsParams pExitBmpsParams;
tSirMsgQ msgQ;
+ tpPESession psessionEntry;
tANI_U8 currentOperatingChannel = limGetCurrentOperatingChannel(pMac);
if( eHAL_STATUS_SUCCESS != palAllocateMemory( pMac->hHdd, (void **)&pExitBmpsParams, sizeof(*pExitBmpsParams)) )
@@ -533,6 +534,12 @@
return retStatus;
}
+ if((psessionEntry = peGetValidPowerSaveSession(pMac)) == NULL )
+ {
+ retStatus = eSIR_FAILURE;
+ return retStatus;
+ }
+
palZeroMemory( pMac->hHdd, (tANI_U8 *)pExitBmpsParams, sizeof(*pExitBmpsParams));
msgQ.type = WDA_EXIT_BMPS_REQ;
msgQ.reserved = 0;
@@ -550,11 +557,13 @@
limIsconnectedOnDFSChannel(currentOperatingChannel))))
pExitBmpsParams->sendDataNull = 1;
+ pExitBmpsParams->bssIdx = psessionEntry->bssIdx;
+
/* we need to defer any incoming messages until we
* get a WDA_EXIT_BMPS_RSP from HAL.
*/
SET_LIM_PROCESS_DEFD_MESGS(pMac, false);
- MTRACE(macTraceMsgTx(pMac, 0, msgQ.type));
+ MTRACE(macTraceMsgTx(pMac, NO_SESSION, msgQ.type));
retStatus = wdaPostCtrlMsg( pMac, &msgQ);
if( eSIR_SUCCESS != retStatus )
{
@@ -679,7 +688,7 @@
*/
SET_LIM_PROCESS_DEFD_MESGS(pMac, false);
- MTRACE(macTraceMsgTx(pMac, 0, msgQ.type));
+ MTRACE(macTraceMsgTx(pMac, psessionEntry->peSessionId, msgQ.type));
if( eSIR_SUCCESS != (retCode = wdaPostCtrlMsg( pMac, &msgQ )))
{
palFreeMemory(pMac->hHdd, pBmpsParams);
@@ -724,7 +733,7 @@
if(pMac->lim.gLimSmeState != eLIM_SME_IDLE_STATE )
{
pmmLog(pMac, LOGE,
- FL("pmmCfg: Power Save Configuration received in invalid state %d"),
+ FL("pmmCfg: Power Save Configuration received in invalid global sme state %d"),
pMac->lim.gLimSmeState);
retCode = eSIR_SME_INVALID_STATE;
goto returnFailure;
@@ -785,7 +794,7 @@
msgQ.bodyval = 0;
PELOG1(pmmLog( pMac, LOG1, FL( "pmmBmps: Sending WDA_PWR_SAVE_CFG to HAL"));)
- MTRACE(macTraceMsgTx(pMac, 0, msgQ.type));
+ MTRACE(macTraceMsgTx(pMac, NO_SESSION, msgQ.type));
if( eSIR_SUCCESS != (retCode = wdaPostCtrlMsg( pMac, &msgQ )))
{
pmmLog( pMac, LOGP,
@@ -902,7 +911,15 @@
pMac->sys.gSysEnableScanMode = true;
// send response to PMC
- limSendSmeRsp(pMac, eWNI_PMC_EXIT_BMPS_RSP, retStatus, 0, 0);
+ if(IS_SLM_SESSIONIZED )
+ {
+ limSendSmeRsp(pMac, eWNI_PMC_EXIT_BMPS_RSP, retStatus,
+ psessionEntry->smeSessionId, psessionEntry->transactionId);
+ }
+ else
+ {
+ limSendSmeRsp(pMac, eWNI_PMC_EXIT_BMPS_RSP, retStatus, 0, 0);
+ }
if ( pMac->pmm.gPmmExitBmpsReasonCode == eSME_MISSED_BEACON_IND_RCVD)
{
@@ -1493,11 +1510,11 @@
((pMac->lim.gLimSmeState != eLIM_SME_IDLE_STATE) &&
(pMac->lim.gLimSmeState != eLIM_SME_JOIN_FAILURE_STATE)) ||
(pMac->lim.gLimMlmState != eLIM_MLM_IDLE_STATE) ||
- (pMac->lim.gLimSpecMgmt.dot11hChanSwState == eLIM_11H_CHANSW_RUNNING) ||
- (pMac->lim.gLimSpecMgmt.quietState == eLIM_QUIET_RUNNING))
+ limIsChanSwitchRunning (pMac) ||
+ limIsInQuietDuration (pMac) )
{
PELOGE(pmmLog(pMac, LOGE,
- FL("pmmImps: PMM State = %d, MLM State = %d, SME State = %d, rejecting the sleep mode request\n"),
+ FL("pmmImps: PMM State = %d, Global MLM State = %d, Global SME State = %d, rejecting the sleep mode request\n"),
pMac->pmm.gPmmState, pMac->lim.gLimMlmState, pMac->lim.gLimSmeState);)
resultCode = eSIR_SME_INVALID_PMM_STATE;
@@ -1783,7 +1800,7 @@
limIsSystemInScanState(pMac) )
{
PELOGE(pmmLog(pMac, LOGE,
- FL("pmmUapsd: PMM State = %d, MLM State = %d, SME State = %d, rejecting the sleep mode request\n"),
+ FL("pmmUapsd: PMM State = %d, Global MLM State = %d, Global SME State = %d, rejecting the sleep mode request\n"),
pMac->pmm.gPmmState, pMac->lim.gLimMlmState, pMac->lim.gLimSmeState);)
resultCode = eSIR_SME_INVALID_PMM_STATE;
@@ -1829,11 +1846,16 @@
tpUapsdParams pUapsdRspMsg;
tSirResultCodes retStatus = eSIR_SME_SUCCESS;
+ tANI_U8 PowersavesessionId;
+ tpPESession psessionEntry;
+
/* we need to process all the deferred messages enqueued since
* the initiating the SIR_HAL_ENTER_UAPSD_REQ.
*/
SET_LIM_PROCESS_DEFD_MESGS(pMac, true);
+ /* Copy the power save sessionId to the local variable */
+ PowersavesessionId = pMac->pmm.sessionId;
if (NULL == limMsg->bodyptr)
{
@@ -1843,6 +1865,12 @@
pUapsdRspMsg = (tpUapsdParams)(limMsg->bodyptr);
+ if((psessionEntry = peFindSessionBySessionId(pMac,PowersavesessionId))==NULL)
+ {
+ limLog(pMac, LOGP,FL("Session Does not exist for given sessionID\n"));
+ return;
+ }
+
if(pMac->pmm.gPmmState != ePMM_STATE_UAPSD_WT_SLEEP_RSP)
{
PELOGE(pmmLog(pMac, LOGE,
@@ -1866,7 +1894,16 @@
retStatus = eSIR_SME_UAPSD_REQ_FAILED;
}
- limSendSmeRsp(pMac, eWNI_PMC_ENTER_UAPSD_RSP, retStatus, 0, 0);
+ if(IS_SLM_SESSIONIZED )
+ {
+ limSendSmeRsp(pMac, eWNI_PMC_ENTER_UAPSD_RSP, retStatus,
+ psessionEntry->smeSessionId, psessionEntry->transactionId);
+ }
+ else
+ {
+ limSendSmeRsp(pMac, eWNI_PMC_ENTER_UAPSD_RSP, retStatus, 0, 0);
+ }
+
return;
}
@@ -1948,6 +1985,8 @@
void pmmExitUapsdResponseHandler(tpAniSirGlobal pMac, eHalStatus rspStatus)
{
tSirResultCodes resultCode = eSIR_SME_SUCCESS;
+ tANI_U8 PowersavesessionId;
+ tpPESession psessionEntry;
/* we need to process all the deferred messages enqueued since
* the initiating the SIR_HAL_EXIT_UAPSD_REQ.
@@ -1963,6 +2002,13 @@
return;
}
+ PowersavesessionId = pMac->pmm.sessionId;
+ if((psessionEntry = peFindSessionBySessionId(pMac,PowersavesessionId))==NULL)
+ {
+ limLog(pMac, LOGP,FL("Session Does not exist for given sessionID\n"));
+ return;
+ }
+
switch(rspStatus)
{
case eHAL_STATUS_SUCCESS:
@@ -1978,7 +2024,16 @@
}
pMac->pmm.gPmmState = ePMM_STATE_BMPS_SLEEP;
- limSendSmeRsp(pMac, eWNI_PMC_EXIT_UAPSD_RSP, resultCode, 0, 0);
+
+ if(IS_SLM_SESSIONIZED)
+ {
+ limSendSmeRsp(pMac, eWNI_PMC_EXIT_UAPSD_RSP, resultCode, psessionEntry->smeSessionId,
+ psessionEntry->transactionId);
+ }
+ else
+ {
+ limSendSmeRsp(pMac, eWNI_PMC_EXIT_UAPSD_RSP, resultCode, 0, 0);
+ }
return;
}
@@ -2424,7 +2479,7 @@
* WDA_ENTER_IMPS_REQ or WDA_EXIT_IMPS_RSP from HAL.
*/
SET_LIM_PROCESS_DEFD_MESGS(pMac, false);
- MTRACE(macTraceMsgTx(pMac, 0, msgQ.type));
+ MTRACE(macTraceMsgTx(pMac, NO_SESSION, msgQ.type));
retStatus = wdaPostCtrlMsg(pMac, &msgQ);
if ( eSIR_SUCCESS != retStatus )
{
@@ -2456,6 +2511,7 @@
tANI_U8 uapsdDeliveryMask = 0;
tANI_U8 uapsdTriggerMask = 0;
tSirMsgQ msgQ;
+ tpPESession pSessionEntry;
if (SIR_PM_SLEEP_MODE == mode)
{
@@ -2465,6 +2521,13 @@
retStatus = eSIR_MEM_ALLOC_FAILED;
return retStatus;
}
+
+ if((pSessionEntry = peGetValidPowerSaveSession(pMac)) == NULL )
+ {
+ PELOGW(pmmLog(pMac, LOGW, FL("pmmUapsd :palAllocateMemory() failed\n"));)
+ retStatus = eSIR_FAILURE;
+ return retStatus;
+ }
palZeroMemory( pMac->hHdd, (tANI_U8 *)pUapsdParams, sizeof(tUapsdParams));
msgQ.type = WDA_ENTER_UAPSD_REQ;
msgQ.bodyptr = pUapsdParams;
@@ -2480,6 +2543,8 @@
pUapsdParams->beTriggerEnabled = LIM_UAPSD_GET(ACBE, uapsdTriggerMask);
pUapsdParams->viTriggerEnabled = LIM_UAPSD_GET(ACVI, uapsdTriggerMask);
pUapsdParams->voTriggerEnabled = LIM_UAPSD_GET(ACVO, uapsdTriggerMask);
+ pUapsdParams->bssIdx = pSessionEntry->bssIdx;
+
PELOGE(pmmLog(pMac, LOGE,
FL("UAPSD Mask: static = 0x%x, DeliveryEnabled = 0x%x, TriggerEnabled = 0x%x \n"),
pMac->lim.gUapsdPerAcBitmask,
@@ -2514,7 +2579,7 @@
msgQ.reserved = 0;
msgQ.bodyval = 0;
- MTRACE(macTraceMsgTx(pMac, 0, msgQ.type));
+ MTRACE(macTraceMsgTx(pMac, NO_SESSION, msgQ.type));
retStatus = wdaPostCtrlMsg(pMac, &msgQ);
if ( eSIR_SUCCESS != retStatus )
{