dmresrcl.c revision 193341
1100966Siwasaki/*******************************************************************************
2100966Siwasaki *
3100966Siwasaki * Module Name: dmresrcl.c - "Large" Resource Descriptor disassembly
4100966Siwasaki *
5100966Siwasaki ******************************************************************************/
6100966Siwasaki
7100966Siwasaki/******************************************************************************
8100966Siwasaki *
9100966Siwasaki * 1. Copyright Notice
10100966Siwasaki *
11193267Sjkim * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp.
12100966Siwasaki * All rights reserved.
13100966Siwasaki *
14100966Siwasaki * 2. License
15100966Siwasaki *
16100966Siwasaki * 2.1. This is your license from Intel Corp. under its intellectual property
17100966Siwasaki * rights.  You may have additional license terms from the party that provided
18100966Siwasaki * you this software, covering your right to use that party's intellectual
19100966Siwasaki * property rights.
20100966Siwasaki *
21100966Siwasaki * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
22100966Siwasaki * copy of the source code appearing in this file ("Covered Code") an
23100966Siwasaki * irrevocable, perpetual, worldwide license under Intel's copyrights in the
24100966Siwasaki * base code distributed originally by Intel ("Original Intel Code") to copy,
25100966Siwasaki * make derivatives, distribute, use and display any portion of the Covered
26100966Siwasaki * Code in any form, with the right to sublicense such rights; and
27100966Siwasaki *
28100966Siwasaki * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
29100966Siwasaki * license (with the right to sublicense), under only those claims of Intel
30100966Siwasaki * patents that are infringed by the Original Intel Code, to make, use, sell,
31100966Siwasaki * offer to sell, and import the Covered Code and derivative works thereof
32100966Siwasaki * solely to the minimum extent necessary to exercise the above copyright
33100966Siwasaki * license, and in no event shall the patent license extend to any additions
34100966Siwasaki * to or modifications of the Original Intel Code.  No other license or right
35100966Siwasaki * is granted directly or by implication, estoppel or otherwise;
36100966Siwasaki *
37100966Siwasaki * The above copyright and patent license is granted only if the following
38100966Siwasaki * conditions are met:
39100966Siwasaki *
40100966Siwasaki * 3. Conditions
41100966Siwasaki *
42100966Siwasaki * 3.1. Redistribution of Source with Rights to Further Distribute Source.
43100966Siwasaki * Redistribution of source code of any substantial portion of the Covered
44100966Siwasaki * Code or modification with rights to further distribute source must include
45100966Siwasaki * the above Copyright Notice, the above License, this list of Conditions,
46100966Siwasaki * and the following Disclaimer and Export Compliance provision.  In addition,
47100966Siwasaki * Licensee must cause all Covered Code to which Licensee contributes to
48100966Siwasaki * contain a file documenting the changes Licensee made to create that Covered
49100966Siwasaki * Code and the date of any change.  Licensee must include in that file the
50100966Siwasaki * documentation of any changes made by any predecessor Licensee.  Licensee
51100966Siwasaki * must include a prominent statement that the modification is derived,
52100966Siwasaki * directly or indirectly, from Original Intel Code.
53100966Siwasaki *
54100966Siwasaki * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
55100966Siwasaki * Redistribution of source code of any substantial portion of the Covered
56100966Siwasaki * Code or modification without rights to further distribute source must
57100966Siwasaki * include the following Disclaimer and Export Compliance provision in the
58100966Siwasaki * documentation and/or other materials provided with distribution.  In
59100966Siwasaki * addition, Licensee may not authorize further sublicense of source of any
60100966Siwasaki * portion of the Covered Code, and must include terms to the effect that the
61100966Siwasaki * license from Licensee to its licensee is limited to the intellectual
62100966Siwasaki * property embodied in the software Licensee provides to its licensee, and
63100966Siwasaki * not to intellectual property embodied in modifications its licensee may
64100966Siwasaki * make.
65100966Siwasaki *
66100966Siwasaki * 3.3. Redistribution of Executable. Redistribution in executable form of any
67100966Siwasaki * substantial portion of the Covered Code or modification must reproduce the
68100966Siwasaki * above Copyright Notice, and the following Disclaimer and Export Compliance
69100966Siwasaki * provision in the documentation and/or other materials provided with the
70100966Siwasaki * distribution.
71100966Siwasaki *
72100966Siwasaki * 3.4. Intel retains all right, title, and interest in and to the Original
73100966Siwasaki * Intel Code.
74100966Siwasaki *
75100966Siwasaki * 3.5. Neither the name Intel nor any other trademark owned or controlled by
76100966Siwasaki * Intel shall be used in advertising or otherwise to promote the sale, use or
77100966Siwasaki * other dealings in products derived from or relating to the Covered Code
78100966Siwasaki * without prior written authorization from Intel.
79100966Siwasaki *
80100966Siwasaki * 4. Disclaimer and Export Compliance
81100966Siwasaki *
82100966Siwasaki * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
83100966Siwasaki * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
84100966Siwasaki * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
85100966Siwasaki * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
86100966Siwasaki * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
87100966Siwasaki * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
88100966Siwasaki * PARTICULAR PURPOSE.
89100966Siwasaki *
90100966Siwasaki * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
91100966Siwasaki * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
92100966Siwasaki * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
93100966Siwasaki * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
94100966Siwasaki * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
95100966Siwasaki * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
96100966Siwasaki * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
97100966Siwasaki * LIMITED REMEDY.
98100966Siwasaki *
99100966Siwasaki * 4.3. Licensee shall not export, either directly or indirectly, any of this
100100966Siwasaki * software or system incorporating such software without first obtaining any
101100966Siwasaki * required license or other approval from the U. S. Department of Commerce or
102100966Siwasaki * any other agency or department of the United States Government.  In the
103100966Siwasaki * event Licensee exports any such software from the United States or
104100966Siwasaki * re-exports any such software from a foreign destination, Licensee shall
105100966Siwasaki * ensure that the distribution and export/re-export of the software is in
106100966Siwasaki * compliance with all laws, regulations, orders, or other restrictions of the
107100966Siwasaki * U.S. Export Administration Regulations. Licensee agrees that neither it nor
108100966Siwasaki * any of its subsidiaries will export/re-export any technical data, process,
109100966Siwasaki * software, or service, directly or indirectly, to any country for which the
110100966Siwasaki * United States government or any agency thereof requires an export license,
111100966Siwasaki * other governmental approval, or letter of assurance, without first obtaining
112100966Siwasaki * such license, approval or letter.
113100966Siwasaki *
114100966Siwasaki *****************************************************************************/
115100966Siwasaki
116100966Siwasaki
117193341Sjkim#include <contrib/dev/acpica/include/acpi.h>
118193341Sjkim#include <contrib/dev/acpica/include/accommon.h>
119193341Sjkim#include <contrib/dev/acpica/include/acdisasm.h>
120100966Siwasaki
121100966Siwasaki
122100966Siwasaki#ifdef ACPI_DISASSEMBLER
123100966Siwasaki
124102550Siwasaki#define _COMPONENT          ACPI_CA_DEBUGGER
125100966Siwasaki        ACPI_MODULE_NAME    ("dbresrcl")
126100966Siwasaki
127100966Siwasaki
128151937Sjkim/* Common names for address and memory descriptors */
129151937Sjkim
130151937Sjkimstatic char                 *AcpiDmAddressNames[] =
131151937Sjkim{
132167802Sjkim    "Granularity",
133167802Sjkim    "Range Minimum",
134167802Sjkim    "Range Maximum",
135167802Sjkim    "Translation Offset",
136167802Sjkim    "Length"
137151937Sjkim};
138151937Sjkim
139151937Sjkimstatic char                 *AcpiDmMemoryNames[] =
140151937Sjkim{
141167802Sjkim    "Range Minimum",
142167802Sjkim    "Range Maximum",
143167802Sjkim    "Alignment",
144167802Sjkim    "Length"
145151937Sjkim};
146151937Sjkim
147151937Sjkim
148151937Sjkim/* Local prototypes */
149151937Sjkim
150151937Sjkimstatic void
151151937SjkimAcpiDmSpaceFlags (
152151937Sjkim        UINT8               Flags);
153151937Sjkim
154151937Sjkimstatic void
155151937SjkimAcpiDmIoFlags (
156151937Sjkim        UINT8               Flags);
157151937Sjkim
158151937Sjkimstatic void
159151937SjkimAcpiDmIoFlags2 (
160151937Sjkim        UINT8               SpecificFlags);
161151937Sjkim
162151937Sjkimstatic void
163151937SjkimAcpiDmMemoryFlags (
164151937Sjkim    UINT8                   Flags,
165151937Sjkim    UINT8                   SpecificFlags);
166151937Sjkim
167151937Sjkimstatic void
168151937SjkimAcpiDmMemoryFlags2 (
169151937Sjkim    UINT8                   SpecificFlags);
170151937Sjkim
171151937Sjkimstatic void
172151937SjkimAcpiDmResourceSource (
173151937Sjkim    AML_RESOURCE            *Resource,
174151937Sjkim    ACPI_SIZE               MinimumLength,
175151937Sjkim    UINT32                  Length);
176151937Sjkim
177151937Sjkimstatic void
178151937SjkimAcpiDmAddressFields (
179151937Sjkim    void                    *Source,
180151937Sjkim    UINT8                   Type,
181151937Sjkim    UINT32                  Level);
182151937Sjkim
183151937Sjkimstatic void
184151937SjkimAcpiDmAddressPrefix (
185151937Sjkim    UINT8                   Type);
186151937Sjkim
187151937Sjkimstatic void
188151937SjkimAcpiDmAddressCommon (
189151937Sjkim    AML_RESOURCE            *Resource,
190151937Sjkim    UINT8                   Type,
191151937Sjkim    UINT32                  Level);
192151937Sjkim
193151937Sjkimstatic void
194151937SjkimAcpiDmAddressFlags (
195151937Sjkim    AML_RESOURCE            *Resource);
196151937Sjkim
197151937Sjkim
198100966Siwasaki/*******************************************************************************
199100966Siwasaki *
200151937Sjkim * FUNCTION:    AcpiDmMemoryFields
201151937Sjkim *
202151937Sjkim * PARAMETERS:  Source              - Pointer to the contiguous data fields
203151937Sjkim *              Type                - 16 or 32 (bit)
204151937Sjkim *              Level               - Current source code indentation level
205151937Sjkim *
206151937Sjkim * RETURN:      None
207151937Sjkim *
208151937Sjkim * DESCRIPTION: Decode fields common to Memory24 and Memory32 descriptors
209151937Sjkim *
210151937Sjkim ******************************************************************************/
211151937Sjkim
212151937Sjkimstatic void
213151937SjkimAcpiDmMemoryFields (
214151937Sjkim    void                    *Source,
215151937Sjkim    UINT8                   Type,
216151937Sjkim    UINT32                  Level)
217151937Sjkim{
218193267Sjkim    UINT32                  i;
219151937Sjkim
220151937Sjkim
221151937Sjkim    for (i = 0; i < 4; i++)
222151937Sjkim    {
223151937Sjkim        AcpiDmIndent (Level + 1);
224151937Sjkim
225151937Sjkim        switch (Type)
226151937Sjkim        {
227151937Sjkim        case 16:
228167802Sjkim            AcpiDmDumpInteger16 (ACPI_CAST_PTR (UINT16, Source)[i],
229167802Sjkim                AcpiDmMemoryNames[i]);
230151937Sjkim            break;
231151937Sjkim
232151937Sjkim        case 32:
233167802Sjkim            AcpiDmDumpInteger32 (ACPI_CAST_PTR (UINT32, Source)[i],
234167802Sjkim                AcpiDmMemoryNames[i]);
235151937Sjkim            break;
236151937Sjkim
237151937Sjkim        default:
238151937Sjkim            return;
239151937Sjkim        }
240151937Sjkim    }
241151937Sjkim}
242151937Sjkim
243151937Sjkim
244151937Sjkim/*******************************************************************************
245151937Sjkim *
246167802Sjkim * FUNCTION:    AcpiDmAddressFields
247151937Sjkim *
248151937Sjkim * PARAMETERS:  Source              - Pointer to the contiguous data fields
249151937Sjkim *              Type                - 16, 32, or 64 (bit)
250151937Sjkim *              Level               - Current source code indentation level
251151937Sjkim *
252151937Sjkim * RETURN:      None
253151937Sjkim *
254151937Sjkim * DESCRIPTION: Decode fields common to address descriptors
255151937Sjkim *
256151937Sjkim ******************************************************************************/
257151937Sjkim
258151937Sjkimstatic void
259151937SjkimAcpiDmAddressFields (
260151937Sjkim    void                    *Source,
261151937Sjkim    UINT8                   Type,
262151937Sjkim    UINT32                  Level)
263151937Sjkim{
264193267Sjkim    UINT32                  i;
265151937Sjkim
266151937Sjkim
267151937Sjkim    AcpiOsPrintf ("\n");
268151937Sjkim
269151937Sjkim    for (i = 0; i < 5; i++)
270151937Sjkim    {
271151937Sjkim        AcpiDmIndent (Level + 1);
272151937Sjkim
273151937Sjkim        switch (Type)
274151937Sjkim        {
275151937Sjkim        case 16:
276167802Sjkim            AcpiDmDumpInteger16 (ACPI_CAST_PTR (UINT16, Source)[i],
277167802Sjkim                AcpiDmAddressNames[i]);
278151937Sjkim            break;
279151937Sjkim
280151937Sjkim        case 32:
281167802Sjkim            AcpiDmDumpInteger32 (ACPI_CAST_PTR (UINT32, Source)[i],
282167802Sjkim                AcpiDmAddressNames[i]);
283151937Sjkim            break;
284151937Sjkim
285151937Sjkim        case 64:
286167802Sjkim            AcpiDmDumpInteger64 (ACPI_CAST_PTR (UINT64, Source)[i],
287167802Sjkim                AcpiDmAddressNames[i]);
288151937Sjkim            break;
289151937Sjkim
290151937Sjkim        default:
291151937Sjkim            return;
292151937Sjkim        }
293151937Sjkim    }
294151937Sjkim}
295151937Sjkim
296151937Sjkim
297151937Sjkim/*******************************************************************************
298151937Sjkim *
299151937Sjkim * FUNCTION:    AcpiDmAddressPrefix
300151937Sjkim *
301151937Sjkim * PARAMETERS:  Type                - Descriptor type
302151937Sjkim *
303151937Sjkim * RETURN:      None
304151937Sjkim *
305151937Sjkim * DESCRIPTION: Emit name prefix representing the address descriptor type
306151937Sjkim *
307151937Sjkim ******************************************************************************/
308151937Sjkim
309151937Sjkimstatic void
310151937SjkimAcpiDmAddressPrefix (
311151937Sjkim    UINT8                   Type)
312151937Sjkim{
313151937Sjkim
314151937Sjkim    switch (Type)
315151937Sjkim    {
316151937Sjkim    case ACPI_RESOURCE_TYPE_ADDRESS16:
317151937Sjkim        AcpiOsPrintf ("Word");
318151937Sjkim        break;
319151937Sjkim
320151937Sjkim    case ACPI_RESOURCE_TYPE_ADDRESS32:
321151937Sjkim        AcpiOsPrintf ("DWord");
322151937Sjkim        break;
323151937Sjkim
324151937Sjkim    case ACPI_RESOURCE_TYPE_ADDRESS64:
325151937Sjkim        AcpiOsPrintf ("QWord");
326151937Sjkim        break;
327151937Sjkim
328151937Sjkim    case ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64:
329151937Sjkim        AcpiOsPrintf ("Extended");
330151937Sjkim        break;
331151937Sjkim
332151937Sjkim    default:
333151937Sjkim        return;
334151937Sjkim    }
335151937Sjkim}
336151937Sjkim
337151937Sjkim
338151937Sjkim/*******************************************************************************
339151937Sjkim *
340151937Sjkim * FUNCTION:    AcpiDmAddressCommon
341151937Sjkim *
342151937Sjkim * PARAMETERS:  Resource            - Raw AML descriptor
343151937Sjkim *              Type                - Descriptor type
344151937Sjkim *              Level               - Current source code indentation level
345151937Sjkim *
346151937Sjkim * RETURN:      None
347151937Sjkim *
348151937Sjkim * DESCRIPTION: Emit common name and flag fields common to address descriptors
349151937Sjkim *
350151937Sjkim ******************************************************************************/
351151937Sjkim
352151937Sjkimstatic void
353151937SjkimAcpiDmAddressCommon (
354151937Sjkim    AML_RESOURCE            *Resource,
355151937Sjkim    UINT8                   Type,
356151937Sjkim    UINT32                  Level)
357151937Sjkim{
358151937Sjkim    UINT8                   ResourceType;
359151937Sjkim    UINT8                   SpecificFlags;
360151937Sjkim    UINT8                   Flags;
361151937Sjkim
362151937Sjkim
363151937Sjkim    ResourceType = Resource->Address.ResourceType;
364151937Sjkim    SpecificFlags = Resource->Address.SpecificFlags;
365151937Sjkim    Flags = Resource->Address.Flags;
366151937Sjkim
367151937Sjkim    AcpiDmIndent (Level);
368151937Sjkim
369151937Sjkim    /* Validate ResourceType */
370151937Sjkim
371151937Sjkim    if ((ResourceType > 2) && (ResourceType < 0xC0))
372151937Sjkim    {
373151937Sjkim        AcpiOsPrintf ("/**** Invalid Resource Type: 0x%X ****/", ResourceType);
374151937Sjkim        return;
375151937Sjkim    }
376151937Sjkim
377151937Sjkim    /* Prefix is either Word, DWord, QWord, or Extended */
378151937Sjkim
379151937Sjkim    AcpiDmAddressPrefix (Type);
380151937Sjkim
381151937Sjkim    /* Resource Types above 0xC0 are vendor-defined */
382151937Sjkim
383151937Sjkim    if (ResourceType > 2)
384151937Sjkim    {
385151937Sjkim        AcpiOsPrintf ("Space (0x%2.2X, ", ResourceType);
386151937Sjkim        AcpiDmSpaceFlags (Flags);
387151937Sjkim        AcpiOsPrintf (" 0x%2.2X,", SpecificFlags);
388151937Sjkim        return;
389151937Sjkim    }
390151937Sjkim
391151937Sjkim    /* This is either a Memory, IO, or BusNumber descriptor (0,1,2) */
392151937Sjkim
393167802Sjkim    AcpiOsPrintf ("%s (", AcpiGbl_WordDecode [ResourceType & 0x3]);
394151937Sjkim
395151937Sjkim    /* Decode the general and type-specific flags */
396151937Sjkim
397151937Sjkim    if (ResourceType == ACPI_MEMORY_RANGE)
398151937Sjkim    {
399151937Sjkim        AcpiDmMemoryFlags (Flags, SpecificFlags);
400151937Sjkim    }
401151937Sjkim    else /* IO range or BusNumberRange */
402151937Sjkim    {
403151937Sjkim        AcpiDmIoFlags (Flags);
404151937Sjkim        if (ResourceType == ACPI_IO_RANGE)
405151937Sjkim        {
406167802Sjkim            AcpiOsPrintf (" %s,", AcpiGbl_RngDecode [SpecificFlags & 0x3]);
407151937Sjkim        }
408151937Sjkim    }
409151937Sjkim}
410151937Sjkim
411151937Sjkim
412151937Sjkim/*******************************************************************************
413151937Sjkim *
414151937Sjkim * FUNCTION:    AcpiDmAddressFlags
415151937Sjkim *
416151937Sjkim * PARAMETERS:  Resource        - Raw AML descriptor
417151937Sjkim *
418151937Sjkim * RETURN:      None
419151937Sjkim *
420151937Sjkim * DESCRIPTION: Emit flags common to address descriptors
421151937Sjkim *
422151937Sjkim ******************************************************************************/
423151937Sjkim
424151937Sjkimstatic void
425151937SjkimAcpiDmAddressFlags (
426151937Sjkim    AML_RESOURCE            *Resource)
427151937Sjkim{
428151937Sjkim
429151937Sjkim    if (Resource->Address.ResourceType == ACPI_IO_RANGE)
430151937Sjkim    {
431151937Sjkim        AcpiDmIoFlags2 (Resource->Address.SpecificFlags);
432151937Sjkim    }
433151937Sjkim    else if (Resource->Address.ResourceType == ACPI_MEMORY_RANGE)
434151937Sjkim    {
435151937Sjkim        AcpiDmMemoryFlags2 (Resource->Address.SpecificFlags);
436151937Sjkim    }
437151937Sjkim}
438151937Sjkim
439151937Sjkim
440151937Sjkim/*******************************************************************************
441151937Sjkim *
442151937Sjkim * FUNCTION:    AcpiDmSpaceFlags
443151937Sjkim *
444151937Sjkim * PARAMETERS:  Flags               - Flag byte to be decoded
445151937Sjkim *
446151937Sjkim * RETURN:      None
447151937Sjkim *
448151937Sjkim * DESCRIPTION: Decode the flags specific to Space Address space descriptors
449151937Sjkim *
450151937Sjkim ******************************************************************************/
451151937Sjkim
452151937Sjkimstatic void
453151937SjkimAcpiDmSpaceFlags (
454151937Sjkim    UINT8                   Flags)
455151937Sjkim{
456151937Sjkim
457151937Sjkim    AcpiOsPrintf ("%s, %s, %s, %s,",
458151937Sjkim        AcpiGbl_ConsumeDecode [(Flags & 1)],
459167802Sjkim        AcpiGbl_DecDecode [(Flags & 0x2) >> 1],
460151937Sjkim        AcpiGbl_MinDecode [(Flags & 0x4) >> 2],
461151937Sjkim        AcpiGbl_MaxDecode [(Flags & 0x8) >> 3]);
462151937Sjkim}
463151937Sjkim
464151937Sjkim
465151937Sjkim/*******************************************************************************
466151937Sjkim *
467100966Siwasaki * FUNCTION:    AcpiDmIoFlags
468100966Siwasaki *
469100966Siwasaki * PARAMETERS:  Flags               - Flag byte to be decoded
470100966Siwasaki *
471100966Siwasaki * RETURN:      None
472100966Siwasaki *
473100966Siwasaki * DESCRIPTION: Decode the flags specific to IO Address space descriptors
474100966Siwasaki *
475100966Siwasaki ******************************************************************************/
476100966Siwasaki
477151937Sjkimstatic void
478100966SiwasakiAcpiDmIoFlags (
479100966Siwasaki        UINT8               Flags)
480100966Siwasaki{
481100966Siwasaki    AcpiOsPrintf ("%s, %s, %s, %s,",
482100966Siwasaki        AcpiGbl_ConsumeDecode [(Flags & 1)],
483100966Siwasaki        AcpiGbl_MinDecode [(Flags & 0x4) >> 2],
484100966Siwasaki        AcpiGbl_MaxDecode [(Flags & 0x8) >> 3],
485167802Sjkim        AcpiGbl_DecDecode [(Flags & 0x2) >> 1]);
486100966Siwasaki}
487100966Siwasaki
488100966Siwasaki
489100966Siwasaki/*******************************************************************************
490100966Siwasaki *
491151937Sjkim * FUNCTION:    AcpiDmIoFlags2
492151937Sjkim *
493151937Sjkim * PARAMETERS:  SpecificFlags       - "Specific" flag byte to be decoded
494151937Sjkim *
495151937Sjkim * RETURN:      None
496151937Sjkim *
497151937Sjkim * DESCRIPTION: Decode the flags specific to IO Address space descriptors
498151937Sjkim *
499151937Sjkim ******************************************************************************/
500151937Sjkim
501151937Sjkimstatic void
502151937SjkimAcpiDmIoFlags2 (
503151937Sjkim        UINT8               SpecificFlags)
504151937Sjkim{
505151937Sjkim
506151937Sjkim    AcpiOsPrintf (", %s",
507167802Sjkim        AcpiGbl_TtpDecode [(SpecificFlags & 0x10) >> 4]);
508151937Sjkim
509151937Sjkim    /* TRS is only used if TTP is TypeTranslation */
510151937Sjkim
511151937Sjkim    if (SpecificFlags & 0x10)
512151937Sjkim    {
513151937Sjkim        AcpiOsPrintf (", %s",
514167802Sjkim            AcpiGbl_TrsDecode [(SpecificFlags & 0x20) >> 5]);
515151937Sjkim    }
516151937Sjkim}
517151937Sjkim
518151937Sjkim
519151937Sjkim/*******************************************************************************
520151937Sjkim *
521100966Siwasaki * FUNCTION:    AcpiDmMemoryFlags
522100966Siwasaki *
523100966Siwasaki * PARAMETERS:  Flags               - Flag byte to be decoded
524100966Siwasaki *              SpecificFlags       - "Specific" flag byte to be decoded
525100966Siwasaki *
526100966Siwasaki * RETURN:      None
527100966Siwasaki *
528100966Siwasaki * DESCRIPTION: Decode flags specific to Memory Address Space descriptors
529100966Siwasaki *
530100966Siwasaki ******************************************************************************/
531100966Siwasaki
532151937Sjkimstatic void
533100966SiwasakiAcpiDmMemoryFlags (
534100966Siwasaki    UINT8                   Flags,
535100966Siwasaki    UINT8                   SpecificFlags)
536100966Siwasaki{
537151937Sjkim
538100966Siwasaki    AcpiOsPrintf ("%s, %s, %s, %s, %s, %s,",
539100966Siwasaki        AcpiGbl_ConsumeDecode [(Flags & 1)],
540167802Sjkim        AcpiGbl_DecDecode [(Flags & 0x2) >> 1],
541100966Siwasaki        AcpiGbl_MinDecode [(Flags & 0x4) >> 2],
542100966Siwasaki        AcpiGbl_MaxDecode [(Flags & 0x8) >> 3],
543167802Sjkim        AcpiGbl_MemDecode [(SpecificFlags & 0x6) >> 1],
544167802Sjkim        AcpiGbl_RwDecode [(SpecificFlags & 0x1)]);
545100966Siwasaki}
546100966Siwasaki
547100966Siwasaki
548100966Siwasaki/*******************************************************************************
549100966Siwasaki *
550151937Sjkim * FUNCTION:    AcpiDmMemoryFlags2
551151937Sjkim *
552151937Sjkim * PARAMETERS:  SpecificFlags       - "Specific" flag byte to be decoded
553151937Sjkim *
554151937Sjkim * RETURN:      None
555151937Sjkim *
556151937Sjkim * DESCRIPTION: Decode flags specific to Memory Address Space descriptors
557151937Sjkim *
558151937Sjkim ******************************************************************************/
559151937Sjkim
560151937Sjkimstatic void
561151937SjkimAcpiDmMemoryFlags2 (
562151937Sjkim    UINT8                   SpecificFlags)
563151937Sjkim{
564151937Sjkim
565151937Sjkim    AcpiOsPrintf (", %s, %s",
566167802Sjkim        AcpiGbl_MtpDecode [(SpecificFlags & 0x18) >> 3],
567167802Sjkim        AcpiGbl_TtpDecode [(SpecificFlags & 0x20) >> 5]);
568151937Sjkim}
569151937Sjkim
570151937Sjkim
571151937Sjkim/*******************************************************************************
572151937Sjkim *
573151937Sjkim * FUNCTION:    AcpiDmResourceSource
574151937Sjkim *
575151937Sjkim * PARAMETERS:  Resource        - Raw AML descriptor
576151937Sjkim *              MinimumLength   - descriptor length without optional fields
577151937Sjkim *              ResourceLength
578151937Sjkim *
579151937Sjkim * RETURN:      None
580151937Sjkim *
581151937Sjkim * DESCRIPTION: Dump optional ResourceSource fields of an address descriptor
582151937Sjkim *
583151937Sjkim ******************************************************************************/
584151937Sjkim
585151937Sjkimstatic void
586151937SjkimAcpiDmResourceSource (
587151937Sjkim    AML_RESOURCE            *Resource,
588151937Sjkim    ACPI_SIZE               MinimumTotalLength,
589151937Sjkim    UINT32                  ResourceLength)
590151937Sjkim{
591151937Sjkim    UINT8                   *AmlResourceSource;
592151937Sjkim    UINT32                  TotalLength;
593151937Sjkim
594151937Sjkim
595151937Sjkim    TotalLength = ResourceLength + sizeof (AML_RESOURCE_LARGE_HEADER);
596151937Sjkim
597151937Sjkim    /* Check if the optional ResourceSource fields are present */
598151937Sjkim
599151937Sjkim    if (TotalLength <= MinimumTotalLength)
600151937Sjkim    {
601151937Sjkim        /* The two optional fields are not used */
602151937Sjkim
603167802Sjkim        AcpiOsPrintf (",, ");
604151937Sjkim        return;
605151937Sjkim    }
606151937Sjkim
607151937Sjkim    /* Get a pointer to the ResourceSource */
608151937Sjkim
609167802Sjkim    AmlResourceSource = ACPI_ADD_PTR (UINT8, Resource, MinimumTotalLength);
610151937Sjkim
611151937Sjkim    /*
612151937Sjkim     * Always emit the ResourceSourceIndex (Byte)
613151937Sjkim     *
614151937Sjkim     * NOTE: Some ASL compilers always create a 0 byte (in the AML) for the
615151937Sjkim     * Index even if the String does not exist. Although this is in violation
616151937Sjkim     * of the ACPI specification, it is very important to emit ASL code that
617151937Sjkim     * can be compiled back to the identical AML. There may be fields and/or
618151937Sjkim     * indexes into the resource template buffer that are compiled to absolute
619151937Sjkim     * offsets, and these will be broken if the AML length is changed.
620151937Sjkim     */
621151937Sjkim    AcpiOsPrintf ("0x%2.2X,", (UINT32) AmlResourceSource[0]);
622151937Sjkim
623151937Sjkim    /* Make sure that the ResourceSource string exists before dumping it */
624151937Sjkim
625151937Sjkim    if (TotalLength > (MinimumTotalLength + 1))
626151937Sjkim    {
627151937Sjkim        AcpiOsPrintf (" ");
628151937Sjkim        AcpiUtPrintString ((char *) &AmlResourceSource[1], ACPI_UINT8_MAX);
629151937Sjkim    }
630151937Sjkim
631167802Sjkim    AcpiOsPrintf (", ");
632151937Sjkim}
633151937Sjkim
634151937Sjkim
635151937Sjkim/*******************************************************************************
636151937Sjkim *
637100966Siwasaki * FUNCTION:    AcpiDmWordDescriptor
638100966Siwasaki *
639100966Siwasaki * PARAMETERS:  Resource            - Pointer to the resource descriptor
640100966Siwasaki *              Length              - Length of the descriptor in bytes
641100966Siwasaki *              Level               - Current source code indentation level
642100966Siwasaki *
643100966Siwasaki * RETURN:      None
644100966Siwasaki *
645100966Siwasaki * DESCRIPTION: Decode a Word Address Space descriptor
646100966Siwasaki *
647100966Siwasaki ******************************************************************************/
648100966Siwasaki
649100966Siwasakivoid
650100966SiwasakiAcpiDmWordDescriptor (
651151937Sjkim    AML_RESOURCE            *Resource,
652100966Siwasaki    UINT32                  Length,
653100966Siwasaki    UINT32                  Level)
654100966Siwasaki{
655100966Siwasaki
656151937Sjkim    /* Dump resource name and flags */
657100966Siwasaki
658151937Sjkim    AcpiDmAddressCommon (Resource, ACPI_RESOURCE_TYPE_ADDRESS16, Level);
659100966Siwasaki
660151937Sjkim    /* Dump the 5 contiguous WORD values */
661100966Siwasaki
662151937Sjkim    AcpiDmAddressFields (&Resource->Address16.Granularity, 16, Level);
663100966Siwasaki
664151937Sjkim    /* The ResourceSource fields are optional */
665151937Sjkim
666100966Siwasaki    AcpiDmIndent (Level + 1);
667151937Sjkim    AcpiDmResourceSource (Resource, sizeof (AML_RESOURCE_ADDRESS16), Length);
668100966Siwasaki
669167802Sjkim    /* Insert a descriptor name */
670167802Sjkim
671167802Sjkim    AcpiDmDescriptorName ();
672167802Sjkim
673151937Sjkim    /* Type-specific flags */
674100966Siwasaki
675151937Sjkim    AcpiDmAddressFlags (Resource);
676100966Siwasaki    AcpiOsPrintf (")\n");
677100966Siwasaki}
678100966Siwasaki
679100966Siwasaki
680100966Siwasaki/*******************************************************************************
681100966Siwasaki *
682100966Siwasaki * FUNCTION:    AcpiDmDwordDescriptor
683100966Siwasaki *
684100966Siwasaki * PARAMETERS:  Resource            - Pointer to the resource descriptor
685100966Siwasaki *              Length              - Length of the descriptor in bytes
686100966Siwasaki *              Level               - Current source code indentation level
687100966Siwasaki *
688100966Siwasaki * RETURN:      None
689100966Siwasaki *
690100966Siwasaki * DESCRIPTION: Decode a DWord Address Space descriptor
691100966Siwasaki *
692100966Siwasaki ******************************************************************************/
693100966Siwasaki
694100966Siwasakivoid
695100966SiwasakiAcpiDmDwordDescriptor (
696151937Sjkim    AML_RESOURCE            *Resource,
697100966Siwasaki    UINT32                  Length,
698100966Siwasaki    UINT32                  Level)
699100966Siwasaki{
700100966Siwasaki
701151937Sjkim    /* Dump resource name and flags */
702100966Siwasaki
703151937Sjkim    AcpiDmAddressCommon (Resource, ACPI_RESOURCE_TYPE_ADDRESS32, Level);
704100966Siwasaki
705151937Sjkim    /* Dump the 5 contiguous DWORD values */
706100966Siwasaki
707151937Sjkim    AcpiDmAddressFields (&Resource->Address32.Granularity, 32, Level);
708151937Sjkim
709151937Sjkim    /* The ResourceSource fields are optional */
710151937Sjkim
711100966Siwasaki    AcpiDmIndent (Level + 1);
712151937Sjkim    AcpiDmResourceSource (Resource, sizeof (AML_RESOURCE_ADDRESS32), Length);
713100966Siwasaki
714167802Sjkim    /* Insert a descriptor name */
715167802Sjkim
716167802Sjkim    AcpiDmDescriptorName ();
717167802Sjkim
718151937Sjkim    /* Type-specific flags */
719100966Siwasaki
720151937Sjkim    AcpiDmAddressFlags (Resource);
721100966Siwasaki    AcpiOsPrintf (")\n");
722100966Siwasaki}
723100966Siwasaki
724100966Siwasaki
725100966Siwasaki/*******************************************************************************
726100966Siwasaki *
727100966Siwasaki * FUNCTION:    AcpiDmQwordDescriptor
728100966Siwasaki *
729100966Siwasaki * PARAMETERS:  Resource            - Pointer to the resource descriptor
730100966Siwasaki *              Length              - Length of the descriptor in bytes
731100966Siwasaki *              Level               - Current source code indentation level
732100966Siwasaki *
733100966Siwasaki * RETURN:      None
734100966Siwasaki *
735100966Siwasaki * DESCRIPTION: Decode a QWord Address Space descriptor
736100966Siwasaki *
737100966Siwasaki ******************************************************************************/
738100966Siwasaki
739100966Siwasakivoid
740100966SiwasakiAcpiDmQwordDescriptor (
741151937Sjkim    AML_RESOURCE            *Resource,
742100966Siwasaki    UINT32                  Length,
743100966Siwasaki    UINT32                  Level)
744100966Siwasaki{
745100966Siwasaki
746151937Sjkim    /* Dump resource name and flags */
747100966Siwasaki
748151937Sjkim    AcpiDmAddressCommon (Resource, ACPI_RESOURCE_TYPE_ADDRESS64, Level);
749100966Siwasaki
750151937Sjkim    /* Dump the 5 contiguous QWORD values */
751100966Siwasaki
752151937Sjkim    AcpiDmAddressFields (&Resource->Address64.Granularity, 64, Level);
753100966Siwasaki
754151937Sjkim    /* The ResourceSource fields are optional */
755100966Siwasaki
756100966Siwasaki    AcpiDmIndent (Level + 1);
757151937Sjkim    AcpiDmResourceSource (Resource, sizeof (AML_RESOURCE_ADDRESS64), Length);
758100966Siwasaki
759167802Sjkim    /* Insert a descriptor name */
760167802Sjkim
761167802Sjkim    AcpiDmDescriptorName ();
762167802Sjkim
763151937Sjkim    /* Type-specific flags */
764100966Siwasaki
765151937Sjkim    AcpiDmAddressFlags (Resource);
766151937Sjkim    AcpiOsPrintf (")\n");
767151937Sjkim}
768151937Sjkim
769151937Sjkim
770151937Sjkim/*******************************************************************************
771151937Sjkim *
772151937Sjkim * FUNCTION:    AcpiDmExtendedDescriptor
773151937Sjkim *
774151937Sjkim * PARAMETERS:  Resource            - Pointer to the resource descriptor
775151937Sjkim *              Length              - Length of the descriptor in bytes
776151937Sjkim *              Level               - Current source code indentation level
777151937Sjkim *
778151937Sjkim * RETURN:      None
779151937Sjkim *
780151937Sjkim * DESCRIPTION: Decode a Extended Address Space descriptor
781151937Sjkim *
782151937Sjkim ******************************************************************************/
783151937Sjkim
784151937Sjkimvoid
785151937SjkimAcpiDmExtendedDescriptor (
786151937Sjkim    AML_RESOURCE            *Resource,
787151937Sjkim    UINT32                  Length,
788151937Sjkim    UINT32                  Level)
789151937Sjkim{
790151937Sjkim
791151937Sjkim    /* Dump resource name and flags */
792151937Sjkim
793151937Sjkim    AcpiDmAddressCommon (Resource, ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64, Level);
794151937Sjkim
795151937Sjkim    /* Dump the 5 contiguous QWORD values */
796151937Sjkim
797151937Sjkim    AcpiDmAddressFields (&Resource->ExtAddress64.Granularity, 64, Level);
798151937Sjkim
799151937Sjkim    /* Extra field for this descriptor only */
800151937Sjkim
801100966Siwasaki    AcpiDmIndent (Level + 1);
802151937Sjkim    AcpiDmDumpInteger64 (Resource->ExtAddress64.TypeSpecific,
803151937Sjkim        "Type-Specific Attributes");
804100966Siwasaki
805167802Sjkim    /* Insert a descriptor name */
806167802Sjkim
807167802Sjkim    AcpiDmIndent (Level + 1);
808167802Sjkim    AcpiDmDescriptorName ();
809167802Sjkim
810151937Sjkim    /* Type-specific flags */
811100966Siwasaki
812151937Sjkim    AcpiDmAddressFlags (Resource);
813100966Siwasaki    AcpiOsPrintf (")\n");
814100966Siwasaki}
815100966Siwasaki
816100966Siwasaki
817100966Siwasaki/*******************************************************************************
818100966Siwasaki *
819100966Siwasaki * FUNCTION:    AcpiDmMemory24Descriptor
820100966Siwasaki *
821100966Siwasaki * PARAMETERS:  Resource            - Pointer to the resource descriptor
822100966Siwasaki *              Length              - Length of the descriptor in bytes
823100966Siwasaki *              Level               - Current source code indentation level
824100966Siwasaki *
825100966Siwasaki * RETURN:      None
826100966Siwasaki *
827100966Siwasaki * DESCRIPTION: Decode a Memory24 descriptor
828100966Siwasaki *
829100966Siwasaki ******************************************************************************/
830100966Siwasaki
831100966Siwasakivoid
832100966SiwasakiAcpiDmMemory24Descriptor (
833151937Sjkim    AML_RESOURCE            *Resource,
834100966Siwasaki    UINT32                  Length,
835100966Siwasaki    UINT32                  Level)
836100966Siwasaki{
837100966Siwasaki
838151937Sjkim    /* Dump name and read/write flag */
839151937Sjkim
840100966Siwasaki    AcpiDmIndent (Level);
841151937Sjkim    AcpiOsPrintf ("Memory24 (%s,\n",
842167802Sjkim        AcpiGbl_RwDecode [Resource->Memory24.Flags & 1]);
843151937Sjkim
844151937Sjkim    /* Dump the 4 contiguous WORD values */
845151937Sjkim
846151937Sjkim    AcpiDmMemoryFields (&Resource->Memory24.Minimum, 16, Level);
847151937Sjkim
848167802Sjkim    /* Insert a descriptor name */
849167802Sjkim
850151937Sjkim    AcpiDmIndent (Level + 1);
851167802Sjkim    AcpiDmDescriptorName ();
852151937Sjkim    AcpiOsPrintf (")\n");
853100966Siwasaki}
854100966Siwasaki
855100966Siwasaki
856100966Siwasaki/*******************************************************************************
857100966Siwasaki *
858100966Siwasaki * FUNCTION:    AcpiDmMemory32Descriptor
859100966Siwasaki *
860100966Siwasaki * PARAMETERS:  Resource            - Pointer to the resource descriptor
861100966Siwasaki *              Length              - Length of the descriptor in bytes
862100966Siwasaki *              Level               - Current source code indentation level
863100966Siwasaki *
864100966Siwasaki * RETURN:      None
865100966Siwasaki *
866100966Siwasaki * DESCRIPTION: Decode a Memory32 descriptor
867100966Siwasaki *
868100966Siwasaki ******************************************************************************/
869100966Siwasaki
870100966Siwasakivoid
871100966SiwasakiAcpiDmMemory32Descriptor (
872151937Sjkim    AML_RESOURCE            *Resource,
873100966Siwasaki    UINT32                  Length,
874100966Siwasaki    UINT32                  Level)
875100966Siwasaki{
876100966Siwasaki
877151937Sjkim    /* Dump name and read/write flag */
878151937Sjkim
879100966Siwasaki    AcpiDmIndent (Level);
880151937Sjkim    AcpiOsPrintf ("Memory32 (%s,\n",
881167802Sjkim        AcpiGbl_RwDecode [Resource->Memory32.Flags & 1]);
882151937Sjkim
883151937Sjkim    /* Dump the 4 contiguous DWORD values */
884151937Sjkim
885151937Sjkim    AcpiDmMemoryFields (&Resource->Memory32.Minimum, 32, Level);
886151937Sjkim
887167802Sjkim    /* Insert a descriptor name */
888167802Sjkim
889151937Sjkim    AcpiDmIndent (Level + 1);
890167802Sjkim    AcpiDmDescriptorName ();
891151937Sjkim    AcpiOsPrintf (")\n");
892100966Siwasaki}
893100966Siwasaki
894100966Siwasaki
895100966Siwasaki/*******************************************************************************
896100966Siwasaki *
897151937Sjkim * FUNCTION:    AcpiDmFixedMemory32Descriptor
898100966Siwasaki *
899100966Siwasaki * PARAMETERS:  Resource            - Pointer to the resource descriptor
900100966Siwasaki *              Length              - Length of the descriptor in bytes
901100966Siwasaki *              Level               - Current source code indentation level
902100966Siwasaki *
903100966Siwasaki * RETURN:      None
904100966Siwasaki *
905100966Siwasaki * DESCRIPTION: Decode a Fixed Memory32 descriptor
906100966Siwasaki *
907100966Siwasaki ******************************************************************************/
908100966Siwasaki
909100966Siwasakivoid
910151937SjkimAcpiDmFixedMemory32Descriptor (
911151937Sjkim    AML_RESOURCE            *Resource,
912100966Siwasaki    UINT32                  Length,
913100966Siwasaki    UINT32                  Level)
914100966Siwasaki{
915100966Siwasaki
916151937Sjkim    /* Dump name and read/write flag */
917151937Sjkim
918100966Siwasaki    AcpiDmIndent (Level);
919151937Sjkim    AcpiOsPrintf ("Memory32Fixed (%s,\n",
920167802Sjkim        AcpiGbl_RwDecode [Resource->FixedMemory32.Flags & 1]);
921151937Sjkim
922151937Sjkim    AcpiDmIndent (Level + 1);
923151937Sjkim    AcpiDmDumpInteger32 (Resource->FixedMemory32.Address, "Address Base");
924151937Sjkim
925151937Sjkim    AcpiDmIndent (Level + 1);
926151937Sjkim    AcpiDmDumpInteger32 (Resource->FixedMemory32.AddressLength, "Address Length");
927151937Sjkim
928167802Sjkim    /* Insert a descriptor name */
929167802Sjkim
930151937Sjkim    AcpiDmIndent (Level + 1);
931167802Sjkim    AcpiDmDescriptorName ();
932151937Sjkim    AcpiOsPrintf (")\n");
933100966Siwasaki}
934100966Siwasaki
935100966Siwasaki
936100966Siwasaki/*******************************************************************************
937100966Siwasaki *
938100966Siwasaki * FUNCTION:    AcpiDmGenericRegisterDescriptor
939100966Siwasaki *
940100966Siwasaki * PARAMETERS:  Resource            - Pointer to the resource descriptor
941100966Siwasaki *              Length              - Length of the descriptor in bytes
942100966Siwasaki *              Level               - Current source code indentation level
943100966Siwasaki *
944100966Siwasaki * RETURN:      None
945100966Siwasaki *
946100966Siwasaki * DESCRIPTION: Decode a Generic Register descriptor
947100966Siwasaki *
948100966Siwasaki ******************************************************************************/
949100966Siwasaki
950100966Siwasakivoid
951100966SiwasakiAcpiDmGenericRegisterDescriptor (
952151937Sjkim    AML_RESOURCE            *Resource,
953100966Siwasaki    UINT32                  Length,
954100966Siwasaki    UINT32                  Level)
955100966Siwasaki{
956100966Siwasaki
957100966Siwasaki    AcpiDmIndent (Level);
958100966Siwasaki    AcpiOsPrintf ("Register (");
959151937Sjkim    AcpiDmAddressSpace (Resource->GenericReg.AddressSpaceId);
960151937Sjkim    AcpiOsPrintf ("\n");
961102550Siwasaki
962151937Sjkim    AcpiDmIndent (Level + 1);
963167802Sjkim    AcpiDmDumpInteger8 (Resource->GenericReg.BitWidth, "Bit Width");
964102550Siwasaki
965151937Sjkim    AcpiDmIndent (Level + 1);
966167802Sjkim    AcpiDmDumpInteger8 (Resource->GenericReg.BitOffset, "Bit Offset");
967151937Sjkim
968151937Sjkim    AcpiDmIndent (Level + 1);
969167802Sjkim    AcpiDmDumpInteger64 (Resource->GenericReg.Address, "Address");
970151937Sjkim
971151937Sjkim    /* Optional field for ACPI 3.0 */
972151937Sjkim
973167802Sjkim    AcpiDmIndent (Level + 1);
974151937Sjkim    if (Resource->GenericReg.AccessSize)
975151937Sjkim    {
976167802Sjkim        AcpiOsPrintf ("0x%2.2X,               // %s\n",
977167802Sjkim            Resource->GenericReg.AccessSize, "Access Size");
978151937Sjkim        AcpiDmIndent (Level + 1);
979151937Sjkim    }
980167802Sjkim    else
981167802Sjkim    {
982167802Sjkim        AcpiOsPrintf (",");
983167802Sjkim    }
984151937Sjkim
985167802Sjkim    /* DescriptorName was added for ACPI 3.0+ */
986167802Sjkim
987167802Sjkim    AcpiDmDescriptorName ();
988151937Sjkim    AcpiOsPrintf (")\n");
989100966Siwasaki}
990100966Siwasaki
991100966Siwasaki
992100966Siwasaki/*******************************************************************************
993100966Siwasaki *
994100966Siwasaki * FUNCTION:    AcpiDmInterruptDescriptor
995100966Siwasaki *
996100966Siwasaki * PARAMETERS:  Resource            - Pointer to the resource descriptor
997100966Siwasaki *              Length              - Length of the descriptor in bytes
998100966Siwasaki *              Level               - Current source code indentation level
999100966Siwasaki *
1000100966Siwasaki * RETURN:      None
1001100966Siwasaki *
1002100966Siwasaki * DESCRIPTION: Decode a extended Interrupt descriptor
1003100966Siwasaki *
1004100966Siwasaki ******************************************************************************/
1005100966Siwasaki
1006100966Siwasakivoid
1007100966SiwasakiAcpiDmInterruptDescriptor (
1008151937Sjkim    AML_RESOURCE            *Resource,
1009100966Siwasaki    UINT32                  Length,
1010100966Siwasaki    UINT32                  Level)
1011100966Siwasaki{
1012100966Siwasaki    UINT32                  i;
1013100966Siwasaki
1014100966Siwasaki
1015100966Siwasaki    AcpiDmIndent (Level);
1016151937Sjkim    AcpiOsPrintf ("Interrupt (%s, %s, %s, %s, ",
1017151937Sjkim        AcpiGbl_ConsumeDecode [(Resource->ExtendedIrq.Flags & 1)],
1018167802Sjkim        AcpiGbl_HeDecode [(Resource->ExtendedIrq.Flags >> 1) & 1],
1019167802Sjkim        AcpiGbl_LlDecode [(Resource->ExtendedIrq.Flags >> 2) & 1],
1020167802Sjkim        AcpiGbl_ShrDecode [(Resource->ExtendedIrq.Flags >> 3) & 1]);
1021100966Siwasaki
1022151937Sjkim    /*
1023151937Sjkim     * The ResourceSource fields are optional and appear after the interrupt
1024151937Sjkim     * list. Must compute length based on length of the list. First xrupt
1025151937Sjkim     * is included in the struct (reason for -1 below)
1026151937Sjkim     */
1027151937Sjkim    AcpiDmResourceSource (Resource,
1028151937Sjkim        sizeof (AML_RESOURCE_EXTENDED_IRQ) +
1029193267Sjkim            ((UINT32) Resource->ExtendedIrq.InterruptCount - 1) * sizeof (UINT32),
1030151937Sjkim        Resource->ExtendedIrq.ResourceLength);
1031100966Siwasaki
1032167802Sjkim    /* Insert a descriptor name */
1033167802Sjkim
1034167802Sjkim    AcpiDmDescriptorName ();
1035167802Sjkim    AcpiOsPrintf (")\n");
1036167802Sjkim
1037151937Sjkim    /* Dump the interrupt list */
1038114237Snjl
1039100966Siwasaki    AcpiDmIndent (Level);
1040100966Siwasaki    AcpiOsPrintf ("{\n");
1041151937Sjkim    for (i = 0; i < Resource->ExtendedIrq.InterruptCount; i++)
1042100966Siwasaki    {
1043100966Siwasaki        AcpiDmIndent (Level + 1);
1044151937Sjkim        AcpiOsPrintf ("0x%8.8X,\n",
1045151937Sjkim            (UINT32) Resource->ExtendedIrq.Interrupts[i]);
1046100966Siwasaki    }
1047100966Siwasaki
1048100966Siwasaki    AcpiDmIndent (Level);
1049100966Siwasaki    AcpiOsPrintf ("}\n");
1050100966Siwasaki}
1051100966Siwasaki
1052100966Siwasaki
1053100966Siwasaki/*******************************************************************************
1054100966Siwasaki *
1055151937Sjkim * FUNCTION:    AcpiDmVendorCommon
1056100966Siwasaki *
1057151937Sjkim * PARAMETERS:  Name                - Descriptor name suffix
1058151937Sjkim *              ByteData            - Pointer to the vendor byte data
1059151937Sjkim *              Length              - Length of the byte data
1060100966Siwasaki *              Level               - Current source code indentation level
1061100966Siwasaki *
1062100966Siwasaki * RETURN:      None
1063100966Siwasaki *
1064151937Sjkim * DESCRIPTION: Decode a Vendor descriptor, both Large and Small
1065100966Siwasaki *
1066100966Siwasaki ******************************************************************************/
1067100966Siwasaki
1068100966Siwasakivoid
1069151937SjkimAcpiDmVendorCommon (
1070151937Sjkim    char                    *Name,
1071151937Sjkim    UINT8                   *ByteData,
1072100966Siwasaki    UINT32                  Length,
1073100966Siwasaki    UINT32                  Level)
1074100966Siwasaki{
1075100966Siwasaki
1076167802Sjkim    /* Dump macro name */
1077151937Sjkim
1078100966Siwasaki    AcpiDmIndent (Level);
1079167802Sjkim    AcpiOsPrintf ("Vendor%s (", Name);
1080151937Sjkim
1081167802Sjkim    /* Insert a descriptor name */
1082167802Sjkim
1083167802Sjkim    AcpiDmDescriptorName ();
1084167802Sjkim    AcpiOsPrintf (")      // Length = 0x%.2X\n", Length);
1085167802Sjkim
1086151937Sjkim    /* Dump the vendor bytes */
1087151937Sjkim
1088100966Siwasaki    AcpiDmIndent (Level);
1089100966Siwasaki    AcpiOsPrintf ("{\n");
1090100966Siwasaki
1091151937Sjkim    AcpiDmDisasmByteList (Level + 1, ByteData, Length);
1092151937Sjkim
1093100966Siwasaki    AcpiDmIndent (Level);
1094100966Siwasaki    AcpiOsPrintf ("}\n");
1095100966Siwasaki}
1096100966Siwasaki
1097100966Siwasaki
1098151937Sjkim/*******************************************************************************
1099151937Sjkim *
1100151937Sjkim * FUNCTION:    AcpiDmVendorLargeDescriptor
1101151937Sjkim *
1102151937Sjkim * PARAMETERS:  Resource            - Pointer to the resource descriptor
1103151937Sjkim *              Length              - Length of the descriptor in bytes
1104151937Sjkim *              Level               - Current source code indentation level
1105151937Sjkim *
1106151937Sjkim * RETURN:      None
1107151937Sjkim *
1108151937Sjkim * DESCRIPTION: Decode a Vendor Large descriptor
1109151937Sjkim *
1110151937Sjkim ******************************************************************************/
1111151937Sjkim
1112151937Sjkimvoid
1113151937SjkimAcpiDmVendorLargeDescriptor (
1114151937Sjkim    AML_RESOURCE            *Resource,
1115151937Sjkim    UINT32                  Length,
1116151937Sjkim    UINT32                  Level)
1117151937Sjkim{
1118151937Sjkim
1119167802Sjkim    AcpiDmVendorCommon ("Long ",
1120167802Sjkim        ACPI_ADD_PTR (UINT8, Resource, sizeof (AML_RESOURCE_LARGE_HEADER)),
1121151937Sjkim        Length, Level);
1122151937Sjkim}
1123151937Sjkim
1124100966Siwasaki#endif
1125100966Siwasaki
1126