⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmdproc.c

📁 marvell8385 GSPI开发驱动
💻 C
📖 第 1 页 / 共 3 页
字号:
        }

        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 + -