1 /******************************************************************************
3 * Module Name: exdump - Interpreter debug output routines
5 *****************************************************************************/
8 * Copyright (C) 2000 - 2005, R. Byron Moore
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
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.
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.
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.
44 #include <acpi/acpi.h>
45 #include <acpi/acinterp.h>
46 #include <acpi/amlcode.h>
47 #include <acpi/acnamesp.h>
48 #include <acpi/acparser.h>
50 #define _COMPONENT ACPI_EXECUTER
51 ACPI_MODULE_NAME("exdump")
54 * The following routines are used for debug output only
56 #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
57 /* Local prototypes */
58 #ifdef ACPI_FUTURE_USAGE
59 static void acpi_ex_out_string(char *title
, char *value
);
61 static void acpi_ex_out_pointer(char *title
, void *value
);
63 static void acpi_ex_out_integer(char *title
, u32 value
);
65 static void acpi_ex_out_address(char *title
, acpi_physical_address value
);
67 static void acpi_ex_dump_reference(union acpi_operand_object
*obj_desc
);
70 acpi_ex_dump_package(union acpi_operand_object
*obj_desc
, u32 level
, u32 index
);
71 #endif /* ACPI_FUTURE_USAGE */
73 /*******************************************************************************
75 * FUNCTION: acpi_ex_dump_operand
77 * PARAMETERS: *obj_desc - Pointer to entry to be dumped
78 * Depth - Current nesting depth
82 * DESCRIPTION: Dump an operand object
84 ******************************************************************************/
86 void acpi_ex_dump_operand(union acpi_operand_object
*obj_desc
, u32 depth
)
91 ACPI_FUNCTION_NAME("ex_dump_operand")
94 ((ACPI_LV_EXEC
& acpi_dbg_level
)
95 && (_COMPONENT
& acpi_dbg_layer
))) {
100 /* This could be a null element of a package */
102 ACPI_DEBUG_PRINT((ACPI_DB_EXEC
, "Null Object Descriptor\n"));
106 if (ACPI_GET_DESCRIPTOR_TYPE(obj_desc
) == ACPI_DESC_TYPE_NAMED
) {
107 ACPI_DEBUG_PRINT((ACPI_DB_EXEC
, "%p Namespace Node: ",
109 ACPI_DUMP_ENTRY(obj_desc
, ACPI_LV_EXEC
);
113 if (ACPI_GET_DESCRIPTOR_TYPE(obj_desc
) != ACPI_DESC_TYPE_OPERAND
) {
114 ACPI_DEBUG_PRINT((ACPI_DB_EXEC
,
115 "%p is not a node or operand object: [%s]\n",
117 acpi_ut_get_descriptor_name(obj_desc
)));
118 ACPI_DUMP_BUFFER(obj_desc
, sizeof(union acpi_operand_object
));
122 /* obj_desc is a valid object */
125 ACPI_DEBUG_PRINT((ACPI_DB_EXEC
, "%*s[%u] %p ",
126 depth
, " ", depth
, obj_desc
));
128 ACPI_DEBUG_PRINT((ACPI_DB_EXEC
, "%p ", obj_desc
));
131 /* Decode object type */
133 switch (ACPI_GET_OBJECT_TYPE(obj_desc
)) {
134 case ACPI_TYPE_LOCAL_REFERENCE
:
136 switch (obj_desc
->reference
.opcode
) {
139 acpi_os_printf("Reference: Debug\n");
144 ACPI_DUMP_PATHNAME(obj_desc
->reference
.object
,
145 "Reference: Name: ", ACPI_LV_INFO
,
147 ACPI_DUMP_ENTRY(obj_desc
->reference
.object
,
153 acpi_os_printf("Reference: Index %p\n",
154 obj_desc
->reference
.object
);
159 acpi_os_printf("Reference: (ref_of) %p\n",
160 obj_desc
->reference
.object
);
165 acpi_os_printf("Reference: Arg%d",
166 obj_desc
->reference
.offset
);
168 if (ACPI_GET_OBJECT_TYPE(obj_desc
) == ACPI_TYPE_INTEGER
) {
169 /* Value is an Integer */
171 acpi_os_printf(" value is [%8.8X%8.8x]",
172 ACPI_FORMAT_UINT64(obj_desc
->
177 acpi_os_printf("\n");
182 acpi_os_printf("Reference: Local%d",
183 obj_desc
->reference
.offset
);
185 if (ACPI_GET_OBJECT_TYPE(obj_desc
) == ACPI_TYPE_INTEGER
) {
187 /* Value is an Integer */
189 acpi_os_printf(" value is [%8.8X%8.8x]",
190 ACPI_FORMAT_UINT64(obj_desc
->
195 acpi_os_printf("\n");
198 case AML_INT_NAMEPATH_OP
:
200 acpi_os_printf("Reference.Node->Name %X\n",
201 obj_desc
->reference
.node
->name
.integer
);
208 acpi_os_printf("Unknown Reference opcode=%X\n",
209 obj_desc
->reference
.opcode
);
215 case ACPI_TYPE_BUFFER
:
217 acpi_os_printf("Buffer len %X @ %p \n",
218 obj_desc
->buffer
.length
,
219 obj_desc
->buffer
.pointer
);
221 length
= obj_desc
->buffer
.length
;
226 /* Debug only -- dump the buffer contents */
228 if (obj_desc
->buffer
.pointer
) {
229 acpi_os_printf("Buffer Contents: ");
231 for (index
= 0; index
< length
; index
++) {
232 acpi_os_printf(" %02x",
233 obj_desc
->buffer
.pointer
[index
]);
235 acpi_os_printf("\n");
239 case ACPI_TYPE_INTEGER
:
241 acpi_os_printf("Integer %8.8X%8.8X\n",
242 ACPI_FORMAT_UINT64(obj_desc
->integer
.value
));
245 case ACPI_TYPE_PACKAGE
:
247 acpi_os_printf("Package [Len %X] element_array %p\n",
248 obj_desc
->package
.count
,
249 obj_desc
->package
.elements
);
252 * If elements exist, package element pointer is valid,
253 * and debug_level exceeds 1, dump package's elements.
255 if (obj_desc
->package
.count
&&
256 obj_desc
->package
.elements
&& acpi_dbg_level
> 1) {
257 for (index
= 0; index
< obj_desc
->package
.count
;
259 acpi_ex_dump_operand(obj_desc
->package
.
266 case ACPI_TYPE_REGION
:
268 acpi_os_printf("Region %s (%X)",
269 acpi_ut_get_region_name(obj_desc
->region
.
271 obj_desc
->region
.space_id
);
274 * If the address and length have not been evaluated,
277 if (!(obj_desc
->region
.flags
& AOPOBJ_DATA_VALID
)) {
278 acpi_os_printf("\n");
280 acpi_os_printf(" base %8.8X%8.8X Length %X\n",
281 ACPI_FORMAT_UINT64(obj_desc
->region
.
283 obj_desc
->region
.length
);
287 case ACPI_TYPE_STRING
:
289 acpi_os_printf("String length %X @ %p ",
290 obj_desc
->string
.length
,
291 obj_desc
->string
.pointer
);
293 acpi_ut_print_string(obj_desc
->string
.pointer
, ACPI_UINT8_MAX
);
294 acpi_os_printf("\n");
297 case ACPI_TYPE_LOCAL_BANK_FIELD
:
299 acpi_os_printf("bank_field\n");
302 case ACPI_TYPE_LOCAL_REGION_FIELD
:
305 ("region_field: Bits=%X acc_width=%X Lock=%X Update=%X at byte=%X bit=%X of below:\n",
306 obj_desc
->field
.bit_length
,
307 obj_desc
->field
.access_byte_width
,
308 obj_desc
->field
.field_flags
& AML_FIELD_LOCK_RULE_MASK
,
309 obj_desc
->field
.field_flags
& AML_FIELD_UPDATE_RULE_MASK
,
310 obj_desc
->field
.base_byte_offset
,
311 obj_desc
->field
.start_field_bit_offset
);
313 acpi_ex_dump_operand(obj_desc
->field
.region_obj
, depth
+ 1);
316 case ACPI_TYPE_LOCAL_INDEX_FIELD
:
318 acpi_os_printf("index_field\n");
321 case ACPI_TYPE_BUFFER_FIELD
:
323 acpi_os_printf("buffer_field: %X bits at byte %X bit %X of \n",
324 obj_desc
->buffer_field
.bit_length
,
325 obj_desc
->buffer_field
.base_byte_offset
,
326 obj_desc
->buffer_field
.start_field_bit_offset
);
328 if (!obj_desc
->buffer_field
.buffer_obj
) {
329 ACPI_DEBUG_PRINT((ACPI_DB_EXEC
, "*NULL* \n"));
331 if (ACPI_GET_OBJECT_TYPE(obj_desc
->buffer_field
.buffer_obj
)
332 != ACPI_TYPE_BUFFER
) {
333 acpi_os_printf("*not a Buffer* \n");
335 acpi_ex_dump_operand(obj_desc
->buffer_field
.buffer_obj
,
340 case ACPI_TYPE_EVENT
:
342 acpi_os_printf("Event\n");
345 case ACPI_TYPE_METHOD
:
347 acpi_os_printf("Method(%X) @ %p:%X\n",
348 obj_desc
->method
.param_count
,
349 obj_desc
->method
.aml_start
,
350 obj_desc
->method
.aml_length
);
353 case ACPI_TYPE_MUTEX
:
355 acpi_os_printf("Mutex\n");
358 case ACPI_TYPE_DEVICE
:
360 acpi_os_printf("Device\n");
363 case ACPI_TYPE_POWER
:
365 acpi_os_printf("Power\n");
368 case ACPI_TYPE_PROCESSOR
:
370 acpi_os_printf("Processor\n");
373 case ACPI_TYPE_THERMAL
:
375 acpi_os_printf("Thermal\n");
381 acpi_os_printf("Unknown Type %X\n",
382 ACPI_GET_OBJECT_TYPE(obj_desc
));
389 /*******************************************************************************
391 * FUNCTION: acpi_ex_dump_operands
393 * PARAMETERS: Operands - Operand list
394 * interpreter_mode - Load or Exec
395 * Ident - Identification
396 * num_levels - # of stack entries to dump above line
397 * Note - Output notation
398 * module_name - Caller's module name
399 * line_number - Caller's invocation line number
401 * DESCRIPTION: Dump the object stack
403 ******************************************************************************/
406 acpi_ex_dump_operands(union acpi_operand_object
**operands
,
407 acpi_interpreter_mode interpreter_mode
,
410 char *note
, char *module_name
, u32 line_number
)
414 ACPI_FUNCTION_NAME("ex_dump_operands");
424 ACPI_DEBUG_PRINT((ACPI_DB_EXEC
,
425 "************* Operand Stack Contents (Opcode [%s], %d Operands)\n",
428 if (num_levels
== 0) {
432 /* Dump the operand stack starting at the top */
434 for (i
= 0; num_levels
> 0; i
--, num_levels
--) {
435 acpi_ex_dump_operand(operands
[i
], 0);
438 ACPI_DEBUG_PRINT((ACPI_DB_EXEC
,
439 "************* Operand Stack dump from %s(%d), %s\n",
440 module_name
, line_number
, note
));
444 #ifdef ACPI_FUTURE_USAGE
445 /*******************************************************************************
447 * FUNCTION: acpi_ex_out* functions
449 * PARAMETERS: Title - Descriptive text
450 * Value - Value to be displayed
452 * DESCRIPTION: Object dump output formatting functions. These functions
453 * reduce the number of format strings required and keeps them
454 * all in one place for easy modification.
456 ******************************************************************************/
458 static void acpi_ex_out_string(char *title
, char *value
)
460 acpi_os_printf("%20s : %s\n", title
, value
);
463 static void acpi_ex_out_pointer(char *title
, void *value
)
465 acpi_os_printf("%20s : %p\n", title
, value
);
468 static void acpi_ex_out_integer(char *title
, u32 value
)
470 acpi_os_printf("%20s : %.2X\n", title
, value
);
473 static void acpi_ex_out_address(char *title
, acpi_physical_address value
)
476 #if ACPI_MACHINE_WIDTH == 16
477 acpi_os_printf("%20s : %p\n", title
, value
);
479 acpi_os_printf("%20s : %8.8X%8.8X\n", title
, ACPI_FORMAT_UINT64(value
));
483 /*******************************************************************************
485 * FUNCTION: acpi_ex_dump_node
487 * PARAMETERS: *Node - Descriptor to dump
488 * Flags - Force display if TRUE
490 * DESCRIPTION: Dumps the members of the given.Node
492 ******************************************************************************/
494 void acpi_ex_dump_node(struct acpi_namespace_node
*node
, u32 flags
)
497 ACPI_FUNCTION_ENTRY();
501 ((ACPI_LV_OBJECTS
& acpi_dbg_level
)
502 && (_COMPONENT
& acpi_dbg_layer
))) {
507 acpi_os_printf("%20s : %4.4s\n", "Name", acpi_ut_get_node_name(node
));
508 acpi_ex_out_string("Type", acpi_ut_get_type_name(node
->type
));
509 acpi_ex_out_integer("Flags", node
->flags
);
510 acpi_ex_out_integer("Owner Id", node
->owner_id
);
511 acpi_ex_out_integer("Reference Count", node
->reference_count
);
512 acpi_ex_out_pointer("Attached Object",
513 acpi_ns_get_attached_object(node
));
514 acpi_ex_out_pointer("child_list", node
->child
);
515 acpi_ex_out_pointer("next_peer", node
->peer
);
516 acpi_ex_out_pointer("Parent", acpi_ns_get_parent_node(node
));
519 /*******************************************************************************
521 * FUNCTION: acpi_ex_dump_reference
523 * PARAMETERS: Object - Descriptor to dump
525 * DESCRIPTION: Dumps a reference object
527 ******************************************************************************/
529 static void acpi_ex_dump_reference(union acpi_operand_object
*obj_desc
)
531 struct acpi_buffer ret_buf
;
534 if (obj_desc
->reference
.opcode
== AML_INT_NAMEPATH_OP
) {
535 acpi_os_printf("Named Object %p ", obj_desc
->reference
.node
);
536 ret_buf
.length
= ACPI_ALLOCATE_LOCAL_BUFFER
;
538 acpi_ns_handle_to_pathname(obj_desc
->reference
.node
,
540 if (ACPI_FAILURE(status
)) {
541 acpi_os_printf("Could not convert name to pathname\n");
543 acpi_os_printf("%s\n", (char *)ret_buf
.pointer
);
544 ACPI_MEM_FREE(ret_buf
.pointer
);
546 } else if (obj_desc
->reference
.object
) {
547 acpi_os_printf("\nReferenced Object: %p\n",
548 obj_desc
->reference
.object
);
552 /*******************************************************************************
554 * FUNCTION: acpi_ex_dump_package
556 * PARAMETERS: Object - Descriptor to dump
557 * Level - Indentation Level
558 * Index - Package index for this object
560 * DESCRIPTION: Dumps the elements of the package
562 ******************************************************************************/
565 acpi_ex_dump_package(union acpi_operand_object
*obj_desc
, u32 level
, u32 index
)
569 /* Indentation and index output */
572 for (i
= 0; i
< level
; i
++) {
576 acpi_os_printf("[%.2d] ", index
);
579 acpi_os_printf("%p ", obj_desc
);
581 /* Null package elements are allowed */
584 acpi_os_printf("[Null Object]\n");
588 /* Packages may only contain a few object types */
590 switch (ACPI_GET_OBJECT_TYPE(obj_desc
)) {
591 case ACPI_TYPE_INTEGER
:
593 acpi_os_printf("[Integer] = %8.8X%8.8X\n",
594 ACPI_FORMAT_UINT64(obj_desc
->integer
.value
));
597 case ACPI_TYPE_STRING
:
599 acpi_os_printf("[String] Value: ");
600 for (i
= 0; i
< obj_desc
->string
.length
; i
++) {
601 acpi_os_printf("%c", obj_desc
->string
.pointer
[i
]);
603 acpi_os_printf("\n");
606 case ACPI_TYPE_BUFFER
:
608 acpi_os_printf("[Buffer] Length %.2X = ",
609 obj_desc
->buffer
.length
);
610 if (obj_desc
->buffer
.length
) {
611 acpi_ut_dump_buffer((u8
*) obj_desc
->buffer
.pointer
,
612 obj_desc
->buffer
.length
,
613 DB_DWORD_DISPLAY
, _COMPONENT
);
615 acpi_os_printf("\n");
619 case ACPI_TYPE_PACKAGE
:
621 acpi_os_printf("[Package] Contains %d Elements: \n",
622 obj_desc
->package
.count
);
624 for (i
= 0; i
< obj_desc
->package
.count
; i
++) {
625 acpi_ex_dump_package(obj_desc
->package
.elements
[i
],
630 case ACPI_TYPE_LOCAL_REFERENCE
:
632 acpi_os_printf("[Object Reference] ");
633 acpi_ex_dump_reference(obj_desc
);
638 acpi_os_printf("[Unknown Type] %X\n",
639 ACPI_GET_OBJECT_TYPE(obj_desc
));
644 /*******************************************************************************
646 * FUNCTION: acpi_ex_dump_object_descriptor
648 * PARAMETERS: Object - Descriptor to dump
649 * Flags - Force display if TRUE
651 * DESCRIPTION: Dumps the members of the object descriptor given.
653 ******************************************************************************/
656 acpi_ex_dump_object_descriptor(union acpi_operand_object
*obj_desc
, u32 flags
)
658 ACPI_FUNCTION_TRACE("ex_dump_object_descriptor");
666 ((ACPI_LV_OBJECTS
& acpi_dbg_level
)
667 && (_COMPONENT
& acpi_dbg_layer
))) {
672 if (ACPI_GET_DESCRIPTOR_TYPE(obj_desc
) == ACPI_DESC_TYPE_NAMED
) {
673 acpi_ex_dump_node((struct acpi_namespace_node
*)obj_desc
,
675 acpi_os_printf("\nAttached Object (%p):\n",
676 ((struct acpi_namespace_node
*)obj_desc
)->
678 acpi_ex_dump_object_descriptor(((struct acpi_namespace_node
*)
679 obj_desc
)->object
, flags
);
683 if (ACPI_GET_DESCRIPTOR_TYPE(obj_desc
) != ACPI_DESC_TYPE_OPERAND
) {
685 ("ex_dump_object_descriptor: %p is not an ACPI operand object: [%s]\n",
686 obj_desc
, acpi_ut_get_descriptor_name(obj_desc
));
692 acpi_ex_out_string("Type", acpi_ut_get_object_type_name(obj_desc
));
693 acpi_ex_out_integer("Reference Count",
694 obj_desc
->common
.reference_count
);
695 acpi_ex_out_integer("Flags", obj_desc
->common
.flags
);
697 /* Object-specific Fields */
699 switch (ACPI_GET_OBJECT_TYPE(obj_desc
)) {
700 case ACPI_TYPE_INTEGER
:
702 acpi_os_printf("%20s : %8.8X%8.8X\n", "Value",
703 ACPI_FORMAT_UINT64(obj_desc
->integer
.value
));
706 case ACPI_TYPE_STRING
:
708 acpi_ex_out_integer("Length", obj_desc
->string
.length
);
710 acpi_os_printf("%20s : %p ", "Pointer",
711 obj_desc
->string
.pointer
);
712 acpi_ut_print_string(obj_desc
->string
.pointer
, ACPI_UINT8_MAX
);
713 acpi_os_printf("\n");
716 case ACPI_TYPE_BUFFER
:
718 acpi_ex_out_integer("Length", obj_desc
->buffer
.length
);
719 acpi_ex_out_pointer("Pointer", obj_desc
->buffer
.pointer
);
720 ACPI_DUMP_BUFFER(obj_desc
->buffer
.pointer
,
721 obj_desc
->buffer
.length
);
724 case ACPI_TYPE_PACKAGE
:
726 acpi_ex_out_integer("Flags", obj_desc
->package
.flags
);
727 acpi_ex_out_integer("Elements", obj_desc
->package
.count
);
728 acpi_ex_out_pointer("Element List", obj_desc
->package
.elements
);
730 /* Dump the package contents */
732 acpi_os_printf("\nPackage Contents:\n");
733 acpi_ex_dump_package(obj_desc
, 0, 0);
736 case ACPI_TYPE_DEVICE
:
738 acpi_ex_out_pointer("Handler", obj_desc
->device
.handler
);
739 acpi_ex_out_pointer("system_notify",
740 obj_desc
->device
.system_notify
);
741 acpi_ex_out_pointer("device_notify",
742 obj_desc
->device
.device_notify
);
745 case ACPI_TYPE_EVENT
:
747 acpi_ex_out_pointer("Semaphore", obj_desc
->event
.semaphore
);
750 case ACPI_TYPE_METHOD
:
752 acpi_ex_out_integer("param_count",
753 obj_desc
->method
.param_count
);
754 acpi_ex_out_integer("Concurrency",
755 obj_desc
->method
.concurrency
);
756 acpi_ex_out_pointer("Semaphore", obj_desc
->method
.semaphore
);
757 acpi_ex_out_integer("owner_id", obj_desc
->method
.owner_id
);
758 acpi_ex_out_integer("aml_length", obj_desc
->method
.aml_length
);
759 acpi_ex_out_pointer("aml_start", obj_desc
->method
.aml_start
);
762 case ACPI_TYPE_MUTEX
:
764 acpi_ex_out_integer("sync_level", obj_desc
->mutex
.sync_level
);
765 acpi_ex_out_pointer("owner_thread",
766 obj_desc
->mutex
.owner_thread
);
767 acpi_ex_out_integer("acquire_depth",
768 obj_desc
->mutex
.acquisition_depth
);
769 acpi_ex_out_pointer("Semaphore", obj_desc
->mutex
.semaphore
);
772 case ACPI_TYPE_REGION
:
774 acpi_ex_out_integer("space_id", obj_desc
->region
.space_id
);
775 acpi_ex_out_integer("Flags", obj_desc
->region
.flags
);
776 acpi_ex_out_address("Address", obj_desc
->region
.address
);
777 acpi_ex_out_integer("Length", obj_desc
->region
.length
);
778 acpi_ex_out_pointer("Handler", obj_desc
->region
.handler
);
779 acpi_ex_out_pointer("Next", obj_desc
->region
.next
);
782 case ACPI_TYPE_POWER
:
784 acpi_ex_out_integer("system_level",
785 obj_desc
->power_resource
.system_level
);
786 acpi_ex_out_integer("resource_order",
787 obj_desc
->power_resource
.resource_order
);
788 acpi_ex_out_pointer("system_notify",
789 obj_desc
->power_resource
.system_notify
);
790 acpi_ex_out_pointer("device_notify",
791 obj_desc
->power_resource
.device_notify
);
794 case ACPI_TYPE_PROCESSOR
:
796 acpi_ex_out_integer("Processor ID",
797 obj_desc
->processor
.proc_id
);
798 acpi_ex_out_integer("Length", obj_desc
->processor
.length
);
799 acpi_ex_out_address("Address",
800 (acpi_physical_address
) obj_desc
->processor
.
802 acpi_ex_out_pointer("system_notify",
803 obj_desc
->processor
.system_notify
);
804 acpi_ex_out_pointer("device_notify",
805 obj_desc
->processor
.device_notify
);
806 acpi_ex_out_pointer("Handler", obj_desc
->processor
.handler
);
809 case ACPI_TYPE_THERMAL
:
811 acpi_ex_out_pointer("system_notify",
812 obj_desc
->thermal_zone
.system_notify
);
813 acpi_ex_out_pointer("device_notify",
814 obj_desc
->thermal_zone
.device_notify
);
815 acpi_ex_out_pointer("Handler", obj_desc
->thermal_zone
.handler
);
818 case ACPI_TYPE_BUFFER_FIELD
:
819 case ACPI_TYPE_LOCAL_REGION_FIELD
:
820 case ACPI_TYPE_LOCAL_BANK_FIELD
:
821 case ACPI_TYPE_LOCAL_INDEX_FIELD
:
823 acpi_ex_out_integer("field_flags",
824 obj_desc
->common_field
.field_flags
);
825 acpi_ex_out_integer("access_byte_width",
826 obj_desc
->common_field
.access_byte_width
);
827 acpi_ex_out_integer("bit_length",
828 obj_desc
->common_field
.bit_length
);
829 acpi_ex_out_integer("fld_bit_offset",
830 obj_desc
->common_field
.
831 start_field_bit_offset
);
832 acpi_ex_out_integer("base_byte_offset",
833 obj_desc
->common_field
.base_byte_offset
);
834 acpi_ex_out_pointer("parent_node", obj_desc
->common_field
.node
);
836 switch (ACPI_GET_OBJECT_TYPE(obj_desc
)) {
837 case ACPI_TYPE_BUFFER_FIELD
:
838 acpi_ex_out_pointer("buffer_obj",
839 obj_desc
->buffer_field
.buffer_obj
);
842 case ACPI_TYPE_LOCAL_REGION_FIELD
:
843 acpi_ex_out_pointer("region_obj",
844 obj_desc
->field
.region_obj
);
847 case ACPI_TYPE_LOCAL_BANK_FIELD
:
848 acpi_ex_out_integer("Value",
849 obj_desc
->bank_field
.value
);
850 acpi_ex_out_pointer("region_obj",
851 obj_desc
->bank_field
.region_obj
);
852 acpi_ex_out_pointer("bank_obj",
853 obj_desc
->bank_field
.bank_obj
);
856 case ACPI_TYPE_LOCAL_INDEX_FIELD
:
857 acpi_ex_out_integer("Value",
858 obj_desc
->index_field
.value
);
859 acpi_ex_out_pointer("Index",
860 obj_desc
->index_field
.index_obj
);
861 acpi_ex_out_pointer("Data",
862 obj_desc
->index_field
.data_obj
);
866 /* All object types covered above */
871 case ACPI_TYPE_LOCAL_REFERENCE
:
873 acpi_ex_out_integer("target_type",
874 obj_desc
->reference
.target_type
);
875 acpi_ex_out_string("Opcode",
876 (acpi_ps_get_opcode_info
877 (obj_desc
->reference
.opcode
))->name
);
878 acpi_ex_out_integer("Offset", obj_desc
->reference
.offset
);
879 acpi_ex_out_pointer("obj_desc", obj_desc
->reference
.object
);
880 acpi_ex_out_pointer("Node", obj_desc
->reference
.node
);
881 acpi_ex_out_pointer("Where", obj_desc
->reference
.where
);
883 acpi_ex_dump_reference(obj_desc
);
886 case ACPI_TYPE_LOCAL_ADDRESS_HANDLER
:
888 acpi_ex_out_integer("space_id",
889 obj_desc
->address_space
.space_id
);
890 acpi_ex_out_pointer("Next", obj_desc
->address_space
.next
);
891 acpi_ex_out_pointer("region_list",
892 obj_desc
->address_space
.region_list
);
893 acpi_ex_out_pointer("Node", obj_desc
->address_space
.node
);
894 acpi_ex_out_pointer("Context", obj_desc
->address_space
.context
);
897 case ACPI_TYPE_LOCAL_NOTIFY
:
899 acpi_ex_out_pointer("Node", obj_desc
->notify
.node
);
900 acpi_ex_out_pointer("Context", obj_desc
->notify
.context
);
903 case ACPI_TYPE_LOCAL_ALIAS
:
904 case ACPI_TYPE_LOCAL_METHOD_ALIAS
:
905 case ACPI_TYPE_LOCAL_EXTRA
:
906 case ACPI_TYPE_LOCAL_DATA
:
910 ("ex_dump_object_descriptor: Display not implemented for object type %s\n",
911 acpi_ut_get_object_type_name(obj_desc
));
918 #endif /* ACPI_FUTURE_USAGE */