/** * @brief This function frees the structure of adapter * * @param priv A pointer to wlan_private structure * @return n/a */ void wlan_free_adapter(wlan_private * priv) { wlan_adapter *Adapter = priv->adapter; ENTER(); if (!Adapter) { PRINTM(INFO, "Why double free adapter?:)\n"); return; } PRINTM(INFO, "Free Command buffer\n"); FreeCmdBuffer(priv); PRINTM(INFO, "Free CommandTimer\n"); if (Adapter->CommandTimerIsSet) { CancelTimer(&Adapter->MrvDrvCommandTimer); Adapter->CommandTimerIsSet = FALSE; } FreeTimer(&Adapter->MrvDrvCommandTimer); #ifdef REASSOCIATION PRINTM(INFO, "Free MrvDrvTimer\n"); if (Adapter->TimerIsSet) { CancelTimer(&Adapter->MrvDrvTimer); Adapter->TimerIsSet = FALSE; } FreeTimer(&Adapter->MrvDrvTimer); #endif /* REASSOCIATION */ if (Adapter->bgScanConfig) { kfree(Adapter->bgScanConfig); Adapter->bgScanConfig = NULL; } OS_FREE_LOCK(&Adapter->CurrentTxLock); OS_FREE_LOCK(&Adapter->QueueSpinLock); PRINTM(INFO, "Free ScanTable\n"); if (Adapter->ScanTable) { kfree(Adapter->ScanTable); Adapter->ScanTable = NULL; } PRINTM(INFO, "Free Adapter\n"); /* Free the adapter object itself */ kfree(Adapter); priv->adapter = NULL; LEAVE(); }
/****************************************************************************** * * 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 TX Q CleanUpSingleTxBuffer(Adapter); // Free Rx Q FreeRxQ(Adapter); wlan_ccx_free(Adapter); ///CCX_CCKM if (Adapter->WaitCCKMIEEvent != NULL) { CloseHandle(Adapter->WaitCCKMIEEvent); } ///CCX_CCKM // Relase command buffer FreeCmdBuffer(Adapter); CleanUpStationHW(Adapter); if (Adapter->RoamingMode == SMLS_ROAMING_MODE) { wlan_roam_deinit(Adapter->pwlanRoamParam); } if ( Adapter->InitializationStatus & MRVDRV_INIT_STATUS_MAP_REGISTER_ALLOCATED ) { // Release map registers NdisMFreeMapRegisters(Adapter->MrvDrvAdapterHdl); } CleanUpTimers(Adapter); // Free the adapter object itself MRVDRV_FREE_MEM((PVOID)Adapter, sizeof(MRVDRV_ADAPTER)); return; }