]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/XMLSchema/FrameworkDataElements.xsd
updated UserExtensions to match final schema.
[mirror_edk2.git] / Tools / XMLSchema / FrameworkDataElements.xsd
index 65db34a3248aaf67b1333f6867a7e9f7d42c32d5..2015e01676f449c50688b3c10592f3896f0240d8 100644 (file)
@@ -17,6 +17,7 @@
     </xs:annotation>\r
     <xs:include schemaLocation="NamingConvention.xsd"/>\r
     <xs:include schemaLocation="FrameworkDataTypes.xsd"/>\r
+    <xs:include schemaLocation="FrameworkPlatformDataTypes.xsd"/>\r
     <xs:include schemaLocation="FrameworkDataAttributes.xsd"/>\r
     <xs:element name="Abstract">\r
         <xs:annotation>\r
                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="Ffs"/>\r
                 <xs:element minOccurs="0" maxOccurs="1" ref="Sections"/>\r
                 <xs:element minOccurs="0" maxOccurs="unbounded" ref="Filenames"/>\r
+                <xs:element ref="Options" minOccurs="0" maxOccurs="1"/>\r
                 <xs:sequence minOccurs="0">\r
                     <xs:element minOccurs="0" maxOccurs="unbounded" name="Option">\r
                         <xs:complexType>\r
                         </xs:complexType>\r
                     </xs:element>\r
                 </xs:sequence>\r
+                <xs:element minOccurs="0" maxOccurs="unbounded" ref="UserExtensions"/>                \r
             </xs:sequence>\r
             <xs:attribute name="ToolChain" type="ToolChains"/>\r
         </xs:complexType>\r
     </xs:element>\r
+    <xs:element name="Options">\r
+        <xs:complexType>\r
+            <xs:sequence>\r
+                <xs:element minOccurs="1" maxOccurs="unbounded" ref="Option"/>\r
+            </xs:sequence>\r
+        </xs:complexType>\r
+    </xs:element>\r
+    <xs:element name="Option">\r
+        <!-- This element is used to store flags from the Tools -->\r
+        <xs:complexType>\r
+            <xs:simpleContent>\r
+                <xs:extension base="xs:normalizedString">\r
+                    <xs:attributeGroup ref="OptionAttributes"/>\r
+                </xs:extension>\r
+            </xs:simpleContent>\r
+        </xs:complexType>\r
+    </xs:element>    \r
+    <xs:element name="ModuleBuildOptions">\r
+        <xs:complexType>\r
+            <xs:sequence>\r
+                <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax" namespace="##local"/>\r
+            </xs:sequence>\r
+        </xs:complexType>\r
+    </xs:element>\r
+    <xs:element name="ModuleSaBuildOptions">\r
+        <xs:complexType>\r
+            <xs:sequence>\r
+                <xs:element minOccurs="0" maxOccurs="1" name="FvBinding" type="FfsNameType"/>\r
+                <!-- The FfsFileNameGuid allows the Platform Integrator to specify a GUID for the FFS File Name GUID -->\r
+                <xs:element minOccurs="0" maxOccurs="1" name="FfsFileNameGuid" type="GuidType"/>\r
+                <!-- If binding is specified, you MUST specify the FfsFormatKey -->\r
+                <xs:element minOccurs="0" maxOccurs="1" name="FfsFormatKey" type="FfsNameType"/>\r
+                <xs:element minOccurs="0" maxOccurs="1" ref="Options"/>\r
+            </xs:sequence>\r
+        </xs:complexType>\r
+    </xs:element>\r
+    <xs:element name="ModuleDefinitions">\r
+        <xs:complexType>\r
+            <xs:sequence>\r
+                <xs:element minOccurs="1" maxOccurs="1" name="SupportedArchitectures" type="ArchListType"/>\r
+                <xs:element minOccurs="1" maxOccurs="1" name="BinaryModule" type="xs:boolean" default="false"/>\r
+                <xs:element minOccurs="1" maxOccurs="1" name="OutputFileBasename" type="FileNameConvention"/>\r
+            </xs:sequence>\r
+        </xs:complexType>\r
+    </xs:element>    \r
     <xs:element name="C_Name" type="C_Name">\r
         <xs:annotation>\r
             <xs:documentation xml:lang="en">C_Name is valid for all Description Files</xs:documentation>\r
     <xs:element name="E-Mail" type="E-Mail"/>\r
     <xs:element name="Events">\r
         <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is a list of Events</xs:documentation>\r
+            <xs:documentation xml:lang="en">This is a list of MSA Events</xs:documentation>\r
         </xs:annotation>\r
         <xs:complexType>\r
             <xs:sequence>\r
                             <xs:element name="Event">\r
                                 <xs:complexType>\r
                                     <xs:sequence>\r
-                                        <xs:element minOccurs="1" maxOccurs="1" ref="C_Name"/>\r
+                                        <xs:choice>\r
+                                            <xs:element minOccurs="0" maxOccurs="1" name="GuidC_Name" type="GuidC_NameType"/>\r
+                                            <!-- DO NOT USE, removing C_Name in final -->\r
+                                            <xs:element minOccurs="0" maxOccurs="1" ref="C_Name"/>\r
+                                        </xs:choice>\r
+                                        <!-- DO NOT USE, removing Guid and GuidValue from Final -->\r
                                         <xs:choice minOccurs="0">\r
                                             <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
                                             <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
                             <xs:element name="Event">\r
                                 <xs:complexType>\r
                                     <xs:sequence>\r
