dmresrcl.c revision 252279
1227569Sphilip/*******************************************************************************
2283514Sarybchik *
3283514Sarybchik * Module Name: dmresrcl.c - "Large" Resource Descriptor disassembly
4227569Sphilip *
5227569Sphilip ******************************************************************************/
6283514Sarybchik
7227569Sphilip/*
8283514Sarybchik * Copyright (C) 2000 - 2013, Intel Corp.
9283514Sarybchik * All rights reserved.
10283514Sarybchik *
11283514Sarybchik * Redistribution and use in source and binary forms, with or without
12283514Sarybchik * modification, are permitted provided that the following conditions
13283514Sarybchik * are met:
14283514Sarybchik * 1. Redistributions of source code must retain the above copyright
15283514Sarybchik *    notice, this list of conditions, and the following disclaimer,
16283514Sarybchik *    without modification.
17283514Sarybchik * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18283514Sarybchik *    substantially similar to the "NO WARRANTY" disclaimer below
19283514Sarybchik *    ("Disclaimer") and any redistribution must be conditioned upon
20283514Sarybchik *    including a substantially similar Disclaimer requirement for further
21283514Sarybchik *    binary redistribution.
22283514Sarybchik * 3. Neither the names of the above-listed copyright holders nor the names
23283514Sarybchik *    of any contributors may be used to endorse or promote products derived
24283514Sarybchik *    from this software without specific prior written permission.
25283514Sarybchik *
26283514Sarybchik * Alternatively, this software may be distributed under the terms of the
27283514Sarybchik * GNU General Public License ("GPL") version 2 as published by the Free
28283514Sarybchik * Software Foundation.
29227569Sphilip *
30227569Sphilip * NO WARRANTY
31228078Sphilip * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32228078Sphilip * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33228078Sphilip * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34227569Sphilip * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35227569Sphilip * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36227569Sphilip * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37283514Sarybchik * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38299320Sarybchik * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39283514Sarybchik * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40291436Sarybchik * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41283514Sarybchik * POSSIBILITY OF SUCH DAMAGES.
42283514Sarybchik */
43283514Sarybchik
44283514Sarybchik
45283514Sarybchik#include <contrib/dev/acpica/include/acpi.h>
46283514Sarybchik#include <contrib/dev/acpica/include/accommon.h>
47283514Sarybchik#include <contrib/dev/acpica/include/acdisasm.h>
48283514Sarybchik
49291436Sarybchik
50283514Sarybchik#ifdef ACPI_DISASSEMBLER
51283514Sarybchik
52283514Sarybchik#define _COMPONENT          ACPI_CA_DEBUGGER
53283514Sarybchik        ACPI_MODULE_NAME    ("dbresrcl")
54283514Sarybchik
55283514Sarybchik
56291436Sarybchik/* Common names for address and memory descriptors */
57283514Sarybchik
58283514Sarybchikstatic char                 *AcpiDmAddressNames[] =
59283514Sarybchik{
60283514Sarybchik    "Granularity",
61283514Sarybchik    "Range Minimum",
62283514Sarybchik    "Range Maximum",
63291436Sarybchik    "Translation Offset",
64283514Sarybchik    "Length"
65283514Sarybchik};
66283514Sarybchik
67283514Sarybchikstatic char                 *AcpiDmMemoryNames[] =
68283514Sarybchik{
69291436Sarybchik    "Range Minimum",
70283514Sarybchik    "Range Maximum",
71283514Sarybchik    "Alignment",
72283514Sarybchik    "Length"
73283514Sarybchik};
74283514Sarybchik
75293807Sarybchik
76293807Sarybchik/* Local prototypes */
77293807Sarybchik
78293807Sarybchikstatic void
79293807SarybchikAcpiDmSpaceFlags (
80293807Sarybchik        UINT8               Flags);
81293890Sarybchik
82293890Sarybchikstatic void
83293807SarybchikAcpiDmIoFlags (
84293807Sarybchik        UINT8               Flags);
85293807Sarybchik
86293807Sarybchikstatic void
87293807SarybchikAcpiDmIoFlags2 (
88293807Sarybchik        UINT8               SpecificFlags);
89283514Sarybchik
90283514Sarybchikstatic void
91283514SarybchikAcpiDmMemoryFlags (
92283514Sarybchik    UINT8                   Flags,
93283514Sarybchik    UINT8                   SpecificFlags);
94283514Sarybchik
95283514Sarybchikstatic void
96283514SarybchikAcpiDmMemoryFlags2 (
97283514Sarybchik    UINT8                   SpecificFlags);
98283514Sarybchik
99283514Sarybchikstatic void
100283514SarybchikAcpiDmResourceSource (
101283514Sarybchik    AML_RESOURCE            *Resource,
102283514Sarybchik    ACPI_SIZE               MinimumLength,
103283514Sarybchik    UINT32                  Length);
104291436Sarybchik
105283514Sarybchikstatic void
106283514SarybchikAcpiDmAddressFields (
107283514Sarybchik    void                    *Source,
108283514Sarybchik    UINT8                   Type,
109283514Sarybchik    UINT32                  Level);
110283514Sarybchik
111283514Sarybchikstatic void
112291436SarybchikAcpiDmAddressPrefix (
113283514Sarybchik    UINT8                   Type);
114283514Sarybchik
115283514Sarybchikstatic void
116283514SarybchikAcpiDmAddressCommon (
117283514Sarybchik    AML_RESOURCE            *Resource,
118283514Sarybchik    UINT8                   Type,
119283514Sarybchik    UINT32                  Level);
120283514Sarybchik
121283514Sarybchikstatic void
122283514SarybchikAcpiDmAddressFlags (
123283514Sarybchik    AML_RESOURCE            *Resource);
124283514Sarybchik
125283514Sarybchik
126283514Sarybchik/*******************************************************************************
127283514Sarybchik *
128299320Sarybchik * FUNCTION:    AcpiDmMemoryFields
129283514Sarybchik *
130283514Sarybchik * PARAMETERS:  Source              - Pointer to the contiguous data fields
131283514Sarybchik *              Type                - 16 or 32 (bit)
132299517Sarybchik *              Level               - Current source code indentation level
133283514Sarybchik *
134283514Sarybchik * RETURN:      None
135283514Sarybchik *
136283514Sarybchik * DESCRIPTION: Decode fields common to Memory24 and Memory32 descriptors
137283514Sarybchik *
138283514Sarybchik ******************************************************************************/
139283514Sarybchik
140283514Sarybchikstatic void
141283514SarybchikAcpiDmMemoryFields (
142293807Sarybchik    void                    *Source,
143283514Sarybchik    UINT8                   Type,
144293807Sarybchik    UINT32                  Level)
145283514Sarybchik{
146283514Sarybchik    UINT32                  i;
147283514Sarybchik
148283514Sarybchik
149283514Sarybchik    for (i = 0; i < 4; i++)
150283514Sarybchik    {
151283514Sarybchik        AcpiDmIndent (Level + 1);
152283514Sarybchik
153283514Sarybchik        switch (Type)
154293754Sarybchik        {
155299517Sarybchik        case 16:
156293754Sarybchik
157293754Sarybchik            AcpiDmDumpInteger16 (ACPI_CAST_PTR (UINT16, Source)[i],
158283514Sarybchik                AcpiDmMemoryNames[i]);
159293754Sarybchik            break;
160283514Sarybchik
161283514Sarybchik        case 32:
162293754Sarybchik
163293754Sarybchik            AcpiDmDumpInteger32 (ACPI_CAST_PTR (UINT32, Source)[i],
164293754Sarybchik                AcpiDmMemoryNames[i]);
165293807Sarybchik            break;
166283514Sarybchik
167293807Sarybchik        default:
168293754Sarybchik
169293754Sarybchik            return;
170293754Sarybchik        }
171293754Sarybchik    }
172293754Sarybchik}
173293754Sarybchik
174283514Sarybchik
175293754Sarybchik/*******************************************************************************
176283514Sarybchik *
177283514Sarybchik * FUNCTION:    AcpiDmAddressFields
178291436Sarybchik *
179227569Sphilip * PARAMETERS:  Source              - Pointer to the contiguous data fields
180283514Sarybchik *              Type                - 16, 32, or 64 (bit)
181227569Sphilip *              Level               - Current source code indentation level
182299517Sarybchik *
183291436Sarybchik * RETURN:      None
184227569Sphilip *
185227569Sphilip * DESCRIPTION: Decode fields common to address descriptors
186227569Sphilip *
187227569Sphilip ******************************************************************************/
188227569Sphilip
189227569Sphilipstatic void
190227569SphilipAcpiDmAddressFields (
191227569Sphilip    void                    *Source,
192227569Sphilip    UINT8                   Type,
193227569Sphilip    UINT32                  Level)
194227569Sphilip{
195227569Sphilip    UINT32                  i;
196227569Sphilip
197227569Sphilip
198283514Sarybchik    AcpiOsPrintf ("\n");
199283514Sarybchik
200283514Sarybchik    for (i = 0; i < 5; i++)
201299517Sarybchik    {
202283514Sarybchik        AcpiDmIndent (Level + 1);
203283514Sarybchik
204283514Sarybchik        switch (Type)
205283514Sarybchik        {
206283514Sarybchik        case 16:
207299517Sarybchik
208283514Sarybchik            AcpiDmDumpInteger16 (ACPI_CAST_PTR (UINT16, Source)[i],
209283514Sarybchik                AcpiDmAddressNames[i]);
210283514Sarybchik            break;
211293754Sarybchik
212293754Sarybchik        case 32:
213299517Sarybchik
214293754Sarybchik            AcpiDmDumpInteger32 (ACPI_CAST_PTR (UINT32, Source)[i],
215293754Sarybchik                AcpiDmAddressNames[i]);
216293754Sarybchik            break;
217283514Sarybchik
218283514Sarybchik        case 64:
219283514Sarybchik
220283514Sarybchik            AcpiDmDumpInteger64 (ACPI_CAST_PTR (UINT64, Source)[i],
221283514Sarybchik                AcpiDmAddressNames[i]);
222283514Sarybchik            break;
223283514Sarybchik
224283514Sarybchik        default:
225283514Sarybchik
226283514Sarybchik            return;
227283514Sarybchik        }
228283514Sarybchik    }
229283514Sarybchik}
230283514Sarybchik
231283514Sarybchik
232283514Sarybchik/*******************************************************************************
233283514Sarybchik *
234283514Sarybchik * FUNCTION:    AcpiDmAddressPrefix
235283514Sarybchik *
236283514Sarybchik * PARAMETERS:  Type                - Descriptor type
237291436Sarybchik *
238283514Sarybchik * RETURN:      None
239283514Sarybchik *
240283514Sarybchik * DESCRIPTION: Emit name prefix representing the address descriptor type
241283514Sarybchik *
242283514Sarybchik ******************************************************************************/
243283514Sarybchik
244283514Sarybchikstatic void
245283514SarybchikAcpiDmAddressPrefix (
246283514Sarybchik    UINT8                   Type)
247283514Sarybchik{
248299517Sarybchik
249283514Sarybchik    switch (Type)
250283514Sarybchik    {
251283514Sarybchik    case ACPI_RESOURCE_TYPE_ADDRESS16:
252283514Sarybchik
253283514Sarybchik        AcpiOsPrintf ("Word");
254283514Sarybchik        break;
255283514Sarybchik
256283514Sarybchik    case ACPI_RESOURCE_TYPE_ADDRESS32:
257283514Sarybchik
258283514Sarybchik        AcpiOsPrintf ("DWord");
259283514Sarybchik        break;
260283514Sarybchik
261283514Sarybchik    case ACPI_RESOURCE_TYPE_ADDRESS64:
262291436Sarybchik
263283514Sarybchik        AcpiOsPrintf ("QWord");
264283514Sarybchik        break;
265283514Sarybchik
266283514Sarybchik    case ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64:
267299517Sarybchik
268291436Sarybchik        AcpiOsPrintf ("Extended");
269283514Sarybchik        break;
270283514Sarybchik
271283514Sarybchik    default:
272283514Sarybchik
273283514Sarybchik        return;
274283514Sarybchik    }
275283514Sarybchik}
276283514Sarybchik
277283514Sarybchik
278283514Sarybchik/*******************************************************************************
279291436Sarybchik *
280283514Sarybchik * FUNCTION:    AcpiDmAddressCommon
281283514Sarybchik *
282283514Sarybchik * PARAMETERS:  Resource            - Raw AML descriptor
283283514Sarybchik *              Type                - Descriptor type
284283514Sarybchik *              Level               - Current source code indentation level
285291436Sarybchik *
286283514Sarybchik * RETURN:      None
287283514Sarybchik *
288283514Sarybchik * DESCRIPTION: Emit common name and flag fields common to address descriptors
289283514Sarybchik *
290291436Sarybchik ******************************************************************************/
291283514Sarybchik
292283514Sarybchikstatic void
293283514SarybchikAcpiDmAddressCommon (
294283514Sarybchik    AML_RESOURCE            *Resource,
295283514Sarybchik    UINT8                   Type,
296283514Sarybchik    UINT32                  Level)
297283514Sarybchik{
298283514Sarybchik    UINT8                   ResourceType;
299283514Sarybchik    UINT8                   SpecificFlags;
300283514Sarybchik    UINT8                   Flags;
301283514Sarybchik
302283514Sarybchik
303283514Sarybchik    ResourceType = Resource->Address.ResourceType;
304283514Sarybchik    SpecificFlags = Resource->Address.SpecificFlags;
305283514Sarybchik    Flags = Resource->Address.Flags;
306291436Sarybchik
307283514Sarybchik    AcpiDmIndent (Level);
308283514Sarybchik
309283514Sarybchik    /* Validate ResourceType */
310283514Sarybchik
311291436Sarybchik    if ((ResourceType > 2) && (ResourceType < 0xC0))
312283514Sarybchik    {
313283514Sarybchik        AcpiOsPrintf ("/**** Invalid Resource Type: 0x%X ****/", ResourceType);
314283514Sarybchik        return;
315283514Sarybchik    }
316291436Sarybchik
317283514Sarybchik    /* Prefix is either Word, DWord, QWord, or Extended */
318283514Sarybchik
319283514Sarybchik    AcpiDmAddressPrefix (Type);
320283514Sarybchik
321283514Sarybchik    /* Resource Types above 0xC0 are vendor-defined */
322283514Sarybchik
323283514Sarybchik    if (ResourceType > 2)
324283514Sarybchik    {
325283514Sarybchik        AcpiOsPrintf ("Space (0x%2.2X, ", ResourceType);
326283514Sarybchik        AcpiDmSpaceFlags (Flags);
327283514Sarybchik        AcpiOsPrintf (" 0x%2.2X,", SpecificFlags);
328283514Sarybchik        return;
329283514Sarybchik    }
330283514Sarybchik
331283514Sarybchik    /* This is either a Memory, IO, or BusNumber descriptor (0,1,2) */
332291436Sarybchik
333283514Sarybchik    AcpiOsPrintf ("%s (", AcpiGbl_WordDecode [ACPI_GET_2BIT_FLAG (ResourceType)]);
334283514Sarybchik
335283514Sarybchik    /* Decode the general and type-specific flags */
336283514Sarybchik
337291436Sarybchik    if (ResourceType == ACPI_MEMORY_RANGE)
338283514Sarybchik    {
339283514Sarybchik        AcpiDmMemoryFlags (Flags, SpecificFlags);
340283514Sarybchik    }
341283514Sarybchik    else /* IO range or BusNumberRange */
342283514Sarybchik    {
343283514Sarybchik        AcpiDmIoFlags (Flags);
344299517Sarybchik        if (ResourceType == ACPI_IO_RANGE)
345291436Sarybchik        {
346283514Sarybchik            AcpiOsPrintf (" %s,", AcpiGbl_RngDecode [ACPI_GET_2BIT_FLAG (SpecificFlags)]);
347283514Sarybchik        }
348283514Sarybchik    }
349283514Sarybchik}
350283514Sarybchik
351283514Sarybchik
352283514Sarybchik/*******************************************************************************
353283514Sarybchik *
354283514Sarybchik * FUNCTION:    AcpiDmAddressFlags
355283514Sarybchik *
356283514Sarybchik * PARAMETERS:  Resource        - Raw AML descriptor
357283514Sarybchik *
358283514Sarybchik * RETURN:      None
359291436Sarybchik *
360283514Sarybchik * DESCRIPTION: Emit flags common to address descriptors
361283514Sarybchik *
362283514Sarybchik ******************************************************************************/
363283514Sarybchik
364283514Sarybchikstatic void
365291436SarybchikAcpiDmAddressFlags (
366283514Sarybchik    AML_RESOURCE            *Resource)
367283514Sarybchik{
368283514Sarybchik
369283514Sarybchik    if (Resource->Address.ResourceType == ACPI_IO_RANGE)
370283514Sarybchik    {
371299517Sarybchik        AcpiDmIoFlags2 (Resource->Address.SpecificFlags);
372291436Sarybchik    }
373283514Sarybchik    else if (Resource->Address.ResourceType == ACPI_MEMORY_RANGE)
374283514Sarybchik    {
375283514Sarybchik        AcpiDmMemoryFlags2 (Resource->Address.SpecificFlags);
376283514Sarybchik    }
377283514Sarybchik}
378283514Sarybchik
379283514Sarybchik
380283514Sarybchik/*******************************************************************************
381283514Sarybchik *
382283514Sarybchik * FUNCTION:    AcpiDmSpaceFlags
383291436Sarybchik *
384283514Sarybchik * PARAMETERS:  Flags               - Flag byte to be decoded
385283514Sarybchik *
386283514Sarybchik * RETURN:      None
387283514Sarybchik *
388283514Sarybchik * DESCRIPTION: Decode the flags specific to Space Address space descriptors
389283514Sarybchik *
390291436Sarybchik ******************************************************************************/
391283514Sarybchik
392283514Sarybchikstatic void
393283514SarybchikAcpiDmSpaceFlags (
394283514Sarybchik    UINT8                   Flags)
395283514Sarybchik{
396299517Sarybchik
397291436Sarybchik    AcpiOsPrintf ("%s, %s, %s, %s,",
398283514Sarybchik        AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Flags)],
399283514Sarybchik        AcpiGbl_DecDecode [ACPI_EXTRACT_1BIT_FLAG (Flags, 1)],
400283514Sarybchik        AcpiGbl_MinDecode [ACPI_EXTRACT_1BIT_FLAG (Flags, 2)],
401283514Sarybchik        AcpiGbl_MaxDecode [ACPI_EXTRACT_1BIT_FLAG (Flags, 3)]);
402283514Sarybchik}
403283514Sarybchik
404283514Sarybchik
405283514Sarybchik/*******************************************************************************
406283514Sarybchik *
407283514Sarybchik * FUNCTION:    AcpiDmIoFlags
408291436Sarybchik *
409283514Sarybchik * PARAMETERS:  Flags               - Flag byte to be decoded
410283514Sarybchik *
411283514Sarybchik * RETURN:      None
412283514Sarybchik *
413283514Sarybchik * DESCRIPTION: Decode the flags specific to IO Address space descriptors
414283514Sarybchik *
415283514Sarybchik ******************************************************************************/
416283514Sarybchik
417283514Sarybchikstatic void
418283514SarybchikAcpiDmIoFlags (
419283514Sarybchik        UINT8               Flags)
420283514Sarybchik{
421283514Sarybchik    AcpiOsPrintf ("%s, %s, %s, %s,",
422283514Sarybchik        AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Flags)],
423283514Sarybchik        AcpiGbl_MinDecode [ACPI_EXTRACT_1BIT_FLAG (Flags, 2)],
424299517Sarybchik        AcpiGbl_MaxDecode [ACPI_EXTRACT_1BIT_FLAG (Flags, 3)],
425283514Sarybchik        AcpiGbl_DecDecode [ACPI_EXTRACT_1BIT_FLAG (Flags, 1)]);
426283514Sarybchik}
427283514Sarybchik
428283514Sarybchik
429283514Sarybchik/*******************************************************************************
430283514Sarybchik *
431283514Sarybchik * FUNCTION:    AcpiDmIoFlags2
432283514Sarybchik *
433283514Sarybchik * PARAMETERS:  SpecificFlags       - "Specific" flag byte to be decoded
434283514Sarybchik *
435283514Sarybchik * RETURN:      None
436283514Sarybchik *
437283514Sarybchik * DESCRIPTION: Decode the flags specific to IO Address space descriptors
438299517Sarybchik *
439283514Sarybchik ******************************************************************************/
440283514Sarybchik
441283514Sarybchikstatic void
442283514SarybchikAcpiDmIoFlags2 (
443283514Sarybchik        UINT8               SpecificFlags)
444283514Sarybchik{
445291436Sarybchik
446283514Sarybchik    AcpiOsPrintf (", %s",
447283514Sarybchik        AcpiGbl_TtpDecode [ACPI_EXTRACT_1BIT_FLAG (SpecificFlags, 4)]);
448283514Sarybchik
449283514Sarybchik    /* TRS is only used if TTP is TypeTranslation */
450299517Sarybchik
451291436Sarybchik    if (SpecificFlags & 0x10)
452283514Sarybchik    {
453283514Sarybchik        AcpiOsPrintf (", %s",
454283514Sarybchik            AcpiGbl_TrsDecode [ACPI_EXTRACT_1BIT_FLAG (SpecificFlags, 5)]);
455283514Sarybchik    }
456283514Sarybchik}
457283514Sarybchik
458283514Sarybchik
459283514Sarybchik/*******************************************************************************
460283514Sarybchik *
461291436Sarybchik * FUNCTION:    AcpiDmMemoryFlags
462283514Sarybchik *
463283514Sarybchik * PARAMETERS:  Flags               - Flag byte to be decoded
464283514Sarybchik *              SpecificFlags       - "Specific" flag byte to be decoded
465283514Sarybchik *
466283514Sarybchik * RETURN:      None
467283514Sarybchik *
468283514Sarybchik * DESCRIPTION: Decode flags specific to Memory Address Space descriptors
469283514Sarybchik *
470283514Sarybchik ******************************************************************************/
471299517Sarybchik
472283514Sarybchikstatic void
473283514SarybchikAcpiDmMemoryFlags (
474283514Sarybchik    UINT8                   Flags,
475283514Sarybchik    UINT8                   SpecificFlags)
476283514Sarybchik{
477283514Sarybchik
478291436Sarybchik    AcpiOsPrintf ("%s, %s, %s, %s, %s, %s,",
479283514Sarybchik        AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Flags)],
480283514Sarybchik        AcpiGbl_DecDecode [ACPI_EXTRACT_1BIT_FLAG (Flags, 1)],
481283514Sarybchik        AcpiGbl_MinDecode [ACPI_EXTRACT_1BIT_FLAG (Flags, 2)],
482283514Sarybchik        AcpiGbl_MaxDecode [ACPI_EXTRACT_1BIT_FLAG (Flags, 3)],
483283514Sarybchik        AcpiGbl_MemDecode [ACPI_EXTRACT_2BIT_FLAG (SpecificFlags, 1)],
484283514Sarybchik        AcpiGbl_RwDecode [ACPI_GET_1BIT_FLAG (SpecificFlags)]);
485283514Sarybchik}
486283514Sarybchik
487283514Sarybchik
488283514Sarybchik/*******************************************************************************
489283514Sarybchik *
490299517Sarybchik * FUNCTION:    AcpiDmMemoryFlags2
491283514Sarybchik *
492291436Sarybchik * PARAMETERS:  SpecificFlags       - "Specific" flag byte to be decoded
493283514Sarybchik *
494283514Sarybchik * RETURN:      None
495283514Sarybchik *
496283514Sarybchik * DESCRIPTION: Decode flags specific to Memory Address Space descriptors
497283514Sarybchik *
498283514Sarybchik ******************************************************************************/
499283514Sarybchik
500283514Sarybchikstatic void
501283514SarybchikAcpiDmMemoryFlags2 (
502283514Sarybchik    UINT8                   SpecificFlags)
503283514Sarybchik{
504283514Sarybchik
505283514Sarybchik    AcpiOsPrintf (", %s, %s",
506283514Sarybchik        AcpiGbl_MtpDecode [ACPI_EXTRACT_2BIT_FLAG (SpecificFlags, 3)],
507283514Sarybchik        AcpiGbl_TtpDecode [ACPI_EXTRACT_1BIT_FLAG (SpecificFlags, 5)]);
508283514Sarybchik}
509283514Sarybchik
510283514Sarybchik
511283514Sarybchik/*******************************************************************************
512283514Sarybchik *
513283514Sarybchik * FUNCTION:    AcpiDmResourceSource
514283514Sarybchik *
515283514Sarybchik * PARAMETERS:  Resource        - Raw AML descriptor
516283514Sarybchik *              MinimumLength   - descriptor length without optional fields
517283514Sarybchik *              ResourceLength
518283514Sarybchik *
519283514Sarybchik * RETURN:      None
520283514Sarybchik *
521283514Sarybchik * DESCRIPTION: Dump optional ResourceSource fields of an address descriptor
522283514Sarybchik *
523283514Sarybchik ******************************************************************************/
524283514Sarybchik
525291436Sarybchikstatic void
526283514SarybchikAcpiDmResourceSource (
527283514Sarybchik    AML_RESOURCE            *Resource,
528283514Sarybchik    ACPI_SIZE               MinimumTotalLength,
529283514Sarybchik    UINT32                  ResourceLength)
530283514Sarybchik{
531283514Sarybchik    UINT8                   *AmlResourceSource;
532283514Sarybchik    UINT32                  TotalLength;
533283514Sarybchik
534283514Sarybchik
535299517Sarybchik    TotalLength = ResourceLength + sizeof (AML_RESOURCE_LARGE_HEADER);
536283514Sarybchik
537283514Sarybchik    /* Check if the optional ResourceSource fields are present */
538283514Sarybchik
539283514Sarybchik    if (TotalLength <= MinimumTotalLength)
540283514Sarybchik    {
541283514Sarybchik        /* The two optional fields are not used */
542291436Sarybchik
543283514Sarybchik        AcpiOsPrintf (",, ");
544283514Sarybchik        return;
545283514Sarybchik    }
546293807Sarybchik
547283514Sarybchik    /* Get a pointer to the ResourceSource */
548299517Sarybchik
549283514Sarybchik    AmlResourceSource = ACPI_ADD_PTR (UINT8, Resource, MinimumTotalLength);
550293807Sarybchik
551283514Sarybchik    /*
552283514Sarybchik     * Always emit the ResourceSourceIndex (Byte)
553283514Sarybchik     *
554293807Sarybchik     * NOTE: Some ASL compilers always create a 0 byte (in the AML) for the
555283514Sarybchik     * Index even if the String does not exist. Although this is in violation
556283514Sarybchik     * of the ACPI specification, it is very important to emit ASL code that
557283514Sarybchik     * can be compiled back to the identical AML. There may be fields and/or
558283514Sarybchik     * indexes into the resource template buffer that are compiled to absolute
559283514Sarybchik     * offsets, and these will be broken if the AML length is changed.
560299517Sarybchik     */
561293807Sarybchik    AcpiOsPrintf ("0x%2.2X,", (UINT32) AmlResourceSource[0]);
562293807Sarybchik
563293807Sarybchik    /* Make sure that the ResourceSource string exists before dumping it */
564283514Sarybchik
565283514Sarybchik    if (TotalLength > (MinimumTotalLength + 1))
566283514Sarybchik    {
567299320Sarybchik        AcpiOsPrintf (" ");
568283514Sarybchik        AcpiUtPrintString ((char *) &AmlResourceSource[1], ACPI_UINT16_MAX);
569291436Sarybchik    }
570283514Sarybchik
571283514Sarybchik    AcpiOsPrintf (", ");
572283514Sarybchik}
573283514Sarybchik
574283514Sarybchik
575283514Sarybchik/*******************************************************************************
576227569Sphilip *
577227569Sphilip * FUNCTION:    AcpiDmWordDescriptor
578227569Sphilip *
579227569Sphilip * PARAMETERS:  Resource            - Pointer to the resource descriptor
580227569Sphilip *              Length              - Length of the descriptor in bytes
581227569Sphilip *              Level               - Current source code indentation level
582227569Sphilip *
583227569Sphilip * RETURN:      None
584227569Sphilip *
585227569Sphilip * DESCRIPTION: Decode a Word Address Space descriptor
586227569Sphilip *
587227569Sphilip ******************************************************************************/
588227569Sphilip
589227569Sphilipvoid
590227569SphilipAcpiDmWordDescriptor (
591283514Sarybchik    AML_RESOURCE            *Resource,
592227569Sphilip    UINT32                  Length,
593227569Sphilip    UINT32                  Level)
594283514Sarybchik{
595283514Sarybchik
596283514Sarybchik    /* Dump resource name and flags */
597227569Sphilip
598283514Sarybchik    AcpiDmAddressCommon (Resource, ACPI_RESOURCE_TYPE_ADDRESS16, Level);
599283514Sarybchik
600283514Sarybchik    /* Dump the 5 contiguous WORD values */
601227569Sphilip
602283514Sarybchik    AcpiDmAddressFields (&Resource->Address16.Granularity, 16, Level);
603227569Sphilip
604227569Sphilip    /* The ResourceSource fields are optional */
605227569Sphilip
606291436Sarybchik    AcpiDmIndent (Level + 1);
607283514Sarybchik    AcpiDmResourceSource (Resource, sizeof (AML_RESOURCE_ADDRESS16), Length);
608227569Sphilip
609227569Sphilip    /* Insert a descriptor name */
610227569Sphilip
611227569Sphilip    AcpiDmDescriptorName ();
612227569Sphilip
613291436Sarybchik    /* Type-specific flags */
614227569Sphilip
615227569Sphilip    AcpiDmAddressFlags (Resource);
616227569Sphilip    AcpiOsPrintf (")\n");
617227569Sphilip}
618227569Sphilip
619227569Sphilip
620227569Sphilip/*******************************************************************************
621227569Sphilip *
622227569Sphilip * FUNCTION:    AcpiDmDwordDescriptor
623227569Sphilip *
624227569Sphilip * PARAMETERS:  Resource            - Pointer to the resource descriptor
625227569Sphilip *              Length              - Length of the descriptor in bytes
626227569Sphilip *              Level               - Current source code indentation level
627227569Sphilip *
628227569Sphilip * RETURN:      None
629227569Sphilip *
630227569Sphilip * DESCRIPTION: Decode a DWord Address Space descriptor
631227569Sphilip *
632227569Sphilip ******************************************************************************/
633227569Sphilip
634227569Sphilipvoid
635227569SphilipAcpiDmDwordDescriptor (
636227569Sphilip    AML_RESOURCE            *Resource,
637227569Sphilip    UINT32                  Length,
638227569Sphilip    UINT32                  Level)
639227569Sphilip{
640227569Sphilip
641227569Sphilip    /* Dump resource name and flags */
642227569Sphilip
643291436Sarybchik    AcpiDmAddressCommon (Resource, ACPI_RESOURCE_TYPE_ADDRESS32, Level);
644227569Sphilip
645227569Sphilip    /* Dump the 5 contiguous DWORD values */
646227569Sphilip
647227569Sphilip    AcpiDmAddressFields (&Resource->Address32.Granularity, 32, Level);
648227569Sphilip
649227569Sphilip    /* The ResourceSource fields are optional */
650227569Sphilip
651283514Sarybchik    AcpiDmIndent (Level + 1);
652227569Sphilip    AcpiDmResourceSource (Resource, sizeof (AML_RESOURCE_ADDRESS32), Length);
653227569Sphilip
654227569Sphilip    /* Insert a descriptor name */
655227569Sphilip
656227569Sphilip    AcpiDmDescriptorName ();
657227569Sphilip
658227569Sphilip    /* Type-specific flags */
659227569Sphilip
660227569Sphilip    AcpiDmAddressFlags (Resource);
661227569Sphilip    AcpiOsPrintf (")\n");
662227569Sphilip}
663227569Sphilip
664227569Sphilip
665227569Sphilip/*******************************************************************************
666227569Sphilip *
667227569Sphilip * FUNCTION:    AcpiDmQwordDescriptor
668227569Sphilip *
669227569Sphilip * PARAMETERS:  Resource            - Pointer to the resource descriptor
670227569Sphilip *              Length              - Length of the descriptor in bytes
671227569Sphilip *              Level               - Current source code indentation level
672227569Sphilip *
673227569Sphilip * RETURN:      None
674227569Sphilip *
675283514Sarybchik * DESCRIPTION: Decode a QWord Address Space descriptor
676227569Sphilip *
677227569Sphilip ******************************************************************************/
678227569Sphilip
679227569Sphilipvoid
680227569SphilipAcpiDmQwordDescriptor (
681227569Sphilip    AML_RESOURCE            *Resource,
682227569Sphilip    UINT32                  Length,
683227569Sphilip    UINT32                  Level)
684227569Sphilip{
685227569Sphilip
686227569Sphilip    /* Dump resource name and flags */
687227569Sphilip
688227569Sphilip    AcpiDmAddressCommon (Resource, ACPI_RESOURCE_TYPE_ADDRESS64, Level);
689227569Sphilip
690227569Sphilip    /* Dump the 5 contiguous QWORD values */
691227569Sphilip
692283514Sarybchik    AcpiDmAddressFields (&Resource->Address64.Granularity, 64, Level);
693227569Sphilip
694227569Sphilip    /* The ResourceSource fields are optional */
695227569Sphilip
696227569Sphilip    AcpiDmIndent (Level + 1);
697227569Sphilip    AcpiDmResourceSource (Resource, sizeof (AML_RESOURCE_ADDRESS64), Length);
698227569Sphilip
699227569Sphilip    /* Insert a descriptor name */
700227569Sphilip
701227569Sphilip    AcpiDmDescriptorName ();
702227569Sphilip
703227569Sphilip    /* Type-specific flags */
704227569Sphilip
705227569Sphilip    AcpiDmAddressFlags (Resource);
706227569Sphilip    AcpiOsPrintf (")\n");
707227569Sphilip}
708227569Sphilip
709227569Sphilip
710227569Sphilip/*******************************************************************************
711283514Sarybchik *
712291436Sarybchik * FUNCTION:    AcpiDmExtendedDescriptor
713283514Sarybchik *
714227569Sphilip * PARAMETERS:  Resource            - Pointer to the resource descriptor
715227569Sphilip *              Length              - Length of the descriptor in bytes
716227569Sphilip *              Level               - Current source code indentation level
717227569Sphilip *
718227569Sphilip * RETURN:      None
719291436Sarybchik *
720227569Sphilip * DESCRIPTION: Decode a Extended Address Space descriptor
721227569Sphilip *
722227569Sphilip ******************************************************************************/
723227569Sphilip
724227569Sphilipvoid
725227569SphilipAcpiDmExtendedDescriptor (
726227569Sphilip    AML_RESOURCE            *Resource,
727227569Sphilip    UINT32                  Length,
728227569Sphilip    UINT32                  Level)
729227569Sphilip{
730227569Sphilip
731227569Sphilip    /* Dump resource name and flags */
732227569Sphilip
733227569Sphilip    AcpiDmAddressCommon (Resource, ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64, Level);
734227569Sphilip
735227569Sphilip    /* Dump the 5 contiguous QWORD values */
736227569Sphilip
737227569Sphilip    AcpiDmAddressFields (&Resource->ExtAddress64.Granularity, 64, Level);
738227569Sphilip
739227569Sphilip    /* Extra field for this descriptor only */
740227569Sphilip
741227569Sphilip    AcpiDmIndent (Level + 1);
742227569Sphilip    AcpiDmDumpInteger64 (Resource->ExtAddress64.TypeSpecific,
743227569Sphilip        "Type-Specific Attributes");
744227569Sphilip
745227569Sphilip    /* Insert a descriptor name */
746227569Sphilip
747227569Sphilip    AcpiDmIndent (Level + 1);
748227569Sphilip    AcpiDmDescriptorName ();
749227569Sphilip
750291436Sarybchik    /* Type-specific flags */
751227569Sphilip
752227569Sphilip    AcpiDmAddressFlags (Resource);
753227569Sphilip    AcpiOsPrintf (")\n");
754227569Sphilip}
755227569Sphilip
756227569Sphilip
757227569Sphilip/*******************************************************************************
758227569Sphilip *
759291436Sarybchik * FUNCTION:    AcpiDmMemory24Descriptor
760283514Sarybchik *
761227569Sphilip * PARAMETERS:  Resource            - Pointer to the resource descriptor
762227569Sphilip *              Length              - Length of the descriptor in bytes
763227569Sphilip *              Level               - Current source code indentation level
764227569Sphilip *
765227569Sphilip * RETURN:      None
766227569Sphilip *
767227569Sphilip * DESCRIPTION: Decode a Memory24 descriptor
768291436Sarybchik *
769227569Sphilip ******************************************************************************/
770227569Sphilip
771227569Sphilipvoid
772283514SarybchikAcpiDmMemory24Descriptor (
773227569Sphilip    AML_RESOURCE            *Resource,
774227569Sphilip    UINT32                  Length,
775227569Sphilip    UINT32                  Level)
776227569Sphilip{
777227569Sphilip
778227569Sphilip    /* Dump name and read/write flag */
779227569Sphilip
780227569Sphilip    AcpiDmIndent (Level);
781227569Sphilip    AcpiOsPrintf ("Memory24 (%s,\n",
782227569Sphilip        AcpiGbl_RwDecode [ACPI_GET_1BIT_FLAG (Resource->Memory24.Flags)]);
783283514Sarybchik
784227569Sphilip    /* Dump the 4 contiguous WORD values */
785227569Sphilip
786227569Sphilip    AcpiDmMemoryFields (&Resource->Memory24.Minimum, 16, Level);
787227569Sphilip
788227569Sphilip    /* Insert a descriptor name */
789227569Sphilip
790227569Sphilip    AcpiDmIndent (Level + 1);
791227569Sphilip    AcpiDmDescriptorName ();
792227569Sphilip    AcpiOsPrintf (")\n");
793227569Sphilip}
794283514Sarybchik
795283514Sarybchik
796227569Sphilip/*******************************************************************************
797227569Sphilip *
798227569Sphilip * FUNCTION:    AcpiDmMemory32Descriptor
799283514Sarybchik *
800227569Sphilip * PARAMETERS:  Resource            - Pointer to the resource descriptor
801227569Sphilip *              Length              - Length of the descriptor in bytes
802227569Sphilip *              Level               - Current source code indentation level
803227569Sphilip *
804227569Sphilip * RETURN:      None
805227569Sphilip *
806227569Sphilip * DESCRIPTION: Decode a Memory32 descriptor
807227569Sphilip *
808227569Sphilip ******************************************************************************/
809283514Sarybchik
810227569Sphilipvoid
811227569SphilipAcpiDmMemory32Descriptor (
812227569Sphilip    AML_RESOURCE            *Resource,
813227569Sphilip    UINT32                  Length,
814227569Sphilip    UINT32                  Level)
815227569Sphilip{
816227569Sphilip
817227569Sphilip    /* Dump name and read/write flag */
818227569Sphilip
819283514Sarybchik    AcpiDmIndent (Level);
820227569Sphilip    AcpiOsPrintf ("Memory32 (%s,\n",
821227569Sphilip        AcpiGbl_RwDecode [ACPI_GET_1BIT_FLAG (Resource->Memory32.Flags)]);
822227569Sphilip
823227569Sphilip    /* Dump the 4 contiguous DWORD values */
824227569Sphilip
825227569Sphilip    AcpiDmMemoryFields (&Resource->Memory32.Minimum, 32, Level);
826227569Sphilip
827227569Sphilip    /* Insert a descriptor name */
828227569Sphilip
829227569Sphilip    AcpiDmIndent (Level + 1);
830227569Sphilip    AcpiDmDescriptorName ();
831283514Sarybchik    AcpiOsPrintf (")\n");
832227569Sphilip}
833227569Sphilip
834227569Sphilip
835227569Sphilip/*******************************************************************************
836227569Sphilip *
837227569Sphilip * FUNCTION:    AcpiDmFixedMemory32Descriptor
838227569Sphilip *
839283514Sarybchik * PARAMETERS:  Resource            - Pointer to the resource descriptor
840227569Sphilip *              Length              - Length of the descriptor in bytes
841227569Sphilip *              Level               - Current source code indentation level
842227569Sphilip *
843283514Sarybchik * RETURN:      None
844227569Sphilip *
845227569Sphilip * DESCRIPTION: Decode a Fixed Memory32 descriptor
846227569Sphilip *
847227569Sphilip ******************************************************************************/
848227569Sphilip
849227569Sphilipvoid
850227569SphilipAcpiDmFixedMemory32Descriptor (
851283514Sarybchik    AML_RESOURCE            *Resource,
852227569Sphilip    UINT32                  Length,
853227569Sphilip    UINT32                  Level)
854227569Sphilip{
855283514Sarybchik
856227569Sphilip    /* Dump name and read/write flag */
857227569Sphilip
858227569Sphilip    AcpiDmIndent (Level);
859227569Sphilip    AcpiOsPrintf ("Memory32Fixed (%s,\n",
860227569Sphilip        AcpiGbl_RwDecode [ACPI_GET_1BIT_FLAG (Resource->FixedMemory32.Flags)]);
861227569Sphilip
862227569Sphilip    AcpiDmIndent (Level + 1);
863283514Sarybchik    AcpiDmDumpInteger32 (Resource->FixedMemory32.Address, "Address Base");
864227569Sphilip
865227569Sphilip    AcpiDmIndent (Level + 1);
866227569Sphilip    AcpiDmDumpInteger32 (Resource->FixedMemory32.AddressLength, "Address Length");
867283514Sarybchik
868227569Sphilip    /* Insert a descriptor name */
869227569Sphilip
870283514Sarybchik    AcpiDmIndent (Level + 1);
871283514Sarybchik    AcpiDmDescriptorName ();
872227569Sphilip    AcpiOsPrintf (")\n");
873227569Sphilip}
874227569Sphilip
875227569Sphilip
876227569Sphilip/*******************************************************************************
877291436Sarybchik *
878227569Sphilip * FUNCTION:    AcpiDmGenericRegisterDescriptor
879227569Sphilip *
880227569Sphilip * PARAMETERS:  Resource            - Pointer to the resource descriptor
881227569Sphilip *              Length              - Length of the descriptor in bytes
882227569Sphilip *              Level               - Current source code indentation level
883227569Sphilip *
884291436Sarybchik * RETURN:      None
885283514Sarybchik *
886227569Sphilip * DESCRIPTION: Decode a Generic Register descriptor
887227569Sphilip *
888227569Sphilip ******************************************************************************/
889227569Sphilip
890227569Sphilipvoid
891227569SphilipAcpiDmGenericRegisterDescriptor (
892291436Sarybchik    AML_RESOURCE            *Resource,
893227569Sphilip    UINT32                  Length,
894227569Sphilip    UINT32                  Level)
895227569Sphilip{
896227569Sphilip
897227569Sphilip    AcpiDmIndent (Level);
898227569Sphilip    AcpiOsPrintf ("Register (");
899227569Sphilip    AcpiDmAddressSpace (Resource->GenericReg.AddressSpaceId);
900227569Sphilip    AcpiOsPrintf ("\n");
901227569Sphilip
902227569Sphilip    AcpiDmIndent (Level + 1);
903227569Sphilip    AcpiDmDumpInteger8 (Resource->GenericReg.BitWidth, "Bit Width");
904227569Sphilip
905227569Sphilip    AcpiDmIndent (Level + 1);
906283514Sarybchik    AcpiDmDumpInteger8 (Resource->GenericReg.BitOffset, "Bit Offset");
907227569Sphilip
908227569Sphilip    AcpiDmIndent (Level + 1);
909227569Sphilip    AcpiDmDumpInteger64 (Resource->GenericReg.Address, "Address");
910227569Sphilip
911227569Sphilip    /* Optional field for ACPI 3.0 */
912227569Sphilip
913227569Sphilip    AcpiDmIndent (Level + 1);
914283514Sarybchik    if (Resource->GenericReg.AccessSize)
915227569Sphilip    {
916227569Sphilip        AcpiOsPrintf ("0x%2.2X,               // %s\n",
917227569Sphilip            Resource->GenericReg.AccessSize, "Access Size");
918227569Sphilip        AcpiDmIndent (Level + 1);
919227569Sphilip    }
920227569Sphilip    else
921283514Sarybchik    {
922227569Sphilip        AcpiOsPrintf (",");
923227569Sphilip    }
924227569Sphilip
925283514Sarybchik    /* DescriptorName was added for ACPI 3.0+ */
926227569Sphilip
927227569Sphilip    AcpiDmDescriptorName ();
928227569Sphilip    AcpiOsPrintf (")\n");
929227569Sphilip}
930227569Sphilip
931227569Sphilip
932227569Sphilip/*******************************************************************************
933227569Sphilip *
934227569Sphilip * FUNCTION:    AcpiDmInterruptDescriptor
935227569Sphilip *
936227569Sphilip * PARAMETERS:  Resource            - Pointer to the resource descriptor
937227569Sphilip *              Length              - Length of the descriptor in bytes
938227569Sphilip *              Level               - Current source code indentation level
939291436Sarybchik *
940227569Sphilip * RETURN:      None
941227569Sphilip *
942227569Sphilip * DESCRIPTION: Decode a extended Interrupt descriptor
943227569Sphilip *
944227569Sphilip ******************************************************************************/
945293807Sarybchik
946293807Sarybchikvoid
947293807SarybchikAcpiDmInterruptDescriptor (
948293807Sarybchik    AML_RESOURCE            *Resource,
949293807Sarybchik    UINT32                  Length,
950293807Sarybchik    UINT32                  Level)
951293807Sarybchik{
952293807Sarybchik    UINT32                  i;
953293807Sarybchik
954293807Sarybchik
955293807Sarybchik    AcpiDmIndent (Level);
956293807Sarybchik    AcpiOsPrintf ("Interrupt (%s, %s, %s, %s, ",
957293807Sarybchik        AcpiGbl_ConsumeDecode [ACPI_GET_1BIT_FLAG (Resource->ExtendedIrq.Flags)],
958293807Sarybchik        AcpiGbl_HeDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->ExtendedIrq.Flags, 1)],
959293807Sarybchik        AcpiGbl_LlDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->ExtendedIrq.Flags, 2)],
960293807Sarybchik        AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->ExtendedIrq.Flags, 3)]);
961293807Sarybchik
962293807Sarybchik    /*
963293807Sarybchik     * The ResourceSource fields are optional and appear after the interrupt
964293807Sarybchik     * list. Must compute length based on length of the list. First xrupt
965293807Sarybchik     * is included in the struct (reason for -1 below)
966293807Sarybchik     */
967293807Sarybchik    AcpiDmResourceSource (Resource,
968293807Sarybchik        sizeof (AML_RESOURCE_EXTENDED_IRQ) +
969293807Sarybchik            ((UINT32) Resource->ExtendedIrq.InterruptCount - 1) * sizeof (UINT32),
970293807Sarybchik        Resource->ExtendedIrq.ResourceLength);
971293807Sarybchik
972293807Sarybchik    /* Insert a descriptor name */
973293807Sarybchik
974293807Sarybchik    AcpiDmDescriptorName ();
975293807Sarybchik    AcpiOsPrintf (")\n");
976293807Sarybchik
977293807Sarybchik    /* Dump the interrupt list */
978293807Sarybchik
979293807Sarybchik    AcpiDmIndent (Level);
980293807Sarybchik    AcpiOsPrintf ("{\n");
981293807Sarybchik    for (i = 0; i < Resource->ExtendedIrq.InterruptCount; i++)
982293807Sarybchik    {
983293807Sarybchik        AcpiDmIndent (Level + 1);
984293807Sarybchik        AcpiOsPrintf ("0x%8.8X,\n",
985293807Sarybchik            (UINT32) Resource->ExtendedIrq.Interrupts[i]);
986293807Sarybchik    }
987293807Sarybchik
988293807Sarybchik    AcpiDmIndent (Level);
989293807Sarybchik    AcpiOsPrintf ("}\n");
990293807Sarybchik}
991293807Sarybchik
992293807Sarybchik
993293807Sarybchik/*******************************************************************************
994293807Sarybchik *
995293807Sarybchik * FUNCTION:    AcpiDmVendorCommon
996293807Sarybchik *
997283514Sarybchik * PARAMETERS:  Name                - Descriptor name suffix
998283514Sarybchik *              ByteData            - Pointer to the vendor byte data
999227569Sphilip *              Length              - Length of the byte data
1000227569Sphilip *              Level               - Current source code indentation level
1001227569Sphilip *
1002227569Sphilip * RETURN:      None
1003227569Sphilip *
1004227569Sphilip * DESCRIPTION: Decode a Vendor descriptor, both Large and Small
1005227569Sphilip *
1006227569Sphilip ******************************************************************************/
1007227569Sphilip
1008227569Sphilipvoid
1009227569SphilipAcpiDmVendorCommon (
1010227569Sphilip    char                    *Name,
1011227569Sphilip    UINT8                   *ByteData,
1012227569Sphilip    UINT32                  Length,
1013227569Sphilip    UINT32                  Level)
1014227569Sphilip{
1015227569Sphilip
1016227569Sphilip    /* Dump macro name */
1017227569Sphilip
1018227569Sphilip    AcpiDmIndent (Level);
1019227569Sphilip    AcpiOsPrintf ("Vendor%s (", Name);
1020227569Sphilip
1021227569Sphilip    /* Insert a descriptor name */
1022227569Sphilip
1023227569Sphilip    AcpiDmDescriptorName ();
1024227569Sphilip    AcpiOsPrintf (")      // Length = 0x%.2X\n", Length);
1025227569Sphilip
1026227569Sphilip    /* Dump the vendor bytes */
1027227569Sphilip
1028227569Sphilip    AcpiDmIndent (Level);
1029227569Sphilip    AcpiOsPrintf ("{\n");
1030227569Sphilip
1031227569Sphilip    AcpiDmDisasmByteList (Level + 1, ByteData, Length);
1032227569Sphilip
1033227569Sphilip    AcpiDmIndent (Level);
1034227569Sphilip    AcpiOsPrintf ("}\n");
1035283514Sarybchik}
1036283514Sarybchik
1037227569Sphilip
1038283514Sarybchik/*******************************************************************************
1039283514Sarybchik *
1040227569Sphilip * FUNCTION:    AcpiDmVendorLargeDescriptor
1041227569Sphilip *
1042283514Sarybchik * PARAMETERS:  Resource            - Pointer to the resource descriptor
1043227569Sphilip *              Length              - Length of the descriptor in bytes
1044227569Sphilip *              Level               - Current source code indentation level
1045227569Sphilip *
1046227569Sphilip * RETURN:      None
1047283514Sarybchik *
1048283514Sarybchik * DESCRIPTION: Decode a Vendor Large descriptor
1049227569Sphilip *
1050227569Sphilip ******************************************************************************/
1051227569Sphilip
1052227569Sphilipvoid
1053227569SphilipAcpiDmVendorLargeDescriptor (
1054227569Sphilip    AML_RESOURCE            *Resource,
1055227569Sphilip    UINT32                  Length,
1056227569Sphilip    UINT32                  Level)
1057227569Sphilip{
1058283514Sarybchik
1059283514Sarybchik    AcpiDmVendorCommon ("Long ",
1060283514Sarybchik        ACPI_ADD_PTR (UINT8, Resource, sizeof (AML_RESOURCE_LARGE_HEADER)),
1061283514Sarybchik        Length, Level);
1062283514Sarybchik}
1063227569Sphilip
1064227569Sphilip#endif
1065227569Sphilip