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

📄 exitproc.c

📁 Windows CE 6.0 BSP for VOIP sample phone. Intel PXA270 platform.
💻 C
📖 第 1 页 / 共 2 页
字号:
 *  Return Value:   None
 *
 * 
 *  Notes: 
 *
 *****************************************************************************/
VOID
MrvDrvShutdownHandler(
	IN NDIS_HANDLE MiniportAdapterContext
	)
{
	/*
	PMRVDRV_ADAPTER Adapter;

	DBGPRINT(DBG_UNLOAD,("+MrvDrvShutdownHandler()\n"));
	Adapter = (PMRVDRV_ADAPTER)MiniportAdapterContext;

	// Shutdown the NIC
	PrepareAndSendCommand(
			Adapter, 
			HostCmd_CMD_802_11_RESET, 
			HostCmd_ACT_HALT, 
			HostCmd_OPTION_NO_INT,
			(NDIS_OID)0,
			HostCmd_PENDING_ON_NONE,
			0,
			FALSE,
			NULL,
			NULL,
			NULL,
			NULL);
	*/
	return;
}

/*
===============================================================================
            CODED LOCAL PROCEDURES
===============================================================================
*/

VOID CleanUpTimers(PMRVDRV_ADAPTER Adapter)
{
   	BOOLEAN  timerStatus;

	// Cancel and reset NDIS Tiemr variables

    	if ( Adapter->CommandTimerSet == TRUE )
    	{
       	NdisMCancelTimer(&Adapter->MrvDrvCommandTimer, &timerStatus);
		Adapter->CommandTimerSet = FALSE;
    	}

	if ( Adapter->TxPktTimerIsSet ) 
	{
		NdisMCancelTimer(&Adapter->MrvDrvTxPktTimer, &timerStatus);
		Adapter->TxPktTimerIsSet = FALSE;
	}

	if ( Adapter->ChechTxQueueTimerIsSet == TRUE )
    	{
      		NdisMCancelTimer(&Adapter->MrvDrvChechTxQueueTimer, &timerStatus);
	    	Adapter->ChechTxQueueTimerIsSet = FALSE;
    	}
	
    	if ( Adapter->DisconnectTimerSet ) 
	{
       	NdisMCancelTimer(&Adapter->MrvDrvIndicateConnectStatusTimer, &timerStatus);
        	Adapter->DisconnectTimerSet = FALSE;
    	}

	if ( Adapter->ReConnectTimerIsSet == TRUE )
    	{
       	NdisMCancelTimer(&Adapter->MrvReConnectTimer, &timerStatus);
	    	Adapter->ReConnectTimerIsSet = FALSE;
    	}

	if ( Adapter->ReConnectTimerIsSet == TRUE )
    	{
       	        NdisMCancelTimer(&Adapter->MrvDrvAvoidScanAfterConnectedTimer, &timerStatus);
	    	Adapter->bAvoidScanAfterConnectedforMSecs = FALSE;
    	}

#ifdef ACTIVE_ROAMING
	if ( Adapter->ActiveRoamingTimerIsSet == TRUE )
    	{
       	NdisMCancelTimer(&Adapter->MrvActiveRoamingTimer, &timerStatus);
	    	Adapter->ActiveRoamingTimerIsSet = FALSE;
    	}
#ifdef BG_SCAN
	if (Adapter->BGActiveRoamingTimerIsSet == TRUE )
	{
		NdisMCancelTimer(&Adapter->MrvBGActiveRoamingTimer, &timerStatus);
	    	Adapter->BGActiveRoamingTimerIsSet = FALSE;
	}
#endif
#endif	

	return;
	
}


VOID
FreeAdapter(PMRVDRV_ADAPTER Adapter)
{

	CleanUpTimers(Adapter);

	FreeAdapterBuffer(Adapter);

	CloseHandle(Adapter->hOidQueryEvent);
	CloseHandle(Adapter->hWaitForGetHwSpecEvent);
	CloseHandle(Adapter->hWaitForCommandFinish);

#ifdef USE_RX_QUEUE	
	NdisFreeSpinLock(&Adapter->RxQueueSpinLock);
#endif
	NdisFreeSpinLock(&Adapter->FreeQSpinLock);
	NdisFreeSpinLock(&Adapter->PriorityQSpinLock);
	NdisFreeSpinLock(&Adapter->TxSpinLock);
	NdisFreeSpinLock(&Adapter->RxSpinLock);
    	NdisFreeSpinLock(&Adapter->lCFInterfaceLock);

	DeleteCriticalSection(&Adapter->TxCriticalSection);
 	DeleteCriticalSection(&Adapter->CmdQueueExeSection);
	DeleteCriticalSection(&Adapter->IntCriticalSection);
	DeleteCriticalSection(&Adapter->DpcCriticalSection);
	DeleteCriticalSection(&Adapter->PsUpdateCriticalSection);
	
	FreeAdapterObject(Adapter);
	
       return;

}