-                                        <xs:element minOccurs="1" maxOccurs="1" ref="C_Name"/>\r
+                                        <xs:choice>\r
+                                            <xs:element minOccurs="0" maxOccurs="1" name="GuidC_Name" type="GuidC_NameType"/>\r
+                                            <!-- DO NOT USE, removing C_Name in final -->\r
+                                            <xs:element minOccurs="0" maxOccurs="1" ref="C_Name"/>\r
+                                        </xs:choice>\r
+                                        <!-- DO NOT USE, removing Guid and GuidValue from Final -->\r
                                         <xs:choice minOccurs="0">\r
                                             <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
                                             <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
     <xs:element name="ExitBootServicesCallBack" type="C_Name"/>\r
     <xs:element name="Externs">\r
         <xs:annotation>\r
-            <xs:documentation xml:lang="en">This is a child of MSA files, both Library and Module.</xs:documentation>\r
-            <xs:documentation xml:lang="en">This is a list of Extern statements, right now, only Driver Binding information is provided.</xs:documentation>\r
+            <xs:documentation xml:lang="en">This is a child of MSA files.</xs:documentation>\r
         </xs:annotation>\r
         <xs:complexType>\r
             <xs:sequence minOccurs="1">\r
                 <xs:element minOccurs="0" maxOccurs="1" name="PcdIsDriver" type="PcdDriverTypes"/>\r
+                <xs:element minOccurs="0" maxOccurs="unbounded" ref="Specification"/>\r
                 <xs:element minOccurs="0" maxOccurs="unbounded" name="Extern">\r
                     <xs:complexType>\r
                         <xs:choice minOccurs="1">\r
                         <xs:attributeGroup ref="ExternAttributes"/>\r
                     </xs:complexType>\r
                 </xs:element>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" ref="Specification"/>\r
                 <!-- Remove Arch and use Arch Attribute in above. -->\r
                 <xs:element minOccurs="0" maxOccurs="unbounded" name="Arch">\r
                     <xs:complexType>\r
     </xs:element>\r
     <xs:element name="Filename">\r
         <xs:annotation>\r
-            <xs:documentation xml:lang="en">Describe the valid content of a filename</xs:documentation>\r
+            <xs:documentation xml:lang="en">Describe the valid content of a filename This should extend PathAndFilename - Variable names not allowed here!</xs:documentation>\r
         </xs:annotation>\r
         <xs:complexType>\r
             <xs:simpleContent>\r
         <xs:complexType>\r
             <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
                 <xs:element name="Formset">\r
-                    <xs:annotation>\r
-                        <xs:documentation xml:lang="en">Describe the valid content of a Formset</xs:documentation>\r
-                    </xs:annotation>\r
                     <xs:complexType>\r
                         <xs:simpleContent>\r
                             <xs:extension base="C_Name">\r
         </xs:complexType>\r
     </xs:element>\r
     <xs:element name="GuidDeclarations">\r
+        <xs:annotation>\r
+            <xs:documentation xml:lang="en">This is a child of PackageSurfaceArea (SPD) </xs:documentation>\r
+        </xs:annotation>\r
         <xs:complexType>\r
             <xs:sequence>\r
                 <xs:element minOccurs="1" maxOccurs="unbounded" name="Entry">\r
                                 <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
                                 <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
                             </xs:choice>\r
-                            <xs:element minOccurs="0" maxOccurs="unbounded" name="FeatureFlag" type="C_Name"/>\r
+                            <xs:element minOccurs="0" maxOccurs="unbounded" ref="HelpText"/>\r
                         </xs:sequence>\r
-                        <xs:attribute name="Name" type="xs:normalizedString" use="required"/>\r
+                        <xs:attributeGroup ref="GuidDeclarationAttributes"/>\r
                     </xs:complexType>\r
                 </xs:element>\r
             </xs:sequence>\r
             <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
                 <xs:element name="GuidEntry">\r
                     <xs:annotation>\r
-                        <xs:documentation xml:lang="en">Describe the valid content of a PCD GUID element</xs:documentation>\r
+                        <xs:documentation xml:lang="en">Describe the valid content of a GUID element in and MSA file.</xs:documentation>\r
                     </xs:annotation>\r
-                    <xs:complexType>\r
+                    <xs:complexType mixed="true">\r
                         <xs:sequence minOccurs="0" maxOccurs="1">\r
                             <xs:element minOccurs="1" maxOccurs="1" ref="C_Name"/>\r
+                            <!-- DO NOT USE removing GuidValue from use -->\r
                             <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
+                            <!-- DO NOT USE removing FeatureFlag from use, use FeatureFlag Attribute instead -->\r
                             <xs:element minOccurs="0" maxOccurs="unbounded" name="FeatureFlag" type="C_Name"/>\r
                             <!-- DO NOT USE remove ConditionalExpression and use FeatureFlag instead -->\r
                             <xs:element minOccurs="0" maxOccurs="unbounded" ref="ConditionalExpression"/>\r
+                            <!-- DO NOT USE, remove DefaultValue from use -->\r
                             <xs:element minOccurs="0" maxOccurs="1" ref="DefaultValue"/>\r
+                            <!-- DO NOT USE, remove HelpText from use -->\r
                             <xs:element minOccurs="0" maxOccurs="1" ref="HelpText"/>\r
                         </xs:sequence>\r
                         <xs:attributeGroup ref="GuidAttributes"/>\r
         </xs:complexType>\r
     </xs:element>\r
     <xs:element name="GuidValue" type="GuidType"/>\r
-    <xs:element name="HelpText" type="Paragraph">\r
+    <xs:element name="HelpText" type="Paragraph"/>\r
+    <xs:element name="HiiPackages">\r
         <xs:annotation>\r
