From 78f8948c0f8b0675cf6b29ffb06b7bd3eb404d5b Mon Sep 17 00:00:00 2001 From: Sir Richard Date: Sat, 13 Mar 2010 21:06:22 +0000 Subject: [PATCH] [CMBATT]: ACPI-compliant. WMI-managed Control Method Battery Driver. Step 1: Define the interface and ACPI/PnP structures. The rest of the code is in my WC but needs ACPI Eval IOCTL support in ReactOS before it'll work. svn path=/trunk/; revision=46188 --- reactos/drivers/bus/acpi/acpi.rbuild | 3 + reactos/drivers/bus/acpi/cmbatt/cmbatt.c | 149 ++++++++++++++++++ reactos/drivers/bus/acpi/cmbatt/cmbatt.h | 105 ++++++++++++ reactos/drivers/bus/acpi/cmbatt/cmbatt.rbuild | 13 ++ reactos/drivers/bus/acpi/cmbatt/cmbatt.rc | 5 + reactos/drivers/bus/acpi/cmbatt/cmbpnp.c | 104 ++++++++++++ reactos/drivers/bus/acpi/cmbatt/cmbwmi.c | 94 +++++++++++ reactos/drivers/bus/acpi/cmbatt/cmexec.c | 100 ++++++++++++ 8 files changed, 573 insertions(+) create mode 100644 reactos/drivers/bus/acpi/cmbatt/cmbatt.c create mode 100644 reactos/drivers/bus/acpi/cmbatt/cmbatt.h create mode 100644 reactos/drivers/bus/acpi/cmbatt/cmbatt.rbuild create mode 100644 reactos/drivers/bus/acpi/cmbatt/cmbatt.rc create mode 100644 reactos/drivers/bus/acpi/cmbatt/cmbpnp.c create mode 100644 reactos/drivers/bus/acpi/cmbatt/cmbwmi.c create mode 100644 reactos/drivers/bus/acpi/cmbatt/cmexec.c diff --git a/reactos/drivers/bus/acpi/acpi.rbuild b/reactos/drivers/bus/acpi/acpi.rbuild index f2b6a13cbca..cbc124a26f5 100644 --- a/reactos/drivers/bus/acpi/acpi.rbuild +++ b/reactos/drivers/bus/acpi/acpi.rbuild @@ -4,6 +4,9 @@ + + + diff --git a/reactos/drivers/bus/acpi/cmbatt/cmbatt.c b/reactos/drivers/bus/acpi/cmbatt/cmbatt.c new file mode 100644 index 00000000000..1957597a678 --- /dev/null +++ b/reactos/drivers/bus/acpi/cmbatt/cmbatt.c @@ -0,0 +1,149 @@ +/* + * PROJECT: ReactOS ACPI-Compliant Control Method Battery + * LICENSE: BSD - See COPYING.ARM in the top level directory + * FILE: boot/drivers/bus/acpi/cmbatt/cmbatt.c + * PURPOSE: Main Initialization Code and IRP Handling + * PROGRAMMERS: ReactOS Portable Systems Group + */ + +/* INCLUDES *******************************************************************/ + +#include "cmbatt.h" + +/* GLOBALS ********************************************************************/ + +ULONG CmBattDebug; + +/* FUNCTIONS ******************************************************************/ + +VOID +NTAPI +CmBattPowerCallBack(PCMBATT_DEVICE_EXTENSION DeviceExtension, + PVOID Argument1, + PVOID Argument2) +{ + UNIMPLEMENTED; +} + +VOID +NTAPI +CmBattWakeDpc(PKDPC Dpc, + PCMBATT_DEVICE_EXTENSION FdoExtension, + PVOID SystemArgument1, + PVOID SystemArgument2) +{ + UNIMPLEMENTED; +} + +VOID +NTAPI +CmBattNotifyHandler(PCMBATT_DEVICE_EXTENSION DeviceExtension, + ULONG NotifyValue) +{ + UNIMPLEMENTED; +} + +VOID +NTAPI +CmBattUnload(PDEVICE_OBJECT DeviceObject) +{ + UNIMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattVerifyStaticInfo(ULONG StaData, + ULONG BatteryTag) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattOpenClose(PDEVICE_OBJECT DeviceObject, + PIRP Irp) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattIoctl(PDEVICE_OBJECT DeviceObject, + PIRP Irp) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattQueryTag(PCMBATT_DEVICE_EXTENSION DeviceExtension, + PULONG BatteryTag) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattDisableStatusNotify(PCMBATT_DEVICE_EXTENSION DeviceExtension) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattSetStatusNotify(PCMBATT_DEVICE_EXTENSION DeviceExtension, + ULONG BatteryTag, + PBATTERY_NOTIFY BatteryNotify) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattGetBatteryStatus(PCMBATT_DEVICE_EXTENSION DeviceExtension, + ULONG BatteryTag) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattQueryInformation(PCMBATT_DEVICE_EXTENSION DeviceExtension, + ULONG BatteryTag, + BATTERY_QUERY_INFORMATION_LEVEL Level, + OPTIONAL LONG AtRate, + PVOID Buffer, + ULONG BufferLength, + PULONG ReturnedLength) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattQueryStatus(PCMBATT_DEVICE_EXTENSION DeviceExtension, + ULONG BatteryTag, + PBATTERY_STATUS BatteryStatus) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +DriverEntry(PDRIVER_OBJECT DriverObject, + PUNICODE_STRING RegistryPath) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +/* EOF */ diff --git a/reactos/drivers/bus/acpi/cmbatt/cmbatt.h b/reactos/drivers/bus/acpi/cmbatt/cmbatt.h new file mode 100644 index 00000000000..0443c4c86bb --- /dev/null +++ b/reactos/drivers/bus/acpi/cmbatt/cmbatt.h @@ -0,0 +1,105 @@ +/* + * PROJECT: ReactOS ACPI-Compliant Control Method Battery + * LICENSE: BSD - See COPYING.ARM in the top level directory + * FILE: boot/drivers/bus/acpi/cmbatt/cmbatt.h + * PURPOSE: Main Header File + * PROGRAMMERS: ReactOS Portable Systems Group + */ + +#include +#include +#include +#include +#include +#include + +#define CMBATT_GENERIC_STATUS 0x01 +#define CMBATT_GENERIC_INFO 0x02 +#define CMBATT_GENERIC_WARNING 0x04 +#define CMBATT_ACPI_WARNING 0x08 +#define CMBATT_POWER_INFO 0x10 +#define CMBATT_PNP_INFO 0x20 +#define CMBATT_ACPI_ENTRY_EXIT 0x40 +#define CMBATT_PNP_ENTRY_EXIT 0x200 +#define CMBATT_ACPI_ASSERT 0x400 + +typedef enum _CMBATT_EXTENSION_TYPE +{ + CmBattAcAdapter, + CmBattBattery +} CMBATT_EXTENSION_TYPE; + +typedef struct _ACPI_BST_DATA +{ + ULONG State; + ULONG PresentRate; + ULONG RemainingCapacity; + ULONG PresentVoltage; +} ACPI_BST_DATA, *PACPI_BST_DATA; + +typedef struct _ACPI_BIF_DATA +{ + ULONG PowerUnit; + ULONG DesignCapacity; + ULONG LastFullCapacity; + ULONG BatteryTechnology; + ULONG DesignVoltage; + ULONG DesignCapacityWarning; + ULONG DesignCapacityLow; + ULONG BatteryCapacityGranularity1; + ULONG BatteryCapacityGranularity2; + CHAR ModelNumber[256]; + CHAR SerialNubmer[256]; + CHAR BatteryType[256]; + CHAR OemInfo[256]; +} ACPI_BIF_DATA, *PACPI_BIF_DATA; + +typedef struct _CMBATT_DEVICE_EXTENSION +{ + CMBATT_EXTENSION_TYPE FdoType; + PDEVICE_OBJECT DeviceObject; + PDEVICE_OBJECT FdoDeviceObject; + PDEVICE_OBJECT PdoDeviceObject; + PDEVICE_OBJECT AttachedDevice; + FAST_MUTEX FastMutex; + ULONG HandleCount; + PIRP PowerIrp; + POWER_STATE PowerState; + WMILIB_CONTEXT WmiLibInfo; + ULONG WaitWakeEnable; + ULONG WmiCount; + KEVENT WmiEvent; + ULONG DeviceId; + PUNICODE_STRING DeviceName; + ACPI_INTERFACE_STANDARD2 AcpiInterface; + BOOLEAN DelayAr; + BOOLEAN DelayedArFlag; + PVOID ClassData; + BOOLEAN Started; + BOOLEAN NotifySent; + ULONG ArLock; + ULONG TagData; + ULONG Tag; + ULONG ModelNumberLength; + PCHAR ModelNumber; + ULONG SerialNumberLength; + PCHAR SerialNumber; + ULONG OemInfoLength; + PCHAR OemInfo; + ACPI_BST_DATA BstData; + ACPI_BIF_DATA BifData; + ULONG Id; + ULONG State; + ULONG RemainingCapacity; + ULONG PresentVoltage; + ULONG Rate; + BATTERY_INFORMATION StaticBatteryInformation; + ULONG BatteryCapacityGranularity1; + ULONG BatteryCapacityGranularity2; + BOOLEAN TripPointSet; + ULONG TripPointValue; + ULONG TripPointOld; + ULONGLONG InterruptTime; +} CMBATT_DEVICE_EXTENSION, *PCMBATT_DEVICE_EXTENSION; + +/* EOF */ diff --git a/reactos/drivers/bus/acpi/cmbatt/cmbatt.rbuild b/reactos/drivers/bus/acpi/cmbatt/cmbatt.rbuild new file mode 100644 index 00000000000..c8a09e31b44 --- /dev/null +++ b/reactos/drivers/bus/acpi/cmbatt/cmbatt.rbuild @@ -0,0 +1,13 @@ + + + + ntoskrnl + hal + battc + . + cmbatt.c + cmexec.c + cmbpnp.c + cmbwmi.c + cmbatt.rc + diff --git a/reactos/drivers/bus/acpi/cmbatt/cmbatt.rc b/reactos/drivers/bus/acpi/cmbatt/cmbatt.rc new file mode 100644 index 00000000000..d1542f9019e --- /dev/null +++ b/reactos/drivers/bus/acpi/cmbatt/cmbatt.rc @@ -0,0 +1,5 @@ +#define REACTOS_VERSION_DLL +#define REACTOS_STR_FILE_DESCRIPTION "Control Method Battery Miniclass Driver\0" +#define REACTOS_STR_INTERNAL_NAME "cmbatt\0" +#define REACTOS_STR_ORIGINAL_FILENAME "cmbatt.sys\0" +#include diff --git a/reactos/drivers/bus/acpi/cmbatt/cmbpnp.c b/reactos/drivers/bus/acpi/cmbatt/cmbpnp.c new file mode 100644 index 00000000000..fee3ec80b47 --- /dev/null +++ b/reactos/drivers/bus/acpi/cmbatt/cmbpnp.c @@ -0,0 +1,104 @@ +/* + * PROJECT: ReactOS ACPI-Compliant Control Method Battery + * LICENSE: BSD - See COPYING.ARM in the top level directory + * FILE: boot/drivers/bus/acpi/cmbatt/cmbpnp.c + * PURPOSE: Plug-and-Play IOCTL/IRP Handling + * PROGRAMMERS: ReactOS Portable Systems Group + */ + +/* INCLUDES *******************************************************************/ + +#include "cmbatt.h" + +/* FUNCTIONS ******************************************************************/ + +NTSTATUS +NTAPI +CmBattIoCompletion(PDEVICE_OBJECT DeviceObject, + PIRP Irp, + PKEVENT Event) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattGetAcpiInterfaces(PDEVICE_OBJECT DeviceObject, + PACPI_INTERFACE_STANDARD2 *AcpiInterface) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +VOID +NTAPI +CmBattDestroyFdo(PDEVICE_OBJECT DeviceObject) +{ + UNIMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattRemoveDevice(PDEVICE_OBJECT DeviceObject, + PIRP Irp) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattPowerDispatch(PDEVICE_OBJECT DeviceObject, + PIRP Irp) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattCreateFdo(PDRIVER_OBJECT DriverObject, + PDEVICE_OBJECT DeviceObject, + ULONG DeviceExtensionSize, + PDEVICE_OBJECT *NewDeviceObject) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattPnpDispatch(PDEVICE_OBJECT DeviceObject, + PIRP Irp) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattAddBattery(PDRIVER_OBJECT DriverObject, + PDEVICE_OBJECT DeviceObject) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattAddAcAdapter(PDRIVER_OBJECT DriverObject, + PDEVICE_OBJECT DeviceObject) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS NTAPI CmBattAddDevice(PDRIVER_OBJECT DriverObject, + PDEVICE_OBJECT DeviceObject) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +/* EOF */ diff --git a/reactos/drivers/bus/acpi/cmbatt/cmbwmi.c b/reactos/drivers/bus/acpi/cmbatt/cmbwmi.c new file mode 100644 index 00000000000..848c920dd0b --- /dev/null +++ b/reactos/drivers/bus/acpi/cmbatt/cmbwmi.c @@ -0,0 +1,94 @@ +/* + * PROJECT: ReactOS ACPI-Compliant Control Method Battery + * LICENSE: BSD - See COPYING.ARM in the top level directory + * FILE: boot/drivers/bus/acpi/cmbatt/cmbwmi.c + * PURPOSE: WMI Interface + * PROGRAMMERS: ReactOS Portable Systems Group + */ + +/* INCLUDES *******************************************************************/ + +#include "cmbatt.h" + +/* FUNCTIONS ******************************************************************/ + +NTSTATUS +NTAPI +CmBattQueryWmiRegInfo(PDEVICE_OBJECT DeviceObject, + PULONG RegFlags, + PUNICODE_STRING InstanceName, + PUNICODE_STRING *RegistryPath, + PUNICODE_STRING MofResourceName, + PDEVICE_OBJECT *Pdo) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattQueryWmiDataBlock(PDEVICE_OBJECT DeviceObject, + PIRP Irp, + ULONG GuidIndex, + ULONG InstanceIndex, + ULONG InstanceCount, + PULONG InstanceLengthArray, + ULONG BufferAvail, + PUCHAR Buffer) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattSetWmiDataBlock(PDEVICE_OBJECT DeviceObject, + PIRP Irp, + ULONG GuidIndex, + ULONG InstanceIndex, + ULONG BufferSize, + PUCHAR Buffer) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattSetWmiDataItem(PDEVICE_OBJECT DeviceObject, + PIRP Irp, + ULONG GuidIndex, + ULONG InstanceIndex, + ULONG DataItemId, + ULONG BufferSize, + PUCHAR Buffer) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattWmiDeRegistration(PCMBATT_DEVICE_EXTENSION DeviceExtension) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattWmiRegistration(PCMBATT_DEVICE_EXTENSION DeviceExtension) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattSystemControl(PDEVICE_OBJECT DeviceObject, PIRP Irp) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +/* EOF */ diff --git a/reactos/drivers/bus/acpi/cmbatt/cmexec.c b/reactos/drivers/bus/acpi/cmbatt/cmexec.c new file mode 100644 index 00000000000..a41865c5e4c --- /dev/null +++ b/reactos/drivers/bus/acpi/cmbatt/cmexec.c @@ -0,0 +1,100 @@ +/* + * PROJECT: ReactOS ACPI-Compliant Control Method Battery + * LICENSE: BSD - See COPYING.ARM in the top level directory + * FILE: boot/drivers/bus/acpi/cmbatt/cmexec.c + * PURPOSE: ACPI Method Execution/Evaluation Glue + * PROGRAMMERS: ReactOS Portable Systems Group + */ + +/* INCLUDES *******************************************************************/ + +#include "cmbatt.h" + +/* FUNCTIONS ******************************************************************/ + +NTSTATUS +NTAPI +GetDwordElement(PACPI_METHOD_ARGUMENT Argument, + PULONG Value) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +GetStringElement(PACPI_METHOD_ARGUMENT Argument, + PCHAR Value) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattGetPsrData(PDEVICE_OBJECT DeviceObject, + PULONG PsrData) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattGetBifData(PCMBATT_DEVICE_EXTENSION DeviceExtension, + PACPI_BIF_DATA BifData) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattGetBstData(PCMBATT_DEVICE_EXTENSION DeviceExtension, + PACPI_BST_DATA BstData) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattGetStaData(PDEVICE_OBJECT DeviceObject, + PULONG StaData) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattGetUniqueId(PDEVICE_OBJECT DeviceObject, + PULONG UniqueId) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattSetTripPpoint(PCMBATT_DEVICE_EXTENSION DeviceExtension, + ULONG AlarmValue) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +NTSTATUS +NTAPI +CmBattSendDownStreamIrp(PDEVICE_OBJECT DeviceObject, + ULONG IoControlCode, + PVOID InputBuffer, + ULONG InputBufferLength, + PACPI_EVAL_OUTPUT_BUFFER OutputBuffer, + ULONG OutputBufferLength) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + +/* EOF */