VOID
FreeAdapterBuffer(PMRVDRV_ADAPTER Adapter)
{
	DBGPRINT(DBG_ALLEN, (" FreeAdapterBuffer() \n"));
	
       // Disable interrupt
    	DisableInterrupt(Adapter);
   	Adapter->INTCause =0;

	// tx
    	//CleanUpSingleTxBuffer(Adapter);
	FreeSingleTx(Adapter);

	// rx
	ResetRxPDQ(Adapter);
	FreeRxQ(Adapter);

    	// Command-related variables
	ResetCmdBuffer(Adapter);
	FreeCmdBuffer(Adapter);

	// Cleanup station HW
	CleanUpStationHW(Adapter);
	
	return;
}

/******************************************************************************
 *
 *  Name: FreeAdapterObject()
 *
 *  Description:	Device object clean-up routine
 *
 *
 *  Arguments:		IN NDIS_HANDLE MiniportAdapterContext
 *					Miniport context
 *    
 *  Return Value:   None
 *
 *  Notes: 
 *
 *****************************************************************************/
VOID
FreeAdapterObject(PMRVDRV_ADAPTER Adapter)
{
    	// Free the adapter object itself
    	MRVDRV_FREE_MEM((PVOID)Adapter, sizeof(MRVDRV_ADAPTER));

	return;
}

/******************************************************************************
 *
 *  Name: CleanUpStationHW()
 *
 *  Description:	Clean up HW memory mapping and other system resource
 *
 *  Arguments:		Miniport context
 *    
 *  Return Value:   None
 *
 * 
 *  Notes: 
 *
 *****************************************************************************/
VOID
CleanUpStationHW(IN PMRVDRV_ADAPTER Adapter)
{
	// Release Interrupt
	if ( Adapter->bIntRegistered )
	{
    		NdisMDeregisterInterrupt(&Adapter->hMrvDrvINT);
	    	Adapter->bIntRegistered = FALSE;
	}

	// Relase I/O port mapping
	if( Adapter->ulMrvDrvVirtualIoBase )
		NdisMDeregisterIoPortRange(
					Adapter->MrvDrvAdapterHdl,
					Adapter->ulMrvDrvPhyIoBaseAddress,
					Adapter->ulMrvDrvPhyIoLength,
					(PVOID)Adapter->ulMrvDrvVirtualIoBase);

	// if ( Adapter->InitializationStatus & MRVDRV_INIT_STATUS_MAP_REGISTER_ALLOCATED )
	// {
	//	// Release map registers
	//	NdisMFreeMapRegisters(Adapter->MrvDrvAdapterHdl);
	//}
       //
       
	// PJG: Destroy our compact flash interface.
	cf_DestroyIface( &Adapter->hwIface );
	
}

/******************************************************************************
 *
 *  Name: ResetAdapterObject()
 *
 *  Description:	Reset all the variables in the Adapter object
 *
 *  Arguments:	
 *    
 *  Return Value:   None
 *
 *  Notes: 
 *
 *****************************************************************************/