-            <xs:documentation xml:lang="en">This section is used to describe how a GUID, PPI or PROTOCOL is to be used within the context of PCDs.</xs:documentation>\r
+            <xs:documentation xml:lang="en">Describe the list of a HiiPackage elements</xs:documentation>\r
         </xs:annotation>\r
+        <xs:complexType>\r
+            <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
+                <xs:element name="HiiPackage">\r
+                    <xs:complexType>\r
+                        <xs:simpleContent>\r
+                            <xs:extension base="C_Name">\r
+                                <xs:attributeGroup ref="HiiPackageAttributes"/>\r
+                            </xs:extension>\r
+                        </xs:simpleContent>\r
+                    </xs:complexType>\r
+                </xs:element>\r
+            </xs:sequence>\r
+        </xs:complexType>\r
     </xs:element>\r
     <xs:element name="Hobs">\r
         <xs:complexType>\r
                 <xs:element name="Hob">\r
                     <xs:complexType>\r
                         <xs:sequence>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:normalizedString"/>\r
+                            <xs:choice>\r
+                                <!-- Remove Name from use -->\r
+                                <xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:normalizedString"/>\r
+                                <xs:element minOccurs="0" maxOccurs="1" name="GuidC_Name" type="GuidC_NameType"/>\r
+                            </xs:choice>\r
+                            <!-- Remove C_Name from use -->\r
                             <xs:element minOccurs="0" maxOccurs="1" ref="C_Name"/>\r
+                            <!-- Remove Guid and GuidValue from use -->\r
                             <xs:choice minOccurs="0">\r
                                 <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
                                 <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
     <xs:element name="IncludeHeader">\r
         <xs:complexType>\r
             <xs:simpleContent>\r
-                <xs:extension base="FileNameConvention">\r
+                <xs:extension base="PathAndFilename">\r
+                    <!-- Need to use IncludeHeaderAttributes in final -->\r
                     <xs:attributeGroup ref="IncludeAttributes"/>\r
                 </xs:extension>\r
             </xs:simpleContent>\r
             </xs:sequence>\r
         </xs:complexType>\r
     </xs:element>\r
-    <xs:element name="IndustryStdHeaders">\r
+    <xs:element name="IndustryStdIncludes">\r
         <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" ref="IncludeHeader"/>\r
+                <xs:element minOccurs="1" maxOccurs="unbounded" ref="IndustryStdHeader"/>\r
             </xs:sequence>\r
         </xs:complexType>\r
     </xs:element>\r
+    <xs:element name="IndustryStdHeader">\r
+        <xs:complexType>\r
+            <xs:sequence>\r
+                <xs:element minOccurs="0" maxOccurs="1" name="Header" type="UiNameType"/>\r
+                <xs:element minOccurs="1" maxOccurs="1" name="IncludeHeader" type="PathAndFilename"/>\r
+                <xs:element minOccurs="1" maxOccurs="1" ref="HelpText"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="IndustryStdHeaderAttributes"/>\r
+        </xs:complexType>\r
+    </xs:element>\r
     <xs:element name="InstalledDate" type="DateType"/>\r
     <xs:element name="Libraries">\r
         <xs:annotation>\r
         <xs:complexType>\r
             <xs:sequence minOccurs="1">\r
                 <xs:element minOccurs="0" maxOccurs="unbounded" name="Library">\r
-                    <xs:complexType>\r
+                    <xs:complexType mixed="true">\r
                         <xs:simpleContent>\r
                             <xs:extension base="xs:NCName">\r
                                 <xs:attributeGroup ref="LibraryAttributes"/>\r
         </xs:annotation>\r
         <xs:complexType>\r
             <xs:simpleContent>\r
-                <xs:extension base="BaseNameConvention">\r
+                <xs:extension base="xs:NCName">\r
                     <xs:attributeGroup ref="LibraryClassAttributes"/>\r
                 </xs:extension>\r
             </xs:simpleContent>\r
         </xs:complexType>\r
     </xs:element>\r
+    <!-- LAH This is LibraryClassDeclaration FINAL version -->\r
     <xs:element name="LibraryClassDeclaration">\r
         <xs:annotation>\r
             <xs:documentation xml:lang="en">This element defines a class of library, along with the path to the Include Header for this library</xs:documentation>\r
         </xs:annotation>\r
         <xs:complexType>\r
-            <xs:sequence minOccurs="0">\r
+            <xs:sequence>\r
                 <xs:element minOccurs="1" maxOccurs="1" name="LibraryClass">\r
-                    <xs:annotation>\r
-                        <xs:documentation xml:lang="en">Used in MSA and SPD files. This defines what class of library is being supported = produced (library module) or consumed by a module.</xs:documentation>\r
-                    </xs:annotation>\r
                     <xs:complexType>\r
                         <xs:simpleContent>\r
-                            <xs:extension base="BaseNameConvention">\r
-                                <xs:attribute name="RecommendedInstance" type="xs:NCName" use="optional"/>\r
+                            <xs:extension base="xs:NCName">\r
                                 <xs:attribute name="RecommendedInstanceGuid" type="GuidType" use="optional"/>\r
+                                <xs:attribute name="RecommendedInstanceVersion" type="xs:decimal" use="optional"/>\r
                             </xs:extension>\r
                         </xs:simpleContent>\r
                     </xs:complexType>\r
                 </xs:element>\r
