windows-nt/Source/XPSP1/NT/drivers/apm/apmbatt/i386/apmbattp.h
2020-09-26 16:20:57 +08:00

200 lines
4.7 KiB
C

/*++
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 <wdm.h>
#include <poclass.h>
//#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
);