]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFsp2Pkg/Tools/SplitFspBin.py
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / IntelFsp2Pkg / Tools / SplitFspBin.py
index 24272e82af88cb832ca68a5fa7a3571f31671112..419e5ba9850ef42057c43dfa549fa59d434c2b1c 100644 (file)
@@ -1,6 +1,6 @@
-## @ FspTool.py\r
+## @ SplitFspBin.py\r
 #\r
-# Copyright (c) 2015 - 2020, Intel Corporation. All rights reserved.<BR>\r
+# Copyright (c) 2015 - 2022, Intel Corporation. All rights reserved.<BR>\r
 # SPDX-License-Identifier: BSD-2-Clause-Patent\r
 #\r
 ##\r
@@ -103,26 +103,31 @@ class FSP_COMMON_HEADER(Structure):
 \r
 class FSP_INFORMATION_HEADER(Structure):\r
      _fields_ = [\r
-        ('Signature',            ARRAY(c_char, 4)),\r
-        ('HeaderLength',         c_uint32),\r
-        ('Reserved1',            c_uint16),\r
-        ('SpecVersion',          c_uint8),\r
-        ('HeaderRevision',       c_uint8),\r
-        ('ImageRevision',        c_uint32),\r
-        ('ImageId',              ARRAY(c_char, 8)),\r
-        ('ImageSize',            c_uint32),\r
-        ('ImageBase',            c_uint32),\r
-        ('ImageAttribute',       c_uint16),\r
-        ('ComponentAttribute',   c_uint16),\r
-        ('CfgRegionOffset',      c_uint32),\r
-        ('CfgRegionSize',        c_uint32),\r
-        ('Reserved2',            c_uint32),\r
-        ('TempRamInitEntryOffset',     c_uint32),\r
-        ('Reserved3',                  c_uint32),\r
-        ('NotifyPhaseEntryOffset',     c_uint32),\r
-        ('FspMemoryInitEntryOffset',   c_uint32),\r
-        ('TempRamExitEntryOffset',     c_uint32),\r
-        ('FspSiliconInitEntryOffset',  c_uint32)\r
+        ('Signature',                       ARRAY(c_char, 4)),\r
+        ('HeaderLength',                    c_uint32),\r
+        ('Reserved1',                       c_uint16),\r
+        ('SpecVersion',                     c_uint8),\r
+        ('HeaderRevision',                  c_uint8),\r
+        ('ImageRevision',                   c_uint32),\r
+        ('ImageId',                         ARRAY(c_char, 8)),\r
+        ('ImageSize',                       c_uint32),\r
+        ('ImageBase',                       c_uint32),\r
+        ('ImageAttribute',                  c_uint16),\r
+        ('ComponentAttribute',              c_uint16),\r
+        ('CfgRegionOffset',                 c_uint32),\r
+        ('CfgRegionSize',                   c_uint32),\r
+        ('Reserved2',                       c_uint32),\r
+        ('TempRamInitEntryOffset',          c_uint32),\r
+        ('Reserved3',                       c_uint32),\r
+        ('NotifyPhaseEntryOffset',          c_uint32),\r
+        ('FspMemoryInitEntryOffset',        c_uint32),\r
+        ('TempRamExitEntryOffset',          c_uint32),\r
+        ('FspSiliconInitEntryOffset',       c_uint32),\r
+        ('FspMultiPhaseSiInitEntryOffset',  c_uint32),\r
+        ('ExtendedImageRevision',           c_uint16),\r
+        ('Reserved4',                       c_uint16),\r
+        ('FspMultiPhaseMemInitEntryOffset', c_uint32),\r
+        ('FspSmmInitEntryOffset',           c_uint32)\r
     ]\r
 \r
 class FSP_PATCH_TABLE(Structure):\r
@@ -390,7 +395,26 @@ def OutputStruct (obj, indent = 0, plen = 0):
             if IsStrType (val):\r
                 rep = HandleNameStr (val)\r
             elif IsIntegerType (val):\r
-                rep = '0x%X' % val\r
+                if (key == 'ImageRevision'):\r
+                    FspImageRevisionMajor       = ((val >> 24) & 0xFF)\r
+                    FspImageRevisionMinor       = ((val >> 16) & 0xFF)\r
+                    FspImageRevisionRevision    = ((val >> 8) & 0xFF)\r
+                    FspImageRevisionBuildNumber = (val & 0xFF)\r
+                    rep = '0x%08X' % val\r
+                elif (key == 'ExtendedImageRevision'):\r
+                    FspImageRevisionRevision    |= (val & 0xFF00)\r
+                    FspImageRevisionBuildNumber |= ((val << 8) & 0xFF00)\r
+                    rep = "0x%04X ('%02X.%02X.%04X.%04X')" % (val, FspImageRevisionMajor, FspImageRevisionMinor, FspImageRevisionRevision, FspImageRevisionBuildNumber)\r
+                elif field[1] == c_uint64:\r
+                    rep = '0x%016X' % val\r
+                elif field[1] == c_uint32:\r
+                    rep = '0x%08X' % val\r
+                elif field[1] == c_uint16:\r
+                    rep = '0x%04X' % val\r
+                elif field[1] == c_uint8:\r
+                    rep = '0x%02X' % val\r
+                else:\r
+                    rep = '0x%X' % val\r
             elif isinstance(val, c_uint24):\r
                 rep = '0x%X' % val.get_value()\r
             elif 'c_ubyte_Array' in str(type(val)):\r
@@ -470,7 +494,7 @@ class FspImage:
         self.FihOffset = fihoff\r
         self.Offset    = offset\r
         self.FvIdxList = []\r
-        self.Type      = "XTMSXXXXOXXXXXXX"[(fih.ComponentAttribute >> 12) & 0x0F]\r
+        self.Type      = "XTMSIXXXOXXXXXXX"[(fih.ComponentAttribute >> 12) & 0x0F]\r
         self.PatchList = patch\r
         self.PatchList.append(fihoff + 0x1C)\r
 \r
@@ -847,7 +871,7 @@ def main ():
     parser_rebase  = subparsers.add_parser('rebase',  help='rebase a FSP into a new base address')\r
     parser_rebase.set_defaults(which='rebase')\r
     parser_rebase.add_argument('-f',  '--fspbin' , dest='FspBinary',  type=str, help='FSP binary file path', required = True)\r
-    parser_rebase.add_argument('-c',  '--fspcomp', choices=['t','m','s','o'],  nargs='+', dest='FspComponent', type=str, help='FSP component to rebase', default = "['t']", required = True)\r
+    parser_rebase.add_argument('-c',  '--fspcomp', choices=['t','m','s','o','i'],  nargs='+', dest='FspComponent', type=str, help='FSP component to rebase', default = "['t']", required = True)\r
     parser_rebase.add_argument('-b',  '--newbase', dest='FspBase', nargs='+', type=str, help='Rebased FSP binary file name', default = '', required = True)\r
     parser_rebase.add_argument('-o',  '--outdir' , dest='OutputDir',  type=str, help='Output directory path', default = '.')\r
     parser_rebase.add_argument('-n',  '--outfile', dest='OutputFile', type=str, help='Rebased FSP binary file name', default = '')\r