## @file # process OptionROM generation from INF statement # # Copyright (c) 2007, Intel Corporation. All rights reserved.
# # 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