X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=BaseTools%2FSource%2FPython%2FFirmwareStorageFormat%2FSectionHeader.py;fp=BaseTools%2FSource%2FPython%2FFirmwareStorageFormat%2FSectionHeader.py;h=ee6a63679d89cec8f8dc7df979d8c4f75f63b374;hp=0000000000000000000000000000000000000000;hb=a64b944942d828fe98e4843929662aad7f47bcca;hpb=101f4c789221716585b972f2c2a22a85c078ef1d diff --git a/BaseTools/Source/Python/FirmwareStorageFormat/SectionHeader.py b/BaseTools/Source/Python/FirmwareStorageFormat/SectionHeader.py new file mode 100644 index 0000000000..ee6a63679d --- /dev/null +++ b/BaseTools/Source/Python/FirmwareStorageFormat/SectionHeader.py @@ -0,0 +1,110 @@ +## @file +# This file is used to define the Section Header C Struct. +# +# Copyright (c) 2021-, Intel Corporation. All rights reserved.
+# SPDX-License-Identifier: BSD-2-Clause-Patent +## +from struct import * +from ctypes import * +from FirmwareStorageFormat.Common import * + +EFI_COMMON_SECTION_HEADER_LEN = 4 +EFI_COMMON_SECTION_HEADER2_LEN = 8 + +class EFI_COMMON_SECTION_HEADER(Structure): + _pack_ = 1 + _fields_ = [ + ('Size', ARRAY(c_uint8, 3)), + ('Type', c_uint8), + ] + + @property + def SECTION_SIZE(self) -> int: + return self.Size[0] | self.Size[1] << 8 | self.Size[2] << 16 + + def Common_Header_Size(self) -> int: + return 4 + +class EFI_COMMON_SECTION_HEADER2(Structure): + _pack_ = 1 + _fields_ = [ + ('Size', ARRAY(c_uint8, 3)), + ('Type', c_uint8), + ('ExtendedSize', c_uint32), + ] + + @property + def SECTION_SIZE(self) -> int: + return self.ExtendedSize + + def Common_Header_Size(self) -> int: + return 8 + +class EFI_COMPRESSION_SECTION(Structure): + _pack_ = 1 + _fields_ = [ + ('UncompressedLength', c_uint32), + ('CompressionType', c_uint8), + ] + + def ExtHeaderSize(self) -> int: + return 5 + +class EFI_FREEFORM_SUBTYPE_GUID_SECTION(Structure): + _pack_ = 1 + _fields_ = [ + ('SubTypeGuid', GUID), + ] + + def ExtHeaderSize(self) -> int: + return 16 + +class EFI_GUID_DEFINED_SECTION(Structure): + _pack_ = 1 + _fields_ = [ + ('SectionDefinitionGuid', GUID), + ('DataOffset', c_uint16), + ('Attributes', c_uint16), + ] + + def ExtHeaderSize(self) -> int: + return 20 + +def Get_USER_INTERFACE_Header(nums: int): + class EFI_SECTION_USER_INTERFACE(Structure): + _pack_ = 1 + _fields_ = [ + ('FileNameString', ARRAY(c_uint16, nums)), + ] + + def ExtHeaderSize(self) -> int: + return 2 * nums + + def GetUiString(self) -> str: + UiString = '' + for i in range(nums): + if self.FileNameString[i]: + UiString += chr(self.FileNameString[i]) + return UiString + + return EFI_SECTION_USER_INTERFACE + +def Get_VERSION_Header(nums: int): + class EFI_SECTION_VERSION(Structure): + _pack_ = 1 + _fields_ = [ + ('BuildNumber', c_uint16), + ('VersionString', ARRAY(c_uint16, nums)), + ] + + def ExtHeaderSize(self) -> int: + return 2 * (nums+1) + + def GetVersionString(self) -> str: + VersionString = '' + for i in range(nums): + if self.VersionString[i]: + VersionString += chr(self.VersionString[i]) + return VersionString + + return EFI_SECTION_VERSION