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

📄 miscproc.c

📁 此压缩包为杰得开发得z228的BSP的源代码,可以实现很多功能,尤其是视频解码有很好的效果.
💻 C
📖 第 1 页 / 共 5 页
字号:
            status = SDReadWriteRegistersDirect(Adapter->hDevice,
                                                SD_IO_READ ,
                                                0, // function 0 for scratch register
                                                PACKET_TYPE_MAC_EVENT_SCRATCH_REGISTER, 
                                                FALSE,
                                                &ucCardStatus,
                                                sizeof(ucCardStatus));
            if (SD_API_SUCCESS(status))
            {
                DBGPRINT(DBG_UNLOAD, ("SetStationPower: Read register successful!\n"));
            }
            else
            {
                DBGPRINT(DBG_UNLOAD, ("SetStationPower: Read register failed!\n"));
            }
*/
#else
	        ///spi_ReadRegister(PACKET_TYPE_MAC_EVENT_SCRATCH_REGISTER, &ucCardStatus);
			If_ReadRegister(NULL, NULL, PACKET_TYPE_MAC_EVENT_SCRATCH_REGISTER, FALSE, &ucCardStatus, sizeof(ucCardStatus));
#endif
#ifdef IF_GSPI
        if ( Adapter->MediaConnectStatus != NdisMediaStateDisconnected )
        {
            USHORT  usCommand;

             if (Adapter->psState != PS_STATE_FULL_POWER)
            {

				//062805
				PSWakeup(Adapter);
            	
				Adapter->psState = PS_STATE_FULL_POWER;
            }

            // disconnect the link 
			if ( Adapter->InfrastructureMode == Ndis802_11Infrastructure )
                usCommand = HostCmd_CMD_802_11_DEAUTHENTICATE;
            else
                usCommand = HostCmd_CMD_802_11_AD_HOC_STOP;
 
            // send down deauthenticate
		    PrepareAndSendCommand(
			    Adapter,
			    usCommand,
			    0,
			    HostCmd_OPTION_USE_INT,
			    (NDIS_OID)0,
			    HostCmd_PENDING_ON_NONE,
			    0,
			    FALSE,
			    NULL,
			    NULL,
			    NULL,
			    NULL);
        }


        // reset the Adapter object
    	ResetAdapterObject(Adapter);

		Adapter->bIsScanInProgress 				= FALSE;
        Adapter->bIsAssociateInProgress 		= FALSE;

		Adapter->bIsAssociationBlockedByScan 	= FALSE;
		Adapter->bIsScanWhileConnect            = FALSE;
		Adapter->bIsConnectToAny				= FALSE;

		Adapter->EncryptionStatus = Ndis802_11Encryption2KeyAbsent;

#if OMAP
        //chenglong add for turn off VWifi
        PowerDownWiFi(TRUE);
        EnableVWiFi(FALSE);
#endif ///#if OMAP
        ///g_bWLAN_FW_Downloaded = FALSE;
#endif //IF_GSPI


#if 0
       // clean up timer
		CleanUpTimers(Adapter);
		// report link status change
		//ResetDisconnectStatus(Adapter);
		// Enable interrupt
		If_DisableInterrupt(Adapter);

    	// tx
    	//CleanUpSingleTxBuffer(Adapter);
    	// rx
    	ResetRxPDQ(Adapter);

    	// command
		ResetCmdBuffer(Adapter);
		// reset the Adapter object
    	ResetAdapterObject(Adapter);

		Adapter->bIsScanInProgress 				= FALSE;
        Adapter->bIsAssociateInProgress 		= FALSE;

		Adapter->bIsAssociationBlockedByScan 	= FALSE;
		Adapter->bIsScanWhileConnect            = FALSE;
		Adapter->bIsConnectToAny				= FALSE;

		Adapter->EncryptionStatus = Ndis802_11Encryption2KeyAbsent;
#endif
		break;

	case NdisDeviceStateD1:
	case NdisDeviceStateD2:
		 break;
		
    case NdisDeviceStateD3: // D3->D0
