2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Kernel Streaming
4 * FILE: drivers/wdm/audio/backpln/portcls/power.cpp
5 * PURPOSE: Power support functions
6 * PROGRAMMER: Johannes Anderwald
13 PcRegisterAdapterPowerManagement(
18 PDEVICE_OBJECT pDeviceObject
;
19 PPCLASS_DEVICE_EXTENSION DeviceExt
;
20 IAdapterPowerManagement
* pPower
;
22 DPRINT("PcRegisterAdapterPowerManagement pUnknown %p pvContext %p\n", pUnknown
, pvContext
);
23 PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL
);
25 if (!pUnknown
|| !pvContext
)
26 return STATUS_INVALID_PARAMETER
;
29 pDeviceObject
= (PDEVICE_OBJECT
)pvContext
;
30 DeviceExt
= (PPCLASS_DEVICE_EXTENSION
)pDeviceObject
->DeviceExtension
;
32 Status
= pUnknown
->QueryInterface(IID_IAdapterPowerManagement
, (PVOID
*)&pPower
);
33 if (!NT_SUCCESS(Status
))
35 DPRINT1("PcRegisterAdapterPowerManagement no IAdapterPowerManagement interface %x\n", Status
);
36 DeviceExt
->AdapterPowerManagement
= NULL
;
37 return STATUS_SUCCESS
;
40 DeviceExt
->AdapterPowerManagement
= pPower
;
41 DPRINT("PcRegisterAdapterPowerManagement success %x\n", Status
);
42 return STATUS_SUCCESS
;
49 PwrCompletionCallback(
50 IN PDEVICE_OBJECT DeviceObject
,
51 IN UCHAR MinorFunction
,
52 IN POWER_STATE PowerState
,
54 IN PIO_STATUS_BLOCK IoStatus
)
56 KeSetEvent((PRKEVENT
)Context
, IO_NO_INCREMENT
, FALSE
);
61 PcRequestNewPowerState(
62 IN PDEVICE_OBJECT DeviceObject
,
63 IN DEVICE_POWER_STATE RequestedNewState
)
67 POWER_STATE PowerState
;
68 PPCLASS_DEVICE_EXTENSION DeviceExt
;
70 PC_ASSERT_IRQL_EQUAL(PASSIVE_LEVEL
);
72 if (!DeviceObject
|| !RequestedNewState
)
73 return STATUS_INVALID_PARAMETER
;
75 DeviceExt
= (PPCLASS_DEVICE_EXTENSION
)DeviceObject
->DeviceExtension
;
76 KeInitializeEvent(&Event
, SynchronizationEvent
, FALSE
);
78 PowerState
.DeviceState
= RequestedNewState
;
79 PowerState
.SystemState
= PowerSystemUnspecified
;
81 Status
= PoRequestPowerIrp(DeviceExt
->PhysicalDeviceObject
, IRP_MN_SET_POWER
, PowerState
, PwrCompletionCallback
, (PVOID
)&Event
, NULL
);
82 if (NT_SUCCESS(Status
))
84 KeWaitForSingleObject((PVOID
)&Event
, Executive
, KernelMode
, FALSE
, NULL
);