blob: a5a33412aed2f2352249240f615f4f40a343c572 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://nouveau.freedesktop.org/"
xmlns:rng="http://nouveau.freedesktop.org/"
elementFormDefault="qualified">
<annotation>
<documentation>
An updated version of the old rules.xml file from the
RivaTV project. Specifications by Pekka Paalanen,
preliminary attempt by KoalaBR,
first working version by Jakob Bornecrantz.
For specifications, see the file rules-ng-format.txt
in Nouveau CVS module 'rules-ng'.
</documentation>
<documentation>Version 0.1</documentation>
</annotation>
<!-- Elements -->
<element name="database" type="rng:databaseType" />
<element name="import" type="rng:importType" />
<element name="domain" type="rng:domainType" />
<element name="group" type="rng:groupType" />
<element name="use-group" type="rng:refType" />
<element name="array" type="rng:arrayType" />
<element name="stripe" type="rng:stripeType" />
<element name="reg64" type="rng:registerType" />
<element name="reg32" type="rng:registerType" />
<element name="reg16" type="rng:registerType" />
<element name="reg8" type="rng:registerType" />
<element name="bitset" type="rng:bitsetType" />
<element name="bitfield" type="rng:bitfieldType" />
<element name="enum" type="rng:enumType" />
<element name="value" type="rng:valueType" />
<!-- Documentation elements -->
<!-- FIXME: allowed only one per parent element -->
<element name="brief" type="rng:briefType" />
<element name="doc" type="rng:docType" />
<element name="b" type="rng:textformatType" />
<element name="i" type="rng:textformatType" />
<element name="u" type="rng:textformatType" />
<element name="code" type="rng:textcodeType" />
<element name="ul" type="rng:listType" />
<element name="ol" type="rng:listType" />
<element name="li" type="rng:listitemType" />
<!-- Database element types -->
<complexType name="databaseType">
<annotation>
<documentation>databaseType</documentation>
</annotation>
<choice minOccurs="0" maxOccurs="unbounded">
<group ref="rng:docGroup" />
<group ref="rng:topGroup" />
</choice>
</complexType>
<complexType name="importType">
<annotation>
<documentation>importType</documentation>
</annotation>
<attribute name="file" type="string" use="required" />
</complexType>
<complexType name="domainType">
<annotation>
<documentation>domainType</documentation>
</annotation>
<choice minOccurs="0" maxOccurs="unbounded">
<group ref="rng:docGroup" />
<group ref="rng:topGroup" />
<group ref="rng:regarrayGroup" />
</choice>
<attribute name="name" type="NMTOKEN" use="required" />
<attribute name="bare" type="boolean" use="optional" />
<attribute name="prefix" type="NMTOKENS" use="optional" />
<attribute name="width" type="rng:DomainWidth" use="optional" />
<attribute name="size" type="rng:Hexadecimal" use="optional" />
</complexType>
<complexType name="groupType">
<annotation>
<documentation>groupType</documentation>
</annotation>
<choice minOccurs="0" maxOccurs="unbounded">
<group ref="rng:docGroup" />
<group ref="rng:topGroup" />
<group ref="rng:regarrayGroup" />
</choice>
<attribute name="name" type="NMTOKEN" use="required" />
</complexType>
<complexType name="arrayType">
<annotation>
<documentation>arrayType</documentation>
</annotation>
<choice minOccurs="0" maxOccurs="unbounded">
<group ref="rng:docGroup" />
<group ref="rng:topGroup" />
<group ref="rng:regarrayGroup" />
</choice>
<attribute name="name" type="NMTOKEN" use="required" />
<attribute name="offset" type="rng:Hexadecimal" use="required" />
<attribute name="stride" type="rng:HexOrNumber" use="required" />
<attribute name="length" type="rng:HexOrNumber" use="required" />
<attribute name="varset" type="NMTOKEN" use="optional" />
<attribute name="variants" type="string" use="optional" />
</complexType>
<complexType name="stripeType">
<annotation>
<documentation>stripeType</documentation>
</annotation>
<choice minOccurs="0" maxOccurs="unbounded">
<group ref="rng:docGroup" />
<group ref="rng:topGroup" />
<group ref="rng:regarrayGroup" minOccurs="0" />
</choice>
<attribute name="name" type="NMTOKEN" use="optional" />
<attribute name="offset" type="rng:Hexadecimal" use="optional" />
<attribute name="stride" type="rng:HexOrNumber" use="optional" />
<attribute name="length" type="rng:HexOrNumber" use="optional" />
<attribute name="varset" type="NMTOKEN" use="optional" />
<attribute name="variants" type="string" use="optional" />
<attribute name="prefix" type="NMTOKENS" use="optional" />
</complexType>
<complexType name="registerType">
<annotation>
<documentation>
registerType used by reg8, reg16, reg32, reg64
</documentation>
</annotation>
<choice minOccurs="0" maxOccurs="unbounded">
<group ref="rng:docGroup" />
<group ref="rng:topGroup" />
<element ref="rng:value" />
<element ref="rng:bitfield" />
</choice>
<attribute name="name" type="NMTOKEN" use="required" />
<attribute name="offset" type="rng:Hexadecimal" use="required" />
<attribute name="access" type="rng:Access" default="rw" use="optional" />
<attribute name="type" type="NMTOKENS" use="optional" />
<attribute name="shr" type="nonNegativeInteger" use="optional" />
<attribute name="varset" type="NMTOKEN" use="optional" />
<attribute name="variants" type="string" use="optional" />
<attribute name="stride" type="rng:HexOrNumber" use="optional" />
<attribute name="length" type="rng:HexOrNumber" use="optional" />
</complexType>
<complexType name="bitsetType">
<annotation>
<documentation>bitsetType</documentation>
</annotation>
<choice maxOccurs="unbounded">
<element ref="rng:bitfield" />
<group ref="rng:docGroup" />
<group ref="rng:topGroup" />
</choice>
<attribute name="name" type="NMTOKEN" use="required" />
<attribute name="inline" type="boolean" use="optional" />
<attribute name="bare" type="boolean" use="optional" />
<attribute name="prefix" type="NMTOKENS" use="optional" />
</complexType>
<complexType name="bitfieldType">
<annotation>
<documentation>bitfieldType</documentation>
</annotation>
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="rng:value" maxOccurs="unbounded" />
<group ref="rng:docGroup" />
<group ref="rng:topGroup" />
</choice>
<attribute name="name" type="NMTOKEN" use="required" />
<attribute name="high" type="nonNegativeInteger" use="optional" />
<attribute name="low" type="nonNegativeInteger" use="optional" />
<attribute name="pos" type="nonNegativeInteger" use="optional" />
<attribute name="type" type="NMTOKENS" use="optional" />
<attribute name="varset" type="NMTOKEN" use="optional" />
<attribute name="variants" type="string" use="optional" />
<attribute name="shr" type="nonNegativeInteger" use="optional" />
</complexType>
<complexType name="enumType">
<annotation>
<documentation>enumType</documentation>
</annotation>
<choice maxOccurs="unbounded">
<element ref="rng:value" />
<group ref="rng:docGroup" />
<group ref="rng:topGroup" />
</choice>
<attribute name="name" type="NMTOKEN" use="required" />
<attribute name="inline" type="boolean" use="optional" />
<attribute name="bare" type="boolean" use="optional" />
<attribute name="prefix" type="NMTOKENS" use="optional" />
</complexType>
<complexType name="valueType">
<annotation>
<documentation>valueType</documentation>
</annotation>
<choice minOccurs="0" maxOccurs="unbounded">
<group ref="rng:docGroup" />
<group ref="rng:topGroup" />
</choice>
<attribute name="name" type="NMTOKEN" use="required" />
<attribute name="value" type="string" use="optional" />
<attribute name="varset" type="NMTOKEN" use="optional" />
<attribute name="variants" type="string" use="optional" />
</complexType>
<complexType name="refType">
<annotation>
<documentation>refType</documentation>
</annotation>
<attribute name="ref" type="NMTOKEN" use="required" />
</complexType>
<!-- Documentation element types -->
<complexType name="briefType">
<annotation>
<documentation>
brief documentation, no markup
</documentation>
</annotation>
<simpleContent>
<extension base="string" />
</simpleContent>
</complexType>
<complexType name="docType" mixed="true">
<annotation>
<documentation>
root element of documentation sub-tree
</documentation>
</annotation>
<choice minOccurs="0" maxOccurs="unbounded">
<group ref="rng:textformatGroup" />
<group ref="rng:listGroup" />
<element ref="rng:code" />
</choice>
</complexType>
<complexType name="textformatType" mixed="true">
<annotation>
<documentation>
for bold, underline, italics
</documentation>
</annotation>
<choice minOccurs="0" maxOccurs="unbounded">
<group ref="rng:textformatGroup" />
</choice>
</complexType>
<complexType name="textcodeType">
<simpleContent>
<extension base="string">
<attribute name="title" type="string" />
</extension>
</simpleContent>
</complexType>
<complexType name="listType">
<annotation>
<documentation>
definition of a list, ordered or unordered
</documentation>
</annotation>
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="rng:li" />
</choice>
</complexType>
<complexType name="listitemType" mixed="true">
<annotation>
<documentation>
items of a list
</documentation>
</annotation>
<choice minOccurs="0" maxOccurs="unbounded">
<group ref="rng:textformatGroup" />
<group ref="rng:listGroup" />
<element ref="rng:code" />
</choice>
</complexType>
<!-- Attribute value types -->
<simpleType name="Hexadecimal">
<restriction base="string">
<pattern value="0x[0-9a-f]+" />
<pattern value="0x[0-9A-F]+" />
<pattern value="[0-9]" />
</restriction>
</simpleType>
<simpleType name="HexOrNumber">
<annotation>
<documentation>HexOrNumber</documentation>
</annotation>
<union memberTypes="rng:Hexadecimal nonNegativeInteger" />
</simpleType>
<simpleType name="Access">
<annotation>
<documentation>Access</documentation>
</annotation>
<restriction base="string">
<enumeration value="r" />
<enumeration value="w" />
<enumeration value="rw" />
</restriction>
</simpleType>
<simpleType name="DomainWidth">
<annotation>
<documentation>DomainWidth</documentation>
</annotation>
<restriction base="string">
<enumeration value="8" />
<enumeration value="16" />
<enumeration value="32" />
<enumeration value="64" />
</restriction>
</simpleType>
<!-- Element groups -->
<group name="topGroup">
<choice>
<element ref="rng:domain" />
<element ref="rng:enum" />
<element ref="rng:group" />
<element ref="rng:bitset" />
<element ref="rng:import" />
</choice>
</group>
<group name="regarrayGroup">
<choice>
<element ref="rng:reg64" />
<element ref="rng:reg32" />
<element ref="rng:reg16" />
<element ref="rng:reg8" />
<element ref="rng:array" />
<element ref="rng:stripe" />
<element ref="rng:use-group" />
</choice>
</group>
<group name="docGroup">
<choice>
<element ref="rng:brief" />
<element ref="rng:doc" />
</choice>
</group>
<group name="textformatGroup">
<choice>
<element ref="rng:b" />
<element ref="rng:i" />
<element ref="rng:u" />
</choice>
</group>
<group name="listGroup">
<choice>
<element ref="rng:ul" />
<element ref="rng:ol" />
</choice>
</group>
</schema>