Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenpower.cpp
Go to the documentation of this file.
00001 /* 00002 * COPYRIGHT: See COPYING in the top level directory 00003 * PROJECT: ReactOS Kernel Streaming 00004 * FILE: drivers/wdm/audio/backpln/portcls/power.cpp 00005 * PURPOSE: Power support functions 00006 * PROGRAMMER: Johannes Anderwald 00007 */ 00008 00009 #include "private.hpp" 00010 00011 NTSTATUS 00012 NTAPI 00013 PcRegisterAdapterPowerManagement( 00014 IN PUNKNOWN pUnknown, 00015 IN PVOID pvContext) 00016 { 00017 NTSTATUS Status; 00018 PDEVICE_OBJECT pDeviceObject; 00019 PPCLASS_DEVICE_EXTENSION DeviceExt; 00020 IAdapterPowerManagement * pPower; 00021 00022 DPRINT("PcRegisterAdapterPowerManagement pUnknown %p pvContext %p\n", pUnknown, pvContext); 00023 PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL); 00024 00025 if (!pUnknown || !pvContext) 00026 return STATUS_INVALID_PARAMETER; 00027 00028 00029 pDeviceObject = (PDEVICE_OBJECT)pvContext; 00030 DeviceExt = (PPCLASS_DEVICE_EXTENSION)pDeviceObject->DeviceExtension; 00031 00032 Status = pUnknown->QueryInterface(IID_IAdapterPowerManagement, (PVOID*)&pPower); 00033 if (!NT_SUCCESS(Status)) 00034 { 00035 DPRINT1("PcRegisterAdapterPowerManagement no IAdapterPowerManagement interface %x\n", Status); 00036 DeviceExt->AdapterPowerManagement = NULL; 00037 return STATUS_SUCCESS; 00038 } 00039 00040 DeviceExt->AdapterPowerManagement = pPower; 00041 DPRINT("PcRegisterAdapterPowerManagement success %x\n", Status); 00042 return STATUS_SUCCESS; 00043 } 00044 00045 00046 static 00047 VOID 00048 NTAPI 00049 PwrCompletionCallback( 00050 IN PDEVICE_OBJECT DeviceObject, 00051 IN UCHAR MinorFunction, 00052 IN POWER_STATE PowerState, 00053 IN PVOID Context, 00054 IN PIO_STATUS_BLOCK IoStatus) 00055 { 00056 KeSetEvent((PRKEVENT)Context, IO_NO_INCREMENT, FALSE); 00057 } 00058 00059 NTSTATUS 00060 NTAPI 00061 PcRequestNewPowerState( 00062 IN PDEVICE_OBJECT DeviceObject, 00063 IN DEVICE_POWER_STATE RequestedNewState) 00064 { 00065 KEVENT Event; 00066 NTSTATUS Status; 00067 POWER_STATE PowerState; 00068 PPCLASS_DEVICE_EXTENSION DeviceExt; 00069 00070 PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL); 00071 00072 if (!DeviceObject || !RequestedNewState) 00073 return STATUS_INVALID_PARAMETER; 00074 00075 DeviceExt = (PPCLASS_DEVICE_EXTENSION)DeviceObject->DeviceExtension; 00076 KeInitializeEvent(&Event, SynchronizationEvent, FALSE); 00077 00078 PowerState.DeviceState = RequestedNewState; 00079 PowerState.SystemState = PowerSystemUnspecified; 00080 00081 Status = PoRequestPowerIrp(DeviceExt->PhysicalDeviceObject, IRP_MN_SET_POWER, PowerState, PwrCompletionCallback, (PVOID)&Event, NULL); 00082 if (NT_SUCCESS(Status)) 00083 { 00084 KeWaitForSingleObject((PVOID)&Event, Executive, KernelMode, FALSE, NULL); 00085 } 00086 00087 00088 return Status; 00089 } 00090 Generated on Sat May 26 2012 04:27:11 for ReactOS by
1.7.6.1
|