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

📄 miscproc.c

📁 此压缩包为杰得开发得z228的BSP的源代码,可以实现很多功能,尤其是视频解码有很好的效果.
💻 C
📖 第 1 页 / 共 5 页
字号:
            // set to key absent
            Adapter->EncryptionStatus = Ndis802_11Encryption2KeyAbsent;
        }
        else if ( Adapter->EncryptionStatus == Ndis802_11Encryption3Enabled )
        {
            // set to key absent
            Adapter->EncryptionStatus = Ndis802_11Encryption3KeyAbsent;
        }
        else if ( Adapter->EncryptionStatus == Ndis802_11Encryption1Enabled )
        {
            // set to key absent
            Adapter->EncryptionStatus = Ndis802_11Encryption1KeyAbsent;
        }

/*#ifdef CF_DRIVER        
        Adapter->SurpriseRemoved = TRUE;
#endif // #ifdef CF_DRIVER*/

        //NdisMSendResourcesAvailable(Adapter->MrvDrvAdapterHdl);

        //      Disable INT
		If_DisableInterrupt(Adapter);

		break;

	case NdisDeviceStateD1:
	case NdisDeviceStateD2:
	{
        USHORT PsSubCommand;
		
		// Exit power save mode

        // Rest command buffer
        ResetCmdBuffer(Adapter);

        // Tell Station to enter D0 mode
        PsSubCommand = HostCmd_SubCmd_Exit_PS;
		PrepareAndSendCommand(
					Adapter,
					HostCmd_CMD_802_11_PS_MODE,
					HostCmd_ACT_GEN_SET,
					HostCmd_OPTION_NO_INT,
					Oid,
					HostCmd_PENDING_ON_SET_OID,
					0,
					FALSE,
					NULL,
					BytesRead,
					BytesNeeded,
					&PsSubCommand);

		// Update HW status
		Adapter->HardwareStatus = NdisHardwareStatusReady;

        // Update and report link status
        Adapter->MediaConnectStatus = NdisMediaStateDisconnected;
		Adapter->LinkSpeed = MRVDRV_LINK_SPEED_1mbps;
        Adapter->ulNumOfBSSIDs = 0;
        Adapter->ulPSNumOfBSSIDs = 0;

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

		// Enable INT
		If_EnableInterrupt(Adapter);
	
		break;
	}
	
    case NdisDeviceStateD3:

#ifndef UNDER_CE
	    // Tweak the card's hard coded base address by doing some of our
        // own hard coding.  The config registers start at 0x200 in the CIS
        // and the upper byte of the hardware coded address is at offset 12.
        //*(Adapter->MrvDrvVirtCISMemory+0x200+12) = 0;
        DBGPRINT(DBG_LOAD,("Setting IO OFFSET to zero!\n"));
		*(Adapter->MrvDrvVirtCISMemory) = 0;
#endif

#ifdef CF_DRIVER
        Adapter->SurpriseRemoved = FALSE;
