997 lines
30 KiB
Plaintext
997 lines
30 KiB
Plaintext
Organization: DFKI Saarbruecken GmbH, D-66123 Saarbruecken (Germany)
|
|
From: nebel@dfki.uni-sb.de (Bernhard Nebel)
|
|
X-Mn-Key: LAPTOPS
|
|
X-Note1: Remember to put 'X-Mn-Key: LAPTOPS' to your mail body or header
|
|
Sender: owner-linux-activists@joker.cs.hut.fi
|
|
To: linux-activists@joker.cs.hut.fi
|
|
Subject: APM V1.0
|
|
Date: Tue, 17 Aug 1993 16:23:52 +0300
|
|
|
|
|
|
|
|
NOTE: The "confidential" comment does not apply anymore. The APM V1.0 spec
|
|
is public (according to the guy from MS, who sent me the document).
|
|
|
|
|
|
Advanced Power Management
|
|
|
|
The Next Generation
|
|
|
|
|
|
|
|
Version 1.0
|
|
|
|
Microsoft Confidential
|
|
|
|
Intel Corporation
|
|
Microsoft Corporation
|
|
|
|
|
|
Advanced Power Management
|
|
|
|
1. Introduction
|
|
|
|
This document presents a layered approach to Power Management which is
|
|
termed Advanced Power Management(APM). APM is a specification that
|
|
defines a layered cooperative environment which allows applications,
|
|
operating systems, and the system BIOS to work together towards the goal
|
|
of reducing power consumption in Personal Computers. The primary purpose
|
|
of an APM implementation is to provide portable computer users increased
|
|
productivity and greater system availability by extending the useful
|
|
life of system batteries without degrading performance. The goal of
|
|
prolonging battery life for portable computers does not preclude the
|
|
usefulness of APM in other environments and applications.
|
|
|
|
This document describes APM using a model that partitions power
|
|
management functionality into a hierarchy of cooperating layers, and
|
|
standardizes the flow of information and control across the layers.
|
|
|
|
Microsoft and Intel would like to acknowledge Phoenix Technologies, Ltd.
|
|
for their contribution to the specification.
|
|
|
|
2. The Advanced Power Management System Model
|
|
|
|
2.1. Power States
|
|
|
|
APM defines four power states: Ready, Stand-by, Suspended, and Off.
|
|
Three of these states apply both to individual system components and to
|
|
the system as a whole. The suspended state is a special low power
|
|
condition that applies to the system as a whole, and not the individual
|
|
components.
|
|
|
|
2.1.1. Ready
|
|
|
|
In the ready state, the system or device is fully powered up and ready
|
|
for use. The APM definition of Ready only indicates that the system or
|
|
device is fully powered on, it does not differentiate between active and
|
|
idle conditions.
|
|
|
|
2.1.2. Stand-by
|
|
|
|
Stand-by is an intermediate system dependent state which attempts to
|
|
conserve power. Stand-by is entered when the CPU is idle and no device
|
|
activity is known to have occurred within a machine defined period of
|
|
time. The machine will not return to ready until one of the following
|
|
events occur:
|
|
|
|
A device raises a hardware interrupt
|
|
Any controlled device is accessed
|
|
|
|
All data and operational parameters are preserved when the machine is in
|
|
the Stand-by state.
|
|
|
|
2.1.3. Suspended
|
|
|
|
The Suspended state is a system state which is defined to be the lowest
|
|
level of power consumption available that preserves operational data and
|
|
parameters. The suspend state can be initiated by either the system
|
|
BIOS or the software above the BIOS. The system BIOS may place the
|
|
system into the suspended state without notification if it detects a
|
|
situation which requires an immediate response such as the battery
|
|
entering a critically low power state. When the system is in the
|
|
Suspended state, computation will not be performed until normal activity
|
|
is resumed. Resumption of activity will not occur until signaled by an
|
|
external event such as a button press, timer alarm, etc..
|
|
|
|
2.1.4. Off
|
|
|
|
When in the Off state, the system or device is powered down and
|
|
inactive. Data and operational parameters may or may not be preserved
|
|
in the Off state.
|
|
|
|
2.1.5. State Transitions
|
|
|
|
The system and devices can change from one power state to another either
|
|
by explicit command or automatically based on APM parameters and system
|
|
activity. The power capabilities of devices differ, and some devices
|
|
may not be capable of achieving all states. Additionally, some devices
|
|
may have built-in automatic power management functions which are
|
|
invisible to the system, and therefor outside the scope of the APM
|
|
specification.
|
|
|
|
|
|
2.2. Power Management Software Layers
|
|
|
|
2.2.1. The Power Management BIOS
|
|
|
|
The System BIOS is the lowest level of power management software in the
|
|
system. It will normally be supplied by the OEM and is specific to the
|
|
hardware platform.
|
|
|
|
The System BIOS will capable of providing power management functionality
|
|
without any support from the operating system or applications. This
|
|
support is analogous the ad hoc power management methods implemented on
|
|
current generation laptop systems. This functionality will be enhanced
|
|
once an APM aware operating system or environment establishes a
|
|
cooperative connection with the BIOS. Once made, this connection
|
|
establishes a protocol that allows the firmware to communicate power
|
|
management events to the operating system and to wait for operating
|
|
system concurrence if necessary. Details of the System BIOS operational
|
|
changes are documented in the description of the interface.
|
|
|
|
2.2.2. The Operating System Layer
|
|
|
|
The operating system layer has three primary power management functions;
|
|
|
|
1) passing calls and information between the application and System BIOS layers
|
|
2) arbitrating application power management calls in a multitasking environment
|
|
3) identifying power saving opportunities not apparent at the
|
|
application layer.
|
|
|
|
Different operating systems will require different PM application-to-OS
|
|
interfaces. On some systems this interface may best be implemented
|
|
through software interrupts, while on other systems, a CALL and RET
|
|
interface may be a more appropriate.
|
|
|
|
Operating systems that can be enhanced by optional extensions may
|
|
require specialized interfaces to allow the extensions to assist in the
|
|
power management function.
|
|
|
|
2.2.3. The Application Layer
|
|
|
|
The application layer assists the power management function by providing
|
|
information that only the application is in a position to know or easily
|
|
ascertain. Applications are not required to support the power
|
|
management function, but they can greatly increase its effectiveness,
|
|
particularly on less sophisticated operating systems. Under MS-DOS in
|
|
particular, the application is often in the best position to know when
|
|
it is idle and awaiting user input.
|
|
|
|
|
|
3. Power Management Software Interfaces
|
|
|
|
3.1. The Power Management BIOS Interface
|
|
|
|
The System BIOS interface must support a variety of CPU modes so that
|
|
the System BIOS implementation can provide power management to a mixed
|
|
mode environment like MS-Dos.
|
|
|
|
A real mode interface will be required on all APM implementations and is
|
|
the primary APM interface. This interface will be implemented with an
|
|
extension to the existing PC/AT Int 15h BIOS interface. The System BIOS
|
|
Int 15h interface must operate in either real mode, or virtual- 86 mode
|
|
on 80386 and later processors. Since the INT 15h processor instruction
|
|
normally disables interrupts, the System BIOS can typically expect to be
|
|
entered with interrupts disabled. However, the BIOS routines should not
|
|
depend on any particular setting, and should explicitly enable and
|
|
disable interrupts as necessary. To avoid re-entering Int 15h, an
|
|
Interrupt Service Routine (ISR) should not try to use any of the APM
|
|
functions.
|
|
|
|
To better support the protected modes of 80286 and later processors, the
|
|
System BIOS will optionally support a 16-bit and 32-bit protect mode
|
|
interface directly callable from protected mode. The protected mode
|
|
interfaces must first be initialized using the real mode Int 15h AH=53h.
|
|
Systems not supporting APM will return from this call with Carry Set and
|
|
AH=86h
|
|
|
|
The 16-bit and 32-bit protected mode interfaces must be initialized
|
|
using the Protected Mode 16-bit Interface Connect and Protected Mode
|
|
32-bit Interface Connect functions before these interfaces can be used.
|
|
|
|
If an error condition is detected during the processing of a System BIOS
|
|
function, upon return to the caller the carry (CY) flag will be set and
|
|
the AH register will contain an error code. The carry flag will be
|
|
clear upon return from any successful call, and the contents of the AH
|
|
register will be dependent on the particular call.
|
|
|
|
To allow for direct control of devices, this interface will adopt a
|
|
convention for identifying a device class and specific subclasses within
|
|
that class. For example, A class would be all Disk devices and the
|
|
subclasses would be the physical unit numbers. APM calls will take this
|
|
parameter, in a word length register where the most significant byte
|
|
will be the device class and the least significant byte will be the
|
|
device subclass. The impact of this parameter will be described in the
|
|
individual interface descriptions. The APM Class/Subclass IDs will be
|
|
defined as follows:
|
|
|
|
|
|
|
|
BX = Device ID
|
|
00XXh System
|
|
00 System BIOS
|
|
01 All devices power managed by the System Bios
|
|
01XXh Display
|
|
02XXh Secondary Storage
|
|
03XXh Parallel Ports
|
|
04XXh Serial Ports
|
|
|
|
0500 - FFFFH Reserved
|
|
|
|
where:
|
|
XX h = Physical Device Number (0 based)
|
|
FFh = All devices in this class
|
|
|
|
|
|
3.1.1. Interface Connect
|
|
|
|
An APM compliant System BIOS will likely provide some degree of power
|
|
management functionality without any support from system or application
|
|
software. The OEM or BIOS provider determines the degree to which power
|
|
management functionality is implemented by the BIOS in a stand-alone
|
|
configuration.
|
|
|
|
APM provides a cooperative interface between the System BIOS and other
|
|
system or application software that makes the other software a partner
|
|
in the power management process. Once this cooperative interface is
|
|
established the System BIOS will inform its partner of significant power
|
|
related events, and rely on its partner to actively participate in the
|
|
power management process. Some of the System BIOS functions can be
|
|
called regardless of whether or not the cooperative PM interface has
|
|
been established between the BIOS and the caller. However, some
|
|
functions, particularly those related to notification of power events,
|
|
will not operate until the cooperative interface is established.
|
|
|
|
|
|
3.1.1.1. APM Installation Check
|
|
|
|
Allows the caller to determine if the system's BIOS supports the APM
|
|
functionality and if so, which version of the specification it supports.
|
|
|
|
Call with:
|
|
AH = 53h
|
|
AL = 00h - Do APM installation check
|
|
BX = 0000H - System Bios
|
|
|
|
|
|
|
|
Returns:
|
|
if function successful:
|
|
Carry = 0
|
|
AH = major version number (in BCD format)
|
|
AL = minor version number (in BCD format)
|
|
BH = ASCII "P" character
|
|
BL = ASCII "M" character
|
|
CX = flags
|
|
bit 0 = 1 if 16-bit protected mode interface is supported.
|
|
bit 1 = 1 if 32-bit protected mode interface is supported.
|
|
bit 2 = 1 if CPU Idle call slows processor clock speed.
|
|
bit 3 = 1 if BIOS Power Management is disabled.
|
|
all other bits reserved.
|
|
|
|
if function unsuccessful:
|
|
Carry = 1 Indicates error condition
|
|
AH = 86h APM not present
|
|
|
|
The interpretation of bit 2 is documented under the CPU Busy call description.
|
|
|
|
This call is only available using the real mode Int 15h interface.
|
|
|
|
|
|
3.1.1.2. Interface Connect
|
|
|
|
Establishes the cooperative interface between the caller and the System
|
|
BIOS. Before the interface is established, the System BIOS will provide
|
|
its own power management functionality as implemented by the OEM. Once
|
|
the interface is established (connected), the System BIOS and the caller
|
|
will coordinate PM activities according to this specification.
|
|
|
|
Call with:
|
|
AH = 53h
|
|
AL = 01h
|
|
BX = 0000H - System Bios
|
|
|
|
Returns:
|
|
If function successful:
|
|
Carry = 0
|
|
If function unsuccessful:
|
|
Carry = 1
|
|
AH = error code
|
|
02h interface connection already in effect.
|
|
09h Unrecognized device ID
|
|
|
|
This call is only available using the APM Int 15h interface.
|
|
|
|
|
|
3.1.1.3. Protected Mode 16-bit Interface Connect
|
|
|
|
Initializes the optional 16-bit protected mode interface between the
|
|
caller and the System BIOS. This interface allows a protected mode
|
|
caller to invoke the System BIOS functions without the need to first
|
|
switch into real or virtual-86 mode. A caller that does not operate in
|
|
protected mode may not need to use this call. This function establishes
|
|
a 16-bit protected mode interface, but this function must be invoked in
|
|
either real or virtual-86 mode using the Int 15h interface.
|
|
|
|
Call with:
|
|
AH = 53h
|
|
AL = 02h
|
|
BX = 0000H - System Bios
|
|
|
|
Returns:
|
|
if function successful:
|
|
Carry = 0
|
|
AX = PM 16-bit code segment
|
|
(real mode segment base address)
|
|
BX = offset of entry point
|
|
CX = PM 16-bit data segment
|
|
(real mode segment base address)
|
|
if function unsuccessful:
|
|
Carry = 1
|
|
AH = error code
|
|
05h = 16-bit protected mode interface already established.
|
|
06h = 16-bit protected mode interface not supported
|
|
09h = Unrecognized device-id
|
|
|
|
The System BIOS 16-bit protected mode interface requires 2 consecutive
|
|
selector/segment descriptors for use as a 16-bit code and data segment,
|
|
respectively. The caller must initialize these descriptors using the
|
|
segment base information returned in the call from the BIOS. The
|
|
segment limit fields will arbitrarily be set to 64k. These selectors
|
|
may either be in the GDT or LDT, but must be valid whenever the System
|
|
BIOS is to be called in protected mode. The code segment descriptor
|
|
must specify protection level 0, and the BIOS routines must be invoked
|
|
with CPL = 0 so they can execute privileged instructions.
|
|
|
|
The caller invokes the System BIOS using the 16-bit interface by making
|
|
a far call to the code segment selector it initializes, with the offset
|
|
returned in BX. The caller must supply a stack large enough for modest
|
|
use by the BIOS and by potential interrupt handlers. The caller's stack
|
|
will be active if or when interrupts are enabled in the BIOS routine;
|
|
the BIOS will not switch stacks when interrupts are enabled, including
|
|
NMI interrupts. The BIOS 16-bit interface requires that it be called
|
|
with a 16-bit stack.
|
|
|
|
When the System BIOS routines are called in protected mode, the current
|
|
I/O permission bit map must allow access to the I/O ports the BIOS may
|
|
need to access in the process of performing the selected function.
|
|
|
|
The System BIOS will reject additional 16-bit protected mode connections
|
|
if a connection has already been established.
|
|
|
|
This call is only available using the APM Int 15h interface.
|
|
|
|
|
|
3.1.1.4. Protected Mode 32-bit Interface Connect
|
|
|
|
Initializes the optional 32-bit protected mode interface between the
|
|
caller and the System BIOS. This interface allows a protected mode
|
|
caller to invoke the System BIOS functions without the need to first
|
|
switch into real or virtual-86 mode. A caller that does not operate in
|
|
protected mode may not need to use this call. This function establishes
|
|
a 32-bit protected mode interface, but this function must be invoked in
|
|
either real or virtual-86 mode using the Int 15h interface.
|
|
|
|
Call with:
|
|
AH = 53h
|
|
AL = 03h
|
|
BX = 0000H - System Bios
|
|
|
|
Returns:
|
|
if function successful:
|
|
Carry = 0
|
|
AX = PM 32-bit code segment (real mode segment base address)
|
|
EBX = offset of entry point
|
|
CX = PM 16-bit code segment (real mode segment base address)
|
|
DX = PM data segment (real mode segment base address)
|
|
if function unsuccessful:
|
|
Carry = 1
|
|
AH = error code
|
|
07h = 32-bit protected mode interface already established.
|
|
08h = 32-bit protected mode interface not supported
|
|
09h = Unrecognized Device-ID
|
|
|
|
The System BIOS 32-bit protected mode interface requires 3 consecutive
|
|
selector/segment descriptors for use as 32-bit code, 16-bit code, and
|
|
data segments, respectively. Both 32-bit and 16-bit code segment
|
|
descriptors are necessary so the System BIOS 32-bit interface can call
|
|
other BIOS routines in a 16-bit code segment if it necessary. The
|
|
caller must initialize these descriptors using the segment base
|
|
information returned in the call from the BIOS. The segment limit
|
|
fields will arbitrarily be set to 64k. These selectors may either be in
|
|
the GDT or LDT, but must be valid whenever the System BIOS is to be
|
|
called in protected mode. The code segment descriptors must specify
|
|
protection level 0, and the BIOS routines must be invoked with CPL = 0
|
|
so they can execute privileged instructions.
|
|
|
|
The caller invokes the System BIOS using the 32-bit interface by making
|
|
a far call to the 32-bit code segment selector it initializes, with the
|
|
offset returned in EBX. The caller must supply a stack large enough for
|
|
modest use by the BIOS and by potential interrupt handlers. The
|
|
caller's stack will be active if or when interrupts are enabled in the
|
|
BIOS routine; the BIOS will not switch stacks when interrupts are
|
|
enabled, including NMI interrupts. The BIOS 32-bit entry point requires
|
|
that it be called with a 32-bit stack.
|
|
|
|
When the System BIOS routines are called in protected mode, the current
|
|
I/O permission bit map must allow access to the I/O ports the BIOS may
|
|
need to access in the process of performing the selected function.
|
|
|
|
The System BIOS will reject additional 32-bit protected mode connections
|
|
if it a 32-bit protected mode connection has already been established.
|
|
|
|
This call is only available using the APM Int 15h interface.
|
|
|
|
|
|
3.1.1.5. Interface Disconnect
|
|
|
|
Breaks the cooperative interaction between the System BIOS and the
|
|
caller, and in the process restores the System BIOS' default (built-in)
|
|
functionality. Any protected mode connection set up by the Protected
|
|
Mode 16-bit Interface Connect or Protected Mode 32-bit Interface Connect
|
|
functions are also invalidated by this call.
|
|
|
|
Even though this call returns control of power management strategy to
|
|
the System BIOS, the parameter values (timer values, enable/disable
|
|
settings, etc.) in effect at the time of the disconnect will remain in
|
|
effect.
|
|
|
|
Call with:
|
|
AH = 53h
|
|
AL = 04h
|
|
BX = 0000h - System BIOS
|
|
Returns:
|
|
if function successful:
|
|
Carry = 0
|
|
If function unsuccessful:
|
|
Carry = 1
|
|
AH = error code
|
|
03h = interface not connected
|
|
09h = Unrecognized Device-ID
|
|
|
|
This call is available in both the APM Int 15h and the Protect mode interfaces.
|
|
|
|
|
|
|
|
3.1.2. CPU Control
|
|
|
|
3.1.2.1. CPU Idle
|
|
|
|
Informs the System BIOS that the system is currently idle, and that
|
|
processing should be suspended until the next system event (typically an
|
|
interrupt) occurs. This function allows the System BIOS to take some
|
|
implementation specific power saving action, such as a CPU HLT
|
|
instruction or stopping the CPU clock.
|
|
|
|
In cases where an interrupt causes the system to leave the idle state,
|
|
the interrupt may or may not have been serviced when the BIOS returns
|
|
from the CPU Idle call. The caller should not make any assumptions
|
|
concerning interrupt servicing, and should allow pending interrupts to
|
|
be taken upon return from CPU Idle.
|
|
|
|
If interrupts are serviced from within the BIOS CPU Idle function, the
|
|
interrupt handler must return to the BIOS when the interrupt processing
|
|
is completed. The caller cannot use it's knowledge of being in the idle
|
|
state to retain control from an interrupt handler. For example, some
|
|
system implementations may slow the processor CPU clock rate before
|
|
waiting on an interrupt, and restore the normal clock rate after the
|
|
interrupt is serviced but before returning from the idle call.
|
|
|
|
When the caller regains control from the System BIOS idle routine, it
|
|
should determine if there is actually any processing to be performed,
|
|
and reissue the CPU Idle call if not. If the caller is a multitasking
|
|
supervisor, it may be necessary for it to dispatch its applications,
|
|
allowing them to check for activity that they should now perform.
|
|
|
|
Call with:
|
|
AH = 53h
|
|
AL = 05H
|
|
|
|
Returns success:
|
|
CY = 0
|
|
|
|
This function is available in both the APM Int 15h and Protect Mode interface.
|
|
|
|
|
|
3.1.2.2. CPU Busy
|
|
|
|
Informs the System BIOS that the system is now busy and processing
|
|
should continue at full speed. Some system implementations may only be
|
|
able to slow the CPU clock rate and return in response to the CPU Idle
|
|
call. It is expected that the System BIOS will restore the CPU clock
|
|
rate to its normal rate when it recognizes increased system activity
|
|
(typically interrupt driven), but it may be unable to do so when
|
|
interrupts are hooked by external software and do not invoke BIOS
|
|
routines.
|
|
|
|
In cases where this is possible, the caller can ensure the system is
|
|
running at full speed by invoking the CPU Busy function. Upon return
|
|
from the APM Installation Check call, bit 2 of the CX register indicates
|
|
if the System BIOS slows the CPU clock rate during the CPU Idle call.
|
|
The caller can use this bit to determine if it wishes to call CPU Busy
|
|
before executing code that it wants run at full speed.
|
|
|
|
Calling CPU Busy when the system is already operating at full speed is
|
|
discouraged due to the unnecessary call overhead, but the operation is
|
|
allowed and will have no unexpected side effects.
|
|
|
|
|
|
Call with:
|
|
AH = 53h
|
|
AL = 06H
|
|
|
|
Returns success:
|
|
CY = 0
|
|
|
|
This function is available in both the APM Int 15h and Protect Mode interface.
|
|
|
|
3.1.3. Set Power State
|
|
|
|
3.1.3.1. Call Description
|
|
|
|
This call will place the system or device specified in the power device
|
|
ID into the requested state.
|
|
|
|
Call with:
|
|
AH = 53h
|
|
AL = 07H
|
|
BX = Power Device ID
|
|
CX = System State ID
|
|
0000H Ready*
|
|
0001H Stand-by
|
|
0002H Suspend
|
|
0003H Off*
|
|
0004H-FFFFH Reserved
|
|
* Not supported for System Device ID 0001H
|
|
Returns:
|
|
If function successful:
|
|
Carry = 0
|
|
|
|
|
|
If function unsuccessful:
|
|
Carry = 1
|
|
AH = error code
|
|
01h = power management functionality disabled
|
|
09h = Unrecognized Device ID
|
|
0Ah= Parameter value in CX out of range
|
|
60h = Cannot enter requested state
|
|
|
|
This call is available in both the APM Int 15h and Protect Mode interfaces.
|
|
|
|
|
|
3.1.3.2. System Stand-by
|
|
|
|
Explicitly commands the System BIOS to put the system into the stand-by
|
|
state. The caller invokes this function in response to a System
|
|
Stand-by Request Notification from the System BIOS after the caller has
|
|
performed any processing of its own. The caller may also initiate a
|
|
stand-by operation at its own discretion. For example, it the caller
|
|
determines that the system is idle and is not already in the stand-by
|
|
state.
|
|
|
|
The state, typically, is exited when an interrupt is raised. Interrupts
|
|
can be serviced normally.
|
|
|
|
Call with:
|
|
AH = 53H
|
|
AL = 07H
|
|
BX = 0001H
|
|
CX = 0001H
|
|
|
|
This call is available in both the APM Int 15h and Protect Mode interfaces.
|
|
|
|
|
|
3.1.3.2.1. Suspend System
|
|
|
|
Explicitly commands the System BIOS to put the system into the low power
|
|
suspended state. The caller invokes this function in response to a
|
|
Suspend System Request Notification from the System BIOS after the
|
|
caller (presumably an operating system or similar environment) has
|
|
performed any pre-suspend processing of its own. In addition to
|
|
responding to System BIOS requests, the caller may initiate a suspend
|
|
operation at its own discretion. For example, it the caller determines
|
|
that the system has been completely idle (for other than normal
|
|
'background' processing like servicing timer interrupts, etc..) during a
|
|
given time interval it could request a system suspend using this call.
|
|
|
|
The System BIOS will not return to the caller until the system is
|
|
resumed from the suspended state. This eliminates the need for most
|
|
resume notifications from the System BIOS. Upon return, and when safe
|
|
to do so, the caller may notify any PM aware applications of the resume.
|
|
|
|
Since the system may have been suspended for a long period of time, the
|
|
caller may need to update its date and time values.
|
|
|
|
Call with:
|
|
AH = 53H
|
|
AL = 07H
|
|
BX = 0001H
|
|
CX = 0002H
|
|
|
|
This call is available in both the APM Int 15h and Protect Mode interfaces.
|
|
|
|
3.1.4. Power Management Status/Control
|
|
|
|
3.1.4.1. Enable/Disable Power Management Functionality
|
|
|
|
This function allows the caller to enable or disable all APM automatic
|
|
power down functionality. When disabled, the System BIOS will not
|
|
automatically power down devices, enter the stand-by state, enter the
|
|
suspended state, or take power saving steps in response to CPU Idle
|
|
calls. In addition, many System BIOS functions will be disabled and
|
|
will return error 01h, power management functionality disabled.
|
|
|
|
Call with:
|
|
AH = 53H
|
|
AL = 08H
|
|
BX = FFFFH Enable/Disable all power management
|
|
CX = 0 to disable power management
|
|
= 1 to enable power management
|
|
|
|
Returns:
|
|
if function successful:
|
|
Carry flag = clear
|
|
If function unsuccessful:
|
|
Carry flag = set
|
|
AH = error code
|
|
01h = power management functionality disabled
|
|
09h = Unrecognized Device ID
|
|
0Ah=Parameter value in CX out of range
|
|
|
|
This call is available in both the APM Int 15h and Protect Mode interfaces
|
|
|
|
|
|
|
|
|
|
3.1.4.2. Restore SYSTEM-BIOS Power On Defaults
|
|
|
|
This call will request the BIOS reinitialize all its power-on defaults.
|
|
|
|
Call with:
|
|
AH = 53H
|
|
AL = 09H
|
|
BX = FFFFH
|
|
|
|
Returns:
|
|
if function successful:
|
|
Carry flag = clear
|
|
If function unsuccessful:
|
|
Carry flag = set
|
|
AH = error code
|
|
09h = Unrecognized Device ID
|
|
|
|
This call is available in both the APM Int 15h and Protect Mode interfaces.
|
|
|
|
|
|
3.1.4.3. Get Power Status
|
|
|
|
Returns the systems current power status.
|
|
|
|
Call with:
|
|
AH = 53H
|
|
AL = 0AH
|
|
BX = 0001H
|
|
|
|
Returns:
|
|
if function successful:
|
|
Carry = 0
|
|
BH = AC line status
|
|
0 = off-line
|
|
1 = on-line
|
|
255 = unknown
|
|
all other values reserved
|
|
BL = Battery status
|
|
0 = high
|
|
1 = low
|
|
2 = critical
|
|
3 = charging
|
|
255 = unknown
|
|
all other values reserved
|
|
CL = Remaining battery life
|
|
0 - 100 = % of full charge
|
|
255 = unknown
|
|
If function unsuccessful:
|
|
Carry = 1
|
|
AH = error code
|
|
09h = Unrecognized Device ID
|
|
|
|
This call is available in both the APM Int 15h and Protect Mode interfaces.
|
|
|
|
3.1.5. Power Management Event Notification
|
|
|
|
Power events are often asynchronous to normal system operation and can
|
|
occur at times when the system software is not immediately ready to
|
|
process the event. In order to synchronize power events with other
|
|
system software, the System BIOS will withhold event notification until
|
|
polled with the Get PM Event function. This allows the cooperative PM
|
|
software to only receive event notification when it is ready to process
|
|
the event.
|
|
|
|
The PM partner receives notification of power events by periodically
|
|
calling the Get PM Event function. Power management events are not
|
|
extremely time critical, and a polling frequency of once or twice a
|
|
second should be sufficient.
|
|
|
|
|
|
3.1.5.1. Get PM Event
|
|
|
|
Returns the next pending PM event, or indicates if no PM events are pending.
|
|
|
|
Call with:
|
|
AH = 53H
|
|
AL = 0BH
|
|
|
|
Returns:
|
|
if function successful:
|
|
Carry = 0
|
|
BX = PM event code
|
|
01H System Stand-by Request Notification
|
|
02H System Suspend Request Notification
|
|
03H Normal Resume System Notification
|
|
04H Critical Resume System Notification
|
|
05H Battery Low Notification
|
|
|
|
|
|
If function unsuccessful:
|
|
Carry = 1
|
|
AH = error code
|
|
03h = interface connection not established
|
|
80h = no PM events pending
|
|
|
|
The PM event notification codes and their interpretation are described
|
|
in the following sections.
|
|
|
|
This call is available in both the APM Int 15h and Protect Mode interfaces.
|
|
|
|
|
|
3.1.5.1.1. System Stand-by Request Notification
|
|
|
|
Notifies the PM partner that the System BIOS wishes to put the system
|
|
into a stand-by state. The System BIOS will not take any action at this
|
|
time, but instead wait for the partner to call the System Stand-by
|
|
function.
|
|
|
|
3.1.5.1.2. Suspend System Request Notification
|
|
|
|
Notifies the PM partner that the System BIOS wishes to put the system
|
|
into a suspended state. The System BIOS will not actually perform a
|
|
suspend at this time, but instead wait for the partner to call the
|
|
Suspend System function.
|
|
|
|
3.1.5.1.3. Battery Low Notification
|
|
|
|
Informs the PM partner that the system's battery is running low.
|
|
|
|
3.1.5.1.4. Resume System Notification
|
|
|
|
Indicates that a critical system suspend and resume operation occurred
|
|
without the cooperation of the PM partner. When a suspend operation is
|
|
to occur, the System BIOS will normally notify the partner via the
|
|
Suspend System Request, but not actually perform the suspend until the
|
|
partner calls the Suspend System function. In some emergency siltations
|
|
this may not be possible, and the System BIOS may need to suspend the
|
|
system immediately. In this siltation, the System BIOS informs the
|
|
partner that the system has resumed from such a suspend via the Resume
|
|
System Notification. This notification allows the partner to recover
|
|
from the suspend as best it can.
|
|
|
|
3.1.6. Impact on Existing APIs
|
|
|
|
3.1.6.1. Watchdog Timers / System Alarm Services
|
|
|
|
These services will continue to function in an APM compliant System BIOS
|
|
in all power states except off. An application using these services can
|
|
expect to be given control at the specified date and time and that the
|
|
system will be in the ready state.
|
|
|
|
|
|
|
|
Appendix A - APM Function Summary
|
|
|
|
Function Available Connection
|
|
Description Interface Required
|
|
|
|
Int 15
|
|
16bit
|
|
32bit
|
|
|
|
|
|
Installation Check (00h)
|
|
XXX
|
|
|
|
|
|
No
|
|
|
|
Interface Connect (01h)
|
|
XXX
|
|
|
|
|
|
No
|
|
|
|
Protect Mode Connect 16bit (02h)
|
|
XXX
|
|
|
|
|
|
No
|
|
|
|
Protect Mode Connect 32bit (03h)
|
|
XXX
|
|
|
|
|
|
No
|
|
|
|
Interface Disconnect (04h)
|
|
XXX
|
|
XXX
|
|
XXX
|
|
Yes
|
|
|
|
CPU Idle (05h)
|
|
XXX
|
|
XXX
|
|
XXX
|
|
Yes
|
|
|
|
CPU Busy (06h)
|
|
XXX
|
|
XXX
|
|
XXX
|
|
Yes
|
|
|
|
Set Power State (07h)
|
|
System Stand-by
|
|
System Suspend
|
|
XXX
|
|
XXX
|
|
XXX
|
|
XXX
|
|
XXX
|
|
XXX
|
|
XXX
|
|
XXX
|
|
XXX
|
|
Yes
|
|
Yes
|
|
Yes
|
|
|
|
Enable Power Management Function (08h)
|
|
XXX
|
|
XXX
|
|
XXX
|
|
Yes
|
|
|
|
Disable Power Management Function
|
|
XXX
|
|
XXX
|
|
XXX
|
|
Yes
|
|
|
|
Restore Power on Defaults (09h)
|
|
XXX
|
|
XXX
|
|
XXX
|
|
No
|
|
|
|
Get Power Status (0Ah)
|
|
XXX
|
|
XXX
|
|
XXX
|
|
No
|
|
|
|
Get PM Event (0Bh)
|
|
XXX
|
|
XXX
|
|
XXX
|
|
Yes
|
|
|
|
|
|
|
|
|
|
Appendix B - Firmware Error Codes
|
|
|
|
Error Code Groupings:
|
|
Interface and general errors 00h - 1fh
|
|
CPU errors 20h - 3fh
|
|
Device Errors 40h - 5fh
|
|
System errors 60h - 7fh
|
|
Power Management event errors 80h - 9fh
|
|
|
|
|
|
|
|
Interface & General Errors
|
|
01h
|
|
Power Management functionality disabled
|
|
Suspend system
|
|
Set Power State
|
|
Get Power Event
|
|
Enable/Disable PM functionality
|
|
|
|
02
|
|
Interface connection already in effect
|
|
Interface connect
|
|
|
|
03h
|
|
Interface not connected
|
|
Interface disconnect
|
|
Get PM event
|
|
|
|
04h
|
|
Real mode connection not established
|
|
Protect mode 16-bit interface
|
|
connect
|
|
Protect mode 32-bit interface
|
|
connect
|
|
|
|
05h
|
|
16-bit protected mode interface already
|
|
established
|
|
Protect mode 16-bit interface
|
|
connect
|
|
|
|
06
|
|
16-bit protected mode interface not supported
|
|
Protect mode 16-bit interface
|
|
connect
|
|
|
|
07h
|
|
32-bit protected mode interface already
|
|
established
|
|
Protect mode 32-bit interface
|
|
connect
|
|
|
|
08h
|
|
32-bit protected mode interface not supported
|
|
Protect mode 32-bit interface
|
|
connect
|
|
|
|
09h
|
|
Unrecognized Device ID
|
|
Interface Connect
|
|
Protected Mode 16-bit Interface
|
|
Connect
|
|
Protected Mode 32-bit Interface
|
|
Connect
|
|
Interface Disconnect
|
|
Set Power State
|
|
Enable/Disable Power Management
|
|
Functionality
|
|
Restore SYSTEM-BIOS Power On
|
|
Defaults
|
|
Get Power Status
|
|
|
|
0Ah
|
|
Parameter value in CX out of range
|
|
Set Power State
|
|
Enable/Disable Power Management
|
|
Functionality
|
|
|
|
|
|
|
|
System Errors
|
|
60h
|
|
Can't enter requested state
|
|
Set Power State
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Power Management Event Errors
|
|
80h
|
|
No power management events pending
|
|
Get PM event
|
|
|
|
86h
|
|
Reserved - No APM present
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Intel/Microsoft Confidential Page 20 02/10/92
|
|
|
|
|
|
|