Deleted Added
full compact
dmopcode.c (241973) dmopcode.c (243347)
1/*******************************************************************************
2 *
3 * Module Name: dmopcode - AML disassembler, specific AML opcodes
4 *
5 ******************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2012, 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/acparser.h>
47#include <contrib/dev/acpica/include/amlcode.h>
48#include <contrib/dev/acpica/include/acdisasm.h>
49
50#ifdef ACPI_DISASSEMBLER
51
52#define _COMPONENT ACPI_CA_DEBUGGER
53 ACPI_MODULE_NAME ("dmopcode")
54
55/* Local prototypes */
56
57static void
58AcpiDmMatchKeyword (
59 ACPI_PARSE_OBJECT *Op);
60
61
62/*******************************************************************************
63 *
64 * FUNCTION: AcpiDmPredefinedDescription
65 *
66 * PARAMETERS: Op - Name() parse object
67 *
68 * RETURN: None
69 *
70 * DESCRIPTION: Emit a description comment for a predefined ACPI name.
71 * Used for iASL compiler only.
72 *
73 ******************************************************************************/
74
75void
76AcpiDmPredefinedDescription (
77 ACPI_PARSE_OBJECT *Op)
78{
79#ifdef ACPI_ASL_COMPILER
80 const AH_PREDEFINED_NAME *Info;
81 char *NameString;
82 int LastCharIsDigit;
83 int LastCharsAreHex;
84
85
86 if (!Op)
87 {
88 return;
89 }
90
91 /* Ensure that the comment field is emitted only once */
92
93 if (Op->Common.DisasmFlags & ACPI_PARSEOP_PREDEF_CHECKED)
94 {
95 return;
96 }
97 Op->Common.DisasmFlags |= ACPI_PARSEOP_PREDEF_CHECKED;
98
99 /* Predefined name must start with an underscore */
100
101 NameString = ACPI_CAST_PTR (char, &Op->Named.Name);
102 if (NameString[0] != '_')
103 {
104 return;
105 }
106
107 /*
108 * Check for the special ACPI names:
109 * _ACd, _ALd, _EJd, _Exx, _Lxx, _Qxx, _Wxx, _T_a
110 * (where d=decimal_digit, x=hex_digit, a=anything)
111 *
112 * Convert these to the generic name for table lookup.
113 * Note: NameString is guaranteed to be upper case here.
114 */
115 LastCharIsDigit =
116 (ACPI_IS_DIGIT (NameString[3])); /* d */
117 LastCharsAreHex =
118 (ACPI_IS_XDIGIT (NameString[2]) && /* xx */
119 ACPI_IS_XDIGIT (NameString[3]));
120
121 switch (NameString[1])
122 {
123 case 'A':
124 if ((NameString[2] == 'C') && (LastCharIsDigit))
125 {
126 NameString = "_ACx";
127 }
128 else if ((NameString[2] == 'L') && (LastCharIsDigit))
129 {
130 NameString = "_ALx";
131 }
132 break;
133
134 case 'E':
135 if ((NameString[2] == 'J') && (LastCharIsDigit))
136 {
137 NameString = "_EJx";
138 }
139 else if (LastCharsAreHex)
140 {
141 NameString = "_Exx";
142 }
143 break;
144
145 case 'L':
146 if (LastCharsAreHex)
147 {
148 NameString = "_Lxx";
149 }
150 break;
151
152 case 'Q':
153 if (LastCharsAreHex)
154 {
155 NameString = "_Qxx";
156 }
157 break;
158
159 case 'T':
160 if (NameString[2] == '_')
161 {
162 NameString = "_T_x";
163 }
164 break;
165
166 case 'W':
167 if (LastCharsAreHex)
168 {
169 NameString = "_Wxx";
170 }
171 break;
172
173 default:
174 break;
175 }
176
177 /* Match the name in the info table */
178
179 for (Info = AslPredefinedInfo; Info->Name; Info++)
180 {
181 if (ACPI_COMPARE_NAME (NameString, Info->Name))
182 {
183 AcpiOsPrintf (" // %4.4s: %s",
184 NameString, ACPI_CAST_PTR (char, Info->Description));
185 return;
186 }
187 }
188
189#endif
190 return;
191}
192
193
194/*******************************************************************************
195 *
196 * FUNCTION: AcpiDmFieldPredefinedDescription
197 *
198 * PARAMETERS: Op - Parse object
199 *
200 * RETURN: None
201 *
202 * DESCRIPTION: Emit a description comment for a resource descriptor tag
203 * (which is a predefined ACPI name.) Used for iASL compiler only.
204 *
205 ******************************************************************************/
206
207void
208AcpiDmFieldPredefinedDescription (
209 ACPI_PARSE_OBJECT *Op)
210{
211#ifdef ACPI_ASL_COMPILER
212 ACPI_PARSE_OBJECT *IndexOp;
213 char *Tag;
214 const ACPI_OPCODE_INFO *OpInfo;
215 const AH_PREDEFINED_NAME *Info;
216
217
218 if (!Op)
219 {
220 return;
221 }
222
223 /* Ensure that the comment field is emitted only once */
224
225 if (Op->Common.DisasmFlags & ACPI_PARSEOP_PREDEF_CHECKED)
226 {
227 return;
228 }
229 Op->Common.DisasmFlags |= ACPI_PARSEOP_PREDEF_CHECKED;
230
231 /*
232 * Op must be one of the Create* operators: CreateField, CreateBitField,
233 * CreateByteField, CreateWordField, CreateDwordField, CreateQwordField
234 */
235 OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
236 if (!(OpInfo->Flags & AML_CREATE))
237 {
238 return;
239 }
240
241 /* Second argument is the Index argument */
242
243 IndexOp = Op->Common.Value.Arg;
244 IndexOp = IndexOp->Common.Next;
245
246 /* Index argument must be a namepath */
247
248 if (IndexOp->Common.AmlOpcode != AML_INT_NAMEPATH_OP)
249 {
250 return;
251 }
252
253 /* Major cheat: We previously put the Tag ptr in the Node field */
254
255 Tag = ACPI_CAST_PTR (char, IndexOp->Common.Node);
256 if (!Tag)
257 {
258 return;
259 }
260
261 /* Match the name in the info table */
262
263 for (Info = AslPredefinedInfo; Info->Name; Info++)
264 {
265 if (ACPI_COMPARE_NAME (Tag, Info->Name))
266 {
267 AcpiOsPrintf (" // %4.4s: %s", Tag,
268 ACPI_CAST_PTR (char, Info->Description));
269 return;
270 }
271 }
272
273#endif
274 return;
275}
276
277
278/*******************************************************************************
279 *
280 * FUNCTION: AcpiDmMethodFlags
281 *
282 * PARAMETERS: Op - Method Object to be examined
283 *
284 * RETURN: None
285 *
286 * DESCRIPTION: Decode control method flags
287 *
288 ******************************************************************************/
289
290void
291AcpiDmMethodFlags (
292 ACPI_PARSE_OBJECT *Op)
293{
294 UINT32 Flags;
295 UINT32 Args;
296
297
298 /* The next Op contains the flags */
299
300 Op = AcpiPsGetDepthNext (NULL, Op);
301 Flags = (UINT8) Op->Common.Value.Integer;
302 Args = Flags & 0x07;
303
304 /* Mark the Op as completed */
305
306 Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
307
308 /* 1) Method argument count */
309
310 AcpiOsPrintf (", %u, ", Args);
311
312 /* 2) Serialize rule */
313
314 if (!(Flags & 0x08))
315 {
316 AcpiOsPrintf ("Not");
317 }
318
319 AcpiOsPrintf ("Serialized");
320
321 /* 3) SyncLevel */
322
323 if (Flags & 0xF0)
324 {
325 AcpiOsPrintf (", %u", Flags >> 4);
326 }
327}
328
329
330/*******************************************************************************
331 *
332 * FUNCTION: AcpiDmFieldFlags
333 *
334 * PARAMETERS: Op - Field Object to be examined
335 *
336 * RETURN: None
337 *
338 * DESCRIPTION: Decode Field definition flags
339 *
340 ******************************************************************************/
341
342void
343AcpiDmFieldFlags (
344 ACPI_PARSE_OBJECT *Op)
345{
346 UINT32 Flags;
347
348
349 Op = Op->Common.Next;
350 Flags = (UINT8) Op->Common.Value.Integer;
351
352 /* Mark the Op as completed */
353
354 Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
355
356 AcpiOsPrintf ("%s, ", AcpiGbl_AccessTypes [Flags & 0x07]);
357 AcpiOsPrintf ("%s, ", AcpiGbl_LockRule [(Flags & 0x10) >> 4]);
358 AcpiOsPrintf ("%s)", AcpiGbl_UpdateRules [(Flags & 0x60) >> 5]);
359}
360
361
362/*******************************************************************************
363 *
364 * FUNCTION: AcpiDmAddressSpace
365 *
366 * PARAMETERS: SpaceId - ID to be translated
367 *
368 * RETURN: None
369 *
370 * DESCRIPTION: Decode a SpaceId to an AddressSpaceKeyword
371 *
372 ******************************************************************************/
373
374void
375AcpiDmAddressSpace (
376 UINT8 SpaceId)
377{
378
379 if (SpaceId >= ACPI_NUM_PREDEFINED_REGIONS)
380 {
381 if (SpaceId == 0x7F)
382 {
383 AcpiOsPrintf ("FFixedHW, ");
384 }
385 else
386 {
387 AcpiOsPrintf ("0x%.2X, ", SpaceId);
388 }
389 }
390 else
391 {
392 AcpiOsPrintf ("%s, ", AcpiGbl_RegionTypes [SpaceId]);
393 }
394}
395
396
397/*******************************************************************************
398 *
399 * FUNCTION: AcpiDmRegionFlags
400 *
401 * PARAMETERS: Op - Object to be examined
402 *
403 * RETURN: None
404 *
405 * DESCRIPTION: Decode OperationRegion flags
406 *
407 ******************************************************************************/
408
409void
410AcpiDmRegionFlags (
411 ACPI_PARSE_OBJECT *Op)
412{
413
414
415 /* The next Op contains the SpaceId */
416
417 Op = AcpiPsGetDepthNext (NULL, Op);
418
419 /* Mark the Op as completed */
420
421 Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
422
423 AcpiOsPrintf (", ");
424 AcpiDmAddressSpace ((UINT8) Op->Common.Value.Integer);
425}
426
427
428/*******************************************************************************
429 *
430 * FUNCTION: AcpiDmMatchOp
431 *
432 * PARAMETERS: Op - Match Object to be examined
433 *
434 * RETURN: None
435 *
436 * DESCRIPTION: Decode Match opcode operands
437 *
438 ******************************************************************************/
439
440void
441AcpiDmMatchOp (
442 ACPI_PARSE_OBJECT *Op)
443{
444 ACPI_PARSE_OBJECT *NextOp;
445
446
447 NextOp = AcpiPsGetDepthNext (NULL, Op);
448 NextOp = NextOp->Common.Next;
449
450 if (!NextOp)
451 {
452 /* Handle partial tree during single-step */
453
454 return;
455 }
456
457 /* Mark the two nodes that contain the encoding for the match keywords */
458
459 NextOp->Common.DisasmOpcode = ACPI_DASM_MATCHOP;
460
461 NextOp = NextOp->Common.Next;
462 NextOp = NextOp->Common.Next;
463 NextOp->Common.DisasmOpcode = ACPI_DASM_MATCHOP;
464}
465
466
467/*******************************************************************************
468 *
469 * FUNCTION: AcpiDmMatchKeyword
470 *
471 * PARAMETERS: Op - Match Object to be examined
472 *
473 * RETURN: None
474 *
475 * DESCRIPTION: Decode Match opcode operands
476 *
477 ******************************************************************************/
478
479static void
480AcpiDmMatchKeyword (
481 ACPI_PARSE_OBJECT *Op)
482{
483
484
485 if (((UINT32) Op->Common.Value.Integer) > ACPI_MAX_MATCH_OPCODE)
486 {
487 AcpiOsPrintf ("/* Unknown Match Keyword encoding */");
488 }
489 else
490 {
491 AcpiOsPrintf ("%s", ACPI_CAST_PTR (char,
492 AcpiGbl_MatchOps[(ACPI_SIZE) Op->Common.Value.Integer]));
493 }
494}
495
496
497/*******************************************************************************
498 *
499 * FUNCTION: AcpiDmDisassembleOneOp
500 *
501 * PARAMETERS: WalkState - Current walk info
502 * Info - Parse tree walk info
503 * Op - Op that is to be printed
504 *
505 * RETURN: None
506 *
507 * DESCRIPTION: Disassemble a single AML opcode
508 *
509 ******************************************************************************/
510
511void
512AcpiDmDisassembleOneOp (
513 ACPI_WALK_STATE *WalkState,
514 ACPI_OP_WALK_INFO *Info,
515 ACPI_PARSE_OBJECT *Op)
516{
517 const ACPI_OPCODE_INFO *OpInfo = NULL;
518 UINT32 Offset;
519 UINT32 Length;
520 ACPI_PARSE_OBJECT *Child;
521 ACPI_STATUS Status;
522 UINT8 *Aml;
523
524
525 if (!Op)
526 {
527 AcpiOsPrintf ("<NULL OP PTR>");
528 return;
529 }
530
531 switch (Op->Common.DisasmOpcode)
532 {
533 case ACPI_DASM_MATCHOP:
534
535 AcpiDmMatchKeyword (Op);
536 return;
537
538 case ACPI_DASM_LNOT_SUFFIX:
539 switch (Op->Common.AmlOpcode)
540 {
541 case AML_LEQUAL_OP:
542 AcpiOsPrintf ("LNotEqual");
543 break;
544
545 case AML_LGREATER_OP:
546 AcpiOsPrintf ("LLessEqual");
547 break;
548
549 case AML_LLESS_OP:
550 AcpiOsPrintf ("LGreaterEqual");
551 break;
552
553 default:
554 break;
555 }
556 Op->Common.DisasmOpcode = 0;
557 Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
558 return;
559
560 default:
561 break;
562 }
563
564
565 OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
566
567 /* The op and arguments */
568
569 switch (Op->Common.AmlOpcode)
570 {
571 case AML_LNOT_OP:
572
573 Child = Op->Common.Value.Arg;
574 if ((Child->Common.AmlOpcode == AML_LEQUAL_OP) ||
575 (Child->Common.AmlOpcode == AML_LGREATER_OP) ||
576 (Child->Common.AmlOpcode == AML_LLESS_OP))
577 {
578 Child->Common.DisasmOpcode = ACPI_DASM_LNOT_SUFFIX;
579 Op->Common.DisasmOpcode = ACPI_DASM_LNOT_PREFIX;
580 }
581 else
582 {
583 AcpiOsPrintf ("%s", OpInfo->Name);
584 }
585 break;
586
587 case AML_BYTE_OP:
588
589 AcpiOsPrintf ("0x%2.2X", (UINT32) Op->Common.Value.Integer);
590 break;
591
592
593 case AML_WORD_OP:
594
595 if (Op->Common.DisasmOpcode == ACPI_DASM_EISAID)
596 {
597 AcpiDmEisaId ((UINT32) Op->Common.Value.Integer);
598 }
599 else
600 {
601 AcpiOsPrintf ("0x%4.4X", (UINT32) Op->Common.Value.Integer);
602 }
603 break;
604
605
606 case AML_DWORD_OP:
607
608 if (Op->Common.DisasmOpcode == ACPI_DASM_EISAID)
609 {
610 AcpiDmEisaId ((UINT32) Op->Common.Value.Integer);
611 }
612 else
613 {
614 AcpiOsPrintf ("0x%8.8X", (UINT32) Op->Common.Value.Integer);
615 }
616 break;
617
618
619 case AML_QWORD_OP:
620
621 AcpiOsPrintf ("0x%8.8X%8.8X",
622 ACPI_FORMAT_UINT64 (Op->Common.Value.Integer));
623 break;
624
625
626 case AML_STRING_OP:
627
628 AcpiUtPrintString (Op->Common.Value.String, ACPI_UINT8_MAX);
629 break;
630
631
632 case AML_BUFFER_OP:
633
634 /*
635 * Determine the type of buffer. We can have one of the following:
636 *
637 * 1) ResourceTemplate containing Resource Descriptors.
638 * 2) Unicode String buffer
639 * 3) ASCII String buffer
640 * 4) Raw data buffer (if none of the above)
641 *
642 * Since there are no special AML opcodes to differentiate these
643 * types of buffers, we have to closely look at the data in the
644 * buffer to determine the type.
645 */
646 if (!AcpiGbl_NoResourceDisassembly)
647 {
1/*******************************************************************************
2 *
3 * Module Name: dmopcode - AML disassembler, specific AML opcodes
4 *
5 ******************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2012, 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/acparser.h>
47#include <contrib/dev/acpica/include/amlcode.h>
48#include <contrib/dev/acpica/include/acdisasm.h>
49
50#ifdef ACPI_DISASSEMBLER
51
52#define _COMPONENT ACPI_CA_DEBUGGER
53 ACPI_MODULE_NAME ("dmopcode")
54
55/* Local prototypes */
56
57static void
58AcpiDmMatchKeyword (
59 ACPI_PARSE_OBJECT *Op);
60
61
62/*******************************************************************************
63 *
64 * FUNCTION: AcpiDmPredefinedDescription
65 *
66 * PARAMETERS: Op - Name() parse object
67 *
68 * RETURN: None
69 *
70 * DESCRIPTION: Emit a description comment for a predefined ACPI name.
71 * Used for iASL compiler only.
72 *
73 ******************************************************************************/
74
75void
76AcpiDmPredefinedDescription (
77 ACPI_PARSE_OBJECT *Op)
78{
79#ifdef ACPI_ASL_COMPILER
80 const AH_PREDEFINED_NAME *Info;
81 char *NameString;
82 int LastCharIsDigit;
83 int LastCharsAreHex;
84
85
86 if (!Op)
87 {
88 return;
89 }
90
91 /* Ensure that the comment field is emitted only once */
92
93 if (Op->Common.DisasmFlags & ACPI_PARSEOP_PREDEF_CHECKED)
94 {
95 return;
96 }
97 Op->Common.DisasmFlags |= ACPI_PARSEOP_PREDEF_CHECKED;
98
99 /* Predefined name must start with an underscore */
100
101 NameString = ACPI_CAST_PTR (char, &Op->Named.Name);
102 if (NameString[0] != '_')
103 {
104 return;
105 }
106
107 /*
108 * Check for the special ACPI names:
109 * _ACd, _ALd, _EJd, _Exx, _Lxx, _Qxx, _Wxx, _T_a
110 * (where d=decimal_digit, x=hex_digit, a=anything)
111 *
112 * Convert these to the generic name for table lookup.
113 * Note: NameString is guaranteed to be upper case here.
114 */
115 LastCharIsDigit =
116 (ACPI_IS_DIGIT (NameString[3])); /* d */
117 LastCharsAreHex =
118 (ACPI_IS_XDIGIT (NameString[2]) && /* xx */
119 ACPI_IS_XDIGIT (NameString[3]));
120
121 switch (NameString[1])
122 {
123 case 'A':
124 if ((NameString[2] == 'C') && (LastCharIsDigit))
125 {
126 NameString = "_ACx";
127 }
128 else if ((NameString[2] == 'L') && (LastCharIsDigit))
129 {
130 NameString = "_ALx";
131 }
132 break;
133
134 case 'E':
135 if ((NameString[2] == 'J') && (LastCharIsDigit))
136 {
137 NameString = "_EJx";
138 }
139 else if (LastCharsAreHex)
140 {
141 NameString = "_Exx";
142 }
143 break;
144
145 case 'L':
146 if (LastCharsAreHex)
147 {
148 NameString = "_Lxx";
149 }
150 break;
151
152 case 'Q':
153 if (LastCharsAreHex)
154 {
155 NameString = "_Qxx";
156 }
157 break;
158
159 case 'T':
160 if (NameString[2] == '_')
161 {
162 NameString = "_T_x";
163 }
164 break;
165
166 case 'W':
167 if (LastCharsAreHex)
168 {
169 NameString = "_Wxx";
170 }
171 break;
172
173 default:
174 break;
175 }
176
177 /* Match the name in the info table */
178
179 for (Info = AslPredefinedInfo; Info->Name; Info++)
180 {
181 if (ACPI_COMPARE_NAME (NameString, Info->Name))
182 {
183 AcpiOsPrintf (" // %4.4s: %s",
184 NameString, ACPI_CAST_PTR (char, Info->Description));
185 return;
186 }
187 }
188
189#endif
190 return;
191}
192
193
194/*******************************************************************************
195 *
196 * FUNCTION: AcpiDmFieldPredefinedDescription
197 *
198 * PARAMETERS: Op - Parse object
199 *
200 * RETURN: None
201 *
202 * DESCRIPTION: Emit a description comment for a resource descriptor tag
203 * (which is a predefined ACPI name.) Used for iASL compiler only.
204 *
205 ******************************************************************************/
206
207void
208AcpiDmFieldPredefinedDescription (
209 ACPI_PARSE_OBJECT *Op)
210{
211#ifdef ACPI_ASL_COMPILER
212 ACPI_PARSE_OBJECT *IndexOp;
213 char *Tag;
214 const ACPI_OPCODE_INFO *OpInfo;
215 const AH_PREDEFINED_NAME *Info;
216
217
218 if (!Op)
219 {
220 return;
221 }
222
223 /* Ensure that the comment field is emitted only once */
224
225 if (Op->Common.DisasmFlags & ACPI_PARSEOP_PREDEF_CHECKED)
226 {
227 return;
228 }
229 Op->Common.DisasmFlags |= ACPI_PARSEOP_PREDEF_CHECKED;
230
231 /*
232 * Op must be one of the Create* operators: CreateField, CreateBitField,
233 * CreateByteField, CreateWordField, CreateDwordField, CreateQwordField
234 */
235 OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
236 if (!(OpInfo->Flags & AML_CREATE))
237 {
238 return;
239 }
240
241 /* Second argument is the Index argument */
242
243 IndexOp = Op->Common.Value.Arg;
244 IndexOp = IndexOp->Common.Next;
245
246 /* Index argument must be a namepath */
247
248 if (IndexOp->Common.AmlOpcode != AML_INT_NAMEPATH_OP)
249 {
250 return;
251 }
252
253 /* Major cheat: We previously put the Tag ptr in the Node field */
254
255 Tag = ACPI_CAST_PTR (char, IndexOp->Common.Node);
256 if (!Tag)
257 {
258 return;
259 }
260
261 /* Match the name in the info table */
262
263 for (Info = AslPredefinedInfo; Info->Name; Info++)
264 {
265 if (ACPI_COMPARE_NAME (Tag, Info->Name))
266 {
267 AcpiOsPrintf (" // %4.4s: %s", Tag,
268 ACPI_CAST_PTR (char, Info->Description));
269 return;
270 }
271 }
272
273#endif
274 return;
275}
276
277
278/*******************************************************************************
279 *
280 * FUNCTION: AcpiDmMethodFlags
281 *
282 * PARAMETERS: Op - Method Object to be examined
283 *
284 * RETURN: None
285 *
286 * DESCRIPTION: Decode control method flags
287 *
288 ******************************************************************************/
289
290void
291AcpiDmMethodFlags (
292 ACPI_PARSE_OBJECT *Op)
293{
294 UINT32 Flags;
295 UINT32 Args;
296
297
298 /* The next Op contains the flags */
299
300 Op = AcpiPsGetDepthNext (NULL, Op);
301 Flags = (UINT8) Op->Common.Value.Integer;
302 Args = Flags & 0x07;
303
304 /* Mark the Op as completed */
305
306 Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
307
308 /* 1) Method argument count */
309
310 AcpiOsPrintf (", %u, ", Args);
311
312 /* 2) Serialize rule */
313
314 if (!(Flags & 0x08))
315 {
316 AcpiOsPrintf ("Not");
317 }
318
319 AcpiOsPrintf ("Serialized");
320
321 /* 3) SyncLevel */
322
323 if (Flags & 0xF0)
324 {
325 AcpiOsPrintf (", %u", Flags >> 4);
326 }
327}
328
329
330/*******************************************************************************
331 *
332 * FUNCTION: AcpiDmFieldFlags
333 *
334 * PARAMETERS: Op - Field Object to be examined
335 *
336 * RETURN: None
337 *
338 * DESCRIPTION: Decode Field definition flags
339 *
340 ******************************************************************************/
341
342void
343AcpiDmFieldFlags (
344 ACPI_PARSE_OBJECT *Op)
345{
346 UINT32 Flags;
347
348
349 Op = Op->Common.Next;
350 Flags = (UINT8) Op->Common.Value.Integer;
351
352 /* Mark the Op as completed */
353
354 Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
355
356 AcpiOsPrintf ("%s, ", AcpiGbl_AccessTypes [Flags & 0x07]);
357 AcpiOsPrintf ("%s, ", AcpiGbl_LockRule [(Flags & 0x10) >> 4]);
358 AcpiOsPrintf ("%s)", AcpiGbl_UpdateRules [(Flags & 0x60) >> 5]);
359}
360
361
362/*******************************************************************************
363 *
364 * FUNCTION: AcpiDmAddressSpace
365 *
366 * PARAMETERS: SpaceId - ID to be translated
367 *
368 * RETURN: None
369 *
370 * DESCRIPTION: Decode a SpaceId to an AddressSpaceKeyword
371 *
372 ******************************************************************************/
373
374void
375AcpiDmAddressSpace (
376 UINT8 SpaceId)
377{
378
379 if (SpaceId >= ACPI_NUM_PREDEFINED_REGIONS)
380 {
381 if (SpaceId == 0x7F)
382 {
383 AcpiOsPrintf ("FFixedHW, ");
384 }
385 else
386 {
387 AcpiOsPrintf ("0x%.2X, ", SpaceId);
388 }
389 }
390 else
391 {
392 AcpiOsPrintf ("%s, ", AcpiGbl_RegionTypes [SpaceId]);
393 }
394}
395
396
397/*******************************************************************************
398 *
399 * FUNCTION: AcpiDmRegionFlags
400 *
401 * PARAMETERS: Op - Object to be examined
402 *
403 * RETURN: None
404 *
405 * DESCRIPTION: Decode OperationRegion flags
406 *
407 ******************************************************************************/
408
409void
410AcpiDmRegionFlags (
411 ACPI_PARSE_OBJECT *Op)
412{
413
414
415 /* The next Op contains the SpaceId */
416
417 Op = AcpiPsGetDepthNext (NULL, Op);
418
419 /* Mark the Op as completed */
420
421 Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
422
423 AcpiOsPrintf (", ");
424 AcpiDmAddressSpace ((UINT8) Op->Common.Value.Integer);
425}
426
427
428/*******************************************************************************
429 *
430 * FUNCTION: AcpiDmMatchOp
431 *
432 * PARAMETERS: Op - Match Object to be examined
433 *
434 * RETURN: None
435 *
436 * DESCRIPTION: Decode Match opcode operands
437 *
438 ******************************************************************************/
439
440void
441AcpiDmMatchOp (
442 ACPI_PARSE_OBJECT *Op)
443{
444 ACPI_PARSE_OBJECT *NextOp;
445
446
447 NextOp = AcpiPsGetDepthNext (NULL, Op);
448 NextOp = NextOp->Common.Next;
449
450 if (!NextOp)
451 {
452 /* Handle partial tree during single-step */
453
454 return;
455 }
456
457 /* Mark the two nodes that contain the encoding for the match keywords */
458
459 NextOp->Common.DisasmOpcode = ACPI_DASM_MATCHOP;
460
461 NextOp = NextOp->Common.Next;
462 NextOp = NextOp->Common.Next;
463 NextOp->Common.DisasmOpcode = ACPI_DASM_MATCHOP;
464}
465
466
467/*******************************************************************************
468 *
469 * FUNCTION: AcpiDmMatchKeyword
470 *
471 * PARAMETERS: Op - Match Object to be examined
472 *
473 * RETURN: None
474 *
475 * DESCRIPTION: Decode Match opcode operands
476 *
477 ******************************************************************************/
478
479static void
480AcpiDmMatchKeyword (
481 ACPI_PARSE_OBJECT *Op)
482{
483
484
485 if (((UINT32) Op->Common.Value.Integer) > ACPI_MAX_MATCH_OPCODE)
486 {
487 AcpiOsPrintf ("/* Unknown Match Keyword encoding */");
488 }
489 else
490 {
491 AcpiOsPrintf ("%s", ACPI_CAST_PTR (char,
492 AcpiGbl_MatchOps[(ACPI_SIZE) Op->Common.Value.Integer]));
493 }
494}
495
496
497/*******************************************************************************
498 *
499 * FUNCTION: AcpiDmDisassembleOneOp
500 *
501 * PARAMETERS: WalkState - Current walk info
502 * Info - Parse tree walk info
503 * Op - Op that is to be printed
504 *
505 * RETURN: None
506 *
507 * DESCRIPTION: Disassemble a single AML opcode
508 *
509 ******************************************************************************/
510
511void
512AcpiDmDisassembleOneOp (
513 ACPI_WALK_STATE *WalkState,
514 ACPI_OP_WALK_INFO *Info,
515 ACPI_PARSE_OBJECT *Op)
516{
517 const ACPI_OPCODE_INFO *OpInfo = NULL;
518 UINT32 Offset;
519 UINT32 Length;
520 ACPI_PARSE_OBJECT *Child;
521 ACPI_STATUS Status;
522 UINT8 *Aml;
523
524
525 if (!Op)
526 {
527 AcpiOsPrintf ("<NULL OP PTR>");
528 return;
529 }
530
531 switch (Op->Common.DisasmOpcode)
532 {
533 case ACPI_DASM_MATCHOP:
534
535 AcpiDmMatchKeyword (Op);
536 return;
537
538 case ACPI_DASM_LNOT_SUFFIX:
539 switch (Op->Common.AmlOpcode)
540 {
541 case AML_LEQUAL_OP:
542 AcpiOsPrintf ("LNotEqual");
543 break;
544
545 case AML_LGREATER_OP:
546 AcpiOsPrintf ("LLessEqual");
547 break;
548
549 case AML_LLESS_OP:
550 AcpiOsPrintf ("LGreaterEqual");
551 break;
552
553 default:
554 break;
555 }
556 Op->Common.DisasmOpcode = 0;
557 Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
558 return;
559
560 default:
561 break;
562 }
563
564
565 OpInfo = AcpiPsGetOpcodeInfo (Op->Common.AmlOpcode);
566
567 /* The op and arguments */
568
569 switch (Op->Common.AmlOpcode)
570 {
571 case AML_LNOT_OP:
572
573 Child = Op->Common.Value.Arg;
574 if ((Child->Common.AmlOpcode == AML_LEQUAL_OP) ||
575 (Child->Common.AmlOpcode == AML_LGREATER_OP) ||
576 (Child->Common.AmlOpcode == AML_LLESS_OP))
577 {
578 Child->Common.DisasmOpcode = ACPI_DASM_LNOT_SUFFIX;
579 Op->Common.DisasmOpcode = ACPI_DASM_LNOT_PREFIX;
580 }
581 else
582 {
583 AcpiOsPrintf ("%s", OpInfo->Name);
584 }
585 break;
586
587 case AML_BYTE_OP:
588
589 AcpiOsPrintf ("0x%2.2X", (UINT32) Op->Common.Value.Integer);
590 break;
591
592
593 case AML_WORD_OP:
594
595 if (Op->Common.DisasmOpcode == ACPI_DASM_EISAID)
596 {
597 AcpiDmEisaId ((UINT32) Op->Common.Value.Integer);
598 }
599 else
600 {
601 AcpiOsPrintf ("0x%4.4X", (UINT32) Op->Common.Value.Integer);
602 }
603 break;
604
605
606 case AML_DWORD_OP:
607
608 if (Op->Common.DisasmOpcode == ACPI_DASM_EISAID)
609 {
610 AcpiDmEisaId ((UINT32) Op->Common.Value.Integer);
611 }
612 else
613 {
614 AcpiOsPrintf ("0x%8.8X", (UINT32) Op->Common.Value.Integer);
615 }
616 break;
617
618
619 case AML_QWORD_OP:
620
621 AcpiOsPrintf ("0x%8.8X%8.8X",
622 ACPI_FORMAT_UINT64 (Op->Common.Value.Integer));
623 break;
624
625
626 case AML_STRING_OP:
627
628 AcpiUtPrintString (Op->Common.Value.String, ACPI_UINT8_MAX);
629 break;
630
631
632 case AML_BUFFER_OP:
633
634 /*
635 * Determine the type of buffer. We can have one of the following:
636 *
637 * 1) ResourceTemplate containing Resource Descriptors.
638 * 2) Unicode String buffer
639 * 3) ASCII String buffer
640 * 4) Raw data buffer (if none of the above)
641 *
642 * Since there are no special AML opcodes to differentiate these
643 * types of buffers, we have to closely look at the data in the
644 * buffer to determine the type.
645 */
646 if (!AcpiGbl_NoResourceDisassembly)
647 {
648 Status = AcpiDmIsResourceTemplate (Op);
648 Status = AcpiDmIsResourceTemplate (WalkState, Op);
649 if (ACPI_SUCCESS (Status))
650 {
651 Op->Common.DisasmOpcode = ACPI_DASM_RESOURCE;
652 AcpiOsPrintf ("ResourceTemplate");
653 break;
654 }
655 else if (Status == AE_AML_NO_RESOURCE_END_TAG)
656 {
657 AcpiOsPrintf ("/**** Is ResourceTemplate, but EndTag not at buffer end ****/ ");
658 }
659 }
660
661 if (AcpiDmIsUnicodeBuffer (Op))
662 {
663 Op->Common.DisasmOpcode = ACPI_DASM_UNICODE;
664 AcpiOsPrintf ("Unicode (");
665 }
666 else if (AcpiDmIsStringBuffer (Op))
667 {
668 Op->Common.DisasmOpcode = ACPI_DASM_STRING;
669 AcpiOsPrintf ("Buffer");
670 }
671 else if (AcpiDmIsPldBuffer (Op))
672 {
673 Op->Common.DisasmOpcode = ACPI_DASM_PLD_METHOD;
674 AcpiOsPrintf ("Buffer");
675 }
676 else
677 {
678 Op->Common.DisasmOpcode = ACPI_DASM_BUFFER;
679 AcpiOsPrintf ("Buffer");
680 }
681 break;
682
683
684 case AML_INT_STATICSTRING_OP:
685
686 if (Op->Common.Value.String)
687 {
688 AcpiOsPrintf ("%s", Op->Common.Value.String);
689 }
690 else
691 {
692 AcpiOsPrintf ("\"<NULL STATIC STRING PTR>\"");
693 }
694 break;
695
696
697 case AML_INT_NAMEPATH_OP:
698
699 AcpiDmNamestring (Op->Common.Value.Name);
700 break;
701
702
703 case AML_INT_NAMEDFIELD_OP:
704
705 Length = AcpiDmDumpName (Op->Named.Name);
706 AcpiOsPrintf (",%*.s %u", (unsigned) (5 - Length), " ",
707 (UINT32) Op->Common.Value.Integer);
708 AcpiDmCommaIfFieldMember (Op);
709
710 Info->BitOffset += (UINT32) Op->Common.Value.Integer;
711 break;
712
713
714 case AML_INT_RESERVEDFIELD_OP:
715
716 /* Offset() -- Must account for previous offsets */
717
718 Offset = (UINT32) Op->Common.Value.Integer;
719 Info->BitOffset += Offset;
720
721 if (Info->BitOffset % 8 == 0)
722 {
723 AcpiOsPrintf ("Offset (0x%.2X)", ACPI_DIV_8 (Info->BitOffset));
724 }
725 else
726 {
727 AcpiOsPrintf (" , %u", Offset);
728 }
729
730 AcpiDmCommaIfFieldMember (Op);
731 break;
732
733
734 case AML_INT_ACCESSFIELD_OP:
735 case AML_INT_EXTACCESSFIELD_OP:
736
737 AcpiOsPrintf ("AccessAs (%s, ",
738 AcpiGbl_AccessTypes [(UINT32) (Op->Common.Value.Integer & 0x7)]);
739
740 AcpiDmDecodeAttribute ((UINT8) (Op->Common.Value.Integer >> 8));
741
742 if (Op->Common.AmlOpcode == AML_INT_EXTACCESSFIELD_OP)
743 {
744 AcpiOsPrintf (" (0x%2.2X)", (unsigned) ((Op->Common.Value.Integer >> 16) & 0xFF));
745 }
746
747 AcpiOsPrintf (")");
748 AcpiDmCommaIfFieldMember (Op);
749 break;
750
751
752 case AML_INT_CONNECTION_OP:
753
754 /*
755 * Two types of Connection() - one with a buffer object, the
756 * other with a namestring that points to a buffer object.
757 */
758 AcpiOsPrintf ("Connection (");
759 Child = Op->Common.Value.Arg;
760
761 if (Child->Common.AmlOpcode == AML_INT_BYTELIST_OP)
762 {
763 AcpiOsPrintf ("\n");
764
765 Aml = Child->Named.Data;
766 Length = (UINT32) Child->Common.Value.Integer;
767
768 Info->Level += 1;
769 Op->Common.DisasmOpcode = ACPI_DASM_RESOURCE;
770 AcpiDmResourceTemplate (Info, Op->Common.Parent, Aml, Length);
771
772 Info->Level -= 1;
773 AcpiDmIndent (Info->Level);
774 }
775 else
776 {
777 AcpiDmNamestring (Child->Common.Value.Name);
778 }
779
780 AcpiOsPrintf (")");
781 AcpiDmCommaIfFieldMember (Op);
782 AcpiOsPrintf ("\n");
783
784 Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; /* for now, ignore in AcpiDmAscendingOp */
785 Child->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
786 break;
787
788 case AML_INT_BYTELIST_OP:
789
790 AcpiDmByteList (Info, Op);
791 break;
792
793
794 case AML_INT_METHODCALL_OP:
795
796 Op = AcpiPsGetDepthNext (NULL, Op);
797 Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
798
799 AcpiDmNamestring (Op->Common.Value.Name);
800 break;
801
802
803 default:
804
805 /* Just get the opcode name and print it */
806
807 AcpiOsPrintf ("%s", OpInfo->Name);
808
809
810#ifdef ACPI_DEBUGGER
811
812 if ((Op->Common.AmlOpcode == AML_INT_RETURN_VALUE_OP) &&
813 (WalkState) &&
814 (WalkState->Results) &&
815 (WalkState->ResultCount))
816 {
817 AcpiDmDecodeInternalObject (
818 WalkState->Results->Results.ObjDesc [
819 (WalkState->ResultCount - 1) %
820 ACPI_RESULTS_FRAME_OBJ_NUM]);
821 }
822#endif
823
824 break;
825 }
826}
827
828#endif /* ACPI_DISASSEMBLER */
649 if (ACPI_SUCCESS (Status))
650 {
651 Op->Common.DisasmOpcode = ACPI_DASM_RESOURCE;
652 AcpiOsPrintf ("ResourceTemplate");
653 break;
654 }
655 else if (Status == AE_AML_NO_RESOURCE_END_TAG)
656 {
657 AcpiOsPrintf ("/**** Is ResourceTemplate, but EndTag not at buffer end ****/ ");
658 }
659 }
660
661 if (AcpiDmIsUnicodeBuffer (Op))
662 {
663 Op->Common.DisasmOpcode = ACPI_DASM_UNICODE;
664 AcpiOsPrintf ("Unicode (");
665 }
666 else if (AcpiDmIsStringBuffer (Op))
667 {
668 Op->Common.DisasmOpcode = ACPI_DASM_STRING;
669 AcpiOsPrintf ("Buffer");
670 }
671 else if (AcpiDmIsPldBuffer (Op))
672 {
673 Op->Common.DisasmOpcode = ACPI_DASM_PLD_METHOD;
674 AcpiOsPrintf ("Buffer");
675 }
676 else
677 {
678 Op->Common.DisasmOpcode = ACPI_DASM_BUFFER;
679 AcpiOsPrintf ("Buffer");
680 }
681 break;
682
683
684 case AML_INT_STATICSTRING_OP:
685
686 if (Op->Common.Value.String)
687 {
688 AcpiOsPrintf ("%s", Op->Common.Value.String);
689 }
690 else
691 {
692 AcpiOsPrintf ("\"<NULL STATIC STRING PTR>\"");
693 }
694 break;
695
696
697 case AML_INT_NAMEPATH_OP:
698
699 AcpiDmNamestring (Op->Common.Value.Name);
700 break;
701
702
703 case AML_INT_NAMEDFIELD_OP:
704
705 Length = AcpiDmDumpName (Op->Named.Name);
706 AcpiOsPrintf (",%*.s %u", (unsigned) (5 - Length), " ",
707 (UINT32) Op->Common.Value.Integer);
708 AcpiDmCommaIfFieldMember (Op);
709
710 Info->BitOffset += (UINT32) Op->Common.Value.Integer;
711 break;
712
713
714 case AML_INT_RESERVEDFIELD_OP:
715
716 /* Offset() -- Must account for previous offsets */
717
718 Offset = (UINT32) Op->Common.Value.Integer;
719 Info->BitOffset += Offset;
720
721 if (Info->BitOffset % 8 == 0)
722 {
723 AcpiOsPrintf ("Offset (0x%.2X)", ACPI_DIV_8 (Info->BitOffset));
724 }
725 else
726 {
727 AcpiOsPrintf (" , %u", Offset);
728 }
729
730 AcpiDmCommaIfFieldMember (Op);
731 break;
732
733
734 case AML_INT_ACCESSFIELD_OP:
735 case AML_INT_EXTACCESSFIELD_OP:
736
737 AcpiOsPrintf ("AccessAs (%s, ",
738 AcpiGbl_AccessTypes [(UINT32) (Op->Common.Value.Integer & 0x7)]);
739
740 AcpiDmDecodeAttribute ((UINT8) (Op->Common.Value.Integer >> 8));
741
742 if (Op->Common.AmlOpcode == AML_INT_EXTACCESSFIELD_OP)
743 {
744 AcpiOsPrintf (" (0x%2.2X)", (unsigned) ((Op->Common.Value.Integer >> 16) & 0xFF));
745 }
746
747 AcpiOsPrintf (")");
748 AcpiDmCommaIfFieldMember (Op);
749 break;
750
751
752 case AML_INT_CONNECTION_OP:
753
754 /*
755 * Two types of Connection() - one with a buffer object, the
756 * other with a namestring that points to a buffer object.
757 */
758 AcpiOsPrintf ("Connection (");
759 Child = Op->Common.Value.Arg;
760
761 if (Child->Common.AmlOpcode == AML_INT_BYTELIST_OP)
762 {
763 AcpiOsPrintf ("\n");
764
765 Aml = Child->Named.Data;
766 Length = (UINT32) Child->Common.Value.Integer;
767
768 Info->Level += 1;
769 Op->Common.DisasmOpcode = ACPI_DASM_RESOURCE;
770 AcpiDmResourceTemplate (Info, Op->Common.Parent, Aml, Length);
771
772 Info->Level -= 1;
773 AcpiDmIndent (Info->Level);
774 }
775 else
776 {
777 AcpiDmNamestring (Child->Common.Value.Name);
778 }
779
780 AcpiOsPrintf (")");
781 AcpiDmCommaIfFieldMember (Op);
782 AcpiOsPrintf ("\n");
783
784 Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE; /* for now, ignore in AcpiDmAscendingOp */
785 Child->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
786 break;
787
788 case AML_INT_BYTELIST_OP:
789
790 AcpiDmByteList (Info, Op);
791 break;
792
793
794 case AML_INT_METHODCALL_OP:
795
796 Op = AcpiPsGetDepthNext (NULL, Op);
797 Op->Common.DisasmFlags |= ACPI_PARSEOP_IGNORE;
798
799 AcpiDmNamestring (Op->Common.Value.Name);
800 break;
801
802
803 default:
804
805 /* Just get the opcode name and print it */
806
807 AcpiOsPrintf ("%s", OpInfo->Name);
808
809
810#ifdef ACPI_DEBUGGER
811
812 if ((Op->Common.AmlOpcode == AML_INT_RETURN_VALUE_OP) &&
813 (WalkState) &&
814 (WalkState->Results) &&
815 (WalkState->ResultCount))
816 {
817 AcpiDmDecodeInternalObject (
818 WalkState->Results->Results.ObjDesc [
819 (WalkState->ResultCount - 1) %
820 ACPI_RESULTS_FRAME_OBJ_NUM]);
821 }
822#endif
823
824 break;
825 }
826}
827
828#endif /* ACPI_DISASSEMBLER */