Updated with comments
[people/mcb30/basetools.git] / Conf / XMLSchema / DistributionPackage.xsd
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!--
3 Filename: DistributionPackage.xsd
4
5 Copyright (c) 2008, Intel Corp.  All rights reserved.
6
7 This program and the accompanying materials are licensed and made available 
8 under the terms and conditions of the BSD License which 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 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
16   targetNamespace="http://www.TianoCore.org/2008/Edk2.1"
17   xmlns="http://www.TianoCore.org/2008/Edk2.1">
18   <xs:element name="DistributionPackage">
19     <xs:annotation>
20       <xs:documentation xml:lang="en-us"> This schema defines the EDK II Distribution Archive
21         description (PKG) file. It describes the content of:</xs:documentation>
22       <xs:documentation xml:lang="en-us"> 1) Collection descriptions with definitions and headers.</xs:documentation>
23       <xs:documentation xml:lang="en-us">2) Modules in either source or binary format. (Note that
24         Binary format is for EFI Sections only, FFS files cannot be distributed using this
25         distribution format.) </xs:documentation>
26       <xs:documentation xml:lang="en-us">3) The distribution of custom tools used to modify the
27         binary images to create UEFI/PI compliant images. </xs:documentation>
28       <xs:documentation xml:lang="en-us">4) Finally, it can be used to distribute other
29         miscellaneous content that is not specific to UEFI/PI images. </xs:documentation>
30       <xs:documentation xml:lang="en-us"> The reference build system provided by EDK II uses
31         text-based meta-data files. The collection declaration files (.dec) are created from the
32         content in the Collections section of this document. The module description files, created
33         from the Module sections of this document can be for source and/or binary distributions.
34       </xs:documentation>
35     </xs:annotation>
36     <xs:complexType>
37       <xs:sequence>
38         <xs:element minOccurs="1" maxOccurs="1" ref="FarHeader"/>
39         <xs:element minOccurs="0" maxOccurs="unbounded" ref="CollectionSurfaceArea">
40           <xs:annotation>
41             <xs:documentation xml:lang="en-us"> The list of collection packages in this FAR. </xs:documentation>
42             <xs:documentation xml:lang="en-us"> Collections are groups of files and/or modules that
43               are similar in nature. The content of the EDK II provided collections is based on
44               UEFI/PI (MdePkg and MdeModulePkg) and Intel Framework specifications, however
45               collections may also be released based on individual hardware, such as video or
46               chipset drivers. Additionally, reference emulation platform collections (Nt32Pkg and
47               UnixPkg) have been provided. </xs:documentation>
48             <xs:documentation xml:lang="en-us"> A collection can declare public mappings of C names
49               to GUID values. </xs:documentation>
50             <xs:documentation xml:lang="en-us"> A collection can provide header files for library
51               classes and/or other industry standard definitions. </xs:documentation>
52             <xs:documentation xml:lang="en-us"> A collection can also declare public mappings of
53               platform configuration database (PCD) "knobs" to control features and operation of
54               modules within a platform. </xs:documentation>
55             <xs:documentation xml:lang="en-us"> Finally, a collection lists the library instances
56               and/or components that are provided in a distribution package. </xs:documentation>
57           </xs:annotation>
58         </xs:element>
59         <xs:element minOccurs="0" maxOccurs="unbounded" ref="ModuleSurfaceArea">
60           <xs:annotation>
61             <xs:documentation xml:lang="en-us"> The listing of EDK II modules in this FAR. </xs:documentation>
62             <xs:documentation xml:lang="en-us"> This section describes how each module in a
63               distribution is coded, or, in the case of a binary module distribution, how it was
64               built. </xs:documentation>
65             <xs:documentation xml:lang="en-us"> EDK II modules differ from the EDK components and
66               libraries in that they incorporate new features which give the platform integrator
67               more control, while reducing errors in copying of defined data (GUID values.) </xs:documentation>
68             <xs:documentation xml:lang="en-us"> Rather than coding a module against specific
69               libraries, the module can be coded against a public library class. The platform
70               integrator can then select a library instance that best meets the platform
71               requirements. </xs:documentation>
72             <xs:documentation xml:lang="en-us"> EDK II modules utilize platform configuration (PCD)
73               knobs for controlling functions and features of drivers included in a platform. </xs:documentation>
74             <xs:documentation xml:lang="en-us"> EDK II modules use data from a collection to provide
75               a single-point declaration of a C variable name to GUID values. </xs:documentation>
76           </xs:annotation>
77         </xs:element>
78         <xs:element minOccurs="0" maxOccurs="unbounded" ref="Tools">
79           <xs:annotation>
80             <xs:documentation xml:lang="en-us"> The list of EDK II tools and build configuration
81               files. Most tools are used to manipulate code and binaries in this FAR. Tools in this
82               section can:</xs:documentation>
83             <xs:documentation xml:lang="en-us"> 1) Parse build meta-data files to create C code
84               files and Makefiles. </xs:documentation>
85             <xs:documentation xml:lang="en-us"> 2) Modify image files to conform to UEFI/PI
86               specifications. </xs:documentation>
87             <xs:documentation xml:lang="en-us"> 3) Generate binary files from certain types of
88               text/unicode files. </xs:documentation>
89             <xs:documentation xml:lang="en-us"> 4) Generate PCI Option Roms or Firmware Device
90               images. </xs:documentation>
91             <xs:documentation xml:lang="en-us"> 5) Implement external
92               encoding/decoding/signature/GUIDed tools. </xs:documentation>
93             <xs:documentation xml:lang="en-us"> 6) Firmware Archive create/install/remove tools.
94             </xs:documentation>
95           </xs:annotation>
96         </xs:element>
97         <xs:element minOccurs="0" maxOccurs="unbounded" ref="Misc">
98           <xs:annotation>
99             <xs:documentation xml:lang="en-us"> The list of miscellaneous files in this FAR. Any
100               files that are not listed in either the Collection, Module or Tools sections can be
101               listed here. This section can be used to distribute specifications for collections and
102               modules that are not "industry standards" such as a specification for a chipset or a
103               video device. </xs:documentation>
104           </xs:annotation>
105         </xs:element>
106       </xs:sequence>
107     </xs:complexType>
108   </xs:element>
109
110   <xs:element name="FarHeader">
111     <xs:annotation>
112       <xs:documentation xml:lang="en-us"> This defines the EDK II Firmware Archive (Distribution
113         Package) Header. This is the only required element of a Firmware Archive distribution
114         package. </xs:documentation>
115     </xs:annotation>
116     <xs:complexType>
117       <xs:sequence>
118         <xs:element minOccurs="1" maxOccurs="1" name="Name">
119           <xs:annotation>
120             <xs:documentation xml:lang="en-us"> This is the User Interface Name for this
121               Distribution Archive. </xs:documentation>
122             <xs:documentation xml:lang="en-us"> Each Firmware Archive (FAR) is uniquely identified
123               by it's GUID and Version number. Backward compatible releases of a FAR need only
124               change the version number, while non-backward compatible changes require the GUID to
125               change (reseting the version number to 1.0 is optional.) </xs:documentation>
126           </xs:annotation>
127           <xs:complexType>
128             <xs:simpleContent>
129               <xs:extension base="xs:normalizedString">
130                 <xs:attribute name="InstalledAs" type="xs:NCName" use="optional"/>
131               </xs:extension>
132             </xs:simpleContent>
133           </xs:complexType>
134         </xs:element>
135         <xs:element minOccurs="1" maxOccurs="1" name="GUID" type="RegistryFormatGuid"/>
136         <xs:element minOccurs="1" maxOccurs="1" name="Version" type="xs:decimal"/>
137         <xs:element minOccurs="1" maxOccurs="1" name="Vendor" type="xs:normalizedString"/>
138         <xs:element minOccurs="1" maxOccurs="1" name="Date" type="xs:dateTime"/>
139         <xs:element minOccurs="1" maxOccurs="1" name="Copyright" type="xs:string"/>
140         <xs:element minOccurs="1" maxOccurs="1" name="License" type="xs:string"/>
141         <xs:element minOccurs="1" maxOccurs="1" name="Abstract" type="xs:normalizedString"/>
142         <xs:element minOccurs="0" maxOccurs="1" name="Description" type="xs:string"/>
143         <xs:element minOccurs="1" maxOccurs="1" name="Signature">
144           <xs:complexType>
145             <xs:annotation>
146               <xs:documentation xml:lang="en-us">The FAR utilities will use this MD5 sum value of
147                 the included ZIP file containing files and/or code.</xs:documentation>
148             </xs:annotation>
149             <xs:simpleContent>
150               <xs:extension base="xs:normalizedString">
151                 <xs:attribute name="Type" type="SignType" use="required"/>
152               </xs:extension>
153             </xs:simpleContent>
154           </xs:complexType>
155         </xs:element>
156         <xs:element minOccurs="1" maxOccurs="1" name="XmlSpecification" type="xs:decimal">
157           <xs:annotation>
158             <xs:documentation xml:lang="en-us"> This version of the XML Schema is 2.1
159             </xs:documentation>
160           </xs:annotation>
161         </xs:element>
162       </xs:sequence>
163       <xs:attribute name="RefName" type="xs:NCName" use="required">
164         <xs:annotation>
165           <xs:documentation xml:lang="en-us">This is a Reference Name used to name this distribution
166             package file. It will be used to create PKG and manifest filenames in the Conf/PKG
167             directory. If InstalledAs attribute (to the Name element) exists, then the InstalledAs
168             value will be used for creating the files.</xs:documentation>
169         </xs:annotation>
170       </xs:attribute>
171       <xs:attribute name="ReadOnly" type="xs:boolean" default="false" use="optional">
172         <xs:annotation>
173           <xs:documentation xml:lang="en-us">If this is set, all content within this distribution
174             package should NOT be modified.</xs:documentation>
175         </xs:annotation>
176       </xs:attribute>
177       <xs:attribute name="RePackage" type="xs:boolean" default="false" use="optional">
178         <xs:annotation>
179           <xs:documentation xml:lang="en-us">If set, then the content can be repackaged into another
180             distribution package.</xs:documentation>
181         </xs:annotation>
182       </xs:attribute>
183     </xs:complexType>
184   </xs:element>
185
186   <xs:element name="CollectionSurfaceArea">
187     <xs:annotation>
188       <xs:documentation xml:lang="en-us"> A collection is a group of one or more: header files, and
189         zero or more library instances and/or modules. </xs:documentation>
190       <xs:documentation xml:lang="en-us"> The content in these sections is used to generate the EDK
191         II reference build implementation's "package" declaration (.dec) files. EDK II modules can
192         depend on different "packages" in order to build correctly. </xs:documentation>
193       <xs:documentation xml:lang="en-us"> Since multiple versions of a collection may exist within a
194         given WORKSPACE, the "package" declaration file is uniquely identified by the GUID and
195         Version number specified in the header of each collection. </xs:documentation>
196       <xs:documentation xml:lang="en-us"> Modules specify dependent declaration files using the
197         WORKSPACE relative path and file name. If using an alternate, InstalledAs name to create a
198         separate package with similar content (such as, when evaluating a new release) the module
199         description (.inf) files will need to be updated with the InstalledAs name. </xs:documentation>
200       <xs:documentation xml:lang="en-us"> Each collection is uniquely identified by it's GUID and
201         Version number. Backward compatible releases of a collection need only change the version
202         number, while non-backward compatible changes require the GUID to change (reseting the
203         version number to 1.0 is optional.) </xs:documentation>
204     </xs:annotation>
205     <xs:complexType>
206       <xs:sequence>
207
208         <xs:element minOccurs="1" maxOccurs="1" name="Header">
209           <xs:complexType>
210             <xs:sequence>
211               <xs:element minOccurs="1" maxOccurs="1" name="Name">
212                 <xs:annotation>
213                   <xs:documentation xml:lang="en-us">This is the User Interface Name for this
214                     Firmware Archive collection. </xs:documentation>
215                 </xs:annotation>
216                 <xs:complexType>
217                   <xs:simpleContent>
218                     <xs:extension base="xs:normalizedString">
219                       <xs:attribute name="InstalledAs" type="xs:NCName" use="optional"/>
220                     </xs:extension>
221                   </xs:simpleContent>
222                 </xs:complexType>
223               </xs:element>
224               <xs:element minOccurs="1" maxOccurs="1" name="GUID" type="RegistryFormatGuid">
225                 <xs:annotation>
226                   <xs:documentation xml:lang="en-us"> This GUID and the Version element, below,
227                     uniquely identify a given collection. The reference build system refers to the
228                     collection declarations as a "package" declaration file. </xs:documentation>
229                 </xs:annotation>
230               </xs:element>
231               <xs:element minOccurs="0" maxOccurs="1" name="Copyright" type="xs:string"/>
232               <xs:element minOccurs="0" maxOccurs="1" name="License" type="xs:string"/>
233               <xs:element minOccurs="1" maxOccurs="1" name="Abstract" type="xs:normalizedString"/>
234               <xs:element minOccurs="0" maxOccurs="1" name="Description" type="xs:string"/>
235               <xs:element minOccurs="0" maxOccurs="1" name="Signature">
236                 <xs:complexType>
237                   <xs:simpleContent>
238                     <xs:extension base="xs:normalizedString">
239                       <xs:attribute name="Type" type="SignType" use="required"/>
240                     </xs:extension>
241                   </xs:simpleContent>
242                 </xs:complexType>
243               </xs:element>
244             </xs:sequence>
245           </xs:complexType>
246         </xs:element>
247
248         <xs:element minOccurs="0" maxOccurs="1" name="Lineage">
249           <xs:complexType>
250             <xs:sequence>
251               <xs:element minOccurs="1" maxOccurs="unbounded" name="Cloned">
252                 <xs:complexType>
253                   <xs:simpleContent>
254                     <xs:extension base="xs:NCName">
255                       <xs:attribute name="HostGuid" type="RegistryFormatGuid" use="required"/>
256                       <xs:attribute name="HostVer" type="xs:decimal" use="required"/>
257                       <xs:attribute name="FarGuid" type="RegistryFormatGuid" use="optional"/>
258                       <xs:attribute name="FarVer" type="xs:decimal" use="optional"/>
259                       <xs:attribute name="Id" type="xs:positiveInteger" use="required"/>
260                     </xs:extension>
261                   </xs:simpleContent>
262                 </xs:complexType>
263               </xs:element>
264             </xs:sequence>
265           </xs:complexType>
266         </xs:element>
267
268         <xs:element minOccurs="0" maxOccurs="1" name="LibraryClassDeclarations">
269           <xs:complexType>
270             <xs:sequence>
271               <xs:element minOccurs="1" maxOccurs="unbounded" name="LibraryClass">
272                 <xs:complexType>
273                   <xs:sequence>
274                     <xs:element minOccurs="1" maxOccurs="1" name="HeaderFile">
275                       <xs:complexType>
276                         <xs:simpleContent>
277                           <xs:extension base="xs:anyURI">
278                             <xs:attribute name="Extracted" type="xs:anyURI" use="optional"/>
279                             <xs:attribute name="Signature" type="xs:normalizedString" use="optional"/>
280                             <xs:attribute name="Type" type="SignType" use="optional"/>
281                           </xs:extension>
282                         </xs:simpleContent>
283                       </xs:complexType>
284                     </xs:element>
285                     <xs:element minOccurs="0" maxOccurs="unbounded" name="HelpText">
286                       <xs:complexType>
287                         <xs:simpleContent>
288                           <xs:extension base="xs:string">
289                             <xs:attribute name="UCS2" type="xs:boolean" default="false"
290                               use="optional"/>
291                             <xs:attribute name="Lang" type="xs:language" default="en-us"
292                               use="optional"/>
293                           </xs:extension>
294                         </xs:simpleContent>
295                       </xs:complexType>
296                     </xs:element>
297                   </xs:sequence>
298                   <xs:attribute name="Keyword" type="xs:NCName" use="required"/>
299                   <xs:attributeGroup ref="RecommendedInf"/>
300                   <xs:attributeGroup ref="SupportedArchMod"/>
301                 </xs:complexType>
302               </xs:element>
303             </xs:sequence>
304           </xs:complexType>
305         </xs:element>
306
307         <xs:element minOccurs="0" maxOccurs="1" name="IndustryStdIncludes">
308           <xs:complexType>
309             <xs:sequence>
310               <xs:element minOccurs="1" maxOccurs="unbounded" name="IndustryStdHeader">
311                 <xs:complexType>
312                   <xs:sequence>
313                     <xs:element minOccurs="1" maxOccurs="1" name="HeaderFile">
314                       <xs:complexType>
315                         <xs:simpleContent>
316                           <xs:extension base="xs:anyURI">
317                             <xs:attribute name="Extracted" type="xs:anyURI" use="optional"/>
318                             <xs:attribute name="Signature" type="xs:normalizedString" use="optional"/>
319                             <xs:attribute name="Type" type="SignType" use="optional"/>
320                           </xs:extension>
321                         </xs:simpleContent>
322                       </xs:complexType>
323                     </xs:element>
324                     <xs:element minOccurs="0" maxOccurs="unbounded" name="HelpText">
325                       <xs:complexType>
326                         <xs:simpleContent>
327                           <xs:extension base="xs:string">
328                             <xs:attribute name="UCS2" type="xs:boolean" default="false"
329                               use="optional"/>
330                             <xs:attribute name="Lang" type="xs:language" default="en-us"
331                               use="optional"/>
332                           </xs:extension>
333                         </xs:simpleContent>
334                       </xs:complexType>
335                     </xs:element>
336                   </xs:sequence>
337                   <xs:attributeGroup ref="SupportedArchMod"/>
338                 </xs:complexType>
339               </xs:element>
340             </xs:sequence>
341           </xs:complexType>
342         </xs:element>
343
344         <xs:element minOccurs="0" maxOccurs="1" name="Components">
345           <xs:complexType>
346             <xs:sequence>
347               <xs:element minOccurs="1" maxOccurs="unbounded" name="Module" nillable="true">
348                 <xs:complexType>
349                   <xs:attribute name="RefName" type="xs:NCName" use="required"/>
350                 </xs:complexType>
351               </xs:element>
352             </xs:sequence>
353           </xs:complexType>
354         </xs:element>
355
356         <xs:element minOccurs="0" maxOccurs="1" name="CollectionHeaders">
357           <xs:complexType>
358             <xs:sequence>
359               <xs:element minOccurs="1" maxOccurs="unbounded" name="IncludePkgHeader">
360                 <xs:complexType>
361                   <xs:simpleContent>
362                     <xs:extension base="xs:anyURI">
363                       <xs:attribute name="Extracted" type="xs:anyURI" use="optional"/>
364                       <xs:attribute name="Signature" type="xs:normalizedString" use="optional"/>
365                       <xs:attribute name="Type" type="SignType" use="optional"/>
366                       <xs:attributeGroup ref="SupportedArchMod"/>
367                     </xs:extension>
368                   </xs:simpleContent>
369                 </xs:complexType>
370               </xs:element>
371             </xs:sequence>
372           </xs:complexType>
373         </xs:element>
374
375         <xs:element minOccurs="0" maxOccurs="1" name="GuidDeclarations">
376           <xs:complexType>
377             <xs:sequence>
378               <xs:element minOccurs="0" maxOccurs="unbounded" name="Entry">
379                 <xs:complexType>
380                   <xs:sequence>
381                     <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="xs:NCName"/>
382                     <xs:element minOccurs="1" maxOccurs="1" name="GuidValue" type="GuidCstruct"/>
383                     <xs:element minOccurs="0" maxOccurs="unbounded" name="HelpText">
384                       <xs:complexType>
385                         <xs:simpleContent>
386                           <xs:extension base="xs:string">
387                             <xs:attribute name="UCS2" type="xs:boolean" default="false"
388                               use="optional"/>
389                             <xs:attribute name="Lang" type="xs:language" default="en-us"
390                               use="optional"/>
391                           </xs:extension>
392                         </xs:simpleContent>
393                       </xs:complexType>
394                     </xs:element>
395                   </xs:sequence>
396                   <xs:attribute name="GuidTypeList" type="GuidListType" use="optional"/>
397                   <xs:attributeGroup ref="SupportedArchMod"/>
398                 </xs:complexType>
399               </xs:element>
400             </xs:sequence>
401           </xs:complexType>
402         </xs:element>
403
404         <xs:element minOccurs="0" maxOccurs="1" name="ProtocolDeclarations">
405           <xs:complexType>
406             <xs:sequence>
407               <xs:element minOccurs="1" maxOccurs="unbounded" name="Entry">
408                 <xs:annotation>
409                   <xs:documentation xml:lang="en-us"> Individual Protocol
410                   Declarations</xs:documentation>
411                 </xs:annotation>
412                 <xs:complexType>
413                   <xs:sequence>
414                     <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="xs:NCName"/>
415                     <xs:element minOccurs="1" maxOccurs="1" name="GuidValue" type="GuidCstruct"/>
416                     <xs:element minOccurs="0" maxOccurs="unbounded" name="HelpText">
417                       <xs:complexType>
418                         <xs:simpleContent>
419                           <xs:extension base="xs:string">
420                             <xs:attribute name="UCS2" type="xs:boolean" default="false"
421                               use="optional"/>
422                             <xs:attribute name="Lang" type="xs:language" default="en-us"
423                               use="optional"/>
424                           </xs:extension>
425                         </xs:simpleContent>
426                       </xs:complexType>
427                     </xs:element>
428                   </xs:sequence>
429                   <xs:attribute name="Notify" type="xs:boolean" default="false" use="optional"/>
430                   <xs:attributeGroup ref="SupportedArchMod"/>
431                 </xs:complexType>
432               </xs:element>
433             </xs:sequence>
434           </xs:complexType>
435         </xs:element>
436
437         <xs:element minOccurs="0" maxOccurs="1" name="PpiDeclarations">
438           <xs:complexType>
439             <xs:sequence>
440               <xs:element minOccurs="1" maxOccurs="unbounded" name="Entry">
441                 <xs:annotation>
442                   <xs:documentation xml:lang="en-us"> Used for Protocol and PPI
443                   Declarations</xs:documentation>
444                 </xs:annotation>
445                 <xs:complexType>
446                   <xs:sequence>
447                     <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="xs:NCName"/>
448                     <xs:element minOccurs="1" maxOccurs="1" name="GuidValue" type="GuidCstruct"/>
449                     <xs:element minOccurs="0" maxOccurs="unbounded" name="HelpText">
450                       <xs:complexType>
451                         <xs:simpleContent>
452                           <xs:extension base="xs:string">
453                             <xs:attribute name="UCS2" type="xs:boolean" default="false"
454                               use="optional"/>
455                             <xs:attribute name="Lang" type="xs:language" default="en-us"
456                               use="optional"/>
457                           </xs:extension>
458                         </xs:simpleContent>
459                       </xs:complexType>
460                     </xs:element>
461                   </xs:sequence>
462                   <xs:attribute name="Notify" type="xs:boolean" default="false" use="optional"/>
463                   <xs:attributeGroup ref="SupportedArchMod"/>
464                   <xs:attribute name="FeatureFlag" type="xs:normalizedString" use="optional"/>
465                   <!-- CHECK IF FF is valid for DEC content here. -->
466                 </xs:complexType>
467               </xs:element>
468             </xs:sequence>
469           </xs:complexType>
470         </xs:element>
471
472         <xs:element minOccurs="0" maxOccurs="1" name="PcdDeclarations">
473           <xs:complexType>
474             <xs:sequence>
475               <xs:element minOccurs="1" maxOccurs="unbounded" name="PcdEntry">
476                 <xs:complexType>
477                   <xs:sequence>
478                     <xs:element minOccurs="1" maxOccurs="1" name="TokenSpaceGuidCname"
479                       type="xs:NCName"/>
480                     <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="xs:NCName"/>
481                     <xs:element minOccurs="1" maxOccurs="1" name="DatumType" type="PcdDatumType"/>
482                     <xs:element minOccurs="1" maxOccurs="1" name="ValidUsage" type="PcdTypeList"/>
483                     <xs:element minOccurs="1" maxOccurs="1" name="DefaultValue"
484                       type="xs:normalizedString"/>
485                     <xs:element minOccurs="0" maxOccurs="1" name="MaxDatumSize" type="Number"/>
486                     <xs:element minOccurs="0" maxOccurs="unbounded" name="HelpText">
487                       <xs:complexType>
488                         <xs:simpleContent>
489                           <xs:extension base="xs:string">
490                             <xs:attribute name="UCS2" type="xs:boolean" default="false"
491                               use="optional"/>
492                             <xs:attribute name="Lang" type="xs:language" default="en-us"
493                               use="optional"/>
494                           </xs:extension>
495                         </xs:simpleContent>
496                       </xs:complexType>
497                     </xs:element>
498                     <xs:element minOccurs="0" maxOccurs="unbounded" name="ErrorMessage">
499                       <xs:complexType>
500                         <xs:simpleContent>
501                           <xs:extension base="xs:normalizedString">
502                             <xs:attribute name="ErrNo" use="required">
503                               <xs:simpleType>
504                                 <xs:restriction base="xs:NCName">
505                                   <xs:pattern value="0x([a-fA-F0-9])+"/>
506                                 </xs:restriction>
507                               </xs:simpleType>
508                             </xs:attribute>
509                           </xs:extension>
510                         </xs:simpleContent>
511                       </xs:complexType>
512                     </xs:element>
513                     <xs:element minOccurs="0" maxOccurs="1" name="ValidValues"
514                       type="xs:normalizedString"/>
515                   </xs:sequence>
516                   <xs:attribute name="Token" type="xs:hexBinary" use="required"/>
517                   <xs:attributeGroup ref="SupportedArchMod"/>
518                 </xs:complexType>
519               </xs:element>
520             </xs:sequence>
521           </xs:complexType>
522         </xs:element>
523
524       </xs:sequence>
525       <xs:attributeGroup ref="SurfaceAreaAttributes"/>
526     </xs:complexType>
527   </xs:element>
528
529   <xs:element name="ModuleSurfaceArea">
530     <xs:annotation>
531       <xs:documentation xml:lang="en-us"> Each module is uniquely identified by it's GUID and
532         Version number. Backward compatible releases of a module need only change the version
533         number, while non-backward compatible changes require the GUID to change (reseting the
534         version number to 1.0 is optional.) </xs:documentation>
535     </xs:annotation>
536     <xs:complexType>
537       <xs:sequence>
538
539         <xs:element minOccurs="1" maxOccurs="1" name="Header">
540           <xs:complexType>
541             <xs:sequence>
542               <xs:element minOccurs="1" maxOccurs="1" name="Name">
543                 <xs:annotation>
544                   <xs:documentation xml:lang="en-us"> This is the User Interface Name for this
545                     Module. </xs:documentation>
546                 </xs:annotation>
547                 <xs:complexType>
548                   <xs:simpleContent>
549                     <xs:extension base="xs:normalizedString">
550                       <xs:attribute name="InstalledAs" type="xs:NCName" use="optional"/>
551                     </xs:extension>
552                   </xs:simpleContent>
553                 </xs:complexType>
554               </xs:element>
555               <xs:element minOccurs="1" maxOccurs="1" name="GUID" type="RegistryFormatGuid"/>
556               <xs:element minOccurs="0" maxOccurs="1" name="Copyright" type="xs:string"/>
557               <xs:element minOccurs="0" maxOccurs="1" name="License" type="xs:string"/>
558               <xs:element minOccurs="1" maxOccurs="1" name="Abstract" type="xs:normalizedString"/>
559               <xs:element minOccurs="0" maxOccurs="1" name="Description" type="xs:string"/>
560               <xs:element minOccurs="0" maxOccurs="1" name="Signature">
561                 <xs:complexType>
562                   <xs:simpleContent>
563                     <xs:extension base="xs:normalizedString">
564                       <xs:attribute name="Type" type="SignType" use="required"/>
565                     </xs:extension>
566                   </xs:simpleContent>
567                 </xs:complexType>
568               </xs:element>
569             </xs:sequence>
570           </xs:complexType>
571         </xs:element>
572
573         <xs:element minOccurs="0" maxOccurs="1" name="ModuleDefinitions">
574           <xs:complexType>
575             <xs:sequence>
576               <xs:element minOccurs="0" maxOccurs="1" name="PcdIsDriver">
577                 <xs:simpleType>
578                   <xs:restriction base="xs:NCName">
579                     <xs:enumeration value="PEI_PCD_DRIVER"/>
580                     <xs:enumeration value="DXE_PCD_DRIVER"/>
581                   </xs:restriction>
582                 </xs:simpleType>
583               </xs:element>
584               <xs:element minOccurs="0" maxOccurs="1" name="EfiSpecVersion" type="Number"/>
585               <xs:element minOccurs="0" maxOccurs="1" name="PiSpecVersion" type="Number"/>
586               <xs:element minOccurs="0" maxOccurs="unbounded" name="Specification">
587                 <xs:complexType>
588                   <xs:simpleContent>
589                     <xs:extension base="xs:NCName">
590                       <xs:attribute name="Version" type="Number" use="required"/>
591                     </xs:extension>
592                   </xs:simpleContent>
593                 </xs:complexType>
594               </xs:element>
595               <xs:element minOccurs="0" maxOccurs="unbounded" name="CustomBuildFile">
596                 <xs:complexType>
597                   <xs:simpleContent>
598                     <xs:extension base="xs:anyURI">
599                       <xs:attribute name="BuildType" type="BuildTypes" use="required"/>
600                       <xs:attribute name="Extracted" type="xs:anyURI" use="optional"/>
601                       <xs:attribute name="Signature" type="xs:normalizedString" use="optional"/>
602                       <xs:attribute name="Type" type="SignType" use="optional"/>
603                     </xs:extension>
604                   </xs:simpleContent>
605                 </xs:complexType>
606               </xs:element>
607               <xs:element minOccurs="0" maxOccurs="1" name="Lineage">
608                 <xs:complexType>
609                   <xs:sequence>
610                     <xs:element minOccurs="1" maxOccurs="unbounded" name="Cloned">
611                       <xs:complexType>
612                         <xs:simpleContent>
613                           <xs:extension base="xs:NCName">
614                             <xs:attribute name="HostGuid" type="RegistryFormatGuid" use="required"/>
615                             <xs:attribute name="HostVer" type="xs:decimal" use="required"/>
616                             <xs:attribute name="Id" type="xs:positiveInteger" use="required"/>
617                           </xs:extension>
618                         </xs:simpleContent>
619                       </xs:complexType>
620                     </xs:element>
621                   </xs:sequence>
622                 </xs:complexType>
623               </xs:element>
624             </xs:sequence>
625             <xs:attributeGroup ref="SupportedArchMod"/>
626           </xs:complexType>
627         </xs:element>
628
629         <xs:element minOccurs="0" maxOccurs="1" name="LibraryClassDefinitions">
630           <xs:complexType>
631             <xs:sequence>
632               <xs:element minOccurs="1" maxOccurs="unbounded" name="LibraryClass">
633                 <xs:complexType>
634                   <xs:sequence>
635                     <xs:element minOccurs="1" maxOccurs="1" name="Keyword" type="xs:NCName"/>
636                     <xs:element minOccurs="0" maxOccurs="unbounded" name="HelpText">
637                       <xs:complexType>
638                         <xs:simpleContent>
639                           <xs:extension base="xs:string">
640                             <xs:attribute name="UCS2" type="xs:boolean" default="false"
641                               use="optional"/>
642                             <xs:attribute name="Lang" type="xs:language" default="en-us"
643                               use="optional"/>
644                           </xs:extension>
645                         </xs:simpleContent>
646                       </xs:complexType>
647                     </xs:element>
648                   </xs:sequence>
649                   <xs:attribute name="Usage" type="LibUsageType" use="required"/>
650                   <xs:attributeGroup ref="RecommendedInf"/>
651                   <xs:attributeGroup ref="SupportedArchMod"/>
652                   <xs:attribute name="FeatureFlag" type="xs:normalizedString" use="optional"/>
653                 </xs:complexType>
654               </xs:element>
655             </xs:sequence>
656           </xs:complexType>
657         </xs:element>
658
659         <xs:element minOccurs="0" maxOccurs="1" name="SourceFiles">
660           <xs:complexType>
661             <xs:sequence>
662               <xs:element minOccurs="1" maxOccurs="unbounded" name="Filename">
663                 <xs:complexType>
664                   <xs:simpleContent>
665                     <xs:extension base="xs:anyURI">
666                       <xs:attribute name="Extracted" type="xs:anyURI" use="optional"/>
667                       <xs:attribute name="TagName" type="xs:NCName" use="optional"/>
668                       <xs:attribute name="ToolCode" type="xs:NCName" use="optional"/>
669                       <xs:attribute name="Family" type="FamilyType" use="optional"/>
670                       <xs:attribute name="Signature" type="xs:normalizedString" use="optional"/>
671                       <xs:attribute name="Type" type="SignType" use="optional"/>
672                       <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
673                       <xs:attribute name="FeatureFlag" type="xs:normalizedString" use="optional"/>
674                     </xs:extension>
675                   </xs:simpleContent>
676                 </xs:complexType>
677               </xs:element>
678             </xs:sequence>
679           </xs:complexType>
680         </xs:element>
681
682         <xs:element minOccurs="0" maxOccurs="1" name="BinaryFiles">
683           <xs:complexType>
684             <xs:sequence>
685               <xs:element minOccurs="1" maxOccurs="unbounded" name="Filename">
686                 <xs:complexType>
687                   <xs:simpleContent>
688                     <xs:extension base="xs:anyURI">
689                       <xs:attribute name="Comment" type="xs:normalizedString" use="optional"/>
690                       <xs:attribute name="Extracted" type="xs:anyURI" use="optional"/>
691                       <xs:attribute name="FileType" type="BinFileType" use="optional"/>
692                       <xs:attribute name="TagName" type="xs:NCName" use="optional"/>
693                       <xs:attribute name="Target" type="xs:NCName" use="optional"/>
694                       <xs:attribute name="Signature" type="xs:normalizedString" use="optional"/>
695                       <xs:attribute name="Type" type="SignType" use="optional"/>
696                       <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
697                       <xs:attribute name="FeatureFlag" type="xs:normalizedString" use="optional"/>
698                     </xs:extension>
699                   </xs:simpleContent>
700                 </xs:complexType>
701               </xs:element>
702             </xs:sequence>
703           </xs:complexType>
704         </xs:element>
705
706         <xs:element minOccurs="0" maxOccurs="1" name="PackageDependencies">
707           <xs:complexType>
708             <xs:sequence>
709               <xs:element minOccurs="1" maxOccurs="unbounded" name="Package">
710                 <xs:complexType>
711                   <xs:simpleContent>
712                     <xs:extension base="xs:anyURI">
713                       <xs:attribute name="RefName" type="xs:NCName" use="required"/>
714                       <xs:attribute name="PackageGuid" type="RegistryFormatGuid" use="required"/>
715                       <xs:attribute name="PackageVersion" type="xs:decimal" use="optional"/>
716                       <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
717                       <xs:attribute name="FeatureFlag" type="xs:normalizedString" use="optional"/>
718                     </xs:extension>
719                   </xs:simpleContent>
720                 </xs:complexType>
721               </xs:element>
722             </xs:sequence>
723           </xs:complexType>
724         </xs:element>
725
726         <xs:element minOccurs="0" maxOccurs="1" name="Guids">
727           <xs:complexType>
728             <xs:sequence>
729               <xs:element minOccurs="1" maxOccurs="unbounded" name="GuidCNames" nillable="true">
730                 <xs:complexType>
731                   <xs:sequence>
732                     <xs:element minOccurs="0" maxOccurs="unbounded" name="HelpText">
733                       <xs:complexType>
734                         <xs:simpleContent>
735                           <xs:extension base="xs:string">
736                             <xs:attribute name="UCS2" type="xs:boolean" default="false"
737                               use="optional"/>
738                             <xs:attribute name="Lang" type="xs:language" default="en-us"
739                               use="optional"/>
740                           </xs:extension>
741                         </xs:simpleContent>
742                       </xs:complexType>
743                     </xs:element>
744                   </xs:sequence>
745                   <xs:attribute name="CName" type="xs:NCName" use="required"/>
746                   <xs:attribute name="Usage" type="UsageType" use="required"/>
747                   <xs:attribute name="Type" type="GuidListType" use="required"/>
748                   <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
749                   <xs:attribute name="FeatureFlag" type="xs:normalizedString" use="optional"/>
750                 </xs:complexType>
751               </xs:element>
752             </xs:sequence>
753           </xs:complexType>
754         </xs:element>
755
756         <xs:element minOccurs="0" maxOccurs="1" name="Protocols">
757           <xs:complexType>
758             <xs:sequence>
759               <xs:element minOccurs="1" maxOccurs="unbounded" name="Protocol" nillable="true">
760                 <xs:complexType>
761                   <xs:sequence>
762                     <xs:element minOccurs="0" maxOccurs="unbounded" name="HelpText">
763                       <xs:complexType>
764                         <xs:simpleContent>
765                           <xs:extension base="xs:string">
766                             <xs:attribute name="UCS2" type="xs:boolean" default="false"
767                               use="optional"/>
768                             <xs:attribute name="Lang" type="xs:language" default="en-us"
769                               use="optional"/>
770                           </xs:extension>
771                         </xs:simpleContent>
772                       </xs:complexType>
773                     </xs:element>
774                   </xs:sequence>
775                   <xs:attribute name="CName" type="xs:NCName" use="required"/>
776                   <xs:attribute name="Usage" type="ProtocolUsageType" use="required"/>
777                   <xs:attribute name="Notify" type="xs:boolean" use="optional"/>
778                   <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
779                   <xs:attribute name="FeatureFlag" type="xs:normalizedString" use="optional"/>
780                 </xs:complexType>
781               </xs:element>
782             </xs:sequence>
783           </xs:complexType>
784         </xs:element>
785
786         <xs:element minOccurs="0" maxOccurs="1" name="PPIs">
787           <xs:complexType>
788             <xs:sequence>
789               <xs:element minOccurs="1" maxOccurs="unbounded" name="Ppi" nillable="true">
790                 <xs:complexType>
791                   <xs:sequence>
792                     <xs:element minOccurs="0" maxOccurs="unbounded" name="HelpText">
793                       <xs:complexType>
794                         <xs:simpleContent>
795                           <xs:extension base="xs:string">
796                             <xs:attribute name="UCS2" type="xs:boolean" default="false"
797                               use="optional"/>
798                             <xs:attribute name="Lang" type="xs:language" default="en-us"
799                               use="optional"/>
800                           </xs:extension>
801                         </xs:simpleContent>
802                       </xs:complexType>
803                     </xs:element>
804                   </xs:sequence>
805                   <xs:attribute name="CName" type="xs:NCName" use="required"/>
806                   <xs:attribute name="Usage" type="UsageType" use="required"/>
807                   <xs:attribute name="Notify" type="xs:boolean" use="optional"/>
808                   <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
809                   <xs:attribute name="FeatureFlag" type="xs:normalizedString" use="optional"/>
810                 </xs:complexType>
811               </xs:element>
812             </xs:sequence>
813           </xs:complexType>
814         </xs:element>
815
816         <xs:element minOccurs="0" maxOccurs="1" name="Externs">
817           <xs:complexType>
818             <xs:sequence>
819               <xs:element minOccurs="1" maxOccurs="unbounded" name="Extern">
820                 <xs:complexType>
821                   <xs:choice>
822                     <xs:sequence>
823                       <xs:element minOccurs="0" maxOccurs="1" name="EntryPoint" type="xs:NCName"/>
824                       <xs:element minOccurs="0" maxOccurs="1" name="UnloadImage" type="xs:NCName"/>
825                     </xs:sequence>
826                     <xs:sequence>
827                       <xs:element minOccurs="0" maxOccurs="1" name="Constructor" type="xs:NCName"/>
828                       <xs:element minOccurs="0" maxOccurs="1" name="Destructor" type="xs:NCName"/>
829                     </xs:sequence>
830                     <xs:sequence>
831                       <xs:element minOccurs="0" maxOccurs="1" name="DriverBinding" type="xs:NCName"/>
832                       <xs:element minOccurs="0" maxOccurs="1" name="ComponentName" type="xs:NCName"/>
833                       <xs:element minOccurs="0" maxOccurs="1" name="DriverConfig" type="xs:NCName"/>
834                       <xs:element minOccurs="0" maxOccurs="1" name="DriverDiag" type="xs:NCName"/>
835                     </xs:sequence>
836                     <xs:sequence>
837                       <xs:element minOccurs="0" maxOccurs="1" name="SetVirtualAddressMapCallBack"
838                         type="xs:NCName"/>
839                       <xs:element minOccurs="0" maxOccurs="1" name="ExitBootServicesCallBack"
840                         type="xs:NCName"/>
841                     </xs:sequence>
842                   </xs:choice>
843                   <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
844                   <xs:attribute name="FeatureFlag" type="xs:normalizedString" use="optional"/>
845                 </xs:complexType>
846               </xs:element>
847             </xs:sequence>
848           </xs:complexType>
849         </xs:element>
850
851         <xs:element minOccurs="0" maxOccurs="1" name="PcdCoded">
852           <xs:complexType>
853             <xs:sequence>
854               <xs:element minOccurs="1" maxOccurs="unbounded" name="PcdEntry">
855                 <xs:complexType>
856                   <xs:sequence>
857                     <xs:element minOccurs="1" maxOccurs="1" name="C_Name" type="xs:NCName"/>
858                     <xs:element minOccurs="1" maxOccurs="1" name="TokenSpaceGuidCName"
859                       type="xs:NCName"/>
860                     <xs:element minOccurs="0" maxOccurs="1" name="DefaultValue"
861                       type="xs:normalizedString"/>
862                     <xs:element minOccurs="0" maxOccurs="unbounded" name="HelpText">
863                       <xs:complexType>
864                         <xs:simpleContent>
865                           <xs:extension base="xs:string">
866                             <xs:attribute name="UCS2" type="xs:boolean" default="false"
867                               use="optional"/>
868                             <xs:attribute name="Lang" type="xs:language" default="en-us"
869                               use="optional"/>
870                           </xs:extension>
871                         </xs:simpleContent>
872                       </xs:complexType>
873                     </xs:element>
874                     <xs:element minOccurs="0" maxOccurs="unbounded" name="ErrorMessage">
875                       <xs:complexType>
876                         <xs:simpleContent>
877                           <xs:extension base="xs:normalizedString">
878                             <xs:attribute name="ErrNo" use="required">
879                               <xs:simpleType>
880                                 <xs:restriction base="xs:NCName">
881                                   <xs:pattern value="0x([a-fA-F0-9])+"/>
882                                 </xs:restriction>
883                               </xs:simpleType>
884                             </xs:attribute>
885                           </xs:extension>
886                         </xs:simpleContent>
887                       </xs:complexType>
888                     </xs:element>
889                     <xs:element minOccurs="0" maxOccurs="1" name="ValidValues"
890                       type="xs:normalizedString"/>
891                   </xs:sequence>
892                   <xs:attribute name="PcdItemType" type="PcdTypes" use="required"/>
893                   <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
894                   <xs:attribute name="FeatureFlag" type="xs:normalizedString" use="optional"/>
895                 </xs:complexType>
896               </xs:element>
897             </xs:sequence>
898           </xs:complexType>
899         </xs:element>
900         <xs:element minOccurs="0" maxOccurs="1" name="ModuleBuildOptions">
901           <xs:complexType>
902             <xs:sequence>
903               <xs:element minOccurs="1" maxOccurs="unbounded" name="Option">
904                 <xs:complexType>
905                   <xs:simpleContent>
906                     <xs:extension base="xs:normalizedString">
907                       <xs:attribute name="BuildTargets" type="xs:normalizedString" use="optional"/>
908                       <xs:attribute name="TagName" type="xs:NCName" use="optional"/>
909                       <xs:attribute name="ToolCode" type="xs:NCName" use="optional"/>
910                       <xs:attribute name="Family" type="FamilyList" use="optional"/>
911                       <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
912                     </xs:extension>
913                   </xs:simpleContent>
914                 </xs:complexType>
915               </xs:element>
916             </xs:sequence>
917           </xs:complexType>
918         </xs:element>
919         <xs:element minOccurs="0" maxOccurs="unbounded" name="AsBuilt">
920           <xs:annotation>
921             <xs:documentation xml:lang="en-us">If this is a binary module distribution, this section
922               contains information about how the module was coded, such as Compiler Tools, Flags,
923               PCDs (only PatchPcd, Pcd and/or PcdEx) and Library Class Instances used to build the
924               binary.</xs:documentation>
925           </xs:annotation>
926           <xs:complexType>
927             <xs:sequence>
928               <xs:element minOccurs="0" maxOccurs="1" name="Comments" type="xs:string"/>
929               <xs:element minOccurs="0" maxOccurs="unbounded" name="PatchPcdValue">
930                 <xs:annotation>
931                   <xs:documentation xml:lang="en-us">The element is the Patchable PCD Value that was
932                     used during the build.</xs:documentation>
933                 </xs:annotation>
934                 <xs:complexType>
935                   <xs:simpleContent>
936                     <xs:extension base="xs:normalizedString">
937                       <xs:attribute name="TokenSpaceGuidCname" type="xs:NCName" use="required"/>
938                       <xs:attribute name="PcdC_Name" type="xs:NCName" use="required"/>
939                       <xs:attribute name="Token" type="xs:hexBinary" use="required"/>
940                       <xs:attribute name="Offset" type="xs:hexBinary" use="required"/>
941                       <xs:attribute name="MaxDataSize" type="Number" use="optional">
942                         <xs:annotation>
943                           <xs:documentation xml:lang="en-us">This field is required if the Pcd Datum
944                             Type is VOID*</xs:documentation>
945                         </xs:annotation>
946                       </xs:attribute>
947                     </xs:extension>
948                   </xs:simpleContent>
949                 </xs:complexType>
950               </xs:element>
951               <xs:element minOccurs="0" maxOccurs="unbounded" name="PcdValue">
952                 <xs:annotation>
953                   <xs:documentation xml:lang="en-us">The element is the Dynamic PCD Value that was
954                     used during the build.</xs:documentation>
955                 </xs:annotation>
956                 <xs:complexType>
957                   <xs:simpleContent>
958                     <xs:extension base="xs:normalizedString">
959                       <xs:attribute name="TokenSpaceGuidCname" type="xs:NCName" use="required"/>
960                       <xs:attribute name="PcdC_Name" type="xs:NCName" use="required"/>
961                       <xs:attribute name="Token" type="HexNumber" use="required"/>
962                       <xs:attribute name="MaxDataSize" type="Number" use="optional">
963                         <xs:annotation>
964                           <xs:documentation xml:lang="en-us">This field is required if the Pcd Datum
965                             Type is VOID*</xs:documentation>
966                         </xs:annotation>
967                       </xs:attribute>
968                     </xs:extension>
969                   </xs:simpleContent>
970                 </xs:complexType>
971               </xs:element>
972               <xs:element minOccurs="0" maxOccurs="unbounded" name="PcdExValue">
973                 <xs:annotation>
974                   <xs:documentation xml:lang="en-us">The element is the DynamicEx PCD Value that was
975                     used during the build.</xs:documentation>
976                 </xs:annotation>
977                 <xs:complexType>
978                   <xs:simpleContent>
979                     <xs:extension base="xs:normalizedString">
980                       <xs:attribute name="TokenSpaceGuidCname" type="xs:NCName" use="required"/>
981                       <xs:attribute name="PcdC_Name" type="xs:NCName" use="required"/>
982                       <xs:attribute name="Token" type="HexNumber" use="required"/>
983                       <xs:attribute name="MaxDataSize" type="Number" use="optional">
984                         <xs:annotation>
985                           <xs:documentation xml:lang="en-us">This field is required if the Pcd Datum
986                             Type is VOID*</xs:documentation>
987                         </xs:annotation>
988                       </xs:attribute>
989                     </xs:extension>
990                   </xs:simpleContent>
991                 </xs:complexType>
992               </xs:element>
993               <xs:element minOccurs="0" maxOccurs="unbounded" name="LibraryInstance">
994                 <xs:annotation>
995                   <xs:documentation xml:lang="en-us">This is the actual library instance that was
996                     used to link against the module.</xs:documentation>
997                 </xs:annotation>
998                 <xs:complexType>
999                   <xs:simpleContent>
1000                     <xs:extension base="xs:anyURI">
1001                       <xs:attribute name="Comment" type="xs:normalizedString" use="optional"/>
1002                       <xs:attribute name="LibraryClass" type="xs:NCName" use="required"/>
1003                       <xs:attribute name="InfGuid" type="RegistryFormatGuid" use="required"/>
1004                       <xs:attribute name="InfVer" type="xs:decimal" use="optional"/>
1005                     </xs:extension>
1006                   </xs:simpleContent>
1007                 </xs:complexType>
1008               </xs:element>
1009               <xs:element minOccurs="0" maxOccurs="unbounded" name="BuildFlags">
1010                 <xs:complexType>
1011                   <xs:simpleContent>
1012                     <xs:extension base="xs:normalizedString">
1013                       <xs:attribute name="Comment" type="xs:normalizedString" use="optional"/>
1014                       <xs:attribute name="Tool" type="xs:NCName" use="required"/>
1015                       <xs:attribute name="SupArchList" type="ArchListType" use="required"/>
1016                     </xs:extension>
1017                   </xs:simpleContent>
1018                 </xs:complexType>
1019               </xs:element>
1020             </xs:sequence>
1021             <xs:attribute name="RefName" type="xs:NCName" use="required"/>
1022           </xs:complexType>
1023         </xs:element>
1024         <xs:element minOccurs="0" maxOccurs="unbounded" name="UserExtensions">
1025           <xs:annotation>
1026             <xs:documentation xml:lang="en-us">The EDK II Reference Build Process ignores this
1027               section. The content is vendor specific.</xs:documentation>
1028           </xs:annotation>
1029           <xs:complexType mixed="true">
1030             <xs:sequence>
1031               <xs:element minOccurs="0" maxOccurs="unbounded" name="Filename">
1032                 <xs:annotation>
1033
1034                   <xs:documentation xml:lang="en-us">Files listed in this section are files that do
1035                     not fit the classification of either Source or Binary. This section can be used
1036                     to list debug, symbol, makefiles or other files that the package distributor
1037                     wants to make available.</xs:documentation>
1038                 </xs:annotation>
1039                 <xs:complexType>
1040                   <xs:simpleContent>
1041                     <xs:extension base="xs:normalizedString">
1042                       <xs:attribute name="Comment" type="xs:string" use="required"/>
1043                       <xs:attribute name="Extracted" type="xs:anyURI" use="optional"/>
1044                       <xs:attribute name="Signature" type="xs:normalizedString" use="optional"/>
1045                       <xs:attribute name="Type" type="SignType" use="optional"/>
1046                       <xs:attribute name="Exec" type="xs:boolean" default="false" use="optional"/>
1047                     </xs:extension>
1048                   </xs:simpleContent>
1049                 </xs:complexType>
1050               </xs:element>
1051             </xs:sequence>
1052             <xs:attribute name="UserId" type="xs:NCName" use="required"/>
1053             <xs:attribute name="Identifier" type="xs:normalizedString" use="required"/>
1054           </xs:complexType>
1055         </xs:element>
1056       </xs:sequence>
1057       <xs:attributeGroup ref="SurfaceAreaAttributes"/>
1058       <xs:attribute name="Binary" type="xs:boolean" default="false" use="optional">
1059         <xs:annotation>
1060           <xs:documentation xml:lang="en-us"> If set, then the binary section should be used, and
1061             the files listed in the SourceFiles section do not have to be built, if they exist.
1062             Additionally, the AsBuilt section must be included</xs:documentation>
1063         </xs:annotation>
1064       </xs:attribute>
1065     </xs:complexType>
1066   </xs:element>
1067
1068   <xs:element name="Tools">
1069     <xs:complexType>
1070       <xs:sequence>
1071         <xs:element minOccurs="1" maxOccurs="1" name="Header">
1072           <xs:complexType>
1073             <xs:sequence>
1074               <xs:element minOccurs="1" maxOccurs="1" name="Name">
1075                 <xs:annotation>
1076                   <xs:documentation xml:lang="en-us">This is the User Interface Name for this
1077                     Distribution Archive</xs:documentation>
1078                 </xs:annotation>
1079                 <xs:complexType>
1080                   <xs:simpleContent>
1081                     <xs:extension base="xs:normalizedString">
1082                       <xs:attribute name="InstalledAs" type="xs:NCName" use="optional"/>
1083                     </xs:extension>
1084                   </xs:simpleContent>
1085                 </xs:complexType>
1086               </xs:element>
1087               <xs:element minOccurs="1" maxOccurs="1" name="GUID" type="RegistryFormatGuid"/>
1088               <xs:element minOccurs="0" maxOccurs="1" name="Copyright" type="xs:string"/>
1089               <xs:element minOccurs="0" maxOccurs="1" name="License" type="xs:string"/>
1090               <xs:element minOccurs="1" maxOccurs="1" name="Abstract" type="xs:normalizedString"/>
1091               <xs:element minOccurs="0" maxOccurs="1" name="Description" type="xs:string"/>
1092               <xs:element minOccurs="0" maxOccurs="1" name="Signature">
1093                 <xs:complexType>
1094                   <xs:simpleContent>
1095                     <xs:extension base="xs:normalizedString">
1096                       <xs:attribute name="Type" type="SignType" use="required"/>
1097                     </xs:extension>
1098                   </xs:simpleContent>
1099                 </xs:complexType>
1100               </xs:element>
1101             </xs:sequence>
1102           </xs:complexType>
1103         </xs:element>
1104         <xs:element minOccurs="0" maxOccurs="unbounded" name="Filename">
1105           <xs:complexType>
1106             <xs:simpleContent>
1107               <xs:extension base="xs:anyURI">
1108                 <xs:attribute name="Extracted" type="xs:anyURI" use="optional"/>
1109                 <xs:attribute name="Copyright" type="xs:string" use="optional"/>
1110                 <xs:attribute name="License" type="xs:string" use="optional"/>
1111                 <xs:attribute name="Root" type="xs:boolean" default="false" use="optional"/>
1112                 <xs:attribute name="Revision" type="xs:nonNegativeInteger" use="optional"/>
1113                 <xs:attribute name="OS" type="SupportedOs" use="optional"/>
1114                 <xs:attribute name="Exec" type="xs:boolean" default="false" use="optional"/>
1115                 <xs:attribute name="Comment" type="xs:string" use="optional"/>
1116               </xs:extension>
1117             </xs:simpleContent>
1118           </xs:complexType>
1119         </xs:element>
1120       </xs:sequence>
1121       <xs:attributeGroup ref="SurfaceAreaAttributes"/>
1122     </xs:complexType>
1123   </xs:element>
1124
1125   <xs:element name="Misc">
1126     <xs:complexType>
1127       <xs:sequence>
1128         <xs:element minOccurs="0" maxOccurs="unbounded" name="Comments" type="xs:string"/>
1129         <xs:element minOccurs="0" maxOccurs="unbounded" name="Filename">
1130           <xs:complexType>
1131             <xs:simpleContent>
1132               <xs:extension base="xs:anyURI">
1133                 <xs:attribute name="Extracted" type="xs:anyURI" use="optional"/>
1134                 <xs:attribute name="Copyright" type="xs:string" use="optional"/>
1135                 <xs:attribute name="License" type="xs:string" use="optional"/>
1136                 <xs:attribute name="Root" type="xs:boolean" default="false" use="optional"/>
1137                 <xs:attribute name="Revision" type="xs:string" use="optional"/>
1138                 <xs:attribute name="Exec" type="xs:boolean" default="false" use="optional"/>
1139                 <xs:attribute name="Comment" type="xs:string" use="optional"/>
1140               </xs:extension>
1141             </xs:simpleContent>
1142           </xs:complexType>
1143         </xs:element>
1144         <xs:element minOccurs="0" maxOccurs="unbounded" name="UserExtenstions">
1145           <xs:complexType mixed="true">
1146             <xs:sequence>
1147               <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
1148             </xs:sequence>
1149             <xs:attribute name="Id" type="xs:nonNegativeInteger" use="optional"/>
1150           </xs:complexType>
1151         </xs:element>
1152       </xs:sequence>
1153       <xs:attribute name="UserId" type="xs:NCName" use="required"/>
1154       <xs:attribute name="Identification" type="xs:string" use="required"/>
1155     </xs:complexType>
1156   </xs:element>
1157
1158   <!-- The following attribute groups are used in various elements above. -->
1159
1160   <xs:attributeGroup name="RecommendedInf">
1161     <xs:attribute name="RecommendedInf" type="xs:anyURI" use="optional"/>
1162     <xs:attribute name="RecommendedInfGuid" type="RegistryFormatGuid" use="optional"/>
1163     <xs:attribute name="RecommendedInfVer" type="xs:decimal" use="optional"/>
1164   </xs:attributeGroup>
1165
1166   <xs:attributeGroup name="SupportedArchMod">
1167     <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
1168     <xs:attribute name="SupModList" type="ModListType" use="optional"/>
1169   </xs:attributeGroup>
1170
1171   <xs:attributeGroup name="SurfaceAreaAttributes">
1172     <xs:attribute name="RefName" type="xs:NCName" use="required">
1173       <xs:annotation>
1174         <xs:documentation xml:lang="en-us"> This name can be used as the Output File BaseName for
1175           Modules. </xs:documentation>
1176         <xs:documentation xml:lang="en-us"> Unless otherwise specified in an "InstalledAs"
1177           attribute, this attribute is used to create EDK II build meta-data description files.
1178         </xs:documentation>
1179       </xs:annotation>
1180     </xs:attribute>
1181     <xs:attribute name="Version" type="xs:decimal" use="required">
1182       <xs:annotation>
1183         <xs:documentation xml:lang="en-us"> This value, along with the GUID, is used to uniquely
1184           identify this object. </xs:documentation>
1185         <xs:documentation xml:lang="en-us"> Backward compatible changes must make sure this number
1186           is incremented from the most recent version. Non-backward compatible changes require a new
1187           GUID, and the version can be reset. </xs:documentation>
1188       </xs:annotation>
1189     </xs:attribute>
1190     <xs:attribute name="Path" type="xs:anyURI" use="required">
1191       <xs:annotation>
1192         <xs:documentation xml:lang="en-us"> The standard installation location. </xs:documentation>
1193       </xs:annotation>
1194     </xs:attribute>
1195     <xs:attribute name="ReadOnly" type="xs:boolean" default="false" use="optional">
1196       <xs:annotation>
1197         <xs:documentation xml:lang="en-us"> If this is set, all content within this section should
1198           NOT be modified. </xs:documentation>
1199         <xs:documentation xml:lang="en-us"> This value can be inherited from a collection and/or FAR
1200           attribute. </xs:documentation>
1201       </xs:annotation>
1202     </xs:attribute>
1203     <xs:attribute name="RePackage" type="xs:boolean" default="false" use="optional">
1204       <xs:annotation>
1205         <xs:documentation xml:lang="en-us">If set, then the content can be repackaged into another
1206           distribution package.</xs:documentation>
1207         <xs:documentation xml:lang="en-us"> This value can be inherited from a collection and/or FAR
1208           attribute. </xs:documentation>
1209       </xs:annotation>
1210     </xs:attribute>
1211     <xs:attribute name="Extracted" type="xs:anyURI" use="optional">
1212       <xs:annotation>
1213         <xs:documentation xml:lang="en-us"> This is used to track the actual installation location.
1214           During an installation, the user may be presented with an option to relocate content from
1215           the ZIP portion of the archive into a different location. </xs:documentation>
1216         <xs:documentation> Any installation tools must modify this value if the location is
1217           different from the default location. </xs:documentation>
1218         <xs:documentation> Any removal tools must check this value to locate correctly, the items
1219           that will be removed. </xs:documentation>
1220       </xs:annotation>
1221     </xs:attribute>
1222   </xs:attributeGroup>
1223
1224   <!-- The following data types are used to restrict content. -->
1225
1226   <xs:simpleType name="ArchListType">
1227     <xs:list itemType="Archs"/>
1228   </xs:simpleType>
1229
1230   <xs:simpleType name="Archs">
1231     <xs:restriction base="xs:NCName">
1232       <xs:enumeration value="IA32"/>
1233       <xs:enumeration value="X64"/>
1234       <xs:enumeration value="IPF"/>
1235       <xs:enumeration value="EBC"/>
1236       <xs:enumeration value="ARM"/>
1237       <xs:enumeration value="PPC"/>
1238       <xs:pattern value="([A-Z])([a-zA-Z0-9])*">
1239         <xs:annotation>
1240           <xs:documentation xml:lang="en-us"> Any processor architecture not listed above. The
1241             Architecture must be target architecture of one or more compiler tool chains.
1242           </xs:documentation>
1243         </xs:annotation>
1244       </xs:pattern>
1245     </xs:restriction>
1246   </xs:simpleType>
1247
1248   <xs:simpleType name="BinFileType">
1249     <xs:restriction base="xs:NCName">
1250       <xs:annotation>
1251         <xs:documentation xml:lang="en-us"> Not all of the types listed below should be distributed,
1252           such as a firmware volume (FV) file. </xs:documentation>
1253       </xs:annotation>
1254       <xs:enumeration value="FW"/>
1255       <xs:enumeration value="GUID"/>
1256       <xs:enumeration value="FREEFORM"/>
1257       <xs:enumeration value="UEFI_APP"/>
1258       <xs:enumeration value="PE32"/>
1259       <xs:enumeration value="PIC"/>
1260       <xs:enumeration value="PEI_DEPEX"/>
1261       <xs:enumeration value="DXE_DEPEX"/>
1262       <xs:enumeration value="TE"/>
1263       <xs:enumeration value="VER"/>
1264       <xs:enumeration value="UI"/>
1265       <xs:enumeration value="BIN"/>
1266       <xs:enumeration value="FV"/>
1267     </xs:restriction>
1268   </xs:simpleType>
1269
1270   <xs:simpleType name="BuildTypes">
1271     <xs:annotation>
1272       <xs:documentation xml:lang="en-us">The EDK II reference build uses Makefiles to generate
1273         binary images from source code. The initial release of EDK II used Ant/Java build.xml files.
1274         Other build implementations may use different command files to generate UEFI/PI images.
1275       </xs:documentation>
1276     </xs:annotation>
1277     <xs:restriction base="xs:NCName">
1278       <xs:enumeration value="Makefile">
1279         <xs:annotation>
1280           <xs:documentation xml:lang="en-us"> The Makefile is used by the Microsoft Program
1281             Maintenance Utility (NMAKE.) </xs:documentation>
1282         </xs:annotation>
1283       </xs:enumeration>
1284       <xs:enumeration value="GNUMakefile">
1285         <xs:annotation>
1286           <xs:documentation xml:lang="en-us"> The GNUmakefile is used by the GCC make or gmake
1287             application. </xs:documentation>
1288         </xs:annotation>
1289       </xs:enumeration>
1290       <xs:enumeration value="AntBuildXml">
1291         <xs:annotation>
1292           <xs:documentation xml:lang="en-us"> The XML file is used by the Java/Ant build utility.
1293           </xs:documentation>
1294         </xs:annotation>
1295       </xs:enumeration>
1296       <xs:enumeration value="GenericMakefile">
1297         <xs:annotation>
1298           <xs:documentation xml:lang="en-us"> The Makefile can be used by either nmake or one of the
1299             GCC make utilities. </xs:documentation>
1300         </xs:annotation>
1301       </xs:enumeration>
1302       <xs:pattern value="([A-Z])([a-zA-Z0-9])*">
1303         <xs:annotation>
1304           <xs:documentation xml:lang="en-us"> Any other build utility file for which tools exist.
1305           </xs:documentation>
1306         </xs:annotation>
1307       </xs:pattern>
1308     </xs:restriction>
1309   </xs:simpleType>
1310
1311   <xs:simpleType name="FamilyType">
1312     <xs:restriction base="xs:NCName">
1313       <xs:enumeration value="MSFT"/>
1314       <xs:enumeration value="GCC"/>
1315       <xs:enumeration value="INTEL"/>
1316       <xs:enumeration value="MAC"/>
1317       <xs:pattern value="[A-Z][a-zA-Z0-9]*">
1318         <xs:annotation>
1319           <xs:documentation xml:lang="en-us"> Any other family of build utilities for which compiler
1320             tools exist. </xs:documentation>
1321         </xs:annotation>
1322       </xs:pattern>
1323     </xs:restriction>
1324   </xs:simpleType>
1325
1326   <xs:simpleType name="FamilyList">
1327     <xs:list itemType="FamilyType"/>
1328   </xs:simpleType>
1329
1330   <xs:simpleType name="GuidCstruct">
1331     <xs:restriction base="xs:normalizedString">
1332       <xs:pattern
1333         value="\s*0x[a-fA-F0-9]{1,8},( )*0x[a-fA-F0-9]{1,4},( )*0x[a-fA-F0-9]{1,4}(,( )*\{)?(,?( )*0x[a-fA-F0-9]{1,2}){8}( )*(\})?\s*"
1334       />
1335     </xs:restriction>
1336   </xs:simpleType>
1337
1338   <xs:simpleType name="GuidListType">
1339     <xs:restriction base="PrimaryGuidListType">
1340       <xs:minLength value="1"/>
1341     </xs:restriction>
1342   </xs:simpleType>
1343
1344   <xs:simpleType name="GuidTypes">
1345     <xs:annotation>
1346       <xs:documentation xml:lang="en-us"> Most of the GUID types are defined by the UEFI/PI
1347         specifications, however, the BootModeRecovery types are a further refinement of GUIDs that
1348         are specific to different recovery modes. </xs:documentation>
1349     </xs:annotation>
1350     <xs:restriction base="xs:NCName">
1351       <xs:enumeration value="BootModeFull"/>
1352       <xs:enumeration value="BootModeMinimal"/>
1353       <xs:enumeration value="BootModeNoChange"/>
1354       <xs:enumeration value="BootModeDiagnostics"/>
1355       <xs:enumeration value="BootModeDefault"/>
1356       <xs:enumeration value="BootModeS2Resume"/>
1357       <xs:enumeration value="BootModeS3Resume"/>
1358       <xs:enumeration value="BootModeS4Resume"/>
1359       <xs:enumeration value="BootModeS5Resume"/>
1360       <xs:enumeration value="FlashUpdate"/>
1361       <xs:enumeration value="BootModeFullRecovery"/>
1362       <xs:enumeration value="BootModeMinimalRecovery"/>
1363       <xs:enumeration value="BootModeNoChangeRecovery"/>
1364       <xs:enumeration value="BootModeDiagnosticsRecovery"/>
1365       <xs:enumeration value="BootModeDefaultRecovery"/>
1366       <xs:enumeration value="BootModeRecoveryS2Resume"/>
1367       <xs:enumeration value="BootModeRecoveryS3Resume"/>
1368       <xs:enumeration value="BootModeRecoveryS4Resume"/>
1369       <xs:enumeration value="BootModeRecoveryS5Resume"/>
1370       <xs:enumeration value="BootModeRecoveryFlashUpdate"/>
1371       <xs:enumeration value="DataHubRecord"/>
1372       <xs:enumeration value="CreateEvent"/>
1373       <xs:enumeration value="SignalEvent"/>
1374       <xs:enumeration value="EventGroupGUID"/>
1375       <xs:enumeration value="PeriodicTimerEvent"/>
1376       <xs:enumeration value="RelativeTimerEvent"/>
1377       <xs:enumeration value="SystemTable"/>
1378       <xs:enumeration value="EfiVariable"/>
1379       <xs:enumeration value="Formset"/>
1380       <xs:enumeration value="GUID"/>
1381       <xs:enumeration value="HiiPackageList"/>
1382       <xs:enumeration value="HOB"/>
1383       <xs:enumeration value="PhitHob"/>
1384       <xs:enumeration value="MemAllocHob"/>
1385       <xs:enumeration value="GuidExtHob"/>
1386       <xs:enumeration value="FvHob"/>
1387       <xs:enumeration value="CpuHob"/>
1388       <xs:enumeration value="PoolHob"/>
1389       <xs:enumeration value="CapsuleVolumeHob"/>
1390       <xs:enumeration value="File"/>
1391       <xs:enumeration value="TokenSpaceGuid"/>
1392     </xs:restriction>
1393   </xs:simpleType>
1394
1395   <xs:simpleType name="PrimaryGuidListType">
1396     <xs:list itemType="GuidTypes"/>
1397   </xs:simpleType>
1398
1399   <xs:simpleType name="HexNumber">
1400     <xs:restriction base="xs:NCName">
1401       <xs:pattern value="0x([a-fA-F0-9])+"/>
1402     </xs:restriction>
1403   </xs:simpleType>
1404
1405   <xs:simpleType name="LibUsageType">
1406     <xs:annotation>
1407       <xs:documentation xml:lang="en-us"> Library instances can provide code for a library class, or
1408         may require other library instances themselves. Since different execution paths in a library
1409         (or module) may need different library classes based on some setting, library classes may
1410         not alway be required. </xs:documentation>
1411     </xs:annotation>
1412     <xs:restriction base="xs:NCName">
1413       <xs:enumeration value="PRODUCES"/>
1414       <xs:enumeration value="CONSUMES"/>
1415       <xs:enumeration value="SOMETIMES_CONSUMES"/>
1416       <xs:enumeration value="PRIVATE"/>
1417     </xs:restriction>
1418   </xs:simpleType>
1419
1420   <xs:simpleType name="ModListType">
1421     <xs:list itemType="ModuleType"/>
1422   </xs:simpleType>
1423
1424   <xs:simpleType name="ModuleType">
1425     <xs:annotation>
1426       <xs:documentation xml:lang="en-us"> The following module types are defined by EDK II
1427         specifications. </xs:documentation>
1428       <xs:documentation xml:lang="en-us"> Component types for EDK components and libraries are not
1429         supported under the FAR distribution mechanism. </xs:documentation>
1430     </xs:annotation>
1431     <xs:restriction base="xs:NCName">
1432       <xs:enumeration value="BASE "/>
1433       <xs:enumeration value="SEC"/>
1434       <xs:enumeration value="PEI_CORE"/>
1435       <xs:enumeration value="PEIM"/>
1436       <xs:enumeration value="DXE_CORE"/>
1437       <xs:enumeration value="DXE_DRIVER"/>
1438       <xs:enumeration value="DXE_RUNTIME_DRIVER"/>
1439       <xs:enumeration value="DXE_SAL_DRIVER"/>
1440       <xs:enumeration value="DXE_SMM_DRIVER"/>
1441       <xs:enumeration value="UEFI_DRIVER"/>
1442       <xs:enumeration value="UEFI_APPLICATION"/>
1443       <xs:enumeration value="USER_DEFINED"/>
1444     </xs:restriction>
1445   </xs:simpleType>
1446
1447   <xs:simpleType name="Number">
1448     <xs:union memberTypes="xs:nonNegativeInteger xs:hexBinary HexNumber"/>
1449   </xs:simpleType>
1450
1451   <xs:simpleType name="PcdDatumType">
1452     <xs:annotation>
1453       <xs:documentation xml:lang="en-us"> The following data types are defined by the PCD
1454         specification (or PCD section of the UEFI/PI specifications.) </xs:documentation>
1455     </xs:annotation>
1456     <xs:restriction base="xs:normalizedString">
1457       <xs:enumeration value="UINT8"/>
1458       <xs:enumeration value="UINT16"/>
1459       <xs:enumeration value="UINT32"/>
1460       <xs:enumeration value="UINT64"/>
1461       <xs:enumeration value="BOOLEAN"/>
1462       <xs:enumeration value="VOID*"/>
1463     </xs:restriction>
1464   </xs:simpleType>
1465
1466   <xs:simpleType name="PcdTypeList">
1467     <xs:list itemType="PcdTypes"/>
1468   </xs:simpleType>
1469
1470   <xs:simpleType name="PcdTypes">
1471     <xs:restriction base="xs:NCName">
1472       <xs:enumeration value="FeaturePcd">
1473         <xs:annotation>
1474           <xs:documentation xml:lang="en-us"> The Feature PCD is a binary, evaluating to either true
1475             or false. This is used during build to include/exclude content. It can also be used
1476             during execution to force execution paths within drivers, or to enable/disable features
1477             within a driver for a given platform. </xs:documentation>
1478         </xs:annotation>
1479       </xs:enumeration>
1480       <xs:enumeration value="FixedPcd">
1481         <xs:annotation>
1482           <xs:documentation xml:lang="en-us"> The Fixed PCD is a #define value that is set at build
1483             time. </xs:documentation>
1484         </xs:annotation>
1485       </xs:enumeration>
1486       <xs:enumeration value="PatchPcd">
1487         <xs:annotation>
1488           <xs:documentation xml:lang="en-us"> The Patch PCD is a #define that is set at build time,
1489             and that can be modified within a binary file. Additional information, such as the
1490             offset location of the value, along with it's length may need to be
1491           provided.</xs:documentation>
1492         </xs:annotation>
1493       </xs:enumeration>
1494       <xs:enumeration value="Pcd">
1495         <xs:annotation>
1496           <xs:documentation xml:lang="en-us"> This PCD type has an overloaded definition. Prior to
1497             build, the platform integrator may choose to implement a PCD as Fixed, Patchable or a
1498             Dynamic PCD. If the platform integrator choose to use the PCD as dynamic, then a PCD
1499             driver is required in the platform (PEI/DXE/both) to track the PCD in some sort of
1500             'database' of these items. For Dynamic PCDs, the PcdGet* must pass in the token space
1501             guid and the token number to retrieve data (PcdSet* also needs these values.)
1502           </xs:documentation>
1503         </xs:annotation>
1504       </xs:enumeration>
1505       <xs:enumeration value="PcdEx">
1506         <xs:annotation>
1507           <xs:documentation xml:lang="en-us"> The PCD can only be used as Dynamic, and the platform
1508             firmware must contain a driver to maintain a 'database' of these items. For Dynamic
1509             PCDs, the PcdGet* must pass in the token space guid and the token number to retrieve
1510             data (PcdSet* also needs these values.) </xs:documentation>
1511         </xs:annotation>
1512       </xs:enumeration>
1513     </xs:restriction>
1514   </xs:simpleType>
1515
1516   <xs:simpleType name="ProtocolUsageType">
1517     <xs:restriction base="xs:NCName">
1518       <xs:enumeration value="PRODUCES"/>
1519       <xs:enumeration value="SOMETIMES_PRODUCES"/>
1520       <xs:enumeration value="CONSUMES"/>
1521       <xs:enumeration value="SOMETIMES_CONSUMES"/>
1522       <xs:enumeration value="TO_START"/>
1523       <xs:enumeration value="BY_START"/>
1524     </xs:restriction>
1525   </xs:simpleType>
1526
1527   <xs:simpleType name="RegistryFormatGuid">
1528     <xs:annotation>
1529       <xs:documentation xml:lang="en-us"> A GUID must contain five different Hexadecimal character
1530         sets that are separated by a dash (-) character. </xs:documentation>
1531     </xs:annotation>
1532     <xs:restriction base="xs:string">
1533       <xs:pattern
1534         value="\s*[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\s*"/>
1535     </xs:restriction>
1536   </xs:simpleType>
1537
1538   <xs:simpleType name="SupportedOs">
1539     <xs:annotation>
1540       <xs:documentation xml:lang="en-us"> The EDK II build system supports workstations running one
1541         of the following supported operating systems. This is the OS for the developer's
1542         workstation, not the target platform. </xs:documentation>
1543     </xs:annotation>
1544     <xs:restriction base="xs:string">
1545       <xs:enumeration value="Win32"/>
1546       <xs:enumeration value="Win64"/>
1547       <xs:enumeration value="Linux32"/>
1548       <xs:enumeration value="Linux64"/>
1549       <xs:enumeration value="OS/X32"/>
1550       <xs:enumeration value="OS/X64"/>
1551       <xs:enumeration value="Generic"/>
1552       <xs:enumeration value="GenericWin"/>
1553       <xs:enumeration value="GenericNix"/>
1554     </xs:restriction>
1555   </xs:simpleType>
1556
1557   <xs:simpleType name="SignType">
1558     <xs:restriction base="xs:NCName">
1559       <xs:enumeration value="None"/>
1560       <xs:enumeration value="MD5"/>
1561       <xs:enumeration value="CRC32"/>
1562       <!-- The following are not supported without additional tools -->
1563       <xs:enumeration value="PGP"/>
1564       <xs:enumeration value="RSA"/>
1565       <xs:enumeration value="DES"/>
1566       <xs:enumeration value="SHA"/>
1567     </xs:restriction>
1568   </xs:simpleType>
1569
1570   <xs:simpleType name="UsageType">
1571     <xs:restriction base="xs:NCName">
1572       <xs:enumeration value="PRODUCES"/>
1573       <xs:enumeration value="SOMETIMES_PRODUCES"/>
1574       <xs:enumeration value="CONSUMES"/>
1575       <xs:enumeration value="SOMETIMES_CONSUMES"/>
1576     </xs:restriction>
1577   </xs:simpleType>
1578
1579 </xs:schema>