-                <xs:element minOccurs="1" maxOccurs="1" ref="IncludeHeader"/>\r
+                <xs:element minOccurs="0" maxOccurs="1" ref="IncludeHeader"/>\r
+                <xs:element minOccurs="0" maxOccurs="1" name="RecommendedInstanceGuid" type="GuidType"/>\r
+                <xs:element minOccurs="0" maxOccurs="1" name="RecommendedInstanceVersion" type="xs:decimal"/>\r
+                <xs:element minOccurs="0" maxOccurs="1" ref="HelpText"/>\r
             </xs:sequence>\r
         </xs:complexType>\r
     </xs:element>\r
+    <!-- LAH This is LibraryClassDeclarations FINAL version -->\r
     <xs:element name="LibraryClassDeclarations">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">This section defines what Classes of Libraries that this library belongs to. A Library may belong to multiple different library classes.</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType mixed="true">\r
-            <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
-                <xs:element ref="LibraryClassDeclaration"/>\r
+        <xs:complexType>\r
+            <xs:sequence>\r
+                <xs:element minOccurs="1" maxOccurs="unbounded" ref="LibraryClassDeclaration"/>\r
+                <xs:element name="LibraryClass" minOccurs="0" maxOccurs="unbounded">\r
+                    <xs:complexType>\r
+                        <xs:sequence>\r
+                            <xs:element name="IncludeHeader" type="PathAndFilename" minOccurs="1" maxOccurs="1"/>\r
+                            <xs:element ref="HelpText" minOccurs="1" maxOccurs="1"/>\r
+                        </xs:sequence>\r
+                        <xs:attributeGroup ref="LibraryClassAttributes"/>\r
+                    </xs:complexType>\r
+                </xs:element>            \r
             </xs:sequence>\r
         </xs:complexType>\r
     </xs:element>\r
         <xs:annotation>\r
             <xs:documentation xml:lang="en">This section defines what Classes of Library that this library supports. A Library may belong to multiple different library classes.</xs:documentation>\r
         </xs:annotation>\r
-        <xs:complexType mixed="true">\r
+        <xs:complexType>\r
             <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
                 <xs:element ref="LibraryClass"/>\r
             </xs:sequence>\r
     <xs:element name="ModuleUnloadImage" type="xs:normalizedString"/>\r
     <xs:element name="MsaFiles">\r
         <xs:complexType>\r
+          <xs:choice minOccurs="1" maxOccurs="unbounded">\r
             <xs:sequence minOccurs="1">\r
                 <xs:element minOccurs="0" maxOccurs="unbounded" name="MsaFile">\r
                     <xs:annotation>\r
                     </xs:complexType>\r
                 </xs:element>\r
             </xs:sequence>\r
+            <xs:element minOccurs="1" maxOccurs="unbounded" ref="Filename"/>\r
+          </xs:choice>\r
         </xs:complexType>\r
     </xs:element>\r
-    <xs:element name="MsaPcdDeclarations">\r
-        <xs:annotation>\r
-            <xs:documentation xml:lang="en">Child of Module Surface Area Description (MSA)</xs:documentation>\r
-        </xs:annotation>\r
-        <xs:complexType>\r
-            <xs:sequence minOccurs="1">\r
-                <xs:element maxOccurs="unbounded" name="PcdEntry">\r
-                    <xs:annotation>\r
-                        <xs:documentation xml:lang="en">This is the valid content of the PCD table of a Module. The contents may not be wired at build time, and these only refer to Platform Build values, not modules.</xs:documentation>\r
-                        <xs:documentation xml:lang="en">This element is valid for PcdInfo.xml and FPD files.</xs:documentation>\r
-                    </xs:annotation>\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="1" ref="C_Name"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="DefaultValue" type="DefaultValue"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
-                        </xs:sequence>\r
-                        <!-- MSA file declares a single usage, and must match one of the entries in what the SPD file declares as the set of possible Item Types. -->\r
-                        <xs:attribute name="PcdItemType" type="PcdItemTypes" use="required"/>\r
-                    </xs:complexType>\r
-                </xs:element>\r
-            </xs:sequence>\r
-        </xs:complexType>\r
-    </xs:element>\r
+    <!-- Use in Final -->\r
     <xs:element name="MsaFileList">\r
         <xs:annotation>\r
             <xs:documentation xml:lang="en">Surface Area Package Description (SPD) list of Module Surface Area files</xs:documentation>\r
         </xs:annotation>\r
         <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="0" maxOccurs="unbounded" name="Filename">\r
-                    <xs:complexType>\r
-                        <xs:simpleContent>\r
-                            <xs:extension base="xs:anyURI">\r
-                                <xs:attributeGroup ref="ModuleNameSaAttributes"/>\r
-                            </xs:extension>\r
-                        </xs:simpleContent>\r
-                    </xs:complexType>\r
-                </xs:element>\r
+                <xs:element minOccurs="0" maxOccurs="unbounded" name="Filename" type="PathAndFilename"/>\r
             </xs:sequence>\r
         </xs:complexType>\r
     </xs:element>\r
             </xs:simpleContent>\r
         </xs:complexType>\r
     </xs:element>\r
