dmresrcs.c revision 281075
1/*******************************************************************************
2 *
3 * Module Name: dmresrcs.c - "Small" Resource Descriptor disassembly
4 *
5 ******************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2015, Intel Corp.
9 * All rights reserved.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 *    notice, this list of conditions, and the following disclaimer,
16 *    without modification.
17 * 2. Redistributions in binary form must reproduce at minimum a disclaimer
18 *    substantially similar to the "NO WARRANTY" disclaimer below
19 *    ("Disclaimer") and any redistribution must be conditioned upon
20 *    including a substantially similar Disclaimer requirement for further
21 *    binary redistribution.
22 * 3. Neither the names of the above-listed copyright holders nor the names
23 *    of any contributors may be used to endorse or promote products derived
24 *    from this software without specific prior written permission.
25 *
26 * Alternatively, this software may be distributed under the terms of the
27 * GNU General Public License ("GPL") version 2 as published by the Free
28 * Software Foundation.
29 *
30 * NO WARRANTY
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
35 * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
36 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
37 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
40 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41 * POSSIBILITY OF SUCH DAMAGES.
42 */
43
44#include <contrib/dev/acpica/include/acpi.h>
45#include <contrib/dev/acpica/include/accommon.h>
46#include <contrib/dev/acpica/include/acdisasm.h>
47
48
49#ifdef ACPI_DISASSEMBLER
50
51#define _COMPONENT          ACPI_CA_DEBUGGER
52        ACPI_MODULE_NAME    ("dbresrcs")
53
54
55/*******************************************************************************
56 *
57 * FUNCTION:    AcpiDmIrqDescriptor
58 *
59 * PARAMETERS:  Info                - Extra resource info
60 *              Resource            - Pointer to the resource descriptor
61 *              Length              - Length of the descriptor in bytes
62 *              Level               - Current source code indentation level
63 *
64 * RETURN:      None
65 *
66 * DESCRIPTION: Decode a IRQ descriptor, either Irq() or IrqNoFlags()
67 *
68 ******************************************************************************/
69
70void
71AcpiDmIrqDescriptor (
72    ACPI_OP_WALK_INFO       *Info,
73    AML_RESOURCE            *Resource,
74    UINT32                  Length,
75    UINT32                  Level)
76{
77
78    AcpiDmIndent (Level);
79    AcpiOsPrintf ("%s (",
80        AcpiGbl_IrqDecode [ACPI_GET_1BIT_FLAG (Length)]);
81
82    /* Decode flags byte if present */
83
84    if (Length & 1)
85    {
86        AcpiOsPrintf ("%s, %s, %s, ",
87            AcpiGbl_HeDecode [ACPI_GET_1BIT_FLAG (Resource->Irq.Flags)],
88            AcpiGbl_LlDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->Irq.Flags, 3)],
89            AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Irq.Flags, 4)]);
90    }
91
92    /* Insert a descriptor name */
93
94    AcpiDmDescriptorName ();
95    AcpiOsPrintf (")\n");
96
97    AcpiDmIndent (Level + 1);
98    AcpiDmBitList (Resource->Irq.IrqMask);
99}
100
101
102/*******************************************************************************
103 *
104 * FUNCTION:    AcpiDmDmaDescriptor
105 *
106 * PARAMETERS:  Info                - Extra resource info
107 *              Resource            - Pointer to the resource descriptor
108 *              Length              - Length of the descriptor in bytes
109 *              Level               - Current source code indentation level
110 *
111 * RETURN:      None
112 *
113 * DESCRIPTION: Decode a DMA descriptor
114 *
115 ******************************************************************************/
116
117void
118AcpiDmDmaDescriptor (
119    ACPI_OP_WALK_INFO       *Info,
120    AML_RESOURCE            *Resource,
121    UINT32                  Length,
122    UINT32                  Level)
123{
124
125    AcpiDmIndent (Level);
126    AcpiOsPrintf ("DMA (%s, %s, %s, ",
127        AcpiGbl_TypDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Dma.Flags, 5)],
128        AcpiGbl_BmDecode  [ACPI_EXTRACT_1BIT_FLAG (Resource->Dma.Flags, 2)],
129        AcpiGbl_SizDecode [ACPI_GET_2BIT_FLAG (Resource->Dma.Flags)]);
130
131    /* Insert a descriptor name */
132
133    AcpiDmDescriptorName ();
134    AcpiOsPrintf (")\n");
135
136    AcpiDmIndent (Level + 1);
137    AcpiDmBitList (Resource->Dma.DmaChannelMask);
138}
139
140
141/*******************************************************************************
142 *
143 * FUNCTION:    AcpiDmFixedDmaDescriptor
144 *
145 * PARAMETERS:  Info                - Extra resource info
146 *              Resource            - Pointer to the resource descriptor
147 *              Length              - Length of the descriptor in bytes
148 *              Level               - Current source code indentation level
149 *
150 * RETURN:      None
151 *
152 * DESCRIPTION: Decode a FixedDMA descriptor
153 *
154 ******************************************************************************/
155
156void
157AcpiDmFixedDmaDescriptor (
158    ACPI_OP_WALK_INFO       *Info,
159    AML_RESOURCE            *Resource,
160    UINT32                  Length,
161    UINT32                  Level)
162{
163
164    AcpiDmIndent (Level);
165    AcpiOsPrintf ("FixedDMA (0x%4.4X, 0x%4.4X, ",
166        Resource->FixedDma.RequestLines,
167        Resource->FixedDma.Channels);
168
169    if (Resource->FixedDma.Width <= 5)
170    {
171        AcpiOsPrintf ("%s, ",
172            AcpiGbl_DtsDecode [Resource->FixedDma.Width]);
173    }
174    else
175    {
176        AcpiOsPrintf ("%X /* INVALID DMA WIDTH */, ", Resource->FixedDma.Width);
177    }
178
179    /* Insert a descriptor name */
180
181    AcpiDmDescriptorName ();
182    AcpiOsPrintf (")\n");
183}
184
185
186/*******************************************************************************
187 *
188 * FUNCTION:    AcpiDmIoDescriptor
189 *
190 * PARAMETERS:  Info                - Extra resource info
191 *              Resource            - Pointer to the resource descriptor
192 *              Length              - Length of the descriptor in bytes
193 *              Level               - Current source code indentation level
194 *
195 * RETURN:      None
196 *
197 * DESCRIPTION: Decode an IO descriptor
198 *
199 ******************************************************************************/
200
201void
202AcpiDmIoDescriptor (
203    ACPI_OP_WALK_INFO       *Info,
204    AML_RESOURCE            *Resource,
205    UINT32                  Length,
206    UINT32                  Level)
207{
208
209    AcpiDmIndent (Level);
210    AcpiOsPrintf ("IO (%s,\n",
211        AcpiGbl_IoDecode [ACPI_GET_1BIT_FLAG (Resource->Io.Flags)]);
212
213    AcpiDmIndent (Level + 1);
214    AcpiDmDumpInteger16 (Resource->Io.Minimum, "Range Minimum");
215
216    AcpiDmIndent (Level + 1);
217    AcpiDmDumpInteger16 (Resource->Io.Maximum, "Range Maximum");
218
219    AcpiDmIndent (Level + 1);
220    AcpiDmDumpInteger8 (Resource->Io.Alignment, "Alignment");
221
222    AcpiDmIndent (Level + 1);
223    AcpiDmDumpInteger8 (Resource->Io.AddressLength, "Length");
224
225    /* Insert a descriptor name */
226
227    AcpiDmIndent (Level + 1);
228    AcpiDmDescriptorName ();
229    AcpiOsPrintf (")\n");
230}
231
232
233/*******************************************************************************
234 *
235 * FUNCTION:    AcpiDmFixedIoDescriptor
236 *
237 * PARAMETERS:  Info                - Extra resource info
238 *              Resource            - Pointer to the resource descriptor
239 *              Length              - Length of the descriptor in bytes
240 *              Level               - Current source code indentation level
241 *
242 * RETURN:      None
243 *
244 * DESCRIPTION: Decode a Fixed IO descriptor
245 *
246 ******************************************************************************/
247
248void
249AcpiDmFixedIoDescriptor (
250    ACPI_OP_WALK_INFO       *Info,
251    AML_RESOURCE            *Resource,
252    UINT32                  Length,
253    UINT32                  Level)
254{
255
256    AcpiDmIndent (Level);
257    AcpiOsPrintf ("FixedIO (\n");
258
259    AcpiDmIndent (Level + 1);
260    AcpiDmDumpInteger16 (Resource->FixedIo.Address, "Address");
261
262    AcpiDmIndent (Level + 1);
263    AcpiDmDumpInteger8 (Resource->FixedIo.AddressLength, "Length");
264
265    /* Insert a descriptor name */
266
267    AcpiDmIndent (Level + 1);
268    AcpiDmDescriptorName ();
269    AcpiOsPrintf (")\n");
270}
271
272
273/*******************************************************************************
274 *
275 * FUNCTION:    AcpiDmStartDependentDescriptor
276 *
277 * PARAMETERS:  Info                - Extra resource info
278 *              Resource            - Pointer to the resource descriptor
279 *              Length              - Length of the descriptor in bytes
280 *              Level               - Current source code indentation level
281 *
282 * RETURN:      None
283 *
284 * DESCRIPTION: Decode a Start Dependendent functions descriptor
285 *
286 ******************************************************************************/
287
288void
289AcpiDmStartDependentDescriptor (
290    ACPI_OP_WALK_INFO       *Info,
291    AML_RESOURCE            *Resource,
292    UINT32                  Length,
293    UINT32                  Level)
294{
295
296    AcpiDmIndent (Level);
297
298    if (Length & 1)
299    {
300        AcpiOsPrintf ("StartDependentFn (0x%2.2X, 0x%2.2X)\n",
301            (UINT32) ACPI_GET_2BIT_FLAG (Resource->StartDpf.Flags),
302            (UINT32) ACPI_EXTRACT_2BIT_FLAG (Resource->StartDpf.Flags, 2));
303    }
304    else
305    {
306        AcpiOsPrintf ("StartDependentFnNoPri ()\n");
307    }
308
309    AcpiDmIndent (Level);
310    AcpiOsPrintf ("{\n");
311}
312
313
314/*******************************************************************************
315 *
316 * FUNCTION:    AcpiDmEndDependentDescriptor
317 *
318 * PARAMETERS:  Info                - Extra resource info
319 *              Resource            - Pointer to the resource descriptor
320 *              Length              - Length of the descriptor in bytes
321 *              Level               - Current source code indentation level
322 *
323 * RETURN:      None
324 *
325 * DESCRIPTION: Decode an End Dependent functions descriptor
326 *
327 ******************************************************************************/
328
329void
330AcpiDmEndDependentDescriptor (
331    ACPI_OP_WALK_INFO       *Info,
332    AML_RESOURCE            *Resource,
333    UINT32                  Length,
334    UINT32                  Level)
335{
336
337    AcpiDmIndent (Level);
338    AcpiOsPrintf ("}\n");
339    AcpiDmIndent (Level);
340    AcpiOsPrintf ("EndDependentFn ()\n");
341}
342
343
344/*******************************************************************************
345 *
346 * FUNCTION:    AcpiDmVendorSmallDescriptor
347 *
348 * PARAMETERS:  Info                - Extra resource info
349 *              Resource            - Pointer to the resource descriptor
350 *              Length              - Length of the descriptor in bytes
351 *              Level               - Current source code indentation level
352 *
353 * RETURN:      None
354 *
355 * DESCRIPTION: Decode a Vendor Small Descriptor
356 *
357 ******************************************************************************/
358
359void
360AcpiDmVendorSmallDescriptor (
361    ACPI_OP_WALK_INFO       *Info,
362    AML_RESOURCE            *Resource,
363    UINT32                  Length,
364    UINT32                  Level)
365{
366
367    AcpiDmVendorCommon ("Short",
368        ACPI_ADD_PTR (UINT8, Resource, sizeof (AML_RESOURCE_SMALL_HEADER)),
369        Length, Level);
370}
371
372#endif
373