#ifdef IF_SDIO
       NdisMSleep(5000);
       DBGPRINT(DBG_LOAD|DBG_ALLEN,("D3->D0\n")); 

       Adapter->SurpriseRemoved = FALSE;
#else ///IF_SDIO
	//yz_add
	//RETAILMSG(1,(TEXT("NdisDeviceStateD3\r\n")));
       Adapter->SurpriseRemoved = FALSE;
	   
	//yz_add for low power
	RETAILMSG(1,(TEXT("wifi power on\r\n")));
	//PM_EnableAna2(ON);		//wifi 3.3
	//wifi_DS(OFF);		//wifi 3.3
	
#if OMAP
       //chenglong add for turn on VWifi
       PowerDownWiFi(FALSE);
       EnableVWiFi(TRUE);
#endif ///#if OMAP

       //g_spi_dummy_clk_reg = 0x05;
       g_spi_dummy_clk_reg = 0x07;
       g_spi_dummy_clk_data = 0x0e;
#endif
        // see if this is the problem
        //NdisFillMemory(Adapter->CurrentAddr, MRVDRV_ETH_ADDR_LEN, 0xff);        
// tt cetk_2        SdioFWStatus=If_IsFirmwareLoaded(Adapter);

		//yz_change
		SdioFWStatus=If_IsFirmwareLoaded(Adapter);
		RETAILMSG(1,(TEXT("state = %d!\r\n"),SdioFWStatus));
		
		//if(SdioFWStatus  == FW_STATUS_UNINITIALIZED)
			//SdioFWStatus = If_FirmwareDownload(Adapter);
		
            SdioFWStatus = FW_STATUS_INITIALIZED; // tt cetk_2
            //SdioFWStatus = FW_STATUS_UNINITIALIZED;

    	    if (SdioFWStatus  == FW_STATUS_READ_FAILED)
    		{
                DBGPRINT(DBG_LOAD,("Bootloader in invalid state!\n"));
			RETAILMSG(1,(TEXT("Bootloader in invalid state!\r\n")));
        	    // we could do a hardware reset here on the card to try to restart
	            // the boot loader.
    	        return NDIS_STATUS_FAILURE;
    		}else if ( SdioFWStatus  == FW_STATUS_UNINITIALIZED )
		    {
        	   DBGPRINT(DBG_LOAD,("Do FIRMWARE INITIALIZE!\n"));
			   RETAILMSG(1,(TEXT("Do FIRMWARE INITIALIZE!\r\n")));

			   SdioFWStatus = If_FirmwareDownload(Adapter);
			   //yz_add for test
			   //SdioFWStatus = FW_STATUS_INITIALIZED;
               if (  SdioFWStatus != FW_STATUS_INITIALIZED  )
                {
		              DBGPRINT(DBG_LOAD, ("Failed to download the firmware\n"));
				 RETAILMSG(1,(TEXT("Failed to download the firmware\r\n")));	
                      return NDIS_STATUS_FAILURE;
                }

			    bFwReloaded = TRUE;
		    }else
		      {
	    	     DBGPRINT(DBG_LOAD,("Firmware aleady running!\n"));
			RETAILMSG(1,(TEXT("Firmware aleady running!\r\n")));	 
		      }

        Adapter->CurPowerState = NewPowerState;

        // Enable INT
		If_EnableInterrupt(Adapter); 
       
        // indicate to OS that the network is not connected
#ifdef IF_GSPI
		///g_bWLAN_FW_Downloaded = TRUE;
		g_spi_dummy_clk_reg = 0x01;
		g_spi_dummy_clk_data = 0x01;
		PrepareAndSendCommand(
			Adapter,
			HostCmd_CMD_GSPI_BUS_CONFIG,
			HostCmd_ACT_GEN_SET,
			HostCmd_OPTION_USE_INT,
			(NDIS_OID)0,
			HostCmd_PENDING_ON_NONE,
			0,
			FALSE,
			NULL,
			NULL,
			NULL,
			NULL);
#endif
        //NdisMSetTimer(&Adapter->MrvDrvIndicateDisconnectTimer, 100);
       // Adapter->DisconnectTimerSet = TRUE;

        //----------------------------------------------------------------------------
        	// If the FW required reloading, then we have to kick start the receiver again.
        	//----------------------------------------------------------------------------
