2 ia-32 platforms – Intel Extensible Firmware Interface User Manual

Page 49

Advertising
background image

Overview

Version 1.10

12/01/02

2-9

2.3.2

IA-32 Platforms

All functions are called with the C language calling convention. The general-purpose registers that
are volatile across function calls are eax, ecx, and edx. All other general-purpose registers are
nonvolatile and are preserved by the target function. In addition, unless otherwise specified by the
function definition, all other registers are preserved. For example, this would include the entire
floating point and Intel

®

MMX

technology state.

During boot services time the processor is in the following execution mode:
• Uniprocessor
• Protected mode
• Paging mode not enabled
• Selectors are set to be flat and are otherwise not used

• Interrupts are enabled–though no interrupt services are supported other than the EFI boot

services timer functions (All loaded device drivers are serviced synchronously by “polling.”)

• Direction flag in EFLAGs is clear
• Other general purpose flag registers are undefined
• 128 KB, or more, of available stack space
For an operating system to use any EFI runtime services, it must:
• Preserve all memory in the memory map marked as runtime code and runtime data
• Call the runtime service functions, with the following conditions:

 Called from the boot processor
 In protected mode
 Paging not enabled
 All selectors set to be flat with virtual = physical address. If the OS Loader or OS used

SetVirtualAddressMap()

to relocate the runtime services in a virtual address

space, then this condition does not have to be met.

 Direction flag in EFLAGs clear
 4 KB, or more, of available stack space
 Interrupts disabled

• Synchronize processor access to the legacy CMOS registers (if there are multiple processors).

Only one processor can access the registers at any given time.

• ACPI Tables loaded at boot time must be contained in memory of type

EfiACPIReclaimMemory

.

• The system firmware must not request a virtual mapping for any memory descriptor of type

EfiACPIReclaimMemory

or

EfiACPIMemoryNVS

.

• EFI memory descriptors of type

EfiACPIReclaimMemory

and

EfiACPIMemoryNVS

must be aligned on a 4 KB boundary and must be a multiple of 4 KB in size.

• Any EFI memory descriptor that requests a virtual mapping via the

EFI_MEMORY_DESCRIPTOR

having the

EFI_MEMORY_RUNTIME

bit set must be aligned

on a 4 KB boundary and must be a multiple of 4 KB in size.

Advertising