--- /dev/null
+## @file\r
+# This file is used to define the FV Header C Struct.\r
+#\r
+# Copyright (c) 2021-, Intel Corporation. All rights reserved.<BR>\r
+# SPDX-License-Identifier: BSD-2-Clause-Patent\r
+##\r
+from ast import Str\r
+from struct import *\r
+from ctypes import *\r
+from FirmwareStorageFormat.Common import *\r
+\r
+class EFI_FV_BLOCK_MAP_ENTRY(Structure):\r
+ _pack_ = 1\r
+ _fields_ = [\r
+ ('NumBlocks', c_uint32),\r
+ ('Length', c_uint32),\r
+ ]\r
+\r
+\r
+class EFI_FIRMWARE_VOLUME_HEADER(Structure):\r
+ _fields_ = [\r
+ ('ZeroVector', ARRAY(c_uint8, 16)),\r
+ ('FileSystemGuid', GUID),\r
+ ('FvLength', c_uint64),\r
+ ('Signature', c_uint32),\r
+ ('Attributes', c_uint32),\r
+ ('HeaderLength', c_uint16),\r
+ ('Checksum', c_uint16),\r
+ ('ExtHeaderOffset', c_uint16),\r
+ ('Reserved', c_uint8),\r
+ ('Revision', c_uint8),\r
+ ('BlockMap', ARRAY(EFI_FV_BLOCK_MAP_ENTRY, 1)),\r
+ ]\r
+\r
+def Refine_FV_Header(nums):\r
+ class EFI_FIRMWARE_VOLUME_HEADER(Structure):\r
+ _fields_ = [\r
+ ('ZeroVector', ARRAY(c_uint8, 16)),\r
+ ('FileSystemGuid', GUID),\r
+ ('FvLength', c_uint64),\r
+ ('Signature', c_uint32),\r
+ ('Attributes', c_uint32),\r
+ ('HeaderLength', c_uint16),\r
+ ('Checksum', c_uint16),\r
+ ('ExtHeaderOffset', c_uint16),\r
+ ('Reserved', c_uint8),\r
+ ('Revision', c_uint8),\r
+ ('BlockMap', ARRAY(EFI_FV_BLOCK_MAP_ENTRY, nums)),\r
+ ]\r
+ return EFI_FIRMWARE_VOLUME_HEADER\r
+\r
+class EFI_FIRMWARE_VOLUME_EXT_HEADER(Structure):\r
+ _fields_ = [\r
+ ('FvName', GUID),\r
+ ('ExtHeaderSize', c_uint32)\r
+ ]\r
+\r
+class EFI_FIRMWARE_VOLUME_EXT_ENTRY(Structure):\r
+ _fields_ = [\r
+ ('ExtEntrySize', c_uint16),\r
+ ('ExtEntryType', c_uint16)\r
+ ]\r
+\r
+class EFI_FIRMWARE_VOLUME_EXT_ENTRY_OEM_TYPE_0(Structure):\r
+ _fields_ = [\r
+ ('Hdr', EFI_FIRMWARE_VOLUME_EXT_ENTRY),\r
+ ('TypeMask', c_uint32)\r
+ ]\r
+\r
+class EFI_FIRMWARE_VOLUME_EXT_ENTRY_OEM_TYPE(Structure):\r
+ _fields_ = [\r
+ ('Hdr', EFI_FIRMWARE_VOLUME_EXT_ENTRY),\r
+ ('TypeMask', c_uint32),\r
+ ('Types', ARRAY(GUID, 1))\r
+ ]\r
+\r
+def Refine_FV_EXT_ENTRY_OEM_TYPE_Header(nums: int) -> EFI_FIRMWARE_VOLUME_EXT_ENTRY_OEM_TYPE:\r
+ class EFI_FIRMWARE_VOLUME_EXT_ENTRY_OEM_TYPE(Structure):\r
+ _fields_ = [\r
+ ('Hdr', EFI_FIRMWARE_VOLUME_EXT_ENTRY),\r
+ ('TypeMask', c_uint32),\r
+ ('Types', ARRAY(GUID, nums))\r
+ ]\r
+ return EFI_FIRMWARE_VOLUME_EXT_ENTRY_OEM_TYPE(Structure)\r
+\r
+class EFI_FIRMWARE_VOLUME_EXT_ENTRY_GUID_TYPE_0(Structure):\r
+ _fields_ = [\r
+ ('Hdr', EFI_FIRMWARE_VOLUME_EXT_ENTRY),\r
+ ('FormatType', GUID)\r
+ ]\r
+\r
+class EFI_FIRMWARE_VOLUME_EXT_ENTRY_GUID_TYPE(Structure):\r
+ _fields_ = [\r
+ ('Hdr', EFI_FIRMWARE_VOLUME_EXT_ENTRY),\r
+ ('FormatType', GUID),\r
+ ('Data', ARRAY(c_uint8, 1))\r
+ ]\r
+\r
+def Refine_FV_EXT_ENTRY_GUID_TYPE_Header(nums: int) -> EFI_FIRMWARE_VOLUME_EXT_ENTRY_GUID_TYPE:\r
+ class EFI_FIRMWARE_VOLUME_EXT_ENTRY_GUID_TYPE(Structure):\r
+ _fields_ = [\r
+ ('Hdr', EFI_FIRMWARE_VOLUME_EXT_ENTRY),\r
+ ('FormatType', GUID),\r
+ ('Data', ARRAY(c_uint8, nums))\r
+ ]\r
+ return EFI_FIRMWARE_VOLUME_EXT_ENTRY_GUID_TYPE(Structure)\r
+\r
+class EFI_FIRMWARE_VOLUME_EXT_ENTRY_USED_SIZE_TYPE(Structure):\r
+ _fields_ = [\r
+ ('Hdr', EFI_FIRMWARE_VOLUME_EXT_ENTRY),\r
+ ('UsedSize', c_uint32)\r
+ ]\r