From: Sir Richard Date: Mon, 22 Mar 2010 02:18:28 +0000 (+0000) Subject: [CMBATT]: Implement CmBattPowerDispatch for power requests. X-Git-Tag: backups/header-work@57446~86^2~54 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=9cb5d1c622a4983a49b9eedcab7e22266ee4e8ee;ds=sidebyside [CMBATT]: Implement CmBattPowerDispatch for power requests. svn path=/trunk/; revision=46337 --- diff --git a/reactos/drivers/bus/acpi/cmbatt/cmbpnp.c b/reactos/drivers/bus/acpi/cmbatt/cmbpnp.c index 410812e9adb..b8b634f4a83 100644 --- a/reactos/drivers/bus/acpi/cmbatt/cmbpnp.c +++ b/reactos/drivers/bus/acpi/cmbatt/cmbpnp.c @@ -159,11 +159,65 @@ CmBattRemoveDevice(IN PDEVICE_OBJECT DeviceObject, NTSTATUS NTAPI -CmBattPowerDispatch(PDEVICE_OBJECT DeviceObject, - PIRP Irp) +CmBattPowerDispatch(IN PDEVICE_OBJECT DeviceObject, + IN PIRP Irp) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + PIO_STACK_LOCATION IoStackLocation; + PCMBATT_DEVICE_EXTENSION DeviceExtension; + NTSTATUS Status; + if (CmBattDebug & 0x210) DbgPrint("CmBattPowerDispatch\n"); + + /* Get stack location and device extension */ + IoStackLocation = IoGetCurrentIrpStackLocation(Irp); + DeviceExtension = DeviceObject->DeviceExtension; + switch (IoStackLocation->MinorFunction) + { + case IRP_MN_WAIT_WAKE: + if (CmBattDebug & 0x10) + DbgPrint("CmBattPowerDispatch: IRP_MN_WAIT_WAKE\n"); + break; + + case IRP_MN_POWER_SEQUENCE: + if (CmBattDebug & 0x10) + DbgPrint("CmBattPowerDispatch: IRP_MN_POWER_SEQUENCE\n"); + break; + + case IRP_MN_QUERY_POWER: + if (CmBattDebug & 0x10) + DbgPrint("CmBattPowerDispatch: IRP_MN_WAIT_WAKE\n"); + break; + + case IRP_MN_SET_POWER: + if (CmBattDebug & 0x10) + DbgPrint("CmBattPowerDispatch: IRP_MN_SET_POWER type: %d, State: %d \n", + IoStackLocation->Parameters.Power.Type, + IoStackLocation->Parameters.Power.State); + break; + + default: + + if (CmBattDebug & 1) + DbgPrint("CmBattPowerDispatch: minor %d\n", IoStackLocation->MinorFunction); + break; + } + + /* Start the next IRP and see if we're attached */ + PoStartNextPowerIrp(Irp); + if (DeviceExtension->AttachedDevice) + { + /* Call ACPI */ + IoSkipCurrentIrpStackLocation(Irp); + Status = PoCallDriver(DeviceExtension->AttachedDevice, Irp); + } + else + { + /* Complete the request here */ + Status = Irp->IoStatus.Status; + IofCompleteRequest(Irp, IO_NO_INCREMENT); + } + + /* Return status */ + return Status; } NTSTATUS