1100966Siwasaki/*******************************************************************************
2100966Siwasaki *
3100966Siwasaki * Module Name: dmresrcs.c - "Small" Resource Descriptor disassembly
4100966Siwasaki *
5100966Siwasaki ******************************************************************************/
6100966Siwasaki
7217365Sjkim/*
8281075Sdim * Copyright (C) 2000 - 2015, 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
49100966Siwasaki#ifdef ACPI_DISASSEMBLER
50100966Siwasaki
51102550Siwasaki#define _COMPONENT          ACPI_CA_DEBUGGER
52100966Siwasaki        ACPI_MODULE_NAME    ("dbresrcs")
53100966Siwasaki
54100966Siwasaki
55100966Siwasaki/*******************************************************************************
56100966Siwasaki *
57100966Siwasaki * FUNCTION:    AcpiDmIrqDescriptor
58100966Siwasaki *
59281075Sdim * PARAMETERS:  Info                - Extra resource info
60281075Sdim *              Resource            - Pointer to the resource descriptor
61100966Siwasaki *              Length              - Length of the descriptor in bytes
62100966Siwasaki *              Level               - Current source code indentation level
63100966Siwasaki *
64100966Siwasaki * RETURN:      None
65100966Siwasaki *
66151937Sjkim * DESCRIPTION: Decode a IRQ descriptor, either Irq() or IrqNoFlags()
67100966Siwasaki *
68100966Siwasaki ******************************************************************************/
69100966Siwasaki
70100966Siwasakivoid
71100966SiwasakiAcpiDmIrqDescriptor (
72281075Sdim    ACPI_OP_WALK_INFO       *Info,
73151937Sjkim    AML_RESOURCE            *Resource,
74100966Siwasaki    UINT32                  Length,
75100966Siwasaki    UINT32                  Level)
76100966Siwasaki{
77100966Siwasaki
78100966Siwasaki    AcpiDmIndent (Level);
79100966Siwasaki    AcpiOsPrintf ("%s (",
80243347Sjkim        AcpiGbl_IrqDecode [ACPI_GET_1BIT_FLAG (Length)]);
81100966Siwasaki
82151937Sjkim    /* Decode flags byte if present */
83151937Sjkim
84100966Siwasaki    if (Length & 1)
85100966Siwasaki    {
86167802Sjkim        AcpiOsPrintf ("%s, %s, %s, ",
87243347Sjkim            AcpiGbl_HeDecode [ACPI_GET_1BIT_FLAG (Resource->Irq.Flags)],
88243347Sjkim            AcpiGbl_LlDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->Irq.Flags, 3)],
89243347Sjkim            AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Irq.Flags, 4)]);
90100966Siwasaki    }
91167802Sjkim
92167802Sjkim    /* Insert a descriptor name */
93167802Sjkim
94167802Sjkim    AcpiDmDescriptorName ();
95151937Sjkim    AcpiOsPrintf (")\n");
96100966Siwasaki
97151937Sjkim    AcpiDmIndent (Level + 1);
98151937Sjkim    AcpiDmBitList (Resource->Irq.IrqMask);
99100966Siwasaki}
100100966Siwasaki
101100966Siwasaki
102100966Siwasaki/*******************************************************************************
103100966Siwasaki *
104100966Siwasaki * FUNCTION:    AcpiDmDmaDescriptor
105100966Siwasaki *
106281075Sdim * PARAMETERS:  Info                - Extra resource info
107281075Sdim *              Resource            - Pointer to the resource descriptor
108100966Siwasaki *              Length              - Length of the descriptor in bytes
109100966Siwasaki *              Level               - Current source code indentation level
110100966Siwasaki *
111100966Siwasaki * RETURN:      None
112100966Siwasaki *
113100966Siwasaki * DESCRIPTION: Decode a DMA descriptor
114100966Siwasaki *
115100966Siwasaki ******************************************************************************/
116100966Siwasaki
117100966Siwasakivoid
118100966SiwasakiAcpiDmDmaDescriptor (
119281075Sdim    ACPI_OP_WALK_INFO       *Info,
120151937Sjkim    AML_RESOURCE            *Resource,
121100966Siwasaki    UINT32                  Length,
122100966Siwasaki    UINT32                  Level)
123100966Siwasaki{
124100966Siwasaki
125100966Siwasaki    AcpiDmIndent (Level);
126167802Sjkim    AcpiOsPrintf ("DMA (%s, %s, %s, ",
127243347Sjkim        AcpiGbl_TypDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Dma.Flags, 5)],
128243347Sjkim        AcpiGbl_BmDecode  [ACPI_EXTRACT_1BIT_FLAG (Resource->Dma.Flags, 2)],
129243347Sjkim        AcpiGbl_SizDecode [ACPI_GET_2BIT_FLAG (Resource->Dma.Flags)]);
130100966Siwasaki
131167802Sjkim    /* Insert a descriptor name */
132167802Sjkim
133167802Sjkim    AcpiDmDescriptorName ();
134167802Sjkim    AcpiOsPrintf (")\n");
135167802Sjkim
136151937Sjkim    AcpiDmIndent (Level + 1);
137151937Sjkim    AcpiDmBitList (Resource->Dma.DmaChannelMask);
138100966Siwasaki}
139100966Siwasaki
140100966Siwasaki
141100966Siwasaki/*******************************************************************************
142100966Siwasaki *
143228110Sjkim * FUNCTION:    AcpiDmFixedDmaDescriptor
144228110Sjkim *
145281075Sdim * PARAMETERS:  Info                - Extra resource info
146281075Sdim *              Resource            - Pointer to the resource descriptor
147228110Sjkim *              Length              - Length of the descriptor in bytes
148228110Sjkim *              Level               - Current source code indentation level
149228110Sjkim *
150228110Sjkim * RETURN:      None
151228110Sjkim *
152228110Sjkim * DESCRIPTION: Decode a FixedDMA descriptor
153228110Sjkim *
154228110Sjkim ******************************************************************************/
155228110Sjkim
156228110Sjkimvoid
157228110SjkimAcpiDmFixedDmaDescriptor (
158281075Sdim    ACPI_OP_WALK_INFO       *Info,
159228110Sjkim    AML_RESOURCE            *Resource,
160228110Sjkim    UINT32                  Length,
161228110Sjkim    UINT32                  Level)
162228110Sjkim{
163228110Sjkim
164228110Sjkim    AcpiDmIndent (Level);
165228110Sjkim    AcpiOsPrintf ("FixedDMA (0x%4.4X, 0x%4.4X, ",
166228110Sjkim        Resource->FixedDma.RequestLines,
167228110Sjkim        Resource->FixedDma.Channels);
168228110Sjkim
169228110Sjkim    if (Resource->FixedDma.Width <= 5)
170228110Sjkim    {
171228110Sjkim        AcpiOsPrintf ("%s, ",
172228110Sjkim            AcpiGbl_DtsDecode [Resource->FixedDma.Width]);
173228110Sjkim    }
174228110Sjkim    else
175228110Sjkim    {
176228110Sjkim        AcpiOsPrintf ("%X /* INVALID DMA WIDTH */, ", Resource->FixedDma.Width);
177228110Sjkim    }
178228110Sjkim
179228110Sjkim    /* Insert a descriptor name */
180228110Sjkim
181228110Sjkim    AcpiDmDescriptorName ();
182228110Sjkim    AcpiOsPrintf (")\n");
183228110Sjkim}
184228110Sjkim
185228110Sjkim
186228110Sjkim/*******************************************************************************
187228110Sjkim *
188100966Siwasaki * FUNCTION:    AcpiDmIoDescriptor
189100966Siwasaki *
190281075Sdim * PARAMETERS:  Info                - Extra resource info
191281075Sdim *              Resource            - Pointer to the resource descriptor
192100966Siwasaki *              Length              - Length of the descriptor in bytes
193100966Siwasaki *              Level               - Current source code indentation level
194100966Siwasaki *
195100966Siwasaki * RETURN:      None
196100966Siwasaki *
197100966Siwasaki * DESCRIPTION: Decode an IO descriptor
198100966Siwasaki *
199100966Siwasaki ******************************************************************************/
200100966Siwasaki
201100966Siwasakivoid
202100966SiwasakiAcpiDmIoDescriptor (
203281075Sdim    ACPI_OP_WALK_INFO       *Info,
204151937Sjkim    AML_RESOURCE            *Resource,
205100966Siwasaki    UINT32                  Length,
206100966Siwasaki    UINT32                  Level)
207100966Siwasaki{
208100966Siwasaki
209100966Siwasaki    AcpiDmIndent (Level);
210151937Sjkim    AcpiOsPrintf ("IO (%s,\n",
211243347Sjkim        AcpiGbl_IoDecode [ACPI_GET_1BIT_FLAG (Resource->Io.Flags)]);
212151937Sjkim
213151937Sjkim    AcpiDmIndent (Level + 1);
214167802Sjkim    AcpiDmDumpInteger16 (Resource->Io.Minimum, "Range Minimum");
215151937Sjkim
216151937Sjkim    AcpiDmIndent (Level + 1);
217167802Sjkim    AcpiDmDumpInteger16 (Resource->Io.Maximum, "Range Maximum");
218151937Sjkim
219151937Sjkim    AcpiDmIndent (Level + 1);
220167802Sjkim    AcpiDmDumpInteger8 (Resource->Io.Alignment, "Alignment");
221151937Sjkim
222151937Sjkim    AcpiDmIndent (Level + 1);
223167802Sjkim    AcpiDmDumpInteger8 (Resource->Io.AddressLength, "Length");
224151937Sjkim
225167802Sjkim    /* Insert a descriptor name */
226167802Sjkim
227151937Sjkim    AcpiDmIndent (Level + 1);
228167802Sjkim    AcpiDmDescriptorName ();
229151937Sjkim    AcpiOsPrintf (")\n");
230100966Siwasaki}
231100966Siwasaki
232100966Siwasaki
233100966Siwasaki/*******************************************************************************
234100966Siwasaki *
235100966Siwasaki * FUNCTION:    AcpiDmFixedIoDescriptor
236100966Siwasaki *
237281075Sdim * PARAMETERS:  Info                - Extra resource info
238281075Sdim *              Resource            - Pointer to the resource descriptor
239100966Siwasaki *              Length              - Length of the descriptor in bytes
240100966Siwasaki *              Level               - Current source code indentation level
241100966Siwasaki *
242100966Siwasaki * RETURN:      None
243100966Siwasaki *
244100966Siwasaki * DESCRIPTION: Decode a Fixed IO descriptor
245100966Siwasaki *
246100966Siwasaki ******************************************************************************/
247100966Siwasaki
248100966Siwasakivoid
249100966SiwasakiAcpiDmFixedIoDescriptor (
250281075Sdim    ACPI_OP_WALK_INFO       *Info,
251151937Sjkim    AML_RESOURCE            *Resource,
252100966Siwasaki    UINT32                  Length,
253100966Siwasaki    UINT32                  Level)
254100966Siwasaki{
255100966Siwasaki
256100966Siwasaki    AcpiDmIndent (Level);
257151937Sjkim    AcpiOsPrintf ("FixedIO (\n");
258151937Sjkim
259151937Sjkim    AcpiDmIndent (Level + 1);
260167802Sjkim    AcpiDmDumpInteger16 (Resource->FixedIo.Address, "Address");
261151937Sjkim
262151937Sjkim    AcpiDmIndent (Level + 1);
263167802Sjkim    AcpiDmDumpInteger8 (Resource->FixedIo.AddressLength, "Length");
264151937Sjkim
265167802Sjkim    /* Insert a descriptor name */
266167802Sjkim
267151937Sjkim    AcpiDmIndent (Level + 1);
268167802Sjkim    AcpiDmDescriptorName ();
269151937Sjkim    AcpiOsPrintf (")\n");
270100966Siwasaki}
271100966Siwasaki
272100966Siwasaki
273100966Siwasaki/*******************************************************************************
274100966Siwasaki *
275100966Siwasaki * FUNCTION:    AcpiDmStartDependentDescriptor
276100966Siwasaki *
277281075Sdim * PARAMETERS:  Info                - Extra resource info
278281075Sdim *              Resource            - Pointer to the resource descriptor
279100966Siwasaki *              Length              - Length of the descriptor in bytes
280100966Siwasaki *              Level               - Current source code indentation level
281100966Siwasaki *
282100966Siwasaki * RETURN:      None
283100966Siwasaki *
284100966Siwasaki * DESCRIPTION: Decode a Start Dependendent functions descriptor
285100966Siwasaki *
286100966Siwasaki ******************************************************************************/
287100966Siwasaki
288100966Siwasakivoid
289100966SiwasakiAcpiDmStartDependentDescriptor (
290281075Sdim    ACPI_OP_WALK_INFO       *Info,
291151937Sjkim    AML_RESOURCE            *Resource,
292100966Siwasaki    UINT32                  Length,
293100966Siwasaki    UINT32                  Level)
294100966Siwasaki{
295100966Siwasaki
296100966Siwasaki    AcpiDmIndent (Level);
297100966Siwasaki
298100966Siwasaki    if (Length & 1)
299100966Siwasaki    {
300100966Siwasaki        AcpiOsPrintf ("StartDependentFn (0x%2.2X, 0x%2.2X)\n",
301243347Sjkim            (UINT32) ACPI_GET_2BIT_FLAG (Resource->StartDpf.Flags),
302243347Sjkim            (UINT32) ACPI_EXTRACT_2BIT_FLAG (Resource->StartDpf.Flags, 2));
303100966Siwasaki    }
304100966Siwasaki    else
305100966Siwasaki    {
306100966Siwasaki        AcpiOsPrintf ("StartDependentFnNoPri ()\n");
307100966Siwasaki    }
308100966Siwasaki
309100966Siwasaki    AcpiDmIndent (Level);
310100966Siwasaki    AcpiOsPrintf ("{\n");
311100966Siwasaki}
312100966Siwasaki
313100966Siwasaki
314100966Siwasaki/*******************************************************************************
315100966Siwasaki *
316100966Siwasaki * FUNCTION:    AcpiDmEndDependentDescriptor
317100966Siwasaki *
318281075Sdim * PARAMETERS:  Info                - Extra resource info
319281075Sdim *              Resource            - Pointer to the resource descriptor
320100966Siwasaki *              Length              - Length of the descriptor in bytes
321100966Siwasaki *              Level               - Current source code indentation level
322100966Siwasaki *
323100966Siwasaki * RETURN:      None
324100966Siwasaki *
325100966Siwasaki * DESCRIPTION: Decode an End Dependent functions descriptor
326100966Siwasaki *
327100966Siwasaki ******************************************************************************/
328100966Siwasaki
329100966Siwasakivoid
330100966SiwasakiAcpiDmEndDependentDescriptor (
331281075Sdim    ACPI_OP_WALK_INFO       *Info,
332151937Sjkim    AML_RESOURCE            *Resource,
333100966Siwasaki    UINT32                  Length,
334100966Siwasaki    UINT32                  Level)
335100966Siwasaki{
336100966Siwasaki
337100966Siwasaki    AcpiDmIndent (Level);
338100966Siwasaki    AcpiOsPrintf ("}\n");
339100966Siwasaki    AcpiDmIndent (Level);
340100966Siwasaki    AcpiOsPrintf ("EndDependentFn ()\n");
341100966Siwasaki}
342100966Siwasaki
343100966Siwasaki
344100966Siwasaki/*******************************************************************************
345100966Siwasaki *
346100966Siwasaki * FUNCTION:    AcpiDmVendorSmallDescriptor
347100966Siwasaki *
348281075Sdim * PARAMETERS:  Info                - Extra resource info
349281075Sdim *              Resource            - Pointer to the resource descriptor
350100966Siwasaki *              Length              - Length of the descriptor in bytes
351100966Siwasaki *              Level               - Current source code indentation level
352100966Siwasaki *
353100966Siwasaki * RETURN:      None
354100966Siwasaki *
355100966Siwasaki * DESCRIPTION: Decode a Vendor Small Descriptor
356100966Siwasaki *
357100966Siwasaki ******************************************************************************/
358100966Siwasaki
359100966Siwasakivoid
360100966SiwasakiAcpiDmVendorSmallDescriptor (
361281075Sdim    ACPI_OP_WALK_INFO       *Info,
362151937Sjkim    AML_RESOURCE            *Resource,
363100966Siwasaki    UINT32                  Length,
364100966Siwasaki    UINT32                  Level)
365100966Siwasaki{
366100966Siwasaki
367167802Sjkim    AcpiDmVendorCommon ("Short",
368167802Sjkim        ACPI_ADD_PTR (UINT8, Resource, sizeof (AML_RESOURCE_SMALL_HEADER)),
369151937Sjkim        Length, Level);
370100966Siwasaki}
371100966Siwasaki
372100966Siwasaki#endif
373