mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-11-04 13:35:48 +01:00 
			
		
		
		
	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
 | 
						|
 | 
						|
     |