// tt cetk_2
/*             
		{
			USHORT          Action;
			
          		Action =   Adapter->usMacControlRecord | 
					       HostCmd_STATUS_MAC_RX_ON | 
					       HostCmd_STATUS_MAC_TX_ON |
					       HostCmd_STATUS_MAC_INT_ENABLE;

			 PrepareAndSendCommand(
				        	Adapter,
				        	HostCmd_CMD_MAC_CONTROL,
				        	Action,
				        	HostCmd_OPTION_USE_INT,
				        	0,
				        	HostCmd_PENDING_ON_NONE,
				        	0,
				        	FALSE,
				        	NULL,
				        	NULL,
				        	NULL,
				        	NULL);
          }
*/          
          {
			Adapter->RadioOn = TRUE;
			PrepareAndSendCommand(
						Adapter,				
						HostCmd_CMD_802_11_RADIO_CONTROL,
						HostCmd_ACT_GEN_SET,
						HostCmd_OPTION_USE_INT,
						(NDIS_OID)0,     //OID_MRVL_ENABLE_RADIO,
						HostCmd_PENDING_ON_NONE,
						0,
						FALSE,
						NULL,
						NULL,
						NULL,
						NULL);		
		}
        if (bFwReloaded)
        {
    		// Update HW status
	    	Adapter->HardwareStatus = NdisHardwareStatusReady;
            
            // setup mac address
            PrepareAndSendCommand(
		        	Adapter, 
		        	HostCmd_CMD_GET_HW_SPEC, 
		        	0, 
		        	HostCmd_OPTION_USE_INT,
		        	(NDIS_OID)0,
		        	HostCmd_PENDING_ON_NONE,
		        	0,
		        	FALSE,
		        	NULL,
		        	NULL,
		        	NULL,
		        	NULL);        

			//060105, test
	        #ifdef IF_SDIO
	            NdisMSleep(10000);
            #endif ///IF_SDIO

            DBGPRINT(DBG_LOAD, ("Reinitialize wireless config\n"));
            InitializeWirelessConfig(Adapter);
        }
#ifdef IF_SDIO
        NdisMSleep(300000);    		
#else	///IF_SDIO
        NdisMSetTimer(&Adapter->MrvDrvIndicateConnectStatusTimer, 100);
        Adapter->DisconnectTimerSet = TRUE;
#endif
	    break;

	    default :
	        DBGPRINT(DBG_POWER,("ERROR: Unknown power state\n"));
	        break;
    }
    
	Adapter->CurPowerState = NewPowerState;

	return NDIS_STATUS_SUCCESS;
}

#else

/******************************************************************************
 *
 *  Name: SetStationPowerState()
 *
 *  Description: Set MrvDrv power state
 *
 *  Conditions for Use: Called by power state set OID handler
 *
 *  Arguments:           
 *      PMRVDRV_ADAPTER Adapter
 *      NDIS_DEVICE_POWER_STATE NewPowerState
 *      IN NDIS_OID Oid
 *      IN PULONG BytesRead
 *      IN PULONG BytesNeeded
 *      IN PVOID InformationBuffer
 *    
 *  Return Value:        
 * 
 *  Notes:               
 *
 *****************************************************************************/
