123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- /*
- * Copyright (C) 2013, Intel Corporation
- * Copyright (C) 2014, Bin Meng <bmeng.cn@gmail.com>
- *
- * SPDX-License-Identifier: Intel
- */
- #ifndef __FSP_FFS_H__
- #define __FSP_FFS_H__
- /* Used to verify the integrity of the file */
- union __packed ffs_integrity {
- struct {
- /*
- * The IntegrityCheck.checksum.header field is an 8-bit
- * checksum of the file header. The State and
- * IntegrityCheck.checksum.file fields are assumed to be zero
- * and the checksum is calculated such that the entire header
- * sums to zero.
- */
- u8 header;
- /*
- * If the FFS_ATTRIB_CHECKSUM (see definition below) bit of
- * the Attributes field is set to one, the
- * IntegrityCheck.checksum.file field is an 8-bit checksum of
- * the file data. If the FFS_ATTRIB_CHECKSUM bit of the
- * Attributes field is cleared to zero, the
- * IntegrityCheck.checksum.file field must be initialized with
- * a value of 0xAA. The IntegrityCheck.checksum.file field is
- * valid any time the EFI_FILE_DATA_VALID bit is set in the
- * State field.
- */
- u8 file;
- } checksum;
- /* This is the full 16 bits of the IntegrityCheck field */
- u16 checksum16;
- };
- /*
- * Each file begins with the header that describe the
- * contents and state of the files.
- */
- struct __packed ffs_file_header {
- /*
- * This GUID is the file name.
- * It is used to uniquely identify the file.
- */
- struct efi_guid name;
- /* Used to verify the integrity of the file */
- union ffs_integrity integrity;
- /* Identifies the type of file */
- u8 type;
- /* Declares various file attribute bits */
- u8 attr;
- /* The length of the file in bytes, including the FFS header */
- u8 size[3];
- /*
- * Used to track the state of the file throughout the life of
- * the file from creation to deletion.
- */
- u8 state;
- };
- struct __packed ffs_file_header2 {
- /*
- * This GUID is the file name. It is used to uniquely identify the file.
- * There may be only one instance of a file with the file name GUID of
- * Name in any given firmware volume, except if the file type is
- * EFI_FV_FILE_TYPE_FFS_PAD.
- */
- struct efi_guid name;
- /* Used to verify the integrity of the file */
- union ffs_integrity integrity;
- /* Identifies the type of file */
- u8 type;
- /* Declares various file attribute bits */
- u8 attr;
- /*
- * The length of the file in bytes, including the FFS header.
- * The length of the file data is either
- * (size - sizeof(struct ffs_file_header)). This calculation means a
- * zero-length file has a size of 24 bytes, which is
- * sizeof(struct ffs_file_header). Size is not required to be a
- * multiple of 8 bytes. Given a file F, the next file header is located
- * at the next 8-byte aligned firmware volume offset following the last
- * byte of the file F.
- */
- u8 size[3];
- /*
- * Used to track the state of the file throughout the life of
- * the file from creation to deletion.
- */
- u8 state;
- /*
- * If FFS_ATTRIB_LARGE_FILE is set in attr, then ext_size exists
- * and size must be set to zero.
- * If FFS_ATTRIB_LARGE_FILE is not set then
- * struct ffs_file_header is used.
- */
- u32 ext_size;
- };
- /*
- * Pseudo type. It is used as a wild card when retrieving sections.
- * The section type EFI_SECTION_ALL matches all section types.
- */
- #define EFI_SECTION_ALL 0x00
- /* Encapsulation section Type values */
- #define EFI_SECTION_COMPRESSION 0x01
- #define EFI_SECTION_GUID_DEFINED 0x02
- #define EFI_SECTION_DISPOSABLE 0x03
- /* Leaf section Type values */
- #define EFI_SECTION_PE32 0x10
- #define EFI_SECTION_PIC 0x11
- #define EFI_SECTION_TE 0x12
- #define EFI_SECTION_DXE_DEPEX 0x13
- #define EFI_SECTION_VERSION 0x14
- #define EFI_SECTION_USER_INTERFACE 0x15
- #define EFI_SECTION_COMPATIBILITY16 0x16
- #define EFI_SECTION_FIRMWARE_VOLUME_IMAGE 0x17
- #define EFI_SECTION_FREEFORM_SUBTYPE_GUID 0x18
- #define EFI_SECTION_RAW 0x19
- #define EFI_SECTION_PEI_DEPEX 0x1B
- #define EFI_SECTION_SMM_DEPEX 0x1C
- /* Common section header */
- struct __packed raw_section {
- /*
- * A 24-bit unsigned integer that contains the total size of
- * the section in bytes, including the EFI_COMMON_SECTION_HEADER.
- */
- u8 size[3];
- u8 type;
- };
- struct __packed raw_section2 {
- /*
- * A 24-bit unsigned integer that contains the total size of
- * the section in bytes, including the EFI_COMMON_SECTION_HEADER.
- */
- u8 size[3];
- u8 type;
- /*
- * If size is 0xFFFFFF, then ext_size contains the size of
- * the section. If size is not equal to 0xFFFFFF, then this
- * field does not exist.
- */
- u32 ext_size;
- };
- #endif
|