ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

power.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.