#endif // #ifdef CF_DRIVER

        // see if this is the problem
        NdisFillMemory(Adapter->CurrentAddr, MRVDRV_ETH_ADDR_LEN, 0xff);

    	ixStatus = cf_IsFirmwareLoaded( Adapter -> hwIface );

    	if ( ixStatus == IX_STATUS_FAILURE )
    	{
    	    DBGPRINT(DBG_LOAD,("Bootloader in invalid state!\n"));
        	    // we could do a hardware reset here on the card to try to restart
	        // the boot loader.
    	    return NDIS_STATUS_FAILURE;
    	} 
    	else if ( ixStatus == IX_STATUS_BOOT_READY )
    	{
            ixStatus = cf_FirmwareDownload((PCF_OBJECT)Adapter -> hwIface, Adapter);
            if ( ixStatus != IX_STATUS_SUCCESS  )
            {
               return NDIS_STATUS_FAILURE;
            }
            bFwReloaded = TRUE;
    	} 
        else if ( ixStatus == IX_STATUS_HOST_BOOT_READY )
	    {
#ifdef MRV_USE_HELPER_IMAGE
        
            ixStatus = cf_DownloadHelperImage((PCF_OBJECT)Adapter -> hwIface, Adapter);

            if ( ixStatus != NDIS_STATUS_SUCCESS )
            {
                DBGPRINT(DBG_LOAD, ("Download Helper Image failed!\n"));
                return NDIS_STATUS_FAILURE;
            }

            ixStatus = cf_DownloadFWImageHelperMode((PCF_OBJECT)Adapter -> hwIface, Adapter);

            if ( ixStatus != NDIS_STATUS_SUCCESS )
            {
                DBGPRINT(DBG_LOAD, ("Download Helper Image failed!\n"));
                return NDIS_STATUS_FAILURE;
            }

#else // MRV_USE_HELPER_IMAGE
		    ixStatus = cf_HostBootFirmwareDownload((PCF_OBJECT)Adapter -> hwIface, Adapter);

            if ( ixStatus != IX_STATUS_SUCCESS  )
            {
                return NDIS_STATUS_FAILURE;
            }
#endif // MRV_USE_HELPER_IMAGE

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

        Adapter->CurPowerState = NewPowerState;

        // Enable INT
		If_EnableInterrupt(Adapter); 

        //      Update and report link status
        Adapter->MediaConnectStatus = NdisMediaStateDisconnected;
    	Adapter->LinkSpeed = MRVDRV_LINK_SPEED_1mbps;
        Adapter->ulNumOfBSSIDs = 0;
        Adapter->ulPSNumOfBSSIDs = 0;
        
        // indicate to OS that the network is not connected
        NdisMSetTimer(&Adapter->MrvDrvIndicateDisconnectTimer, 100);
        Adapter->DisconnectTimerSet = TRUE;

        //----------------------------------------------------------------------------
        // If the FW required reloading, then we have to kick start the receiver again.
        //----------------------------------------------------------------------------
        if ( bFwReloaded )
        {
    		// Update HW status
	    	Adapter->HardwareStatus = NdisHardwareStatusReady;
            //NdisScheduleWorkItem(&Adapter -> MrvDrvPMWorkItem);

            // 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);    
			
			  
            DBGPRINT(DBG_LOAD, ("Reinitialize wireless config\n"));
            InitializeWirelessConfig(Adapter);
        }

        Adapter->bRetryAssociate = TRUE;
            		
	    break;

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

	return NDIS_STATUS_SUCCESS;
}
#endif //IF_SDIO

/******************************************************************************
 *
 *  Name: CheckCurrentSationStatus()
 *
 *  Description: Check the current station operation status
 *
 *  Conditions for Use: called by the OID handler to get current station status
 *
 *  Arguments:           
 *      PMRVDRV_ADAPTER Adapter
 *    
 *  Return Value:
 *      NDIS_STATUS_SUCCESS
 *      NDIS_STATUS_ADAPTER_NOT_READY
 *      NDIS_STATUS_RESET_IN_PROGRESS
 *      NDIS_STATUS_MEDIA_DISCONNECT
 *
 *  Notes:               
 *
 *****************************************************************************/
