2009-07-17 11:10:31 +02:00
|
|
|
## @file
|
|
|
|
# process OptionROM generation
|
|
|
|
#
|
2016-10-19 11:09:43 +02:00
|
|
|
# Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>
|
2009-07-17 11:10:31 +02:00
|
|
|
#
|
2010-05-18 07:04:32 +02:00
|
|
|
# This program and the accompanying materials
|
2009-07-17 11:10:31 +02:00
|
|
|
# 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
|
|
|
|
#
|
2014-08-15 05:06:48 +02:00
|
|
|
import Common.LongFilePathOs as os
|
2009-07-17 11:10:31 +02:00
|
|
|
import subprocess
|
|
|
|
import StringIO
|
|
|
|
|
|
|
|
import OptRomInfStatement
|
|
|
|
from GenFdsGlobalVariable import GenFdsGlobalVariable
|
|
|
|
from GenFds import GenFds
|
|
|
|
from CommonDataClass.FdfClass import OptionRomClassObject
|
|
|
|
from Common.Misc import SaveFileOnChange
|
|
|
|
from Common import EdkLogger
|
|
|
|
from Common.BuildToolError import *
|
|
|
|
|
|
|
|
T_CHAR_LF = '\n'
|
|
|
|
|
|
|
|
##
|
|
|
|
#
|
|
|
|
#
|
|
|
|
class OPTIONROM (OptionRomClassObject):
|
|
|
|
## The constructor
|
|
|
|
#
|
|
|
|
# @param self The object pointer
|
|
|
|
#
|
|
|
|
def __init__(self):
|
|
|
|
OptionRomClassObject.__init__(self)
|
|
|
|
|
|
|
|
|
|
|
|
## AddToBuffer()
|
|
|
|
#
|
|
|
|
# Generate Option ROM
|
|
|
|
#
|
|
|
|
# @param self The object pointer
|
|
|
|
# @param Buffer The buffer generated OptROM data will be put
|
|
|
|
# @retval string Generated OptROM file path
|
|
|
|
#
|
|
|
|
def AddToBuffer (self, Buffer) :
|
|
|
|
|
|
|
|
GenFdsGlobalVariable.InfLogger( "\nGenerating %s Option ROM ..." %self.DriverName)
|
|
|
|
|
|
|
|
EfiFileList = []
|
|
|
|
BinFileList = []
|
|
|
|
|
|
|
|
# Process Modules in FfsList
|
|
|
|
for FfsFile in self.FfsList :
|
|
|
|
|
|
|
|
if isinstance(FfsFile, OptRomInfStatement.OptRomInfStatement):
|
|
|
|
FilePathNameList = FfsFile.GenFfs()
|
|
|
|
if len(FilePathNameList) == 0:
|
|
|
|
EdkLogger.error("GenFds", GENFDS_ERROR, "Module %s not produce .efi files, so NO file could be put into option ROM." % (FfsFile.InfFileName))
|
|
|
|
if FfsFile.OverrideAttribs == None:
|
|
|
|
EfiFileList.extend(FilePathNameList)
|
|
|
|
else:
|
|
|
|
FileName = os.path.basename(FilePathNameList[0])
|
2016-10-19 11:09:43 +02:00
|
|
|
TmpOutputDir = os.path.join(GenFdsGlobalVariable.FvDir, self.DriverName, FfsFile.CurrentArch)
|
2009-07-17 11:10:31 +02:00
|
|
|
if not os.path.exists(TmpOutputDir) :
|
|
|
|
os.makedirs(TmpOutputDir)
|
|
|
|
TmpOutputFile = os.path.join(TmpOutputDir, FileName+'.tmp')
|
|
|
|
|
|
|
|
GenFdsGlobalVariable.GenerateOptionRom(TmpOutputFile,
|
|
|
|
FilePathNameList,
|
|
|
|
[],
|
|
|
|
FfsFile.OverrideAttribs.NeedCompress,
|
|
|
|
FfsFile.OverrideAttribs.PciClassCode,
|
|
|
|
FfsFile.OverrideAttribs.PciRevision,
|
|
|
|
FfsFile.OverrideAttribs.PciDeviceId,
|
|
|
|
FfsFile.OverrideAttribs.PciVendorId)
|
|
|
|
BinFileList.append(TmpOutputFile)
|
|
|
|
else:
|
|
|
|
FilePathName = FfsFile.GenFfs()
|
|
|
|
if FfsFile.OverrideAttribs != None:
|
|
|
|
FileName = os.path.basename(FilePathName)
|
2016-10-19 11:09:43 +02:00
|
|
|
TmpOutputDir = os.path.join(GenFdsGlobalVariable.FvDir, self.DriverName, FfsFile.CurrentArch)
|
2009-07-17 11:10:31 +02:00
|
|
|
if not os.path.exists(TmpOutputDir) :
|
|
|
|
os.makedirs(TmpOutputDir)
|
|
|
|
TmpOutputFile = os.path.join(TmpOutputDir, FileName+'.tmp')
|
|
|
|
|
|
|
|
GenFdsGlobalVariable.GenerateOptionRom(TmpOutputFile,
|
|
|
|
[FilePathName],
|
|
|
|
[],
|
|
|
|
FfsFile.OverrideAttribs.NeedCompress,
|
|
|
|
FfsFile.OverrideAttribs.PciClassCode,
|
|
|
|
FfsFile.OverrideAttribs.PciRevision,
|
|
|
|
FfsFile.OverrideAttribs.PciDeviceId,
|
|
|
|
FfsFile.OverrideAttribs.PciVendorId)
|
|
|
|
BinFileList.append(TmpOutputFile)
|
|
|
|
else:
|
|
|
|
if FfsFile.FileType == 'EFI':
|
|
|
|
EfiFileList.append(FilePathName)
|
|
|
|
else:
|
|
|
|
BinFileList.append(FilePathName)
|
|
|
|
|
|
|
|
#
|
|
|
|
# Call EfiRom tool
|
|
|
|
#
|
|
|
|
OutputFile = os.path.join(GenFdsGlobalVariable.FvDir, self.DriverName)
|
|
|
|
OutputFile = OutputFile + '.rom'
|
|
|
|
|
|
|
|
GenFdsGlobalVariable.GenerateOptionRom(
|
|
|
|
OutputFile,
|
|
|
|
EfiFileList,
|
|
|
|
BinFileList
|
|
|
|
)
|
|
|
|
|
|
|
|
GenFdsGlobalVariable.InfLogger( "\nGenerate %s Option ROM Successfully" %self.DriverName)
|
|
|
|
GenFdsGlobalVariable.SharpCounter = 0
|
|
|
|
|
|
|
|
return OutputFile
|
|
|
|
|
|
|
|
class OverrideAttribs:
|
|
|
|
|
|
|
|
## The constructor
|
|
|
|
#
|
|
|
|
# @param self The object pointer
|
|
|
|
#
|
|
|
|
def __init__(self):
|
|
|
|
|
|
|
|
self.PciVendorId = None
|
|
|
|
self.PciClassCode = None
|
|
|
|
self.PciDeviceId = None
|
|
|
|
self.PciRevision = None
|
2009-09-11 05:14:43 +02:00
|
|
|
self.NeedCompress = None
|
2009-07-17 11:10:31 +02:00
|
|
|
|
|
|
|
|