dmresrcs.c revision 217365
1/*******************************************************************************
2 *
3 * Module Name: dmresrcs.c - "Small" Resource Descriptor disassembly
4 *
5 ******************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2011, 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:    AcpiDmIoDescriptor
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 an IO descriptor
149 *
150 ******************************************************************************/
151
152void
153AcpiDmIoDescriptor (
154    AML_RESOURCE            *Resource,
155    UINT32                  Length,
156    UINT32                  Level)
157{
158
159    AcpiDmIndent (Level);
160    AcpiOsPrintf ("IO (%s,\n",
161        AcpiGbl_IoDecode [(Resource->Io.Flags & 1)]);
162
163    AcpiDmIndent (Level + 1);
164    AcpiDmDumpInteger16 (Resource->Io.Minimum, "Range Minimum");
165
166    AcpiDmIndent (Level + 1);
167    AcpiDmDumpInteger16 (Resource->Io.Maximum, "Range Maximum");
168
169    AcpiDmIndent (Level + 1);
170    AcpiDmDumpInteger8 (Resource->Io.Alignment, "Alignment");
171
172    AcpiDmIndent (Level + 1);
173    AcpiDmDumpInteger8 (Resource->Io.AddressLength, "Length");
174
175    /* Insert a descriptor name */
176
177    AcpiDmIndent (Level + 1);
178    AcpiDmDescriptorName ();
179    AcpiOsPrintf (")\n");
180}
181
182
183/*******************************************************************************
184 *
185 * FUNCTION:    AcpiDmFixedIoDescriptor
186 *
187 * PARAMETERS:  Resource            - Pointer to the resource descriptor
188 *              Length              - Length of the descriptor in bytes
189 *              Level               - Current source code indentation level
190 *
191 * RETURN:      None
192 *
193 * DESCRIPTION: Decode a Fixed IO descriptor
194 *
195 ******************************************************************************/
196
197void
198AcpiDmFixedIoDescriptor (
199    AML_RESOURCE            *Resource,
200    UINT32                  Length,
201    UINT32                  Level)
202{
203
204    AcpiDmIndent (Level);
205    AcpiOsPrintf ("FixedIO (\n");
206
207    AcpiDmIndent (Level + 1);
208    AcpiDmDumpInteger16 (Resource->FixedIo.Address, "Address");
209
210    AcpiDmIndent (Level + 1);
211    AcpiDmDumpInteger8 (Resource->FixedIo.AddressLength, "Length");
212
213    /* Insert a descriptor name */
214
215    AcpiDmIndent (Level + 1);
216    AcpiDmDescriptorName ();
217    AcpiOsPrintf (")\n");
218}
219
220
221/*******************************************************************************
222 *
223 * FUNCTION:    AcpiDmStartDependentDescriptor
224 *
225 * PARAMETERS:  Resource            - Pointer to the resource descriptor
226 *              Length              - Length of the descriptor in bytes
227 *              Level               - Current source code indentation level
228 *
229 * RETURN:      None
230 *
231 * DESCRIPTION: Decode a Start Dependendent functions descriptor
232 *
233 ******************************************************************************/
234
235void
236AcpiDmStartDependentDescriptor (
237    AML_RESOURCE            *Resource,
238    UINT32                  Length,
239    UINT32                  Level)
240{
241
242    AcpiDmIndent (Level);
243
244    if (Length & 1)
245    {
246        AcpiOsPrintf ("StartDependentFn (0x%2.2X, 0x%2.2X)\n",
247            (UINT32) Resource->StartDpf.Flags & 3,
248            (UINT32) (Resource->StartDpf.Flags >> 2) & 3);
249    }
250    else
251    {
252        AcpiOsPrintf ("StartDependentFnNoPri ()\n");
253    }
254
255    AcpiDmIndent (Level);
256    AcpiOsPrintf ("{\n");
257}
258
259
260/*******************************************************************************
261 *
262 * FUNCTION:    AcpiDmEndDependentDescriptor
263 *
264 * PARAMETERS:  Resource            - Pointer to the resource descriptor
265 *              Length              - Length of the descriptor in bytes
266 *              Level               - Current source code indentation level
267 *
268 * RETURN:      None
269 *
270 * DESCRIPTION: Decode an End Dependent functions descriptor
271 *
272 ******************************************************************************/
273
274void
275AcpiDmEndDependentDescriptor (
276    AML_RESOURCE            *Resource,
277    UINT32                  Length,
278    UINT32                  Level)
279{
280
281    AcpiDmIndent (Level);
282    AcpiOsPrintf ("}\n");
283    AcpiDmIndent (Level);
284    AcpiOsPrintf ("EndDependentFn ()\n");
285}
286
287
288/*******************************************************************************
289 *
290 * FUNCTION:    AcpiDmVendorSmallDescriptor
291 *
292 * PARAMETERS:  Resource            - Pointer to the resource descriptor
293 *              Length              - Length of the descriptor in bytes
294 *              Level               - Current source code indentation level
295 *
296 * RETURN:      None
297 *
298 * DESCRIPTION: Decode a Vendor Small Descriptor
299 *
300 ******************************************************************************/
301
302void
303AcpiDmVendorSmallDescriptor (
304    AML_RESOURCE            *Resource,
305    UINT32                  Length,
306    UINT32                  Level)
307{
308
309    AcpiDmVendorCommon ("Short",
310        ACPI_ADD_PTR (UINT8, Resource, sizeof (AML_RESOURCE_SMALL_HEADER)),
311        Length, Level);
312}
313
314#endif
315
316