📄 smbbattp.h
字号:
//
// Battery Mode Definitions
//
#define CAPACITY_WATTS_MODE 0x8000
//
// Battery Scale Factors
//
#define BSCALE_FACTOR_0 1
#define BSCALE_FACTOR_1 10
#define BSCALE_FACTOR_2 100
#define BSCALE_FACTOR_3 1000
#define BATTERY_VSCALE_MASK 0x0f00
#define BATTERY_IPSCALE_MASK 0xf000
#define BATTERY_VSCALE_SHIFT 8
#define BATTERY_IPSCALE_SHIFT 12
//
// Selector command codes
//
#define SELECTOR_SELECTOR_STATE 0x01 // word
#define SELECTOR_SELECTOR_PRESETS 0x02 // word
#define SELECTOR_SELECTOR_INFO 0x04 // word
//
// Selector Equates
//
#define SELECTOR_SHIFT_CHARGE 4
#define SELECTOR_SHIFT_POWER 8
#define SELECTOR_SHIFT_COM 12
#define SELECTOR_STATE_PRESENT_MASK 0x000F
#define SELECTOR_STATE_CHARGE_MASK 0x00F0
#define SELECTOR_STATE_POWER_BY_MASK 0x0F00
#define SELECTOR_STATE_SMB_MASK 0xF000
#define SELECTOR_SET_COM_MASK 0x0FFF
#define SELECTOR_SET_POWER_BY_MASK 0xF0FF
#define SELECTOR_SET_CHARGE_MASK 0xFF0F
#define BATTERY_A_PRESENT 0x0001
#define BATTERY_B_PRESENT 0x0002
#define BATTERY_C_PRESENT 0x0004
#define BATTERY_D_PRESENT 0x0008
#define SELECTOR_STATE_PRESENT_CHANGE 0x1
#define SELECTOR_STATE_CHARGE_CHANGE 0x2
#define SELECTOR_STATE_POWER_BY_CHANGE 0x4
#define SELECTOR_STATE_SMB_CHANGE 0x8
#define SELECTOR_PRESETS_OKTOUSE_MASK 0x000F
#define SELECTOR_PRESETS_USENEXT_MASK 0x00F0
#define SELECTOR_SHIFT_USENEXT 4
#define SELECTOR_INFO_SUPPORT_MASK 0x000F
#define SELECTOR_INFO_SPEC_REVISION_MASK 0x00F0
#define SELECTOR_INFO_CHARGING_INDICATOR_BIT 0x0100
#define SELECTOR_SHIFT_REVISION 4
//
// Charger command codes
//
#define CHARGER_SPEC_INFO 0x11 // word
#define CHARGER_MODE 0x12 // word
#define CHARGER_STATUS 0x13 // word
#define CHARGER_CHARGING_CURRENT 0x14 // word
#define CHARGER_CHARGING_VOLTAGE 0x15 // word
#define CHARGER_ALARM_WARNING 0x16 // word
#define CHARGER_SELECTOR_COMMANDS 0x20
#define CHARGER_SELECTOR_STATE CHARGER_SELECTOR_COMMANDS | \
SELECTOR_SELECTOR_STATE
#define CHARGER_SELECTOR_PRESETS CHARGER_SELECTOR_COMMANDS | \
SELECTOR_SELECTOR_PRESETS
#define CHARGER_SELECTOR_INFO CHARGER_SELECTOR_COMMANDS | \
SELECTOR_SELECTOR_INFO
//
// Charger Status Definitions
//
#define CHARGER_STATUS_BATTERY_PRESENT_BIT 0x4000
#define CHARGER_STATUS_AC_PRESENT_BIT 0x8000
//
// Charger Specification Info Definitions
//
#define CHARGER_SELECTOR_SUPPORT_BIT 0x0010
//
// SelectorState ReverseLogic Equates
//
#define INVALID 0xFF
#define BATTERY_A 0x00
#define BATTERY_B 0x01
#define BATTERY_C 0x02
#define BATTERY_D 0x03
#define MULTIBATT_AB 0x04
#define MULTIBATT_AC 0x08
#define MULTIBATT_BC 0x09
#define MULTIBATT_ABC 0x24
#define BATTERY_NONE 0xFF
// word to byte helpers
#define WORD_MSB_SHIFT 8
#define WORD_LSB_MASK 0xFF
//
// Function Prototypes
//
VOID
SmbBattLockDevice (
IN PSMB_BATT SmbBatt
);
VOID
SmbBattUnlockDevice (
IN PSMB_BATT SmbBatt
);
VOID
SmbBattRequest (
IN PSMB_BATT SmbBatt,
IN PSMB_REQUEST SmbReq
);
NTSTATUS
SmbBattSynchronousRequest (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Context
);
VOID
SmbBattRB(
IN PSMB_BATT SmbBatt,
IN UCHAR SmbCmd,
OUT PUCHAR Buffer,
OUT PUCHAR BufferLength
);
VOID
SmbBattRW(
IN PSMB_BATT SmbBatt,
IN UCHAR SmbCmd,
OUT PULONG Result
);
VOID
SmbBattRSW(
IN PSMB_BATT SmbBatt,
IN UCHAR SmbCmd,
OUT PLONG Result
);
VOID
SmbBattWW(
IN PSMB_BATT SmbBatt,
IN UCHAR SmbCmd,
IN ULONG Data
);
UCHAR
SmbBattGenericRW(
IN PDEVICE_OBJECT SmbHcFdo,
IN UCHAR Address,
IN UCHAR SmbCmd,
OUT PULONG Result
);
UCHAR
SmbBattGenericWW(
IN PDEVICE_OBJECT SmbHcFdo,
IN UCHAR Address,
IN UCHAR SmbCmd,
IN ULONG Data
);
VOID
SmbBattGenericRequest (
IN PDEVICE_OBJECT SmbHcFdo,
IN PSMB_REQUEST SmbReq
);
VOID
SmbBattAlarm (
IN PVOID Context,
IN UCHAR Address,
IN USHORT Data
);
BOOLEAN
SmbBattVerifyStaticInfo (
IN PSMB_BATT SmbBatt,
IN ULONG BatteryTag
);
NTSTATUS
SmbBattPowerDispatch(
IN PDEVICE_OBJECT Fdo,
IN PIRP Irp
);
NTSTATUS
SmbBattPnpDispatch(
IN PDEVICE_OBJECT Fdo,
IN PIRP Irp
);
NTSTATUS
SmbBattRegisterForAlarm(
IN PDEVICE_OBJECT Fdo
);
NTSTATUS
SmbBattUnregisterForAlarm(
IN PDEVICE_OBJECT Fdo
);
NTSTATUS
SmbBattSetSelectorComm (
IN PSMB_BATT SmbBatt,
OUT PULONG OldSelectorState
);
NTSTATUS
SmbBattResetSelectorComm (
IN PSMB_BATT SmbBatt,
IN ULONG OldSelectorState
);
NTSTATUS
SmbGetSBS (
IN PULONG NumberOfBatteries,
IN PBOOLEAN SelectorPresent,
IN PDEVICE_OBJECT LowerDevice
);
NTSTATUS
SmbGetGLK (
IN PBOOLEAN GlobalLockRequired,
IN PDEVICE_OBJECT LowerDevice
);
NTSTATUS
SmbBattCreatePdos(
IN PDEVICE_OBJECT SubsystemFdo
);
NTSTATUS
SmbBattBuildDeviceRelations(
IN PSMB_BATT_SUBSYSTEM SubsystemExt,
IN PDEVICE_RELATIONS *DeviceRelations
);
NTSTATUS
SmbBattQueryDeviceRelations(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
SmbBattRemoveDevice(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
SmbBattQueryId(
IN PDEVICE_OBJECT Pdo,
IN PIRP Irp
);
NTSTATUS
SmbBattQueryCapabilities(
IN PDEVICE_OBJECT Pdo,
IN PIRP Irp
);
SmbBattBuildSelectorStruct(
IN PDEVICE_OBJECT SubsystemFdo
);
VOID
SmbBattWorkerThread (
IN PDEVICE_OBJECT Fdo,
IN PVOID Context
);
VOID
SmbBattLockSelector (
IN PBATTERY_SELECTOR Selector
);
VOID
SmbBattUnlockSelector (
IN PBATTERY_SELECTOR Selector
);
ULONG
SmbBattGetSelectorDeltas (
IN ULONG OriginalSelectorState,
IN ULONG NewSelectorState
);
VOID
SmbBattProcessPresentChanges (
IN PSMB_BATT_SUBSYSTEM SubsystemExt,
IN ULONG OriginalSelectorState,
IN ULONG NewSelectorState
);
VOID
SmbBattProcessChargeChange (
IN PSMB_BATT_SUBSYSTEM SubsystemExt,
IN ULONG OriginalSelectorState,
IN ULONG NewSelectorState
);
VOID
SmbBattProcessPowerByChange (
IN PSMB_BATT_SUBSYSTEM SubsystemExt,
IN ULONG OriginalSelectorState,
IN ULONG NewSelectorState
);
VOID
SmbBattNotifyClassDriver (
IN PSMB_BATT_SUBSYSTEM SubsystemExt,
IN ULONG BatteryIndex
);
#if DEBUG
NTSTATUS
SmbBattDirectDataAccess (
IN PSMB_NP_BATT DeviceExtension,
IN PSMBBATT_DATA_STRUCT IoBuffer,
IN ULONG InputLen,
IN ULONG OutputLen
);
#endif
VOID
SmbBattProcessChargerAlarm (
IN PSMB_BATT_SUBSYSTEM SubsystemExt,
IN ULONG ChargerStatus
);
NTSTATUS
SmbBattSetInformation (
IN PVOID Context,
IN ULONG BatteryTag,
IN BATTERY_SET_INFORMATION_LEVEL Level,
IN PVOID Buffer OPTIONAL
);
UCHAR
SmbBattIndex (
IN PBATTERY_SELECTOR Selector,
IN ULONG SelectorNibble,
IN UCHAR SimultaneousIndex
);
BOOLEAN
SmbBattReverseLogic (
IN PBATTERY_SELECTOR Selector,
IN ULONG SelectorNibble
);
extern BOOLEAN SmbBattUseGlobalLock;
NTSTATUS
SmbBattAcquireGlobalLock (
IN PDEVICE_OBJECT LowerDeviceObject,
OUT PACPI_MANIPULATE_GLOBAL_LOCK_BUFFER GlobalLock
);
NTSTATUS
SmbBattReleaseGlobalLock (
IN PDEVICE_OBJECT LowerDeviceObject,
IN PACPI_MANIPULATE_GLOBAL_LOCK_BUFFER GlobalLock
);
NTSTATUS
SmbBattSystemControl(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
SmbBattWmiRegistration(
PSMB_NP_BATT SmbNPBatt
);
NTSTATUS
SmbBattWmiDeRegistration(
PSMB_NP_BATT SmbNPBatt
);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -