summaryrefslogtreecommitdiffstats
path: root/BaseTools/Source/Python/msa2inf/LoadMsa.py
diff options
context:
space:
mode:
Diffstat (limited to 'BaseTools/Source/Python/msa2inf/LoadMsa.py')
-rw-r--r--BaseTools/Source/Python/msa2inf/LoadMsa.py747
1 files changed, 747 insertions, 0 deletions
diff --git a/BaseTools/Source/Python/msa2inf/LoadMsa.py b/BaseTools/Source/Python/msa2inf/LoadMsa.py
new file mode 100644
index 0000000000..52f4b2d12f
--- /dev/null
+++ b/BaseTools/Source/Python/msa2inf/LoadMsa.py
@@ -0,0 +1,747 @@
+## @file
+# Open an MSA file and load all its contents to a ModuleClass object.
+#
+# 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 os
+from CommonDataClass.ModuleClass import *
+from Common.XmlRoutines import *
+from Common.MigrationUtilities import *
+
+
+## Load a list of Module Cloned Records.
+#
+# Read an input Module XML DOM object and return a list of Cloned Records
+# contained in the DOM object.
+#
+# @param XmlMsa An XML DOM object read from MSA file.
+#
+# @retvel ClonedRecords A list of Cloned Records loaded from XmlMsa.
+#
+def LoadModuleClonedRecords(XmlMsa):
+ XmlTag = "ModuleSurfaceArea/ModuleDefinitions/ClonedFrom/Cloned"
+ return map(LoadClonedRecord, XmlList(XmlMsa, XmlTag))
+
+## Load Module Header.
+#
+# Read an input Module XML DOM object and return Module Header class object
+# contained in the DOM object.
+#
+# @param XmlMsa An XML DOM object read from MSA file.
+# @param MsaFileName The file path of MSA File.
+#
+# @retvel ModuleHeader A new Module Header object loaded from XmlMsa.
+#
+def LoadModuleHeader(XmlMsa, MsaFileName):
+ ModuleHeader = ModuleHeaderClass()
+
+ XmlTag = "ModuleSurfaceArea/MsaHeader"
+ MsaHeader = XmlNode(XmlMsa, XmlTag)
+
+ SetIdentification(ModuleHeader, MsaHeader, "ModuleName", MsaFileName)
+ SetCommonHeader(ModuleHeader, MsaHeader)
+
+ XmlTag = "ModuleSurfaceArea/ModuleDefinitions/SupportedArchitectures"
+ ModuleHeader.SupArchList = XmlElement(XmlMsa, XmlTag).split()
+
+ XmlTag = "ModuleSurfaceArea/ModuleDefinitions/BinaryModule"
+ if XmlElement(XmlMsa, XmlTag).lower() == "true":
+ ModuleHeader.BinaryModule = True
+
+ XmlTag = "ModuleSurfaceArea/ModuleDefinitions/OutputFileBasename"
+ ModuleHeader.OutputFileBasename = XmlElement(XmlMsa, XmlTag)
+
+ XmlTag = "ModuleSurfaceArea/ModuleDefinitions/ClonedForm"
+ ModuleHeader.ClonedFrom = LoadModuleClonedRecords(XmlMsa)
+
+ XmlTag = "ModuleSurfaceArea/Externs/PcdDriverTypes"
+ ModuleHeader.PcdIsDriver = XmlElement(XmlMsa, XmlTag)
+
+ XmlTag = "ModuleSurfaceArea/Externs/TianoEdkFlashMap_h"
+ if XmlElement(XmlMsa, XmlTag).lower() == "true":
+ ModuleHeader.TianoEdkFlashMap_h = True
+
+ XmlTag = "ModuleSurfaceArea/Externs/Specification"
+ for Specification in XmlElementList(XmlMsa, XmlTag):
+ AddToSpecificationDict(ModuleHeader.Specification, Specification)
+
+ return ModuleHeader
+
+
+## Load a list of Module Library Classes.
+#
+# Read an input Module XML DOM object and return a list of Library Classes
+# contained in the DOM object.
+#
+# @param XmlMsa An XML DOM object read from MSA file.
+#
+# @retvel LibraryClasses A list of Library Classes loaded from XmlMsa.
+#
+def LoadModuleLibraryClasses(XmlMsa):
+ XmlTag = "ModuleSurfaceArea/LibraryClassDefinitions/LibraryClass"
+ return map(LoadLibraryClass, XmlList(XmlMsa, XmlTag))
+
+
+## Load a new Module Source class object.
+#
+# Read an input XML Source DOM object and return an object of Source
+# contained in the DOM object.
+#
+# @param XmlFilename A child XML DOM object in Module XML DOM.
+#
+# @retvel ModuleSource A new Source object created by XmlFilename.
+#
+def LoadModuleSource(XmlFilename):
+ ModuleSource = ModuleSourceFileClass()
+
+ ModuleSource.SourceFile = XmlElementData(XmlFilename)
+
+ XmlTag = "TagName"
+ ModuleSource.TagName = XmlAttribute(XmlFilename, XmlTag)
+
+ XmlTag = "ToolCode"
+ ModuleSource.ToolCode = XmlAttribute(XmlFilename, XmlTag)
+
+ XmlTag = "ToolChainFamily"
+ ModuleSource.ToolChainFamily = XmlAttribute(XmlFilename, XmlTag)
+
+ SetCommon(ModuleSource, XmlFilename)
+
+ return ModuleSource
+
+
+## Load a list of Module Sources.
+#
+# Read an input Module XML DOM object and return a list of Sources
+# contained in the DOM object.
+#
+# @param XmlMsa An XML DOM object read from MSA file.
+#
+# @retvel Sources A list of Sources loaded from XmlMsa.
+#
+def LoadModuleSources(XmlMsa):
+ XmlTag = "ModuleSurfaceArea/SourceFiles/Filename"
+ return map(LoadModuleSource, XmlList(XmlMsa, XmlTag))
+
+
+## Load a new Module Binary class object.
+#
+# Read an input XML Binary DOM object and return an object of Binary
+# contained in the DOM object.
+#
+# @param XmlFilename A child XML DOM object in Module XML DOM.
+#
+# @retvel ModuleBinary A new Binary object created by XmlFilename.
+#
+def LoadModuleBinary(XmlFilename):
+ ModuleBinary = ModuleBinaryFileClass()
+
+ ModuleBinary.BinaryFile = XmlElementData(XmlFilename)
+
+ XmlTag = "FileType"
+ ModuleBinary.FileType = XmlElementAttribute(XmlFilename, XmlTag)
+
+ SetCommon(ModuleBinary, XmlFilename)
+
+
+## Load a list of Module Binaries.
+#
+# Read an input Module XML DOM object and return a list of Binaries
+# contained in the DOM object.
+#
+# @param XmlMsa An XML DOM object read from MSA file.
+#
+# @retvel Binaries A list of Binaries loaded from XmlMsa.
+#
+def LoadModuleBinaries(XmlMsa):
+ XmlTag = "ModuleSurfaceArea/BinaryFiles/Filename"
+ return map(LoadModuleBinary, XmlList(XmlMsa, XmlTag))
+
+
+## Load a list of Module Non Processed Files.
+#
+# Read an input Module XML DOM object and return a list of Non Processed Files
+# contained in the DOM object.
+#
+# @param XmlMsa An XML DOM object read from MSA file.
+#
+# @retvel NonProcessedFiles A list of Non Processed Files loaded from XmlMsa.
+#
+def LoadModuleNonProcessedFiles(XmlMsa):
+ XmlTag = "ModuleSurfaceArea/NonProcessedFiles/Filename"
+ return XmlElementList(XmlMsa, XmlTag)
+
+
+## Load a new Module Package Dependency class object.
+#
+# Read an input XML PackageDependency DOM object and return an object of Package Dependency
+# contained in the DOM object.
+#
+# @param XmlPackage A child XML DOM object in Module XML DOM.
+#
+# @retvel ModulePackageDependency A new Package Dependency object created by XmlPackage.
+#
+def LoadModulePackageDependency(XmlPackage):
+ ModulePackageDependency = ModulePackageDependencyClass()
+
+ XmlTag = "PackageGuid"
+ PackageKey = XmlAttribute(XmlPackage, XmlTag)
+
+ #
+ #TODO: Add resolution for Package name, package Version
+ #
+ ModulePackageDependency.PackageGuid = PackageKey
+ SetCommon(ModulePackageDependency, XmlPackage)
+
+ return ModulePackageDependency
+
+
+## Load a list of Module Package Dependencies.
+#
+# Read an input Module XML DOM object and return a list of Package Dependencies
+# contained in the DOM object.
+#
+# @param XmlMsa An XML DOM object read from MSA file.
+#
+# @retvel PackageDependencies A list of Package Dependencies loaded from XmlMsa.
+#
+def LoadModulePackageDependencies(XmlMsa):
+ XmlTag = "ModuleSurfaceArea/PackageDependencies/Package"
+ return map(LoadModulePackageDependency, XmlList(XmlMsa, XmlTag))
+
+
+## Load a list of Module Protocols.
+#
+# Read an input Module XML DOM object and return a list of Protocols
+# contained in the DOM object.
+#
+# @param XmlMsa An XML DOM object read from MSA file.
+#
+# @retvel Protocols A list of Protocols loaded from XmlMsa.
+#
+def LoadModuleProtocols(XmlMsa):
+ XmlTag = "ModuleSurfaceArea/Protocols/Protocol"
+ XmlProtocolList = XmlList(XmlMsa, XmlTag)
+
+ XmlTag = "ModuleSurfaceArea/Protocols/ProtocolNotify"
+ XmlProtocolList += XmlList(XmlMsa, XmlTag)
+
+ return map(LoadGuidProtocolPpiCommon, XmlProtocolList)
+
+
+## Load a list of Module Ppis.
+#
+# Read an input Module XML DOM object and return a list of Ppis
+# contained in the DOM object.
+#
+# @param XmlMsa An XML DOM object read from MSA file.
+#
+# @retvel Ppis A list of Ppis loaded from XmlMsa.
+#
+def LoadModulePpis(XmlMsa):
+ XmlTag = "ModuleSurfaceArea/PPIs/Ppi"
+ XmlPpiList = XmlList(XmlMsa, XmlTag)
+
+ XmlTag = "ModuleSurfaceArea/PPIs/PpiNotify"
+ XmlPpiList += XmlList(XmlMsa, XmlTag)
+
+ return map(LoadGuidProtocolPpiCommon, XmlPpiList)
+
+
+## Load a new Module Event class object.
+#
+# Read an input XML Event DOM object and return an object of Event
+# contained in the DOM object.
+#
+# @param XmlEvent A child XML DOM object in Module XML DOM.
+# @param Type Specify the event type: SIGNAL_EVENT or CREATE_EVENT.
+#
+# @retvel ModuleEvent A new Event object created by XmlEvent.
+#
+def LoadModuleEvent(XmlEvent, Type):
+ ModuleEvent = ModuleEventClass()
+
+ XmlTag = "EventTypes/EventType"
+ ModuleEvent.CName = XmlElement(XmlEvent, XmlTag)
+
+ XmlTag = "EventGuidCName"
+ ModuleEvent.GuidCName = XmlAttribute(XmlEvent, XmlTag)
+
+ ModuleEvent.Type = Type
+
+ SetCommon(ModuleEvent, XmlEvent)
+
+ return ModuleEvent
+
+
+## Load a list of Module Events.
+#
+# Read an input Module XML DOM object and return a list of Events
+# contained in the DOM object.
+#
+# @param XmlMsa An XML DOM object read from MSA file.
+#
+# @retvel Events A list of Events loaded from XmlMsa.
+#
+def LoadModuleEvents(XmlMsa):
+ ModuleEvents = []
+
+ XmlTag = "ModuleSurfaceArea/Events/CreateEvents/EventTypes"
+ for XmlCreateEvent in XmlList(XmlMsa, XmlTag):
+ ModuleEvent = LoadModuleEvent(XmlCreateEvent, "CREATE_EVENT")
+ ModuleEvents.append(ModuleEvent)
+
+ XmlTag = "ModuleSurfaceArea/Events/SignalEvents/EventTypes"
+ for XmlCreateEvent in XmlList(XmlMsa, XmlTag):
+ ModuleEvent = LoadModuleEvent(XmlCreateEvent, "SIGNAL_EVENT")
+ ModuleEvents.append(ModuleEvent)
+
+ return ModuleEvents
+
+
+## Load a new Module Hob class object.
+#
+# Read an input XML Hob DOM object and return an object of Hob
+# contained in the DOM object.
+#
+# @param XmlHob A child XML DOM object in Module XML DOM.
+#
+# @retvel ModuleHob A new Hob object created by XmlHob.
+#
+def LoadModuleHob(XmlHob):
+ ModuleHob = ModuleHobClass()
+
+ XmlTag = "HobTypes/HobType"
+ ModuleHob.Type = XmlElement(XmlHob, XmlTag)
+
+ XmlTag = "HobGuidCName"
+ ModuleHob.GuidCName = XmlAttribute(XmlHob, XmlTag)
+
+ SetCommon(ModuleHob, XmlHob)
+
+ return ModuleHob
+
+
+## Load a list of Module Hobs.
+#
+# Read an input Module XML DOM object and return a list of Hobs
+# contained in the DOM object.
+#
+# @param XmlMsa An XML DOM object read from MSA file.
+#
+# @retvel Hobs A list of Hobs loaded from XmlMsa.
+#
+def LoadModuleHobs(XmlMsa):
+ XmlTag = "ModuleSurfaceArea/Hobs/HobTypes"
+ return map(LoadModuleHob, XmlList(XmlMsa, XmlTag))
+
+
+## Load a new Module Variable class object.
+#
+# Read an input XML Variable DOM object and return an object of Variable
+# contained in the DOM object.
+#
+# @param XmlVariable A child XML DOM object in Module XML DOM.
+#
+# @retvel ModuleVariable A new Variable object created by XmlVariable.
+#
+def LoadModuleVariable(XmlVariable):
+ ModuleVariable = ModuleVariableClass()
+
+ XmlTag = "Variable/VariableName"
+ HexWordArray = XmlElement(XmlVariable, XmlTag).split()
+ try:
+ ModuleVariable.Name = "".join([unichr(int(a, 16)) for a in HexWordArray])
+ except:
+ ModuleVariable.Name = ""
+
+ XmlTag = "Variable/GuidC_Name"
+ ModuleVariable.GuidCName = XmlElement(XmlVariable, XmlTag)
+
+ SetCommon(ModuleVariable, XmlVariable)
+
+ return ModuleVariable
+
+
+## Load a list of Module Variables.
+#
+# Read an input Module XML DOM object and return a list of Variables
+# contained in the DOM object.
+#
+# @param XmlMsa An XML DOM object read from MSA file.
+#
+# @retvel Variables A list of Variables loaded from XmlMsa.
+#
+def LoadModuleVariables(XmlMsa):
+ XmlTag = "ModuleSurfaceArea/Variables/Variable"
+ return map(LoadModuleVariable, XmlList(XmlMsa, XmlTag))
+
+
+## Load a new Module Boot Mode class object.
+#
+# Read an input XML BootMode DOM object and return an object of Boot Mode
+# contained in the DOM object.
+#
+# @param XmlBootMode A child XML DOM object in Module XML DOM.
+#
+# @retvel ModuleBootMode A new Boot Mode object created by XmlBootMode.
+#
+def LoadModuleBootMode(XmlBootMode):
+ ModuleBootMode = ModuleBootModeClass()
+
+ XmlTag = "BootModeName"
+ ModuleBootMode.Name = XmlAttribute(XmlBootMode, XmlTag)
+
+ SetCommon(ModuleBootMode, XmlBootMode)
+
+ return ModuleBootMode
+
+
+## Load a list of Module Boot Modes.
+#
+# Read an input Module XML DOM object and return a list of Boot Modes
+# contained in the DOM object.
+#
+# @param XmlMsa An XML DOM object read from MSA file.
+#
+# @retvel BootModes A list of Boot Modes loaded from XmlMsa.
+#
+def LoadModuleBootModes(XmlMsa):
+ XmlTag = "ModuleSurfaceArea/BootModes/BootMode"
+ return map(LoadModuleBootMode, XmlList(XmlMsa, XmlTag))
+
+
+## Load a new Module System Table class object.
+#
+# Read an input XML SystemTable DOM object and return an object of System Table
+# contained in the DOM object.
+#
+# @param XmlSystemTable A child XML DOM object in Module XML DOM.
+#
+# @retvel ModuleSystemTable A new System Table object created by XmlSystemTable.
+#
+def LoadModuleSystemTable(XmlSystemTable):
+ ModuleSystemTable = ModuleSystemTableClass()
+
+ XmlTag = "SystemTable/SystemTableCName"
+ ModuleSystemTable.CName = XmlElement(XmlSystemTable, XmlTag)
+
+ SetCommon(ModuleSystemTable, XmlSystemTable)
+
+ return ModuleSystemTable
+
+
+## Load a list of Module System Tables.
+#
+# Read an input Module XML DOM object and return a list of System Tables
+# contained in the DOM object.
+#
+# @param XmlMsa An XML DOM object read from MSA file.
+#
+# @retvel SystemTables A list of System Tables loaded from XmlMsa.
+#
+def LoadModuleSystemTables(XmlMsa):
+ XmlTag = "ModuleSurfaceArea/SystemTables/SystemTableCNames"
+ return map(LoadModuleSystemTable, XmlList(XmlMsa, XmlTag))
+
+
+## Load a new Module Data Hub class object.
+#
+# Read an input XML DataHub DOM object and return an object of Data Hub
+# contained in the DOM object.
+#
+# @param XmlDataHub A child XML DOM object in Module XML DOM.
+#
+# @retvel ModuleDataHub A new Data Hub object created by XmlDataHub.
+#
+def LoadModuleDataHub(XmlDataHub):
+ ModuleDataHub = ModuleDataHubClass()
+
+ XmlTag = "DataHub/DataHubCName"
+ ModuleDataHub.CName = XmlElement(XmlDataHub, "DataHubCName")
+
+ SetCommon(ModuleDataHub, XmlDataHub)
+
+ return ModuleDataHub
+
+
+## Load a list of Module Data Hubs.
+#
+# Read an input Module XML DOM object and return a list of Data Hubs
+# contained in the DOM object.
+#
+# @param XmlMsa An XML DOM object read from MSA file.
+#
+# @retvel DataHubs A list of Data Hubs loaded from XmlMsa.
+#
+def LoadModuleDataHubs(XmlMsa):
+ XmlTag = "ModuleSurfaceArea/DataHubs/DataHubRecord"
+ return map(LoadModuleDataHub, XmlList(XmlMsa, XmlTag))
+
+
+## Load a new Module Hii Package class object.
+#
+# Read an input XML HiiPackage DOM object and return an object of Hii Package
+# contained in the DOM object.
+#
+# @param XmlHiiPackage A child XML DOM object in Module XML DOM.
+#
+# @retvel ModuleHiiPackage A new Hii Package object created by XmlHiiPackage.
+#
+def LoadModuleHiiPackage(XmlHiiPackage):
+ ModuleHiiPackage = ModuleHiiPackageClass()
+
+ XmlTag = "HiiPackage/HiiPackageCName"
+ ModuleHiiPackage.CName = XmlElement(XmlHiiPackage, "HiiCName")
+
+ SetCommon(ModuleHiiPackage, XmlHiiPackage)
+
+ return ModuleHiiPackage
+
+
+## Load a list of Module Hii Packages.
+#
+# Read an input Module XML DOM object and return a list of Hii Packages
+# contained in the DOM object.
+#
+# @param XmlMsa An XML DOM object read from MSA file.
+#
+# @retvel HiiPackages A list of Hii Packages loaded from XmlMsa.
+#
+def LoadModuleHiiPackages(XmlMsa):
+ XmlTag = "ModuleSurfaceArea/HiiPackages/HiiPackage"
+ return map(LoadModuleHiiPackage, XmlList(XmlMsa, XmlTag))
+
+
+## Load a list of Module Guids.
+#
+# Read an input Module XML DOM object and return a list of Guids
+# contained in the DOM object.
+#
+# @param XmlMsa An XML DOM object read from MSA file.
+#
+# @retvel Guids A list of Guids loaded from XmlMsa.
+#
+def LoadModuleGuids(XmlMsa):
+ XmlTag = "ModuleSurfaceArea/Guids/GuidCNames"
+ return map(LoadGuidProtocolPpiCommon, XmlList(XmlMsa, XmlTag))
+
+
+## Load a list of Module Pcd Codes.
+#
+# Read an input Module XML DOM object and return a list of Pcd Codes
+# contained in the DOM object.
+#
+# @param XmlMsa An XML DOM object read from MSA file.
+#
+# @retvel PcdCodes A list of Pcd Codes loaded from XmlMsa.
+#
+def LoadModulePcdCodes(XmlMsa):
+ XmlTag = "ModuleSurfaceArea/PcdCoded/PcdEntry"
+ return map(LoadPcd, XmlList(XmlMsa, XmlTag))
+
+
+## Load a list of Module Extern Images.
+#
+# Read an input Module XML DOM object and return a list of Extern Images
+# contained in the DOM object.
+#
+# @param XmlMsa An XML DOM object read from MSA file.
+#
+# @retvel ExternImages A list of Extern Images loaded from XmlMsa.
+#
+def LoadModuleExternImages(XmlMsa):
+ ModuleExternImages = []
+
+ XmlTag = "ModuleSurfaceArea/Externs/Extern"
+ for XmlExtern in XmlList(XmlMsa, XmlTag):
+ XmlTag = "Extern/ModuleEntryPoint"
+ ModuleEntryPoint = XmlElement(XmlExtern, XmlTag)
+ XmlTag = "Extern/ModuleUnloadImage"
+ ModuleUnloadImage = XmlElement(XmlExtern, XmlTag)
+ if ModuleEntryPoint == "" and ModuleUnloadImage == "":
+ continue
+
+ ModuleExtern = ModuleExternImageClass()
+ ModuleExtern.ModuleEntryPoint = ModuleEntryPoint
+ ModuleExtern.ModuleUnloadImage = ModuleUnloadImage
+ ModuleExternImages.append(ModuleExtern)
+
+ return ModuleExternImages
+
+
+## Load a list of Module Extern Libraries.
+#
+# Read an input Module XML DOM object and return a list of Extern Libraries
+# contained in the DOM object.
+#
+# @param XmlMsa An XML DOM object read from MSA file.
+#
+# @retvel ExternLibraries A list of Extern Libraries loaded from XmlMsa.
+#
+def LoadModuleExternLibraries(XmlMsa):
+ ModuleExternLibraries = []
+
+ XmlTag = "ModuleSurfaceArea/Externs/Extern"
+ for XmlExtern in XmlList(XmlMsa, XmlTag):
+ XmlTag = "Extern/Constructor"
+ Constructor = XmlElement(XmlExtern, XmlTag)
+ XmlTag = "Extern/Destructor"
+ Destructor = XmlElement(XmlExtern, XmlTag)
+ if Constructor == "" and Destructor == "":
+ continue
+
+ ModuleExtern = ModuleExternLibraryClass()
+ ModuleExtern.Constructor = Constructor
+ ModuleExtern.Destructor = Destructor
+ ModuleExternLibraries.append(ModuleExtern)
+
+ return ModuleExternLibraries
+
+
+## Load a list of Module Extern Drivers.
+#
+# Read an input Module XML DOM object and return a list of Extern Drivers
+# contained in the DOM object.
+#
+# @param XmlMsa An XML DOM object read from MSA file.
+#
+# @retvel ExternDrivers A list of Extern Drivers loaded from XmlMsa.
+#
+def LoadModuleExternDrivers(XmlMsa):
+ ModuleExternDrivers = []
+
+ XmlTag = "ModuleSurfaceArea/Externs/Extern"
+ for XmlExtern in XmlList(XmlMsa, XmlTag):
+ XmlTag = "Extern/DriverBinding"
+ DriverBinding = XmlElement(XmlExtern, XmlTag)
+ XmlTag = "Extern/ComponentName"
+ ComponentName = XmlElement(XmlExtern, XmlTag)
+ XmlTag = "Extern/DriverConfig"
+ DriverConfig = XmlElement(XmlExtern, XmlTag)
+ XmlTag = "Extern/DriverDiag"
+ DriverDiag = XmlElement(XmlExtern, XmlTag)
+ if DriverBinding == "":
+ continue
+
+ ModuleExtern = ModuleExternDriverClass()
+ ModuleExtern.DriverBinding = DriverBinding
+ ModuleExtern.ComponentName = ComponentName
+ ModuleExtern.DriverConfig = DriverConfig
+ ModuleExtern.DriverDiag = DriverDiag
+ ModuleExternDrivers.append(ModuleExtern)
+
+ return ModuleExternDrivers
+
+
+## Load a list of Module Extern Call Backs.
+#
+# Read an input Module XML DOM object and return a list of Extern Call Backs
+# contained in the DOM object.
+#
+# @param XmlMsa An XML DOM object read from MSA file.
+#
+# @retvel ExternCallBacks A list of Extern Call Backs loaded from XmlMsa.
+#
+def LoadModuleExternCallBacks(XmlMsa):
+ ModuleExternCallBacks = []
+
+ XmlTag = "ModuleSurfaceArea/Externs/Extern"
+ for XmlExtern in XmlList(XmlMsa, XmlTag):
+ XmlTag = "Extern/SetVirtualAddressMapCallBack"
+ SetVirtualAddressMap = XmlElement(XmlExtern, XmlTag)
+ XmlTag = "Extern/ExitBootServicesCallBack"
+ ExitBootServices = XmlElement(XmlExtern, XmlTag)
+ if SetVirtualAddressMap == "" and ExitBootServices == "":
+ continue
+
+ ModuleExtern = ModuleExternCallBackClass()
+ ModuleExtern.ExitBootServicesCallBack = ExitBootServices
+ ModuleExtern.SetVirtualAddressMapCallBack = SetVirtualAddressMap
+ ModuleExternCallBacks.append(ModuleExtern)
+
+ return ModuleExternCallBacks
+
+
+## Load a list of Module Build Options.
+#
+# Read an input Module XML DOM object and return a list of Build Options
+# contained in the DOM object.
+#
+# @param XmlMsa An XML DOM object read from MSA file.
+#
+# @retvel BuildOptions A list of Build Options loaded from XmlMsa.
+#
+def LoadModuleBuildOptions(XmlMsa):
+ XmlTag = "ModuleSurfaceArea/ModuleBuildOptions/Options/Option"
+ return map(LoadBuildOption, XmlList(XmlMsa, XmlTag))
+
+
+## Load a list of Module User Extensions.
+#
+# Read an input Module XML DOM object and return a list of User Extensions
+# contained in the DOM object.
+#
+# @param XmlMsa An XML DOM object read from MSA file.
+#
+# @retvel UserExtensions A list of User Extensions loaded from XmlMsa.
+#
+def LoadModuleUserExtensions(XmlMsa):
+ XmlTag = "ModuleSurfaceArea/UserExtensions"
+ return map(LoadUserExtensions, XmlList(XmlMsa, XmlTag))
+
+## Load a new Module class object.
+#
+# Read an input MSA File and return a new Module class Object.
+#
+# @param MsaFileName An XML DOM object read from MSA file.
+#
+# @retvel Module A new Module class object loaded from MSA File.
+#
+def LoadMsa(MsaFileName):
+ XmlMsa = XmlParseFile(MsaFileName)
+ EdkLogger.verbose("Load MSA File: %s" % MsaFileName)
+
+ Module = ModuleClass()
+ Module.Header = LoadModuleHeader(XmlMsa, MsaFileName)
+ Module.LibraryClasses = LoadModuleLibraryClasses(XmlMsa)
+ Module.Sources = LoadModuleSources(XmlMsa)
+ Module.BinaryFiles = LoadModuleBinaries(XmlMsa)
+ Module.NonProcessedFiles = LoadModuleNonProcessedFiles(XmlMsa)
+ Module.PackageDependencies = LoadModulePackageDependencies(XmlMsa)
+ Module.Protocols = LoadModuleProtocols(XmlMsa)
+ Module.Ppis = LoadModulePpis(XmlMsa)
+ Module.Events = LoadModuleEvents(XmlMsa)
+ Module.Hobs = LoadModuleHobs(XmlMsa)
+ Module.Variables = LoadModuleVariables(XmlMsa)
+ Module.BootModes = LoadModuleBootModes(XmlMsa)
+ Module.SystemTables = LoadModuleSystemTables(XmlMsa)
+ Module.DataHubs = LoadModuleDataHubs(XmlMsa)
+ Module.HiiPackages = LoadModuleHiiPackages(XmlMsa)
+ Module.Guids = LoadModuleGuids(XmlMsa)
+ Module.PcdCodes = LoadModulePcdCodes(XmlMsa)
+ Module.ExternImages = LoadModuleExternImages(XmlMsa)
+ Module.ExternLibraries = LoadModuleExternLibraries(XmlMsa)
+ Module.ExternDrivers = LoadModuleExternDrivers(XmlMsa)
+ Module.ExternCallBacks = LoadModuleExternCallBacks(XmlMsa)
+ Module.BuildOptions = LoadModuleBuildOptions(XmlMsa)
+ Module.UserExtensions = LoadModuleUserExtensions(XmlMsa)
+
+ return Module
+
+
+# This acts like the main() function for the script, unless it is 'import'ed
+# into another script.
+if __name__ == '__main__':
+ pass \ No newline at end of file