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

📄 exitproc.c

📁 marvell8385 GSPI开发驱动
💻 C
📖 第 1 页 / 共 2 页
字号:
{
  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 + -