git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8964 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			747 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			747 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
## @file
 | 
						|
# Open an MSA file and load all its contents to a ModuleClass object.
 | 
						|
#
 | 
						|
# 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 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/TianoR8FlashMap_h"
 | 
						|
    if XmlElement(XmlMsa, XmlTag).lower() == "true":
 | 
						|
        ModuleHeader.TianoR8FlashMap_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 |