[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
This commit is contained in:
George Bișoc 2024-12-14 20:36:09 +01:00
parent 3ff9c476a0
commit 04cd478035
No known key found for this signature in database
GPG key ID: 688C4FBE25D7DEF6

View file

@ -1,20 +1,81 @@
/* /*
* PROJECT: ReactOS Composite Battery Driver * PROJECT: ReactOS Composite Battery Driver
* LICENSE: BSD - See COPYING.ARM in the top level directory * LICENSE: BSD - See COPYING.ARM in the top level directory
* FILE: boot/drivers/bus/acpi/compbatt/compbatt.h * PURPOSE: Composite battery main header file
* PURPOSE: Main Header File * COPYRIGHT: Copyright 2010 ReactOS Portable Systems Group
* PROGRAMMERS: ReactOS Portable Systems Group * Copyright 2024 George Bișoc <george.bisoc@reactos.org>
*/ */
/* INCLUDES *******************************************************************/
#ifndef _COMPBATT_PCH_ #ifndef _COMPBATT_PCH_
#define _COMPBATT_PCH_ #define _COMPBATT_PCH_
#include <wdm.h> #include <wdm.h>
#include <batclass.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_BATTERY_INFORMATION_PRESENT 0x04
#define COMPBATT_STATUS_NOTIFY_SET 0x10
#define COMPBATT_TAG_ASSIGNED 0x80 #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 typedef struct _COMPBATT_BATTERY_DATA
{ {
LIST_ENTRY BatteryLink; LIST_ENTRY BatteryLink;
@ -22,13 +83,14 @@ typedef struct _COMPBATT_BATTERY_DATA
PDEVICE_OBJECT DeviceObject; PDEVICE_OBJECT DeviceObject;
PIRP Irp; PIRP Irp;
WORK_QUEUE_ITEM WorkItem; WORK_QUEUE_ITEM WorkItem;
BOOLEAN WaitFlag; UCHAR Mode;
BATTERY_WAIT_STATUS WaitStatus; BATTERY_WAIT_STATUS WaitStatus;
union union
{ {
BATTERY_WAIT_STATUS WorkerWaitStatus; BATTERY_WAIT_STATUS WorkerWaitStatus;
BATTERY_STATUS WorkerStatus; BATTERY_STATUS WorkerStatus;
}; ULONG WorkerTag;
} WorkerBuffer;
ULONG Tag; ULONG Tag;
ULONG Flags; ULONG Flags;
BATTERY_INFORMATION BatteryInformation; BATTERY_INFORMATION BatteryInformation;
@ -37,6 +99,9 @@ typedef struct _COMPBATT_BATTERY_DATA
UNICODE_STRING BatteryName; UNICODE_STRING BatteryName;
} COMPBATT_BATTERY_DATA, *PCOMPBATT_BATTERY_DATA; } COMPBATT_BATTERY_DATA, *PCOMPBATT_BATTERY_DATA;
//
// Composite battery device extension data
//
typedef struct _COMPBATT_DEVICE_EXTENSION typedef struct _COMPBATT_DEVICE_EXTENSION
{ {
PVOID ClassData; PVOID ClassData;
@ -47,110 +112,124 @@ typedef struct _COMPBATT_DEVICE_EXTENSION
ULONG Flags; ULONG Flags;
BATTERY_INFORMATION BatteryInformation; BATTERY_INFORMATION BatteryInformation;
BATTERY_STATUS BatteryStatus; BATTERY_STATUS BatteryStatus;
BATTERY_WAIT_STATUS WaitNotifyStatus;
ULONGLONG InterruptTime; ULONGLONG InterruptTime;
POWER_STATE PowerState;
ULONG LowCapacity;
ULONG HighCapacity;
PDEVICE_OBJECT AttachedDevice; PDEVICE_OBJECT AttachedDevice;
PDEVICE_OBJECT DeviceObject; PDEVICE_OBJECT DeviceObject;
PVOID NotificationEntry; PVOID NotificationEntry;
} COMPBATT_DEVICE_EXTENSION, *PCOMPBATT_DEVICE_EXTENSION; } COMPBATT_DEVICE_EXTENSION, *PCOMPBATT_DEVICE_EXTENSION;
/* PROTOTYPES *****************************************************************/
NTSTATUS NTSTATUS
NTAPI NTAPI
CompBattAddDevice( CompBattAddDevice(
IN PDRIVER_OBJECT DriverObject, _In_ PDRIVER_OBJECT DriverObject,
IN PDEVICE_OBJECT PdoDeviceObject _In_ PDEVICE_OBJECT PdoDeviceObject
); );
NTSTATUS NTSTATUS
NTAPI NTAPI
CompBattPowerDispatch( CompBattPowerDispatch(
IN PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
IN PIRP Irp _In_ PIRP Irp
); );
NTSTATUS NTSTATUS
NTAPI NTAPI
CompBattPnpDispatch( CompBattPnpDispatch(
IN PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
IN PIRP Irp _In_ PIRP Irp
); );
NTSTATUS NTSTATUS
NTAPI NTAPI
CompBattQueryInformation( CompBattQueryInformation(
IN PCOMPBATT_DEVICE_EXTENSION FdoExtension, _In_ PCOMPBATT_DEVICE_EXTENSION FdoExtension,
IN ULONG Tag, _In_ ULONG Tag,
IN BATTERY_QUERY_INFORMATION_LEVEL InfoLevel, _In_ BATTERY_QUERY_INFORMATION_LEVEL InfoLevel,
IN OPTIONAL LONG AtRate, _In_opt_ LONG AtRate,
IN PVOID Buffer, _In_ PVOID Buffer,
IN ULONG BufferLength, _In_ ULONG BufferLength,
OUT PULONG ReturnedLength _Out_ PULONG ReturnedLength
); );
NTSTATUS NTSTATUS
NTAPI NTAPI
CompBattQueryStatus( CompBattQueryStatus(
IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension, _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension,
IN ULONG Tag, _In_ ULONG Tag,
IN PBATTERY_STATUS BatteryStatus _Out_ PBATTERY_STATUS BatteryStatus
);
NTSTATUS
NTAPI
CompBattGetEstimatedTime(
_Out_ PULONG Time,
_In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension
); );
NTSTATUS NTSTATUS
NTAPI NTAPI
CompBattSetStatusNotify( CompBattSetStatusNotify(
IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension, _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension,
IN ULONG BatteryTag, _In_ ULONG BatteryTag,
IN PBATTERY_NOTIFY BatteryNotify _In_ PBATTERY_NOTIFY BatteryNotify
); );
NTSTATUS NTSTATUS
NTAPI NTAPI
CompBattDisableStatusNotify( CompBattDisableStatusNotify(
IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension
); );
NTSTATUS NTSTATUS
NTAPI NTAPI
CompBattQueryTag( CompBattQueryTag(
IN PCOMPBATT_DEVICE_EXTENSION DeviceExtension, _In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension,
OUT PULONG Tag _Out_ PULONG Tag
); );
NTSTATUS NTSTATUS
NTAPI NTAPI
CompBattMonitorIrpComplete( CompBattMonitorIrpComplete(
IN PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
IN PIRP Irp, _In_ PIRP Irp,
IN PKEVENT Event _In_ PVOID Context
); );
NTSTATUS VOID
NTAPI NTAPI
CompBattMonitorIrpCompleteWorker( CompBattMonitorIrpCompleteWorker(
IN PCOMPBATT_BATTERY_DATA BatteryData _In_ PCOMPBATT_BATTERY_DATA BatteryData
); );
NTSTATUS NTSTATUS
NTAPI NTAPI
CompBattGetDeviceObjectPointer( CompBattGetDeviceObjectPointer(
IN PUNICODE_STRING DeviceName, _In_ PUNICODE_STRING DeviceName,
IN ACCESS_MASK DesiredAccess, _In_ ACCESS_MASK DesiredAccess,
OUT PFILE_OBJECT *FileObject, _Out_ PFILE_OBJECT *FileObject,
OUT PDEVICE_OBJECT *DeviceObject _Out_ PDEVICE_OBJECT *DeviceObject
); );
NTSTATUS NTSTATUS
NTAPI NTAPI
BatteryIoctl( BatteryIoctl(
IN ULONG IoControlCode, _In_ ULONG IoControlCode,
IN PDEVICE_OBJECT DeviceObject, _In_ PDEVICE_OBJECT DeviceObject,
IN PVOID InputBuffer, _In_ PVOID InputBuffer,
IN ULONG InputBufferLength, _In_ ULONG InputBufferLength,
IN PVOID OutputBuffer, _Out_ PVOID OutputBuffer,
IN ULONG OutputBufferLength, _Inout_ ULONG OutputBufferLength,
IN BOOLEAN InternalDeviceIoControl _In_ BOOLEAN InternalDeviceIoControl
);
NTSTATUS
NTAPI
CompBattRemoveBattery(
_In_ PUNICODE_STRING BatteryName,
_In_ PCOMPBATT_DEVICE_EXTENSION DeviceExtension
); );
extern ULONG CompBattDebug; extern ULONG CompBattDebug;