NDIS_STATUS
CheckCurrentSationStatus(
	IN PMRVDRV_ADAPTER Adapter
)
{
	//
	//      If the station is not available, return all NDIS packet with NDIS_STATUS_####,
	//      depends on the following situation:
	//      (1) If the hardware status is ready
	//      (2) If the media is connected
	//      (3) If the link is established
	//

	//      First check HW status
	switch( Adapter->HardwareStatus ){
	case NdisHardwareStatusReset:
		return NDIS_STATUS_RESET_IN_PROGRESS;
	case NdisHardwareStatusInitializing:
	case NdisHardwareStatusNotReady:
		return NDIS_STATUS_ADAPTER_NOT_READY;
	default:
		break;
	}

    //      Check Power management state
    if( Adapter->CurPowerState != NdisDeviceStateD0 )
        return NDIS_STATUS_ADAPTER_NOT_READY;

	//      Check media connected status
	if( Adapter->MediaConnectStatus == NdisMediaStateDisconnected ){
		return NDIS_STATUS_MEDIA_DISCONNECT;
	}

	//      Check link
	if( Adapter->LinkSpeed == MRVDRV_LINK_SPEED_0mbps ){
		return NDIS_STATUS_MEDIA_DISCONNECT;
	}

    //      Check device removal status
    if( Adapter->SurpriseRemoved == TRUE ){
        return NDIS_STATUS_ADAPTER_REMOVED;
    }

	//return Status;
	return NDIS_STATUS_SUCCESS;
}

/*
===============================================================================
                           CODED PRIVATE PROCEDURES
===============================================================================
*/

VOID
ResetDisconnectStatus(
	IN PMRVDRV_ADAPTER Adapter
)
{
// tt ++ v5 firmware test
	static DWORD	s_nCallCount=0;
	s_nCallCount ++;
// tt --

    DBGPRINT(DBG_CMDRESP, ("Connection reset!\n"));
    // TODO: remove this if FW supports PS when not associated!!
    //DraleeMsg((L"**Rst Disconnect Status\n"));

#ifdef BG_SCAN
    if ( Adapter->bBgScanEnabled==TRUE)
    {    
        EnableBgScan( Adapter, FALSE);
    }
#endif 	 	

   //RETAILMSG(1,(TEXT("[Marvell]+ResetDisconnectStatus()")));
   #ifdef REASSOCIATE
      if (Adapter->CurrentSSID.SsidLength != 0)
       {
       	NdisMoveMemory(&Adapter->PreviousSSID, &Adapter->CurrentSSID,
					sizeof(NDIS_802_11_SSID));
       }
   #else
    NdisMoveMemory(&Adapter->PreviousSSID, &Adapter->CurrentSSID,
					sizeof(NDIS_802_11_SSID));
	NdisZeroMemory(&(Adapter->CurrentSSID), sizeof(NDIS_802_11_SSID));
	NdisZeroMemory(Adapter->CurrentBSSID, MRVDRV_ETH_ADDR_LEN);  
    NdisZeroMemory(&(Adapter->CurrentBSSIDDesciptor), sizeof(NDIS_WLAN_BSSID_EX));  
   #endif //REASSOCIATE	
	Adapter->MediaConnectStatus = NdisMediaStateDisconnected;
    Adapter->ulCurrentBSSIDIndex =0;
	Adapter->LinkSpeed = MRVDRV_LINK_SPEED_1mbps; //do not set to 0mbps
V5DbgMsg( (L"** before indicate (%d) (%d)\n", s_nCallCount, GetTickCount()) );


       Adapter->ulLastMICErrorTime = 0;
//35.p6++	   
#ifdef REASSOCIATE
	if ((Adapter->bIsReconnectEnable == FALSE) && 
	    (Adapter->bIsBeaconLoseEvent == FALSE) &&
	    (Adapter->bIsDeauthenticationEvent == FALSE)
	    #ifdef ACTIVE_ROAMING
	     &&(Adapter->bIsActiveRoaming == FALSE)
	    #endif
	    )
	{

		NdisMIndicateStatus( Adapter->MrvDrvAdapterHdl,
					NDIS_STATUS_MEDIA_DISCONNECT,
					(PVOID)NULL,
					0); 	
    		NdisMIndicateStatusComplete(Adapter->MrvDrvAdapterHdl);

				
    	    	if ( Adapter->EncryptionStatus == Ndis802_11Encryption2Enabled )  	// wpa
    	    	{
       		// set to key absent
        		Adapter->EncryptionStatus = Ndis802_11Encryption2KeyAbsent;
    	    	}
    	    	else if ( Adapter->EncryptionStatus == Ndis802_11Encryption3Enabled ) // wpa2
    	    	{
       		// set to key absent
        		Adapter->EncryptionStatus = Ndis802_11Encryption3KeyAbsent;
    	    	}
		
       }
#else
//original
	NdisMIndicateStatus(
		Adapter->MrvDrvAdapterHdl,
		NDIS_STATUS_MEDIA_DISCONNECT,
		(PVOID)NULL,
		0); 	
V5DbgMsg( (L"** after  indicate1 (%d) (%d)\n", s_nCallCount, GetTickCount()) );
	NdisMIndicateStatusComplete(Adapter->MrvDrvAdapterHdl);
V5DbgMsg( (L"** after  indicate2 (%d) (%d)\n", s_nCallCount, GetTickCount()) );

    
    if ( Adapter->EncryptionStatus == Ndis802_11Encryption2Enabled )
    {
        // set to key absent
        Adapter->EncryptionStatus = Ndis802_11Encryption2KeyAbsent;
    }
    else if ( Adapter->EncryptionStatus == Ndis802_11Encryption3Enabled )
    {
        // set to key absent
        Adapter->EncryptionStatus = Ndis802_11Encryption3KeyAbsent;
    }
    else if ( Adapter->EncryptionStatus == Ndis802_11Encryption1Enabled )
    {
        // set to key absent
        Adapter->EncryptionStatus = Ndis802_11Encryption1KeyAbsent;
    }
  
 #endif
//35.p6--
	return;
}	


