1## @file 2# process OptionROM generation from INF statement 3# 4# Copyright (c) 2007, Intel Corporation. All rights reserved.<BR> 5# 6# This program and the accompanying materials 7# are licensed and made available under the terms and conditions of the BSD License 8# which accompanies this distribution. The full text of the license may be found at 9# http://opensource.org/licenses/bsd-license.php 10# 11# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13# 14 15## 16# Import Modules 17# 18import RuleSimpleFile 19import RuleComplexFile 20import Section 21import OptionRom 22import Common.GlobalData as GlobalData 23 24from Common.DataType import * 25from Common.String import * 26from FfsInfStatement import FfsInfStatement 27from GenFdsGlobalVariable import GenFdsGlobalVariable 28 29## 30# 31# 32class OptRomInfStatement (FfsInfStatement): 33 ## The constructor 34 # 35 # @param self The object pointer 36 # 37 def __init__(self): 38 FfsInfStatement.__init__(self) 39 self.OverrideAttribs = None 40 41 ## __GetOptRomParams() method 42 # 43 # Parse inf file to get option ROM related parameters 44 # 45 # @param self The object pointer 46 # 47 def __GetOptRomParams(self): 48 49 if self.OverrideAttribs == None: 50 self.OverrideAttribs = OptionRom.OverrideAttribs() 51 52 if self.OverrideAttribs.NeedCompress == None: 53 self.OverrideAttribs.NeedCompress = self.OptRomDefs.get ('PCI_COMPRESS') 54 if self.OverrideAttribs.NeedCompress is not None: 55 if self.OverrideAttribs.NeedCompress.upper() not in ('TRUE', 'FALSE'): 56 GenFdsGlobalVariable.ErrorLogger( "Expected TRUE/FALSE for PCI_COMPRESS: %s" %self.InfFileName) 57 self.OverrideAttribs.NeedCompress = \ 58 self.OverrideAttribs.NeedCompress.upper() == 'TRUE' 59 60 if self.OverrideAttribs.PciVendorId == None: 61 self.OverrideAttribs.PciVendorId = self.OptRomDefs.get ('PCI_VENDOR_ID') 62 63 if self.OverrideAttribs.PciClassCode == None: 64 self.OverrideAttribs.PciClassCode = self.OptRomDefs.get ('PCI_CLASS_CODE') 65 66 if self.OverrideAttribs.PciDeviceId == None: 67 self.OverrideAttribs.PciDeviceId = self.OptRomDefs.get ('PCI_DEVICE_ID') 68 69 if self.OverrideAttribs.PciRevision == None: 70 self.OverrideAttribs.PciRevision = self.OptRomDefs.get ('PCI_REVISION') 71 72# InfObj = GenFdsGlobalVariable.WorkSpace.BuildObject[self.PathClassObj, self.CurrentArch] 73# RecordList = InfObj._RawData[MODEL_META_DATA_HEADER, InfObj._Arch, InfObj._Platform] 74# for Record in RecordList: 75# Record = ReplaceMacros(Record, GlobalData.gEdkGlobal, False) 76# Name = Record[0] 77 ## GenFfs() method 78 # 79 # Generate FFS 80 # 81 # @param self The object pointer 82 # @retval string Generated .efi file name 83 # 84 def GenFfs(self): 85 # 86 # Parse Inf file get Module related information 87 # 88 89 self.__InfParse__() 90 self.__GetOptRomParams() 91 # 92 # Get the rule of how to generate Ffs file 93 # 94 Rule = self.__GetRule__() 95 GenFdsGlobalVariable.VerboseLogger( "Packing binaries from inf file : %s" %self.InfFileName) 96 #FileType = Ffs.Ffs.ModuleTypeToFileType[Rule.ModuleType] 97 # 98 # For the rule only has simpleFile 99 # 100 if isinstance (Rule, RuleSimpleFile.RuleSimpleFile) : 101 EfiOutputList = self.__GenSimpleFileSection__(Rule) 102 return EfiOutputList 103 # 104 # For Rule has ComplexFile 105 # 106 elif isinstance(Rule, RuleComplexFile.RuleComplexFile): 107 EfiOutputList = self.__GenComplexFileSection__(Rule) 108 return EfiOutputList 109 110 ## __GenSimpleFileSection__() method 111 # 112 # Get .efi files according to simple rule. 113 # 114 # @param self The object pointer 115 # @param Rule The rule object used to generate section 116 # @retval string File name of the generated section file 117 # 118 def __GenSimpleFileSection__(self, Rule): 119 # 120 # Prepare the parameter of GenSection 121 # 122 123 OutputFileList = [] 124 if Rule.FileName != None: 125 GenSecInputFile = self.__ExtendMacro__(Rule.FileName) 126 OutputFileList.append(GenSecInputFile) 127 else: 128 OutputFileList, IsSect = Section.Section.GetFileList(self, '', Rule.FileExtension) 129 130 return OutputFileList 131 132 133 ## __GenComplexFileSection__() method 134 # 135 # Get .efi by sections in complex Rule 136 # 137 # @param self The object pointer 138 # @param Rule The rule object used to generate section 139 # @retval string File name of the generated section file 140 # 141 def __GenComplexFileSection__(self, Rule): 142 143 OutputFileList = [] 144 for Sect in Rule.SectionList: 145 if Sect.SectionType == 'PE32': 146 if Sect.FileName != None: 147 GenSecInputFile = self.__ExtendMacro__(Sect.FileName) 148 OutputFileList.append(GenSecInputFile) 149 else: 150 FileList, IsSect = Section.Section.GetFileList(self, '', Sect.FileExtension) 151 OutputFileList.extend(FileList) 152 153 return OutputFileList 154 155