1    /*
2     * Some or all of this work - Copyright (c) 2006 - 2021, Intel Corp.
3     * All rights reserved.
4     *
5     * Redistribution and use in source and binary forms, with or without modification,
6     * are permitted provided that the following conditions are met:
7     *
8     * Redistributions of source code must retain the above copyright notice,
9     * this list of conditions and the following disclaimer.
10     * Redistributions in binary form must reproduce the above copyright notice,
11     * this list of conditions and the following disclaimer in the documentation
12     * and/or other materials provided with the distribution.
13     * Neither the name of Intel Corporation nor the names of its contributors
14     * may be used to endorse or promote products derived from this software
15     * without specific prior written permission.
16     *
17     * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18     * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19     * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20     * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21     * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22     * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23     * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24     * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25     * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
26     * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27     */
28    /*
29     * Resource Descriptor macros
30     *
31     * QWord IO Resource Descriptor Macro
32     */
33    Name (P416, Package (0x25)
34    {
35        ResourceTemplate ()
36        {
37            QWordIO (ResourceProducer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
38                0xD8D9DADBDCDDDEDF, // Granularity
39                0xE0E1E2E3E4E5E6E7, // Range Minimum
40                0xE8E9EAEBECEDEEEF, // Range Maximum
41                0xF0F1F2F3F4F5F6F7, // Translation Offset
42                0xF8F9FAFBFCFDFEFF, // Length
43                ,, , TypeStatic, DenseTranslation)
44        },
45
46        ResourceTemplate ()
47        {
48            QWordIO (ResourceProducer, MinNotFixed, MaxNotFixed, SubDecode, EntireRange,
49                0xD8D9DADBDCDDDEDF, // Granularity
50                0xE0E1E2E3E4E5E6E7, // Range Minimum
51                0xE8E9EAEBECEDEEEF, // Range Maximum
52                0xF0F1F2F3F4F5F6F7, // Translation Offset
53                0xF8F9FAFBFCFDFEFF, // Length
54                ,, , TypeStatic, DenseTranslation)
55        },
56
57        ResourceTemplate ()
58        {
59            QWordIO (ResourceProducer, MinNotFixed, MaxFixed, PosDecode, EntireRange,
60                0xD8D9DADBDCDDDEDF, // Granularity
61                0xE0E1E2E3E4E5E6E7, // Range Minimum
62                0xE8E9EAEBECEDEEEF, // Range Maximum
63                0xF0F1F2F3F4F5F6F7, // Translation Offset
64                0xF8F9FAFBFCFDFEFF, // Length
65                ,, , TypeStatic, DenseTranslation)
66        },
67
68        ResourceTemplate ()
69        {
70            QWordIO (ResourceProducer, MinNotFixed, MaxFixed, SubDecode, EntireRange,
71                0xD8D9DADBDCDDDEDF, // Granularity
72                0xE0E1E2E3E4E5E6E7, // Range Minimum
73                0xE8E9EAEBECEDEEEF, // Range Maximum
74                0xF0F1F2F3F4F5F6F7, // Translation Offset
75                0xF8F9FAFBFCFDFEFF, // Length
76                ,, , TypeStatic, DenseTranslation)
77        },
78
79        ResourceTemplate ()
80        {
81            QWordIO (ResourceProducer, MinFixed, MaxNotFixed, PosDecode, EntireRange,
82                0xD8D9DADBDCDDDEDF, // Granularity
83                0xE0E1E2E3E4E5E6E7, // Range Minimum
84                0xE8E9EAEBECEDEEEF, // Range Maximum
85                0xF0F1F2F3F4F5F6F7, // Translation Offset
86                0xF8F9FAFBFCFDFEFF, // Length
87                ,, , TypeStatic, DenseTranslation)
88        },
89
90        ResourceTemplate ()
91        {
92            QWordIO (ResourceProducer, MinFixed, MaxNotFixed, SubDecode, EntireRange,
93                0xD8D9DADBDCDDDEDF, // Granularity
94                0xE0E1E2E3E4E5E6E7, // Range Minimum
95                0xE8E9EAEBECEDEEEF, // Range Maximum
96                0xF0F1F2F3F4F5F6F7, // Translation Offset
97                0xF8F9FAFBFCFDFEFF, // Length
98                ,, , TypeStatic, DenseTranslation)
99        },
100
101        ResourceTemplate ()
102        {
103            QWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
104                0xD8D9DADBDCDDDEDF, // Granularity
105                0xE0E1E2E3E4E5E6E7, // Range Minimum
106                0xE8E9EAEBECEDEEEF, // Range Maximum
107                0xF0F1F2F3F4F5F6F7, // Translation Offset
108                0xF8F9FAFBFCFDFEFF, // Length
109                ,, , TypeStatic, DenseTranslation)
110        },
111
112        ResourceTemplate ()
113        {
114            QWordIO (ResourceProducer, MinFixed, MaxFixed, SubDecode, EntireRange,
115                0xD8D9DADBDCDDDEDF, // Granularity
116                0xE0E1E2E3E4E5E6E7, // Range Minimum
117                0xE8E9EAEBECEDEEEF, // Range Maximum
118                0xF0F1F2F3F4F5F6F7, // Translation Offset
119                0xF8F9FAFBFCFDFEFF, // Length
120                ,, , TypeStatic, DenseTranslation)
121        },
122
123        ResourceTemplate ()
124        {
125            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
126                0xD8D9DADBDCDDDEDF, // Granularity
127                0xE0E1E2E3E4E5E6E7, // Range Minimum
128                0xE8E9EAEBECEDEEEF, // Range Maximum
129                0xF0F1F2F3F4F5F6F7, // Translation Offset
130                0xF8F9FAFBFCFDFEFF, // Length
131                ,, , TypeStatic, DenseTranslation)
132        },
133
134        ResourceTemplate ()
135        {
136            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, SubDecode, EntireRange,
137                0xD8D9DADBDCDDDEDF, // Granularity
138                0xE0E1E2E3E4E5E6E7, // Range Minimum
139                0xE8E9EAEBECEDEEEF, // Range Maximum
140                0xF0F1F2F3F4F5F6F7, // Translation Offset
141                0xF8F9FAFBFCFDFEFF, // Length
142                ,, , TypeStatic, DenseTranslation)
143        },
144
145        ResourceTemplate ()
146        {
147            QWordIO (ResourceConsumer, MinNotFixed, MaxFixed, PosDecode, EntireRange,
148                0xD8D9DADBDCDDDEDF, // Granularity
149                0xE0E1E2E3E4E5E6E7, // Range Minimum
150                0xE8E9EAEBECEDEEEF, // Range Maximum
151                0xF0F1F2F3F4F5F6F7, // Translation Offset
152                0xF8F9FAFBFCFDFEFF, // Length
153                ,, , TypeStatic, DenseTranslation)
154        },
155
156        ResourceTemplate ()
157        {
158            QWordIO (ResourceConsumer, MinNotFixed, MaxFixed, SubDecode, EntireRange,
159                0xD8D9DADBDCDDDEDF, // Granularity
160                0xE0E1E2E3E4E5E6E7, // Range Minimum
161                0xE8E9EAEBECEDEEEF, // Range Maximum
162                0xF0F1F2F3F4F5F6F7, // Translation Offset
163                0xF8F9FAFBFCFDFEFF, // Length
164                ,, , TypeStatic, DenseTranslation)
165        },
166
167        ResourceTemplate ()
168        {
169            QWordIO (ResourceConsumer, MinFixed, MaxNotFixed, PosDecode, EntireRange,
170                0xD8D9DADBDCDDDEDF, // Granularity
171                0xE0E1E2E3E4E5E6E7, // Range Minimum
172                0xE8E9EAEBECEDEEEF, // Range Maximum
173                0xF0F1F2F3F4F5F6F7, // Translation Offset
174                0xF8F9FAFBFCFDFEFF, // Length
175                ,, , TypeStatic, DenseTranslation)
176        },
177
178        ResourceTemplate ()
179        {
180            QWordIO (ResourceConsumer, MinFixed, MaxNotFixed, SubDecode, EntireRange,
181                0xD8D9DADBDCDDDEDF, // Granularity
182                0xE0E1E2E3E4E5E6E7, // Range Minimum
183                0xE8E9EAEBECEDEEEF, // Range Maximum
184                0xF0F1F2F3F4F5F6F7, // Translation Offset
185                0xF8F9FAFBFCFDFEFF, // Length
186                ,, , TypeStatic, DenseTranslation)
187        },
188
189        ResourceTemplate ()
190        {
191            QWordIO (ResourceConsumer, MinFixed, MaxFixed, PosDecode, EntireRange,
192                0xD8D9DADBDCDDDEDF, // Granularity
193                0xE0E1E2E3E4E5E6E7, // Range Minimum
194                0xE8E9EAEBECEDEEEF, // Range Maximum
195                0xF0F1F2F3F4F5F6F7, // Translation Offset
196                0xF8F9FAFBFCFDFEFF, // Length
197                ,, , TypeStatic, DenseTranslation)
198        },
199
200        ResourceTemplate ()
201        {
202            QWordIO (ResourceConsumer, MinFixed, MaxFixed, SubDecode, EntireRange,
203                0xD8D9DADBDCDDDEDF, // Granularity
204                0xE0E1E2E3E4E5E6E7, // Range Minimum
205                0xE8E9EAEBECEDEEEF, // Range Maximum
206                0xF0F1F2F3F4F5F6F7, // Translation Offset
207                0xF8F9FAFBFCFDFEFF, // Length
208                ,, , TypeStatic, DenseTranslation)
209        },
210
211        ResourceTemplate ()
212        {
213            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, NonISAOnlyRanges,
214                0xD8D9DADBDCDDDEDF, // Granularity
215                0xE0E1E2E3E4E5E6E7, // Range Minimum
216                0xE8E9EAEBECEDEEEF, // Range Maximum
217                0xF0F1F2F3F4F5F6F7, // Translation Offset
218                0xF8F9FAFBFCFDFEFF, // Length
219                ,, , TypeStatic, DenseTranslation)
220        },
221
222        ResourceTemplate ()
223        {
224            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, NonISAOnlyRanges,
225                0xD8D9DADBDCDDDEDF, // Granularity
226                0xE0E1E2E3E4E5E6E7, // Range Minimum
227                0xE8E9EAEBECEDEEEF, // Range Maximum
228                0xF0F1F2F3F4F5F6F7, // Translation Offset
229                0xF8F9FAFBFCFDFEFF, // Length
230                ,, , TypeStatic, SparseTranslation)
231        },
232
233        ResourceTemplate ()
234        {
235            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, NonISAOnlyRanges,
236                0xD8D9DADBDCDDDEDF, // Granularity
237                0xE0E1E2E3E4E5E6E7, // Range Minimum
238                0xE8E9EAEBECEDEEEF, // Range Maximum
239                0xF0F1F2F3F4F5F6F7, // Translation Offset
240                0xF8F9FAFBFCFDFEFF, // Length
241                ,, , TypeTranslation, DenseTranslation)
242        },
243
244        ResourceTemplate ()
245        {
246            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, NonISAOnlyRanges,
247                0xD8D9DADBDCDDDEDF, // Granularity
248                0xE0E1E2E3E4E5E6E7, // Range Minimum
249                0xE8E9EAEBECEDEEEF, // Range Maximum
250                0xF0F1F2F3F4F5F6F7, // Translation Offset
251                0xF8F9FAFBFCFDFEFF, // Length
252                ,, , TypeTranslation, SparseTranslation)
253        },
254
255        ResourceTemplate ()
256        {
257            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, ISAOnlyRanges,
258                0xD8D9DADBDCDDDEDF, // Granularity
259                0xE0E1E2E3E4E5E6E7, // Range Minimum
260                0xE8E9EAEBECEDEEEF, // Range Maximum
261                0xF0F1F2F3F4F5F6F7, // Translation Offset
262                0xF8F9FAFBFCFDFEFF, // Length
263                ,, , TypeStatic, DenseTranslation)
264        },
265
266        ResourceTemplate ()
267        {
268            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, ISAOnlyRanges,
269                0xD8D9DADBDCDDDEDF, // Granularity
270                0xE0E1E2E3E4E5E6E7, // Range Minimum
271                0xE8E9EAEBECEDEEEF, // Range Maximum
272                0xF0F1F2F3F4F5F6F7, // Translation Offset
273                0xF8F9FAFBFCFDFEFF, // Length
274                ,, , TypeStatic, SparseTranslation)
275        },
276
277        ResourceTemplate ()
278        {
279            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, ISAOnlyRanges,
280                0xD8D9DADBDCDDDEDF, // Granularity
281                0xE0E1E2E3E4E5E6E7, // Range Minimum
282                0xE8E9EAEBECEDEEEF, // Range Maximum
283                0xF0F1F2F3F4F5F6F7, // Translation Offset
284                0xF8F9FAFBFCFDFEFF, // Length
285                ,, , TypeTranslation, DenseTranslation)
286        },
287
288        ResourceTemplate ()
289        {
290            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, ISAOnlyRanges,
291                0xD8D9DADBDCDDDEDF, // Granularity
292                0xE0E1E2E3E4E5E6E7, // Range Minimum
293                0xE8E9EAEBECEDEEEF, // Range Maximum
294                0xF0F1F2F3F4F5F6F7, // Translation Offset
295                0xF8F9FAFBFCFDFEFF, // Length
296                ,, , TypeTranslation, SparseTranslation)
297        },
298
299        ResourceTemplate ()
300        {
301            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
302                0xD8D9DADBDCDDDEDF, // Granularity
303                0xE0E1E2E3E4E5E6E7, // Range Minimum
304                0xE8E9EAEBECEDEEEF, // Range Maximum
305                0xF0F1F2F3F4F5F6F7, // Translation Offset
306                0xF8F9FAFBFCFDFEFF, // Length
307                ,, , TypeStatic, DenseTranslation)
308        },
309
310        ResourceTemplate ()
311        {
312            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
313                0xD8D9DADBDCDDDEDF, // Granularity
314                0xE0E1E2E3E4E5E6E7, // Range Minimum
315                0xE8E9EAEBECEDEEEF, // Range Maximum
316                0xF0F1F2F3F4F5F6F7, // Translation Offset
317                0xF8F9FAFBFCFDFEFF, // Length
318                ,, , TypeStatic, SparseTranslation)
319        },
320
321        ResourceTemplate ()
322        {
323            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
324                0xD8D9DADBDCDDDEDF, // Granularity
325                0xE0E1E2E3E4E5E6E7, // Range Minimum
326                0xE8E9EAEBECEDEEEF, // Range Maximum
327                0xF0F1F2F3F4F5F6F7, // Translation Offset
328                0xF8F9FAFBFCFDFEFF, // Length
329                ,, , TypeTranslation, DenseTranslation)
330        },
331
332        ResourceTemplate ()
333        {
334            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
335                0xD8D9DADBDCDDDEDF, // Granularity
336                0xE0E1E2E3E4E5E6E7, // Range Minimum
337                0xE8E9EAEBECEDEEEF, // Range Maximum
338                0xF0F1F2F3F4F5F6F7, // Translation Offset
339                0xF8F9FAFBFCFDFEFF, // Length
340                ,, , TypeTranslation, SparseTranslation)
341        },
342
343        ResourceTemplate ()
344        {
345            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
346                0xD8D9DADBDCDDDEDF, // Granularity
347                0xE0E1E2E3E4E5E6E7, // Range Minimum
348                0xE8E9EAEBECEDEEEF, // Range Maximum
349                0xF0F1F2F3F4F5F6F7, // Translation Offset
350                0xF8F9FAFBFCFDFEFF, // Length
351                ,, , TypeStatic, DenseTranslation)
352        },
353
354        ResourceTemplate ()
355        {
356            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
357                0xD8D9DADBDCDDDEDF, // Granularity
358                0xE0E1E2E3E4E5E6E7, // Range Minimum
359                0xE8E9EAEBECEDEEEF, // Range Maximum
360                0xF0F1F2F3F4F5F6F7, // Translation Offset
361                0xF8F9FAFBFCFDFEFF, // Length
362                ,, , TypeStatic, DenseTranslation)
363        },
364
365        ResourceTemplate ()
366        {
367            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
368                0xD8D9DADBDCDDDEDF, // Granularity
369                0xE0E1E2E3E4E5E6E7, // Range Minimum
370                0xE8E9EAEBECEDEEEF, // Range Maximum
371                0xF0F1F2F3F4F5F6F7, // Translation Offset
372                0xF8F9FAFBFCFDFEFF, // Length
373                0x01, "", , TypeStatic, DenseTranslation)
374        },
375
376        ResourceTemplate ()
377        {
378            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
379                0xD8D9DADBDCDDDEDF, // Granularity
380                0xE0E1E2E3E4E5E6E7, // Range Minimum
381                0xE8E9EAEBECEDEEEF, // Range Maximum
382                0xF0F1F2F3F4F5F6F7, // Translation Offset
383                0xF8F9FAFBFCFDFEFF, // Length
384                0x0F, "P", , TypeStatic, DenseTranslation)
385        },
386
387        ResourceTemplate ()
388        {
389            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
390                0xD8D9DADBDCDDDEDF, // Granularity
391                0xE0E1E2E3E4E5E6E7, // Range Minimum
392                0xE8E9EAEBECEDEEEF, // Range Maximum
393                0xF0F1F2F3F4F5F6F7, // Translation Offset
394                0xF8F9FAFBFCFDFEFF, // Length
395                0xF0, "PATH", , TypeStatic, DenseTranslation)
396        },
397
398        ResourceTemplate ()
399        {
400            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
401                0xD8D9DADBDCDDDEDF, // Granularity
402                0xE0E1E2E3E4E5E6E7, // Range Minimum
403                0xE8E9EAEBECEDEEEF, // Range Maximum
404                0xF0F1F2F3F4F5F6F7, // Translation Offset
405                0xF8F9FAFBFCFDFEFF, // Length
406                0xFF, "!\"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !\"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !\"#$%&\'()*", , TypeStatic, DenseTranslation)
407        },
408
409        ResourceTemplate ()
410        {
411            QWordIO (ResourceConsumer, MinFixed, MaxFixed, SubDecode, EntireRange,
412                0xD8D9DADBDCDDDEDF, // Granularity
413                0xE0E1E2E3E4E5E6E7, // Range Minimum
414                0xE8E9EAEBECEDEEEF, // Range Maximum
415                0xF0F1F2F3F4F5F6F7, // Translation Offset
416                0xF8F9FAFBFCFDFEFF, // Length
417                0xFF, "PATHPATHPATH", , TypeTranslation, SparseTranslation)
418        },
419
420        ResourceTemplate ()
421        {
422            QWordIO (ResourceConsumer, MinFixed, MaxFixed, SubDecode, EntireRange,
423                0x0000000000000000, // Granularity
424                0x0000000000000000, // Range Minimum
425                0x0000000000000000, // Range Maximum
426                0x0000000000000000, // Translation Offset
427                0x0000000000000000, // Length
428                0xFF, "PATHPATHPATH", , TypeTranslation, SparseTranslation)
429        },
430
431        ResourceTemplate ()
432        {
433            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
434                0xD8D9DADBDCDDDEDF, // Granularity
435                0xE0E1E2E3E4E5E6E7, // Range Minimum
436                0xE8E9EAEBECEDEEEF, // Range Maximum
437                0xF0F1F2F3F4F5F6F7, // Translation Offset
438                0xF8F9FAFBFCFDFEFF, // Length
439                0x0F,, , TypeStatic, DenseTranslation)
440        }
441    })
442    /*
443     ACPI Specification, Revision 3.0, September 2, 2004
444     6.4.3.5.1   QWord Address Space Descriptor
445     I/O QWord Address Space Descriptor layout:
446     Byte 0 (Tag Bits): Value=10001010B (0x8a) (Type = 1, Large item name = 0xA)
447     Byte 1 (Length, bits[7:0]): Variable: Value = 43 (minimum)
448     Byte 2 (Length, bits[15:8]): Variable: Value = 0 (minimum)
449     Byte 3 (Resource Type):
450     1		I/O range
451     Byte 4 (General Flags):
452     Bits[7:4] 	Reserved (must be 0)
453     Bit[3] 		Min Address Fixed, _MAF:
454     1	The specified maximum address is fixed
455     0	The specified maximum address is not fixed
456     and can be changed
457     Bit[2] 		Max Address Fixed,_MIF:
458     1	The specified minimum address is fixed
459     0	The specified minimum address is not fixed
460     and can be changed
461     Bit[1] 		Decode Type, _DEC:
462     1	This bridge subtractively decodes this address
463     (top level bridges only)
464     0	This bridge positively decodes this address
465     Bit[0] 		Consumer/Producer:
466     1-This device consumes this resource
467     0-This device produces and consumes this resource
468     Byte 5 (Type Specific Flags):
469     Flags that are specific to each resource type. The meaning of the flags
470     in this field depends on the value of the Resource Type field (see above)
471     Bits[7:6]	Reserved (must be 0)
472     Bit[5]		Sparse Translation, _TRS. This bit is only meaningful if Bit[4] is set.
473     1	SparseTranslation: The primary-side memory address of any specific
474     I/O port within the secondary-side range can be found using
475     the following function.
476     address = (((port & 0xFFFc) << 10) || (port & 0xFFF)) + _TRA
477     In the address used to access the I/O port, bits[11:2] must be identical
478     to bits[21:12], this gives four bytes of I/O ports on each 4 KB page.
479     0	DenseTranslation: The primary-side memory address of any specific I/O port
480     within the secondary-side range can be found using the following function.
481     address = port + _TRA
482     Bit[4]		I/O to Memory Translation, _TTP
483     1	TypeTranslation: This resource, which is I/O on the secondary side of
484     the bridge, is memory on the primary side of the bridge.
485     0	TypeStatic: This resource, which is I/O on the secondary side of
486     the bridge, is also I/O on the primary side of the bridge.
487     Bit[3:2]	Reserved (must be 0)
488     Bit[1:0]	_RNG
489     3	Memory window covers the entire range
490     2	ISARangesOnly. This flag is for bridges on systems with multiple bridges.
491     Setting this bit means the memory window specified in this descriptor is
492     limited to the ISA I/O addresses that fall within the specified window.
493     The ISA I/O ranges are: n000-n0FF, n400-n4FF, n800-n8FF, nC00-nCFF. This
494     bit can only be set for bridges entirely configured through ACPI namespace.
495     1	NonISARangesOnly. This flag is for bridges on systems with multiple bridges.
496     Setting this bit means the memory window specified in this descriptor is
497     limited to the non-ISA I/O addresses that fall within the specified window.
498     The non-ISA I/O ranges are: n100-n3FF, n500-n7FF, n900-nBFF, nD00-nFFF.
499     This bit can only be set for bridges entirely configured through ACPI namespace.
500     0	Reserved
501     Byte 6 (Address space granularity, _GRA bits[7:0]):
502     A set bit in this mask means that this bit is decoded. All bits less
503     significant than the most significant set bit must be set. (in other
504     words, the value of the full Address Space Granularity field (all 32
505     bits) must be a number (2**n-1).
506     Byte 7 (Address space granularity, _GRA bits[15:8])
507     Byte 8 (Address space granularity, _GRA bits[23:16])
508     Byte 9 (Address space granularity, _GRA bits[31:24])
509     Byte 10 (Address space granularity, _GRA bits[39:32])
510     Byte 11 (Address space granularity, _GRA bits[47:40])
511     Byte 12 (Address space granularity, _GRA bits[55:48])
512     Byte 13 (Address space granularity, _GRA bits[63:56])
513     Byte 14 (Address range minimum, _MIN bits [7:0]):
514     For bridges that translate addresses, this is the address space
515     on the secondary side of the bridge
516     Byte 15 (Address range minimum, _MIN bits[15:8])
517     Byte 16 (Address range minimum, _MIN bits[23:16])
518     Byte 17 (Address range minimum, _MIN bits[31:24])
519     Byte 18 (Address range minimum, _MIN bits[39:32])
520     Byte 19 (Address range minimum, _MIN bits[47:40])
521     Byte 20 (Address range minimum, _MIN bits[55:48])
522     Byte 21 (Address range minimum, _MIN bits[63:56])
523     Byte 22 (Address range maximum, _MAX bits [7:0]): See comment for _MIN
524     Byte 23 (Address range maximum, _MAX bits[15:8])
525     Byte 24 (Address range maximum, _MAX bits[23:16])
526     Byte 25 (Address range maximum, _MAX bits[31:24])
527     Byte 26 (Address range maximum, _MAX bits[39:32])
528     Byte 27 (Address range maximum, _MAX bits[47:40])
529     Byte 28 (Address range maximum, _MAX bits[55:48])
530     Byte 29 (Address range maximum, _MAX bits[63:56])
531     Byte 30 (Address Translation offset, _TRA bits [7:0]):
532     For bridges that translate addresses across the bridge, this is the
533     offset that must be added to the address on the secondary side to obtain
534     the address on the primary side. Non-bridge devices must list 0 for all
535     Address Translation offset bits
536     Byte 31 (Address Translation offset, _TRA bits[15:8])
537     Byte 32 (Address Translation offset, _TRA bits[23:16])
538     Byte 33 (Address Translation offset, _TRA bits[31:24])
539     Byte 34 (Address Translation offset, _TRA bits[39:32])
540     Byte 35 (Address Translation offset, _TRA bits[47:40])
541     Byte 36 (Address Translation offset, _TRA bits[55:48])
542     Byte 37 (Address Translation offset, _TRA bits[63:56])
543     Byte 38 (Address Length, _LEN bits [7:0])
544     Byte 39 (Address Length, _LEN bits[15:8])
545     Byte 40 (Address Length, _LEN bits[23:16])
546     Byte 41 (Address Length, _LEN bits[31:24])
547     Byte 42 (Address Length, _LEN bits[39:32])
548     Byte 43 (Address Length, _LEN bits[47:40])
549     Byte 44 (Address Length, _LEN bits[55:48])
550     Byte 45 (Address Length, _LEN bits[63:56])
551     Byte 46 (Resource Source Index):
552     (Optional) Only present if Resource Source (below) is present. This
553     field gives an index to the specific resource descriptor that this
554     device consumes from in the current resource template for the device
555     object pointed to in Resource Source
556     String (Resource Source):
557     (Optional) If present, the device that uses this descriptor consumes
558     its resources from the resources produced by the named device object.
559     If not present, the device consumes its resources out of a global pool.
560     If not present, the device consumes this resource from its hierarchical
561     parent.
562     */
563    Name (P417, Package (0x25)
564    {
565        /* Byte 4 (General Flags) of QWord Address Space Descriptor */
566
567        ResourceTemplate ()
568        {
569            QWordIO (ResourceProducer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
570                0xD8D9DADBDCDDDEDF, // Granularity
571                0xE0E1E2E3E4E5E6E7, // Range Minimum
572                0xE8E9EAEBECEDEEEF, // Range Maximum
573                0xF0F1F2F3F4F5F6F7, // Translation Offset
574                0xF8F9FAFBFCFDFEFF, // Length
575                ,, , TypeStatic, DenseTranslation)
576        },
577
578        ResourceTemplate ()
579        {
580            QWordIO (ResourceProducer, MinNotFixed, MaxNotFixed, SubDecode, EntireRange,
581                0xD8D9DADBDCDDDEDF, // Granularity
582                0xE0E1E2E3E4E5E6E7, // Range Minimum
583                0xE8E9EAEBECEDEEEF, // Range Maximum
584                0xF0F1F2F3F4F5F6F7, // Translation Offset
585                0xF8F9FAFBFCFDFEFF, // Length
586                ,, , TypeStatic, DenseTranslation)
587        },
588
589        ResourceTemplate ()
590        {
591            QWordIO (ResourceProducer, MinNotFixed, MaxFixed, PosDecode, EntireRange,
592                0xD8D9DADBDCDDDEDF, // Granularity
593                0xE0E1E2E3E4E5E6E7, // Range Minimum
594                0xE8E9EAEBECEDEEEF, // Range Maximum
595                0xF0F1F2F3F4F5F6F7, // Translation Offset
596                0xF8F9FAFBFCFDFEFF, // Length
597                ,, , TypeStatic, DenseTranslation)
598        },
599
600        ResourceTemplate ()
601        {
602            QWordIO (ResourceProducer, MinNotFixed, MaxFixed, SubDecode, EntireRange,
603                0xD8D9DADBDCDDDEDF, // Granularity
604                0xE0E1E2E3E4E5E6E7, // Range Minimum
605                0xE8E9EAEBECEDEEEF, // Range Maximum
606                0xF0F1F2F3F4F5F6F7, // Translation Offset
607                0xF8F9FAFBFCFDFEFF, // Length
608                ,, , TypeStatic, DenseTranslation)
609        },
610
611        ResourceTemplate ()
612        {
613            QWordIO (ResourceProducer, MinFixed, MaxNotFixed, PosDecode, EntireRange,
614                0xD8D9DADBDCDDDEDF, // Granularity
615                0xE0E1E2E3E4E5E6E7, // Range Minimum
616                0xE8E9EAEBECEDEEEF, // Range Maximum
617                0xF0F1F2F3F4F5F6F7, // Translation Offset
618                0xF8F9FAFBFCFDFEFF, // Length
619                ,, , TypeStatic, DenseTranslation)
620        },
621
622        ResourceTemplate ()
623        {
624            QWordIO (ResourceProducer, MinFixed, MaxNotFixed, SubDecode, EntireRange,
625                0xD8D9DADBDCDDDEDF, // Granularity
626                0xE0E1E2E3E4E5E6E7, // Range Minimum
627                0xE8E9EAEBECEDEEEF, // Range Maximum
628                0xF0F1F2F3F4F5F6F7, // Translation Offset
629                0xF8F9FAFBFCFDFEFF, // Length
630                ,, , TypeStatic, DenseTranslation)
631        },
632
633        ResourceTemplate ()
634        {
635            QWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
636                0xD8D9DADBDCDDDEDF, // Granularity
637                0xE0E1E2E3E4E5E6E7, // Range Minimum
638                0xE8E9EAEBECEDEEEF, // Range Maximum
639                0xF0F1F2F3F4F5F6F7, // Translation Offset
640                0xF8F9FAFBFCFDFEFF, // Length
641                ,, , TypeStatic, DenseTranslation)
642        },
643
644        ResourceTemplate ()
645        {
646            QWordIO (ResourceProducer, MinFixed, MaxFixed, SubDecode, EntireRange,
647                0xD8D9DADBDCDDDEDF, // Granularity
648                0xE0E1E2E3E4E5E6E7, // Range Minimum
649                0xE8E9EAEBECEDEEEF, // Range Maximum
650                0xF0F1F2F3F4F5F6F7, // Translation Offset
651                0xF8F9FAFBFCFDFEFF, // Length
652                ,, , TypeStatic, DenseTranslation)
653        },
654
655        ResourceTemplate ()
656        {
657            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
658                0xD8D9DADBDCDDDEDF, // Granularity
659                0xE0E1E2E3E4E5E6E7, // Range Minimum
660                0xE8E9EAEBECEDEEEF, // Range Maximum
661                0xF0F1F2F3F4F5F6F7, // Translation Offset
662                0xF8F9FAFBFCFDFEFF, // Length
663                ,, , TypeStatic, DenseTranslation)
664        },
665
666        ResourceTemplate ()
667        {
668            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, SubDecode, EntireRange,
669                0xD8D9DADBDCDDDEDF, // Granularity
670                0xE0E1E2E3E4E5E6E7, // Range Minimum
671                0xE8E9EAEBECEDEEEF, // Range Maximum
672                0xF0F1F2F3F4F5F6F7, // Translation Offset
673                0xF8F9FAFBFCFDFEFF, // Length
674                ,, , TypeStatic, DenseTranslation)
675        },
676
677        ResourceTemplate ()
678        {
679            QWordIO (ResourceConsumer, MinNotFixed, MaxFixed, PosDecode, EntireRange,
680                0xD8D9DADBDCDDDEDF, // Granularity
681                0xE0E1E2E3E4E5E6E7, // Range Minimum
682                0xE8E9EAEBECEDEEEF, // Range Maximum
683                0xF0F1F2F3F4F5F6F7, // Translation Offset
684                0xF8F9FAFBFCFDFEFF, // Length
685                ,, , TypeStatic, DenseTranslation)
686        },
687
688        ResourceTemplate ()
689        {
690            QWordIO (ResourceConsumer, MinNotFixed, MaxFixed, SubDecode, EntireRange,
691                0xD8D9DADBDCDDDEDF, // Granularity
692                0xE0E1E2E3E4E5E6E7, // Range Minimum
693                0xE8E9EAEBECEDEEEF, // Range Maximum
694                0xF0F1F2F3F4F5F6F7, // Translation Offset
695                0xF8F9FAFBFCFDFEFF, // Length
696                ,, , TypeStatic, DenseTranslation)
697        },
698
699        ResourceTemplate ()
700        {
701            QWordIO (ResourceConsumer, MinFixed, MaxNotFixed, PosDecode, EntireRange,
702                0xD8D9DADBDCDDDEDF, // Granularity
703                0xE0E1E2E3E4E5E6E7, // Range Minimum
704                0xE8E9EAEBECEDEEEF, // Range Maximum
705                0xF0F1F2F3F4F5F6F7, // Translation Offset
706                0xF8F9FAFBFCFDFEFF, // Length
707                ,, , TypeStatic, DenseTranslation)
708        },
709
710        ResourceTemplate ()
711        {
712            QWordIO (ResourceConsumer, MinFixed, MaxNotFixed, SubDecode, EntireRange,
713                0xD8D9DADBDCDDDEDF, // Granularity
714                0xE0E1E2E3E4E5E6E7, // Range Minimum
715                0xE8E9EAEBECEDEEEF, // Range Maximum
716                0xF0F1F2F3F4F5F6F7, // Translation Offset
717                0xF8F9FAFBFCFDFEFF, // Length
718                ,, , TypeStatic, DenseTranslation)
719        },
720
721        ResourceTemplate ()
722        {
723            QWordIO (ResourceConsumer, MinFixed, MaxFixed, PosDecode, EntireRange,
724                0xD8D9DADBDCDDDEDF, // Granularity
725                0xE0E1E2E3E4E5E6E7, // Range Minimum
726                0xE8E9EAEBECEDEEEF, // Range Maximum
727                0xF0F1F2F3F4F5F6F7, // Translation Offset
728                0xF8F9FAFBFCFDFEFF, // Length
729                ,, , TypeStatic, DenseTranslation)
730        },
731
732        ResourceTemplate ()
733        {
734            QWordIO (ResourceConsumer, MinFixed, MaxFixed, SubDecode, EntireRange,
735                0xD8D9DADBDCDDDEDF, // Granularity
736                0xE0E1E2E3E4E5E6E7, // Range Minimum
737                0xE8E9EAEBECEDEEEF, // Range Maximum
738                0xF0F1F2F3F4F5F6F7, // Translation Offset
739                0xF8F9FAFBFCFDFEFF, // Length
740                ,, , TypeStatic, DenseTranslation)
741        },
742
743        /* Byte 5 (Type Specific Flags) of QWord Address Space Descriptor */
744
745        ResourceTemplate ()
746        {
747            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, NonISAOnlyRanges,
748                0xD8D9DADBDCDDDEDF, // Granularity
749                0xE0E1E2E3E4E5E6E7, // Range Minimum
750                0xE8E9EAEBECEDEEEF, // Range Maximum
751                0xF0F1F2F3F4F5F6F7, // Translation Offset
752                0xF8F9FAFBFCFDFEFF, // Length
753                ,, , TypeStatic, DenseTranslation)
754        },
755
756        ResourceTemplate ()
757        {
758            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, NonISAOnlyRanges,
759                0xD8D9DADBDCDDDEDF, // Granularity
760                0xE0E1E2E3E4E5E6E7, // Range Minimum
761                0xE8E9EAEBECEDEEEF, // Range Maximum
762                0xF0F1F2F3F4F5F6F7, // Translation Offset
763                0xF8F9FAFBFCFDFEFF, // Length
764                ,, , TypeStatic, SparseTranslation)
765        },
766
767        ResourceTemplate ()
768        {
769            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, NonISAOnlyRanges,
770                0xD8D9DADBDCDDDEDF, // Granularity
771                0xE0E1E2E3E4E5E6E7, // Range Minimum
772                0xE8E9EAEBECEDEEEF, // Range Maximum
773                0xF0F1F2F3F4F5F6F7, // Translation Offset
774                0xF8F9FAFBFCFDFEFF, // Length
775                ,, , TypeTranslation, DenseTranslation)
776        },
777
778        ResourceTemplate ()
779        {
780            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, NonISAOnlyRanges,
781                0xD8D9DADBDCDDDEDF, // Granularity
782                0xE0E1E2E3E4E5E6E7, // Range Minimum
783                0xE8E9EAEBECEDEEEF, // Range Maximum
784                0xF0F1F2F3F4F5F6F7, // Translation Offset
785                0xF8F9FAFBFCFDFEFF, // Length
786                ,, , TypeTranslation, SparseTranslation)
787        },
788
789        ResourceTemplate ()
790        {
791            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, ISAOnlyRanges,
792                0xD8D9DADBDCDDDEDF, // Granularity
793                0xE0E1E2E3E4E5E6E7, // Range Minimum
794                0xE8E9EAEBECEDEEEF, // Range Maximum
795                0xF0F1F2F3F4F5F6F7, // Translation Offset
796                0xF8F9FAFBFCFDFEFF, // Length
797                ,, , TypeStatic, DenseTranslation)
798        },
799
800        ResourceTemplate ()
801        {
802            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, ISAOnlyRanges,
803                0xD8D9DADBDCDDDEDF, // Granularity
804                0xE0E1E2E3E4E5E6E7, // Range Minimum
805                0xE8E9EAEBECEDEEEF, // Range Maximum
806                0xF0F1F2F3F4F5F6F7, // Translation Offset
807                0xF8F9FAFBFCFDFEFF, // Length
808                ,, , TypeStatic, SparseTranslation)
809        },
810
811        ResourceTemplate ()
812        {
813            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, ISAOnlyRanges,
814                0xD8D9DADBDCDDDEDF, // Granularity
815                0xE0E1E2E3E4E5E6E7, // Range Minimum
816                0xE8E9EAEBECEDEEEF, // Range Maximum
817                0xF0F1F2F3F4F5F6F7, // Translation Offset
818                0xF8F9FAFBFCFDFEFF, // Length
819                ,, , TypeTranslation, DenseTranslation)
820        },
821
822        ResourceTemplate ()
823        {
824            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, ISAOnlyRanges,
825                0xD8D9DADBDCDDDEDF, // Granularity
826                0xE0E1E2E3E4E5E6E7, // Range Minimum
827                0xE8E9EAEBECEDEEEF, // Range Maximum
828                0xF0F1F2F3F4F5F6F7, // Translation Offset
829                0xF8F9FAFBFCFDFEFF, // Length
830                ,, , TypeTranslation, SparseTranslation)
831        },
832
833        ResourceTemplate ()
834        {
835            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
836                0xD8D9DADBDCDDDEDF, // Granularity
837                0xE0E1E2E3E4E5E6E7, // Range Minimum
838                0xE8E9EAEBECEDEEEF, // Range Maximum
839                0xF0F1F2F3F4F5F6F7, // Translation Offset
840                0xF8F9FAFBFCFDFEFF, // Length
841                ,, , TypeStatic, DenseTranslation)
842        },
843
844        ResourceTemplate ()
845        {
846            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
847                0xD8D9DADBDCDDDEDF, // Granularity
848                0xE0E1E2E3E4E5E6E7, // Range Minimum
849                0xE8E9EAEBECEDEEEF, // Range Maximum
850                0xF0F1F2F3F4F5F6F7, // Translation Offset
851                0xF8F9FAFBFCFDFEFF, // Length
852                ,, , TypeStatic, SparseTranslation)
853        },
854
855        ResourceTemplate ()
856        {
857            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
858                0xD8D9DADBDCDDDEDF, // Granularity
859                0xE0E1E2E3E4E5E6E7, // Range Minimum
860                0xE8E9EAEBECEDEEEF, // Range Maximum
861                0xF0F1F2F3F4F5F6F7, // Translation Offset
862                0xF8F9FAFBFCFDFEFF, // Length
863                ,, , TypeTranslation, DenseTranslation)
864        },
865
866        ResourceTemplate ()
867        {
868            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
869                0xD8D9DADBDCDDDEDF, // Granularity
870                0xE0E1E2E3E4E5E6E7, // Range Minimum
871                0xE8E9EAEBECEDEEEF, // Range Maximum
872                0xF0F1F2F3F4F5F6F7, // Translation Offset
873                0xF8F9FAFBFCFDFEFF, // Length
874                ,, , TypeTranslation, SparseTranslation)
875        },
876
877        /* Particular cases */
878
879        ResourceTemplate ()
880        {
881            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
882                0xD8D9DADBDCDDDEDF, // Granularity
883                0xE0E1E2E3E4E5E6E7, // Range Minimum
884                0xE8E9EAEBECEDEEEF, // Range Maximum
885                0xF0F1F2F3F4F5F6F7, // Translation Offset
886                0xF8F9FAFBFCFDFEFF, // Length
887                ,, , TypeStatic, DenseTranslation)
888        },
889
890        ResourceTemplate ()
891        {
892            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
893                0xD8D9DADBDCDDDEDF, // Granularity
894                0xE0E1E2E3E4E5E6E7, // Range Minimum
895                0xE8E9EAEBECEDEEEF, // Range Maximum
896                0xF0F1F2F3F4F5F6F7, // Translation Offset
897                0xF8F9FAFBFCFDFEFF, // Length
898                ,, , TypeStatic, DenseTranslation)
899        },
900
901        /* Resource Source */
902
903        ResourceTemplate ()
904        {
905            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
906                0xD8D9DADBDCDDDEDF, // Granularity
907                0xE0E1E2E3E4E5E6E7, // Range Minimum
908                0xE8E9EAEBECEDEEEF, // Range Maximum
909                0xF0F1F2F3F4F5F6F7, // Translation Offset
910                0xF8F9FAFBFCFDFEFF, // Length
911                0x01, "", , TypeStatic, DenseTranslation)
912        },
913
914        ResourceTemplate ()
915        {
916            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
917                0xD8D9DADBDCDDDEDF, // Granularity
918                0xE0E1E2E3E4E5E6E7, // Range Minimum
919                0xE8E9EAEBECEDEEEF, // Range Maximum
920                0xF0F1F2F3F4F5F6F7, // Translation Offset
921                0xF8F9FAFBFCFDFEFF, // Length
922                0x0F, "P", , TypeStatic, DenseTranslation)
923        },
924
925        ResourceTemplate ()
926        {
927            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
928                0xD8D9DADBDCDDDEDF, // Granularity
929                0xE0E1E2E3E4E5E6E7, // Range Minimum
930                0xE8E9EAEBECEDEEEF, // Range Maximum
931                0xF0F1F2F3F4F5F6F7, // Translation Offset
932                0xF8F9FAFBFCFDFEFF, // Length
933                0xF0, "PATH", , TypeStatic, DenseTranslation)
934        },
935
936        ResourceTemplate ()
937        {
938            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
939                0xD8D9DADBDCDDDEDF, // Granularity
940                0xE0E1E2E3E4E5E6E7, // Range Minimum
941                0xE8E9EAEBECEDEEEF, // Range Maximum
942                0xF0F1F2F3F4F5F6F7, // Translation Offset
943                0xF8F9FAFBFCFDFEFF, // Length
944                0xFF, "!\"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !\"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !\"#$%&\'()*", , TypeStatic, DenseTranslation)
945        },
946
947        /* Particular cases */
948
949        ResourceTemplate ()
950        {
951            QWordIO (ResourceConsumer, MinFixed, MaxFixed, SubDecode, EntireRange,
952                0xD8D9DADBDCDDDEDF, // Granularity
953                0xE0E1E2E3E4E5E6E7, // Range Minimum
954                0xE8E9EAEBECEDEEEF, // Range Maximum
955                0xF0F1F2F3F4F5F6F7, // Translation Offset
956                0xF8F9FAFBFCFDFEFF, // Length
957                0xFF, "PATHPATHPATH", , TypeTranslation, SparseTranslation)
958        },
959
960        ResourceTemplate ()
961        {
962            QWordIO (ResourceConsumer, MinFixed, MaxFixed, SubDecode, EntireRange,
963                0x0000000000000000, // Granularity
964                0x0000000000000000, // Range Minimum
965                0x0000000000000000, // Range Maximum
966                0x0000000000000000, // Translation Offset
967                0x0000000000000000, // Length
968                0xFF, "PATHPATHPATH", , TypeTranslation, SparseTranslation)
969        },
970
971        /* 20051021, relaxation for omitted ResourceSource (bug-fix 70 rejection) */
972
973        ResourceTemplate ()
974        {
975            QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
976                0xD8D9DADBDCDDDEDF, // Granularity
977                0xE0E1E2E3E4E5E6E7, // Range Minimum
978                0xE8E9EAEBECEDEEEF, // Range Maximum
979                0xF0F1F2F3F4F5F6F7, // Translation Offset
980                0xF8F9FAFBFCFDFEFF, // Length
981                0x0F,, , TypeStatic, DenseTranslation)
982        }
983    })
984    Method (RT0C, 0, Serialized)
985    {
986        /* Emit test header, set the filename */
987
988        THDR (__METHOD__, "QWordIO Resource Descriptor Macro", "qwordio.asl")
989        /* Main test case for packages above */
990
991        M330 (__METHOD__, 0x25, "p416", P416, P417)
992        /* Check resource descriptor tag offsets */
993
994        Local0 = ResourceTemplate ()
995            {
996                QWordIO (ResourceProducer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
997                    0xD8D9DADBDCDDDEDF, // Granularity
998                    0xE0E1E2E3E4E5E6E7, // Range Minimum
999                    0xE8E9EAEBECEDEEEF, // Range Maximum
1000                    0xF0F1F2F3F4F5F6F7, // Translation Offset
1001                    0xF8F9FAFBFCFDFEFF, // Length
1002                    ,, , TypeStatic, DenseTranslation)
1003                QWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
1004                    0xD8D9DADBDCDDDEDF, // Granularity
1005                    0xE0E1E2E3E4E5E6E7, // Range Minimum
1006                    0xE8E9EAEBECEDEEEF, // Range Maximum
1007                    0xF0F1F2F3F4F5F6F7, // Translation Offset
1008                    0xF8F9FAFBFCFDFEFF, // Length
1009                    ,, , TypeStatic, DenseTranslation)
1010            }
1011        M331 (__METHOD__, 0x01, 0x21, 0x21, 0x0191, 0x0191, "_DEC")
1012        M331 (__METHOD__, 0x02, 0x22, 0x22, 0x0192, 0x0192, "_MIF")
1013        M331 (__METHOD__, 0x03, 0x23, 0x23, 0x0193, 0x0193, "_MAF")
1014        M331 (__METHOD__, 0x04, 0x28, 0x28, 0x0198, 0x0198, "_RNG")
1015        M331 (__METHOD__, 0x05, 0x2C, 0x2C, 0x019C, 0x019C, "_TTP")
1016        M331 (__METHOD__, 0x06, 0x2D, 0x2D, 0x019D, 0x019D, "_TRS")
1017        M331 (__METHOD__, 0x07, 0x30, 0x30, 0x01A0, 0x01A0, "_GRA")
1018        M331 (__METHOD__, 0x08, 0x70, 0x70, 0x01E0, 0x01E0, "_MIN")
1019        M331 (__METHOD__, 0x09, 0xB0, 0xB0, 0x0220, 0x0220, "_MAX")
1020        M331 (__METHOD__, 0x0A, 0xF0, 0xF0, 0x0260, 0x0260, "_TRA")
1021        M331 (__METHOD__, 0x0B, 0x0130, 0x0130, 0x02A0, 0x02A0, "_LEN")
1022    }
1023