VOID
ResetSingleTxDoneAck(
	IN PMRVDRV_ADAPTER Adapter
)
{
				
}	
NDIS_STATUS
SetMacPacketFilter(
	IN PMRVDRV_ADAPTER Adapter, 
	IN ULONG CurrentPacketFilter
)
{
	NDIS_STATUS Status;

    	DBGPRINT(DBG_WEP | DBG_CRLF | DBG_ALLEN ,("+SetMacPacketFilter() 0x%x \n", CurrentPacketFilter));
	// if the CurrentPacketFilter is 0, turn off Rx

	if (CurrentPacketFilter == 0)
	{

		Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE;
		Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_MULTICAST_ENABLE;
		Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_BROADCAST_ENABLE;
		Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;	
#ifdef WMM
                Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_WMM_ENABLE;
#endif

		Adapter->usMacControlRecord  |= (HostCmd_ACT_MAC_RX_ON | 
					         HostCmd_ACT_MAC_TX_ON |
					         HostCmd_ACT_MAC_INT_ENABLE);
       }
	else
	{
		//      Set default MAC option
		Adapter->usMacControlRecord  |= (HostCmd_ACT_MAC_RX_ON | 
					         HostCmd_ACT_MAC_TX_ON );
		
		// need to check if currently the wep is on
		if ( Adapter->WEPStatus == Ndis802_11WEPEnabled )
		{
		    DBGPRINT(DBG_WEP,("WEPStatus set, setting HostCmd_ACT_MAC_WEP_ENABLE in CmdOption\n"));
		    	Adapter->usMacControlRecord |= HostCmd_ACT_MAC_WEP_ENABLE;
		}
		else
		{
			Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_WEP_ENABLE;	
		}

		if( CurrentPacketFilter & NDIS_PACKET_TYPE_ALL_MULTICAST )
			Adapter->usMacControlRecord |= HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE;
		else
			Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE;

		if ( CurrentPacketFilter & NDIS_PACKET_TYPE_MULTICAST )
			Adapter->usMacControlRecord |= HostCmd_ACT_MAC_MULTICAST_ENABLE;
		else
			Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_MULTICAST_ENABLE;

		if ( CurrentPacketFilter & NDIS_PACKET_TYPE_BROADCAST )
			Adapter->usMacControlRecord |=  HostCmd_ACT_MAC_BROADCAST_ENABLE;
		else

⌨️ 快捷键说明

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