1<?xml version="1.0" encoding="UTF-8"?>
2<schema xmlns="http://www.w3.org/2001/XMLSchema"
3	targetNamespace="http://nouveau.freedesktop.org/"
4	xmlns:rng="http://nouveau.freedesktop.org/"
5	elementFormDefault="qualified">
6
7	<annotation>
8		<documentation>
9			An updated version of the old rules.xml file from the
10			RivaTV project. Specifications by Pekka Paalanen,
11			preliminary attempt by KoalaBR,
12			first working version by Jakob Bornecrantz.
13			For specifications, see the file rules-ng-format.txt
14			in Nouveau CVS module 'rules-ng'.
15		</documentation>
16		<documentation>Version 0.1</documentation>
17	</annotation>
18
19
20	<!-- Elements -->
21
22	<element name="database"       type="rng:databaseType" />
23	<element name="import"         type="rng:importType" />
24	<element name="copyright"      type="rng:copyrightType" />
25	<element name="domain"         type="rng:domainType" />
26	<element name="array"          type="rng:arrayType" />
27	<element name="stripe"         type="rng:stripeType" />
28	<element name="reg64"          type="rng:registerType" />
29	<element name="reg32"          type="rng:registerType" />
30	<element name="bitset"         type="rng:bitsetType" />
31	<element name="bitfield"       type="rng:bitfieldType" />
32	<element name="enum"           type="rng:enumType" />
33	<element name="value"          type="rng:valueType" />
34
35	<!-- Copyright elements -->
36	<element name="author"         type="rng:authorType" />
37	<element name="nick"           type="rng:nickType" />
38	<element name="license"        type="rng:docType" />
39
40	<!-- Documentation elements -->
41
42	<!-- FIXME: allowed only one  per parent element -->
43	<element name="brief" type="rng:briefType" />
44
45	<element name="doc"  type="rng:docType" />
46	<element name="b"    type="rng:textformatType" />
47	<element name="i"    type="rng:textformatType" />
48	<element name="u"    type="rng:textformatType" />
49	<element name="code" type="rng:textcodeType" />
50	<element name="ul"   type="rng:listType" />
51	<element name="ol"   type="rng:listType" />
52	<element name="li"   type="rng:listitemType" />
53
54	<!-- Copyright element types -->
55
56	<complexType name="authorType" mixed="true">
57		<annotation>
58			<documentation>
59				register database author
60			</documentation>
61		</annotation>
62		<choice minOccurs="0" maxOccurs="unbounded">
63			<element ref="rng:nick" />
64		</choice>
65		<attribute name="name" type="string" use="required" />
66		<attribute name="email" type="string" use="required" />
67	</complexType>
68
69	<complexType name="nickType">
70		<annotation>
71			<documentation>nickType</documentation>
72		</annotation>
73		<attribute name="name" type="string" use="required" />
74	</complexType>
75
76	<!-- Database element types -->
77
78	<complexType name="databaseType">
79		<annotation>
80			<documentation>databaseType</documentation>
81		</annotation>
82		<choice minOccurs="0" maxOccurs="unbounded">
83			<group ref="rng:docGroup" />
84			<group ref="rng:topGroup" />
85		</choice>
86	</complexType>
87
88	<complexType name="importType">
89		<annotation>
90			<documentation>importType</documentation>
91		</annotation>
92		<attribute name="file" type="string" use="required" />
93	</complexType>
94
95	<complexType name="copyrightType">
96		<annotation>
97			<documentation>copyrightType</documentation>
98		</annotation>
99		<choice minOccurs="0" maxOccurs="unbounded">
100			<group ref="rng:docGroup" />
101			<group ref="rng:topGroup" />
102			<element ref="rng:author" />
103			<element ref="rng:license" />
104		</choice>
105		<attribute name="year" type="nonNegativeInteger" use="optional" />
106	</complexType>
107
108	<complexType name="domainType">
109		<annotation>
110			<documentation>domainType</documentation>
111		</annotation>
112		<choice minOccurs="0" maxOccurs="unbounded">
113			<group ref="rng:docGroup" />
114			<group ref="rng:topGroup" />
115			<group ref="rng:regarrayGroup" />
116		</choice>
117		<attribute name="name" type="NMTOKEN" use="required" />
118		<attribute name="prefix" type="NMTOKENS" use="optional" />
119		<attribute name="width" type="rng:DomainWidth" use="optional" />
120		<attribute name="varset" type="NMTOKEN" use="optional" />
121		<attribute name="variants" type="string" use="optional" />
122	</complexType>
123
124	<complexType name="arrayType">
125		<annotation>
126			<documentation>arrayType</documentation>
127		</annotation>
128		<choice minOccurs="0" maxOccurs="unbounded">
129			<group ref="rng:docGroup" />
130			<group ref="rng:topGroup" />
131			<group ref="rng:regarrayGroup" />
132		</choice>
133		<attribute name="name" type="NMTOKEN" use="optional" />
134		<attribute name="offset" type="rng:HexOrNumber" use="optional" />
135		<attribute name="offsets" type="string" use="optional"/>
136		<attribute name="doffsets" type="string" use="optional"/>
137		<attribute name="index" type="NMTOKENS" use="optional"/>
138		<attribute name="stride" type="rng:HexOrNumber" use="required" />
139		<attribute name="length" type="rng:HexOrNumber" use="required" />
140		<attribute name="varset" type="NMTOKEN" use="optional" />
141		<attribute name="variants" type="string" use="optional" />
142		<attribute name="usage" type="string" use="optional" />
143	</complexType>
144
145	<complexType name="stripeType">
146		<annotation>
147			<documentation>stripeType</documentation>
148		</annotation>
149		<choice minOccurs="0" maxOccurs="unbounded">
150			<group ref="rng:docGroup" />
151			<group ref="rng:topGroup" />
152			<group ref="rng:regarrayGroup" minOccurs="0" />
153		</choice>
154		<attribute name="varset" type="NMTOKEN" use="optional" />
155		<attribute name="variants" type="string" use="optional" />
156		<attribute name="prefix" type="NMTOKENS" use="optional" />
157	</complexType>
158
159	<complexType name="registerType">
160		<annotation>
161			<documentation>
162				registerType used by reg32, reg64
163			</documentation>
164		</annotation>
165		<choice minOccurs="0" maxOccurs="unbounded">
166			<group ref="rng:docGroup" />
167			<group ref="rng:topGroup" />
168			<element ref="rng:value" />
169			<element ref="rng:bitfield" />
170		</choice>
171		<attribute name="name" type="NMTOKEN" use="required" />
172		<attribute name="offset" type="rng:HexOrNumber" use="required" />
173		<attribute name="type" type="NMTOKENS" use="optional" />
174		<attribute name="shr" type="nonNegativeInteger" use="optional" />
175		<attribute name="varset" type="NMTOKEN" use="optional" />
176		<attribute name="variants" type="string" use="optional" />
177		<attribute name="stride" type="rng:HexOrNumber" use="optional" />
178		<attribute name="length" type="rng:HexOrNumber" use="optional" />
179		<attribute name="high" type="nonNegativeInteger" use="optional" />
180		<attribute name="low" type="nonNegativeInteger" use="optional" />
181		<attribute name="pos" type="nonNegativeInteger" use="optional" />
182		<attribute name="align" type="nonNegativeInteger" use="optional" />
183		<attribute name="radix" type="nonNegativeInteger" use="optional" />
184		<attribute name="usage" type="string" use="optional" />
185	</complexType>
186
187	<complexType name="bitsetType">
188		<annotation>
189			<documentation>bitsetType</documentation>
190		</annotation>
191		<choice maxOccurs="unbounded">
192			<element ref="rng:bitfield" />
193			<group ref="rng:docGroup" />
194			<group ref="rng:topGroup" />
195		</choice>
196		<attribute name="name" type="NMTOKEN" use="required" />
197		<attribute name="inline" type="rng:Boolean" use="optional" />
198		<attribute name="varset" type="NMTOKEN" use="optional" />
199	</complexType>
200
201	<complexType name="bitfieldType">
202		<annotation>
203			<documentation>bitfieldType</documentation>
204		</annotation>
205		<choice minOccurs="0" maxOccurs="unbounded">
206			<element ref="rng:value" maxOccurs="unbounded" />
207			<group ref="rng:docGroup" />
208			<group ref="rng:topGroup" />
209		</choice>
210		<attribute name="name" type="NMTOKEN" use="required" />
211		<attribute name="high" type="nonNegativeInteger" use="optional" />
212		<attribute name="low" type="nonNegativeInteger" use="optional" />
213		<attribute name="pos" type="nonNegativeInteger" use="optional" />
214		<attribute name="radix" type="nonNegativeInteger" use="optional" />
215		<attribute name="type" type="NMTOKENS" use="optional" />
216		<attribute name="varset" type="NMTOKEN" use="optional" />
217		<attribute name="variants" type="string" use="optional" />
218		<attribute name="addvariant" type="rng:Boolean" use="optional" />
219		<attribute name="shr" type="nonNegativeInteger" use="optional" />
220	</complexType>
221
222	<complexType name="enumType">
223		<annotation>
224			<documentation>enumType</documentation>
225		</annotation>
226		<choice maxOccurs="unbounded">
227			<element ref="rng:value" />
228			<group ref="rng:docGroup" />
229			<group ref="rng:topGroup" />
230		</choice>
231		<attribute name="name" type="NMTOKEN" use="required" />
232		<attribute name="bare" type="rng:Boolean" use="optional" />
233		<attribute name="prefix" type="NMTOKENS" use="optional" />
234		<attribute name="varset" type="NMTOKEN" use="optional" />
235	</complexType>
236
237	<complexType name="valueType">
238		<annotation>
239			<documentation>valueType</documentation>
240		</annotation>
241		<choice minOccurs="0" maxOccurs="unbounded">
242			<group ref="rng:docGroup" />
243			<group ref="rng:topGroup" />
244		</choice>
245		<attribute name="name" type="NMTOKEN" use="required" />
246		<attribute name="value" type="string" use="optional" />
247		<attribute name="varset" type="NMTOKEN" use="optional" />
248		<attribute name="variants" type="string" use="optional" />
249	</complexType>
250
251	<!-- Documentation element types -->
252
253	<complexType name="briefType">
254		<annotation>
255			<documentation>
256				brief documentation, no markup
257			</documentation>
258		</annotation>
259		<simpleContent>
260			<extension base="string" />
261		</simpleContent>
262	</complexType>
263
264	<complexType name="docType" mixed="true">
265		<annotation>
266			<documentation>
267				root element of documentation sub-tree
268			</documentation>
269		</annotation>
270		<choice minOccurs="0" maxOccurs="unbounded">
271			<group ref="rng:textformatGroup" />
272			<group ref="rng:listGroup" />
273			<element ref="rng:code" />
274		</choice>
275	</complexType>
276
277	<complexType name="textformatType" mixed="true">
278		<annotation>
279			<documentation>
280				for bold, underline, italics
281			</documentation>
282		</annotation>
283		<choice minOccurs="0" maxOccurs="unbounded">
284			<group ref="rng:textformatGroup" />
285		</choice>
286	</complexType>
287
288	<complexType name="textcodeType">
289		<simpleContent>
290			<extension base="string">
291				<attribute name="title" type="string" />
292			</extension>
293		</simpleContent>
294	</complexType>
295
296	<complexType name="listType">
297		<annotation>
298			<documentation>
299				definition of a list, ordered or unordered
300			</documentation>
301		</annotation>
302		<choice minOccurs="0" maxOccurs="unbounded">
303			<element ref="rng:li" />
304		</choice>
305	</complexType>
306
307	<complexType name="listitemType" mixed="true">
308		<annotation>
309			<documentation>
310				items of a list
311			</documentation>
312		</annotation>
313		<choice minOccurs="0" maxOccurs="unbounded">
314			<group ref="rng:textformatGroup" />
315			<group ref="rng:listGroup" />
316			<element ref="rng:code" />
317		</choice>
318	</complexType>
319
320
321
322	<!-- Attribute value types -->
323
324	<simpleType name="Hexadecimal">
325		<restriction base="string">
326			<pattern value="0x[0-9a-f]+" />
327			<pattern value="0x[0-9A-F]+" />
328			<pattern value="[0-9]" />
329		</restriction>
330	</simpleType>
331
332	<simpleType name="HexOrNumber">
333		<annotation>
334			<documentation>HexOrNumber</documentation>
335		</annotation>
336		<union memberTypes="rng:Hexadecimal nonNegativeInteger" />
337	</simpleType>
338
339	<simpleType name="Boolean">
340		<restriction base="string">
341			<enumeration value="true" />
342			<enumeration value="1" />
343			<enumeration value="yes" />
344			<enumeration value="false" />
345			<enumeration value="0" />
346			<enumeration value="no" />
347		</restriction>
348	</simpleType>
349
350	<simpleType name="DomainWidth">
351		<annotation>
352			<documentation>DomainWidth</documentation>
353		</annotation>
354		<restriction base="string">
355			<enumeration value="32" />
356		</restriction>
357	</simpleType>
358
359
360
361	<!-- Element groups -->
362
363	<group name="topGroup">
364		<choice>
365			<element ref="rng:copyright" />
366			<element ref="rng:domain" />
367			<element ref="rng:enum" />
368			<element ref="rng:bitset" />
369			<element ref="rng:import" />
370		</choice>
371	</group>
372
373	<group name="regarrayGroup">
374		<choice>
375			<element ref="rng:reg64" />
376			<element ref="rng:reg32" />
377			<element ref="rng:array" />
378			<element ref="rng:stripe" />
379		</choice>
380	</group>
381
382	<group name="docGroup">
383		<choice>
384			<element ref="rng:brief" />
385			<element ref="rng:doc" />
386		</choice>
387	</group>
388
389	<group name="textformatGroup">
390		<choice>
391			<element ref="rng:b" />
392			<element ref="rng:i" />
393			<element ref="rng:u" />
394		</choice>
395	</group>
396
397	<group name="listGroup">
398		<choice>
399			<element ref="rng:ul" />
400			<element ref="rng:ol" />
401		</choice>
402	</group>
403
404</schema>
405