Specifications

Legacy BIOS References
173
13. Invoke the timer tick interrupt, if needed.
14. Copy the 16-bit register stack to the EFI stack.
15. Return the carry flag state for successful/unsuccessful completion.
5.6.4.1 IA-32
The Legacy section supports all the traditional BIOS software and hardware interrupts.
5.6.4.2 Itanium Processor Family
See the comments on executing 16-bit code. There is some added complexity because,
at a minimum, 8 nested interrupts need to be handled, and a few instructions such as
lGDT, CLI, and STI, need to be emulated. See the SAL specification for a complete
list. Also, we have to care for software interrupts, which can be done by careful
thunking. Also, special software interrupts such as AH=88, INT15, and other interrupts
that need to go to protected IA-32 mode must be serviced in 64-bit native mode itself by
filtering them out.
E820 CALL BUILDING
The E820 call runs in pure 16-bit real mode, so none of the EFI memory records or SAL
system records can be touched as they exist above 1 MB. So, we need to steal some
EBDA and copy them into it and modify the E820 call to translate these records from
EBDA into E820 records.
Traditional-Only Environment
The traditional-only environment is similar to the mixed EFI and traditional operation,
except that once the EFI code thunks into traditional mode, the traditional code never
returns to EFI mode. The traditional hardware and software interrupts are supported.
Note the following information for the Itanium® processor family in the traditional-only
environment:
There must be a PAL emulation layer that is invoked by the PAL_enter_IA32
call.
If the traditional OS returns that it is unable to load or that the OS was not
found, the code must go back to the EFI loader. To go back to native 64-bit
code, execute a special instruction called “jmpe” in the traditional 32-bit
mode. This instruction will abort the PAL emulation layer and will return to
the PAL emulation retiring address that is registered by native code before
invoking the PAL emulation layer. The native code will take over from there.