1 /* 2 * Copyright (C) 2013, Intel Corporation 3 * Copyright (C) 2014, Bin Meng <bmeng.cn@gmail.com> 4 * 5 * SPDX-License-Identifier: Intel 6 */ 7 8 #ifndef __FSP_FV___ 9 #define __FSP_FV___ 10 11 /* Value of EFI_FV_FILE_ATTRIBUTES */ 12 #define EFI_FV_FILE_ATTR_ALIGNMENT 0x0000001F 13 #define EFI_FV_FILE_ATTR_FIXED 0x00000100 14 #define EFI_FV_FILE_ATTR_MEMORY_MAPPED 0x00000200 15 16 /* Attributes bit definitions */ 17 #define EFI_FVB2_READ_DISABLED_CAP 0x00000001 18 #define EFI_FVB2_READ_ENABLED_CAP 0x00000002 19 #define EFI_FVB2_READ_STATUS 0x00000004 20 #define EFI_FVB2_WRITE_DISABLED_CAP 0x00000008 21 #define EFI_FVB2_WRITE_ENABLED_CAP 0x00000010 22 #define EFI_FVB2_WRITE_STATUS 0x00000020 23 #define EFI_FVB2_LOCK_CAP 0x00000040 24 #define EFI_FVB2_LOCK_STATUS 0x00000080 25 #define EFI_FVB2_STICKY_WRITE 0x00000200 26 #define EFI_FVB2_MEMORY_MAPPED 0x00000400 27 #define EFI_FVB2_ERASE_POLARITY 0x00000800 28 #define EFI_FVB2_READ_LOCK_CAP 0x00001000 29 #define EFI_FVB2_READ_LOCK_STATUS 0x00002000 30 #define EFI_FVB2_WRITE_LOCK_CAP 0x00004000 31 #define EFI_FVB2_WRITE_LOCK_STATUS 0x00008000 32 #define EFI_FVB2_ALIGNMENT 0x001F0000 33 #define EFI_FVB2_ALIGNMENT_1 0x00000000 34 #define EFI_FVB2_ALIGNMENT_2 0x00010000 35 #define EFI_FVB2_ALIGNMENT_4 0x00020000 36 #define EFI_FVB2_ALIGNMENT_8 0x00030000 37 #define EFI_FVB2_ALIGNMENT_16 0x00040000 38 #define EFI_FVB2_ALIGNMENT_32 0x00050000 39 #define EFI_FVB2_ALIGNMENT_64 0x00060000 40 #define EFI_FVB2_ALIGNMENT_128 0x00070000 41 #define EFI_FVB2_ALIGNMENT_256 0x00080000 42 #define EFI_FVB2_ALIGNMENT_512 0x00090000 43 #define EFI_FVB2_ALIGNMENT_1K 0x000A0000 44 #define EFI_FVB2_ALIGNMENT_2K 0x000B0000 45 #define EFI_FVB2_ALIGNMENT_4K 0x000C0000 46 #define EFI_FVB2_ALIGNMENT_8K 0x000D0000 47 #define EFI_FVB2_ALIGNMENT_16K 0x000E0000 48 #define EFI_FVB2_ALIGNMENT_32K 0x000F0000 49 #define EFI_FVB2_ALIGNMENT_64K 0x00100000 50 #define EFI_FVB2_ALIGNMENT_128K 0x00110000 51 #define EFI_FVB2_ALIGNMENT_256K 0x00120000 52 #define EFI_FVB2_ALIGNMENT_512K 0x00130000 53 #define EFI_FVB2_ALIGNMENT_1M 0x00140000 54 #define EFI_FVB2_ALIGNMENT_2M 0x00150000 55 #define EFI_FVB2_ALIGNMENT_4M 0x00160000 56 #define EFI_FVB2_ALIGNMENT_8M 0x00170000 57 #define EFI_FVB2_ALIGNMENT_16M 0x00180000 58 #define EFI_FVB2_ALIGNMENT_32M 0x00190000 59 #define EFI_FVB2_ALIGNMENT_64M 0x001A0000 60 #define EFI_FVB2_ALIGNMENT_128M 0x001B0000 61 #define EFI_FVB2_ALIGNMENT_256M 0x001C0000 62 #define EFI_FVB2_ALIGNMENT_512M 0x001D0000 63 #define EFI_FVB2_ALIGNMENT_1G 0x001E0000 64 #define EFI_FVB2_ALIGNMENT_2G 0x001F0000 65 66 struct fv_blkmap_entry { 67 /* The number of sequential blocks which are of the same size */ 68 u32 num_blocks; 69 /* The size of the blocks */ 70 u32 length; 71 }; 72 73 /* Describes the features and layout of the firmware volume */ 74 struct fv_header { 75 /* 76 * The first 16 bytes are reserved to allow for the reset vector of 77 * processors whose reset vector is at address 0. 78 */ 79 u8 zero_vec[16]; 80 /* 81 * Declares the file system with which the firmware volume 82 * is formatted. 83 */ 84 struct efi_guid fs_guid; 85 /* 86 * Length in bytes of the complete firmware volume, including 87 * the header. 88 */ 89 u64 fv_len; 90 /* Set to EFI_FVH_SIGNATURE */ 91 u32 sign; 92 /* 93 * Declares capabilities and power-on defaults for the firmware 94 * volume. 95 */ 96 u32 attr; 97 /* Length in bytes of the complete firmware volume header */ 98 u16 hdr_len; 99 /* 100 * A 16-bit checksum of the firmware volume header. 101 * A valid header sums to zero. 102 */ 103 u16 checksum; 104 /* 105 * Offset, relative to the start of the header, of the extended 106 * header (EFI_FIRMWARE_VOLUME_EXT_HEADER) or zero if there is 107 * no extended header. 108 */ 109 u16 ext_hdr_off; 110 /* This field must always be set to zero */ 111 u8 reserved[1]; 112 /* 113 * Set to 2. Future versions of this specification may define new 114 * header fields and will increment the Revision field accordingly. 115 */ 116 u8 rev; 117 /* 118 * An array of run-length encoded FvBlockMapEntry structures. 119 * The array is terminated with an entry of {0,0}. 120 */ 121 struct fv_blkmap_entry block_map[1]; 122 }; 123 124 #define EFI_FVH_SIGNATURE SIGNATURE_32('_', 'F', 'V', 'H') 125 126 /* Firmware Volume Header Revision definition */ 127 #define EFI_FVH_REVISION 0x02 128 129 /* Extension header pointed by ExtHeaderOffset of volume header */ 130 struct fv_ext_header { 131 /* firmware volume name */ 132 struct efi_guid fv_name; 133 /* Size of the rest of the extension header including this structure */ 134 u32 ext_hdr_size; 135 }; 136 137 #endif 138