xref: /freebsd/sys/contrib/dev/acpica/components/disassembler/dmresrcs.c (revision 2f02600abfddfc4e9f20dd384a2e729b451e16bd)
1 /*******************************************************************************
2  *
3  * Module Name: dmresrcs.c - "Small" Resource Descriptor disassembly
4  *
5  ******************************************************************************/
6 
7 /*
8  * Copyright (C) 2000 - 2013, 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 
70 void
71 AcpiDmIrqDescriptor (
72     AML_RESOURCE            *Resource,
73     UINT32                  Length,
74     UINT32                  Level)
75 {
76 
77     AcpiDmIndent (Level);
78     AcpiOsPrintf ("%s (",
79         AcpiGbl_IrqDecode [ACPI_GET_1BIT_FLAG (Length)]);
80 
81     /* Decode flags byte if present */
82 
83     if (Length & 1)
84     {
85         AcpiOsPrintf ("%s, %s, %s, ",
86             AcpiGbl_HeDecode [ACPI_GET_1BIT_FLAG (Resource->Irq.Flags)],
87             AcpiGbl_LlDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->Irq.Flags, 3)],
88             AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Irq.Flags, 4)]);
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 
115 void
116 AcpiDmDmaDescriptor (
117     AML_RESOURCE            *Resource,
118     UINT32                  Length,
119     UINT32                  Level)
120 {
121 
122     AcpiDmIndent (Level);
123     AcpiOsPrintf ("DMA (%s, %s, %s, ",
124         AcpiGbl_TypDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Dma.Flags, 5)],
125         AcpiGbl_BmDecode  [ACPI_EXTRACT_1BIT_FLAG (Resource->Dma.Flags, 2)],
126         AcpiGbl_SizDecode [ACPI_GET_2BIT_FLAG (Resource->Dma.Flags)]);
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 
152 void
153 AcpiDmFixedDmaDescriptor (
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 
195 void
196 AcpiDmIoDescriptor (
197     AML_RESOURCE            *Resource,
198     UINT32                  Length,
199     UINT32                  Level)
200 {
201 
202     AcpiDmIndent (Level);
203     AcpiOsPrintf ("IO (%s,\n",
204         AcpiGbl_IoDecode [ACPI_GET_1BIT_FLAG (Resource->Io.Flags)]);
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 
240 void
241 AcpiDmFixedIoDescriptor (
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 
278 void
279 AcpiDmStartDependentDescriptor (
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) ACPI_GET_2BIT_FLAG (Resource->StartDpf.Flags),
291             (UINT32) ACPI_EXTRACT_2BIT_FLAG (Resource->StartDpf.Flags, 2));
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 
317 void
318 AcpiDmEndDependentDescriptor (
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 
345 void
346 AcpiDmVendorSmallDescriptor (
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