1959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang/** @file 2959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang The firmware file related definitions in PI. 3959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 428fc9f4730bc36d2a7f74c9ccf270c009a7641b8Star ZengCopyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR> 5fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee LeahyThis program and the accompanying materials are licensed and made available under 6fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahythe terms and conditions of the BSD License that accompanies this distribution. 7af2dc6a70b9380d702bd0720cdb029d630c505e3myronporterThe full text of the license may be found at 8fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahyhttp://opensource.org/licenses/bsd-license.php. 9959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 10fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee LeahyTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 11fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee LeahyWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 12959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 13959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang @par Revision Reference: 1428fc9f4730bc36d2a7f74c9ccf270c009a7641b8Star Zeng PI Version 1.4. 15959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 16959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang**/ 17959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 180b3cac32f3e61717a1b53839bdeb11c3526020aaklu 19959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#ifndef __PI_FIRMWARE_FILE_H__ 20959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define __PI_FIRMWARE_FILE_H__ 21959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 2262d1e08bd1df645467fa34e972bc2f3cc9321222lgao#pragma pack(1) 23dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// 24dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// Used to verify the integrity of the file. 25fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// 26959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshangtypedef union { 27959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang struct { 281bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 291bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// The IntegrityCheck.Checksum.Header field is an 8-bit checksum of the file 301bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// header. The State and IntegrityCheck.Checksum.File fields are assumed 311bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// to be zero and the checksum is calculated such that the entire header sums to zero. 321bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 33959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang UINT8 Header; 341bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 351bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// If the FFS_ATTRIB_CHECKSUM (see definition below) bit of the Attributes 361bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// field is set to one, the IntegrityCheck.Checksum.File field is an 8-bit 37bf099261d94f208a78d1bc4d71243ea3d0afd5e1lzeng /// checksum of the file data. 381bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// If the FFS_ATTRIB_CHECKSUM bit of the Attributes field is cleared to zero, 391bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// the IntegrityCheck.Checksum.File field must be initialized with a value of 402bf0d83532cd830560fd6a7e9ac0409b08f1e7e7lgao /// 0xAA. The IntegrityCheck.Checksum.File field is valid any time the 411bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// EFI_FILE_DATA_VALID bit is set in the State field. 421bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 43959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang UINT8 File; 44959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang } Checksum; 451bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 461bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// This is the full 16 bits of the IntegrityCheck field. 471bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 48959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang UINT16 Checksum16; 49959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang} EFI_FFS_INTEGRITY_CHECK; 50959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 512bf0d83532cd830560fd6a7e9ac0409b08f1e7e7lgao/// 522bf0d83532cd830560fd6a7e9ac0409b08f1e7e7lgao/// FFS_FIXED_CHECKSUM is the checksum value used when the 53af2dc6a70b9380d702bd0720cdb029d630c505e3myronporter/// FFS_ATTRIB_CHECKSUM attribute bit is clear. 542bf0d83532cd830560fd6a7e9ac0409b08f1e7e7lgao/// 552bf0d83532cd830560fd6a7e9ac0409b08f1e7e7lgao#define FFS_FIXED_CHECKSUM 0xAA 562bf0d83532cd830560fd6a7e9ac0409b08f1e7e7lgao 57959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshangtypedef UINT8 EFI_FV_FILETYPE; 58959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshangtypedef UINT8 EFI_FFS_FILE_ATTRIBUTES; 59959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshangtypedef UINT8 EFI_FFS_FILE_STATE; 60959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 61dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// 62dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// File Types Definitions 63fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// 64d44d2087c516638c8c2fc2a9cdd16e948b21864eAJFISH#define EFI_FV_FILETYPE_ALL 0x00 658fb30482e78d46c1bf5e3ec3eddf897320cd0b70yshang#define EFI_FV_FILETYPE_RAW 0x01 668fb30482e78d46c1bf5e3ec3eddf897320cd0b70yshang#define EFI_FV_FILETYPE_FREEFORM 0x02 678fb30482e78d46c1bf5e3ec3eddf897320cd0b70yshang#define EFI_FV_FILETYPE_SECURITY_CORE 0x03 688fb30482e78d46c1bf5e3ec3eddf897320cd0b70yshang#define EFI_FV_FILETYPE_PEI_CORE 0x04 698fb30482e78d46c1bf5e3ec3eddf897320cd0b70yshang#define EFI_FV_FILETYPE_DXE_CORE 0x05 708fb30482e78d46c1bf5e3ec3eddf897320cd0b70yshang#define EFI_FV_FILETYPE_PEIM 0x06 718fb30482e78d46c1bf5e3ec3eddf897320cd0b70yshang#define EFI_FV_FILETYPE_DRIVER 0x07 728fb30482e78d46c1bf5e3ec3eddf897320cd0b70yshang#define EFI_FV_FILETYPE_COMBINED_PEIM_DRIVER 0x08 738fb30482e78d46c1bf5e3ec3eddf897320cd0b70yshang#define EFI_FV_FILETYPE_APPLICATION 0x09 7495ba3c4150701418aa0806597fdc2e3099b62f79rsun#define EFI_FV_FILETYPE_SMM 0x0A 758fb30482e78d46c1bf5e3ec3eddf897320cd0b70yshang#define EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE 0x0B 7695ba3c4150701418aa0806597fdc2e3099b62f79rsun#define EFI_FV_FILETYPE_COMBINED_SMM_DXE 0x0C 7795ba3c4150701418aa0806597fdc2e3099b62f79rsun#define EFI_FV_FILETYPE_SMM_CORE 0x0D 788fb30482e78d46c1bf5e3ec3eddf897320cd0b70yshang#define EFI_FV_FILETYPE_OEM_MIN 0xc0 798fb30482e78d46c1bf5e3ec3eddf897320cd0b70yshang#define EFI_FV_FILETYPE_OEM_MAX 0xdf 808fb30482e78d46c1bf5e3ec3eddf897320cd0b70yshang#define EFI_FV_FILETYPE_DEBUG_MIN 0xe0 818fb30482e78d46c1bf5e3ec3eddf897320cd0b70yshang#define EFI_FV_FILETYPE_DEBUG_MAX 0xef 828fb30482e78d46c1bf5e3ec3eddf897320cd0b70yshang#define EFI_FV_FILETYPE_FFS_MIN 0xf0 838fb30482e78d46c1bf5e3ec3eddf897320cd0b70yshang#define EFI_FV_FILETYPE_FFS_MAX 0xff 848fb30482e78d46c1bf5e3ec3eddf897320cd0b70yshang#define EFI_FV_FILETYPE_FFS_PAD 0xf0 85fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// 86dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// FFS File Attributes. 87fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// 883d4d4cfaa07a7a54a9281689702d03f418699b51klu#define FFS_ATTRIB_LARGE_FILE 0x01 89959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define FFS_ATTRIB_FIXED 0x04 90959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define FFS_ATTRIB_DATA_ALIGNMENT 0x38 91959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define FFS_ATTRIB_CHECKSUM 0x40 92959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 93fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// 94dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// FFS File State Bits. 95fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// 96959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define EFI_FILE_HEADER_CONSTRUCTION 0x01 97959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define EFI_FILE_HEADER_VALID 0x02 98959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define EFI_FILE_DATA_VALID 0x04 99959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define EFI_FILE_MARKED_FOR_UPDATE 0x08 100959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define EFI_FILE_DELETED 0x10 101959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define EFI_FILE_HEADER_INVALID 0x20 102959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 103959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 104dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// 105fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// Each file begins with the header that describe the 106dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// contents and state of the files. 107fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// 108959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshangtypedef struct { 1091bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 1101bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// This GUID is the file name. It is used to uniquely identify the file. 1111bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 112959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang EFI_GUID Name; 1131bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 1141bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// Used to verify the integrity of the file. 1151bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 116959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang EFI_FFS_INTEGRITY_CHECK IntegrityCheck; 1171bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 1181bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// Identifies the type of file. 1191bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 120959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang EFI_FV_FILETYPE Type; 1211bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 1221bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// Declares various file attribute bits. 1231bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 124959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang EFI_FFS_FILE_ATTRIBUTES Attributes; 1251bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 1261bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// The length of the file in bytes, including the FFS header. 1271bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 128959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang UINT8 Size[3]; 1291bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 1301bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// Used to track the state of the file throughout the life of the file from creation to deletion. 1311bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 132959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang EFI_FFS_FILE_STATE State; 133959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang} EFI_FFS_FILE_HEADER; 134959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 1353d4d4cfaa07a7a54a9281689702d03f418699b51klutypedef struct { 1363d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 1373d4d4cfaa07a7a54a9281689702d03f418699b51klu /// This GUID is the file name. It is used to uniquely identify the file. There may be only 1383d4d4cfaa07a7a54a9281689702d03f418699b51klu /// one instance of a file with the file name GUID of Name in any given firmware 1393d4d4cfaa07a7a54a9281689702d03f418699b51klu /// volume, except if the file type is EFI_FV_FILETYPE_FFS_PAD. 1403d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 1413d4d4cfaa07a7a54a9281689702d03f418699b51klu EFI_GUID Name; 142fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy 1433d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 1443d4d4cfaa07a7a54a9281689702d03f418699b51klu /// Used to verify the integrity of the file. 145fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy /// 1463d4d4cfaa07a7a54a9281689702d03f418699b51klu EFI_FFS_INTEGRITY_CHECK IntegrityCheck; 147fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy 1483d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 1493d4d4cfaa07a7a54a9281689702d03f418699b51klu /// Identifies the type of file. 150fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy /// 1513d4d4cfaa07a7a54a9281689702d03f418699b51klu EFI_FV_FILETYPE Type; 152fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy 1533d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 1543d4d4cfaa07a7a54a9281689702d03f418699b51klu /// Declares various file attribute bits. 155fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy /// 1563d4d4cfaa07a7a54a9281689702d03f418699b51klu EFI_FFS_FILE_ATTRIBUTES Attributes; 157fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy 1583d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 1593d4d4cfaa07a7a54a9281689702d03f418699b51klu /// The length of the file in bytes, including the FFS header. 1603d4d4cfaa07a7a54a9281689702d03f418699b51klu /// The length of the file data is either (Size - sizeof(EFI_FFS_FILE_HEADER)). This calculation means a 1613d4d4cfaa07a7a54a9281689702d03f418699b51klu /// zero-length file has a Size of 24 bytes, which is sizeof(EFI_FFS_FILE_HEADER). 1623d4d4cfaa07a7a54a9281689702d03f418699b51klu /// Size is not required to be a multiple of 8 bytes. Given a file F, the next file header is 1633d4d4cfaa07a7a54a9281689702d03f418699b51klu /// located at the next 8-byte aligned firmware volume offset following the last byte of the file F. 1643d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 1653d4d4cfaa07a7a54a9281689702d03f418699b51klu UINT8 Size[3]; 166fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy 1673d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 1683d4d4cfaa07a7a54a9281689702d03f418699b51klu /// Used to track the state of the file throughout the life of the file from creation to deletion. 1693d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 1703d4d4cfaa07a7a54a9281689702d03f418699b51klu EFI_FFS_FILE_STATE State; 171fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy 1723d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 173af2dc6a70b9380d702bd0720cdb029d630c505e3myronporter /// If FFS_ATTRIB_LARGE_FILE is set in Attributes, then ExtendedSize exists and Size must be set to zero. 1743d4d4cfaa07a7a54a9281689702d03f418699b51klu /// If FFS_ATTRIB_LARGE_FILE is not set then EFI_FFS_FILE_HEADER is used. 1753d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 17628fc9f4730bc36d2a7f74c9ccf270c009a7641b8Star Zeng UINT64 ExtendedSize; 1773d4d4cfaa07a7a54a9281689702d03f418699b51klu} EFI_FFS_FILE_HEADER2; 178959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 17930f001ca5f08974c8d5a5483f8b8e1a4f46a1025lzeng#define IS_FFS_FILE2(FfsFileHeaderPtr) \ 18030f001ca5f08974c8d5a5483f8b8e1a4f46a1025lzeng (((((EFI_FFS_FILE_HEADER *) (UINTN) FfsFileHeaderPtr)->Attributes) & FFS_ATTRIB_LARGE_FILE) == FFS_ATTRIB_LARGE_FILE) 18130f001ca5f08974c8d5a5483f8b8e1a4f46a1025lzeng 18230f001ca5f08974c8d5a5483f8b8e1a4f46a1025lzeng#define FFS_FILE_SIZE(FfsFileHeaderPtr) \ 18330f001ca5f08974c8d5a5483f8b8e1a4f46a1025lzeng ((UINT32) (*((UINT32 *) ((EFI_FFS_FILE_HEADER *) (UINTN) FfsFileHeaderPtr)->Size) & 0x00ffffff)) 18430f001ca5f08974c8d5a5483f8b8e1a4f46a1025lzeng 18530f001ca5f08974c8d5a5483f8b8e1a4f46a1025lzeng#define FFS_FILE2_SIZE(FfsFileHeaderPtr) \ 18628fc9f4730bc36d2a7f74c9ccf270c009a7641b8Star Zeng ((UINT32) (((EFI_FFS_FILE_HEADER2 *) (UINTN) FfsFileHeaderPtr)->ExtendedSize)) 18730f001ca5f08974c8d5a5483f8b8e1a4f46a1025lzeng 188959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshangtypedef UINT8 EFI_SECTION_TYPE; 189959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 190dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// 191af2dc6a70b9380d702bd0720cdb029d630c505e3myronporter/// Pseudo type. It is used as a wild card when retrieving sections. 192af2dc6a70b9380d702bd0720cdb029d630c505e3myronporter/// The section type EFI_SECTION_ALL matches all section types. 193dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// 194959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define EFI_SECTION_ALL 0x00 195959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 196dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// 197af2dc6a70b9380d702bd0720cdb029d630c505e3myronporter/// Encapsulation section Type values. 198dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// 199959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define EFI_SECTION_COMPRESSION 0x01 200959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 201959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define EFI_SECTION_GUID_DEFINED 0x02 202959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 2033d4d4cfaa07a7a54a9281689702d03f418699b51klu#define EFI_SECTION_DISPOSABLE 0x03 2043d4d4cfaa07a7a54a9281689702d03f418699b51klu 205dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// 206af2dc6a70b9380d702bd0720cdb029d630c505e3myronporter/// Leaf section Type values. 207dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// 208959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define EFI_SECTION_PE32 0x10 209959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define EFI_SECTION_PIC 0x11 210959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define EFI_SECTION_TE 0x12 211959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define EFI_SECTION_DXE_DEPEX 0x13 212959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define EFI_SECTION_VERSION 0x14 213959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define EFI_SECTION_USER_INTERFACE 0x15 214959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define EFI_SECTION_COMPATIBILITY16 0x16 215959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define EFI_SECTION_FIRMWARE_VOLUME_IMAGE 0x17 216959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define EFI_SECTION_FREEFORM_SUBTYPE_GUID 0x18 217959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define EFI_SECTION_RAW 0x19 218959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define EFI_SECTION_PEI_DEPEX 0x1B 2193d4d4cfaa07a7a54a9281689702d03f418699b51klu#define EFI_SECTION_SMM_DEPEX 0x1C 220959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 221dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// 222af2dc6a70b9380d702bd0720cdb029d630c505e3myronporter/// Common section header. 223fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// 224959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshangtypedef struct { 2251bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 226fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy /// A 24-bit unsigned integer that contains the total size of the section in bytes, 2271bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// including the EFI_COMMON_SECTION_HEADER. 2281bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 229959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang UINT8 Size[3]; 230959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang EFI_SECTION_TYPE Type; 2311bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 2321bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// Declares the section type. 2331bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 234959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang} EFI_COMMON_SECTION_HEADER; 235959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 2363d4d4cfaa07a7a54a9281689702d03f418699b51klutypedef struct { 2373d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 238fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy /// A 24-bit unsigned integer that contains the total size of the section in bytes, 2393d4d4cfaa07a7a54a9281689702d03f418699b51klu /// including the EFI_COMMON_SECTION_HEADER. 2403d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 2413d4d4cfaa07a7a54a9281689702d03f418699b51klu UINT8 Size[3]; 242fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy 2433d4d4cfaa07a7a54a9281689702d03f418699b51klu EFI_SECTION_TYPE Type; 244fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy 2453d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 246af2dc6a70b9380d702bd0720cdb029d630c505e3myronporter /// If Size is 0xFFFFFF, then ExtendedSize contains the size of the section. If 247fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy /// Size is not equal to 0xFFFFFF, then this field does not exist. 2483d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 2493d4d4cfaa07a7a54a9281689702d03f418699b51klu UINT32 ExtendedSize; 2503d4d4cfaa07a7a54a9281689702d03f418699b51klu} EFI_COMMON_SECTION_HEADER2; 2513d4d4cfaa07a7a54a9281689702d03f418699b51klu 252dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// 253fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// Leaf section type that contains an 254dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// IA-32 16-bit executable image. 255fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// 2563d4d4cfaa07a7a54a9281689702d03f418699b51klutypedef EFI_COMMON_SECTION_HEADER EFI_COMPATIBILITY16_SECTION; 2573d4d4cfaa07a7a54a9281689702d03f418699b51klutypedef EFI_COMMON_SECTION_HEADER2 EFI_COMPATIBILITY16_SECTION2; 258959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 259dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// 260dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// CompressionType of EFI_COMPRESSION_SECTION. 261fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// 262959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define EFI_NOT_COMPRESSED 0x00 263959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define EFI_STANDARD_COMPRESSION 0x01 264dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// 265fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// An encapsulation section type in which the 266dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// section data is compressed. 267fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// 268959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshangtypedef struct { 2691bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 2701bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// Usual common section header. CommonHeader.Type = EFI_SECTION_COMPRESSION. 2711bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 27200edb2182b6203a037219c29317ab6362c78b422AJFISH EFI_COMMON_SECTION_HEADER CommonHeader; 2731bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 274af2dc6a70b9380d702bd0720cdb029d630c505e3myronporter /// The UINT32 that indicates the size of the section data after decompression. 2751bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 27600edb2182b6203a037219c29317ab6362c78b422AJFISH UINT32 UncompressedLength; 2771bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 2781bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// Indicates which compression algorithm is used. 2791bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 28000edb2182b6203a037219c29317ab6362c78b422AJFISH UINT8 CompressionType; 281959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang} EFI_COMPRESSION_SECTION; 282959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 2833d4d4cfaa07a7a54a9281689702d03f418699b51klutypedef struct { 2843d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 2853d4d4cfaa07a7a54a9281689702d03f418699b51klu /// Usual common section header. CommonHeader.Type = EFI_SECTION_COMPRESSION. 2863d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 2873d4d4cfaa07a7a54a9281689702d03f418699b51klu EFI_COMMON_SECTION_HEADER2 CommonHeader; 2883d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 2893d4d4cfaa07a7a54a9281689702d03f418699b51klu /// UINT32 that indicates the size of the section data after decompression. 2903d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 2913d4d4cfaa07a7a54a9281689702d03f418699b51klu UINT32 UncompressedLength; 2923d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 2933d4d4cfaa07a7a54a9281689702d03f418699b51klu /// Indicates which compression algorithm is used. 2943d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 2953d4d4cfaa07a7a54a9281689702d03f418699b51klu UINT8 CompressionType; 2963d4d4cfaa07a7a54a9281689702d03f418699b51klu} EFI_COMPRESSION_SECTION2; 2973d4d4cfaa07a7a54a9281689702d03f418699b51klu 298dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// 29973d622ed1610963b4a830bb1178abd5d6f7287aeklu/// An encapsulation section type in which the section data is disposable. 30073d622ed1610963b4a830bb1178abd5d6f7287aeklu/// A disposable section is an encapsulation section in which the section data may be disposed of during 30173d622ed1610963b4a830bb1178abd5d6f7287aeklu/// the process of creating or updating a firmware image without significant impact on the usefulness of 30273d622ed1610963b4a830bb1178abd5d6f7287aeklu/// the file. The Type field in the section header is set to EFI_SECTION_DISPOSABLE. This 30373d622ed1610963b4a830bb1178abd5d6f7287aeklu/// allows optional or descriptive data to be included with the firmware file which can be removed in 30473d622ed1610963b4a830bb1178abd5d6f7287aeklu/// order to conserve space. The contents of this section are implementation specific, but might contain 30573d622ed1610963b4a830bb1178abd5d6f7287aeklu/// debug data or detailed integration instructions. 30673d622ed1610963b4a830bb1178abd5d6f7287aeklu/// 3073d4d4cfaa07a7a54a9281689702d03f418699b51klutypedef EFI_COMMON_SECTION_HEADER EFI_DISPOSABLE_SECTION; 3083d4d4cfaa07a7a54a9281689702d03f418699b51klutypedef EFI_COMMON_SECTION_HEADER2 EFI_DISPOSABLE_SECTION2; 30973d622ed1610963b4a830bb1178abd5d6f7287aeklu 31073d622ed1610963b4a830bb1178abd5d6f7287aeklu/// 311af2dc6a70b9380d702bd0720cdb029d630c505e3myronporter/// The leaf section which could be used to determine the dispatch order of DXEs. 312fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// 3133d4d4cfaa07a7a54a9281689702d03f418699b51klutypedef EFI_COMMON_SECTION_HEADER EFI_DXE_DEPEX_SECTION; 3143d4d4cfaa07a7a54a9281689702d03f418699b51klutypedef EFI_COMMON_SECTION_HEADER2 EFI_DXE_DEPEX_SECTION2; 315959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 316dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// 317af2dc6a70b9380d702bd0720cdb029d630c505e3myronporter/// The leaf section which contains a PI FV. 318fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// 3193d4d4cfaa07a7a54a9281689702d03f418699b51klutypedef EFI_COMMON_SECTION_HEADER EFI_FIRMWARE_VOLUME_IMAGE_SECTION; 3203d4d4cfaa07a7a54a9281689702d03f418699b51klutypedef EFI_COMMON_SECTION_HEADER2 EFI_FIRMWARE_VOLUME_IMAGE_SECTION2; 321959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 322dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// 323af2dc6a70b9380d702bd0720cdb029d630c505e3myronporter/// The leaf section which contains a single GUID. 324fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// 325959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshangtypedef struct { 3261bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 3271bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// Common section header. CommonHeader.Type = EFI_SECTION_FREEFORM_SUBTYPE_GUID. 3281bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 32900edb2182b6203a037219c29317ab6362c78b422AJFISH EFI_COMMON_SECTION_HEADER CommonHeader; 3301bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 3311bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// This GUID is defined by the creator of the file. It is a vendor-defined file type. 3321bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 33300edb2182b6203a037219c29317ab6362c78b422AJFISH EFI_GUID SubTypeGuid; 334959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang} EFI_FREEFORM_SUBTYPE_GUID_SECTION; 335959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 3363d4d4cfaa07a7a54a9281689702d03f418699b51klutypedef struct { 3373d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 338af2dc6a70b9380d702bd0720cdb029d630c505e3myronporter /// The common section header. CommonHeader.Type = EFI_SECTION_FREEFORM_SUBTYPE_GUID. 3393d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 3403d4d4cfaa07a7a54a9281689702d03f418699b51klu EFI_COMMON_SECTION_HEADER2 CommonHeader; 3413d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 3423d4d4cfaa07a7a54a9281689702d03f418699b51klu /// This GUID is defined by the creator of the file. It is a vendor-defined file type. 343fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy /// 3443d4d4cfaa07a7a54a9281689702d03f418699b51klu EFI_GUID SubTypeGuid; 3453d4d4cfaa07a7a54a9281689702d03f418699b51klu} EFI_FREEFORM_SUBTYPE_GUID_SECTION2; 3463d4d4cfaa07a7a54a9281689702d03f418699b51klu 347dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// 348af2dc6a70b9380d702bd0720cdb029d630c505e3myronporter/// Attributes of EFI_GUID_DEFINED_SECTION. 349fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// 350959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define EFI_GUIDED_SECTION_PROCESSING_REQUIRED 0x01 351959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#define EFI_GUIDED_SECTION_AUTH_STATUS_VALID 0x02 352dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// 353af2dc6a70b9380d702bd0720cdb029d630c505e3myronporter/// The leaf section which is encapsulation defined by specific GUID. 354fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// 355959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshangtypedef struct { 3561bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 357af2dc6a70b9380d702bd0720cdb029d630c505e3myronporter /// The common section header. CommonHeader.Type = EFI_SECTION_GUID_DEFINED. 3581bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 35900edb2182b6203a037219c29317ab6362c78b422AJFISH EFI_COMMON_SECTION_HEADER CommonHeader; 3601bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 361af2dc6a70b9380d702bd0720cdb029d630c505e3myronporter /// The GUID that defines the format of the data that follows. It is a vendor-defined section type. 3621bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 36300edb2182b6203a037219c29317ab6362c78b422AJFISH EFI_GUID SectionDefinitionGuid; 3641bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 3651bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// Contains the offset in bytes from the beginning of the common header to the first byte of the data. 3661bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 36700edb2182b6203a037219c29317ab6362c78b422AJFISH UINT16 DataOffset; 3681bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 369af2dc6a70b9380d702bd0720cdb029d630c505e3myronporter /// The bit field that declares some specific characteristics of the section contents. 3701bf793701b3af2a002bd5cd11a1cc7c02cdb141dlgao /// 37100edb2182b6203a037219c29317ab6362c78b422AJFISH UINT16 Attributes; 372959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang} EFI_GUID_DEFINED_SECTION; 373959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 3743d4d4cfaa07a7a54a9281689702d03f418699b51klutypedef struct { 3753d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 376af2dc6a70b9380d702bd0720cdb029d630c505e3myronporter /// The common section header. CommonHeader.Type = EFI_SECTION_GUID_DEFINED. 3773d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 3783d4d4cfaa07a7a54a9281689702d03f418699b51klu EFI_COMMON_SECTION_HEADER2 CommonHeader; 3793d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 380af2dc6a70b9380d702bd0720cdb029d630c505e3myronporter /// The GUID that defines the format of the data that follows. It is a vendor-defined section type. 381fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy /// 3823d4d4cfaa07a7a54a9281689702d03f418699b51klu EFI_GUID SectionDefinitionGuid; 3833d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 3843d4d4cfaa07a7a54a9281689702d03f418699b51klu /// Contains the offset in bytes from the beginning of the common header to the first byte of the data. 385fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy /// 3863d4d4cfaa07a7a54a9281689702d03f418699b51klu UINT16 DataOffset; 3873d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 388af2dc6a70b9380d702bd0720cdb029d630c505e3myronporter /// The bit field that declares some specific characteristics of the section contents. 389fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy /// 3903d4d4cfaa07a7a54a9281689702d03f418699b51klu UINT16 Attributes; 3913d4d4cfaa07a7a54a9281689702d03f418699b51klu} EFI_GUID_DEFINED_SECTION2; 3923d4d4cfaa07a7a54a9281689702d03f418699b51klu 393dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// 394af2dc6a70b9380d702bd0720cdb029d630c505e3myronporter/// The leaf section which contains PE32+ image. 395fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// 3963d4d4cfaa07a7a54a9281689702d03f418699b51klutypedef EFI_COMMON_SECTION_HEADER EFI_PE32_SECTION; 3973d4d4cfaa07a7a54a9281689702d03f418699b51klutypedef EFI_COMMON_SECTION_HEADER2 EFI_PE32_SECTION2; 398959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 399dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// 400af2dc6a70b9380d702bd0720cdb029d630c505e3myronporter/// The leaf section used to determine the dispatch order of PEIMs. 401fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// 4023d4d4cfaa07a7a54a9281689702d03f418699b51klutypedef EFI_COMMON_SECTION_HEADER EFI_PEI_DEPEX_SECTION; 4033d4d4cfaa07a7a54a9281689702d03f418699b51klutypedef EFI_COMMON_SECTION_HEADER2 EFI_PEI_DEPEX_SECTION2; 4043d4d4cfaa07a7a54a9281689702d03f418699b51klu 4053d4d4cfaa07a7a54a9281689702d03f418699b51klu/// 4063d4d4cfaa07a7a54a9281689702d03f418699b51klu/// A leaf section type that contains a position-independent-code (PIC) image. 4073d4d4cfaa07a7a54a9281689702d03f418699b51klu/// A PIC image section is a leaf section that contains a position-independent-code (PIC) image. 4083d4d4cfaa07a7a54a9281689702d03f418699b51klu/// In addition to normal PE32+ images that contain relocation information, PEIM executables may be 4093d4d4cfaa07a7a54a9281689702d03f418699b51klu/// PIC and are referred to as PIC images. A PIC image is the same as a PE32+ image except that all 4103d4d4cfaa07a7a54a9281689702d03f418699b51klu/// relocation information has been stripped from the image and the image can be moved and will 4113d4d4cfaa07a7a54a9281689702d03f418699b51klu/// execute correctly without performing any relocation or other fix-ups. EFI_PIC_SECTION2 must 4123d4d4cfaa07a7a54a9281689702d03f418699b51klu/// be used if the section is 16MB or larger. 4133d4d4cfaa07a7a54a9281689702d03f418699b51klu/// 4143d4d4cfaa07a7a54a9281689702d03f418699b51klutypedef EFI_COMMON_SECTION_HEADER EFI_PIC_SECTION; 4153d4d4cfaa07a7a54a9281689702d03f418699b51klutypedef EFI_COMMON_SECTION_HEADER2 EFI_PIC_SECTION2; 416959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 417dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// 418af2dc6a70b9380d702bd0720cdb029d630c505e3myronporter/// The leaf section which constains the position-independent-code image. 419fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// 4203d4d4cfaa07a7a54a9281689702d03f418699b51klutypedef EFI_COMMON_SECTION_HEADER EFI_TE_SECTION; 4213d4d4cfaa07a7a54a9281689702d03f418699b51klutypedef EFI_COMMON_SECTION_HEADER2 EFI_TE_SECTION2; 422959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 423dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// 424af2dc6a70b9380d702bd0720cdb029d630c505e3myronporter/// The leaf section which contains an array of zero or more bytes. 425fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// 4263d4d4cfaa07a7a54a9281689702d03f418699b51klutypedef EFI_COMMON_SECTION_HEADER EFI_RAW_SECTION; 4273d4d4cfaa07a7a54a9281689702d03f418699b51klutypedef EFI_COMMON_SECTION_HEADER2 EFI_RAW_SECTION2; 4283d4d4cfaa07a7a54a9281689702d03f418699b51klu 429fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// 4303d4d4cfaa07a7a54a9281689702d03f418699b51klu/// The SMM dependency expression section is a leaf section that contains a dependency expression that 4313d4d4cfaa07a7a54a9281689702d03f418699b51klu/// is used to determine the dispatch order for SMM drivers. Before the SMRAM invocation of the 4323d4d4cfaa07a7a54a9281689702d03f418699b51klu/// SMM driver's entry point, this dependency expression must evaluate to TRUE. See the Platform 433af2dc6a70b9380d702bd0720cdb029d630c505e3myronporter/// Initialization Specification, Volume 2, for details regarding the format of the dependency expression. 4343d4d4cfaa07a7a54a9281689702d03f418699b51klu/// The dependency expression may refer to protocols installed in either the UEFI or the SMM protocol 4353d4d4cfaa07a7a54a9281689702d03f418699b51klu/// database. EFI_SMM_DEPEX_SECTION2 must be used if the section is 16MB or larger. 436fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// 4373d4d4cfaa07a7a54a9281689702d03f418699b51klutypedef EFI_COMMON_SECTION_HEADER EFI_SMM_DEPEX_SECTION; 4383d4d4cfaa07a7a54a9281689702d03f418699b51klutypedef EFI_COMMON_SECTION_HEADER2 EFI_SMM_DEPEX_SECTION2; 439959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 440dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// 441fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// The leaf section which contains a unicode string that 442dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// is human readable file name. 443fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// 444959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshangtypedef struct { 44500edb2182b6203a037219c29317ab6362c78b422AJFISH EFI_COMMON_SECTION_HEADER CommonHeader; 446959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 447dc53faa3a2059c75483fe7e5756d2da11fad598cklu /// 448dc53faa3a2059c75483fe7e5756d2da11fad598cklu /// Array of unicode string. 449fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy /// 45000edb2182b6203a037219c29317ab6362c78b422AJFISH CHAR16 FileNameString[1]; 451959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang} EFI_USER_INTERFACE_SECTION; 452959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 4533d4d4cfaa07a7a54a9281689702d03f418699b51klutypedef struct { 4543d4d4cfaa07a7a54a9281689702d03f418699b51klu EFI_COMMON_SECTION_HEADER2 CommonHeader; 4553d4d4cfaa07a7a54a9281689702d03f418699b51klu CHAR16 FileNameString[1]; 4563d4d4cfaa07a7a54a9281689702d03f418699b51klu} EFI_USER_INTERFACE_SECTION2; 457959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 458dc53faa3a2059c75483fe7e5756d2da11fad598cklu/// 459af2dc6a70b9380d702bd0720cdb029d630c505e3myronporter/// The leaf section which contains a numeric build number and 460fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// an optional unicode string that represents the file revision. 461fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy/// 462959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshangtypedef struct { 46300edb2182b6203a037219c29317ab6362c78b422AJFISH EFI_COMMON_SECTION_HEADER CommonHeader; 46400edb2182b6203a037219c29317ab6362c78b422AJFISH UINT16 BuildNumber; 4657b1bf9f61b743d137b529a97c3107aa392b635a8vanjeff 4667b1bf9f61b743d137b529a97c3107aa392b635a8vanjeff /// 4677b1bf9f61b743d137b529a97c3107aa392b635a8vanjeff /// Array of unicode string. 468fbb393ab7a9c33ca4ae81fb3f91a7d2a5671bd62Lee Leahy /// 46900edb2182b6203a037219c29317ab6362c78b422AJFISH CHAR16 VersionString[1]; 470959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang} EFI_VERSION_SECTION; 471959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 4723d4d4cfaa07a7a54a9281689702d03f418699b51klutypedef struct { 4733d4d4cfaa07a7a54a9281689702d03f418699b51klu EFI_COMMON_SECTION_HEADER2 CommonHeader; 4743d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 4753d4d4cfaa07a7a54a9281689702d03f418699b51klu /// A UINT16 that represents a particular build. Subsequent builds have monotonically 4763d4d4cfaa07a7a54a9281689702d03f418699b51klu /// increasing build numbers relative to earlier builds. 4773d4d4cfaa07a7a54a9281689702d03f418699b51klu /// 4783d4d4cfaa07a7a54a9281689702d03f418699b51klu UINT16 BuildNumber; 4793d4d4cfaa07a7a54a9281689702d03f418699b51klu CHAR16 VersionString[1]; 4803d4d4cfaa07a7a54a9281689702d03f418699b51klu} EFI_VERSION_SECTION2; 481ddd3f4717770d0566ed01f930d836c85bb07412fyshang 48230f001ca5f08974c8d5a5483f8b8e1a4f46a1025lzeng#define IS_SECTION2(SectionHeaderPtr) \ 48330f001ca5f08974c8d5a5483f8b8e1a4f46a1025lzeng ((UINT32) (*((UINT32 *) ((EFI_COMMON_SECTION_HEADER *) (UINTN) SectionHeaderPtr)->Size) & 0x00ffffff) == 0x00ffffff) 48430f001ca5f08974c8d5a5483f8b8e1a4f46a1025lzeng 485ddd3f4717770d0566ed01f930d836c85bb07412fyshang#define SECTION_SIZE(SectionHeaderPtr) \ 48630f001ca5f08974c8d5a5483f8b8e1a4f46a1025lzeng ((UINT32) (*((UINT32 *) ((EFI_COMMON_SECTION_HEADER *) (UINTN) SectionHeaderPtr)->Size) & 0x00ffffff)) 48730f001ca5f08974c8d5a5483f8b8e1a4f46a1025lzeng 48830f001ca5f08974c8d5a5483f8b8e1a4f46a1025lzeng#define SECTION2_SIZE(SectionHeaderPtr) \ 48930f001ca5f08974c8d5a5483f8b8e1a4f46a1025lzeng (((EFI_COMMON_SECTION_HEADER2 *) (UINTN) SectionHeaderPtr)->ExtendedSize) 490ddd3f4717770d0566ed01f930d836c85bb07412fyshang 49162d1e08bd1df645467fa34e972bc2f3cc9321222lgao#pragma pack() 492ddd3f4717770d0566ed01f930d836c85bb07412fyshang 493959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang#endif 494959ccb23c6a14797ecaf5990bd5906b4b05a9b75yshang 495