Signed-off-by: lgao4 Reviewed-by: jsu1 Reviewed-by: ydliu git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12525 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			155 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| ## @file
 | |
| # process OptionROM generation from INF statement
 | |
| #
 | |
| #  Copyright (c) 2007, 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
 | |
| #  which accompanies this distribution.  The full text of the license may be found at
 | |
| #  http://opensource.org/licenses/bsd-license.php
 | |
| #
 | |
| #  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | |
| #  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | |
| #
 | |
| 
 | |
| ##
 | |
| # Import Modules
 | |
| #
 | |
| import RuleSimpleFile
 | |
| import RuleComplexFile
 | |
| import Section
 | |
| import OptionRom
 | |
| import Common.GlobalData as GlobalData
 | |
| 
 | |
| from Common.DataType import *
 | |
| from Common.String import *
 | |
| from FfsInfStatement import FfsInfStatement
 | |
| from GenFdsGlobalVariable import GenFdsGlobalVariable
 | |
| 
 | |
| ## 
 | |
| #
 | |
| #
 | |
| class OptRomInfStatement (FfsInfStatement):
 | |
|     ## The constructor
 | |
|     #
 | |
|     #   @param  self        The object pointer
 | |
|     #
 | |
|     def __init__(self):
 | |
|         FfsInfStatement.__init__(self)
 | |
|         self.OverrideAttribs = None
 | |
| 
 | |
|     ## __GetOptRomParams() method
 | |
|     #
 | |
|     #   Parse inf file to get option ROM related parameters
 | |
|     #
 | |
|     #   @param  self        The object pointer
 | |
|     #
 | |
|     def __GetOptRomParams(self):
 | |
|         
 | |
|         if self.OverrideAttribs == None:
 | |
|             self.OverrideAttribs = OptionRom.OverrideAttribs()
 | |
| 
 | |
|         if self.OverrideAttribs.NeedCompress == None:
 | |
|             self.OverrideAttribs.NeedCompress = self.OptRomDefs.get ('PCI_COMPRESS')
 | |
|             if self.OverrideAttribs.NeedCompress is not None:
 | |
|                 if self.OverrideAttribs.NeedCompress.upper() not in ('TRUE', 'FALSE'):
 | |
|                     GenFdsGlobalVariable.ErrorLogger( "Expected TRUE/FALSE for PCI_COMPRESS: %s" %self.InfFileName)
 | |
|                 self.OverrideAttribs.NeedCompress = \
 | |
|                     self.OverrideAttribs.NeedCompress.upper() == 'TRUE'
 | |
| 
 | |
|         if self.OverrideAttribs.PciVendorId == None:
 | |
|             self.OverrideAttribs.PciVendorId = self.OptRomDefs.get ('PCI_VENDOR_ID')
 | |
|         
 | |
|         if self.OverrideAttribs.PciClassCode == None:
 | |
|             self.OverrideAttribs.PciClassCode = self.OptRomDefs.get ('PCI_CLASS_CODE')
 | |
|             
 | |
|         if self.OverrideAttribs.PciDeviceId == None:
 | |
|             self.OverrideAttribs.PciDeviceId = self.OptRomDefs.get ('PCI_DEVICE_ID')
 | |
|             
 | |
|         if self.OverrideAttribs.PciRevision == None:
 | |
|             self.OverrideAttribs.PciRevision = self.OptRomDefs.get ('PCI_REVISION')
 | |
|         
 | |
| #        InfObj = GenFdsGlobalVariable.WorkSpace.BuildObject[self.PathClassObj, self.CurrentArch]  
 | |
| #        RecordList = InfObj._RawData[MODEL_META_DATA_HEADER, InfObj._Arch, InfObj._Platform]
 | |
| #        for Record in RecordList:
 | |
| #            Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False)
 | |
| #            Name = Record[0]  
 | |
|     ## GenFfs() method
 | |
|     #
 | |
|     #   Generate FFS
 | |
|     #
 | |
|     #   @param  self        The object pointer
 | |
|     #   @retval string      Generated .efi file name
 | |
|     #
 | |
|     def GenFfs(self):
 | |
|         #
 | |
|         # Parse Inf file get Module related information
 | |
|         #
 | |
| 
 | |
|         self.__InfParse__()
 | |
|         self.__GetOptRomParams()
 | |
|         #
 | |
|         # Get the rule of how to generate Ffs file
 | |
|         #
 | |
|         Rule = self.__GetRule__()
 | |
|         GenFdsGlobalVariable.VerboseLogger( "Packing binaries from inf file : %s" %self.InfFileName)
 | |
|         #FileType = Ffs.Ffs.ModuleTypeToFileType[Rule.ModuleType]
 | |
|         #
 | |
|         # For the rule only has simpleFile
 | |
|         #
 | |
|         if isinstance (Rule, RuleSimpleFile.RuleSimpleFile) :
 | |
|             EfiOutputList = self.__GenSimpleFileSection__(Rule)
 | |
|             return EfiOutputList
 | |
|         #
 | |
|         # For Rule has ComplexFile
 | |
|         #
 | |
|         elif isinstance(Rule, RuleComplexFile.RuleComplexFile):
 | |
|             EfiOutputList = self.__GenComplexFileSection__(Rule)
 | |
|             return EfiOutputList
 | |
| 
 | |
|     ## __GenSimpleFileSection__() method
 | |
|     #
 | |
|     #   Get .efi files according to simple rule.
 | |
|     #
 | |
|     #   @param  self        The object pointer
 | |
|     #   @param  Rule        The rule object used to generate section
 | |
|     #   @retval string      File name of the generated section file
 | |
|     #
 | |
|     def __GenSimpleFileSection__(self, Rule):
 | |
|         #
 | |
|         # Prepare the parameter of GenSection
 | |
|         #
 | |
| 
 | |
|         OutputFileList = []
 | |
|         if Rule.FileName != None:
 | |
|             GenSecInputFile = self.__ExtendMacro__(Rule.FileName)
 | |
|             OutputFileList.append(GenSecInputFile)
 | |
|         else:
 | |
|             OutputFileList, IsSect = Section.Section.GetFileList(self, '', Rule.FileExtension)
 | |
| 
 | |
|         return OutputFileList
 | |
| 
 | |
| 
 | |
|     ## __GenComplexFileSection__() method
 | |
|     #
 | |
|     #   Get .efi by sections in complex Rule
 | |
|     #
 | |
|     #   @param  self        The object pointer
 | |
|     #   @param  Rule        The rule object used to generate section
 | |
|     #   @retval string      File name of the generated section file
 | |
|     #
 | |
|     def __GenComplexFileSection__(self, Rule):
 | |
| 
 | |
|         OutputFileList = []
 | |
|         for Sect in Rule.SectionList:
 | |
|             if Sect.SectionType == 'PE32':
 | |
|                 if Sect.FileName != None:
 | |
|                     GenSecInputFile = self.__ExtendMacro__(Sect.FileName)
 | |
|                     OutputFileList.append(GenSecInputFile)
 | |
|                 else:
 | |
|                     FileList, IsSect = Section.Section.GetFileList(self, '', Sect.FileExtension)
 | |
|                     OutputFileList.extend(FileList)    
 | |
|         
 | |
|         return OutputFileList
 | |
| 
 | |
|      |