]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/FirmwareStorageFormat/SectionHeader.py
BaseTools: Add FMMT Python Tool
[mirror_edk2.git] / BaseTools / Source / Python / FirmwareStorageFormat / SectionHeader.py
CommitLineData
a64b9449
CC
1## @file\r
2# This file is used to define the Section Header C Struct.\r
3#\r
4# Copyright (c) 2021-, Intel Corporation. All rights reserved.<BR>\r
5# SPDX-License-Identifier: BSD-2-Clause-Patent\r
6##\r
7from struct import *\r
8from ctypes import *\r
9from FirmwareStorageFormat.Common import *\r
10\r
11EFI_COMMON_SECTION_HEADER_LEN = 4\r
12EFI_COMMON_SECTION_HEADER2_LEN = 8\r
13\r
14class EFI_COMMON_SECTION_HEADER(Structure):\r
15 _pack_ = 1\r
16 _fields_ = [\r
17 ('Size', ARRAY(c_uint8, 3)),\r
18 ('Type', c_uint8),\r
19 ]\r
20\r
21 @property\r
22 def SECTION_SIZE(self) -> int:\r
23 return self.Size[0] | self.Size[1] << 8 | self.Size[2] << 16\r
24\r
25 def Common_Header_Size(self) -> int:\r
26 return 4\r
27\r
28class EFI_COMMON_SECTION_HEADER2(Structure):\r
29 _pack_ = 1\r
30 _fields_ = [\r
31 ('Size', ARRAY(c_uint8, 3)),\r
32 ('Type', c_uint8),\r
33 ('ExtendedSize', c_uint32),\r
34 ]\r
35\r
36 @property\r
37 def SECTION_SIZE(self) -> int:\r
38 return self.ExtendedSize\r
39\r
40 def Common_Header_Size(self) -> int:\r
41 return 8\r
42\r
43class EFI_COMPRESSION_SECTION(Structure):\r
44 _pack_ = 1\r
45 _fields_ = [\r
46 ('UncompressedLength', c_uint32),\r
47 ('CompressionType', c_uint8),\r
48 ]\r
49\r
50 def ExtHeaderSize(self) -> int:\r
51 return 5\r
52\r
53class EFI_FREEFORM_SUBTYPE_GUID_SECTION(Structure):\r
54 _pack_ = 1\r
55 _fields_ = [\r
56 ('SubTypeGuid', GUID),\r
57 ]\r
58\r
59 def ExtHeaderSize(self) -> int:\r
60 return 16\r
61\r
62class EFI_GUID_DEFINED_SECTION(Structure):\r
63 _pack_ = 1\r
64 _fields_ = [\r
65 ('SectionDefinitionGuid', GUID),\r
66 ('DataOffset', c_uint16),\r
67 ('Attributes', c_uint16),\r
68 ]\r
69\r
70 def ExtHeaderSize(self) -> int:\r
71 return 20\r
72\r
73def Get_USER_INTERFACE_Header(nums: int):\r
74 class EFI_SECTION_USER_INTERFACE(Structure):\r
75 _pack_ = 1\r
76 _fields_ = [\r
77 ('FileNameString', ARRAY(c_uint16, nums)),\r
78 ]\r
79\r
80 def ExtHeaderSize(self) -> int:\r
81 return 2 * nums\r
82\r
83 def GetUiString(self) -> str:\r
84 UiString = ''\r
85 for i in range(nums):\r
86 if self.FileNameString[i]:\r
87 UiString += chr(self.FileNameString[i])\r
88 return UiString\r
89\r
90 return EFI_SECTION_USER_INTERFACE\r
91\r
92def Get_VERSION_Header(nums: int):\r
93 class EFI_SECTION_VERSION(Structure):\r
94 _pack_ = 1\r
95 _fields_ = [\r
96 ('BuildNumber', c_uint16),\r
97 ('VersionString', ARRAY(c_uint16, nums)),\r
98 ]\r
99\r
100 def ExtHeaderSize(self) -> int:\r
101 return 2 * (nums+1)\r
102\r
103 def GetVersionString(self) -> str:\r
104 VersionString = ''\r
105 for i in range(nums):\r
106 if self.VersionString[i]:\r
107 VersionString += chr(self.VersionString[i])\r
108 return VersionString\r
109\r
110 return EFI_SECTION_VERSION\r