+    <xs:element name="ProcessStep">\r
+        <xs:complexType>\r
+            <xs:sequence>\r
+                <xs:element minOccurs="1" maxOccurs="1" name="ToolName" type="xs:string"/>\r
+                <xs:element minOccurs="1" maxOccurs="1" name="ToolArgs" type="xs:string"/>\r
+                <!-- Input patterns  to be processed by the tool above -->\r
+                <xs:element minOccurs="1" maxOccurs="unbounded" name="InputPattern" type="xs:string"/>\r
+                <!-- A pattern to match for the output -->\r
+                <xs:element minOccurs="1" maxOccurs="1" name="OutputPattern" type="xs:string"/>\r
+            </xs:sequence>\r
+            <xs:attributeGroup ref="SectionAttributes"/>\r
+        </xs:complexType>\r
+    </xs:element>    \r
+    <xs:element name="FfsFormatDeclarations">\r
+        <xs:complexType>\r
+            <xs:sequence>\r
+                <xs:element minOccurs="1" maxOccurs="unbounded" name="FfsFormatDeclaration">\r
+                    <!-- Required Attributes are the FfsFormatKeyword and SupModuleList -->\r
+                    <xs:complexType>\r
+                        <xs:sequence>\r
+                            <xs:element minOccurs="1" maxOccurs="unbounded" ref="ProcessStep"/>\r
+                        </xs:sequence>\r
+                        <xs:attributeGroup ref="FfsAttributes"/>\r
+                    </xs:complexType>\r
+                </xs:element>\r
+            </xs:sequence>\r
+        </xs:complexType>\r
+    </xs:element>\r
+    <xs:element name="PackageDefinitions">\r
+        <xs:complexType>\r
+            <xs:sequence>\r
+                <xs:element minOccurs="1" maxOccurs="1" name="ReadOnly" type="xs:boolean" default="false"/>\r
+                <xs:element minOccurs="1" maxOccurs="1" name="RePackage" type="xs:boolean" default="false"/>\r
+            </xs:sequence>\r
+        </xs:complexType>\r
+    </xs:element>    \r
     <xs:element name="PCDs">\r
         <!-- PCDs section is going away to be replaced by something else TB Named later -->\r
         <xs:annotation>\r
     </xs:element>\r
     <xs:element name="PackageDependencies">\r
         <xs:annotation>\r
-            <xs:documentation xml:lang="en">This tag is used in the Package Surface Area Description File to track package dependencies for a module</xs:documentation>\r
+            <xs:documentation xml:lang="en">This tag is used in the Package Surface Area Description File (SPD) to track package dependencies for a module</xs:documentation>\r
         </xs:annotation>\r
         <xs:complexType>\r
             <xs:sequence maxOccurs="unbounded">\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" ref="PackageName"/>\r
+                <xs:choice>\r
+                    <xs:element minOccurs="1" maxOccurs="unbounded" ref="Package"/>\r
+                    <xs:element minOccurs="1" maxOccurs="unbounded" ref="PackageName"/>                    \r
+                </xs:choice>\r
             </xs:sequence>\r
             <xs:attributeGroup ref="PackageNameAttributes"/>\r
         </xs:complexType>\r
     </xs:element>\r
     <xs:element name="PackageHeaders">\r
         <xs:annotation>\r
-            <xs:documentation xml:lang="en">This defines the minimum header file needed to support a given ModuleType.</xs:documentation>\r
+            <xs:documentation xml:lang="en">This is a child of PackageSurfaceArea (SPD) </xs:documentation>\r
         </xs:annotation>\r
         <xs:complexType>\r
             <xs:sequence>\r
-                <xs:element minOccurs="1" maxOccurs="unbounded" ref="IncludeHeader"/>\r
+                <xs:choice>\r
+                    <!-- DO NOT USE! removing IncludeHeader, use IncludePkgHeader instead. -->\r
+                    <xs:element minOccurs="0" maxOccurs="unbounded" ref="IncludeHeader"/>\r
+                    <xs:element minOccurs="0" maxOccurs="unbounded" name="IncludePkgHeader">\r
+                        <xs:complexType>\r
+                            <xs:simpleContent>\r
+                                <xs:extension base="PathAndFilename">\r
+                                    <xs:attributeGroup ref="PackageHeaderAttributes"/>\r
+                                </xs:extension>\r
+                            </xs:simpleContent>\r
+                        </xs:complexType>\r
+                    </xs:element>\r
+                </xs:choice>\r
             </xs:sequence>\r
         </xs:complexType>\r
     </xs:element>\r
         </xs:annotation>\r
         <xs:complexType>\r
             <xs:sequence maxOccurs="unbounded">\r
-                <xs:element minOccurs="1" name="Package">\r
+                <xs:element minOccurs="0" name="Package">\r
                     <xs:annotation>\r
                         <xs:documentation xml:lang="en">This tag is used in the Framework Package Database File to track individual package information. The Path is a relative path to the SPD File.</xs:documentation>\r
                     </xs:annotation>\r
                         <xs:attributeGroup ref="PackageAttributes"/>\r
                     </xs:complexType>\r
                 </xs:element>\r
+                <xs:element name="Filename" type="PathAndFilename" minOccurs="0" maxOccurs="unbounded"/>\r
             </xs:sequence>\r
         </xs:complexType>\r
     </xs:element>\r
+    <xs:element name="Package">\r
+        <xs:annotation>\r
+            <xs:documentation xml:lang="en">This tag is used in the Package Surface Area Description File to track package dependencies for a module (SPD) </xs:documentation>\r
+        </xs:annotation>\r
+        <xs:complexType mixed="true">\r
+            <xs:simpleContent>\r
+                <xs:extension base="UiNameType">\r
+                    <xs:attributeGroup ref="PackageAttributes"/>\r
+                </xs:extension>\r
+            </xs:simpleContent>\r
+        </xs:complexType>\r
+    </xs:element>\r
     <xs:element name="PackageName">\r
         <xs:annotation>\r
             <xs:documentation xml:lang="en">This tag is used in the Package Surface Area Description File to track package dependencies for a module (SPD) </xs:documentation>\r
         </xs:annotation>\r
         <xs:complexType>\r
             <xs:simpleContent>\r
