2009-07-17 11:10:31 +02:00
|
|
|
## @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()
|
2009-09-11 05:14:43 +02:00
|
|
|
|
|
|
|
if self.OverrideAttribs.NeedCompress == None:
|
|
|
|
self.OverrideAttribs.NeedCompress = self.OptRomDefs.get ('COMPRESS')
|
|
|
|
if self.OverrideAttribs.NeedCompress is not None:
|
|
|
|
if self.OverrideAttribs.NeedCompress.upper() not in ('TRUE', 'FALSE'):
|
|
|
|
GenFdsGlobalVariable.ErrorLogger( "Expected TRUE/FALSE for COMPRESS: %s" %self.InfFileName)
|
|
|
|
self.OverrideAttribs.NeedCompress = \
|
|
|
|
self.OverrideAttribs.NeedCompress.upper() == 'TRUE'
|
|
|
|
|
2009-07-17 11:10:31 +02:00
|
|
|
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
|
|
|
|
|
|
|
|
|