Specifications
18
2.5 Interactions between CSM and Legacy BIOS
BDS and Legacy Drivers
BDS must invoke the CSM by dispatching the Legacy BIOS Protocol if either of the
following is true:
• A traditional OpROM is required.
• A traditional boot option is found in the boot sequence
2.5.1.1 Traditional OpROMs
There are two cases where traditional OpROMs are required in an EFI environment, as
follows:
No EFI driver exists
There are cases where a required device has no EFI driver but only a
traditional OpROM. The normal binding of a device and driver fails and an
attempt is made to do the binding via the EfiCompatibility code. This binding
is done in the Legacy BIOS Protocol. The thunk driver is bound by the BDS
(due to its priority) and the thunk driver calls back into the Legacy BIOS
Protocol to load the ROM.
Booting a traditional OS
All devices requiring an OpROM in a traditional BIOS boot will require
traditional OpROMs when booting a traditional OS in an EFI
environment. This requirement means that there may be an EFI driver and a
traditional OpROM for the same device. This transition from EFI to traditional
BIOS code is done in
EFI_LEGACY_BIOS_PROTOCOL.LegacyBoot().
This code disconnects all EFI drivers for traditional devices.
2.5.1.2 Determining if Traditional OS Is Present on a Boot Device
The EFI Device Path distinguishes between booting to the following:
• An EFI-aware OS (regardless if the device is EFI or traditional)
• A traditional OS
EFI_LEGACY_BIOS_PROTOCOL.LegacyBoot() is used in the latter case. It is
recommended that potential removable media boot devices are checked to see if any
media are present prior to setting boot devices. This check speeds up the boot time and
may prevent a possible system reset. A failed traditional boot will cause a system reset
any time control is passed to an OS boot loader and the loader returns back to the BIOS.
This reset occurs because EFI might have been corrupted.
2.5.1.3 Determining the Boot Sequence When Traditional OSs Are
Involved
The EFI device path determines which of the following is used:
• The normal EFI boot sequence
• The E
FI_LEGACY_BIOS_PROTOCOL.LegacyBoot() sequence