NDIS_STATUS
SetStationPowerState(
    PMRVDRV_ADAPTER Adapter,
	NDIS_DEVICE_POWER_STATE NewPowerState,
	IN NDIS_OID Oid,
	IN PULONG BytesRead,
	IN PULONG BytesNeeded,
	IN PVOID InformationBuffer
)
{
	//UCHAR	    TempAddr[MRVDRV_ETH_ADDR_LEN];   
	BOOLEAN     bFwReloaded = FALSE;
	//BOOLEAN     TimerCancelled;
	//NDIS_STATUS Status;
	IX_STATUS   ixStatus = IX_STATUS_SUCCESS;
    PCF_OBJECT  pCf = (PCF_OBJECT)Adapter -> hwIface;

/*#ifdef UNDER_CE
    {
		wchar_t buf[100];

		swprintf(buf, TEXT("SET Power State from %d to %d"), Adapter->CurPowerState,
            NewPowerState);
            
		MessageBox(NULL, buf, TEXT("CF-25"), MB_OK);
	}
#endif */
	//yz_add
	RETAILMSG(1,(TEXT("SetStationPowerState()::NewPowerState = %d\r\n"),NewPowerState)); 

	if( Adapter->CurPowerState == NewPowerState )
		return NDIS_STATUS_SUCCESS;

	switch( Adapter->CurPowerState ){
	case NdisDeviceStateD0:

        NdisZeroMemory(&Adapter->PreviousSSID, sizeof(NDIS_802_11_SSID));


        if ( Adapter->MediaConnectStatus != NdisMediaStateDisconnected )
        {
            USHORT  usCommand;

            if (Adapter->PSMode != Ndis802_11PowerModeCAM)
            {
                Adapter->NeedToWakeup = TRUE;
            }
                    
            //      Clean up Tx buffer
            CleanUpSingleTxBuffer(Adapter);

            Adapter->MediaConnectStatus = NdisMediaStateDisconnected;
    		Adapter->LinkSpeed = MRVDRV_LINK_SPEED_1mbps;
            Adapter->ulNumOfBSSIDs = 0;
            Adapter->ulPSNumOfBSSIDs = 0;

            /*// store the SSID information
            NdisMoveMemory( &Adapter->PreviousSSID, 
							&Adapter->CurrentSSID, 
							sizeof(NDIS_802_11_SSID));*/

            // clear out adapter
            NdisZeroMemory( &Adapter->CurrentSSID, 
							sizeof(NDIS_802_11_SSID));

            // Let WinCE ZC handle reconnect
            NdisZeroMemory( &Adapter->PreviousSSID, 
							sizeof(NDIS_802_11_SSID));


            DBGPRINT(DBG_LOAD, ("SetStationPower: Currently connected, set PreviousSSID to: %s\n", 
                            Adapter->PreviousSSID.Ssid));

            if ( Adapter->InfrastructureMode == Ndis802_11Infrastructure )
            {
                usCommand = HostCmd_CMD_802_11_DEAUTHENTICATE;
            }
            else
            {
                usCommand = HostCmd_CMD_802_11_AD_HOC_STOP;
            }

            // send down deauthenticate
		    PrepareAndSendCommand(
			    Adapter,
			    usCommand,
			    0,
			    HostCmd_OPTION_USE_INT,
			    (NDIS_OID)0,
			    HostCmd_PENDING_ON_NONE,
			    0,
			    FALSE,
			    NULL,
			    NULL,
			    NULL,
			    NULL);

            //      Report link status change
  	    	NdisMIndicateStatus(
		    	Adapter->MrvDrvAdapterHdl,
    			NDIS_STATUS_MEDIA_DISCONNECT,
	    		(PVOID)NULL,
		    	0);
    		NdisMIndicateStatusComplete(Adapter->MrvDrvAdapterHdl);

#ifdef MRVL_GUI_INTERFACE
			MrvlNotifyApplication(
					COMMAND_EVENT_DISCONNECT,
					NULL,
					0);
#endif // MRVL_GUI_INTERFACE

        } // if ( Adapter->MediaConnectStatus != NdisMediaStateDisconnected )

        CleanUpTimers(Adapter);

        //      Rest command buffer
        ResetCmdBuffer(Adapter);

        Adapter->bIsScanInProgress 				= FALSE;
        Adapter->bIsAssociateInProgress 		= FALSE; 
		
		Adapter->bIsAssociationBlockedByScan 	= FALSE;
		Adapter->bIsScanWhileConnect            = FALSE;
		Adapter->bIsConnectToAny				= FALSE;
		
        Adapter->psState = PS_STATE_FULL_POWER; // the card gets powered off

#ifdef UNDER_CE
        Adapter->bIsLastOIDSetEncryptionStatus = FALSE;
#endif 

        if ( Adapter->EncryptionStatus == Ndis802_11Encryption2Enabled )
        {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -