1100966Siwasaki/*******************************************************************************
2100966Siwasaki *
3100966Siwasaki * Module Name: dmresrcl.c - "Large" Resource Descriptor disassembly
4100966Siwasaki *
5100966Siwasaki ******************************************************************************/
6100966Siwasaki
7217365Sjkim/*
8306536Sjkim * Copyright (C) 2000 - 2016, Intel Corp.
9100966Siwasaki * All rights reserved.
10100966Siwasaki *
11217365Sjkim * Redistribution and use in source and binary forms, with or without
12217365Sjkim * modification, are permitted provided that the following conditions
13217365Sjkim * are met:
14217365Sjkim * 1. Redistributions of source code must retain the above copyright
15217365Sjkim *    notice, this list of conditions, and the following disclaimer,
16217365Sjkim *    without modification.
17217365Sjkim * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18217365Sjkim *    substantially similar to the "NO WARRANTY" disclaimer below
19217365Sjkim *    ("Disclaimer") and any redistribution must be conditioned upon
20217365Sjkim *    including a substantially similar Disclaimer requirement for further
21217365Sjkim *    binary redistribution.
22217365Sjkim * 3. Neither the names of the above-listed copyright holders nor the names
23217365Sjkim *    of any contributors may be used to endorse or promote products derived
24217365Sjkim *    from this software without specific prior written permission.
25100966Siwasaki *
26217365Sjkim * Alternatively, this software may be distributed under the terms of the
27217365Sjkim * GNU General Public License ("GPL") version 2 as published by the Free
28217365Sjkim * Software Foundation.
29100966Siwasaki *
30217365Sjkim * NO WARRANTY
31217365Sjkim * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32217365Sjkim * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33217365Sjkim * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34217365Sjkim * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35217365Sjkim * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36217365Sjkim * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37217365Sjkim * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38217365Sjkim * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39217365Sjkim * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40217365Sjkim * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41217365Sjkim * POSSIBILITY OF SUCH DAMAGES.
42217365Sjkim */
43100966Siwasaki
44193341Sjkim#include <contrib/dev/acpica/include/acpi.h>
45193341Sjkim#include <contrib/dev/acpica/include/accommon.h>
46193341Sjkim#include <contrib/dev/acpica/include/acdisasm.h>
47100966Siwasaki
48100966Siwasaki
49102550Siwasaki#define _COMPONENT          ACPI_CA_DEBUGGER
50100966Siwasaki        ACPI_MODULE_NAME    ("dbresrcl")
51100966Siwasaki
52100966Siwasaki
53151937Sjkim/* Common names for address and memory descriptors */
54151937Sjkim
55306536Sjkimstatic const char           *AcpiDmAddressNames[] =
56151937Sjkim{
57167802Sjkim    "Granularity",
58167802Sjkim    "Range Minimum",
59167802Sjkim    "Range Maximum",
60167802Sjkim    "Translation Offset",
61167802Sjkim    "Length"
62151937Sjkim};
63151937Sjkim
64306536Sjkimstatic const char           *AcpiDmMemoryNames[] =
65151937Sjkim{
66167802Sjkim    "Range Minimum",
67167802Sjkim    "Range Maximum",
68167802Sjkim    "Alignment",
69167802Sjkim    "Length"
70151937Sjkim};
71151937Sjkim
72151937Sjkim
73151937Sjkim/* Local prototypes */
74151937Sjkim
75151937Sjkimstatic void
76151937SjkimAcpiDmSpaceFlags (
77151937Sjkim        UINT8               Flags);
78151937Sjkim
79151937Sjkimstatic void
80151937SjkimAcpiDmIoFlags (
81151937Sjkim        UINT8               Flags);
82151937Sjkim
83151937Sjkimstatic void
84151937SjkimAcpiDmIoFlags2 (
85151937Sjkim        UINT8               SpecificFlags);
86151937Sjkim
87151937Sjkimstatic void
88151937SjkimAcpiDmMemoryFlags (
89151937Sjkim    UINT8                   Flags,
90151937Sjkim    UINT8                   SpecificFlags);
91151937Sjkim
92151937Sjkimstatic void
93151937SjkimAcpiDmMemoryFlags2 (
94151937Sjkim    UINT8                   SpecificFlags);
95151937Sjkim
96151937Sjkimstatic void
97151937SjkimAcpiDmResourceSource (
98151937Sjkim    AML_RESOURCE            *Resource,
99151937Sjkim    ACPI_SIZE               MinimumLength,
100151937Sjkim    UINT32                  Length);
101151937Sjkim
102151937Sjkimstatic void
103151937SjkimAcpiDmAddressFields (
104151937Sjkim    void                    *Source,
105151937Sjkim    UINT8                   Type,
106151937Sjkim    UINT32                  Level);
107151937Sjkim
108151937Sjkimstatic void
109151937SjkimAcpiDmAddressPrefix (
110151937Sjkim    UINT8                   Type);
111151937Sjkim
112151937Sjkimstatic void
113151937SjkimAcpiDmAddressCommon (
114151937Sjkim    AML_RESOURCE            *Resource,
115151937Sjkim    UINT8                   Type,
116151937Sjkim    UINT32                  Level);
117151937Sjkim
118151937Sjkimstatic void
119151937SjkimAcpiDmAddressFlags (
120151937Sjkim    AML_RESOURCE            *Resource);
121151937Sjkim
122151937Sjkim
123100966Siwasaki/*******************************************************************************
124100966Siwasaki *
125151937Sjkim * FUNCTION:    AcpiDmMemoryFields
126151937Sjkim *
127151937Sjkim * PARAMETERS:  Source              - Pointer to the contiguous data fields
128151937Sjkim *              Type                - 16 or 32 (bit)
129151937Sjkim *              Level               - Current source code indentation level
130151937Sjkim *
131151937Sjkim * RETURN:      None
132151937Sjkim *
133151937Sjkim * DESCRIPTION: Decode fields common to Memory24 and Memory32 descriptors
134151937Sjkim *
135151937Sjkim ******************************************************************************/
136151937Sjkim
137151937Sjkimstatic void
138151937SjkimAcpiDmMemoryFields (
139151937Sjkim    void                    *Source,
140151937Sjkim    UINT8                   Type,
141151937Sjkim    UINT32                  Level)
142151937Sjkim{
143193267Sjkim    UINT32                  i;
144151937Sjkim
145151937Sjkim
146151937Sjkim    for (i = 0; i < 4; i++)
147151937Sjkim    {
148151937Sjkim        AcpiDmIndent (Level + 1);
149151937Sjkim
150151937Sjkim        switch (Type)
151151937Sjkim        {
152151937Sjkim        case 16:
153250838Sjkim
154167802Sjkim            AcpiDmDumpInteger16 (ACPI_CAST_PTR (UINT16, Source)[i],
155167802Sjkim                AcpiDmMemoryNames[i]);
156151937Sjkim            break;
157151937Sjkim
158151937Sjkim        case 32:
159250838Sjkim
160167802Sjkim            AcpiDmDumpInteger32 (ACPI_CAST_PTR (UINT32, Source)[i],
161167802Sjkim                AcpiDmMemoryNames[i]);
162151937Sjkim            break;
163151937Sjkim
164151937Sjkim        default:
165250838Sjkim
166151937Sjkim            return;
167151937Sjkim        }
168151937Sjkim    }
169151937Sjkim}
170151937Sjkim
171151937Sjkim
172151937Sjkim/*******************************************************************************
173151937Sjkim *
174167802Sjkim * FUNCTION:    AcpiDmAddressFields
175151937Sjkim *
176151937Sjkim * PARAMETERS:  Source              - Pointer to the contiguous data fields
177151937Sjkim *              Type                - 16, 32, or 64 (bit)
178151937Sjkim *              Level               - Current source code indentation level
179151937Sjkim *
180151937Sjkim * RETURN:      None
181151937Sjkim *
182151937Sjkim * DESCRIPTION: Decode fields common to address descriptors
183151937Sjkim *
184151937Sjkim ******************************************************************************/
185151937Sjkim
186151937Sjkimstatic void
187151937SjkimAcpiDmAddressFields (
188151937Sjkim    void                    *Source,
189151937Sjkim    UINT8                   Type,
190151937Sjkim    UINT32                  Level)
191151937Sjkim{
192193267Sjkim    UINT32                  i;
193151937Sjkim
194151937Sjkim
195151937Sjkim    AcpiOsPrintf ("\n");
196151937Sjkim
197151937Sjkim    for (i = 0; i < 5; i++)
198151937Sjkim    {
199151937Sjkim        AcpiDmIndent (Level + 1);
200151937Sjkim
201151937Sjkim        switch (Type)
202151937Sjkim        {
203151937Sjkim        case 16:
204250838Sjkim
205167802Sjkim            AcpiDmDumpInteger16 (ACPI_CAST_PTR (UINT16, Source)[i],
206167802Sjkim                AcpiDmAddressNames[i]);
207151937Sjkim            break;
208151937Sjkim
209151937Sjkim        case 32:
210250838Sjkim
211167802Sjkim            AcpiDmDumpInteger32 (ACPI_CAST_PTR (UINT32, Source)[i],
212167802Sjkim                AcpiDmAddressNames[i]);
213151937Sjkim            break;
214151937Sjkim
215151937Sjkim        case 64:
216250838Sjkim
217167802Sjkim            AcpiDmDumpInteger64 (ACPI_CAST_PTR (UINT64, Source)[i],
218167802Sjkim                AcpiDmAddressNames[i]);
219151937Sjkim            break;
220151937Sjkim
221151937Sjkim        default:
222250838Sjkim
223151937Sjkim            return;
224151937Sjkim        }
225151937Sjkim    }
226151937Sjkim}
227151937Sjkim
228151937Sjkim
229151937Sjkim/*******************************************************************************
230151937Sjkim *
231151937Sjkim * FUNCTION:    AcpiDmAddressPrefix
232151937Sjkim *
233151937Sjkim * PARAMETERS:  Type                - Descriptor type
234151937Sjkim *
235151937Sjkim * RETURN:      None
236151937Sjkim *
237151937Sjkim * DESCRIPTION: Emit name prefix representing the address descriptor type
238151937Sjkim *
239151937Sjkim ******************************************************************************/
240151937Sjkim
241151937Sjkimstatic void
242151937SjkimAcpiDmAddressPrefix (
243151937Sjkim    UINT8                   Type)
244151937Sjkim{
245151937Sjkim
246151937Sjkim    switch (Type)
247151937Sjkim    {
248151937Sjkim    case ACPI_RESOURCE_TYPE_ADDRESS16:
249250838Sjkim
250151937Sjkim        AcpiOsPrintf ("Word");
251151937Sjkim        break;
252151937Sjkim
253151937Sjkim    case ACPI_RESOURCE_TYPE_ADDRESS32:
254250838Sjkim
255151937Sjkim        AcpiOsPrintf ("DWord");
256151937Sjkim        break;
257151937Sjkim
258151937Sjkim    case ACPI_RESOURCE_TYPE_ADDRESS64:
259250838Sjkim
260151937Sjkim        AcpiOsPrintf ("QWord");
261151937Sjkim        break;
262151937Sjkim
263151937Sjkim    case ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64:
264250838Sjkim
265151937Sjkim        AcpiOsPrintf ("Extended");
266151937Sjkim        break;
267151937Sjkim
268151937Sjkim    default:
269250838Sjkim
270151937Sjkim        return;
271151937Sjkim    }
272151937Sjkim}
273151937Sjkim
274151937Sjkim
275151937Sjkim/*******************************************************************************
276151937Sjkim *
277151937Sjkim * FUNCTION:    AcpiDmAddressCommon
278151937Sjkim *
279151937Sjkim * PARAMETERS:  Resource            - Raw AML descriptor
280151937Sjkim *              Type                - Descriptor type
281151937Sjkim *              Level               - Current source code indentation level
282151937Sjkim *
283151937Sjkim * RETURN:      None
284151937Sjkim *
285151937Sjkim * DESCRIPTION: Emit common name and flag fields common to address descriptors
286151937Sjkim *
287151937Sjkim ******************************************************************************/
288151937Sjkim
289151937Sjkimstatic void
290151937SjkimAcpiDmAddressCommon (
291151937Sjkim    AML_RESOURCE            *Resource,
292151937Sjkim    UINT8                   Type,
293151937Sjkim    UINT32                  Level)
294151937Sjkim{
295151937Sjkim    UINT8                   ResourceType;
296151937Sjkim    UINT8                   SpecificFlags;
297151937Sjkim    UINT8                   Flags;
298151937Sjkim
299151937Sjkim
300151937Sjkim    ResourceType = Resource->Address.ResourceType;
301151937Sjkim    SpecificFlags = Resource->Address.SpecificFlags;
302151937Sjkim    Flags = Resource->Address.Flags;
303151937Sjkim
304151937Sjkim    AcpiDmIndent (Level);
305151937Sjkim
306151937Sjkim    /* Validate ResourceType */
307151937Sjkim
308151937Sjkim    if ((ResourceType > 2) && (ResourceType < 0xC0))
309151937Sjkim    {
310306536Sjkim        AcpiOsPrintf (
311306536Sjkim            "/**** Invalid Resource Type: 0x%X ****/", ResourceType);
312151937Sjkim        return;
313151937Sjkim    }
314151937Sjkim
315151937Sjkim    /* Prefix is either Word, DWord, QWord, or Extended */
316151937Sjkim
317151937Sjkim    AcpiDmAddressPrefix (Type);
318151937Sjkim
319151937Sjkim    /* Resource Types above 0xC0 are vendor-defined */
320151937Sjkim
321151937Sjkim    if (ResourceType > 2)
322151937Sjkim    {
323151937Sjkim        AcpiOsPrintf ("Space (0x%2.2X, ", ResourceType);
324151937Sjkim        AcpiDmSpaceFlags (Flags);
325151937Sjkim        AcpiOsPrintf (" 0x%2.2X,", SpecificFlags);
326151937Sjkim        return;
327151937Sjkim    }
328151937Sjkim
329151937Sjkim    /* This is either a Memory, IO, or BusNumber descriptor (0,1,2) */
330151937Sjkim
331306536Sjkim    AcpiOsPrintf ("%s (",
332306536Sjkim        AcpiGbl_WordDecode [ACPI_GET_2BIT_FLAG (ResourceType)]);
333151937Sjkim
334151937Sjkim    /* Decode the general and type-specific flags */
335151937Sjkim
336151937Sjkim    if (ResourceType == ACPI_MEMORY_RANGE)
337151937Sjkim    {
338151937Sjkim        AcpiDmMemoryFlags (Flags, SpecificFlags);
339151937Sjkim    }
340151937Sjkim    else /* IO range or BusNumberRange */
341151937Sjkim    {
342151937Sjkim        AcpiDmIoFlags (Flags);
343151937Sjkim        if (ResourceType == ACPI_IO_RANGE)
344151937Sjkim        {
345306536Sjkim            AcpiOsPrintf (" %s,",
346306536Sjkim                AcpiGbl_RngDecode [ACPI_GET_2BIT_FLAG (SpecificFlags)]);
347151937Sjkim        }
348151937Sjkim    }
349151937Sjkim}
350151937Sjkim
351151937Sjkim
352151937Sjkim/*******************************************************************************
353151937Sjkim *
354151937Sjkim * FUNCTION:    AcpiDmAddressFlags
355151937Sjkim *
356151937Sjkim * PARAMETERS:  Resource        - Raw AML descriptor
357151937Sjkim *
358151937Sjkim * RETURN:      None
359151937Sjkim *
360151937Sjkim * DESCRIPTION: Emit flags common to address descriptors
361151937Sjkim *
362151937Sjkim ******************************************************************************/
363151937Sjkim
364151937Sjkimstatic void
365151937SjkimAcpiDmAddressFlags (
366151937Sjkim    AML_RESOURCE            *Resource)
367151937Sjkim{
368151937Sjkim
369151937Sjkim    if (Resource->Address.ResourceType == ACPI_IO_RANGE)
370151937Sjkim    {
371151937Sjkim        AcpiDmIoFlags2 (Resource->Address.SpecificFlags);
372151937Sjkim    }
373151937Sjkim    else if (Resource->Address.ResourceType == ACPI_MEMORY_RANGE)
374151937Sjkim    {
375151937Sjkim        AcpiDmMemoryFlags2 (Resource->Address.SpecificFlags);
376151937Sjkim    }
377151937Sjkim}
378151937Sjkim
379151937Sjkim
380151937Sjkim/*******************************************************************************
381151937Sjkim *
382151937Sjkim * FUNCTION:    AcpiDmSpaceFlags
383151937Sjkim *
384151937Sjkim * PARAMETERS:  Flags               - Flag byte to be decoded
385151937Sjkim *
386151937Sjkim * RETURN:      None
387151937Sjkim *
388151937Sjkim * DESCRIPTION: Decode the flags specific to Space Address space descriptors
389151937Sjkim *
390151937Sjkim ******************************************************************************/
391151937Sjkim
392151937Sjkimstatic void
393151937SjkimAcpiDmSpaceFlags (
394151937Sjkim    UINT8                   Flags)
395151937Sjkim{
396151937Sjkim
397151937Sjkim    AcpiOsPrintf ("%s, %s, %s, %s,",
398243347Sjkim        AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Flags)],
399243347Sjkim        AcpiGbl_DecDecode [ACPI_EXTRACT_1BIT_FLAG (Flags, 1)],
400243347Sjkim        AcpiGbl_MinDecode [ACPI_EXTRACT_1BIT_FLAG (Flags, 2)],
401243347Sjkim        AcpiGbl_MaxDecode [ACPI_EXTRACT_1BIT_FLAG (Flags, 3)]);
402151937Sjkim}
403151937Sjkim
404151937Sjkim
405151937Sjkim/*******************************************************************************
406151937Sjkim *
407100966Siwasaki * FUNCTION:    AcpiDmIoFlags
408100966Siwasaki *
409100966Siwasaki * PARAMETERS:  Flags               - Flag byte to be decoded
410100966Siwasaki *
411100966Siwasaki * RETURN:      None
412100966Siwasaki *
413100966Siwasaki * DESCRIPTION: Decode the flags specific to IO Address space descriptors
414100966Siwasaki *
415100966Siwasaki ******************************************************************************/
416100966Siwasaki
417151937Sjkimstatic void
418100966SiwasakiAcpiDmIoFlags (
419100966Siwasaki        UINT8               Flags)
420100966Siwasaki{
421100966Siwasaki    AcpiOsPrintf ("%s, %s, %s, %s,",
422243347Sjkim        AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Flags)],
423243347Sjkim        AcpiGbl_MinDecode [ACPI_EXTRACT_1BIT_FLAG (Flags, 2)],
424243347Sjkim        AcpiGbl_MaxDecode [ACPI_EXTRACT_1BIT_FLAG (Flags, 3)],
425243347Sjkim        AcpiGbl_DecDecode [ACPI_EXTRACT_1BIT_FLAG (Flags, 1)]);
426100966Siwasaki}
427100966Siwasaki
428100966Siwasaki
429100966Siwasaki/*******************************************************************************
430100966Siwasaki *
431151937Sjkim * FUNCTION:    AcpiDmIoFlags2
432151937Sjkim *
433151937Sjkim * PARAMETERS:  SpecificFlags       - "Specific" flag byte to be decoded
434151937Sjkim *
435151937Sjkim * RETURN:      None
436151937Sjkim *
437151937Sjkim * DESCRIPTION: Decode the flags specific to IO Address space descriptors
438151937Sjkim *
439151937Sjkim ******************************************************************************/
440151937Sjkim
441151937Sjkimstatic void
442151937SjkimAcpiDmIoFlags2 (
443151937Sjkim        UINT8               SpecificFlags)
444151937Sjkim{
445151937Sjkim
446151937Sjkim    AcpiOsPrintf (", %s",
447243347Sjkim        AcpiGbl_TtpDecode [ACPI_EXTRACT_1BIT_FLAG (SpecificFlags, 4)]);
448151937Sjkim
449151937Sjkim    /* TRS is only used if TTP is TypeTranslation */
450151937Sjkim
451151937Sjkim    if (SpecificFlags & 0x10)
452151937Sjkim    {
453151937Sjkim        AcpiOsPrintf (", %s",
454243347Sjkim            AcpiGbl_TrsDecode [ACPI_EXTRACT_1BIT_FLAG (SpecificFlags, 5)]);
455151937Sjkim    }
456151937Sjkim}
457151937Sjkim
458151937Sjkim
459151937Sjkim/*******************************************************************************
460151937Sjkim *
461100966Siwasaki * FUNCTION:    AcpiDmMemoryFlags
462100966Siwasaki *
463100966Siwasaki * PARAMETERS:  Flags               - Flag byte to be decoded
464100966Siwasaki *              SpecificFlags       - "Specific" flag byte to be decoded
465100966Siwasaki *
466100966Siwasaki * RETURN:      None
467100966Siwasaki *
468100966Siwasaki * DESCRIPTION: Decode flags specific to Memory Address Space descriptors
469100966Siwasaki *
470100966Siwasaki ******************************************************************************/
471100966Siwasaki
472151937Sjkimstatic void
473100966SiwasakiAcpiDmMemoryFlags (
474100966Siwasaki    UINT8                   Flags,
475100966Siwasaki    UINT8                   SpecificFlags)
476100966Siwasaki{
477151937Sjkim
478100966Siwasaki    AcpiOsPrintf ("%s, %s, %s, %s, %s, %s,",
479243347Sjkim        AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Flags)],
480243347Sjkim        AcpiGbl_DecDecode [ACPI_EXTRACT_1BIT_FLAG (Flags, 1)],
481243347Sjkim        AcpiGbl_MinDecode [ACPI_EXTRACT_1BIT_FLAG (Flags, 2)],
482243347Sjkim        AcpiGbl_MaxDecode [ACPI_EXTRACT_1BIT_FLAG (Flags, 3)],
483243347Sjkim        AcpiGbl_MemDecode [ACPI_EXTRACT_2BIT_FLAG (SpecificFlags, 1)],
484243347Sjkim        AcpiGbl_RwDecode [ACPI_GET_1BIT_FLAG (SpecificFlags)]);
485100966Siwasaki}
486100966Siwasaki
487100966Siwasaki
488100966Siwasaki/*******************************************************************************
489100966Siwasaki *
490151937Sjkim * FUNCTION:    AcpiDmMemoryFlags2
491151937Sjkim *
492151937Sjkim * PARAMETERS:  SpecificFlags       - "Specific" flag byte to be decoded
493151937Sjkim *
494151937Sjkim * RETURN:      None
495151937Sjkim *
496151937Sjkim * DESCRIPTION: Decode flags specific to Memory Address Space descriptors
497151937Sjkim *
498151937Sjkim ******************************************************************************/
499151937Sjkim
500151937Sjkimstatic void
501151937SjkimAcpiDmMemoryFlags2 (
502151937Sjkim    UINT8                   SpecificFlags)
503151937Sjkim{
504151937Sjkim
505151937Sjkim    AcpiOsPrintf (", %s, %s",
506243347Sjkim        AcpiGbl_MtpDecode [ACPI_EXTRACT_2BIT_FLAG (SpecificFlags, 3)],
507243347Sjkim        AcpiGbl_TtpDecode [ACPI_EXTRACT_1BIT_FLAG (SpecificFlags, 5)]);
508151937Sjkim}
509151937Sjkim
510151937Sjkim
511151937Sjkim/*******************************************************************************
512151937Sjkim *
513151937Sjkim * FUNCTION:    AcpiDmResourceSource
514151937Sjkim *
515151937Sjkim * PARAMETERS:  Resource        - Raw AML descriptor
516151937Sjkim *              MinimumLength   - descriptor length without optional fields
517151937Sjkim *              ResourceLength
518151937Sjkim *
519151937Sjkim * RETURN:      None
520151937Sjkim *
521151937Sjkim * DESCRIPTION: Dump optional ResourceSource fields of an address descriptor
522151937Sjkim *
523151937Sjkim ******************************************************************************/
524151937Sjkim
525151937Sjkimstatic void
526151937SjkimAcpiDmResourceSource (
527151937Sjkim    AML_RESOURCE            *Resource,
528151937Sjkim    ACPI_SIZE               MinimumTotalLength,
529151937Sjkim    UINT32                  ResourceLength)
530151937Sjkim{
531151937Sjkim    UINT8                   *AmlResourceSource;
532151937Sjkim    UINT32                  TotalLength;
533151937Sjkim
534151937Sjkim
535151937Sjkim    TotalLength = ResourceLength + sizeof (AML_RESOURCE_LARGE_HEADER);
536151937Sjkim
537151937Sjkim    /* Check if the optional ResourceSource fields are present */
538151937Sjkim
539151937Sjkim    if (TotalLength <= MinimumTotalLength)
540151937Sjkim    {
541151937Sjkim        /* The two optional fields are not used */
542151937Sjkim
543167802Sjkim        AcpiOsPrintf (",, ");
544151937Sjkim        return;
545151937Sjkim    }
546151937Sjkim
547151937Sjkim    /* Get a pointer to the ResourceSource */
548151937Sjkim
549167802Sjkim    AmlResourceSource = ACPI_ADD_PTR (UINT8, Resource, MinimumTotalLength);
550151937Sjkim
551151937Sjkim    /*
552151937Sjkim     * Always emit the ResourceSourceIndex (Byte)
553151937Sjkim     *
554151937Sjkim     * NOTE: Some ASL compilers always create a 0 byte (in the AML) for the
555151937Sjkim     * Index even if the String does not exist. Although this is in violation
556151937Sjkim     * of the ACPI specification, it is very important to emit ASL code that
557151937Sjkim     * can be compiled back to the identical AML. There may be fields and/or
558151937Sjkim     * indexes into the resource template buffer that are compiled to absolute
559151937Sjkim     * offsets, and these will be broken if the AML length is changed.
560151937Sjkim     */
561151937Sjkim    AcpiOsPrintf ("0x%2.2X,", (UINT32) AmlResourceSource[0]);
562151937Sjkim
563151937Sjkim    /* Make sure that the ResourceSource string exists before dumping it */
564151937Sjkim
565151937Sjkim    if (TotalLength > (MinimumTotalLength + 1))
566151937Sjkim    {
567151937Sjkim        AcpiOsPrintf (" ");
568252279Sjkim        AcpiUtPrintString ((char *) &AmlResourceSource[1], ACPI_UINT16_MAX);
569151937Sjkim    }
570151937Sjkim
571167802Sjkim    AcpiOsPrintf (", ");
572151937Sjkim}
573151937Sjkim
574151937Sjkim
575151937Sjkim/*******************************************************************************
576151937Sjkim *
577100966Siwasaki * FUNCTION:    AcpiDmWordDescriptor
578100966Siwasaki *
579281075Sdim * PARAMETERS:  Info                - Extra resource info
580281075Sdim *              Resource            - Pointer to the resource descriptor
581100966Siwasaki *              Length              - Length of the descriptor in bytes
582100966Siwasaki *              Level               - Current source code indentation level
583100966Siwasaki *
584100966Siwasaki * RETURN:      None
585100966Siwasaki *
586100966Siwasaki * DESCRIPTION: Decode a Word Address Space descriptor
587100966Siwasaki *
588100966Siwasaki ******************************************************************************/
589100966Siwasaki
590100966Siwasakivoid
591100966SiwasakiAcpiDmWordDescriptor (
592281075Sdim    ACPI_OP_WALK_INFO       *Info,
593151937Sjkim    AML_RESOURCE            *Resource,
594100966Siwasaki    UINT32                  Length,
595100966Siwasaki    UINT32                  Level)
596100966Siwasaki{
597100966Siwasaki
598151937Sjkim    /* Dump resource name and flags */
599100966Siwasaki
600151937Sjkim    AcpiDmAddressCommon (Resource, ACPI_RESOURCE_TYPE_ADDRESS16, Level);
601100966Siwasaki
602151937Sjkim    /* Dump the 5 contiguous WORD values */
603100966Siwasaki
604151937Sjkim    AcpiDmAddressFields (&Resource->Address16.Granularity, 16, Level);
605100966Siwasaki
606151937Sjkim    /* The ResourceSource fields are optional */
607151937Sjkim
608100966Siwasaki    AcpiDmIndent (Level + 1);
609151937Sjkim    AcpiDmResourceSource (Resource, sizeof (AML_RESOURCE_ADDRESS16), Length);
610100966Siwasaki
611167802Sjkim    /* Insert a descriptor name */
612167802Sjkim
613167802Sjkim    AcpiDmDescriptorName ();
614167802Sjkim
615151937Sjkim    /* Type-specific flags */
616100966Siwasaki
617151937Sjkim    AcpiDmAddressFlags (Resource);
618100966Siwasaki    AcpiOsPrintf (")\n");
619100966Siwasaki}
620100966Siwasaki
621100966Siwasaki
622100966Siwasaki/*******************************************************************************
623100966Siwasaki *
624100966Siwasaki * FUNCTION:    AcpiDmDwordDescriptor
625100966Siwasaki *
626281075Sdim * PARAMETERS:  Info                - Extra resource info
627281075Sdim *              Resource            - Pointer to the resource descriptor
628100966Siwasaki *              Length              - Length of the descriptor in bytes
629100966Siwasaki *              Level               - Current source code indentation level
630100966Siwasaki *
631100966Siwasaki * RETURN:      None
632100966Siwasaki *
633100966Siwasaki * DESCRIPTION: Decode a DWord Address Space descriptor
634100966Siwasaki *
635100966Siwasaki ******************************************************************************/
636100966Siwasaki
637100966Siwasakivoid
638100966SiwasakiAcpiDmDwordDescriptor (
639281075Sdim    ACPI_OP_WALK_INFO       *Info,
640151937Sjkim    AML_RESOURCE            *Resource,
641100966Siwasaki    UINT32                  Length,
642100966Siwasaki    UINT32                  Level)
643100966Siwasaki{
644100966Siwasaki
645151937Sjkim    /* Dump resource name and flags */
646100966Siwasaki
647151937Sjkim    AcpiDmAddressCommon (Resource, ACPI_RESOURCE_TYPE_ADDRESS32, Level);
648100966Siwasaki
649151937Sjkim    /* Dump the 5 contiguous DWORD values */
650100966Siwasaki
651151937Sjkim    AcpiDmAddressFields (&Resource->Address32.Granularity, 32, Level);
652151937Sjkim
653151937Sjkim    /* The ResourceSource fields are optional */
654151937Sjkim
655100966Siwasaki    AcpiDmIndent (Level + 1);
656151937Sjkim    AcpiDmResourceSource (Resource, sizeof (AML_RESOURCE_ADDRESS32), Length);
657100966Siwasaki
658167802Sjkim    /* Insert a descriptor name */
659167802Sjkim
660167802Sjkim    AcpiDmDescriptorName ();
661167802Sjkim
662151937Sjkim    /* Type-specific flags */
663100966Siwasaki
664151937Sjkim    AcpiDmAddressFlags (Resource);
665100966Siwasaki    AcpiOsPrintf (")\n");
666100966Siwasaki}
667100966Siwasaki
668100966Siwasaki
669100966Siwasaki/*******************************************************************************
670100966Siwasaki *
671100966Siwasaki * FUNCTION:    AcpiDmQwordDescriptor
672100966Siwasaki *
673281075Sdim * PARAMETERS:  Info                - Extra resource info
674281075Sdim *              Resource            - Pointer to the resource descriptor
675100966Siwasaki *              Length              - Length of the descriptor in bytes
676100966Siwasaki *              Level               - Current source code indentation level
677100966Siwasaki *
678100966Siwasaki * RETURN:      None
679100966Siwasaki *
680100966Siwasaki * DESCRIPTION: Decode a QWord Address Space descriptor
681100966Siwasaki *
682100966Siwasaki ******************************************************************************/
683100966Siwasaki
684100966Siwasakivoid
685100966SiwasakiAcpiDmQwordDescriptor (
686281075Sdim    ACPI_OP_WALK_INFO       *Info,
687151937Sjkim    AML_RESOURCE            *Resource,
688100966Siwasaki    UINT32                  Length,
689100966Siwasaki    UINT32                  Level)
690100966Siwasaki{
691100966Siwasaki
692151937Sjkim    /* Dump resource name and flags */
693100966Siwasaki
694151937Sjkim    AcpiDmAddressCommon (Resource, ACPI_RESOURCE_TYPE_ADDRESS64, Level);
695100966Siwasaki
696151937Sjkim    /* Dump the 5 contiguous QWORD values */
697100966Siwasaki
698151937Sjkim    AcpiDmAddressFields (&Resource->Address64.Granularity, 64, Level);
699100966Siwasaki
700151937Sjkim    /* The ResourceSource fields are optional */
701100966Siwasaki
702100966Siwasaki    AcpiDmIndent (Level + 1);
703151937Sjkim    AcpiDmResourceSource (Resource, sizeof (AML_RESOURCE_ADDRESS64), Length);
704100966Siwasaki
705167802Sjkim    /* Insert a descriptor name */
706167802Sjkim
707167802Sjkim    AcpiDmDescriptorName ();
708167802Sjkim
709151937Sjkim    /* Type-specific flags */
710100966Siwasaki
711151937Sjkim    AcpiDmAddressFlags (Resource);
712151937Sjkim    AcpiOsPrintf (")\n");
713151937Sjkim}
714151937Sjkim
715151937Sjkim
716151937Sjkim/*******************************************************************************
717151937Sjkim *
718151937Sjkim * FUNCTION:    AcpiDmExtendedDescriptor
719151937Sjkim *
720281075Sdim * PARAMETERS:  Info                - Extra resource info
721281075Sdim *              Resource            - Pointer to the resource descriptor
722151937Sjkim *              Length              - Length of the descriptor in bytes
723151937Sjkim *              Level               - Current source code indentation level
724151937Sjkim *
725151937Sjkim * RETURN:      None
726151937Sjkim *
727151937Sjkim * DESCRIPTION: Decode a Extended Address Space descriptor
728151937Sjkim *
729151937Sjkim ******************************************************************************/
730151937Sjkim
731151937Sjkimvoid
732151937SjkimAcpiDmExtendedDescriptor (
733281075Sdim    ACPI_OP_WALK_INFO       *Info,
734151937Sjkim    AML_RESOURCE            *Resource,
735151937Sjkim    UINT32                  Length,
736151937Sjkim    UINT32                  Level)
737151937Sjkim{
738151937Sjkim
739151937Sjkim    /* Dump resource name and flags */
740151937Sjkim
741306536Sjkim    AcpiDmAddressCommon (
742306536Sjkim        Resource, ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64, Level);
743151937Sjkim
744151937Sjkim    /* Dump the 5 contiguous QWORD values */
745151937Sjkim
746151937Sjkim    AcpiDmAddressFields (&Resource->ExtAddress64.Granularity, 64, Level);
747151937Sjkim
748151937Sjkim    /* Extra field for this descriptor only */
749151937Sjkim
750100966Siwasaki    AcpiDmIndent (Level + 1);
751151937Sjkim    AcpiDmDumpInteger64 (Resource->ExtAddress64.TypeSpecific,
752151937Sjkim        "Type-Specific Attributes");
753100966Siwasaki
754167802Sjkim    /* Insert a descriptor name */
755167802Sjkim
756167802Sjkim    AcpiDmIndent (Level + 1);
757167802Sjkim    AcpiDmDescriptorName ();
758167802Sjkim
759151937Sjkim    /* Type-specific flags */
760100966Siwasaki
761151937Sjkim    AcpiDmAddressFlags (Resource);
762100966Siwasaki    AcpiOsPrintf (")\n");
763100966Siwasaki}
764100966Siwasaki
765100966Siwasaki
766100966Siwasaki/*******************************************************************************
767100966Siwasaki *
768100966Siwasaki * FUNCTION:    AcpiDmMemory24Descriptor
769100966Siwasaki *
770281075Sdim * PARAMETERS:  Info                - Extra resource info
771281075Sdim *              Resource            - Pointer to the resource descriptor
772100966Siwasaki *              Length              - Length of the descriptor in bytes
773100966Siwasaki *              Level               - Current source code indentation level
774100966Siwasaki *
775100966Siwasaki * RETURN:      None
776100966Siwasaki *
777100966Siwasaki * DESCRIPTION: Decode a Memory24 descriptor
778100966Siwasaki *
779100966Siwasaki ******************************************************************************/
780100966Siwasaki
781100966Siwasakivoid
782100966SiwasakiAcpiDmMemory24Descriptor (
783281075Sdim    ACPI_OP_WALK_INFO       *Info,
784151937Sjkim    AML_RESOURCE            *Resource,
785100966Siwasaki    UINT32                  Length,
786100966Siwasaki    UINT32                  Level)
787100966Siwasaki{
788100966Siwasaki
789151937Sjkim    /* Dump name and read/write flag */
790151937Sjkim
791100966Siwasaki    AcpiDmIndent (Level);
792151937Sjkim    AcpiOsPrintf ("Memory24 (%s,\n",
793243347Sjkim        AcpiGbl_RwDecode [ACPI_GET_1BIT_FLAG (Resource->Memory24.Flags)]);
794151937Sjkim
795151937Sjkim    /* Dump the 4 contiguous WORD values */
796151937Sjkim
797151937Sjkim    AcpiDmMemoryFields (&Resource->Memory24.Minimum, 16, Level);
798151937Sjkim
799167802Sjkim    /* Insert a descriptor name */
800167802Sjkim
801151937Sjkim    AcpiDmIndent (Level + 1);
802167802Sjkim    AcpiDmDescriptorName ();
803151937Sjkim    AcpiOsPrintf (")\n");
804100966Siwasaki}
805100966Siwasaki
806100966Siwasaki
807100966Siwasaki/*******************************************************************************
808100966Siwasaki *
809100966Siwasaki * FUNCTION:    AcpiDmMemory32Descriptor
810100966Siwasaki *
811281075Sdim * PARAMETERS:  Info                - Extra resource info
812281075Sdim *              Resource            - Pointer to the resource descriptor
813100966Siwasaki *              Length              - Length of the descriptor in bytes
814100966Siwasaki *              Level               - Current source code indentation level
815100966Siwasaki *
816100966Siwasaki * RETURN:      None
817100966Siwasaki *
818100966Siwasaki * DESCRIPTION: Decode a Memory32 descriptor
819100966Siwasaki *
820100966Siwasaki ******************************************************************************/
821100966Siwasaki
822100966Siwasakivoid
823100966SiwasakiAcpiDmMemory32Descriptor (
824281075Sdim    ACPI_OP_WALK_INFO       *Info,
825151937Sjkim    AML_RESOURCE            *Resource,
826100966Siwasaki    UINT32                  Length,
827100966Siwasaki    UINT32                  Level)
828100966Siwasaki{
829100966Siwasaki
830151937Sjkim    /* Dump name and read/write flag */
831151937Sjkim
832100966Siwasaki    AcpiDmIndent (Level);
833151937Sjkim    AcpiOsPrintf ("Memory32 (%s,\n",
834243347Sjkim        AcpiGbl_RwDecode [ACPI_GET_1BIT_FLAG (Resource->Memory32.Flags)]);
835151937Sjkim
836151937Sjkim    /* Dump the 4 contiguous DWORD values */
837151937Sjkim
838151937Sjkim    AcpiDmMemoryFields (&Resource->Memory32.Minimum, 32, Level);
839151937Sjkim
840167802Sjkim    /* Insert a descriptor name */
841167802Sjkim
842151937Sjkim    AcpiDmIndent (Level + 1);
843167802Sjkim    AcpiDmDescriptorName ();
844151937Sjkim    AcpiOsPrintf (")\n");
845100966Siwasaki}
846100966Siwasaki
847100966Siwasaki
848100966Siwasaki/*******************************************************************************
849100966Siwasaki *
850151937Sjkim * FUNCTION:    AcpiDmFixedMemory32Descriptor
851100966Siwasaki *
852281075Sdim * PARAMETERS:  Info                - Extra resource info
853281075Sdim *              Resource            - Pointer to the resource descriptor
854100966Siwasaki *              Length              - Length of the descriptor in bytes
855100966Siwasaki *              Level               - Current source code indentation level
856100966Siwasaki *
857100966Siwasaki * RETURN:      None
858100966Siwasaki *
859100966Siwasaki * DESCRIPTION: Decode a Fixed Memory32 descriptor
860100966Siwasaki *
861100966Siwasaki ******************************************************************************/
862100966Siwasaki
863100966Siwasakivoid
864151937SjkimAcpiDmFixedMemory32Descriptor (
865281075Sdim    ACPI_OP_WALK_INFO       *Info,
866151937Sjkim    AML_RESOURCE            *Resource,
867100966Siwasaki    UINT32                  Length,
868100966Siwasaki    UINT32                  Level)
869100966Siwasaki{
870100966Siwasaki
871151937Sjkim    /* Dump name and read/write flag */
872151937Sjkim
873100966Siwasaki    AcpiDmIndent (Level);
874151937Sjkim    AcpiOsPrintf ("Memory32Fixed (%s,\n",
875243347Sjkim        AcpiGbl_RwDecode [ACPI_GET_1BIT_FLAG (Resource->FixedMemory32.Flags)]);
876151937Sjkim
877151937Sjkim    AcpiDmIndent (Level + 1);
878306536Sjkim    AcpiDmDumpInteger32 (Resource->FixedMemory32.Address,
879306536Sjkim        "Address Base");
880151937Sjkim
881151937Sjkim    AcpiDmIndent (Level + 1);
882306536Sjkim    AcpiDmDumpInteger32 (Resource->FixedMemory32.AddressLength,
883306536Sjkim        "Address Length");
884151937Sjkim
885167802Sjkim    /* Insert a descriptor name */
886167802Sjkim
887151937Sjkim    AcpiDmIndent (Level + 1);
888167802Sjkim    AcpiDmDescriptorName ();
889151937Sjkim    AcpiOsPrintf (")\n");
890100966Siwasaki}
891100966Siwasaki
892100966Siwasaki
893100966Siwasaki/*******************************************************************************
894100966Siwasaki *
895100966Siwasaki * FUNCTION:    AcpiDmGenericRegisterDescriptor
896100966Siwasaki *
897281075Sdim * PARAMETERS:  Info                - Extra resource info
898281075Sdim *              Resource            - Pointer to the resource descriptor
899100966Siwasaki *              Length              - Length of the descriptor in bytes
900100966Siwasaki *              Level               - Current source code indentation level
901100966Siwasaki *
902100966Siwasaki * RETURN:      None
903100966Siwasaki *
904100966Siwasaki * DESCRIPTION: Decode a Generic Register descriptor
905100966Siwasaki *
906100966Siwasaki ******************************************************************************/
907100966Siwasaki
908100966Siwasakivoid
909100966SiwasakiAcpiDmGenericRegisterDescriptor (
910281075Sdim    ACPI_OP_WALK_INFO       *Info,
911151937Sjkim    AML_RESOURCE            *Resource,
912100966Siwasaki    UINT32                  Length,
913100966Siwasaki    UINT32                  Level)
914100966Siwasaki{
915100966Siwasaki
916100966Siwasaki    AcpiDmIndent (Level);
917100966Siwasaki    AcpiOsPrintf ("Register (");
918151937Sjkim    AcpiDmAddressSpace (Resource->GenericReg.AddressSpaceId);
919151937Sjkim    AcpiOsPrintf ("\n");
920102550Siwasaki
921151937Sjkim    AcpiDmIndent (Level + 1);
922167802Sjkim    AcpiDmDumpInteger8 (Resource->GenericReg.BitWidth, "Bit Width");
923102550Siwasaki
924151937Sjkim    AcpiDmIndent (Level + 1);
925167802Sjkim    AcpiDmDumpInteger8 (Resource->GenericReg.BitOffset, "Bit Offset");
926151937Sjkim
927151937Sjkim    AcpiDmIndent (Level + 1);
928167802Sjkim    AcpiDmDumpInteger64 (Resource->GenericReg.Address, "Address");
929151937Sjkim
930151937Sjkim    /* Optional field for ACPI 3.0 */
931151937Sjkim
932167802Sjkim    AcpiDmIndent (Level + 1);
933151937Sjkim    if (Resource->GenericReg.AccessSize)
934151937Sjkim    {
935167802Sjkim        AcpiOsPrintf ("0x%2.2X,               // %s\n",
936167802Sjkim            Resource->GenericReg.AccessSize, "Access Size");
937151937Sjkim        AcpiDmIndent (Level + 1);
938151937Sjkim    }
939167802Sjkim    else
940167802Sjkim    {
941167802Sjkim        AcpiOsPrintf (",");
942167802Sjkim    }
943151937Sjkim
944167802Sjkim    /* DescriptorName was added for ACPI 3.0+ */
945167802Sjkim
946167802Sjkim    AcpiDmDescriptorName ();
947151937Sjkim    AcpiOsPrintf (")\n");
948100966Siwasaki}
949100966Siwasaki
950100966Siwasaki
951100966Siwasaki/*******************************************************************************
952100966Siwasaki *
953100966Siwasaki * FUNCTION:    AcpiDmInterruptDescriptor
954100966Siwasaki *
955281075Sdim * PARAMETERS:  Info                - Extra resource info
956281075Sdim *              Resource            - Pointer to the resource descriptor
957100966Siwasaki *              Length              - Length of the descriptor in bytes
958100966Siwasaki *              Level               - Current source code indentation level
959100966Siwasaki *
960100966Siwasaki * RETURN:      None
961100966Siwasaki *
962100966Siwasaki * DESCRIPTION: Decode a extended Interrupt descriptor
963100966Siwasaki *
964100966Siwasaki ******************************************************************************/
965100966Siwasaki
966100966Siwasakivoid
967100966SiwasakiAcpiDmInterruptDescriptor (
968281075Sdim    ACPI_OP_WALK_INFO       *Info,
969151937Sjkim    AML_RESOURCE            *Resource,
970100966Siwasaki    UINT32                  Length,
971100966Siwasaki    UINT32                  Level)
972100966Siwasaki{
973100966Siwasaki    UINT32                  i;
974100966Siwasaki
975100966Siwasaki
976100966Siwasaki    AcpiDmIndent (Level);
977151937Sjkim    AcpiOsPrintf ("Interrupt (%s, %s, %s, %s, ",
978243347Sjkim        AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Resource->ExtendedIrq.Flags)],
979243347Sjkim        AcpiGbl_HeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->ExtendedIrq.Flags, 1)],
980243347Sjkim        AcpiGbl_LlDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->ExtendedIrq.Flags, 2)],
981243347Sjkim        AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->ExtendedIrq.Flags, 3)]);
982100966Siwasaki
983151937Sjkim    /*
984151937Sjkim     * The ResourceSource fields are optional and appear after the interrupt
985151937Sjkim     * list. Must compute length based on length of the list. First xrupt
986151937Sjkim     * is included in the struct (reason for -1 below)
987151937Sjkim     */
988151937Sjkim    AcpiDmResourceSource (Resource,
989151937Sjkim        sizeof (AML_RESOURCE_EXTENDED_IRQ) +
990193267Sjkim            ((UINT32) Resource->ExtendedIrq.InterruptCount - 1) * sizeof (UINT32),
991151937Sjkim        Resource->ExtendedIrq.ResourceLength);
992100966Siwasaki
993167802Sjkim    /* Insert a descriptor name */
994167802Sjkim
995167802Sjkim    AcpiDmDescriptorName ();
996167802Sjkim    AcpiOsPrintf (")\n");
997167802Sjkim
998151937Sjkim    /* Dump the interrupt list */
999114237Snjl
1000100966Siwasaki    AcpiDmIndent (Level);
1001100966Siwasaki    AcpiOsPrintf ("{\n");
1002151937Sjkim    for (i = 0; i < Resource->ExtendedIrq.InterruptCount; i++)
1003100966Siwasaki    {
1004100966Siwasaki        AcpiDmIndent (Level + 1);
1005151937Sjkim        AcpiOsPrintf ("0x%8.8X,\n",
1006151937Sjkim            (UINT32) Resource->ExtendedIrq.Interrupts[i]);
1007100966Siwasaki    }
1008100966Siwasaki
1009100966Siwasaki    AcpiDmIndent (Level);
1010100966Siwasaki    AcpiOsPrintf ("}\n");
1011100966Siwasaki}
1012100966Siwasaki
1013100966Siwasaki
1014100966Siwasaki/*******************************************************************************
1015100966Siwasaki *
1016151937Sjkim * FUNCTION:    AcpiDmVendorCommon
1017100966Siwasaki *
1018151937Sjkim * PARAMETERS:  Name                - Descriptor name suffix
1019151937Sjkim *              ByteData            - Pointer to the vendor byte data
1020151937Sjkim *              Length              - Length of the byte data
1021100966Siwasaki *              Level               - Current source code indentation level
1022100966Siwasaki *
1023100966Siwasaki * RETURN:      None
1024100966Siwasaki *
1025151937Sjkim * DESCRIPTION: Decode a Vendor descriptor, both Large and Small
1026100966Siwasaki *
1027100966Siwasaki ******************************************************************************/
1028100966Siwasaki
1029100966Siwasakivoid
1030151937SjkimAcpiDmVendorCommon (
1031306536Sjkim    const char              *Name,
1032151937Sjkim    UINT8                   *ByteData,
1033100966Siwasaki    UINT32                  Length,
1034100966Siwasaki    UINT32                  Level)
1035100966Siwasaki{
1036100966Siwasaki
1037167802Sjkim    /* Dump macro name */
1038151937Sjkim
1039100966Siwasaki    AcpiDmIndent (Level);
1040167802Sjkim    AcpiOsPrintf ("Vendor%s (", Name);
1041151937Sjkim
1042167802Sjkim    /* Insert a descriptor name */
1043167802Sjkim
1044167802Sjkim    AcpiDmDescriptorName ();
1045167802Sjkim    AcpiOsPrintf (")      // Length = 0x%.2X\n", Length);
1046167802Sjkim
1047151937Sjkim    /* Dump the vendor bytes */
1048151937Sjkim
1049100966Siwasaki    AcpiDmIndent (Level);
1050100966Siwasaki    AcpiOsPrintf ("{\n");
1051100966Siwasaki
1052151937Sjkim    AcpiDmDisasmByteList (Level + 1, ByteData, Length);
1053151937Sjkim
1054100966Siwasaki    AcpiDmIndent (Level);
1055100966Siwasaki    AcpiOsPrintf ("}\n");
1056100966Siwasaki}
1057100966Siwasaki
1058100966Siwasaki
1059151937Sjkim/*******************************************************************************
1060151937Sjkim *
1061151937Sjkim * FUNCTION:    AcpiDmVendorLargeDescriptor
1062151937Sjkim *
1063281075Sdim * PARAMETERS:  Info                - Extra resource info
1064281075Sdim *              Resource            - Pointer to the resource descriptor
1065151937Sjkim *              Length              - Length of the descriptor in bytes
1066151937Sjkim *              Level               - Current source code indentation level
1067151937Sjkim *
1068151937Sjkim * RETURN:      None
1069151937Sjkim *
1070151937Sjkim * DESCRIPTION: Decode a Vendor Large descriptor
1071151937Sjkim *
1072151937Sjkim ******************************************************************************/
1073151937Sjkim
1074151937Sjkimvoid
1075151937SjkimAcpiDmVendorLargeDescriptor (
1076281075Sdim    ACPI_OP_WALK_INFO       *Info,
1077151937Sjkim    AML_RESOURCE            *Resource,
1078151937Sjkim    UINT32                  Length,
1079151937Sjkim    UINT32                  Level)
1080151937Sjkim{
1081151937Sjkim
1082167802Sjkim    AcpiDmVendorCommon ("Long ",
1083167802Sjkim        ACPI_ADD_PTR (UINT8, Resource, sizeof (AML_RESOURCE_LARGE_HEADER)),
1084151937Sjkim        Length, Level);
1085151937Sjkim}
1086