VOID Hw11Free( __in PHW Hw ) { NdisFreeSpinLock(&Hw->Lock); if (Hw->PhyState.PhyProgramWorkItem != NULL) { NdisFreeIoWorkItem(Hw->PhyState.PhyProgramWorkItem); Hw->PhyState.PhyProgramWorkItem = NULL; } if (Hw->ScanContext.Timer_Scan) { NdisFreeTimerObject(Hw->ScanContext.Timer_Scan); Hw->ScanContext.Timer_Scan = NULL; } if (Hw->PhyState.Timer_Doze) { NdisFreeTimerObject(Hw->PhyState.Timer_Doze); Hw->PhyState.Timer_Doze = NULL; } if (Hw->PhyState.Timer_Awake) { NdisFreeTimerObject(Hw->PhyState.Timer_Awake); Hw->PhyState.Timer_Awake = NULL; } if (Hw->PhyState.RegDomainsSupportValue) { MP_FREE_MEMORY(Hw->PhyState.RegDomainsSupportValue); Hw->PhyState.RegDomainsSupportValue = NULL; } if (Hw->PhyState.DiversitySelectionRxList) { MP_FREE_MEMORY(Hw->PhyState.DiversitySelectionRxList); Hw->PhyState.DiversitySelectionRxList = NULL; } if (Hw->Hal != NULL) { HalFreeNic(Hw->Hal); Hw->Hal = NULL; } MP_FREE_MEMORY(Hw); }
VOID VenetHalt(NDIS_HANDLE handle, NDIS_HALT_ACTION action) { PADAPTER a = (PADAPTER) handle; UNREFERENCED_PARAMETER(action); vlog("halt called"); VENET_SET_SYNC_FLAG(a, VNET_ADAPTER_HALT_IN_PROGRESS); VenetDetach(a); VenetFreeQueuedSend(a, NDIS_STATUS_FAILURE); /* Now dec and wait for the remove event */ VENET_ADAPTER_PUT(a); NdisWaitEvent(&a->removeEvent, 5000); /* Free resources */ NdisFreeSpinLock(&a->Lock); if (a->resetTimer) NdisFreeTimerObject(a->resetTimer); if (a->recvTimer) NdisFreeTimerObject(a->recvTimer); if (a->dmaHandle) NdisMDeregisterScatterGatherDma(a->dmaHandle); VenetFreeRx(a); VenetFreeTx(a); if (a->vif.close) a->vif.close(a->bus_handle); NdisFreeSpinLock(&a->sendLock); NdisFreeSpinLock(&a->recvLock); VenetFree(a, sizeof(ADAPTER)); }
VOID HelperPortTerminateScanContext( _In_ PMP_HELPER_PORT HelperPort ) { PMP_SCAN_PARAMETERS scanParameters = NULL; ULONG i; // There can be scan requests around if we were waiting for exclusive access // for a request and it did not get satisfied if (HelperPort->ScanContext.ParametersCount != 0) { // We may have scan requests structures allocated, waiting for exclusive access // but that is never going to get satisfied. Free the requests for (i = 0; i < MP_MAX_NUMBER_OF_PORT; i++) { scanParameters = &HelperPort->ScanContext.ScanParameters[i]; if (scanParameters->State != SCAN_EMPTY_REQUEST) { // The only condition in which this is OK is when we are waiting for // an exclusive access MPASSERT(scanParameters->UsageCount == 1); HelperPortScanParametersReleaseRef(HelperPort, scanParameters); } } } if (HelperPort->ScanContext.Timer_Scan) { NdisFreeTimerObject(HelperPort->ScanContext.Timer_Scan); HelperPort->ScanContext.Timer_Scan = NULL; } for (i = 0; i < HW11_MAX_PHY_COUNT; i++) { if (HelperPort->ScanContext.ScanChannels[i].ChannelList != NULL) { MP_FREE_MEMORY(HelperPort->ScanContext.ScanChannels[i].ChannelList); HelperPort->ScanContext.ScanChannels[i].ChannelList = NULL; } } }
//------------------------------------------------------------------------------ tOplkError hrestimer_exit(void) { tHresTimerInfo* pTimerInfo; UINT index; if (!hresTimerInstance_l.fInitialized) return kErrorOk; for (index = 0; index < TIMER_COUNT; index++) { pTimerInfo = &hresTimerInstance_l.aTimerInfo[index]; NdisCancelTimerObject(pTimerInfo->timerObjHandle); NdisFreeTimerObject(pTimerInfo->timerObjHandle); pTimerInfo->dueTime.QuadPart = 0; pTimerInfo->eventArg.timerHdl.handle = 0; pTimerInfo->pfnCallback = NULL; } hresTimerInstance_l.fInitialized = FALSE; return kErrorOk; }
NDIS_STATUS HelperPortInitializeScanContext( _In_ PMP_HELPER_PORT HelperPort ) { NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; NDIS_TIMER_CHARACTERISTICS timerChar; ULONG i; do { HelperPort->ScanContext.ActiveScanParameters = NULL; // Allocate the power save timeout call back NdisZeroMemory(&timerChar, sizeof(NDIS_TIMER_CHARACTERISTICS)); timerChar.Header.Type = NDIS_OBJECT_TYPE_TIMER_CHARACTERISTICS; timerChar.Header.Revision = NDIS_TIMER_CHARACTERISTICS_REVISION_1; timerChar.Header.Size = sizeof(NDIS_TIMER_CHARACTERISTICS); timerChar.AllocationTag = PORT_MEMORY_TAG; timerChar.TimerFunction = HelperPortScanTimer; timerChar.FunctionContext = HelperPort; ndisStatus = NdisAllocateTimerObject( HELPPORT_GET_MP_PORT(HelperPort)->MiniportAdapterHandle, &timerChar, &HelperPort->ScanContext.Timer_Scan ); if (ndisStatus != NDIS_STATUS_SUCCESS) { MpTrace(COMP_INIT_PNP, DBG_SERIOUS, ("Failed to allocate helper port scan timer\n")); break; } // // Get list of channels we would scan // ndisStatus = HelperPortCreateScanChannelList(HelperPort); if (ndisStatus != NDIS_STATUS_SUCCESS) { MpTrace(COMP_INIT_PNP, DBG_SERIOUS, ("Failed to create helper port scan list\n")); break; } // Initialize the preallocated scan parameter structures for (i = 0; i < MP_MAX_NUMBER_OF_PORT; i++) { NdisZeroMemory(&HelperPort->ScanContext.ScanParameters[i], sizeof(MP_SCAN_PARAMETERS)); HelperPort->ScanContext.ScanParameters[i].State = SCAN_EMPTY_REQUEST; HelperPort->ScanContext.ScanParameters[i].UsageCount = 0; } // To maintain the scan list, we need to receive all beacons and probe responses. Set the // appropriate packet filter VNic11SetPacketFilter(HELPPORT_GET_VNIC(HelperPort), NDIS_PACKET_TYPE_802_11_BROADCAST_MGMT | NDIS_PACKET_TYPE_802_11_DIRECTED_MGMT ); }while (FALSE); if (ndisStatus != NDIS_STATUS_SUCCESS) { if (HelperPort->ScanContext.Timer_Scan) { NdisFreeTimerObject(HelperPort->ScanContext.Timer_Scan); HelperPort->ScanContext.Timer_Scan = NULL; } for (i = 0; i < HW11_MAX_PHY_COUNT; i++) { if (HelperPort->ScanContext.ScanChannels[i].ChannelList != NULL) { MP_FREE_MEMORY(HelperPort->ScanContext.ScanChannels[i].ChannelList); HelperPort->ScanContext.ScanChannels[i].ChannelList = NULL; } } } return ndisStatus; }