From 6c128c65b5ec0e5b8b5a0ccb165f3afd29e485f8 Mon Sep 17 00:00:00 2001 From: Guo Mang Date: Wed, 2 Aug 2017 09:54:47 +0800 Subject: Remove core packages since we can get them from edk2 repository Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Guo Mang --- MdePkg/Include/Uefi/UefiAcpiDataTable.h | 55 - MdePkg/Include/Uefi/UefiBaseType.h | 301 --- MdePkg/Include/Uefi/UefiGpt.h | 141 -- .../Include/Uefi/UefiInternalFormRepresentation.h | 2113 ------------------- MdePkg/Include/Uefi/UefiMultiPhase.h | 231 --- MdePkg/Include/Uefi/UefiPxe.h | 1772 ---------------- MdePkg/Include/Uefi/UefiSpec.h | 2188 -------------------- 7 files changed, 6801 deletions(-) delete mode 100644 MdePkg/Include/Uefi/UefiAcpiDataTable.h delete mode 100644 MdePkg/Include/Uefi/UefiBaseType.h delete mode 100644 MdePkg/Include/Uefi/UefiGpt.h delete mode 100644 MdePkg/Include/Uefi/UefiInternalFormRepresentation.h delete mode 100644 MdePkg/Include/Uefi/UefiMultiPhase.h delete mode 100644 MdePkg/Include/Uefi/UefiPxe.h delete mode 100644 MdePkg/Include/Uefi/UefiSpec.h (limited to 'MdePkg/Include/Uefi') diff --git a/MdePkg/Include/Uefi/UefiAcpiDataTable.h b/MdePkg/Include/Uefi/UefiAcpiDataTable.h deleted file mode 100644 index 30a53559fd..0000000000 --- a/MdePkg/Include/Uefi/UefiAcpiDataTable.h +++ /dev/null @@ -1,55 +0,0 @@ -/** @file - UEFI ACPI Data Table Definition. - -Copyright (c) 2011, 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 that 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. - -**/ - -#ifndef __UEFI_ACPI_DATA_TABLE_H__ -#define __UEFI_ACPI_DATA_TABLE_H__ - -#include - -#pragma pack(1) -typedef struct { - EFI_ACPI_DESCRIPTION_HEADER Header; - GUID Identifier; - UINT16 DataOffset; -} EFI_ACPI_DATA_TABLE; - -typedef struct { - EFI_ACPI_DATA_TABLE UefiAcpiDataTable; - UINT32 SwSmiNumber; - UINT64 BufferPtrAddress; -} EFI_SMM_COMMUNICATION_ACPI_TABLE; - -/// -/// To avoid confusion in interpreting frames, the communication buffer should always -/// begin with EFI_SMM_COMMUNICATE_HEADER -/// -typedef struct { - /// - /// Allows for disambiguation of the message format. - /// - EFI_GUID HeaderGuid; - /// - /// Describes the size of Data (in bytes) and does not include the size of the header. - /// - UINTN MessageLength; - /// - /// Designates an array of bytes that is MessageLength in size. - /// - UINT8 Data[1]; -} EFI_SMM_COMMUNICATE_HEADER; - -#pragma pack() - -#endif - diff --git a/MdePkg/Include/Uefi/UefiBaseType.h b/MdePkg/Include/Uefi/UefiBaseType.h deleted file mode 100644 index b505e7de1e..0000000000 --- a/MdePkg/Include/Uefi/UefiBaseType.h +++ /dev/null @@ -1,301 +0,0 @@ -/** @file - Defines data types and constants introduced in UEFI. - -Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.
-Portions copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.
- -This program and the accompanying materials are licensed and made available under -the terms and conditions of the BSD License that 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. - -**/ - -#ifndef __UEFI_BASETYPE_H__ -#define __UEFI_BASETYPE_H__ - -#include - -// -// Basic data type definitions introduced in UEFI. -// - -/// -/// 128-bit buffer containing a unique identifier value. -/// -typedef GUID EFI_GUID; -/// -/// Function return status for EFI API. -/// -typedef RETURN_STATUS EFI_STATUS; -/// -/// A collection of related interfaces. -/// -typedef VOID *EFI_HANDLE; -/// -/// Handle to an event structure. -/// -typedef VOID *EFI_EVENT; -/// -/// Task priority level. -/// -typedef UINTN EFI_TPL; -/// -/// Logical block address. -/// -typedef UINT64 EFI_LBA; - -/// -/// 64-bit physical memory address. -/// -typedef UINT64 EFI_PHYSICAL_ADDRESS; - -/// -/// 64-bit virtual memory address. -/// -typedef UINT64 EFI_VIRTUAL_ADDRESS; - -/// -/// EFI Time Abstraction: -/// Year: 1900 - 9999 -/// Month: 1 - 12 -/// Day: 1 - 31 -/// Hour: 0 - 23 -/// Minute: 0 - 59 -/// Second: 0 - 59 -/// Nanosecond: 0 - 999,999,999 -/// TimeZone: -1440 to 1440 or 2047 -/// -typedef struct { - UINT16 Year; - UINT8 Month; - UINT8 Day; - UINT8 Hour; - UINT8 Minute; - UINT8 Second; - UINT8 Pad1; - UINT32 Nanosecond; - INT16 TimeZone; - UINT8 Daylight; - UINT8 Pad2; -} EFI_TIME; - - -/// -/// 4-byte buffer. An IPv4 internet protocol address. -/// -typedef struct { - UINT8 Addr[4]; -} EFI_IPv4_ADDRESS; - -/// -/// 16-byte buffer. An IPv6 internet protocol address. -/// -typedef struct { - UINT8 Addr[16]; -} EFI_IPv6_ADDRESS; - -/// -/// 32-byte buffer containing a network Media Access Control address. -/// -typedef struct { - UINT8 Addr[32]; -} EFI_MAC_ADDRESS; - -/// -/// 16-byte buffer aligned on a 4-byte boundary. -/// An IPv4 or IPv6 internet protocol address. -/// -typedef union { - UINT32 Addr[4]; - EFI_IPv4_ADDRESS v4; - EFI_IPv6_ADDRESS v6; -} EFI_IP_ADDRESS; - - -/// -/// Enumeration of EFI_STATUS. -///@{ -#define EFI_SUCCESS RETURN_SUCCESS -#define EFI_LOAD_ERROR RETURN_LOAD_ERROR -#define EFI_INVALID_PARAMETER RETURN_INVALID_PARAMETER -#define EFI_UNSUPPORTED RETURN_UNSUPPORTED -#define EFI_BAD_BUFFER_SIZE RETURN_BAD_BUFFER_SIZE -#define EFI_BUFFER_TOO_SMALL RETURN_BUFFER_TOO_SMALL -#define EFI_NOT_READY RETURN_NOT_READY -#define EFI_DEVICE_ERROR RETURN_DEVICE_ERROR -#define EFI_WRITE_PROTECTED RETURN_WRITE_PROTECTED -#define EFI_OUT_OF_RESOURCES RETURN_OUT_OF_RESOURCES -#define EFI_VOLUME_CORRUPTED RETURN_VOLUME_CORRUPTED -#define EFI_VOLUME_FULL RETURN_VOLUME_FULL -#define EFI_NO_MEDIA RETURN_NO_MEDIA -#define EFI_MEDIA_CHANGED RETURN_MEDIA_CHANGED -#define EFI_NOT_FOUND RETURN_NOT_FOUND -#define EFI_ACCESS_DENIED RETURN_ACCESS_DENIED -#define EFI_NO_RESPONSE RETURN_NO_RESPONSE -#define EFI_NO_MAPPING RETURN_NO_MAPPING -#define EFI_TIMEOUT RETURN_TIMEOUT -#define EFI_NOT_STARTED RETURN_NOT_STARTED -#define EFI_ALREADY_STARTED RETURN_ALREADY_STARTED -#define EFI_ABORTED RETURN_ABORTED -#define EFI_ICMP_ERROR RETURN_ICMP_ERROR -#define EFI_TFTP_ERROR RETURN_TFTP_ERROR -#define EFI_PROTOCOL_ERROR RETURN_PROTOCOL_ERROR -#define EFI_INCOMPATIBLE_VERSION RETURN_INCOMPATIBLE_VERSION -#define EFI_SECURITY_VIOLATION RETURN_SECURITY_VIOLATION -#define EFI_CRC_ERROR RETURN_CRC_ERROR -#define EFI_END_OF_MEDIA RETURN_END_OF_MEDIA -#define EFI_END_OF_FILE RETURN_END_OF_FILE -#define EFI_INVALID_LANGUAGE RETURN_INVALID_LANGUAGE -#define EFI_COMPROMISED_DATA RETURN_COMPROMISED_DATA - -#define EFI_WARN_UNKNOWN_GLYPH RETURN_WARN_UNKNOWN_GLYPH -#define EFI_WARN_DELETE_FAILURE RETURN_WARN_DELETE_FAILURE -#define EFI_WARN_WRITE_FAILURE RETURN_WARN_WRITE_FAILURE -#define EFI_WARN_BUFFER_TOO_SMALL RETURN_WARN_BUFFER_TOO_SMALL -#define EFI_WARN_STALE_DATA RETURN_WARN_STALE_DATA -///@} - -/// -/// Define macro to encode the status code. -/// -#define EFIERR(_a) ENCODE_ERROR(_a) - -#define EFI_ERROR(A) RETURN_ERROR(A) - -/// -/// ICMP error definitions -///@{ -#define EFI_NETWORK_UNREACHABLE EFIERR(100) -#define EFI_HOST_UNREACHABLE EFIERR(101) -#define EFI_PROTOCOL_UNREACHABLE EFIERR(102) -#define EFI_PORT_UNREACHABLE EFIERR(103) -///@} - -/// -/// Tcp connection status definitions -///@{ -#define EFI_CONNECTION_FIN EFIERR(104) -#define EFI_CONNECTION_RESET EFIERR(105) -#define EFI_CONNECTION_REFUSED EFIERR(106) -///@} - -// -// The EFI memory allocation functions work in units of EFI_PAGEs that are -// 4KB. This should in no way be confused with the page size of the processor. -// An EFI_PAGE is just the quanta of memory in EFI. -// -#define EFI_PAGE_SIZE SIZE_4KB -#define EFI_PAGE_MASK 0xFFF -#define EFI_PAGE_SHIFT 12 - -/** - Macro that converts a size, in bytes, to a number of EFI_PAGESs. - - @param Size A size in bytes. This parameter is assumed to be type UINTN. - Passing in a parameter that is larger than UINTN may produce - unexpected results. - - @return The number of EFI_PAGESs associated with the number of bytes specified - by Size. - -**/ -#define EFI_SIZE_TO_PAGES(Size) (((Size) >> EFI_PAGE_SHIFT) + (((Size) & EFI_PAGE_MASK) ? 1 : 0)) - -/** - Macro that converts a number of EFI_PAGEs to a size in bytes. - - @param Pages The number of EFI_PAGES. This parameter is assumed to be - type UINTN. Passing in a parameter that is larger than - UINTN may produce unexpected results. - - @return The number of bytes associated with the number of EFI_PAGEs specified - by Pages. - -**/ -#define EFI_PAGES_TO_SIZE(Pages) ((Pages) << EFI_PAGE_SHIFT) - -/// -/// PE32+ Machine type for IA32 UEFI images. -/// -#define EFI_IMAGE_MACHINE_IA32 0x014C - -/// -/// PE32+ Machine type for IA64 UEFI images. -/// -#define EFI_IMAGE_MACHINE_IA64 0x0200 - -/// -/// PE32+ Machine type for EBC UEFI images. -/// -#define EFI_IMAGE_MACHINE_EBC 0x0EBC - -/// -/// PE32+ Machine type for X64 UEFI images. -/// -#define EFI_IMAGE_MACHINE_X64 0x8664 - -/// -/// PE32+ Machine type for ARM mixed ARM and Thumb/Thumb2 images. -/// -#define EFI_IMAGE_MACHINE_ARMTHUMB_MIXED 0x01C2 - -/// -/// PE32+ Machine type for AARCH64 A64 images. -/// -#define EFI_IMAGE_MACHINE_AARCH64 0xAA64 - - -#if defined (MDE_CPU_IA32) - -#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \ - (((Machine) == EFI_IMAGE_MACHINE_IA32) || ((Machine) == EFI_IMAGE_MACHINE_EBC)) - -#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) ((Machine) == EFI_IMAGE_MACHINE_X64) - -#elif defined (MDE_CPU_IPF) - -#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \ - (((Machine) == EFI_IMAGE_MACHINE_IA64) || ((Machine) == EFI_IMAGE_MACHINE_EBC)) - -#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) (FALSE) - -#elif defined (MDE_CPU_X64) - -#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \ - (((Machine) == EFI_IMAGE_MACHINE_X64) || ((Machine) == EFI_IMAGE_MACHINE_EBC)) - -#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) ((Machine) == EFI_IMAGE_MACHINE_IA32) - -#elif defined (MDE_CPU_ARM) - -#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \ - (((Machine) == EFI_IMAGE_MACHINE_ARMTHUMB_MIXED) || ((Machine) == EFI_IMAGE_MACHINE_EBC)) - -#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) ((Machine) == EFI_IMAGE_MACHINE_ARMTHUMB_MIXED) - -#elif defined (MDE_CPU_AARCH64) - -#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) \ - (((Machine) == EFI_IMAGE_MACHINE_AARCH64) || ((Machine) == EFI_IMAGE_MACHINE_EBC)) - -#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) (FALSE) - -#elif defined (MDE_CPU_EBC) - -/// -/// This is just to make sure you can cross compile with the EBC compiler. -/// It does not make sense to have a PE loader coded in EBC. -/// -#define EFI_IMAGE_MACHINE_TYPE_SUPPORTED(Machine) ((Machine) == EFI_IMAGE_MACHINE_EBC) - -#define EFI_IMAGE_MACHINE_CROSS_TYPE_SUPPORTED(Machine) (FALSE) - -#else -#error Unknown Processor Type -#endif - -#endif diff --git a/MdePkg/Include/Uefi/UefiGpt.h b/MdePkg/Include/Uefi/UefiGpt.h deleted file mode 100644 index f2d0fa0b09..0000000000 --- a/MdePkg/Include/Uefi/UefiGpt.h +++ /dev/null @@ -1,141 +0,0 @@ -/** @file - EFI Guid Partition Table Format Definition. - -Copyright (c) 2006 - 2011, 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 that 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. - -**/ - -#ifndef __UEFI_GPT_H__ -#define __UEFI_GPT_H__ - -/// -/// The primary GUID Partition Table Header must be -/// located in LBA 1 (i.e., the second logical block). -/// -#define PRIMARY_PART_HEADER_LBA 1 -/// -/// EFI Partition Table Signature: "EFI PART". -/// -#define EFI_PTAB_HEADER_ID SIGNATURE_64 ('E','F','I',' ','P','A','R','T') - -#pragma pack(1) - -/// -/// GPT Partition Table Header. -/// -typedef struct { - /// - /// The table header for the GPT partition Table. - /// This header contains EFI_PTAB_HEADER_ID. - /// - EFI_TABLE_HEADER Header; - /// - /// The LBA that contains this data structure. - /// - EFI_LBA MyLBA; - /// - /// LBA address of the alternate GUID Partition Table Header. - /// - EFI_LBA AlternateLBA; - /// - /// The first usable logical block that may be used - /// by a partition described by a GUID Partition Entry. - /// - EFI_LBA FirstUsableLBA; - /// - /// The last usable logical block that may be used - /// by a partition described by a GUID Partition Entry. - /// - EFI_LBA LastUsableLBA; - /// - /// GUID that can be used to uniquely identify the disk. - /// - EFI_GUID DiskGUID; - /// - /// The starting LBA of the GUID Partition Entry array. - /// - EFI_LBA PartitionEntryLBA; - /// - /// The number of Partition Entries in the GUID Partition Entry array. - /// - UINT32 NumberOfPartitionEntries; - /// - /// The size, in bytes, of each the GUID Partition - /// Entry structures in the GUID Partition Entry - /// array. This field shall be set to a value of 128 x 2^n where n is - /// an integer greater than or equal to zero (e.g., 128, 256, 512, etc.). - /// - UINT32 SizeOfPartitionEntry; - /// - /// The CRC32 of the GUID Partition Entry array. - /// Starts at PartitionEntryLBA and is - /// computed over a byte length of - /// NumberOfPartitionEntries * SizeOfPartitionEntry. - /// - UINT32 PartitionEntryArrayCRC32; -} EFI_PARTITION_TABLE_HEADER; - -/// -/// GPT Partition Entry. -/// -typedef struct { - /// - /// Unique ID that defines the purpose and type of this Partition. A value of - /// zero defines that this partition entry is not being used. - /// - EFI_GUID PartitionTypeGUID; - /// - /// GUID that is unique for every partition entry. Every partition ever - /// created will have a unique GUID. - /// This GUID must be assigned when the GUID Partition Entry is created. - /// - EFI_GUID UniquePartitionGUID; - /// - /// Starting LBA of the partition defined by this entry - /// - EFI_LBA StartingLBA; - /// - /// Ending LBA of the partition defined by this entry. - /// - EFI_LBA EndingLBA; - /// - /// Attribute bits, all bits reserved by UEFI - /// Bit 0: If this bit is set, the partition is required for the platform to function. The owner/creator of the - /// partition indicates that deletion or modification of the contents can result in loss of platform - /// features or failure for the platform to boot or operate. The system cannot function normally if - /// this partition is removed, and it should be considered part of the hardware of the system. - /// Actions such as running diagnostics, system recovery, or even OS install or boot, could - /// potentially stop working if this partition is removed. Unless OS software or firmware - /// recognizes this partition, it should never be removed or modified as the UEFI firmware or - /// platform hardware may become non-functional. - /// Bit 1: If this bit is set, then firmware must not produce an EFI_BLOCK_IO_PROTOCOL device for - /// this partition. By not producing an EFI_BLOCK_IO_PROTOCOL partition, file system - /// mappings will not be created for this partition in UEFI. - /// Bit 2: This bit is set aside to let systems with traditional PC-AT BIOS firmware implementations - /// inform certain limited, special-purpose software running on these systems that a GPT - /// partition may be bootable. The UEFI boot manager must ignore this bit when selecting - /// a UEFI-compliant application, e.g., an OS loader. - /// Bits 3-47: Undefined and must be zero. Reserved for expansion by future versions of the UEFI - /// specification. - /// Bits 48-63: Reserved for GUID specific use. The use of these bits will vary depending on the - /// PartitionTypeGUID. Only the owner of the PartitionTypeGUID is allowed - /// to modify these bits. They must be preserved if Bits 0-47 are modified.. - /// - UINT64 Attributes; - /// - /// Null-terminated name of the partition. - /// - CHAR16 PartitionName[36]; -} EFI_PARTITION_ENTRY; - -#pragma pack() -#endif - - diff --git a/MdePkg/Include/Uefi/UefiInternalFormRepresentation.h b/MdePkg/Include/Uefi/UefiInternalFormRepresentation.h deleted file mode 100644 index 1a77ea7c3e..0000000000 --- a/MdePkg/Include/Uefi/UefiInternalFormRepresentation.h +++ /dev/null @@ -1,2113 +0,0 @@ -/** @file - This file defines the encoding for the VFR (Visual Form Representation) language. - IFR is primarily consumed by the EFI presentation engine, and produced by EFI - internal application and drivers as well as all add-in card option-ROM drivers - -Copyright (c) 2006 - 2015, 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 that 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 UEFI 2.1 and 2.2. - -**/ - -#ifndef __UEFI_INTERNAL_FORMREPRESENTATION_H__ -#define __UEFI_INTERNAL_FORMREPRESENTATION_H__ - -#include - -/// -/// The following types are currently defined: -/// -typedef VOID* EFI_HII_HANDLE; -typedef CHAR16* EFI_STRING; -typedef UINT16 EFI_IMAGE_ID; -typedef UINT16 EFI_QUESTION_ID; -typedef UINT16 EFI_STRING_ID; -typedef UINT16 EFI_FORM_ID; -typedef UINT16 EFI_VARSTORE_ID; -typedef UINT16 EFI_ANIMATION_ID; - -typedef UINT16 EFI_DEFAULT_ID; - -typedef UINT32 EFI_HII_FONT_STYLE; - - - -#pragma pack(1) - -// -// Definitions for Package Lists and Package Headers -// Section 27.3.1 -// - -/// -/// The header found at the start of each package list. -/// -typedef struct { - EFI_GUID PackageListGuid; - UINT32 PackageLength; -} EFI_HII_PACKAGE_LIST_HEADER; - -/// -/// The header found at the start of each package. -/// -typedef struct { - UINT32 Length:24; - UINT32 Type:8; - // UINT8 Data[...]; -} EFI_HII_PACKAGE_HEADER; - -// -// Value of HII package type -// -#define EFI_HII_PACKAGE_TYPE_ALL 0x00 -#define EFI_HII_PACKAGE_TYPE_GUID 0x01 -#define EFI_HII_PACKAGE_FORMS 0x02 -#define EFI_HII_PACKAGE_STRINGS 0x04 -#define EFI_HII_PACKAGE_FONTS 0x05 -#define EFI_HII_PACKAGE_IMAGES 0x06 -#define EFI_HII_PACKAGE_SIMPLE_FONTS 0x07 -#define EFI_HII_PACKAGE_DEVICE_PATH 0x08 -#define EFI_HII_PACKAGE_KEYBOARD_LAYOUT 0x09 -#define EFI_HII_PACKAGE_ANIMATIONS 0x0A -#define EFI_HII_PACKAGE_END 0xDF -#define EFI_HII_PACKAGE_TYPE_SYSTEM_BEGIN 0xE0 -#define EFI_HII_PACKAGE_TYPE_SYSTEM_END 0xFF - -// -// Definitions for Simplified Font Package -// - -/// -/// Contents of EFI_NARROW_GLYPH.Attributes. -///@{ -#define EFI_GLYPH_NON_SPACING 0x01 -#define EFI_GLYPH_WIDE 0x02 -#define EFI_GLYPH_HEIGHT 19 -#define EFI_GLYPH_WIDTH 8 -///@} - -/// -/// The EFI_NARROW_GLYPH has a preferred dimension (w x h) of 8 x 19 pixels. -/// -typedef struct { - /// - /// The Unicode representation of the glyph. The term weight is the - /// technical term for a character code. - /// - CHAR16 UnicodeWeight; - /// - /// The data element containing the glyph definitions. - /// - UINT8 Attributes; - /// - /// The column major glyph representation of the character. Bits - /// with values of one indicate that the corresponding pixel is to be - /// on when normally displayed; those with zero are off. - /// - UINT8 GlyphCol1[EFI_GLYPH_HEIGHT]; -} EFI_NARROW_GLYPH; - -/// -/// The EFI_WIDE_GLYPH has a preferred dimension (w x h) of 16 x 19 pixels, which is large enough -/// to accommodate logographic characters. -/// -typedef struct { - /// - /// The Unicode representation of the glyph. The term weight is the - /// technical term for a character code. - /// - CHAR16 UnicodeWeight; - /// - /// The data element containing the glyph definitions. - /// - UINT8 Attributes; - /// - /// The column major glyph representation of the character. Bits - /// with values of one indicate that the corresponding pixel is to be - /// on when normally displayed; those with zero are off. - /// - UINT8 GlyphCol1[EFI_GLYPH_HEIGHT]; - /// - /// The column major glyph representation of the character. Bits - /// with values of one indicate that the corresponding pixel is to be - /// on when normally displayed; those with zero are off. - /// - UINT8 GlyphCol2[EFI_GLYPH_HEIGHT]; - /// - /// Ensures that sizeof (EFI_WIDE_GLYPH) is twice the - /// sizeof (EFI_NARROW_GLYPH). The contents of Pad must - /// be zero. - /// - UINT8 Pad[3]; -} EFI_WIDE_GLYPH; - -/// -/// A simplified font package consists of a font header -/// followed by a series of glyph structures. -/// -typedef struct _EFI_HII_SIMPLE_FONT_PACKAGE_HDR { - EFI_HII_PACKAGE_HEADER Header; - UINT16 NumberOfNarrowGlyphs; - UINT16 NumberOfWideGlyphs; - // EFI_NARROW_GLYPH NarrowGlyphs[]; - // EFI_WIDE_GLYPH WideGlyphs[]; -} EFI_HII_SIMPLE_FONT_PACKAGE_HDR; - -// -// Definitions for Font Package -// Section 27.3.3 -// - -// -// Value for font style -// -#define EFI_HII_FONT_STYLE_NORMAL 0x00000000 -#define EFI_HII_FONT_STYLE_BOLD 0x00000001 -#define EFI_HII_FONT_STYLE_ITALIC 0x00000002 -#define EFI_HII_FONT_STYLE_EMBOSS 0x00010000 -#define EFI_HII_FONT_STYLE_OUTLINE 0x00020000 -#define EFI_HII_FONT_STYLE_SHADOW 0x00040000 -#define EFI_HII_FONT_STYLE_UNDERLINE 0x00080000 -#define EFI_HII_FONT_STYLE_DBL_UNDER 0x00100000 - -typedef struct _EFI_HII_GLYPH_INFO { - UINT16 Width; - UINT16 Height; - INT16 OffsetX; - INT16 OffsetY; - INT16 AdvanceX; -} EFI_HII_GLYPH_INFO; - -/// -/// The fixed header consists of a standard record header, -/// then the character values in this section, the flags -/// (including the encoding method) and the offsets of the glyph -/// information, the glyph bitmaps and the character map. -/// -typedef struct _EFI_HII_FONT_PACKAGE_HDR { - EFI_HII_PACKAGE_HEADER Header; - UINT32 HdrSize; - UINT32 GlyphBlockOffset; - EFI_HII_GLYPH_INFO Cell; - EFI_HII_FONT_STYLE FontStyle; - CHAR16 FontFamily[1]; -} EFI_HII_FONT_PACKAGE_HDR; - -// -// Value of different glyph info block types -// -#define EFI_HII_GIBT_END 0x00 -#define EFI_HII_GIBT_GLYPH 0x10 -#define EFI_HII_GIBT_GLYPHS 0x11 -#define EFI_HII_GIBT_GLYPH_DEFAULT 0x12 -#define EFI_HII_GIBT_GLYPHS_DEFAULT 0x13 -#define EFI_HII_GIBT_DUPLICATE 0x20 -#define EFI_HII_GIBT_SKIP2 0x21 -#define EFI_HII_GIBT_SKIP1 0x22 -#define EFI_HII_GIBT_DEFAULTS 0x23 -#define EFI_HII_GIBT_EXT1 0x30 -#define EFI_HII_GIBT_EXT2 0x31 -#define EFI_HII_GIBT_EXT4 0x32 - -typedef struct _EFI_HII_GLYPH_BLOCK { - UINT8 BlockType; -} EFI_HII_GLYPH_BLOCK; - -// -// Definition of different glyph info block types -// - -typedef struct _EFI_HII_GIBT_DEFAULTS_BLOCK { - EFI_HII_GLYPH_BLOCK Header; - EFI_HII_GLYPH_INFO Cell; -} EFI_HII_GIBT_DEFAULTS_BLOCK; - -typedef struct _EFI_HII_GIBT_DUPLICATE_BLOCK { - EFI_HII_GLYPH_BLOCK Header; - CHAR16 CharValue; -} EFI_HII_GIBT_DUPLICATE_BLOCK; - -typedef struct _EFI_GLYPH_GIBT_END_BLOCK { - EFI_HII_GLYPH_BLOCK Header; -} EFI_GLYPH_GIBT_END_BLOCK; - -typedef struct _EFI_HII_GIBT_EXT1_BLOCK { - EFI_HII_GLYPH_BLOCK Header; - UINT8 BlockType2; - UINT8 Length; -} EFI_HII_GIBT_EXT1_BLOCK; - -typedef struct _EFI_HII_GIBT_EXT2_BLOCK { - EFI_HII_GLYPH_BLOCK Header; - UINT8 BlockType2; - UINT16 Length; -} EFI_HII_GIBT_EXT2_BLOCK; - -typedef struct _EFI_HII_GIBT_EXT4_BLOCK { - EFI_HII_GLYPH_BLOCK Header; - UINT8 BlockType2; - UINT32 Length; -} EFI_HII_GIBT_EXT4_BLOCK; - -typedef struct _EFI_HII_GIBT_GLYPH_BLOCK { - EFI_HII_GLYPH_BLOCK Header; - EFI_HII_GLYPH_INFO Cell; - UINT8 BitmapData[1]; -} EFI_HII_GIBT_GLYPH_BLOCK; - -typedef struct _EFI_HII_GIBT_GLYPHS_BLOCK { - EFI_HII_GLYPH_BLOCK Header; - EFI_HII_GLYPH_INFO Cell; - UINT16 Count; - UINT8 BitmapData[1]; -} EFI_HII_GIBT_GLYPHS_BLOCK; - -typedef struct _EFI_HII_GIBT_GLYPH_DEFAULT_BLOCK { - EFI_HII_GLYPH_BLOCK Header; - UINT8 BitmapData[1]; -} EFI_HII_GIBT_GLYPH_DEFAULT_BLOCK; - -typedef struct _EFI_HII_GIBT_GLYPHS_DEFAULT_BLOCK { - EFI_HII_GLYPH_BLOCK Header; - UINT16 Count; - UINT8 BitmapData[1]; -} EFI_HII_GIBT_GLYPHS_DEFAULT_BLOCK; - -typedef struct _EFI_HII_GIBT_SKIP1_BLOCK { - EFI_HII_GLYPH_BLOCK Header; - UINT8 SkipCount; -} EFI_HII_GIBT_SKIP1_BLOCK; - -typedef struct _EFI_HII_GIBT_SKIP2_BLOCK { - EFI_HII_GLYPH_BLOCK Header; - UINT16 SkipCount; -} EFI_HII_GIBT_SKIP2_BLOCK; - -// -// Definitions for Device Path Package -// Section 27.3.4 -// - -/// -/// The device path package is used to carry a device path -/// associated with the package list. -/// -typedef struct _EFI_HII_DEVICE_PATH_PACKAGE_HDR { - EFI_HII_PACKAGE_HEADER Header; - // EFI_DEVICE_PATH_PROTOCOL DevicePath[]; -} EFI_HII_DEVICE_PATH_PACKAGE_HDR; - -// -// Definitions for GUID Package -// Section 27.3.5 -// - -/// -/// The GUID package is used to carry data where the format is defined by a GUID. -/// -typedef struct _EFI_HII_GUID_PACKAGE_HDR { - EFI_HII_PACKAGE_HEADER Header; - EFI_GUID Guid; - // Data per GUID definition may follow -} EFI_HII_GUID_PACKAGE_HDR; - -// -// Definitions for String Package -// Section 27.3.6 -// - -#define UEFI_CONFIG_LANG "x-UEFI" -#define UEFI_CONFIG_LANG_2 "x-i-UEFI" - -/// -/// The fixed header consists of a standard record header and then the string identifiers -/// contained in this section and the offsets of the string and language information. -/// -typedef struct _EFI_HII_STRING_PACKAGE_HDR { - EFI_HII_PACKAGE_HEADER Header; - UINT32 HdrSize; - UINT32 StringInfoOffset; - CHAR16 LanguageWindow[16]; - EFI_STRING_ID LanguageName; - CHAR8 Language[1]; -} EFI_HII_STRING_PACKAGE_HDR; - -typedef struct { - UINT8 BlockType; -} EFI_HII_STRING_BLOCK; - -// -// Value of different string information block types -// -#define EFI_HII_SIBT_END 0x00 -#define EFI_HII_SIBT_STRING_SCSU 0x10 -#define EFI_HII_SIBT_STRING_SCSU_FONT 0x11 -#define EFI_HII_SIBT_STRINGS_SCSU 0x12 -#define EFI_HII_SIBT_STRINGS_SCSU_FONT 0x13 -#define EFI_HII_SIBT_STRING_UCS2 0x14 -#define EFI_HII_SIBT_STRING_UCS2_FONT 0x15 -#define EFI_HII_SIBT_STRINGS_UCS2 0x16 -#define EFI_HII_SIBT_STRINGS_UCS2_FONT 0x17 -#define EFI_HII_SIBT_DUPLICATE 0x20 -#define EFI_HII_SIBT_SKIP2 0x21 -#define EFI_HII_SIBT_SKIP1 0x22 -#define EFI_HII_SIBT_EXT1 0x30 -#define EFI_HII_SIBT_EXT2 0x31 -#define EFI_HII_SIBT_EXT4 0x32 -#define EFI_HII_SIBT_FONT 0x40 - -// -// Definition of different string information block types -// - -typedef struct _EFI_HII_SIBT_DUPLICATE_BLOCK { - EFI_HII_STRING_BLOCK Header; - EFI_STRING_ID StringId; -} EFI_HII_SIBT_DUPLICATE_BLOCK; - -typedef struct _EFI_HII_SIBT_END_BLOCK { - EFI_HII_STRING_BLOCK Header; -} EFI_HII_SIBT_END_BLOCK; - -typedef struct _EFI_HII_SIBT_EXT1_BLOCK { - EFI_HII_STRING_BLOCK Header; - UINT8 BlockType2; - UINT8 Length; -} EFI_HII_SIBT_EXT1_BLOCK; - -typedef struct _EFI_HII_SIBT_EXT2_BLOCK { - EFI_HII_STRING_BLOCK Header; - UINT8 BlockType2; - UINT16 Length; -} EFI_HII_SIBT_EXT2_BLOCK; - -typedef struct _EFI_HII_SIBT_EXT4_BLOCK { - EFI_HII_STRING_BLOCK Header; - UINT8 BlockType2; - UINT32 Length; -} EFI_HII_SIBT_EXT4_BLOCK; - -typedef struct _EFI_HII_SIBT_FONT_BLOCK { - EFI_HII_SIBT_EXT2_BLOCK Header; - UINT8 FontId; - UINT16 FontSize; - EFI_HII_FONT_STYLE FontStyle; - CHAR16 FontName[1]; -} EFI_HII_SIBT_FONT_BLOCK; - -typedef struct _EFI_HII_SIBT_SKIP1_BLOCK { - EFI_HII_STRING_BLOCK Header; - UINT8 SkipCount; -} EFI_HII_SIBT_SKIP1_BLOCK; - -typedef struct _EFI_HII_SIBT_SKIP2_BLOCK { - EFI_HII_STRING_BLOCK Header; - UINT16 SkipCount; -} EFI_HII_SIBT_SKIP2_BLOCK; - -typedef struct _EFI_HII_SIBT_STRING_SCSU_BLOCK { - EFI_HII_STRING_BLOCK Header; - UINT8 StringText[1]; -} EFI_HII_SIBT_STRING_SCSU_BLOCK; - -typedef struct _EFI_HII_SIBT_STRING_SCSU_FONT_BLOCK { - EFI_HII_STRING_BLOCK Header; - UINT8 FontIdentifier; - UINT8 StringText[1]; -} EFI_HII_SIBT_STRING_SCSU_FONT_BLOCK; - -typedef struct _EFI_HII_SIBT_STRINGS_SCSU_BLOCK { - EFI_HII_STRING_BLOCK Header; - UINT16 StringCount; - UINT8 StringText[1]; -} EFI_HII_SIBT_STRINGS_SCSU_BLOCK; - -typedef struct _EFI_HII_SIBT_STRINGS_SCSU_FONT_BLOCK { - EFI_HII_STRING_BLOCK Header; - UINT8 FontIdentifier; - UINT16 StringCount; - UINT8 StringText[1]; -} EFI_HII_SIBT_STRINGS_SCSU_FONT_BLOCK; - -typedef struct _EFI_HII_SIBT_STRING_UCS2_BLOCK { - EFI_HII_STRING_BLOCK Header; - CHAR16 StringText[1]; -} EFI_HII_SIBT_STRING_UCS2_BLOCK; - -typedef struct _EFI_HII_SIBT_STRING_UCS2_FONT_BLOCK { - EFI_HII_STRING_BLOCK Header; - UINT8 FontIdentifier; - CHAR16 StringText[1]; -} EFI_HII_SIBT_STRING_UCS2_FONT_BLOCK; - -typedef struct _EFI_HII_SIBT_STRINGS_UCS2_BLOCK { - EFI_HII_STRING_BLOCK Header; - UINT16 StringCount; - CHAR16 StringText[1]; -} EFI_HII_SIBT_STRINGS_UCS2_BLOCK; - -typedef struct _EFI_HII_SIBT_STRINGS_UCS2_FONT_BLOCK { - EFI_HII_STRING_BLOCK Header; - UINT8 FontIdentifier; - UINT16 StringCount; - CHAR16 StringText[1]; -} EFI_HII_SIBT_STRINGS_UCS2_FONT_BLOCK; - -// -// Definitions for Image Package -// Section 27.3.7 -// - -typedef struct _EFI_HII_IMAGE_PACKAGE_HDR { - EFI_HII_PACKAGE_HEADER Header; - UINT32 ImageInfoOffset; - UINT32 PaletteInfoOffset; -} EFI_HII_IMAGE_PACKAGE_HDR; - -typedef struct _EFI_HII_IMAGE_BLOCK { - UINT8 BlockType; -} EFI_HII_IMAGE_BLOCK; - -// -// Value of different image information block types -// -#define EFI_HII_IIBT_END 0x00 -#define EFI_HII_IIBT_IMAGE_1BIT 0x10 -#define EFI_HII_IIBT_IMAGE_1BIT_TRANS 0x11 -#define EFI_HII_IIBT_IMAGE_4BIT 0x12 -#define EFI_HII_IIBT_IMAGE_4BIT_TRANS 0x13 -#define EFI_HII_IIBT_IMAGE_8BIT 0x14 -#define EFI_HII_IIBT_IMAGE_8BIT_TRANS 0x15 -#define EFI_HII_IIBT_IMAGE_24BIT 0x16 -#define EFI_HII_IIBT_IMAGE_24BIT_TRANS 0x17 -#define EFI_HII_IIBT_IMAGE_JPEG 0x18 -#define EFI_HII_IIBT_DUPLICATE 0x20 -#define EFI_HII_IIBT_SKIP2 0x21 -#define EFI_HII_IIBT_SKIP1 0x22 -#define EFI_HII_IIBT_EXT1 0x30 -#define EFI_HII_IIBT_EXT2 0x31 -#define EFI_HII_IIBT_EXT4 0x32 - -// -// Definition of different image information block types -// - -typedef struct _EFI_HII_IIBT_END_BLOCK { - EFI_HII_IMAGE_BLOCK Header; -} EFI_HII_IIBT_END_BLOCK; - -typedef struct _EFI_HII_IIBT_EXT1_BLOCK { - EFI_HII_IMAGE_BLOCK Header; - UINT8 BlockType2; - UINT8 Length; -} EFI_HII_IIBT_EXT1_BLOCK; - -typedef struct _EFI_HII_IIBT_EXT2_BLOCK { - EFI_HII_IMAGE_BLOCK Header; - UINT8 BlockType2; - UINT16 Length; -} EFI_HII_IIBT_EXT2_BLOCK; - -typedef struct _EFI_HII_IIBT_EXT4_BLOCK { - EFI_HII_IMAGE_BLOCK Header; - UINT8 BlockType2; - UINT32 Length; -} EFI_HII_IIBT_EXT4_BLOCK; - -typedef struct _EFI_HII_IIBT_IMAGE_1BIT_BASE { - UINT16 Width; - UINT16 Height; - UINT8 Data[1]; -} EFI_HII_IIBT_IMAGE_1BIT_BASE; - -typedef struct _EFI_HII_IIBT_IMAGE_1BIT_BLOCK { - EFI_HII_IMAGE_BLOCK Header; - UINT8 PaletteIndex; - EFI_HII_IIBT_IMAGE_1BIT_BASE Bitmap; -} EFI_HII_IIBT_IMAGE_1BIT_BLOCK; - -typedef struct _EFI_HII_IIBT_IMAGE_1BIT_TRANS_BLOCK { - EFI_HII_IMAGE_BLOCK Header; - UINT8 PaletteIndex; - EFI_HII_IIBT_IMAGE_1BIT_BASE Bitmap; -} EFI_HII_IIBT_IMAGE_1BIT_TRANS_BLOCK; - -typedef struct _EFI_HII_RGB_PIXEL { - UINT8 b; - UINT8 g; - UINT8 r; -} EFI_HII_RGB_PIXEL; - -typedef struct _EFI_HII_IIBT_IMAGE_24BIT_BASE { - UINT16 Width; - UINT16 Height; - EFI_HII_RGB_PIXEL Bitmap[1]; -} EFI_HII_IIBT_IMAGE_24BIT_BASE; - -typedef struct _EFI_HII_IIBT_IMAGE_24BIT_BLOCK { - EFI_HII_IMAGE_BLOCK Header; - EFI_HII_IIBT_IMAGE_24BIT_BASE Bitmap; -} EFI_HII_IIBT_IMAGE_24BIT_BLOCK; - -typedef struct _EFI_HII_IIBT_IMAGE_24BIT_TRANS_BLOCK { - EFI_HII_IMAGE_BLOCK Header; - EFI_HII_IIBT_IMAGE_24BIT_BASE Bitmap; -} EFI_HII_IIBT_IMAGE_24BIT_TRANS_BLOCK; - -typedef struct _EFI_HII_IIBT_IMAGE_4BIT_BASE { - UINT16 Width; - UINT16 Height; - UINT8 Data[1]; -} EFI_HII_IIBT_IMAGE_4BIT_BASE; - -typedef struct _EFI_HII_IIBT_IMAGE_4BIT_BLOCK { - EFI_HII_IMAGE_BLOCK Header; - UINT8 PaletteIndex; - EFI_HII_IIBT_IMAGE_4BIT_BASE Bitmap; -} EFI_HII_IIBT_IMAGE_4BIT_BLOCK; - -typedef struct _EFI_HII_IIBT_IMAGE_4BIT_TRANS_BLOCK { - EFI_HII_IMAGE_BLOCK Header; - UINT8 PaletteIndex; - EFI_HII_IIBT_IMAGE_4BIT_BASE Bitmap; -} EFI_HII_IIBT_IMAGE_4BIT_TRANS_BLOCK; - -typedef struct _EFI_HII_IIBT_IMAGE_8BIT_BASE { - UINT16 Width; - UINT16 Height; - UINT8 Data[1]; -} EFI_HII_IIBT_IMAGE_8BIT_BASE; - -typedef struct _EFI_HII_IIBT_IMAGE_8BIT_PALETTE_BLOCK { - EFI_HII_IMAGE_BLOCK Header; - UINT8 PaletteIndex; - EFI_HII_IIBT_IMAGE_8BIT_BASE Bitmap; -} EFI_HII_IIBT_IMAGE_8BIT_BLOCK; - -typedef struct _EFI_HII_IIBT_IMAGE_8BIT_TRANS_BLOCK { - EFI_HII_IMAGE_BLOCK Header; - UINT8 PaletteIndex; - EFI_HII_IIBT_IMAGE_8BIT_BASE Bitmap; -} EFI_HII_IIBT_IMAGE_8BIT_TRAN_BLOCK; - -typedef struct _EFI_HII_IIBT_DUPLICATE_BLOCK { - EFI_HII_IMAGE_BLOCK Header; - EFI_IMAGE_ID ImageId; -} EFI_HII_IIBT_DUPLICATE_BLOCK; - -typedef struct _EFI_HII_IIBT_JPEG_BLOCK { - EFI_HII_IMAGE_BLOCK Header; - UINT32 Size; - UINT8 Data[1]; -} EFI_HII_IIBT_JPEG_BLOCK; - -typedef struct _EFI_HII_IIBT_SKIP1_BLOCK { - EFI_HII_IMAGE_BLOCK Header; - UINT8 SkipCount; -} EFI_HII_IIBT_SKIP1_BLOCK; - -typedef struct _EFI_HII_IIBT_SKIP2_BLOCK { - EFI_HII_IMAGE_BLOCK Header; - UINT16 SkipCount; -} EFI_HII_IIBT_SKIP2_BLOCK; - -// -// Definitions for Palette Information -// - -typedef struct _EFI_HII_IMAGE_PALETTE_INFO_HEADER { - UINT16 PaletteCount; -} EFI_HII_IMAGE_PALETTE_INFO_HEADER; - -typedef struct _EFI_HII_IMAGE_PALETTE_INFO { - UINT16 PaletteSize; - EFI_HII_RGB_PIXEL PaletteValue[1]; -} EFI_HII_IMAGE_PALETTE_INFO; - -// -// Definitions for Forms Package -// Section 27.3.8 -// - -/// -/// The Form package is used to carry form-based encoding data. -/// -typedef struct _EFI_HII_FORM_PACKAGE_HDR { - EFI_HII_PACKAGE_HEADER Header; - // EFI_IFR_OP_HEADER OpCodeHeader; - // More op-codes follow -} EFI_HII_FORM_PACKAGE_HDR; - -typedef struct { - UINT8 Hour; - UINT8 Minute; - UINT8 Second; -} EFI_HII_TIME; - -typedef struct { - UINT16 Year; - UINT8 Month; - UINT8 Day; -} EFI_HII_DATE; - -typedef struct { - EFI_QUESTION_ID QuestionId; - EFI_FORM_ID FormId; - EFI_GUID FormSetGuid; - EFI_STRING_ID DevicePath; -} EFI_HII_REF; - -typedef union { - UINT8 u8; - UINT16 u16; - UINT32 u32; - UINT64 u64; - BOOLEAN b; - EFI_HII_TIME time; - EFI_HII_DATE date; - EFI_STRING_ID string; ///< EFI_IFR_TYPE_STRING, EFI_IFR_TYPE_ACTION - EFI_HII_REF ref; ///< EFI_IFR_TYPE_REF - // UINT8 buffer[]; ///< EFI_IFR_TYPE_BUFFER -} EFI_IFR_TYPE_VALUE; - -// -// IFR Opcodes -// -#define EFI_IFR_FORM_OP 0x01 -#define EFI_IFR_SUBTITLE_OP 0x02 -#define EFI_IFR_TEXT_OP 0x03 -#define EFI_IFR_IMAGE_OP 0x04 -#define EFI_IFR_ONE_OF_OP 0x05 -#define EFI_IFR_CHECKBOX_OP 0x06 -#define EFI_IFR_NUMERIC_OP 0x07 -#define EFI_IFR_PASSWORD_OP 0x08 -#define EFI_IFR_ONE_OF_OPTION_OP 0x09 -#define EFI_IFR_SUPPRESS_IF_OP 0x0A -#define EFI_IFR_LOCKED_OP 0x0B -#define EFI_IFR_ACTION_OP 0x0C -#define EFI_IFR_RESET_BUTTON_OP 0x0D -#define EFI_IFR_FORM_SET_OP 0x0E -#define EFI_IFR_REF_OP 0x0F -#define EFI_IFR_NO_SUBMIT_IF_OP 0x10 -#define EFI_IFR_INCONSISTENT_IF_OP 0x11 -#define EFI_IFR_EQ_ID_VAL_OP 0x12 -#define EFI_IFR_EQ_ID_ID_OP 0x13 -#define EFI_IFR_EQ_ID_VAL_LIST_OP 0x14 -#define EFI_IFR_AND_OP 0x15 -#define EFI_IFR_OR_OP 0x16 -#define EFI_IFR_NOT_OP 0x17 -#define EFI_IFR_RULE_OP 0x18 -#define EFI_IFR_GRAY_OUT_IF_OP 0x19 -#define EFI_IFR_DATE_OP 0x1A -#define EFI_IFR_TIME_OP 0x1B -#define EFI_IFR_STRING_OP 0x1C -#define EFI_IFR_REFRESH_OP 0x1D -#define EFI_IFR_DISABLE_IF_OP 0x1E -#define EFI_IFR_ANIMATION_OP 0x1F -#define EFI_IFR_TO_LOWER_OP 0x20 -#define EFI_IFR_TO_UPPER_OP 0x21 -#define EFI_IFR_MAP_OP 0x22 -#define EFI_IFR_ORDERED_LIST_OP 0x23 -#define EFI_IFR_VARSTORE_OP 0x24 -#define EFI_IFR_VARSTORE_NAME_VALUE_OP 0x25 -#define EFI_IFR_VARSTORE_EFI_OP 0x26 -#define EFI_IFR_VARSTORE_DEVICE_OP 0x27 -#define EFI_IFR_VERSION_OP 0x28 -#define EFI_IFR_END_OP 0x29 -#define EFI_IFR_MATCH_OP 0x2A -#define EFI_IFR_GET_OP 0x2B -#define EFI_IFR_SET_OP 0x2C -#define EFI_IFR_READ_OP 0x2D -#define EFI_IFR_WRITE_OP 0x2E -#define EFI_IFR_EQUAL_OP 0x2F -#define EFI_IFR_NOT_EQUAL_OP 0x30 -#define EFI_IFR_GREATER_THAN_OP 0x31 -#define EFI_IFR_GREATER_EQUAL_OP 0x32 -#define EFI_IFR_LESS_THAN_OP 0x33 -#define EFI_IFR_LESS_EQUAL_OP 0x34 -#define EFI_IFR_BITWISE_AND_OP 0x35 -#define EFI_IFR_BITWISE_OR_OP 0x36 -#define EFI_IFR_BITWISE_NOT_OP 0x37 -#define EFI_IFR_SHIFT_LEFT_OP 0x38 -#define EFI_IFR_SHIFT_RIGHT_OP 0x39 -#define EFI_IFR_ADD_OP 0x3A -#define EFI_IFR_SUBTRACT_OP 0x3B -#define EFI_IFR_MULTIPLY_OP 0x3C -#define EFI_IFR_DIVIDE_OP 0x3D -#define EFI_IFR_MODULO_OP 0x3E -#define EFI_IFR_RULE_REF_OP 0x3F -#define EFI_IFR_QUESTION_REF1_OP 0x40 -#define EFI_IFR_QUESTION_REF2_OP 0x41 -#define EFI_IFR_UINT8_OP 0x42 -#define EFI_IFR_UINT16_OP 0x43 -#define EFI_IFR_UINT32_OP 0x44 -#define EFI_IFR_UINT64_OP 0x45 -#define EFI_IFR_TRUE_OP 0x46 -#define EFI_IFR_FALSE_OP 0x47 -#define EFI_IFR_TO_UINT_OP 0x48 -#define EFI_IFR_TO_STRING_OP 0x49 -#define EFI_IFR_TO_BOOLEAN_OP 0x4A -#define EFI_IFR_MID_OP 0x4B -#define EFI_IFR_FIND_OP 0x4C -#define EFI_IFR_TOKEN_OP 0x4D -#define EFI_IFR_STRING_REF1_OP 0x4E -#define EFI_IFR_STRING_REF2_OP 0x4F -#define EFI_IFR_CONDITIONAL_OP 0x50 -#define EFI_IFR_QUESTION_REF3_OP 0x51 -#define EFI_IFR_ZERO_OP 0x52 -#define EFI_IFR_ONE_OP 0x53 -#define EFI_IFR_ONES_OP 0x54 -#define EFI_IFR_UNDEFINED_OP 0x55 -#define EFI_IFR_LENGTH_OP 0x56 -#define EFI_IFR_DUP_OP 0x57 -#define EFI_IFR_THIS_OP 0x58 -#define EFI_IFR_SPAN_OP 0x59 -#define EFI_IFR_VALUE_OP 0x5A -#define EFI_IFR_DEFAULT_OP 0x5B -#define EFI_IFR_DEFAULTSTORE_OP 0x5C -#define EFI_IFR_FORM_MAP_OP 0x5D -#define EFI_IFR_CATENATE_OP 0x5E -#define EFI_IFR_GUID_OP 0x5F -#define EFI_IFR_SECURITY_OP 0x60 -#define EFI_IFR_MODAL_TAG_OP 0x61 -#define EFI_IFR_REFRESH_ID_OP 0x62 -#define EFI_IFR_WARNING_IF_OP 0x63 -#define EFI_IFR_MATCH2_OP 0x64 - -// -// Definitions of IFR Standard Headers -// Section 27.3.8.2 -// - -typedef struct _EFI_IFR_OP_HEADER { - UINT8 OpCode; - UINT8 Length:7; - UINT8 Scope:1; -} EFI_IFR_OP_HEADER; - -typedef struct _EFI_IFR_STATEMENT_HEADER { - EFI_STRING_ID Prompt; - EFI_STRING_ID Help; -} EFI_IFR_STATEMENT_HEADER; - -typedef struct _EFI_IFR_QUESTION_HEADER { - EFI_IFR_STATEMENT_HEADER Header; - EFI_QUESTION_ID QuestionId; - EFI_VARSTORE_ID VarStoreId; - union { - EFI_STRING_ID VarName; - UINT16 VarOffset; - } VarStoreInfo; - UINT8 Flags; -} EFI_IFR_QUESTION_HEADER; - -// -// Flag values of EFI_IFR_QUESTION_HEADER -// -#define EFI_IFR_FLAG_READ_ONLY 0x01 -#define EFI_IFR_FLAG_CALLBACK 0x04 -#define EFI_IFR_FLAG_RESET_REQUIRED 0x10 -#define EFI_IFR_FLAG_RECONNECT_REQUIRED 0x40 -#define EFI_IFR_FLAG_OPTIONS_ONLY 0x80 - -// -// Definition for Opcode Reference -// Section 27.3.8.3 -// -typedef struct _EFI_IFR_DEFAULTSTORE { - EFI_IFR_OP_HEADER Header; - EFI_STRING_ID DefaultName; - UINT16 DefaultId; -} EFI_IFR_DEFAULTSTORE; - -// -// Default Identifier of default store -// -#define EFI_HII_DEFAULT_CLASS_STANDARD 0x0000 -#define EFI_HII_DEFAULT_CLASS_MANUFACTURING 0x0001 -#define EFI_HII_DEFAULT_CLASS_SAFE 0x0002 -#define EFI_HII_DEFAULT_CLASS_PLATFORM_BEGIN 0x4000 -#define EFI_HII_DEFAULT_CLASS_PLATFORM_END 0x7fff -#define EFI_HII_DEFAULT_CLASS_HARDWARE_BEGIN 0x8000 -#define EFI_HII_DEFAULT_CLASS_HARDWARE_END 0xbfff -#define EFI_HII_DEFAULT_CLASS_FIRMWARE_BEGIN 0xc000 -#define EFI_HII_DEFAULT_CLASS_FIRMWARE_END 0xffff - -typedef struct _EFI_IFR_VARSTORE { - EFI_IFR_OP_HEADER Header; - EFI_GUID Guid; - EFI_VARSTORE_ID VarStoreId; - UINT16 Size; - UINT8 Name[1]; -} EFI_IFR_VARSTORE; - -typedef struct _EFI_IFR_VARSTORE_EFI { - EFI_IFR_OP_HEADER Header; - EFI_VARSTORE_ID VarStoreId; - EFI_GUID Guid; - UINT32 Attributes; - UINT16 Size; - UINT8 Name[1]; -} EFI_IFR_VARSTORE_EFI; - -typedef struct _EFI_IFR_VARSTORE_NAME_VALUE { - EFI_IFR_OP_HEADER Header; - EFI_VARSTORE_ID VarStoreId; - EFI_GUID Guid; -} EFI_IFR_VARSTORE_NAME_VALUE; - -typedef struct _EFI_IFR_FORM_SET { - EFI_IFR_OP_HEADER Header; - EFI_GUID Guid; - EFI_STRING_ID FormSetTitle; - EFI_STRING_ID Help; - UINT8 Flags; - // EFI_GUID ClassGuid[]; -} EFI_IFR_FORM_SET; - -typedef struct _EFI_IFR_END { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_END; - -typedef struct _EFI_IFR_FORM { - EFI_IFR_OP_HEADER Header; - UINT16 FormId; - EFI_STRING_ID FormTitle; -} EFI_IFR_FORM; - -typedef struct _EFI_IFR_IMAGE { - EFI_IFR_OP_HEADER Header; - EFI_IMAGE_ID Id; -} EFI_IFR_IMAGE; - -typedef struct _EFI_IFR_MODAL_TAG { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_MODAL_TAG; - -typedef struct _EFI_IFR_LOCKED { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_LOCKED; - -typedef struct _EFI_IFR_RULE { - EFI_IFR_OP_HEADER Header; - UINT8 RuleId; -} EFI_IFR_RULE; - -typedef struct _EFI_IFR_DEFAULT { - EFI_IFR_OP_HEADER Header; - UINT16 DefaultId; - UINT8 Type; - EFI_IFR_TYPE_VALUE Value; -} EFI_IFR_DEFAULT; - -typedef struct _EFI_IFR_DEFAULT_2 { - EFI_IFR_OP_HEADER Header; - UINT16 DefaultId; - UINT8 Type; -} EFI_IFR_DEFAULT_2; - -typedef struct _EFI_IFR_VALUE { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_VALUE; - -typedef struct _EFI_IFR_SUBTITLE { - EFI_IFR_OP_HEADER Header; - EFI_IFR_STATEMENT_HEADER Statement; - UINT8 Flags; -} EFI_IFR_SUBTITLE; - -#define EFI_IFR_FLAGS_HORIZONTAL 0x01 - -typedef struct _EFI_IFR_CHECKBOX { - EFI_IFR_OP_HEADER Header; - EFI_IFR_QUESTION_HEADER Question; - UINT8 Flags; -} EFI_IFR_CHECKBOX; - -#define EFI_IFR_CHECKBOX_DEFAULT 0x01 -#define EFI_IFR_CHECKBOX_DEFAULT_MFG 0x02 - -typedef struct _EFI_IFR_TEXT { - EFI_IFR_OP_HEADER Header; - EFI_IFR_STATEMENT_HEADER Statement; - EFI_STRING_ID TextTwo; -} EFI_IFR_TEXT; - -typedef struct _EFI_IFR_REF { - EFI_IFR_OP_HEADER Header; - EFI_IFR_QUESTION_HEADER Question; - EFI_FORM_ID FormId; -} EFI_IFR_REF; - -typedef struct _EFI_IFR_REF2 { - EFI_IFR_OP_HEADER Header; - EFI_IFR_QUESTION_HEADER Question; - EFI_FORM_ID FormId; - EFI_QUESTION_ID QuestionId; -} EFI_IFR_REF2; - -typedef struct _EFI_IFR_REF3 { - EFI_IFR_OP_HEADER Header; - EFI_IFR_QUESTION_HEADER Question; - EFI_FORM_ID FormId; - EFI_QUESTION_ID QuestionId; - EFI_GUID FormSetId; -} EFI_IFR_REF3; - -typedef struct _EFI_IFR_REF4 { - EFI_IFR_OP_HEADER Header; - EFI_IFR_QUESTION_HEADER Question; - EFI_FORM_ID FormId; - EFI_QUESTION_ID QuestionId; - EFI_GUID FormSetId; - EFI_STRING_ID DevicePath; -} EFI_IFR_REF4; - -typedef struct _EFI_IFR_REF5 { - EFI_IFR_OP_HEADER Header; - EFI_IFR_QUESTION_HEADER Question; -} EFI_IFR_REF5; - -typedef struct _EFI_IFR_RESET_BUTTON { - EFI_IFR_OP_HEADER Header; - EFI_IFR_STATEMENT_HEADER Statement; - EFI_DEFAULT_ID DefaultId; -} EFI_IFR_RESET_BUTTON; - -typedef struct _EFI_IFR_ACTION { - EFI_IFR_OP_HEADER Header; - EFI_IFR_QUESTION_HEADER Question; - EFI_STRING_ID QuestionConfig; -} EFI_IFR_ACTION; - -typedef struct _EFI_IFR_ACTION_1 { - EFI_IFR_OP_HEADER Header; - EFI_IFR_QUESTION_HEADER Question; -} EFI_IFR_ACTION_1; - -typedef struct _EFI_IFR_DATE { - EFI_IFR_OP_HEADER Header; - EFI_IFR_QUESTION_HEADER Question; - UINT8 Flags; -} EFI_IFR_DATE; - -// -// Flags that describe the behavior of the question. -// -#define EFI_QF_DATE_YEAR_SUPPRESS 0x01 -#define EFI_QF_DATE_MONTH_SUPPRESS 0x02 -#define EFI_QF_DATE_DAY_SUPPRESS 0x04 - -#define EFI_QF_DATE_STORAGE 0x30 -#define QF_DATE_STORAGE_NORMAL 0x00 -#define QF_DATE_STORAGE_TIME 0x10 -#define QF_DATE_STORAGE_WAKEUP 0x20 - -typedef union { - struct { - UINT8 MinValue; - UINT8 MaxValue; - UINT8 Step; - } u8; - struct { - UINT16 MinValue; - UINT16 MaxValue; - UINT16 Step; - } u16; - struct { - UINT32 MinValue; - UINT32 MaxValue; - UINT32 Step; - } u32; - struct { - UINT64 MinValue; - UINT64 MaxValue; - UINT64 Step; - } u64; -} MINMAXSTEP_DATA; - -typedef struct _EFI_IFR_NUMERIC { - EFI_IFR_OP_HEADER Header; - EFI_IFR_QUESTION_HEADER Question; - UINT8 Flags; - MINMAXSTEP_DATA data; -} EFI_IFR_NUMERIC; - -// -// Flags related to the numeric question -// -#define EFI_IFR_NUMERIC_SIZE 0x03 -#define EFI_IFR_NUMERIC_SIZE_1 0x00 -#define EFI_IFR_NUMERIC_SIZE_2 0x01 -#define EFI_IFR_NUMERIC_SIZE_4 0x02 -#define EFI_IFR_NUMERIC_SIZE_8 0x03 - -#define EFI_IFR_DISPLAY 0x30 -#define EFI_IFR_DISPLAY_INT_DEC 0x00 -#define EFI_IFR_DISPLAY_UINT_DEC 0x10 -#define EFI_IFR_DISPLAY_UINT_HEX 0x20 - -typedef struct _EFI_IFR_ONE_OF { - EFI_IFR_OP_HEADER Header; - EFI_IFR_QUESTION_HEADER Question; - UINT8 Flags; - MINMAXSTEP_DATA data; -} EFI_IFR_ONE_OF; - -typedef struct _EFI_IFR_STRING { - EFI_IFR_OP_HEADER Header; - EFI_IFR_QUESTION_HEADER Question; - UINT8 MinSize; - UINT8 MaxSize; - UINT8 Flags; -} EFI_IFR_STRING; - -#define EFI_IFR_STRING_MULTI_LINE 0x01 - -typedef struct _EFI_IFR_PASSWORD { - EFI_IFR_OP_HEADER Header; - EFI_IFR_QUESTION_HEADER Question; - UINT16 MinSize; - UINT16 MaxSize; -} EFI_IFR_PASSWORD; - -typedef struct _EFI_IFR_ORDERED_LIST { - EFI_IFR_OP_HEADER Header; - EFI_IFR_QUESTION_HEADER Question; - UINT8 MaxContainers; - UINT8 Flags; -} EFI_IFR_ORDERED_LIST; - -#define EFI_IFR_UNIQUE_SET 0x01 -#define EFI_IFR_NO_EMPTY_SET 0x02 - -typedef struct _EFI_IFR_TIME { - EFI_IFR_OP_HEADER Header; - EFI_IFR_QUESTION_HEADER Question; - UINT8 Flags; -} EFI_IFR_TIME; - -// -// A bit-mask that determines which unique settings are active for this opcode. -// -#define QF_TIME_HOUR_SUPPRESS 0x01 -#define QF_TIME_MINUTE_SUPPRESS 0x02 -#define QF_TIME_SECOND_SUPPRESS 0x04 - -#define QF_TIME_STORAGE 0x30 -#define QF_TIME_STORAGE_NORMAL 0x00 -#define QF_TIME_STORAGE_TIME 0x10 -#define QF_TIME_STORAGE_WAKEUP 0x20 - -typedef struct _EFI_IFR_DISABLE_IF { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_DISABLE_IF; - -typedef struct _EFI_IFR_SUPPRESS_IF { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_SUPPRESS_IF; - -typedef struct _EFI_IFR_GRAY_OUT_IF { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_GRAY_OUT_IF; - -typedef struct _EFI_IFR_INCONSISTENT_IF { - EFI_IFR_OP_HEADER Header; - EFI_STRING_ID Error; -} EFI_IFR_INCONSISTENT_IF; - -typedef struct _EFI_IFR_NO_SUBMIT_IF { - EFI_IFR_OP_HEADER Header; - EFI_STRING_ID Error; -} EFI_IFR_NO_SUBMIT_IF; - -typedef struct _EFI_IFR_WARNING_IF { - EFI_IFR_OP_HEADER Header; - EFI_STRING_ID Warning; - UINT8 TimeOut; -} EFI_IFR_WARNING_IF; - -typedef struct _EFI_IFR_REFRESH { - EFI_IFR_OP_HEADER Header; - UINT8 RefreshInterval; -} EFI_IFR_REFRESH; - -typedef struct _EFI_IFR_VARSTORE_DEVICE { - EFI_IFR_OP_HEADER Header; - EFI_STRING_ID DevicePath; -} EFI_IFR_VARSTORE_DEVICE; - -typedef struct _EFI_IFR_ONE_OF_OPTION { - EFI_IFR_OP_HEADER Header; - EFI_STRING_ID Option; - UINT8 Flags; - UINT8 Type; - EFI_IFR_TYPE_VALUE Value; -} EFI_IFR_ONE_OF_OPTION; - -// -// Types of the option's value. -// -#define EFI_IFR_TYPE_NUM_SIZE_8 0x00 -#define EFI_IFR_TYPE_NUM_SIZE_16 0x01 -#define EFI_IFR_TYPE_NUM_SIZE_32 0x02 -#define EFI_IFR_TYPE_NUM_SIZE_64 0x03 -#define EFI_IFR_TYPE_BOOLEAN 0x04 -#define EFI_IFR_TYPE_TIME 0x05 -#define EFI_IFR_TYPE_DATE 0x06 -#define EFI_IFR_TYPE_STRING 0x07 -#define EFI_IFR_TYPE_OTHER 0x08 -#define EFI_IFR_TYPE_UNDEFINED 0x09 -#define EFI_IFR_TYPE_ACTION 0x0A -#define EFI_IFR_TYPE_BUFFER 0x0B -#define EFI_IFR_TYPE_REF 0x0C - -#define EFI_IFR_OPTION_DEFAULT 0x10 -#define EFI_IFR_OPTION_DEFAULT_MFG 0x20 - -typedef struct _EFI_IFR_GUID { - EFI_IFR_OP_HEADER Header; - EFI_GUID Guid; - //Optional Data Follows -} EFI_IFR_GUID; - -typedef struct _EFI_IFR_REFRESH_ID { - EFI_IFR_OP_HEADER Header; - EFI_GUID RefreshEventGroupId; -} EFI_IFR_REFRESH_ID; - -typedef struct _EFI_IFR_DUP { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_DUP; - -typedef struct _EFI_IFR_EQ_ID_ID { - EFI_IFR_OP_HEADER Header; - EFI_QUESTION_ID QuestionId1; - EFI_QUESTION_ID QuestionId2; -} EFI_IFR_EQ_ID_ID; - -typedef struct _EFI_IFR_EQ_ID_VAL { - EFI_IFR_OP_HEADER Header; - EFI_QUESTION_ID QuestionId; - UINT16 Value; -} EFI_IFR_EQ_ID_VAL; - -typedef struct _EFI_IFR_EQ_ID_VAL_LIST { - EFI_IFR_OP_HEADER Header; - EFI_QUESTION_ID QuestionId; - UINT16 ListLength; - UINT16 ValueList[1]; -} EFI_IFR_EQ_ID_VAL_LIST; - -typedef struct _EFI_IFR_UINT8 { - EFI_IFR_OP_HEADER Header; - UINT8 Value; -} EFI_IFR_UINT8; - -typedef struct _EFI_IFR_UINT16 { - EFI_IFR_OP_HEADER Header; - UINT16 Value; -} EFI_IFR_UINT16; - -typedef struct _EFI_IFR_UINT32 { - EFI_IFR_OP_HEADER Header; - UINT32 Value; -} EFI_IFR_UINT32; - -typedef struct _EFI_IFR_UINT64 { - EFI_IFR_OP_HEADER Header; - UINT64 Value; -} EFI_IFR_UINT64; - -typedef struct _EFI_IFR_QUESTION_REF1 { - EFI_IFR_OP_HEADER Header; - EFI_QUESTION_ID QuestionId; -} EFI_IFR_QUESTION_REF1; - -typedef struct _EFI_IFR_QUESTION_REF2 { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_QUESTION_REF2; - -typedef struct _EFI_IFR_QUESTION_REF3 { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_QUESTION_REF3; - -typedef struct _EFI_IFR_QUESTION_REF3_2 { - EFI_IFR_OP_HEADER Header; - EFI_STRING_ID DevicePath; -} EFI_IFR_QUESTION_REF3_2; - -typedef struct _EFI_IFR_QUESTION_REF3_3 { - EFI_IFR_OP_HEADER Header; - EFI_STRING_ID DevicePath; - EFI_GUID Guid; -} EFI_IFR_QUESTION_REF3_3; - -typedef struct _EFI_IFR_RULE_REF { - EFI_IFR_OP_HEADER Header; - UINT8 RuleId; -} EFI_IFR_RULE_REF; - -typedef struct _EFI_IFR_STRING_REF1 { - EFI_IFR_OP_HEADER Header; - EFI_STRING_ID StringId; -} EFI_IFR_STRING_REF1; - -typedef struct _EFI_IFR_STRING_REF2 { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_STRING_REF2; - -typedef struct _EFI_IFR_THIS { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_THIS; - -typedef struct _EFI_IFR_TRUE { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_TRUE; - -typedef struct _EFI_IFR_FALSE { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_FALSE; - -typedef struct _EFI_IFR_ONE { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_ONE; - -typedef struct _EFI_IFR_ONES { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_ONES; - -typedef struct _EFI_IFR_ZERO { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_ZERO; - -typedef struct _EFI_IFR_UNDEFINED { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_UNDEFINED; - -typedef struct _EFI_IFR_VERSION { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_VERSION; - -typedef struct _EFI_IFR_LENGTH { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_LENGTH; - -typedef struct _EFI_IFR_NOT { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_NOT; - -typedef struct _EFI_IFR_BITWISE_NOT { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_BITWISE_NOT; - -typedef struct _EFI_IFR_TO_BOOLEAN { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_TO_BOOLEAN; - -/// -/// For EFI_IFR_TO_STRING, when converting from -/// unsigned integers, these flags control the format: -/// 0 = unsigned decimal. -/// 1 = signed decimal. -/// 2 = hexadecimal (lower-case alpha). -/// 3 = hexadecimal (upper-case alpha). -///@{ -#define EFI_IFR_STRING_UNSIGNED_DEC 0 -#define EFI_IFR_STRING_SIGNED_DEC 1 -#define EFI_IFR_STRING_LOWERCASE_HEX 2 -#define EFI_IFR_STRING_UPPERCASE_HEX 3 -///@} - -/// -/// When converting from a buffer, these flags control the format: -/// 0 = ASCII. -/// 8 = Unicode. -///@{ -#define EFI_IFR_STRING_ASCII 0 -#define EFI_IFR_STRING_UNICODE 8 -///@} - -typedef struct _EFI_IFR_TO_STRING { - EFI_IFR_OP_HEADER Header; - UINT8 Format; -} EFI_IFR_TO_STRING; - -typedef struct _EFI_IFR_TO_UINT { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_TO_UINT; - -typedef struct _EFI_IFR_TO_UPPER { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_TO_UPPER; - -typedef struct _EFI_IFR_TO_LOWER { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_TO_LOWER; - -typedef struct _EFI_IFR_ADD { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_ADD; - -typedef struct _EFI_IFR_AND { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_AND; - -typedef struct _EFI_IFR_BITWISE_AND { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_BITWISE_AND; - -typedef struct _EFI_IFR_BITWISE_OR { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_BITWISE_OR; - -typedef struct _EFI_IFR_CATENATE { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_CATENATE; - -typedef struct _EFI_IFR_DIVIDE { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_DIVIDE; - -typedef struct _EFI_IFR_EQUAL { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_EQUAL; - -typedef struct _EFI_IFR_GREATER_EQUAL { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_GREATER_EQUAL; - -typedef struct _EFI_IFR_GREATER_THAN { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_GREATER_THAN; - -typedef struct _EFI_IFR_LESS_EQUAL { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_LESS_EQUAL; - -typedef struct _EFI_IFR_LESS_THAN { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_LESS_THAN; - -typedef struct _EFI_IFR_MATCH { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_MATCH; - -typedef struct _EFI_IFR_MATCH2 { - EFI_IFR_OP_HEADER Header; - EFI_GUID SyntaxType; -} EFI_IFR_MATCH2; - -typedef struct _EFI_IFR_MULTIPLY { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_MULTIPLY; - -typedef struct _EFI_IFR_MODULO { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_MODULO; - -typedef struct _EFI_IFR_NOT_EQUAL { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_NOT_EQUAL; - -typedef struct _EFI_IFR_OR { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_OR; - -typedef struct _EFI_IFR_SHIFT_LEFT { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_SHIFT_LEFT; - -typedef struct _EFI_IFR_SHIFT_RIGHT { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_SHIFT_RIGHT; - -typedef struct _EFI_IFR_SUBTRACT { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_SUBTRACT; - -typedef struct _EFI_IFR_CONDITIONAL { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_CONDITIONAL; - -// -// Flags governing the matching criteria of EFI_IFR_FIND -// -#define EFI_IFR_FF_CASE_SENSITIVE 0x00 -#define EFI_IFR_FF_CASE_INSENSITIVE 0x01 - -typedef struct _EFI_IFR_FIND { - EFI_IFR_OP_HEADER Header; - UINT8 Format; -} EFI_IFR_FIND; - -typedef struct _EFI_IFR_MID { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_MID; - -typedef struct _EFI_IFR_TOKEN { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_TOKEN; - -// -// Flags specifying whether to find the first matching string -// or the first non-matching string. -// -#define EFI_IFR_FLAGS_FIRST_MATCHING 0x00 -#define EFI_IFR_FLAGS_FIRST_NON_MATCHING 0x01 - -typedef struct _EFI_IFR_SPAN { - EFI_IFR_OP_HEADER Header; - UINT8 Flags; -} EFI_IFR_SPAN; - -typedef struct _EFI_IFR_SECURITY { - /// - /// Standard opcode header, where Header.Op = EFI_IFR_SECURITY_OP. - /// - EFI_IFR_OP_HEADER Header; - /// - /// Security permission level. - /// - EFI_GUID Permissions; -} EFI_IFR_SECURITY; - -typedef struct _EFI_IFR_FORM_MAP_METHOD { - /// - /// The string identifier which provides the human-readable name of - /// the configuration method for this standards map form. - /// - EFI_STRING_ID MethodTitle; - /// - /// Identifier which uniquely specifies the configuration methods - /// associated with this standards map form. - /// - EFI_GUID MethodIdentifier; -} EFI_IFR_FORM_MAP_METHOD; - -typedef struct _EFI_IFR_FORM_MAP { - /// - /// The sequence that defines the type of opcode as well as the length - /// of the opcode being defined. Header.OpCode = EFI_IFR_FORM_MAP_OP. - /// - EFI_IFR_OP_HEADER Header; - /// - /// The unique identifier for this particular form. - /// - EFI_FORM_ID FormId; - /// - /// One or more configuration method's name and unique identifier. - /// - // EFI_IFR_FORM_MAP_METHOD Methods[]; -} EFI_IFR_FORM_MAP; - -typedef struct _EFI_IFR_SET { - /// - /// The sequence that defines the type of opcode as well as the length - /// of the opcode being defined. Header.OpCode = EFI_IFR_SET_OP. - /// - EFI_IFR_OP_HEADER Header; - /// - /// Specifies the identifier of a previously declared variable store to - /// use when storing the question's value. - /// - EFI_VARSTORE_ID VarStoreId; - union { - /// - /// A 16-bit Buffer Storage offset. - /// - EFI_STRING_ID VarName; - /// - /// A Name Value or EFI Variable name (VarName). - /// - UINT16 VarOffset; - } VarStoreInfo; - /// - /// Specifies the type used for storage. - /// - UINT8 VarStoreType; -} EFI_IFR_SET; - -typedef struct _EFI_IFR_GET { - /// - /// The sequence that defines the type of opcode as well as the length - /// of the opcode being defined. Header.OpCode = EFI_IFR_GET_OP. - /// - EFI_IFR_OP_HEADER Header; - /// - /// Specifies the identifier of a previously declared variable store to - /// use when retrieving the value. - /// - EFI_VARSTORE_ID VarStoreId; - union { - /// - /// A 16-bit Buffer Storage offset. - /// - EFI_STRING_ID VarName; - /// - /// A Name Value or EFI Variable name (VarName). - /// - UINT16 VarOffset; - } VarStoreInfo; - /// - /// Specifies the type used for storage. - /// - UINT8 VarStoreType; -} EFI_IFR_GET; - -typedef struct _EFI_IFR_READ { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_READ; - -typedef struct _EFI_IFR_WRITE { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_WRITE; - -typedef struct _EFI_IFR_MAP { - EFI_IFR_OP_HEADER Header; -} EFI_IFR_MAP; -// -// Definitions for Keyboard Package -// Releated definitions are in Section of EFI_HII_DATABASE_PROTOCOL -// - -/// -/// Each enumeration values maps a physical key on a keyboard. -/// -typedef enum { - EfiKeyLCtrl, - EfiKeyA0, - EfiKeyLAlt, - EfiKeySpaceBar, - EfiKeyA2, - EfiKeyA3, - EfiKeyA4, - EfiKeyRCtrl, - EfiKeyLeftArrow, - EfiKeyDownArrow, - EfiKeyRightArrow, - EfiKeyZero, - EfiKeyPeriod, - EfiKeyEnter, - EfiKeyLShift, - EfiKeyB0, - EfiKeyB1, - EfiKeyB2, - EfiKeyB3, - EfiKeyB4, - EfiKeyB5, - EfiKeyB6, - EfiKeyB7, - EfiKeyB8, - EfiKeyB9, - EfiKeyB10, - EfiKeyRShift, - EfiKeyUpArrow, - EfiKeyOne, - EfiKeyTwo, - EfiKeyThree, - EfiKeyCapsLock, - EfiKeyC1, - EfiKeyC2, - EfiKeyC3, - EfiKeyC4, - EfiKeyC5, - EfiKeyC6, - EfiKeyC7, - EfiKeyC8, - EfiKeyC9, - EfiKeyC10, - EfiKeyC11, - EfiKeyC12, - EfiKeyFour, - EfiKeyFive, - EfiKeySix, - EfiKeyPlus, - EfiKeyTab, - EfiKeyD1, - EfiKeyD2, - EfiKeyD3, - EfiKeyD4, - EfiKeyD5, - EfiKeyD6, - EfiKeyD7, - EfiKeyD8, - EfiKeyD9, - EfiKeyD10, - EfiKeyD11, - EfiKeyD12, - EfiKeyD13, - EfiKeyDel, - EfiKeyEnd, - EfiKeyPgDn, - EfiKeySeven, - EfiKeyEight, - EfiKeyNine, - EfiKeyE0, - EfiKeyE1, - EfiKeyE2, - EfiKeyE3, - EfiKeyE4, - EfiKeyE5, - EfiKeyE6, - EfiKeyE7, - EfiKeyE8, - EfiKeyE9, - EfiKeyE10, - EfiKeyE11, - EfiKeyE12, - EfiKeyBackSpace, - EfiKeyIns, - EfiKeyHome, - EfiKeyPgUp, - EfiKeyNLck, - EfiKeySlash, - EfiKeyAsterisk, - EfiKeyMinus, - EfiKeyEsc, - EfiKeyF1, - EfiKeyF2, - EfiKeyF3, - EfiKeyF4, - EfiKeyF5, - EfiKeyF6, - EfiKeyF7, - EfiKeyF8, - EfiKeyF9, - EfiKeyF10, - EfiKeyF11, - EfiKeyF12, - EfiKeyPrint, - EfiKeySLck, - EfiKeyPause -} EFI_KEY; - -typedef struct { - /// - /// Used to describe a physical key on a keyboard. - /// - EFI_KEY Key; - /// - /// Unicode character code for the Key. - /// - CHAR16 Unicode; - /// - /// Unicode character code for the key with the shift key being held down. - /// - CHAR16 ShiftedUnicode; - /// - /// Unicode character code for the key with the Alt-GR being held down. - /// - CHAR16 AltGrUnicode; - /// - /// Unicode character code for the key with the Alt-GR and shift keys being held down. - /// - CHAR16 ShiftedAltGrUnicode; - /// - /// Modifier keys are defined to allow for special functionality that is not necessarily - /// accomplished by a printable character. Many of these modifier keys are flags to toggle - /// certain state bits on and off inside of a keyboard driver. - /// - UINT16 Modifier; - UINT16 AffectedAttribute; -} EFI_KEY_DESCRIPTOR; - -/// -/// A key which is affected by all the standard shift modifiers. -/// Most keys would be expected to have this bit active. -/// -#define EFI_AFFECTED_BY_STANDARD_SHIFT 0x0001 - -/// -/// This key is affected by the caps lock so that if a keyboard driver -/// would need to disambiguate between a key which had a "1" defined -/// versus an "a" character. Having this bit turned on would tell -/// the keyboard driver to use the appropriate shifted state or not. -/// -#define EFI_AFFECTED_BY_CAPS_LOCK 0x0002 - -/// -/// Similar to the case of CAPS lock, if this bit is active, the key -/// is affected by the num lock being turned on. -/// -#define EFI_AFFECTED_BY_NUM_LOCK 0x0004 - -typedef struct { - UINT16 LayoutLength; - EFI_GUID Guid; - UINT32 LayoutDescriptorStringOffset; - UINT8 DescriptorCount; - // EFI_KEY_DESCRIPTOR Descriptors[]; -} EFI_HII_KEYBOARD_LAYOUT; - -typedef struct { - EFI_HII_PACKAGE_HEADER Header; - UINT16 LayoutCount; - // EFI_HII_KEYBOARD_LAYOUT Layout[]; -} EFI_HII_KEYBOARD_PACKAGE_HDR; - -// -// Modifier values -// -#define EFI_NULL_MODIFIER 0x0000 -#define EFI_LEFT_CONTROL_MODIFIER 0x0001 -#define EFI_RIGHT_CONTROL_MODIFIER 0x0002 -#define EFI_LEFT_ALT_MODIFIER 0x0003 -#define EFI_RIGHT_ALT_MODIFIER 0x0004 -#define EFI_ALT_GR_MODIFIER 0x0005 -#define EFI_INSERT_MODIFIER 0x0006 -#define EFI_DELETE_MODIFIER 0x0007 -#define EFI_PAGE_DOWN_MODIFIER 0x0008 -#define EFI_PAGE_UP_MODIFIER 0x0009 -#define EFI_HOME_MODIFIER 0x000A -#define EFI_END_MODIFIER 0x000B -#define EFI_LEFT_SHIFT_MODIFIER 0x000C -#define EFI_RIGHT_SHIFT_MODIFIER 0x000D -#define EFI_CAPS_LOCK_MODIFIER 0x000E -#define EFI_NUM_LOCK_MODIFIER 0x000F -#define EFI_LEFT_ARROW_MODIFIER 0x0010 -#define EFI_RIGHT_ARROW_MODIFIER 0x0011 -#define EFI_DOWN_ARROW_MODIFIER 0x0012 -#define EFI_UP_ARROW_MODIFIER 0x0013 -#define EFI_NS_KEY_MODIFIER 0x0014 -#define EFI_NS_KEY_DEPENDENCY_MODIFIER 0x0015 -#define EFI_FUNCTION_KEY_ONE_MODIFIER 0x0016 -#define EFI_FUNCTION_KEY_TWO_MODIFIER 0x0017 -#define EFI_FUNCTION_KEY_THREE_MODIFIER 0x0018 -#define EFI_FUNCTION_KEY_FOUR_MODIFIER 0x0019 -#define EFI_FUNCTION_KEY_FIVE_MODIFIER 0x001A -#define EFI_FUNCTION_KEY_SIX_MODIFIER 0x001B -#define EFI_FUNCTION_KEY_SEVEN_MODIFIER 0x001C -#define EFI_FUNCTION_KEY_EIGHT_MODIFIER 0x001D -#define EFI_FUNCTION_KEY_NINE_MODIFIER 0x001E -#define EFI_FUNCTION_KEY_TEN_MODIFIER 0x001F -#define EFI_FUNCTION_KEY_ELEVEN_MODIFIER 0x0020 -#define EFI_FUNCTION_KEY_TWELVE_MODIFIER 0x0021 - -// -// Keys that have multiple control functions based on modifier -// settings are handled in the keyboard driver implementation. -// For instance, PRINT_KEY might have a modifier held down and -// is still a nonprinting character, but might have an alternate -// control function like SYSREQUEST -// -#define EFI_PRINT_MODIFIER 0x0022 -#define EFI_SYS_REQUEST_MODIFIER 0x0023 -#define EFI_SCROLL_LOCK_MODIFIER 0x0024 -#define EFI_PAUSE_MODIFIER 0x0025 -#define EFI_BREAK_MODIFIER 0x0026 - -#define EFI_LEFT_LOGO_MODIFIER 0x0027 -#define EFI_RIGHT_LOGO_MODIFIER 0x0028 -#define EFI_MENU_MODIFIER 0x0029 - -/// -/// Animation IFR opcode -/// -typedef struct _EFI_IFR_ANIMATION { - /// - /// Standard opcode header, where Header.OpCode is - /// EFI_IFR_ANIMATION_OP. - /// - EFI_IFR_OP_HEADER Header; - /// - /// Animation identifier in the HII database. - /// - EFI_ANIMATION_ID Id; -} EFI_IFR_ANIMATION; - -/// -/// HII animation package header. -/// -typedef struct _EFI_HII_ANIMATION_PACKAGE_HDR { - /// - /// Standard package header, where Header.Type = EFI_HII_PACKAGE_ANIMATIONS. - /// - EFI_HII_PACKAGE_HEADER Header; - /// - /// Offset, relative to this header, of the animation information. If - /// this is zero, then there are no animation sequences in the package. - /// - UINT32 AnimationInfoOffset; -} EFI_HII_ANIMATION_PACKAGE_HDR; - -/// -/// Animation information is encoded as a series of blocks, -/// with each block prefixed by a single byte header EFI_HII_ANIMATION_BLOCK. -/// -typedef struct _EFI_HII_ANIMATION_BLOCK { - UINT8 BlockType; - //UINT8 BlockBody[]; -} EFI_HII_ANIMATION_BLOCK; - -/// -/// Animation block types. -/// -#define EFI_HII_AIBT_END 0x00 -#define EFI_HII_AIBT_OVERLAY_IMAGES 0x10 -#define EFI_HII_AIBT_CLEAR_IMAGES 0x11 -#define EFI_HII_AIBT_RESTORE_SCRN 0x12 -#define EFI_HII_AIBT_OVERLAY_IMAGES_LOOP 0x18 -#define EFI_HII_AIBT_CLEAR_IMAGES_LOOP 0x19 -#define EFI_HII_AIBT_RESTORE_SCRN_LOOP 0x1A -#define EFI_HII_AIBT_DUPLICATE 0x20 -#define EFI_HII_AIBT_SKIP2 0x21 -#define EFI_HII_AIBT_SKIP1 0x22 -#define EFI_HII_AIBT_EXT1 0x30 -#define EFI_HII_AIBT_EXT2 0x31 -#define EFI_HII_AIBT_EXT4 0x32 - -/// -/// Extended block headers used for variable sized animation records -/// which need an explicit length. -/// - -typedef struct _EFI_HII_AIBT_EXT1_BLOCK { - /// - /// Standard animation header, where Header.BlockType = EFI_HII_AIBT_EXT1. - /// - EFI_HII_ANIMATION_BLOCK Header; - /// - /// The block type. - /// - UINT8 BlockType2; - /// - /// Size of the animation block, in bytes, including the animation block header. - /// - UINT8 Length; -} EFI_HII_AIBT_EXT1_BLOCK; - -typedef struct _EFI_HII_AIBT_EXT2_BLOCK { - /// - /// Standard animation header, where Header.BlockType = EFI_HII_AIBT_EXT2. - /// - EFI_HII_ANIMATION_BLOCK Header; - /// - /// The block type - /// - UINT8 BlockType2; - /// - /// Size of the animation block, in bytes, including the animation block header. - /// - UINT16 Length; -} EFI_HII_AIBT_EXT2_BLOCK; - -typedef struct _EFI_HII_AIBT_EXT4_BLOCK { - /// - /// Standard animation header, where Header.BlockType = EFI_HII_AIBT_EXT4. - /// - EFI_HII_ANIMATION_BLOCK Header; - /// - /// The block type - /// - UINT8 BlockType2; - /// - /// Size of the animation block, in bytes, including the animation block header. - /// - UINT32 Length; -} EFI_HII_AIBT_EXT4_BLOCK; - -typedef struct _EFI_HII_ANIMATION_CELL { - /// - /// The X offset from the upper left hand corner of the logical - /// window to position the indexed image. - /// - UINT16 OffsetX; - /// - /// The Y offset from the upper left hand corner of the logical - /// window to position the indexed image. - /// - UINT16 OffsetY; - /// - /// The image to display at the specified offset from the upper left - /// hand corner of the logical window. - /// - EFI_IMAGE_ID ImageId; - /// - /// The number of milliseconds to delay after displaying the indexed - /// image and before continuing on to the next linked image. If value - /// is zero, no delay. - /// - UINT16 Delay; -} EFI_HII_ANIMATION_CELL; - -/// -/// An animation block to describe an animation sequence that does not cycle, and -/// where one image is simply displayed over the previous image. -/// -typedef struct _EFI_HII_AIBT_OVERLAY_IMAGES_BLOCK { - /// - /// This is image that is to be reference by the image protocols, if the - /// animation function is not supported or disabled. This image can - /// be one particular image from the animation sequence (if any one - /// of the animation frames has a complete image) or an alternate - /// image that can be displayed alone. If the value is zero, no image - /// is displayed. - /// - EFI_IMAGE_ID DftImageId; - /// - /// The overall width of the set of images (logical window width). - /// - UINT16 Width; - /// - /// The overall height of the set of images (logical window height). - /// - UINT16 Height; - /// - /// The number of EFI_HII_ANIMATION_CELL contained in the - /// animation sequence. - /// - UINT16 CellCount; - /// - /// An array of CellCount animation cells. - /// - EFI_HII_ANIMATION_CELL AnimationCell[1]; -} EFI_HII_AIBT_OVERLAY_IMAGES_BLOCK; - -/// -/// An animation block to describe an animation sequence that does not cycle, -/// and where the logical window is cleared to the specified color before -/// the next image is displayed. -/// -typedef struct _EFI_HII_AIBT_CLEAR_IMAGES_BLOCK { - /// - /// This is image that is to be reference by the image protocols, if the - /// animation function is not supported or disabled. This image can - /// be one particular image from the animation sequence (if any one - /// of the animation frames has a complete image) or an alternate - /// image that can be displayed alone. If the value is zero, no image - /// is displayed. - /// - EFI_IMAGE_ID DftImageId; - /// - /// The overall width of the set of images (logical window width). - /// - UINT16 Width; - /// - /// The overall height of the set of images (logical window height). - /// - UINT16 Height; - /// - /// The number of EFI_HII_ANIMATION_CELL contained in the - /// animation sequence. - /// - UINT16 CellCount; - /// - /// The color to clear the logical window to before displaying the - /// indexed image. - /// - EFI_HII_RGB_PIXEL BackgndColor; - /// - /// An array of CellCount animation cells. - /// - EFI_HII_ANIMATION_CELL AnimationCell[1]; -} EFI_HII_AIBT_CLEAR_IMAGES_BLOCK; - -/// -/// An animation block to describe an animation sequence that does not cycle, -/// and where the screen is restored to the original state before the next -/// image is displayed. -/// -typedef struct _EFI_HII_AIBT_RESTORE_SCRN_BLOCK { - /// - /// This is image that is to be reference by the image protocols, if the - /// animation function is not supported or disabled. This image can - /// be one particular image from the animation sequence (if any one - /// of the animation frames has a complete image) or an alternate - /// image that can be displayed alone. If the value is zero, no image - /// is displayed. - /// - EFI_IMAGE_ID DftImageId; - /// - /// The overall width of the set of images (logical window width). - /// - UINT16 Width; - /// - /// The overall height of the set of images (logical window height). - /// - UINT16 Height; - /// - /// The number of EFI_HII_ANIMATION_CELL contained in the - /// animation sequence. - /// - UINT16 CellCount; - /// - /// An array of CellCount animation cells. - /// - EFI_HII_ANIMATION_CELL AnimationCell[1]; -} EFI_HII_AIBT_RESTORE_SCRN_BLOCK; - -/// -/// An animation block to describe an animation sequence that continuously cycles, -/// and where one image is simply displayed over the previous image. -/// -typedef EFI_HII_AIBT_OVERLAY_IMAGES_BLOCK EFI_HII_AIBT_OVERLAY_IMAGES_LOOP_BLOCK; - -/// -/// An animation block to describe an animation sequence that continuously cycles, -/// and where the logical window is cleared to the specified color before -/// the next image is displayed. -/// -typedef EFI_HII_AIBT_CLEAR_IMAGES_BLOCK EFI_HII_AIBT_CLEAR_IMAGES_LOOP_BLOCK; - -/// -/// An animation block to describe an animation sequence that continuously cycles, -/// and where the screen is restored to the original state before -/// the next image is displayed. -/// -typedef EFI_HII_AIBT_RESTORE_SCRN_BLOCK EFI_HII_AIBT_RESTORE_SCRN_LOOP_BLOCK; - -/// -/// Assigns a new character value to a previously defined animation sequence. -/// -typedef struct _EFI_HII_AIBT_DUPLICATE_BLOCK { - /// - /// The previously defined animation ID with the exact same - /// animation information. - /// - EFI_ANIMATION_ID AnimationId; -} EFI_HII_AIBT_DUPLICATE_BLOCK; - -/// -/// Skips animation IDs. -/// -typedef struct _EFI_HII_AIBT_SKIP1_BLOCK { - /// - /// The unsigned 8-bit value to add to AnimationIdCurrent. - /// - UINT8 SkipCount; -} EFI_HII_AIBT_SKIP1_BLOCK; - -/// -/// Skips animation IDs. -/// -typedef struct _EFI_HII_AIBT_SKIP2_BLOCK { - /// - /// The unsigned 16-bit value to add to AnimationIdCurrent. - /// - UINT16 SkipCount; -} EFI_HII_AIBT_SKIP2_BLOCK; - -#pragma pack() - - - -/// -/// References to string tokens must use this macro to enable scanning for -/// token usages. -/// -/// -/// STRING_TOKEN is not defined in UEFI specification. But it is placed -/// here for the easy access by C files and VFR source files. -/// -#define STRING_TOKEN(t) t - -#endif diff --git a/MdePkg/Include/Uefi/UefiMultiPhase.h b/MdePkg/Include/Uefi/UefiMultiPhase.h deleted file mode 100644 index 9f1ef3ecb0..0000000000 --- a/MdePkg/Include/Uefi/UefiMultiPhase.h +++ /dev/null @@ -1,231 +0,0 @@ -/** @file - This includes some definitions introduced in UEFI that will be used in both PEI and DXE phases. - -Copyright (c) 2006 - 2015, 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 that 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. - -**/ - -#ifndef __UEFI_MULTIPHASE_H__ -#define __UEFI_MULTIPHASE_H__ - -#include -/// -/// Enumeration of memory types introduced in UEFI. -/// -typedef enum { - /// - /// Not used. - /// - EfiReservedMemoryType, - /// - /// The code portions of a loaded application. - /// (Note that UEFI OS loaders are UEFI applications.) - /// - EfiLoaderCode, - /// - /// The data portions of a loaded application and the default data allocation - /// type used by an application to allocate pool memory. - /// - EfiLoaderData, - /// - /// The code portions of a loaded Boot Services Driver. - /// - EfiBootServicesCode, - /// - /// The data portions of a loaded Boot Serves Driver, and the default data - /// allocation type used by a Boot Services Driver to allocate pool memory. - /// - EfiBootServicesData, - /// - /// The code portions of a loaded Runtime Services Driver. - /// - EfiRuntimeServicesCode, - /// - /// The data portions of a loaded Runtime Services Driver and the default - /// data allocation type used by a Runtime Services Driver to allocate pool memory. - /// - EfiRuntimeServicesData, - /// - /// Free (unallocated) memory. - /// - EfiConventionalMemory, - /// - /// Memory in which errors have been detected. - /// - EfiUnusableMemory, - /// - /// Memory that holds the ACPI tables. - /// - EfiACPIReclaimMemory, - /// - /// Address space reserved for use by the firmware. - /// - EfiACPIMemoryNVS, - /// - /// Used by system firmware to request that a memory-mapped IO region - /// be mapped by the OS to a virtual address so it can be accessed by EFI runtime services. - /// - EfiMemoryMappedIO, - /// - /// System memory-mapped IO region that is used to translate memory - /// cycles to IO cycles by the processor. - /// - EfiMemoryMappedIOPortSpace, - /// - /// Address space reserved by the firmware for code that is part of the processor. - /// - EfiPalCode, - /// - /// A memory region that operates as EfiConventionalMemory, - /// however it happens to also support byte-addressable non-volatility. - /// - EfiPersistentMemory, - EfiMaxMemoryType -} EFI_MEMORY_TYPE; - -/// -/// Enumeration of reset types. -/// -typedef enum { - /// - /// Used to induce a system-wide reset. This sets all circuitry within the - /// system to its initial state. This type of reset is asynchronous to system - /// operation and operates withgout regard to cycle boundaries. EfiColdReset - /// is tantamount to a system power cycle. - /// - EfiResetCold, - /// - /// Used to induce a system-wide initialization. The processors are set to their - /// initial state, and pending cycles are not corrupted. If the system does - /// not support this reset type, then an EfiResetCold must be performed. - /// - EfiResetWarm, - /// - /// Used to induce an entry into a power state equivalent to the ACPI G2/S5 or G3 - /// state. If the system does not support this reset type, then when the system - /// is rebooted, it should exhibit the EfiResetCold attributes. - /// - EfiResetShutdown, - /// - /// Used to induce a system-wide reset. The exact type of the reset is defined by - /// the EFI_GUID that follows the Null-terminated Unicode string passed into - /// ResetData. If the platform does not recognize the EFI_GUID in ResetData the - /// platform must pick a supported reset type to perform. The platform may - /// optionally log the parameters from any non-normal reset that occurs. - /// - EfiResetPlatformSpecific -} EFI_RESET_TYPE; - -/// -/// Data structure that precedes all of the standard EFI table types. -/// -typedef struct { - /// - /// A 64-bit signature that identifies the type of table that follows. - /// Unique signatures have been generated for the EFI System Table, - /// the EFI Boot Services Table, and the EFI Runtime Services Table. - /// - UINT64 Signature; - /// - /// The revision of the EFI Specification to which this table - /// conforms. The upper 16 bits of this field contain the major - /// revision value, and the lower 16 bits contain the minor revision - /// value. The minor revision values are limited to the range of 00..99. - /// - UINT32 Revision; - /// - /// The size, in bytes, of the entire table including the EFI_TABLE_HEADER. - /// - UINT32 HeaderSize; - /// - /// The 32-bit CRC for the entire table. This value is computed by - /// setting this field to 0, and computing the 32-bit CRC for HeaderSize bytes. - /// - UINT32 CRC32; - /// - /// Reserved field that must be set to 0. - /// - UINT32 Reserved; -} EFI_TABLE_HEADER; - -/// -/// Attributes of variable. -/// -#define EFI_VARIABLE_NON_VOLATILE 0x00000001 -#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002 -#define EFI_VARIABLE_RUNTIME_ACCESS 0x00000004 -/// -/// This attribute is identified by the mnemonic 'HR' -/// elsewhere in this specification. -/// -#define EFI_VARIABLE_HARDWARE_ERROR_RECORD 0x00000008 -/// -/// Attributes of Authenticated Variable -/// -#define EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS 0x00000010 -#define EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS 0x00000020 -#define EFI_VARIABLE_APPEND_WRITE 0x00000040 - - -/// -/// AuthInfo is a WIN_CERTIFICATE using the wCertificateType -/// WIN_CERTIFICATE_UEFI_GUID and the CertType -/// EFI_CERT_TYPE_RSA2048_SHA256_GUID. If the attribute specifies -/// authenticated access, then the Data buffer should begin with an -/// authentication descriptor prior to the data payload and DataSize -/// should reflect the the data.and descriptor size. The caller -/// shall digest the Monotonic Count value and the associated data -/// for the variable update using the SHA-256 1-way hash algorithm. -/// The ensuing the 32-byte digest will be signed using the private -/// key associated w/ the public/private 2048-bit RSA key-pair. The -/// WIN_CERTIFICATE shall be used to describe the signature of the -/// Variable data *Data. In addition, the signature will also -/// include the MonotonicCount value to guard against replay attacks. -/// -typedef struct { - /// - /// Included in the signature of - /// AuthInfo.Used to ensure freshness/no - /// replay. Incremented during each - /// "Write" access. - /// - UINT64 MonotonicCount; - /// - /// Provides the authorization for the variable - /// access. It is a signature across the - /// variable data and the Monotonic Count - /// value. Caller uses Private key that is - /// associated with a public key that has been - /// provisioned via the key exchange. - /// - WIN_CERTIFICATE_UEFI_GUID AuthInfo; -} EFI_VARIABLE_AUTHENTICATION; - -/// -/// When the attribute EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS is -/// set, then the Data buffer shall begin with an instance of a complete (and serialized) -/// EFI_VARIABLE_AUTHENTICATION_2 descriptor. The descriptor shall be followed by the new -/// variable value and DataSize shall reflect the combined size of the descriptor and the new -/// variable value. The authentication descriptor is not part of the variable data and is not -/// returned by subsequent calls to GetVariable(). -/// -typedef struct { - /// - /// For the TimeStamp value, components Pad1, Nanosecond, TimeZone, Daylight and - /// Pad2 shall be set to 0. This means that the time shall always be expressed in GMT. - /// - EFI_TIME TimeStamp; - /// - /// Only a CertType of EFI_CERT_TYPE_PKCS7_GUID is accepted. - /// - WIN_CERTIFICATE_UEFI_GUID AuthInfo; - } EFI_VARIABLE_AUTHENTICATION_2; - -#endif diff --git a/MdePkg/Include/Uefi/UefiPxe.h b/MdePkg/Include/Uefi/UefiPxe.h deleted file mode 100644 index 2972ff7e31..0000000000 --- a/MdePkg/Include/Uefi/UefiPxe.h +++ /dev/null @@ -1,1772 +0,0 @@ -/** @file - This header file contains all of the PXE type definitions, - structure prototypes, global variables and constants that - are needed for porting PXE to EFI. - -Copyright (c) 2006 - 2013, 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 that 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: - 32/64-bit PXE specification: - alpha-4, 99-Dec-17. - -**/ - -#ifndef __EFI_PXE_H__ -#define __EFI_PXE_H__ - -#pragma pack(1) - -#define PXE_BUSTYPE(a, b, c, d) \ - ( \ - (((PXE_UINT32) (d) & 0xFF) << 24) | (((PXE_UINT32) (c) & 0xFF) << 16) | (((PXE_UINT32) (b) & 0xFF) << 8) | \ - ((PXE_UINT32) (a) & 0xFF) \ - ) - -/// -/// UNDI ROM ID and devive ID signature. -/// -#define PXE_BUSTYPE_PXE PXE_BUSTYPE ('!', 'P', 'X', 'E') - -/// -/// BUS ROM ID signatures. -/// -#define PXE_BUSTYPE_PCI PXE_BUSTYPE ('P', 'C', 'I', 'R') -#define PXE_BUSTYPE_PC_CARD PXE_BUSTYPE ('P', 'C', 'C', 'R') -#define PXE_BUSTYPE_USB PXE_BUSTYPE ('U', 'S', 'B', 'R') -#define PXE_BUSTYPE_1394 PXE_BUSTYPE ('1', '3', '9', '4') - -#define PXE_SWAP_UINT16(n) ((((PXE_UINT16) (n) & 0x00FF) << 8) | (((PXE_UINT16) (n) & 0xFF00) >> 8)) - -#define PXE_SWAP_UINT32(n) \ - ((((PXE_UINT32)(n) & 0x000000FF) << 24) | \ - (((PXE_UINT32)(n) & 0x0000FF00) << 8) | \ - (((PXE_UINT32)(n) & 0x00FF0000) >> 8) | \ - (((PXE_UINT32)(n) & 0xFF000000) >> 24)) - -#define PXE_SWAP_UINT64(n) \ - ((((PXE_UINT64)(n) & 0x00000000000000FFULL) << 56) | \ - (((PXE_UINT64)(n) & 0x000000000000FF00ULL) << 40) | \ - (((PXE_UINT64)(n) & 0x0000000000FF0000ULL) << 24) | \ - (((PXE_UINT64)(n) & 0x00000000FF000000ULL) << 8) | \ - (((PXE_UINT64)(n) & 0x000000FF00000000ULL) >> 8) | \ - (((PXE_UINT64)(n) & 0x0000FF0000000000ULL) >> 24) | \ - (((PXE_UINT64)(n) & 0x00FF000000000000ULL) >> 40) | \ - (((PXE_UINT64)(n) & 0xFF00000000000000ULL) >> 56)) - - -#define PXE_CPBSIZE_NOT_USED 0 ///< zero -#define PXE_DBSIZE_NOT_USED 0 ///< zero -#define PXE_CPBADDR_NOT_USED (PXE_UINT64) 0 ///< zero -#define PXE_DBADDR_NOT_USED (PXE_UINT64) 0 ///< zero -#define PXE_CONST CONST - -#define PXE_VOLATILE volatile - -typedef VOID PXE_VOID; -typedef UINT8 PXE_UINT8; -typedef UINT16 PXE_UINT16; -typedef UINT32 PXE_UINT32; -typedef UINTN PXE_UINTN; - -/// -/// Typedef unsigned long PXE_UINT64. -/// -typedef UINT64 PXE_UINT64; - -typedef PXE_UINT8 PXE_BOOL; -#define PXE_FALSE 0 ///< zero -#define PXE_TRUE (!PXE_FALSE) - -typedef PXE_UINT16 PXE_OPCODE; - -/// -/// Return UNDI operational state. -/// -#define PXE_OPCODE_GET_STATE 0x0000 - -/// -/// Change UNDI operational state from Stopped to Started. -/// -#define PXE_OPCODE_START 0x0001 - -/// -/// Change UNDI operational state from Started to Stopped. -/// -#define PXE_OPCODE_STOP 0x0002 - -/// -/// Get UNDI initialization information. -/// -#define PXE_OPCODE_GET_INIT_INFO 0x0003 - -/// -/// Get NIC configuration information. -/// -#define PXE_OPCODE_GET_CONFIG_INFO 0x0004 - -/// -/// Changed UNDI operational state from Started to Initialized. -/// -#define PXE_OPCODE_INITIALIZE 0x0005 - -/// -/// Re-initialize the NIC H/W. -/// -#define PXE_OPCODE_RESET 0x0006 - -/// -/// Change the UNDI operational state from Initialized to Started. -/// -#define PXE_OPCODE_SHUTDOWN 0x0007 - -/// -/// Read & change state of external interrupt enables. -/// -#define PXE_OPCODE_INTERRUPT_ENABLES 0x0008 - -/// -/// Read & change state of packet receive filters. -/// -#define PXE_OPCODE_RECEIVE_FILTERS 0x0009 - -/// -/// Read & change station MAC address. -/// -#define PXE_OPCODE_STATION_ADDRESS 0x000A - -/// -/// Read traffic statistics. -/// -#define PXE_OPCODE_STATISTICS 0x000B - -/// -/// Convert multicast IP address to multicast MAC address. -/// -#define PXE_OPCODE_MCAST_IP_TO_MAC 0x000C - -/// -/// Read or change non-volatile storage on the NIC. -/// -#define PXE_OPCODE_NVDATA 0x000D - -/// -/// Get & clear interrupt status. -/// -#define PXE_OPCODE_GET_STATUS 0x000E - -/// -/// Fill media header in packet for transmit. -/// -#define PXE_OPCODE_FILL_HEADER 0x000F - -/// -/// Transmit packet(s). -/// -#define PXE_OPCODE_TRANSMIT 0x0010 - -/// -/// Receive packet. -/// -#define PXE_OPCODE_RECEIVE 0x0011 - -/// -/// Last valid PXE UNDI OpCode number. -/// -#define PXE_OPCODE_LAST_VALID 0x0011 - -typedef PXE_UINT16 PXE_OPFLAGS; - -#define PXE_OPFLAGS_NOT_USED 0x0000 - -// -// ////////////////////////////////////// -// UNDI Get State -// -// No OpFlags - -//////////////////////////////////////// -// UNDI Start -// -// No OpFlags - -//////////////////////////////////////// -// UNDI Stop -// -// No OpFlags - -//////////////////////////////////////// -// UNDI Get Init Info -// -// No Opflags - -//////////////////////////////////////// -// UNDI Get Config Info -// -// No Opflags - -/// -/// UNDI Initialize -/// -#define PXE_OPFLAGS_INITIALIZE_CABLE_DETECT_MASK 0x0001 -#define PXE_OPFLAGS_INITIALIZE_DETECT_CABLE 0x0000 -#define PXE_OPFLAGS_INITIALIZE_DO_NOT_DETECT_CABLE 0x0001 - -/// -/// -/// UNDI Reset -/// -#define PXE_OPFLAGS_RESET_DISABLE_INTERRUPTS 0x0001 -#define PXE_OPFLAGS_RESET_DISABLE_FILTERS 0x0002 - -/// -/// UNDI Shutdown. -/// -/// No OpFlags. - -/// -/// UNDI Interrupt Enables. -/// -/// -/// Select whether to enable or disable external interrupt signals. -/// Setting both enable and disable will return PXE_STATCODE_INVALID_OPFLAGS. -/// -#define PXE_OPFLAGS_INTERRUPT_OPMASK 0xC000 -#define PXE_OPFLAGS_INTERRUPT_ENABLE 0x8000 -#define PXE_OPFLAGS_INTERRUPT_DISABLE 0x4000 -#define PXE_OPFLAGS_INTERRUPT_READ 0x0000 - -/// -/// Enable receive interrupts. An external interrupt will be generated -/// after a complete non-error packet has been received. -/// -#define PXE_OPFLAGS_INTERRUPT_RECEIVE 0x0001 - -/// -/// Enable transmit interrupts. An external interrupt will be generated -/// after a complete non-error packet has been transmitted. -/// -#define PXE_OPFLAGS_INTERRUPT_TRANSMIT 0x0002 - -/// -/// Enable command interrupts. An external interrupt will be generated -/// when command execution stops. -/// -#define PXE_OPFLAGS_INTERRUPT_COMMAND 0x0004 - -/// -/// Generate software interrupt. Setting this bit generates an external -/// interrupt, if it is supported by the hardware. -/// -#define PXE_OPFLAGS_INTERRUPT_SOFTWARE 0x0008 - -/// -/// UNDI Receive Filters. -/// -/// -/// Select whether to enable or disable receive filters. -/// Setting both enable and disable will return PXE_STATCODE_INVALID_OPCODE. -/// -#define PXE_OPFLAGS_RECEIVE_FILTER_OPMASK 0xC000 -#define PXE_OPFLAGS_RECEIVE_FILTER_ENABLE 0x8000 -#define PXE_OPFLAGS_RECEIVE_FILTER_DISABLE 0x4000 -#define PXE_OPFLAGS_RECEIVE_FILTER_READ 0x0000 - -/// -/// To reset the contents of the multicast MAC address filter list, -/// set this OpFlag: -/// -#define PXE_OPFLAGS_RECEIVE_FILTER_RESET_MCAST_LIST 0x2000 - -/// -/// Enable unicast packet receiving. Packets sent to the current station -/// MAC address will be received. -/// -#define PXE_OPFLAGS_RECEIVE_FILTER_UNICAST 0x0001 - -/// -/// Enable broadcast packet receiving. Packets sent to the broadcast -/// MAC address will be received. -/// -#define PXE_OPFLAGS_RECEIVE_FILTER_BROADCAST 0x0002 - -/// -/// Enable filtered multicast packet receiving. Packets sent to any -/// of the multicast MAC addresses in the multicast MAC address filter -/// list will be received. If the filter list is empty, no multicast -/// -#define PXE_OPFLAGS_RECEIVE_FILTER_FILTERED_MULTICAST 0x0004 - -/// -/// Enable promiscuous packet receiving. All packets will be received. -/// -#define PXE_OPFLAGS_RECEIVE_FILTER_PROMISCUOUS 0x0008 - -/// -/// Enable promiscuous multicast packet receiving. All multicast -/// packets will be received. -/// -#define PXE_OPFLAGS_RECEIVE_FILTER_ALL_MULTICAST 0x0010 - -/// -/// UNDI Station Address. -/// -#define PXE_OPFLAGS_STATION_ADDRESS_READ 0x0000 -#define PXE_OPFLAGS_STATION_ADDRESS_WRITE 0x0000 -#define PXE_OPFLAGS_STATION_ADDRESS_RESET 0x0001 - -/// -/// UNDI Statistics. -/// -#define PXE_OPFLAGS_STATISTICS_READ 0x0000 -#define PXE_OPFLAGS_STATISTICS_RESET 0x0001 - -/// -/// UNDI MCast IP to MAC. -/// -/// -/// Identify the type of IP address in the CPB. -/// -#define PXE_OPFLAGS_MCAST_IP_TO_MAC_OPMASK 0x0003 -#define PXE_OPFLAGS_MCAST_IPV4_TO_MAC 0x0000 -#define PXE_OPFLAGS_MCAST_IPV6_TO_MAC 0x0001 - -/// -/// UNDI NvData. -/// -/// -/// Select the type of non-volatile data operation. -/// -#define PXE_OPFLAGS_NVDATA_OPMASK 0x0001 -#define PXE_OPFLAGS_NVDATA_READ 0x0000 -#define PXE_OPFLAGS_NVDATA_WRITE 0x0001 - -/// -/// UNDI Get Status. -/// -/// -/// Return current interrupt status. This will also clear any interrupts -/// that are currently set. This can be used in a polling routine. The -/// interrupt flags are still set and cleared even when the interrupts -/// are disabled. -/// -#define PXE_OPFLAGS_GET_INTERRUPT_STATUS 0x0001 - -/// -/// Return list of transmitted buffers for recycling. Transmit buffers -/// must not be changed or unallocated until they have recycled. After -/// issuing a transmit command, wait for a transmit complete interrupt. -/// When a transmit complete interrupt is received, read the transmitted -/// buffers. Do not plan on getting one buffer per interrupt. Some -/// NICs and UNDIs may transmit multiple buffers per interrupt. -/// -#define PXE_OPFLAGS_GET_TRANSMITTED_BUFFERS 0x0002 - -/// -/// Return current media status. -/// -#define PXE_OPFLAGS_GET_MEDIA_STATUS 0x0004 - -/// -/// UNDI Fill Header. -/// -#define PXE_OPFLAGS_FILL_HEADER_OPMASK 0x0001 -#define PXE_OPFLAGS_FILL_HEADER_FRAGMENTED 0x0001 -#define PXE_OPFLAGS_FILL_HEADER_WHOLE 0x0000 - -/// -/// UNDI Transmit. -/// -/// -/// S/W UNDI only. Return after the packet has been transmitted. A -/// transmit complete interrupt will still be generated and the transmit -/// buffer will have to be recycled. -/// -#define PXE_OPFLAGS_SWUNDI_TRANSMIT_OPMASK 0x0001 -#define PXE_OPFLAGS_TRANSMIT_BLOCK 0x0001 -#define PXE_OPFLAGS_TRANSMIT_DONT_BLOCK 0x0000 - -#define PXE_OPFLAGS_TRANSMIT_OPMASK 0x0002 -#define PXE_OPFLAGS_TRANSMIT_FRAGMENTED 0x0002 -#define PXE_OPFLAGS_TRANSMIT_WHOLE 0x0000 - -/// -/// UNDI Receive. -/// -/// No OpFlags. -/// - -/// -/// PXE STATFLAGS. -/// -typedef PXE_UINT16 PXE_STATFLAGS; - -#define PXE_STATFLAGS_INITIALIZE 0x0000 - -/// -/// Common StatFlags that can be returned by all commands. -/// -/// -/// The COMMAND_COMPLETE and COMMAND_FAILED status flags must be -/// implemented by all UNDIs. COMMAND_QUEUED is only needed by UNDIs -/// that support command queuing. -/// -#define PXE_STATFLAGS_STATUS_MASK 0xC000 -#define PXE_STATFLAGS_COMMAND_COMPLETE 0xC000 -#define PXE_STATFLAGS_COMMAND_FAILED 0x8000 -#define PXE_STATFLAGS_COMMAND_QUEUED 0x4000 - -/// -/// UNDI Get State. -/// -#define PXE_STATFLAGS_GET_STATE_MASK 0x0003 -#define PXE_STATFLAGS_GET_STATE_INITIALIZED 0x0002 -#define PXE_STATFLAGS_GET_STATE_STARTED 0x0001 -#define PXE_STATFLAGS_GET_STATE_STOPPED 0x0000 - -/// -/// UNDI Start. -/// -/// No additional StatFlags. -/// - -/// -/// UNDI Get Init Info. -/// -#define PXE_STATFLAGS_CABLE_DETECT_MASK 0x0001 -#define PXE_STATFLAGS_CABLE_DETECT_NOT_SUPPORTED 0x0000 -#define PXE_STATFLAGS_CABLE_DETECT_SUPPORTED 0x0001 - -#define PXE_STATFLAGS_GET_STATUS_NO_MEDIA_MASK 0x0002 -#define PXE_STATFLAGS_GET_STATUS_NO_MEDIA_NOT_SUPPORTED 0x0000 -#define PXE_STATFLAGS_GET_STATUS_NO_MEDIA_SUPPORTED 0x0002 - -/// -/// UNDI Initialize. -/// -#define PXE_STATFLAGS_INITIALIZED_NO_MEDIA 0x0001 - -/// -/// UNDI Reset. -/// -#define PXE_STATFLAGS_RESET_NO_MEDIA 0x0001 - -/// -/// UNDI Shutdown. -/// -/// No additional StatFlags. - -/// -/// UNDI Interrupt Enables. -/// -/// -/// If set, receive interrupts are enabled. -/// -#define PXE_STATFLAGS_INTERRUPT_RECEIVE 0x0001 - -/// -/// If set, transmit interrupts are enabled. -/// -#define PXE_STATFLAGS_INTERRUPT_TRANSMIT 0x0002 - -/// -/// If set, command interrupts are enabled. -/// -#define PXE_STATFLAGS_INTERRUPT_COMMAND 0x0004 - -/// -/// UNDI Receive Filters. -/// - -/// -/// If set, unicast packets will be received. -/// -#define PXE_STATFLAGS_RECEIVE_FILTER_UNICAST 0x0001 - -/// -/// If set, broadcast packets will be received. -/// -#define PXE_STATFLAGS_RECEIVE_FILTER_BROADCAST 0x0002 - -/// -/// If set, multicast packets that match up with the multicast address -/// filter list will be received. -/// -#define PXE_STATFLAGS_RECEIVE_FILTER_FILTERED_MULTICAST 0x0004 - -/// -/// If set, all packets will be received. -/// -#define PXE_STATFLAGS_RECEIVE_FILTER_PROMISCUOUS 0x0008 - -/// -/// If set, all multicast packets will be received. -/// -#define PXE_STATFLAGS_RECEIVE_FILTER_ALL_MULTICAST 0x0010 - -/// -/// UNDI Station Address. -/// -/// No additional StatFlags. -/// - -/// -/// UNDI Statistics. -/// -/// No additional StatFlags. -/// - -/// -//// UNDI MCast IP to MAC. -//// -//// No additional StatFlags. - -/// -/// UNDI NvData. -/// -/// No additional StatFlags. -/// - -/// -/// UNDI Get Status. -/// - -/// -/// Use to determine if an interrupt has occurred. -/// -#define PXE_STATFLAGS_GET_STATUS_INTERRUPT_MASK 0x000F -#define PXE_STATFLAGS_GET_STATUS_NO_INTERRUPTS 0x0000 - -/// -/// If set, at least one receive interrupt occurred. -/// -#define PXE_STATFLAGS_GET_STATUS_RECEIVE 0x0001 - -/// -/// If set, at least one transmit interrupt occurred. -/// -#define PXE_STATFLAGS_GET_STATUS_TRANSMIT 0x0002 - -/// -/// If set, at least one command interrupt occurred. -/// -#define PXE_STATFLAGS_GET_STATUS_COMMAND 0x0004 - -/// -/// If set, at least one software interrupt occurred. -/// -#define PXE_STATFLAGS_GET_STATUS_SOFTWARE 0x0008 - -/// -/// This flag is set if the transmitted buffer queue is empty. This flag -/// will be set if all transmitted buffer addresses get written into the DB. -/// -#define PXE_STATFLAGS_GET_STATUS_TXBUF_QUEUE_EMPTY 0x0010 - -/// -/// This flag is set if no transmitted buffer addresses were written -/// into the DB. (This could be because DBsize was too small.) -/// -#define PXE_STATFLAGS_GET_STATUS_NO_TXBUFS_WRITTEN 0x0020 - -/// -/// This flag is set if there is no media detected. -/// -#define PXE_STATFLAGS_GET_STATUS_NO_MEDIA 0x0040 - -/// -/// UNDI Fill Header. -/// -/// No additional StatFlags. -/// - -/// -/// UNDI Transmit. -/// -/// No additional StatFlags. - -/// -/// UNDI Receive -///. - -/// -/// No additional StatFlags. -/// -typedef PXE_UINT16 PXE_STATCODE; - -#define PXE_STATCODE_INITIALIZE 0x0000 - -/// -/// Common StatCodes returned by all UNDI commands, UNDI protocol functions -/// and BC protocol functions. -/// -#define PXE_STATCODE_SUCCESS 0x0000 - -#define PXE_STATCODE_INVALID_CDB 0x0001 -#define PXE_STATCODE_INVALID_CPB 0x0002 -#define PXE_STATCODE_BUSY 0x0003 -#define PXE_STATCODE_QUEUE_FULL 0x0004 -#define PXE_STATCODE_ALREADY_STARTED 0x0005 -#define PXE_STATCODE_NOT_STARTED 0x0006 -#define PXE_STATCODE_NOT_SHUTDOWN 0x0007 -#define PXE_STATCODE_ALREADY_INITIALIZED 0x0008 -#define PXE_STATCODE_NOT_INITIALIZED 0x0009 -#define PXE_STATCODE_DEVICE_FAILURE 0x000A -#define PXE_STATCODE_NVDATA_FAILURE 0x000B -#define PXE_STATCODE_UNSUPPORTED 0x000C -#define PXE_STATCODE_BUFFER_FULL 0x000D -#define PXE_STATCODE_INVALID_PARAMETER 0x000E -#define PXE_STATCODE_INVALID_UNDI 0x000F -#define PXE_STATCODE_IPV4_NOT_SUPPORTED 0x0010 -#define PXE_STATCODE_IPV6_NOT_SUPPORTED 0x0011 -#define PXE_STATCODE_NOT_ENOUGH_MEMORY 0x0012 -#define PXE_STATCODE_NO_DATA 0x0013 - -typedef PXE_UINT16 PXE_IFNUM; - -/// -/// This interface number must be passed to the S/W UNDI Start command. -/// -#define PXE_IFNUM_START 0x0000 - -/// -/// This interface number is returned by the S/W UNDI Get State and -/// Start commands if information in the CDB, CPB or DB is invalid. -/// -#define PXE_IFNUM_INVALID 0x0000 - -typedef PXE_UINT16 PXE_CONTROL; - -/// -/// Setting this flag directs the UNDI to queue this command for later -/// execution if the UNDI is busy and it supports command queuing. -/// If queuing is not supported, a PXE_STATCODE_INVALID_CONTROL error -/// is returned. If the queue is full, a PXE_STATCODE_CDB_QUEUE_FULL -/// error is returned. -/// -#define PXE_CONTROL_QUEUE_IF_BUSY 0x0002 - -/// -/// These two bit values are used to determine if there are more UNDI -/// CDB structures following this one. If the link bit is set, there -/// must be a CDB structure following this one. Execution will start -/// on the next CDB structure as soon as this one completes successfully. -/// If an error is generated by this command, execution will stop. -/// -#define PXE_CONTROL_LINK 0x0001 -#define PXE_CONTROL_LAST_CDB_IN_LIST 0x0000 - -typedef PXE_UINT8 PXE_FRAME_TYPE; - -#define PXE_FRAME_TYPE_NONE 0x00 -#define PXE_FRAME_TYPE_UNICAST 0x01 -#define PXE_FRAME_TYPE_BROADCAST 0x02 -#define PXE_FRAME_TYPE_FILTERED_MULTICAST 0x03 -#define PXE_FRAME_TYPE_PROMISCUOUS 0x04 -#define PXE_FRAME_TYPE_PROMISCUOUS_MULTICAST 0x05 - -#define PXE_FRAME_TYPE_MULTICAST PXE_FRAME_TYPE_FILTERED_MULTICAST - -typedef PXE_UINT32 PXE_IPV4; - -typedef PXE_UINT32 PXE_IPV6[4]; -#define PXE_MAC_LENGTH 32 - -typedef PXE_UINT8 PXE_MAC_ADDR[PXE_MAC_LENGTH]; - -typedef PXE_UINT8 PXE_IFTYPE; -typedef UINT16 PXE_MEDIA_PROTOCOL; - -/// -/// This information is from the ARP section of RFC 1700. -/// -/// 1 Ethernet (10Mb) [JBP] -/// 2 Experimental Ethernet (3Mb) [JBP] -/// 3 Amateur Radio AX.25 [PXK] -/// 4 Proteon ProNET Token Ring [JBP] -/// 5 Chaos [GXP] -/// 6 IEEE 802 Networks [JBP] -/// 7 ARCNET [JBP] -/// 8 Hyperchannel [JBP] -/// 9 Lanstar [TU] -/// 10 Autonet Short Address [MXB1] -/// 11 LocalTalk [JKR1] -/// 12 LocalNet (IBM* PCNet or SYTEK* LocalNET) [JXM] -/// 13 Ultra link [RXD2] -/// 14 SMDS [GXC1] -/// 15 Frame Relay [AGM] -/// 16 Asynchronous Transmission Mode (ATM) [JXB2] -/// 17 HDLC [JBP] -/// 18 Fibre Channel [Yakov Rekhter] -/// 19 Asynchronous Transmission Mode (ATM) [Mark Laubach] -/// 20 Serial Line [JBP] -/// 21 Asynchronous Transmission Mode (ATM) [MXB1] -/// -/// * Other names and brands may be claimed as the property of others. -/// -#define PXE_IFTYPE_ETHERNET 0x01 -#define PXE_IFTYPE_TOKENRING 0x04 -#define PXE_IFTYPE_FIBRE_CHANNEL 0x12 - -typedef struct s_pxe_hw_undi { - PXE_UINT32 Signature; ///< PXE_ROMID_SIGNATURE. - PXE_UINT8 Len; ///< sizeof(PXE_HW_UNDI). - PXE_UINT8 Fudge; ///< makes 8-bit cksum equal zero. - PXE_UINT8 Rev; ///< PXE_ROMID_REV. - PXE_UINT8 IFcnt; ///< physical connector count lower byte. - PXE_UINT8 MajorVer; ///< PXE_ROMID_MAJORVER. - PXE_UINT8 MinorVer; ///< PXE_ROMID_MINORVER. - PXE_UINT8 IFcntExt; ///< physical connector count upper byte. - PXE_UINT8 reserved; ///< zero, not used. - PXE_UINT32 Implementation; ///< implementation flags. - ///< reserved ///< vendor use. - ///< UINT32 Status; ///< status port. - ///< UINT32 Command; ///< command port. - ///< UINT64 CDBaddr; ///< CDB address port. - ///< -} PXE_HW_UNDI; - -/// -/// Status port bit definitions. -/// - -/// -/// UNDI operation state. -/// -#define PXE_HWSTAT_STATE_MASK 0xC0000000 -#define PXE_HWSTAT_BUSY 0xC0000000 -#define PXE_HWSTAT_INITIALIZED 0x80000000 -#define PXE_HWSTAT_STARTED 0x40000000 -#define PXE_HWSTAT_STOPPED 0x00000000 - -/// -/// If set, last command failed. -/// -#define PXE_HWSTAT_COMMAND_FAILED 0x20000000 - -/// -/// If set, identifies enabled receive filters. -/// -#define PXE_HWSTAT_PROMISCUOUS_MULTICAST_RX_ENABLED 0x00001000 -#define PXE_HWSTAT_PROMISCUOUS_RX_ENABLED 0x00000800 -#define PXE_HWSTAT_BROADCAST_RX_ENABLED 0x00000400 -#define PXE_HWSTAT_MULTICAST_RX_ENABLED 0x00000200 -#define PXE_HWSTAT_UNICAST_RX_ENABLED 0x00000100 - -/// -/// If set, identifies enabled external interrupts. -/// -#define PXE_HWSTAT_SOFTWARE_INT_ENABLED 0x00000080 -#define PXE_HWSTAT_TX_COMPLETE_INT_ENABLED 0x00000040 -#define PXE_HWSTAT_PACKET_RX_INT_ENABLED 0x00000020 -#define PXE_HWSTAT_CMD_COMPLETE_INT_ENABLED 0x00000010 - -/// -/// If set, identifies pending interrupts. -/// -#define PXE_HWSTAT_SOFTWARE_INT_PENDING 0x00000008 -#define PXE_HWSTAT_TX_COMPLETE_INT_PENDING 0x00000004 -#define PXE_HWSTAT_PACKET_RX_INT_PENDING 0x00000002 -#define PXE_HWSTAT_CMD_COMPLETE_INT_PENDING 0x00000001 - -/// -/// Command port definitions. -/// - -/// -/// If set, CDB identified in CDBaddr port is given to UNDI. -/// If not set, other bits in this word will be processed. -/// -#define PXE_HWCMD_ISSUE_COMMAND 0x80000000 -#define PXE_HWCMD_INTS_AND_FILTS 0x00000000 - -/// -/// Use these to enable/disable receive filters. -/// -#define PXE_HWCMD_PROMISCUOUS_MULTICAST_RX_ENABLE 0x00001000 -#define PXE_HWCMD_PROMISCUOUS_RX_ENABLE 0x00000800 -#define PXE_HWCMD_BROADCAST_RX_ENABLE 0x00000400 -#define PXE_HWCMD_MULTICAST_RX_ENABLE 0x00000200 -#define PXE_HWCMD_UNICAST_RX_ENABLE 0x00000100 - -/// -/// Use these to enable/disable external interrupts. -/// -#define PXE_HWCMD_SOFTWARE_INT_ENABLE 0x00000080 -#define PXE_HWCMD_TX_COMPLETE_INT_ENABLE 0x00000040 -#define PXE_HWCMD_PACKET_RX_INT_ENABLE 0x00000020 -#define PXE_HWCMD_CMD_COMPLETE_INT_ENABLE 0x00000010 - -/// -/// Use these to clear pending external interrupts. -/// -#define PXE_HWCMD_CLEAR_SOFTWARE_INT 0x00000008 -#define PXE_HWCMD_CLEAR_TX_COMPLETE_INT 0x00000004 -#define PXE_HWCMD_CLEAR_PACKET_RX_INT 0x00000002 -#define PXE_HWCMD_CLEAR_CMD_COMPLETE_INT 0x00000001 - -typedef struct s_pxe_sw_undi { - PXE_UINT32 Signature; ///< PXE_ROMID_SIGNATURE. - PXE_UINT8 Len; ///< sizeof(PXE_SW_UNDI). - PXE_UINT8 Fudge; ///< makes 8-bit cksum zero. - PXE_UINT8 Rev; ///< PXE_ROMID_REV. - PXE_UINT8 IFcnt; ///< physical connector count lower byte. - PXE_UINT8 MajorVer; ///< PXE_ROMID_MAJORVER. - PXE_UINT8 MinorVer; ///< PXE_ROMID_MINORVER. - PXE_UINT8 IFcntExt; ///< physical connector count upper byte. - PXE_UINT8 reserved1; ///< zero, not used. - PXE_UINT32 Implementation; ///< Implementation flags. - PXE_UINT64 EntryPoint; ///< API entry point. - PXE_UINT8 reserved2[3]; ///< zero, not used. - PXE_UINT8 BusCnt; ///< number of bustypes supported. - PXE_UINT32 BusType[1]; ///< list of supported bustypes. -} PXE_SW_UNDI; - -typedef union u_pxe_undi { - PXE_HW_UNDI hw; - PXE_SW_UNDI sw; -} PXE_UNDI; - -/// -/// Signature of !PXE structure. -/// -#define PXE_ROMID_SIGNATURE PXE_BUSTYPE ('!', 'P', 'X', 'E') - -/// -/// !PXE structure format revision -///. -#define PXE_ROMID_REV 0x02 - -/// -/// UNDI command interface revision. These are the values that get sent -/// in option 94 (Client Network Interface Identifier) in the DHCP Discover -/// and PXE Boot Server Request packets. -/// -#define PXE_ROMID_MAJORVER 0x03 -#define PXE_ROMID_MINORVER 0x01 - -/// -/// Implementation flags. -/// -#define PXE_ROMID_IMP_HW_UNDI 0x80000000 -#define PXE_ROMID_IMP_SW_VIRT_ADDR 0x40000000 -#define PXE_ROMID_IMP_64BIT_DEVICE 0x00010000 -#define PXE_ROMID_IMP_FRAG_SUPPORTED 0x00008000 -#define PXE_ROMID_IMP_CMD_LINK_SUPPORTED 0x00004000 -#define PXE_ROMID_IMP_CMD_QUEUE_SUPPORTED 0x00002000 -#define PXE_ROMID_IMP_MULTI_FRAME_SUPPORTED 0x00001000 -#define PXE_ROMID_IMP_NVDATA_SUPPORT_MASK 0x00000C00 -#define PXE_ROMID_IMP_NVDATA_BULK_WRITABLE 0x00000C00 -#define PXE_ROMID_IMP_NVDATA_SPARSE_WRITABLE 0x00000800 -#define PXE_ROMID_IMP_NVDATA_READ_ONLY 0x00000400 -#define PXE_ROMID_IMP_NVDATA_NOT_AVAILABLE 0x00000000 -#define PXE_ROMID_IMP_STATISTICS_SUPPORTED 0x00000200 -#define PXE_ROMID_IMP_STATION_ADDR_SETTABLE 0x00000100 -#define PXE_ROMID_IMP_PROMISCUOUS_MULTICAST_RX_SUPPORTED 0x00000080 -#define PXE_ROMID_IMP_PROMISCUOUS_RX_SUPPORTED 0x00000040 -#define PXE_ROMID_IMP_BROADCAST_RX_SUPPORTED 0x00000020 -#define PXE_ROMID_IMP_FILTERED_MULTICAST_RX_SUPPORTED 0x00000010 -#define PXE_ROMID_IMP_SOFTWARE_INT_SUPPORTED 0x00000008 -#define PXE_ROMID_IMP_TX_COMPLETE_INT_SUPPORTED 0x00000004 -#define PXE_ROMID_IMP_PACKET_RX_INT_SUPPORTED 0x00000002 -#define PXE_ROMID_IMP_CMD_COMPLETE_INT_SUPPORTED 0x00000001 - -typedef struct s_pxe_cdb { - PXE_OPCODE OpCode; - PXE_OPFLAGS OpFlags; - PXE_UINT16 CPBsize; - PXE_UINT16 DBsize; - PXE_UINT64 CPBaddr; - PXE_UINT64 DBaddr; - PXE_STATCODE StatCode; - PXE_STATFLAGS StatFlags; - PXE_UINT16 IFnum; - PXE_CONTROL Control; -} PXE_CDB; - -typedef union u_pxe_ip_addr { - PXE_IPV6 IPv6; - PXE_IPV4 IPv4; -} PXE_IP_ADDR; - -typedef union pxe_device { - /// - /// PCI and PC Card NICs are both identified using bus, device - /// and function numbers. For PC Card, this may require PC - /// Card services to be loaded in the BIOS or preboot - /// environment. - /// - struct { - /// - /// See S/W UNDI ROMID structure definition for PCI and - /// PCC BusType definitions. - /// - PXE_UINT32 BusType; - - /// - /// Bus, device & function numbers that locate this device. - /// - PXE_UINT16 Bus; - PXE_UINT8 Device; - PXE_UINT8 Function; - } - PCI, PCC; - -} PXE_DEVICE; - -/// -/// cpb and db definitions -/// -#define MAX_PCI_CONFIG_LEN 64 ///< # of dwords. -#define MAX_EEPROM_LEN 128 ///< # of dwords. -#define MAX_XMIT_BUFFERS 32 ///< recycling Q length for xmit_done. -#define MAX_MCAST_ADDRESS_CNT 8 - -typedef struct s_pxe_cpb_start_30 { - /// - /// PXE_VOID Delay(UINTN microseconds); - /// - /// UNDI will never request a delay smaller than 10 microseconds - /// and will always request delays in increments of 10 microseconds. - /// The Delay() CallBack routine must delay between n and n + 10 - /// microseconds before returning control to the UNDI. - /// - /// This field cannot be set to zero. - /// - UINT64 Delay; - - /// - /// PXE_VOID Block(UINT32 enable); - /// - /// UNDI may need to block multi-threaded/multi-processor access to - /// critical code sections when programming or accessing the network - /// device. To this end, a blocking service is needed by the UNDI. - /// When UNDI needs a block, it will call Block() passing a non-zero - /// value. When UNDI no longer needs a block, it will call Block() - /// with a zero value. When called, if the Block() is already enabled, - /// do not return control to the UNDI until the previous Block() is - /// disabled. - /// - /// This field cannot be set to zero. - /// - UINT64 Block; - - /// - /// PXE_VOID Virt2Phys(UINT64 virtual, UINT64 physical_ptr); - /// - /// UNDI will pass the virtual address of a buffer and the virtual - /// address of a 64-bit physical buffer. Convert the virtual address - /// to a physical address and write the result to the physical address - /// buffer. If virtual and physical addresses are the same, just - /// copy the virtual address to the physical address buffer. - /// - /// This field can be set to zero if virtual and physical addresses - /// are equal. - /// - UINT64 Virt2Phys; - /// - /// PXE_VOID Mem_IO(UINT8 read_write, UINT8 len, UINT64 port, - /// UINT64 buf_addr); - /// - /// UNDI will read or write the device io space using this call back - /// function. It passes the number of bytes as the len parameter and it - /// will be either 1,2,4 or 8. - /// - /// This field can not be set to zero. - /// - UINT64 Mem_IO; -} PXE_CPB_START_30; - -typedef struct s_pxe_cpb_start_31 { - /// - /// PXE_VOID Delay(UINT64 UnqId, UINTN microseconds); - /// - /// UNDI will never request a delay smaller than 10 microseconds - /// and will always request delays in increments of 10 microseconds. - /// The Delay() CallBack routine must delay between n and n + 10 - /// microseconds before returning control to the UNDI. - /// - /// This field cannot be set to zero. - /// - UINT64 Delay; - - /// - /// PXE_VOID Block(UINT64 unq_id, UINT32 enable); - /// - /// UNDI may need to block multi-threaded/multi-processor access to - /// critical code sections when programming or accessing the network - /// device. To this end, a blocking service is needed by the UNDI. - /// When UNDI needs a block, it will call Block() passing a non-zero - /// value. When UNDI no longer needs a block, it will call Block() - /// with a zero value. When called, if the Block() is already enabled, - /// do not return control to the UNDI until the previous Block() is - /// disabled. - /// - /// This field cannot be set to zero. - /// - UINT64 Block; - - /// - /// PXE_VOID Virt2Phys(UINT64 UnqId, UINT64 virtual, UINT64 physical_ptr); - /// - /// UNDI will pass the virtual address of a buffer and the virtual - /// address of a 64-bit physical buffer. Convert the virtual address - /// to a physical address and write the result to the physical address - /// buffer. If virtual and physical addresses are the same, just - /// copy the virtual address to the physical address buffer. - /// - /// This field can be set to zero if virtual and physical addresses - /// are equal. - /// - UINT64 Virt2Phys; - /// - /// PXE_VOID Mem_IO(UINT64 UnqId, UINT8 read_write, UINT8 len, UINT64 port, - /// UINT64 buf_addr); - /// - /// UNDI will read or write the device io space using this call back - /// function. It passes the number of bytes as the len parameter and it - /// will be either 1,2,4 or 8. - /// - /// This field can not be set to zero. - /// - UINT64 Mem_IO; - /// - /// PXE_VOID Map_Mem(UINT64 unq_id, UINT64 virtual_addr, UINT32 size, - /// UINT32 Direction, UINT64 mapped_addr); - /// - /// UNDI will pass the virtual address of a buffer, direction of the data - /// flow from/to the mapped buffer (the constants are defined below) - /// and a place holder (pointer) for the mapped address. - /// This call will Map the given address to a physical DMA address and write - /// the result to the mapped_addr pointer. If there is no need to - /// map the given address to a lower address (i.e. the given address is - /// associated with a physical address that is already compatible to be - /// used with the DMA, it converts the given virtual address to it's - /// physical address and write that in the mapped address pointer. - /// - /// This field can be set to zero if there is no mapping service available. - /// - UINT64 Map_Mem; - - /// - /// PXE_VOID UnMap_Mem(UINT64 unq_id, UINT64 virtual_addr, UINT32 size, - /// UINT32 Direction, UINT64 mapped_addr); - /// - /// UNDI will pass the virtual and mapped addresses of a buffer. - /// This call will un map the given address. - /// - /// This field can be set to zero if there is no unmapping service available. - /// - UINT64 UnMap_Mem; - - /// - /// PXE_VOID Sync_Mem(UINT64 unq_id, UINT64 virtual, - /// UINT32 size, UINT32 Direction, UINT64 mapped_addr); - /// - /// UNDI will pass the virtual and mapped addresses of a buffer. - /// This call will synchronize the contents of both the virtual and mapped. - /// buffers for the given Direction. - /// - /// This field can be set to zero if there is no service available. - /// - UINT64 Sync_Mem; - - /// - /// protocol driver can provide anything for this Unique_ID, UNDI remembers - /// that as just a 64bit value assocaited to the interface specified by - /// the ifnum and gives it back as a parameter to all the call-back routines - /// when calling for that interface! - /// - UINT64 Unique_ID; -} PXE_CPB_START_31; - -#define TO_AND_FROM_DEVICE 0 -#define FROM_DEVICE 1 -#define TO_DEVICE 2 - -#define PXE_DELAY_MILLISECOND 1000 -#define PXE_DELAY_SECOND 1000000 -#define PXE_IO_READ 0 -#define PXE_IO_WRITE 1 -#define PXE_MEM_READ 2 -#define PXE_MEM_WRITE 4 - -typedef struct s_pxe_db_get_init_info { - /// - /// Minimum length of locked memory buffer that must be given to - /// the Initialize command. Giving UNDI more memory will generally - /// give better performance. - /// - /// If MemoryRequired is zero, the UNDI does not need and will not - /// use system memory to receive and transmit packets. - /// - PXE_UINT32 MemoryRequired; - - /// - /// Maximum frame data length for Tx/Rx excluding the media header. - /// - PXE_UINT32 FrameDataLen; - - /// - /// Supported link speeds are in units of mega bits. Common ethernet - /// values are 10, 100 and 1000. Unused LinkSpeeds[] entries are zero - /// filled. - /// - PXE_UINT32 LinkSpeeds[4]; - - /// - /// Number of non-volatile storage items. - /// - PXE_UINT32 NvCount; - - /// - /// Width of non-volatile storage item in bytes. 0, 1, 2 or 4 - /// - PXE_UINT16 NvWidth; - - /// - /// Media header length. This is the typical media header length for - /// this UNDI. This information is needed when allocating receive - /// and transmit buffers. - /// - PXE_UINT16 MediaHeaderLen; - - /// - /// Number of bytes in the NIC hardware (MAC) address. - /// - PXE_UINT16 HWaddrLen; - - /// - /// Maximum number of multicast MAC addresses in the multicast - /// MAC address filter list. - /// - PXE_UINT16 MCastFilterCnt; - - /// - /// Default number and size of transmit and receive buffers that will - /// be allocated by the UNDI. If MemoryRequired is non-zero, this - /// allocation will come out of the memory buffer given to the Initialize - /// command. If MemoryRequired is zero, this allocation will come out of - /// memory on the NIC. - /// - PXE_UINT16 TxBufCnt; - PXE_UINT16 TxBufSize; - PXE_UINT16 RxBufCnt; - PXE_UINT16 RxBufSize; - - /// - /// Hardware interface types defined in the Assigned Numbers RFC - /// and used in DHCP and ARP packets. - /// See the PXE_IFTYPE typedef and PXE_IFTYPE_xxx macros. - /// - PXE_UINT8 IFtype; - - /// - /// Supported duplex. See PXE_DUPLEX_xxxxx #defines below. - /// - PXE_UINT8 SupportedDuplexModes; - - /// - /// Supported loopback options. See PXE_LOOPBACK_xxxxx #defines below. - /// - PXE_UINT8 SupportedLoopBackModes; -} PXE_DB_GET_INIT_INFO; - -#define PXE_MAX_TXRX_UNIT_ETHER 1500 - -#define PXE_HWADDR_LEN_ETHER 0x0006 -#define PXE_MAC_HEADER_LEN_ETHER 0x000E - -#define PXE_DUPLEX_ENABLE_FULL_SUPPORTED 1 -#define PXE_DUPLEX_FORCE_FULL_SUPPORTED 2 - -#define PXE_LOOPBACK_INTERNAL_SUPPORTED 1 -#define PXE_LOOPBACK_EXTERNAL_SUPPORTED 2 - -typedef struct s_pxe_pci_config_info { - /// - /// This is the flag field for the PXE_DB_GET_CONFIG_INFO union. - /// For PCI bus devices, this field is set to PXE_BUSTYPE_PCI. - /// - UINT32 BusType; - - /// - /// This identifies the PCI network device that this UNDI interface. - /// is bound to. - /// - UINT16 Bus; - UINT8 Device; - UINT8 Function; - - /// - /// This is a copy of the PCI configuration space for this - /// network device. - /// - union { - UINT8 Byte[256]; - UINT16 Word[128]; - UINT32 Dword[64]; - } Config; -} PXE_PCI_CONFIG_INFO; - -typedef struct s_pxe_pcc_config_info { - /// - /// This is the flag field for the PXE_DB_GET_CONFIG_INFO union. - /// For PCC bus devices, this field is set to PXE_BUSTYPE_PCC. - /// - PXE_UINT32 BusType; - - /// - /// This identifies the PCC network device that this UNDI interface - /// is bound to. - /// - PXE_UINT16 Bus; - PXE_UINT8 Device; - PXE_UINT8 Function; - - /// - /// This is a copy of the PCC configuration space for this - /// network device. - /// - union { - PXE_UINT8 Byte[256]; - PXE_UINT16 Word[128]; - PXE_UINT32 Dword[64]; - } Config; -} PXE_PCC_CONFIG_INFO; - -typedef union u_pxe_db_get_config_info { - PXE_PCI_CONFIG_INFO pci; - PXE_PCC_CONFIG_INFO pcc; -} PXE_DB_GET_CONFIG_INFO; - -typedef struct s_pxe_cpb_initialize { - /// - /// Address of first (lowest) byte of the memory buffer. This buffer must - /// be in contiguous physical memory and cannot be swapped out. The UNDI - /// will be using this for transmit and receive buffering. - /// - PXE_UINT64 MemoryAddr; - - /// - /// MemoryLength must be greater than or equal to MemoryRequired - /// returned by the Get Init Info command. - /// - PXE_UINT32 MemoryLength; - - /// - /// Desired link speed in Mbit/sec. Common ethernet values are 10, 100 - /// and 1000. Setting a value of zero will auto-detect and/or use the - /// default link speed (operation depends on UNDI/NIC functionality). - /// - PXE_UINT32 LinkSpeed; - - /// - /// Suggested number and size of receive and transmit buffers to - /// allocate. If MemoryAddr and MemoryLength are non-zero, this - /// allocation comes out of the supplied memory buffer. If MemoryAddr - /// and MemoryLength are zero, this allocation comes out of memory - /// on the NIC. - /// - /// If these fields are set to zero, the UNDI will allocate buffer - /// counts and sizes as it sees fit. - /// - PXE_UINT16 TxBufCnt; - PXE_UINT16 TxBufSize; - PXE_UINT16 RxBufCnt; - PXE_UINT16 RxBufSize; - - /// - /// The following configuration parameters are optional and must be zero - /// to use the default values. - /// - PXE_UINT8 DuplexMode; - - PXE_UINT8 LoopBackMode; -} PXE_CPB_INITIALIZE; - -#define PXE_DUPLEX_DEFAULT 0x00 -#define PXE_FORCE_FULL_DUPLEX 0x01 -#define PXE_ENABLE_FULL_DUPLEX 0x02 -#define PXE_FORCE_HALF_DUPLEX 0x04 -#define PXE_DISABLE_FULL_DUPLEX 0x08 - -#define LOOPBACK_NORMAL 0 -#define LOOPBACK_INTERNAL 1 -#define LOOPBACK_EXTERNAL 2 - -typedef struct s_pxe_db_initialize { - /// - /// Actual amount of memory used from the supplied memory buffer. This - /// may be less that the amount of memory suppllied and may be zero if - /// the UNDI and network device do not use external memory buffers. - /// - /// Memory used by the UNDI and network device is allocated from the - /// lowest memory buffer address. - /// - PXE_UINT32 MemoryUsed; - - /// - /// Actual number and size of receive and transmit buffers that were - /// allocated. - /// - PXE_UINT16 TxBufCnt; - PXE_UINT16 TxBufSize; - PXE_UINT16 RxBufCnt; - PXE_UINT16 RxBufSize; -} PXE_DB_INITIALIZE; - -typedef struct s_pxe_cpb_receive_filters { - /// - /// List of multicast MAC addresses. This list, if present, will - /// replace the existing multicast MAC address filter list. - /// - PXE_MAC_ADDR MCastList[MAX_MCAST_ADDRESS_CNT]; -} PXE_CPB_RECEIVE_FILTERS; - -typedef struct s_pxe_db_receive_filters { - /// - /// Filtered multicast MAC address list. - /// - PXE_MAC_ADDR MCastList[MAX_MCAST_ADDRESS_CNT]; -} PXE_DB_RECEIVE_FILTERS; - -typedef struct s_pxe_cpb_station_address { - /// - /// If supplied and supported, the current station MAC address - /// will be changed. - /// - PXE_MAC_ADDR StationAddr; -} PXE_CPB_STATION_ADDRESS; - -typedef struct s_pxe_dpb_station_address { - /// - /// Current station MAC address. - /// - PXE_MAC_ADDR StationAddr; - - /// - /// Station broadcast MAC address. - /// - PXE_MAC_ADDR BroadcastAddr; - - /// - /// Permanent station MAC address. - /// - PXE_MAC_ADDR PermanentAddr; -} PXE_DB_STATION_ADDRESS; - -typedef struct s_pxe_db_statistics { - /// - /// Bit field identifying what statistic data is collected by the - /// UNDI/NIC. - /// If bit 0x00 is set, Data[0x00] is collected. - /// If bit 0x01 is set, Data[0x01] is collected. - /// If bit 0x20 is set, Data[0x20] is collected. - /// If bit 0x21 is set, Data[0x21] is collected. - /// Etc. - /// - PXE_UINT64 Supported; - - /// - /// Statistic data. - /// - PXE_UINT64 Data[64]; -} PXE_DB_STATISTICS; - -/// -/// Total number of frames received. Includes frames with errors and -/// dropped frames. -/// -#define PXE_STATISTICS_RX_TOTAL_FRAMES 0x00 - -/// -/// Number of valid frames received and copied into receive buffers. -/// -#define PXE_STATISTICS_RX_GOOD_FRAMES 0x01 - -/// -/// Number of frames below the minimum length for the media. -/// This would be <64 for ethernet. -/// -#define PXE_STATISTICS_RX_UNDERSIZE_FRAMES 0x02 - -/// -/// Number of frames longer than the maxminum length for the -/// media. This would be >1500 for ethernet. -/// -#define PXE_STATISTICS_RX_OVERSIZE_FRAMES 0x03 - -/// -/// Valid frames that were dropped because receive buffers were full. -/// -#define PXE_STATISTICS_RX_DROPPED_FRAMES 0x04 - -/// -/// Number of valid unicast frames received and not dropped. -/// -#define PXE_STATISTICS_RX_UNICAST_FRAMES 0x05 - -/// -/// Number of valid broadcast frames received and not dropped. -/// -#define PXE_STATISTICS_RX_BROADCAST_FRAMES 0x06 - -/// -/// Number of valid mutlicast frames received and not dropped. -/// -#define PXE_STATISTICS_RX_MULTICAST_FRAMES 0x07 - -/// -/// Number of frames w/ CRC or alignment errors. -/// -#define PXE_STATISTICS_RX_CRC_ERROR_FRAMES 0x08 - -/// -/// Total number of bytes received. Includes frames with errors -/// and dropped frames. -/// -#define PXE_STATISTICS_RX_TOTAL_BYTES 0x09 - -/// -/// Transmit statistics. -/// -#define PXE_STATISTICS_TX_TOTAL_FRAMES 0x0A -#define PXE_STATISTICS_TX_GOOD_FRAMES 0x0B -#define PXE_STATISTICS_TX_UNDERSIZE_FRAMES 0x0C -#define PXE_STATISTICS_TX_OVERSIZE_FRAMES 0x0D -#define PXE_STATISTICS_TX_DROPPED_FRAMES 0x0E -#define PXE_STATISTICS_TX_UNICAST_FRAMES 0x0F -#define PXE_STATISTICS_TX_BROADCAST_FRAMES 0x10 -#define PXE_STATISTICS_TX_MULTICAST_FRAMES 0x11 -#define PXE_STATISTICS_TX_CRC_ERROR_FRAMES 0x12 -#define PXE_STATISTICS_TX_TOTAL_BYTES 0x13 - -/// -/// Number of collisions detection on this subnet. -/// -#define PXE_STATISTICS_COLLISIONS 0x14 - -/// -/// Number of frames destined for unsupported protocol. -/// -#define PXE_STATISTICS_UNSUPPORTED_PROTOCOL 0x15 - -typedef struct s_pxe_cpb_mcast_ip_to_mac { - /// - /// Multicast IP address to be converted to multicast MAC address. - /// - PXE_IP_ADDR IP; -} PXE_CPB_MCAST_IP_TO_MAC; - -typedef struct s_pxe_db_mcast_ip_to_mac { - /// - /// Multicast MAC address. - /// - PXE_MAC_ADDR MAC; -} PXE_DB_MCAST_IP_TO_MAC; - -typedef struct s_pxe_cpb_nvdata_sparse { - /// - /// NvData item list. Only items in this list will be updated. - /// - struct { - /// - /// Non-volatile storage address to be changed. - /// - PXE_UINT32 Addr; - - /// - /// Data item to write into above storage address. - /// - union { - PXE_UINT8 Byte; - PXE_UINT16 Word; - PXE_UINT32 Dword; - } Data; - } Item[MAX_EEPROM_LEN]; -} PXE_CPB_NVDATA_SPARSE; - -/// -/// When using bulk update, the size of the CPB structure must be -/// the same size as the non-volatile NIC storage. -/// -typedef union u_pxe_cpb_nvdata_bulk { - /// - /// Array of byte-wide data items. - /// - PXE_UINT8 Byte[MAX_EEPROM_LEN << 2]; - - /// - /// Array of word-wide data items. - /// - PXE_UINT16 Word[MAX_EEPROM_LEN << 1]; - - /// - /// Array of dword-wide data items. - /// - PXE_UINT32 Dword[MAX_EEPROM_LEN]; -} PXE_CPB_NVDATA_BULK; - -typedef struct s_pxe_db_nvdata { - /// - /// Arrays of data items from non-volatile storage. - /// - union { - /// - /// Array of byte-wide data items. - /// - PXE_UINT8 Byte[MAX_EEPROM_LEN << 2]; - - /// - /// Array of word-wide data items. - /// - PXE_UINT16 Word[MAX_EEPROM_LEN << 1]; - - /// - /// Array of dword-wide data items. - /// - PXE_UINT32 Dword[MAX_EEPROM_LEN]; - } Data; -} PXE_DB_NVDATA; - -typedef struct s_pxe_db_get_status { - /// - /// Length of next receive frame (header + data). If this is zero, - /// there is no next receive frame available. - /// - PXE_UINT32 RxFrameLen; - - /// - /// Reserved, set to zero. - /// - PXE_UINT32 reserved; - - /// - /// Addresses of transmitted buffers that need to be recycled. - /// - PXE_UINT64 TxBuffer[MAX_XMIT_BUFFERS]; -} PXE_DB_GET_STATUS; - -typedef struct s_pxe_cpb_fill_header { - /// - /// Source and destination MAC addresses. These will be copied into - /// the media header without doing byte swapping. - /// - PXE_MAC_ADDR SrcAddr; - PXE_MAC_ADDR DestAddr; - - /// - /// Address of first byte of media header. The first byte of packet data - /// follows the last byte of the media header. - /// - PXE_UINT64 MediaHeader; - - /// - /// Length of packet data in bytes (not including the media header). - /// - PXE_UINT32 PacketLen; - - /// - /// Protocol type. This will be copied into the media header without - /// doing byte swapping. Protocol type numbers can be obtained from - /// the Assigned Numbers RFC 1700. - /// - PXE_UINT16 Protocol; - - /// - /// Length of the media header in bytes. - /// - PXE_UINT16 MediaHeaderLen; -} PXE_CPB_FILL_HEADER; - -#define PXE_PROTOCOL_ETHERNET_IP 0x0800 -#define PXE_PROTOCOL_ETHERNET_ARP 0x0806 -#define MAX_XMIT_FRAGMENTS 16 - -typedef struct s_pxe_cpb_fill_header_fragmented { - /// - /// Source and destination MAC addresses. These will be copied into - /// the media header without doing byte swapping. - /// - PXE_MAC_ADDR SrcAddr; - PXE_MAC_ADDR DestAddr; - - /// - /// Length of packet data in bytes (not including the media header). - /// - PXE_UINT32 PacketLen; - - /// - /// Protocol type. This will be copied into the media header without - /// doing byte swapping. Protocol type numbers can be obtained from - /// the Assigned Numbers RFC 1700. - /// - PXE_MEDIA_PROTOCOL Protocol; - - /// - /// Length of the media header in bytes. - /// - PXE_UINT16 MediaHeaderLen; - - /// - /// Number of packet fragment descriptors. - /// - PXE_UINT16 FragCnt; - - /// - /// Reserved, must be set to zero. - /// - PXE_UINT16 reserved; - - /// - /// Array of packet fragment descriptors. The first byte of the media - /// header is the first byte of the first fragment. - /// - struct { - /// - /// Address of this packet fragment. - /// - PXE_UINT64 FragAddr; - - /// - /// Length of this packet fragment. - /// - PXE_UINT32 FragLen; - - /// - /// Reserved, must be set to zero. - /// - PXE_UINT32 reserved; - } FragDesc[MAX_XMIT_FRAGMENTS]; -} -PXE_CPB_FILL_HEADER_FRAGMENTED; - -typedef struct s_pxe_cpb_transmit { - /// - /// Address of first byte of frame buffer. This is also the first byte - /// of the media header. - /// - PXE_UINT64 FrameAddr; - - /// - /// Length of the data portion of the frame buffer in bytes. Do not - /// include the length of the media header. - /// - PXE_UINT32 DataLen; - - /// - /// Length of the media header in bytes. - /// - PXE_UINT16 MediaheaderLen; - - /// - /// Reserved, must be zero. - /// - PXE_UINT16 reserved; -} PXE_CPB_TRANSMIT; - -typedef struct s_pxe_cpb_transmit_fragments { - /// - /// Length of packet data in bytes (not including the media header). - /// - PXE_UINT32 FrameLen; - - /// - /// Length of the media header in bytes. - /// - PXE_UINT16 MediaheaderLen; - - /// - /// Number of packet fragment descriptors. - /// - PXE_UINT16 FragCnt; - - /// - /// Array of frame fragment descriptors. The first byte of the first - /// fragment is also the first byte of the media header. - /// - struct { - /// - /// Address of this frame fragment. - /// - PXE_UINT64 FragAddr; - - /// - /// Length of this frame fragment. - /// - PXE_UINT32 FragLen; - - /// - /// Reserved, must be set to zero. - /// - PXE_UINT32 reserved; - } FragDesc[MAX_XMIT_FRAGMENTS]; -} -PXE_CPB_TRANSMIT_FRAGMENTS; - -typedef struct s_pxe_cpb_receive { - /// - /// Address of first byte of receive buffer. This is also the first byte - /// of the frame header. - /// - PXE_UINT64 BufferAddr; - - /// - /// Length of receive buffer. This must be large enough to hold the - /// received frame (media header + data). If the length of smaller than - /// the received frame, data will be lost. - /// - PXE_UINT32 BufferLen; - - /// - /// Reserved, must be set to zero. - /// - PXE_UINT32 reserved; -} PXE_CPB_RECEIVE; - -typedef struct s_pxe_db_receive { - /// - /// Source and destination MAC addresses from media header. - /// - PXE_MAC_ADDR SrcAddr; - PXE_MAC_ADDR DestAddr; - - /// - /// Length of received frame. May be larger than receive buffer size. - /// The receive buffer will not be overwritten. This is how to tell - /// if data was lost because the receive buffer was too small. - /// - PXE_UINT32 FrameLen; - - /// - /// Protocol type from media header. - /// - PXE_MEDIA_PROTOCOL Protocol; - - /// - /// Length of media header in received frame. - /// - PXE_UINT16 MediaHeaderLen; - - /// - /// Type of receive frame. - /// - PXE_FRAME_TYPE Type; - - /// - /// Reserved, must be zero. - /// - PXE_UINT8 reserved[7]; - -} PXE_DB_RECEIVE; - -#pragma pack() - -#endif diff --git a/MdePkg/Include/Uefi/UefiSpec.h b/MdePkg/Include/Uefi/UefiSpec.h deleted file mode 100644 index 2fb6ea00ab..0000000000 --- a/MdePkg/Include/Uefi/UefiSpec.h +++ /dev/null @@ -1,2188 +0,0 @@ -/** @file - Include file that supports UEFI. - - This include file must contain things defined in the UEFI 2.5 specification. - If a code construct is defined in the UEFI 2.5 specification it must be included - by this include file. - -Copyright (c) 2006 - 2015, 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 that 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. - -**/ - -#ifndef __UEFI_SPEC_H__ -#define __UEFI_SPEC_H__ - -#include - -#include -#include -#include -#include - -/// -/// Enumeration of EFI memory allocation types. -/// -typedef enum { - /// - /// Allocate any available range of pages that satisfies the request. - /// - AllocateAnyPages, - /// - /// Allocate any available range of pages whose uppermost address is less than - /// or equal to a specified maximum address. - /// - AllocateMaxAddress, - /// - /// Allocate pages at a specified address. - /// - AllocateAddress, - /// - /// Maximum enumeration value that may be used for bounds checking. - /// - MaxAllocateType -} EFI_ALLOCATE_TYPE; - -// -// Bit definitions for EFI_TIME.Daylight -// -#define EFI_TIME_ADJUST_DAYLIGHT 0x01 -#define EFI_TIME_IN_DAYLIGHT 0x02 - -/// -/// Value definition for EFI_TIME.TimeZone. -/// -#define EFI_UNSPECIFIED_TIMEZONE 0x07FF - -// -// Memory cacheability attributes -// -#define EFI_MEMORY_UC 0x0000000000000001ULL -#define EFI_MEMORY_WC 0x0000000000000002ULL -#define EFI_MEMORY_WT 0x0000000000000004ULL -#define EFI_MEMORY_WB 0x0000000000000008ULL -#define EFI_MEMORY_UCE 0x0000000000000010ULL -// -// Physical memory protection attributes -// -// Note: UEFI spec 2.5 and following: use EFI_MEMORY_RO as write-protected physical memory -// protection attribute. Also, EFI_MEMORY_WP means cacheability attribute. -// -#define EFI_MEMORY_WP 0x0000000000001000ULL -#define EFI_MEMORY_RP 0x0000000000002000ULL -#define EFI_MEMORY_XP 0x0000000000004000ULL -#define EFI_MEMORY_RO 0x0000000000020000ULL -// -// Physical memory persistence attribute. -// The memory region supports byte-addressable non-volatility. -// -#define EFI_MEMORY_NV 0x0000000000008000ULL -// -// The memory region provides higher reliability relative to other memory in the system. -// If all memory has the same reliability, then this bit is not used. -// -#define EFI_MEMORY_MORE_RELIABLE 0x0000000000010000ULL -// -// Runtime memory attribute -// -#define EFI_MEMORY_RUNTIME 0x8000000000000000ULL - -/// -/// Memory descriptor version number. -/// -#define EFI_MEMORY_DESCRIPTOR_VERSION 1 - -/// -/// Definition of an EFI memory descriptor. -/// -typedef struct { - /// - /// Type of the memory region. See EFI_MEMORY_TYPE. - /// - UINT32 Type; - /// - /// Physical address of the first byte of the memory region. Must aligned - /// on a 4 KB boundary. - /// - EFI_PHYSICAL_ADDRESS PhysicalStart; - /// - /// Virtual address of the first byte of the memory region. Must aligned - /// on a 4 KB boundary. - /// - EFI_VIRTUAL_ADDRESS VirtualStart; - /// - /// Number of 4KB pages in the memory region. - /// - UINT64 NumberOfPages; - /// - /// Attributes of the memory region that describe the bit mask of capabilities - /// for that memory region, and not necessarily the current settings for that - /// memory region. - /// - UINT64 Attribute; -} EFI_MEMORY_DESCRIPTOR; - -/** - Allocates memory pages from the system. - - @param[in] Type The type of allocation to perform. - @param[in] MemoryType The type of memory to allocate. - MemoryType values in the range 0x70000000..0x7FFFFFFF - are reserved for OEM use. MemoryType values in the range - 0x80000000..0xFFFFFFFF are reserved for use by UEFI OS loaders - that are provided by operating system vendors. The only illegal - memory type values are those in the range EfiMaxMemoryType..0x6FFFFFFF. - @param[in] Pages The number of contiguous 4 KB pages to allocate. - @param[in, out] Memory The pointer to a physical address. On input, the way in which the address is - used depends on the value of Type. - - @retval EFI_SUCCESS The requested pages were allocated. - @retval EFI_INVALID_PARAMETER 1) Type is not AllocateAnyPages or - AllocateMaxAddress or AllocateAddress. - 2) MemoryType is in the range - EfiMaxMemoryType..0x6FFFFFFF. - 3) Memory is NULL. - 4) MemoryType was EfiPersistentMemory. - @retval EFI_OUT_OF_RESOURCES The pages could not be allocated. - @retval EFI_NOT_FOUND The requested pages could not be found. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_ALLOCATE_PAGES)( - IN EFI_ALLOCATE_TYPE Type, - IN EFI_MEMORY_TYPE MemoryType, - IN UINTN Pages, - IN OUT EFI_PHYSICAL_ADDRESS *Memory - ); - -/** - Frees memory pages. - - @param[in] Memory The base physical address of the pages to be freed. - @param[in] Pages The number of contiguous 4 KB pages to free. - - @retval EFI_SUCCESS The requested pages were freed. - @retval EFI_INVALID_PARAMETER Memory is not a page-aligned address or Pages is invalid. - @retval EFI_NOT_FOUND The requested memory pages were not allocated with - AllocatePages(). - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_FREE_PAGES)( - IN EFI_PHYSICAL_ADDRESS Memory, - IN UINTN Pages - ); - -/** - Returns the current memory map. - - @param[in, out] MemoryMapSize A pointer to the size, in bytes, of the MemoryMap buffer. - On input, this is the size of the buffer allocated by the caller. - On output, it is the size of the buffer returned by the firmware if - the buffer was large enough, or the size of the buffer needed to contain - the map if the buffer was too small. - @param[in, out] MemoryMap A pointer to the buffer in which firmware places the current memory - map. - @param[out] MapKey A pointer to the location in which firmware returns the key for the - current memory map. - @param[out] DescriptorSize A pointer to the location in which firmware returns the size, in bytes, of - an individual EFI_MEMORY_DESCRIPTOR. - @param[out] DescriptorVersion A pointer to the location in which firmware returns the version number - associated with the EFI_MEMORY_DESCRIPTOR. - - @retval EFI_SUCCESS The memory map was returned in the MemoryMap buffer. - @retval EFI_BUFFER_TOO_SMALL The MemoryMap buffer was too small. The current buffer size - needed to hold the memory map is returned in MemoryMapSize. - @retval EFI_INVALID_PARAMETER 1) MemoryMapSize is NULL. - 2) The MemoryMap buffer is not too small and MemoryMap is - NULL. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_GET_MEMORY_MAP)( - IN OUT UINTN *MemoryMapSize, - IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap, - OUT UINTN *MapKey, - OUT UINTN *DescriptorSize, - OUT UINT32 *DescriptorVersion - ); - -/** - Allocates pool memory. - - @param[in] PoolType The type of pool to allocate. - MemoryType values in the range 0x70000000..0x7FFFFFFF - are reserved for OEM use. MemoryType values in the range - 0x80000000..0xFFFFFFFF are reserved for use by UEFI OS loaders - that are provided by operating system vendors. The only illegal - memory type values are those in the range EfiMaxMemoryType..0x6FFFFFFF. - @param[in] Size The number of bytes to allocate from the pool. - @param[out] Buffer A pointer to a pointer to the allocated buffer if the call succeeds; - undefined otherwise. - - @retval EFI_SUCCESS The requested number of bytes was allocated. - @retval EFI_OUT_OF_RESOURCES The pool requested could not be allocated. - @retval EFI_INVALID_PARAMETER PoolType was invalid or Buffer is NULL. - PoolType was EfiPersistentMemory. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_ALLOCATE_POOL)( - IN EFI_MEMORY_TYPE PoolType, - IN UINTN Size, - OUT VOID **Buffer - ); - -/** - Returns pool memory to the system. - - @param[in] Buffer The pointer to the buffer to free. - - @retval EFI_SUCCESS The memory was returned to the system. - @retval EFI_INVALID_PARAMETER Buffer was invalid. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_FREE_POOL)( - IN VOID *Buffer - ); - -/** - Changes the runtime addressing mode of EFI firmware from physical to virtual. - - @param[in] MemoryMapSize The size in bytes of VirtualMap. - @param[in] DescriptorSize The size in bytes of an entry in the VirtualMap. - @param[in] DescriptorVersion The version of the structure entries in VirtualMap. - @param[in] VirtualMap An array of memory descriptors which contain new virtual - address mapping information for all runtime ranges. - - @retval EFI_SUCCESS The virtual address map has been applied. - @retval EFI_UNSUPPORTED EFI firmware is not at runtime, or the EFI firmware is already in - virtual address mapped mode. - @retval EFI_INVALID_PARAMETER DescriptorSize or DescriptorVersion is invalid. - @retval EFI_NO_MAPPING A virtual address was not supplied for a range in the memory - map that requires a mapping. - @retval EFI_NOT_FOUND A virtual address was supplied for an address that is not found - in the memory map. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_SET_VIRTUAL_ADDRESS_MAP)( - IN UINTN MemoryMapSize, - IN UINTN DescriptorSize, - IN UINT32 DescriptorVersion, - IN EFI_MEMORY_DESCRIPTOR *VirtualMap - ); - -/** - Connects one or more drivers to a controller. - - @param[in] ControllerHandle The handle of the controller to which driver(s) are to be connected. - @param[in] DriverImageHandle A pointer to an ordered list handles that support the - EFI_DRIVER_BINDING_PROTOCOL. - @param[in] RemainingDevicePath A pointer to the device path that specifies a child of the - controller specified by ControllerHandle. - @param[in] Recursive If TRUE, then ConnectController() is called recursively - until the entire tree of controllers below the controller specified - by ControllerHandle have been created. If FALSE, then - the tree of controllers is only expanded one level. - - @retval EFI_SUCCESS 1) One or more drivers were connected to ControllerHandle. - 2) No drivers were connected to ControllerHandle, but - RemainingDevicePath is not NULL, and it is an End Device - Path Node. - @retval EFI_INVALID_PARAMETER ControllerHandle is NULL. - @retval EFI_NOT_FOUND 1) There are no EFI_DRIVER_BINDING_PROTOCOL instances - present in the system. - 2) No drivers were connected to ControllerHandle. - @retval EFI_SECURITY_VIOLATION - The user has no permission to start UEFI device drivers on the device path - associated with the ControllerHandle or specified by the RemainingDevicePath. -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_CONNECT_CONTROLLER)( - IN EFI_HANDLE ControllerHandle, - IN EFI_HANDLE *DriverImageHandle, OPTIONAL - IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath, OPTIONAL - IN BOOLEAN Recursive - ); - -/** - Disconnects one or more drivers from a controller. - - @param[in] ControllerHandle The handle of the controller from which driver(s) are to be disconnected. - @param[in] DriverImageHandle The driver to disconnect from ControllerHandle. - If DriverImageHandle is NULL, then all the drivers currently managing - ControllerHandle are disconnected from ControllerHandle. - @param[in] ChildHandle The handle of the child to destroy. - If ChildHandle is NULL, then all the children of ControllerHandle are - destroyed before the drivers are disconnected from ControllerHandle. - - @retval EFI_SUCCESS 1) One or more drivers were disconnected from the controller. - 2) On entry, no drivers are managing ControllerHandle. - 3) DriverImageHandle is not NULL, and on entry - DriverImageHandle is not managing ControllerHandle. - @retval EFI_INVALID_PARAMETER 1) ControllerHandle is NULL. - 2) DriverImageHandle is not NULL, and it is not a valid EFI_HANDLE. - 3) ChildHandle is not NULL, and it is not a valid EFI_HANDLE. - 4) DriverImageHandle does not support the EFI_DRIVER_BINDING_PROTOCOL. - @retval EFI_OUT_OF_RESOURCES There are not enough resources available to disconnect any drivers from - ControllerHandle. - @retval EFI_DEVICE_ERROR The controller could not be disconnected because of a device error. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_DISCONNECT_CONTROLLER)( - IN EFI_HANDLE ControllerHandle, - IN EFI_HANDLE DriverImageHandle, OPTIONAL - IN EFI_HANDLE ChildHandle OPTIONAL - ); - - - -// -// ConvertPointer DebugDisposition type. -// -#define EFI_OPTIONAL_PTR 0x00000001 - -/** - Determines the new virtual address that is to be used on subsequent memory accesses. - - @param[in] DebugDisposition Supplies type information for the pointer being converted. - @param[in, out] Address A pointer to a pointer that is to be fixed to be the value needed - for the new virtual address mappings being applied. - - @retval EFI_SUCCESS The pointer pointed to by Address was modified. - @retval EFI_INVALID_PARAMETER 1) Address is NULL. - 2) *Address is NULL and DebugDisposition does - not have the EFI_OPTIONAL_PTR bit set. - @retval EFI_NOT_FOUND The pointer pointed to by Address was not found to be part - of the current memory map. This is normally fatal. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_CONVERT_POINTER)( - IN UINTN DebugDisposition, - IN OUT VOID **Address - ); - - -// -// These types can be ORed together as needed - for example, -// EVT_TIMER might be Ored with EVT_NOTIFY_WAIT or -// EVT_NOTIFY_SIGNAL. -// -#define EVT_TIMER 0x80000000 -#define EVT_RUNTIME 0x40000000 -#define EVT_NOTIFY_WAIT 0x00000100 -#define EVT_NOTIFY_SIGNAL 0x00000200 - -#define EVT_SIGNAL_EXIT_BOOT_SERVICES 0x00000201 -#define EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE 0x60000202 - -// -// The event's NotifyContext pointer points to a runtime memory -// address. -// The event is deprecated in UEFI2.0 and later specifications. -// -#define EVT_RUNTIME_CONTEXT 0x20000000 - - -/** - Invoke a notification event - - @param[in] Event Event whose notification function is being invoked. - @param[in] Context The pointer to the notification function's context, - which is implementation-dependent. - -**/ -typedef -VOID -(EFIAPI *EFI_EVENT_NOTIFY)( - IN EFI_EVENT Event, - IN VOID *Context - ); - -/** - Creates an event. - - @param[in] Type The type of event to create and its mode and attributes. - @param[in] NotifyTpl The task priority level of event notifications, if needed. - @param[in] NotifyFunction The pointer to the event's notification function, if any. - @param[in] NotifyContext The pointer to the notification function's context; corresponds to parameter - Context in the notification function. - @param[out] Event The pointer to the newly created event if the call succeeds; undefined - otherwise. - - @retval EFI_SUCCESS The event structure was created. - @retval EFI_INVALID_PARAMETER One or more parameters are invalid. - @retval EFI_OUT_OF_RESOURCES The event could not be allocated. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_CREATE_EVENT)( - IN UINT32 Type, - IN EFI_TPL NotifyTpl, - IN EFI_EVENT_NOTIFY NotifyFunction, - IN VOID *NotifyContext, - OUT EFI_EVENT *Event - ); - -/** - Creates an event in a group. - - @param[in] Type The type of event to create and its mode and attributes. - @param[in] NotifyTpl The task priority level of event notifications,if needed. - @param[in] NotifyFunction The pointer to the event's notification function, if any. - @param[in] NotifyContext The pointer to the notification function's context; corresponds to parameter - Context in the notification function. - @param[in] EventGroup The pointer to the unique identifier of the group to which this event belongs. - If this is NULL, then the function behaves as if the parameters were passed - to CreateEvent. - @param[out] Event The pointer to the newly created event if the call succeeds; undefined - otherwise. - - @retval EFI_SUCCESS The event structure was created. - @retval EFI_INVALID_PARAMETER One or more parameters are invalid. - @retval EFI_OUT_OF_RESOURCES The event could not be allocated. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_CREATE_EVENT_EX)( - IN UINT32 Type, - IN EFI_TPL NotifyTpl, - IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL, - IN CONST VOID *NotifyContext OPTIONAL, - IN CONST EFI_GUID *EventGroup OPTIONAL, - OUT EFI_EVENT *Event - ); - -/// -/// Timer delay types -/// -typedef enum { - /// - /// An event's timer settings is to be cancelled and not trigger time is to be set/ - /// - TimerCancel, - /// - /// An event is to be signaled periodically at a specified interval from the current time. - /// - TimerPeriodic, - /// - /// An event is to be signaled once at a specified interval from the current time. - /// - TimerRelative -} EFI_TIMER_DELAY; - -/** - Sets the type of timer and the trigger time for a timer event. - - @param[in] Event The timer event that is to be signaled at the specified time. - @param[in] Type The type of time that is specified in TriggerTime. - @param[in] TriggerTime The number of 100ns units until the timer expires. - A TriggerTime of 0 is legal. - If Type is TimerRelative and TriggerTime is 0, then the timer - event will be signaled on the next timer tick. - If Type is TimerPeriodic and TriggerTime is 0, then the timer - event will be signaled on every timer tick. - - @retval EFI_SUCCESS The event has been set to be signaled at the requested time. - @retval EFI_INVALID_PARAMETER Event or Type is not valid. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_SET_TIMER)( - IN EFI_EVENT Event, - IN EFI_TIMER_DELAY Type, - IN UINT64 TriggerTime - ); - -/** - Signals an event. - - @param[in] Event The event to signal. - - @retval EFI_SUCCESS The event has been signaled. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_SIGNAL_EVENT)( - IN EFI_EVENT Event - ); - -/** - Stops execution until an event is signaled. - - @param[in] NumberOfEvents The number of events in the Event array. - @param[in] Event An array of EFI_EVENT. - @param[out] Index The pointer to the index of the event which satisfied the wait condition. - - @retval EFI_SUCCESS The event indicated by Index was signaled. - @retval EFI_INVALID_PARAMETER 1) NumberOfEvents is 0. - 2) The event indicated by Index is of type - EVT_NOTIFY_SIGNAL. - @retval EFI_UNSUPPORTED The current TPL is not TPL_APPLICATION. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_WAIT_FOR_EVENT)( - IN UINTN NumberOfEvents, - IN EFI_EVENT *Event, - OUT UINTN *Index - ); - -/** - Closes an event. - - @param[in] Event The event to close. - - @retval EFI_SUCCESS The event has been closed. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_CLOSE_EVENT)( - IN EFI_EVENT Event - ); - -/** - Checks whether an event is in the signaled state. - - @param[in] Event The event to check. - - @retval EFI_SUCCESS The event is in the signaled state. - @retval EFI_NOT_READY The event is not in the signaled state. - @retval EFI_INVALID_PARAMETER Event is of type EVT_NOTIFY_SIGNAL. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_CHECK_EVENT)( - IN EFI_EVENT Event - ); - - -// -// Task priority level -// -#define TPL_APPLICATION 4 -#define TPL_CALLBACK 8 -#define TPL_NOTIFY 16 -#define TPL_HIGH_LEVEL 31 - - -/** - Raises a task's priority level and returns its previous level. - - @param[in] NewTpl The new task priority level. - - @return Previous task priority level - -**/ -typedef -EFI_TPL -(EFIAPI *EFI_RAISE_TPL)( - IN EFI_TPL NewTpl - ); - -/** - Restores a task's priority level to its previous value. - - @param[in] OldTpl The previous task priority level to restore. - -**/ -typedef -VOID -(EFIAPI *EFI_RESTORE_TPL)( - IN EFI_TPL OldTpl - ); - -/** - Returns the value of a variable. - - @param[in] VariableName A Null-terminated string that is the name of the vendor's - variable. - @param[in] VendorGuid A unique identifier for the vendor. - @param[out] Attributes If not NULL, a pointer to the memory location to return the - attributes bitmask for the variable. - @param[in, out] DataSize On input, the size in bytes of the return Data buffer. - On output the size of data returned in Data. - @param[out] Data The buffer to return the contents of the variable. - - @retval EFI_SUCCESS The function completed successfully. - @retval EFI_NOT_FOUND The variable was not found. - @retval EFI_BUFFER_TOO_SMALL The DataSize is too small for the result. - @retval EFI_INVALID_PARAMETER VariableName is NULL. - @retval EFI_INVALID_PARAMETER VendorGuid is NULL. - @retval EFI_INVALID_PARAMETER DataSize is NULL. - @retval EFI_INVALID_PARAMETER The DataSize is not too small and Data is NULL. - @retval EFI_DEVICE_ERROR The variable could not be retrieved due to a hardware error. - @retval EFI_SECURITY_VIOLATION The variable could not be retrieved due to an authentication failure. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_GET_VARIABLE)( - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - OUT UINT32 *Attributes, OPTIONAL - IN OUT UINTN *DataSize, - OUT VOID *Data - ); - -/** - Enumerates the current variable names. - - @param[in, out] VariableNameSize The size of the VariableName buffer. - @param[in, out] VariableName On input, supplies the last VariableName that was returned - by GetNextVariableName(). On output, returns the Nullterminated - string of the current variable. - @param[in, out] VendorGuid On input, supplies the last VendorGuid that was returned by - GetNextVariableName(). On output, returns the - VendorGuid of the current variable. - - @retval EFI_SUCCESS The function completed successfully. - @retval EFI_NOT_FOUND The next variable was not found. - @retval EFI_BUFFER_TOO_SMALL The VariableNameSize is too small for the result. - @retval EFI_INVALID_PARAMETER VariableNameSize is NULL. - @retval EFI_INVALID_PARAMETER VariableName is NULL. - @retval EFI_INVALID_PARAMETER VendorGuid is NULL. - @retval EFI_DEVICE_ERROR The variable could not be retrieved due to a hardware error. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_GET_NEXT_VARIABLE_NAME)( - IN OUT UINTN *VariableNameSize, - IN OUT CHAR16 *VariableName, - IN OUT EFI_GUID *VendorGuid - ); - -/** - Sets the value of a variable. - - @param[in] VariableName A Null-terminated string that is the name of the vendor's variable. - Each VariableName is unique for each VendorGuid. VariableName must - contain 1 or more characters. If VariableName is an empty string, - then EFI_INVALID_PARAMETER is returned. - @param[in] VendorGuid A unique identifier for the vendor. - @param[in] Attributes Attributes bitmask to set for the variable. - @param[in] DataSize The size in bytes of the Data buffer. Unless the EFI_VARIABLE_APPEND_WRITE, - EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS, or - EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS attribute is set, a size of zero - causes the variable to be deleted. When the EFI_VARIABLE_APPEND_WRITE attribute is - set, then a SetVariable() call with a DataSize of zero will not cause any change to - the variable value (the timestamp associated with the variable may be updated however - even if no new data value is provided,see the description of the - EFI_VARIABLE_AUTHENTICATION_2 descriptor below. In this case the DataSize will not - be zero since the EFI_VARIABLE_AUTHENTICATION_2 descriptor will be populated). - @param[in] Data The contents for the variable. - - @retval EFI_SUCCESS The firmware has successfully stored the variable and its data as - defined by the Attributes. - @retval EFI_INVALID_PARAMETER An invalid combination of attribute bits, name, and GUID was supplied, or the - DataSize exceeds the maximum allowed. - @retval EFI_INVALID_PARAMETER VariableName is an empty string. - @retval EFI_OUT_OF_RESOURCES Not enough storage is available to hold the variable and its data. - @retval EFI_DEVICE_ERROR The variable could not be retrieved due to a hardware error. - @retval EFI_WRITE_PROTECTED The variable in question is read-only. - @retval EFI_WRITE_PROTECTED The variable in question cannot be deleted. - @retval EFI_SECURITY_VIOLATION The variable could not be written due to EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS - or EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACESS being set, but the AuthInfo - does NOT pass the validation check carried out by the firmware. - - @retval EFI_NOT_FOUND The variable trying to be updated or deleted was not found. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_SET_VARIABLE)( - IN CHAR16 *VariableName, - IN EFI_GUID *VendorGuid, - IN UINT32 Attributes, - IN UINTN DataSize, - IN VOID *Data - ); - - -/// -/// This provides the capabilities of the -/// real time clock device as exposed through the EFI interfaces. -/// -typedef struct { - /// - /// Provides the reporting resolution of the real-time clock device in - /// counts per second. For a normal PC-AT CMOS RTC device, this - /// value would be 1 Hz, or 1, to indicate that the device only reports - /// the time to the resolution of 1 second. - /// - UINT32 Resolution; - /// - /// Provides the timekeeping accuracy of the real-time clock in an - /// error rate of 1E-6 parts per million. For a clock with an accuracy - /// of 50 parts per million, the value in this field would be - /// 50,000,000. - /// - UINT32 Accuracy; - /// - /// A TRUE indicates that a time set operation clears the device's - /// time below the Resolution reporting level. A FALSE - /// indicates that the state below the Resolution level of the - /// device is not cleared when the time is set. Normal PC-AT CMOS - /// RTC devices set this value to FALSE. - /// - BOOLEAN SetsToZero; -} EFI_TIME_CAPABILITIES; - -/** - Returns the current time and date information, and the time-keeping capabilities - of the hardware platform. - - @param[out] Time A pointer to storage to receive a snapshot of the current time. - @param[out] Capabilities An optional pointer to a buffer to receive the real time clock - device's capabilities. - - @retval EFI_SUCCESS The operation completed successfully. - @retval EFI_INVALID_PARAMETER Time is NULL. - @retval EFI_DEVICE_ERROR The time could not be retrieved due to hardware error. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_GET_TIME)( - OUT EFI_TIME *Time, - OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL - ); - -/** - Sets the current local time and date information. - - @param[in] Time A pointer to the current time. - - @retval EFI_SUCCESS The operation completed successfully. - @retval EFI_INVALID_PARAMETER A time field is out of range. - @retval EFI_DEVICE_ERROR The time could not be set due due to hardware error. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_SET_TIME)( - IN EFI_TIME *Time - ); - -/** - Returns the current wakeup alarm clock setting. - - @param[out] Enabled Indicates if the alarm is currently enabled or disabled. - @param[out] Pending Indicates if the alarm signal is pending and requires acknowledgement. - @param[out] Time The current alarm setting. - - @retval EFI_SUCCESS The alarm settings were returned. - @retval EFI_INVALID_PARAMETER Enabled is NULL. - @retval EFI_INVALID_PARAMETER Pending is NULL. - @retval EFI_INVALID_PARAMETER Time is NULL. - @retval EFI_DEVICE_ERROR The wakeup time could not be retrieved due to a hardware error. - @retval EFI_UNSUPPORTED A wakeup timer is not supported on this platform. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_GET_WAKEUP_TIME)( - OUT BOOLEAN *Enabled, - OUT BOOLEAN *Pending, - OUT EFI_TIME *Time - ); - -/** - Sets the system wakeup alarm clock time. - - @param[in] Enable Enable or disable the wakeup alarm. - @param[in] Time If Enable is TRUE, the time to set the wakeup alarm for. - If Enable is FALSE, then this parameter is optional, and may be NULL. - - @retval EFI_SUCCESS If Enable is TRUE, then the wakeup alarm was enabled. If - Enable is FALSE, then the wakeup alarm was disabled. - @retval EFI_INVALID_PARAMETER A time field is out of range. - @retval EFI_DEVICE_ERROR The wakeup time could not be set due to a hardware error. - @retval EFI_UNSUPPORTED A wakeup timer is not supported on this platform. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_SET_WAKEUP_TIME)( - IN BOOLEAN Enable, - IN EFI_TIME *Time OPTIONAL - ); - -/** - Loads an EFI image into memory. - - @param[in] BootPolicy If TRUE, indicates that the request originates from the boot - manager, and that the boot manager is attempting to load - FilePath as a boot selection. Ignored if SourceBuffer is - not NULL. - @param[in] ParentImageHandle The caller's image handle. - @param[in] DevicePath The DeviceHandle specific file path from which the image is - loaded. - @param[in] SourceBuffer If not NULL, a pointer to the memory location containing a copy - of the image to be loaded. - @param[in] SourceSize The size in bytes of SourceBuffer. Ignored if SourceBuffer is NULL. - @param[out] ImageHandle The pointer to the returned image handle that is created when the - image is successfully loaded. - - @retval EFI_SUCCESS Image was loaded into memory correctly. - @retval EFI_NOT_FOUND Both SourceBuffer and DevicePath are NULL. - @retval EFI_INVALID_PARAMETER One or more parametes are invalid. - @retval EFI_UNSUPPORTED The image type is not supported. - @retval EFI_OUT_OF_RESOURCES Image was not loaded due to insufficient resources. - @retval EFI_LOAD_ERROR Image was not loaded because the image format was corrupt or not - understood. - @retval EFI_DEVICE_ERROR Image was not loaded because the device returned a read error. - @retval EFI_ACCESS_DENIED Image was not loaded because the platform policy prohibits the - image from being loaded. NULL is returned in *ImageHandle. - @retval EFI_SECURITY_VIOLATION Image was loaded and an ImageHandle was created with a - valid EFI_LOADED_IMAGE_PROTOCOL. However, the current - platform policy specifies that the image should not be started. -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_IMAGE_LOAD)( - IN BOOLEAN BootPolicy, - IN EFI_HANDLE ParentImageHandle, - IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, - IN VOID *SourceBuffer OPTIONAL, - IN UINTN SourceSize, - OUT EFI_HANDLE *ImageHandle - ); - -/** - Transfers control to a loaded image's entry point. - - @param[in] ImageHandle Handle of image to be started. - @param[out] ExitDataSize The pointer to the size, in bytes, of ExitData. - @param[out] ExitData The pointer to a pointer to a data buffer that includes a Null-terminated - string, optionally followed by additional binary data. - - @retval EFI_INVALID_PARAMETER ImageHandle is either an invalid image handle or the image - has already been initialized with StartImage. - @retval EFI_SECURITY_VIOLATION The current platform policy specifies that the image should not be started. - @return Exit code from image - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_IMAGE_START)( - IN EFI_HANDLE ImageHandle, - OUT UINTN *ExitDataSize, - OUT CHAR16 **ExitData OPTIONAL - ); - -/** - Terminates a loaded EFI image and returns control to boot services. - - @param[in] ImageHandle Handle that identifies the image. This parameter is passed to the - image on entry. - @param[in] ExitStatus The image's exit code. - @param[in] ExitDataSize The size, in bytes, of ExitData. Ignored if ExitStatus is EFI_SUCCESS. - @param[in] ExitData The pointer to a data buffer that includes a Null-terminated string, - optionally followed by additional binary data. The string is a - description that the caller may use to further indicate the reason - for the image's exit. ExitData is only valid if ExitStatus - is something other than EFI_SUCCESS. The ExitData buffer - must be allocated by calling AllocatePool(). - - @retval EFI_SUCCESS The image specified by ImageHandle was unloaded. - @retval EFI_INVALID_PARAMETER The image specified by ImageHandle has been loaded and - started with LoadImage() and StartImage(), but the - image is not the currently executing image. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_EXIT)( - IN EFI_HANDLE ImageHandle, - IN EFI_STATUS ExitStatus, - IN UINTN ExitDataSize, - IN CHAR16 *ExitData OPTIONAL - ); - -/** - Unloads an image. - - @param[in] ImageHandle Handle that identifies the image to be unloaded. - - @retval EFI_SUCCESS The image has been unloaded. - @retval EFI_INVALID_PARAMETER ImageHandle is not a valid image handle. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_IMAGE_UNLOAD)( - IN EFI_HANDLE ImageHandle - ); - -/** - Terminates all boot services. - - @param[in] ImageHandle Handle that identifies the exiting image. - @param[in] MapKey Key to the latest memory map. - - @retval EFI_SUCCESS Boot services have been terminated. - @retval EFI_INVALID_PARAMETER MapKey is incorrect. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_EXIT_BOOT_SERVICES)( - IN EFI_HANDLE ImageHandle, - IN UINTN MapKey - ); - -/** - Induces a fine-grained stall. - - @param[in] Microseconds The number of microseconds to stall execution. - - @retval EFI_SUCCESS Execution was stalled at least the requested number of - Microseconds. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_STALL)( - IN UINTN Microseconds - ); - -/** - Sets the system's watchdog timer. - - @param[in] Timeout The number of seconds to set the watchdog timer to. - @param[in] WatchdogCode The numeric code to log on a watchdog timer timeout event. - @param[in] DataSize The size, in bytes, of WatchdogData. - @param[in] WatchdogData A data buffer that includes a Null-terminated string, optionally - followed by additional binary data. - - @retval EFI_SUCCESS The timeout has been set. - @retval EFI_INVALID_PARAMETER The supplied WatchdogCode is invalid. - @retval EFI_UNSUPPORTED The system does not have a watchdog timer. - @retval EFI_DEVICE_ERROR The watchdog timer could not be programmed due to a hardware - error. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_SET_WATCHDOG_TIMER)( - IN UINTN Timeout, - IN UINT64 WatchdogCode, - IN UINTN DataSize, - IN CHAR16 *WatchdogData OPTIONAL - ); - -/** - Resets the entire platform. - - @param[in] ResetType The type of reset to perform. - @param[in] ResetStatus The status code for the reset. - @param[in] DataSize The size, in bytes, of WatchdogData. - @param[in] ResetData For a ResetType of EfiResetCold, EfiResetWarm, or - EfiResetShutdown the data buffer starts with a Null-terminated - string, optionally followed by additional binary data. - -**/ -typedef -VOID -(EFIAPI *EFI_RESET_SYSTEM)( - IN EFI_RESET_TYPE ResetType, - IN EFI_STATUS ResetStatus, - IN UINTN DataSize, - IN VOID *ResetData OPTIONAL - ); - -/** - Returns a monotonically increasing count for the platform. - - @param[out] Count The pointer to returned value. - - @retval EFI_SUCCESS The next monotonic count was returned. - @retval EFI_INVALID_PARAMETER Count is NULL. - @retval EFI_DEVICE_ERROR The device is not functioning properly. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_GET_NEXT_MONOTONIC_COUNT)( - OUT UINT64 *Count - ); - -/** - Returns the next high 32 bits of the platform's monotonic counter. - - @param[out] HighCount The pointer to returned value. - - @retval EFI_SUCCESS The next high monotonic count was returned. - @retval EFI_INVALID_PARAMETER HighCount is NULL. - @retval EFI_DEVICE_ERROR The device is not functioning properly. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_GET_NEXT_HIGH_MONO_COUNT)( - OUT UINT32 *HighCount - ); - -/** - Computes and returns a 32-bit CRC for a data buffer. - - @param[in] Data A pointer to the buffer on which the 32-bit CRC is to be computed. - @param[in] DataSize The number of bytes in the buffer Data. - @param[out] Crc32 The 32-bit CRC that was computed for the data buffer specified by Data - and DataSize. - - @retval EFI_SUCCESS The 32-bit CRC was computed for the data buffer and returned in - Crc32. - @retval EFI_INVALID_PARAMETER Data is NULL. - @retval EFI_INVALID_PARAMETER Crc32 is NULL. - @retval EFI_INVALID_PARAMETER DataSize is 0. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_CALCULATE_CRC32)( - IN VOID *Data, - IN UINTN DataSize, - OUT UINT32 *Crc32 - ); - -/** - Copies the contents of one buffer to another buffer. - - @param[in] Destination The pointer to the destination buffer of the memory copy. - @param[in] Source The pointer to the source buffer of the memory copy. - @param[in] Length Number of bytes to copy from Source to Destination. - -**/ -typedef -VOID -(EFIAPI *EFI_COPY_MEM)( - IN VOID *Destination, - IN VOID *Source, - IN UINTN Length - ); - -/** - The SetMem() function fills a buffer with a specified value. - - @param[in] Buffer The pointer to the buffer to fill. - @param[in] Size Number of bytes in Buffer to fill. - @param[in] Value Value to fill Buffer with. - -**/ -typedef -VOID -(EFIAPI *EFI_SET_MEM)( - IN VOID *Buffer, - IN UINTN Size, - IN UINT8 Value - ); - -/// -/// Enumeration of EFI Interface Types -/// -typedef enum { - /// - /// Indicates that the supplied protocol interface is supplied in native form. - /// - EFI_NATIVE_INTERFACE -} EFI_INTERFACE_TYPE; - -/** - Installs a protocol interface on a device handle. If the handle does not exist, it is created and added - to the list of handles in the system. InstallMultipleProtocolInterfaces() performs - more error checking than InstallProtocolInterface(), so it is recommended that - InstallMultipleProtocolInterfaces() be used in place of - InstallProtocolInterface() - - @param[in, out] Handle A pointer to the EFI_HANDLE on which the interface is to be installed. - @param[in] Protocol The numeric ID of the protocol interface. - @param[in] InterfaceType Indicates whether Interface is supplied in native form. - @param[in] Interface A pointer to the protocol interface. - - @retval EFI_SUCCESS The protocol interface was installed. - @retval EFI_OUT_OF_RESOURCES Space for a new handle could not be allocated. - @retval EFI_INVALID_PARAMETER Handle is NULL. - @retval EFI_INVALID_PARAMETER Protocol is NULL. - @retval EFI_INVALID_PARAMETER InterfaceType is not EFI_NATIVE_INTERFACE. - @retval EFI_INVALID_PARAMETER Protocol is already installed on the handle specified by Handle. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_INSTALL_PROTOCOL_INTERFACE)( - IN OUT EFI_HANDLE *Handle, - IN EFI_GUID *Protocol, - IN EFI_INTERFACE_TYPE InterfaceType, - IN VOID *Interface - ); - -/** - Installs one or more protocol interfaces into the boot services environment. - - @param[in, out] Handle The pointer to a handle to install the new protocol interfaces on, - or a pointer to NULL if a new handle is to be allocated. - @param ... A variable argument list containing pairs of protocol GUIDs and protocol - interfaces. - - @retval EFI_SUCCESS All the protocol interface was installed. - @retval EFI_OUT_OF_RESOURCES There was not enough memory in pool to install all the protocols. - @retval EFI_ALREADY_STARTED A Device Path Protocol instance was passed in that is already present in - the handle database. - @retval EFI_INVALID_PARAMETER Handle is NULL. - @retval EFI_INVALID_PARAMETER Protocol is already installed on the handle specified by Handle. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES)( - IN OUT EFI_HANDLE *Handle, - ... - ); - -/** - Reinstalls a protocol interface on a device handle. - - @param[in] Handle Handle on which the interface is to be reinstalled. - @param[in] Protocol The numeric ID of the interface. - @param[in] OldInterface A pointer to the old interface. NULL can be used if a structure is not - associated with Protocol. - @param[in] NewInterface A pointer to the new interface. - - @retval EFI_SUCCESS The protocol interface was reinstalled. - @retval EFI_NOT_FOUND The OldInterface on the handle was not found. - @retval EFI_ACCESS_DENIED The protocol interface could not be reinstalled, - because OldInterface is still being used by a - driver that will not release it. - @retval EFI_INVALID_PARAMETER Handle is NULL. - @retval EFI_INVALID_PARAMETER Protocol is NULL. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_REINSTALL_PROTOCOL_INTERFACE)( - IN EFI_HANDLE Handle, - IN EFI_GUID *Protocol, - IN VOID *OldInterface, - IN VOID *NewInterface - ); - -/** - Removes a protocol interface from a device handle. It is recommended that - UninstallMultipleProtocolInterfaces() be used in place of - UninstallProtocolInterface(). - - @param[in] Handle The handle on which the interface was installed. - @param[in] Protocol The numeric ID of the interface. - @param[in] Interface A pointer to the interface. - - @retval EFI_SUCCESS The interface was removed. - @retval EFI_NOT_FOUND The interface was not found. - @retval EFI_ACCESS_DENIED The interface was not removed because the interface - is still being used by a driver. - @retval EFI_INVALID_PARAMETER Handle is NULL. - @retval EFI_INVALID_PARAMETER Protocol is NULL. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_UNINSTALL_PROTOCOL_INTERFACE)( - IN EFI_HANDLE Handle, - IN EFI_GUID *Protocol, - IN VOID *Interface - ); - -/** - Removes one or more protocol interfaces into the boot services environment. - - @param[in] Handle The handle to remove the protocol interfaces from. - @param ... A variable argument list containing pairs of protocol GUIDs and - protocol interfaces. - - @retval EFI_SUCCESS All the protocol interfaces were removed. - @retval EFI_INVALID_PARAMETER One of the protocol interfaces was not previously installed on Handle. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES)( - IN EFI_HANDLE Handle, - ... - ); - -/** - Queries a handle to determine if it supports a specified protocol. - - @param[in] Handle The handle being queried. - @param[in] Protocol The published unique identifier of the protocol. - @param[out] Interface Supplies the address where a pointer to the corresponding Protocol - Interface is returned. - - @retval EFI_SUCCESS The interface information for the specified protocol was returned. - @retval EFI_UNSUPPORTED The device does not support the specified protocol. - @retval EFI_INVALID_PARAMETER Handle is NULL. - @retval EFI_INVALID_PARAMETER Protocol is NULL. - @retval EFI_INVALID_PARAMETER Interface is NULL. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_HANDLE_PROTOCOL)( - IN EFI_HANDLE Handle, - IN EFI_GUID *Protocol, - OUT VOID **Interface - ); - -#define EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL 0x00000001 -#define EFI_OPEN_PROTOCOL_GET_PROTOCOL 0x00000002 -#define EFI_OPEN_PROTOCOL_TEST_PROTOCOL 0x00000004 -#define EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008 -#define EFI_OPEN_PROTOCOL_BY_DRIVER 0x00000010 -#define EFI_OPEN_PROTOCOL_EXCLUSIVE 0x00000020 - -/** - Queries a handle to determine if it supports a specified protocol. If the protocol is supported by the - handle, it opens the protocol on behalf of the calling agent. - - @param[in] Handle The handle for the protocol interface that is being opened. - @param[in] Protocol The published unique identifier of the protocol. - @param[out] Interface Supplies the address where a pointer to the corresponding Protocol - Interface is returned. - @param[in] AgentHandle The handle of the agent that is opening the protocol interface - specified by Protocol and Interface. - @param[in] ControllerHandle If the agent that is opening a protocol is a driver that follows the - UEFI Driver Model, then this parameter is the controller handle - that requires the protocol interface. If the agent does not follow - the UEFI Driver Model, then this parameter is optional and may - be NULL. - @param[in] Attributes The open mode of the protocol interface specified by Handle - and Protocol. - - @retval EFI_SUCCESS An item was added to the open list for the protocol interface, and the - protocol interface was returned in Interface. - @retval EFI_UNSUPPORTED Handle does not support Protocol. - @retval EFI_INVALID_PARAMETER One or more parameters are invalid. - @retval EFI_ACCESS_DENIED Required attributes can't be supported in current environment. - @retval EFI_ALREADY_STARTED Item on the open list already has requierd attributes whose agent - handle is the same as AgentHandle. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_OPEN_PROTOCOL)( - IN EFI_HANDLE Handle, - IN EFI_GUID *Protocol, - OUT VOID **Interface, OPTIONAL - IN EFI_HANDLE AgentHandle, - IN EFI_HANDLE ControllerHandle, - IN UINT32 Attributes - ); - - -/** - Closes a protocol on a handle that was opened using OpenProtocol(). - - @param[in] Handle The handle for the protocol interface that was previously opened - with OpenProtocol(), and is now being closed. - @param[in] Protocol The published unique identifier of the protocol. - @param[in] AgentHandle The handle of the agent that is closing the protocol interface. - @param[in] ControllerHandle If the agent that opened a protocol is a driver that follows the - UEFI Driver Model, then this parameter is the controller handle - that required the protocol interface. - - @retval EFI_SUCCESS The protocol instance was closed. - @retval EFI_INVALID_PARAMETER 1) Handle is NULL. - 2) AgentHandle is NULL. - 3) ControllerHandle is not NULL and ControllerHandle is not a valid EFI_HANDLE. - 4) Protocol is NULL. - @retval EFI_NOT_FOUND 1) Handle does not support the protocol specified by Protocol. - 2) The protocol interface specified by Handle and Protocol is not - currently open by AgentHandle and ControllerHandle. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_CLOSE_PROTOCOL)( - IN EFI_HANDLE Handle, - IN EFI_GUID *Protocol, - IN EFI_HANDLE AgentHandle, - IN EFI_HANDLE ControllerHandle - ); - -/// -/// EFI Oprn Protocol Information Entry -/// -typedef struct { - EFI_HANDLE AgentHandle; - EFI_HANDLE ControllerHandle; - UINT32 Attributes; - UINT32 OpenCount; -} EFI_OPEN_PROTOCOL_INFORMATION_ENTRY; - -/** - Retrieves the list of agents that currently have a protocol interface opened. - - @param[in] Handle The handle for the protocol interface that is being queried. - @param[in] Protocol The published unique identifier of the protocol. - @param[out] EntryBuffer A pointer to a buffer of open protocol information in the form of - EFI_OPEN_PROTOCOL_INFORMATION_ENTRY structures. - @param[out] EntryCount A pointer to the number of entries in EntryBuffer. - - @retval EFI_SUCCESS The open protocol information was returned in EntryBuffer, and the - number of entries was returned EntryCount. - @retval EFI_OUT_OF_RESOURCES There are not enough resources available to allocate EntryBuffer. - @retval EFI_NOT_FOUND Handle does not support the protocol specified by Protocol. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_OPEN_PROTOCOL_INFORMATION)( - IN EFI_HANDLE Handle, - IN EFI_GUID *Protocol, - OUT EFI_OPEN_PROTOCOL_INFORMATION_ENTRY **EntryBuffer, - OUT UINTN *EntryCount - ); - -/** - Retrieves the list of protocol interface GUIDs that are installed on a handle in a buffer allocated - from pool. - - @param[in] Handle The handle from which to retrieve the list of protocol interface - GUIDs. - @param[out] ProtocolBuffer A pointer to the list of protocol interface GUID pointers that are - installed on Handle. - @param[out] ProtocolBufferCount A pointer to the number of GUID pointers present in - ProtocolBuffer. - - @retval EFI_SUCCESS The list of protocol interface GUIDs installed on Handle was returned in - ProtocolBuffer. The number of protocol interface GUIDs was - returned in ProtocolBufferCount. - @retval EFI_OUT_OF_RESOURCES There is not enough pool memory to store the results. - @retval EFI_INVALID_PARAMETER Handle is NULL. - @retval EFI_INVALID_PARAMETER Handle is not a valid EFI_HANDLE. - @retval EFI_INVALID_PARAMETER ProtocolBuffer is NULL. - @retval EFI_INVALID_PARAMETER ProtocolBufferCount is NULL. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_PROTOCOLS_PER_HANDLE)( - IN EFI_HANDLE Handle, - OUT EFI_GUID ***ProtocolBuffer, - OUT UINTN *ProtocolBufferCount - ); - -/** - Creates an event that is to be signaled whenever an interface is installed for a specified protocol. - - @param[in] Protocol The numeric ID of the protocol for which the event is to be registered. - @param[in] Event Event that is to be signaled whenever a protocol interface is registered - for Protocol. - @param[out] Registration A pointer to a memory location to receive the registration value. - - @retval EFI_SUCCESS The notification event has been registered. - @retval EFI_OUT_OF_RESOURCES Space for the notification event could not be allocated. - @retval EFI_INVALID_PARAMETER Protocol is NULL. - @retval EFI_INVALID_PARAMETER Event is NULL. - @retval EFI_INVALID_PARAMETER Registration is NULL. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_REGISTER_PROTOCOL_NOTIFY)( - IN EFI_GUID *Protocol, - IN EFI_EVENT Event, - OUT VOID **Registration - ); - -/// -/// Enumeration of EFI Locate Search Types -/// -typedef enum { - /// - /// Retrieve all the handles in the handle database. - /// - AllHandles, - /// - /// Retrieve the next handle fron a RegisterProtocolNotify() event. - /// - ByRegisterNotify, - /// - /// Retrieve the set of handles from the handle database that support a - /// specified protocol. - /// - ByProtocol -} EFI_LOCATE_SEARCH_TYPE; - -/** - Returns an array of handles that support a specified protocol. - - @param[in] SearchType Specifies which handle(s) are to be returned. - @param[in] Protocol Specifies the protocol to search by. - @param[in] SearchKey Specifies the search key. - @param[in, out] BufferSize On input, the size in bytes of Buffer. On output, the size in bytes of - the array returned in Buffer (if the buffer was large enough) or the - size, in bytes, of the buffer needed to obtain the array (if the buffer was - not large enough). - @param[out] Buffer The buffer in which the array is returned. - - @retval EFI_SUCCESS The array of handles was returned. - @retval EFI_NOT_FOUND No handles match the search. - @retval EFI_BUFFER_TOO_SMALL The BufferSize is too small for the result. - @retval EFI_INVALID_PARAMETER SearchType is not a member of EFI_LOCATE_SEARCH_TYPE. - @retval EFI_INVALID_PARAMETER SearchType is ByRegisterNotify and SearchKey is NULL. - @retval EFI_INVALID_PARAMETER SearchType is ByProtocol and Protocol is NULL. - @retval EFI_INVALID_PARAMETER One or more matches are found and BufferSize is NULL. - @retval EFI_INVALID_PARAMETER BufferSize is large enough for the result and Buffer is NULL. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_LOCATE_HANDLE)( - IN EFI_LOCATE_SEARCH_TYPE SearchType, - IN EFI_GUID *Protocol, OPTIONAL - IN VOID *SearchKey, OPTIONAL - IN OUT UINTN *BufferSize, - OUT EFI_HANDLE *Buffer - ); - -/** - Locates the handle to a device on the device path that supports the specified protocol. - - @param[in] Protocol Specifies the protocol to search for. - @param[in, out] DevicePath On input, a pointer to a pointer to the device path. On output, the device - path pointer is modified to point to the remaining part of the device - path. - @param[out] Device A pointer to the returned device handle. - - @retval EFI_SUCCESS The resulting handle was returned. - @retval EFI_NOT_FOUND No handles match the search. - @retval EFI_INVALID_PARAMETER Protocol is NULL. - @retval EFI_INVALID_PARAMETER DevicePath is NULL. - @retval EFI_INVALID_PARAMETER A handle matched the search and Device is NULL. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_LOCATE_DEVICE_PATH)( - IN EFI_GUID *Protocol, - IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath, - OUT EFI_HANDLE *Device - ); - -/** - Adds, updates, or removes a configuration table entry from the EFI System Table. - - @param[in] Guid A pointer to the GUID for the entry to add, update, or remove. - @param[in] Table A pointer to the configuration table for the entry to add, update, or - remove. May be NULL. - - @retval EFI_SUCCESS The (Guid, Table) pair was added, updated, or removed. - @retval EFI_NOT_FOUND An attempt was made to delete a nonexistent entry. - @retval EFI_INVALID_PARAMETER Guid is NULL. - @retval EFI_OUT_OF_RESOURCES There is not enough memory available to complete the operation. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_INSTALL_CONFIGURATION_TABLE)( - IN EFI_GUID *Guid, - IN VOID *Table - ); - -/** - Returns an array of handles that support the requested protocol in a buffer allocated from pool. - - @param[in] SearchType Specifies which handle(s) are to be returned. - @param[in] Protocol Provides the protocol to search by. - This parameter is only valid for a SearchType of ByProtocol. - @param[in] SearchKey Supplies the search key depending on the SearchType. - @param[in, out] NoHandles The number of handles returned in Buffer. - @param[out] Buffer A pointer to the buffer to return the requested array of handles that - support Protocol. - - @retval EFI_SUCCESS The array of handles was returned in Buffer, and the number of - handles in Buffer was returned in NoHandles. - @retval EFI_NOT_FOUND No handles match the search. - @retval EFI_OUT_OF_RESOURCES There is not enough pool memory to store the matching results. - @retval EFI_INVALID_PARAMETER NoHandles is NULL. - @retval EFI_INVALID_PARAMETER Buffer is NULL. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_LOCATE_HANDLE_BUFFER)( - IN EFI_LOCATE_SEARCH_TYPE SearchType, - IN EFI_GUID *Protocol, OPTIONAL - IN VOID *SearchKey, OPTIONAL - IN OUT UINTN *NoHandles, - OUT EFI_HANDLE **Buffer - ); - -/** - Returns the first protocol instance that matches the given protocol. - - @param[in] Protocol Provides the protocol to search for. - @param[in] Registration Optional registration key returned from - RegisterProtocolNotify(). - @param[out] Interface On return, a pointer to the first interface that matches Protocol and - Registration. - - @retval EFI_SUCCESS A protocol instance matching Protocol was found and returned in - Interface. - @retval EFI_NOT_FOUND No protocol instances were found that match Protocol and - Registration. - @retval EFI_INVALID_PARAMETER Interface is NULL. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_LOCATE_PROTOCOL)( - IN EFI_GUID *Protocol, - IN VOID *Registration, OPTIONAL - OUT VOID **Interface - ); - -/// -/// EFI Capsule Block Descriptor -/// -typedef struct { - /// - /// Length in bytes of the data pointed to by DataBlock/ContinuationPointer. - /// - UINT64 Length; - union { - /// - /// Physical address of the data block. This member of the union is - /// used if Length is not equal to zero. - /// - EFI_PHYSICAL_ADDRESS DataBlock; - /// - /// Physical address of another block of - /// EFI_CAPSULE_BLOCK_DESCRIPTOR structures. This - /// member of the union is used if Length is equal to zero. If - /// ContinuationPointer is zero this entry represents the end of the list. - /// - EFI_PHYSICAL_ADDRESS ContinuationPointer; - } Union; -} EFI_CAPSULE_BLOCK_DESCRIPTOR; - -/// -/// EFI Capsule Header. -/// -typedef struct { - /// - /// A GUID that defines the contents of a capsule. - /// - EFI_GUID CapsuleGuid; - /// - /// The size of the capsule header. This may be larger than the size of - /// the EFI_CAPSULE_HEADER since CapsuleGuid may imply - /// extended header entries - /// - UINT32 HeaderSize; - /// - /// Bit-mapped list describing the capsule attributes. The Flag values - /// of 0x0000 - 0xFFFF are defined by CapsuleGuid. Flag values - /// of 0x10000 - 0xFFFFFFFF are defined by this specification - /// - UINT32 Flags; - /// - /// Size in bytes of the capsule. - /// - UINT32 CapsuleImageSize; -} EFI_CAPSULE_HEADER; - -/// -/// The EFI System Table entry must point to an array of capsules -/// that contain the same CapsuleGuid value. The array must be -/// prefixed by a UINT32 that represents the size of the array of capsules. -/// -typedef struct { - /// - /// the size of the array of capsules. - /// - UINT32 CapsuleArrayNumber; - /// - /// Point to an array of capsules that contain the same CapsuleGuid value. - /// - VOID* CapsulePtr[1]; -} EFI_CAPSULE_TABLE; - -#define CAPSULE_FLAGS_PERSIST_ACROSS_RESET 0x00010000 -#define CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE 0x00020000 -#define CAPSULE_FLAGS_INITIATE_RESET 0x00040000 - -/** - Passes capsules to the firmware with both virtual and physical mapping. Depending on the intended - consumption, the firmware may process the capsule immediately. If the payload should persist - across a system reset, the reset value returned from EFI_QueryCapsuleCapabilities must - be passed into ResetSystem() and will cause the capsule to be processed by the firmware as - part of the reset process. - - @param[in] CapsuleHeaderArray Virtual pointer to an array of virtual pointers to the capsules - being passed into update capsule. - @param[in] CapsuleCount Number of pointers to EFI_CAPSULE_HEADER in - CaspuleHeaderArray. - @param[in] ScatterGatherList Physical pointer to a set of - EFI_CAPSULE_BLOCK_DESCRIPTOR that describes the - location in physical memory of a set of capsules. - - @retval EFI_SUCCESS Valid capsule was passed. If - CAPSULE_FLAGS_PERSIT_ACROSS_RESET is not set, the - capsule has been successfully processed by the firmware. - @retval EFI_INVALID_PARAMETER CapsuleSize is NULL, or an incompatible set of flags were - set in the capsule header. - @retval EFI_INVALID_PARAMETER CapsuleCount is 0. - @retval EFI_DEVICE_ERROR The capsule update was started, but failed due to a device error. - @retval EFI_UNSUPPORTED The capsule type is not supported on this platform. - @retval EFI_OUT_OF_RESOURCES When ExitBootServices() has been previously called this error indicates the capsule - is compatible with this platform but is not capable of being submitted or processed - in runtime. The caller may resubmit the capsule prior to ExitBootServices(). - @retval EFI_OUT_OF_RESOURCES When ExitBootServices() has not been previously called then this error indicates - the capsule is compatible with this platform but there are insufficient resources to process. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_UPDATE_CAPSULE)( - IN EFI_CAPSULE_HEADER **CapsuleHeaderArray, - IN UINTN CapsuleCount, - IN EFI_PHYSICAL_ADDRESS ScatterGatherList OPTIONAL - ); - -/** - Returns if the capsule can be supported via UpdateCapsule(). - - @param[in] CapsuleHeaderArray Virtual pointer to an array of virtual pointers to the capsules - being passed into update capsule. - @param[in] CapsuleCount Number of pointers to EFI_CAPSULE_HEADER in - CaspuleHeaderArray. - @param[out] MaxiumCapsuleSize On output the maximum size that UpdateCapsule() can - support as an argument to UpdateCapsule() via - CapsuleHeaderArray and ScatterGatherList. - @param[out] ResetType Returns the type of reset required for the capsule update. - - @retval EFI_SUCCESS Valid answer returned. - @retval EFI_UNSUPPORTED The capsule type is not supported on this platform, and - MaximumCapsuleSize and ResetType are undefined. - @retval EFI_INVALID_PARAMETER MaximumCapsuleSize is NULL. - @retval EFI_OUT_OF_RESOURCES When ExitBootServices() has been previously called this error indicates the capsule - is compatible with this platform but is not capable of being submitted or processed - in runtime. The caller may resubmit the capsule prior to ExitBootServices(). - @retval EFI_OUT_OF_RESOURCES When ExitBootServices() has not been previously called then this error indicates - the capsule is compatible with this platform but there are insufficient resources to process. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_QUERY_CAPSULE_CAPABILITIES)( - IN EFI_CAPSULE_HEADER **CapsuleHeaderArray, - IN UINTN CapsuleCount, - OUT UINT64 *MaximumCapsuleSize, - OUT EFI_RESET_TYPE *ResetType - ); - -/** - Returns information about the EFI variables. - - @param[in] Attributes Attributes bitmask to specify the type of variables on - which to return information. - @param[out] MaximumVariableStorageSize On output the maximum size of the storage space - available for the EFI variables associated with the - attributes specified. - @param[out] RemainingVariableStorageSize Returns the remaining size of the storage space - available for the EFI variables associated with the - attributes specified. - @param[out] MaximumVariableSize Returns the maximum size of the individual EFI - variables associated with the attributes specified. - - @retval EFI_SUCCESS Valid answer returned. - @retval EFI_INVALID_PARAMETER An invalid combination of attribute bits was supplied - @retval EFI_UNSUPPORTED The attribute is not supported on this platform, and the - MaximumVariableStorageSize, - RemainingVariableStorageSize, MaximumVariableSize - are undefined. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_QUERY_VARIABLE_INFO)( - IN UINT32 Attributes, - OUT UINT64 *MaximumVariableStorageSize, - OUT UINT64 *RemainingVariableStorageSize, - OUT UINT64 *MaximumVariableSize - ); - -// -// Firmware should stop at a firmware user interface on next boot -// -#define EFI_OS_INDICATIONS_BOOT_TO_FW_UI 0x0000000000000001 -#define EFI_OS_INDICATIONS_TIMESTAMP_REVOCATION 0x0000000000000002 -#define EFI_OS_INDICATIONS_FILE_CAPSULE_DELIVERY_SUPPORTED 0x0000000000000004 -#define EFI_OS_INDICATIONS_FMP_CAPSULE_SUPPORTED 0x0000000000000008 -#define EFI_OS_INDICATIONS_CAPSULE_RESULT_VAR_SUPPORTED 0x0000000000000010 - -// -// EFI Runtime Services Table -// -#define EFI_SYSTEM_TABLE_SIGNATURE SIGNATURE_64 ('I','B','I',' ','S','Y','S','T') -#define EFI_2_50_SYSTEM_TABLE_REVISION ((2 << 16) | (50)) -#define EFI_2_40_SYSTEM_TABLE_REVISION ((2 << 16) | (40)) -#define EFI_2_31_SYSTEM_TABLE_REVISION ((2 << 16) | (31)) -#define EFI_2_30_SYSTEM_TABLE_REVISION ((2 << 16) | (30)) -#define EFI_2_20_SYSTEM_TABLE_REVISION ((2 << 16) | (20)) -#define EFI_2_10_SYSTEM_TABLE_REVISION ((2 << 16) | (10)) -#define EFI_2_00_SYSTEM_TABLE_REVISION ((2 << 16) | (00)) -#define EFI_1_10_SYSTEM_TABLE_REVISION ((1 << 16) | (10)) -#define EFI_1_02_SYSTEM_TABLE_REVISION ((1 << 16) | (02)) -#define EFI_SYSTEM_TABLE_REVISION EFI_2_50_SYSTEM_TABLE_REVISION -#define EFI_SPECIFICATION_VERSION EFI_SYSTEM_TABLE_REVISION - -#define EFI_RUNTIME_SERVICES_SIGNATURE SIGNATURE_64 ('R','U','N','T','S','E','R','V') -#define EFI_RUNTIME_SERVICES_REVISION EFI_SPECIFICATION_VERSION - -/// -/// EFI Runtime Services Table. -/// -typedef struct { - /// - /// The table header for the EFI Runtime Services Table. - /// - EFI_TABLE_HEADER Hdr; - - // - // Time Services - // - EFI_GET_TIME GetTime; - EFI_SET_TIME SetTime; - EFI_GET_WAKEUP_TIME GetWakeupTime; - EFI_SET_WAKEUP_TIME SetWakeupTime; - - // - // Virtual Memory Services - // - EFI_SET_VIRTUAL_ADDRESS_MAP SetVirtualAddressMap; - EFI_CONVERT_POINTER ConvertPointer; - - // - // Variable Services - // - EFI_GET_VARIABLE GetVariable; - EFI_GET_NEXT_VARIABLE_NAME GetNextVariableName; - EFI_SET_VARIABLE SetVariable; - - // - // Miscellaneous Services - // - EFI_GET_NEXT_HIGH_MONO_COUNT GetNextHighMonotonicCount; - EFI_RESET_SYSTEM ResetSystem; - - // - // UEFI 2.0 Capsule Services - // - EFI_UPDATE_CAPSULE UpdateCapsule; - EFI_QUERY_CAPSULE_CAPABILITIES QueryCapsuleCapabilities; - - // - // Miscellaneous UEFI 2.0 Service - // - EFI_QUERY_VARIABLE_INFO QueryVariableInfo; -} EFI_RUNTIME_SERVICES; - - -#define EFI_BOOT_SERVICES_SIGNATURE SIGNATURE_64 ('B','O','O','T','S','E','R','V') -#define EFI_BOOT_SERVICES_REVISION EFI_SPECIFICATION_VERSION - -/// -/// EFI Boot Services Table. -/// -typedef struct { - /// - /// The table header for the EFI Boot Services Table. - /// - EFI_TABLE_HEADER Hdr; - - // - // Task Priority Services - // - EFI_RAISE_TPL RaiseTPL; - EFI_RESTORE_TPL RestoreTPL; - - // - // Memory Services - // - EFI_ALLOCATE_PAGES AllocatePages; - EFI_FREE_PAGES FreePages; - EFI_GET_MEMORY_MAP GetMemoryMap; - EFI_ALLOCATE_POOL AllocatePool; - EFI_FREE_POOL FreePool; - - // - // Event & Timer Services - // - EFI_CREATE_EVENT CreateEvent; - EFI_SET_TIMER SetTimer; - EFI_WAIT_FOR_EVENT WaitForEvent; - EFI_SIGNAL_EVENT SignalEvent; - EFI_CLOSE_EVENT CloseEvent; - EFI_CHECK_EVENT CheckEvent; - - // - // Protocol Handler Services - // - EFI_INSTALL_PROTOCOL_INTERFACE InstallProtocolInterface; - EFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface; - EFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface; - EFI_HANDLE_PROTOCOL HandleProtocol; - VOID *Reserved; - EFI_REGISTER_PROTOCOL_NOTIFY RegisterProtocolNotify; - EFI_LOCATE_HANDLE LocateHandle; - EFI_LOCATE_DEVICE_PATH LocateDevicePath; - EFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable; - - // - // Image Services - // - EFI_IMAGE_LOAD LoadImage; - EFI_IMAGE_START StartImage; - EFI_EXIT Exit; - EFI_IMAGE_UNLOAD UnloadImage; - EFI_EXIT_BOOT_SERVICES ExitBootServices; - - // - // Miscellaneous Services - // - EFI_GET_NEXT_MONOTONIC_COUNT GetNextMonotonicCount; - EFI_STALL Stall; - EFI_SET_WATCHDOG_TIMER SetWatchdogTimer; - - // - // DriverSupport Services - // - EFI_CONNECT_CONTROLLER ConnectController; - EFI_DISCONNECT_CONTROLLER DisconnectController; - - // - // Open and Close Protocol Services - // - EFI_OPEN_PROTOCOL OpenProtocol; - EFI_CLOSE_PROTOCOL CloseProtocol; - EFI_OPEN_PROTOCOL_INFORMATION OpenProtocolInformation; - - // - // Library Services - // - EFI_PROTOCOLS_PER_HANDLE ProtocolsPerHandle; - EFI_LOCATE_HANDLE_BUFFER LocateHandleBuffer; - EFI_LOCATE_PROTOCOL LocateProtocol; - EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES InstallMultipleProtocolInterfaces; - EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES UninstallMultipleProtocolInterfaces; - - // - // 32-bit CRC Services - // - EFI_CALCULATE_CRC32 CalculateCrc32; - - // - // Miscellaneous Services - // - EFI_COPY_MEM CopyMem; - EFI_SET_MEM SetMem; - EFI_CREATE_EVENT_EX CreateEventEx; -} EFI_BOOT_SERVICES; - -/// -/// Contains a set of GUID/pointer pairs comprised of the ConfigurationTable field in the -/// EFI System Table. -/// -typedef struct { - /// - /// The 128-bit GUID value that uniquely identifies the system configuration table. - /// - EFI_GUID VendorGuid; - /// - /// A pointer to the table associated with VendorGuid. - /// - VOID *VendorTable; -} EFI_CONFIGURATION_TABLE; - -/// -/// EFI System Table -/// -typedef struct { - /// - /// The table header for the EFI System Table. - /// - EFI_TABLE_HEADER Hdr; - /// - /// A pointer to a null terminated string that identifies the vendor - /// that produces the system firmware for the platform. - /// - CHAR16 *FirmwareVendor; - /// - /// A firmware vendor specific value that identifies the revision - /// of the system firmware for the platform. - /// - UINT32 FirmwareRevision; - /// - /// The handle for the active console input device. This handle must support - /// EFI_SIMPLE_TEXT_INPUT_PROTOCOL and EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL. - /// - EFI_HANDLE ConsoleInHandle; - /// - /// A pointer to the EFI_SIMPLE_TEXT_INPUT_PROTOCOL interface that is - /// associated with ConsoleInHandle. - /// - EFI_SIMPLE_TEXT_INPUT_PROTOCOL *ConIn; - /// - /// The handle for the active console output device. - /// - EFI_HANDLE ConsoleOutHandle; - /// - /// A pointer to the EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL interface - /// that is associated with ConsoleOutHandle. - /// - EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ConOut; - /// - /// The handle for the active standard error console device. - /// This handle must support the EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL. - /// - EFI_HANDLE StandardErrorHandle; - /// - /// A pointer to the EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL interface - /// that is associated with StandardErrorHandle. - /// - EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *StdErr; - /// - /// A pointer to the EFI Runtime Services Table. - /// - EFI_RUNTIME_SERVICES *RuntimeServices; - /// - /// A pointer to the EFI Boot Services Table. - /// - EFI_BOOT_SERVICES *BootServices; - /// - /// The number of system configuration tables in the buffer ConfigurationTable. - /// - UINTN NumberOfTableEntries; - /// - /// A pointer to the system configuration tables. - /// The number of entries in the table is NumberOfTableEntries. - /// - EFI_CONFIGURATION_TABLE *ConfigurationTable; -} EFI_SYSTEM_TABLE; - -/** - This is the declaration of an EFI image entry point. This entry point is - the same for UEFI Applications, UEFI OS Loaders, and UEFI Drivers including - both device drivers and bus drivers. - - @param[in] ImageHandle The firmware allocated handle for the UEFI image. - @param[in] SystemTable A pointer to the EFI System Table. - - @retval EFI_SUCCESS The operation completed successfully. - @retval Others An unexpected error occurred. -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_IMAGE_ENTRY_POINT)( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable - ); - -// -// EFI Load Option. This data structure describes format of UEFI boot option variables. -// -// NOTE: EFI Load Option is a byte packed buffer of variable length fields. -// The first two fields have fixed length. They are declared as members of the -// EFI_LOAD_OPTION structure. All the other fields are variable length fields. -// They are listed in the comment block below for reference purposes. -// -#pragma pack(1) -typedef struct _EFI_LOAD_OPTION { - /// - /// The attributes for this load option entry. All unused bits must be zero - /// and are reserved by the UEFI specification for future growth. - /// - UINT32 Attributes; - /// - /// Length in bytes of the FilePathList. OptionalData starts at offset - /// sizeof(UINT32) + sizeof(UINT16) + StrSize(Description) + FilePathListLength - /// of the EFI_LOAD_OPTION descriptor. - /// - UINT16 FilePathListLength; - /// - /// The user readable description for the load option. - /// This field ends with a Null character. - /// - // CHAR16 Description[]; - /// - /// A packed array of UEFI device paths. The first element of the array is a - /// device path that describes the device and location of the Image for this - /// load option. The FilePathList[0] is specific to the device type. Other - /// device paths may optionally exist in the FilePathList, but their usage is - /// OSV specific. Each element in the array is variable length, and ends at - /// the device path end structure. Because the size of Description is - /// arbitrary, this data structure is not guaranteed to be aligned on a - /// natural boundary. This data structure may have to be copied to an aligned - /// natural boundary before it is used. - /// - // EFI_DEVICE_PATH_PROTOCOL FilePathList[]; - /// - /// The remaining bytes in the load option descriptor are a binary data buffer - /// that is passed to the loaded image. If the field is zero bytes long, a - /// NULL pointer is passed to the loaded image. The number of bytes in - /// OptionalData can be computed by subtracting the starting offset of - /// OptionalData from total size in bytes of the EFI_LOAD_OPTION. - /// - // UINT8 OptionalData[]; -} EFI_LOAD_OPTION; -#pragma pack() - -// -// EFI Load Options Attributes -// -#define LOAD_OPTION_ACTIVE 0x00000001 -#define LOAD_OPTION_FORCE_RECONNECT 0x00000002 -#define LOAD_OPTION_HIDDEN 0x00000008 -#define LOAD_OPTION_CATEGORY 0x00001F00 - -#define LOAD_OPTION_CATEGORY_BOOT 0x00000000 -#define LOAD_OPTION_CATEGORY_APP 0x00000100 - -#define EFI_BOOT_OPTION_SUPPORT_KEY 0x00000001 -#define EFI_BOOT_OPTION_SUPPORT_APP 0x00000002 -#define EFI_BOOT_OPTION_SUPPORT_SYSPREP 0x00000010 -#define EFI_BOOT_OPTION_SUPPORT_COUNT 0x00000300 - -/// -/// EFI Boot Key Data -/// -typedef union { - struct { - /// - /// Indicates the revision of the EFI_KEY_OPTION structure. This revision level should be 0. - /// - UINT32 Revision : 8; - /// - /// Either the left or right Shift keys must be pressed (1) or must not be pressed (0). - /// - UINT32 ShiftPressed : 1; - /// - /// Either the left or right Control keys must be pressed (1) or must not be pressed (0). - /// - UINT32 ControlPressed : 1; - /// - /// Either the left or right Alt keys must be pressed (1) or must not be pressed (0). - /// - UINT32 AltPressed : 1; - /// - /// Either the left or right Logo keys must be pressed (1) or must not be pressed (0). - /// - UINT32 LogoPressed : 1; - /// - /// The Menu key must be pressed (1) or must not be pressed (0). - /// - UINT32 MenuPressed : 1; - /// - /// The SysReq key must be pressed (1) or must not be pressed (0). - /// - UINT32 SysReqPressed : 1; - UINT32 Reserved : 16; - /// - /// Specifies the actual number of entries in EFI_KEY_OPTION.Keys, from 0-3. If - /// zero, then only the shift state is considered. If more than one, then the boot option will - /// only be launched if all of the specified keys are pressed with the same shift state. - /// - UINT32 InputKeyCount : 2; - } Options; - UINT32 PackedValue; -} EFI_BOOT_KEY_DATA; - -/// -/// EFI Key Option. -/// -#pragma pack(1) -typedef struct { - /// - /// Specifies options about how the key will be processed. - /// - EFI_BOOT_KEY_DATA KeyData; - /// - /// The CRC-32 which should match the CRC-32 of the entire EFI_LOAD_OPTION to - /// which BootOption refers. If the CRC-32s do not match this value, then this key - /// option is ignored. - /// - UINT32 BootOptionCrc; - /// - /// The Boot#### option which will be invoked if this key is pressed and the boot option - /// is active (LOAD_OPTION_ACTIVE is set). - /// - UINT16 BootOption; - /// - /// The key codes to compare against those returned by the - /// EFI_SIMPLE_TEXT_INPUT and EFI_SIMPLE_TEXT_INPUT_EX protocols. - /// The number of key codes (0-3) is specified by the EFI_KEY_CODE_COUNT field in KeyOptions. - /// - //EFI_INPUT_KEY Keys[]; -} EFI_KEY_OPTION; -#pragma pack() - -// -// EFI File location to boot from on removable media devices -// -#define EFI_REMOVABLE_MEDIA_FILE_NAME_IA32 L"\\EFI\\BOOT\\BOOTIA32.EFI" -#define EFI_REMOVABLE_MEDIA_FILE_NAME_IA64 L"\\EFI\\BOOT\\BOOTIA64.EFI" -#define EFI_REMOVABLE_MEDIA_FILE_NAME_X64 L"\\EFI\\BOOT\\BOOTX64.EFI" -#define EFI_REMOVABLE_MEDIA_FILE_NAME_ARM L"\\EFI\\BOOT\\BOOTARM.EFI" -#define EFI_REMOVABLE_MEDIA_FILE_NAME_AARCH64 L"\\EFI\\BOOT\\BOOTAA64.EFI" - -#if defined (MDE_CPU_IA32) - #define EFI_REMOVABLE_MEDIA_FILE_NAME EFI_REMOVABLE_MEDIA_FILE_NAME_IA32 -#elif defined (MDE_CPU_IPF) - #define EFI_REMOVABLE_MEDIA_FILE_NAME EFI_REMOVABLE_MEDIA_FILE_NAME_IA64 -#elif defined (MDE_CPU_X64) - #define EFI_REMOVABLE_MEDIA_FILE_NAME EFI_REMOVABLE_MEDIA_FILE_NAME_X64 -#elif defined (MDE_CPU_EBC) -#elif defined (MDE_CPU_ARM) - #define EFI_REMOVABLE_MEDIA_FILE_NAME EFI_REMOVABLE_MEDIA_FILE_NAME_ARM -#elif defined (MDE_CPU_AARCH64) - #define EFI_REMOVABLE_MEDIA_FILE_NAME EFI_REMOVABLE_MEDIA_FILE_NAME_AARCH64 -#else - #error Unknown Processor Type -#endif - -#include -#include -#include - -#endif -- cgit v1.2.3