]> git.proxmox.com Git - mirror_edk2.git/blame - BaseTools/Source/Python/msa2inf/LoadMsa.py
Sync BaseTools Branch (version r2321) to EDKII main trunk.
[mirror_edk2.git] / BaseTools / Source / Python / msa2inf / LoadMsa.py
CommitLineData
30fdf114
LG
1## @file\r
2# Open an MSA file and load all its contents to a ModuleClass object.\r
3#\r
40d841f6
LG
4# Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>\r
5# This program and the accompanying materials\r
30fdf114
LG
6# are licensed and made available under the terms and conditions of the BSD License\r
7# which accompanies this distribution. The full text of the license may be found at\r
8# http://opensource.org/licenses/bsd-license.php\r
9#\r
10# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12#\r
13\r
14##\r
15# Import Modules\r
16#\r
17import os\r
18from CommonDataClass.ModuleClass import *\r
19from Common.XmlRoutines import *\r
20from Common.MigrationUtilities import *\r
21\r
22\r
23## Load a list of Module Cloned Records.\r
24#\r
25# Read an input Module XML DOM object and return a list of Cloned Records\r
26# contained in the DOM object.\r
27#\r
28# @param XmlMsa An XML DOM object read from MSA file.\r
29#\r
30# @retvel ClonedRecords A list of Cloned Records loaded from XmlMsa.\r
31#\r
32def LoadModuleClonedRecords(XmlMsa):\r
33 XmlTag = "ModuleSurfaceArea/ModuleDefinitions/ClonedFrom/Cloned"\r
34 return map(LoadClonedRecord, XmlList(XmlMsa, XmlTag))\r
35\r
36## Load Module Header.\r
37#\r
38# Read an input Module XML DOM object and return Module Header class object\r
39# contained in the DOM object.\r
40#\r
41# @param XmlMsa An XML DOM object read from MSA file.\r
42# @param MsaFileName The file path of MSA File.\r
43#\r
44# @retvel ModuleHeader A new Module Header object loaded from XmlMsa.\r
45#\r
46def LoadModuleHeader(XmlMsa, MsaFileName):\r
47 ModuleHeader = ModuleHeaderClass()\r
48 \r
49 XmlTag = "ModuleSurfaceArea/MsaHeader"\r
50 MsaHeader = XmlNode(XmlMsa, XmlTag)\r
51 \r
52 SetIdentification(ModuleHeader, MsaHeader, "ModuleName", MsaFileName)\r
53 SetCommonHeader(ModuleHeader, MsaHeader)\r
54\r
55 XmlTag = "ModuleSurfaceArea/ModuleDefinitions/SupportedArchitectures"\r
56 ModuleHeader.SupArchList = XmlElement(XmlMsa, XmlTag).split()\r
57\r
58 XmlTag = "ModuleSurfaceArea/ModuleDefinitions/BinaryModule"\r
59 if XmlElement(XmlMsa, XmlTag).lower() == "true":\r
60 ModuleHeader.BinaryModule = True\r
61\r
62 XmlTag = "ModuleSurfaceArea/ModuleDefinitions/OutputFileBasename"\r
63 ModuleHeader.OutputFileBasename = XmlElement(XmlMsa, XmlTag)\r
64 \r
65 XmlTag = "ModuleSurfaceArea/ModuleDefinitions/ClonedForm"\r
66 ModuleHeader.ClonedFrom = LoadModuleClonedRecords(XmlMsa)\r
67\r
68 XmlTag = "ModuleSurfaceArea/Externs/PcdDriverTypes"\r
69 ModuleHeader.PcdIsDriver = XmlElement(XmlMsa, XmlTag)\r
70 \r
b36d134f 71 XmlTag = "ModuleSurfaceArea/Externs/TianoEdkFlashMap_h"\r
30fdf114 72 if XmlElement(XmlMsa, XmlTag).lower() == "true":\r
b36d134f 73 ModuleHeader.TianoEdkFlashMap_h = True\r
30fdf114
LG
74\r
75 XmlTag = "ModuleSurfaceArea/Externs/Specification"\r
76 for Specification in XmlElementList(XmlMsa, XmlTag):\r
77 AddToSpecificationDict(ModuleHeader.Specification, Specification)\r
78 \r
79 return ModuleHeader\r
80\r
81\r
82## Load a list of Module Library Classes.\r
83#\r
84# Read an input Module XML DOM object and return a list of Library Classes\r
85# contained in the DOM object.\r
86#\r
87# @param XmlMsa An XML DOM object read from MSA file.\r
88#\r
89# @retvel LibraryClasses A list of Library Classes loaded from XmlMsa.\r
90#\r
91def LoadModuleLibraryClasses(XmlMsa):\r
92 XmlTag = "ModuleSurfaceArea/LibraryClassDefinitions/LibraryClass"\r
93 return map(LoadLibraryClass, XmlList(XmlMsa, XmlTag))\r
94 \r
95\r
96## Load a new Module Source class object.\r
97#\r
98# Read an input XML Source DOM object and return an object of Source\r
99# contained in the DOM object.\r
100#\r
101# @param XmlFilename A child XML DOM object in Module XML DOM.\r
102#\r
103# @retvel ModuleSource A new Source object created by XmlFilename.\r
104#\r
105def LoadModuleSource(XmlFilename):\r
106 ModuleSource = ModuleSourceFileClass()\r
107 \r
108 ModuleSource.SourceFile = XmlElementData(XmlFilename)\r
109\r
110 XmlTag = "TagName"\r
111 ModuleSource.TagName = XmlAttribute(XmlFilename, XmlTag)\r
112 \r
113 XmlTag = "ToolCode"\r
114 ModuleSource.ToolCode = XmlAttribute(XmlFilename, XmlTag)\r
115 \r
116 XmlTag = "ToolChainFamily"\r
117 ModuleSource.ToolChainFamily = XmlAttribute(XmlFilename, XmlTag)\r
118 \r
119 SetCommon(ModuleSource, XmlFilename)\r
120 \r
121 return ModuleSource\r
122\r
123\r
124## Load a list of Module Sources.\r
125#\r
126# Read an input Module XML DOM object and return a list of Sources\r
127# contained in the DOM object.\r
128#\r
129# @param XmlMsa An XML DOM object read from MSA file.\r
130#\r
131# @retvel Sources A list of Sources loaded from XmlMsa.\r
132#\r
133def LoadModuleSources(XmlMsa):\r
134 XmlTag = "ModuleSurfaceArea/SourceFiles/Filename"\r
135 return map(LoadModuleSource, XmlList(XmlMsa, XmlTag))\r
136\r
137\r
138## Load a new Module Binary class object.\r
139#\r
140# Read an input XML Binary DOM object and return an object of Binary\r
141# contained in the DOM object.\r
142#\r
143# @param XmlFilename A child XML DOM object in Module XML DOM.\r
144#\r
145# @retvel ModuleBinary A new Binary object created by XmlFilename.\r
146#\r
147def LoadModuleBinary(XmlFilename):\r
148 ModuleBinary = ModuleBinaryFileClass()\r
149 \r
150 ModuleBinary.BinaryFile = XmlElementData(XmlFilename)\r
151 \r
152 XmlTag = "FileType"\r
153 ModuleBinary.FileType = XmlElementAttribute(XmlFilename, XmlTag)\r
154 \r
155 SetCommon(ModuleBinary, XmlFilename)\r
156 \r
157\r
158## Load a list of Module Binaries.\r
159#\r
160# Read an input Module XML DOM object and return a list of Binaries\r
161# contained in the DOM object.\r
162#\r
163# @param XmlMsa An XML DOM object read from MSA file.\r
164#\r
165# @retvel Binaries A list of Binaries loaded from XmlMsa.\r
166#\r
167def LoadModuleBinaries(XmlMsa):\r
168 XmlTag = "ModuleSurfaceArea/BinaryFiles/Filename"\r
169 return map(LoadModuleBinary, XmlList(XmlMsa, XmlTag))\r
170\r
171\r
172## Load a list of Module Non Processed Files.\r
173#\r
174# Read an input Module XML DOM object and return a list of Non Processed Files\r
175# contained in the DOM object.\r
176#\r
177# @param XmlMsa An XML DOM object read from MSA file.\r
178#\r
179# @retvel NonProcessedFiles A list of Non Processed Files loaded from XmlMsa.\r
180#\r
181def LoadModuleNonProcessedFiles(XmlMsa):\r
182 XmlTag = "ModuleSurfaceArea/NonProcessedFiles/Filename"\r
183 return XmlElementList(XmlMsa, XmlTag)\r
184\r
185\r
186## Load a new Module Package Dependency class object.\r
187#\r
188# Read an input XML PackageDependency DOM object and return an object of Package Dependency\r
189# contained in the DOM object.\r
190#\r
191# @param XmlPackage A child XML DOM object in Module XML DOM.\r
192#\r
193# @retvel ModulePackageDependency A new Package Dependency object created by XmlPackage.\r
194#\r
195def LoadModulePackageDependency(XmlPackage):\r
196 ModulePackageDependency = ModulePackageDependencyClass()\r
197\r
198 XmlTag = "PackageGuid"\r
199 PackageKey = XmlAttribute(XmlPackage, XmlTag)\r
200 \r
201 #\r
202 #TODO: Add resolution for Package name, package Version\r
203 #\r
204 ModulePackageDependency.PackageGuid = PackageKey\r
205 SetCommon(ModulePackageDependency, XmlPackage)\r
206\r
207 return ModulePackageDependency\r
208 \r
209\r
210## Load a list of Module Package Dependencies.\r
211#\r
212# Read an input Module XML DOM object and return a list of Package Dependencies\r
213# contained in the DOM object.\r
214#\r
215# @param XmlMsa An XML DOM object read from MSA file.\r
216#\r
217# @retvel PackageDependencies A list of Package Dependencies loaded from XmlMsa.\r
218#\r
219def LoadModulePackageDependencies(XmlMsa):\r
220 XmlTag = "ModuleSurfaceArea/PackageDependencies/Package"\r
221 return map(LoadModulePackageDependency, XmlList(XmlMsa, XmlTag))\r
222\r
223\r
224## Load a list of Module Protocols.\r
225#\r
226# Read an input Module XML DOM object and return a list of Protocols\r
227# contained in the DOM object.\r
228#\r
229# @param XmlMsa An XML DOM object read from MSA file.\r
230#\r
231# @retvel Protocols A list of Protocols loaded from XmlMsa.\r
232#\r
233def LoadModuleProtocols(XmlMsa):\r
234 XmlTag = "ModuleSurfaceArea/Protocols/Protocol"\r
235 XmlProtocolList = XmlList(XmlMsa, XmlTag)\r
236\r
237 XmlTag = "ModuleSurfaceArea/Protocols/ProtocolNotify"\r
238 XmlProtocolList += XmlList(XmlMsa, XmlTag)\r
239\r
240 return map(LoadGuidProtocolPpiCommon, XmlProtocolList)\r
241\r
242\r
243## Load a list of Module Ppis.\r
244#\r
245# Read an input Module XML DOM object and return a list of Ppis\r
246# contained in the DOM object.\r
247#\r
248# @param XmlMsa An XML DOM object read from MSA file.\r
249#\r
250# @retvel Ppis A list of Ppis loaded from XmlMsa.\r
251#\r
252def LoadModulePpis(XmlMsa):\r
253 XmlTag = "ModuleSurfaceArea/PPIs/Ppi"\r
254 XmlPpiList = XmlList(XmlMsa, XmlTag)\r
255 \r
256 XmlTag = "ModuleSurfaceArea/PPIs/PpiNotify"\r
257 XmlPpiList += XmlList(XmlMsa, XmlTag)\r
258 \r
259 return map(LoadGuidProtocolPpiCommon, XmlPpiList)\r
260\r
261\r
262## Load a new Module Event class object.\r
263#\r
264# Read an input XML Event DOM object and return an object of Event\r
265# contained in the DOM object.\r
266#\r
267# @param XmlEvent A child XML DOM object in Module XML DOM.\r
268# @param Type Specify the event type: SIGNAL_EVENT or CREATE_EVENT.\r
269#\r
270# @retvel ModuleEvent A new Event object created by XmlEvent.\r
271#\r
272def LoadModuleEvent(XmlEvent, Type):\r
273 ModuleEvent = ModuleEventClass()\r
274 \r
275 XmlTag = "EventTypes/EventType"\r
276 ModuleEvent.CName = XmlElement(XmlEvent, XmlTag)\r
277 \r
278 XmlTag = "EventGuidCName"\r
279 ModuleEvent.GuidCName = XmlAttribute(XmlEvent, XmlTag)\r
280 \r
281 ModuleEvent.Type = Type\r
282 \r
283 SetCommon(ModuleEvent, XmlEvent)\r
284 \r
285 return ModuleEvent\r
286 \r
287\r
288## Load a list of Module Events.\r
289#\r
290# Read an input Module XML DOM object and return a list of Events\r
291# contained in the DOM object.\r
292#\r
293# @param XmlMsa An XML DOM object read from MSA file.\r
294#\r
295# @retvel Events A list of Events loaded from XmlMsa.\r
296#\r
297def LoadModuleEvents(XmlMsa):\r
298 ModuleEvents = []\r
299 \r
300 XmlTag = "ModuleSurfaceArea/Events/CreateEvents/EventTypes"\r
301 for XmlCreateEvent in XmlList(XmlMsa, XmlTag):\r
302 ModuleEvent = LoadModuleEvent(XmlCreateEvent, "CREATE_EVENT")\r
303 ModuleEvents.append(ModuleEvent)\r
304\r
305 XmlTag = "ModuleSurfaceArea/Events/SignalEvents/EventTypes"\r
306 for XmlCreateEvent in XmlList(XmlMsa, XmlTag):\r
307 ModuleEvent = LoadModuleEvent(XmlCreateEvent, "SIGNAL_EVENT")\r
308 ModuleEvents.append(ModuleEvent)\r
309\r
310 return ModuleEvents\r
311\r
312\r
313## Load a new Module Hob class object.\r
314#\r
315# Read an input XML Hob DOM object and return an object of Hob\r
316# contained in the DOM object.\r
317#\r
318# @param XmlHob A child XML DOM object in Module XML DOM.\r
319#\r
320# @retvel ModuleHob A new Hob object created by XmlHob.\r
321#\r
322def LoadModuleHob(XmlHob):\r
323 ModuleHob = ModuleHobClass()\r
324 \r
325 XmlTag = "HobTypes/HobType"\r
326 ModuleHob.Type = XmlElement(XmlHob, XmlTag)\r
327 \r
328 XmlTag = "HobGuidCName"\r
329 ModuleHob.GuidCName = XmlAttribute(XmlHob, XmlTag)\r
330 \r
331 SetCommon(ModuleHob, XmlHob)\r
332 \r
333 return ModuleHob\r
334\r
335\r
336## Load a list of Module Hobs.\r
337#\r
338# Read an input Module XML DOM object and return a list of Hobs\r
339# contained in the DOM object.\r
340#\r
341# @param XmlMsa An XML DOM object read from MSA file.\r
342#\r
343# @retvel Hobs A list of Hobs loaded from XmlMsa.\r
344#\r
345def LoadModuleHobs(XmlMsa):\r
346 XmlTag = "ModuleSurfaceArea/Hobs/HobTypes"\r
347 return map(LoadModuleHob, XmlList(XmlMsa, XmlTag))\r
348\r
349\r
350## Load a new Module Variable class object.\r
351#\r
352# Read an input XML Variable DOM object and return an object of Variable\r
353# contained in the DOM object.\r
354#\r
355# @param XmlVariable A child XML DOM object in Module XML DOM.\r
356#\r
357# @retvel ModuleVariable A new Variable object created by XmlVariable.\r
358#\r
359def LoadModuleVariable(XmlVariable):\r
360 ModuleVariable = ModuleVariableClass()\r
361 \r
362 XmlTag = "Variable/VariableName"\r
363 HexWordArray = XmlElement(XmlVariable, XmlTag).split()\r
364 try:\r
365 ModuleVariable.Name = "".join([unichr(int(a, 16)) for a in HexWordArray])\r
366 except:\r
367 ModuleVariable.Name = ""\r
368 \r
369 XmlTag = "Variable/GuidC_Name"\r
370 ModuleVariable.GuidCName = XmlElement(XmlVariable, XmlTag)\r
371 \r
372 SetCommon(ModuleVariable, XmlVariable)\r
373 \r
374 return ModuleVariable\r
375\r
376\r
377## Load a list of Module Variables.\r
378#\r
379# Read an input Module XML DOM object and return a list of Variables\r
380# contained in the DOM object.\r
381#\r
382# @param XmlMsa An XML DOM object read from MSA file.\r
383#\r
384# @retvel Variables A list of Variables loaded from XmlMsa.\r
385#\r
386def LoadModuleVariables(XmlMsa):\r
387 XmlTag = "ModuleSurfaceArea/Variables/Variable"\r
388 return map(LoadModuleVariable, XmlList(XmlMsa, XmlTag))\r
389\r
390\r
391## Load a new Module Boot Mode class object.\r
392#\r
393# Read an input XML BootMode DOM object and return an object of Boot Mode\r
394# contained in the DOM object.\r
395#\r
396# @param XmlBootMode A child XML DOM object in Module XML DOM.\r
397#\r
398# @retvel ModuleBootMode A new Boot Mode object created by XmlBootMode.\r
399#\r
400def LoadModuleBootMode(XmlBootMode):\r
401 ModuleBootMode = ModuleBootModeClass()\r
402 \r
403 XmlTag = "BootModeName"\r
404 ModuleBootMode.Name = XmlAttribute(XmlBootMode, XmlTag)\r
405 \r
406 SetCommon(ModuleBootMode, XmlBootMode)\r
407 \r
408 return ModuleBootMode\r
409\r
410\r
411## Load a list of Module Boot Modes.\r
412#\r
413# Read an input Module XML DOM object and return a list of Boot Modes\r
414# contained in the DOM object.\r
415#\r
416# @param XmlMsa An XML DOM object read from MSA file.\r
417#\r
418# @retvel BootModes A list of Boot Modes loaded from XmlMsa.\r
419#\r
420def LoadModuleBootModes(XmlMsa):\r
421 XmlTag = "ModuleSurfaceArea/BootModes/BootMode"\r
422 return map(LoadModuleBootMode, XmlList(XmlMsa, XmlTag))\r
423\r
424\r
425## Load a new Module System Table class object.\r
426#\r
427# Read an input XML SystemTable DOM object and return an object of System Table\r
428# contained in the DOM object.\r
429#\r
430# @param XmlSystemTable A child XML DOM object in Module XML DOM.\r
431#\r
432# @retvel ModuleSystemTable A new System Table object created by XmlSystemTable.\r
433#\r
434def LoadModuleSystemTable(XmlSystemTable):\r
435 ModuleSystemTable = ModuleSystemTableClass()\r
436 \r
437 XmlTag = "SystemTable/SystemTableCName"\r
438 ModuleSystemTable.CName = XmlElement(XmlSystemTable, XmlTag)\r
439 \r
440 SetCommon(ModuleSystemTable, XmlSystemTable)\r
441 \r
442 return ModuleSystemTable\r
443 \r
444\r
445## Load a list of Module System Tables.\r
446#\r
447# Read an input Module XML DOM object and return a list of System Tables\r
448# contained in the DOM object.\r
449#\r
450# @param XmlMsa An XML DOM object read from MSA file.\r
451#\r
452# @retvel SystemTables A list of System Tables loaded from XmlMsa.\r
453#\r
454def LoadModuleSystemTables(XmlMsa):\r
455 XmlTag = "ModuleSurfaceArea/SystemTables/SystemTableCNames"\r
456 return map(LoadModuleSystemTable, XmlList(XmlMsa, XmlTag))\r
457\r
458\r
459## Load a new Module Data Hub class object.\r
460#\r
461# Read an input XML DataHub DOM object and return an object of Data Hub\r
462# contained in the DOM object.\r
463#\r
464# @param XmlDataHub A child XML DOM object in Module XML DOM.\r
465#\r
466# @retvel ModuleDataHub A new Data Hub object created by XmlDataHub.\r
467#\r
468def LoadModuleDataHub(XmlDataHub):\r
469 ModuleDataHub = ModuleDataHubClass()\r
470 \r
471 XmlTag = "DataHub/DataHubCName"\r
472 ModuleDataHub.CName = XmlElement(XmlDataHub, "DataHubCName")\r
473 \r
474 SetCommon(ModuleDataHub, XmlDataHub)\r
475\r
476 return ModuleDataHub\r
477\r
478\r
479## Load a list of Module Data Hubs.\r
480#\r
481# Read an input Module XML DOM object and return a list of Data Hubs\r
482# contained in the DOM object.\r
483#\r
484# @param XmlMsa An XML DOM object read from MSA file.\r
485#\r
486# @retvel DataHubs A list of Data Hubs loaded from XmlMsa.\r
487#\r
488def LoadModuleDataHubs(XmlMsa):\r
489 XmlTag = "ModuleSurfaceArea/DataHubs/DataHubRecord"\r
490 return map(LoadModuleDataHub, XmlList(XmlMsa, XmlTag))\r
491\r
492\r
493## Load a new Module Hii Package class object.\r
494#\r
495# Read an input XML HiiPackage DOM object and return an object of Hii Package\r
496# contained in the DOM object.\r
497#\r
498# @param XmlHiiPackage A child XML DOM object in Module XML DOM.\r
499#\r
500# @retvel ModuleHiiPackage A new Hii Package object created by XmlHiiPackage.\r
501#\r
502def LoadModuleHiiPackage(XmlHiiPackage):\r
503 ModuleHiiPackage = ModuleHiiPackageClass()\r
504\r
505 XmlTag = "HiiPackage/HiiPackageCName"\r
506 ModuleHiiPackage.CName = XmlElement(XmlHiiPackage, "HiiCName")\r
507\r
508 SetCommon(ModuleHiiPackage, XmlHiiPackage)\r
509\r
510 return ModuleHiiPackage\r
511\r
512\r
513## Load a list of Module Hii Packages.\r
514#\r
515# Read an input Module XML DOM object and return a list of Hii Packages\r
516# contained in the DOM object.\r
517#\r
518# @param XmlMsa An XML DOM object read from MSA file.\r
519#\r
520# @retvel HiiPackages A list of Hii Packages loaded from XmlMsa.\r
521#\r
522def LoadModuleHiiPackages(XmlMsa):\r
523 XmlTag = "ModuleSurfaceArea/HiiPackages/HiiPackage"\r
524 return map(LoadModuleHiiPackage, XmlList(XmlMsa, XmlTag))\r
525\r
526\r
527## Load a list of Module Guids.\r
528#\r
529# Read an input Module XML DOM object and return a list of Guids\r
530# contained in the DOM object.\r
531#\r
532# @param XmlMsa An XML DOM object read from MSA file.\r
533#\r
534# @retvel Guids A list of Guids loaded from XmlMsa.\r
535#\r
536def LoadModuleGuids(XmlMsa):\r
537 XmlTag = "ModuleSurfaceArea/Guids/GuidCNames"\r
538 return map(LoadGuidProtocolPpiCommon, XmlList(XmlMsa, XmlTag))\r
539\r
540\r
541## Load a list of Module Pcd Codes.\r
542#\r
543# Read an input Module XML DOM object and return a list of Pcd Codes\r
544# contained in the DOM object.\r
545#\r
546# @param XmlMsa An XML DOM object read from MSA file.\r
547#\r
548# @retvel PcdCodes A list of Pcd Codes loaded from XmlMsa.\r
549#\r
550def LoadModulePcdCodes(XmlMsa):\r
551 XmlTag = "ModuleSurfaceArea/PcdCoded/PcdEntry"\r
552 return map(LoadPcd, XmlList(XmlMsa, XmlTag))\r
553\r
554\r
555## Load a list of Module Extern Images.\r
556#\r
557# Read an input Module XML DOM object and return a list of Extern Images\r
558# contained in the DOM object.\r
559#\r
560# @param XmlMsa An XML DOM object read from MSA file.\r
561#\r
562# @retvel ExternImages A list of Extern Images loaded from XmlMsa.\r
563#\r
564def LoadModuleExternImages(XmlMsa):\r
565 ModuleExternImages = []\r
566 \r
567 XmlTag = "ModuleSurfaceArea/Externs/Extern"\r
568 for XmlExtern in XmlList(XmlMsa, XmlTag):\r
569 XmlTag = "Extern/ModuleEntryPoint"\r
570 ModuleEntryPoint = XmlElement(XmlExtern, XmlTag)\r
571 XmlTag = "Extern/ModuleUnloadImage"\r
572 ModuleUnloadImage = XmlElement(XmlExtern, XmlTag)\r
573 if ModuleEntryPoint == "" and ModuleUnloadImage == "":\r
574 continue\r
575\r
576 ModuleExtern = ModuleExternImageClass()\r
577 ModuleExtern.ModuleEntryPoint = ModuleEntryPoint\r
578 ModuleExtern.ModuleUnloadImage = ModuleUnloadImage\r
579 ModuleExternImages.append(ModuleExtern)\r
580\r
581 return ModuleExternImages\r
582\r
583\r
584## Load a list of Module Extern Libraries.\r
585#\r
586# Read an input Module XML DOM object and return a list of Extern Libraries\r
587# contained in the DOM object.\r
588#\r
589# @param XmlMsa An XML DOM object read from MSA file.\r
590#\r
591# @retvel ExternLibraries A list of Extern Libraries loaded from XmlMsa.\r
592#\r
593def LoadModuleExternLibraries(XmlMsa):\r
594 ModuleExternLibraries = []\r
595 \r
596 XmlTag = "ModuleSurfaceArea/Externs/Extern"\r
597 for XmlExtern in XmlList(XmlMsa, XmlTag):\r
598 XmlTag = "Extern/Constructor"\r
599 Constructor = XmlElement(XmlExtern, XmlTag)\r
600 XmlTag = "Extern/Destructor"\r
601 Destructor = XmlElement(XmlExtern, XmlTag)\r
602 if Constructor == "" and Destructor == "":\r
603 continue\r
604 \r
605 ModuleExtern = ModuleExternLibraryClass()\r
606 ModuleExtern.Constructor = Constructor\r
607 ModuleExtern.Destructor = Destructor\r
608 ModuleExternLibraries.append(ModuleExtern)\r
609\r
610 return ModuleExternLibraries\r
611\r
612\r
613## Load a list of Module Extern Drivers.\r
614#\r
615# Read an input Module XML DOM object and return a list of Extern Drivers\r
616# contained in the DOM object.\r
617#\r
618# @param XmlMsa An XML DOM object read from MSA file.\r
619#\r
620# @retvel ExternDrivers A list of Extern Drivers loaded from XmlMsa.\r
621#\r
622def LoadModuleExternDrivers(XmlMsa):\r
623 ModuleExternDrivers = []\r
624 \r
625 XmlTag = "ModuleSurfaceArea/Externs/Extern"\r
626 for XmlExtern in XmlList(XmlMsa, XmlTag):\r
627 XmlTag = "Extern/DriverBinding"\r
628 DriverBinding = XmlElement(XmlExtern, XmlTag)\r
629 XmlTag = "Extern/ComponentName"\r
630 ComponentName = XmlElement(XmlExtern, XmlTag)\r
631 XmlTag = "Extern/DriverConfig"\r
632 DriverConfig = XmlElement(XmlExtern, XmlTag)\r
633 XmlTag = "Extern/DriverDiag"\r
634 DriverDiag = XmlElement(XmlExtern, XmlTag)\r
635 if DriverBinding == "":\r
636 continue\r
637 \r
638 ModuleExtern = ModuleExternDriverClass()\r
639 ModuleExtern.DriverBinding = DriverBinding\r
640 ModuleExtern.ComponentName = ComponentName\r
641 ModuleExtern.DriverConfig = DriverConfig\r
642 ModuleExtern.DriverDiag = DriverDiag\r
643 ModuleExternDrivers.append(ModuleExtern)\r
644\r
645 return ModuleExternDrivers\r
646\r
647\r
648## Load a list of Module Extern Call Backs.\r
649#\r
650# Read an input Module XML DOM object and return a list of Extern Call Backs\r
651# contained in the DOM object.\r
652#\r
653# @param XmlMsa An XML DOM object read from MSA file.\r
654#\r
655# @retvel ExternCallBacks A list of Extern Call Backs loaded from XmlMsa.\r
656#\r
657def LoadModuleExternCallBacks(XmlMsa):\r
658 ModuleExternCallBacks = []\r
659 \r
660 XmlTag = "ModuleSurfaceArea/Externs/Extern"\r
661 for XmlExtern in XmlList(XmlMsa, XmlTag):\r
662 XmlTag = "Extern/SetVirtualAddressMapCallBack"\r
663 SetVirtualAddressMap = XmlElement(XmlExtern, XmlTag)\r
664 XmlTag = "Extern/ExitBootServicesCallBack"\r
665 ExitBootServices = XmlElement(XmlExtern, XmlTag)\r
666 if SetVirtualAddressMap == "" and ExitBootServices == "":\r
667 continue\r
668 \r
669 ModuleExtern = ModuleExternCallBackClass()\r
670 ModuleExtern.ExitBootServicesCallBack = ExitBootServices\r
671 ModuleExtern.SetVirtualAddressMapCallBack = SetVirtualAddressMap\r
672 ModuleExternCallBacks.append(ModuleExtern)\r
673\r
674 return ModuleExternCallBacks\r
675\r
676\r
677## Load a list of Module Build Options.\r
678#\r
679# Read an input Module XML DOM object and return a list of Build Options\r
680# contained in the DOM object.\r
681#\r
682# @param XmlMsa An XML DOM object read from MSA file.\r
683#\r
684# @retvel BuildOptions A list of Build Options loaded from XmlMsa.\r
685#\r
686def LoadModuleBuildOptions(XmlMsa):\r
687 XmlTag = "ModuleSurfaceArea/ModuleBuildOptions/Options/Option"\r
688 return map(LoadBuildOption, XmlList(XmlMsa, XmlTag))\r
689\r
690\r
691## Load a list of Module User Extensions.\r
692#\r
693# Read an input Module XML DOM object and return a list of User Extensions\r
694# contained in the DOM object.\r
695#\r
696# @param XmlMsa An XML DOM object read from MSA file.\r
697#\r
698# @retvel UserExtensions A list of User Extensions loaded from XmlMsa.\r
699#\r
700def LoadModuleUserExtensions(XmlMsa):\r
701 XmlTag = "ModuleSurfaceArea/UserExtensions"\r
702 return map(LoadUserExtensions, XmlList(XmlMsa, XmlTag))\r
703\r
704## Load a new Module class object.\r
705#\r
706# Read an input MSA File and return a new Module class Object.\r
707#\r
708# @param MsaFileName An XML DOM object read from MSA file.\r
709#\r
710# @retvel Module A new Module class object loaded from MSA File.\r
711#\r
712def LoadMsa(MsaFileName):\r
713 XmlMsa = XmlParseFile(MsaFileName)\r
714 EdkLogger.verbose("Load MSA File: %s" % MsaFileName)\r
715 \r
716 Module = ModuleClass()\r
717 Module.Header = LoadModuleHeader(XmlMsa, MsaFileName)\r
718 Module.LibraryClasses = LoadModuleLibraryClasses(XmlMsa)\r
719 Module.Sources = LoadModuleSources(XmlMsa)\r
720 Module.BinaryFiles = LoadModuleBinaries(XmlMsa)\r
721 Module.NonProcessedFiles = LoadModuleNonProcessedFiles(XmlMsa)\r
722 Module.PackageDependencies = LoadModulePackageDependencies(XmlMsa)\r
723 Module.Protocols = LoadModuleProtocols(XmlMsa)\r
724 Module.Ppis = LoadModulePpis(XmlMsa)\r
725 Module.Events = LoadModuleEvents(XmlMsa)\r
726 Module.Hobs = LoadModuleHobs(XmlMsa)\r
727 Module.Variables = LoadModuleVariables(XmlMsa)\r
728 Module.BootModes = LoadModuleBootModes(XmlMsa)\r
729 Module.SystemTables = LoadModuleSystemTables(XmlMsa)\r
730 Module.DataHubs = LoadModuleDataHubs(XmlMsa)\r
731 Module.HiiPackages = LoadModuleHiiPackages(XmlMsa)\r
732 Module.Guids = LoadModuleGuids(XmlMsa)\r
733 Module.PcdCodes = LoadModulePcdCodes(XmlMsa)\r
734 Module.ExternImages = LoadModuleExternImages(XmlMsa)\r
735 Module.ExternLibraries = LoadModuleExternLibraries(XmlMsa)\r
736 Module.ExternDrivers = LoadModuleExternDrivers(XmlMsa)\r
737 Module.ExternCallBacks = LoadModuleExternCallBacks(XmlMsa)\r
738 Module.BuildOptions = LoadModuleBuildOptions(XmlMsa)\r
739 Module.UserExtensions = LoadModuleUserExtensions(XmlMsa)\r
740 \r
741 return Module\r
742\r
743\r
744# This acts like the main() function for the script, unless it is 'import'ed\r
745# into another script.\r
746if __name__ == '__main__':\r
747 pass