📄 exitproc.c
字号:
* 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 + -