-                <xs:extension base="BaseNameConvention">\r
+                <xs:extension base="UiNameType">\r
                     <xs:attributeGroup ref="PackageAttributes"/>\r
                 </xs:extension>\r
             </xs:simpleContent>\r
                     <xs:complexType>\r
                         <xs:sequence>\r
                             <xs:element minOccurs="1" maxOccurs="1" ref="C_Name"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="Token" type="HexDoubleWordDataType"/>\r
+                            <xs:element minOccurs="1" maxOccurs="1" name="Token" type="TokenDataType"/>\r
                             <xs:element minOccurs="0" maxOccurs="1" name="TokenSpaceGuid" type="GuidType"/>\r
                             <xs:element minOccurs="1" maxOccurs="1" name="DatumType" type="PcdDataTypes"/>\r
-                            <xs:group minOccurs="0" maxOccurs="1" ref="SkuGroup"/>\r
-                            <xs:choice minOccurs="0" maxOccurs="1">\r
-                                <xs:group minOccurs="0" maxOccurs="1" ref="HiiEnable"/>\r
-                                <xs:group minOccurs="0" maxOccurs="1" ref="VpdEnable"/>\r
-                            </xs:choice>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="DatumSize" type="DatumSizeLimitation"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="Value" type="xs:normalizedString"/>\r
+                            <xs:element minOccurs="0" maxOccurs="1" name="MaxDatumSize" type="DatumSizeLimitation"/>\r
+                            <xs:element minOccurs="1" maxOccurs="unbounded" name="SkuInfo">\r
+                                <xs:complexType>\r
+                                    <xs:sequence>\r
+                                        <xs:element minOccurs="1" maxOccurs="1" name="SkuId" type="xs:nonNegativeInteger"/>\r
+                                        <xs:choice>\r
+                                            <xs:group minOccurs="0" maxOccurs="1" ref="HiiEnable"/>\r
+                                            <xs:group minOccurs="0" maxOccurs="1" ref="VpdEnable"/>\r
+                                            <xs:group minOccurs="0" maxOccurs="1" ref="DefaultGroup"/>\r
+                                        </xs:choice>\r
+                                    </xs:sequence>\r
+                                </xs:complexType>\r
+                            </xs:element>\r
                         </xs:sequence>\r
                         <xs:attributeGroup ref="PcdAttributes"/>\r
                     </xs:complexType>\r
                     <xs:complexType>\r
                         <xs:sequence>\r
                             <xs:element minOccurs="1" maxOccurs="1" ref="C_Name"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="Token" type="HexDoubleWordDataType"/>\r
+                            <xs:element minOccurs="1" maxOccurs="1" name="Token" type="TokenDataType"/>\r
                             <xs:element minOccurs="0" maxOccurs="1" name="TokenSpaceGuid" type="GuidType"/>\r
                             <xs:element minOccurs="1" maxOccurs="1" name="DatumType" type="PcdDataTypes"/>\r
-                            <xs:group minOccurs="0" maxOccurs="1" ref="SkuGroup"/>\r
-                            <xs:choice minOccurs="0" maxOccurs="1">\r
-                                <xs:group minOccurs="0" maxOccurs="1" ref="HiiEnable"/>\r
-                                <xs:group minOccurs="0" maxOccurs="1" ref="VpdEnable"/>\r
-                            </xs:choice>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="DatumSize" type="DatumSizeLimitation"/>\r
+                            <xs:element minOccurs="0" maxOccurs="1" name="MaxDatumSize" type="DatumSizeLimitation"/>                            \r
                             <xs:element minOccurs="0" maxOccurs="1" name="Value" type="xs:normalizedString"/>\r
                         </xs:sequence>\r
-                        <xs:attributeGroup ref="PcdAttributes"/>\r
+                        <xs:attributeGroup ref="PcdBuildDefinitionAttributes"/>\r
                     </xs:complexType>\r
                 </xs:element>\r
             </xs:sequence>\r
         </xs:complexType>\r
     </xs:element>\r
+    <xs:group name="DefaultGroup">\r
+        <xs:sequence>\r
+            <xs:element minOccurs="1" maxOccurs="1" name="Value" type="xs:normalizedString"/>\r
+        </xs:sequence>\r
+    </xs:group>\r
     <xs:group name="HiiEnable">\r
         <xs:annotation>\r
             <xs:documentation xml:lang="en">If HiiEnable group is specified, then HiiEnable is default true</xs:documentation>\r
         </xs:annotation>\r
         <xs:sequence>\r
-            <xs:element minOccurs="0" maxOccurs="1" name="VariableName" type="xs:normalizedString"/>\r
+            <xs:element minOccurs="0" maxOccurs="1" name="VariableName" type="VariableNameDataType"/>\r
             <xs:element minOccurs="0" maxOccurs="1" name="VariableGuid" type="VariableGuidType"/>\r
             <xs:element minOccurs="0" maxOccurs="1" name="VariableOffset" type="Hex64BitDataType"/>\r
+            <xs:element minOccurs="0" maxOccurs="1" name="HiiDefaultValue" type="xs:normalizedString"/>\r
         </xs:sequence>\r
     </xs:group>\r
     <xs:group name="VpdEnable">\r
             <xs:element minOccurs="0" maxOccurs="1" name="VpdOffset" type="Hex64BitDataType"/>\r
         </xs:sequence>\r
     </xs:group>\r
