xref: /freebsd/sys/contrib/dev/acpica/components/disassembler/dmresrcs.c (revision fcb560670601b2a4d87bb31d7531c8dcc37ee71b)
1 /*******************************************************************************
2  *
3  * Module Name: dmresrcs.c - "Small" Resource Descriptor disassembly
4  *
5  ******************************************************************************/
6 
7 /*
8  * Copyright (C) 2000 - 2014, 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 
70 void
71 AcpiDmIrqDescriptor (
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 
117 void
118 AcpiDmDmaDescriptor (
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 
156 void
157 AcpiDmFixedDmaDescriptor (
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 
201 void
202 AcpiDmIoDescriptor (
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 
248 void
249 AcpiDmFixedIoDescriptor (
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 
288 void
289 AcpiDmStartDependentDescriptor (
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 
329 void
330 AcpiDmEndDependentDescriptor (
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 
359 void
360 AcpiDmVendorSmallDescriptor (
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