Operating System Programming Guidelines
Version 1.4 B-5
By putting an appropriate pointer in the warm-reset vector, setting the shutdown code to 0Ah, then
causing an INIT, the BIOS (or the operating system) can cause the current processor to jump
immediately to any location. Because all processors in an MP system share the same system
memory, and because the INIT IPI gives one processor the power to cause an INIT at another, the
operating system can cause any processor to jump immediately to any location.
B.4.2 USING STARTUP IPI
STARTUP IPIs are used with systems based on Intel processors with local APIC versions of 1.x or
higher. These local APICs recognize the STARTUP IPI, which is an APIC Interprocessor Interrupt
with trigger mode set to edge and delivery mode set to “110” (bits 8 through 10 of the ICR).
The STARTUP IPI causes the target processor to start executing in Real Mode from address
000VV000h, where VV is an 8-bit vector that is part of the IPI message. Startup vectors are
limited to a 4-kilobyte page boundary in the first megabyte of the address space. Vectors A0-BF
are reserved; do not use vectors in this range. STARTUP IPIs are not maskable, do not cause any
change of state in the target processor (except for the change to the instruction pointer), and can be
issued only one time after RESET or after an INIT IPI
reception or pin assertion. A STARTUP IPI
neither requires the targeted APIC to be enabled nor the interrupt table to be programmed. If the
target processor is in the halted
state immediately after RESET or INIT, a STARTUP IPI causes it
to leave that state and start executing. The effect is to set CS:IP to VV00:0000h.
For an operating system to use a STARTUP IPI to wake up an AP, the address of the AP
initialization routine (or of a branch to that routine) must be in the form of 000VV000h. Sending a
STARTUP IPI with VV as its vector causes the AP to jump immediately to and begin executing
the operating system’s AP initialization routine.
The operating system should not issue a STARTUP IPI to an 82489DX since the STARTUP IPI
will be ignored instead of forcing the targeted processor to execute from the given address.
B.5 AP Shutdown Handling
An AP may be shut down by itself, by the BSP, or by another active AP. Shutting down an AP
with an active task or a bound device driver is not permitted. Only the BSP may shut itself down,
and it must be the last processor to shut down.
There are several possible alternatives for shutdown handling. Two of the possibilities are
presented here by way of example.
In the simplest case, the operating system can define an IPI for shutting down and taking APs off-
line. The exact usage and behavior of an IPI that is defined for this purpose is operating system
specific and is not defined in this specification.
Should the BSP need to take an AP off-line or to place the AP back into a HALT state, the BSP
can also use the INIT IPI with Warm Restart. The operating system places the address of a HLT
instruction in the warm-reset vector (40:67), sets the CMOS shut-down code to 0Ah, then sends an
INIT IPI to the AP. The INIT IPI causes the AP to enter the BIOS POST routine, where it
immediately jumps to the warm-reset vector and executes the operating system’s HLT instruction.
Only one processor can execute the shutdown routine at any given time, due to the use of the
shutdown code. The operating system must not rely on any code being executed after the delivery