dmresrcs.c revision 1.1.1.4 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 "acpi.h"
45 #include "accommon.h"
46 #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