27#ifndef _EFI_LEGACY_BIOS_H_
28#define _EFI_LEGACY_BIOS_H_
38#define EFI_COMPATIBILITY16_TABLE_SIGNATURE SIGNATURE_32 ('I', 'F', 'E', '$')
464#define DEVICE_SERIAL_MODE_NORMAL 0x00
465#define DEVICE_SERIAL_MODE_IRDA 0x01
466#define DEVICE_SERIAL_MODE_ASK_IR 0x02
467#define DEVICE_SERIAL_MODE_DUPLEX_HALF 0x00
468#define DEVICE_SERIAL_MODE_DUPLEX_FULL 0x10
484#define DEVICE_PARALLEL_MODE_MODE_OUTPUT_ONLY 0x00
485#define DEVICE_PARALLEL_MODE_MODE_BIDIRECTIONAL 0x01
486#define DEVICE_PARALLEL_MODE_MODE_EPP 0x02
487#define DEVICE_PARALLEL_MODE_MODE_ECP 0x03
579#define HDD_PRIMARY 0x01
580#define HDD_SECONDARY 0x02
581#define HDD_MASTER_ATAPI_CDROM 0x04
582#define HDD_SLAVE_ATAPI_CDROM 0x08
583#define HDD_MASTER_IDE 0x20
584#define HDD_SLAVE_IDE 0x40
585#define HDD_MASTER_ATAPI_ZIPDISK 0x10
586#define HDD_SLAVE_ATAPI_ZIPDISK 0x80
727#define BBS_FLOPPY 0x01
728#define BBS_HARDDISK 0x02
729#define BBS_CDROM 0x03
730#define BBS_PCMCIA 0x04
732#define BBS_EMBED_NETWORK 0x06
733#define BBS_BEV_DEVICE 0x80
734#define BBS_UNKNOWN 0xff
740#define BBS_DO_NOT_BOOT_FROM 0xFFFC
741#define BBS_LOWEST_PRIORITY 0xFFFD
742#define BBS_UNPRIORITIZED_ENTRY 0xFFFE
743#define BBS_IGNORE_ENTRY 0xFFFF
775#define STANDARD_IO 0x00
776#define STANDARD_MEMORY 0x01
782#define PORT_SIZE_8 0x00
783#define PORT_SIZE_16 0x01
784#define PORT_SIZE_32 0x02
785#define PORT_SIZE_64 0x03
791#define DATA_SIZE_8 0x00
792#define DATA_SIZE_16 0x01
793#define DATA_SIZE_32 0x02
794#define DATA_SIZE_64 0x03
808#define INT15_D042 0x0000
809#define GET_USB_BOOT_INFO 0x0001
810#define DMI_PNP_50_57 0x0002
816#define STANDARD_OWNER 0x0
922 UINT8 ServiceAreaData[64];
925#define EFI_TO_LEGACY_MAJOR_VERSION 0x02
926#define EFI_TO_LEGACY_MINOR_VERSION 0x00
927#define MAX_IDE_CONTROLLER 8
993#define EFI_LEGACY_BIOS_PROTOCOL_GUID \
995 0xdb9a1e3d, 0x45cb, 0x4abb, {0x85, 0x3b, 0xe5, 0x38, 0x7f, 0xdb, 0x2e, 0x2d } \
1004#define ROM_FOUND 0x01
1005#define VALID_LEGACY_ROM 0x02
1006#define ROM_WITH_CONFIG 0x04
1014#define EFI_SEGMENT(_Adr) (UINT16) ((UINT16) (((UINTN) (_Adr)) >> 4) & 0xf000)
1015#define EFI_OFFSET(_Adr) (UINT16) (((UINT16) ((UINTN) (_Adr))) & 0xffff)
1018#define CARRY_FLAG 0x01
1206 IN EFI_HANDLE PciHandle,
1207 OUT VOID **RomImage, OPTIONAL
1208 OUT UINTN *RomSize, OPTIONAL
1243 IN EFI_HANDLE PciHandle,
1246 OUT UINT8 *DiskStart, OPTIONAL
1247 OUT UINT8 *DiskEnd, OPTIONAL
1248 OUT VOID **RomShadowAddress, OPTIONAL
1249 OUT UINT32 *ShadowedRomSize OPTIONAL
1287 IN BBS_BBS_DEVICE_PATH *BootOption,
1288 IN UINT32 LoadOptionsSize,
1289 IN VOID *LoadOptions
1331 OUT UINT16 *HddCount,
1333 OUT UINT16 *BbsCount,
1352 OUT UINT16 *BbsCount,
1379 IN VOID *ServiceAreaData
1421 IN UINTN LegacyMemorySize,
1424 OUT VOID **LegacyMemoryAddress
1445 IN UINTN LegacyMemorySize,
1446 IN VOID *LegacyMemoryAddress,
1447 IN VOID *LegacyMemorySourceAddress
1524#define ACCESS_PAGE0_CODE(statements) \
1526 EFI_STATUS Status_; \
1527 EFI_GCD_MEMORY_SPACE_DESCRIPTOR Desc_; \
1529 Desc_.Attributes = 0; \
1530 Status_ = gDS->GetMemorySpaceDescriptor (0, &Desc_); \
1531 ASSERT_EFI_ERROR (Status_); \
1532 if ((Desc_.Attributes & EFI_MEMORY_RP) != 0) { \
1533 Status_ = gDS->SetMemorySpaceAttributes ( \
1535 EFI_PAGES_TO_SIZE(1), \
1536 Desc_.Attributes & ~(UINT64)EFI_MEMORY_RP \
1538 ASSERT_EFI_ERROR (Status_); \
1545 if ((Desc_.Attributes & EFI_MEMORY_RP) != 0) { \
1546 Status_ = gDS->SetMemorySpaceAttributes ( \
1548 EFI_PAGES_TO_SIZE(1), \
1551 ASSERT_EFI_ERROR (Status_); \
EFI_STATUS(EFIAPI * EFI_LEGACY_BIOS_COPY_LEGACY_REGION)(IN EFI_LEGACY_BIOS_PROTOCOL *This, IN UINTN LegacyMemorySize, IN VOID *LegacyMemoryAddress, IN VOID *LegacyMemorySourceAddress)
EFI_STATUS(EFIAPI * EFI_LEGACY_BIOS_PREPARE_TO_BOOT_EFI)(IN EFI_LEGACY_BIOS_PROTOCOL *This, OUT UINT16 *BbsCount, OUT BBS_TABLE **BbsTable)
EFI_STATUS(EFIAPI * EFI_LEGACY_BIOS_BOOT_UNCONVENTIONAL_DEVICE)(IN EFI_LEGACY_BIOS_PROTOCOL *This, IN UDC_ATTRIBUTES Attributes, IN UINTN BbsEntry, IN VOID *BeerData, IN VOID *ServiceAreaData)
EFI_STATUS(EFIAPI * EFI_LEGACY_BIOS_BOOT)(IN EFI_LEGACY_BIOS_PROTOCOL *This, IN BBS_BBS_DEVICE_PATH *BootOption, IN UINT32 LoadOptionsSize, IN VOID *LoadOptions)
BOOLEAN(EFIAPI * EFI_LEGACY_BIOS_INT86)(IN EFI_LEGACY_BIOS_PROTOCOL *This, IN UINT8 BiosInt, IN OUT EFI_IA32_REGISTER_SET *Regs)
EFI_STATUS(EFIAPI * EFI_LEGACY_BIOS_SHADOW_ALL_LEGACY_OPROMS)(IN EFI_LEGACY_BIOS_PROTOCOL *This)
EFI_GUID gEfiLegacyBiosProtocolGuid
EFI_STATUS(EFIAPI * EFI_LEGACY_BIOS_GET_LEGACY_REGION)(IN EFI_LEGACY_BIOS_PROTOCOL *This, IN UINTN LegacyMemorySize, IN UINTN Region, IN UINTN Alignment, OUT VOID **LegacyMemoryAddress)
EFI_COMPATIBILITY_FUNCTIONS
@ Legacy16RetrieveLastBootDevice
@ Legacy16InitializeYourself
@ Legacy16InstallPciHandler
@ Legacy16SetKeyboardLeds
@ Legacy16GetTableAddress
EFI_STATUS(EFIAPI * EFI_LEGACY_BIOS_CHECK_ROM)(IN EFI_LEGACY_BIOS_PROTOCOL *This, IN EFI_HANDLE PciHandle, OUT VOID **RomImage, OPTIONAL OUT UINTN *RomSize, OPTIONAL OUT UINTN *Flags)
#define MAX_IDE_CONTROLLER
BOOLEAN(EFIAPI * EFI_LEGACY_BIOS_FARCALL86)(IN EFI_LEGACY_BIOS_PROTOCOL *This, IN UINT16 Segment, IN UINT16 Offset, IN EFI_IA32_REGISTER_SET *Regs, IN VOID *Stack, IN UINTN StackSize)
EFI_STATUS(EFIAPI * EFI_LEGACY_BIOS_UPDATE_KEYBOARD_LED_STATUS)(IN EFI_LEGACY_BIOS_PROTOCOL *This, IN UINT8 Leds)
EFI_STATUS(EFIAPI * EFI_LEGACY_BIOS_GET_BBS_INFO)(IN EFI_LEGACY_BIOS_PROTOCOL *This, OUT UINT16 *HddCount, OUT HDD_INFO **HddInfo, OUT UINT16 *BbsCount, IN OUT BBS_TABLE **BbsTable)
EFI_STATUS(EFIAPI * EFI_LEGACY_BIOS_INSTALL_ROM)(IN EFI_LEGACY_BIOS_PROTOCOL *This, IN EFI_HANDLE PciHandle, IN VOID **RomImage, OUT UINTN *Flags, OUT UINT8 *DiskStart, OPTIONAL OUT UINT8 *DiskEnd, OPTIONAL OUT VOID **RomShadowAddress, OPTIONAL OUT UINT32 *ShadowedRomSize OPTIONAL)
EFI_LEGACY_BIOS_BOOT_UNCONVENTIONAL_DEVICE BootUnconventionalDevice
EFI_LEGACY_BIOS_PREPARE_TO_BOOT_EFI PrepareToBootEfi
EFI_LEGACY_BIOS_SHADOW_ALL_LEGACY_OPROMS ShadowAllLegacyOproms
EFI_LEGACY_BIOS_CHECK_ROM CheckPciRom
EFI_LEGACY_BIOS_BOOT LegacyBoot
EFI_LEGACY_BIOS_COPY_LEGACY_REGION CopyLegacyRegion
EFI_LEGACY_BIOS_GET_LEGACY_REGION GetLegacyRegion
EFI_LEGACY_BIOS_INT86 Int86
EFI_LEGACY_BIOS_UPDATE_KEYBOARD_LED_STATUS UpdateKeyboardLedStatus
EFI_LEGACY_BIOS_INSTALL_ROM InstallPciRom
EFI_LEGACY_BIOS_GET_BBS_INFO GetBbsInfo
EFI_LEGACY_BIOS_FARCALL86 FarCall86
UINT16 OldPosition
Prior priority.
UINT16 Reserved2
Reserved for future use.
UINT16 Reserved1
Reserved for future use.
UINT16 Enabled
If 0, ignore this entry.
UINT32 AdditionalIrq41Handler
UINT8 AssignedDriveNumber
BBS_STATUS_FLAGS StatusFlags
UINT32 AdditionalIrq46Handler
UINT32 AdditionalIrq19Handler
UINT32 AdditionalIrq13Handler
UINT32 AdditionalIrq18Handler
UINT16 BootHandlerSegment
UINT32 AdditionalIrq40Handler
UINT8 MousePresent
Flag to indicate if mouse is present.
DEVICE_PRODUCER_FLOPPY Floppy
Data for floppy. Type DEVICE_PRODUCER_FLOPPY is defined below.
LEGACY_DEVICE_FLAGS Flags
Miscellaneous Boolean state information passed to CSM.
UINT8 Irq
IRQ assigned to the floppy.
UINT8 Dma
DMA assigned to the floppy.
UINT16 Address
I/O address assigned to the floppy.
UINT8 NumberOfFloppy
Number of floppies in the system.
UINT8 Dma
DMA assigned to the parallel port.
UINT16 Address
I/O address assigned to the parallel port.
UINT8 Irq
IRQ assigned to the parallel port.
PARALLEL_MODE Mode
Mode of the parallel port. Values are defined below.
SERIAL_MODE Mode
Mode of serial port. Values are defined below.
UINT8 Irq
IRQ assigned to the serial port.
UINT16 Address
I/O address assigned to the serial port.
UINT32 HiPermanentMemoryAddress
UINT32 OemIdStringPointer
UINT16 Compatibility16CallOffset
UINT16 PnPInstallationCheckSegment
UINT16 PnPInstallationCheckOffset
UINT16 Compatibility16CallSegment
UINT32 HiPermanentMemorySize
UINT32 IrqRoutingTableLength
UINT32 IrqRoutingTablePointer
UINT32 BbsTablePointer
A pointer to the BBS table.
UINT8 PciDeviceFunction
The PCI device * 0x08 | PCI function.
UINT16 OpromSegment
The segment where the OpROM was placed. Offset is assumed to be 3.
UINT16 PnPInstallationCheckSegment
A pointer to the PnpInstallationCheck data structure.
UINT16 PnPInstallationCheckOffset
A pointer to the PnpInstallationCheck data structure.
UINT16 PrimaryControl
The primary device control I/O base.
UINT8 PrimaryIrq
The primary device IRQ.
UINT16 SecondaryBusMaster
The secondary device bus master I/O base.
UINT8 PciClass
The PCI class code of the device.
UINT8 PciSubclass
The PCI subclass code of the device.
UINT8 PrimaryReserved
Reserved.
UINT8 SecondaryIrq
The secondary device IRQ.
UINT16 SecondaryControl
The secondary device control I/O base.
UINT8 SecondaryReserved
Reserved.
UINT8 PciSegment
The PCI segment of the device.
UINT16 PrimaryBase
The primary device I/O base.
UINT16 SecondaryBase
The secondary device I/O base.
UINT8 PciDeviceFun
The PCI device in bits 7:3 and function in bits 2:0.
UINT16 PrimaryBusMaster
The primary device bus master I/O base.
UINT8 PciBus
The PCI bus of the device.
UINT8 PciInterface
The PCI interface code of the device.
DEVICE_PRODUCER_DATA_HEADER SioData
Standard traditional device information.
UINT16 MinorVersion
The EfiCompatibility minor version number.
UINT16 MajorVersion
The EfiCompatibility major version number.
UINT16 DevicePathType
The default boot type.
UINT32 SmbiosTable
The location of the SMBIOS table in EFI memory. < 4G range.
UINT32 AcpiTable
The location of the RSDT ACPI table. < 4G range.
UINT32 SmmTable
A pointer to the SMM table. Type SMM_TABLE is defined below.
UINT32 BbsTable
A pointer to the BBS table. Type BBS_TABLE is defined below.
UINT32 UnconventionalDeviceTable
UINT32 NumberBbsEntries
Number of entries in the BBS table.
UINT16 PciIrqMask
Mask of which IRQs have been assigned to PCI.
UINT32 LowPmmMemorySizeInBytes
UINT16 ReverseThunkCallOffset
UINT16 ReverseThunkCallSegment
UINT32 HiPmmMemorySizeInBytes
UINT16 ControlBaseAddress
UINT16 CommandBaseAddress
UINT32 A20Port90
A20 controlled by port 0x92.
UINT32 Reserved
Reserved for future usage.
UINT32 A20Kybd
A20 controller by keyboard controller.
SMM_ATTRIBUTES SmmAttributes
UINT16 NumSmmEntries
Number of entries represented by SmmEntry.
SMM_ENTRY SmmEntry
One entry per function. Type SMM_ENTRY is defined below.
UINT8 BbsTableEntryNumberForParentDevice
UDC_ATTRIBUTES Attributes
UINT8 BbsTableEntryNumberForBoot
UINT8 BbsTableEntryNumberForHddDiag
UINT8 DirectoryServiceValidity
UINT8 ExecuteHddDiagnosticsFlag