]> git.proxmox.com Git - mirror_edk2.git/blob - BaseTools/Source/Python/FirmwareStorageFormat/FvHeader.py
BaseTools: Add FMMT Python Tool
[mirror_edk2.git] / BaseTools / Source / Python / FirmwareStorageFormat / FvHeader.py
1 ## @file
2 # This file is used to define the FV Header C Struct.
3 #
4 # Copyright (c) 2021-, Intel Corporation. All rights reserved.<BR>
5 # SPDX-License-Identifier: BSD-2-Clause-Patent
6 ##
7 from ast import Str
8 from struct import *
9 from ctypes import *
10 from FirmwareStorageFormat.Common import *
11
12 class EFI_FV_BLOCK_MAP_ENTRY(Structure):
13 _pack_ = 1
14 _fields_ = [
15 ('NumBlocks', c_uint32),
16 ('Length', c_uint32),
17 ]
18
19
20 class EFI_FIRMWARE_VOLUME_HEADER(Structure):
21 _fields_ = [
22 ('ZeroVector', ARRAY(c_uint8, 16)),
23 ('FileSystemGuid', GUID),
24 ('FvLength', c_uint64),
25 ('Signature', c_uint32),
26 ('Attributes', c_uint32),
27 ('HeaderLength', c_uint16),
28 ('Checksum', c_uint16),
29 ('ExtHeaderOffset', c_uint16),
30 ('Reserved', c_uint8),
31 ('Revision', c_uint8),
32 ('BlockMap', ARRAY(EFI_FV_BLOCK_MAP_ENTRY, 1)),
33 ]
34
35 def Refine_FV_Header(nums):
36 class EFI_FIRMWARE_VOLUME_HEADER(Structure):
37 _fields_ = [
38 ('ZeroVector', ARRAY(c_uint8, 16)),
39 ('FileSystemGuid', GUID),
40 ('FvLength', c_uint64),
41 ('Signature', c_uint32),
42 ('Attributes', c_uint32),
43 ('HeaderLength', c_uint16),
44 ('Checksum', c_uint16),
45 ('ExtHeaderOffset', c_uint16),
46 ('Reserved', c_uint8),
47 ('Revision', c_uint8),
48 ('BlockMap', ARRAY(EFI_FV_BLOCK_MAP_ENTRY, nums)),
49 ]
50 return EFI_FIRMWARE_VOLUME_HEADER
51
52 class EFI_FIRMWARE_VOLUME_EXT_HEADER(Structure):
53 _fields_ = [
54 ('FvName', GUID),
55 ('ExtHeaderSize', c_uint32)
56 ]
57
58 class EFI_FIRMWARE_VOLUME_EXT_ENTRY(Structure):
59 _fields_ = [
60 ('ExtEntrySize', c_uint16),
61 ('ExtEntryType', c_uint16)
62 ]
63
64 class EFI_FIRMWARE_VOLUME_EXT_ENTRY_OEM_TYPE_0(Structure):
65 _fields_ = [
66 ('Hdr', EFI_FIRMWARE_VOLUME_EXT_ENTRY),
67 ('TypeMask', c_uint32)
68 ]
69
70 class EFI_FIRMWARE_VOLUME_EXT_ENTRY_OEM_TYPE(Structure):
71 _fields_ = [
72 ('Hdr', EFI_FIRMWARE_VOLUME_EXT_ENTRY),
73 ('TypeMask', c_uint32),
74 ('Types', ARRAY(GUID, 1))
75 ]
76
77 def Refine_FV_EXT_ENTRY_OEM_TYPE_Header(nums: int) -> EFI_FIRMWARE_VOLUME_EXT_ENTRY_OEM_TYPE:
78 class EFI_FIRMWARE_VOLUME_EXT_ENTRY_OEM_TYPE(Structure):
79 _fields_ = [
80 ('Hdr', EFI_FIRMWARE_VOLUME_EXT_ENTRY),
81 ('TypeMask', c_uint32),
82 ('Types', ARRAY(GUID, nums))
83 ]
84 return EFI_FIRMWARE_VOLUME_EXT_ENTRY_OEM_TYPE(Structure)
85
86 class EFI_FIRMWARE_VOLUME_EXT_ENTRY_GUID_TYPE_0(Structure):
87 _fields_ = [
88 ('Hdr', EFI_FIRMWARE_VOLUME_EXT_ENTRY),
89 ('FormatType', GUID)
90 ]
91
92 class EFI_FIRMWARE_VOLUME_EXT_ENTRY_GUID_TYPE(Structure):
93 _fields_ = [
94 ('Hdr', EFI_FIRMWARE_VOLUME_EXT_ENTRY),
95 ('FormatType', GUID),
96 ('Data', ARRAY(c_uint8, 1))
97 ]
98
99 def Refine_FV_EXT_ENTRY_GUID_TYPE_Header(nums: int) -> EFI_FIRMWARE_VOLUME_EXT_ENTRY_GUID_TYPE:
100 class EFI_FIRMWARE_VOLUME_EXT_ENTRY_GUID_TYPE(Structure):
101 _fields_ = [
102 ('Hdr', EFI_FIRMWARE_VOLUME_EXT_ENTRY),
103 ('FormatType', GUID),
104 ('Data', ARRAY(c_uint8, nums))
105 ]
106 return EFI_FIRMWARE_VOLUME_EXT_ENTRY_GUID_TYPE(Structure)
107
108 class EFI_FIRMWARE_VOLUME_EXT_ENTRY_USED_SIZE_TYPE(Structure):
109 _fields_ = [
110 ('Hdr', EFI_FIRMWARE_VOLUME_EXT_ENTRY),
111 ('UsedSize', c_uint32)
112 ]