]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/FirmwareStorageFormat/SectionHeader.py
BaseTools: Add FMMT Python Tool
[mirror_edk2.git] / BaseTools / Source / Python / FirmwareStorageFormat / SectionHeader.py
diff --git a/BaseTools/Source/Python/FirmwareStorageFormat/SectionHeader.py b/BaseTools/Source/Python/FirmwareStorageFormat/SectionHeader.py
new file mode 100644 (file)
index 0000000..ee6a636
--- /dev/null
@@ -0,0 +1,110 @@
+## @file\r
+# This file is used to define the Section 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 struct import *\r
+from ctypes import *\r
+from FirmwareStorageFormat.Common import *\r
+\r
+EFI_COMMON_SECTION_HEADER_LEN = 4\r
+EFI_COMMON_SECTION_HEADER2_LEN = 8\r
+\r
+class EFI_COMMON_SECTION_HEADER(Structure):\r
+    _pack_ = 1\r
+    _fields_ = [\r
+        ('Size',                     ARRAY(c_uint8, 3)),\r
+        ('Type',                     c_uint8),\r
+    ]\r
+\r
+    @property\r
+    def SECTION_SIZE(self) -> int:\r
+        return self.Size[0] | self.Size[1] << 8 | self.Size[2] << 16\r
+\r
+    def Common_Header_Size(self) -> int:\r
+        return 4\r
+\r
+class EFI_COMMON_SECTION_HEADER2(Structure):\r
+    _pack_ = 1\r
+    _fields_ = [\r
+        ('Size',                     ARRAY(c_uint8, 3)),\r
+        ('Type',                     c_uint8),\r
+        ('ExtendedSize',             c_uint32),\r
+    ]\r
+\r
+    @property\r
+    def SECTION_SIZE(self) -> int:\r
+        return self.ExtendedSize\r
+\r
+    def Common_Header_Size(self) -> int:\r
+        return 8\r
+\r
+class EFI_COMPRESSION_SECTION(Structure):\r
+    _pack_ = 1\r
+    _fields_ = [\r
+        ('UncompressedLength',       c_uint32),\r
+        ('CompressionType',          c_uint8),\r
+    ]\r
+\r
+    def ExtHeaderSize(self) -> int:\r
+        return 5\r
+\r
+class EFI_FREEFORM_SUBTYPE_GUID_SECTION(Structure):\r
+    _pack_ = 1\r
+    _fields_ = [\r
+        ('SubTypeGuid',              GUID),\r
+    ]\r
+\r
+    def ExtHeaderSize(self) -> int:\r
+        return 16\r
+\r
+class EFI_GUID_DEFINED_SECTION(Structure):\r
+    _pack_ = 1\r
+    _fields_ = [\r
+        ('SectionDefinitionGuid',    GUID),\r
+        ('DataOffset',               c_uint16),\r
+        ('Attributes',               c_uint16),\r
+    ]\r
+\r
+    def ExtHeaderSize(self) -> int:\r
+        return 20\r
+\r
+def Get_USER_INTERFACE_Header(nums: int):\r
+    class EFI_SECTION_USER_INTERFACE(Structure):\r
+        _pack_ = 1\r
+        _fields_ = [\r
+            ('FileNameString',       ARRAY(c_uint16, nums)),\r
+        ]\r
+\r
+        def ExtHeaderSize(self) -> int:\r
+            return 2 * nums\r
+\r
+        def GetUiString(self) -> str:\r
+            UiString = ''\r
+            for i in range(nums):\r
+                if self.FileNameString[i]:\r
+                    UiString += chr(self.FileNameString[i])\r
+            return UiString\r
+\r
+    return EFI_SECTION_USER_INTERFACE\r
+\r
+def Get_VERSION_Header(nums: int):\r
+    class EFI_SECTION_VERSION(Structure):\r
+        _pack_ = 1\r
+        _fields_ = [\r
+            ('BuildNumber',          c_uint16),\r
+            ('VersionString',        ARRAY(c_uint16, nums)),\r
+        ]\r
+\r
+        def ExtHeaderSize(self) -> int:\r
+            return 2 * (nums+1)\r
+\r
+        def GetVersionString(self) -> str:\r
+            VersionString = ''\r
+            for i in range(nums):\r
+                if self.VersionString[i]:\r
+                    VersionString += chr(self.VersionString[i])\r
+            return VersionString\r
+\r
+    return EFI_SECTION_VERSION\r