xref: /freebsd/sys/contrib/dev/acpica/components/disassembler/dmresrcs.c (revision 076ad2f836d5f49dc1375f1677335a48fe0d4b82)
1 /*******************************************************************************
2  *
3  * Module Name: dmresrcs.c - "Small" Resource Descriptor disassembly
4  *
5  ******************************************************************************/
6 
7 /*
8  * Copyright (C) 2000 - 2017, 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 #define _COMPONENT          ACPI_CA_DEBUGGER
50         ACPI_MODULE_NAME    ("dbresrcs")
51 
52 
53 /*******************************************************************************
54  *
55  * FUNCTION:    AcpiDmIrqDescriptor
56  *
57  * PARAMETERS:  Info                - Extra resource info
58  *              Resource            - Pointer to the resource descriptor
59  *              Length              - Length of the descriptor in bytes
60  *              Level               - Current source code indentation level
61  *
62  * RETURN:      None
63  *
64  * DESCRIPTION: Decode a IRQ descriptor, either Irq() or IrqNoFlags()
65  *
66  ******************************************************************************/
67 
68 void
69 AcpiDmIrqDescriptor (
70     ACPI_OP_WALK_INFO       *Info,
71     AML_RESOURCE            *Resource,
72     UINT32                  Length,
73     UINT32                  Level)
74 {
75 
76     AcpiDmIndent (Level);
77     AcpiOsPrintf ("%s (",
78         AcpiGbl_IrqDecode [ACPI_GET_1BIT_FLAG (Length)]);
79 
80     /* Decode flags byte if present */
81 
82     if (Length & 1)
83     {
84         AcpiOsPrintf ("%s, %s, %s, ",
85             AcpiGbl_HeDecode [ACPI_GET_1BIT_FLAG (Resource->Irq.Flags)],
86             AcpiGbl_LlDecode [ACPI_EXTRACT_1BIT_FLAG (Resource->Irq.Flags, 3)],
87             AcpiGbl_ShrDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Irq.Flags, 4)]);
88     }
89 
90     /* Insert a descriptor name */
91 
92     AcpiDmDescriptorName ();
93     AcpiOsPrintf (")\n");
94 
95     AcpiDmIndent (Level + 1);
96     AcpiDmBitList (Resource->Irq.IrqMask);
97 }
98 
99 
100 /*******************************************************************************
101  *
102  * FUNCTION:    AcpiDmDmaDescriptor
103  *
104  * PARAMETERS:  Info                - Extra resource info
105  *              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     ACPI_OP_WALK_INFO       *Info,
118     AML_RESOURCE            *Resource,
119     UINT32                  Length,
120     UINT32                  Level)
121 {
122 
123     AcpiDmIndent (Level);
124     AcpiOsPrintf ("DMA (%s, %s, %s, ",
125         AcpiGbl_TypDecode [ACPI_EXTRACT_2BIT_FLAG (Resource->Dma.Flags, 5)],
126         AcpiGbl_BmDecode  [ACPI_EXTRACT_1BIT_FLAG (Resource->Dma.Flags, 2)],
127         AcpiGbl_SizDecode [ACPI_GET_2BIT_FLAG (Resource->Dma.Flags)]);
128 
129     /* Insert a descriptor name */
130 
131     AcpiDmDescriptorName ();
132     AcpiOsPrintf (")\n");
133 
134     AcpiDmIndent (Level + 1);
135     AcpiDmBitList (Resource->Dma.DmaChannelMask);
136 }
137 
138 
139 /*******************************************************************************
140  *
141  * FUNCTION:    AcpiDmFixedDmaDescriptor
142  *
143  * PARAMETERS:  Info                - Extra resource info
144  *              Resource            - Pointer to the resource descriptor
145  *              Length              - Length of the descriptor in bytes
146  *              Level               - Current source code indentation level
147  *
148  * RETURN:      None
149  *
150  * DESCRIPTION: Decode a FixedDMA descriptor
151  *
152  ******************************************************************************/
153 
154 void
155 AcpiDmFixedDmaDescriptor (
156     ACPI_OP_WALK_INFO       *Info,
157     AML_RESOURCE            *Resource,
158     UINT32                  Length,
159     UINT32                  Level)
160 {
161 
162     AcpiDmIndent (Level);
163     AcpiOsPrintf ("FixedDMA (0x%4.4X, 0x%4.4X, ",
164         Resource->FixedDma.RequestLines,
165         Resource->FixedDma.Channels);
166 
167     if (Resource->FixedDma.Width <= 5)
168     {
169         AcpiOsPrintf ("%s, ",
170             AcpiGbl_DtsDecode [Resource->FixedDma.Width]);
171     }
172     else
173     {
174         AcpiOsPrintf ("%X /* INVALID DMA WIDTH */, ",
175             Resource->FixedDma.Width);
176     }
177 
178     /* Insert a descriptor name */
179 
180     AcpiDmDescriptorName ();
181     AcpiOsPrintf (")\n");
182 }
183 
184 
185 /*******************************************************************************
186  *
187  * FUNCTION:    AcpiDmIoDescriptor
188  *
189  * PARAMETERS:  Info                - Extra resource info
190  *              Resource            - Pointer to the resource descriptor
191  *              Length              - Length of the descriptor in bytes
192  *              Level               - Current source code indentation level
193  *
194  * RETURN:      None
195  *
196  * DESCRIPTION: Decode an IO descriptor
197  *
198  ******************************************************************************/
199 
200 void
201 AcpiDmIoDescriptor (
202     ACPI_OP_WALK_INFO       *Info,
203     AML_RESOURCE            *Resource,
204     UINT32                  Length,
205     UINT32                  Level)
206 {
207 
208     AcpiDmIndent (Level);
209     AcpiOsPrintf ("IO (%s,\n",
210         AcpiGbl_IoDecode [ACPI_GET_1BIT_FLAG (Resource->Io.Flags)]);
211 
212     AcpiDmIndent (Level + 1);
213     AcpiDmDumpInteger16 (Resource->Io.Minimum, "Range Minimum");
214 
215     AcpiDmIndent (Level + 1);
216     AcpiDmDumpInteger16 (Resource->Io.Maximum, "Range Maximum");
217 
218     AcpiDmIndent (Level + 1);
219     AcpiDmDumpInteger8 (Resource->Io.Alignment, "Alignment");
220 
221     AcpiDmIndent (Level + 1);
222     AcpiDmDumpInteger8 (Resource->Io.AddressLength, "Length");
223 
224     /* Insert a descriptor name */
225 
226     AcpiDmIndent (Level + 1);
227     AcpiDmDescriptorName ();
228     AcpiOsPrintf (")\n");
229 }
230 
231 
232 /*******************************************************************************
233  *
234  * FUNCTION:    AcpiDmFixedIoDescriptor
235  *
236  * PARAMETERS:  Info                - Extra resource info
237  *              Resource            - Pointer to the resource descriptor
238  *              Length              - Length of the descriptor in bytes
239  *              Level               - Current source code indentation level
240  *
241  * RETURN:      None
242  *
243  * DESCRIPTION: Decode a Fixed IO descriptor
244  *
245  ******************************************************************************/
246 
247 void
248 AcpiDmFixedIoDescriptor (
249     ACPI_OP_WALK_INFO       *Info,
250     AML_RESOURCE            *Resource,
251     UINT32                  Length,
252     UINT32                  Level)
253 {
254 
255     AcpiDmIndent (Level);
256     AcpiOsPrintf ("FixedIO (\n");
257 
258     AcpiDmIndent (Level + 1);
259     AcpiDmDumpInteger16 (Resource->FixedIo.Address, "Address");
260 
261     AcpiDmIndent (Level + 1);
262     AcpiDmDumpInteger8 (Resource->FixedIo.AddressLength, "Length");
263 
264     /* Insert a descriptor name */
265 
266     AcpiDmIndent (Level + 1);
267     AcpiDmDescriptorName ();
268     AcpiOsPrintf (")\n");
269 }
270 
271 
272 /*******************************************************************************
273  *
274  * FUNCTION:    AcpiDmStartDependentDescriptor
275  *
276  * PARAMETERS:  Info                - Extra resource info
277  *              Resource            - Pointer to the resource descriptor
278  *              Length              - Length of the descriptor in bytes
279  *              Level               - Current source code indentation level
280  *
281  * RETURN:      None
282  *
283  * DESCRIPTION: Decode a Start Dependendent functions descriptor
284  *
285  ******************************************************************************/
286 
287 void
288 AcpiDmStartDependentDescriptor (
289     ACPI_OP_WALK_INFO       *Info,
290     AML_RESOURCE            *Resource,
291     UINT32                  Length,
292     UINT32                  Level)
293 {
294 
295     AcpiDmIndent (Level);
296 
297     if (Length & 1)
298     {
299         AcpiOsPrintf ("StartDependentFn (0x%2.2X, 0x%2.2X)\n",
300             (UINT32) ACPI_GET_2BIT_FLAG (Resource->StartDpf.Flags),
301             (UINT32) ACPI_EXTRACT_2BIT_FLAG (Resource->StartDpf.Flags, 2));
302     }
303     else
304     {
305         AcpiOsPrintf ("StartDependentFnNoPri ()\n");
306     }
307 
308     AcpiDmIndent (Level);
309     AcpiOsPrintf ("{\n");
310 }
311 
312 
313 /*******************************************************************************
314  *
315  * FUNCTION:    AcpiDmEndDependentDescriptor
316  *
317  * PARAMETERS:  Info                - Extra resource info
318  *              Resource            - Pointer to the resource descriptor
319  *              Length              - Length of the descriptor in bytes
320  *              Level               - Current source code indentation level
321  *
322  * RETURN:      None
323  *
324  * DESCRIPTION: Decode an End Dependent functions descriptor
325  *
326  ******************************************************************************/
327 
328 void
329 AcpiDmEndDependentDescriptor (
330     ACPI_OP_WALK_INFO       *Info,
331     AML_RESOURCE            *Resource,
332     UINT32                  Length,
333     UINT32                  Level)
334 {
335 
336     AcpiDmIndent (Level);
337     AcpiOsPrintf ("}\n");
338     AcpiDmIndent (Level);
339     AcpiOsPrintf ("EndDependentFn ()\n");
340 }
341 
342 
343 /*******************************************************************************
344  *
345  * FUNCTION:    AcpiDmVendorSmallDescriptor
346  *
347  * PARAMETERS:  Info                - Extra resource info
348  *              Resource            - Pointer to the resource descriptor
349  *              Length              - Length of the descriptor in bytes
350  *              Level               - Current source code indentation level
351  *
352  * RETURN:      None
353  *
354  * DESCRIPTION: Decode a Vendor Small Descriptor
355  *
356  ******************************************************************************/
357 
358 void
359 AcpiDmVendorSmallDescriptor (
360     ACPI_OP_WALK_INFO       *Info,
361     AML_RESOURCE            *Resource,
362     UINT32                  Length,
363     UINT32                  Level)
364 {
365 
366     AcpiDmVendorCommon ("Short",
367         ACPI_ADD_PTR (UINT8, Resource, sizeof (AML_RESOURCE_SMALL_HEADER)),
368         Length, Level);
369 }
370