You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

PiFirmwareVolume.h 4.7KB

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