VOID
ResetAdapterObject(PMRVDRV_ADAPTER Adapter)
{
	DBGPRINT(DBG_ALLEN, (" ResetAdapterObject() \n"));
	
	// Disable interrupt, reset INTCause
	DisableInterrupt(Adapter);
	Adapter->INTCause =0;

       CleanUpTimers(Adapter);
	Adapter->TimerInterval = MRVDRV_DEFAULT_TIMER_INTERVAL;

	// Tx-related variables
       CleanUpSingleTxBuffer(Adapter);

	// Rx-related variables
	ResetRxPDQ(Adapter);
	
	// Command-related variables
	ResetCmdBuffer(Adapter);	

	// Operation characteristics
	Adapter->CurrentLookAhead = (ULONG)MRVDRV_MAXIMUM_ETH_PACKET_SIZE - MRVDRV_ETH_HEADER_SIZE;
	// 9/19/02: cannot set ProtocolOption to 0
	// Adapter->ProtocolOptions = 0;
	Adapter->MACOptions  = (ULONG)NDIS_MAC_OPTION_NO_LOOPBACK;
	Adapter->MediaConnectStatus = NdisMediaStateDisconnected;
	Adapter->MediaInUse = NdisMedium802_3;
	Adapter->LinkSpeed = MRVDRV_LINK_SPEED_0mbps;

	// Status variables
	Adapter->HardwareStatus = NdisHardwareStatusReady;

	// 802.11 specific
	// need to keep WEPStatus, AuthenticationMode, InfrastructureMode
	// Adapter->WEPStatus = Ndis802_11WEPDisabled;
	// Adapter->AuthenticationMode = Ndis802_11AuthModeOpen;
	// Adapter->InfrastructureMode = Ndis802_11Infrastructure;
	Adapter->PrivacyFilter = Ndis802_11PrivFilterAcceptAll;
	Adapter->ulNumOfBSSIDs =0;
	Adapter->ulPSNumOfBSSIDs =0;
	Adapter->ulCurrentBSSIDIndex =0;
	Adapter->ulAttemptedBSSIDIndex =0;
	///Adapter->bAutoAssociation = FALSE;
	Adapter->bIsAssociateInProgress = FALSE;
	Adapter->bIsScanInProgress = FALSE;
	Adapter->ulLastScanRequestTime =0;

       // Memorize the previous SSID and BSSID
       if ( Adapter->CurrentSSID.SsidLength != 0 ) 
	{
		NdisMoveMemory( &(Adapter->PreviousSSID), &(Adapter->CurrentSSID), sizeof(NDIS_802_11_SSID));
		NdisMoveMemory( Adapter->PreviousBSSID, Adapter->CurrentBSSID, MRVDRV_ETH_ADDR_LEN);
	}

	NdisZeroMemory(&(Adapter->CurrentSSID), sizeof(NDIS_802_11_SSID));
	NdisZeroMemory(Adapter->CurrentBSSID, MRVDRV_ETH_ADDR_LEN);
	
       NdisZeroMemory( &(Adapter->CurrentBSSIDDesciptor), 
                    sizeof(NDIS_WLAN_BSSID_EX));
	
	NdisZeroMemory( &(Adapter->CurrentBssDesciptor), 
                    sizeof(BSS_DESCRIPTION_SET_ALL_FIELDS));
		
       NdisZeroMemory( Adapter->BSSIDList, 
					sizeof(NDIS_WLAN_BSSID_EX) * MRVDRV_MAX_BSSID_LIST);
	
	NdisZeroMemory( Adapter->PSBSSIDList, 
		    sizeof(NDIS_WLAN_BSSID_EX) * MRVDRV_MAX_BSSID_LIST);

	NdisZeroMemory(Adapter->BssDescList, 
					sizeof(BSS_DESCRIPTION_SET_ALL_FIELDS) * MRVDRV_MAX_BSSID_LIST);

	NdisZeroMemory(Adapter->PSBssDescList, 
		    sizeof(BSS_DESCRIPTION_SET_ALL_FIELDS) * MRVDRV_MAX_BSSID_LIST);

	NdisZeroMemory(&Adapter->CurrentConfiguration,sizeof(NDIS_802_11_CONFIGURATION));

	// Initialize RSSI-related variables
	Adapter->LastRSSI = MRVDRV_RSSI_DEFAULT_NOISE_VALUE;
	Adapter->RSSITriggerValue = MRVDRV_RSSI_TRIGGER_DEFAULT;
	Adapter->RSSITriggerCounter = 0;

       Adapter->CurPowerState = NdisDeviceStateD0;
	Adapter->SupportTxPowerLevel = MRVDRV_TX_POWER_LEVEL_TOTAL;
	Adapter->CurrentTxPowerLevel = HostCmd_ACT_TX_POWER_INDEX_MID;

	// Clean up current WEP key
	NdisZeroMemory(&(Adapter->CurrentWEPKey), sizeof(MRVL_WEP_KEY));

       Adapter->bIsReconnectEnable = FALSE;
    
#ifdef ACTIVE_ROAMING
    	Adapter->bIsActiveRoaming = FALSE;
#endif //ACTIVE_ROAMING

	return;
}

VOID
ResetAdapterBuffer(PMRVDRV_ADAPTER Adapter)
{
	DBGPRINT(DBG_ALLEN, (" ResetAdapterBuffer() \n"));
	
	// Tx-related variables
       CleanUpSingleTxBuffer(Adapter);

	// Rx-related variables
	ResetRxPDQ(Adapter);
	
	// Command-related variables
	ResetCmdBuffer(Adapter);	
	
	return;
}

⌨️ 快捷键说明

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