/*++ Copyright (c) 1990 Microsoft Corporation Module Name: apmbattp.h Abstract: Control Method Battery Miniport Driver Author: Ron Mosgrove (Intel) Environment: Kernel mode Revision History: --*/ #ifndef FAR #define FAR #endif #include #include //#include "acpiioct.h" // // Debug // #define DEBUG 1 #if DEBUG extern ULONG ApmBattDebug; #define ApmBattPrint(l,m) if(l & ApmBattDebug) DbgPrint m #else #define ApmBattPrint(l,m) #endif #define APMBATT_LOW 0x00000001 #define APMBATT_NOTE 0x00000002 #define APMBATT_WARN 0x00000004 #define APMBATT_ERROR_ONLY 0x00000008 #define APMBATT_ERROR (APMBATT_ERROR_ONLY | APMBATT_WARN) #define APMBATT_POWER 0x00000010 #define APMBATT_PNP 0x00000020 #define APMBATT_CM_EXE 0x00000040 #define APMBATT_DATA 0x00000100 #define APMBATT_TRACE 0x00000200 #define APMBATT_BIOS 0x00000400 // Show message to verify BIOS/HW functionality #define APMBATT_MINI 0x00000800 // Show message to verify miniport retun data #define MAX_DEVICE_NAME_LENGTH 128 // // These definitions are for the Technology field of the BATTERY_INFORMATION structure. // They probably ought to be in the poclass.h file, but they've been here // a whole release and nothing bad has happened, so leave them here. // // BATTERY_INFORMATION.Technology flags // #define BATTERY_PRIMARY_NOT_RECHARGABLE 0x00 #define BATTERY_SECONDARY_CHARGABLE 0x01 // // Use the IoSkipCurrentIrpStackLocation routine because the we // don't need to change arguments, or a completion routine // #define ApmBattCallLowerDriver(Status, DeviceObject, Irp) { \ IoSkipCurrentIrpStackLocation(Irp); \ Status = IoCallDriver(DeviceObject,Irp); \ } #define GetTid() PsGetCurrentThread() // // Pagable device extension for control battery // typedef struct _CM_BATT { ULONG Type; // This must be the first entry // as it is shared with the AC_ACAPTER PDEVICE_OBJECT DeviceObject; // Battery device object PDEVICE_OBJECT Fdo; // Functional Device Object PDEVICE_OBJECT Pdo; // Physical Device Object PDEVICE_OBJECT LowerDeviceObject; // Detected at AddDevice time PVOID Class; // Battery Class handle BOOLEAN IsStarted; // if non zero, the device is started BOOLEAN IsCacheValid; // Is cached battery info currently valid? // // Selector // PVOID Selector; // Selector for battery // // Battery // ULONG TagCount; // Tag for next battery PUNICODE_STRING DeviceName; USHORT DeviceNumber; } CM_BATT, *PCM_BATT; // // Misc globals // extern PVOID ApmGlobalClass; extern ULONG DeviceCount; extern ULONG TagValue; extern ULONG (*NtApmGetBatteryLevel)(); // // Prototypes // NTSTATUS ApmBattPnpDispatch( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS ApmBattPowerDispatch( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS ApmBattForwardRequest( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ); NTSTATUS ApmBattAddDevice( IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT Pdo ); NTSTATUS ApmBattQueryTag ( IN PVOID Context, OUT PULONG BatteryTag ); NTSTATUS ApmBattSetStatusNotify ( IN PVOID Context, IN ULONG BatteryTag, IN PBATTERY_NOTIFY BatteryNotify ); NTSTATUS ApmBattDisableStatusNotify ( IN PVOID Context ); NTSTATUS ApmBattQueryStatus ( IN PVOID Context, IN ULONG BatteryTag, OUT PBATTERY_STATUS BatteryStatus ); NTSTATUS ApmBattIoCompletion( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PKEVENT pdoIoCompletedEvent ); NTSTATUS ApmBattQueryInformation ( IN PVOID Context, IN ULONG BatteryTag, IN BATTERY_QUERY_INFORMATION_LEVEL Level, IN ULONG AtRate OPTIONAL, OUT PVOID Buffer, IN ULONG BufferLength, OUT PULONG ReturnedLength ); VOID ApmBattPowerNotifyHandler( VOID );