https://git.reactos.org/?p=reactos.git;a=commitdiff;h=04cd478035a1d1cab2d1dde391f8ffc633bde6ec
commit 04cd478035a1d1cab2d1dde391f8ffc633bde6ec Author: George Bișoc <george.bi...@reactos.org> AuthorDate: Sat Dec 14 20:36:09 2024 +0100 Commit: George Bișoc <george.bi...@reactos.org> CommitDate: Wed Jan 8 23:19:56 2025 +0100 [COMPBATT] Prepare the base foundation for the header file - Introduce some new constructs - Annotate the function prototypes with SAL2 - Re-structure & remove some useless fields in COMPBATT_DEVICE_EXTENSION and COMPBATT_BATTERY_DATA --- drivers/bus/acpi/compbatt/compbatt.h | 175 +++++++++++++++++++++++++---------- 1 file changed, 127 insertions(+), 48 deletions(-) diff --git a/drivers/bus/acpi/compbatt/compbatt.h b/drivers/bus/acpi/compbatt/compbatt.h index 950e5a5f7dd..1b8c1fb49d1 100644 --- a/drivers/bus/acpi/compbatt/compbatt.h +++ b/drivers/bus/acpi/compbatt/compbatt.h @@ -1,20 +1,81 @@ /* - * PROJECT: ReactOS Composite Battery Driver - * LICENSE: BSD - See COPYING.ARM in the top level directory - * FILE: boot/drivers/bus/acpi/compbatt/compbatt.h - * PURPOSE: Main Header File - * PROGRAMMERS: ReactOS Portable Systems Group + * PROJECT: ReactOS Composite Battery Driver + * LICENSE: BSD - See COPYING.ARM in the top level directory + * PURPOSE: Composite battery main header file + * COPYRIGHT: Copyright 2010 ReactOS Portable Systems Group + * Copyright 2024 George Bișoc <george.bi...@reactos.org> */ +/* INCLUDES *******************************************************************/ + #ifndef _COMPBATT_PCH_ #define _COMPBATT_PCH_ #include <wdm.h> #include <batclass.h> +/* DEFINES ********************************************************************/ + +// +// I/O remove lock allocate tag +// +#define COMPBATT_TAG 'aBoC' + +// +// Composite battery flags +// #define COMPBATT_BATTERY_INFORMATION_PRESENT 0x04 +#define COMPBATT_STATUS_NOTIFY_SET 0x10 #define COMPBATT_TAG_ASSIGNED 0x80 +// +// IRP complete worker mode states +// +#define COMPBATT_QUERY_TAG 1 +#define COMPBATT_READ_STATUS 2 + +// +// Low/High capacity wait constants +// +#define COMPBATT_WAIT_MIN_LOW_CAPACITY 0 +#define COMPBATT_WAIT_MAX_HIGH_CAPACITY 0x7FFFFFFF + +// +// One hour in seconds, used to calculate the total rate of each battery for time estimation +// +#define COMPBATT_ATRATE_HOUR_IN_SECS 3600 + +// +// Time constant of which the battery status data is considered fresh (50000000 * 100ns == 5s) +// +#define COMPBATT_FRESH_STATUS_TIME 50000000 + +// +// Macro that calculates the delta of a battery's capacity +// +#define COMPUTE_BATT_CAP_DELTA(LowDiff, Batt, TotalRate) \ + ((ULONG)(((LONGLONG)LowDiff * (Batt)->BatteryStatus.Rate) / TotalRate)) + +// +// Macro that calculates the "At Rate" time drain of the battery +// +#define COMPUTE_ATRATE_DRAIN(Batt, Time) \ + ((LONG)((Batt)->BatteryStatus.Capacity) * COMPBATT_ATRATE_HOUR_IN_SECS / Time) + +// +// Composite battery debug levels +// +#define COMPBATT_DEBUG_INFO 0x1 +#define COMPBATT_DEBUG_TRACE 0x2 +#define COMPBATT_DEBUG_WARN 0x4 +#define COMPBATT_DEBUG_ERR 0x10 +#define COMPBATT_DEBUG_ALL_LEVELS (COMPBATT_DEBUG_INFO | COMPBATT_DEBUG_TRACE | COMPBATT_DEBUG_WARN | COMPBATT_DEBUG_ERR) + +/* STRUCTURES *****************************************************************/ + +// +// Individual ACPI battery data +// typedef struct _COMPBATT_BATTERY_DATA { LIST_ENTRY BatteryLink; @@ -22,13 +83,14 @@ typedef struct _COMPBATT_BATTERY_DATA PDEVICE_OBJECT DeviceObject; PIRP Irp; WORK_QUEUE_ITEM WorkItem; - BOOLEAN WaitFlag; + UCHAR Mode; BATTERY_WAIT_STATUS WaitStatus; union { BATTERY_WAIT_STATUS WorkerWaitStatus; BATTERY_STATUS WorkerStatus; - }; + ULONG WorkerTag; + } WorkerBuffer; ULONG Tag; ULONG Flags; BATTERY_INFORMATION BatteryInformation; @@ -37,6 +99,9 @@ typedef struct _COMPBATT_BATTERY_DATA UNICODE_STRING BatteryName; } COMPBATT_BATTERY_DATA, *PCOMPBATT_BATTERY_DATA; +// +// Composite battery device extension data +// typedef struct _COMPBATT_DEVICE_EXTENSION { PVOID ClassData; @@ -47,110 +112,124 @@ typedef struct _COMPBATT_DEVICE_EXTENSION ULONG Flags; BATTERY_INFORMATION BatteryInformation; BATTERY_STATUS BatteryStatus; + BATTERY_WAIT_STATUS WaitNotifyStatus; ULONGLONG InterruptTime; - POWER_STATE PowerState; - ULONG LowCapacity; - ULONG HighCapacity; PDEVICE_OBJECT AttachedDevice; PDEVICE_OBJECT DeviceObject; PVOID NotificationEntry; } COMPBATT_DEVICE_EXTENSION, *PCOMPBATT_DEVICE_EXTENSION; +/* PROTOTYPES *****************************************************************/ + NTSTATUS NTAPI CompBattAddDevice( - IN PDRIVER_OBJECT DriverObject, - IN PDEVICE_OBJECT PdoDeviceObject + _In_ PDRIVER_OBJECT DriverObject, + _In_ PDEVICE_OBJECT PdoDeviceObject ); NTSTATUS NTAPI CompBattPowerDispatch( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp ); NTSTATUS NTAPI CompBattPnpDispatch( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp ); NTSTATUS NTAPI CompBattQueryInformation( - IN PCOMPBATT_DEVICE_EXTENSION FdoExtension, - IN ULONG Tag, - IN BATTERY_QUERY_INFORMATION_LEVEL InfoLevel, - IN OPTIONAL LONG AtRate, - IN PVOID Buffer, - IN ULONG BufferLength, - OUT PULONG ReturnedLength + _In_ PCOMPBATT_DEVICE_EXTENSION FdoExtension, + _In_ ULONG Tag, + _In_ BATTERY_QUERY_INFORMATION_LEVEL InfoLevel, + _In_opt_ LONG AtRate, + _In_ PVOID Buffer, + _In_ ULONG BufferLength, + _Out_ PULONG ReturnedLength ); NTSTATUS NTAPI CompBattQueryStatus( - IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension, - IN ULONG Tag, - IN PBATTERY_STATUS BatteryStatus + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension, + _In_ ULONG Tag, + _Out_ PBATTERY_STATUS BatteryStatus +); + +NTSTATUS +NTAPI +CompBattGetEstimatedTime( + _Out_ PULONG Time, + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension ); NTSTATUS NTAPI CompBattSetStatusNotify( - IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension, - IN ULONG BatteryTag, - IN PBATTERY_NOTIFY BatteryNotify + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension, + _In_ ULONG BatteryTag, + _In_ PBATTERY_NOTIFY BatteryNotify ); NTSTATUS NTAPI CompBattDisableStatusNotify( - IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension ); NTSTATUS NTAPI CompBattQueryTag( - IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension, - OUT PULONG Tag + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension, + _Out_ PULONG Tag ); NTSTATUS NTAPI CompBattMonitorIrpComplete( - IN PDEVICE_OBJECT DeviceObject, - IN PIRP Irp, - IN PKEVENT Event + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PIRP Irp, + _In_ PVOID Context ); -NTSTATUS +VOID NTAPI CompBattMonitorIrpCompleteWorker( - IN PCOMPBATT_BATTERY_DATA BatteryData + _In_ PCOMPBATT_BATTERY_DATA BatteryData ); NTSTATUS NTAPI CompBattGetDeviceObjectPointer( - IN PUNICODE_STRING DeviceName, - IN ACCESS_MASK DesiredAccess, - OUT PFILE_OBJECT *FileObject, - OUT PDEVICE_OBJECT *DeviceObject + _In_ PUNICODE_STRING DeviceName, + _In_ ACCESS_MASK DesiredAccess, + _Out_ PFILE_OBJECT *FileObject, + _Out_ PDEVICE_OBJECT *DeviceObject ); NTSTATUS NTAPI BatteryIoctl( - IN ULONG IoControlCode, - IN PDEVICE_OBJECT DeviceObject, - IN PVOID InputBuffer, - IN ULONG InputBufferLength, - IN PVOID OutputBuffer, - IN ULONG OutputBufferLength, - IN BOOLEAN InternalDeviceIoControl + _In_ ULONG IoControlCode, + _In_ PDEVICE_OBJECT DeviceObject, + _In_ PVOID InputBuffer, + _In_ ULONG InputBufferLength, + _Out_ PVOID OutputBuffer, + _Inout_ ULONG OutputBufferLength, + _In_ BOOLEAN InternalDeviceIoControl +); + +NTSTATUS +NTAPI +CompBattRemoveBattery( + _In_ PUNICODE_STRING BatteryName, + _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension ); extern ULONG CompBattDebug;