-    <xs:group name="SkuGroup">\r
-        <xs:sequence>\r
-            <xs:element default="0x00" minOccurs="0" maxOccurs="1" name="SkuSet" type="SkuListType"/>\r
-            <xs:element default="0x00" minOccurs="0" maxOccurs="1" name="SkuList" type="SkuListType"/>\r
-            <xs:element default="false" minOccurs="0" maxOccurs="1" name="SkuDataArrayEnable" type="xs:boolean"/>\r
-            <xs:element minOccurs="0" maxOccurs="unbounded" name="SkuData">\r
-                <xs:complexType>\r
-                    <xs:sequence minOccurs="1">\r
-                        <xs:element name="Id" type="xs:int"/>\r
-                        <xs:element name="Value" type="xs:normalizedString"/>\r
-                    </xs:sequence>\r
-                </xs:complexType>\r
-            </xs:element>\r
-        </xs:sequence>\r
-    </xs:group>\r
     <xs:element name="PcdCoded">\r
         <xs:annotation>\r
             <xs:documentation xml:lang="en">Child of Module Surface Area Description (MSA)</xs:documentation>\r
                         <xs:sequence>\r
                             <xs:element minOccurs="1" maxOccurs="1" ref="C_Name"/>\r
                             <xs:element minOccurs="0" maxOccurs="1" name="DefaultValue" type="DefaultValue"/>\r
-                            <xs:element minOccurs="0" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+                            <xs:element minOccurs="0" maxOccurs="1" ref="HelpText"/>\r
                         </xs:sequence>\r
                         <!-- MSA file declares a single usage, and must match one of the entries in what the SPD file declares as the set of possible Item Types. -->\r
                         <xs:attribute name="PcdItemType" type="PcdItemTypes" use="required"/>\r
             </xs:sequence>\r
         </xs:complexType>\r
     </xs:element>\r
+    <!-- LAH This is PcdDeclarations FINAL version -->\r
     <xs:element name="PcdDeclarations">\r
         <xs:annotation>\r
             <xs:documentation xml:lang="en">Child of Package Surface Area Description (SPD)</xs:documentation>\r
-            <xs:documentation xml:lang="en">This permits entering information about a package's PCD information</xs:documentation>\r
+            <xs:documentation xml:lang="en">This section is for entering information about a package's PCDs</xs:documentation>\r
         </xs:annotation>\r
         <xs:complexType>\r
             <xs:sequence minOccurs="1">\r
                 <xs:element maxOccurs="unbounded" name="PcdEntry">\r
-                    <xs:annotation>\r
-                        <xs:documentation xml:lang="en">This is the valid content of the PCD table of a Module. The contents may not be wired at build time, and these only refer to Platform Build values, not modules.</xs:documentation>\r
-                        <xs:documentation xml:lang="en">This element is valid for PcdInfo.xml and FPD files.</xs:documentation>\r
-                        <xs:documentation xml:lang="en">There is ONE required Attribute, ItemType</xs:documentation>\r
-                    </xs:annotation>\r
                     <xs:complexType>\r
                         <xs:sequence>\r
                             <xs:element minOccurs="1" maxOccurs="1" ref="C_Name"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="Token" type="Token"/>\r
+                            <xs:element minOccurs="1" maxOccurs="1" name="Token" type="TokenDataType"/>\r
                             <xs:element minOccurs="1" maxOccurs="1" name="TokenSpaceGuid" type="GuidType"/>\r
                             <xs:element minOccurs="1" maxOccurs="1" name="DatumType" type="PcdDataTypes"/>\r
                             <xs:element minOccurs="1" maxOccurs="1" name="ValidUsage" type="PcdListType"/>\r
                             <xs:element minOccurs="0" maxOccurs="1" name="DefaultValue" type="DefaultValue"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="HelpText" type="Paragraph"/>\r
+                            <xs:element minOccurs="1" maxOccurs="1" ref="HelpText"/>\r
                         </xs:sequence>\r
-                        <xs:attributeGroup ref="PcdAttributes"/>\r
+                        <xs:attributeGroup ref="PcdDeclarationAttributes"/>\r
                     </xs:complexType>\r
                 </xs:element>\r
             </xs:sequence>\r
         </xs:complexType>\r
     </xs:element>\r
     <xs:element name="PpiDeclarations">\r
+        <xs:annotation>\r
+            <xs:documentation xml:lang="en">This is a child of PackageSurfaceArea (SPD) </xs:documentation>\r
+        </xs:annotation>\r
         <xs:complexType>\r
             <xs:sequence>\r
                 <xs:element minOccurs="1" maxOccurs="unbounded" name="Entry">\r
                         <xs:sequence>\r
                             <xs:element minOccurs="1" maxOccurs="1" ref="C_Name"/>\r
                             <xs:choice>\r
+                                <!-- DO NOT USE removing Guid in final, use GuidValue instead -->\r
                                 <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
                                 <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
                             </xs:choice>\r
-                            <xs:element minOccurs="0" maxOccurs="unbounded" name="FeatureFlag" type="xs:normalizedString"/>\r
+                            <xs:element minOccurs="0" maxOccurs="1" ref="HelpText"/>\r
                         </xs:sequence>\r
-                        <xs:attribute name="Name" type="xs:normalizedString" use="required"/>\r
+                        <xs:attributeGroup ref="PpiDeclarationAttributes"/>\r
                     </xs:complexType>\r
                 </xs:element>\r
             </xs:sequence>\r
         </xs:complexType>\r
     </xs:element>\r
     <xs:element name="ProtocolDeclarations">\r
+        <xs:annotation>\r
+            <xs:documentation xml:lang="en">This is a child of PackageSurfaceArea (SPD) </xs:documentation>\r
+        </xs:annotation>\r
         <xs:complexType>\r
             <xs:sequence>\r
                 <xs:element minOccurs="1" maxOccurs="unbounded" name="Entry">\r
                     <xs:complexType>\r
                         <xs:sequence>\r
                             <xs:element minOccurs="1" maxOccurs="1" ref="C_Name"/>\r
