📄 exitproc.c
字号:
{
PMRVDRV_ADAPTER Adapter = (PMRVDRV_ADAPTER)MiniportAdapterContext;
DBGPRINT(DBG_UNLOAD,("EXIT - Enter MrvDrvHalt\n"));
//RETAILMSG(1,(TEXT("EXIT - Enter MrvDrvHalt \r\n")));
//dralee
return;
Adapter->SurpriseRemoved = TRUE;
// Disable interrupt
DisableInterrupt(Adapter);
Adapter->INTCause =0;
// tx
//CleanUpSingleTxBuffer(Adapter);
//lykao, 060205, for WinCE50
#ifndef MRVL_WINCE50
//FreeSingleTx(Adapter);
#endif
// rx
//ResetRxPDQ(Adapter);
//FreeRxQ(Adapter);
// Command-related variables
//ResetCmdBuffer(Adapter);
//FreeCmdBuffer(Adapter);
// Cleanup station HW
//CleanUpStationHW(Adapter);
// Release adapter object
FreeAdapterObject(Adapter);
return;
}
/******************************************************************************
*
* Name: MrvDrvShutdownHandler()
*
* Description: NDIS miniport shutdown event handler
*
*
* Arguments: IN NDIS_HANDLE MiniportAdapterContext
* Miniport context
*
* Return Value: None
*
*
* Notes:
*
*****************************************************************************/
VOID
MrvDrvShutdownHandler(
IN NDIS_HANDLE MiniportAdapterContext
)
{
PMRVDRV_ADAPTER Adapter;
RETAILMSG(1,(L"MrvDrvShutdownHandler,hd=0x%x\r\n",MiniportAdapterContext));
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
//RETAILMSG(1,(TEXT("Exit: CleanUPTimers \r\n")));
if ( Adapter->CommandTimerSet == TRUE )
{
NdisMCancelTimer(&Adapter->MrvDrvCommandTimer, &timerStatus);
Adapter->CommandTimerSet = FALSE;
}
//dralee
if(Adapter->TxPktTimerIsSet == TRUE)
{
NdisMCancelTimer(&Adapter->MrvDrvTxPktTimer, &timerStatus);
Adapter->TxPktTimerIsSet = FALSE;
}
if ( Adapter->DisconnectTimerSet )
{
NdisMCancelTimer(&Adapter->MrvDrvIndicateConnectStatusTimer, &timerStatus);
Adapter->DisconnectTimerSet = FALSE;
}
//dralee
if( Adapter->MrvDrvSdioCheckFWReadyTimerIsSet == TRUE )
{
NdisMCancelTimer(&Adapter->MrvDrvSdioCheckFWReadyTimer, &timerStatus);
Adapter->MrvDrvSdioCheckFWReadyTimerIsSet = FALSE;
}
#ifdef REASSOCIATE
if ( Adapter->ReConnectTimerIsSet == TRUE )
{
NdisMCancelTimer(&Adapter->MrvReConnectTimer, &timerStatus);
Adapter->ReConnectTimerIsSet = FALSE;
}
#endif //REASSOCIATE
}
/******************************************************************************
*
* Name: ResetAdapterObject()
*
* Description: Reset all the variables in the Adapter object
*
* Arguments:
*
* Return Value: None
*
* Notes:
*
*****************************************************************************/
VOID
ResetAdapterObject(PMRVDRV_ADAPTER Adapter)
{
// 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;
#ifdef DEBUG_PARA_ROAMING_PRINT
RETAILMSG(1,(TEXT("NdisMediaStateDisconnected is caused by ResetAdapterObject!...\n")));
#endif
WriteCommonLogFile(WIFI_LOG,"AP is disconnected(Reason=3) (ResetAdapterObject)!...\r\n",
strlen("AP is disconnected(Reason=3) (ResetAdapterObject)!...\r\n"));
if(g_AssociationDuration != 0)
{
char logstr[200];
sprintf(logstr,"Association Duration is %d seconds\r\n", (GetTickCount() - g_AssociationDuration)/1000);
WriteCommonLogFile(WIFI_LOG,logstr, strlen(logstr));
g_AssociationDuration = 0;
}
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->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->SoftwareFilterOn = FALSE;
/* dralee, 072905
#ifdef SDIO
Adapter->hISRThread = NULL;
Adapter->hTimerThread = NULL;
#endif
*/
#ifdef REASSOCIATE
Adapter->bIsReconnectEnable = FALSE;
#endif //REASSOCIATE
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)
{
//BOOLEAN timerStatus;
//RETAILMSG(1,(TEXT("Free Adaptor Objects \r\n")));
CleanUpTimers(Adapter);
//free TX Q
CleanUpSingleTxBuffer(Adapter);
// Free Rx Q
FreeRxQ(Adapter);
// Relase command buffer
FreeCmdBuffer(Adapter);
#ifdef AUTO_REASSOCIATION
if ( Adapter->bIsSendCmdImterSet )
{
NdisMCancelTimer( &Adapter->MrvDrvSendCmdTimer, &timerStatus );
Adapter->bIsSendCmdImterSet = 0;
}
#endif
CleanUpStationHW(Adapter);
if ( Adapter->InitializationStatus & MRVDRV_INIT_STATUS_MAP_REGISTER_ALLOCATED )
{
// Release map registers
NdisMFreeMapRegisters(Adapter->MrvDrvAdapterHdl);
}
// 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)
{
//RETAILMSG(1,(TEXT("Exit: CleanUPSync.Lock \r\n")));
DeleteCriticalSection(&Adapter->TxCriticalSection);
DeleteCriticalSection(&Adapter->IntCriticalSection);
DeleteCriticalSection(&Adapter->CmdQueueExeSection);
NdisFreeSpinLock(&Adapter->RxQueueSpinLock);
NdisFreeSpinLock(&Adapter->FreeQSpinLock);
//dralee_1108
//NdisFreeSpinLock(&Adapter->PriorityQSpinLock);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -