]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Updated copyright. Deleted erroneous "Module Name" line. Changed preceding macro...
authordarylm503 <darylm503@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 26 Jun 2009 19:36:51 +0000 (19:36 +0000)
committerdarylm503 <darylm503@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 26 Jun 2009 19:36:51 +0000 (19:36 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8672 6f19259b-4bc3-4df7-8a09-765794883524

IntelFrameworkPkg/Include/Framework/Legacy16.h

index 858ea2379c67679e9a9e681320b1e8dfd5e7cf79..f27c933740e8917dfc4a8ce40a1d8741a7829968 100644 (file)
-/** @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_ */