1 /******************************************************************************
2  *
3  * Module Name: exdump - Interpreter debug output routines
4  *
5  *****************************************************************************/
6 
7 /*
8  * Copyright (C) 2000 - 2004, R. Byron Moore
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/acpi.h>
46 #include <acpi/acinterp.h>
47 #include <acpi/amlcode.h>
48 #include <acpi/acnamesp.h>
49 #include <acpi/acparser.h>
50 
51 #define _COMPONENT          ACPI_EXECUTER
52 	 ACPI_MODULE_NAME    ("exdump")
53 
54 
55 /*
56  * The following routines are used for debug output only
57  */
58 
59 #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER)
60 
61 /*****************************************************************************
62  *
63  * FUNCTION:    acpi_ex_dump_operand
64  *
65  * PARAMETERS:  *obj_desc         - Pointer to entry to be dumped
66  *
67  * RETURN:      Status
68  *
69  * DESCRIPTION: Dump an operand object
70  *
71  ****************************************************************************/
72 
73 void
acpi_ex_dump_operand(union acpi_operand_object * obj_desc)74 acpi_ex_dump_operand (
75 	union acpi_operand_object       *obj_desc)
76 {
77 	u8                              *buf = NULL;
78 	u32                             length;
79 	union acpi_operand_object       **element;
80 	u16                             element_index;
81 
82 
83 	ACPI_FUNCTION_NAME ("ex_dump_operand")
84 
85 
86 	if (!((ACPI_LV_EXEC & acpi_dbg_level) && (_COMPONENT & acpi_dbg_layer))) {
87 		return;
88 	}
89 
90 	if (!obj_desc) {
91 		/*
92 		 * This usually indicates that something serious is wrong
93 		 */
94 		acpi_os_printf ("Null Object Descriptor\n");
95 		return;
96 	}
97 
98 	if (ACPI_GET_DESCRIPTOR_TYPE (obj_desc) == ACPI_DESC_TYPE_NAMED) {
99 		ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p is a NS Node: ", obj_desc));
100 		ACPI_DUMP_ENTRY (obj_desc, ACPI_LV_EXEC);
101 		return;
102 	}
103 
104 	if (ACPI_GET_DESCRIPTOR_TYPE (obj_desc) != ACPI_DESC_TYPE_OPERAND) {
105 		ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
106 				"%p is not a node or operand object: [%s]\n",
107 				obj_desc, acpi_ut_get_descriptor_name (obj_desc)));
108 		ACPI_DUMP_BUFFER (obj_desc, sizeof (union acpi_operand_object));
109 		return;
110 	}
111 
112 	/* obj_desc is a valid object */
113 
114 	ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "%p ", obj_desc));
115 
116 	switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {
117 	case ACPI_TYPE_LOCAL_REFERENCE:
118 
119 		switch (obj_desc->reference.opcode) {
120 		case AML_DEBUG_OP:
121 
122 			acpi_os_printf ("Reference: Debug\n");
123 			break;
124 
125 
126 		case AML_NAME_OP:
127 
128 			ACPI_DUMP_PATHNAME (obj_desc->reference.object, "Reference: Name: ",
129 					  ACPI_LV_INFO, _COMPONENT);
130 			ACPI_DUMP_ENTRY (obj_desc->reference.object, ACPI_LV_INFO);
131 			break;
132 
133 
134 		case AML_INDEX_OP:
135 
136 			acpi_os_printf ("Reference: Index %p\n",
137 					 obj_desc->reference.object);
138 			break;
139 
140 
141 		case AML_REF_OF_OP:
142 
143 			acpi_os_printf ("Reference: (ref_of) %p\n",
144 					 obj_desc->reference.object);
145 			break;
146 
147 
148 		case AML_ARG_OP:
149 
150 			acpi_os_printf ("Reference: Arg%d",
151 					 obj_desc->reference.offset);
152 
153 			if (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_INTEGER) {
154 				/* Value is an Integer */
155 
156 				acpi_os_printf (" value is [%8.8X%8.8x]",
157 						 ACPI_FORMAT_UINT64 (obj_desc->integer.value));
158 			}
159 
160 			acpi_os_printf ("\n");
161 			break;
162 
163 
164 		case AML_LOCAL_OP:
165 
166 			acpi_os_printf ("Reference: Local%d",
167 					 obj_desc->reference.offset);
168 
169 			if (ACPI_GET_OBJECT_TYPE (obj_desc) == ACPI_TYPE_INTEGER) {
170 
171 				/* Value is an Integer */
172 
173 				acpi_os_printf (" value is [%8.8X%8.8x]",
174 						 ACPI_FORMAT_UINT64 (obj_desc->integer.value));
175 			}
176 
177 			acpi_os_printf ("\n");
178 			break;
179 
180 
181 		case AML_INT_NAMEPATH_OP:
182 
183 			acpi_os_printf ("Reference.Node->Name %X\n",
184 					 obj_desc->reference.node->name.integer);
185 			break;
186 
187 
188 		default:
189 
190 			/* Unknown opcode */
191 
192 			acpi_os_printf ("Unknown Reference opcode=%X\n",
193 				obj_desc->reference.opcode);
194 			break;
195 
196 		}
197 
198 		break;
199 
200 
201 	case ACPI_TYPE_BUFFER:
202 
203 		acpi_os_printf ("Buffer len %X @ %p \n",
204 				 obj_desc->buffer.length,
205 				 obj_desc->buffer.pointer);
206 
207 		length = obj_desc->buffer.length;
208 
209 		if (length > 64) {
210 			length = 64;
211 		}
212 
213 		/* Debug only -- dump the buffer contents */
214 
215 		if (obj_desc->buffer.pointer) {
216 			acpi_os_printf ("Buffer Contents: ");
217 
218 			for (buf = obj_desc->buffer.pointer; length--; ++buf) {
219 				acpi_os_printf (" %02x", *buf);
220 			}
221 			acpi_os_printf ("\n");
222 		}
223 
224 		break;
225 
226 
227 	case ACPI_TYPE_INTEGER:
228 
229 		acpi_os_printf ("Integer %8.8X%8.8X\n",
230 				 ACPI_FORMAT_UINT64 (obj_desc->integer.value));
231 		break;
232 
233 
234 	case ACPI_TYPE_PACKAGE:
235 
236 		acpi_os_printf ("Package count %X @ %p\n",
237 				 obj_desc->package.count, obj_desc->package.elements);
238 
239 		/*
240 		 * If elements exist, package vector pointer is valid,
241 		 * and debug_level exceeds 1, dump package's elements.
242 		 */
243 		if (obj_desc->package.count &&
244 			obj_desc->package.elements &&
245 			acpi_dbg_level > 1) {
246 			for (element_index = 0, element = obj_desc->package.elements;
247 				  element_index < obj_desc->package.count;
248 				  ++element_index, ++element) {
249 				acpi_ex_dump_operand (*element);
250 			}
251 		}
252 		acpi_os_printf ("\n");
253 		break;
254 
255 
256 	case ACPI_TYPE_REGION:
257 
258 		acpi_os_printf ("Region %s (%X)",
259 			acpi_ut_get_region_name (obj_desc->region.space_id),
260 			obj_desc->region.space_id);
261 
262 		/*
263 		 * If the address and length have not been evaluated,
264 		 * don't print them.
265 		 */
266 		if (!(obj_desc->region.flags & AOPOBJ_DATA_VALID)) {
267 			acpi_os_printf ("\n");
268 		}
269 		else {
270 			acpi_os_printf (" base %8.8X%8.8X Length %X\n",
271 				ACPI_FORMAT_UINT64 (obj_desc->region.address),
272 				obj_desc->region.length);
273 		}
274 		break;
275 
276 
277 	case ACPI_TYPE_STRING:
278 
279 		acpi_os_printf ("String length %X @ %p ",
280 				 obj_desc->string.length, obj_desc->string.pointer);
281 		acpi_ut_print_string (obj_desc->string.pointer, ACPI_UINT8_MAX);
282 		acpi_os_printf ("\n");
283 		break;
284 
285 
286 	case ACPI_TYPE_LOCAL_BANK_FIELD:
287 
288 		acpi_os_printf ("bank_field\n");
289 		break;
290 
291 
292 	case ACPI_TYPE_LOCAL_REGION_FIELD:
293 
294 		acpi_os_printf (
295 			"region_field: Bits=%X acc_width=%X Lock=%X Update=%X at byte=%X bit=%X of below:\n",
296 			obj_desc->field.bit_length, obj_desc->field.access_byte_width,
297 			obj_desc->field.field_flags & AML_FIELD_LOCK_RULE_MASK,
298 			obj_desc->field.field_flags & AML_FIELD_UPDATE_RULE_MASK,
299 			obj_desc->field.base_byte_offset, obj_desc->field.start_field_bit_offset);
300 		ACPI_DUMP_STACK_ENTRY (obj_desc->field.region_obj);
301 		break;
302 
303 
304 	case ACPI_TYPE_LOCAL_INDEX_FIELD:
305 
306 		acpi_os_printf ("index_field\n");
307 		break;
308 
309 
310 	case ACPI_TYPE_BUFFER_FIELD:
311 
312 		acpi_os_printf (
313 			"buffer_field: %X bits at byte %X bit %X of \n",
314 			obj_desc->buffer_field.bit_length, obj_desc->buffer_field.base_byte_offset,
315 			obj_desc->buffer_field.start_field_bit_offset);
316 
317 		if (!obj_desc->buffer_field.buffer_obj) {
318 			ACPI_DEBUG_PRINT ((ACPI_DB_EXEC, "*NULL* \n"));
319 		}
320 		else if (ACPI_GET_OBJECT_TYPE (obj_desc->buffer_field.buffer_obj) != ACPI_TYPE_BUFFER) {
321 			acpi_os_printf ("*not a Buffer* \n");
322 		}
323 		else {
324 			ACPI_DUMP_STACK_ENTRY (obj_desc->buffer_field.buffer_obj);
325 		}
326 
327 		break;
328 
329 
330 	case ACPI_TYPE_EVENT:
331 
332 		acpi_os_printf ("Event\n");
333 		break;
334 
335 
336 	case ACPI_TYPE_METHOD:
337 
338 		acpi_os_printf (
339 			"Method(%X) @ %p:%X\n",
340 			obj_desc->method.param_count,
341 			obj_desc->method.aml_start, obj_desc->method.aml_length);
342 		break;
343 
344 
345 	case ACPI_TYPE_MUTEX:
346 
347 		acpi_os_printf ("Mutex\n");
348 		break;
349 
350 
351 	case ACPI_TYPE_DEVICE:
352 
353 		acpi_os_printf ("Device\n");
354 		break;
355 
356 
357 	case ACPI_TYPE_POWER:
358 
359 		acpi_os_printf ("Power\n");
360 		break;
361 
362 
363 	case ACPI_TYPE_PROCESSOR:
364 
365 		acpi_os_printf ("Processor\n");
366 		break;
367 
368 
369 	case ACPI_TYPE_THERMAL:
370 
371 		acpi_os_printf ("Thermal\n");
372 		break;
373 
374 
375 	default:
376 		/* Unknown Type */
377 
378 		acpi_os_printf ("Unknown Type %X\n", ACPI_GET_OBJECT_TYPE (obj_desc));
379 		break;
380 	}
381 
382 	return;
383 }
384 
385 
386 /*****************************************************************************
387  *
388  * FUNCTION:    acpi_ex_dump_operands
389  *
390  * PARAMETERS:  interpreter_mode     - Load or Exec
391  *              *Ident              - Identification
392  *              num_levels          - # of stack entries to dump above line
393  *              *Note               - Output notation
394  *
395  * DESCRIPTION: Dump the object stack
396  *
397  ****************************************************************************/
398 
399 void
acpi_ex_dump_operands(union acpi_operand_object ** operands,acpi_interpreter_mode interpreter_mode,char * ident,u32 num_levels,char * note,char * module_name,u32 line_number)400 acpi_ex_dump_operands (
401 	union acpi_operand_object       **operands,
402 	acpi_interpreter_mode           interpreter_mode,
403 	char                            *ident,
404 	u32                             num_levels,
405 	char                            *note,
406 	char                            *module_name,
407 	u32                             line_number)
408 {
409 	acpi_native_uint                i;
410 	union acpi_operand_object       **obj_desc;
411 
412 
413 	ACPI_FUNCTION_NAME ("ex_dump_operands");
414 
415 
416 	if (!ident) {
417 		ident = "?";
418 	}
419 
420 	if (!note) {
421 		note = "?";
422 	}
423 
424 	ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
425 		"************* Operand Stack Contents (Opcode [%s], %d Operands)\n",
426 		ident, num_levels));
427 
428 	if (num_levels == 0) {
429 		num_levels = 1;
430 	}
431 
432 	/* Dump the operand stack starting at the top */
433 
434 	for (i = 0; num_levels > 0; i--, num_levels--) {
435 		obj_desc = &operands[i];
436 		acpi_ex_dump_operand (*obj_desc);
437 	}
438 
439 	ACPI_DEBUG_PRINT ((ACPI_DB_EXEC,
440 		"************* Stack dump from %s(%d), %s\n",
441 		module_name, line_number, note));
442 	return;
443 }
444 
445 
446 /*****************************************************************************
447  *
448  * FUNCTION:    acpi_ex_out*
449  *
450  * PARAMETERS:  Title               - Descriptive text
451  *              Value               - Value to be displayed
452  *
453  * DESCRIPTION: Object dump output formatting functions.  These functions
454  *              reduce the number of format strings required and keeps them
455  *              all in one place for easy modification.
456  *
457  ****************************************************************************/
458 
459 void
acpi_ex_out_string(char * title,char * value)460 acpi_ex_out_string (
461 	char                            *title,
462 	char                            *value)
463 {
464 	acpi_os_printf ("%20s : %s\n", title, value);
465 }
466 
467 void
acpi_ex_out_pointer(char * title,void * value)468 acpi_ex_out_pointer (
469 	char                            *title,
470 	void                            *value)
471 {
472 	acpi_os_printf ("%20s : %p\n", title, value);
473 }
474 
475 void
acpi_ex_out_integer(char * title,u32 value)476 acpi_ex_out_integer (
477 	char                            *title,
478 	u32                             value)
479 {
480 	acpi_os_printf ("%20s : %X\n", title, value);
481 }
482 
483 void
acpi_ex_out_address(char * title,acpi_physical_address value)484 acpi_ex_out_address (
485 	char                            *title,
486 	acpi_physical_address           value)
487 {
488 
489 #if ACPI_MACHINE_WIDTH == 16
490 	acpi_os_printf ("%20s : %p\n", title, value);
491 #else
492 	acpi_os_printf ("%20s : %8.8X%8.8X\n", title,
493 			 ACPI_FORMAT_UINT64 (value));
494 #endif
495 }
496 
497 
498 /*****************************************************************************
499  *
500  * FUNCTION:    acpi_ex_dump_node
501  *
502  * PARAMETERS:  *Node           - Descriptor to dump
503  *              Flags               - Force display
504  *
505  * DESCRIPTION: Dumps the members of the given.Node
506  *
507  ****************************************************************************/
508 
509 void
acpi_ex_dump_node(struct acpi_namespace_node * node,u32 flags)510 acpi_ex_dump_node (
511 	struct acpi_namespace_node      *node,
512 	u32                             flags)
513 {
514 
515 	ACPI_FUNCTION_ENTRY ();
516 
517 
518 	if (!flags) {
519 		if (!((ACPI_LV_OBJECTS & acpi_dbg_level) && (_COMPONENT & acpi_dbg_layer))) {
520 			return;
521 		}
522 	}
523 
524 	acpi_os_printf ("%20s : %4.4s\n",     "Name", acpi_ut_get_node_name (node));
525 	acpi_ex_out_string ("Type",           acpi_ut_get_type_name (node->type));
526 	acpi_ex_out_integer ("Flags",         node->flags);
527 	acpi_ex_out_integer ("Owner Id",      node->owner_id);
528 	acpi_ex_out_integer ("Reference Count", node->reference_count);
529 	acpi_ex_out_pointer ("Attached Object", acpi_ns_get_attached_object (node));
530 	acpi_ex_out_pointer ("child_list",    node->child);
531 	acpi_ex_out_pointer ("next_peer",     node->peer);
532 	acpi_ex_out_pointer ("Parent",        acpi_ns_get_parent_node (node));
533 }
534 
535 
536 /*****************************************************************************
537  *
538  * FUNCTION:    acpi_ex_dump_object_descriptor
539  *
540  * PARAMETERS:  *Object             - Descriptor to dump
541  *              Flags               - Force display
542  *
543  * DESCRIPTION: Dumps the members of the object descriptor given.
544  *
545  ****************************************************************************/
546 
547 void
acpi_ex_dump_object_descriptor(union acpi_operand_object * obj_desc,u32 flags)548 acpi_ex_dump_object_descriptor (
549 	union acpi_operand_object       *obj_desc,
550 	u32                             flags)
551 {
552 	u32                             i;
553 
554 
555 	ACPI_FUNCTION_TRACE ("ex_dump_object_descriptor");
556 
557 
558 	if (!flags) {
559 		if (!((ACPI_LV_OBJECTS & acpi_dbg_level) && (_COMPONENT & acpi_dbg_layer))) {
560 			return_VOID;
561 		}
562 	}
563 
564 	if (ACPI_GET_DESCRIPTOR_TYPE (obj_desc) == ACPI_DESC_TYPE_NAMED) {
565 		acpi_ex_dump_node ((struct acpi_namespace_node *) obj_desc, flags);
566 		acpi_os_printf ("\nAttached Object (%p):\n", ((struct acpi_namespace_node *) obj_desc)->object);
567 		acpi_ex_dump_object_descriptor (((struct acpi_namespace_node *) obj_desc)->object, flags);
568 		return;
569 	}
570 
571 	if (ACPI_GET_DESCRIPTOR_TYPE (obj_desc) != ACPI_DESC_TYPE_OPERAND) {
572 		acpi_os_printf ("ex_dump_object_descriptor: %p is not an ACPI operand object: [%s]\n",
573 				obj_desc, acpi_ut_get_descriptor_name (obj_desc));
574 		return_VOID;
575 	}
576 
577 	/* Common Fields */
578 
579 	acpi_ex_out_string ("Type",          acpi_ut_get_object_type_name (obj_desc));
580 	acpi_ex_out_integer ("Reference Count", obj_desc->common.reference_count);
581 	acpi_ex_out_integer ("Flags",        obj_desc->common.flags);
582 
583 	/* Object-specific Fields */
584 
585 	switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {
586 	case ACPI_TYPE_INTEGER:
587 
588 		acpi_os_printf ("%20s : %8.8X%8.8X\n", "Value",
589 				ACPI_FORMAT_UINT64 (obj_desc->integer.value));
590 		break;
591 
592 
593 	case ACPI_TYPE_STRING:
594 
595 		acpi_ex_out_integer ("Length",       obj_desc->string.length);
596 
597 		acpi_os_printf ("%20s : %p ", "Pointer", obj_desc->string.pointer);
598 		acpi_ut_print_string (obj_desc->string.pointer, ACPI_UINT8_MAX);
599 		acpi_os_printf ("\n");
600 		break;
601 
602 
603 	case ACPI_TYPE_BUFFER:
604 
605 		acpi_ex_out_integer ("Length",       obj_desc->buffer.length);
606 		acpi_ex_out_pointer ("Pointer",      obj_desc->buffer.pointer);
607 		ACPI_DUMP_BUFFER (obj_desc->buffer.pointer, obj_desc->buffer.length);
608 		break;
609 
610 
611 	case ACPI_TYPE_PACKAGE:
612 
613 		acpi_ex_out_integer ("Flags",        obj_desc->package.flags);
614 		acpi_ex_out_integer ("Count",        obj_desc->package.count);
615 		acpi_ex_out_pointer ("Elements",     obj_desc->package.elements);
616 
617 		/* Dump the package contents */
618 
619 		if (obj_desc->package.count > 0) {
620 			acpi_os_printf ("\nPackage Contents:\n");
621 			for (i = 0; i < obj_desc->package.count; i++) {
622 				acpi_os_printf ("[%.3d] %p", i, obj_desc->package.elements[i]);
623 				if (obj_desc->package.elements[i]) {
624 					acpi_os_printf (" %s", acpi_ut_get_object_type_name (obj_desc->package.elements[i]));
625 				}
626 				acpi_os_printf ("\n");
627 			}
628 		}
629 		break;
630 
631 
632 	case ACPI_TYPE_DEVICE:
633 
634 		acpi_ex_out_pointer ("Handler",     obj_desc->device.handler);
635 		acpi_ex_out_pointer ("system_notify", obj_desc->device.system_notify);
636 		acpi_ex_out_pointer ("device_notify", obj_desc->device.device_notify);
637 		break;
638 
639 
640 	case ACPI_TYPE_EVENT:
641 
642 		acpi_ex_out_pointer ("Semaphore",    obj_desc->event.semaphore);
643 		break;
644 
645 
646 	case ACPI_TYPE_METHOD:
647 
648 		acpi_ex_out_integer ("param_count",  obj_desc->method.param_count);
649 		acpi_ex_out_integer ("Concurrency",  obj_desc->method.concurrency);
650 		acpi_ex_out_pointer ("Semaphore",    obj_desc->method.semaphore);
651 		acpi_ex_out_integer ("owning_id",    obj_desc->method.owning_id);
652 		acpi_ex_out_integer ("aml_length",   obj_desc->method.aml_length);
653 		acpi_ex_out_pointer ("aml_start",    obj_desc->method.aml_start);
654 		break;
655 
656 
657 	case ACPI_TYPE_MUTEX:
658 
659 		acpi_ex_out_integer ("sync_level",   obj_desc->mutex.sync_level);
660 		acpi_ex_out_pointer ("owner_thread", obj_desc->mutex.owner_thread);
661 		acpi_ex_out_integer ("acquisition_depth",obj_desc->mutex.acquisition_depth);
662 		acpi_ex_out_pointer ("Semaphore",    obj_desc->mutex.semaphore);
663 		break;
664 
665 
666 	case ACPI_TYPE_REGION:
667 
668 		acpi_ex_out_integer ("space_id",     obj_desc->region.space_id);
669 		acpi_ex_out_integer ("Flags",        obj_desc->region.flags);
670 		acpi_ex_out_address ("Address",      obj_desc->region.address);
671 		acpi_ex_out_integer ("Length",       obj_desc->region.length);
672 		acpi_ex_out_pointer ("Handler",      obj_desc->region.handler);
673 		acpi_ex_out_pointer ("Next",         obj_desc->region.next);
674 		break;
675 
676 
677 	case ACPI_TYPE_POWER:
678 
679 		acpi_ex_out_integer ("system_level", obj_desc->power_resource.system_level);
680 		acpi_ex_out_integer ("resource_order", obj_desc->power_resource.resource_order);
681 		acpi_ex_out_pointer ("system_notify", obj_desc->power_resource.system_notify);
682 		acpi_ex_out_pointer ("device_notify", obj_desc->power_resource.device_notify);
683 		break;
684 
685 
686 	case ACPI_TYPE_PROCESSOR:
687 
688 		acpi_ex_out_integer ("Processor ID", obj_desc->processor.proc_id);
689 		acpi_ex_out_integer ("Length",       obj_desc->processor.length);
690 		acpi_ex_out_address ("Address",      (acpi_physical_address) obj_desc->processor.address);
691 		acpi_ex_out_pointer ("system_notify", obj_desc->processor.system_notify);
692 		acpi_ex_out_pointer ("device_notify", obj_desc->processor.device_notify);
693 		acpi_ex_out_pointer ("Handler",      obj_desc->processor.handler);
694 		break;
695 
696 
697 	case ACPI_TYPE_THERMAL:
698 
699 		acpi_ex_out_pointer ("system_notify", obj_desc->thermal_zone.system_notify);
700 		acpi_ex_out_pointer ("device_notify", obj_desc->thermal_zone.device_notify);
701 		acpi_ex_out_pointer ("Handler",      obj_desc->thermal_zone.handler);
702 		break;
703 
704 
705 	case ACPI_TYPE_BUFFER_FIELD:
706 	case ACPI_TYPE_LOCAL_REGION_FIELD:
707 	case ACPI_TYPE_LOCAL_BANK_FIELD:
708 	case ACPI_TYPE_LOCAL_INDEX_FIELD:
709 
710 		acpi_ex_out_integer ("field_flags",  obj_desc->common_field.field_flags);
711 		acpi_ex_out_integer ("access_byte_width", obj_desc->common_field.access_byte_width);
712 		acpi_ex_out_integer ("bit_length",   obj_desc->common_field.bit_length);
713 		acpi_ex_out_integer ("fld_bit_offset", obj_desc->common_field.start_field_bit_offset);
714 		acpi_ex_out_integer ("base_byte_offset", obj_desc->common_field.base_byte_offset);
715 		acpi_ex_out_integer ("datum_valid_bits", obj_desc->common_field.datum_valid_bits);
716 		acpi_ex_out_integer ("end_fld_valid_bits", obj_desc->common_field.end_field_valid_bits);
717 		acpi_ex_out_integer ("end_buf_valid_bits", obj_desc->common_field.end_buffer_valid_bits);
718 		acpi_ex_out_pointer ("parent_node",  obj_desc->common_field.node);
719 
720 		switch (ACPI_GET_OBJECT_TYPE (obj_desc)) {
721 		case ACPI_TYPE_BUFFER_FIELD:
722 			acpi_ex_out_pointer ("buffer_obj",   obj_desc->buffer_field.buffer_obj);
723 			break;
724 
725 		case ACPI_TYPE_LOCAL_REGION_FIELD:
726 			acpi_ex_out_pointer ("region_obj",   obj_desc->field.region_obj);
727 			break;
728 
729 		case ACPI_TYPE_LOCAL_BANK_FIELD:
730 			acpi_ex_out_integer ("Value",        obj_desc->bank_field.value);
731 			acpi_ex_out_pointer ("region_obj",   obj_desc->bank_field.region_obj);
732 			acpi_ex_out_pointer ("bank_obj",     obj_desc->bank_field.bank_obj);
733 			break;
734 
735 		case ACPI_TYPE_LOCAL_INDEX_FIELD:
736 			acpi_ex_out_integer ("Value",        obj_desc->index_field.value);
737 			acpi_ex_out_pointer ("Index",        obj_desc->index_field.index_obj);
738 			acpi_ex_out_pointer ("Data",         obj_desc->index_field.data_obj);
739 			break;
740 
741 		default:
742 			/* All object types covered above */
743 			break;
744 		}
745 		break;
746 
747 
748 	case ACPI_TYPE_LOCAL_REFERENCE:
749 
750 		acpi_ex_out_integer ("target_type",  obj_desc->reference.target_type);
751 		acpi_ex_out_string ("Opcode",        (acpi_ps_get_opcode_info (obj_desc->reference.opcode))->name);
752 		acpi_ex_out_integer ("Offset",       obj_desc->reference.offset);
753 		acpi_ex_out_pointer ("obj_desc",     obj_desc->reference.object);
754 		acpi_ex_out_pointer ("Node",         obj_desc->reference.node);
755 		acpi_ex_out_pointer ("Where",        obj_desc->reference.where);
756 		break;
757 
758 
759 	case ACPI_TYPE_LOCAL_ADDRESS_HANDLER:
760 
761 		acpi_ex_out_integer ("space_id",     obj_desc->address_space.space_id);
762 		acpi_ex_out_pointer ("Next",         obj_desc->address_space.next);
763 		acpi_ex_out_pointer ("region_list",  obj_desc->address_space.region_list);
764 		acpi_ex_out_pointer ("Node",         obj_desc->address_space.node);
765 		acpi_ex_out_pointer ("Context",      obj_desc->address_space.context);
766 		break;
767 
768 
769 	case ACPI_TYPE_LOCAL_NOTIFY:
770 
771 		acpi_ex_out_pointer ("Node",         obj_desc->notify.node);
772 		acpi_ex_out_pointer ("Context",      obj_desc->notify.context);
773 		break;
774 
775 
776 	case ACPI_TYPE_LOCAL_ALIAS:
777 	case ACPI_TYPE_LOCAL_METHOD_ALIAS:
778 	case ACPI_TYPE_LOCAL_EXTRA:
779 	case ACPI_TYPE_LOCAL_DATA:
780 	default:
781 
782 		acpi_os_printf ("ex_dump_object_descriptor: Display not implemented for object type %s\n",
783 			acpi_ut_get_object_type_name (obj_desc));
784 		break;
785 	}
786 
787 	return_VOID;
788 }
789 
790 #endif
791 
792