summaryrefslogtreecommitdiffstats
path: root/IntelFspPkg/Tools/PatchFv.py
diff options
context:
space:
mode:
authorYao, Jiewen <Jiewen.Yao@intel.com>2015-04-23 08:52:21 +0000
committerjyao1 <jyao1@Edk2>2015-04-23 08:52:21 +0000
commit9da591867c0bad1abbe17a321dc5b16d95226c6a (patch)
treed73d5eefb589fec2196b92e1cb741317300f16e0 /IntelFspPkg/Tools/PatchFv.py
parent3b7f0a488be0ca7a2a8e4c352b0e10496bee9530 (diff)
downloadedk2-9da591867c0bad1abbe17a321dc5b16d95226c6a.tar.gz
edk2-9da591867c0bad1abbe17a321dc5b16d95226c6a.tar.bz2
edk2-9da591867c0bad1abbe17a321dc5b16d95226c6a.zip
Update IntelFspPkg to support FSP1.1
-- Add BootLoaderTolumSize support -- Extend FspApiCallingCheck with ApiParam for BootLoaderTolumSize -- Rename all Bootloader to BootLoader as official name -- Rename Ucode to Microcode -- Remove FspSelfCheck API, because it is merged into SecPlatformInit -- Add GetFspVpdDataPointer() in FspCommonLib.h -- Document FspSecPlatformLib.h -- Reorg FSP_PLAT_DATA data structure to let it match FSP spec. -- Move helper function in FspSecCore to reduce platform enabling effort -- Fix LibraryClasses declaration in DEC file. -- Enhance PatchFv to check if it is valid FSP bin. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: "Yao, Jiewen" <Jiewen.Yao@intel.com> Reviewed-by: "Ma, Maurice" <maurice.ma@intel.com> Reviewed-by: "Rangarajan, Ravi P" <ravi.p.rangarajan@intel.com> Reviewed-by: "Mudusuru, Giri P" <giri.p.mudusuru@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17196 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'IntelFspPkg/Tools/PatchFv.py')
-rw-r--r--IntelFspPkg/Tools/PatchFv.py36
1 files changed, 29 insertions, 7 deletions
diff --git a/IntelFspPkg/Tools/PatchFv.py b/IntelFspPkg/Tools/PatchFv.py
index cc22cc201e..2143161d2c 100644
--- a/IntelFspPkg/Tools/PatchFv.py
+++ b/IntelFspPkg/Tools/PatchFv.py
@@ -1,6 +1,6 @@
## @ PatchFv.py
#
-# Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR>
# This program and the accompanying materials are licensed and made available under
# the terms and conditions of the BSD License that accompanies this distribution.
# The full text of the license may be found at
@@ -23,14 +23,33 @@ def readDataFromFile (binfile, offset, len=1):
offval = fsize - (0xFFFFFFFF - offval + 1)
fd.seek(offval)
bytearray = [ord(b) for b in fd.read(len)]
- value = 0;
- idx = len - 1;
+ value = 0
+ idx = len - 1
while idx >= 0:
value = value << 8 | bytearray[idx]
idx = idx - 1
fd.close()
return value
+def IsFspHeaderValid (binfile):
+ fd = open (binfile, "rb")
+ bindat = fd.read(0x200)
+ fd.close()
+ HeaderList = ['FSPH' , 'FSPP' , 'FSPE']
+ OffsetList = []
+ for each in HeaderList:
+ if each in bindat:
+ idx = bindat.index(each)
+ else:
+ idx = 0
+ OffsetList.append(idx)
+ if not OffsetList[0] or not OffsetList[1]:
+ return False
+ Revision = ord(bindat[OffsetList[0] + 0x0B])
+ if Revision > 1 and not OffsetList[2]:
+ return False
+ return True
+
def patchDataInFile (binfile, offset, value, len=1):
fd = open(binfile, "r+b")
fsize = os.path.getsize(binfile)
@@ -38,7 +57,7 @@ def patchDataInFile (binfile, offset, value, len=1):
if (offval & 0x80000000):
offval = fsize - (0xFFFFFFFF - offval + 1)
bytearray = []
- idx = 0;
+ idx = 0
while idx < len:
bytearray.append(value & 0xFF)
value = value >> 8
@@ -46,7 +65,7 @@ def patchDataInFile (binfile, offset, value, len=1):
fd.seek(offval)
fd.write("".join(chr(b) for b in bytearray))
fd.close()
- return len;
+ return len
class Symbols:
@@ -346,7 +365,7 @@ class Symbols:
values.append(self.parseBrace())
else:
break
- value = 1;
+ value = 1
for each in values:
value *= each
return value
@@ -354,7 +373,7 @@ class Symbols:
def parseAndOr(self):
values = [self.parseMul()]
op = None
- value = 0xFFFFFFFF;
+ value = 0xFFFFFFFF
while True:
self.skipSpace()
char = self.getCurr()
@@ -500,6 +519,9 @@ def main():
fdSize = symTables.getFdSize()
try:
+ ret = IsFspHeaderValid(fdFile)
+ if ret == False:
+ raise Exception ("The FSP header is not valid. Stop patching FD.")
comment = ""
for fvFile in sys.argv[3:]:
items = fvFile.split(",")