• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<?xml version="1.0" encoding="UTF-8"?>
2<!--
3Filename: DistributionPackage.xsd
4
5Copyright (c) 2008 - 2012, Intel Corporation. All rights reserved.
6
7This program and the accompanying materials are licensed and made available
8under the terms and conditions of the BSD License which may be found at
9    http://opensource.org/licenses/bsd-license.php
10
11THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12WITHOUT 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.uefi.org/2012/1.0" xmlns="http://www.uefi.org/2012/1.0">
17  <xs:element name="DistributionPackage">
18    <xs:annotation>
19      <xs:documentation xml:lang="en-us">
20        This schema defines the UEFI/PI Distribution Package description (PKG)
21        file. It describes the content of:
22      </xs:documentation>
23      <xs:documentation xml:lang="en-us"> 1) Package descriptions with definitions and headers.</xs:documentation>
24      <xs:documentation xml:lang="en-us">
25        2) Modules in either source or binary format. (Note that Binary format
26        is for FFS leaf section file types only, complete FFS files cannot be distributed using this
27        distribution format.)
28      </xs:documentation>
29      <xs:documentation xml:lang="en-us">
30        3) The distribution of custom tools used to modify the binary images to
31        create UEFI/PI compliant images.
32      </xs:documentation>
33      <xs:documentation xml:lang="en-us">
34        4) Finally, it can be used to distribute other miscellaneous content
35        that is not specific to UEFI/PI images.
36      </xs:documentation>
37      <xs:documentation xml:lang="en-us">
38        The Package Surface Area describes the content of packages, while the
39        Module Surface Area provides information relevant to source and/or binary distributions.
40      </xs:documentation>
41    </xs:annotation>
42    <xs:complexType>
43      <xs:sequence>
44        <xs:element ref="DistributionHeader" minOccurs="1" maxOccurs="1">
45          <xs:annotation>
46            <xs:documentation xml:lang="en-us">
47              This header contains (legal) information usually required
48              for distributing both binary and/or source code.
49            </xs:documentation>
50          </xs:annotation>
51        </xs:element>
52        <xs:element ref="PackageSurfaceArea" minOccurs="0" maxOccurs="unbounded">
53          <xs:annotation>
54            <xs:documentation xml:lang="en-us"> The list of packages in this distribution. </xs:documentation>
55            <xs:documentation xml:lang="en-us">
56              Packages are groups of files and/or modules that are similar
57              in nature.
58            </xs:documentation>
59            <xs:documentation xml:lang="en-us">
60              Packages are uniquely identified by a package GUID and a
61              package version.
62            </xs:documentation>
63            <xs:documentation xml:lang="en-us">
64              A package can declare public mappings of C names to GUID
65              values.
66            </xs:documentation>
67            <xs:documentation xml:lang="en-us">
68              A package can provide header files for library classes
69              and/or other industry standard definitions.
70            </xs:documentation>
71            <xs:documentation xml:lang="en-us">
72              A package can also declare public mappings of platform
73              configuration database (PCD) &quot;knobs&quot; to control features and operation of modules
74              within a platform.
75            </xs:documentation>
76            <xs:documentation xml:lang="en-us">
77              Finally, a package lists the library instances and/or
78              modules that are provided in a distribution package.
79            </xs:documentation>
80          </xs:annotation>
81        </xs:element>
82        <xs:element ref="ModuleSurfaceArea" minOccurs="0" maxOccurs="unbounded">
83          <xs:annotation>
84            <xs:documentation xml:lang="en-us">
85              The listing of UEFI/PI compliant modules in this
86              distribution that are NOT part of a Package. Every module that is provided as part of a
87              package needs to be described in a PackageSurfaceArea.Modules section.
88            </xs:documentation>
89            <xs:documentation xml:lang="en-us">
90              The ModuleSurfaceArea section describes how each module in a
91              distribution is coded, or, in the case of a binary module distribution, how it was built.
92            </xs:documentation>
93            <xs:documentation xml:lang="en-us">
94              UEFI/PI compliant libraries and modules are uniquely
95              identified by the Module's GUID and version number.
96            </xs:documentation>
97            <xs:documentation xml:lang="en-us">
98              This section will typically be used for modules that don't
99              require any additional files that would be included in a package. For example, the Enhanced
100              FAT driver binary does not need to have a package description, as no additional files are
101              provided.
102            </xs:documentation>
103          </xs:annotation>
104        </xs:element>
105        <xs:element ref="Tools" minOccurs="0" maxOccurs="unbounded">
106          <xs:annotation>
107            <xs:documentation xml:lang="en-us">
108              This section is for distributing vendor specific executable
109              tools, tool source code and/or configuration files. These tools are primarily for
110              manipulating code and/or binary images.
111            </xs:documentation>
112            <xs:documentation xml:lang="en-us"> Tools in this section can:</xs:documentation>
113            <xs:documentation xml:lang="en-us">
114              1) Parse build meta-data files to create source code files
115              and build scripts.
116            </xs:documentation>
117            <xs:documentation xml:lang="en-us"> 2) Modify image files to conform to UEFI/PI specifications. </xs:documentation>
118            <xs:documentation xml:lang="en-us">
119              3) Generate binary files from certain types of text/unicode
120              files.
121            </xs:documentation>
122            <xs:documentation xml:lang="en-us"> 4) Generate PCI Option Roms or Firmware Device images. </xs:documentation>
123            <xs:documentation xml:lang="en-us">
124              5) Implement external encoding/decoding/signature/GUIDed
125              tools.
126            </xs:documentation>
127            <xs:documentation xml:lang="en-us">
128              6) Distribution Package create/install/remove tools.
129            </xs:documentation>
130          </xs:annotation>
131        </xs:element>
132        <xs:element ref="MiscellaneousFiles" minOccurs="0" maxOccurs="unbounded">
133          <xs:annotation>
134            <xs:documentation xml:lang="en-us">
135              The list of miscellaneous files in this distribution. Any
136              files that are not listed in either the Package, Module or Tools sections can be listed
137              here. This section can be used to distribute specifications for packages and modules that
138              are not &quot;industry standards&quot; such as a specification for a chipset or a video
139              device.
140            </xs:documentation>
141          </xs:annotation>
142        </xs:element>
143        <xs:element ref="UserExtensions" minOccurs="0" maxOccurs="unbounded">
144          <xs:annotation>
145            <xs:documentation xml:lang="en-us">
146              The UserExtensions section is used to disseminate processing
147              instructions that may be custom to the content provided by the distribution. This section
148              contains information that is common to all aspects of this disribution.
149            </xs:documentation>
150          </xs:annotation>
151        </xs:element>
152      </xs:sequence>
153
154    </xs:complexType>
155  </xs:element>
156  <!-- End of the DistributionPackage Description  -->
157
158  <xs:element name="DistributionHeader">
159    <xs:annotation>
160      <xs:documentation xml:lang="en-us">
161        This section defines the content of the UEIF/PI compliant Distribution
162        Package Header. This is the only required element of a UEFI/PI compliant distribution package.
163      </xs:documentation>
164    </xs:annotation>
165    <xs:complexType>
166      <xs:sequence>
167        <xs:element minOccurs="1" maxOccurs="1" name="Name">
168          <xs:annotation>
169            <xs:documentation xml:lang="en-us">
170              This is the User Interface Name for this Distribution
171              Package.
172            </xs:documentation>
173            <xs:documentation xml:lang="en-us">
174              Each Distribution Package is uniquely identified by it's
175              GUID and Version number.
176            </xs:documentation>
177          </xs:annotation>
178          <xs:complexType>
179            <xs:simpleContent>
180              <xs:extension base="xs:normalizedString">
181                <xs:attribute name="BaseName" type="xs:NMTOKEN" use="optional">
182                  <xs:annotation>
183                    <xs:documentation xml:lang="en-us">
184                      The reference name of the Distribution
185                      Package file. This single word name can be used by tools as a keyword or for
186                      directory and/or file creation.
187                    </xs:documentation>
188                    <xs:documentation xml:lang="en-us">
189                      White space and special characters (dash and
190                      underscore characters may be used) are not permitted in this name.
191                    </xs:documentation>
192                  </xs:annotation>
193                </xs:attribute>
194              </xs:extension>
195            </xs:simpleContent>
196          </xs:complexType>
197        </xs:element>
198        <xs:element minOccurs="1" maxOccurs="1" name="GUID">
199          <xs:annotation>
200            <xs:documentation xml:lang="en-us">
201              This 128-bit GUID and the Version attribute uniquely
202              identify this Distribution Package.
203            </xs:documentation>
204            <xs:documentation xml:lang="en-us">
205              Backward compatible releases of a distribution package need
206              only change the version number, while non-backward compatible changes require the GUID to
207              change (resetting the version number to 1.0 is optional.)
208            </xs:documentation>
209          </xs:annotation>
210          <xs:complexType>
211            <xs:simpleContent>
212              <xs:extension base="RegistryFormatGuid">
213                <xs:attribute name="Version" type="xs:decimal" use="required">
214                  <xs:annotation>
215                    <xs:documentation xml:lang="en-us">
216                      This value, along with the GUID, is used to
217                      uniquely identify this object. The higher the number, the more recent the
218                      content.
219                    </xs:documentation>
220                  </xs:annotation>
221                </xs:attribute>
222              </xs:extension>
223            </xs:simpleContent>
224          </xs:complexType>
225        </xs:element>
226        <xs:element minOccurs="1" maxOccurs="1" name="Vendor" type="xs:normalizedString">
227          <xs:annotation>
228            <xs:documentation xml:lang="en-us">
229              A string identifying who created this distribution package.
230            </xs:documentation>
231          </xs:annotation>
232        </xs:element>
233        <xs:element minOccurs="1" maxOccurs="1" name="Date" type="xs:dateTime">
234          <xs:annotation>
235            <xs:documentation xml:lang="en-us">
236              The date and time this distribution was created. The format
237              is: YYYY-MM-DDThh:mm:ss, for example: 2001-01-31T13:30:00 (note the T character separator
238              between the calendar date and the time.
239            </xs:documentation>
240          </xs:annotation>
241        </xs:element>
242        <xs:element minOccurs="1" maxOccurs="unbounded" name="Copyright">
243          <xs:annotation>
244            <xs:documentation xml:lang="en-us">
245              The copyright for this file that is generated by the creator
246              of the distribution. If a derivative work is generated from an existing distribution, then
247              the existing copyright must be maintained, and additional copyrights may be appended to the
248              end of this element. It may also be the primary copyright for all code provided in the
249              Distribution Package.
250            </xs:documentation>
251          </xs:annotation>
252          <xs:complexType>
253            <xs:simpleContent>
254              <xs:extension base="xs:string">
255                <xs:attribute name="Lang" type="xs:language" default="en-us" use="optional"/>
256              </xs:extension>
257            </xs:simpleContent>
258          </xs:complexType>
259
260        </xs:element>
261        <xs:element minOccurs="1" maxOccurs="unbounded" name="License">
262          <xs:annotation>
263            <xs:documentation xml:lang="en-us">
264              A license that describes any restrictions on the use of this
265              distribution. If a derivative work is allowed by the original license and a derivative work
266              is generated from an existing distribution, then the existing license must be maintained,
267              and additional licenses may be appended to the end of this element. It may also be the
268              primary license for all code provided in the distribution file. Alternatively, this may
269              point to a filename that contains the License. The file (included in the content zip file)
270              will be stored in the same location as the distribution package's .pkg file.
271            </xs:documentation>
272          </xs:annotation>
273          <xs:complexType>
274            <xs:simpleContent>
275              <xs:extension base="xs:string">
276                <xs:attribute name="Lang" type="xs:language" default="en-us" use="optional"/>
277              </xs:extension>
278            </xs:simpleContent>
279          </xs:complexType>
280        </xs:element>
281        <xs:element minOccurs="1" maxOccurs="unbounded" name="Abstract">
282          <xs:annotation>
283            <xs:documentation xml:lang="en-us">
284              A one line description of the Distribution Package.
285            </xs:documentation>
286          </xs:annotation>
287          <xs:complexType>
288            <xs:simpleContent>
289              <xs:extension base="xs:normalizedString">
290                <xs:attribute name="Lang" type="xs:language" default="en-us" use="optional"/>
291              </xs:extension>
292            </xs:simpleContent>
293          </xs:complexType>
294        </xs:element>
295        <xs:element minOccurs="0" maxOccurs="unbounded" name="Description">
296          <xs:annotation>
297            <xs:documentation xml:lang="en-us">
298              A complete description of the Distribution Package. This
299              description may include the release name of the file, the version of the file, and a
300              complete description of the file contents and/or features including a description of the
301              updates since the previous file release.
302            </xs:documentation>
303          </xs:annotation>
304          <xs:complexType>
305            <xs:simpleContent>
306              <xs:extension base="xs:string">
307                <xs:attribute name="Lang" type="xs:language" default="en-us" use="optional"/>
308              </xs:extension>
309            </xs:simpleContent>
310          </xs:complexType>
311        </xs:element>
312        <xs:element minOccurs="0" maxOccurs="1" name="Signature" type="Md5Sum">
313          <xs:annotation>
314            <xs:documentation xml:lang="en-us">
315              The packaging utilities will use this MD5 sum value of the
316              included ZIP file containing files and/or code. If this element is not present, then
317              installation tools should assume that the content is correct, or that other methods may be
318              needed to verify content.
319            </xs:documentation>
320          </xs:annotation>
321        </xs:element>
322        <xs:element minOccurs="1" maxOccurs="1" name="XmlSpecification" type="xs:decimal" default="1.1">
323          <xs:annotation>
324            <xs:documentation xml:lang="en-us"> This version of this XML Schema is 1.1 </xs:documentation>
325            <xs:documentation xml:lang="en-us"> Changes to 1.1 from 1.0 </xs:documentation>
326            <xs:documentation xml:lang="en-us">
327              #1 Updated to present date and new version which is
328              important to reflect the present state of the matter
329            </xs:documentation>
330            <xs:documentation xml:lang="en-us">
331              #2 Added definition/enumeration of UNDEFIND type 2 is
332              important since there is a large body of legacy code for which the GUID’s and other
333              code/data objects were not decorated with their usage. This document will allow for
334              importing today’s source artifacts and producing decorations using the ‘Undefined’ versus
335              having an error
336            </xs:documentation>
337            <xs:documentation xml:lang="en-us">
338              #3 Allow for inclusion of ARM and future architecture
339              types
340            </xs:documentation>
341          </xs:annotation>
342        </xs:element>
343      </xs:sequence>
344      <xs:attribute name="ReadOnly" type="xs:boolean" default="false" use="optional">
345        <xs:annotation>
346          <xs:documentation xml:lang="en-us">
347            If set to true, all content within this Distribution Package
348            should NOT be modified. The default permits modification of all content.
349          </xs:documentation>
350        </xs:annotation>
351      </xs:attribute>
352      <xs:attribute name="RePackage" type="xs:boolean" default="false" use="optional">
353        <xs:annotation>
354          <xs:documentation xml:lang="en-us">
355            If set to true, then the content can be repackaged into another
356            distribution package. The default prohibits repackaging the Distribution content.
357          </xs:documentation>
358        </xs:annotation>
359      </xs:attribute>
360    </xs:complexType>
361  </xs:element>
362  <!-- End of the DistributionHeader element. -->
363
364  <xs:element name="PackageSurfaceArea">
365    <xs:annotation>
366      <xs:documentation xml:lang="en-us">
367        A package is a collection of related objects - Includes, Libraries and
368        Modules.
369      </xs:documentation>
370      <xs:documentation xml:lang="en-us">
371        Each package is uniquely identified by it's GUID and Version number.
372        Backward compatible releases of a package need only change the version number, while non-backward
373        compatible changes require the GUID to change (resetting the version number to 1.0 is optional.)
374      </xs:documentation>
375    </xs:annotation>
376    <xs:complexType>
377      <xs:sequence>
378
379        <xs:element minOccurs="1" maxOccurs="1" name="Header">
380          <xs:complexType>
381            <xs:sequence>
382              <xs:element minOccurs="1" maxOccurs="1" name="Name">
383                <xs:annotation>
384                  <xs:documentation xml:lang="en-us">
385                    This is the User Interface Name for this
386                    package.
387                  </xs:documentation>
388                </xs:annotation>
389                <xs:complexType>
390                  <xs:simpleContent>
391                    <xs:extension base="xs:normalizedString">
392                      <xs:attribute name="BaseName" type="xs:NMTOKEN" use="required">
393                        <xs:annotation>
394                          <xs:documentation xml:lang="en-us">
395                            This is a single word BaseName
396                            of the package. This BaseName can be used by tools as a keyword
397                            and for directory/file creation.
398                          </xs:documentation>
399                        </xs:annotation>
400                      </xs:attribute>
401                    </xs:extension>
402                  </xs:simpleContent>
403                </xs:complexType>
404              </xs:element>
405              <xs:element minOccurs="1" maxOccurs="1" name="GUID">
406                <xs:annotation>
407                  <xs:documentation xml:lang="en-us">
408                    This GUID and the Version attribute uniquely
409                    identify a given package.
410                  </xs:documentation>
411                </xs:annotation>
412                <xs:complexType>
413                  <xs:simpleContent>
414                    <xs:extension base="RegistryFormatGuid">
415                      <xs:attribute name="Version" type="xs:decimal" use="required">
416                        <xs:annotation>
417                          <xs:documentation xml:lang="en-us">
418                            This value, along with the GUID,
419                            is used to uniquely identify this object.
420                          </xs:documentation>
421                          <xs:documentation xml:lang="en-us">
422                            Backward compatible changes must
423                            make sure this number is incremented from the most recent
424                            version. Non-backward compatible changes require a new GUID, and
425                            the version can be reset.
426                          </xs:documentation>
427                        </xs:annotation>
428                      </xs:attribute>
429                    </xs:extension>
430                  </xs:simpleContent>
431                </xs:complexType>
432              </xs:element>
433              <xs:element minOccurs="0" maxOccurs="unbounded" name="Copyright">
434                <xs:annotation>
435                  <xs:documentation xml:lang="en-us">
436                    If the package requires a different copyright
437                    than the distribution package, this element can list one or more copyright
438                    lines.
439                  </xs:documentation>
440                </xs:annotation>
441                <xs:complexType>
442                  <xs:simpleContent>
443                    <xs:extension base="xs:string">
444                      <xs:attribute name="Lang" type="xs:language" default="en-us" use="optional"
445                                            />
446                    </xs:extension>
447                  </xs:simpleContent>
448                </xs:complexType>
449
450              </xs:element>
451              <xs:element minOccurs="0" maxOccurs="unbounded" name="License">
452                <xs:annotation>
453                  <xs:documentation xml:lang="en-us">
454                    If the package requires licenses that are
455                    different from the distribution package license, this element can contain one or
456                    more license text paragraphs (or license filenames.)
457                  </xs:documentation>
458                </xs:annotation>
459                <xs:complexType>
460                  <xs:simpleContent>
461                    <xs:extension base="xs:string">
462                      <xs:attribute name="Lang" type="xs:language" default="en-us" use="optional"
463                                            />
464                    </xs:extension>
465                  </xs:simpleContent>
466                </xs:complexType>
467
468              </xs:element>
469              <xs:element minOccurs="0" maxOccurs="unbounded" name="Abstract">
470                <xs:annotation>
471                  <xs:documentation xml:lang="en-us">
472                    A one line description of this package.
473                  </xs:documentation>
474                </xs:annotation>
475                <xs:complexType>
476                  <xs:simpleContent>
477                    <xs:extension base="xs:normalizedString">
478                      <xs:attribute name="Lang" type="xs:language" default="en-us" use="optional"
479                                            />
480                    </xs:extension>
481                  </xs:simpleContent>
482                </xs:complexType>
483              </xs:element>
484              <xs:element minOccurs="0" maxOccurs="unbounded" name="Description">
485                <xs:annotation>
486                  <xs:documentation xml:lang="en-us">
487                    A complete description of a package. This
488                    description may include the release name of the package, the version of the
489                    package, and a complete description of the package contents and/or features
490                    including a description of the updates since the previous package’s release.
491                  </xs:documentation>
492                </xs:annotation>
493                <xs:complexType>
494                  <xs:simpleContent>
495                    <xs:extension base="xs:string">
496                      <xs:attribute name="Lang" type="xs:language" default="en-us" use="optional"
497                                            />
498                    </xs:extension>
499                  </xs:simpleContent>
500                </xs:complexType>
501              </xs:element>
502              <xs:element minOccurs="1" maxOccurs="1" name="PackagePath" type="xs:anyURI">
503                <xs:annotation>
504                  <xs:documentation xml:lang="en-us">
505                    This element is the location (in the ZIP file)
506                    for the root directory of a package.
507                  </xs:documentation>
508                </xs:annotation>
509              </xs:element>
510            </xs:sequence>
511          </xs:complexType>
512        </xs:element>
513        <!-- End of PackageSurfaceArea Header element.  -->
514
515        <xs:element minOccurs="0" maxOccurs="1" name="ClonedFrom">
516          <xs:annotation>
517            <xs:documentation xml:lang="en-us">
518              The term cloned is used here to indicate that this package
519              as been copied and modified to a completely different package. An example might be for a new
520              generation of chipsets that have few or no elements in common with the original.
521            </xs:documentation>
522          </xs:annotation>
523          <xs:complexType>
524            <xs:sequence>
525              <xs:element minOccurs="1" maxOccurs="1" name="GUID">
526                <xs:annotation>
527                  <xs:documentation xml:lang="en-us">
528                    This GUID and the Version attribute uniquely
529                    identify the Package that this Package was copied from.
530                  </xs:documentation>
531                </xs:annotation>
532                <xs:complexType>
533                  <xs:simpleContent>
534                    <xs:extension base="RegistryFormatGuid">
535                      <xs:attribute name="Version" type="xs:decimal" use="required">
536                        <xs:annotation>
537                          <xs:documentation xml:lang="en-us">
538                            This value, along with the GUID,
539                            is used to uniquely identify the package that this package was
540                            cloned from.
541                          </xs:documentation>
542                        </xs:annotation>
543                      </xs:attribute>
544                    </xs:extension>
545                  </xs:simpleContent>
546                </xs:complexType>
547              </xs:element>
548            </xs:sequence>
549          </xs:complexType>
550        </xs:element>
551        <!-- End of PackageSurfaceArea ClonedFrom element.  -->
552
553        <xs:element minOccurs="0" maxOccurs="1" name="LibraryClassDeclarations">
554          <xs:annotation>
555            <xs:documentation xml:lang="en-us">
556              Library Classes are public interfaces that can be used by
557              modules. One or more library instances can implement a library class, however only one
558              library instance can be linked to an individual module. This provides the platform
559              integrator with the flexibility of choosing one library instance's implementation over a
560              different library instance.
561            </xs:documentation>
562          </xs:annotation>
563          <xs:complexType>
564            <xs:sequence>
565              <xs:element minOccurs="1" maxOccurs="unbounded" name="LibraryClass">
566                <xs:complexType>
567                  <xs:sequence>
568                    <xs:element minOccurs="1" maxOccurs="1" name="HeaderFile" type="xs:anyURI">
569                      <xs:annotation>
570                        <xs:documentation xml:lang="en-us">
571                          The header file provides definitions
572                          and function prototypes for a library class. Modules can be coded
573                          against these functions, using the definitions in this header,
574                          without concerning themselves about the libraries' implementation
575                          details. This is a PackagePath relative path and filename for the
576                          include file.
577                        </xs:documentation>
578                      </xs:annotation>
579                    </xs:element>
580                    <xs:element minOccurs="0" maxOccurs="1" name="RecommendedInstance">
581                      <xs:complexType>
582                        <xs:sequence>
583                          <xs:element minOccurs="1" maxOccurs="1" name="GUID">
584                            <xs:annotation>
585                              <xs:documentation xml:lang="en-us">
586                                This GUID and the
587                                Version attribute uniquely identify the Recommended Library
588                                Instance.
589                              </xs:documentation>
590                            </xs:annotation>
591                            <xs:complexType>
592                              <xs:simpleContent>
593                                <xs:extension base="RegistryFormatGuid">
594                                  <xs:attribute name="Version" type="xs:decimal"
595                                  use="optional">
596                                    <xs:annotation>
597                                      <xs:documentation xml:lang="en-us">
598                                        This value, along with
599                                        the GUID, is used to uniquely identify this object. If this
600                                        value is not specified, then any version of the library
601                                        instance is recommended.
602                                      </xs:documentation>
603                                    </xs:annotation>
604                                  </xs:attribute>
605                                </xs:extension>
606                              </xs:simpleContent>
607                            </xs:complexType>
608                          </xs:element>
609                        </xs:sequence>
610                      </xs:complexType>
611                    </xs:element>
612                    <xs:element ref="HelpText" minOccurs="0" maxOccurs="unbounded"/>
613                  </xs:sequence>
614                  <xs:attribute name="Keyword" type="xs:NCName" use="required">
615                    <xs:annotation>
616                      <xs:documentation xml:lang="en-us">
617                        The single word name of the Library
618                        Class that module developers will use to identify a library class
619                        dependency.
620                      </xs:documentation>
621                    </xs:annotation>
622                  </xs:attribute>
623                  <xs:attributeGroup ref="SupportedArchMod"/>
624                </xs:complexType>
625              </xs:element>
626            </xs:sequence>
627          </xs:complexType>
628        </xs:element>
629        <!-- End of PackageSurfaceArea LibraryClassDeclarations element.  -->
630
631        <xs:element minOccurs="0" maxOccurs="1" name="IndustryStandardIncludes">
632          <xs:annotation>
633            <xs:documentation xml:lang="en-us">
634              This section is used to list header files for industry
635              standards not under the auspices of UEFI.org. For example, headers that contain definitions
636              and data structures for the USB specifications.
637            </xs:documentation>
638          </xs:annotation>
639          <xs:complexType>
640            <xs:sequence>
641              <xs:element minOccurs="1" maxOccurs="unbounded" name="IndustryStandardHeader">
642                <xs:complexType>
643                  <xs:sequence>
644                    <xs:element minOccurs="1" maxOccurs="1" name="HeaderFile" type="xs:anyURI">
645                      <xs:annotation>
646                        <xs:documentation xml:lang="en-us">
647                          The package relative path and
648                          filename (in the content zip file) of the industry standard include
649                          file.
650                        </xs:documentation>
651                      </xs:annotation>
652                    </xs:element>
653                    <xs:element ref="HelpText" minOccurs="0" maxOccurs="unbounded"/>
654                  </xs:sequence>
655                </xs:complexType>
656              </xs:element>
657            </xs:sequence>
658          </xs:complexType>
659        </xs:element>
660        <!-- End of PackageSurfaceArea IndustryStdIncludes element.  -->
661
662        <xs:element minOccurs="0" maxOccurs="1" name="PackageIncludes">
663          <xs:annotation>
664            <xs:documentation xml:lang="en-us">
665              All top level header files that are included by a package
666              that are not listed above. They cannot be:
667            </xs:documentation>
668            <xs:documentation xml:lang="en-us"> 1) Local to a module (module specific.) </xs:documentation>
669            <xs:documentation xml:lang="en-us"> 2) An industry standard header. </xs:documentation>
670            <xs:documentation xml:lang="en-us"> 3) A library class header. </xs:documentation>
671          </xs:annotation>
672          <xs:complexType>
673            <xs:sequence>
674              <xs:element minOccurs="1" maxOccurs="unbounded" name="PackageHeader">
675                <xs:complexType>
676                  <xs:sequence>
677                    <xs:element minOccurs="1" maxOccurs="1" name="HeaderFile">
678                      <xs:annotation>
679                        <xs:documentation xml:lang="en-us">
680                          This is the Package relative path
681                          and filename location within the content ZIP file.
682                        </xs:documentation>
683                      </xs:annotation>
684                      <xs:complexType>
685                        <xs:simpleContent>
686                          <xs:extension base="xs:anyURI">
687                            <xs:attributeGroup ref="SupportedArchMod"/>
688                          </xs:extension>
689                        </xs:simpleContent>
690                      </xs:complexType>
691                    </xs:element>
692                    <xs:element ref="HelpText" minOccurs="0" maxOccurs="unbounded"/>
693                  </xs:sequence>
694                </xs:complexType>
695              </xs:element>
696            </xs:sequence>
697          </xs:complexType>
698        </xs:element>
699        <!-- End of PackageSurfaceArea PackageIncluces element.  -->
700
701        <xs:element minOccurs="0" maxOccurs="1" name="Modules">
702          <xs:complexType>
703            <xs:sequence>
704              <xs:element ref="ModuleSurfaceArea" minOccurs="1" maxOccurs="unbounded">
705                <xs:annotation>
706                  <xs:documentation xml:lang="en-us">
707                    This section lists the Module Surface Area for
708                    all modules provided with this package.
709                  </xs:documentation>
710                </xs:annotation>
711              </xs:element>
712            </xs:sequence>
713          </xs:complexType>
714        </xs:element>
715        <!-- End of PackageSurfaceArea Modules element.  -->
716
717        <xs:element minOccurs="0" maxOccurs="1" name="GuidDeclarations">
718          <xs:annotation>
719            <xs:documentation xml:lang="en-us">
720              This section defines the mapping of GUID C names to GUID
721              values as a Registry Format GUID.
722            </xs:documentation>
723            <xs:documentation xml:lang="en-us">
724              Modules that use these GUIDs must specify their dependency
725              on this package.
726            </xs:documentation>
727          </xs:annotation>
728          <xs:complexType>
729            <xs:sequence>
730              <xs:element minOccurs="1" maxOccurs="unbounded" name="Entry">
731                <xs:annotation>
732                  <xs:documentation xml:lang="en-us"> Individual GUID Declarations </xs:documentation>
733                </xs:annotation>
734                <xs:complexType>
735                  <xs:sequence>
736                    <xs:element minOccurs="1" maxOccurs="1" name="CName" type="xs:NCName"/>
737                    <xs:element minOccurs="1" maxOccurs="1" name="GuidValue"
738                        type="RegistryFormatGuid"/>
739                    <xs:element ref="HelpText" minOccurs="0" maxOccurs="unbounded"/>
740                  </xs:sequence>
741                  <xs:attribute name="UiName" type="xs:normalizedString" use="optional"/>
742                  <xs:attribute name="GuidTypes" type="GuidListType" use="optional"/>
743                  <xs:attributeGroup ref="SupportedArchMod"/>
744                </xs:complexType>
745              </xs:element>
746            </xs:sequence>
747          </xs:complexType>
748        </xs:element>
749        <!-- End of PackageSurfaceArea GuidDeclarations element.  -->
750
751        <xs:element minOccurs="0" maxOccurs="1" name="ProtocolDeclarations">
752          <xs:annotation>
753            <xs:documentation xml:lang="en-us">
754              This section defines the mapping of Protocol C names to GUID
755              values as a Registry Format GUID.
756            </xs:documentation>
757            <xs:documentation xml:lang="en-us">
758              Modules that use these Protocols must specify their
759              dependency on this package.
760            </xs:documentation>
761          </xs:annotation>
762          <xs:complexType>
763            <xs:sequence>
764              <xs:element minOccurs="1" maxOccurs="unbounded" name="Entry">
765                <xs:annotation>
766                  <xs:documentation xml:lang="en-us">
767                    Individual Protocol Declarations
768                  </xs:documentation>
769                </xs:annotation>
770                <xs:complexType>
771                  <xs:sequence>
772                    <xs:element minOccurs="1" maxOccurs="1" name="CName" type="xs:NCName"/>
773                    <xs:element minOccurs="1" maxOccurs="1" name="GuidValue"
774                        type="RegistryFormatGuid"/>
775                    <xs:element ref="HelpText" minOccurs="0" maxOccurs="unbounded"/>
776                  </xs:sequence>
777                  <xs:attribute name="UiName" type="xs:normalizedString" use="optional"/>
778                  <xs:attributeGroup ref="SupportedArchMod"/>
779                </xs:complexType>
780              </xs:element>
781            </xs:sequence>
782          </xs:complexType>
783        </xs:element>
784        <!-- End of PackageSurfaceArea ProtocolDeclarations element.  -->
785
786        <xs:element minOccurs="0" maxOccurs="1" name="PpiDeclarations">
787          <xs:annotation>
788            <xs:documentation xml:lang="en-us">
789              This section defines the mapping of Ppi C names to GUID
790              values as a Registry Format GUID.
791            </xs:documentation>
792            <xs:documentation xml:lang="en-us">
793              Modules that use these Ppis must specify their dependency on
794              this package.
795            </xs:documentation>
796          </xs:annotation>
797          <xs:complexType>
798            <xs:sequence>
799              <xs:element minOccurs="1" maxOccurs="unbounded" name="Entry">
800                <xs:annotation>
801                  <xs:documentation xml:lang="en-us"> Individual PPI Declarations </xs:documentation>
802                </xs:annotation>
803                <xs:complexType>
804                  <xs:sequence>
805                    <xs:element minOccurs="1" maxOccurs="1" name="CName" type="xs:NCName"/>
806                    <xs:element minOccurs="1" maxOccurs="1" name="GuidValue"
807                        type="RegistryFormatGuid"/>
808                    <xs:element ref="HelpText" minOccurs="0" maxOccurs="unbounded"/>
809                  </xs:sequence>
810                  <xs:attribute name="UiName" type="xs:normalizedString" use="optional"/>
811                  <xs:attributeGroup ref="SupportedArchMod"/>
812                </xs:complexType>
813              </xs:element>
814            </xs:sequence>
815          </xs:complexType>
816        </xs:element>
817        <!-- End of PackageSurfaceArea PpiDeclarations element.  -->
818
819        <xs:element minOccurs="0" maxOccurs="1" name="PcdDeclarations">
820          <xs:annotation>
821            <xs:documentation xml:lang="en-us">
822              This section is used to declare platform configuration knobs
823              that are defined by this package.
824            </xs:documentation>
825            <xs:documentation xml:lang="en-us">
826              Modules that use these PCD values must specify their
827              dependency on this package.
828            </xs:documentation>
829          </xs:annotation>
830          <xs:complexType>
831            <xs:sequence>
832              <xs:element minOccurs="1" maxOccurs="unbounded" name="PcdEntry">
833                <xs:complexType>
834                  <xs:sequence>
835                    <xs:element minOccurs="1" maxOccurs="1" name="TokenSpaceGuidCname"
836                        type="xs:NCName">
837                      <xs:annotation>
838                        <xs:documentation xml:lang="en-us">
839                          Specifies the C name of the Token
840                          Space GUID of which this PCD Entry is a member. This C name should
841                          also be listed in the GUIDs section, (specified above,) where the C
842                          name is assigned to a GUID value.
843                        </xs:documentation>
844                      </xs:annotation>
845                    </xs:element>
846                    <xs:element minOccurs="1" maxOccurs="1" name="Token">
847                      <xs:annotation>
848                        <xs:documentation xml:lang="en-us">
849                          Specifies the 32-bit token value for
850                          this PCD Entry. The Token number must be unique to the Token Space
851                          that declares the PCD.
852                        </xs:documentation>
853                        <xs:documentation xml:lang="en-us">
854                          The minLength of 3 is required to
855                          handle the "0x" prefix to the hex number.
856                        </xs:documentation>
857                      </xs:annotation>
858                      <xs:simpleType>
859                        <xs:restriction base="HexNumber">
860                          <xs:minLength value="3"/>
861                          <xs:maxLength value="10"/>
862                        </xs:restriction>
863                      </xs:simpleType>
864                    </xs:element>
865                    <xs:element minOccurs="1" maxOccurs="1" name="CName" type="xs:NCName"/>
866                    <xs:element minOccurs="1" maxOccurs="1" name="DatumType" type="PcdDatumTypes">
867                      <xs:annotation>
868                        <xs:documentation xml:lang="en-us">
869                          A string that contains the data type
870                          of this PCD Entry. PCD data types are restricted to the following
871                          set:UINT8, UINT16, UINT32, UINT64, VOID*, BOOLEAN.
872                        </xs:documentation>
873                      </xs:annotation>
874                    </xs:element>
875                    <xs:element minOccurs="1" maxOccurs="1" name="ValidUsage" type="PcdItemListType">
876                      <xs:annotation>
877                        <xs:documentation xml:lang="en-us">
878                          A string that contains one or more
879                          PCD Item types separated by spaces. The PCD Item types are
880                          restricted to FeaturePcd, FixedPcd, PatchPcd, Pcd and/or PcdEx.
881                        </xs:documentation>
882                      </xs:annotation>
883                    </xs:element>
884                    <xs:element minOccurs="1" maxOccurs="1" name="DefaultValue"
885                        type="xs:normalizedString"/>
886                    <xs:element minOccurs="0" maxOccurs="1" name="MaxDatumSize">
887                      <xs:annotation>
888                        <xs:documentation xml:lang="en-us">
889                          This is a recommended maximum data
890                          size for VOID* data types, the actual value should be defined by the
891                          Platform Integrator. It is not required for the other data types.
892                        </xs:documentation>
893                        <xs:documentation xml:lang="en-us">
894                          The minLength of 3 is required to
895                          handle the "0x" prefix to the hex number.
896                        </xs:documentation>
897
898                      </xs:annotation>
899                      <xs:simpleType>
900                        <xs:restriction base="HexNumber">
901                          <xs:minLength value="3"/>
902                        </xs:restriction>
903                      </xs:simpleType>
904                    </xs:element>
905                    <xs:element minOccurs="0" maxOccurs="unbounded" name="Prompt">
906                      <xs:annotation>
907                        <xs:documentation xml:lang="en-US">
908                          This entry contains prompt
909                          information, that may used by tools to assist platform integrators
910                          with choosing the correct values
911                        </xs:documentation>
912                      </xs:annotation>
913                      <xs:complexType>
914                        <xs:simpleContent>
915                          <xs:extension base="xs:string">
916                            <xs:attribute name="Lang" type="xs:language" default="en-us"
917                                use="optional"/>
918                          </xs:extension>
919                        </xs:simpleContent>
920                      </xs:complexType>
921                    </xs:element>
922                    <xs:element ref="HelpText" minOccurs="0" maxOccurs="unbounded"/>
923
924                    <xs:element minOccurs="0" maxOccurs="unbounded" name="PcdError">
925                      <xs:annotation>
926                        <xs:documentation xml:lang="en-us">
927                          Valid Error messages that may be
928                          implemented in a module for the PCD Entry. Only One Error Number per
929                          PcdError, (multiple ErrorMessage entries are permitted) and multiple
930                          PcdError elements are permitted.
931                        </xs:documentation>
932                      </xs:annotation>
933                      <xs:complexType>
934                        <xs:sequence>
935                          <xs:choice minOccurs="1" maxOccurs="1">
936                            <xs:annotation>
937                              <xs:documentation xml:lang="en-us">
938                                One of the following
939                                types of comparisons, which must be able to evaluate to
940                                either true or false.
941                              </xs:documentation>
942                            </xs:annotation>
943                            <xs:element minOccurs="0" maxOccurs="1" name="ValidValueList">
944                              <xs:annotation>
945                                <xs:documentation xml:lang="en-us">
946                                  The PCD Value must be
947                                  space separated list of values. Values are restricted to the
948                                  data type of this PCD.
949                                </xs:documentation>
950                              </xs:annotation>
951                              <xs:complexType>
952                                <xs:simpleContent>
953                                  <xs:extension base="xs:normalizedString">
954                                    <xs:attribute name="Lang" type="xs:language" use="optional"
955                                                            />
956                                  </xs:extension>
957                                </xs:simpleContent>
958                              </xs:complexType>
959                            </xs:element>
960                            <xs:element minOccurs="0" maxOccurs="1" name="ValidValueRange"
961                                type="xs:normalizedString">
962                              <xs:annotation>
963                                <xs:documentation xml:lang="en-us">
964                                  The PCD must be within a
965                                  specifed range of numeric values. Restricted to C style
966                                  Relational, Equality and Logicial Operators and parenthesis
967                                  are valid. Only the CName for this PCD is permitted in the
968                                  ValidValueRange expression. All other values must be
969                                  numeric.
970                                </xs:documentation>
971                                <xs:documentation xml:lang="en-us">
972                                  LValue (op RValue)+
973                                </xs:documentation>
974                              </xs:annotation>
975                            </xs:element>
976                            <xs:element minOccurs="0" maxOccurs="1" name="Expression"
977                                type="xs:normalizedString">
978                              <xs:annotation>
979                                <xs:documentation xml:lang="en-us">
980                                  A in-fix logical
981                                  expression using C style logical operators.
982                                </xs:documentation>
983                              </xs:annotation>
984                            </xs:element>
985                          </xs:choice>
986                          <xs:element minOccurs="1" maxOccurs="1" name="ErrorNumber">
987                            <xs:annotation>
988                              <xs:documentation xml:lang="en-us">
989                                A hexadecimal value for
990                                the error message as defined by specifications.
991                              </xs:documentation>
992                              <xs:documentation xml:lang="en-us">
993                                The minLength of 3 is
994                                required to handle the "0x" prefix to the hex number.
995                              </xs:documentation>
996
997                            </xs:annotation>
998                            <xs:simpleType>
999                              <xs:restriction base="HexNumber">
1000                                <xs:minLength value="3"/>
1001                              </xs:restriction>
1002                            </xs:simpleType>
1003                          </xs:element>
1004                          <xs:element minOccurs="1" maxOccurs="unbounded" name="ErrorMessage">
1005                            <xs:annotation>
1006                              <xs:documentation xml:lang="en-us">
1007                                This string should be
1008                                defined by specifications. There are pre-defined error
1009                                number ranges in the UEFI/PI specificaiton.
1010                              </xs:documentation>
1011                            </xs:annotation>
1012                            <xs:complexType>
1013                              <xs:simpleContent>
1014                                <xs:extension base="xs:string">
1015                                  <xs:attribute name="Lang" type="xs:language" default="en-us"
1016                                  use="optional"/>
1017                                </xs:extension>
1018                              </xs:simpleContent>
1019                            </xs:complexType>
1020                          </xs:element>
1021                        </xs:sequence>
1022                      </xs:complexType>
1023                    </xs:element>
1024                  </xs:sequence>
1025                  <xs:attributeGroup ref="SupportedArchMod"/>
1026                </xs:complexType>
1027              </xs:element>
1028            </xs:sequence>
1029          </xs:complexType>
1030        </xs:element>
1031        <!-- End of PackageSurfaceArea PcdDeclarations element.  -->
1032
1033        <xs:element minOccurs="0" maxOccurs="1" name="PcdRelationshipChecks">
1034          <xs:annotation>
1035            <xs:documentation xml:lang="en-us">
1036              This section is used to describe any PCD interdependencies
1037              or relationships.
1038            </xs:documentation>
1039          </xs:annotation>
1040          <xs:complexType>
1041            <xs:sequence>
1042              <xs:element minOccurs="1" maxOccurs="unbounded" name="PcdCheck" type="xs:normalizedString">
1043                <xs:annotation>
1044                  <xs:documentation xml:lang="en-us">
1045                    This entry must used
1046                    TokenSpaceGuidCName.PcdCname for every named PCD. Restricted to Relational,
1047                    Equality and Logical Operators (NOT, AND, OR, GT, GE, EQ, LE, LT and XOR) and
1048                    parenthesis are valid. Only the TokenSpaceGuidCName.PcdCname us permitted to
1049                    name PCDs in the expression. All other values must be numeric.
1050                  </xs:documentation>
1051                  <xs:documentation xml:lang="en-us"> LValue (op RValue)+ </xs:documentation>
1052                </xs:annotation>
1053              </xs:element>
1054            </xs:sequence>
1055          </xs:complexType>
1056        </xs:element>
1057
1058        <xs:element minOccurs="0" maxOccurs="unbounded" name="MiscellaneousFiles">
1059          <xs:annotation>
1060            <xs:documentation xml:lang="en-us">
1061              This section contains files that are not part of the code
1062              distributed with this package.
1063            </xs:documentation>
1064          </xs:annotation>
1065          <xs:complexType>
1066            <xs:sequence>
1067              <xs:element minOccurs="0" maxOccurs="1" name="Copyright" type="xs:string">
1068                <xs:annotation>
1069                  <xs:documentation xml:lang="en-us">
1070                    Only required if different from the Package
1071                    Copyright.
1072                  </xs:documentation>
1073                </xs:annotation>
1074              </xs:element>
1075              <xs:element minOccurs="0" maxOccurs="1" name="License" type="xs:string">
1076                <xs:annotation>
1077                  <xs:documentation xml:lang="en-us">
1078                    Only required if different from the Package
1079                    License.
1080                  </xs:documentation>
1081                </xs:annotation>
1082              </xs:element>
1083              <xs:element minOccurs="0" maxOccurs="1" name="Abstract" type="xs:string">
1084                <xs:annotation>
1085                  <xs:documentation xml:lang="en-us">
1086                    A one line description of this section's
1087                    content.
1088                  </xs:documentation>
1089                </xs:annotation>
1090              </xs:element>
1091              <xs:element minOccurs="0" maxOccurs="unbounded" name="Description" type="xs:string">
1092                <xs:annotation>
1093                  <xs:documentation xml:lang="en-us">
1094                    A complete description of the files in this
1095                    section.
1096                  </xs:documentation>
1097                </xs:annotation>
1098              </xs:element>
1099              <xs:element minOccurs="1" maxOccurs="unbounded" name="Filename">
1100                <xs:annotation>
1101                  <xs:documentation xml:lang="en-us">
1102                    This is the PackagePath relative path and
1103                    filename location within the ZIP file.
1104                  </xs:documentation>
1105                </xs:annotation>
1106                <xs:complexType>
1107                  <xs:simpleContent>
1108                    <xs:extension base="xs:anyURI">
1109                      <xs:attribute name="Executable" type="xs:boolean" default="false"
1110                          use="optional">
1111                        <xs:annotation>
1112                          <xs:documentation xml:lang="en-us">
1113                            If true, used by installation
1114                            tools to ensure that a file that must be executable has the
1115                            correct properties to permit execution.
1116                          </xs:documentation>
1117                        </xs:annotation>
1118                      </xs:attribute>
1119                    </xs:extension>
1120                  </xs:simpleContent>
1121                </xs:complexType>
1122              </xs:element>
1123
1124            </xs:sequence>
1125          </xs:complexType>
1126        </xs:element>
1127        <!-- End of PackageSurfaceArea Misc element.  -->
1128
1129        <xs:element minOccurs="0" maxOccurs="unbounded" name="UserExtensions">
1130          <xs:annotation>
1131            <xs:documentation xml:lang="en-us">
1132              This section is used for any processing instructions that
1133              may be custom to the content provided by this package that are common to this package.
1134            </xs:documentation>
1135          </xs:annotation>
1136          <xs:complexType mixed="true">
1137            <xs:sequence>
1138              <xs:any processContents="lax" minOccurs="0" maxOccurs="1"/>
1139            </xs:sequence>
1140            <xs:attribute name="UserId" type="xs:NCName" use="required">
1141              <xs:annotation>
1142                <xs:documentation xml:lang="en-us">
1143                  This is a single word identifier for grouping
1144                  similar content that does not fit into previously defined sections or other sections
1145                  of the Distribution.
1146                </xs:documentation>
1147              </xs:annotation>
1148            </xs:attribute>
1149            <xs:attribute name="Identifier" type="xs:string" use="required">
1150              <xs:annotation>
1151                <xs:documentation xml:lang="en-us">
1152                  This can be used to differentiate multiple sections
1153                  with a grouping.
1154                </xs:documentation>
1155                <xs:documentation xml:lang="en-us">
1156                  For example, a PRE_PROCESS Identifier might indicate
1157                  specific steps and tools required before processing module content, while a
1158                  different UserExtensions section with a POST_PROCESS Identifier might describe steps
1159                  that need to be executed after operations on the modules in this package.
1160                </xs:documentation>
1161              </xs:annotation>
1162            </xs:attribute>
1163            <xs:anyAttribute processContents="lax"/>
1164          </xs:complexType>
1165        </xs:element>
1166        <!-- End of PackageSurfaceArea UserExtensions element. -->
1167
1168      </xs:sequence>
1169    </xs:complexType>
1170  </xs:element>
1171  <!-- End of the PackageSurfaceArea element. -->
1172
1173  <xs:element name="ModuleSurfaceArea">
1174    <xs:annotation>
1175      <xs:documentation xml:lang="en-us">
1176        Each module is uniquely identified by it's GUID and Version number.
1177        Backward compatible releases of a module need only change the version number, while non-backward
1178        compatible changes require the GUID to change (resetting the version number to 1.0 is optional.)
1179      </xs:documentation>
1180    </xs:annotation>
1181    <xs:complexType>
1182      <xs:sequence>
1183
1184        <xs:element minOccurs="1" maxOccurs="1" name="Header">
1185          <xs:complexType>
1186            <xs:sequence>
1187              <xs:element minOccurs="1" maxOccurs="1" name="Name">
1188                <xs:annotation>
1189                  <xs:documentation xml:lang="en-us">
1190                    This is the User Interface Name for this Module.
1191                  </xs:documentation>
1192                </xs:annotation>
1193                <xs:complexType>
1194                  <xs:simpleContent>
1195                    <xs:extension base="xs:normalizedString">
1196                      <xs:attribute name="BaseName" type="xs:NMTOKEN" use="required">
1197                        <xs:annotation>
1198                          <xs:documentation xml:lang="en-us">
1199                            This is a single word BaseName
1200                            that will be used to create a module meta-data file.
1201                          </xs:documentation>
1202                          <xs:documentation xml:lang="en-us">
1203                            This name should also be used to
1204                            create output file names and directories.
1205                          </xs:documentation>
1206                        </xs:annotation>
1207                      </xs:attribute>
1208                    </xs:extension>
1209                  </xs:simpleContent>
1210                </xs:complexType>
1211              </xs:element>
1212              <xs:element minOccurs="1" maxOccurs="1" name="GUID">
1213                <xs:annotation>
1214                  <xs:documentation xml:lang="en-us">
1215                    This GUID and the Version attribute uniquely
1216                    identify a given Module.
1217                  </xs:documentation>
1218                </xs:annotation>
1219                <xs:complexType>
1220                  <xs:simpleContent>
1221                    <xs:extension base="RegistryFormatGuid">
1222                      <xs:attribute name="Version" type="xs:decimal" use="required">
1223                        <xs:annotation>
1224                          <xs:documentation xml:lang="en-us">
1225                            This value, along with the GUID,
1226                            is used to uniquely identify this object.
1227                          </xs:documentation>
1228                          <xs:documentation xml:lang="en-us">
1229                            Backward compatible changes must
1230                            make sure this number is incremented from the most recent
1231                            version. Non-backward compatible changes require a new GUID, and
1232                            the version can be reset.
1233                          </xs:documentation>
1234                        </xs:annotation>
1235                      </xs:attribute>
1236                    </xs:extension>
1237                  </xs:simpleContent>
1238                </xs:complexType>
1239              </xs:element>
1240              <xs:element minOccurs="0" maxOccurs="unbounded" name="Copyright">
1241                <xs:annotation>
1242                  <xs:documentation xml:lang="en-us">
1243                    This is only required if the Copyright is
1244                    different from either the Package or Distribution copyright. Multiple copyright
1245                    lines are permitted within this section.
1246                  </xs:documentation>
1247                </xs:annotation>
1248                <xs:complexType>
1249                  <xs:simpleContent>
1250                    <xs:extension base="xs:string">
1251                      <xs:attribute name="Lang" type="xs:language" default="en-us" use="optional"
1252                                            />
1253                    </xs:extension>
1254                  </xs:simpleContent>
1255                </xs:complexType>
1256              </xs:element>
1257              <xs:element minOccurs="0" maxOccurs="unbounded" name="License">
1258                <xs:annotation>
1259                  <xs:documentation xml:lang="en-us">
1260                    This is only required if the license is
1261                    different from either the Package or Distribution license. Multiple licenses are
1262                    permitted within this section.
1263                  </xs:documentation>
1264                </xs:annotation>
1265                <xs:complexType>
1266                  <xs:simpleContent>
1267                    <xs:extension base="xs:string">
1268                      <xs:attribute name="Lang" type="xs:language" default="en-us" use="optional"
1269                                            />
1270                    </xs:extension>
1271                  </xs:simpleContent>
1272                </xs:complexType>
1273              </xs:element>
1274              <xs:element minOccurs="0" maxOccurs="unbounded" name="Abstract">
1275                <xs:annotation>
1276                  <xs:documentation xml:lang="en-us">
1277                    A brief text description of the module.
1278                  </xs:documentation>
1279                </xs:annotation>
1280                <xs:complexType>
1281                  <xs:simpleContent>
1282                    <xs:extension base="xs:normalizedString">
1283                      <xs:attribute name="Lang" type="xs:language" default="en-us" use="optional"
1284                                            />
1285                    </xs:extension>
1286                  </xs:simpleContent>
1287                </xs:complexType>
1288              </xs:element>
1289              <xs:element minOccurs="0" maxOccurs="unbounded" name="Description">
1290                <xs:annotation>
1291                  <xs:documentation xml:lang="en-us">
1292                    A complete description of the module contents
1293                    and/or features including a description of the updates since the previous module
1294                    release.
1295                  </xs:documentation>
1296                </xs:annotation>
1297                <xs:complexType>
1298                  <xs:simpleContent>
1299                    <xs:extension base="xs:string">
1300                      <xs:attribute name="Lang" type="xs:language" default="en-us" use="optional"
1301                                            />
1302                    </xs:extension>
1303                  </xs:simpleContent>
1304                </xs:complexType>
1305              </xs:element>
1306            </xs:sequence>
1307          </xs:complexType>
1308        </xs:element>
1309        <!-- End of Module Surface Area Header Section -->
1310
1311        <xs:element minOccurs="0" maxOccurs="1" name="ModuleProperties">
1312          <xs:annotation>
1313            <xs:documentation xml:lang="en-us">
1314              List general information about a module, including the
1315              Supported Architectures, this module's type, specifications the module is coded against, and
1316              other informational content.
1317            </xs:documentation>
1318          </xs:annotation>
1319          <xs:complexType>
1320            <xs:sequence>
1321              <xs:element minOccurs="1" maxOccurs="1" name="ModuleType" type="ModuleTypes">
1322                <xs:annotation>
1323                  <xs:documentation xml:lang="en-us">
1324                    One of the Enumerated module types that limit
1325                    the use of a module.
1326                  </xs:documentation>
1327                </xs:annotation>
1328              </xs:element>
1329              <xs:element minOccurs="1" maxOccurs="1" name="Path" type="xs:anyURI">
1330                <xs:annotation>
1331                  <xs:documentation xml:lang="en-us">
1332                    For stand-alone modules that are NOT part of any
1333                    package, this is the path to the root of the module as listed in the ZIP file.
1334                    For modules included in a package, this is the location, relative to the root of
1335                    the package (PackagePath) this module belongs to.
1336                  </xs:documentation>
1337                </xs:annotation>
1338              </xs:element>
1339              <xs:element minOccurs="0" maxOccurs="1" name="PcdIsDriver">
1340                <xs:annotation>
1341                  <xs:documentation xml:lang="en-us">
1342                    This element is only required for the PEIM that
1343                    produces the PCD PPI or the DXE Driver that produces the PCD Protocol.
1344                  </xs:documentation>
1345                </xs:annotation>
1346                <xs:simpleType>
1347                  <xs:restriction base="xs:NCName">
1348                    <xs:enumeration value="PEI_PCD_DRIVER"/>
1349                    <xs:enumeration value="DXE_PCD_DRIVER"/>
1350                  </xs:restriction>
1351                </xs:simpleType>
1352              </xs:element>
1353
1354              <xs:element minOccurs="0" maxOccurs="1" name="UefiSpecificationVersion" type="xs:decimal"/>
1355
1356              <xs:element minOccurs="0" maxOccurs="1" name="PiSpecificationVersion" type="xs:decimal"/>
1357
1358              <xs:element minOccurs="0" maxOccurs="unbounded" name="Specification">
1359                <xs:annotation>
1360                  <xs:documentation xml:lang="en-us">
1361                    This is a list of other specifications that this
1362                    module is written against. These entries can be used in #define statements
1363                    (depending on the build system implementation, they may be autogenerated.)
1364                  </xs:documentation>
1365                </xs:annotation>
1366                <xs:complexType>
1367                  <xs:simpleContent>
1368                    <xs:extension base="xs:NCName">
1369                      <xs:attribute name="Version" type="xs:decimal" use="required"/>
1370                    </xs:extension>
1371                  </xs:simpleContent>
1372                </xs:complexType>
1373              </xs:element>
1374
1375              <xs:element minOccurs="0" maxOccurs="unbounded" name="BootMode">
1376                <xs:annotation>
1377                  <xs:documentation xml:lang="en-us">
1378                    Different firmware execution paths may be taken
1379                    based on a given state of the hardware, firmware, or through feature settings. A
1380                    BootMode may be declared (PRODUCES) or discovered (CONSUMES) based on these
1381                    states and feature settings. If the usage is UNDEFINE, it implies that a Boot
1382                    Mode is used, but the package creator does not know how it is used. The
1383                    supported boot modes map to the PI specification Boot Modes. The boot modes
1384                    listed with Recovery are to indicate that the BootMode is valid during a
1385                    recovery boot.
1386                  </xs:documentation>
1387                </xs:annotation>
1388                <xs:complexType>
1389                  <xs:sequence minOccurs="0">
1390                    <xs:element minOccurs="1" maxOccurs="1" name="SupportedBootModes">
1391                      <xs:simpleType>
1392                        <xs:list>
1393                          <xs:simpleType>
1394                            <xs:restriction base="xs:NCName">
1395                              <xs:enumeration value="FULL"/>
1396                              <xs:enumeration value="MINIMAL"/>
1397                              <xs:enumeration value="NO_CHANGE"/>
1398                              <xs:enumeration value="DIAGNOSTICS"/>
1399                              <xs:enumeration value="DEFAULT"/>
1400                              <xs:enumeration value="S2_RESUME"/>
1401                              <xs:enumeration value="S3_RESUME"/>
1402                              <xs:enumeration value="S4_RESUME"/>
1403                              <xs:enumeration value="S5_RESUME"/>
1404                              <xs:enumeration value="FLASH_UPDATE"/>
1405                              <xs:enumeration value="RECOVERY_FULL"/>
1406                              <xs:enumeration value="RECOVERY_MINIMAL"/>
1407                              <xs:enumeration value="RECOVERY_NO_CHANGE"/>
1408                              <xs:enumeration value="RECOVERY_DIAGNOSTICS"/>
1409                              <xs:enumeration value="RECOVERY_DEFAULT"/>
1410                              <xs:enumeration value="RECOVERY_S2_RESUME"/>
1411                              <xs:enumeration value="RECOVERY_S3_RESUME"/>
1412                              <xs:enumeration value="RECOVERY_S4_RESUME"/>
1413                              <xs:enumeration value="RECOVERY_S5_RESUME"/>
1414                              <xs:enumeration value="RECOVERY_FLASH_UPDATE"/>
1415                              <xs:enumeration value="UNDEFINED"/>
1416                            </xs:restriction>
1417                          </xs:simpleType>
1418                        </xs:list>
1419                      </xs:simpleType>
1420                    </xs:element>
1421
1422                    <xs:element ref="HelpText" minOccurs="0" maxOccurs="unbounded"/>
1423                  </xs:sequence>
1424                  <xs:attribute name="Usage" use="required">
1425                    <xs:simpleType>
1426                      <xs:restriction base="xs:NCName">
1427                        <xs:enumeration value="CONSUMES">
1428                          <xs:annotation>
1429                            <xs:documentation xml:lang="en-us">
1430                              The module always supports
1431                              the given boot modes.
1432                            </xs:documentation>
1433                          </xs:annotation>
1434                        </xs:enumeration>
1435                        <xs:enumeration value="SOMETIMES_CONSUMES">
1436                          <xs:annotation>
1437                            <xs:documentation xml:lang="en-us">
1438                              The module may support a
1439                              given mode on some execution paths.
1440                            </xs:documentation>
1441                          </xs:annotation>
1442                        </xs:enumeration>
1443                        <xs:enumeration value="PRODUCES">
1444                          <xs:annotation>
1445                            <xs:documentation xml:lang="en-us">
1446                              The module will change the
1447                              boot mode.
1448                            </xs:documentation>
1449                          </xs:annotation>
1450                        </xs:enumeration>
1451                        <xs:enumeration value="SOMETIME_PRODUCES">
1452                          <xs:annotation>
1453                            <xs:documentation xml:lang="en-us">
1454                              The module will change the
1455                              boot mode on some exection paths.
1456                            </xs:documentation>
1457                          </xs:annotation>
1458                        </xs:enumeration>
1459                        <xs:enumeration value="UNDEFINED">
1460                          <xs:annotation>
1461                            <xs:documentation xml:lang="en-us">
1462                              The package creator does not
1463                              know how the boot mode is used.
1464                            </xs:documentation>
1465                          </xs:annotation>
1466                        </xs:enumeration>
1467                      </xs:restriction>
1468                    </xs:simpleType>
1469                  </xs:attribute>
1470                  <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
1471                  <xs:attribute name="FeatureFlag" type="xs:normalizedString" use="optional"/>
1472                </xs:complexType>
1473              </xs:element>
1474
1475              <xs:element minOccurs="0" maxOccurs="unbounded" name="Event" nillable="true">
1476                <xs:annotation>
1477                  <xs:documentation xml:lang="en-us">
1478                    The functions that make up the Event, Timer, and
1479                    Task Priority Services are used during preboot to create, close, signal, and
1480                    wait for events; to set timers; and to raise and restore task priority levels as
1481                    defined in the UEFI specification. GUIDed events should be listed in the Guids
1482                    section.
1483                  </xs:documentation>
1484                </xs:annotation>
1485                <xs:complexType>
1486                  <xs:sequence>
1487                    <xs:element ref="HelpText" minOccurs="0" maxOccurs="unbounded"/>
1488                  </xs:sequence>
1489                  <xs:attribute name="Usage" use="required">
1490                    <xs:simpleType>
1491                      <xs:restriction base="xs:NCName">
1492                        <xs:enumeration value="CONSUMES">
1493                          <xs:annotation>
1494                            <xs:documentation xml:lang="en-us">
1495                              The module will register a
1496                              notification function and calls the function when it is
1497                              signaled.
1498                            </xs:documentation>
1499                          </xs:annotation>
1500                        </xs:enumeration>
1501                        <xs:enumeration value="SOMETIMES_CONSUMES">
1502                          <xs:annotation>
1503                            <xs:documentation xml:lang="en-us">
1504                              The module will register a
1505                              notification function and calls the function when it is
1506                              signaled on some execution paths.
1507                            </xs:documentation>
1508                          </xs:annotation>
1509                        </xs:enumeration>
1510                        <xs:enumeration value="PRODUCES">
1511                          <xs:annotation>
1512                            <xs:documentation xml:lang="en-us">
1513                              The module will signal all
1514                              events in an event group.
1515                            </xs:documentation>
1516                          </xs:annotation>
1517                        </xs:enumeration>
1518                        <xs:enumeration value="SOMETIMES_PRODUCES">
1519                          <xs:annotation>
1520                            <xs:documentation xml:lang="en-us">
1521                              The module will signal all
1522                              events in an event group under some execution paths.
1523                            </xs:documentation>
1524                          </xs:annotation>
1525                        </xs:enumeration>
1526                        <xs:enumeration value="UNDEFINED">
1527                          <xs:annotation>
1528                            <xs:documentation xml:lang="en-us">
1529                              The package creator does not
1530                              know how an event is used.
1531                            </xs:documentation>
1532                          </xs:annotation>
1533                        </xs:enumeration>
1534                      </xs:restriction>
1535                    </xs:simpleType>
1536                  </xs:attribute>
1537                  <xs:attribute name="EventType" use="required">
1538                    <xs:simpleType>
1539                      <xs:restriction base="xs:NCName">
1540                        <xs:enumeration value="EVENT_TYPE_PERIODIC_TIMER"/>
1541                        <xs:enumeration value="EVENT_TYPE_RELATIVE_TIMER"/>
1542                        <xs:enumeration value="UNDEFINED"/>
1543                      </xs:restriction>
1544                    </xs:simpleType>
1545
1546
1547                  </xs:attribute>
1548                  <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
1549                  <xs:attribute name="FeatureFlag" type="xs:normalizedString" use="optional"/>
1550                </xs:complexType>
1551              </xs:element>
1552
1553              <xs:element minOccurs="0" maxOccurs="unbounded" name="HOB" nillable="false">
1554                <xs:annotation>
1555                  <xs:documentation xml:lang="en-us">
1556                    This is a list of non-GUIDed Hand Off Blocks
1557                    (HOBs) produced or consumed by this module.
1558                  </xs:documentation>
1559                </xs:annotation>
1560                <xs:complexType>
1561                  <xs:sequence>
1562                    <xs:element ref="HelpText" minOccurs="0" maxOccurs="unbounded"/>
1563                  </xs:sequence>
1564                  <xs:attribute name="HobType" use="required">
1565                    <xs:simpleType>
1566                      <xs:restriction base="xs:NCName">
1567                        <xs:enumeration value="PHIT"/>
1568                        <xs:enumeration value="MEMORY_ALLOCATION"/>
1569                        <xs:enumeration value="RESOURCE_DESCRIPTOR"/>
1570                        <xs:enumeration value="FIRMWARE_VOLUME"/>
1571                        <xs:enumeration value="LOAD_PEIM"/>
1572                        <xs:enumeration value="UNDEFINED"/>
1573                      </xs:restriction>
1574                    </xs:simpleType>
1575                  </xs:attribute>
1576                  <xs:attribute name="Usage" use="required">
1577                    <xs:simpleType>
1578                      <xs:restriction base="xs:NCName">
1579                        <xs:enumeration value="CONSUMES">
1580                          <xs:annotation>
1581                            <xs:documentation xml:lang="en-us">
1582                              A HOB must be present in the
1583                              system.
1584                            </xs:documentation>
1585                          </xs:annotation>
1586                        </xs:enumeration>
1587                        <xs:enumeration value="SOMETIMES_CONSUMES">
1588                          <xs:annotation>
1589                            <xs:documentation xml:lang="en-us">
1590                              If present, the HOB will be
1591                              used.
1592                            </xs:documentation>
1593                          </xs:annotation>
1594                        </xs:enumeration>
1595                        <xs:enumeration value="PRODUCES">
1596                          <xs:annotation>
1597                            <xs:documentation xml:lang="en-us">
1598                              The HOB is always produced
1599                              by the module.
1600                            </xs:documentation>
1601                          </xs:annotation>
1602                        </xs:enumeration>
1603                        <xs:enumeration value="SOMETIMES_PRODUCES">
1604                          <xs:annotation>
1605                            <xs:documentation xml:lang="en-us">
1606                              The HOB may be produced by
1607                              the module under some execution paths.
1608                            </xs:documentation>
1609                          </xs:annotation>
1610                        </xs:enumeration>
1611                        <xs:enumeration value="UNDEFINED">
1612                          <xs:annotation>
1613                            <xs:documentation xml:lang="en-us">
1614                              The package creator knows
1615                              that a HOB is used, but does not know how it is used.
1616                            </xs:documentation>
1617                          </xs:annotation>
1618                        </xs:enumeration>
1619                      </xs:restriction>
1620                    </xs:simpleType>
1621                  </xs:attribute>
1622                  <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
1623                  <xs:attribute name="FeatureFlag" type="xs:normalizedString" use="optional"/>
1624                </xs:complexType>
1625              </xs:element>
1626
1627            </xs:sequence>
1628            <xs:attributeGroup ref="SupportedArchMod"/>
1629          </xs:complexType>
1630        </xs:element>
1631        <!-- End of ModuleProperties Section -->
1632
1633        <xs:element minOccurs="0" maxOccurs="1" name="ClonedFrom">
1634          <xs:annotation>
1635            <xs:documentation xml:lang="en-us">
1636              This section may be included for Modules that are copied
1637              from a different module.
1638            </xs:documentation>
1639          </xs:annotation>
1640          <xs:complexType>
1641            <xs:sequence>
1642              <xs:element minOccurs="1" maxOccurs="1" name="GUID">
1643                <xs:annotation>
1644                  <xs:documentation xml:lang="en-us">
1645                    This GUID and the Version attribute uniquely
1646                    identify the Module that this Module was copied from.
1647                  </xs:documentation>
1648                </xs:annotation>
1649                <xs:complexType>
1650                  <xs:simpleContent>
1651                    <xs:extension base="RegistryFormatGuid">
1652                      <xs:attribute name="Version" type="xs:decimal" use="required">
1653                        <xs:annotation>
1654                          <xs:documentation xml:lang="en-us">
1655                            This value, along with the GUID,
1656                            is used to uniquely identify this object.
1657                          </xs:documentation>
1658                        </xs:annotation>
1659                      </xs:attribute>
1660                    </xs:extension>
1661                  </xs:simpleContent>
1662                </xs:complexType>
1663              </xs:element>
1664            </xs:sequence>
1665          </xs:complexType>
1666        </xs:element>
1667        <!--  End of ClonedFrom Section. -->
1668
1669        <xs:element minOccurs="0" maxOccurs="1" name="LibraryClassDefinitions">
1670          <xs:annotation>
1671            <xs:documentation xml:lang="en-us">
1672              A list of the different Library Classes consumed by a
1673              driver, core and/or application module, or produced by a Library module.
1674            </xs:documentation>
1675          </xs:annotation>
1676          <xs:complexType>
1677            <xs:sequence>
1678              <xs:element minOccurs="1" maxOccurs="unbounded" name="LibraryClass">
1679                <xs:complexType>
1680                  <xs:sequence>
1681                    <xs:element minOccurs="1" maxOccurs="1" name="Keyword" type="xs:NCName">
1682                      <xs:annotation>
1683                        <xs:documentation xml:lang="en-us ">
1684                          Used by tools to identify different
1685                          instances of libraries that provide the library class. This keyword
1686                          identifies the library class this module needs to be linked against.
1687                        </xs:documentation>
1688                      </xs:annotation>
1689                    </xs:element>
1690                    <xs:element minOccurs="0" maxOccurs="1" name="RecommendedInstance">
1691                      <xs:complexType>
1692                        <xs:all>
1693                          <xs:element minOccurs="1" maxOccurs="1" name="GUID">
1694                            <xs:annotation>
1695                              <xs:documentation xml:lang="en-us">
1696                                This GUID and the
1697                                Version attribute uniquely identify the recommended Library
1698                                Instance for this module .
1699                              </xs:documentation>
1700                            </xs:annotation>
1701                            <xs:complexType>
1702                              <xs:simpleContent>
1703                                <xs:extension base="RegistryFormatGuid">
1704                                  <xs:attribute name="Version" type="xs:decimal"
1705                                  use="optional">
1706                                    <xs:annotation>
1707                                      <xs:documentation xml:lang="en-us">
1708                                        This value, along with
1709                                        the GUID, is used to uniquely identify this object.
1710                                      </xs:documentation>
1711                                    </xs:annotation>
1712                                  </xs:attribute>
1713                                </xs:extension>
1714                              </xs:simpleContent>
1715                            </xs:complexType>
1716                          </xs:element>
1717                        </xs:all>
1718                      </xs:complexType>
1719                    </xs:element>
1720                    <xs:element ref="HelpText" minOccurs="0" maxOccurs="unbounded"/>
1721                  </xs:sequence>
1722                  <xs:attribute name="Usage" use="required">
1723                    <xs:simpleType>
1724                      <xs:annotation>
1725                        <xs:documentation xml:lang="en-us">
1726                          Library instances can provide code
1727                          for a library class, or may require other library instances
1728                          themselves. Since different execution paths in a library (or module)
1729                          may need different library classes based on some setting, library
1730                          classes may not alway be required.
1731                        </xs:documentation>
1732                      </xs:annotation>
1733                      <xs:restriction base="xs:NCName">
1734                        <xs:enumeration value="PRODUCES"/>
1735                        <xs:enumeration value="CONSUMES"/>
1736                        <xs:enumeration value="SOMETIMES_CONSUMES"/>
1737                        <xs:enumeration value="UNDEFINED"/>
1738                      </xs:restriction>
1739                    </xs:simpleType>
1740                  </xs:attribute>
1741
1742                  <xs:attributeGroup ref="SupportedArchMod"/>
1743                  <xs:attribute name="FeatureFlag" type="xs:normalizedString" use="optional">
1744                    <xs:annotation>
1745                      <xs:documentation xml:lang="en-us">
1746                        A FeatureFlag attribute must evaluate to
1747                        either true or false - it may be a fixed value of true or false, a C
1748                        name or an in-fix expression.
1749                      </xs:documentation>
1750                    </xs:annotation>
1751                  </xs:attribute>
1752                </xs:complexType>
1753              </xs:element>
1754            </xs:sequence>
1755          </xs:complexType>
1756        </xs:element>
1757        <!-- End of LibraryClassDefinitions Section -->
1758
1759        <xs:element minOccurs="0" maxOccurs="1" name="SourceFiles">
1760          <xs:complexType>
1761            <xs:sequence>
1762              <xs:element minOccurs="1" maxOccurs="unbounded" name="Filename">
1763                <xs:annotation>
1764                  <xs:documentation xml:lang="en-us">
1765                    This is the module relative
1766                    (ModuleProperties.Path) path and filename location within the ZIP file.
1767                  </xs:documentation>
1768                </xs:annotation>
1769                <xs:complexType>
1770                  <xs:simpleContent>
1771                    <xs:extension base="xs:anyURI">
1772                      <xs:attribute name="Family" type="FamilyTypes" use="optional">
1773                        <xs:annotation>
1774                          <xs:documentation xml:lang="en-us">
1775                            The Family attribute is used to
1776                            restrict usage to a given family of compilers, such as GCC or
1777                            MSFT. Since not all code processing tools use the same syntax,
1778                            especially for assembly, this field can be used to identify
1779                            different syntax.
1780                          </xs:documentation>
1781                        </xs:annotation>
1782                      </xs:attribute>
1783                      <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
1784                      <xs:attribute name="SupModList" type="ModuleListType" use="optional"/>
1785                      <xs:attribute name="FeatureFlag" type="xs:normalizedString" use="optional"/>
1786                    </xs:extension>
1787                  </xs:simpleContent>
1788                </xs:complexType>
1789              </xs:element>
1790              <xs:element ref="HelpText" minOccurs="0" maxOccurs="unbounded"/>
1791            </xs:sequence>
1792          </xs:complexType>
1793        </xs:element>
1794        <!-- End of SourceFiles Section -->
1795
1796        <xs:element minOccurs="0" maxOccurs="1" name="BinaryFiles">
1797          <xs:complexType>
1798            <xs:sequence>
1799              <xs:element minOccurs="1" maxOccurs="unbounded" name="BinaryFile">
1800                <xs:complexType>
1801                  <xs:sequence>
1802                    <xs:element minOccurs="1" maxOccurs="unbounded" name="Filename">
1803                      <xs:annotation>
1804                        <xs:documentation xml:lang="en-us">
1805                          This is the module relative
1806                          (ModuleProperties.Path) path and filename location within the ZIP
1807                          file.
1808                        </xs:documentation>
1809                      </xs:annotation>
1810                      <xs:complexType>
1811                        <xs:simpleContent>
1812                          <xs:extension base="xs:anyURI">
1813                            <xs:attribute name="FileType" use="optional">
1814                              <xs:simpleType>
1815                                <xs:restriction base="xs:NCName">
1816                                  <xs:annotation>
1817                                    <xs:documentation xml:lang="en-us">
1818                                      Binary file distribution
1819                                      is limited to UEFI/PI FFS leaf section file types.
1820                                    </xs:documentation>
1821                                  </xs:annotation>
1822                                  <xs:enumeration value="GUID"/>
1823                                  <xs:enumeration value="FREEFORM"/>
1824                                  <xs:enumeration value="UEFI_IMAGE"/>
1825                                  <xs:enumeration value="PE32">
1826                                    <xs:annotation>
1827                                      <xs:documentation xml:lang="en-us">
1828                                        A UEFI/PI FFS Leaf
1829                                        section file type, not a raw PE32 file.
1830                                      </xs:documentation>
1831                                    </xs:annotation>
1832                                  </xs:enumeration>
1833                                  <xs:enumeration value="PIC"/>
1834                                  <xs:enumeration value="PEI_DEPEX"/>
1835                                  <xs:enumeration value="DXE_DEPEX"/>
1836                                  <xs:enumeration value="SMM_DEPEX"/>
1837                                  <xs:enumeration value="COMPAT16"/>
1838                                  <xs:enumeration value="DISPOSABLE"/>
1839                                  <xs:enumeration value="TE"/>
1840                                  <xs:enumeration value="VER"/>
1841                                  <xs:enumeration value="UI"/>
1842                                  <xs:enumeration value="BIN"/>
1843                                  <xs:enumeration value="FV"/>
1844                                </xs:restriction>
1845                              </xs:simpleType>
1846                            </xs:attribute>
1847                            <xs:attribute name="GUID" use="optional"
1848                                type="RegistryFormatGuid"/>
1849                            <xs:attribute name="SupArchList" type="ArchListType"
1850                                use="optional"/>
1851                            <xs:attribute name="SupModList" type="ModuleListType"
1852                                use="optional"/>
1853                            <xs:attribute name="FeatureFlag" type="xs:normalizedString"
1854                                use="optional"/>
1855                          </xs:extension>
1856                        </xs:simpleContent>
1857                      </xs:complexType>
1858                    </xs:element>
1859                    <xs:element minOccurs="0" maxOccurs="unbounded" name="AsBuilt">
1860                      <xs:annotation>
1861                        <xs:documentation xml:lang="en-us">
1862                          This section contains information
1863                          about how the module was coded, such as Compiler Tools, Flags, PCDs
1864                          (only PatchPcd and/or PcdEx) and Library Class Instances used to
1865                          build the binary.
1866                        </xs:documentation>
1867                      </xs:annotation>
1868                      <xs:complexType>
1869                        <xs:sequence>
1870
1871                          <xs:element minOccurs="0" maxOccurs="unbounded" name="PatchPcdValue">
1872                            <xs:annotation>
1873                              <xs:documentation xml:lang="en-us">
1874                                The element is the
1875                                Patchable PCD Value that was used during the build.
1876                              </xs:documentation>
1877                            </xs:annotation>
1878                            <xs:complexType>
1879                              <xs:sequence>
1880                                <xs:element minOccurs="1" maxOccurs="1"
1881                                name="TokenSpaceGuidValue" type="RegistryFormatGuid"/>
1882                                <xs:element minOccurs="1" maxOccurs="1" name="PcdCName"
1883                                type="xs:NCName"/>
1884                                <xs:element minOccurs="1" maxOccurs="1" name="Token">
1885                                  <xs:annotation>
1886                                    <xs:documentation xml:lang="en-us">
1887                                      The minLength of 3 is
1888                                      required to handle the "0x" prefix to the hex number.
1889                                    </xs:documentation>
1890                                  </xs:annotation>
1891                                  <xs:simpleType>
1892                                    <xs:restriction base="HexNumber">
1893                                      <xs:minLength value="3"/>
1894                                      <xs:maxLength value="10"/>
1895                                    </xs:restriction>
1896                                  </xs:simpleType>
1897                                </xs:element>
1898                                <xs:element minOccurs="1" maxOccurs="1" name="DatumType"
1899                                type="PcdDatumTypes"/>
1900                                <xs:element minOccurs="0" maxOccurs="1" name="MaxDatumSize">
1901                                  <xs:annotation>
1902                                    <xs:documentation xml:lang="en-us">
1903                                      This field is required
1904                                      if the Pcd Datum Type is VOID*
1905                                    </xs:documentation>
1906                                    <xs:documentation xml:lang="en-us">
1907                                      The minLength of 3 is
1908                                      required to handle the "0x" prefix to the hex number.
1909                                    </xs:documentation>
1910                                  </xs:annotation>
1911                                  <xs:simpleType>
1912                                    <xs:restriction base="HexNumber">
1913                                      <xs:minLength value="3"/>
1914                                    </xs:restriction>
1915                                  </xs:simpleType>
1916                                </xs:element>
1917                                <xs:element minOccurs="1" maxOccurs="1" name="Value"
1918                                type="xs:normalizedString"/>
1919                                <xs:element minOccurs="1" maxOccurs="1" name="Offset">
1920                                  <xs:annotation>
1921                                    <xs:documentation xml:lang="en-us">
1922                                      The minLength of 3 is
1923                                      required to handle the "0x" prefix to the hex number.
1924                                    </xs:documentation>
1925                                  </xs:annotation>
1926                                  <xs:simpleType>
1927                                    <xs:restriction base="HexNumber">
1928                                      <xs:minLength value="3"/>
1929                                    </xs:restriction>
1930                                  </xs:simpleType>
1931                                </xs:element>
1932                                <xs:element ref="HelpText" minOccurs="0"
1933                                maxOccurs="unbounded"/>
1934                                <xs:element minOccurs="0" maxOccurs="unbounded"
1935                                name="PcdError">
1936                                  <xs:annotation>
1937                                    <xs:documentation xml:lang="en-us">
1938                                      Error information
1939                                      implemented by the module.
1940                                    </xs:documentation>
1941                                  </xs:annotation>
1942                                  <xs:complexType>
1943                                    <xs:sequence>
1944                                      <xs:choice>
1945                                        <xs:element minOccurs="0" maxOccurs="1" name="ValidValueList">
1946                                          <xs:complexType>
1947                                            <xs:simpleContent>
1948                                              <xs:extension base="xs:normalizedString">
1949                                                <xs:attribute name="Lang" type="xs:language" default="en-us" use="optional"/>
1950                                              </xs:extension>
1951                                            </xs:simpleContent>
1952                                          </xs:complexType>
1953                                        </xs:element>
1954                                        <xs:element minOccurs="0" maxOccurs="1" name="ValidValueRange" type="xs:normalizedString"/>
1955                                        <xs:element minOccurs="0" maxOccurs="1" name="Expression" type="xs:normalizedString"/>
1956                                      </xs:choice>
1957                                      <xs:element minOccurs="1" maxOccurs="1" name="ErrorNumber">
1958                                        <xs:annotation>
1959                                          <xs:documentation xml:lang="en-us">
1960                                            The minLength of 3 is
1961                                            required to handle the "0x" prefix to the hex number.
1962                                          </xs:documentation>
1963                                        </xs:annotation>
1964                                        <xs:simpleType>
1965                                          <xs:restriction base="HexNumber">
1966                                            <xs:minLength value="3"/>
1967                                          </xs:restriction>
1968                                        </xs:simpleType>
1969                                      </xs:element>
1970                                      <xs:element minOccurs="0" maxOccurs="unbounded"
1971                                      name="ErrorMessage">
1972                                        <xs:complexType>
1973                                          <xs:simpleContent>
1974                                            <xs:extension base="xs:string">
1975                                              <xs:attribute name="Lang" type="xs:language" default="en-us"
1976                                              use="optional"/>
1977                                            </xs:extension>
1978                                          </xs:simpleContent>
1979                                        </xs:complexType>
1980                                      </xs:element>
1981                                    </xs:sequence>
1982                                  </xs:complexType>
1983                                </xs:element>
1984                              </xs:sequence>
1985                            </xs:complexType>
1986                          </xs:element>
1987
1988                          <xs:element minOccurs="0" maxOccurs="unbounded" name="PcdExValue">
1989                            <xs:annotation>
1990                              <xs:documentation xml:lang="en-us">
1991                                The element is the
1992                                DynamicEx PCD Value that was used during the build.
1993                              </xs:documentation>
1994                            </xs:annotation>
1995                            <xs:complexType>
1996                              <xs:sequence>
1997                                <xs:element minOccurs="1" maxOccurs="1"
1998                                name="TokenSpaceGuidValue" type="RegistryFormatGuid"/>
1999                                <xs:element minOccurs="1" maxOccurs="1" name="Token">
2000                                  <xs:annotation>
2001                                    <xs:documentation xml:lang="en-us">
2002                                      The minLength of 3 is
2003                                      required to handle the "0x" prefix to the hex number.
2004                                    </xs:documentation>
2005                                  </xs:annotation>
2006                                  <xs:simpleType>
2007                                    <xs:restriction base="HexNumber">
2008                                      <xs:minLength value="3"/>
2009                                      <xs:maxLength value="10"/>
2010                                    </xs:restriction>
2011                                  </xs:simpleType>
2012                                </xs:element>
2013                                <xs:element minOccurs="1" maxOccurs="1" name="DatumType"
2014                                type="PcdDatumTypes"/>
2015                                <xs:element minOccurs="0" maxOccurs="1" name="MaxDatumSize">
2016                                  <xs:annotation>
2017                                    <xs:documentation xml:lang="en-us">
2018                                      This field is required
2019                                      if the Pcd Datum Type is VOID*
2020                                    </xs:documentation>
2021                                  </xs:annotation>
2022                                  <xs:simpleType>
2023                                    <xs:restriction base="HexNumber">
2024                                      <xs:minLength value="3"/>
2025                                    </xs:restriction>
2026                                  </xs:simpleType>
2027                                </xs:element>
2028                                <xs:element minOccurs="1" maxOccurs="1" name="Value"
2029                                type="xs:normalizedString"/>
2030                                <xs:element ref="HelpText" minOccurs="0"
2031                                maxOccurs="unbounded"/>
2032                                <xs:element minOccurs="0" maxOccurs="unbounded"
2033                                name="PcdError">
2034                                  <xs:annotation>
2035                                    <xs:documentation xml:lang="en-us">
2036                                      Error information
2037                                      implemented by the module.
2038                                    </xs:documentation>
2039                                  </xs:annotation>
2040                                  <xs:complexType>
2041                                    <xs:sequence>
2042                                      <xs:choice>
2043                                        <xs:element minOccurs="0" maxOccurs="1" name="ValidValueList">
2044                                          <xs:complexType>
2045                                            <xs:simpleContent>
2046                                              <xs:extension base="xs:normalizedString">
2047                                                <xs:attribute name="Lang" type="xs:language" default="en-us" use="optional"/>
2048                                              </xs:extension>
2049                                            </xs:simpleContent>
2050                                          </xs:complexType>
2051                                        </xs:element>
2052                                        <xs:element minOccurs="0" maxOccurs="1" name="ValidValueRange" type="xs:normalizedString"/>
2053                                        <xs:element minOccurs="0" maxOccurs="1" name="Expression" type="xs:normalizedString"/>
2054                                      </xs:choice>
2055                                      <xs:element minOccurs="1" maxOccurs="1" name="ErrorNumber">
2056                                        <xs:annotation>
2057                                          <xs:documentation xml:lang="en-us">
2058                                            The minLength of 3 is
2059                                            required to handle the "0x" prefix to the hex number.
2060                                          </xs:documentation>
2061                                        </xs:annotation>
2062                                        <xs:simpleType>
2063                                          <xs:restriction base="HexNumber">
2064                                            <xs:minLength value="3"/>
2065                                          </xs:restriction>
2066                                        </xs:simpleType>
2067                                      </xs:element>
2068                                      <xs:element minOccurs="0" maxOccurs="unbounded"
2069                                      name="ErrorMessage">
2070                                        <xs:complexType>
2071                                          <xs:simpleContent>
2072                                            <xs:extension base="xs:string">
2073                                              <xs:attribute name="Lang" type="xs:language" default="en-us"
2074                                              use="optional"/>
2075                                            </xs:extension>
2076                                          </xs:simpleContent>
2077                                        </xs:complexType>
2078                                      </xs:element>
2079                                    </xs:sequence>
2080                                  </xs:complexType>
2081                                </xs:element>
2082                              </xs:sequence>
2083                            </xs:complexType>
2084                          </xs:element>
2085
2086                          <xs:element minOccurs="0" maxOccurs="1" name="LibraryInstances">
2087                            <xs:annotation>
2088                              <xs:documentation xml:lang="en-us">
2089                                This is the actual
2090                                library instance that was used to link against the module.
2091                              </xs:documentation>
2092                            </xs:annotation>
2093                            <xs:complexType>
2094                              <xs:sequence>
2095                                <xs:element minOccurs="1" maxOccurs="unbounded" name="GUID">
2096                                  <xs:annotation>
2097                                    <xs:documentation xml:lang="en-us">
2098                                      This GUID and the
2099                                      Version attribute uniquely identify the actual Library
2100                                      Instance linked in this module.
2101                                    </xs:documentation>
2102                                  </xs:annotation>
2103                                  <xs:complexType>
2104                                    <xs:simpleContent>
2105                                      <xs:extension base="RegistryFormatGuid">
2106                                        <xs:attribute name="Version" type="xs:decimal"
2107                                        use="required">
2108                                          <xs:annotation>
2109                                            <xs:documentation xml:lang="en-us">
2110                                              This value, along with
2111                                              the GUID, is used to uniquely identify this object.
2112                                            </xs:documentation>
2113                                          </xs:annotation>
2114                                        </xs:attribute>
2115                                      </xs:extension>
2116                                    </xs:simpleContent>
2117                                  </xs:complexType>
2118                                </xs:element>
2119                              </xs:sequence>
2120                            </xs:complexType>
2121                          </xs:element>
2122
2123                          <xs:element minOccurs="0" maxOccurs="unbounded" name="BuildFlags">
2124                            <xs:complexType mixed="true">
2125                              <xs:simpleContent>
2126                                <xs:annotation>
2127                                  <xs:documentation xml:lang="en-us">
2128                                    Any description of OS,
2129                                    Tool, and flags for the individual tool can go in this
2130                                    section.
2131                                  </xs:documentation>
2132                                </xs:annotation>
2133                                <xs:extension base="xs:string">
2134                                  <xs:anyAttribute processContents="lax"/>
2135                                </xs:extension>
2136                              </xs:simpleContent>
2137                            </xs:complexType>
2138                          </xs:element>
2139                        </xs:sequence>
2140                      </xs:complexType>
2141                    </xs:element>
2142                    <!-- End of AsBuilt -->
2143                    <xs:element ref="HelpText" minOccurs="0" maxOccurs="unbounded"/>
2144                  </xs:sequence>
2145                </xs:complexType>
2146              </xs:element>
2147
2148            </xs:sequence>
2149          </xs:complexType>
2150        </xs:element>
2151        <!-- End of BinaryFiles Section -->
2152
2153        <xs:element minOccurs="0" maxOccurs="1" name="PackageDependencies">
2154          <xs:complexType>
2155            <xs:sequence>
2156              <xs:element minOccurs="1" maxOccurs="unbounded" name="Package">
2157                <xs:complexType>
2158                  <xs:sequence>
2159                    <xs:element minOccurs="0" maxOccurs="unbounded" name="Description">
2160                      <xs:complexType>
2161                        <xs:simpleContent>
2162                          <xs:extension base="xs:string">
2163                            <xs:attribute name="Lang" type="xs:language" default="en-us"
2164                                use="optional"/>
2165                          </xs:extension>
2166                        </xs:simpleContent>
2167                      </xs:complexType>
2168                    </xs:element>
2169                    <xs:element minOccurs="1" maxOccurs="1" name="GUID">
2170                      <xs:annotation>
2171                        <xs:documentation xml:lang="en-us">
2172                          This GUID and the Version attribute
2173                          uniquely identify Package that this Module depends on.
2174                        </xs:documentation>
2175                      </xs:annotation>
2176                      <xs:complexType>
2177                        <xs:simpleContent>
2178                          <xs:extension base="RegistryFormatGuid">
2179                            <xs:attribute name="Version" type="xs:decimal" use="optional">
2180                              <xs:annotation>
2181                                <xs:documentation xml:lang="en-us">
2182                                  This value, along with
2183                                  the GUID, is used to uniquely identify this object. If the
2184                                  version attribute is not specified, the most recent version
2185                                  of the package can be used.
2186                                </xs:documentation>
2187                              </xs:annotation>
2188                            </xs:attribute>
2189                          </xs:extension>
2190                        </xs:simpleContent>
2191                      </xs:complexType>
2192                    </xs:element>
2193                  </xs:sequence>
2194                  <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
2195                  <xs:attribute name="SupModList" type="ModuleListType" use="optional"/>
2196                  <xs:attribute name="FeatureFlag" type="xs:normalizedString" use="optional"/>
2197                </xs:complexType>
2198              </xs:element>
2199            </xs:sequence>
2200          </xs:complexType>
2201        </xs:element>
2202        <!-- End of PackageDependencies -->
2203
2204        <xs:element minOccurs="0" maxOccurs="1" name="Guids">
2205          <xs:complexType>
2206            <xs:sequence>
2207              <xs:element minOccurs="1" maxOccurs="unbounded" name="GuidCName">
2208                <xs:complexType>
2209                  <xs:sequence>
2210                    <xs:element minOccurs="1" maxOccurs="1" name="CName" type="xs:NCName"/>
2211                    <xs:element minOccurs="0" maxOccurs="1" name="GUID" type="RegistryFormatGuid"/>
2212                    <xs:element minOccurs="0" maxOccurs="1" name="VariableName"
2213                        type="xs:normalizedString">
2214                      <xs:annotation>
2215                        <xs:documentation xml:lang="en-us"> Only valid for Variable GUID types. </xs:documentation>
2216                        <xs:documentation>
2217                          This can be either a Hex Array or C string in unicode
2218                          format: L"string" Data.
2219                        </xs:documentation>
2220                      </xs:annotation>
2221                    </xs:element>
2222                    <xs:element ref="HelpText" minOccurs="0" maxOccurs="unbounded"/>
2223                  </xs:sequence>
2224                  <xs:attribute name="Usage" use="required">
2225                    <xs:simpleType>
2226                      <xs:restriction base="xs:NCName">
2227                        <xs:enumeration value="CONSUMES">
2228                          <xs:annotation>
2229                            <xs:documentation xml:lang="en-us">
2230                              The module does not install
2231                              the GUID, and the GUID must be present for the module to
2232                              execute.
2233                            </xs:documentation>
2234                          </xs:annotation>
2235                        </xs:enumeration>
2236                        <xs:enumeration value="SOMETIMES_CONSUMES">
2237                          <xs:annotation>
2238                            <xs:documentation xml:lang="en-us">
2239                              The module does not install
2240                              the GUID, however, the GUID will be used if it is present.
2241                            </xs:documentation>
2242                          </xs:annotation>
2243                        </xs:enumeration>
2244                        <xs:enumeration value="PRODUCES">
2245                          <xs:annotation>
2246                            <xs:documentation xml:lang="en-us">
2247                              The module always installs
2248                              the GUID.
2249                            </xs:documentation>
2250                          </xs:annotation>
2251                        </xs:enumeration>
2252                        <xs:enumeration value="SOMETIMES_PRODUCES">
2253                          <xs:annotation>
2254                            <xs:documentation xml:lang="en-us">
2255                              The Module will install the
2256                              GUID under certain execution paths.
2257                            </xs:documentation>
2258                          </xs:annotation>
2259                        </xs:enumeration>
2260                        <xs:enumeration value="UNDEFINED">
2261                          <xs:annotation>
2262                            <xs:documentation xml:lang="en-us">
2263                              The package creator knows
2264                              that a GUID is used, but does not know how it is used.
2265                            </xs:documentation>
2266                          </xs:annotation>
2267                        </xs:enumeration>
2268                      </xs:restriction>
2269                    </xs:simpleType>
2270                  </xs:attribute>
2271                  <xs:attribute name="GuidType" type="GuidListType" use="required"/>
2272                  <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
2273                  <xs:attribute name="SupModList" type="ModuleListType" use="optional"/>
2274                  <xs:attribute name="FeatureFlag" type="xs:normalizedString" use="optional"/>
2275                </xs:complexType>
2276              </xs:element>
2277            </xs:sequence>
2278          </xs:complexType>
2279        </xs:element>
2280        <!-- End of Guids Section -->
2281
2282        <xs:element minOccurs="0" maxOccurs="1" name="Protocols">
2283          <xs:annotation>
2284            <xs:documentation xml:lang="en-us">
2285              A listing of protocols required or produced by this module.
2286            </xs:documentation>
2287          </xs:annotation>
2288          <xs:complexType>
2289            <xs:sequence>
2290              <xs:element minOccurs="1" maxOccurs="unbounded" name="Protocol" nillable="true">
2291                <xs:complexType>
2292                  <xs:sequence>
2293                    <xs:element minOccurs="1" maxOccurs="1" name="CName" type="xs:NCName"/>
2294                    <xs:element minOccurs="0" maxOccurs="1" name="GUID" type="RegistryFormatGuid"/>
2295                    <xs:element ref="HelpText" minOccurs="0" maxOccurs="unbounded"/>
2296                  </xs:sequence>
2297                  <xs:attribute name="Usage" use="required">
2298                    <xs:simpleType>
2299                      <xs:restriction base="xs:NCName">
2300                        <xs:enumeration value="PRODUCES"/>
2301                        <xs:enumeration value="SOMETIMES_PRODUCES"/>
2302                        <xs:enumeration value="CONSUMES"/>
2303                        <xs:enumeration value="SOMETIMES_CONSUMES"/>
2304                        <xs:enumeration value="TO_START"/>
2305                        <xs:enumeration value="BY_START"/>
2306                        <xs:enumeration value="UNDEFINED"/>
2307                      </xs:restriction>
2308                    </xs:simpleType>
2309                  </xs:attribute>
2310                  <xs:attribute name="Notify" type="xs:boolean" use="optional"/>
2311                  <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
2312                  <xs:attribute name="SupModList" type="ModuleListType" use="optional"/>
2313                  <xs:attribute name="FeatureFlag" type="xs:normalizedString" use="optional"/>
2314                </xs:complexType>
2315              </xs:element>
2316            </xs:sequence>
2317          </xs:complexType>
2318        </xs:element>
2319        <!-- End of Protocols Section -->
2320
2321        <xs:element minOccurs="0" maxOccurs="1" name="PPIs">
2322          <xs:annotation>
2323            <xs:documentation xml:lang="en-us">
2324              A listing of PPIs required or produced by this module.
2325            </xs:documentation>
2326          </xs:annotation>
2327          <xs:complexType>
2328            <xs:sequence>
2329              <xs:element minOccurs="1" maxOccurs="unbounded" name="Ppi" nillable="true">
2330                <xs:complexType>
2331                  <xs:sequence>
2332                    <xs:element minOccurs="1" maxOccurs="1" name="CName" type="xs:NCName"/>
2333                    <xs:element minOccurs="0" maxOccurs="1" name="GUID" type="RegistryFormatGuid"/>
2334                    <xs:element ref="HelpText" minOccurs="0" maxOccurs="unbounded"/>
2335                  </xs:sequence>
2336                  <xs:attribute name="Usage" use="required">
2337                    <xs:simpleType>
2338                      <xs:restriction base="xs:NCName">
2339                        <xs:enumeration value="PRODUCES"/>
2340                        <xs:enumeration value="SOMETIMES_PRODUCES"/>
2341                        <xs:enumeration value="CONSUMES"/>
2342                        <xs:enumeration value="SOMETIMES_CONSUMES"/>
2343                        <xs:enumeration value="UNDEFINED"/>
2344                      </xs:restriction>
2345                    </xs:simpleType>
2346                  </xs:attribute>
2347                  <xs:attribute name="Notify" type="xs:boolean" use="optional"/>
2348                  <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
2349                  <xs:attribute name="SupModList" type="ModuleListType" use="optional"/>
2350                  <xs:attribute name="FeatureFlag" type="xs:normalizedString" use="optional"/>
2351                </xs:complexType>
2352              </xs:element>
2353            </xs:sequence>
2354          </xs:complexType>
2355        </xs:element>
2356        <!-- End of PPIs Section -->
2357
2358        <xs:element minOccurs="0" maxOccurs="1" name="Externs">
2359          <xs:annotation>
2360            <xs:documentation xml:lang="en-us">
2361              These elements specify additional information about the
2362              module. This area may be used by tools to generate code.
2363            </xs:documentation>
2364          </xs:annotation>
2365          <xs:complexType>
2366            <xs:sequence>
2367              <xs:element minOccurs="1" maxOccurs="unbounded" name="Extern">
2368                <xs:complexType>
2369                  <xs:sequence>
2370                    <xs:choice minOccurs="1">
2371                      <xs:sequence>
2372                        <xs:element minOccurs="0" maxOccurs="1" name="EntryPoint"
2373                            type="xs:NCName"/>
2374                        <xs:element minOccurs="0" maxOccurs="1" name="UnloadImage"
2375                            type="xs:NCName"/>
2376                      </xs:sequence>
2377                      <xs:sequence>
2378                        <xs:element minOccurs="0" maxOccurs="1" name="Constructor"
2379                            type="xs:NCName"/>
2380                        <xs:element minOccurs="0" maxOccurs="1" name="Destructor"
2381                            type="xs:NCName"/>
2382                      </xs:sequence>
2383                    </xs:choice>
2384                    <xs:element ref="HelpText" minOccurs="0" maxOccurs="1"/>
2385                  </xs:sequence>
2386                  <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
2387                  <xs:attribute name="SupModList" type="ModuleListType" use="optional"/>
2388                  <xs:attribute name="FeatureFlag" type="xs:normalizedString" use="optional"/>
2389                </xs:complexType>
2390              </xs:element>
2391            </xs:sequence>
2392          </xs:complexType>
2393        </xs:element>
2394        <!-- End of Externs Section -->
2395
2396        <xs:element minOccurs="0" maxOccurs="1" name="PcdCoded">
2397          <xs:annotation>
2398            <xs:documentation xml:lang="en-us">
2399              This section describes how a platform is coded with respect
2400              to the platform configuration knobs.
2401            </xs:documentation>
2402          </xs:annotation>
2403          <xs:complexType>
2404            <xs:sequence>
2405              <xs:element minOccurs="1" maxOccurs="unbounded" name="PcdEntry">
2406                <xs:complexType>
2407                  <xs:sequence>
2408                    <xs:element minOccurs="1" maxOccurs="1" name="CName" type="xs:NCName"/>
2409                    <xs:element minOccurs="1" maxOccurs="1" name="TokenSpaceGuidCName"
2410                        type="xs:NCName"/>
2411                    <xs:element minOccurs="0" maxOccurs="1" name="DefaultValue"
2412                        type="xs:normalizedString"/>
2413                    <xs:element ref="HelpText" minOccurs="0" maxOccurs="unbounded"/>
2414                  </xs:sequence>
2415                  <xs:attribute name="PcdItemType" type="PcdItemTypes" use="required"/>
2416                  <xs:attribute name="PcdUsage" use="required">
2417                    <xs:simpleType>
2418                      <xs:restriction base="xs:NCName">
2419                        <xs:enumeration value="PRODUCES"/>
2420                        <xs:enumeration value="SOMETIMES_PRODUCES"/>
2421                        <xs:enumeration value="CONSUMES"/>
2422                        <xs:enumeration value="SOMETIMES_CONSUMES"/>
2423                        <xs:enumeration value="UNDEFINED"/>
2424                      </xs:restriction>
2425                    </xs:simpleType>
2426
2427
2428                  </xs:attribute>
2429                  <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
2430                  <xs:attribute name="SupModList" type="ModuleListType" use="optional"/>
2431                  <xs:attribute name="FeatureFlag" type="xs:normalizedString" use="optional"/>
2432                </xs:complexType>
2433              </xs:element>
2434            </xs:sequence>
2435          </xs:complexType>
2436        </xs:element>
2437        <!-- End of PcdCoded Section -->
2438
2439        <xs:element minOccurs="0" maxOccurs="unbounded" name="PeiDepex">
2440          <xs:annotation>
2441            <xs:documentation xml:lang="en-us">
2442              This is the PEI dependency expression for a Dependency
2443              Section.
2444            </xs:documentation>
2445          </xs:annotation>
2446          <xs:complexType>
2447            <xs:sequence>
2448              <xs:element name="Expression" type="xs:string" minOccurs="1" maxOccurs="1">
2449                <xs:annotation>
2450                  <xs:documentation xml:lang="en-us">
2451                    An in-fix expression, of C identifiers and TRUE,
2452                    FALSE, AND, OR, NOT, BEFORE, and AFTER as well as parenthesis () in the in-fix
2453                    notation. The operators are restricted to grammar defined in the PI
2454                    specification.
2455                  </xs:documentation>
2456                </xs:annotation>
2457              </xs:element>
2458              <xs:element ref="HelpText" minOccurs="0" maxOccurs="1"/>
2459            </xs:sequence>
2460            <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
2461            <xs:attribute name="SupModList" type="ModuleListType" use="optional"/>
2462            <xs:attribute name="FeatureFlag" type="xs:normalizedString" use="optional"/>
2463          </xs:complexType>
2464        </xs:element>
2465        <!-- End of PeiDepex Section -->
2466
2467        <xs:element minOccurs="0" maxOccurs="unbounded" name="DxeDepex">
2468          <xs:annotation>
2469            <xs:documentation xml:lang="en-us">
2470              This is the DXE dependency expression for a Dependency
2471              Section.
2472            </xs:documentation>
2473          </xs:annotation>
2474          <xs:complexType>
2475            <xs:sequence>
2476              <xs:element name="Expression" type=" xs:string " minOccurs="1" maxOccurs="1">
2477                <xs:annotation>
2478                  <xs:documentation xml:lang="en-us">
2479                    An in-fix expression, of C identifiers and TRUE,
2480                    FALSE, AND, OR, NOT, BEFORE, and AFTER as well as parenthesis () in the in-fix
2481                    notation. The operators are restricted to grammar defined in the PI
2482                    specification.
2483                  </xs:documentation>
2484                </xs:annotation>
2485              </xs:element>
2486              <xs:element ref="HelpText" minOccurs="0" maxOccurs="1"/>
2487            </xs:sequence>
2488            <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
2489            <xs:attribute name="SupModList" type="ModuleListType" use="optional"/>
2490            <xs:attribute name="FeatureFlag" type="xs:normalizedString" use="optional"/>
2491          </xs:complexType>
2492        </xs:element>
2493        <!-- End of DxeDepex Section -->
2494
2495        <xs:element minOccurs="0" maxOccurs="unbounded" name="SmmDepex">
2496          <xs:annotation>
2497            <xs:documentation xml:lang="en-us">
2498              This is the SMM dependency expression for a Dependency
2499              Section.
2500            </xs:documentation>
2501          </xs:annotation>
2502          <xs:complexType>
2503            <xs:sequence>
2504              <xs:element name="Expression" type=" xs:string " minOccurs="1" maxOccurs="1">
2505                <xs:annotation>
2506                  <xs:documentation xml:lang="en-us">
2507                    An in-fix expression, of C identifiers and TRUE,
2508                    FALSE, AND, OR, NOT, BEFORE, and AFTER as well as parenthesis () in the in-fix
2509                    notation. The operators are restricted to grammar defined in the PI
2510                    specification.
2511                  </xs:documentation>
2512                </xs:annotation>
2513              </xs:element>
2514              <xs:element ref="HelpText" minOccurs="0" maxOccurs="1"/>
2515            </xs:sequence>
2516            <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
2517            <xs:attribute name="SupModList" type="ModuleListType" use="optional"/>
2518            <xs:attribute name="FeatureFlag" type="xs:normalizedString" use="optional"/>
2519          </xs:complexType>
2520        </xs:element>
2521        <!-- End of SmmDepex Section -->
2522
2523
2524        <xs:element minOccurs="0" maxOccurs="1" name="MiscellaneousFiles">
2525          <xs:annotation>
2526            <xs:documentation xml:lang="en-us">
2527              This section is used to provide comments and/or list
2528              auxiliary files, such as pdb or map files.
2529            </xs:documentation>
2530          </xs:annotation>
2531          <xs:complexType>
2532            <xs:sequence>
2533              <xs:element minOccurs="0" maxOccurs="unbounded" name="Description">
2534                <xs:complexType>
2535                  <xs:simpleContent>
2536                    <xs:extension base="xs:string">
2537                      <xs:attribute name="Lang" type="xs:language" default="en-us" use="optional"
2538                                            />
2539                    </xs:extension>
2540                  </xs:simpleContent>
2541                </xs:complexType>
2542              </xs:element>
2543              <xs:element minOccurs="1" maxOccurs="unbounded" name="Filename">
2544                <xs:annotation>
2545                  <xs:documentation xml:lang="en-us">
2546                    This is the path and filename location within
2547                    the ZIP file.
2548                  </xs:documentation>
2549                </xs:annotation>
2550                <xs:complexType>
2551                  <xs:simpleContent>
2552                    <xs:extension base="xs:anyURI">
2553                      <xs:attribute name="Executable" type="xs:boolean" default="false"
2554                          use="optional">
2555                        <xs:annotation>
2556                          <xs:documentation xml:lang="en-us">
2557                            If true, used by installation
2558                            tools to ensure that a file that must be executable has the
2559                            correct properties to permit execution.
2560                          </xs:documentation>
2561                        </xs:annotation>
2562                      </xs:attribute>
2563                    </xs:extension>
2564                  </xs:simpleContent>
2565                </xs:complexType>
2566              </xs:element>
2567            </xs:sequence>
2568          </xs:complexType>
2569        </xs:element>
2570        <!-- End of Module Surface Area Misc Section -->
2571
2572        <xs:element minOccurs="0" maxOccurs="unbounded" name="UserExtensions">
2573          <xs:annotation>
2574            <xs:documentation xml:lang="en-us">
2575              This section is used for any processing instructions that
2576              may be custom to the content provided by the distribution that are common to module.
2577            </xs:documentation>
2578            <xs:documentation xml:lang="en-us"> The content is vendor specific. </xs:documentation>
2579            <xs:documentation xml:lang="en-us">
2580              The content can be plain text as well as any user-defined,
2581              properly formatted XML structure.
2582            </xs:documentation>
2583          </xs:annotation>
2584          <xs:complexType mixed="true">
2585            <xs:attribute name="UserId" type="xs:NCName" use="required">
2586              <xs:annotation>
2587                <xs:documentation xml:lang="en-us">
2588                  This is a single word identifier for grouping
2589                  similar content. For example, ReferenceBuild might be used to identify non-PI
2590                  compliant build steps, with two different UserExtensions sections, one with an
2591                  Identifier of Prebuild, and another of PostBuild. Both UserExtensions sections would
2592                  use the same UserId.
2593                </xs:documentation>
2594              </xs:annotation>
2595            </xs:attribute>
2596            <xs:attribute name="Identifier" type="xs:string" use="required">
2597              <xs:annotation>
2598                <xs:documentation xml:lang="en-us">
2599                  This can be any string used to differentiate or
2600                  identify this section from other UserExtensions sections.
2601                </xs:documentation>
2602                <xs:documentation xml:lang="en-us">
2603                  For example, a PRE_PROCESS Identifier might indicate
2604                  specific steps and tools required before processing module content, while a
2605                  different UserExtensions section with a POST_PROCESS Identifier might describe steps
2606                  that need to be executed after operations on this module.
2607                </xs:documentation>
2608              </xs:annotation>
2609            </xs:attribute>
2610            <xs:anyAttribute processContents="lax"/>
2611          </xs:complexType>
2612        </xs:element>
2613        <!-- End of Module Surface Area UserExtensions Section -->
2614
2615      </xs:sequence>
2616      <xs:attribute name="BinaryModule" type="xs:boolean" default="false" use="optional">
2617        <xs:annotation>
2618          <xs:documentation xml:lang="en-us">
2619            This attribute is used when the binaries are distributed for
2620            this module and no code generation from source files is required. If set, then the BinaryFiles
2621            section should be used, and any files listed in the SourceFiles section do not have to be built.
2622            Additionally, the AsBuilt section for each binary file must be included.
2623          </xs:documentation>
2624        </xs:annotation>
2625      </xs:attribute>
2626    </xs:complexType>
2627
2628  </xs:element>
2629  <!-- End of the ModuleSurfaceArea element. -->
2630
2631  <xs:element name="Tools">
2632    <xs:complexType>
2633      <xs:sequence>
2634        <xs:element minOccurs="0" maxOccurs="1" name="Header">
2635          <xs:complexType>
2636            <xs:sequence>
2637              <xs:element minOccurs="1" maxOccurs="1" name="Name" type="xs:normalizedString">
2638                <xs:annotation>
2639                  <xs:documentation xml:lang="en-us">
2640                    This is the User Interface Name for this Tools
2641                    Distribution.
2642                  </xs:documentation>
2643                </xs:annotation>
2644              </xs:element>
2645              <xs:element minOccurs="0" maxOccurs="1" name="Copyright" type="xs:string">
2646                <xs:annotation>
2647                  <xs:documentation xml:lang="en-us">
2648                    This is only required if the Copyright is
2649                    different from the Distribution Package copyright.
2650                  </xs:documentation>
2651                </xs:annotation>
2652              </xs:element>
2653              <xs:element minOccurs="0" maxOccurs="1" name="License" type="xs:string">
2654                <xs:annotation>
2655                  <xs:documentation xml:lang="en-us">
2656                    This is only required if the License is
2657                    different from the Distribution Package license.
2658                  </xs:documentation>
2659                </xs:annotation>
2660              </xs:element>
2661              <xs:element minOccurs="0" maxOccurs="1" name="Abstract">
2662                <xs:annotation>
2663                  <xs:documentation xml:lang="en-us">
2664                    This is only required if the Abstract is
2665                    different from the Distribution Package Abstract.
2666                  </xs:documentation>
2667                </xs:annotation>
2668                <xs:complexType>
2669                  <xs:simpleContent>
2670                    <xs:extension base="xs:normalizedString">
2671                      <xs:attribute name="Lang" type="xs:language" default="en-us" use="optional"/>
2672                    </xs:extension>
2673                  </xs:simpleContent>
2674                </xs:complexType>
2675              </xs:element>
2676              <xs:element minOccurs="0" maxOccurs="1" name="Description">
2677                <xs:annotation>
2678                  <xs:documentation xml:lang="en-us">
2679                    This is only required if the Description is
2680                    different from the Distribution Package Description.
2681                  </xs:documentation>
2682                </xs:annotation>
2683                <xs:complexType>
2684                  <xs:simpleContent>
2685                    <xs:extension base="xs:string">
2686                      <xs:attribute name="Lang" type="xs:language" default="en-us" use="optional"/>
2687                    </xs:extension>
2688                  </xs:simpleContent>
2689                </xs:complexType>
2690
2691              </xs:element>
2692            </xs:sequence>
2693          </xs:complexType>
2694        </xs:element>
2695        <xs:element minOccurs="1" maxOccurs="unbounded" name="Filename">
2696          <xs:annotation>
2697            <xs:documentation xml:lang="en-us">
2698              This is the path and filename location within the ZIP file.
2699            </xs:documentation>
2700          </xs:annotation>
2701          <xs:complexType>
2702            <xs:simpleContent>
2703              <xs:extension base="xs:anyURI">
2704                <xs:attribute name="OS" type="SupportedOs" use="optional">
2705                  <xs:annotation>
2706                    <xs:documentation xml:lang="en-us">
2707                      This is required for tools that execute; it
2708                      should not be used for configuration files.
2709                    </xs:documentation>
2710                  </xs:annotation>
2711                </xs:attribute>
2712                <xs:attribute name="Executable" type="xs:boolean" default="false" use="optional">
2713                  <xs:annotation>
2714                    <xs:documentation xml:lang="en-us">
2715                      If true, used by installation tools to
2716                      ensure that a file that must be executable has the correct properties to
2717                      permit execution.
2718                    </xs:documentation>
2719                  </xs:annotation>
2720                </xs:attribute>
2721              </xs:extension>
2722            </xs:simpleContent>
2723          </xs:complexType>
2724        </xs:element>
2725      </xs:sequence>
2726    </xs:complexType>
2727  </xs:element>
2728  <!-- End of the Tools element. -->
2729
2730  <xs:element name="MiscellaneousFiles">
2731    <xs:annotation>
2732      <xs:documentation xml:lang="en-us">
2733        This section contains a list of files that are not part of the code
2734        distributed with modules, packages or tools.
2735      </xs:documentation>
2736    </xs:annotation>
2737    <xs:complexType>
2738      <xs:sequence>
2739        <xs:element minOccurs="0" maxOccurs="1" name="Header">
2740          <xs:complexType>
2741            <xs:sequence>
2742              <xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:normalizedString">
2743                <xs:annotation>
2744                  <xs:documentation xml:lang="en-us">
2745                    The User interface name for this content.
2746                  </xs:documentation>
2747                </xs:annotation>
2748              </xs:element>
2749              <xs:element minOccurs="0" maxOccurs="1" name="Copyright" type="xs:string">
2750                <xs:annotation>
2751                  <xs:documentation xml:lang="en-us">
2752                    This is only required if the Copyright is
2753                    different from the Distribution Package Copyright.
2754                  </xs:documentation>
2755                </xs:annotation>
2756              </xs:element>
2757              <xs:element minOccurs="0" maxOccurs="1" name="License" type="xs:string">
2758                <xs:annotation>
2759                  <xs:documentation xml:lang="en-us">
2760                    This is only required if the License is
2761                    different from the Distribution Package License.
2762                  </xs:documentation>
2763                </xs:annotation>
2764              </xs:element>
2765              <xs:element minOccurs="0" maxOccurs="1" name="Abstract" type="xs:normalizedString"/>
2766              <xs:element minOccurs="0" maxOccurs="unbounded" name="Description">
2767                <xs:complexType>
2768                  <xs:simpleContent>
2769                    <xs:extension base="xs:string">
2770                      <xs:attribute name="Lang" type="xs:language" default="en-us" use="optional"
2771                                            />
2772                    </xs:extension>
2773                  </xs:simpleContent>
2774                </xs:complexType>
2775              </xs:element>
2776            </xs:sequence>
2777          </xs:complexType>
2778        </xs:element>
2779        <xs:element minOccurs="0" maxOccurs="unbounded" name="Filename">
2780          <xs:annotation>
2781            <xs:documentation xml:lang="en-us">
2782              This is the path and filename location within the ZIP file.
2783            </xs:documentation>
2784          </xs:annotation>
2785          <xs:complexType>
2786            <xs:simpleContent>
2787              <xs:extension base="xs:anyURI">
2788                <xs:attribute name="Executable" type="xs:boolean" default="false" use="optional">
2789                  <xs:annotation>
2790                    <xs:documentation xml:lang="en-us">
2791                      If true, used by installation tools to
2792                      ensure that a file that must be executable has the correct properties to
2793                      permit execution.
2794                    </xs:documentation>
2795                  </xs:annotation>
2796                </xs:attribute>
2797              </xs:extension>
2798            </xs:simpleContent>
2799          </xs:complexType>
2800        </xs:element>
2801      </xs:sequence>
2802    </xs:complexType>
2803  </xs:element>
2804  <!-- End of the Misc element. -->
2805
2806  <xs:element name="UserExtensions">
2807    <xs:complexType mixed="true">
2808      <xs:sequence>
2809        <xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
2810      </xs:sequence>
2811      <xs:attribute name="UserId" type="xs:NCName" use="required">
2812        <xs:annotation>
2813          <xs:documentation xml:lang="en-us">
2814            This is a single word identifier for grouping similar content.
2815            For example, ReferenceBuild might be used to identify non-PI compliant build steps, with two
2816            different UserExtensions sections, one with an Identifier of Prebuild, and another of PostBuild.
2817            Both UserExtensions sections would use the same UserId.
2818          </xs:documentation>
2819        </xs:annotation>
2820      </xs:attribute>
2821      <xs:attribute name="Identifier" type="xs:string" use="optional">
2822        <xs:annotation>
2823          <xs:documentation xml:lang="en-us">
2824            This can be any string used to differentiate or identify this
2825            section from other UserExtensions sections.
2826          </xs:documentation>
2827          <xs:documentation xml:lang="en-us">
2828            For example, a PRE_PROCESS Identifier might indicate specific
2829            steps and tools required before processing distribution package content, while a different
2830            UserExtensions section with a POST_PROCESS Identifier might describe steps that need to be
2831            executed after operations on this content.
2832          </xs:documentation>
2833        </xs:annotation>
2834      </xs:attribute>
2835      <xs:anyAttribute processContents="lax"/>
2836    </xs:complexType>
2837  </xs:element>
2838  <!-- The following elsements are common definitions used with the ref attribute for elements. -->
2839
2840  <xs:element name="HelpText">
2841    <xs:complexType>
2842      <xs:simpleContent>
2843        <xs:extension base="xs:string">
2844          <xs:attribute name="Lang" type="xs:language" default="en-us" use="optional"/>
2845        </xs:extension>
2846      </xs:simpleContent>
2847    </xs:complexType>
2848  </xs:element>
2849
2850  <!-- The following attribute groups are used in various elements above. -->
2851
2852  <xs:attributeGroup name="SupportedArchMod">
2853    <xs:attribute name="SupArchList" type="ArchListType" use="optional"/>
2854    <xs:attribute name="SupModList" type="ModuleListType" use="optional"/>
2855  </xs:attributeGroup>
2856
2857  <!-- The following data types are used to restrict content. -->
2858
2859  <xs:simpleType name="ArchListType">
2860    <xs:list itemType="ArchTypes"/>
2861  </xs:simpleType>
2862
2863  <xs:simpleType name="ArchTypes">
2864    <xs:restriction base="xs:NCName">
2865      <xs:enumeration value="IA32"/>
2866      <xs:enumeration value="X64"/>
2867      <xs:enumeration value="IPF"/>
2868      <xs:enumeration value="EBC"/>
2869      <xs:enumeration value="ARM"/>
2870      <xs:pattern value="([A-Z])([a-zA-Z0-9])*">
2871        <xs:annotation>
2872          <xs:documentation xml:lang="en-us">
2873            Any processor architecture not listed above. The Architecture
2874            must be a target architecture of one or more compiler tool chains.
2875          </xs:documentation>
2876        </xs:annotation>
2877      </xs:pattern>
2878    </xs:restriction>
2879  </xs:simpleType>
2880
2881
2882  <xs:simpleType name="FamilyTypes">
2883    <xs:restriction base="xs:NCName">
2884      <xs:enumeration value="MSFT"/>
2885      <xs:enumeration value="GCC"/>
2886      <xs:pattern value="[A-Z][a-zA-Z0-9]*">
2887        <xs:annotation>
2888          <xs:documentation xml:lang="en-us">
2889            Any other family of build utilities for which compiler tools
2890            exist.
2891          </xs:documentation>
2892        </xs:annotation>
2893      </xs:pattern>
2894    </xs:restriction>
2895  </xs:simpleType>
2896
2897  <xs:simpleType name="GuidListType">
2898    <xs:list itemType="GuidTypes"/>
2899  </xs:simpleType>
2900
2901  <xs:simpleType name="GuidTypes">
2902    <xs:restriction base="xs:NCName">
2903      <xs:enumeration value="Event"/>
2904      <xs:enumeration value="File"/>
2905      <xs:enumeration value="FV"/>
2906      <xs:enumeration value="GUID"/>
2907      <xs:enumeration value="HII"/>
2908      <xs:enumeration value="Hii"/>
2909      <xs:enumeration value="HOB"/>
2910      <xs:enumeration value="SystemTable"/>
2911      <xs:enumeration value="TokenSpaceGuid"/>
2912      <xs:enumeration value="Variable"/>
2913      <xs:enumeration value="UNDEFINED"/>
2914    </xs:restriction>
2915  </xs:simpleType>
2916
2917  <xs:simpleType name="HexNumber">
2918    <xs:restriction base="xs:hexBinary">
2919      <xs:pattern value="0x([a-fA-F0-9])+"/>
2920    </xs:restriction>
2921  </xs:simpleType>
2922
2923  <xs:simpleType name="Md5Sum">
2924    <xs:restriction base="xs:normalizedString">
2925      <xs:pattern value="[a-zA-Z0-9]{32}"/>
2926    </xs:restriction>
2927  </xs:simpleType>
2928
2929  <xs:simpleType name="ModuleListType">
2930    <xs:list itemType="ModuleTypes"/>
2931  </xs:simpleType>
2932
2933  <xs:simpleType name="ModuleTypes">
2934    <xs:annotation>
2935      <xs:documentation xml:lang="en-us"> The following module types are defined by specifications. </xs:documentation>
2936      <xs:documentation xml:lang="en-us">
2937        Module types for components and libraries defined for this distribution
2938        mechanism.
2939      </xs:documentation>
2940    </xs:annotation>
2941    <xs:restriction base="xs:NCName">
2942      <xs:enumeration value="BASE ">
2943        <xs:annotation>
2944          <xs:documentation xml:lang="en-us"> Use of this module is not restricted. </xs:documentation>
2945        </xs:annotation>
2946      </xs:enumeration>
2947      <xs:enumeration value="DXE_CORE">
2948        <xs:annotation>
2949          <xs:documentation xml:lang="en-us">
2950            This module is only applicable to the DXE core.
2951          </xs:documentation>
2952        </xs:annotation>
2953      </xs:enumeration>
2954      <xs:enumeration value="DXE_DRIVER">
2955        <xs:annotation>
2956          <xs:documentation xml:lang="en-us">
2957            This module is only applicable to a DXE driver.
2958          </xs:documentation>
2959        </xs:annotation>
2960      </xs:enumeration>
2961      <xs:enumeration value="DXE_RUNTIME_DRIVER">
2962        <xs:annotation>
2963          <xs:documentation xml:lang="en-us">
2964            This module is only applicable to a DXE runtime driver.
2965          </xs:documentation>
2966        </xs:annotation>
2967      </xs:enumeration>
2968      <xs:enumeration value="DXE_SAL_DRIVER">
2969        <xs:annotation>
2970          <xs:documentation xml:lang="en-us">
2971            This module is only applicable to an IPF DXE runtime driver.
2972          </xs:documentation>
2973        </xs:annotation>
2974      </xs:enumeration>
2975      <xs:enumeration value="DXE_SMM_DRIVER">
2976        <xs:annotation>
2977          <xs:documentation xml:lang="en-us">
2978            This module is only applicable to a DXE SMM driver.
2979          </xs:documentation>
2980        </xs:annotation>
2981      </xs:enumeration>
2982      <xs:enumeration value="PEI_CORE">
2983        <xs:annotation>
2984          <xs:documentation xml:lang="en-us">
2985            This module is only applicable to the PEI core.
2986          </xs:documentation>
2987        </xs:annotation>
2988      </xs:enumeration>
2989      <xs:enumeration value="PEIM">
2990        <xs:annotation>
2991          <xs:documentation xml:lang="en-us"> This module is only valid for PEI modules. </xs:documentation>
2992        </xs:annotation>
2993      </xs:enumeration>
2994      <xs:enumeration value="SEC">
2995        <xs:annotation>
2996          <xs:documentation xml:lang="en-us">
2997            This module is only applicable to Security phase.
2998          </xs:documentation>
2999        </xs:annotation>
3000      </xs:enumeration>
3001      <xs:enumeration value="UEFI_DRIVER">
3002        <xs:annotation>
3003          <xs:documentation xml:lang="en-us"> This module is only valid for UEFI drivers. </xs:documentation>
3004        </xs:annotation>
3005      </xs:enumeration>
3006      <xs:enumeration value="UEFI_RUNTIME_DRIVER">
3007        <xs:annotation>
3008          <xs:documentation xml:lang="en-us">
3009            This module is only valid for UEFI runtime
3010            drivers.
3011          </xs:documentation>
3012        </xs:annotation>
3013      </xs:enumeration>
3014      <xs:enumeration value="UEFI_APPLICATION">
3015        <xs:annotation>
3016          <xs:documentation xml:lang="en-us">
3017            This module is only valid for UEFI applications.
3018          </xs:documentation>
3019        </xs:annotation>
3020      </xs:enumeration>
3021      <xs:enumeration value="SMM_CORE">
3022        <xs:annotation>
3023          <xs:documentation xml:lang="en-us">
3024            This module is only applicable to the SMM
3025            core.
3026          </xs:documentation>
3027        </xs:annotation>
3028      </xs:enumeration>
3029      <xs:enumeration value="USER_DEFINED">
3030        <xs:annotation>
3031          <xs:documentation xml:lang="en-us">
3032            This content is restricted to a specific implementation.
3033          </xs:documentation>
3034        </xs:annotation>
3035      </xs:enumeration>
3036      <xs:enumeration value="UNDEFINED">
3037        <xs:annotation>
3038          <xs:documentation xml:lang="en-us">
3039            This enumeration is for use in a list that where the package
3040            creator does not know the what module types are supported by a module.
3041          </xs:documentation>
3042        </xs:annotation>
3043      </xs:enumeration>
3044      <xs:pattern value="([A-Z])([a-zA-Z0-9])*">
3045        <xs:annotation>
3046          <xs:documentation xml:lang="en-us">
3047            This pattern has been added for use in a module lists - for
3048            future expansion.
3049          </xs:documentation>
3050        </xs:annotation>
3051      </xs:pattern>
3052    </xs:restriction>
3053  </xs:simpleType>
3054
3055  <xs:simpleType name="PcdDatumTypes">
3056    <xs:annotation>
3057      <xs:documentation xml:lang="en-us">
3058        The following data types are defined by the PCD specification (or PCD
3059        section of the UEFI/PI specifications.)
3060      </xs:documentation>
3061    </xs:annotation>
3062    <xs:restriction base="xs:normalizedString">
3063      <xs:enumeration value="UINT8"/>
3064      <xs:enumeration value="UINT16"/>
3065      <xs:enumeration value="UINT32"/>
3066      <xs:enumeration value="UINT64"/>
3067      <xs:enumeration value="BOOLEAN"/>
3068      <xs:enumeration value="VOID*"/>
3069    </xs:restriction>
3070  </xs:simpleType>
3071
3072  <xs:simpleType name="PcdItemListType">
3073    <xs:list itemType="PcdItemTypes"/>
3074  </xs:simpleType>
3075
3076  <xs:simpleType name="PcdItemTypes">
3077    <xs:restriction base="xs:NCName">
3078      <xs:enumeration value="FeaturePcd">
3079        <xs:annotation>
3080          <xs:documentation xml:lang="en-us">
3081            The Feature PCD is a binary, evaluating to either true or false.
3082            This is used during build to include/exclude content. It can also be used during execution to
3083            force execution paths within drivers, or to enable/disable features within a driver for a given
3084            platform.
3085          </xs:documentation>
3086        </xs:annotation>
3087      </xs:enumeration>
3088      <xs:enumeration value="FixedPcd">
3089        <xs:annotation>
3090          <xs:documentation xml:lang="en-us">
3091            The Fixed PCD is a #define value that is set at build time.
3092          </xs:documentation>
3093        </xs:annotation>
3094      </xs:enumeration>
3095      <xs:enumeration value="PatchPcd">
3096        <xs:annotation>
3097          <xs:documentation xml:lang="en-us">
3098            The Patch PCD is a #define that is set at build time, and that
3099            can be modified within a binary file. Additional information, such as the offset location of the
3100            value, along with it's length may need to be provided.
3101          </xs:documentation>
3102        </xs:annotation>
3103      </xs:enumeration>
3104      <xs:enumeration value="Pcd">
3105        <xs:annotation>
3106          <xs:documentation xml:lang="en-us">
3107            This PCD type has an overloaded definition. Prior to build, the
3108            platform integrator may choose to implement a PCD as Fixed, Patchable or a Dynamic PCD. If the
3109            platform integrator choose to use the PCD as dynamic, then a PCD driver is required in the
3110            platform (PEI/DXE/both) to track the PCD in some sort of 'database' of these items. For Dynamic
3111            PCDs, the PcdGet* must pass in the token space guid and the token number to retrieve data
3112            (PcdSet* also needs these values.)
3113          </xs:documentation>
3114        </xs:annotation>
3115      </xs:enumeration>
3116      <xs:enumeration value="PcdEx">
3117        <xs:annotation>
3118          <xs:documentation xml:lang="en-us">
3119            The PCD can only be used as Dynamic, and the platform firmware
3120            must contain a driver to maintain a 'database' of these items. For Dynamic PCDs, the PcdGet*
3121            must pass in the token space guid and the token number to retrieve data (PcdSet* also needs
3122            these values.)
3123          </xs:documentation>
3124        </xs:annotation>
3125      </xs:enumeration>
3126    </xs:restriction>
3127  </xs:simpleType>
3128
3129  <xs:simpleType name="RegistryFormatGuid">
3130    <xs:annotation>
3131      <xs:documentation xml:lang="en-us">
3132        A GUID must contain five different Hexadecimal character sets that are
3133        separated by a dash (-) character.
3134      </xs:documentation>
3135    </xs:annotation>
3136    <xs:restriction base="xs:string">
3137      <xs:pattern 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*"/>
3138    </xs:restriction>
3139  </xs:simpleType>
3140
3141  <xs:simpleType name="SupportedOs">
3142    <xs:annotation>
3143      <xs:documentation xml:lang="en-us">
3144        The EDK II build system supports workstations running one of the
3145        following supported operating systems. This is the OS for the developer's workstation, not the target
3146        platform.
3147      </xs:documentation>
3148    </xs:annotation>
3149    <xs:restriction base="xs:string">
3150      <xs:enumeration value="Win32">
3151        <xs:annotation>
3152          <xs:documentation xml:lang="en-us">
3153            For Windows 2003, Windows XP and Windows Vista.
3154          </xs:documentation>
3155        </xs:annotation>
3156      </xs:enumeration>
3157      <xs:enumeration value="Win64">
3158        <xs:annotation>
3159          <xs:documentation xml:lang="en-us">
3160            For Windows 2003, Windows XP and Windows Vista.
3161          </xs:documentation>
3162        </xs:annotation>
3163      </xs:enumeration>
3164      <xs:enumeration value="RedHat32"/>
3165      <xs:enumeration value="RedHat64"/>
3166      <xs:enumeration value="SuSE32"/>
3167      <xs:enumeration value="SuSE64"/>
3168      <xs:enumeration value="Linux32"/>
3169      <xs:enumeration value="Linux64"/>
3170      <xs:enumeration value="OS/X32"/>
3171      <xs:enumeration value="OS/X64"/>
3172      <xs:enumeration value="Generic"/>
3173      <xs:enumeration value="GenericWin">
3174        <xs:annotation>
3175          <xs:documentation xml:lang="en-us">
3176            Typically, this is used for Windows Batch files.
3177          </xs:documentation>
3178        </xs:annotation>
3179      </xs:enumeration>
3180      <xs:enumeration value="GenericNix">
3181        <xs:annotation>
3182          <xs:documentation xml:lang="en-us">
3183            Typically use for shell scripts - valid for any Linux and Mac
3184            OS/X.
3185          </xs:documentation>
3186        </xs:annotation>
3187      </xs:enumeration>
3188      <xs:pattern value="[a-zA-Z]([a-zA-Z0-9])*"/>
3189    </xs:restriction>
3190  </xs:simpleType>
3191
3192</xs:schema>
3193