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     * DWord IO Resource Descriptor Macro
32     */
33    Name (P418, Package (0x25)
34    {
35        ResourceTemplate ()
36        {
37            DWordIO (ResourceProducer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
38                0xECEDEEEF,         // Granularity
39                0xF0F1F2F3,         // Range Minimum
40                0xF4F5F6F7,         // Range Maximum
41                0xF8F9FAFB,         // Translation Offset
42                0xFCFDFEFF,         // Length
43                ,, , TypeStatic, DenseTranslation)
44        },
45
46        ResourceTemplate ()
47        {
48            DWordIO (ResourceProducer, MinNotFixed, MaxNotFixed, SubDecode, EntireRange,
49                0xECEDEEEF,         // Granularity
50                0xF0F1F2F3,         // Range Minimum
51                0xF4F5F6F7,         // Range Maximum
52                0xF8F9FAFB,         // Translation Offset
53                0xFCFDFEFF,         // Length
54                ,, , TypeStatic, DenseTranslation)
55        },
56
57        ResourceTemplate ()
58        {
59            DWordIO (ResourceProducer, MinNotFixed, MaxFixed, PosDecode, EntireRange,
60                0xECEDEEEF,         // Granularity
61                0xF0F1F2F3,         // Range Minimum
62                0xF4F5F6F7,         // Range Maximum
63                0xF8F9FAFB,         // Translation Offset
64                0xFCFDFEFF,         // Length
65                ,, , TypeStatic, DenseTranslation)
66        },
67
68        ResourceTemplate ()
69        {
70            DWordIO (ResourceProducer, MinNotFixed, MaxFixed, SubDecode, EntireRange,
71                0xECEDEEEF,         // Granularity
72                0xF0F1F2F3,         // Range Minimum
73                0xF4F5F6F7,         // Range Maximum
74                0xF8F9FAFB,         // Translation Offset
75                0xFCFDFEFF,         // Length
76                ,, , TypeStatic, DenseTranslation)
77        },
78
79        ResourceTemplate ()
80        {
81            DWordIO (ResourceProducer, MinFixed, MaxNotFixed, PosDecode, EntireRange,
82                0xECEDEEEF,         // Granularity
83                0xF0F1F2F3,         // Range Minimum
84                0xF4F5F6F7,         // Range Maximum
85                0xF8F9FAFB,         // Translation Offset
86                0xFCFDFEFF,         // Length
87                ,, , TypeStatic, DenseTranslation)
88        },
89
90        ResourceTemplate ()
91        {
92            DWordIO (ResourceProducer, MinFixed, MaxNotFixed, SubDecode, EntireRange,
93                0xECEDEEEF,         // Granularity
94                0xF0F1F2F3,         // Range Minimum
95                0xF4F5F6F7,         // Range Maximum
96                0xF8F9FAFB,         // Translation Offset
97                0xFCFDFEFF,         // Length
98                ,, , TypeStatic, DenseTranslation)
99        },
100
101        ResourceTemplate ()
102        {
103            DWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
104                0xECEDEEEF,         // Granularity
105                0xF0F1F2F3,         // Range Minimum
106                0xF4F5F6F7,         // Range Maximum
107                0xF8F9FAFB,         // Translation Offset
108                0xFCFDFEFF,         // Length
109                ,, , TypeStatic, DenseTranslation)
110        },
111
112        ResourceTemplate ()
113        {
114            DWordIO (ResourceProducer, MinFixed, MaxFixed, SubDecode, EntireRange,
115                0xECEDEEEF,         // Granularity
116                0xF0F1F2F3,         // Range Minimum
117                0xF4F5F6F7,         // Range Maximum
118                0xF8F9FAFB,         // Translation Offset
119                0xFCFDFEFF,         // Length
120                ,, , TypeStatic, DenseTranslation)
121        },
122
123        ResourceTemplate ()
124        {
125            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
126                0xECEDEEEF,         // Granularity
127                0xF0F1F2F3,         // Range Minimum
128                0xF4F5F6F7,         // Range Maximum
129                0xF8F9FAFB,         // Translation Offset
130                0xFCFDFEFF,         // Length
131                ,, , TypeStatic, DenseTranslation)
132        },
133
134        ResourceTemplate ()
135        {
136            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, SubDecode, EntireRange,
137                0xECEDEEEF,         // Granularity
138                0xF0F1F2F3,         // Range Minimum
139                0xF4F5F6F7,         // Range Maximum
140                0xF8F9FAFB,         // Translation Offset
141                0xFCFDFEFF,         // Length
142                ,, , TypeStatic, DenseTranslation)
143        },
144
145        ResourceTemplate ()
146        {
147            DWordIO (ResourceConsumer, MinNotFixed, MaxFixed, PosDecode, EntireRange,
148                0xECEDEEEF,         // Granularity
149                0xF0F1F2F3,         // Range Minimum
150                0xF4F5F6F7,         // Range Maximum
151                0xF8F9FAFB,         // Translation Offset
152                0xFCFDFEFF,         // Length
153                ,, , TypeStatic, DenseTranslation)
154        },
155
156        ResourceTemplate ()
157        {
158            DWordIO (ResourceConsumer, MinNotFixed, MaxFixed, SubDecode, EntireRange,
159                0xECEDEEEF,         // Granularity
160                0xF0F1F2F3,         // Range Minimum
161                0xF4F5F6F7,         // Range Maximum
162                0xF8F9FAFB,         // Translation Offset
163                0xFCFDFEFF,         // Length
164                ,, , TypeStatic, DenseTranslation)
165        },
166
167        ResourceTemplate ()
168        {
169            DWordIO (ResourceConsumer, MinFixed, MaxNotFixed, PosDecode, EntireRange,
170                0xECEDEEEF,         // Granularity
171                0xF0F1F2F3,         // Range Minimum
172                0xF4F5F6F7,         // Range Maximum
173                0xF8F9FAFB,         // Translation Offset
174                0xFCFDFEFF,         // Length
175                ,, , TypeStatic, DenseTranslation)
176        },
177
178        ResourceTemplate ()
179        {
180            DWordIO (ResourceConsumer, MinFixed, MaxNotFixed, SubDecode, EntireRange,
181                0xECEDEEEF,         // Granularity
182                0xF0F1F2F3,         // Range Minimum
183                0xF4F5F6F7,         // Range Maximum
184                0xF8F9FAFB,         // Translation Offset
185                0xFCFDFEFF,         // Length
186                ,, , TypeStatic, DenseTranslation)
187        },
188
189        ResourceTemplate ()
190        {
191            DWordIO (ResourceConsumer, MinFixed, MaxFixed, PosDecode, EntireRange,
192                0xECEDEEEF,         // Granularity
193                0xF0F1F2F3,         // Range Minimum
194                0xF4F5F6F7,         // Range Maximum
195                0xF8F9FAFB,         // Translation Offset
196                0xFCFDFEFF,         // Length
197                ,, , TypeStatic, DenseTranslation)
198        },
199
200        ResourceTemplate ()
201        {
202            DWordIO (ResourceConsumer, MinFixed, MaxFixed, SubDecode, EntireRange,
203                0xECEDEEEF,         // Granularity
204                0xF0F1F2F3,         // Range Minimum
205                0xF4F5F6F7,         // Range Maximum
206                0xF8F9FAFB,         // Translation Offset
207                0xFCFDFEFF,         // Length
208                ,, , TypeStatic, DenseTranslation)
209        },
210
211        ResourceTemplate ()
212        {
213            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, NonISAOnlyRanges,
214                0xECEDEEEF,         // Granularity
215                0xF0F1F2F3,         // Range Minimum
216                0xF4F5F6F7,         // Range Maximum
217                0xF8F9FAFB,         // Translation Offset
218                0xFCFDFEFF,         // Length
219                ,, , TypeStatic, DenseTranslation)
220        },
221
222        ResourceTemplate ()
223        {
224            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, NonISAOnlyRanges,
225                0xECEDEEEF,         // Granularity
226                0xF0F1F2F3,         // Range Minimum
227                0xF4F5F6F7,         // Range Maximum
228                0xF8F9FAFB,         // Translation Offset
229                0xFCFDFEFF,         // Length
230                ,, , TypeStatic, SparseTranslation)
231        },
232
233        ResourceTemplate ()
234        {
235            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, NonISAOnlyRanges,
236                0xECEDEEEF,         // Granularity
237                0xF0F1F2F3,         // Range Minimum
238                0xF4F5F6F7,         // Range Maximum
239                0xF8F9FAFB,         // Translation Offset
240                0xFCFDFEFF,         // Length
241                ,, , TypeTranslation, DenseTranslation)
242        },
243
244        ResourceTemplate ()
245        {
246            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, NonISAOnlyRanges,
247                0xECEDEEEF,         // Granularity
248                0xF0F1F2F3,         // Range Minimum
249                0xF4F5F6F7,         // Range Maximum
250                0xF8F9FAFB,         // Translation Offset
251                0xFCFDFEFF,         // Length
252                ,, , TypeTranslation, SparseTranslation)
253        },
254
255        ResourceTemplate ()
256        {
257            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, ISAOnlyRanges,
258                0xECEDEEEF,         // Granularity
259                0xF0F1F2F3,         // Range Minimum
260                0xF4F5F6F7,         // Range Maximum
261                0xF8F9FAFB,         // Translation Offset
262                0xFCFDFEFF,         // Length
263                ,, , TypeStatic, DenseTranslation)
264        },
265
266        ResourceTemplate ()
267        {
268            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, ISAOnlyRanges,
269                0xECEDEEEF,         // Granularity
270                0xF0F1F2F3,         // Range Minimum
271                0xF4F5F6F7,         // Range Maximum
272                0xF8F9FAFB,         // Translation Offset
273                0xFCFDFEFF,         // Length
274                ,, , TypeStatic, SparseTranslation)
275        },
276
277        ResourceTemplate ()
278        {
279            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, ISAOnlyRanges,
280                0xECEDEEEF,         // Granularity
281                0xF0F1F2F3,         // Range Minimum
282                0xF4F5F6F7,         // Range Maximum
283                0xF8F9FAFB,         // Translation Offset
284                0xFCFDFEFF,         // Length
285                ,, , TypeTranslation, DenseTranslation)
286        },
287
288        ResourceTemplate ()
289        {
290            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, ISAOnlyRanges,
291                0xECEDEEEF,         // Granularity
292                0xF0F1F2F3,         // Range Minimum
293                0xF4F5F6F7,         // Range Maximum
294                0xF8F9FAFB,         // Translation Offset
295                0xFCFDFEFF,         // Length
296                ,, , TypeTranslation, SparseTranslation)
297        },
298
299        ResourceTemplate ()
300        {
301            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
302                0xECEDEEEF,         // Granularity
303                0xF0F1F2F3,         // Range Minimum
304                0xF4F5F6F7,         // Range Maximum
305                0xF8F9FAFB,         // Translation Offset
306                0xFCFDFEFF,         // Length
307                ,, , TypeStatic, DenseTranslation)
308        },
309
310        ResourceTemplate ()
311        {
312            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
313                0xECEDEEEF,         // Granularity
314                0xF0F1F2F3,         // Range Minimum
315                0xF4F5F6F7,         // Range Maximum
316                0xF8F9FAFB,         // Translation Offset
317                0xFCFDFEFF,         // Length
318                ,, , TypeStatic, SparseTranslation)
319        },
320
321        ResourceTemplate ()
322        {
323            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
324                0xECEDEEEF,         // Granularity
325                0xF0F1F2F3,         // Range Minimum
326                0xF4F5F6F7,         // Range Maximum
327                0xF8F9FAFB,         // Translation Offset
328                0xFCFDFEFF,         // Length
329                ,, , TypeTranslation, DenseTranslation)
330        },
331
332        ResourceTemplate ()
333        {
334            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
335                0xECEDEEEF,         // Granularity
336                0xF0F1F2F3,         // Range Minimum
337                0xF4F5F6F7,         // Range Maximum
338                0xF8F9FAFB,         // Translation Offset
339                0xFCFDFEFF,         // Length
340                ,, , TypeTranslation, SparseTranslation)
341        },
342
343        ResourceTemplate ()
344        {
345            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
346                0xECEDEEEF,         // Granularity
347                0xF0F1F2F3,         // Range Minimum
348                0xF4F5F6F7,         // Range Maximum
349                0xF8F9FAFB,         // Translation Offset
350                0xFCFDFEFF,         // Length
351                ,, , TypeStatic, DenseTranslation)
352        },
353
354        ResourceTemplate ()
355        {
356            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
357                0xECEDEEEF,         // Granularity
358                0xF0F1F2F3,         // Range Minimum
359                0xF4F5F6F7,         // Range Maximum
360                0xF8F9FAFB,         // Translation Offset
361                0xFCFDFEFF,         // Length
362                ,, , TypeStatic, DenseTranslation)
363        },
364
365        ResourceTemplate ()
366        {
367            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
368                0xECEDEEEF,         // Granularity
369                0xF0F1F2F3,         // Range Minimum
370                0xF4F5F6F7,         // Range Maximum
371                0xF8F9FAFB,         // Translation Offset
372                0xFCFDFEFF,         // Length
373                0x01, "", , TypeStatic, DenseTranslation)
374        },
375
376        ResourceTemplate ()
377        {
378            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
379                0xECEDEEEF,         // Granularity
380                0xF0F1F2F3,         // Range Minimum
381                0xF4F5F6F7,         // Range Maximum
382                0xF8F9FAFB,         // Translation Offset
383                0xFCFDFEFF,         // Length
384                0x0F, "P", , TypeStatic, DenseTranslation)
385        },
386
387        ResourceTemplate ()
388        {
389            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
390                0xECEDEEEF,         // Granularity
391                0xF0F1F2F3,         // Range Minimum
392                0xF4F5F6F7,         // Range Maximum
393                0xF8F9FAFB,         // Translation Offset
394                0xFCFDFEFF,         // Length
395                0xF0, "PATH", , TypeStatic, DenseTranslation)
396        },
397
398        ResourceTemplate ()
399        {
400            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
401                0xECEDEEEF,         // Granularity
402                0xF0F1F2F3,         // Range Minimum
403                0xF4F5F6F7,         // Range Maximum
404                0xF8F9FAFB,         // Translation Offset
405                0xFCFDFEFF,         // Length
406                0xFF, "!\"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !\"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !\"#$%&\'()*", , TypeStatic, DenseTranslation)
407        },
408
409        ResourceTemplate ()
410        {
411            DWordIO (ResourceConsumer, MinFixed, MaxFixed, SubDecode, EntireRange,
412                0xECEDEEEF,         // Granularity
413                0xF0F1F2F3,         // Range Minimum
414                0xF4F5F6F7,         // Range Maximum
415                0xF8F9FAFB,         // Translation Offset
416                0xFCFDFEFF,         // Length
417                0xFF, "PATHPATHPATH", , TypeTranslation, SparseTranslation)
418        },
419
420        ResourceTemplate ()
421        {
422            DWordIO (ResourceConsumer, MinFixed, MaxFixed, SubDecode, EntireRange,
423                0x00000000,         // Granularity
424                0x00000000,         // Range Minimum
425                0x00000000,         // Range Maximum
426                0x00000000,         // Translation Offset
427                0x00000000,         // Length
428                0xFF, "PATHPATHPATH", , TypeTranslation, SparseTranslation)
429        },
430
431        ResourceTemplate ()
432        {
433            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
434                0xECEDEEEF,         // Granularity
435                0xF0F1F2F3,         // Range Minimum
436                0xF4F5F6F7,         // Range Maximum
437                0xF8F9FAFB,         // Translation Offset
438                0xFCFDFEFF,         // Length
439                0x0F,, , TypeStatic, DenseTranslation)
440        }
441    })
442    /*
443     ACPI Specification, Revision 3.0, September 2, 2004
444     6.4.3.5.2   DWord Address Space Descriptor
445     I/O DWord Address Space Descriptor layout:
446     Byte 0 (Tag Bits): Value=10000111B (0x87) (Type = 1, Large item name = 0x7)
447     Byte 1 (Length, bits[7:0]): Variable: Value = 23 (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 range minimum, _MIN bits [7:0]):
510     For bridges that translate addresses, this is the address space
511     on the secondary side of the bridge
512     Byte 11 (Address range minimum, _MIN bits[15:8])
513     Byte 12 (Address range minimum, _MIN bits[23:16])
514     Byte 13 (Address range minimum, _MIN bits[31:24])
515     Byte 14 (Address range maximum, _MAX bits [7:0]): See comment for _MIN
516     Byte 15 (Address range maximum, _MAX bits[15:8])
517     Byte 16 (Address range maximum, _MAX bits[23:16])
518     Byte 17 (Address range maximum, _MAX bits[31:24])
519     Byte 18 (Address Translation offset, _TRA bits [7:0]):
520     For bridges that translate addresses across the bridge, this is the
521     offset that must be added to the address on the secondary side to obtain
522     the address on the primary side. Non-bridge devices must list 0 for all
523     Address Translation offset bits
524     Byte 19 (Address Translation offset, _TRA bits[15:8])
525     Byte 20 (Address Translation offset, _TRA bits[23:16])
526     Byte 21 (Address Translation offset, _TRA bits[31:24])
527     Byte 22 (Address Length, _LEN bits [7:0])
528     Byte 23 (Address Length, _LEN bits[15:8])
529     Byte 24 (Address Length, _LEN bits[23:16])
530     Byte 25 (Address Length, _LEN bits[31:24])
531     Byte 26 (Resource Source Index):
532     (Optional) Only present if Resource Source (below) is present. This
533     field gives an index to the specific resource descriptor that this
534     device consumes from in the current resource template for the device
535     object pointed to in Resource Source
536     String (Resource Source):
537     (Optional) If present, the device that uses this descriptor consumes
538     its resources from the resources produced by the named device object.
539     If not present, the device consumes its resources out of a global pool.
540     If not present, the device consumes this resource from its hierarchical
541     parent.
542     */
543    Name (P419, Package (0x25)
544    {
545        /* Byte 4 (General Flags) of DWord Address Space Descriptor */
546
547        ResourceTemplate ()
548        {
549            DWordIO (ResourceProducer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
550                0xECEDEEEF,         // Granularity
551                0xF0F1F2F3,         // Range Minimum
552                0xF4F5F6F7,         // Range Maximum
553                0xF8F9FAFB,         // Translation Offset
554                0xFCFDFEFF,         // Length
555                ,, , TypeStatic, DenseTranslation)
556        },
557
558        ResourceTemplate ()
559        {
560            DWordIO (ResourceProducer, MinNotFixed, MaxNotFixed, SubDecode, EntireRange,
561                0xECEDEEEF,         // Granularity
562                0xF0F1F2F3,         // Range Minimum
563                0xF4F5F6F7,         // Range Maximum
564                0xF8F9FAFB,         // Translation Offset
565                0xFCFDFEFF,         // Length
566                ,, , TypeStatic, DenseTranslation)
567        },
568
569        ResourceTemplate ()
570        {
571            DWordIO (ResourceProducer, MinNotFixed, MaxFixed, PosDecode, EntireRange,
572                0xECEDEEEF,         // Granularity
573                0xF0F1F2F3,         // Range Minimum
574                0xF4F5F6F7,         // Range Maximum
575                0xF8F9FAFB,         // Translation Offset
576                0xFCFDFEFF,         // Length
577                ,, , TypeStatic, DenseTranslation)
578        },
579
580        ResourceTemplate ()
581        {
582            DWordIO (ResourceProducer, MinNotFixed, MaxFixed, SubDecode, EntireRange,
583                0xECEDEEEF,         // Granularity
584                0xF0F1F2F3,         // Range Minimum
585                0xF4F5F6F7,         // Range Maximum
586                0xF8F9FAFB,         // Translation Offset
587                0xFCFDFEFF,         // Length
588                ,, , TypeStatic, DenseTranslation)
589        },
590
591        ResourceTemplate ()
592        {
593            DWordIO (ResourceProducer, MinFixed, MaxNotFixed, PosDecode, EntireRange,
594                0xECEDEEEF,         // Granularity
595                0xF0F1F2F3,         // Range Minimum
596                0xF4F5F6F7,         // Range Maximum
597                0xF8F9FAFB,         // Translation Offset
598                0xFCFDFEFF,         // Length
599                ,, , TypeStatic, DenseTranslation)
600        },
601
602        ResourceTemplate ()
603        {
604            DWordIO (ResourceProducer, MinFixed, MaxNotFixed, SubDecode, EntireRange,
605                0xECEDEEEF,         // Granularity
606                0xF0F1F2F3,         // Range Minimum
607                0xF4F5F6F7,         // Range Maximum
608                0xF8F9FAFB,         // Translation Offset
609                0xFCFDFEFF,         // Length
610                ,, , TypeStatic, DenseTranslation)
611        },
612
613        ResourceTemplate ()
614        {
615            DWordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
616                0xECEDEEEF,         // Granularity
617                0xF0F1F2F3,         // Range Minimum
618                0xF4F5F6F7,         // Range Maximum
619                0xF8F9FAFB,         // Translation Offset
620                0xFCFDFEFF,         // Length
621                ,, , TypeStatic, DenseTranslation)
622        },
623
624        ResourceTemplate ()
625        {
626            DWordIO (ResourceProducer, MinFixed, MaxFixed, SubDecode, EntireRange,
627                0xECEDEEEF,         // Granularity
628                0xF0F1F2F3,         // Range Minimum
629                0xF4F5F6F7,         // Range Maximum
630                0xF8F9FAFB,         // Translation Offset
631                0xFCFDFEFF,         // Length
632                ,, , TypeStatic, DenseTranslation)
633        },
634
635        ResourceTemplate ()
636        {
637            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
638                0xECEDEEEF,         // Granularity
639                0xF0F1F2F3,         // Range Minimum
640                0xF4F5F6F7,         // Range Maximum
641                0xF8F9FAFB,         // Translation Offset
642                0xFCFDFEFF,         // Length
643                ,, , TypeStatic, DenseTranslation)
644        },
645
646        ResourceTemplate ()
647        {
648            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, SubDecode, EntireRange,
649                0xECEDEEEF,         // Granularity
650                0xF0F1F2F3,         // Range Minimum
651                0xF4F5F6F7,         // Range Maximum
652                0xF8F9FAFB,         // Translation Offset
653                0xFCFDFEFF,         // Length
654                ,, , TypeStatic, DenseTranslation)
655        },
656
657        ResourceTemplate ()
658        {
659            DWordIO (ResourceConsumer, MinNotFixed, MaxFixed, PosDecode, EntireRange,
660                0xECEDEEEF,         // Granularity
661                0xF0F1F2F3,         // Range Minimum
662                0xF4F5F6F7,         // Range Maximum
663                0xF8F9FAFB,         // Translation Offset
664                0xFCFDFEFF,         // Length
665                ,, , TypeStatic, DenseTranslation)
666        },
667
668        ResourceTemplate ()
669        {
670            DWordIO (ResourceConsumer, MinNotFixed, MaxFixed, SubDecode, EntireRange,
671                0xECEDEEEF,         // Granularity
672                0xF0F1F2F3,         // Range Minimum
673                0xF4F5F6F7,         // Range Maximum
674                0xF8F9FAFB,         // Translation Offset
675                0xFCFDFEFF,         // Length
676                ,, , TypeStatic, DenseTranslation)
677        },
678
679        ResourceTemplate ()
680        {
681            DWordIO (ResourceConsumer, MinFixed, MaxNotFixed, PosDecode, EntireRange,
682                0xECEDEEEF,         // Granularity
683                0xF0F1F2F3,         // Range Minimum
684                0xF4F5F6F7,         // Range Maximum
685                0xF8F9FAFB,         // Translation Offset
686                0xFCFDFEFF,         // Length
687                ,, , TypeStatic, DenseTranslation)
688        },
689
690        ResourceTemplate ()
691        {
692            DWordIO (ResourceConsumer, MinFixed, MaxNotFixed, SubDecode, EntireRange,
693                0xECEDEEEF,         // Granularity
694                0xF0F1F2F3,         // Range Minimum
695                0xF4F5F6F7,         // Range Maximum
696                0xF8F9FAFB,         // Translation Offset
697                0xFCFDFEFF,         // Length
698                ,, , TypeStatic, DenseTranslation)
699        },
700
701        ResourceTemplate ()
702        {
703            DWordIO (ResourceConsumer, MinFixed, MaxFixed, PosDecode, EntireRange,
704                0xECEDEEEF,         // Granularity
705                0xF0F1F2F3,         // Range Minimum
706                0xF4F5F6F7,         // Range Maximum
707                0xF8F9FAFB,         // Translation Offset
708                0xFCFDFEFF,         // Length
709                ,, , TypeStatic, DenseTranslation)
710        },
711
712        ResourceTemplate ()
713        {
714            DWordIO (ResourceConsumer, MinFixed, MaxFixed, SubDecode, EntireRange,
715                0xECEDEEEF,         // Granularity
716                0xF0F1F2F3,         // Range Minimum
717                0xF4F5F6F7,         // Range Maximum
718                0xF8F9FAFB,         // Translation Offset
719                0xFCFDFEFF,         // Length
720                ,, , TypeStatic, DenseTranslation)
721        },
722
723        /* Byte 5 (Type Specific Flags) of DWord Address Space Descriptor */
724
725        ResourceTemplate ()
726        {
727            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, NonISAOnlyRanges,
728                0xECEDEEEF,         // Granularity
729                0xF0F1F2F3,         // Range Minimum
730                0xF4F5F6F7,         // Range Maximum
731                0xF8F9FAFB,         // Translation Offset
732                0xFCFDFEFF,         // Length
733                ,, , TypeStatic, DenseTranslation)
734        },
735
736        ResourceTemplate ()
737        {
738            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, NonISAOnlyRanges,
739                0xECEDEEEF,         // Granularity
740                0xF0F1F2F3,         // Range Minimum
741                0xF4F5F6F7,         // Range Maximum
742                0xF8F9FAFB,         // Translation Offset
743                0xFCFDFEFF,         // Length
744                ,, , TypeStatic, SparseTranslation)
745        },
746
747        ResourceTemplate ()
748        {
749            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, NonISAOnlyRanges,
750                0xECEDEEEF,         // Granularity
751                0xF0F1F2F3,         // Range Minimum
752                0xF4F5F6F7,         // Range Maximum
753                0xF8F9FAFB,         // Translation Offset
754                0xFCFDFEFF,         // Length
755                ,, , TypeTranslation, DenseTranslation)
756        },
757
758        ResourceTemplate ()
759        {
760            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, NonISAOnlyRanges,
761                0xECEDEEEF,         // Granularity
762                0xF0F1F2F3,         // Range Minimum
763                0xF4F5F6F7,         // Range Maximum
764                0xF8F9FAFB,         // Translation Offset
765                0xFCFDFEFF,         // Length
766                ,, , TypeTranslation, SparseTranslation)
767        },
768
769        ResourceTemplate ()
770        {
771            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, ISAOnlyRanges,
772                0xECEDEEEF,         // Granularity
773                0xF0F1F2F3,         // Range Minimum
774                0xF4F5F6F7,         // Range Maximum
775                0xF8F9FAFB,         // Translation Offset
776                0xFCFDFEFF,         // Length
777                ,, , TypeStatic, DenseTranslation)
778        },
779
780        ResourceTemplate ()
781        {
782            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, ISAOnlyRanges,
783                0xECEDEEEF,         // Granularity
784                0xF0F1F2F3,         // Range Minimum
785                0xF4F5F6F7,         // Range Maximum
786                0xF8F9FAFB,         // Translation Offset
787                0xFCFDFEFF,         // Length
788                ,, , TypeStatic, SparseTranslation)
789        },
790
791        ResourceTemplate ()
792        {
793            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, ISAOnlyRanges,
794                0xECEDEEEF,         // Granularity
795                0xF0F1F2F3,         // Range Minimum
796                0xF4F5F6F7,         // Range Maximum
797                0xF8F9FAFB,         // Translation Offset
798                0xFCFDFEFF,         // Length
799                ,, , TypeTranslation, DenseTranslation)
800        },
801
802        ResourceTemplate ()
803        {
804            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, ISAOnlyRanges,
805                0xECEDEEEF,         // Granularity
806                0xF0F1F2F3,         // Range Minimum
807                0xF4F5F6F7,         // Range Maximum
808                0xF8F9FAFB,         // Translation Offset
809                0xFCFDFEFF,         // Length
810                ,, , TypeTranslation, SparseTranslation)
811        },
812
813        ResourceTemplate ()
814        {
815            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
816                0xECEDEEEF,         // Granularity
817                0xF0F1F2F3,         // Range Minimum
818                0xF4F5F6F7,         // Range Maximum
819                0xF8F9FAFB,         // Translation Offset
820                0xFCFDFEFF,         // Length
821                ,, , TypeStatic, DenseTranslation)
822        },
823
824        ResourceTemplate ()
825        {
826            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
827                0xECEDEEEF,         // Granularity
828                0xF0F1F2F3,         // Range Minimum
829                0xF4F5F6F7,         // Range Maximum
830                0xF8F9FAFB,         // Translation Offset
831                0xFCFDFEFF,         // Length
832                ,, , TypeStatic, SparseTranslation)
833        },
834
835        ResourceTemplate ()
836        {
837            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
838                0xECEDEEEF,         // Granularity
839                0xF0F1F2F3,         // Range Minimum
840                0xF4F5F6F7,         // Range Maximum
841                0xF8F9FAFB,         // Translation Offset
842                0xFCFDFEFF,         // Length
843                ,, , TypeTranslation, DenseTranslation)
844        },
845
846        ResourceTemplate ()
847        {
848            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
849                0xECEDEEEF,         // Granularity
850                0xF0F1F2F3,         // Range Minimum
851                0xF4F5F6F7,         // Range Maximum
852                0xF8F9FAFB,         // Translation Offset
853                0xFCFDFEFF,         // Length
854                ,, , TypeTranslation, SparseTranslation)
855        },
856
857        /* Particular cases */
858
859        ResourceTemplate ()
860        {
861            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
862                0xECEDEEEF,         // Granularity
863                0xF0F1F2F3,         // Range Minimum
864                0xF4F5F6F7,         // Range Maximum
865                0xF8F9FAFB,         // Translation Offset
866                0xFCFDFEFF,         // Length
867                ,, , TypeStatic, DenseTranslation)
868        },
869
870        ResourceTemplate ()
871        {
872            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
873                0xECEDEEEF,         // Granularity
874                0xF0F1F2F3,         // Range Minimum
875                0xF4F5F6F7,         // Range Maximum
876                0xF8F9FAFB,         // Translation Offset
877                0xFCFDFEFF,         // Length
878                ,, , TypeStatic, DenseTranslation)
879        },
880
881        /* Resource Source */
882
883        ResourceTemplate ()
884        {
885            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
886                0xECEDEEEF,         // Granularity
887                0xF0F1F2F3,         // Range Minimum
888                0xF4F5F6F7,         // Range Maximum
889                0xF8F9FAFB,         // Translation Offset
890                0xFCFDFEFF,         // Length
891                0x01, "", , TypeStatic, DenseTranslation)
892        },
893
894        ResourceTemplate ()
895        {
896            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
897                0xECEDEEEF,         // Granularity
898                0xF0F1F2F3,         // Range Minimum
899                0xF4F5F6F7,         // Range Maximum
900                0xF8F9FAFB,         // Translation Offset
901                0xFCFDFEFF,         // Length
902                0x0F, "P", , TypeStatic, DenseTranslation)
903        },
904
905        ResourceTemplate ()
906        {
907            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
908                0xECEDEEEF,         // Granularity
909                0xF0F1F2F3,         // Range Minimum
910                0xF4F5F6F7,         // Range Maximum
911                0xF8F9FAFB,         // Translation Offset
912                0xFCFDFEFF,         // Length
913                0xF0, "PATH", , TypeStatic, DenseTranslation)
914        },
915
916        ResourceTemplate ()
917        {
918            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
919                0xECEDEEEF,         // Granularity
920                0xF0F1F2F3,         // Range Minimum
921                0xF4F5F6F7,         // Range Maximum
922                0xF8F9FAFB,         // Translation Offset
923                0xFCFDFEFF,         // Length
924                0xFF, "!\"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !\"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !\"#$%&\'()*", , TypeStatic, DenseTranslation)
925        },
926
927        /* Particular cases */
928
929        ResourceTemplate ()
930        {
931            DWordIO (ResourceConsumer, MinFixed, MaxFixed, SubDecode, EntireRange,
932                0xECEDEEEF,         // Granularity
933                0xF0F1F2F3,         // Range Minimum
934                0xF4F5F6F7,         // Range Maximum
935                0xF8F9FAFB,         // Translation Offset
936                0xFCFDFEFF,         // Length
937                0xFF, "PATHPATHPATH", , TypeTranslation, SparseTranslation)
938        },
939
940        ResourceTemplate ()
941        {
942            DWordIO (ResourceConsumer, MinFixed, MaxFixed, SubDecode, EntireRange,
943                0x00000000,         // Granularity
944                0x00000000,         // Range Minimum
945                0x00000000,         // Range Maximum
946                0x00000000,         // Translation Offset
947                0x00000000,         // Length
948                0xFF, "PATHPATHPATH", , TypeTranslation, SparseTranslation)
949        },
950
951        /* 20051021, relaxation for omitted ResourceSource (bug-fix 70 rejection) */
952
953        ResourceTemplate ()
954        {
955            DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
956                0xECEDEEEF,         // Granularity
957                0xF0F1F2F3,         // Range Minimum
958                0xF4F5F6F7,         // Range Maximum
959                0xF8F9FAFB,         // Translation Offset
960                0xFCFDFEFF,         // Length
961                0x0F,, , TypeStatic, DenseTranslation)
962        }
963    })
964    Method (RT0D, 0, Serialized)
965    {
966        /* Emit test header, set the filename */
967
968        THDR (__METHOD__, "DWordIo Resource Descriptor Macro", "dwordio.asl")
969        /* Main test case for packages above */
970
971        M330 (__METHOD__, 0x25, "p418", P418, P419)
972        /* Check resource descriptor tag offsets */
973
974        Local0 = ResourceTemplate ()
975            {
976                DWordIO (ResourceProducer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
977                    0xECEDEEEF,         // Granularity
978                    0xF0F1F2F3,         // Range Minimum
979                    0xF4F5F6F7,         // Range Maximum
980                    0xF8F9FAFB,         // Translation Offset
981                    0xFCFDFEFF,         // Length
982                    ,, , TypeStatic, DenseTranslation)
983                DWordIO (ResourceConsumer, MinNotFixed, MaxNotFixed, PosDecode, EntireRange,
984                    0xECEDEEEF,         // Granularity
985                    0xF0F1F2F3,         // Range Minimum
986                    0xF4F5F6F7,         // Range Maximum
987                    0xF8F9FAFB,         // Translation Offset
988                    0xFCFDFEFF,         // Length
989                    ,, , TypeStatic, DenseTranslation)
990            }
991        M331 (__METHOD__, 0x01, 0x21, 0x21, 0xF1, 0xF1, "_DEC")
992        M331 (__METHOD__, 0x02, 0x22, 0x22, 0xF2, 0xF2, "_MIF")
993        M331 (__METHOD__, 0x03, 0x23, 0x23, 0xF3, 0xF3, "_MAF")
994        M331 (__METHOD__, 0x04, 0x28, 0x28, 0xF8, 0xF8, "_RNG")
995        M331 (__METHOD__, 0x05, 0x2C, 0x2C, 0xFC, 0xFC, "_TTP")
996        M331 (__METHOD__, 0x06, 0x2D, 0x2D, 0xFD, 0xFD, "_TRS")
997        M331 (__METHOD__, 0x07, 0x30, 0x30, 0x0100, 0x0100, "_GRA")
998        M331 (__METHOD__, 0x08, 0x50, 0x50, 0x0120, 0x0120, "_MIN")
999        M331 (__METHOD__, 0x09, 0x70, 0x70, 0x0140, 0x0140, "_MAX")
1000        M331 (__METHOD__, 0x0A, 0x90, 0x90, 0x0160, 0x0160, "_TRA")
1001        M331 (__METHOD__, 0x0B, 0xB0, 0xB0, 0x0180, 0x0180, "_LEN")
1002    }
1003