dmresrcs.c revision 243347
1238438Sdteske/*******************************************************************************
2238438Sdteske *
3249746Sdteske * Module Name: dmresrcs.c - "Small" Resource Descriptor disassembly
4252980Sdteske *
5238438Sdteske ******************************************************************************/
6238438Sdteske
7238438Sdteske/*
8238438Sdteske * Copyright (C) 2000 - 2012, Intel Corp.
9238438Sdteske * All rights reserved.
10238438Sdteske *
11238438Sdteske * Redistribution and use in source and binary forms, with or without
12238438Sdteske * modification, are permitted provided that the following conditions
13238438Sdteske * are met:
14238438Sdteske * 1. Redistributions of source code must retain the above copyright
15238438Sdteske *    notice, this list of conditions, and the following disclaimer,
16252987Sdteske *    without modification.
17238438Sdteske * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18238438Sdteske *    substantially similar to the "NO WARRANTY" disclaimer below
19238438Sdteske *    ("Disclaimer") and any redistribution must be conditioned upon
20252987Sdteske *    including a substantially similar Disclaimer requirement for further
21238438Sdteske *    binary redistribution.
22238438Sdteske * 3. Neither the names of the above-listed copyright holders nor the names
23238438Sdteske *    of any contributors may be used to endorse or promote products derived
24238438Sdteske *    from this software without specific prior written permission.
25238438Sdteske *
26238438Sdteske * Alternatively, this software may be distributed under the terms of the
27238438Sdteske * GNU General Public License ("GPL") version 2 as published by the Free
28238438Sdteske * Software Foundation.
29238438Sdteske *
30238438Sdteske * NO WARRANTY
31240684Sdteske * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32240684Sdteske * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33244675Sdteske * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34240684Sdteske * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35240684Sdteske * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36240684Sdteske * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37238438Sdteske * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38240684Sdteske * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39238438Sdteske * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40238438Sdteske * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41260678Sdteske * POSSIBILITY OF SUCH DAMAGES.
42260678Sdteske */
43238438Sdteske
44238438Sdteske
45238438Sdteske#include <contrib/dev/acpica/include/acpi.h>
46238438Sdteske#include <contrib/dev/acpica/include/accommon.h>
47238438Sdteske#include <contrib/dev/acpica/include/acdisasm.h>
48238438Sdteske
49238438Sdteske
50238438Sdteske#ifdef ACPI_DISASSEMBLER
51238438Sdteske
52238438Sdteske#define _COMPONENT          ACPI_CA_DEBUGGER
53238438Sdteske        ACPI_MODULE_NAME    ("dbresrcs")
54238438Sdteske
55238438Sdteske
56238438Sdteske/*******************************************************************************
57238438Sdteske *
58238438Sdteske * FUNCTION:    AcpiDmIrqDescriptor
59238438Sdteske *
60238438Sdteske * PARAMETERS:  Resource            - Pointer to the resource descriptor
61238438Sdteske *              Length              - Length of the descriptor in bytes
62238438Sdteske *              Level               - Current source code indentation level
63238438Sdteske *
64238438Sdteske * RETURN:      None
65238438Sdteske *
66238438Sdteske * DESCRIPTION: Decode a IRQ descriptor, either Irq() or IrqNoFlags()
67238438Sdteske *
68238438Sdteske ******************************************************************************/
69238438Sdteske
70238438Sdteskevoid
71238438SdteskeAcpiDmIrqDescriptor (
72238438Sdteske    AML_RESOURCE            *Resource,
73238438Sdteske    UINT32                  Length,
74238438Sdteske    UINT32                  Level)
75238438Sdteske{
76238438Sdteske
77238438Sdteske    AcpiDmIndent (Level);
78238438Sdteske    AcpiOsPrintf ("%s (",
79238438Sdteske        AcpiGbl_IrqDecode [ACPI_GET_1BIT_FLAG (Length)]);
80251264Sdteske
81251264Sdteske    /* Decode flags byte if present */
82238438Sdteske
83238438Sdteske    if (Length & 1)
84238438Sdteske    {
85238438Sdteske        AcpiOsPrintf ("%s, %s, %s, ",
86238438Sdteske            AcpiGbl_HeDecode [ACPI_GET_1BIT_FLAG (Resource->Irq.Flags)],
87238438Sdteske            AcpiGbl_LlDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->Irq.Flags, 3)],
88238438Sdteske            AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Irq.Flags, 4)]);
89238438Sdteske    }
90238438Sdteske
91238438Sdteske    /* Insert a descriptor name */
92238438Sdteske
93238438Sdteske    AcpiDmDescriptorName ();
94238438Sdteske    AcpiOsPrintf (")\n");
95238438Sdteske
96238438Sdteske    AcpiDmIndent (Level + 1);
97238438Sdteske    AcpiDmBitList (Resource->Irq.IrqMask);
98238438Sdteske}
99238438Sdteske
100238438Sdteske
101238438Sdteske/*******************************************************************************
102238438Sdteske *
103238438Sdteske * FUNCTION:    AcpiDmDmaDescriptor
104238438Sdteske *
105238438Sdteske * PARAMETERS:  Resource            - Pointer to the resource descriptor
106238438Sdteske *              Length              - Length of the descriptor in bytes
107238438Sdteske *              Level               - Current source code indentation level
108238438Sdteske *
109238438Sdteske * RETURN:      None
110238438Sdteske *
111238438Sdteske * DESCRIPTION: Decode a DMA descriptor
112238438Sdteske *
113251190Sdteske ******************************************************************************/
114251190Sdteske
115251190Sdteskevoid
116251190SdteskeAcpiDmDmaDescriptor (
117251190Sdteske    AML_RESOURCE            *Resource,
118251190Sdteske    UINT32                  Length,
119251190Sdteske    UINT32                  Level)
120238438Sdteske{
121249751Sdteske
122251904Sdteske    AcpiDmIndent (Level);
123251904Sdteske    AcpiOsPrintf ("DMA (%s, %s, %s, ",
124251904Sdteske        AcpiGbl_TypDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Dma.Flags, 5)],
125251904Sdteske        AcpiGbl_BmDecode  [ACPI_EXTRACT_1BIT_FLAG (Resource->Dma.Flags, 2)],
126251904Sdteske        AcpiGbl_SizDecode [ACPI_GET_2BIT_FLAG (Resource->Dma.Flags)]);
127251904Sdteske
128251904Sdteske    /* Insert a descriptor name */
129251904Sdteske
130251904Sdteske    AcpiDmDescriptorName ();
131251904Sdteske    AcpiOsPrintf (")\n");
132251904Sdteske
133251904Sdteske    AcpiDmIndent (Level + 1);
134251904Sdteske    AcpiDmBitList (Resource->Dma.DmaChannelMask);
135251904Sdteske}
136251904Sdteske
137251904Sdteske
138251904Sdteske/*******************************************************************************
139251904Sdteske *
140251904Sdteske * FUNCTION:    AcpiDmFixedDmaDescriptor
141251904Sdteske *
142251904Sdteske * PARAMETERS:  Resource            - Pointer to the resource descriptor
143251904Sdteske *              Length              - Length of the descriptor in bytes
144251904Sdteske *              Level               - Current source code indentation level
145251904Sdteske *
146251904Sdteske * RETURN:      None
147251904Sdteske *
148251904Sdteske * DESCRIPTION: Decode a FixedDMA descriptor
149251904Sdteske *
150251904Sdteske ******************************************************************************/
151251904Sdteske
152251904Sdteskevoid
153251904SdteskeAcpiDmFixedDmaDescriptor (
154251904Sdteske    AML_RESOURCE            *Resource,
155251904Sdteske    UINT32                  Length,
156251904Sdteske    UINT32                  Level)
157251904Sdteske{
158251904Sdteske
159251904Sdteske    AcpiDmIndent (Level);
160251904Sdteske    AcpiOsPrintf ("FixedDMA (0x%4.4X, 0x%4.4X, ",
161251904Sdteske        Resource->FixedDma.RequestLines,
162251904Sdteske        Resource->FixedDma.Channels);
163251904Sdteske
164251904Sdteske    if (Resource->FixedDma.Width <= 5)
165251904Sdteske    {
166251904Sdteske        AcpiOsPrintf ("%s, ",
167251904Sdteske            AcpiGbl_DtsDecode [Resource->FixedDma.Width]);
168251904Sdteske    }
169251904Sdteske    else
170251904Sdteske    {
171251904Sdteske        AcpiOsPrintf ("%X /* INVALID DMA WIDTH */, ", Resource->FixedDma.Width);
172251904Sdteske    }
173251904Sdteske
174251904Sdteske    /* Insert a descriptor name */
175251904Sdteske
176251904Sdteske    AcpiDmDescriptorName ();
177251904Sdteske    AcpiOsPrintf (")\n");
178251904Sdteske}
179251904Sdteske
180251904Sdteske
181251904Sdteske/*******************************************************************************
182249751Sdteske *
183249751Sdteske * FUNCTION:    AcpiDmIoDescriptor
184249751Sdteske *
185249751Sdteske * PARAMETERS:  Resource            - Pointer to the resource descriptor
186249751Sdteske *              Length              - Length of the descriptor in bytes
187249751Sdteske *              Level               - Current source code indentation level
188249751Sdteske *
189249751Sdteske * RETURN:      None
190249751Sdteske *
191249751Sdteske * DESCRIPTION: Decode an IO descriptor
192249751Sdteske *
193249751Sdteske ******************************************************************************/
194249751Sdteske
195249751Sdteskevoid
196251236SdteskeAcpiDmIoDescriptor (
197251236Sdteske    AML_RESOURCE            *Resource,
198249751Sdteske    UINT32                  Length,
199238438Sdteske    UINT32                  Level)
200238438Sdteske{
201238438Sdteske
202238438Sdteske    AcpiDmIndent (Level);
203249751Sdteske    AcpiOsPrintf ("IO (%s,\n",
204251190Sdteske        AcpiGbl_IoDecode [ACPI_GET_1BIT_FLAG (Resource->Io.Flags)]);
205251190Sdteske
206238438Sdteske    AcpiDmIndent (Level + 1);
207240768Sdteske    AcpiDmDumpInteger16 (Resource->Io.Minimum, "Range Minimum");
208240768Sdteske
209240768Sdteske    AcpiDmIndent (Level + 1);
210251236Sdteske    AcpiDmDumpInteger16 (Resource->Io.Maximum, "Range Maximum");
211240768Sdteske
212238438Sdteske    AcpiDmIndent (Level + 1);
213238438Sdteske    AcpiDmDumpInteger8 (Resource->Io.Alignment, "Alignment");
214238438Sdteske
215238438Sdteske    AcpiDmIndent (Level + 1);
216238438Sdteske    AcpiDmDumpInteger8 (Resource->Io.AddressLength, "Length");
217238438Sdteske
218238438Sdteske    /* Insert a descriptor name */
219238438Sdteske
220238438Sdteske    AcpiDmIndent (Level + 1);
221238438Sdteske    AcpiDmDescriptorName ();
222250633Sdteske    AcpiOsPrintf (")\n");
223238438Sdteske}
224252178Sdteske
225238438Sdteske
226238438Sdteske/*******************************************************************************
227238438Sdteske *
228238438Sdteske * FUNCTION:    AcpiDmFixedIoDescriptor
229238438Sdteske *
230238438Sdteske * PARAMETERS:  Resource            - Pointer to the resource descriptor
231238438Sdteske *              Length              - Length of the descriptor in bytes
232238438Sdteske *              Level               - Current source code indentation level
233238438Sdteske *
234238438Sdteske * RETURN:      None
235238438Sdteske *
236238438Sdteske * DESCRIPTION: Decode a Fixed IO descriptor
237238438Sdteske *
238238438Sdteske ******************************************************************************/
239238438Sdteske
240251236Sdteskevoid
241251236SdteskeAcpiDmFixedIoDescriptor (
242238438Sdteske    AML_RESOURCE            *Resource,
243238438Sdteske    UINT32                  Length,
244238438Sdteske    UINT32                  Level)
245238438Sdteske{
246238438Sdteske
247238438Sdteske    AcpiDmIndent (Level);
248238438Sdteske    AcpiOsPrintf ("FixedIO (\n");
249260678Sdteske
250260678Sdteske    AcpiDmIndent (Level + 1);
251238438Sdteske    AcpiDmDumpInteger16 (Resource->FixedIo.Address, "Address");
252238438Sdteske
253238438Sdteske    AcpiDmIndent (Level + 1);
254238438Sdteske    AcpiDmDumpInteger8 (Resource->FixedIo.AddressLength, "Length");
255251905Sdteske
256238438Sdteske    /* Insert a descriptor name */
257251905Sdteske
258251905Sdteske    AcpiDmIndent (Level + 1);
259251905Sdteske    AcpiDmDescriptorName ();
260251905Sdteske    AcpiOsPrintf (")\n");
261251905Sdteske}
262251905Sdteske
263251905Sdteske
264251905Sdteske/*******************************************************************************
265251905Sdteske *
266251905Sdteske * FUNCTION:    AcpiDmStartDependentDescriptor
267251905Sdteske *
268251905Sdteske * PARAMETERS:  Resource            - Pointer to the resource descriptor
269251905Sdteske *              Length              - Length of the descriptor in bytes
270251905Sdteske *              Level               - Current source code indentation level
271251905Sdteske *
272251905Sdteske * RETURN:      None
273251905Sdteske *
274251905Sdteske * DESCRIPTION: Decode a Start Dependendent functions descriptor
275251905Sdteske *
276251905Sdteske ******************************************************************************/
277251905Sdteske
278251905Sdteskevoid
279251905SdteskeAcpiDmStartDependentDescriptor (
280251905Sdteske    AML_RESOURCE            *Resource,
281251905Sdteske    UINT32                  Length,
282251905Sdteske    UINT32                  Level)
283251905Sdteske{
284251905Sdteske
285251905Sdteske    AcpiDmIndent (Level);
286251905Sdteske
287251905Sdteske    if (Length & 1)
288251905Sdteske    {
289251905Sdteske        AcpiOsPrintf ("StartDependentFn (0x%2.2X, 0x%2.2X)\n",
290251905Sdteske            (UINT32) ACPI_GET_2BIT_FLAG (Resource->StartDpf.Flags),
291251905Sdteske            (UINT32) ACPI_EXTRACT_2BIT_FLAG (Resource->StartDpf.Flags, 2));
292251905Sdteske    }
293251905Sdteske    else
294251905Sdteske    {
295251905Sdteske        AcpiOsPrintf ("StartDependentFnNoPri ()\n");
296251905Sdteske    }
297251905Sdteske
298251905Sdteske    AcpiDmIndent (Level);
299251905Sdteske    AcpiOsPrintf ("{\n");
300251905Sdteske}
301251905Sdteske
302251905Sdteske
303251905Sdteske/*******************************************************************************
304251905Sdteske *
305251905Sdteske * FUNCTION:    AcpiDmEndDependentDescriptor
306251905Sdteske *
307251905Sdteske * PARAMETERS:  Resource            - Pointer to the resource descriptor
308251905Sdteske *              Length              - Length of the descriptor in bytes
309251905Sdteske *              Level               - Current source code indentation level
310251905Sdteske *
311251905Sdteske * RETURN:      None
312251905Sdteske *
313251905Sdteske * DESCRIPTION: Decode an End Dependent functions descriptor
314251905Sdteske *
315251905Sdteske ******************************************************************************/
316251905Sdteske
317238438Sdteskevoid
318251905SdteskeAcpiDmEndDependentDescriptor (
319251905Sdteske    AML_RESOURCE            *Resource,
320260678Sdteske    UINT32                  Length,
321260678Sdteske    UINT32                  Level)
322251905Sdteske{
323251905Sdteske
324251907Sdteske    AcpiDmIndent (Level);
325251905Sdteske    AcpiOsPrintf ("}\n");
326238438Sdteske    AcpiDmIndent (Level);
327238438Sdteske    AcpiOsPrintf ("EndDependentFn ()\n");
328238438Sdteske}
329238438Sdteske
330238438Sdteske
331238438Sdteske/*******************************************************************************
332238438Sdteske *
333 * FUNCTION:    AcpiDmVendorSmallDescriptor
334 *
335 * PARAMETERS:  Resource            - Pointer to the resource descriptor
336 *              Length              - Length of the descriptor in bytes
337 *              Level               - Current source code indentation level
338 *
339 * RETURN:      None
340 *
341 * DESCRIPTION: Decode a Vendor Small Descriptor
342 *
343 ******************************************************************************/
344
345void
346AcpiDmVendorSmallDescriptor (
347    AML_RESOURCE            *Resource,
348    UINT32                  Length,
349    UINT32                  Level)
350{
351
352    AcpiDmVendorCommon ("Short",
353        ACPI_ADD_PTR (UINT8, Resource, sizeof (AML_RESOURCE_SMALL_HEADER)),
354        Length, Level);
355}
356
357#endif
358