1100966Siwasaki/*******************************************************************************
2100966Siwasaki *
3100966Siwasaki * Module Name: dmresrcs.c - "Small" 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    ("dbresrcs")
51100966Siwasaki
52100966Siwasaki
53100966Siwasaki/*******************************************************************************
54100966Siwasaki *
55100966Siwasaki * FUNCTION:    AcpiDmIrqDescriptor
56100966Siwasaki *
57281075Sdim * PARAMETERS:  Info                - Extra resource info
58281075Sdim *              Resource            - Pointer to the resource descriptor
59100966Siwasaki *              Length              - Length of the descriptor in bytes
60100966Siwasaki *              Level               - Current source code indentation level
61100966Siwasaki *
62100966Siwasaki * RETURN:      None
63100966Siwasaki *
64151937Sjkim * DESCRIPTION: Decode a IRQ descriptor, either Irq() or IrqNoFlags()
65100966Siwasaki *
66100966Siwasaki ******************************************************************************/
67100966Siwasaki
68100966Siwasakivoid
69100966SiwasakiAcpiDmIrqDescriptor (
70281075Sdim    ACPI_OP_WALK_INFO       *Info,
71151937Sjkim    AML_RESOURCE            *Resource,
72100966Siwasaki    UINT32                  Length,
73100966Siwasaki    UINT32                  Level)
74100966Siwasaki{
75100966Siwasaki
76100966Siwasaki    AcpiDmIndent (Level);
77100966Siwasaki    AcpiOsPrintf ("%s (",
78243347Sjkim        AcpiGbl_IrqDecode [ACPI_GET_1BIT_FLAG (Length)]);
79100966Siwasaki
80151937Sjkim    /* Decode flags byte if present */
81151937Sjkim
82100966Siwasaki    if (Length & 1)
83100966Siwasaki    {
84167802Sjkim        AcpiOsPrintf ("%s, %s, %s, ",
85243347Sjkim            AcpiGbl_HeDecode [ACPI_GET_1BIT_FLAG (Resource->Irq.Flags)],
86243347Sjkim            AcpiGbl_LlDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->Irq.Flags, 3)],
87243347Sjkim            AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Irq.Flags, 4)]);
88100966Siwasaki    }
89167802Sjkim
90167802Sjkim    /* Insert a descriptor name */
91167802Sjkim
92167802Sjkim    AcpiDmDescriptorName ();
93151937Sjkim    AcpiOsPrintf (")\n");
94100966Siwasaki
95151937Sjkim    AcpiDmIndent (Level + 1);
96151937Sjkim    AcpiDmBitList (Resource->Irq.IrqMask);
97100966Siwasaki}
98100966Siwasaki
99100966Siwasaki
100100966Siwasaki/*******************************************************************************
101100966Siwasaki *
102100966Siwasaki * FUNCTION:    AcpiDmDmaDescriptor
103100966Siwasaki *
104281075Sdim * PARAMETERS:  Info                - Extra resource info
105281075Sdim *              Resource            - Pointer to the resource descriptor
106100966Siwasaki *              Length              - Length of the descriptor in bytes
107100966Siwasaki *              Level               - Current source code indentation level
108100966Siwasaki *
109100966Siwasaki * RETURN:      None
110100966Siwasaki *
111100966Siwasaki * DESCRIPTION: Decode a DMA descriptor
112100966Siwasaki *
113100966Siwasaki ******************************************************************************/
114100966Siwasaki
115100966Siwasakivoid
116100966SiwasakiAcpiDmDmaDescriptor (
117281075Sdim    ACPI_OP_WALK_INFO       *Info,
118151937Sjkim    AML_RESOURCE            *Resource,
119100966Siwasaki    UINT32                  Length,
120100966Siwasaki    UINT32                  Level)
121100966Siwasaki{
122100966Siwasaki
123100966Siwasaki    AcpiDmIndent (Level);
124167802Sjkim    AcpiOsPrintf ("DMA (%s, %s, %s, ",
125243347Sjkim        AcpiGbl_TypDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Dma.Flags, 5)],
126243347Sjkim        AcpiGbl_BmDecode  [ACPI_EXTRACT_1BIT_FLAG (Resource->Dma.Flags, 2)],
127243347Sjkim        AcpiGbl_SizDecode [ACPI_GET_2BIT_FLAG (Resource->Dma.Flags)]);
128100966Siwasaki
129167802Sjkim    /* Insert a descriptor name */
130167802Sjkim
131167802Sjkim    AcpiDmDescriptorName ();
132167802Sjkim    AcpiOsPrintf (")\n");
133167802Sjkim
134151937Sjkim    AcpiDmIndent (Level + 1);
135151937Sjkim    AcpiDmBitList (Resource->Dma.DmaChannelMask);
136100966Siwasaki}
137100966Siwasaki
138100966Siwasaki
139100966Siwasaki/*******************************************************************************
140100966Siwasaki *
141228110Sjkim * FUNCTION:    AcpiDmFixedDmaDescriptor
142228110Sjkim *
143281075Sdim * PARAMETERS:  Info                - Extra resource info
144281075Sdim *              Resource            - Pointer to the resource descriptor
145228110Sjkim *              Length              - Length of the descriptor in bytes
146228110Sjkim *              Level               - Current source code indentation level
147228110Sjkim *
148228110Sjkim * RETURN:      None
149228110Sjkim *
150228110Sjkim * DESCRIPTION: Decode a FixedDMA descriptor
151228110Sjkim *
152228110Sjkim ******************************************************************************/
153228110Sjkim
154228110Sjkimvoid
155228110SjkimAcpiDmFixedDmaDescriptor (
156281075Sdim    ACPI_OP_WALK_INFO       *Info,
157228110Sjkim    AML_RESOURCE            *Resource,
158228110Sjkim    UINT32                  Length,
159228110Sjkim    UINT32                  Level)
160228110Sjkim{
161228110Sjkim
162228110Sjkim    AcpiDmIndent (Level);
163228110Sjkim    AcpiOsPrintf ("FixedDMA (0x%4.4X, 0x%4.4X, ",
164228110Sjkim        Resource->FixedDma.RequestLines,
165228110Sjkim        Resource->FixedDma.Channels);
166228110Sjkim
167228110Sjkim    if (Resource->FixedDma.Width <= 5)
168228110Sjkim    {
169228110Sjkim        AcpiOsPrintf ("%s, ",
170228110Sjkim            AcpiGbl_DtsDecode [Resource->FixedDma.Width]);
171228110Sjkim    }
172228110Sjkim    else
173228110Sjkim    {
174306536Sjkim        AcpiOsPrintf ("%X /* INVALID DMA WIDTH */, ",
175306536Sjkim            Resource->FixedDma.Width);
176228110Sjkim    }
177228110Sjkim
178228110Sjkim    /* Insert a descriptor name */
179228110Sjkim
180228110Sjkim    AcpiDmDescriptorName ();
181228110Sjkim    AcpiOsPrintf (")\n");
182228110Sjkim}
183228110Sjkim
184228110Sjkim
185228110Sjkim/*******************************************************************************
186228110Sjkim *
187100966Siwasaki * FUNCTION:    AcpiDmIoDescriptor
188100966Siwasaki *
189281075Sdim * PARAMETERS:  Info                - Extra resource info
190281075Sdim *              Resource            - Pointer to the resource descriptor
191100966Siwasaki *              Length              - Length of the descriptor in bytes
192100966Siwasaki *              Level               - Current source code indentation level
193100966Siwasaki *
194100966Siwasaki * RETURN:      None
195100966Siwasaki *
196100966Siwasaki * DESCRIPTION: Decode an IO descriptor
197100966Siwasaki *
198100966Siwasaki ******************************************************************************/
199100966Siwasaki
200100966Siwasakivoid
201100966SiwasakiAcpiDmIoDescriptor (
202281075Sdim    ACPI_OP_WALK_INFO       *Info,
203151937Sjkim    AML_RESOURCE            *Resource,
204100966Siwasaki    UINT32                  Length,
205100966Siwasaki    UINT32                  Level)
206100966Siwasaki{
207100966Siwasaki
208100966Siwasaki    AcpiDmIndent (Level);
209151937Sjkim    AcpiOsPrintf ("IO (%s,\n",
210243347Sjkim        AcpiGbl_IoDecode [ACPI_GET_1BIT_FLAG (Resource->Io.Flags)]);
211151937Sjkim
212151937Sjkim    AcpiDmIndent (Level + 1);
213167802Sjkim    AcpiDmDumpInteger16 (Resource->Io.Minimum, "Range Minimum");
214151937Sjkim
215151937Sjkim    AcpiDmIndent (Level + 1);
216167802Sjkim    AcpiDmDumpInteger16 (Resource->Io.Maximum, "Range Maximum");
217151937Sjkim
218151937Sjkim    AcpiDmIndent (Level + 1);
219167802Sjkim    AcpiDmDumpInteger8 (Resource->Io.Alignment, "Alignment");
220151937Sjkim
221151937Sjkim    AcpiDmIndent (Level + 1);
222167802Sjkim    AcpiDmDumpInteger8 (Resource->Io.AddressLength, "Length");
223151937Sjkim
224167802Sjkim    /* Insert a descriptor name */
225167802Sjkim
226151937Sjkim    AcpiDmIndent (Level + 1);
227167802Sjkim    AcpiDmDescriptorName ();
228151937Sjkim    AcpiOsPrintf (")\n");
229100966Siwasaki}
230100966Siwasaki
231100966Siwasaki
232100966Siwasaki/*******************************************************************************
233100966Siwasaki *
234100966Siwasaki * FUNCTION:    AcpiDmFixedIoDescriptor
235100966Siwasaki *
236281075Sdim * PARAMETERS:  Info                - Extra resource info
237281075Sdim *              Resource            - Pointer to the resource descriptor
238100966Siwasaki *              Length              - Length of the descriptor in bytes
239100966Siwasaki *              Level               - Current source code indentation level
240100966Siwasaki *
241100966Siwasaki * RETURN:      None
242100966Siwasaki *
243100966Siwasaki * DESCRIPTION: Decode a Fixed IO descriptor
244100966Siwasaki *
245100966Siwasaki ******************************************************************************/
246100966Siwasaki
247100966Siwasakivoid
248100966SiwasakiAcpiDmFixedIoDescriptor (
249281075Sdim    ACPI_OP_WALK_INFO       *Info,
250151937Sjkim    AML_RESOURCE            *Resource,
251100966Siwasaki    UINT32                  Length,
252100966Siwasaki    UINT32                  Level)
253100966Siwasaki{
254100966Siwasaki
255100966Siwasaki    AcpiDmIndent (Level);
256151937Sjkim    AcpiOsPrintf ("FixedIO (\n");
257151937Sjkim
258151937Sjkim    AcpiDmIndent (Level + 1);
259167802Sjkim    AcpiDmDumpInteger16 (Resource->FixedIo.Address, "Address");
260151937Sjkim
261151937Sjkim    AcpiDmIndent (Level + 1);
262167802Sjkim    AcpiDmDumpInteger8 (Resource->FixedIo.AddressLength, "Length");
263151937Sjkim
264167802Sjkim    /* Insert a descriptor name */
265167802Sjkim
266151937Sjkim    AcpiDmIndent (Level + 1);
267167802Sjkim    AcpiDmDescriptorName ();
268151937Sjkim    AcpiOsPrintf (")\n");
269100966Siwasaki}
270100966Siwasaki
271100966Siwasaki
272100966Siwasaki/*******************************************************************************
273100966Siwasaki *
274100966Siwasaki * FUNCTION:    AcpiDmStartDependentDescriptor
275100966Siwasaki *
276281075Sdim * PARAMETERS:  Info                - Extra resource info
277281075Sdim *              Resource            - Pointer to the resource descriptor
278100966Siwasaki *              Length              - Length of the descriptor in bytes
279100966Siwasaki *              Level               - Current source code indentation level
280100966Siwasaki *
281100966Siwasaki * RETURN:      None
282100966Siwasaki *
283100966Siwasaki * DESCRIPTION: Decode a Start Dependendent functions descriptor
284100966Siwasaki *
285100966Siwasaki ******************************************************************************/
286100966Siwasaki
287100966Siwasakivoid
288100966SiwasakiAcpiDmStartDependentDescriptor (
289281075Sdim    ACPI_OP_WALK_INFO       *Info,
290151937Sjkim    AML_RESOURCE            *Resource,
291100966Siwasaki    UINT32                  Length,
292100966Siwasaki    UINT32                  Level)
293100966Siwasaki{
294100966Siwasaki
295100966Siwasaki    AcpiDmIndent (Level);
296100966Siwasaki
297100966Siwasaki    if (Length & 1)
298100966Siwasaki    {
299100966Siwasaki        AcpiOsPrintf ("StartDependentFn (0x%2.2X, 0x%2.2X)\n",
300243347Sjkim            (UINT32) ACPI_GET_2BIT_FLAG (Resource->StartDpf.Flags),
301243347Sjkim            (UINT32) ACPI_EXTRACT_2BIT_FLAG (Resource->StartDpf.Flags, 2));
302100966Siwasaki    }
303100966Siwasaki    else
304100966Siwasaki    {
305100966Siwasaki        AcpiOsPrintf ("StartDependentFnNoPri ()\n");
306100966Siwasaki    }
307100966Siwasaki
308100966Siwasaki    AcpiDmIndent (Level);
309100966Siwasaki    AcpiOsPrintf ("{\n");
310100966Siwasaki}
311100966Siwasaki
312100966Siwasaki
313100966Siwasaki/*******************************************************************************
314100966Siwasaki *
315100966Siwasaki * FUNCTION:    AcpiDmEndDependentDescriptor
316100966Siwasaki *
317281075Sdim * PARAMETERS:  Info                - Extra resource info
318281075Sdim *              Resource            - Pointer to the resource descriptor
319100966Siwasaki *              Length              - Length of the descriptor in bytes
320100966Siwasaki *              Level               - Current source code indentation level
321100966Siwasaki *
322100966Siwasaki * RETURN:      None
323100966Siwasaki *
324100966Siwasaki * DESCRIPTION: Decode an End Dependent functions descriptor
325100966Siwasaki *
326100966Siwasaki ******************************************************************************/
327100966Siwasaki
328100966Siwasakivoid
329100966SiwasakiAcpiDmEndDependentDescriptor (
330281075Sdim    ACPI_OP_WALK_INFO       *Info,
331151937Sjkim    AML_RESOURCE            *Resource,
332100966Siwasaki    UINT32                  Length,
333100966Siwasaki    UINT32                  Level)
334100966Siwasaki{
335100966Siwasaki
336100966Siwasaki    AcpiDmIndent (Level);
337100966Siwasaki    AcpiOsPrintf ("}\n");
338100966Siwasaki    AcpiDmIndent (Level);
339100966Siwasaki    AcpiOsPrintf ("EndDependentFn ()\n");
340100966Siwasaki}
341100966Siwasaki
342100966Siwasaki
343100966Siwasaki/*******************************************************************************
344100966Siwasaki *
345100966Siwasaki * FUNCTION:    AcpiDmVendorSmallDescriptor
346100966Siwasaki *
347281075Sdim * PARAMETERS:  Info                - Extra resource info
348281075Sdim *              Resource            - Pointer to the resource descriptor
349100966Siwasaki *              Length              - Length of the descriptor in bytes
350100966Siwasaki *              Level               - Current source code indentation level
351100966Siwasaki *
352100966Siwasaki * RETURN:      None
353100966Siwasaki *
354100966Siwasaki * DESCRIPTION: Decode a Vendor Small Descriptor
355100966Siwasaki *
356100966Siwasaki ******************************************************************************/
357100966Siwasaki
358100966Siwasakivoid
359100966SiwasakiAcpiDmVendorSmallDescriptor (
360281075Sdim    ACPI_OP_WALK_INFO       *Info,
361151937Sjkim    AML_RESOURCE            *Resource,
362100966Siwasaki    UINT32                  Length,
363100966Siwasaki    UINT32                  Level)
364100966Siwasaki{
365100966Siwasaki
366167802Sjkim    AcpiDmVendorCommon ("Short",
367167802Sjkim        ACPI_ADD_PTR (UINT8, Resource, sizeof (AML_RESOURCE_SMALL_HEADER)),
368151937Sjkim        Length, Level);
369100966Siwasaki}
370