Home | History | Annotate | Download | only in Common
      1 /** @file
      2   The firmware volume related definitions in PI.
      3 
      4   @par Revision Reference:
      5   Version 1.2C
      6 
      7   Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
      8 
      9   This program and the accompanying materials are licensed and made available
     10   under the terms and conditions of the BSD License which accompanies this
     11   distribution.  The full text of the license may be found at
     12     http://opensource.org/licenses/bsd-license.php
     13 
     14   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     15   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     16 
     17 **/
     18 
     19 #ifndef __PI_FIRMWAREVOLUME_H__
     20 #define __PI_FIRMWAREVOLUME_H__
     21 
     22 //
     23 // EFI_FV_FILE_ATTRIBUTES
     24 //
     25 typedef UINT32  EFI_FV_FILE_ATTRIBUTES;
     26 
     27 //
     28 // Value of EFI_FV_FILE_ATTRIBUTES.
     29 //
     30 #define EFI_FV_FILE_ATTRIB_ALIGNMENT      0x0000001F
     31 #define EFI_FV_FILE_ATTRIB_FIXED          0x00000100
     32 #define EFI_FV_FILE_ATTRIB_MEMORY_MAPPED  0x00000200
     33 
     34 typedef UINT32  EFI_FVB_ATTRIBUTES_2;
     35 
     36 //
     37 // Attributes bit definitions
     38 //
     39 #define EFI_FVB2_READ_DISABLED_CAP  0x00000001
     40 #define EFI_FVB2_READ_ENABLED_CAP   0x00000002
     41 #define EFI_FVB2_READ_STATUS        0x00000004
     42 #define EFI_FVB2_WRITE_DISABLED_CAP 0x00000008
     43 #define EFI_FVB2_WRITE_ENABLED_CAP  0x00000010
     44 #define EFI_FVB2_WRITE_STATUS       0x00000020
     45 #define EFI_FVB2_LOCK_CAP           0x00000040
     46 #define EFI_FVB2_LOCK_STATUS        0x00000080
     47 #define EFI_FVB2_STICKY_WRITE       0x00000200
     48 #define EFI_FVB2_MEMORY_MAPPED      0x00000400
     49 #define EFI_FVB2_ERASE_POLARITY     0x00000800
     50 #define EFI_FVB2_READ_LOCK_CAP      0x00001000
     51 #define EFI_FVB2_READ_LOCK_STATUS   0x00002000
     52 #define EFI_FVB2_WRITE_LOCK_CAP     0x00004000
     53 #define EFI_FVB2_WRITE_LOCK_STATUS  0x00008000
     54 #define EFI_FVB2_ALIGNMENT          0x001F0000
     55 #define EFI_FVB2_WEAK_ALIGNMENT     0x80000000
     56 #define EFI_FVB2_ALIGNMENT_1        0x00000000
     57 #define EFI_FVB2_ALIGNMENT_2        0x00010000
     58 #define EFI_FVB2_ALIGNMENT_4        0x00020000
     59 #define EFI_FVB2_ALIGNMENT_8        0x00030000
     60 #define EFI_FVB2_ALIGNMENT_16       0x00040000
     61 #define EFI_FVB2_ALIGNMENT_32       0x00050000
     62 #define EFI_FVB2_ALIGNMENT_64       0x00060000
     63 #define EFI_FVB2_ALIGNMENT_128      0x00070000
     64 #define EFI_FVB2_ALIGNMENT_256      0x00080000
     65 #define EFI_FVB2_ALIGNMENT_512      0x00090000
     66 #define EFI_FVB2_ALIGNMENT_1K       0x000A0000
     67 #define EFI_FVB2_ALIGNMENT_2K       0x000B0000
     68 #define EFI_FVB2_ALIGNMENT_4K       0x000C0000
     69 #define EFI_FVB2_ALIGNMENT_8K       0x000D0000
     70 #define EFI_FVB2_ALIGNMENT_16K      0x000E0000
     71 #define EFI_FVB2_ALIGNMENT_32K      0x000F0000
     72 #define EFI_FVB2_ALIGNMENT_64K      0x00100000
     73 #define EFI_FVB2_ALIGNMENT_128K     0x00110000
     74 #define EFI_FVB2_ALIGNMENT_256K     0x00120000
     75 #define EFI_FVB2_ALIGNMENT_512K     0x00130000
     76 #define EFI_FVB2_ALIGNMENT_1M       0x00140000
     77 #define EFI_FVB2_ALIGNMENT_2M       0x00150000
     78 #define EFI_FVB2_ALIGNMENT_4M       0x00160000
     79 #define EFI_FVB2_ALIGNMENT_8M       0x00170000
     80 #define EFI_FVB2_ALIGNMENT_16M      0x00180000
     81 #define EFI_FVB2_ALIGNMENT_32M      0x00190000
     82 #define EFI_FVB2_ALIGNMENT_64M      0x001A0000
     83 #define EFI_FVB2_ALIGNMENT_128M     0x001B0000
     84 #define EFI_FVB2_ALIGNMENT_256M     0x001C0000
     85 #define EFI_FVB2_ALIGNMENT_512M     0x001D0000
     86 #define EFI_FVB2_ALIGNMENT_1G       0x001E0000
     87 #define EFI_FVB2_ALIGNMENT_2G       0x001F0000
     88 
     89 
     90 typedef struct {
     91   UINT32 NumBlocks;
     92   UINT32 Length;
     93 } EFI_FV_BLOCK_MAP_ENTRY;
     94 
     95 //
     96 // Describes the features and layout of the firmware volume.
     97 //
     98 typedef struct {
     99   UINT8                     ZeroVector[16];
    100   EFI_GUID                  FileSystemGuid;
    101   UINT64                    FvLength;
    102   UINT32                    Signature;
    103   EFI_FVB_ATTRIBUTES_2      Attributes;
    104   UINT16                    HeaderLength;
    105   UINT16                    Checksum;
    106   UINT16                    ExtHeaderOffset;
    107   UINT8                     Reserved[1];
    108   UINT8                     Revision;
    109   EFI_FV_BLOCK_MAP_ENTRY    BlockMap[1];
    110 } EFI_FIRMWARE_VOLUME_HEADER;
    111 
    112 #define EFI_FVH_SIGNATURE SIGNATURE_32 ('_', 'F', 'V', 'H')
    113 
    114 ///
    115 /// Firmware Volume Header Revision definition
    116 ///
    117 #define EFI_FVH_REVISION  0x02
    118 
    119 //
    120 // Extension header pointed by ExtHeaderOffset of volume header.
    121 //
    122 typedef struct {
    123   EFI_GUID  FvName;
    124   UINT32    ExtHeaderSize;
    125 } EFI_FIRMWARE_VOLUME_EXT_HEADER;
    126 
    127 typedef struct {
    128   UINT16    ExtEntrySize;
    129   UINT16    ExtEntryType;
    130 } EFI_FIRMWARE_VOLUME_EXT_ENTRY;
    131 
    132 #define EFI_FV_EXT_TYPE_OEM_TYPE  0x01
    133 typedef struct {
    134   EFI_FIRMWARE_VOLUME_EXT_ENTRY Hdr;
    135   UINT32    TypeMask;
    136 
    137   //
    138   // Array of GUIDs.
    139   // Each GUID represents an OEM file type.
    140   //
    141   // EFI_GUID  Types[1];
    142   //
    143 } EFI_FIRMWARE_VOLUME_EXT_ENTRY_OEM_TYPE;
    144 
    145 #define EFI_FV_EXT_TYPE_GUID_TYPE 0x0002
    146 typedef struct {
    147   EFI_FIRMWARE_VOLUME_EXT_ENTRY     Hdr;
    148   EFI_GUID                          FormatType;
    149 
    150   //
    151   // An arry of bytes of length Length.
    152   //
    153   // UINT8                             Data[1];
    154   //
    155 } EFI_FIRMWARE_VOLUME_EXT_ENTRY_GUID_TYPE;
    156 
    157 #endif
    158