📄 cmdproc.c
字号:
}
return NDIS_STATUS_FAILURE;
}
#if 0
//Ling++ 102805
if( Command == HostCmd_CMD_802_11_PS_MODE )
{
PsSubCommand = ((PHostCmd_DS_802_11_PS_MODE)pTempNode->BufVirtualAddr)->SubCommand;
if(PsSubCommand == HostCmd_SubCmd_Sleep_Confirmed)
{
#if 0
BatchIndicateRetQPkts(Adapter);
#else
if( Adapter->RetQTimerIsSet==FALSE )
{
NdisMSetTimer(&Adapter->MrvRetQTimer,
MRVDRV_DEFAULT_RETQ_TIME_OUT);
Adapter->RetQTimerIsSet=TRUE;
}
#endif
}
}
//LIng-- 102805
#endif
#endif //#ifdef SDIO
switch(Command)
{
#ifdef DEEP_SLEEP
case HostCmd_CMD_802_11_DEEP_SLEEP:
RETAILMSG(1,(TEXT("Deep Sleep : DEEP_SLEEP_CMD Sent Down\n")));
#ifdef CONFIG_WLAN_PMU
wlan_PMUGetEnterDeepSleepResp();
#endif
Adapter->IsDeepSleep = TRUE;
ResetCmdBuffer(Adapter);
/* zhangbing: NDIS disconnect event has been reported by pararoaming module when LinkDown.
NdisMIndicateStatus(
Adapter->MrvDrvAdapterHdl,
NDIS_STATUS_MEDIA_DISCONNECT,
(PVOID)NULL,
0);
NdisMIndicateStatusComplete(Adapter->MrvDrvAdapterHdl);
*/
break;
#endif
case HostCmd_CMD_802_11_PS_MODE:
PsSubCommand = ((PHostCmd_DS_802_11_PS_MODE)pTempNode->BufVirtualAddr)->SubCommand;
if(PsSubCommand == HostCmd_SubCmd_Sleep_Confirmed)
{
Adapter->bPSConfirm=TRUE;
UpdatePowerSaveState( Adapter, Adapter->CurCmd, 0);
Adapter->CurCmd = NULL;
ReturnCmdNode(Adapter, pTempNode);
DBGPRINT(DBG_ALLEN,("[Maevell]DownloadCommand :HostCmd_SubCmd_Sleep_Confirmed 0x34\n"));
} //dralee_1108
else
NdisMSleep(100);
//Ling++ 102805, avoid SetTimer twice
//else
// NdisMSetTimer(&Adapter->MrvDrvCommandTimer, MRVDRV_DEFAULT_LONG_COMMAND_TIME_OUT);
//Ling-- 102805
break;
#ifdef HOST_SLEEP_PS
case HostCmd_CMD_802_11_HOST_SLEEP_CFG:
RETAILMSG(1, (TEXT("HOST_SLEEP_CFG downloaded\n\r")));
Adapter->HostPowerState = HTWK_STATE_PRESLEEP;
break;
#endif
default:
/* tt v5 firmware
NdisMSetTimer(&Adapter->MrvDrvCommandTimer, MRVDRV_DEFAULT_LONG_COMMAND_TIME_OUT);
*/
break;
}
/*
#ifdef DEEP_SLEEP
//After deep sleep ,clean all command in command Q and indicate the upper layer
//the disconnected statue
//dralee
//if (((PHostCmd_DS_GEN)Adapter->CurCmd->BufVirtualAddr)->Command == HostCmd_CMD_802_11_DEEP_SLEEP )
if (Command == HostCmd_CMD_802_11_DEEP_SLEEP )
{
RETAILMSG(1,(TEXT("Deep Sleep : DEEP_SLEEP_CMD Sent Down\n")));
Adapter->IsDeepSleep = TRUE;
ResetCmdBuffer(Adapter);
NdisMIndicateStatus(
Adapter->MrvDrvAdapterHdl,
NDIS_STATUS_MEDIA_DISCONNECT,
(PVOID)NULL,
0);
NdisMIndicateStatusComplete(Adapter->MrvDrvAdapterHdl);
}
#endif // DEEP_SLEEP
//lykao, 051805, begin
#ifdef SDIO
timeout= MRVDRV_DEFAULT_LONG_COMMAND_TIME_OUT;
if (Command == HostCmd_CMD_802_11_PS_MODE)
{
PsSubCommand = ((PHostCmd_DS_802_11_PS_MODE)pTempNode->BufVirtualAddr)->SubCommand;
if (PsSubCommand != HostCmd_SubCmd_Sleep_Confirmed)
{
NdisMSetTimer(&Adapter->MrvDrvCommandTimer, timeout);
}
#ifdef MRVL_PSCONFIRM
if (PsSubCommand == HostCmd_SubCmd_Sleep_Confirmed)
{
//DBGPRINT(DBG_TESTPRINT,("***DownloadPSCommand:HostCmd_SubCmd_Sleep_Confirmed\n"));
Adapter->bPSConfirm=TRUE;
}
#endif
}
else
{
NdisMSetTimer(&Adapter->MrvDrvCommandTimer, timeout);
}
#endif
//lykao, 051805, end
if ((Command == HostCmd_CMD_802_11_PS_MODE) &&
(PsSubCommand == HostCmd_SubCmd_Sleep_Confirmed))
{
UpdatePowerSaveState( Adapter, Adapter->CurCmd, 0);
Adapter->CurCmd = NULL;
ReturnCmdNode(Adapter, pTempNode);
DBGPRINT(DBG_ALLEN,("[Maevell]DownloadCommand :HostCmd_SubCmd_Sleep_Confirmed 0x34\n"));
}
#endif
*/
return NDIS_STATUS_SUCCESS;
}
VOID
UpdatePowerSaveState(
IN PMRVDRV_ADAPTER Adapter,
IN CmdCtrlNode *pTempNode,
IN ULONG PsEvent
)
{
USHORT Command;
USHORT PsSubCommand;
//CmdCtrlNode *pPsComfirm;
DBGPRINT(DBG_NEWPS,("++ UpdatePowerSaveState\n"));
DBGPRINT(DBG_NEWPS,("Current State : %d\n",Adapter->psState));
if (PsEvent) // the input is a event
{
DBGPRINT(DBG_NEWPS,("Event Enter 0x%08x\n", PsEvent));
switch(Adapter->psState)
{
case PS_STATE_WAKEUP:
//case PS_STATE_SLEEP_PENDING: //dralee
DBGPRINT(DBG_NEWPS,("Current State : PS_STATE_WAKEUP\n"));
if (PsEvent == MACREG_INT_CODE_PS_AWAKE)
{
#ifdef CONFIG_WLAN_PMU
if(Adapter->HostSleepAwake == 0)
{
wlan_PMUSleepAwake();
}
#endif
}
if (PsEvent == MACREG_INT_CODE_PS_SLEEP)
{
DBGPRINT(DBG_NEWPS,("Receive Event : MACREG_INT_CODE_PS_SLEEP\n"));
//dralee
//Adapter->psState = PS_STATE_SLEEP;
//RETAILMSG(1,(TEXT("[UpdatePSState]:wakeup->sleep pending\r\n")));
// insert a PS_COMFIRM command to pQ
#ifdef HOST_SLEEP_PS
if( Adapter->HostPowerState == HTWK_STATE_FULL_POWER ||
Adapter->HostPowerState == HTWK_STATE_SLEEP )
{
//dralee_0112, to prevent MrvDrvSend() sendout a packet at this time
EnterCriticalSection(&Adapter->TxCriticalSection);
if( Adapter->SentPacket == NULL &&
Adapter->TxPacketCount == 0 && //dralee_1101, flush all pkts before sleep confirmed
IsQEmpty(&Adapter->CmdPendQ) && // plus
Adapter->CurCmd == NULL )
{
Adapter->psState = PS_STATE_SLEEP;
//dralee_0112
LeaveCriticalSection(&Adapter->TxCriticalSection);
///crlo:modify ++
///This delay is necessary. Otherwise, the OS will stop sending data
/// Have not found the root cause yet....
#ifdef IF_SPI
//dralee_0111
//NdisMSleep(100);
#endif ///IF_SPI
///crlo:modify --
PSConfirmSleep(Adapter);
#ifdef CONFIG_WLAN_PMU
wlan_PMUSleepConfirmed();
#endif
}
else //dralee_0112
LeaveCriticalSection(&Adapter->TxCriticalSection);
// MrvPrintFile("\nNot Ready at SP evt");
}
#else
if( Adapter->SentPacket == NULL &&
Adapter->CurCmd == NULL )
{
PSConfirmSleep(Adapter);
#ifdef CONFIG_WLAN_PMU
wlan_PMUSleepConfirmed();
#endif
//RETAILMSG(1,(TEXT("[PSConfirm] at UPdate Power state\r\n")));
}
#endif
}
break;
case PS_STATE_SLEEP:
DBGPRINT(DBG_NEWPS,("Current State : PS_STATE_SLEEP\n"));
if (PsEvent == MACREG_INT_CODE_PS_AWAKE)
{
DBGPRINT(DBG_NEWPS,("Receive Event : MACREG_INT_CODE_PS_AWAKE\n"));
Adapter->psState = PS_STATE_WAKEUP;
#ifdef CONFIG_WLAN_PMU
if(Adapter->HostSleepAwake == 0)
{
wlan_PMUSleepAwake();
}
#endif
/* //dralee_0112, dummy code
//dralee
if( Adapter->ResourcesEvts & RSC_PS )
{
Adapter->ResourcesEvts &= ~RSC_PS;
if( Adapter->ResourcesEvts == 0 )
NdisMSendResourcesAvailable(Adapter->MrvDrvAdapterHdl);
}
*/ //dummy code
//if(Adapter->SendPSFlag==TRUE)
// {
// RETAILMSG(1, (L"PS_AWAKE, Send Resource available:#%d pkt in Q\n\r", Adapter->TxPacketCount));
// NdisMSendResourcesAvailable(Adapter->MrvDrvAdapterHdl);
// Adapter->SendPSFlag=FALSE;
// }
}
break;
}
}
else // the input is a command
{
if (pTempNode==NULL)
return;
Command = ((PHostCmd_DS_GEN)(pTempNode->BufVirtualAddr))->Command;
DBGPRINT(DBG_NEWPS,("Command 0x%04x Enter\n", Command));
if ((Command == HostCmd_CMD_802_11_PS_MODE) ||
(Command == HostCmd_RET_802_11_PS_MODE))
{
PsSubCommand = ((PHostCmd_DS_802_11_PS_MODE)pTempNode->BufVirtualAddr)->SubCommand;
DBGPRINT(DBG_NEWPS,("PS Command : subcommand = %d\n",PsSubCommand));
switch(Adapter->psState)
{
case PS_STATE_FULL_POWER:
DBGPRINT(DBG_NEWPS,("Current State : PS_STATE_FULL_POWER\n"));
if (PsSubCommand == HostCmd_SubCmd_Enter_PS)
{
DBGPRINT(DBG_NEWPS,("Receive PS SubCommand : HostCmd_SubCmd_Enter_PS\n"));
Adapter->psState = PS_STATE_WAKEUP;
#ifdef CONFIG_WLAN_PMU
if(Command == HostCmd_RET_802_11_PS_MODE)
{
#ifdef WLAN_PMU_DEBUG
RETAILMSG(1,(L"UpdatePowerSaveState:" L"Receive enter PS Subcom Response: HostCmd_SubCmd_Enter_PS"));
#endif
wlan_PMUGetSleepResp();
}
#endif
}
break;
case PS_STATE_WAKEUP:
DBGPRINT(DBG_NEWPS,("Current State : PS_STATE_WAKEUP\n"));
if (PsSubCommand == HostCmd_SubCmd_Exit_PS)
{
DBGPRINT(DBG_NEWPS,("Receive PS SubCommand : HostCmd_SubCmd_Exit_PS\n"));
Adapter->psState = PS_STATE_FULL_POWER;
#ifdef CONFIG_WLAN_PMU
if(Command == HostCmd_RET_802_11_PS_MODE)
{
#ifdef WLAN_PMU_DEBUG
RETAILMSG(1,(L"UpdatePowerSaveState:" L"Receive exit PS Subcom Resp, HostCmd_SubCmd_Exit_PS"));
#endif
wlan_PMUGetWakeUpResp();
}
#endif
}
if (PsSubCommand == HostCmd_SubCmd_Sleep_Confirmed)
{
DBGPRINT(DBG_NEWPS,("Receive PS SubCommand : HostCmd_SubCmd_Sleep_Confirmed\n"));
Adapter->psState = PS_STATE_SLEEP;
}
break;
//case PS_STATE_SLEEP_PENDING:
case PS_STATE_SLEEP:
DBGPRINT(DBG_NEWPS,("Current State : PS_STATE_SLEEP_PENDING\n"));
if (PsSubCommand == HostCmd_SubCmd_Exit_PS)
{
DBGPRINT(DBG_NEWPS,("Receive PS SubCommand : HostCmd_SubCmd_Exit_PS\n"));
Adapter->psState = PS_STATE_FULL_POWER;
/* //dralee_0112, dummy code
//dralee
if( Adapter->ResourcesEvts & RSC_PS )
{
Adapter->ResourcesEvts &= ~RSC_PS;
if( Adapter->ResourcesEvts == 0 )
NdisMSendResourcesAvailable(Adapter->MrvDrvAdapterHdl);
}
*/
//if(Adapter->SendPSFlag==TRUE)
//{
// NdisMSendResourcesAvailable(Adapter->MrvDrvAdapterHdl);
// Adapter->SendPSFlag=FALSE;
//}
}
/* dralee, 072705
if (PsSubCommand == HostCmd_SubCmd_Sleep_Confirmed)
{
DBGPRINT(DBG_NEWPS,("Receive PS SubCommand : HostCmd_SubCmd_Sleep_Confirmed\n"));
Adapter->psState = PS_STATE_SLEEP;
}
*/
break;
/* dralee, merge with PS_STATE_SLEEP_PENDING
//case PS_STATE_SLEEP:
// DBGPRINT(DBG_NEWPS,("Current State : PS_STATE_SLEEP\n"));
// if (PsSubCommand == HostCmd_SubCmd_Exit_PS)
// {
// DBGPRINT(DBG_NEWPS,("Receive PS SubCommand : HostCmd_SubCmd_Exit_PS\n"));
//dralee
// if( Adapter->ResourcesEvts & RSC_PS )
// {
// Adapter->ResourcesEvts &= ~RSC_PS;
// if( Adapter->ResourcesEvts == 0 )
// NdisMSendResourcesAvailable(Adapter->MrvDrvAdapterHdl);
// }
//Adapter->psState = PS_STATE_FULL_POWER;
//if(Adapter->SendPSFlag==TRUE)
//{
// NdisMSendResourcesAvailable(Adapter->MrvDrvAdapterHdl);
//Adapter->SendPSFlag=FALSE;
//}
}
break;
default:
break;
*/
}
}
}
DBGPRINT(DBG_ALLEN,("[Marvell]UpdatePowerSaveState Adapter->psState=%d\n",Adapter->psState));
DBGPRINT(DBG_NEWPS,("-- UpdatePowerSaveState\n"));
return;
}
// pluschen
UINT8 EncryptionStateCheck(IN PMRVDRV_ADAPTER Adapter)
{
UINT8 IsAllowPS;
DBGPRINT(DBG_ALL,("ESCheck %x \n", Adapter->EncryptionStatus));
switch(Adapter->EncryptionStatus)
{
case Ndis802_11Encryption1Enabled:
case Ndis802_11EncryptionDisabled:
case Ndis802_11Encryption2Enabled:
case Ndis802_11Encryption3Enabled:
IsAllowPS = 1;
break;
default:
IsAllowPS = 0;
break;
}
return IsAllowPS;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -