]> git.proxmox.com Git - mirror_edk2.git/blobdiff - BaseTools/Source/Python/GenFds/FfsFileStatement.py
Sync EDKII BaseTools to BaseTools project r1903.
[mirror_edk2.git] / BaseTools / Source / Python / GenFds / FfsFileStatement.py
index e3f2e68fb888fb281a112498f415194aa39c48cc..b0b1b00c7e751074612fb3fc928e982be7706972 100644 (file)
@@ -1,7 +1,7 @@
 ## @file\r
 # process FFS generation from FILE statement\r
 #\r
-#  Copyright (c) 2007, Intel Corporation\r
+#  Copyright (c) 2007 - 2010, Intel Corporation\r
 #\r
 #  All rights reserved. This program and the accompanying materials\r
 #  are licensed and made available under the terms and conditions of the BSD License\r
 #\r
 import Ffs\r
 import Rule\r
-from GenFdsGlobalVariable import GenFdsGlobalVariable\r
 import os\r
 import StringIO\r
 import subprocess\r
+\r
+from GenFdsGlobalVariable import GenFdsGlobalVariable\r
 from CommonDataClass.FdfClass import FileStatementClassObject\r
 from Common import EdkLogger\r
 from Common.BuildToolError import *\r
 from Common.Misc import GuidStructureByteArrayToGuidString\r
+from GuidSection import GuidSection\r
+from FvImageSection import FvImageSection\r
 \r
 ## generate FFS from FILE\r
 #\r
@@ -41,11 +44,13 @@ class FileStatement (FileStatementClassObject) :
     #\r
     #   Generate FFS\r
     #\r
-    #   @param  self        The object pointer\r
-    #   @param  Dict        dictionary contains macro and value pair\r
-    #   @retval string      Generated FFS file name\r
+    #   @param  self         The object pointer\r
+    #   @param  Dict         dictionary contains macro and value pair\r
+    #   @param  FvChildAddr  Array of the inside FvImage base address\r
+    #   @param  FvParentAddr Parent Fv base address\r
+    #   @retval string       Generated FFS file name\r
     #\r
-    def GenFfs(self, Dict = {}):\r
+    def GenFfs(self, Dict = {}, FvChildAddr=[], FvParentAddr=None):\r
         \r
         if self.NameGuid != None and self.NameGuid.startswith('PCD('):\r
             PcdValue = GenFdsGlobalVariable.GetPcdValue(self.NameGuid)\r
@@ -92,6 +97,15 @@ class FileStatement (FileStatementClassObject) :
             for section in self.SectionList :\r
                 Index = Index + 1\r
                 SecIndex = '%d' %Index\r
+                # process the inside FvImage from FvSection or GuidSection\r
+                if FvChildAddr != []:\r
+                    if isinstance(section, FvImageSection):\r
+                        section.FvAddr = FvChildAddr.pop(0)\r
+                    elif isinstance(section, GuidSection):\r
+                        section.FvAddr = FvChildAddr\r
+                if FvParentAddr != None and isinstance(section, GuidSection):\r
+                    section.FvParentAddr = FvParentAddr\r
+\r
                 sectList, align = section.GenSection(OutputDir, self.NameGuid, SecIndex, self.KeyStringList, None, Dict)\r
                 if sectList != []:\r
                     for sect in sectList:\r