-/** @file\r
- API between 16-bit Legacy BIOS and EFI\r
-\r
- We need to figure out what the 16-bit code is going to use to\r
- represent these data structures. Is a pointer SEG:OFF or 32-bit...\r
-\r
- Copyright (c) 2007, Intel Corporation\r
- All rights reserved. This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
- Module Name: FrameworkLegacy16.h\r
-\r
- @par Revision Reference:\r
- These definitions are from Compatibility Support Module Spec \r
- Version 0.97.\r
-\r
-**/\r
-\r
-#ifndef _FRAMEWORK_LEGACY_16_H_\r
-#define _FRAMEWORK_LEGACY_16_H_\r
-\r
-#include <Base.h>\r
-\r
-#pragma pack(1)\r
-\r
-typedef UINT8 SERIAL_MODE;\r
-typedef UINT8 PARALLEL_MODE;\r
-\r
-//\r
-// EFI_COMPATIBILITY16_TABLE is located at a 16-byte boundary starting with the\r
-// signature "$EFI"\r
-//\r
-#define EFI_COMPATIBILITY16_TABLE_SIGNATURE SIGNATURE_32 ('I', 'F', 'E', '$')\r
-typedef struct {\r
- UINT32 Signature;\r
- UINT8 TableChecksum;\r
- UINT8 TableLength;\r
- UINT8 EfiMajorRevision;\r
- UINT8 EfiMinorRevision;\r
- UINT8 TableMajorRevision;\r
- UINT8 TableMinorRevision;\r
- UINT16 Reserved;\r
- UINT16 Compatibility16CallSegment;\r
- UINT16 Compatibility16CallOffset;\r
- UINT16 PnPInstallationCheckSegment;\r
- UINT16 PnPInstallationCheckOffset;\r
- UINT32 EfiSystemTable; // The physical address of EFI_SYSTEM_TABLE\r
- UINT32 OemIdStringPointer;\r
- UINT32 AcpiRsdPtrPointer;\r
- UINT16 OemRevision;\r
- UINT32 E820Pointer;\r
- UINT32 E820Length;\r
- UINT32 IrqRoutingTablePointer;\r
- UINT32 IrqRoutingTableLength;\r
- UINT32 MpTablePtr;\r
- UINT32 MpTableLength;\r
- UINT16 OemIntSegment;\r
- UINT16 OemIntOffset;\r
- UINT16 Oem32Segment;\r
- UINT16 Oem32Offset;\r
- UINT16 Oem16Segment;\r
- UINT16 Oem16Offset;\r
- UINT16 TpmSegment;\r
- UINT16 TpmOffset;\r
- UINT32 IbvPointer;\r
- UINT32 PciExpressBase;\r
- UINT8 LastPciBus;\r
-} EFI_COMPATIBILITY16_TABLE;\r
-\r
-//\r
-// Functions provided by the CSM binary\r
-//\r
-typedef enum {\r
- Legacy16InitializeYourself = 0x0000,\r
- Legacy16UpdateBbs = 0x0001,\r
- Legacy16PrepareToBoot = 0x0002,\r
- Legacy16Boot = 0x0003,\r
- Legacy16RetrieveLastBootDevice= 0x0004,\r
- Legacy16DispatchOprom = 0x0005,\r
- Legacy16GetTableAddress = 0x0006,\r
- Legacy16SetKeyboardLeds = 0x0007,\r
- Legacy16InstallPciHandler = 0x0008\r
-} EFI_COMPATIBILITY_FUNCTIONS;\r
-\r
-\r
-///////////////////////////////////////////////////////////////////////////////\r
-// EFI_DISPATCH_OPROM_TABLE\r
-///////////////////////////////////////////////////////////////////////////////\r
-\r
-typedef struct {\r
- UINT16 PnPInstallationCheckSegment;\r
- UINT16 PnPInstallationCheckOffset;\r
- UINT16 OpromSegment;\r
- UINT8 PciBus;\r
- UINT8 PciDeviceFunction;\r
- UINT8 NumberBbsEntries;\r
- VOID *BbsTablePointer; /// @bug: variable size on 32/64-bit systems.\r
- UINT16 RuntimeSegment;\r
-} EFI_DISPATCH_OPROM_TABLE;\r
-\r
-//\r
-// EFI_TO_COMPATIBILITY16_INIT_TABLE\r
-//\r
-typedef struct {\r
- UINT32 BiosLessThan1MB;\r
- UINT32 HiPmmMemory;\r
- UINT32 HiPmmMemorySizeInBytes;\r
- UINT16 ReverseThunkCallSegment;\r
- UINT16 ReverseThunkCallOffset;\r
- UINT32 NumberE820Entries;\r
- UINT32 OsMemoryAbove1Mb;\r
- UINT32 ThunkStart;\r
- UINT32 ThunkSizeInBytes;\r
- UINT32 LowPmmMemory;\r
- UINT32 LowPmmMemorySizeInBytes;\r
-} EFI_TO_COMPATIBILITY16_INIT_TABLE;\r
-\r
-//\r
-// EFI_TO_COMPATIBILITY16_BOOT_TABLE\r
-//\r
-\r
-//\r
-// DEVICE_PRODUCER_SERIAL & its modes\r
-//\r
-typedef struct {\r
- UINT16 Address;\r
- UINT8 Irq;\r
- SERIAL_MODE Mode;\r
-} DEVICE_PRODUCER_SERIAL;\r
-\r
-#define DEVICE_SERIAL_MODE_NORMAL 0x00\r
-#define DEVICE_SERIAL_MODE_IRDA 0x01\r
-#define DEVICE_SERIAL_MODE_ASK_IR 0x02\r
-#define DEVICE_SERIAL_MODE_DUPLEX_HALF 0x00\r
-#define DEVICE_SERIAL_MODE_DUPLEX_FULL 0x10\r
-\r
-//\r
-// DEVICE_PRODUCER_PARALLEL & its modes\r
-//\r
-typedef struct {\r
- UINT16 Address;\r
- UINT8 Irq;\r
- UINT8 Dma;\r
- PARALLEL_MODE Mode;\r
-} DEVICE_PRODUCER_PARALLEL;\r
-\r
-#define DEVICE_PARALLEL_MODE_MODE_OUTPUT_ONLY 0x00\r
-#define DEVICE_PARALLEL_MODE_MODE_BIDIRECTIONAL 0x01\r
-#define DEVICE_PARALLEL_MODE_MODE_EPP 0x02\r
-#define DEVICE_PARALLEL_MODE_MODE_ECP 0x03\r
-\r
-//\r
-// DEVICE_PRODUCER_FLOPPY\r
-//\r
-typedef struct {\r
- UINT16 Address;\r
- UINT8 Irq;\r
- UINT8 Dma;\r
- UINT8 NumberOfFloppy;\r
-} DEVICE_PRODUCER_FLOPPY;\r
-\r
-//\r
-// LEGACY_DEVICE_FLAGS\r
-//\r
-typedef struct {\r
- UINT32 A20Kybd : 1;\r
- UINT32 A20Port90 : 1;\r
- UINT32 Reserved : 30;\r
-} LEGACY_DEVICE_FLAGS;\r
-\r
-//\r
-// DEVICE_PRODUCER_DATA_HEADER\r
-//\r
-typedef struct {\r
- DEVICE_PRODUCER_SERIAL Serial[4];\r
- DEVICE_PRODUCER_PARALLEL Parallel[3];\r
- DEVICE_PRODUCER_FLOPPY Floppy;\r
- UINT8 MousePresent;\r
- LEGACY_DEVICE_FLAGS Flags;\r
-} DEVICE_PRODUCER_DATA_HEADER;\r
-\r
-//\r
-// ATAPI_IDENTIFY\r
-//\r
-typedef struct {\r
- UINT16 Raw[256];\r
-} ATAPI_IDENTIFY;\r
-\r
-//\r
-// HDD_INFO & its status\r
-//\r
-typedef struct {\r
- UINT16 Status;\r
- UINT32 Bus;\r
- UINT32 Device;\r
- UINT32 Function;\r
- UINT16 CommandBaseAddress;\r
- UINT16 ControlBaseAddress;\r
- UINT16 BusMasterAddress;\r
- UINT8 HddIrq;\r
- ATAPI_IDENTIFY IdentifyDrive[2];\r
-} HDD_INFO;\r
-\r
-#define HDD_PRIMARY 0x01\r
-#define HDD_SECONDARY 0x02\r
-#define HDD_MASTER_ATAPI_CDROM 0x04\r
-#define HDD_SLAVE_ATAPI_CDROM 0x08\r
-#define HDD_MASTER_IDE 0x20\r
-#define HDD_SLAVE_IDE 0x40\r
-#define HDD_MASTER_ATAPI_ZIPDISK 0x10\r
-#define HDD_SLAVE_ATAPI_ZIPDISK 0x80\r
-\r
-//\r
-// BBS_STATUS_FLAGS\r
-//\r
-typedef struct {\r
- UINT16 OldPosition : 4;\r
- UINT16 Reserved1 : 4;\r
- UINT16 Enabled : 1;\r
- UINT16 Failed : 1;\r
- UINT16 MediaPresent : 2;\r
- UINT16 Reserved2 : 4;\r
-} BBS_STATUS_FLAGS;\r
-\r
-//\r
-// BBS_TABLE, device type values & boot priority values\r
-//\r
-typedef struct {\r
- UINT16 BootPriority;\r
- UINT32 Bus;\r
- UINT32 Device;\r
- UINT32 Function;\r
- UINT8 Class;\r
- UINT8 SubClass;\r
- UINT16 MfgStringOffset;\r
- UINT16 MfgStringSegment;\r
- UINT16 DeviceType;\r
- BBS_STATUS_FLAGS StatusFlags;\r
- UINT16 BootHandlerOffset;\r
- UINT16 BootHandlerSegment;\r
- UINT16 DescStringOffset;\r
- UINT16 DescStringSegment;\r
- UINT32 InitPerReserved;\r
- UINT32 AdditionalIrq13Handler;\r
- UINT32 AdditionalIrq18Handler;\r
- UINT32 AdditionalIrq19Handler;\r
- UINT32 AdditionalIrq40Handler;\r
- UINT8 AssignedDriveNumber;\r
- UINT32 AdditionalIrq41Handler;\r
- UINT32 AdditionalIrq46Handler;\r
- UINT32 IBV1;\r
- UINT32 IBV2;\r
-} BBS_TABLE;\r
-\r
-#define BBS_FLOPPY 0x01\r
-#define BBS_HARDDISK 0x02\r
-#define BBS_CDROM 0x03\r
-#define BBS_PCMCIA 0x04\r
-#define BBS_USB 0x05\r
-#define BBS_EMBED_NETWORK 0x06\r
-#define BBS_BEV_DEVICE 0x80\r
-#define BBS_UNKNOWN 0xff\r
-\r
-#define BBS_DO_NOT_BOOT_FROM 0xFFFC\r
-#define BBS_LOWEST_PRIORITY 0xFFFD\r
-#define BBS_UNPRIORITIZED_ENTRY 0xFFFE\r
-#define BBS_IGNORE_ENTRY 0xFFFF\r
-\r
-//\r
-// SMM_ATTRIBUTES & relating type, port and data size constants\r
-//\r
-typedef struct {\r
- UINT16 Type : 3;\r
- UINT16 PortGranularity : 3;\r
- UINT16 DataGranularity : 3;\r
- UINT16 Reserved : 7;\r
-} SMM_ATTRIBUTES;\r
-\r
-#define STANDARD_IO 0x00\r
-#define STANDARD_MEMORY 0x01\r
-\r
-#define PORT_SIZE_8 0x00\r
-#define PORT_SIZE_16 0x01\r
-#define PORT_SIZE_32 0x02\r
-#define PORT_SIZE_64 0x03\r
-\r
-#define DATA_SIZE_8 0x00\r
-#define DATA_SIZE_16 0x01\r
-#define DATA_SIZE_32 0x02\r
-#define DATA_SIZE_64 0x03\r
-\r
-//\r
-// SMM_FUNCTION & relating constants\r
-//\r
-typedef struct {\r
- UINT16 Function : 15;\r
- UINT16 Owner : 1;\r
-} SMM_FUNCTION;\r
-\r
-#define INT15_D042 0x0000\r
-#define GET_USB_BOOT_INFO 0x0001\r
-#define DMI_PNP_50_57 0x0002\r
-\r
-#define STANDARD_OWNER 0x0\r
-#define OEM_OWNER 0x1\r
-\r
-//\r
-// SMM_ENTRY\r
-//\r
-// This structure assumes both port and data sizes are 1. SmmAttribute must be\r
-// properly to reflect that assumption.\r
-//\r
-typedef struct {\r
- SMM_ATTRIBUTES SmmAttributes;\r
- SMM_FUNCTION SmmFunction;\r
- UINT8 SmmPort;\r
- UINT8 SmmData;\r
-} SMM_ENTRY;\r
-\r
-//\r
-// SMM_TABLE\r
-//\r
-typedef struct {\r
- UINT16 NumSmmEntries;\r
- SMM_ENTRY SmmEntry;\r
-} SMM_TABLE;\r
-\r
-//\r
-// UDC_ATTRIBUTES\r
-//\r
-typedef struct {\r
- UINT8 DirectoryServiceValidity : 1;\r
- UINT8 RabcaUsedFlag : 1;\r
- UINT8 ExecuteHddDiagnosticsFlag : 1;\r
- UINT8 Reserved : 5;\r
-} UDC_ATTRIBUTES;\r
-\r
-//\r
-// UD_TABLE\r
-//\r
-typedef struct {\r
- UDC_ATTRIBUTES Attributes;\r
- UINT8 DeviceNumber;\r
- UINT8 BbsTableEntryNumberForParentDevice;\r
- UINT8 BbsTableEntryNumberForBoot;\r
- UINT8 BbsTableEntryNumberForHddDiag;\r
- UINT8 BeerData[128];\r
- UINT8 ServiceAreaData[64];\r
-} UD_TABLE;\r
-\r
-//\r
-// EFI_TO_COMPATIBILITY16_BOOT_TABLE\r
-//\r
-#define EFI_TO_LEGACY_MAJOR_VERSION 0x02\r
-#define EFI_TO_LEGACY_MINOR_VERSION 0x00\r
-#define MAX_IDE_CONTROLLER 8\r
-\r
-typedef struct {\r
- UINT16 MajorVersion;\r
- UINT16 MinorVersion;\r
- UINT32 AcpiTable; // 4 GB range\r
- UINT32 SmbiosTable; // 4 GB range\r
- UINT32 SmbiosTableLength;\r
- //\r
- // Legacy SIO state\r
- //\r
- DEVICE_PRODUCER_DATA_HEADER SioData;\r
- UINT16 DevicePathType;\r
- UINT16 PciIrqMask;\r
- UINT32 NumberE820Entries;\r
- //\r
- // Controller & Drive Identify[2] per controller information\r
- //\r
- HDD_INFO HddInfo[MAX_IDE_CONTROLLER];\r
- UINT32 NumberBbsEntries;\r
- UINT32 BbsTable;\r
- UINT32 SmmTable;\r
- UINT32 OsMemoryAbove1Mb;\r
- UINT32 UnconventionalDeviceTable;\r
-} EFI_TO_COMPATIBILITY16_BOOT_TABLE;\r
-\r
-//\r
-// EFI_LEGACY_INSTALL_PCI_HANDLER\r
-//\r
-typedef struct {\r
- UINT8 PciBus;\r
- UINT8 PciDeviceFun;\r
- UINT8 PciSegment;\r
- UINT8 PciClass;\r
- UINT8 PciSubclass;\r
- UINT8 PciInterface;\r
- //\r
- // Primary section\r
- //\r
- UINT8 PrimaryIrq;\r
- UINT8 PrimaryReserved;\r
- UINT16 PrimaryControl;\r
- UINT16 PrimaryBase;\r
- UINT16 PrimaryBusMaster;\r
- //\r
- // Secondary Section\r
- //\r
- UINT8 SecondaryIrq;\r
- UINT8 SecondaryReserved;\r
- UINT16 SecondaryControl;\r
- UINT16 SecondaryBase;\r
- UINT16 SecondaryBusMaster;\r
-} EFI_LEGACY_INSTALL_PCI_HANDLER;\r
-\r
-//\r
-// Restore default pack value\r
-//\r
-#pragma pack()\r
-\r
-#endif\r
+/** @file
+ API between 16-bit Legacy BIOS and EFI
+
+ We need to figure out what the 16-bit code is going to use to
+ represent these data structures. Is a pointer SEG:OFF or 32-bit...
+
+ Copyright (c) 2007-2009, Intel Corporation
+ All rights reserved. This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+ @par Revision Reference:
+ These definitions are from Compatibility Support Module Spec
+ Version 0.97.
+
+**/
+
+#ifndef _FRAMEWORK_LEGACY_16_H_
+#define _FRAMEWORK_LEGACY_16_H_
+
+#include <Base.h>
+
+#pragma pack(1)
+
+typedef UINT8 SERIAL_MODE;
+typedef UINT8 PARALLEL_MODE;
+
+#define EFI_COMPATIBILITY16_TABLE_SIGNATURE SIGNATURE_32 ('I', 'F', 'E', '$')
+
+///
+/// EFI_COMPATIBILITY16_TABLE is located at a 16-byte boundary starting with the
+/// signature "$EFI"
+///
+typedef struct {
+ UINT32 Signature;
+ UINT8 TableChecksum;
+ UINT8 TableLength;
+ UINT8 EfiMajorRevision;
+ UINT8 EfiMinorRevision;
+ UINT8 TableMajorRevision;
+ UINT8 TableMinorRevision;
+ UINT16 Reserved;
+ UINT16 Compatibility16CallSegment;
+ UINT16 Compatibility16CallOffset;
+ UINT16 PnPInstallationCheckSegment;
+ UINT16 PnPInstallationCheckOffset;
+ UINT32 EfiSystemTable; ///< The physical address of EFI_SYSTEM_TABLE
+ UINT32 OemIdStringPointer;
+ UINT32 AcpiRsdPtrPointer;
+ UINT16 OemRevision;
+ UINT32 E820Pointer;
+ UINT32 E820Length;
+ UINT32 IrqRoutingTablePointer;
+ UINT32 IrqRoutingTableLength;
+ UINT32 MpTablePtr;
+ UINT32 MpTableLength;
+ UINT16 OemIntSegment;
+ UINT16 OemIntOffset;
+ UINT16 Oem32Segment;
+ UINT16 Oem32Offset;
+ UINT16 Oem16Segment;
+ UINT16 Oem16Offset;
+ UINT16 TpmSegment;
+ UINT16 TpmOffset;
+ UINT32 IbvPointer;
+ UINT32 PciExpressBase;
+ UINT8 LastPciBus;
+} EFI_COMPATIBILITY16_TABLE;
+
+///
+/// Functions provided by the CSM binary
+///
+typedef enum {
+ Legacy16InitializeYourself = 0x0000,
+ Legacy16UpdateBbs = 0x0001,
+ Legacy16PrepareToBoot = 0x0002,
+ Legacy16Boot = 0x0003,
+ Legacy16RetrieveLastBootDevice= 0x0004,
+ Legacy16DispatchOprom = 0x0005,
+ Legacy16GetTableAddress = 0x0006,
+ Legacy16SetKeyboardLeds = 0x0007,
+ Legacy16InstallPciHandler = 0x0008
+} EFI_COMPATIBILITY_FUNCTIONS;
+
+
+///
+/// EFI_DISPATCH_OPROM_TABLE
+///
+typedef struct {
+ UINT16 PnPInstallationCheckSegment;
+ UINT16 PnPInstallationCheckOffset;
+ UINT16 OpromSegment;
+ UINT8 PciBus;
+ UINT8 PciDeviceFunction;
+ UINT8 NumberBbsEntries;
+ VOID *BbsTablePointer; ///< @bug: variable size on 32/64-bit systems.
+ UINT16 RuntimeSegment;
+} EFI_DISPATCH_OPROM_TABLE;
+
+///
+/// EFI_TO_COMPATIBILITY16_INIT_TABLE
+///
+typedef struct {
+ UINT32 BiosLessThan1MB;
+ UINT32 HiPmmMemory;
+ UINT32 HiPmmMemorySizeInBytes;
+ UINT16 ReverseThunkCallSegment;
+ UINT16 ReverseThunkCallOffset;
+ UINT32 NumberE820Entries;
+ UINT32 OsMemoryAbove1Mb;
+ UINT32 ThunkStart;
+ UINT32 ThunkSizeInBytes;
+ UINT32 LowPmmMemory;
+ UINT32 LowPmmMemorySizeInBytes;
+} EFI_TO_COMPATIBILITY16_INIT_TABLE;
+
+///
+/// DEVICE_PRODUCER_SERIAL & its modes
+///
+typedef struct {
+ UINT16 Address;
+ UINT8 Irq;
+ SERIAL_MODE Mode;
+} DEVICE_PRODUCER_SERIAL;
+
+#define DEVICE_SERIAL_MODE_NORMAL 0x00
+#define DEVICE_SERIAL_MODE_IRDA 0x01
+#define DEVICE_SERIAL_MODE_ASK_IR 0x02
+#define DEVICE_SERIAL_MODE_DUPLEX_HALF 0x00
+#define DEVICE_SERIAL_MODE_DUPLEX_FULL 0x10
+
+///
+/// DEVICE_PRODUCER_PARALLEL & its modes
+///
+typedef struct {
+ UINT16 Address;
+ UINT8 Irq;
+ UINT8 Dma;
+ PARALLEL_MODE Mode;
+} DEVICE_PRODUCER_PARALLEL;
+
+#define DEVICE_PARALLEL_MODE_MODE_OUTPUT_ONLY 0x00
+#define DEVICE_PARALLEL_MODE_MODE_BIDIRECTIONAL 0x01
+#define DEVICE_PARALLEL_MODE_MODE_EPP 0x02
+#define DEVICE_PARALLEL_MODE_MODE_ECP 0x03
+
+///
+/// DEVICE_PRODUCER_FLOPPY
+///
+typedef struct {
+ UINT16 Address;
+ UINT8 Irq;
+ UINT8 Dma;
+ UINT8 NumberOfFloppy;
+} DEVICE_PRODUCER_FLOPPY;
+
+///
+/// LEGACY_DEVICE_FLAGS
+///
+typedef struct {
+ UINT32 A20Kybd : 1;
+ UINT32 A20Port90 : 1;
+ UINT32 Reserved : 30;
+} LEGACY_DEVICE_FLAGS;
+
+///
+/// DEVICE_PRODUCER_DATA_HEADER
+///
+typedef struct {
+ DEVICE_PRODUCER_SERIAL Serial[4];
+ DEVICE_PRODUCER_PARALLEL Parallel[3];
+ DEVICE_PRODUCER_FLOPPY Floppy;
+ UINT8 MousePresent;
+ LEGACY_DEVICE_FLAGS Flags;
+} DEVICE_PRODUCER_DATA_HEADER;
+
+///
+/// ATAPI_IDENTIFY
+///
+typedef struct {
+ UINT16 Raw[256];
+} ATAPI_IDENTIFY;
+
+///
+/// HDD_INFO & its status
+///
+typedef struct {
+ UINT16 Status;
+ UINT32 Bus;
+ UINT32 Device;
+ UINT32 Function;
+ UINT16 CommandBaseAddress;
+ UINT16 ControlBaseAddress;
+ UINT16 BusMasterAddress;
+ UINT8 HddIrq;
+ ATAPI_IDENTIFY IdentifyDrive[2];
+} HDD_INFO;
+
+#define HDD_PRIMARY 0x01
+#define HDD_SECONDARY 0x02
+#define HDD_MASTER_ATAPI_CDROM 0x04
+#define HDD_SLAVE_ATAPI_CDROM 0x08
+#define HDD_MASTER_IDE 0x20
+#define HDD_SLAVE_IDE 0x40
+#define HDD_MASTER_ATAPI_ZIPDISK 0x10
+#define HDD_SLAVE_ATAPI_ZIPDISK 0x80
+
+///
+/// BBS_STATUS_FLAGS
+///
+typedef struct {
+ UINT16 OldPosition : 4;
+ UINT16 Reserved1 : 4;
+ UINT16 Enabled : 1;
+ UINT16 Failed : 1;
+ UINT16 MediaPresent : 2;
+ UINT16 Reserved2 : 4;
+} BBS_STATUS_FLAGS;
+
+///
+/// BBS_TABLE, device type values & boot priority values
+///
+typedef struct {
+ UINT16 BootPriority;
+ UINT32 Bus;
+ UINT32 Device;
+ UINT32 Function;
+ UINT8 Class;
+ UINT8 SubClass;
+ UINT16 MfgStringOffset;
+ UINT16 MfgStringSegment;
+ UINT16 DeviceType;
+ BBS_STATUS_FLAGS StatusFlags;
+ UINT16 BootHandlerOffset;
+ UINT16 BootHandlerSegment;
+ UINT16 DescStringOffset;
+ UINT16 DescStringSegment;
+ UINT32 InitPerReserved;
+ UINT32 AdditionalIrq13Handler;
+ UINT32 AdditionalIrq18Handler;
+ UINT32 AdditionalIrq19Handler;
+ UINT32 AdditionalIrq40Handler;
+ UINT8 AssignedDriveNumber;
+ UINT32 AdditionalIrq41Handler;
+ UINT32 AdditionalIrq46Handler;
+ UINT32 IBV1;
+ UINT32 IBV2;
+} BBS_TABLE;
+
+#define BBS_FLOPPY 0x01
+#define BBS_HARDDISK 0x02
+#define BBS_CDROM 0x03
+#define BBS_PCMCIA 0x04
+#define BBS_USB 0x05
+#define BBS_EMBED_NETWORK 0x06
+#define BBS_BEV_DEVICE 0x80
+#define BBS_UNKNOWN 0xff
+
+#define BBS_DO_NOT_BOOT_FROM 0xFFFC
+#define BBS_LOWEST_PRIORITY 0xFFFD
+#define BBS_UNPRIORITIZED_ENTRY 0xFFFE
+#define BBS_IGNORE_ENTRY 0xFFFF
+
+///
+/// SMM_ATTRIBUTES & relating type, port and data size constants
+///
+typedef struct {
+ UINT16 Type : 3;
+ UINT16 PortGranularity : 3;
+ UINT16 DataGranularity : 3;
+ UINT16 Reserved : 7;
+} SMM_ATTRIBUTES;
+
+#define STANDARD_IO 0x00
+#define STANDARD_MEMORY 0x01
+
+#define PORT_SIZE_8 0x00
+#define PORT_SIZE_16 0x01
+#define PORT_SIZE_32 0x02
+#define PORT_SIZE_64 0x03
+
+#define DATA_SIZE_8 0x00
+#define DATA_SIZE_16 0x01
+#define DATA_SIZE_32 0x02
+#define DATA_SIZE_64 0x03
+
+///
+/// SMM_FUNCTION & relating constants
+///
+typedef struct {
+ UINT16 Function : 15;
+ UINT16 Owner : 1;
+} SMM_FUNCTION;
+
+#define INT15_D042 0x0000
+#define GET_USB_BOOT_INFO 0x0001
+#define DMI_PNP_50_57 0x0002
+
+#define STANDARD_OWNER 0x0
+#define OEM_OWNER 0x1
+
+/**
+ * SMM_ENTRY
+ *
+ * This structure assumes both port and data sizes are 1. SmmAttribute must be
+ * properly to reflect that assumption.
+**/
+typedef struct {
+ SMM_ATTRIBUTES SmmAttributes;
+ SMM_FUNCTION SmmFunction;
+ UINT8 SmmPort;
+ UINT8 SmmData;
+} SMM_ENTRY;
+
+///
+/// SMM_TABLE
+///
+typedef struct {
+ UINT16 NumSmmEntries;
+ SMM_ENTRY SmmEntry;
+} SMM_TABLE;
+
+///
+/// UDC_ATTRIBUTES
+///
+typedef struct {
+ UINT8 DirectoryServiceValidity : 1;
+ UINT8 RabcaUsedFlag : 1;
+ UINT8 ExecuteHddDiagnosticsFlag : 1;
+ UINT8 Reserved : 5;
+} UDC_ATTRIBUTES;
+
+///
+/// UD_TABLE
+///
+typedef struct {
+ UDC_ATTRIBUTES Attributes;
+ UINT8 DeviceNumber;
+ UINT8 BbsTableEntryNumberForParentDevice;
+ UINT8 BbsTableEntryNumberForBoot;
+ UINT8 BbsTableEntryNumberForHddDiag;
+ UINT8 BeerData[128];
+ UINT8 ServiceAreaData[64];
+} UD_TABLE;
+
+#define EFI_TO_LEGACY_MAJOR_VERSION 0x02
+#define EFI_TO_LEGACY_MINOR_VERSION 0x00
+#define MAX_IDE_CONTROLLER 8
+
+///
+/// EFI_TO_COMPATIBILITY16_BOOT_TABLE
+///
+typedef struct {
+ UINT16 MajorVersion;
+ UINT16 MinorVersion;
+ UINT32 AcpiTable; ///< 4 GB range
+ UINT32 SmbiosTable; ///< 4 GB range
+ UINT32 SmbiosTableLength;
+ //
+ // Legacy SIO state
+ //
+ DEVICE_PRODUCER_DATA_HEADER SioData;
+ UINT16 DevicePathType;
+ UINT16 PciIrqMask;
+ UINT32 NumberE820Entries;
+ //
+ // Controller & Drive Identify[2] per controller information
+ //
+ HDD_INFO HddInfo[MAX_IDE_CONTROLLER];
+ UINT32 NumberBbsEntries;
+ UINT32 BbsTable;
+ UINT32 SmmTable;
+ UINT32 OsMemoryAbove1Mb;
+ UINT32 UnconventionalDeviceTable;
+} EFI_TO_COMPATIBILITY16_BOOT_TABLE;
+
+///
+/// EFI_LEGACY_INSTALL_PCI_HANDLER
+///
+typedef struct {
+ UINT8 PciBus;
+ UINT8 PciDeviceFun;
+ UINT8 PciSegment;
+ UINT8 PciClass;
+ UINT8 PciSubclass;
+ UINT8 PciInterface;
+ //
+ // Primary section
+ //
+ UINT8 PrimaryIrq;
+ UINT8 PrimaryReserved;
+ UINT16 PrimaryControl;
+ UINT16 PrimaryBase;
+ UINT16 PrimaryBusMaster;
+ //
+ // Secondary Section
+ //
+ UINT8 SecondaryIrq;
+ UINT8 SecondaryReserved;
+ UINT16 SecondaryControl;
+ UINT16 SecondaryBase;
+ UINT16 SecondaryBusMaster;
+} EFI_LEGACY_INSTALL_PCI_HANDLER;
+
+//
+// Restore default pack value
+//
+#pragma pack()
+
+#endif /* _FRAMEWORK_LEGACY_16_H_ */