xref: /titanic_52/usr/src/uts/intel/io/acpica/disassembler/dmresrcs.c (revision 587644a8567e6a9533f88401daa59cbd78c4632f)
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 "acpi.h"
46 #include "accommon.h"
47 #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 [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 
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 [(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 
152 void
153 AcpiDmIoDescriptor (
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 
197 void
198 AcpiDmFixedIoDescriptor (
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 
235 void
236 AcpiDmStartDependentDescriptor (
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 
274 void
275 AcpiDmEndDependentDescriptor (
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 
302 void
303 AcpiDmVendorSmallDescriptor (
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