Home | History | Annotate | Download | only in XMLSchema
      1 <?xml version="1.0" encoding="UTF-8"?>
      2 <!--
      3 Filename: DistributionPackage.xsd
      4 
      5 Copyright (c) 2008 - 2012, Intel Corporation. All rights reserved.
      6 
      7 This program and the accompanying materials are licensed and made available 
      8 under the terms and conditions of the BSD License which may be found at 
      9     http://opensource.org/licenses/bsd-license.php
     10 
     11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     13 
     14 -->
     15 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
     16     targetNamespace="http://www.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 GUIDs and other
    333               code/data objects were not decorated with their usage. This document will allow for
    334               importing todays 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 packages 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