-                            <xs:element minOccurs="1" maxOccurs="1" ref="Guid"/>\r
-                            <xs:element minOccurs="0" maxOccurs="unbounded" name="FeatureFlag" type="C_Name"/>\r
+                            <xs:choice>\r
+                                <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
+                                <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
+                            </xs:choice>\r
+                            <xs:element minOccurs="0" maxOccurs="1" ref="HelpText"/>\r
                         </xs:sequence>\r
-                        <xs:attribute name="Name" type="xs:normalizedString" use="required"/>\r
+                        <xs:attributeGroup ref="ProtocolDeclarationAttributes"/>\r
                     </xs:complexType>\r
                 </xs:element>\r
             </xs:sequence>\r
             </xs:sequence>\r
         </xs:complexType>\r
     </xs:element>\r
+    <xs:element name="SkuInfo">\r
+        <xs:complexType>\r
+            <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
+                <xs:element name="UiSkuName">\r
+                    <xs:complexType>\r
+                        <xs:simpleContent>\r
+                            <xs:extension base="UiNameType">\r
+                                <xs:attribute name="SkuID" type="xs:nonNegativeInteger" use="required"/>\r
+                            </xs:extension>\r
+                        </xs:simpleContent>\r
+                    </xs:complexType>\r
+                </xs:element>\r
+            </xs:sequence>\r
+        </xs:complexType>\r
+    </xs:element>\r
     <xs:element name="Specification">\r
         <xs:annotation>\r
             <xs:documentation xml:lang="en">This string is used to provide the name and version of the Specification that the component conforms to.</xs:documentation>\r
         <xs:complexType>\r
             <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
                 <xs:element name="SystemTable">\r
-                    <xs:complexType>\r
-                        <xs:sequence>\r
+                    <xs:complexType mixed="true">\r
+                        <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
+                            <!-- Remove Entry from Use -->\r
                             <xs:element minOccurs="0" maxOccurs="1" name="Entry" type="xs:normalizedString"/>\r
                         </xs:sequence>\r
                         <xs:attributeGroup ref="SystemTableAttributes"/>\r
     </xs:element>\r
     <xs:element name="UserExtensions">\r
         <xs:complexType>\r
-            <xs:complexContent mixed="true">\r
-                <xs:extension base="xs:anyType">\r
-                    <xs:attribute name="UserID" type="xs:NCName" use="required"/>\r
-                    <xs:attribute name="Identifier" type="xs:integer" use="required"/>\r
-                </xs:extension>\r
-            </xs:complexContent>\r
+            <xs:sequence>\r
+                <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax" namespace="##local"/>\r
+            </xs:sequence>\r
+            <xs:attribute name="UserID" type="xs:NCName" use="required"/>\r
+            <xs:attribute name="Identifier" type="xs:integer" use="required"/>\r
         </xs:complexType>\r
     </xs:element>\r
     <xs:element name="Variables">\r
         <xs:annotation>\r
-            <xs:documentation xml:lang="en">A list of EFI Variables described by GUID string pair.</xs:documentation>\r
+            <xs:documentation xml:lang="en">An MSA FILE list of EFI Variables described by string pair.</xs:documentation>\r
         </xs:annotation>\r
         <xs:complexType>\r
             <xs:sequence minOccurs="1" maxOccurs="unbounded">\r
                     </xs:annotation>\r
                     <xs:complexType>\r
                         <xs:sequence>\r
-                            <xs:element minOccurs="1" maxOccurs="1" name="String" type="xs:normalizedString"/>\r
+                            <xs:choice>\r
+                                <!-- DO NOT USE remove String from final -->\r
+                                <xs:element minOccurs="1" maxOccurs="1" name="String" type="xs:normalizedString"/>\r
+                                <!-- Make VariableName required -->\r
+                                <xs:element minOccurs="0" maxOccurs="1" name="VariableName" type="VariableNameDataType"/>\r
+                            </xs:choice>\r
                             <xs:choice minOccurs="1">\r
+                                <!-- DO NOT USE, use GuidC_Name instead -->\r
                                 <xs:element minOccurs="0" maxOccurs="1" ref="Guid"/>\r
+                                <!-- DO NOT USE, use GuidC_Name instead -->\r
                                 <xs:element minOccurs="0" maxOccurs="1" ref="GuidValue"/>\r
+                                <!-- Make GuidC_Name required -->\r
+                                <xs:element minOccurs="0" maxOccurs="1" name="GuidC_Name" type="GuidC_NameType"/>\r
                             </xs:choice>\r
+                            <!-- DO NOT USE, removiing  ByteOffset, Bit Offset and OffsetBitSize-->\r
                             <xs:element minOccurs="0" maxOccurs="1" name="ByteOffset" type="HexWordDataType">\r
                                 <xs:annotation>\r
                                     <xs:documentation xml:lang="en">This entry represents the Hex Byte Offset {0x0, 0xn} to where the data starts.</xs:documentation>\r
         </xs:complexType>\r
     </xs:element>\r
     <xs:element name="Version" type="xs:normalizedString"/>\r
+    <xs:element name="FarList">\r
+        <xs:annotation>\r
+            <xs:documentation xml:lang="en">This tag is used in the Framework Package Database File to track all DISTRIBUTION packages (FAR files) installed in a workspace. (Database)</xs:documentation>\r
+        </xs:annotation>\r
+        <xs:complexType>\r
+            <xs:sequence>\r
+                <xs:element minOccurs="1" maxOccurs="unbounded" name="Filename" type="PathAndFilename"/>\r
+            </xs:sequence>\r
+        </xs:complexType>\r
+    </xs:element>    \r
 </xs:schema>\r