git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@7893 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			404 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			404 lines
		
	
	
		
			14 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @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, 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.
 | 
						|
 | 
						|
  Module Name:  FrameworkLegacy16.h
 | 
						|
 | 
						|
  @par Revision Reference:
 | 
						|
  These definitions are from Compatibility Support Module Spec Version 0.96.
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef _FRAMEWORK_LEGACY_16_H_
 | 
						|
#define _FRAMEWORK_LEGACY_16_H_
 | 
						|
 | 
						|
#include <Base.h>
 | 
						|
 | 
						|
#pragma pack(1)
 | 
						|
 | 
						|
typedef UINT8                       SERIAL_MODE;
 | 
						|
typedef UINT8                       PARALLEL_MODE;
 | 
						|
 | 
						|
//
 | 
						|
// EFI_COMPATIBILITY16_TABLE is located at a 16-byte boundary starting with the
 | 
						|
// signature "$EFI"
 | 
						|
//
 | 
						|
#define EFI_COMPATIBILITY16_TABLE_SIGNATURE SIGNATURE_32 ('I', 'F', 'E', '$')
 | 
						|
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_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;
 | 
						|
 | 
						|
//
 | 
						|
// EFI_TO_COMPATIBILITY16_BOOT_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;
 | 
						|
 | 
						|
//
 | 
						|
// EFI_TO_COMPATIBILITY16_BOOT_TABLE
 | 
						|
//
 | 
						|
#define EFI_TO_LEGACY_MAJOR_VERSION 0x02
 | 
						|
#define EFI_TO_LEGACY_MINOR_VERSION 0x00
 | 
						|
#define MAX_IDE_CONTROLLER          8
 | 
						|
 | 
						|
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
 |