From e3bb4c900f4106c2bc369f9e70b3a2204e84c0ed Mon Sep 17 00:00:00 2001 From: Sir Richard Date: Wed, 24 Mar 2010 00:33:50 +0000 Subject: [PATCH] [CMBATT]: Implement _UID and _BTP ACPI method calls. svn path=/trunk/; revision=46383 --- reactos/drivers/bus/acpi/cmbatt/cmexec.c | 129 +++++++++++++++++------ 1 file changed, 94 insertions(+), 35 deletions(-) diff --git a/reactos/drivers/bus/acpi/cmbatt/cmexec.c b/reactos/drivers/bus/acpi/cmbatt/cmexec.c index 7aa8ecfdbba..e4b3297a9be 100644 --- a/reactos/drivers/bus/acpi/cmbatt/cmexec.c +++ b/reactos/drivers/bus/acpi/cmbatt/cmexec.c @@ -9,7 +9,6 @@ /* INCLUDES *******************************************************************/ #include "cmbatt.h" -#include "ntstatus.h" /* FUNCTIONS ******************************************************************/ @@ -151,8 +150,8 @@ CmBattSendDownStreamIrp(IN PDEVICE_OBJECT DeviceObject, NTSTATUS NTAPI -CmBattGetPsrData(PDEVICE_OBJECT DeviceObject, - PULONG PsrData) +CmBattGetPsrData(INP DEVICE_OBJECT DeviceObject, + OUT PULONG PsrData) { NTSTATUS Status; ACPI_EVAL_OUTPUT_BUFFER OutputBuffer; @@ -174,9 +173,9 @@ CmBattGetPsrData(PDEVICE_OBJECT DeviceObject, Status = CmBattSendDownStreamIrp(DeviceObject, IOCTL_ACPI_EVAL_METHOD, &InputBuffer, - sizeof(ACPI_EVAL_INPUT_BUFFER), + sizeof(InputBuffer), &OutputBuffer, - sizeof(ACPI_EVAL_OUTPUT_BUFFER)); + sizeof(OutputBuffer)); if (NT_SUCCESS(Status)) { /* Read the result */ @@ -196,61 +195,89 @@ CmBattGetPsrData(PDEVICE_OBJECT DeviceObject, NTSTATUS NTAPI -CmBattGetBifData(PCMBATT_DEVICE_EXTENSION DeviceExtension, - PACPI_BIF_DATA BifData) +CmBattGetStaData(IN PDEVICE_OBJECT DeviceObject, + OUT PULONG StaData) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; -} + NTSTATUS Status; + ACPI_EVAL_OUTPUT_BUFFER OutputBuffer; + ACPI_EVAL_INPUT_BUFFER InputBuffer; + PAGED_CODE(); + if (CmBattDebug & 0x40) + DbgPrint("CmBattGetStaData: Entered with Pdo %x Tid %x\n", + DeviceObject, KeGetCurrentThread()); + + /* Initialize to zero */ + ASSERT(StaData != NULL); + *StaData = 0; + + /* Request the _PSR method */ + *(PULONG)InputBuffer.MethodName = 'ATS_'; + InputBuffer.Signature = ACPI_EVAL_INPUT_BUFFER_SIGNATURE; -NTSTATUS -NTAPI -CmBattGetBstData(PCMBATT_DEVICE_EXTENSION DeviceExtension, - PACPI_BST_DATA BstData) -{ - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; -} + /* Send it to ACPI */ + Status = CmBattSendDownStreamIrp(DeviceObject, + IOCTL_ACPI_EVAL_METHOD, + &InputBuffer, + sizeof(InputBuffer), + &OutputBuffer, + sizeof(OutputBuffer)); + if (NT_SUCCESS(Status)) + { + /* Read the result */ + Status = GetDwordElement(OutputBuffer.Argument, StaData); + if (CmBattDebug & 0x440) + DbgPrint("CmBattGetStaData: _STA method returned %x \n", *StaData); + } + else if (CmBattDebug & 0x44C) + { + /* Failure */ + DbgPrint("CmBattGetStaData: Failed _STA method - Status (0x%x)\n", Status); + Status = STATUS_NO_SUCH_DEVICE; + } + + /* Return status */ + return Status; +} NTSTATUS NTAPI -CmBattGetStaData(PDEVICE_OBJECT DeviceObject, - PULONG StaData) +CmBattGetUniqueId(IN PDEVICE_OBJECT DeviceObject, + OUT PULONG UniqueId) { NTSTATUS Status; ACPI_EVAL_OUTPUT_BUFFER OutputBuffer; ACPI_EVAL_INPUT_BUFFER InputBuffer; PAGED_CODE(); if (CmBattDebug & 0x40) - DbgPrint("CmBattGetPsrData: Entered with Pdo %x Tid %x\n", + DbgPrint("CmBattGetUniqueId: Entered with Pdo %x Tid %x\n", DeviceObject, KeGetCurrentThread()); /* Initialize to zero */ - ASSERT(StaData != NULL); - *StaData = 0; + ASSERT(UniqueId != NULL); + *UniqueId = 0; /* Request the _PSR method */ - *(PULONG)InputBuffer.MethodName = 'ATS_'; + *(PULONG)InputBuffer.MethodName = 'DIU_'; InputBuffer.Signature = ACPI_EVAL_INPUT_BUFFER_SIGNATURE; /* Send it to ACPI */ Status = CmBattSendDownStreamIrp(DeviceObject, IOCTL_ACPI_EVAL_METHOD, &InputBuffer, - sizeof(ACPI_EVAL_INPUT_BUFFER), + sizeof(InputBuffer), &OutputBuffer, - sizeof(ACPI_EVAL_OUTPUT_BUFFER)); + sizeof(OutputBuffer)); if (NT_SUCCESS(Status)) { /* Read the result */ - Status = GetDwordElement(OutputBuffer.Argument, StaData); + Status = GetDwordElement(OutputBuffer.Argument, UniqueId); if (CmBattDebug & 0x440) - DbgPrint("CmBattGetPsrData: _STA method returned %x \n", *StaData); + DbgPrint("CmBattGetUniqueId: _UID method returned %x \n", *UniqueId); } else if (CmBattDebug & 0x44C) { /* Failure */ - DbgPrint("CmBattGetPsrData: Failed _STA method - Status (0x%x)\n", Status); + DbgPrint("CmBattGetUniqueId: Failed _UID method - Status (0x%x)\n", Status); Status = STATUS_NO_SUCH_DEVICE; } @@ -260,20 +287,52 @@ CmBattGetStaData(PDEVICE_OBJECT DeviceObject, NTSTATUS NTAPI -CmBattGetUniqueId(PDEVICE_OBJECT DeviceObject, - PULONG UniqueId) +CmBattSetTripPpoint(IN PCMBATT_DEVICE_EXTENSION DeviceExtension, + IN ULONG AlarmValue) +{ + NTSTATUS Status; + ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER InputBuffer; + PAGED_CODE(); + if (CmBattDebug & 0x440) + DbgPrint("CmBattSetTripPpoint: _BTP Alarm Value %x Device %x Tid %x\n", + AlarmValue, DeviceExtension->DeviceId, KeGetCurrentThread); + + /* Request the _BTP method */ + *(PULONG)InputBuffer.MethodName = 'PTB_'; + InputBuffer.Signature = ACPI_EVAL_INPUT_BUFFER_SIMPLE_INTEGER_SIGNATURE; + InputBuffer.IntegerArgument = AlarmValue; + + /* Send it to ACPI */ + Status = CmBattSendDownStreamIrp(DeviceExtension->AttachedDevice, + IOCTL_ACPI_EVAL_METHOD, + &InputBuffer, + sizeof(InputBuffer), + NULL, + 0); + if (!(NT_SUCCESS(Status)) && (CmBattDebug & 0x440)) + DbgPrint("CmBattSetTripPpoint: Failed _BTP method on device %x - Status (0x%x)\n", + DeviceExtension->DeviceId, Status); + + /* Return status */ + return Status; +} + +NTSTATUS +NTAPI +CmBattGetBifData(PCMBATT_DEVICE_EXTENSION DeviceExtension, + PACPI_BIF_DATA BifData) { UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; } NTSTATUS NTAPI -CmBattSetTripPpoint(PCMBATT_DEVICE_EXTENSION DeviceExtension, - ULONG AlarmValue) +CmBattGetBstData(PCMBATT_DEVICE_EXTENSION DeviceExtension, + PACPI_BST_DATA BstData) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; } - + /* EOF */ -- 2.17.1