176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** @file
276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  The firmware file related definitions in PI.
376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  Copyright (c) 2006 - 2008, Intel Corporation
576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  All rights reserved. This program and the accompanying materials
676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  are licensed and made available under the terms and conditions of the BSD License
776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  which accompanies this distribution.  The full text of the license may be found at
876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  http://opensource.org/licenses/bsd-license.php
976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  @par Revision Reference:
1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  PI Version 1.0
1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman**/
1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef __PI_FIRMWARE_FILE_H__
2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define __PI_FIRMWARE_FILE_H__
2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <gpxe/efi/ProcessorBind.h>
2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#pragma pack(1)
2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// Used to verify the integrity of the file.
2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef union {
2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  struct {
3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT8   Header;
3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    UINT8   File;
3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  } Checksum;
3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  UINT16    Checksum16;
3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_FFS_INTEGRITY_CHECK;
3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef UINT8 EFI_FV_FILETYPE;
3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef UINT8 EFI_FFS_FILE_ATTRIBUTES;
3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef UINT8 EFI_FFS_FILE_STATE;
3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// File Types Definitions
4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_FV_FILETYPE_ALL                   0x00
4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_FV_FILETYPE_RAW                   0x01
4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_FV_FILETYPE_FREEFORM              0x02
4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_FV_FILETYPE_SECURITY_CORE         0x03
4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_FV_FILETYPE_PEI_CORE              0x04
4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_FV_FILETYPE_DXE_CORE              0x05
4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_FV_FILETYPE_PEIM                  0x06
5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_FV_FILETYPE_DRIVER                0x07
5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_FV_FILETYPE_COMBINED_PEIM_DRIVER  0x08
5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_FV_FILETYPE_APPLICATION           0x09
5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE 0x0B
5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_FV_FILETYPE_OEM_MIN               0xc0
5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_FV_FILETYPE_OEM_MAX               0xdf
5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_FV_FILETYPE_DEBUG_MIN             0xe0
5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_FV_FILETYPE_DEBUG_MAX             0xef
5876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_FV_FILETYPE_FFS_MIN               0xf0
5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_FV_FILETYPE_FFS_MAX               0xff
6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_FV_FILETYPE_FFS_PAD               0xf0
6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// FFS File Attributes.
6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define FFS_ATTRIB_FIXED              0x04
6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define FFS_ATTRIB_DATA_ALIGNMENT     0x38
6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define FFS_ATTRIB_CHECKSUM           0x40
6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// FFS File State Bits.
7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_FILE_HEADER_CONSTRUCTION  0x01
7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_FILE_HEADER_VALID         0x02
7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_FILE_DATA_VALID           0x04
7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_FILE_MARKED_FOR_UPDATE    0x08
7576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_FILE_DELETED              0x10
7676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_FILE_HEADER_INVALID       0x20
7776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
7876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
7976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
8076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// Each file begins with the header that describe the
8176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// contents and state of the files.
8276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
8376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct {
8476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  EFI_GUID                Name;
8576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  EFI_FFS_INTEGRITY_CHECK IntegrityCheck;
8676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  EFI_FV_FILETYPE         Type;
8776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  EFI_FFS_FILE_ATTRIBUTES Attributes;
8876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  UINT8                   Size[3];
8976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  EFI_FFS_FILE_STATE      State;
9076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_FFS_FILE_HEADER;
9176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
9276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
9376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef UINT8 EFI_SECTION_TYPE;
9476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
9576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
9676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// Pseudo type. It is
9776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// used as a wild card when retrieving sections. The section
9876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// type EFI_SECTION_ALL matches all section types.
9976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
10076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_SECTION_ALL                   0x00
10176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
10276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
10376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// Encapsulation section Type values
10476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
10576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_SECTION_COMPRESSION           0x01
10676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
10776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_SECTION_GUID_DEFINED          0x02
10876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
10976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
11076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// Leaf section Type values
11176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
11276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_SECTION_PE32                  0x10
11376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_SECTION_PIC                   0x11
11476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_SECTION_TE                    0x12
11576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_SECTION_DXE_DEPEX             0x13
11676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_SECTION_VERSION               0x14
11776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_SECTION_USER_INTERFACE        0x15
11876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_SECTION_COMPATIBILITY16       0x16
11976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_SECTION_FIRMWARE_VOLUME_IMAGE 0x17
12076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_SECTION_FREEFORM_SUBTYPE_GUID 0x18
12176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_SECTION_RAW                   0x19
12276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_SECTION_PEI_DEPEX             0x1B
12376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
12476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
12576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// Common section header
12676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
12776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct {
12876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  UINT8             Size[3];
12976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  EFI_SECTION_TYPE  Type;
13076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_COMMON_SECTION_HEADER;
13176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
13276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
13376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// Leaf section type that contains an
13476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// IA-32 16-bit executable image.
13576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
13676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef EFI_COMMON_SECTION_HEADER EFI_COMPATIBILITY16_SECTION;
13776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
13876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
13976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// CompressionType of EFI_COMPRESSION_SECTION.
14076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
14176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_NOT_COMPRESSED        0x00
14276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_STANDARD_COMPRESSION  0x01
14376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
14476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// An encapsulation section type in which the
14576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// section data is compressed.
14676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
14776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct {
14876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  EFI_COMMON_SECTION_HEADER   CommonHeader;
14976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  UINT32                      UncompressedLength;
15076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  UINT8                       CompressionType;
15176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_COMPRESSION_SECTION;
15276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
15376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
15476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// Leaf section which could be used to determine the dispatch order of DXEs.
15576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
15676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef EFI_COMMON_SECTION_HEADER EFI_DXE_DEPEX_SECTION;
15776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
15876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
15976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// Leaf section which contains a PI FV.
16076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
16176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef EFI_COMMON_SECTION_HEADER EFI_FIRMWARE_VOLUME_IMAGE_SECTION;
16276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
16376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
16476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// Leaf section which contains a single GUID.
16576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
16676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct {
16776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  EFI_COMMON_SECTION_HEADER   CommonHeader;
16876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  EFI_GUID                    SubTypeGuid;
16976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_FREEFORM_SUBTYPE_GUID_SECTION;
17076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
17176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
17276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// Attributes of EFI_GUID_DEFINED_SECTION
17376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
17476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_GUIDED_SECTION_PROCESSING_REQUIRED  0x01
17576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_GUIDED_SECTION_AUTH_STATUS_VALID    0x02
17676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
17776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// Leaf section which is encapsulation defined by specific GUID
17876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
17976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct {
18076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  EFI_COMMON_SECTION_HEADER   CommonHeader;
18176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  EFI_GUID                    SectionDefinitionGuid;
18276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  UINT16                      DataOffset;
18376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  UINT16                      Attributes;
18476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_GUID_DEFINED_SECTION;
18576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
18676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
18776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// Leaf section which contains PE32+ image.
18876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
18976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef EFI_COMMON_SECTION_HEADER EFI_PE32_SECTION;
19076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
19176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
19276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
19376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// Leaf section which used to determine the dispatch order of PEIMs.
19476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
19576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef EFI_COMMON_SECTION_HEADER EFI_PEI_DEPEX_SECTION;
19676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
19776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
19876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// Leaf section which constains the position-independent-code image.
19976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
20076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef EFI_COMMON_SECTION_HEADER EFI_TE_SECTION;
20176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
20276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
20376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// Leaf section which contains an array of zero or more bytes.
20476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
20576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef EFI_COMMON_SECTION_HEADER EFI_RAW_SECTION;
20676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
20776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
20876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// Leaf section which contains a unicode string that
20976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// is human readable file name.
21076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
21176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct {
21276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  EFI_COMMON_SECTION_HEADER   CommonHeader;
21376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
21476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  ///
21576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  /// Array of unicode string.
21676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  ///
21776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  CHAR16                      FileNameString[1];
21876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_USER_INTERFACE_SECTION;
21976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
22076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
22176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
22276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// Leaf section which contains a numeric build number and
22376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// an optional unicode string that represents the file revision.
22476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman///
22576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct {
22676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  EFI_COMMON_SECTION_HEADER   CommonHeader;
22776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  UINT16                      BuildNumber;
22876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
22976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  ///
23076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  /// Array of unicode string.
23176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  ///
23276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman  CHAR16                      VersionString[1];
23376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_VERSION_SECTION;
23476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
23576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
23676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define SECTION_SIZE(SectionHeaderPtr) \
23776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman    ((UINT32) (*((UINT32 *) ((EFI_COMMON_SECTION_HEADER *) SectionHeaderPtr)->Size) & 0x00ffffff))
23876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
23976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#pragma pack()
24076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
24176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif
24276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman
243