diff options
Diffstat (limited to 'drivers/acpi/executer/exdump.c')
-rw-r--r-- | drivers/acpi/executer/exdump.c | 174 |
1 files changed, 152 insertions, 22 deletions
diff --git a/drivers/acpi/executer/exdump.c b/drivers/acpi/executer/exdump.c index ae6cad85e015..7007abb6051e 100644 --- a/drivers/acpi/executer/exdump.c +++ b/drivers/acpi/executer/exdump.c | |||
@@ -80,6 +80,16 @@ acpi_ex_out_address ( | |||
80 | acpi_physical_address value); | 80 | acpi_physical_address value); |
81 | #endif /* ACPI_FUTURE_USAGE */ | 81 | #endif /* ACPI_FUTURE_USAGE */ |
82 | 82 | ||
83 | static void | ||
84 | acpi_ex_dump_reference ( | ||
85 | union acpi_operand_object *obj_desc); | ||
86 | |||
87 | static void | ||
88 | acpi_ex_dump_package ( | ||
89 | union acpi_operand_object *obj_desc, | ||
90 | u32 level, | ||
91 | u32 index); | ||
92 | |||
83 | 93 | ||
84 | /******************************************************************************* | 94 | /******************************************************************************* |
85 | * | 95 | * |
@@ -508,7 +518,7 @@ acpi_ex_out_integer ( | |||
508 | char *title, | 518 | char *title, |
509 | u32 value) | 519 | u32 value) |
510 | { | 520 | { |
511 | acpi_os_printf ("%20s : %X\n", title, value); | 521 | acpi_os_printf ("%20s : %.2X\n", title, value); |
512 | } | 522 | } |
513 | 523 | ||
514 | static void | 524 | static void |
@@ -565,9 +575,144 @@ acpi_ex_dump_node ( | |||
565 | 575 | ||
566 | /******************************************************************************* | 576 | /******************************************************************************* |
567 | * | 577 | * |
578 | * FUNCTION: acpi_ex_dump_reference | ||
579 | * | ||
580 | * PARAMETERS: Object - Descriptor to dump | ||
581 | * | ||
582 | * DESCRIPTION: Dumps a reference object | ||
583 | * | ||
584 | ******************************************************************************/ | ||
585 | |||
586 | static void | ||
587 | acpi_ex_dump_reference ( | ||
588 | union acpi_operand_object *obj_desc) | ||
589 | { | ||
590 | struct acpi_buffer ret_buf; | ||
591 | acpi_status status; | ||
592 | |||
593 | |||
594 | if (obj_desc->reference.opcode == AML_INT_NAMEPATH_OP) { | ||
595 | acpi_os_printf ("Named Object %p ", obj_desc->reference.node); | ||
596 | ret_buf.length = ACPI_ALLOCATE_LOCAL_BUFFER; | ||
597 | status = acpi_ns_handle_to_pathname (obj_desc->reference.node, &ret_buf); | ||
598 | if (ACPI_FAILURE (status)) { | ||
599 | acpi_os_printf ("Could not convert name to pathname\n"); | ||
600 | } | ||
601 | else { | ||
602 | acpi_os_printf ("%s\n", ret_buf.pointer); | ||
603 | ACPI_MEM_FREE (ret_buf.pointer); | ||
604 | } | ||
605 | } | ||
606 | else if (obj_desc->reference.object) { | ||
607 | acpi_os_printf ("\nReferenced Object: %p\n", obj_desc->reference.object); | ||
608 | } | ||
609 | } | ||
610 | |||
611 | |||
612 | /******************************************************************************* | ||
613 | * | ||
614 | * FUNCTION: acpi_ex_dump_package | ||
615 | * | ||
616 | * PARAMETERS: Object - Descriptor to dump | ||
617 | * Level - Indentation Level | ||
618 | * Index - Package index for this object | ||
619 | * | ||
620 | * DESCRIPTION: Dumps the elements of the package | ||
621 | * | ||
622 | ******************************************************************************/ | ||
623 | |||
624 | static void | ||
625 | acpi_ex_dump_package ( | ||
626 | union acpi_operand_object *obj_desc, | ||
627 | u32 level, | ||
628 | u32 index) | ||
629 | { | ||
630 | u32 i; | ||
631 | |||
632 | |||
633 | /* Indentation and index output */ | ||
634 | |||
635 | if (level > 0) { | ||
636 | for (i = 0; i < level; i++) { | ||
637 | acpi_os_printf (" "); | ||
638 | } | ||
639 | |||
640 | acpi_os_printf ("[%.2d] ", index); | ||
641 | } | ||
642 | |||
643 | acpi_os_printf ("%p ", obj_desc); | ||
644 | |||
645 | /* Null package elements are allowed */ | ||
646 | |||
647 | if (!obj_desc) { | ||
648 | acpi_os_printf ("[Null Object]\n"); | ||
649 | return; | ||
650 | } | ||
651 | |||
652 | /* Packages may only contain a few object types */ | ||
653 | |||
654 | switch (ACPI_GET_OBJECT_TYPE (obj_desc)) { | ||
655 | case ACPI_TYPE_INTEGER: | ||
656 | |||
657 | acpi_os_printf ("[Integer] = %8.8X%8.8X\n", | ||
658 | ACPI_FORMAT_UINT64 (obj_desc->integer.value)); | ||
659 | break; | ||
660 | |||
661 | |||
662 | case ACPI_TYPE_STRING: | ||
663 | |||
664 | acpi_os_printf ("[String] Value: "); | ||
665 | for (i = 0; i < obj_desc->string.length; i++) { | ||
666 | acpi_os_printf ("%c", obj_desc->string.pointer[i]); | ||
667 | } | ||
668 | acpi_os_printf ("\n"); | ||
669 | break; | ||
670 | |||
671 | |||
672 | case ACPI_TYPE_BUFFER: | ||
673 | |||
674 | acpi_os_printf ("[Buffer] Length %.2X = ", obj_desc->buffer.length); | ||
675 | if (obj_desc->buffer.length) { | ||
676 | acpi_ut_dump_buffer ((u8 *) obj_desc->buffer.pointer, | ||
677 | obj_desc->buffer.length, DB_DWORD_DISPLAY, _COMPONENT); | ||
678 | } | ||
679 | else { | ||
680 | acpi_os_printf ("\n"); | ||
681 | } | ||
682 | break; | ||
683 | |||
684 | |||
685 | case ACPI_TYPE_PACKAGE: | ||
686 | |||
687 | acpi_os_printf ("[Package] Contains %d Elements: \n", | ||
688 | obj_desc->package.count); | ||
689 | |||
690 | for (i = 0; i < obj_desc->package.count; i++) { | ||
691 | acpi_ex_dump_package (obj_desc->package.elements[i], level+1, i); | ||
692 | } | ||
693 | break; | ||
694 | |||
695 | |||
696 | case ACPI_TYPE_LOCAL_REFERENCE: | ||
697 | |||
698 | acpi_os_printf ("[Object Reference] "); | ||
699 | acpi_ex_dump_reference (obj_desc); | ||
700 | break; | ||
701 | |||
702 | |||
703 | default: | ||
704 | |||
705 | acpi_os_printf ("[Unknown Type] %X\n", ACPI_GET_OBJECT_TYPE (obj_desc)); | ||
706 | break; | ||
707 | } | ||
708 | } | ||
709 | |||
710 | |||
711 | /******************************************************************************* | ||
712 | * | ||
568 | * FUNCTION: acpi_ex_dump_object_descriptor | 713 | * FUNCTION: acpi_ex_dump_object_descriptor |
569 | * | 714 | * |
570 | * PARAMETERS: *Object - Descriptor to dump | 715 | * PARAMETERS: Object - Descriptor to dump |
571 | * Flags - Force display if TRUE | 716 | * Flags - Force display if TRUE |
572 | * | 717 | * |
573 | * DESCRIPTION: Dumps the members of the object descriptor given. | 718 | * DESCRIPTION: Dumps the members of the object descriptor given. |
@@ -579,9 +724,6 @@ acpi_ex_dump_object_descriptor ( | |||
579 | union acpi_operand_object *obj_desc, | 724 | union acpi_operand_object *obj_desc, |
580 | u32 flags) | 725 | u32 flags) |
581 | { | 726 | { |
582 | u32 i; | ||
583 | |||
584 | |||
585 | ACPI_FUNCTION_TRACE ("ex_dump_object_descriptor"); | 727 | ACPI_FUNCTION_TRACE ("ex_dump_object_descriptor"); |
586 | 728 | ||
587 | 729 | ||
@@ -648,22 +790,13 @@ acpi_ex_dump_object_descriptor ( | |||
648 | case ACPI_TYPE_PACKAGE: | 790 | case ACPI_TYPE_PACKAGE: |
649 | 791 | ||
650 | acpi_ex_out_integer ("Flags", obj_desc->package.flags); | 792 | acpi_ex_out_integer ("Flags", obj_desc->package.flags); |
651 | acpi_ex_out_integer ("Count", obj_desc->package.count); | 793 | acpi_ex_out_integer ("Elements", obj_desc->package.count); |
652 | acpi_ex_out_pointer ("Elements", obj_desc->package.elements); | 794 | acpi_ex_out_pointer ("Element List", obj_desc->package.elements); |
653 | 795 | ||
654 | /* Dump the package contents */ | 796 | /* Dump the package contents */ |
655 | 797 | ||
656 | if (obj_desc->package.count > 0) { | 798 | acpi_os_printf ("\nPackage Contents:\n"); |
657 | acpi_os_printf ("\nPackage Contents:\n"); | 799 | acpi_ex_dump_package (obj_desc, 0, 0); |
658 | for (i = 0; i < obj_desc->package.count; i++) { | ||
659 | acpi_os_printf ("[%.3d] %p", i, obj_desc->package.elements[i]); | ||
660 | if (obj_desc->package.elements[i]) { | ||
661 | acpi_os_printf (" %s", | ||
662 | acpi_ut_get_object_type_name (obj_desc->package.elements[i])); | ||
663 | } | ||
664 | acpi_os_printf ("\n"); | ||
665 | } | ||
666 | } | ||
667 | break; | 800 | break; |
668 | 801 | ||
669 | 802 | ||
@@ -790,10 +923,7 @@ acpi_ex_dump_object_descriptor ( | |||
790 | acpi_ex_out_pointer ("Node", obj_desc->reference.node); | 923 | acpi_ex_out_pointer ("Node", obj_desc->reference.node); |
791 | acpi_ex_out_pointer ("Where", obj_desc->reference.where); | 924 | acpi_ex_out_pointer ("Where", obj_desc->reference.where); |
792 | 925 | ||
793 | if (obj_desc->reference.object) { | 926 | acpi_ex_dump_reference (obj_desc); |
794 | acpi_os_printf ("\nReferenced Object:\n"); | ||
795 | acpi_ex_dump_object_descriptor (obj_desc->reference.object, flags); | ||
796 | } | ||
797 | break; | 927 | break; |
798 | 928 | ||
799 | 929 | ||