dmresrcs.c revision 229989
1/*******************************************************************************
2 *
3 * Module Name: dmresrcs.c - "Small" Resource Descriptor disassembly
4 *
5 ******************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2012, 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
45#include <contrib/dev/acpica/include/acpi.h>
46#include <contrib/dev/acpica/include/accommon.h>
47#include <contrib/dev/acpica/include/acdisasm.h>
48
49
50#ifdef ACPI_DISASSEMBLER
51
52#define _COMPONENT          ACPI_CA_DEBUGGER
53        ACPI_MODULE_NAME    ("dbresrcs")
54
55
56/*******************************************************************************
57 *
58 * FUNCTION:    AcpiDmIrqDescriptor
59 *
60 * PARAMETERS:  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    AML_RESOURCE            *Resource,
73    UINT32                  Length,
74    UINT32                  Level)
75{
76
77    AcpiDmIndent (Level);
78    AcpiOsPrintf ("%s (",
79        AcpiGbl_IrqDecode [Length & 1]);
80
81    /* Decode flags byte if present */
82
83    if (Length & 1)
84    {
85        AcpiOsPrintf ("%s, %s, %s, ",
86            AcpiGbl_HeDecode [Resource->Irq.Flags & 1],
87            AcpiGbl_LlDecode [(Resource->Irq.Flags >> 3) & 1],
88            AcpiGbl_ShrDecode [(Resource->Irq.Flags >> 4) & 1]);
89    }
90
91    /* Insert a descriptor name */
92
93    AcpiDmDescriptorName ();
94    AcpiOsPrintf (")\n");
95
96    AcpiDmIndent (Level + 1);
97    AcpiDmBitList (Resource->Irq.IrqMask);
98}
99
100
101/*******************************************************************************
102 *
103 * FUNCTION:    AcpiDmDmaDescriptor
104 *
105 * PARAMETERS:  Resource            - Pointer to the resource descriptor
106 *              Length              - Length of the descriptor in bytes
107 *              Level               - Current source code indentation level
108 *
109 * RETURN:      None
110 *
111 * DESCRIPTION: Decode a DMA descriptor
112 *
113 ******************************************************************************/
114
115void
116AcpiDmDmaDescriptor (
117    AML_RESOURCE            *Resource,
118    UINT32                  Length,
119    UINT32                  Level)
120{
121
122    AcpiDmIndent (Level);
123    AcpiOsPrintf ("DMA (%s, %s, %s, ",
124        AcpiGbl_TypDecode [(Resource->Dma.Flags >> 5) & 3],
125        AcpiGbl_BmDecode  [(Resource->Dma.Flags >> 2) & 1],
126        AcpiGbl_SizDecode [(Resource->Dma.Flags >> 0) & 3]);
127
128    /* Insert a descriptor name */
129
130    AcpiDmDescriptorName ();
131    AcpiOsPrintf (")\n");
132
133    AcpiDmIndent (Level + 1);
134    AcpiDmBitList (Resource->Dma.DmaChannelMask);
135}
136
137
138/*******************************************************************************
139 *
140 * FUNCTION:    AcpiDmFixedDmaDescriptor
141 *
142 * PARAMETERS:  Resource            - Pointer to the resource descriptor
143 *              Length              - Length of the descriptor in bytes
144 *              Level               - Current source code indentation level
145 *
146 * RETURN:      None
147 *
148 * DESCRIPTION: Decode a FixedDMA descriptor
149 *
150 ******************************************************************************/
151
152void
153AcpiDmFixedDmaDescriptor (
154    AML_RESOURCE            *Resource,
155    UINT32                  Length,
156    UINT32                  Level)
157{
158
159    AcpiDmIndent (Level);
160    AcpiOsPrintf ("FixedDMA (0x%4.4X, 0x%4.4X, ",
161        Resource->FixedDma.RequestLines,
162        Resource->FixedDma.Channels);
163
164    if (Resource->FixedDma.Width <= 5)
165    {
166        AcpiOsPrintf ("%s, ",
167            AcpiGbl_DtsDecode [Resource->FixedDma.Width]);
168    }
169    else
170    {
171        AcpiOsPrintf ("%X /* INVALID DMA WIDTH */, ", Resource->FixedDma.Width);
172    }
173
174    /* Insert a descriptor name */
175
176    AcpiDmDescriptorName ();
177    AcpiOsPrintf (")\n");
178}
179
180
181/*******************************************************************************
182 *
183 * FUNCTION:    AcpiDmIoDescriptor
184 *
185 * PARAMETERS:  Resource            - Pointer to the resource descriptor
186 *              Length              - Length of the descriptor in bytes
187 *              Level               - Current source code indentation level
188 *
189 * RETURN:      None
190 *
191 * DESCRIPTION: Decode an IO descriptor
192 *
193 ******************************************************************************/
194
195void
196AcpiDmIoDescriptor (
197    AML_RESOURCE            *Resource,
198    UINT32                  Length,
199    UINT32                  Level)
200{
201
202    AcpiDmIndent (Level);
203    AcpiOsPrintf ("IO (%s,\n",
204        AcpiGbl_IoDecode [(Resource->Io.Flags & 1)]);
205
206    AcpiDmIndent (Level + 1);
207    AcpiDmDumpInteger16 (Resource->Io.Minimum, "Range Minimum");
208
209    AcpiDmIndent (Level + 1);
210    AcpiDmDumpInteger16 (Resource->Io.Maximum, "Range Maximum");
211
212    AcpiDmIndent (Level + 1);
213    AcpiDmDumpInteger8 (Resource->Io.Alignment, "Alignment");
214
215    AcpiDmIndent (Level + 1);
216    AcpiDmDumpInteger8 (Resource->Io.AddressLength, "Length");
217
218    /* Insert a descriptor name */
219
220    AcpiDmIndent (Level + 1);
221    AcpiDmDescriptorName ();
222    AcpiOsPrintf (")\n");
223}
224
225
226/*******************************************************************************
227 *
228 * FUNCTION:    AcpiDmFixedIoDescriptor
229 *
230 * PARAMETERS:  Resource            - Pointer to the resource descriptor
231 *              Length              - Length of the descriptor in bytes
232 *              Level               - Current source code indentation level
233 *
234 * RETURN:      None
235 *
236 * DESCRIPTION: Decode a Fixed IO descriptor
237 *
238 ******************************************************************************/
239
240void
241AcpiDmFixedIoDescriptor (
242    AML_RESOURCE            *Resource,
243    UINT32                  Length,
244    UINT32                  Level)
245{
246
247    AcpiDmIndent (Level);
248    AcpiOsPrintf ("FixedIO (\n");
249
250    AcpiDmIndent (Level + 1);
251    AcpiDmDumpInteger16 (Resource->FixedIo.Address, "Address");
252
253    AcpiDmIndent (Level + 1);
254    AcpiDmDumpInteger8 (Resource->FixedIo.AddressLength, "Length");
255
256    /* Insert a descriptor name */
257
258    AcpiDmIndent (Level + 1);
259    AcpiDmDescriptorName ();
260    AcpiOsPrintf (")\n");
261}
262
263
264/*******************************************************************************
265 *
266 * FUNCTION:    AcpiDmStartDependentDescriptor
267 *
268 * PARAMETERS:  Resource            - Pointer to the resource descriptor
269 *              Length              - Length of the descriptor in bytes
270 *              Level               - Current source code indentation level
271 *
272 * RETURN:      None
273 *
274 * DESCRIPTION: Decode a Start Dependendent functions descriptor
275 *
276 ******************************************************************************/
277
278void
279AcpiDmStartDependentDescriptor (
280    AML_RESOURCE            *Resource,
281    UINT32                  Length,
282    UINT32                  Level)
283{
284
285    AcpiDmIndent (Level);
286
287    if (Length & 1)
288    {
289        AcpiOsPrintf ("StartDependentFn (0x%2.2X, 0x%2.2X)\n",
290            (UINT32) Resource->StartDpf.Flags & 3,
291            (UINT32) (Resource->StartDpf.Flags >> 2) & 3);
292    }
293    else
294    {
295        AcpiOsPrintf ("StartDependentFnNoPri ()\n");
296    }
297
298    AcpiDmIndent (Level);
299    AcpiOsPrintf ("{\n");
300}
301
302
303/*******************************************************************************
304 *
305 * FUNCTION:    AcpiDmEndDependentDescriptor
306 *
307 * PARAMETERS:  Resource            - Pointer to the resource descriptor
308 *              Length              - Length of the descriptor in bytes
309 *              Level               - Current source code indentation level
310 *
311 * RETURN:      None
312 *
313 * DESCRIPTION: Decode an End Dependent functions descriptor
314 *
315 ******************************************************************************/
316
317void
318AcpiDmEndDependentDescriptor (
319    AML_RESOURCE            *Resource,
320    UINT32                  Length,
321    UINT32                  Level)
322{
323
324    AcpiDmIndent (Level);
325    AcpiOsPrintf ("}\n");
326    AcpiDmIndent (Level);
327    AcpiOsPrintf ("EndDependentFn ()\n");
328}
329
330
331/*******************************************************************************
332 *
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
359