diff options
-rw-r--r-- | drivers/acpi/resources/rsaddr.c | 99 | ||||
-rw-r--r-- | drivers/acpi/resources/rscalc.c | 985 | ||||
-rw-r--r-- | drivers/acpi/resources/rsdump.c | 1284 | ||||
-rw-r--r-- | drivers/acpi/resources/rsio.c | 56 | ||||
-rw-r--r-- | drivers/acpi/resources/rsirq.c | 57 | ||||
-rw-r--r-- | drivers/acpi/resources/rslist.c | 533 | ||||
-rw-r--r-- | drivers/acpi/resources/rsmemory.c | 68 | ||||
-rw-r--r-- | drivers/acpi/resources/rsmisc.c | 234 | ||||
-rw-r--r-- | drivers/acpi/resources/rsxface.c | 8 | ||||
-rw-r--r-- | drivers/acpi/utilities/utmisc.c | 2 | ||||
-rw-r--r-- | drivers/acpi/utilities/utmutex.c | 4 | ||||
-rw-r--r-- | include/acpi/acconfig.h | 4 | ||||
-rw-r--r-- | include/acpi/acdisasm.h | 36 | ||||
-rw-r--r-- | include/acpi/aclocal.h | 23 | ||||
-rw-r--r-- | include/acpi/acresrc.h | 46 | ||||
-rw-r--r-- | include/acpi/actypes.h | 13 | ||||
-rw-r--r-- | include/acpi/amlresrc.h | 56 | ||||
-rw-r--r-- | include/acpi/platform/acenv.h | 1 |
18 files changed, 1701 insertions, 1808 deletions
diff --git a/drivers/acpi/resources/rsaddr.c b/drivers/acpi/resources/rsaddr.c index 23b54baa0cb2..798778261fb9 100644 --- a/drivers/acpi/resources/rsaddr.c +++ b/drivers/acpi/resources/rsaddr.c | |||
@@ -270,7 +270,7 @@ acpi_rs_address16_resource(u8 * byte_stream_buffer, | |||
270 | } | 270 | } |
271 | 271 | ||
272 | *bytes_consumed = temp16 + 3; | 272 | *bytes_consumed = temp16 + 3; |
273 | output_struct->id = ACPI_RSTYPE_ADDRESS16; | 273 | output_struct->type = ACPI_RSTYPE_ADDRESS16; |
274 | 274 | ||
275 | /* Get the Resource Type (Byte3) */ | 275 | /* Get the Resource Type (Byte3) */ |
276 | 276 | ||
@@ -400,7 +400,7 @@ acpi_rs_address16_resource(u8 * byte_stream_buffer, | |||
400 | * | 400 | * |
401 | * FUNCTION: acpi_rs_address16_stream | 401 | * FUNCTION: acpi_rs_address16_stream |
402 | * | 402 | * |
403 | * PARAMETERS: linked_list - Pointer to the resource linked list | 403 | * PARAMETERS: Resource - Pointer to the resource linked list |
404 | * output_buffer - Pointer to the user's return buffer | 404 | * output_buffer - Pointer to the user's return buffer |
405 | * bytes_consumed - Pointer to where the number of bytes | 405 | * bytes_consumed - Pointer to where the number of bytes |
406 | * used in the output_buffer is returned | 406 | * used in the output_buffer is returned |
@@ -413,7 +413,7 @@ acpi_rs_address16_resource(u8 * byte_stream_buffer, | |||
413 | ******************************************************************************/ | 413 | ******************************************************************************/ |
414 | 414 | ||
415 | acpi_status | 415 | acpi_status |
416 | acpi_rs_address16_stream(struct acpi_resource *linked_list, | 416 | acpi_rs_address16_stream(struct acpi_resource *resource, |
417 | u8 ** output_buffer, acpi_size * bytes_consumed) | 417 | u8 ** output_buffer, acpi_size * bytes_consumed) |
418 | { | 418 | { |
419 | u8 *buffer = *output_buffer; | 419 | u8 *buffer = *output_buffer; |
@@ -434,59 +434,56 @@ acpi_rs_address16_stream(struct acpi_resource *linked_list, | |||
434 | 434 | ||
435 | /* Set the Resource Type (Memory, Io, bus_number) */ | 435 | /* Set the Resource Type (Memory, Io, bus_number) */ |
436 | 436 | ||
437 | *buffer = (u8) (linked_list->data.address16.resource_type & 0x03); | 437 | *buffer = (u8) (resource->data.address16.resource_type & 0x03); |
438 | buffer += 1; | 438 | buffer += 1; |
439 | 439 | ||
440 | /* Set the general flags */ | 440 | /* Set the general flags */ |
441 | 441 | ||
442 | *buffer = acpi_rs_encode_general_flags(&linked_list->data); | 442 | *buffer = acpi_rs_encode_general_flags(&resource->data); |
443 | buffer += 1; | 443 | buffer += 1; |
444 | 444 | ||
445 | /* Set the type specific flags */ | 445 | /* Set the type specific flags */ |
446 | 446 | ||
447 | *buffer = acpi_rs_encode_specific_flags(&linked_list->data); | 447 | *buffer = acpi_rs_encode_specific_flags(&resource->data); |
448 | buffer += 1; | 448 | buffer += 1; |
449 | 449 | ||
450 | /* Set the address space granularity */ | 450 | /* Set the address space granularity */ |
451 | 451 | ||
452 | ACPI_MOVE_32_TO_16(buffer, &linked_list->data.address16.granularity); | 452 | ACPI_MOVE_32_TO_16(buffer, &resource->data.address16.granularity); |
453 | buffer += 2; | 453 | buffer += 2; |
454 | 454 | ||
455 | /* Set the address range minimum */ | 455 | /* Set the address range minimum */ |
456 | 456 | ||
457 | ACPI_MOVE_32_TO_16(buffer, | 457 | ACPI_MOVE_32_TO_16(buffer, &resource->data.address16.min_address_range); |
458 | &linked_list->data.address16.min_address_range); | ||
459 | buffer += 2; | 458 | buffer += 2; |
460 | 459 | ||
461 | /* Set the address range maximum */ | 460 | /* Set the address range maximum */ |
462 | 461 | ||
463 | ACPI_MOVE_32_TO_16(buffer, | 462 | ACPI_MOVE_32_TO_16(buffer, &resource->data.address16.max_address_range); |
464 | &linked_list->data.address16.max_address_range); | ||
465 | buffer += 2; | 463 | buffer += 2; |
466 | 464 | ||
467 | /* Set the address translation offset */ | 465 | /* Set the address translation offset */ |
468 | 466 | ||
469 | ACPI_MOVE_32_TO_16(buffer, | 467 | ACPI_MOVE_32_TO_16(buffer, |
470 | &linked_list->data.address16. | 468 | &resource->data.address16. |
471 | address_translation_offset); | 469 | address_translation_offset); |
472 | buffer += 2; | 470 | buffer += 2; |
473 | 471 | ||
474 | /* Set the address length */ | 472 | /* Set the address length */ |
475 | 473 | ||
476 | ACPI_MOVE_32_TO_16(buffer, &linked_list->data.address16.address_length); | 474 | ACPI_MOVE_32_TO_16(buffer, &resource->data.address16.address_length); |
477 | buffer += 2; | 475 | buffer += 2; |
478 | 476 | ||
479 | /* Resource Source Index and Resource Source are optional */ | 477 | /* Resource Source Index and Resource Source are optional */ |
480 | 478 | ||
481 | if (linked_list->data.address16.resource_source.string_length) { | 479 | if (resource->data.address16.resource_source.string_length) { |
482 | *buffer = | 480 | *buffer = (u8) resource->data.address16.resource_source.index; |
483 | (u8) linked_list->data.address16.resource_source.index; | ||
484 | buffer += 1; | 481 | buffer += 1; |
485 | 482 | ||
486 | /* Copy the resource_source string */ | 483 | /* Copy the resource_source string */ |
487 | 484 | ||
488 | ACPI_STRCPY((char *)buffer, | 485 | ACPI_STRCPY((char *)buffer, |
489 | linked_list->data.address16.resource_source. | 486 | resource->data.address16.resource_source. |
490 | string_ptr); | 487 | string_ptr); |
491 | 488 | ||
492 | /* | 489 | /* |
@@ -495,7 +492,7 @@ acpi_rs_address16_stream(struct acpi_resource *linked_list, | |||
495 | */ | 492 | */ |
496 | buffer += | 493 | buffer += |
497 | (acpi_size) (ACPI_STRLEN | 494 | (acpi_size) (ACPI_STRLEN |
498 | (linked_list->data.address16.resource_source. | 495 | (resource->data.address16.resource_source. |
499 | string_ptr) + 1); | 496 | string_ptr) + 1); |
500 | } | 497 | } |
501 | 498 | ||
@@ -562,7 +559,7 @@ acpi_rs_address32_resource(u8 * byte_stream_buffer, | |||
562 | } | 559 | } |
563 | 560 | ||
564 | *bytes_consumed = temp16 + 3; | 561 | *bytes_consumed = temp16 + 3; |
565 | output_struct->id = ACPI_RSTYPE_ADDRESS32; | 562 | output_struct->type = ACPI_RSTYPE_ADDRESS32; |
566 | 563 | ||
567 | /* Get the Resource Type (Byte3) */ | 564 | /* Get the Resource Type (Byte3) */ |
568 | 565 | ||
@@ -690,7 +687,7 @@ acpi_rs_address32_resource(u8 * byte_stream_buffer, | |||
690 | * | 687 | * |
691 | * FUNCTION: acpi_rs_address32_stream | 688 | * FUNCTION: acpi_rs_address32_stream |
692 | * | 689 | * |
693 | * PARAMETERS: linked_list - Pointer to the resource linked list | 690 | * PARAMETERS: Resource - Pointer to the resource linked list |
694 | * output_buffer - Pointer to the user's return buffer | 691 | * output_buffer - Pointer to the user's return buffer |
695 | * bytes_consumed - Pointer to where the number of bytes | 692 | * bytes_consumed - Pointer to where the number of bytes |
696 | * used in the output_buffer is returned | 693 | * used in the output_buffer is returned |
@@ -703,7 +700,7 @@ acpi_rs_address32_resource(u8 * byte_stream_buffer, | |||
703 | ******************************************************************************/ | 700 | ******************************************************************************/ |
704 | 701 | ||
705 | acpi_status | 702 | acpi_status |
706 | acpi_rs_address32_stream(struct acpi_resource *linked_list, | 703 | acpi_rs_address32_stream(struct acpi_resource *resource, |
707 | u8 ** output_buffer, acpi_size * bytes_consumed) | 704 | u8 ** output_buffer, acpi_size * bytes_consumed) |
708 | { | 705 | { |
709 | u8 *buffer; | 706 | u8 *buffer; |
@@ -725,59 +722,56 @@ acpi_rs_address32_stream(struct acpi_resource *linked_list, | |||
725 | 722 | ||
726 | /* Set the Resource Type (Memory, Io, bus_number) */ | 723 | /* Set the Resource Type (Memory, Io, bus_number) */ |
727 | 724 | ||
728 | *buffer = (u8) (linked_list->data.address32.resource_type & 0x03); | 725 | *buffer = (u8) (resource->data.address32.resource_type & 0x03); |
729 | buffer += 1; | 726 | buffer += 1; |
730 | 727 | ||
731 | /* Set the general flags */ | 728 | /* Set the general flags */ |
732 | 729 | ||
733 | *buffer = acpi_rs_encode_general_flags(&linked_list->data); | 730 | *buffer = acpi_rs_encode_general_flags(&resource->data); |
734 | buffer += 1; | 731 | buffer += 1; |
735 | 732 | ||
736 | /* Set the type specific flags */ | 733 | /* Set the type specific flags */ |
737 | 734 | ||
738 | *buffer = acpi_rs_encode_specific_flags(&linked_list->data); | 735 | *buffer = acpi_rs_encode_specific_flags(&resource->data); |
739 | buffer += 1; | 736 | buffer += 1; |
740 | 737 | ||
741 | /* Set the address space granularity */ | 738 | /* Set the address space granularity */ |
742 | 739 | ||
743 | ACPI_MOVE_32_TO_32(buffer, &linked_list->data.address32.granularity); | 740 | ACPI_MOVE_32_TO_32(buffer, &resource->data.address32.granularity); |
744 | buffer += 4; | 741 | buffer += 4; |
745 | 742 | ||
746 | /* Set the address range minimum */ | 743 | /* Set the address range minimum */ |
747 | 744 | ||
748 | ACPI_MOVE_32_TO_32(buffer, | 745 | ACPI_MOVE_32_TO_32(buffer, &resource->data.address32.min_address_range); |
749 | &linked_list->data.address32.min_address_range); | ||
750 | buffer += 4; | 746 | buffer += 4; |
751 | 747 | ||
752 | /* Set the address range maximum */ | 748 | /* Set the address range maximum */ |
753 | 749 | ||
754 | ACPI_MOVE_32_TO_32(buffer, | 750 | ACPI_MOVE_32_TO_32(buffer, &resource->data.address32.max_address_range); |
755 | &linked_list->data.address32.max_address_range); | ||
756 | buffer += 4; | 751 | buffer += 4; |
757 | 752 | ||
758 | /* Set the address translation offset */ | 753 | /* Set the address translation offset */ |
759 | 754 | ||
760 | ACPI_MOVE_32_TO_32(buffer, | 755 | ACPI_MOVE_32_TO_32(buffer, |
761 | &linked_list->data.address32. | 756 | &resource->data.address32. |
762 | address_translation_offset); | 757 | address_translation_offset); |
763 | buffer += 4; | 758 | buffer += 4; |
764 | 759 | ||
765 | /* Set the address length */ | 760 | /* Set the address length */ |
766 | 761 | ||
767 | ACPI_MOVE_32_TO_32(buffer, &linked_list->data.address32.address_length); | 762 | ACPI_MOVE_32_TO_32(buffer, &resource->data.address32.address_length); |
768 | buffer += 4; | 763 | buffer += 4; |
769 | 764 | ||
770 | /* Resource Source Index and Resource Source are optional */ | 765 | /* Resource Source Index and Resource Source are optional */ |
771 | 766 | ||
772 | if (linked_list->data.address32.resource_source.string_length) { | 767 | if (resource->data.address32.resource_source.string_length) { |
773 | *buffer = | 768 | *buffer = (u8) resource->data.address32.resource_source.index; |
774 | (u8) linked_list->data.address32.resource_source.index; | ||
775 | buffer += 1; | 769 | buffer += 1; |
776 | 770 | ||
777 | /* Copy the resource_source string */ | 771 | /* Copy the resource_source string */ |
778 | 772 | ||
779 | ACPI_STRCPY((char *)buffer, | 773 | ACPI_STRCPY((char *)buffer, |
780 | linked_list->data.address32.resource_source. | 774 | resource->data.address32.resource_source. |
781 | string_ptr); | 775 | string_ptr); |
782 | 776 | ||
783 | /* | 777 | /* |
@@ -786,7 +780,7 @@ acpi_rs_address32_stream(struct acpi_resource *linked_list, | |||
786 | */ | 780 | */ |
787 | buffer += | 781 | buffer += |
788 | (acpi_size) (ACPI_STRLEN | 782 | (acpi_size) (ACPI_STRLEN |
789 | (linked_list->data.address32.resource_source. | 783 | (resource->data.address32.resource_source. |
790 | string_ptr) + 1); | 784 | string_ptr) + 1); |
791 | } | 785 | } |
792 | 786 | ||
@@ -856,7 +850,7 @@ acpi_rs_address64_resource(u8 * byte_stream_buffer, | |||
856 | } | 850 | } |
857 | 851 | ||
858 | *bytes_consumed = temp16 + 3; | 852 | *bytes_consumed = temp16 + 3; |
859 | output_struct->id = ACPI_RSTYPE_ADDRESS64; | 853 | output_struct->type = ACPI_RSTYPE_ADDRESS64; |
860 | 854 | ||
861 | /* Get the Resource Type (Byte3) */ | 855 | /* Get the Resource Type (Byte3) */ |
862 | 856 | ||
@@ -1005,7 +999,7 @@ acpi_rs_address64_resource(u8 * byte_stream_buffer, | |||
1005 | * | 999 | * |
1006 | * FUNCTION: acpi_rs_address64_stream | 1000 | * FUNCTION: acpi_rs_address64_stream |
1007 | * | 1001 | * |
1008 | * PARAMETERS: linked_list - Pointer to the resource linked list | 1002 | * PARAMETERS: Resource - Pointer to the resource linked list |
1009 | * output_buffer - Pointer to the user's return buffer | 1003 | * output_buffer - Pointer to the user's return buffer |
1010 | * bytes_consumed - Pointer to where the number of bytes | 1004 | * bytes_consumed - Pointer to where the number of bytes |
1011 | * used in the output_buffer is returned | 1005 | * used in the output_buffer is returned |
@@ -1018,7 +1012,7 @@ acpi_rs_address64_resource(u8 * byte_stream_buffer, | |||
1018 | ******************************************************************************/ | 1012 | ******************************************************************************/ |
1019 | 1013 | ||
1020 | acpi_status | 1014 | acpi_status |
1021 | acpi_rs_address64_stream(struct acpi_resource *linked_list, | 1015 | acpi_rs_address64_stream(struct acpi_resource *resource, |
1022 | u8 ** output_buffer, acpi_size * bytes_consumed) | 1016 | u8 ** output_buffer, acpi_size * bytes_consumed) |
1023 | { | 1017 | { |
1024 | u8 *buffer; | 1018 | u8 *buffer; |
@@ -1040,59 +1034,56 @@ acpi_rs_address64_stream(struct acpi_resource *linked_list, | |||
1040 | 1034 | ||
1041 | /* Set the Resource Type (Memory, Io, bus_number) */ | 1035 | /* Set the Resource Type (Memory, Io, bus_number) */ |
1042 | 1036 | ||
1043 | *buffer = (u8) (linked_list->data.address64.resource_type & 0x03); | 1037 | *buffer = (u8) (resource->data.address64.resource_type & 0x03); |
1044 | buffer += 1; | 1038 | buffer += 1; |
1045 | 1039 | ||
1046 | /* Set the general flags */ | 1040 | /* Set the general flags */ |
1047 | 1041 | ||
1048 | *buffer = acpi_rs_encode_general_flags(&linked_list->data); | 1042 | *buffer = acpi_rs_encode_general_flags(&resource->data); |
1049 | buffer += 1; | 1043 | buffer += 1; |
1050 | 1044 | ||
1051 | /* Set the type specific flags */ | 1045 | /* Set the type specific flags */ |
1052 | 1046 | ||
1053 | *buffer = acpi_rs_encode_specific_flags(&linked_list->data); | 1047 | *buffer = acpi_rs_encode_specific_flags(&resource->data); |
1054 | buffer += 1; | 1048 | buffer += 1; |
1055 | 1049 | ||
1056 | /* Set the address space granularity */ | 1050 | /* Set the address space granularity */ |
1057 | 1051 | ||
1058 | ACPI_MOVE_64_TO_64(buffer, &linked_list->data.address64.granularity); | 1052 | ACPI_MOVE_64_TO_64(buffer, &resource->data.address64.granularity); |
1059 | buffer += 8; | 1053 | buffer += 8; |
1060 | 1054 | ||
1061 | /* Set the address range minimum */ | 1055 | /* Set the address range minimum */ |
1062 | 1056 | ||
1063 | ACPI_MOVE_64_TO_64(buffer, | 1057 | ACPI_MOVE_64_TO_64(buffer, &resource->data.address64.min_address_range); |
1064 | &linked_list->data.address64.min_address_range); | ||
1065 | buffer += 8; | 1058 | buffer += 8; |
1066 | 1059 | ||
1067 | /* Set the address range maximum */ | 1060 | /* Set the address range maximum */ |
1068 | 1061 | ||
1069 | ACPI_MOVE_64_TO_64(buffer, | 1062 | ACPI_MOVE_64_TO_64(buffer, &resource->data.address64.max_address_range); |
1070 | &linked_list->data.address64.max_address_range); | ||
1071 | buffer += 8; | 1063 | buffer += 8; |
1072 | 1064 | ||
1073 | /* Set the address translation offset */ | 1065 | /* Set the address translation offset */ |
1074 | 1066 | ||
1075 | ACPI_MOVE_64_TO_64(buffer, | 1067 | ACPI_MOVE_64_TO_64(buffer, |
1076 | &linked_list->data.address64. | 1068 | &resource->data.address64. |
1077 | address_translation_offset); | 1069 | address_translation_offset); |
1078 | buffer += 8; | 1070 | buffer += 8; |
1079 | 1071 | ||
1080 | /* Set the address length */ | 1072 | /* Set the address length */ |
1081 | 1073 | ||
1082 | ACPI_MOVE_64_TO_64(buffer, &linked_list->data.address64.address_length); | 1074 | ACPI_MOVE_64_TO_64(buffer, &resource->data.address64.address_length); |
1083 | buffer += 8; | 1075 | buffer += 8; |
1084 | 1076 | ||
1085 | /* Resource Source Index and Resource Source are optional */ | 1077 | /* Resource Source Index and Resource Source are optional */ |
1086 | 1078 | ||
1087 | if (linked_list->data.address64.resource_source.string_length) { | 1079 | if (resource->data.address64.resource_source.string_length) { |
1088 | *buffer = | 1080 | *buffer = (u8) resource->data.address64.resource_source.index; |
1089 | (u8) linked_list->data.address64.resource_source.index; | ||
1090 | buffer += 1; | 1081 | buffer += 1; |
1091 | 1082 | ||
1092 | /* Copy the resource_source string */ | 1083 | /* Copy the resource_source string */ |
1093 | 1084 | ||
1094 | ACPI_STRCPY((char *)buffer, | 1085 | ACPI_STRCPY((char *)buffer, |
1095 | linked_list->data.address64.resource_source. | 1086 | resource->data.address64.resource_source. |
1096 | string_ptr); | 1087 | string_ptr); |
1097 | 1088 | ||
1098 | /* | 1089 | /* |
@@ -1101,7 +1092,7 @@ acpi_rs_address64_stream(struct acpi_resource *linked_list, | |||
1101 | */ | 1092 | */ |
1102 | buffer += | 1093 | buffer += |
1103 | (acpi_size) (ACPI_STRLEN | 1094 | (acpi_size) (ACPI_STRLEN |
1104 | (linked_list->data.address64.resource_source. | 1095 | (resource->data.address64.resource_source. |
1105 | string_ptr) + 1); | 1096 | string_ptr) + 1); |
1106 | } | 1097 | } |
1107 | 1098 | ||
diff --git a/drivers/acpi/resources/rscalc.c b/drivers/acpi/resources/rscalc.c index 378f58390fc1..cd051c97bf5b 100644 --- a/drivers/acpi/resources/rscalc.c +++ b/drivers/acpi/resources/rscalc.c | |||
@@ -44,651 +44,620 @@ | |||
44 | #include <acpi/acpi.h> | 44 | #include <acpi/acpi.h> |
45 | #include <acpi/acresrc.h> | 45 | #include <acpi/acresrc.h> |
46 | #include <acpi/amlcode.h> | 46 | #include <acpi/amlcode.h> |
47 | #include <acpi/amlresrc.h> | ||
47 | #include <acpi/acnamesp.h> | 48 | #include <acpi/acnamesp.h> |
48 | 49 | ||
49 | #define _COMPONENT ACPI_RESOURCES | 50 | #define _COMPONENT ACPI_RESOURCES |
50 | ACPI_MODULE_NAME("rscalc") | 51 | ACPI_MODULE_NAME("rscalc") |
51 | 52 | ||
53 | /* | ||
54 | * Base sizes for external resource descriptors, indexed by internal type. | ||
55 | * Includes size of the descriptor header (1 byte for small descriptors, | ||
56 | * 3 bytes for large descriptors) | ||
57 | */ | ||
58 | static u8 acpi_gbl_stream_sizes[] = { | ||
59 | 4, /* ACPI_RSTYPE_IRQ (Byte 3 is optional, but always created) */ | ||
60 | 3, /* ACPI_RSTYPE_DMA */ | ||
61 | 2, /* ACPI_RSTYPE_START_DPF (Byte 1 is optional, but always created) */ | ||
62 | 1, /* ACPI_RSTYPE_END_DPF */ | ||
63 | 8, /* ACPI_RSTYPE_IO */ | ||
64 | 4, /* ACPI_RSTYPE_FIXED_IO */ | ||
65 | 1, /* ACPI_RSTYPE_VENDOR */ | ||
66 | 2, /* ACPI_RSTYPE_END_TAG */ | ||
67 | 12, /* ACPI_RSTYPE_MEM24 */ | ||
68 | 20, /* ACPI_RSTYPE_MEM32 */ | ||
69 | 12, /* ACPI_RSTYPE_FIXED_MEM32 */ | ||
70 | 16, /* ACPI_RSTYPE_ADDRESS16 */ | ||
71 | 26, /* ACPI_RSTYPE_ADDRESS32 */ | ||
72 | 46, /* ACPI_RSTYPE_ADDRESS64 */ | ||
73 | 9, /* ACPI_RSTYPE_EXT_IRQ */ | ||
74 | 15 /* ACPI_RSTYPE_GENERIC_REG */ | ||
75 | }; | ||
76 | |||
77 | /* | ||
78 | * Base sizes of resource descriptors, both the actual AML stream length and | ||
79 | * size of the internal struct representation. | ||
80 | */ | ||
81 | typedef struct acpi_resource_sizes { | ||
82 | u8 minimum_stream_size; | ||
83 | u8 minimum_struct_size; | ||
84 | |||
85 | } ACPI_RESOURCE_SIZES; | ||
86 | |||
87 | static ACPI_RESOURCE_SIZES acpi_gbl_sm_resource_sizes[] = { | ||
88 | 0, 0, /* 0x00, Reserved */ | ||
89 | 0, 0, /* 0x01, Reserved */ | ||
90 | 0, 0, /* 0x02, Reserved */ | ||
91 | 0, 0, /* 0x03, Reserved */ | ||
92 | 3, ACPI_SIZEOF_RESOURCE(struct acpi_resource_irq), /* ACPI_RDESC_TYPE_IRQ_FORMAT */ | ||
93 | 3, ACPI_SIZEOF_RESOURCE(struct acpi_resource_dma), /* ACPI_RDESC_TYPE_DMA_FORMAT */ | ||
94 | 1, ACPI_SIZEOF_RESOURCE(struct acpi_resource_start_dpf), /* ACPI_RDESC_TYPE_START_DEPENDENT */ | ||
95 | 1, ACPI_RESOURCE_LENGTH, /* ACPI_RDESC_TYPE_END_DEPENDENT */ | ||
96 | 8, ACPI_SIZEOF_RESOURCE(struct acpi_resource_io), /* ACPI_RDESC_TYPE_IO_PORT */ | ||
97 | 4, ACPI_SIZEOF_RESOURCE(struct acpi_resource_fixed_io), /* ACPI_RDESC_TYPE_FIXED_IO_PORT */ | ||
98 | 0, 0, /* 0x0A, Reserved */ | ||
99 | 0, 0, /* 0x0B, Reserved */ | ||
100 | 0, 0, /* 0x0C, Reserved */ | ||
101 | 0, 0, /* 0x0D, Reserved */ | ||
102 | 1, ACPI_SIZEOF_RESOURCE(struct acpi_resource_vendor), /* ACPI_RDESC_TYPE_SMALL_VENDOR */ | ||
103 | 2, ACPI_RESOURCE_LENGTH, /* ACPI_RDESC_TYPE_END_TAG */ | ||
104 | }; | ||
105 | |||
106 | static ACPI_RESOURCE_SIZES acpi_gbl_lg_resource_sizes[] = { | ||
107 | 0, 0, /* 0x00, Reserved */ | ||
108 | 12, ACPI_SIZEOF_RESOURCE(struct acpi_resource_mem24), /* ACPI_RDESC_TYPE_MEMORY_24 */ | ||
109 | 15, ACPI_SIZEOF_RESOURCE(struct acpi_resource_generic_reg), /* ACPI_RDESC_TYPE_GENERIC_REGISTER */ | ||
110 | 0, 0, /* 0x03, Reserved */ | ||
111 | 3, ACPI_SIZEOF_RESOURCE(struct acpi_resource_vendor), /* ACPI_RDESC_TYPE_LARGE_VENDOR */ | ||
112 | 20, ACPI_SIZEOF_RESOURCE(struct acpi_resource_mem32), /* ACPI_RDESC_TYPE_MEMORY_32 */ | ||
113 | 12, ACPI_SIZEOF_RESOURCE(struct acpi_resource_fixed_mem32), /* ACPI_RDESC_TYPE_FIXED_MEMORY_32 */ | ||
114 | 26, ACPI_SIZEOF_RESOURCE(struct acpi_resource_address32), /* ACPI_RDESC_TYPE_DWORD_ADDRESS_SPACE */ | ||
115 | 16, ACPI_SIZEOF_RESOURCE(struct acpi_resource_address16), /* ACPI_RDESC_TYPE_WORD_ADDRESS_SPACE */ | ||
116 | 9, ACPI_SIZEOF_RESOURCE(struct acpi_resource_ext_irq), /* ACPI_RDESC_TYPE_EXTENDED_XRUPT */ | ||
117 | 46, ACPI_SIZEOF_RESOURCE(struct acpi_resource_address64), /* ACPI_RDESC_TYPE_QWORD_ADDRESS_SPACE */ | ||
118 | 56, ACPI_SIZEOF_RESOURCE(struct acpi_resource_address64), /* ACPI_RDESC_TYPE_EXTENDED_ADDRESS_SPACE */ | ||
119 | }; | ||
120 | |||
121 | /* Local prototypes */ | ||
122 | |||
123 | static u8 acpi_rs_count_set_bits(u16 bit_field); | ||
124 | |||
125 | static ACPI_RESOURCE_SIZES *acpi_rs_get_resource_sizes(u8 resource_type); | ||
126 | |||
127 | static u16 acpi_rs_get_resource_length(u8 * resource); | ||
128 | |||
129 | static acpi_size | ||
130 | acpi_rs_struct_option_length(struct acpi_resource_source *resource_source); | ||
131 | |||
132 | static u32 | ||
133 | acpi_rs_stream_option_length(u32 resource_length, u32 minimum_total_length); | ||
134 | |||
52 | /******************************************************************************* | 135 | /******************************************************************************* |
53 | * | 136 | * |
54 | * FUNCTION: acpi_rs_get_byte_stream_length | 137 | * FUNCTION: acpi_rs_count_set_bits |
55 | * | 138 | * |
56 | * PARAMETERS: linked_list - Pointer to the resource linked list | 139 | * PARAMETERS: bit_field - Field in which to count bits |
57 | * size_needed - u32 pointer of the size buffer needed | ||
58 | * to properly return the parsed data | ||
59 | * | 140 | * |
60 | * RETURN: Status | 141 | * RETURN: Number of bits set within the field |
61 | * | 142 | * |
62 | * DESCRIPTION: Takes the resource byte stream and parses it once, calculating | 143 | * DESCRIPTION: Count the number of bits set in a resource field. Used for |
63 | * the size buffer needed to hold the linked list that conveys | 144 | * (Short descriptor) interrupt and DMA lists. |
64 | * the resource data. | ||
65 | * | 145 | * |
66 | ******************************************************************************/ | 146 | ******************************************************************************/ |
67 | acpi_status | ||
68 | acpi_rs_get_byte_stream_length(struct acpi_resource *linked_list, | ||
69 | acpi_size * size_needed) | ||
70 | { | ||
71 | acpi_size byte_stream_size_needed = 0; | ||
72 | acpi_size segment_size; | ||
73 | u8 done = FALSE; | ||
74 | |||
75 | ACPI_FUNCTION_TRACE("rs_get_byte_stream_length"); | ||
76 | 147 | ||
77 | while (!done) { | 148 | static u8 acpi_rs_count_set_bits(u16 bit_field) |
78 | /* Init the variable that will hold the size to add to the total. */ | 149 | { |
150 | u8 bits_set; | ||
79 | 151 | ||
80 | segment_size = 0; | 152 | ACPI_FUNCTION_ENTRY(); |
81 | 153 | ||
82 | switch (linked_list->id) { | 154 | for (bits_set = 0; bit_field; bits_set++) { |
83 | case ACPI_RSTYPE_IRQ: | 155 | /* Zero the least significant bit that is set */ |
84 | /* | ||
85 | * IRQ Resource | ||
86 | * For an IRQ Resource, Byte 3, although optional, will always be | ||
87 | * created - it holds IRQ information. | ||
88 | */ | ||
89 | segment_size = 4; | ||
90 | break; | ||
91 | 156 | ||
92 | case ACPI_RSTYPE_DMA: | 157 | bit_field &= (bit_field - 1); |
93 | /* | 158 | } |
94 | * DMA Resource | ||
95 | * For this resource the size is static | ||
96 | */ | ||
97 | segment_size = 3; | ||
98 | break; | ||
99 | |||
100 | case ACPI_RSTYPE_START_DPF: | ||
101 | /* | ||
102 | * Start Dependent Functions Resource | ||
103 | * For a start_dependent_functions Resource, Byte 1, although | ||
104 | * optional, will always be created. | ||
105 | */ | ||
106 | segment_size = 2; | ||
107 | break; | ||
108 | 159 | ||
109 | case ACPI_RSTYPE_END_DPF: | 160 | return (bits_set); |
110 | /* | 161 | } |
111 | * End Dependent Functions Resource | ||
112 | * For this resource the size is static | ||
113 | */ | ||
114 | segment_size = 1; | ||
115 | break; | ||
116 | 162 | ||
117 | case ACPI_RSTYPE_IO: | 163 | /******************************************************************************* |
118 | /* | 164 | * |
119 | * IO Port Resource | 165 | * FUNCTION: acpi_rs_get_resource_sizes |
120 | * For this resource the size is static | 166 | * |
121 | */ | 167 | * PARAMETERS: resource_type - Byte 0 of a resource descriptor |
122 | segment_size = 8; | 168 | * |
123 | break; | 169 | * RETURN: Pointer to the resource conversion handler |
170 | * | ||
171 | * DESCRIPTION: Extract the Resource Type/Name from the first byte of | ||
172 | * a resource descriptor. | ||
173 | * | ||
174 | ******************************************************************************/ | ||
124 | 175 | ||
125 | case ACPI_RSTYPE_FIXED_IO: | 176 | static ACPI_RESOURCE_SIZES *acpi_rs_get_resource_sizes(u8 resource_type) |
126 | /* | 177 | { |
127 | * Fixed IO Port Resource | 178 | ACPI_RESOURCE_SIZES *size_info; |
128 | * For this resource the size is static | ||
129 | */ | ||
130 | segment_size = 4; | ||
131 | break; | ||
132 | 179 | ||
133 | case ACPI_RSTYPE_VENDOR: | 180 | ACPI_FUNCTION_ENTRY(); |
134 | /* | ||
135 | * Vendor Defined Resource | ||
136 | * For a Vendor Specific resource, if the Length is between 1 and 7 | ||
137 | * it will be created as a Small Resource data type, otherwise it | ||
138 | * is a Large Resource data type. | ||
139 | */ | ||
140 | if (linked_list->data.vendor_specific.length > 7) { | ||
141 | segment_size = 3; | ||
142 | } else { | ||
143 | segment_size = 1; | ||
144 | } | ||
145 | segment_size += | ||
146 | linked_list->data.vendor_specific.length; | ||
147 | break; | ||
148 | 181 | ||
149 | case ACPI_RSTYPE_END_TAG: | 182 | /* Determine if this is a small or large resource */ |
150 | /* | ||
151 | * End Tag | ||
152 | * For this resource the size is static | ||
153 | */ | ||
154 | segment_size = 2; | ||
155 | done = TRUE; | ||
156 | break; | ||
157 | 183 | ||
158 | case ACPI_RSTYPE_MEM24: | 184 | if (resource_type & ACPI_RDESC_TYPE_LARGE) { |
159 | /* | 185 | /* Large Resource Type -- bits 6:0 contain the name */ |
160 | * 24-Bit Memory Resource | ||
161 | * For this resource the size is static | ||
162 | */ | ||
163 | segment_size = 12; | ||
164 | break; | ||
165 | 186 | ||
166 | case ACPI_RSTYPE_MEM32: | 187 | if (resource_type > ACPI_RDESC_LARGE_MAX) { |
167 | /* | 188 | return (NULL); |
168 | * 32-Bit Memory Range Resource | 189 | } |
169 | * For this resource the size is static | ||
170 | */ | ||
171 | segment_size = 20; | ||
172 | break; | ||
173 | 190 | ||
174 | case ACPI_RSTYPE_FIXED_MEM32: | 191 | size_info = &acpi_gbl_lg_resource_sizes[(resource_type & |
175 | /* | 192 | ACPI_RDESC_LARGE_MASK)]; |
176 | * 32-Bit Fixed Memory Resource | 193 | } else { |
177 | * For this resource the size is static | 194 | /* Small Resource Type -- bits 6:3 contain the name */ |
178 | */ | ||
179 | segment_size = 12; | ||
180 | break; | ||
181 | 195 | ||
182 | case ACPI_RSTYPE_ADDRESS16: | 196 | size_info = &acpi_gbl_sm_resource_sizes[((resource_type & |
183 | /* | 197 | ACPI_RDESC_SMALL_MASK) |
184 | * 16-Bit Address Resource | 198 | >> 3)]; |
185 | * The base size of this byte stream is 16. If a Resource Source | 199 | } |
186 | * string is not NULL, add 1 for the Index + the length of the null | ||
187 | * terminated string Resource Source + 1 for the null. | ||
188 | */ | ||
189 | segment_size = 16; | ||
190 | |||
191 | if (linked_list->data.address16.resource_source. | ||
192 | string_ptr) { | ||
193 | segment_size += | ||
194 | linked_list->data.address16.resource_source. | ||
195 | string_length; | ||
196 | segment_size++; | ||
197 | } | ||
198 | break; | ||
199 | 200 | ||
200 | case ACPI_RSTYPE_ADDRESS32: | 201 | /* Zero entry indicates an invalid resource type */ |
201 | /* | ||
202 | * 32-Bit Address Resource | ||
203 | * The base size of this byte stream is 26. If a Resource | ||
204 | * Source string is not NULL, add 1 for the Index + the | ||
205 | * length of the null terminated string Resource Source + | ||
206 | * 1 for the null. | ||
207 | */ | ||
208 | segment_size = 26; | ||
209 | |||
210 | if (linked_list->data.address32.resource_source. | ||
211 | string_ptr) { | ||
212 | segment_size += | ||
213 | linked_list->data.address32.resource_source. | ||
214 | string_length; | ||
215 | segment_size++; | ||
216 | } | ||
217 | break; | ||
218 | 202 | ||
219 | case ACPI_RSTYPE_ADDRESS64: | 203 | if (!size_info->minimum_stream_size) { |
220 | /* | 204 | return (NULL); |
221 | * 64-Bit Address Resource | 205 | } |
222 | * The base size of this byte stream is 46. If a resource_source | ||
223 | * string is not NULL, add 1 for the Index + the length of the null | ||
224 | * terminated string Resource Source + 1 for the null. | ||
225 | */ | ||
226 | segment_size = 46; | ||
227 | |||
228 | if (linked_list->data.address64.resource_source. | ||
229 | string_ptr) { | ||
230 | segment_size += | ||
231 | linked_list->data.address64.resource_source. | ||
232 | string_length; | ||
233 | segment_size++; | ||
234 | } | ||
235 | break; | ||
236 | 206 | ||
237 | case ACPI_RSTYPE_EXT_IRQ: | 207 | return (size_info); |
238 | /* | 208 | } |
239 | * Extended IRQ Resource | ||
240 | * The base size of this byte stream is 9. This is for an Interrupt | ||
241 | * table length of 1. For each additional interrupt, add 4. | ||
242 | * If a Resource Source string is not NULL, add 1 for the | ||
243 | * Index + the length of the null terminated string | ||
244 | * Resource Source + 1 for the null. | ||
245 | */ | ||
246 | segment_size = 9 + (((acpi_size) | ||
247 | linked_list->data.extended_irq. | ||
248 | number_of_interrupts - 1) * 4); | ||
249 | |||
250 | if (linked_list->data.extended_irq.resource_source. | ||
251 | string_ptr) { | ||
252 | segment_size += | ||
253 | linked_list->data.extended_irq. | ||
254 | resource_source.string_length; | ||
255 | segment_size++; | ||
256 | } | ||
257 | break; | ||
258 | 209 | ||
259 | default: | 210 | /******************************************************************************* |
211 | * | ||
212 | * FUNCTION: acpi_rs_get_resource_length | ||
213 | * | ||
214 | * PARAMETERS: Resource - Pointer to the resource descriptor | ||
215 | * | ||
216 | * RETURN: Byte length of the (AML byte stream) descriptor. By definition, | ||
217 | * this does not include the size of the descriptor header and the | ||
218 | * length field itself. | ||
219 | * | ||
220 | * DESCRIPTION: Extract the length of a resource descriptor. | ||
221 | * | ||
222 | ******************************************************************************/ | ||
260 | 223 | ||
261 | /* If we get here, everything is out of sync, exit with error */ | 224 | static u16 acpi_rs_get_resource_length(u8 * resource) |
225 | { | ||
226 | u16 resource_length; | ||
262 | 227 | ||
263 | return_ACPI_STATUS(AE_AML_INVALID_RESOURCE_TYPE); | 228 | ACPI_FUNCTION_ENTRY(); |
264 | 229 | ||
265 | } /* switch (linked_list->Id) */ | 230 | /* Determine if this is a small or large resource */ |
266 | 231 | ||
267 | /* Update the total */ | 232 | if (*resource & ACPI_RDESC_TYPE_LARGE) { |
233 | /* Large Resource type -- length is in bytes 1-2 */ | ||
268 | 234 | ||
269 | byte_stream_size_needed += segment_size; | 235 | ACPI_MOVE_16_TO_16(&resource_length, (resource + 1)); |
270 | 236 | ||
271 | /* Point to the next object */ | 237 | } else { |
238 | /* Small Resource Type -- bits 2:0 of byte 0 contain the length */ | ||
272 | 239 | ||
273 | linked_list = ACPI_PTR_ADD(struct acpi_resource, | 240 | resource_length = |
274 | linked_list, linked_list->length); | 241 | (u16) (*resource & ACPI_RDESC_SMALL_LENGTH_MASK); |
275 | } | 242 | } |
276 | 243 | ||
277 | /* This is the data the caller needs */ | 244 | return (resource_length); |
278 | |||
279 | *size_needed = byte_stream_size_needed; | ||
280 | return_ACPI_STATUS(AE_OK); | ||
281 | } | 245 | } |
282 | 246 | ||
283 | /******************************************************************************* | 247 | /******************************************************************************* |
284 | * | 248 | * |
285 | * FUNCTION: acpi_rs_get_list_length | 249 | * FUNCTION: acpi_rs_struct_option_length |
286 | * | 250 | * |
287 | * PARAMETERS: byte_stream_buffer - Pointer to the resource byte stream | 251 | * PARAMETERS: resource_source - Pointer to optional descriptor field |
288 | * byte_stream_buffer_length - Size of byte_stream_buffer | ||
289 | * size_needed - u32 pointer of the size buffer | ||
290 | * needed to properly return the | ||
291 | * parsed data | ||
292 | * | 252 | * |
293 | * RETURN: Status | 253 | * RETURN: Status |
294 | * | 254 | * |
295 | * DESCRIPTION: Takes the resource byte stream and parses it once, calculating | 255 | * DESCRIPTION: Common code to handle optional resource_source_index and |
296 | * the size buffer needed to hold the linked list that conveys | 256 | * resource_source fields in some Large descriptors. Used during |
297 | * the resource data. | 257 | * list-to-stream conversion |
298 | * | 258 | * |
299 | ******************************************************************************/ | 259 | ******************************************************************************/ |
300 | 260 | ||
301 | acpi_status | 261 | static acpi_size |
302 | acpi_rs_get_list_length(u8 * byte_stream_buffer, | 262 | acpi_rs_struct_option_length(struct acpi_resource_source *resource_source) |
303 | u32 byte_stream_buffer_length, acpi_size * size_needed) | ||
304 | { | 263 | { |
305 | u32 buffer_size = 0; | 264 | ACPI_FUNCTION_ENTRY(); |
306 | u32 bytes_parsed = 0; | ||
307 | u8 number_of_interrupts = 0; | ||
308 | u8 number_of_channels = 0; | ||
309 | u8 resource_type; | ||
310 | u32 structure_size; | ||
311 | u32 bytes_consumed; | ||
312 | u8 *buffer; | ||
313 | u8 temp8; | ||
314 | u16 temp16; | ||
315 | u8 index; | ||
316 | u8 additional_bytes; | ||
317 | |||
318 | ACPI_FUNCTION_TRACE("rs_get_list_length"); | ||
319 | |||
320 | while (bytes_parsed < byte_stream_buffer_length) { | ||
321 | /* The next byte in the stream is the resource type */ | ||
322 | |||
323 | resource_type = acpi_rs_get_resource_type(*byte_stream_buffer); | ||
324 | 265 | ||
325 | switch (resource_type) { | 266 | /* |
326 | case ACPI_RDESC_TYPE_MEMORY_24: | 267 | * If the resource_source string is valid, return the size of the string |
327 | /* | 268 | * (string_length includes the NULL terminator) plus the size of the |
328 | * 24-Bit Memory Resource | 269 | * resource_source_index (1). |
329 | */ | 270 | */ |
330 | bytes_consumed = 12; | 271 | if (resource_source->string_ptr) { |
331 | 272 | return ((acpi_size) resource_source->string_length + 1); | |
332 | structure_size = | 273 | } |
333 | ACPI_SIZEOF_RESOURCE(struct acpi_resource_mem24); | ||
334 | break; | ||
335 | 274 | ||
336 | case ACPI_RDESC_TYPE_LARGE_VENDOR: | 275 | return (0); |
337 | /* | 276 | } |
338 | * Vendor Defined Resource | ||
339 | */ | ||
340 | buffer = byte_stream_buffer; | ||
341 | ++buffer; | ||
342 | 277 | ||
343 | ACPI_MOVE_16_TO_16(&temp16, buffer); | 278 | /******************************************************************************* |
344 | bytes_consumed = temp16 + 3; | 279 | * |
280 | * FUNCTION: acpi_rs_stream_option_length | ||
281 | * | ||
282 | * PARAMETERS: resource_length - Length from the resource header | ||
283 | * minimum_total_length - Minimum length of this resource, before | ||
284 | * any optional fields. Includes header size | ||
285 | * | ||
286 | * RETURN: Length of optional string (0 if no string present) | ||
287 | * | ||
288 | * DESCRIPTION: Common code to handle optional resource_source_index and | ||
289 | * resource_source fields in some Large descriptors. Used during | ||
290 | * stream-to-list conversion | ||
291 | * | ||
292 | ******************************************************************************/ | ||
345 | 293 | ||
346 | /* Ensure a 32-bit boundary for the structure */ | 294 | static u32 |
295 | acpi_rs_stream_option_length(u32 resource_length, u32 minimum_total_length) | ||
296 | { | ||
297 | u32 string_length = 0; | ||
298 | u32 minimum_resource_length; | ||
347 | 299 | ||
348 | temp16 = (u16) ACPI_ROUND_UP_to_32_bITS(temp16); | 300 | ACPI_FUNCTION_ENTRY(); |
349 | 301 | ||
350 | structure_size = | 302 | /* |
351 | ACPI_SIZEOF_RESOURCE(struct acpi_resource_vendor) + | 303 | * The resource_source_index and resource_source are optional elements of some |
352 | (temp16 * sizeof(u8)); | 304 | * Large-type resource descriptors. |
353 | break; | 305 | */ |
354 | 306 | ||
355 | case ACPI_RDESC_TYPE_MEMORY_32: | 307 | /* Compute minimum size of the data part of the resource descriptor */ |
356 | /* | ||
357 | * 32-Bit Memory Range Resource | ||
358 | */ | ||
359 | bytes_consumed = 20; | ||
360 | 308 | ||
361 | structure_size = | 309 | minimum_resource_length = |
362 | ACPI_SIZEOF_RESOURCE(struct acpi_resource_mem32); | 310 | minimum_total_length - sizeof(struct asl_large_header); |
363 | break; | ||
364 | 311 | ||
365 | case ACPI_RDESC_TYPE_FIXED_MEMORY_32: | 312 | /* |
366 | /* | 313 | * If the length of the actual resource descriptor is greater than the ACPI |
367 | * 32-Bit Fixed Memory Resource | 314 | * spec-defined minimum length, it means that a resource_source_index exists |
368 | */ | 315 | * and is followed by a (required) null terminated string. The string length |
369 | bytes_consumed = 12; | 316 | * (including the null terminator) is the resource length minus the minimum |
317 | * length, minus one byte for the resource_source_index itself. | ||
318 | */ | ||
319 | if (resource_length > minimum_resource_length) { | ||
320 | /* Compute the length of the optional string */ | ||
370 | 321 | ||
371 | structure_size = | 322 | string_length = resource_length - minimum_resource_length - 1; |
372 | ACPI_SIZEOF_RESOURCE(struct | 323 | } |
373 | acpi_resource_fixed_mem32); | ||
374 | break; | ||
375 | 324 | ||
376 | case ACPI_RDESC_TYPE_EXTENDED_ADDRESS_SPACE: | 325 | /* Round up length to 32 bits for internal structure alignment */ |
377 | /* | ||
378 | * 64-Bit Address Resource | ||
379 | */ | ||
380 | buffer = byte_stream_buffer; | ||
381 | 326 | ||
382 | ++buffer; | 327 | return (ACPI_ROUND_UP_to_32_bITS(string_length)); |
383 | ACPI_MOVE_16_TO_16(&temp16, buffer); | 328 | } |
384 | 329 | ||
385 | bytes_consumed = temp16 + 3; | 330 | /******************************************************************************* |
386 | structure_size = | 331 | * |
387 | ACPI_SIZEOF_RESOURCE(struct | 332 | * FUNCTION: acpi_rs_get_byte_stream_length |
388 | acpi_resource_address64); | 333 | * |
389 | break; | 334 | * PARAMETERS: Resource - Pointer to the resource linked list |
335 | * size_needed - Where the required size is returned | ||
336 | * | ||
337 | * RETURN: Status | ||
338 | * | ||
339 | * DESCRIPTION: Takes a linked list of internal resource descriptors and | ||
340 | * calculates the size buffer needed to hold the corresponding | ||
341 | * external resource byte stream. | ||
342 | * | ||
343 | ******************************************************************************/ | ||
390 | 344 | ||
391 | case ACPI_RDESC_TYPE_QWORD_ADDRESS_SPACE: | 345 | acpi_status |
392 | /* | 346 | acpi_rs_get_byte_stream_length(struct acpi_resource * resource, |
393 | * 64-Bit Address Resource | 347 | acpi_size * size_needed) |
394 | */ | 348 | { |
395 | buffer = byte_stream_buffer; | 349 | acpi_size byte_stream_size_needed = 0; |
350 | acpi_size segment_size; | ||
396 | 351 | ||
397 | ++buffer; | 352 | ACPI_FUNCTION_TRACE("rs_get_byte_stream_length"); |
398 | ACPI_MOVE_16_TO_16(&temp16, buffer); | ||
399 | 353 | ||
400 | bytes_consumed = temp16 + 3; | 354 | /* Traverse entire list of internal resource descriptors */ |
401 | 355 | ||
402 | /* | 356 | while (resource) { |
403 | * Resource Source Index and Resource Source are optional elements. | 357 | /* Validate the descriptor type */ |
404 | * Check the length of the Bytestream. If it is greater than 43, | ||
405 | * that means that an Index exists and is followed by a null | ||
406 | * terminated string. Therefore, set the temp variable to the | ||
407 | * length minus the minimum byte stream length plus the byte for | ||
408 | * the Index to determine the size of the NULL terminated string. | ||
409 | */ | ||
410 | if (43 < temp16) { | ||
411 | temp8 = (u8) (temp16 - 44); | ||
412 | } else { | ||
413 | temp8 = 0; | ||
414 | } | ||
415 | 358 | ||
416 | /* Ensure a 64-bit boundary for the structure */ | 359 | if (resource->type > ACPI_RSTYPE_MAX) { |
360 | return_ACPI_STATUS(AE_AML_INVALID_RESOURCE_TYPE); | ||
361 | } | ||
417 | 362 | ||
418 | temp8 = (u8) ACPI_ROUND_UP_to_64_bITS(temp8); | 363 | /* Get the base size of the (external stream) resource descriptor */ |
419 | 364 | ||
420 | structure_size = | 365 | segment_size = acpi_gbl_stream_sizes[resource->type]; |
421 | ACPI_SIZEOF_RESOURCE(struct acpi_resource_address64) | ||
422 | + (temp8 * sizeof(u8)); | ||
423 | break; | ||
424 | 366 | ||
425 | case ACPI_RDESC_TYPE_DWORD_ADDRESS_SPACE: | 367 | /* |
368 | * Augment the base size for descriptors with optional and/or | ||
369 | * variable-length fields | ||
370 | */ | ||
371 | switch (resource->type) { | ||
372 | case ACPI_RSTYPE_VENDOR: | ||
426 | /* | 373 | /* |
427 | * 32-Bit Address Resource | 374 | * Vendor Defined Resource: |
375 | * For a Vendor Specific resource, if the Length is between 1 and 7 | ||
376 | * it will be created as a Small Resource data type, otherwise it | ||
377 | * is a Large Resource data type. | ||
428 | */ | 378 | */ |
429 | buffer = byte_stream_buffer; | 379 | if (resource->data.vendor_specific.length > 7) { |
430 | 380 | /* Base size of a Large resource descriptor */ | |
431 | ++buffer; | ||
432 | ACPI_MOVE_16_TO_16(&temp16, buffer); | ||
433 | 381 | ||
434 | bytes_consumed = temp16 + 3; | 382 | segment_size = 3; |
435 | |||
436 | /* | ||
437 | * Resource Source Index and Resource Source are optional elements. | ||
438 | * Check the length of the Bytestream. If it is greater than 23, | ||
439 | * that means that an Index exists and is followed by a null | ||
440 | * terminated string. Therefore, set the temp variable to the | ||
441 | * length minus the minimum byte stream length plus the byte for | ||
442 | * the Index to determine the size of the NULL terminated string. | ||
443 | */ | ||
444 | if (23 < temp16) { | ||
445 | temp8 = (u8) (temp16 - 24); | ||
446 | } else { | ||
447 | temp8 = 0; | ||
448 | } | 383 | } |
449 | 384 | ||
450 | /* Ensure a 32-bit boundary for the structure */ | 385 | /* Add the size of the vendor-specific data */ |
451 | 386 | ||
452 | temp8 = (u8) ACPI_ROUND_UP_to_32_bITS(temp8); | 387 | segment_size += resource->data.vendor_specific.length; |
453 | |||
454 | structure_size = | ||
455 | ACPI_SIZEOF_RESOURCE(struct acpi_resource_address32) | ||
456 | + (temp8 * sizeof(u8)); | ||
457 | break; | 388 | break; |
458 | 389 | ||
459 | case ACPI_RDESC_TYPE_WORD_ADDRESS_SPACE: | 390 | case ACPI_RSTYPE_END_TAG: |
460 | /* | 391 | /* |
461 | * 16-Bit Address Resource | 392 | * End Tag: |
393 | * We are done -- return the accumulated total size. | ||
462 | */ | 394 | */ |
463 | buffer = byte_stream_buffer; | 395 | *size_needed = byte_stream_size_needed + segment_size; |
464 | 396 | ||
465 | ++buffer; | 397 | /* Normal exit */ |
466 | ACPI_MOVE_16_TO_16(&temp16, buffer); | ||
467 | 398 | ||
468 | bytes_consumed = temp16 + 3; | 399 | return_ACPI_STATUS(AE_OK); |
469 | 400 | ||
401 | case ACPI_RSTYPE_ADDRESS16: | ||
470 | /* | 402 | /* |
471 | * Resource Source Index and Resource Source are optional elements. | 403 | * 16-Bit Address Resource: |
472 | * Check the length of the Bytestream. If it is greater than 13, | 404 | * Add the size of the optional resource_source info |
473 | * that means that an Index exists and is followed by a null | ||
474 | * terminated string. Therefore, set the temp variable to the | ||
475 | * length minus the minimum byte stream length plus the byte for | ||
476 | * the Index to determine the size of the NULL terminated string. | ||
477 | */ | 405 | */ |
478 | if (13 < temp16) { | 406 | segment_size += |
479 | temp8 = (u8) (temp16 - 14); | 407 | acpi_rs_struct_option_length(&resource->data. |
480 | } else { | 408 | address16. |
481 | temp8 = 0; | 409 | resource_source); |
482 | } | ||
483 | |||
484 | /* Ensure a 32-bit boundary for the structure */ | ||
485 | |||
486 | temp8 = (u8) ACPI_ROUND_UP_to_32_bITS(temp8); | ||
487 | |||
488 | structure_size = | ||
489 | ACPI_SIZEOF_RESOURCE(struct acpi_resource_address16) | ||
490 | + (temp8 * sizeof(u8)); | ||
491 | break; | 410 | break; |
492 | 411 | ||
493 | case ACPI_RDESC_TYPE_EXTENDED_XRUPT: | 412 | case ACPI_RSTYPE_ADDRESS32: |
494 | /* | ||
495 | * Extended IRQ | ||
496 | */ | ||
497 | buffer = byte_stream_buffer; | ||
498 | |||
499 | ++buffer; | ||
500 | ACPI_MOVE_16_TO_16(&temp16, buffer); | ||
501 | |||
502 | bytes_consumed = temp16 + 3; | ||
503 | |||
504 | /* | 413 | /* |
505 | * Point past the length field and the Interrupt vector flags to | 414 | * 32-Bit Address Resource: |
506 | * save off the Interrupt table length to the Temp8 variable. | 415 | * Add the size of the optional resource_source info |
507 | */ | 416 | */ |
508 | buffer += 3; | 417 | segment_size += |
509 | temp8 = *buffer; | 418 | acpi_rs_struct_option_length(&resource->data. |
419 | address32. | ||
420 | resource_source); | ||
421 | break; | ||
510 | 422 | ||
423 | case ACPI_RSTYPE_ADDRESS64: | ||
511 | /* | 424 | /* |
512 | * To compensate for multiple interrupt numbers, add 4 bytes for | 425 | * 64-Bit Address Resource: |
513 | * each additional interrupts greater than 1 | 426 | * Add the size of the optional resource_source info |
514 | */ | 427 | */ |
515 | additional_bytes = (u8) ((temp8 - 1) * 4); | 428 | segment_size += |
429 | acpi_rs_struct_option_length(&resource->data. | ||
430 | address64. | ||
431 | resource_source); | ||
432 | break; | ||
516 | 433 | ||
434 | case ACPI_RSTYPE_EXT_IRQ: | ||
517 | /* | 435 | /* |
518 | * Resource Source Index and Resource Source are optional elements. | 436 | * Extended IRQ Resource: |
519 | * Check the length of the Bytestream. If it is greater than 9, | 437 | * Add the size of each additional optional interrupt beyond the |
520 | * that means that an Index exists and is followed by a null | 438 | * required 1 (4 bytes for each u32 interrupt number) |
521 | * terminated string. Therefore, set the temp variable to the | ||
522 | * length minus the minimum byte stream length plus the byte for | ||
523 | * the Index to determine the size of the NULL terminated string. | ||
524 | */ | 439 | */ |
525 | if (9 + additional_bytes < temp16) { | 440 | segment_size += (((acpi_size) |
526 | temp8 = (u8) (temp16 - (9 + additional_bytes)); | 441 | resource->data.extended_irq. |
527 | } else { | 442 | number_of_interrupts - 1) * 4); |
528 | temp8 = 0; | ||
529 | } | ||
530 | 443 | ||
531 | /* Ensure a 32-bit boundary for the structure */ | 444 | /* Add the size of the optional resource_source info */ |
532 | 445 | ||
533 | temp8 = (u8) ACPI_ROUND_UP_to_32_bITS(temp8); | 446 | segment_size += |
447 | acpi_rs_struct_option_length(&resource->data. | ||
448 | extended_irq. | ||
449 | resource_source); | ||
450 | break; | ||
534 | 451 | ||
535 | structure_size = | 452 | default: |
536 | ACPI_SIZEOF_RESOURCE(struct acpi_resource_ext_irq) + | ||
537 | (additional_bytes * sizeof(u8)) + | ||
538 | (temp8 * sizeof(u8)); | ||
539 | break; | 453 | break; |
454 | } | ||
540 | 455 | ||
541 | case ACPI_RDESC_TYPE_IRQ_FORMAT: | 456 | /* Update the total */ |
542 | /* | ||
543 | * IRQ Resource. | ||
544 | * Determine if it there are two or three trailing bytes | ||
545 | */ | ||
546 | buffer = byte_stream_buffer; | ||
547 | temp8 = *buffer; | ||
548 | 457 | ||
549 | if (temp8 & 0x01) { | 458 | byte_stream_size_needed += segment_size; |
550 | bytes_consumed = 4; | ||
551 | } else { | ||
552 | bytes_consumed = 3; | ||
553 | } | ||
554 | 459 | ||
555 | /* Point past the descriptor */ | 460 | /* Point to the next object */ |
556 | 461 | ||
557 | ++buffer; | 462 | resource = ACPI_PTR_ADD(struct acpi_resource, |
463 | resource, resource->length); | ||
464 | } | ||
558 | 465 | ||
559 | /* Look at the number of bits set */ | 466 | /* Did not find an END_TAG descriptor */ |
560 | 467 | ||
561 | ACPI_MOVE_16_TO_16(&temp16, buffer); | 468 | return_ACPI_STATUS(AE_AML_INVALID_RESOURCE_TYPE); |
469 | } | ||
562 | 470 | ||
563 | for (index = 0; index < 16; index++) { | 471 | /******************************************************************************* |
564 | if (temp16 & 0x1) { | 472 | * |
565 | ++number_of_interrupts; | 473 | * FUNCTION: acpi_rs_get_list_length |
566 | } | 474 | * |
475 | * PARAMETERS: byte_stream_buffer - Pointer to the resource byte stream | ||
476 | * byte_stream_buffer_length - Size of byte_stream_buffer | ||
477 | * size_needed - Where the size needed is returned | ||
478 | * | ||
479 | * RETURN: Status | ||
480 | * | ||
481 | * DESCRIPTION: Takes an external resource byte stream and calculates the size | ||
482 | * buffer needed to hold the corresponding internal resource | ||
483 | * descriptor linked list. | ||
484 | * | ||
485 | ******************************************************************************/ | ||
567 | 486 | ||
568 | temp16 >>= 1; | 487 | acpi_status |
569 | } | 488 | acpi_rs_get_list_length(u8 * byte_stream_buffer, |
489 | u32 byte_stream_buffer_length, acpi_size * size_needed) | ||
490 | { | ||
491 | u8 *buffer; | ||
492 | ACPI_RESOURCE_SIZES *resource_info; | ||
493 | u32 buffer_size = 0; | ||
494 | u32 bytes_parsed = 0; | ||
495 | u8 resource_type; | ||
496 | u16 temp16; | ||
497 | u16 resource_length; | ||
498 | u16 header_length; | ||
499 | u32 extra_struct_bytes; | ||
570 | 500 | ||
571 | structure_size = | 501 | ACPI_FUNCTION_TRACE("rs_get_list_length"); |
572 | ACPI_SIZEOF_RESOURCE(struct acpi_resource_io) + | ||
573 | (number_of_interrupts * sizeof(u32)); | ||
574 | break; | ||
575 | 502 | ||
576 | case ACPI_RDESC_TYPE_DMA_FORMAT: | 503 | while (bytes_parsed < byte_stream_buffer_length) { |
577 | /* | 504 | /* The next byte in the stream is the resource descriptor type */ |
578 | * DMA Resource | ||
579 | */ | ||
580 | buffer = byte_stream_buffer; | ||
581 | bytes_consumed = 3; | ||
582 | 505 | ||
583 | /* Point past the descriptor */ | 506 | resource_type = acpi_rs_get_resource_type(*byte_stream_buffer); |
584 | 507 | ||
585 | ++buffer; | 508 | /* Get the base stream size and structure sizes for the descriptor */ |
586 | 509 | ||
587 | /* Look at the number of bits set */ | 510 | resource_info = acpi_rs_get_resource_sizes(resource_type); |
511 | if (!resource_info) { | ||
512 | return_ACPI_STATUS(AE_AML_INVALID_RESOURCE_TYPE); | ||
513 | } | ||
588 | 514 | ||
589 | temp8 = *buffer; | 515 | /* Get the Length field from the input resource descriptor */ |
590 | 516 | ||
591 | for (index = 0; index < 8; index++) { | 517 | resource_length = |
592 | if (temp8 & 0x1) { | 518 | acpi_rs_get_resource_length(byte_stream_buffer); |
593 | ++number_of_channels; | ||
594 | } | ||
595 | 519 | ||
596 | temp8 >>= 1; | 520 | /* Augment the size for descriptors with optional fields */ |
597 | } | ||
598 | 521 | ||
599 | structure_size = | 522 | extra_struct_bytes = 0; |
600 | ACPI_SIZEOF_RESOURCE(struct acpi_resource_dma) + | ||
601 | (number_of_channels * sizeof(u32)); | ||
602 | break; | ||
603 | 523 | ||
604 | case ACPI_RDESC_TYPE_START_DEPENDENT: | 524 | if (!(resource_type & ACPI_RDESC_TYPE_LARGE)) { |
605 | /* | 525 | /* |
606 | * Start Dependent Functions Resource | 526 | * Small resource descriptors |
607 | * Determine if it there are two or three trailing bytes | ||
608 | */ | 527 | */ |
609 | buffer = byte_stream_buffer; | 528 | header_length = 1; |
610 | temp8 = *buffer; | 529 | buffer = byte_stream_buffer + header_length; |
611 | 530 | ||
612 | if (temp8 & 0x01) { | 531 | switch (resource_type) { |
613 | bytes_consumed = 2; | 532 | case ACPI_RDESC_TYPE_IRQ_FORMAT: |
614 | } else { | 533 | /* |
615 | bytes_consumed = 1; | 534 | * IRQ Resource: |
616 | } | 535 | * Get the number of bits set in the IRQ word |
536 | */ | ||
537 | ACPI_MOVE_16_TO_16(&temp16, buffer); | ||
617 | 538 | ||
618 | structure_size = | 539 | extra_struct_bytes = |
619 | ACPI_SIZEOF_RESOURCE(struct | 540 | (acpi_rs_count_set_bits(temp16) * |
620 | acpi_resource_start_dpf); | 541 | sizeof(u32)); |
621 | break; | 542 | break; |
622 | 543 | ||
623 | case ACPI_RDESC_TYPE_END_DEPENDENT: | 544 | case ACPI_RDESC_TYPE_DMA_FORMAT: |
624 | /* | 545 | /* |
625 | * End Dependent Functions Resource | 546 | * DMA Resource: |
626 | */ | 547 | * Get the number of bits set in the DMA channels byte |
627 | bytes_consumed = 1; | 548 | */ |
628 | structure_size = ACPI_RESOURCE_LENGTH; | 549 | extra_struct_bytes = |
629 | break; | 550 | (acpi_rs_count_set_bits((u16) * buffer) * |
551 | sizeof(u32)); | ||
552 | break; | ||
630 | 553 | ||
631 | case ACPI_RDESC_TYPE_IO_PORT: | 554 | case ACPI_RDESC_TYPE_SMALL_VENDOR: |
632 | /* | 555 | /* |
633 | * IO Port Resource | 556 | * Vendor Specific Resource: |
634 | */ | 557 | * Ensure a 32-bit boundary for the structure |
635 | bytes_consumed = 8; | 558 | */ |
636 | structure_size = | 559 | extra_struct_bytes = |
637 | ACPI_SIZEOF_RESOURCE(struct acpi_resource_io); | 560 | ACPI_ROUND_UP_to_32_bITS(resource_length); |
638 | break; | 561 | break; |
639 | 562 | ||
640 | case ACPI_RDESC_TYPE_FIXED_IO_PORT: | 563 | case ACPI_RDESC_TYPE_END_TAG: |
641 | /* | 564 | /* |
642 | * Fixed IO Port Resource | 565 | * End Tag: |
643 | */ | 566 | * Terminate the loop now |
644 | bytes_consumed = 4; | 567 | */ |
645 | structure_size = | 568 | byte_stream_buffer_length = bytes_parsed; |
646 | ACPI_SIZEOF_RESOURCE(struct acpi_resource_fixed_io); | 569 | break; |
647 | break; | ||
648 | 570 | ||
649 | case ACPI_RDESC_TYPE_SMALL_VENDOR: | 571 | default: |
572 | break; | ||
573 | } | ||
574 | } else { | ||
650 | /* | 575 | /* |
651 | * Vendor Specific Resource | 576 | * Large resource descriptors |
652 | */ | 577 | */ |
653 | buffer = byte_stream_buffer; | 578 | header_length = sizeof(struct asl_large_header); |
579 | buffer = byte_stream_buffer + header_length; | ||
654 | 580 | ||
655 | temp8 = *buffer; | 581 | switch (resource_type) { |
656 | temp8 = (u8) (temp8 & 0x7); | 582 | case ACPI_RDESC_TYPE_LARGE_VENDOR: |
657 | bytes_consumed = temp8 + 1; | 583 | /* |
584 | * Vendor Defined Resource: | ||
585 | * Add vendor data and ensure a 32-bit boundary for the structure | ||
586 | */ | ||
587 | extra_struct_bytes = | ||
588 | ACPI_ROUND_UP_to_32_bITS(resource_length); | ||
589 | break; | ||
658 | 590 | ||
659 | /* Ensure a 32-bit boundary for the structure */ | 591 | case ACPI_RDESC_TYPE_DWORD_ADDRESS_SPACE: |
592 | case ACPI_RDESC_TYPE_WORD_ADDRESS_SPACE: | ||
593 | /* | ||
594 | * 32-Bit or 16-bit Address Resource: | ||
595 | * Add the size of any optional data (resource_source) | ||
596 | */ | ||
597 | extra_struct_bytes = | ||
598 | acpi_rs_stream_option_length | ||
599 | (resource_length, | ||
600 | resource_info->minimum_stream_size); | ||
601 | break; | ||
660 | 602 | ||
661 | temp8 = (u8) ACPI_ROUND_UP_to_32_bITS(temp8); | 603 | case ACPI_RDESC_TYPE_EXTENDED_XRUPT: |
662 | structure_size = | 604 | /* |
663 | ACPI_SIZEOF_RESOURCE(struct acpi_resource_vendor) + | 605 | * Extended IRQ: |
664 | (temp8 * sizeof(u8)); | 606 | * Point past the interrupt_vector_flags to get the |
665 | break; | 607 | * interrupt_table_length. |
608 | */ | ||
609 | buffer++; | ||
666 | 610 | ||
667 | case ACPI_RDESC_TYPE_END_TAG: | 611 | /* |
668 | /* | 612 | * Add 4 bytes for each additional interrupt. Note: at least one |
669 | * End Tag | 613 | * interrupt is required and is included in the minimum |
670 | */ | 614 | * descriptor size |
671 | bytes_consumed = 2; | 615 | */ |
672 | structure_size = ACPI_RESOURCE_LENGTH; | 616 | extra_struct_bytes = |
673 | byte_stream_buffer_length = bytes_parsed; | 617 | ((*buffer - 1) * sizeof(u32)); |
674 | break; | ||
675 | 618 | ||
676 | default: | 619 | /* Add the size of any optional data (resource_source) */ |
677 | /* | ||
678 | * If we get here, everything is out of sync, | ||
679 | * exit with an error | ||
680 | */ | ||
681 | return_ACPI_STATUS(AE_AML_INVALID_RESOURCE_TYPE); | ||
682 | } | ||
683 | 620 | ||
684 | /* Update the return value and counter */ | 621 | extra_struct_bytes += |
622 | acpi_rs_stream_option_length(resource_length | ||
623 | - | ||
624 | extra_struct_bytes, | ||
625 | resource_info-> | ||
626 | minimum_stream_size); | ||
627 | break; | ||
685 | 628 | ||
686 | buffer_size += (u32) ACPI_ALIGN_RESOURCE_SIZE(structure_size); | 629 | case ACPI_RDESC_TYPE_QWORD_ADDRESS_SPACE: |
687 | bytes_parsed += bytes_consumed; | 630 | /* |
631 | * 64-Bit Address Resource: | ||
632 | * Add the size of any optional data (resource_source) | ||
633 | * Ensure a 64-bit boundary for the structure | ||
634 | */ | ||
635 | extra_struct_bytes = | ||
636 | ACPI_ROUND_UP_to_64_bITS | ||
637 | (acpi_rs_stream_option_length | ||
638 | (resource_length, | ||
639 | resource_info->minimum_stream_size)); | ||
640 | break; | ||
641 | |||
642 | default: | ||
643 | break; | ||
644 | } | ||
645 | } | ||
646 | |||
647 | /* Update the required buffer size for the internal descriptor structs */ | ||
688 | 648 | ||
689 | /* Set the byte stream to point to the next resource */ | 649 | temp16 = |
650 | (u16) (resource_info->minimum_struct_size + | ||
651 | extra_struct_bytes); | ||
652 | buffer_size += (u32) ACPI_ALIGN_RESOURCE_SIZE(temp16); | ||
690 | 653 | ||
691 | byte_stream_buffer += bytes_consumed; | 654 | /* |
655 | * Update byte count and point to the next resource within the stream | ||
656 | * using the size of the header plus the length contained in the header | ||
657 | */ | ||
658 | temp16 = (u16) (header_length + resource_length); | ||
659 | bytes_parsed += temp16; | ||
660 | byte_stream_buffer += temp16; | ||
692 | } | 661 | } |
693 | 662 | ||
694 | /* This is the data the caller needs */ | 663 | /* This is the data the caller needs */ |
diff --git a/drivers/acpi/resources/rsdump.c b/drivers/acpi/resources/rsdump.c index 75bd34d1783f..9d93ee5f0060 100644 --- a/drivers/acpi/resources/rsdump.c +++ b/drivers/acpi/resources/rsdump.c | |||
@@ -49,1021 +49,967 @@ ACPI_MODULE_NAME("rsdump") | |||
49 | 49 | ||
50 | #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) | 50 | #if defined(ACPI_DEBUG_OUTPUT) || defined(ACPI_DEBUGGER) |
51 | /* Local prototypes */ | 51 | /* Local prototypes */ |
52 | static void acpi_rs_dump_irq(union acpi_resource_data *data); | 52 | static void acpi_rs_dump_irq(union acpi_resource_data *resource); |
53 | 53 | ||
54 | static void acpi_rs_dump_address16(union acpi_resource_data *data); | 54 | static void acpi_rs_dump_address16(union acpi_resource_data *resource); |
55 | 55 | ||
56 | static void acpi_rs_dump_address32(union acpi_resource_data *data); | 56 | static void acpi_rs_dump_address32(union acpi_resource_data *resource); |
57 | 57 | ||
58 | static void acpi_rs_dump_address64(union acpi_resource_data *data); | 58 | static void acpi_rs_dump_address64(union acpi_resource_data *resource); |
59 | 59 | ||
60 | static void acpi_rs_dump_dma(union acpi_resource_data *data); | 60 | static void acpi_rs_dump_dma(union acpi_resource_data *resource); |
61 | 61 | ||
62 | static void acpi_rs_dump_io(union acpi_resource_data *data); | 62 | static void acpi_rs_dump_io(union acpi_resource_data *resource); |
63 | 63 | ||
64 | static void acpi_rs_dump_extended_irq(union acpi_resource_data *data); | 64 | static void acpi_rs_dump_extended_irq(union acpi_resource_data *resource); |
65 | 65 | ||
66 | static void acpi_rs_dump_fixed_io(union acpi_resource_data *data); | 66 | static void acpi_rs_dump_fixed_io(union acpi_resource_data *resource); |
67 | 67 | ||
68 | static void acpi_rs_dump_fixed_memory32(union acpi_resource_data *data); | 68 | static void acpi_rs_dump_fixed_memory32(union acpi_resource_data *resource); |
69 | 69 | ||
70 | static void acpi_rs_dump_memory24(union acpi_resource_data *data); | 70 | static void acpi_rs_dump_memory24(union acpi_resource_data *resource); |
71 | 71 | ||
72 | static void acpi_rs_dump_memory32(union acpi_resource_data *data); | 72 | static void acpi_rs_dump_memory32(union acpi_resource_data *resource); |
73 | 73 | ||
74 | static void acpi_rs_dump_start_depend_fns(union acpi_resource_data *data); | 74 | static void acpi_rs_dump_start_depend_fns(union acpi_resource_data *resource); |
75 | 75 | ||
76 | static void acpi_rs_dump_vendor_specific(union acpi_resource_data *data); | 76 | static void acpi_rs_dump_vendor_specific(union acpi_resource_data *resource); |
77 | |||
78 | static void acpi_rs_dump_generic_reg(union acpi_resource_data *resource); | ||
79 | |||
80 | static void acpi_rs_dump_end_depend_fns(union acpi_resource_data *resource); | ||
81 | |||
82 | static void acpi_rs_dump_end_tag(union acpi_resource_data *resource); | ||
83 | |||
84 | static void acpi_rs_out_string(char *title, char *value); | ||
85 | |||
86 | static void acpi_rs_out_integer8(char *title, u8 value); | ||
87 | |||
88 | static void acpi_rs_out_integer16(char *title, u16 value); | ||
89 | |||
90 | static void acpi_rs_out_integer32(char *title, u32 value); | ||
91 | |||
92 | static void acpi_rs_out_integer64(char *title, u64 value); | ||
93 | |||
94 | static void acpi_rs_out_title(char *title); | ||
95 | |||
96 | static void acpi_rs_dump_byte_list(u32 length, u8 * data); | ||
97 | |||
98 | static void acpi_rs_dump_dword_list(u32 length, u32 * data); | ||
99 | |||
100 | static void acpi_rs_dump_short_byte_list(u32 length, u32 * data); | ||
101 | |||
102 | static void | ||
103 | acpi_rs_dump_resource_source(struct acpi_resource_source *resource_source); | ||
104 | |||
105 | static void acpi_rs_dump_address_common(union acpi_resource_data *resource); | ||
106 | |||
107 | /* Dispatch table for resource dump functions */ | ||
108 | |||
109 | typedef | ||
110 | void (*ACPI_DUMP_RESOURCE) (union acpi_resource_data * data); | ||
111 | |||
112 | static ACPI_DUMP_RESOURCE acpi_gbl_dump_resource_dispatch[] = { | ||
113 | acpi_rs_dump_irq, /* ACPI_RSTYPE_IRQ */ | ||
114 | acpi_rs_dump_dma, /* ACPI_RSTYPE_DMA */ | ||
115 | acpi_rs_dump_start_depend_fns, /* ACPI_RSTYPE_START_DPF */ | ||
116 | acpi_rs_dump_end_depend_fns, /* ACPI_RSTYPE_END_DPF */ | ||
117 | acpi_rs_dump_io, /* ACPI_RSTYPE_IO */ | ||
118 | acpi_rs_dump_fixed_io, /* ACPI_RSTYPE_FIXED_IO */ | ||
119 | acpi_rs_dump_vendor_specific, /* ACPI_RSTYPE_VENDOR */ | ||
120 | acpi_rs_dump_end_tag, /* ACPI_RSTYPE_END_TAG */ | ||
121 | acpi_rs_dump_memory24, /* ACPI_RSTYPE_MEM24 */ | ||
122 | acpi_rs_dump_memory32, /* ACPI_RSTYPE_MEM32 */ | ||
123 | acpi_rs_dump_fixed_memory32, /* ACPI_RSTYPE_FIXED_MEM32 */ | ||
124 | acpi_rs_dump_address16, /* ACPI_RSTYPE_ADDRESS16 */ | ||
125 | acpi_rs_dump_address32, /* ACPI_RSTYPE_ADDRESS32 */ | ||
126 | acpi_rs_dump_address64, /* ACPI_RSTYPE_ADDRESS64 */ | ||
127 | acpi_rs_dump_extended_irq, /* ACPI_RSTYPE_EXT_IRQ */ | ||
128 | acpi_rs_dump_generic_reg /* ACPI_RSTYPE_GENERIC_REG */ | ||
129 | }; | ||
77 | 130 | ||
78 | /******************************************************************************* | 131 | /******************************************************************************* |
79 | * | 132 | * |
80 | * FUNCTION: acpi_rs_dump_irq | 133 | * FUNCTION: acpi_rs_out* |
134 | * | ||
135 | * PARAMETERS: Title - Name of the resource field | ||
136 | * Value - Value of the resource field | ||
137 | * | ||
138 | * RETURN: None | ||
139 | * | ||
140 | * DESCRIPTION: Miscellaneous helper functions to consistently format the | ||
141 | * output of the resource dump routines | ||
142 | * | ||
143 | ******************************************************************************/ | ||
144 | |||
145 | static void acpi_rs_out_string(char *title, char *value) | ||
146 | { | ||
147 | acpi_os_printf("%30s : %s\n", title, value); | ||
148 | } | ||
149 | |||
150 | static void acpi_rs_out_integer8(char *title, u8 value) | ||
151 | { | ||
152 | acpi_os_printf("%30s : %2.2X\n", title, value); | ||
153 | } | ||
154 | |||
155 | static void acpi_rs_out_integer16(char *title, u16 value) | ||
156 | { | ||
157 | acpi_os_printf("%30s : %4.4X\n", title, value); | ||
158 | } | ||
159 | |||
160 | static void acpi_rs_out_integer32(char *title, u32 value) | ||
161 | { | ||
162 | acpi_os_printf("%30s : %8.8X\n", title, value); | ||
163 | } | ||
164 | |||
165 | static void acpi_rs_out_integer64(char *title, u64 value) | ||
166 | { | ||
167 | acpi_os_printf("%30s : %8.8X%8.8X\n", title, ACPI_FORMAT_UINT64(value)); | ||
168 | } | ||
169 | |||
170 | static void acpi_rs_out_title(char *title) | ||
171 | { | ||
172 | acpi_os_printf("%30s : ", title); | ||
173 | } | ||
174 | |||
175 | /******************************************************************************* | ||
176 | * | ||
177 | * FUNCTION: acpi_rs_dump*List | ||
178 | * | ||
179 | * PARAMETERS: Length - Number of elements in the list | ||
180 | * Data - Start of the list | ||
181 | * | ||
182 | * RETURN: None | ||
183 | * | ||
184 | * DESCRIPTION: Miscellaneous functions to dump lists of raw data | ||
185 | * | ||
186 | ******************************************************************************/ | ||
187 | |||
188 | static void acpi_rs_dump_byte_list(u32 length, u8 * data) | ||
189 | { | ||
190 | u32 i; | ||
191 | |||
192 | for (i = 0; i < length; i++) { | ||
193 | acpi_os_printf("%28s%2.2X : %2.2X\n", "Byte", i, data[i]); | ||
194 | } | ||
195 | } | ||
196 | |||
197 | static void acpi_rs_dump_dword_list(u32 length, u32 * data) | ||
198 | { | ||
199 | u32 i; | ||
200 | |||
201 | for (i = 0; i < length; i++) { | ||
202 | acpi_os_printf("%28s%2.2X : %8.8X\n", "Dword", i, data[i]); | ||
203 | } | ||
204 | } | ||
205 | |||
206 | static void acpi_rs_dump_short_byte_list(u32 length, u32 * data) | ||
207 | { | ||
208 | u32 i; | ||
209 | |||
210 | for (i = 0; i < length; i++) { | ||
211 | acpi_os_printf("%X ", data[i]); | ||
212 | } | ||
213 | acpi_os_printf("\n"); | ||
214 | } | ||
215 | |||
216 | /******************************************************************************* | ||
217 | * | ||
218 | * FUNCTION: acpi_rs_dump_resource_source | ||
81 | * | 219 | * |
82 | * PARAMETERS: Data - pointer to the resource structure to dump. | 220 | * PARAMETERS: resource_source - Pointer to a Resource Source struct |
83 | * | 221 | * |
84 | * RETURN: None | 222 | * RETURN: None |
85 | * | 223 | * |
86 | * DESCRIPTION: Prints out the various members of the Data structure type. | 224 | * DESCRIPTION: Common routine for dumping the optional resource_source and the |
225 | * corresponding resource_source_index. | ||
87 | * | 226 | * |
88 | ******************************************************************************/ | 227 | ******************************************************************************/ |
89 | 228 | ||
90 | static void acpi_rs_dump_irq(union acpi_resource_data *data) | 229 | static void |
230 | acpi_rs_dump_resource_source(struct acpi_resource_source *resource_source) | ||
91 | { | 231 | { |
92 | struct acpi_resource_irq *irq_data = (struct acpi_resource_irq *)data; | ||
93 | u8 index = 0; | ||
94 | 232 | ||
233 | if (resource_source->index == 0xFF) { | ||
234 | return; | ||
235 | } | ||
236 | |||
237 | acpi_rs_out_integer8("Resource Source Index", | ||
238 | (u8) resource_source->index); | ||
239 | |||
240 | acpi_rs_out_string("Resource Source", | ||
241 | resource_source->string_ptr ? | ||
242 | resource_source->string_ptr : "[Not Specified]"); | ||
243 | } | ||
244 | |||
245 | /******************************************************************************* | ||
246 | * | ||
247 | * FUNCTION: acpi_rs_dump_address_common | ||
248 | * | ||
249 | * PARAMETERS: Resource - Pointer to an internal resource descriptor | ||
250 | * | ||
251 | * RETURN: None | ||
252 | * | ||
253 | * DESCRIPTION: Dump the fields that are common to all Address resource | ||
254 | * descriptors | ||
255 | * | ||
256 | ******************************************************************************/ | ||
257 | |||
258 | static void acpi_rs_dump_address_common(union acpi_resource_data *resource) | ||
259 | { | ||
95 | ACPI_FUNCTION_ENTRY(); | 260 | ACPI_FUNCTION_ENTRY(); |
96 | 261 | ||
97 | acpi_os_printf("IRQ Resource\n"); | 262 | /* Decode the type-specific flags */ |
263 | |||
264 | switch (resource->address.resource_type) { | ||
265 | case ACPI_MEMORY_RANGE: | ||
98 | 266 | ||
99 | acpi_os_printf(" %s Triggered\n", | 267 | acpi_rs_out_string("Resource Type", "Memory Range"); |
100 | ACPI_LEVEL_SENSITIVE == | 268 | |
101 | irq_data->edge_level ? "Level" : "Edge"); | 269 | acpi_rs_out_title("Type-Specific Flags"); |
270 | |||
271 | switch (resource->address.attribute.memory.cache_attribute) { | ||
272 | case ACPI_NON_CACHEABLE_MEMORY: | ||
273 | acpi_os_printf("Noncacheable memory\n"); | ||
274 | break; | ||
102 | 275 | ||
103 | acpi_os_printf(" Active %s\n", | 276 | case ACPI_CACHABLE_MEMORY: |
104 | ACPI_ACTIVE_LOW == | 277 | acpi_os_printf("Cacheable memory\n"); |
105 | irq_data->active_high_low ? "Low" : "High"); | 278 | break; |
106 | 279 | ||
107 | acpi_os_printf(" %s\n", | 280 | case ACPI_WRITE_COMBINING_MEMORY: |
108 | ACPI_SHARED == | 281 | acpi_os_printf("Write-combining memory\n"); |
109 | irq_data->shared_exclusive ? "Shared" : "Exclusive"); | 282 | break; |
110 | 283 | ||
111 | acpi_os_printf(" %X Interrupts ( ", irq_data->number_of_interrupts); | 284 | case ACPI_PREFETCHABLE_MEMORY: |
285 | acpi_os_printf("Prefetchable memory\n"); | ||
286 | break; | ||
287 | |||
288 | default: | ||
289 | acpi_os_printf("Invalid cache attribute\n"); | ||
290 | break; | ||
291 | } | ||
292 | |||
293 | acpi_rs_out_string("Read/Write Attribute", | ||
294 | ACPI_READ_WRITE_MEMORY == | ||
295 | resource->address.attribute.memory. | ||
296 | read_write_attribute ? "Read/Write" : | ||
297 | "Read Only"); | ||
298 | break; | ||
299 | |||
300 | case ACPI_IO_RANGE: | ||
301 | |||
302 | acpi_rs_out_string("Resource Type", "I/O Range"); | ||
303 | |||
304 | acpi_rs_out_title("Type-Specific Flags"); | ||
305 | |||
306 | switch (resource->address.attribute.io.range_attribute) { | ||
307 | case ACPI_NON_ISA_ONLY_RANGES: | ||
308 | acpi_os_printf("Non-ISA I/O Addresses\n"); | ||
309 | break; | ||
112 | 310 | ||
113 | for (index = 0; index < irq_data->number_of_interrupts; index++) { | 311 | case ACPI_ISA_ONLY_RANGES: |
114 | acpi_os_printf("%X ", irq_data->interrupts[index]); | 312 | acpi_os_printf("ISA I/O Addresses\n"); |
313 | break; | ||
314 | |||
315 | case ACPI_ENTIRE_RANGE: | ||
316 | acpi_os_printf("ISA and non-ISA I/O Addresses\n"); | ||
317 | break; | ||
318 | |||
319 | default: | ||
320 | acpi_os_printf("Invalid range attribute\n"); | ||
321 | break; | ||
322 | } | ||
323 | |||
324 | acpi_rs_out_string("Translation Attribute", | ||
325 | ACPI_SPARSE_TRANSLATION == | ||
326 | resource->address.attribute.io. | ||
327 | translation_attribute ? "Sparse Translation" | ||
328 | : "Dense Translation"); | ||
329 | break; | ||
330 | |||
331 | case ACPI_BUS_NUMBER_RANGE: | ||
332 | |||
333 | acpi_rs_out_string("Resource Type", "Bus Number Range"); | ||
334 | break; | ||
335 | |||
336 | default: | ||
337 | |||
338 | acpi_rs_out_integer8("Resource Type", | ||
339 | (u8) resource->address.resource_type); | ||
340 | break; | ||
115 | } | 341 | } |
116 | 342 | ||
117 | acpi_os_printf(")\n"); | 343 | /* Decode the general flags */ |
118 | return; | 344 | |
345 | acpi_rs_out_string("Resource", | ||
346 | ACPI_CONSUMER == | ||
347 | resource->address. | ||
348 | producer_consumer ? "Consumer" : "Producer"); | ||
349 | |||
350 | acpi_rs_out_string("Decode", | ||
351 | ACPI_SUB_DECODE == resource->address.decode ? | ||
352 | "Subtractive" : "Positive"); | ||
353 | |||
354 | acpi_rs_out_string("Min Address", | ||
355 | ACPI_ADDRESS_FIXED == | ||
356 | resource->address. | ||
357 | min_address_fixed ? "Fixed" : "Not Fixed"); | ||
358 | |||
359 | acpi_rs_out_string("Max Address", | ||
360 | ACPI_ADDRESS_FIXED == | ||
361 | resource->address. | ||
362 | max_address_fixed ? "Fixed" : "Not Fixed"); | ||
119 | } | 363 | } |
120 | 364 | ||
121 | /******************************************************************************* | 365 | /******************************************************************************* |
122 | * | 366 | * |
123 | * FUNCTION: acpi_rs_dump_dma | 367 | * FUNCTION: acpi_rs_dump_resource_list |
124 | * | 368 | * |
125 | * PARAMETERS: Data - pointer to the resource structure to dump. | 369 | * PARAMETERS: resource_list - Pointer to a resource descriptor list |
126 | * | 370 | * |
127 | * RETURN: None | 371 | * RETURN: None |
128 | * | 372 | * |
129 | * DESCRIPTION: Prints out the various members of the Data structure type. | 373 | * DESCRIPTION: Dispatches the structure to the correct dump routine. |
130 | * | 374 | * |
131 | ******************************************************************************/ | 375 | ******************************************************************************/ |
132 | 376 | ||
133 | static void acpi_rs_dump_dma(union acpi_resource_data *data) | 377 | void acpi_rs_dump_resource_list(struct acpi_resource *resource_list) |
134 | { | 378 | { |
135 | struct acpi_resource_dma *dma_data = (struct acpi_resource_dma *)data; | 379 | u32 count = 0; |
136 | u8 index = 0; | ||
137 | 380 | ||
138 | ACPI_FUNCTION_ENTRY(); | 381 | ACPI_FUNCTION_ENTRY(); |
139 | 382 | ||
383 | if (!(acpi_dbg_level & ACPI_LV_RESOURCES) | ||
384 | || !(_COMPONENT & acpi_dbg_layer)) { | ||
385 | return; | ||
386 | } | ||
387 | |||
388 | /* Dump all resource descriptors in the list */ | ||
389 | |||
390 | while (resource_list) { | ||
391 | acpi_os_printf("\n[%02X] ", count); | ||
392 | |||
393 | /* Validate Type before dispatch */ | ||
394 | |||
395 | if (resource_list->type > ACPI_RSTYPE_MAX) { | ||
396 | acpi_os_printf | ||
397 | ("Invalid descriptor type (%X) in resource list\n", | ||
398 | resource_list->type); | ||
399 | return; | ||
400 | } | ||
401 | |||
402 | /* Dump the resource descriptor */ | ||
403 | |||
404 | acpi_gbl_dump_resource_dispatch[resource_list-> | ||
405 | type] (&resource_list->data); | ||
406 | |||
407 | /* Exit on end tag */ | ||
408 | |||
409 | if (resource_list->type == ACPI_RSTYPE_END_TAG) { | ||
410 | return; | ||
411 | } | ||
412 | |||
413 | /* Get the next resource structure */ | ||
414 | |||
415 | resource_list = | ||
416 | ACPI_PTR_ADD(struct acpi_resource, resource_list, | ||
417 | resource_list->length); | ||
418 | count++; | ||
419 | } | ||
420 | } | ||
421 | |||
422 | /******************************************************************************* | ||
423 | * | ||
424 | * FUNCTION: acpi_rs_dump_irq | ||
425 | * | ||
426 | * PARAMETERS: Resource - Pointer to an internal resource descriptor | ||
427 | * | ||
428 | * RETURN: None | ||
429 | * | ||
430 | * DESCRIPTION: Dump the field names and values of the resource descriptor | ||
431 | * | ||
432 | ******************************************************************************/ | ||
433 | |||
434 | static void acpi_rs_dump_irq(union acpi_resource_data *resource) | ||
435 | { | ||
436 | ACPI_FUNCTION_ENTRY(); | ||
437 | |||
438 | acpi_os_printf("IRQ Resource\n"); | ||
439 | |||
440 | acpi_rs_out_string("Triggering", | ||
441 | ACPI_LEVEL_SENSITIVE == | ||
442 | resource->irq.edge_level ? "Level" : "Edge"); | ||
443 | |||
444 | acpi_rs_out_string("Active", | ||
445 | ACPI_ACTIVE_LOW == | ||
446 | resource->irq.active_high_low ? "Low" : "High"); | ||
447 | |||
448 | acpi_rs_out_string("Sharing", | ||
449 | ACPI_SHARED == | ||
450 | resource->irq. | ||
451 | shared_exclusive ? "Shared" : "Exclusive"); | ||
452 | |||
453 | acpi_rs_out_integer8("Interrupt Count", | ||
454 | (u8) resource->irq.number_of_interrupts); | ||
455 | |||
456 | acpi_rs_out_title("Interrupt List"); | ||
457 | acpi_rs_dump_short_byte_list(resource->irq.number_of_interrupts, | ||
458 | resource->irq.interrupts); | ||
459 | } | ||
460 | |||
461 | /******************************************************************************* | ||
462 | * | ||
463 | * FUNCTION: acpi_rs_dump_dma | ||
464 | * | ||
465 | * PARAMETERS: Resource - Pointer to an internal resource descriptor | ||
466 | * | ||
467 | * RETURN: None | ||
468 | * | ||
469 | * DESCRIPTION: Dump the field names and values of the resource descriptor | ||
470 | * | ||
471 | ******************************************************************************/ | ||
472 | |||
473 | static void acpi_rs_dump_dma(union acpi_resource_data *resource) | ||
474 | { | ||
475 | ACPI_FUNCTION_ENTRY(); | ||
476 | |||
140 | acpi_os_printf("DMA Resource\n"); | 477 | acpi_os_printf("DMA Resource\n"); |
141 | 478 | ||
142 | switch (dma_data->type) { | 479 | acpi_rs_out_title("DMA Type"); |
480 | switch (resource->dma.type) { | ||
143 | case ACPI_COMPATIBILITY: | 481 | case ACPI_COMPATIBILITY: |
144 | acpi_os_printf(" Compatibility mode\n"); | 482 | acpi_os_printf("Compatibility mode\n"); |
145 | break; | 483 | break; |
146 | 484 | ||
147 | case ACPI_TYPE_A: | 485 | case ACPI_TYPE_A: |
148 | acpi_os_printf(" Type A\n"); | 486 | acpi_os_printf("Type A\n"); |
149 | break; | 487 | break; |
150 | 488 | ||
151 | case ACPI_TYPE_B: | 489 | case ACPI_TYPE_B: |
152 | acpi_os_printf(" Type B\n"); | 490 | acpi_os_printf("Type B\n"); |
153 | break; | 491 | break; |
154 | 492 | ||
155 | case ACPI_TYPE_F: | 493 | case ACPI_TYPE_F: |
156 | acpi_os_printf(" Type F\n"); | 494 | acpi_os_printf("Type F\n"); |
157 | break; | 495 | break; |
158 | 496 | ||
159 | default: | 497 | default: |
160 | acpi_os_printf(" Invalid DMA type\n"); | 498 | acpi_os_printf("**** Invalid DMA type\n"); |
161 | break; | 499 | break; |
162 | } | 500 | } |
163 | 501 | ||
164 | acpi_os_printf(" %sBus Master\n", | 502 | acpi_rs_out_string("Bus Master", |
165 | ACPI_BUS_MASTER == dma_data->bus_master ? "" : "Not a "); | 503 | ACPI_BUS_MASTER == |
504 | resource->dma.bus_master ? "Yes" : "No"); | ||
166 | 505 | ||
167 | switch (dma_data->transfer) { | 506 | acpi_rs_out_title("Transfer Type"); |
507 | switch (resource->dma.transfer) { | ||
168 | case ACPI_TRANSFER_8: | 508 | case ACPI_TRANSFER_8: |
169 | acpi_os_printf(" 8-bit only transfer\n"); | 509 | acpi_os_printf("8-bit transfers only\n"); |
170 | break; | 510 | break; |
171 | 511 | ||
172 | case ACPI_TRANSFER_8_16: | 512 | case ACPI_TRANSFER_8_16: |
173 | acpi_os_printf(" 8 and 16-bit transfer\n"); | 513 | acpi_os_printf("8-bit and 16-bit transfers\n"); |
174 | break; | 514 | break; |
175 | 515 | ||
176 | case ACPI_TRANSFER_16: | 516 | case ACPI_TRANSFER_16: |
177 | acpi_os_printf(" 16 bit only transfer\n"); | 517 | acpi_os_printf("16-bit transfers only\n"); |
178 | break; | 518 | break; |
179 | 519 | ||
180 | default: | 520 | default: |
181 | acpi_os_printf(" Invalid transfer preference\n"); | 521 | acpi_os_printf("**** Invalid transfer preference\n"); |
182 | break; | 522 | break; |
183 | } | 523 | } |
184 | 524 | ||
185 | acpi_os_printf(" Number of Channels: %X ( ", | 525 | acpi_rs_out_integer8("DMA Channel Count", |
186 | dma_data->number_of_channels); | 526 | (u8) resource->dma.number_of_channels); |
187 | |||
188 | for (index = 0; index < dma_data->number_of_channels; index++) { | ||
189 | acpi_os_printf("%X ", dma_data->channels[index]); | ||
190 | } | ||
191 | 527 | ||
192 | acpi_os_printf(")\n"); | 528 | acpi_rs_out_title("Channel List"); |
193 | return; | 529 | acpi_rs_dump_short_byte_list(resource->dma.number_of_channels, |
530 | resource->dma.channels); | ||
194 | } | 531 | } |
195 | 532 | ||
196 | /******************************************************************************* | 533 | /******************************************************************************* |
197 | * | 534 | * |
198 | * FUNCTION: acpi_rs_dump_start_depend_fns | 535 | * FUNCTION: acpi_rs_dump_start_depend_fns |
199 | * | 536 | * |
200 | * PARAMETERS: Data - pointer to the resource structure to dump. | 537 | * PARAMETERS: Resource - Pointer to an internal resource descriptor |
201 | * | 538 | * |
202 | * RETURN: None | 539 | * RETURN: None |
203 | * | 540 | * |
204 | * DESCRIPTION: Prints out the various members of the Data structure type. | 541 | * DESCRIPTION: Dump the field names and values of the resource descriptor |
205 | * | 542 | * |
206 | ******************************************************************************/ | 543 | ******************************************************************************/ |
207 | 544 | ||
208 | static void acpi_rs_dump_start_depend_fns(union acpi_resource_data *data) | 545 | static void acpi_rs_dump_start_depend_fns(union acpi_resource_data *resource) |
209 | { | 546 | { |
210 | struct acpi_resource_start_dpf *sdf_data = | ||
211 | (struct acpi_resource_start_dpf *)data; | ||
212 | |||
213 | ACPI_FUNCTION_ENTRY(); | 547 | ACPI_FUNCTION_ENTRY(); |
214 | 548 | ||
215 | acpi_os_printf("Start Dependent Functions Resource\n"); | 549 | acpi_os_printf("Start Dependent Functions Resource\n"); |
216 | 550 | ||
217 | switch (sdf_data->compatibility_priority) { | 551 | acpi_rs_out_title("Compatibility Priority"); |
552 | switch (resource->start_dpf.compatibility_priority) { | ||
218 | case ACPI_GOOD_CONFIGURATION: | 553 | case ACPI_GOOD_CONFIGURATION: |
219 | acpi_os_printf(" Good configuration\n"); | 554 | acpi_os_printf("Good configuration\n"); |
220 | break; | 555 | break; |
221 | 556 | ||
222 | case ACPI_ACCEPTABLE_CONFIGURATION: | 557 | case ACPI_ACCEPTABLE_CONFIGURATION: |
223 | acpi_os_printf(" Acceptable configuration\n"); | 558 | acpi_os_printf("Acceptable configuration\n"); |
224 | break; | 559 | break; |
225 | 560 | ||
226 | case ACPI_SUB_OPTIMAL_CONFIGURATION: | 561 | case ACPI_SUB_OPTIMAL_CONFIGURATION: |
227 | acpi_os_printf(" Sub-optimal configuration\n"); | 562 | acpi_os_printf("Sub-optimal configuration\n"); |
228 | break; | 563 | break; |
229 | 564 | ||
230 | default: | 565 | default: |
231 | acpi_os_printf(" Invalid compatibility priority\n"); | 566 | acpi_os_printf("**** Invalid compatibility priority\n"); |
232 | break; | 567 | break; |
233 | } | 568 | } |
234 | 569 | ||
235 | switch (sdf_data->performance_robustness) { | 570 | acpi_rs_out_title("Performance/Robustness"); |
571 | switch (resource->start_dpf.performance_robustness) { | ||
236 | case ACPI_GOOD_CONFIGURATION: | 572 | case ACPI_GOOD_CONFIGURATION: |
237 | acpi_os_printf(" Good configuration\n"); | 573 | acpi_os_printf("Good configuration\n"); |
238 | break; | 574 | break; |
239 | 575 | ||
240 | case ACPI_ACCEPTABLE_CONFIGURATION: | 576 | case ACPI_ACCEPTABLE_CONFIGURATION: |
241 | acpi_os_printf(" Acceptable configuration\n"); | 577 | acpi_os_printf("Acceptable configuration\n"); |
242 | break; | 578 | break; |
243 | 579 | ||
244 | case ACPI_SUB_OPTIMAL_CONFIGURATION: | 580 | case ACPI_SUB_OPTIMAL_CONFIGURATION: |
245 | acpi_os_printf(" Sub-optimal configuration\n"); | 581 | acpi_os_printf("Sub-optimal configuration\n"); |
246 | break; | 582 | break; |
247 | 583 | ||
248 | default: | 584 | default: |
249 | acpi_os_printf(" Invalid performance robustness preference\n"); | 585 | acpi_os_printf |
586 | ("**** Invalid performance robustness preference\n"); | ||
250 | break; | 587 | break; |
251 | } | 588 | } |
252 | |||
253 | return; | ||
254 | } | 589 | } |
255 | 590 | ||
256 | /******************************************************************************* | 591 | /******************************************************************************* |
257 | * | 592 | * |
258 | * FUNCTION: acpi_rs_dump_io | 593 | * FUNCTION: acpi_rs_dump_io |
259 | * | 594 | * |
260 | * PARAMETERS: Data - pointer to the resource structure to dump. | 595 | * PARAMETERS: Resource - Pointer to an internal resource descriptor |
261 | * | 596 | * |
262 | * RETURN: None | 597 | * RETURN: None |
263 | * | 598 | * |
264 | * DESCRIPTION: Prints out the various members of the Data structure type. | 599 | * DESCRIPTION: Dump the field names and values of the resource descriptor |
265 | * | 600 | * |
266 | ******************************************************************************/ | 601 | ******************************************************************************/ |
267 | 602 | ||
268 | static void acpi_rs_dump_io(union acpi_resource_data *data) | 603 | static void acpi_rs_dump_io(union acpi_resource_data *resource) |
269 | { | 604 | { |
270 | struct acpi_resource_io *io_data = (struct acpi_resource_io *)data; | ||
271 | |||
272 | ACPI_FUNCTION_ENTRY(); | 605 | ACPI_FUNCTION_ENTRY(); |
273 | 606 | ||
274 | acpi_os_printf("Io Resource\n"); | 607 | acpi_os_printf("I/O Resource\n"); |
275 | 608 | ||
276 | acpi_os_printf(" %d bit decode\n", | 609 | acpi_rs_out_string("Decode", |
277 | ACPI_DECODE_16 == io_data->io_decode ? 16 : 10); | 610 | ACPI_DECODE_16 == |
611 | resource->io.io_decode ? "16-bit" : "10-bit"); | ||
278 | 612 | ||
279 | acpi_os_printf(" Range minimum base: %08X\n", | 613 | acpi_rs_out_integer32("Range Minimum Base", |
280 | io_data->min_base_address); | 614 | resource->io.min_base_address); |
281 | 615 | ||
282 | acpi_os_printf(" Range maximum base: %08X\n", | 616 | acpi_rs_out_integer32("Range Maximum Base", |
283 | io_data->max_base_address); | 617 | resource->io.max_base_address); |
284 | 618 | ||
285 | acpi_os_printf(" Alignment: %08X\n", io_data->alignment); | 619 | acpi_rs_out_integer32("Alignment", resource->io.alignment); |
286 | 620 | ||
287 | acpi_os_printf(" Range Length: %08X\n", io_data->range_length); | 621 | acpi_rs_out_integer32("Range Length", resource->io.range_length); |
288 | |||
289 | return; | ||
290 | } | 622 | } |
291 | 623 | ||
292 | /******************************************************************************* | 624 | /******************************************************************************* |
293 | * | 625 | * |
294 | * FUNCTION: acpi_rs_dump_fixed_io | 626 | * FUNCTION: acpi_rs_dump_fixed_io |
295 | * | 627 | * |
296 | * PARAMETERS: Data - pointer to the resource structure to dump. | 628 | * PARAMETERS: Resource - Pointer to an internal resource descriptor |
297 | * | 629 | * |
298 | * RETURN: None | 630 | * RETURN: None |
299 | * | 631 | * |
300 | * DESCRIPTION: Prints out the various members of the Data structure type. | 632 | * DESCRIPTION: Dump the field names and values of the resource descriptor |
301 | * | 633 | * |
302 | ******************************************************************************/ | 634 | ******************************************************************************/ |
303 | 635 | ||
304 | static void acpi_rs_dump_fixed_io(union acpi_resource_data *data) | 636 | static void acpi_rs_dump_fixed_io(union acpi_resource_data *resource) |
305 | { | 637 | { |
306 | struct acpi_resource_fixed_io *fixed_io_data = | ||
307 | (struct acpi_resource_fixed_io *)data; | ||
308 | |||
309 | ACPI_FUNCTION_ENTRY(); | 638 | ACPI_FUNCTION_ENTRY(); |
310 | 639 | ||
311 | acpi_os_printf("Fixed Io Resource\n"); | 640 | acpi_os_printf("Fixed I/O Resource\n"); |
312 | acpi_os_printf(" Range base address: %08X", | ||
313 | fixed_io_data->base_address); | ||
314 | 641 | ||
315 | acpi_os_printf(" Range length: %08X", fixed_io_data->range_length); | 642 | acpi_rs_out_integer32("Range Base Address", |
643 | resource->fixed_io.base_address); | ||
316 | 644 | ||
317 | return; | 645 | acpi_rs_out_integer32("Range Length", resource->fixed_io.range_length); |
318 | } | 646 | } |
319 | 647 | ||
320 | /******************************************************************************* | 648 | /******************************************************************************* |
321 | * | 649 | * |
322 | * FUNCTION: acpi_rs_dump_vendor_specific | 650 | * FUNCTION: acpi_rs_dump_vendor_specific |
323 | * | 651 | * |
324 | * PARAMETERS: Data - pointer to the resource structure to dump. | 652 | * PARAMETERS: Resource - Pointer to an internal resource descriptor |
325 | * | 653 | * |
326 | * RETURN: None | 654 | * RETURN: None |
327 | * | 655 | * |
328 | * DESCRIPTION: Prints out the various members of the Data structure type. | 656 | * DESCRIPTION: Dump the field names and values of the resource descriptor |
329 | * | 657 | * |
330 | ******************************************************************************/ | 658 | ******************************************************************************/ |
331 | 659 | ||
332 | static void acpi_rs_dump_vendor_specific(union acpi_resource_data *data) | 660 | static void acpi_rs_dump_vendor_specific(union acpi_resource_data *resource) |
333 | { | 661 | { |
334 | struct acpi_resource_vendor *vendor_data = | ||
335 | (struct acpi_resource_vendor *)data; | ||
336 | u16 index = 0; | ||
337 | |||
338 | ACPI_FUNCTION_ENTRY(); | 662 | ACPI_FUNCTION_ENTRY(); |
339 | 663 | ||
340 | acpi_os_printf("Vendor Specific Resource\n"); | 664 | acpi_os_printf("Vendor Specific Resource\n"); |
341 | 665 | ||
342 | acpi_os_printf(" Length: %08X\n", vendor_data->length); | 666 | acpi_rs_out_integer16("Length", (u16) resource->vendor_specific.length); |
343 | 667 | ||
344 | for (index = 0; index < vendor_data->length; index++) { | 668 | acpi_rs_dump_byte_list(resource->vendor_specific.length, |
345 | acpi_os_printf(" Byte %X: %08X\n", | 669 | resource->vendor_specific.reserved); |
346 | index, vendor_data->reserved[index]); | ||
347 | } | ||
348 | |||
349 | return; | ||
350 | } | 670 | } |
351 | 671 | ||
352 | /******************************************************************************* | 672 | /******************************************************************************* |
353 | * | 673 | * |
354 | * FUNCTION: acpi_rs_dump_memory24 | 674 | * FUNCTION: acpi_rs_dump_memory24 |
355 | * | 675 | * |
356 | * PARAMETERS: Data - pointer to the resource structure to dump. | 676 | * PARAMETERS: Resource - Pointer to an internal resource descriptor |
357 | * | 677 | * |
358 | * RETURN: None | 678 | * RETURN: None |
359 | * | 679 | * |
360 | * DESCRIPTION: Prints out the various members of the Data structure type. | 680 | * DESCRIPTION: Dump the field names and values of the resource descriptor |
361 | * | 681 | * |
362 | ******************************************************************************/ | 682 | ******************************************************************************/ |
363 | 683 | ||
364 | static void acpi_rs_dump_memory24(union acpi_resource_data *data) | 684 | static void acpi_rs_dump_memory24(union acpi_resource_data *resource) |
365 | { | 685 | { |
366 | struct acpi_resource_mem24 *memory24_data = | ||
367 | (struct acpi_resource_mem24 *)data; | ||
368 | |||
369 | ACPI_FUNCTION_ENTRY(); | 686 | ACPI_FUNCTION_ENTRY(); |
370 | 687 | ||
371 | acpi_os_printf("24-Bit Memory Range Resource\n"); | 688 | acpi_os_printf("24-Bit Memory Range Resource\n"); |
372 | 689 | ||
373 | acpi_os_printf(" Read%s\n", | 690 | acpi_rs_out_string("Attribute", |
374 | ACPI_READ_WRITE_MEMORY == | 691 | ACPI_READ_WRITE_MEMORY == |
375 | memory24_data->read_write_attribute ? | 692 | resource->memory24.read_write_attribute ? |
376 | "/Write" : " only"); | 693 | "Read/Write" : "Read Only"); |
377 | |||
378 | acpi_os_printf(" Range minimum base: %08X\n", | ||
379 | memory24_data->min_base_address); | ||
380 | 694 | ||
381 | acpi_os_printf(" Range maximum base: %08X\n", | 695 | acpi_rs_out_integer16("Range Minimum Base", |
382 | memory24_data->max_base_address); | 696 | (u16) resource->memory24.min_base_address); |
383 | 697 | ||
384 | acpi_os_printf(" Alignment: %08X\n", memory24_data->alignment); | 698 | acpi_rs_out_integer16("Range Maximum Base", |
699 | (u16) resource->memory24.max_base_address); | ||
385 | 700 | ||
386 | acpi_os_printf(" Range length: %08X\n", memory24_data->range_length); | 701 | acpi_rs_out_integer16("Alignment", (u16) resource->memory24.alignment); |
387 | 702 | ||
388 | return; | 703 | acpi_rs_out_integer16("Range Length", |
704 | (u16) resource->memory24.range_length); | ||
389 | } | 705 | } |
390 | 706 | ||
391 | /******************************************************************************* | 707 | /******************************************************************************* |
392 | * | 708 | * |
393 | * FUNCTION: acpi_rs_dump_memory32 | 709 | * FUNCTION: acpi_rs_dump_memory32 |
394 | * | 710 | * |
395 | * PARAMETERS: Data - pointer to the resource structure to dump. | 711 | * PARAMETERS: Resource - Pointer to an internal resource descriptor |
396 | * | 712 | * |
397 | * RETURN: None | 713 | * RETURN: None |
398 | * | 714 | * |
399 | * DESCRIPTION: Prints out the various members of the Data structure type. | 715 | * DESCRIPTION: Dump the field names and values of the resource descriptor |
400 | * | 716 | * |
401 | ******************************************************************************/ | 717 | ******************************************************************************/ |
402 | 718 | ||
403 | static void acpi_rs_dump_memory32(union acpi_resource_data *data) | 719 | static void acpi_rs_dump_memory32(union acpi_resource_data *resource) |
404 | { | 720 | { |
405 | struct acpi_resource_mem32 *memory32_data = | ||
406 | (struct acpi_resource_mem32 *)data; | ||
407 | |||
408 | ACPI_FUNCTION_ENTRY(); | 721 | ACPI_FUNCTION_ENTRY(); |
409 | 722 | ||
410 | acpi_os_printf("32-Bit Memory Range Resource\n"); | 723 | acpi_os_printf("32-Bit Memory Range Resource\n"); |
411 | 724 | ||
412 | acpi_os_printf(" Read%s\n", | 725 | acpi_rs_out_string("Attribute", |
413 | ACPI_READ_WRITE_MEMORY == | 726 | ACPI_READ_WRITE_MEMORY == |
414 | memory32_data->read_write_attribute ? | 727 | resource->memory32.read_write_attribute ? |
415 | "/Write" : " only"); | 728 | "Read/Write" : "Read Only"); |
416 | |||
417 | acpi_os_printf(" Range minimum base: %08X\n", | ||
418 | memory32_data->min_base_address); | ||
419 | 729 | ||
420 | acpi_os_printf(" Range maximum base: %08X\n", | 730 | acpi_rs_out_integer32("Range Minimum Base", |
421 | memory32_data->max_base_address); | 731 | resource->memory32.min_base_address); |
422 | 732 | ||
423 | acpi_os_printf(" Alignment: %08X\n", memory32_data->alignment); | 733 | acpi_rs_out_integer32("Range Maximum Base", |
734 | resource->memory32.max_base_address); | ||
424 | 735 | ||
425 | acpi_os_printf(" Range length: %08X\n", memory32_data->range_length); | 736 | acpi_rs_out_integer32("Alignment", resource->memory32.alignment); |
426 | 737 | ||
427 | return; | 738 | acpi_rs_out_integer32("Range Length", resource->memory32.range_length); |
428 | } | 739 | } |
429 | 740 | ||
430 | /******************************************************************************* | 741 | /******************************************************************************* |
431 | * | 742 | * |
432 | * FUNCTION: acpi_rs_dump_fixed_memory32 | 743 | * FUNCTION: acpi_rs_dump_fixed_memory32 |
433 | * | 744 | * |
434 | * PARAMETERS: Data - pointer to the resource structure to dump. | 745 | * PARAMETERS: Resource - Pointer to an internal resource descriptor |
435 | * | 746 | * |
436 | * RETURN: | 747 | * RETURN: |
437 | * | 748 | * |
438 | * DESCRIPTION: Prints out the various members of the Data structure type. | 749 | * DESCRIPTION: Dump the field names and values of the resource descriptor |
439 | * | 750 | * |
440 | ******************************************************************************/ | 751 | ******************************************************************************/ |
441 | 752 | ||
442 | static void acpi_rs_dump_fixed_memory32(union acpi_resource_data *data) | 753 | static void acpi_rs_dump_fixed_memory32(union acpi_resource_data *resource) |
443 | { | 754 | { |
444 | struct acpi_resource_fixed_mem32 *fixed_memory32_data = | ||
445 | (struct acpi_resource_fixed_mem32 *)data; | ||
446 | |||
447 | ACPI_FUNCTION_ENTRY(); | 755 | ACPI_FUNCTION_ENTRY(); |
448 | 756 | ||
449 | acpi_os_printf("32-Bit Fixed Location Memory Range Resource\n"); | 757 | acpi_os_printf("32-Bit Fixed Location Memory Range Resource\n"); |
450 | 758 | ||
451 | acpi_os_printf(" Read%s\n", | 759 | acpi_rs_out_string("Attribute", |
452 | ACPI_READ_WRITE_MEMORY == | 760 | ACPI_READ_WRITE_MEMORY == |
453 | fixed_memory32_data-> | 761 | resource->fixed_memory32.read_write_attribute ? |
454 | read_write_attribute ? "/Write" : " Only"); | 762 | "Read/Write" : "Read Only"); |
455 | |||
456 | acpi_os_printf(" Range base address: %08X\n", | ||
457 | fixed_memory32_data->range_base_address); | ||
458 | 763 | ||
459 | acpi_os_printf(" Range length: %08X\n", | 764 | acpi_rs_out_integer32("Range Base Address", |
460 | fixed_memory32_data->range_length); | 765 | resource->fixed_memory32.range_base_address); |
461 | 766 | ||
462 | return; | 767 | acpi_rs_out_integer32("Range Length", |
768 | resource->fixed_memory32.range_length); | ||
463 | } | 769 | } |
464 | 770 | ||
465 | /******************************************************************************* | 771 | /******************************************************************************* |
466 | * | 772 | * |
467 | * FUNCTION: acpi_rs_dump_address16 | 773 | * FUNCTION: acpi_rs_dump_address16 |
468 | * | 774 | * |
469 | * PARAMETERS: Data - pointer to the resource structure to dump. | 775 | * PARAMETERS: Resource - Pointer to an internal resource descriptor |
470 | * | 776 | * |
471 | * RETURN: None | 777 | * RETURN: None |
472 | * | 778 | * |
473 | * DESCRIPTION: Prints out the various members of the Data structure type. | 779 | * DESCRIPTION: Dump the field names and values of the resource descriptor |
474 | * | 780 | * |
475 | ******************************************************************************/ | 781 | ******************************************************************************/ |
476 | 782 | ||
477 | static void acpi_rs_dump_address16(union acpi_resource_data *data) | 783 | static void acpi_rs_dump_address16(union acpi_resource_data *resource) |
478 | { | 784 | { |
479 | struct acpi_resource_address16 *address16_data = | ||
480 | (struct acpi_resource_address16 *)data; | ||
481 | |||
482 | ACPI_FUNCTION_ENTRY(); | 785 | ACPI_FUNCTION_ENTRY(); |
483 | 786 | ||
484 | acpi_os_printf("16-Bit Address Space Resource\n"); | 787 | acpi_os_printf("16-Bit Address Space Resource\n"); |
485 | acpi_os_printf(" Resource Type: "); | ||
486 | 788 | ||
487 | switch (address16_data->resource_type) { | 789 | acpi_rs_dump_address_common(resource); |
488 | case ACPI_MEMORY_RANGE: | ||
489 | 790 | ||
490 | acpi_os_printf("Memory Range\n"); | 791 | acpi_rs_out_integer16("Granularity", |
792 | (u16) resource->address16.granularity); | ||
491 | 793 | ||
492 | switch (address16_data->attribute.memory.cache_attribute) { | 794 | acpi_rs_out_integer16("Address Range Min", |
493 | case ACPI_NON_CACHEABLE_MEMORY: | 795 | (u16) resource->address16.min_address_range); |
494 | acpi_os_printf | ||
495 | (" Type Specific: Noncacheable memory\n"); | ||
496 | break; | ||
497 | 796 | ||
498 | case ACPI_CACHABLE_MEMORY: | 797 | acpi_rs_out_integer16("Address Range Max", |
499 | acpi_os_printf(" Type Specific: Cacheable memory\n"); | 798 | (u16) resource->address16.max_address_range); |
500 | break; | ||
501 | 799 | ||
502 | case ACPI_WRITE_COMBINING_MEMORY: | 800 | acpi_rs_out_integer16("Address Translation Offset", |
503 | acpi_os_printf | 801 | (u16) resource->address16. |
504 | (" Type Specific: Write-combining memory\n"); | 802 | address_translation_offset); |
505 | break; | ||
506 | 803 | ||
507 | case ACPI_PREFETCHABLE_MEMORY: | 804 | acpi_rs_out_integer16("Address Length", |
508 | acpi_os_printf | 805 | (u16) resource->address16.address_length); |
509 | (" Type Specific: Prefetchable memory\n"); | ||
510 | break; | ||
511 | 806 | ||
512 | default: | 807 | acpi_rs_dump_resource_source(&resource->address16.resource_source); |
513 | acpi_os_printf | ||
514 | (" Type Specific: Invalid cache attribute\n"); | ||
515 | break; | ||
516 | } | ||
517 | |||
518 | acpi_os_printf(" Type Specific: Read%s\n", | ||
519 | ACPI_READ_WRITE_MEMORY == | ||
520 | address16_data->attribute.memory. | ||
521 | read_write_attribute ? "/Write" : " Only"); | ||
522 | break; | ||
523 | |||
524 | case ACPI_IO_RANGE: | ||
525 | |||
526 | acpi_os_printf("I/O Range\n"); | ||
527 | |||
528 | switch (address16_data->attribute.io.range_attribute) { | ||
529 | case ACPI_NON_ISA_ONLY_RANGES: | ||
530 | acpi_os_printf | ||
531 | (" Type Specific: Non-ISA Io Addresses\n"); | ||
532 | break; | ||
533 | |||
534 | case ACPI_ISA_ONLY_RANGES: | ||
535 | acpi_os_printf(" Type Specific: ISA Io Addresses\n"); | ||
536 | break; | ||
537 | |||
538 | case ACPI_ENTIRE_RANGE: | ||
539 | acpi_os_printf | ||
540 | (" Type Specific: ISA and non-ISA Io Addresses\n"); | ||
541 | break; | ||
542 | |||
543 | default: | ||
544 | acpi_os_printf | ||
545 | (" Type Specific: Invalid range attribute\n"); | ||
546 | break; | ||
547 | } | ||
548 | |||
549 | acpi_os_printf(" Type Specific: %s Translation\n", | ||
550 | ACPI_SPARSE_TRANSLATION == | ||
551 | address16_data->attribute.io. | ||
552 | translation_attribute ? "Sparse" : "Dense"); | ||
553 | break; | ||
554 | |||
555 | case ACPI_BUS_NUMBER_RANGE: | ||
556 | |||
557 | acpi_os_printf("Bus Number Range\n"); | ||
558 | break; | ||
559 | |||
560 | default: | ||
561 | |||
562 | acpi_os_printf("0x%2.2X\n", address16_data->resource_type); | ||
563 | break; | ||
564 | } | ||
565 | |||
566 | acpi_os_printf(" Resource %s\n", | ||
567 | ACPI_CONSUMER == address16_data->producer_consumer ? | ||
568 | "Consumer" : "Producer"); | ||
569 | |||
570 | acpi_os_printf(" %s decode\n", | ||
571 | ACPI_SUB_DECODE == address16_data->decode ? | ||
572 | "Subtractive" : "Positive"); | ||
573 | |||
574 | acpi_os_printf(" Min address is %s fixed\n", | ||
575 | ACPI_ADDRESS_FIXED == address16_data->min_address_fixed ? | ||
576 | "" : "not"); | ||
577 | |||
578 | acpi_os_printf(" Max address is %s fixed\n", | ||
579 | ACPI_ADDRESS_FIXED == address16_data->max_address_fixed ? | ||
580 | "" : "not"); | ||
581 | |||
582 | acpi_os_printf(" Granularity: %08X\n", address16_data->granularity); | ||
583 | |||
584 | acpi_os_printf(" Address range min: %08X\n", | ||
585 | address16_data->min_address_range); | ||
586 | |||
587 | acpi_os_printf(" Address range max: %08X\n", | ||
588 | address16_data->max_address_range); | ||
589 | |||
590 | acpi_os_printf(" Address translation offset: %08X\n", | ||
591 | address16_data->address_translation_offset); | ||
592 | |||
593 | acpi_os_printf(" Address Length: %08X\n", | ||
594 | address16_data->address_length); | ||
595 | |||
596 | if (0xFF != address16_data->resource_source.index) { | ||
597 | acpi_os_printf(" Resource Source Index: %X\n", | ||
598 | address16_data->resource_source.index); | ||
599 | |||
600 | acpi_os_printf(" Resource Source: %s\n", | ||
601 | address16_data->resource_source.string_ptr); | ||
602 | } | ||
603 | |||
604 | return; | ||
605 | } | 808 | } |
606 | 809 | ||
607 | /******************************************************************************* | 810 | /******************************************************************************* |
608 | * | 811 | * |
609 | * FUNCTION: acpi_rs_dump_address32 | 812 | * FUNCTION: acpi_rs_dump_address32 |
610 | * | 813 | * |
611 | * PARAMETERS: Data - pointer to the resource structure to dump. | 814 | * PARAMETERS: Resource - Pointer to an internal resource descriptor |
612 | * | 815 | * |
613 | * RETURN: None | 816 | * RETURN: None |
614 | * | 817 | * |
615 | * DESCRIPTION: Prints out the various members of the Data structure type. | 818 | * DESCRIPTION: Dump the field names and values of the resource descriptor |
616 | * | 819 | * |
617 | ******************************************************************************/ | 820 | ******************************************************************************/ |
618 | 821 | ||
619 | static void acpi_rs_dump_address32(union acpi_resource_data *data) | 822 | static void acpi_rs_dump_address32(union acpi_resource_data *resource) |
620 | { | 823 | { |
621 | struct acpi_resource_address32 *address32_data = | ||
622 | (struct acpi_resource_address32 *)data; | ||
623 | |||
624 | ACPI_FUNCTION_ENTRY(); | 824 | ACPI_FUNCTION_ENTRY(); |
625 | 825 | ||
626 | acpi_os_printf("32-Bit Address Space Resource\n"); | 826 | acpi_os_printf("32-Bit Address Space Resource\n"); |
627 | 827 | ||
628 | switch (address32_data->resource_type) { | 828 | acpi_rs_dump_address_common(resource); |
629 | case ACPI_MEMORY_RANGE: | ||
630 | 829 | ||
631 | acpi_os_printf(" Resource Type: Memory Range\n"); | 830 | acpi_rs_out_integer32("Granularity", resource->address32.granularity); |
632 | 831 | ||
633 | switch (address32_data->attribute.memory.cache_attribute) { | 832 | acpi_rs_out_integer32("Address Range Min", |
634 | case ACPI_NON_CACHEABLE_MEMORY: | 833 | resource->address32.min_address_range); |
635 | acpi_os_printf | ||
636 | (" Type Specific: Noncacheable memory\n"); | ||
637 | break; | ||
638 | 834 | ||
639 | case ACPI_CACHABLE_MEMORY: | 835 | acpi_rs_out_integer32("Address Range Max", |
640 | acpi_os_printf(" Type Specific: Cacheable memory\n"); | 836 | resource->address32.max_address_range); |
641 | break; | ||
642 | 837 | ||
643 | case ACPI_WRITE_COMBINING_MEMORY: | 838 | acpi_rs_out_integer32("Address Translation Offset", |
644 | acpi_os_printf | 839 | resource->address32.address_translation_offset); |
645 | (" Type Specific: Write-combining memory\n"); | ||
646 | break; | ||
647 | |||
648 | case ACPI_PREFETCHABLE_MEMORY: | ||
649 | acpi_os_printf | ||
650 | (" Type Specific: Prefetchable memory\n"); | ||
651 | break; | ||
652 | |||
653 | default: | ||
654 | acpi_os_printf | ||
655 | (" Type Specific: Invalid cache attribute\n"); | ||
656 | break; | ||
657 | } | ||
658 | |||
659 | acpi_os_printf(" Type Specific: Read%s\n", | ||
660 | ACPI_READ_WRITE_MEMORY == | ||
661 | address32_data->attribute.memory. | ||
662 | read_write_attribute ? "/Write" : " Only"); | ||
663 | break; | ||
664 | |||
665 | case ACPI_IO_RANGE: | ||
666 | |||
667 | acpi_os_printf(" Resource Type: Io Range\n"); | ||
668 | |||
669 | switch (address32_data->attribute.io.range_attribute) { | ||
670 | case ACPI_NON_ISA_ONLY_RANGES: | ||
671 | acpi_os_printf | ||
672 | (" Type Specific: Non-ISA Io Addresses\n"); | ||
673 | break; | ||
674 | |||
675 | case ACPI_ISA_ONLY_RANGES: | ||
676 | acpi_os_printf(" Type Specific: ISA Io Addresses\n"); | ||
677 | break; | ||
678 | |||
679 | case ACPI_ENTIRE_RANGE: | ||
680 | acpi_os_printf | ||
681 | (" Type Specific: ISA and non-ISA Io Addresses\n"); | ||
682 | break; | ||
683 | |||
684 | default: | ||
685 | acpi_os_printf | ||
686 | (" Type Specific: Invalid Range attribute"); | ||
687 | break; | ||
688 | } | ||
689 | |||
690 | acpi_os_printf(" Type Specific: %s Translation\n", | ||
691 | ACPI_SPARSE_TRANSLATION == | ||
692 | address32_data->attribute.io. | ||
693 | translation_attribute ? "Sparse" : "Dense"); | ||
694 | break; | ||
695 | |||
696 | case ACPI_BUS_NUMBER_RANGE: | ||
697 | |||
698 | acpi_os_printf(" Resource Type: Bus Number Range\n"); | ||
699 | break; | ||
700 | 840 | ||
701 | default: | 841 | acpi_rs_out_integer32("Address Length", |
702 | 842 | resource->address32.address_length); | |
703 | acpi_os_printf(" Resource Type: 0x%2.2X\n", | ||
704 | address32_data->resource_type); | ||
705 | break; | ||
706 | } | ||
707 | 843 | ||
708 | acpi_os_printf(" Resource %s\n", | 844 | acpi_rs_dump_resource_source(&resource->address32.resource_source); |
709 | ACPI_CONSUMER == address32_data->producer_consumer ? | ||
710 | "Consumer" : "Producer"); | ||
711 | |||
712 | acpi_os_printf(" %s decode\n", | ||
713 | ACPI_SUB_DECODE == address32_data->decode ? | ||
714 | "Subtractive" : "Positive"); | ||
715 | |||
716 | acpi_os_printf(" Min address is %s fixed\n", | ||
717 | ACPI_ADDRESS_FIXED == address32_data->min_address_fixed ? | ||
718 | "" : "not "); | ||
719 | |||
720 | acpi_os_printf(" Max address is %s fixed\n", | ||
721 | ACPI_ADDRESS_FIXED == address32_data->max_address_fixed ? | ||
722 | "" : "not "); | ||
723 | |||
724 | acpi_os_printf(" Granularity: %08X\n", address32_data->granularity); | ||
725 | |||
726 | acpi_os_printf(" Address range min: %08X\n", | ||
727 | address32_data->min_address_range); | ||
728 | |||
729 | acpi_os_printf(" Address range max: %08X\n", | ||
730 | address32_data->max_address_range); | ||
731 | |||
732 | acpi_os_printf(" Address translation offset: %08X\n", | ||
733 | address32_data->address_translation_offset); | ||
734 | |||
735 | acpi_os_printf(" Address Length: %08X\n", | ||
736 | address32_data->address_length); | ||
737 | |||
738 | if (0xFF != address32_data->resource_source.index) { | ||
739 | acpi_os_printf(" Resource Source Index: %X\n", | ||
740 | address32_data->resource_source.index); | ||
741 | |||
742 | acpi_os_printf(" Resource Source: %s\n", | ||
743 | address32_data->resource_source.string_ptr); | ||
744 | } | ||
745 | |||
746 | return; | ||
747 | } | 845 | } |
748 | 846 | ||
749 | /******************************************************************************* | 847 | /******************************************************************************* |
750 | * | 848 | * |
751 | * FUNCTION: acpi_rs_dump_address64 | 849 | * FUNCTION: acpi_rs_dump_address64 |
752 | * | 850 | * |
753 | * PARAMETERS: Data - pointer to the resource structure to dump. | 851 | * PARAMETERS: Resource - Pointer to an internal resource descriptor |
754 | * | 852 | * |
755 | * RETURN: None | 853 | * RETURN: None |
756 | * | 854 | * |
757 | * DESCRIPTION: Prints out the various members of the Data structure type. | 855 | * DESCRIPTION: Dump the field names and values of the resource descriptor |
758 | * | 856 | * |
759 | ******************************************************************************/ | 857 | ******************************************************************************/ |
760 | 858 | ||
761 | static void acpi_rs_dump_address64(union acpi_resource_data *data) | 859 | static void acpi_rs_dump_address64(union acpi_resource_data *resource) |
762 | { | 860 | { |
763 | struct acpi_resource_address64 *address64_data = | ||
764 | (struct acpi_resource_address64 *)data; | ||
765 | |||
766 | ACPI_FUNCTION_ENTRY(); | 861 | ACPI_FUNCTION_ENTRY(); |
767 | 862 | ||
768 | acpi_os_printf("64-Bit Address Space Resource\n"); | 863 | acpi_os_printf("64-Bit Address Space Resource\n"); |
769 | 864 | ||
770 | switch (address64_data->resource_type) { | 865 | acpi_rs_dump_address_common(resource); |
771 | case ACPI_MEMORY_RANGE: | ||
772 | |||
773 | acpi_os_printf(" Resource Type: Memory Range\n"); | ||
774 | |||
775 | switch (address64_data->attribute.memory.cache_attribute) { | ||
776 | case ACPI_NON_CACHEABLE_MEMORY: | ||
777 | acpi_os_printf | ||
778 | (" Type Specific: Noncacheable memory\n"); | ||
779 | break; | ||
780 | |||
781 | case ACPI_CACHABLE_MEMORY: | ||
782 | acpi_os_printf(" Type Specific: Cacheable memory\n"); | ||
783 | break; | ||
784 | |||
785 | case ACPI_WRITE_COMBINING_MEMORY: | ||
786 | acpi_os_printf | ||
787 | (" Type Specific: Write-combining memory\n"); | ||
788 | break; | ||
789 | |||
790 | case ACPI_PREFETCHABLE_MEMORY: | ||
791 | acpi_os_printf | ||
792 | (" Type Specific: Prefetchable memory\n"); | ||
793 | break; | ||
794 | |||
795 | default: | ||
796 | acpi_os_printf | ||
797 | (" Type Specific: Invalid cache attribute\n"); | ||
798 | break; | ||
799 | } | ||
800 | |||
801 | acpi_os_printf(" Type Specific: Read%s\n", | ||
802 | ACPI_READ_WRITE_MEMORY == | ||
803 | address64_data->attribute.memory. | ||
804 | read_write_attribute ? "/Write" : " Only"); | ||
805 | break; | ||
806 | |||
807 | case ACPI_IO_RANGE: | ||
808 | |||
809 | acpi_os_printf(" Resource Type: Io Range\n"); | ||
810 | |||
811 | switch (address64_data->attribute.io.range_attribute) { | ||
812 | case ACPI_NON_ISA_ONLY_RANGES: | ||
813 | acpi_os_printf | ||
814 | (" Type Specific: Non-ISA Io Addresses\n"); | ||
815 | break; | ||
816 | |||
817 | case ACPI_ISA_ONLY_RANGES: | ||
818 | acpi_os_printf(" Type Specific: ISA Io Addresses\n"); | ||
819 | break; | ||
820 | |||
821 | case ACPI_ENTIRE_RANGE: | ||
822 | acpi_os_printf | ||
823 | (" Type Specific: ISA and non-ISA Io Addresses\n"); | ||
824 | break; | ||
825 | |||
826 | default: | ||
827 | acpi_os_printf | ||
828 | (" Type Specific: Invalid Range attribute"); | ||
829 | break; | ||
830 | } | ||
831 | |||
832 | acpi_os_printf(" Type Specific: %s Translation\n", | ||
833 | ACPI_SPARSE_TRANSLATION == | ||
834 | address64_data->attribute.io. | ||
835 | translation_attribute ? "Sparse" : "Dense"); | ||
836 | break; | ||
837 | |||
838 | case ACPI_BUS_NUMBER_RANGE: | ||
839 | |||
840 | acpi_os_printf(" Resource Type: Bus Number Range\n"); | ||
841 | break; | ||
842 | |||
843 | default: | ||
844 | |||
845 | acpi_os_printf(" Resource Type: 0x%2.2X\n", | ||
846 | address64_data->resource_type); | ||
847 | break; | ||
848 | } | ||
849 | |||
850 | acpi_os_printf(" Resource %s\n", | ||
851 | ACPI_CONSUMER == address64_data->producer_consumer ? | ||
852 | "Consumer" : "Producer"); | ||
853 | 866 | ||
854 | acpi_os_printf(" %s decode\n", | 867 | acpi_rs_out_integer64("Granularity", resource->address64.granularity); |
855 | ACPI_SUB_DECODE == address64_data->decode ? | ||
856 | "Subtractive" : "Positive"); | ||
857 | 868 | ||
858 | acpi_os_printf(" Min address is %s fixed\n", | 869 | acpi_rs_out_integer64("Address Range Min", |
859 | ACPI_ADDRESS_FIXED == address64_data->min_address_fixed ? | 870 | resource->address64.min_address_range); |
860 | "" : "not "); | ||
861 | 871 | ||
862 | acpi_os_printf(" Max address is %s fixed\n", | 872 | acpi_rs_out_integer64("Address Range Max", |
863 | ACPI_ADDRESS_FIXED == address64_data->max_address_fixed ? | 873 | resource->address64.max_address_range); |
864 | "" : "not "); | ||
865 | 874 | ||
866 | acpi_os_printf(" Granularity: %8.8X%8.8X\n", | 875 | acpi_rs_out_integer64("Address Translation Offset", |
867 | ACPI_FORMAT_UINT64(address64_data->granularity)); | 876 | resource->address64.address_translation_offset); |
868 | 877 | ||
869 | acpi_os_printf(" Address range min: %8.8X%8.8X\n", | 878 | acpi_rs_out_integer64("Address Length", |
870 | ACPI_FORMAT_UINT64(address64_data->min_address_range)); | 879 | resource->address64.address_length); |
871 | 880 | ||
872 | acpi_os_printf(" Address range max: %8.8X%8.8X\n", | 881 | acpi_rs_out_integer64("Type Specific Attributes", |
873 | ACPI_FORMAT_UINT64(address64_data->max_address_range)); | 882 | resource->address64.type_specific_attributes); |
874 | 883 | ||
875 | acpi_os_printf(" Address translation offset: %8.8X%8.8X\n", | 884 | acpi_rs_dump_resource_source(&resource->address64.resource_source); |
876 | ACPI_FORMAT_UINT64(address64_data-> | ||
877 | address_translation_offset)); | ||
878 | |||
879 | acpi_os_printf(" Address Length: %8.8X%8.8X\n", | ||
880 | ACPI_FORMAT_UINT64(address64_data->address_length)); | ||
881 | |||
882 | acpi_os_printf(" Type Specific Attributes: %8.8X%8.8X\n", | ||
883 | ACPI_FORMAT_UINT64(address64_data-> | ||
884 | type_specific_attributes)); | ||
885 | |||
886 | if (0xFF != address64_data->resource_source.index) { | ||
887 | acpi_os_printf(" Resource Source Index: %X\n", | ||
888 | address64_data->resource_source.index); | ||
889 | |||
890 | acpi_os_printf(" Resource Source: %s\n", | ||
891 | address64_data->resource_source.string_ptr); | ||
892 | } | ||
893 | |||
894 | return; | ||
895 | } | 885 | } |
896 | 886 | ||
897 | /******************************************************************************* | 887 | /******************************************************************************* |
898 | * | 888 | * |
899 | * FUNCTION: acpi_rs_dump_extended_irq | 889 | * FUNCTION: acpi_rs_dump_extended_irq |
900 | * | 890 | * |
901 | * PARAMETERS: Data - pointer to the resource structure to dump. | 891 | * PARAMETERS: Resource - Pointer to an internal resource descriptor |
902 | * | 892 | * |
903 | * RETURN: None | 893 | * RETURN: None |
904 | * | 894 | * |
905 | * DESCRIPTION: Prints out the various members of the Data structure type. | 895 | * DESCRIPTION: Dump the field names and values of the resource descriptor |
906 | * | 896 | * |
907 | ******************************************************************************/ | 897 | ******************************************************************************/ |
908 | 898 | ||
909 | static void acpi_rs_dump_extended_irq(union acpi_resource_data *data) | 899 | static void acpi_rs_dump_extended_irq(union acpi_resource_data *resource) |
910 | { | 900 | { |
911 | struct acpi_resource_ext_irq *ext_irq_data = | ||
912 | (struct acpi_resource_ext_irq *)data; | ||
913 | u8 index = 0; | ||
914 | |||
915 | ACPI_FUNCTION_ENTRY(); | 901 | ACPI_FUNCTION_ENTRY(); |
916 | 902 | ||
917 | acpi_os_printf("Extended IRQ Resource\n"); | 903 | acpi_os_printf("Extended IRQ Resource\n"); |
918 | 904 | ||
919 | acpi_os_printf(" Resource %s\n", | 905 | acpi_rs_out_string("Resource", |
920 | ACPI_CONSUMER == ext_irq_data->producer_consumer ? | 906 | ACPI_CONSUMER == |
921 | "Consumer" : "Producer"); | 907 | resource->extended_irq. |
908 | producer_consumer ? "Consumer" : "Producer"); | ||
922 | 909 | ||
923 | acpi_os_printf(" %s\n", | 910 | acpi_rs_out_string("Triggering", |
924 | ACPI_LEVEL_SENSITIVE == ext_irq_data->edge_level ? | 911 | ACPI_LEVEL_SENSITIVE == |
925 | "Level" : "Edge"); | 912 | resource->extended_irq. |
913 | edge_level ? "Level" : "Edge"); | ||
926 | 914 | ||
927 | acpi_os_printf(" Active %s\n", | 915 | acpi_rs_out_string("Active", |
928 | ACPI_ACTIVE_LOW == ext_irq_data->active_high_low ? | 916 | ACPI_ACTIVE_LOW == |
929 | "low" : "high"); | 917 | resource->extended_irq. |
918 | active_high_low ? "Low" : "High"); | ||
930 | 919 | ||
931 | acpi_os_printf(" %s\n", | 920 | acpi_rs_out_string("Sharing", |
932 | ACPI_SHARED == ext_irq_data->shared_exclusive ? | 921 | ACPI_SHARED == |
933 | "Shared" : "Exclusive"); | 922 | resource->extended_irq. |
923 | shared_exclusive ? "Shared" : "Exclusive"); | ||
934 | 924 | ||
935 | acpi_os_printf(" Interrupts : %X ( ", | 925 | acpi_rs_dump_resource_source(&resource->extended_irq.resource_source); |
936 | ext_irq_data->number_of_interrupts); | ||
937 | 926 | ||
938 | for (index = 0; index < ext_irq_data->number_of_interrupts; index++) { | 927 | acpi_rs_out_integer8("Interrupts", |
939 | acpi_os_printf("%X ", ext_irq_data->interrupts[index]); | 928 | (u8) resource->extended_irq.number_of_interrupts); |
940 | } | ||
941 | |||
942 | acpi_os_printf(")\n"); | ||
943 | 929 | ||
944 | if (0xFF != ext_irq_data->resource_source.index) { | 930 | acpi_rs_dump_dword_list(resource->extended_irq.number_of_interrupts, |
945 | acpi_os_printf(" Resource Source Index: %X", | 931 | resource->extended_irq.interrupts); |
946 | ext_irq_data->resource_source.index); | ||
947 | |||
948 | acpi_os_printf(" Resource Source: %s", | ||
949 | ext_irq_data->resource_source.string_ptr); | ||
950 | } | ||
951 | |||
952 | return; | ||
953 | } | 932 | } |
954 | 933 | ||
955 | /******************************************************************************* | 934 | /******************************************************************************* |
956 | * | 935 | * |
957 | * FUNCTION: acpi_rs_dump_resource_list | 936 | * FUNCTION: acpi_rs_dump_generic_reg |
958 | * | 937 | * |
959 | * PARAMETERS: Resource - pointer to the resource structure to dump. | 938 | * PARAMETERS: Resource - Pointer to an internal resource descriptor |
960 | * | 939 | * |
961 | * RETURN: None | 940 | * RETURN: None |
962 | * | 941 | * |
963 | * DESCRIPTION: Dispatches the structure to the correct dump routine. | 942 | * DESCRIPTION: Dump the field names and values of the resource descriptor |
964 | * | 943 | * |
965 | ******************************************************************************/ | 944 | ******************************************************************************/ |
966 | 945 | ||
967 | void acpi_rs_dump_resource_list(struct acpi_resource *resource) | 946 | static void acpi_rs_dump_generic_reg(union acpi_resource_data *resource) |
968 | { | 947 | { |
969 | u8 count = 0; | ||
970 | u8 done = FALSE; | ||
971 | 948 | ||
972 | ACPI_FUNCTION_ENTRY(); | 949 | ACPI_FUNCTION_ENTRY(); |
973 | 950 | ||
974 | if (acpi_dbg_level & ACPI_LV_RESOURCES && _COMPONENT & acpi_dbg_layer) { | 951 | acpi_os_printf("Generic Register Resource\n"); |
975 | while (!done) { | ||
976 | acpi_os_printf("Resource structure %X.\n", count++); | ||
977 | |||
978 | switch (resource->id) { | ||
979 | case ACPI_RSTYPE_IRQ: | ||
980 | acpi_rs_dump_irq(&resource->data); | ||
981 | break; | ||
982 | |||
983 | case ACPI_RSTYPE_DMA: | ||
984 | acpi_rs_dump_dma(&resource->data); | ||
985 | break; | ||
986 | |||
987 | case ACPI_RSTYPE_START_DPF: | ||
988 | acpi_rs_dump_start_depend_fns(&resource->data); | ||
989 | break; | ||
990 | |||
991 | case ACPI_RSTYPE_END_DPF: | ||
992 | acpi_os_printf | ||
993 | ("end_dependent_functions Resource\n"); | ||
994 | /* acpi_rs_dump_end_dependent_functions (Resource->Data); */ | ||
995 | break; | ||
996 | |||
997 | case ACPI_RSTYPE_IO: | ||
998 | acpi_rs_dump_io(&resource->data); | ||
999 | break; | ||
1000 | |||
1001 | case ACPI_RSTYPE_FIXED_IO: | ||
1002 | acpi_rs_dump_fixed_io(&resource->data); | ||
1003 | break; | ||
1004 | 952 | ||
1005 | case ACPI_RSTYPE_VENDOR: | 953 | acpi_rs_out_integer8("Space ID", (u8) resource->generic_reg.space_id); |
1006 | acpi_rs_dump_vendor_specific(&resource->data); | ||
1007 | break; | ||
1008 | 954 | ||
1009 | case ACPI_RSTYPE_END_TAG: | 955 | acpi_rs_out_integer8("Bit Width", (u8) resource->generic_reg.bit_width); |
1010 | /*rs_dump_end_tag (Resource->Data); */ | ||
1011 | acpi_os_printf("end_tag Resource\n"); | ||
1012 | done = TRUE; | ||
1013 | break; | ||
1014 | 956 | ||
1015 | case ACPI_RSTYPE_MEM24: | 957 | acpi_rs_out_integer8("Bit Offset", |
1016 | acpi_rs_dump_memory24(&resource->data); | 958 | (u8) resource->generic_reg.bit_offset); |
1017 | break; | ||
1018 | 959 | ||
1019 | case ACPI_RSTYPE_MEM32: | 960 | acpi_rs_out_integer8("Address Size", |
1020 | acpi_rs_dump_memory32(&resource->data); | 961 | (u8) resource->generic_reg.address_size); |
1021 | break; | ||
1022 | 962 | ||
1023 | case ACPI_RSTYPE_FIXED_MEM32: | 963 | acpi_rs_out_integer64("Address", resource->generic_reg.address); |
1024 | acpi_rs_dump_fixed_memory32(&resource->data); | 964 | } |
1025 | break; | ||
1026 | |||
1027 | case ACPI_RSTYPE_ADDRESS16: | ||
1028 | acpi_rs_dump_address16(&resource->data); | ||
1029 | break; | ||
1030 | |||
1031 | case ACPI_RSTYPE_ADDRESS32: | ||
1032 | acpi_rs_dump_address32(&resource->data); | ||
1033 | break; | ||
1034 | 965 | ||
1035 | case ACPI_RSTYPE_ADDRESS64: | 966 | /******************************************************************************* |
1036 | acpi_rs_dump_address64(&resource->data); | 967 | * |
1037 | break; | 968 | * FUNCTION: acpi_rs_dump_end_depend_fns |
969 | * | ||
970 | * PARAMETERS: Resource - Pointer to an internal resource descriptor | ||
971 | * | ||
972 | * RETURN: None | ||
973 | * | ||
974 | * DESCRIPTION: Print type, no data. | ||
975 | * | ||
976 | ******************************************************************************/ | ||
1038 | 977 | ||
1039 | case ACPI_RSTYPE_EXT_IRQ: | 978 | static void acpi_rs_dump_end_depend_fns(union acpi_resource_data *resource) |
1040 | acpi_rs_dump_extended_irq(&resource->data); | 979 | { |
1041 | break; | 980 | ACPI_FUNCTION_ENTRY(); |
1042 | 981 | ||
1043 | default: | 982 | acpi_os_printf("end_dependent_functions Resource\n"); |
1044 | acpi_os_printf("Invalid resource type\n"); | 983 | } |
1045 | break; | ||
1046 | 984 | ||
1047 | } | 985 | /******************************************************************************* |
986 | * | ||
987 | * FUNCTION: acpi_rs_dump_end_tag | ||
988 | * | ||
989 | * PARAMETERS: Resource - Pointer to an internal resource descriptor | ||
990 | * | ||
991 | * RETURN: None | ||
992 | * | ||
993 | * DESCRIPTION: Print type, no data. | ||
994 | * | ||
995 | ******************************************************************************/ | ||
1048 | 996 | ||
1049 | resource = | 997 | static void acpi_rs_dump_end_tag(union acpi_resource_data *resource) |
1050 | ACPI_PTR_ADD(struct acpi_resource, resource, | 998 | { |
1051 | resource->length); | 999 | ACPI_FUNCTION_ENTRY(); |
1052 | } | ||
1053 | } | ||
1054 | 1000 | ||
1055 | return; | 1001 | acpi_os_printf("end_tag Resource\n"); |
1056 | } | 1002 | } |
1057 | 1003 | ||
1058 | /******************************************************************************* | 1004 | /******************************************************************************* |
1059 | * | 1005 | * |
1060 | * FUNCTION: acpi_rs_dump_irq_list | 1006 | * FUNCTION: acpi_rs_dump_irq_list |
1061 | * | 1007 | * |
1062 | * PARAMETERS: route_table - pointer to the routing table to dump. | 1008 | * PARAMETERS: route_table - Pointer to the routing table to dump. |
1063 | * | 1009 | * |
1064 | * RETURN: None | 1010 | * RETURN: None |
1065 | * | 1011 | * |
1066 | * DESCRIPTION: Dispatches the structures to the correct dump routine. | 1012 | * DESCRIPTION: Print IRQ routing table |
1067 | * | 1013 | * |
1068 | ******************************************************************************/ | 1014 | ******************************************************************************/ |
1069 | 1015 | ||
@@ -1071,41 +1017,35 @@ void acpi_rs_dump_irq_list(u8 * route_table) | |||
1071 | { | 1017 | { |
1072 | u8 *buffer = route_table; | 1018 | u8 *buffer = route_table; |
1073 | u8 count = 0; | 1019 | u8 count = 0; |
1074 | u8 done = FALSE; | ||
1075 | struct acpi_pci_routing_table *prt_element; | 1020 | struct acpi_pci_routing_table *prt_element; |
1076 | 1021 | ||
1077 | ACPI_FUNCTION_ENTRY(); | 1022 | ACPI_FUNCTION_ENTRY(); |
1078 | 1023 | ||
1079 | if (acpi_dbg_level & ACPI_LV_RESOURCES && _COMPONENT & acpi_dbg_layer) { | 1024 | if (!(acpi_dbg_level & ACPI_LV_RESOURCES) |
1080 | prt_element = | 1025 | || !(_COMPONENT & acpi_dbg_layer)) { |
1081 | ACPI_CAST_PTR(struct acpi_pci_routing_table, buffer); | 1026 | return; |
1027 | } | ||
1082 | 1028 | ||
1083 | while (!done) { | 1029 | prt_element = ACPI_CAST_PTR(struct acpi_pci_routing_table, buffer); |
1084 | acpi_os_printf("PCI IRQ Routing Table structure %X.\n", | ||
1085 | count++); | ||
1086 | 1030 | ||
1087 | acpi_os_printf(" Address: %8.8X%8.8X\n", | 1031 | /* Dump all table elements, Exit on null length element */ |
1088 | ACPI_FORMAT_UINT64(prt_element-> | ||
1089 | address)); | ||
1090 | 1032 | ||
1091 | acpi_os_printf(" Pin: %X\n", prt_element->pin); | 1033 | while (prt_element->length) { |
1034 | acpi_os_printf("\n[%02X] PCI IRQ Routing Table Package\n", | ||
1035 | count); | ||
1092 | 1036 | ||
1093 | acpi_os_printf(" Source: %s\n", prt_element->source); | 1037 | acpi_rs_out_integer64("Address", prt_element->address); |
1094 | 1038 | ||
1095 | acpi_os_printf(" source_index: %X\n", | 1039 | acpi_rs_out_integer32("Pin", prt_element->pin); |
1096 | prt_element->source_index); | 1040 | acpi_rs_out_string("Source", prt_element->source); |
1041 | acpi_rs_out_integer32("Source Index", | ||
1042 | prt_element->source_index); | ||
1097 | 1043 | ||
1098 | buffer += prt_element->length; | 1044 | buffer += prt_element->length; |
1099 | prt_element = | 1045 | prt_element = |
1100 | ACPI_CAST_PTR(struct acpi_pci_routing_table, | 1046 | ACPI_CAST_PTR(struct acpi_pci_routing_table, buffer); |
1101 | buffer); | 1047 | count++; |
1102 | if (0 == prt_element->length) { | ||
1103 | done = TRUE; | ||
1104 | } | ||
1105 | } | ||
1106 | } | 1048 | } |
1107 | |||
1108 | return; | ||
1109 | } | 1049 | } |
1110 | 1050 | ||
1111 | #endif | 1051 | #endif |
diff --git a/drivers/acpi/resources/rsio.c b/drivers/acpi/resources/rsio.c index d53bbe89e851..6574e2ae2e52 100644 --- a/drivers/acpi/resources/rsio.c +++ b/drivers/acpi/resources/rsio.c | |||
@@ -84,7 +84,7 @@ acpi_rs_io_resource(u8 * byte_stream_buffer, | |||
84 | 84 | ||
85 | *bytes_consumed = 8; | 85 | *bytes_consumed = 8; |
86 | 86 | ||
87 | output_struct->id = ACPI_RSTYPE_IO; | 87 | output_struct->type = ACPI_RSTYPE_IO; |
88 | 88 | ||
89 | /* Check Decode */ | 89 | /* Check Decode */ |
90 | 90 | ||
@@ -170,7 +170,7 @@ acpi_rs_fixed_io_resource(u8 * byte_stream_buffer, | |||
170 | 170 | ||
171 | *bytes_consumed = 4; | 171 | *bytes_consumed = 4; |
172 | 172 | ||
173 | output_struct->id = ACPI_RSTYPE_FIXED_IO; | 173 | output_struct->type = ACPI_RSTYPE_FIXED_IO; |
174 | 174 | ||
175 | /* Check Range Base Address */ | 175 | /* Check Range Base Address */ |
176 | 176 | ||
@@ -200,7 +200,7 @@ acpi_rs_fixed_io_resource(u8 * byte_stream_buffer, | |||
200 | * | 200 | * |
201 | * FUNCTION: acpi_rs_io_stream | 201 | * FUNCTION: acpi_rs_io_stream |
202 | * | 202 | * |
203 | * PARAMETERS: linked_list - Pointer to the resource linked list | 203 | * PARAMETERS: Resource - Pointer to the resource linked list |
204 | * output_buffer - Pointer to the user's return buffer | 204 | * output_buffer - Pointer to the user's return buffer |
205 | * bytes_consumed - Pointer to where the number of bytes | 205 | * bytes_consumed - Pointer to where the number of bytes |
206 | * used in the output_buffer is returned | 206 | * used in the output_buffer is returned |
@@ -213,7 +213,7 @@ acpi_rs_fixed_io_resource(u8 * byte_stream_buffer, | |||
213 | ******************************************************************************/ | 213 | ******************************************************************************/ |
214 | 214 | ||
215 | acpi_status | 215 | acpi_status |
216 | acpi_rs_io_stream(struct acpi_resource *linked_list, | 216 | acpi_rs_io_stream(struct acpi_resource *resource, |
217 | u8 ** output_buffer, acpi_size * bytes_consumed) | 217 | u8 ** output_buffer, acpi_size * bytes_consumed) |
218 | { | 218 | { |
219 | u8 *buffer = *output_buffer; | 219 | u8 *buffer = *output_buffer; |
@@ -222,42 +222,42 @@ acpi_rs_io_stream(struct acpi_resource *linked_list, | |||
222 | 222 | ||
223 | ACPI_FUNCTION_TRACE("rs_io_stream"); | 223 | ACPI_FUNCTION_TRACE("rs_io_stream"); |
224 | 224 | ||
225 | /* The descriptor field is static */ | 225 | /* The Descriptor Type field is static */ |
226 | 226 | ||
227 | *buffer = 0x47; | 227 | *buffer = ACPI_RDESC_TYPE_IO_PORT | 0x07; |
228 | buffer += 1; | 228 | buffer += 1; |
229 | 229 | ||
230 | /* Io Information Byte */ | 230 | /* Io Information Byte */ |
231 | 231 | ||
232 | temp8 = (u8) (linked_list->data.io.io_decode & 0x01); | 232 | temp8 = (u8) (resource->data.io.io_decode & 0x01); |
233 | 233 | ||
234 | *buffer = temp8; | 234 | *buffer = temp8; |
235 | buffer += 1; | 235 | buffer += 1; |
236 | 236 | ||
237 | /* Set the Range minimum base address */ | 237 | /* Set the Range minimum base address */ |
238 | 238 | ||
239 | temp16 = (u16) linked_list->data.io.min_base_address; | 239 | temp16 = (u16) resource->data.io.min_base_address; |
240 | 240 | ||
241 | ACPI_MOVE_16_TO_16(buffer, &temp16); | 241 | ACPI_MOVE_16_TO_16(buffer, &temp16); |
242 | buffer += 2; | 242 | buffer += 2; |
243 | 243 | ||
244 | /* Set the Range maximum base address */ | 244 | /* Set the Range maximum base address */ |
245 | 245 | ||
246 | temp16 = (u16) linked_list->data.io.max_base_address; | 246 | temp16 = (u16) resource->data.io.max_base_address; |
247 | 247 | ||
248 | ACPI_MOVE_16_TO_16(buffer, &temp16); | 248 | ACPI_MOVE_16_TO_16(buffer, &temp16); |
249 | buffer += 2; | 249 | buffer += 2; |
250 | 250 | ||
251 | /* Set the base alignment */ | 251 | /* Set the base alignment */ |
252 | 252 | ||
253 | temp8 = (u8) linked_list->data.io.alignment; | 253 | temp8 = (u8) resource->data.io.alignment; |
254 | 254 | ||
255 | *buffer = temp8; | 255 | *buffer = temp8; |
256 | buffer += 1; | 256 | buffer += 1; |
257 | 257 | ||
258 | /* Set the range length */ | 258 | /* Set the range length */ |
259 | 259 | ||
260 | temp8 = (u8) linked_list->data.io.range_length; | 260 | temp8 = (u8) resource->data.io.range_length; |
261 | 261 | ||
262 | *buffer = temp8; | 262 | *buffer = temp8; |
263 | buffer += 1; | 263 | buffer += 1; |
@@ -272,7 +272,7 @@ acpi_rs_io_stream(struct acpi_resource *linked_list, | |||
272 | * | 272 | * |
273 | * FUNCTION: acpi_rs_fixed_io_stream | 273 | * FUNCTION: acpi_rs_fixed_io_stream |
274 | * | 274 | * |
275 | * PARAMETERS: linked_list - Pointer to the resource linked list | 275 | * PARAMETERS: Resource - Pointer to the resource linked list |
276 | * output_buffer - Pointer to the user's return buffer | 276 | * output_buffer - Pointer to the user's return buffer |
277 | * bytes_consumed - Pointer to where the number of bytes | 277 | * bytes_consumed - Pointer to where the number of bytes |
278 | * used in the output_buffer is returned | 278 | * used in the output_buffer is returned |
@@ -285,7 +285,7 @@ acpi_rs_io_stream(struct acpi_resource *linked_list, | |||
285 | ******************************************************************************/ | 285 | ******************************************************************************/ |
286 | 286 | ||
287 | acpi_status | 287 | acpi_status |
288 | acpi_rs_fixed_io_stream(struct acpi_resource *linked_list, | 288 | acpi_rs_fixed_io_stream(struct acpi_resource *resource, |
289 | u8 ** output_buffer, acpi_size * bytes_consumed) | 289 | u8 ** output_buffer, acpi_size * bytes_consumed) |
290 | { | 290 | { |
291 | u8 *buffer = *output_buffer; | 291 | u8 *buffer = *output_buffer; |
@@ -294,22 +294,21 @@ acpi_rs_fixed_io_stream(struct acpi_resource *linked_list, | |||
294 | 294 | ||
295 | ACPI_FUNCTION_TRACE("rs_fixed_io_stream"); | 295 | ACPI_FUNCTION_TRACE("rs_fixed_io_stream"); |
296 | 296 | ||
297 | /* The descriptor field is static */ | 297 | /* The Descriptor Type field is static */ |
298 | |||
299 | *buffer = 0x4B; | ||
300 | 298 | ||
299 | *buffer = ACPI_RDESC_TYPE_FIXED_IO_PORT | 0x03; | ||
301 | buffer += 1; | 300 | buffer += 1; |
302 | 301 | ||
303 | /* Set the Range base address */ | 302 | /* Set the Range base address */ |
304 | 303 | ||
305 | temp16 = (u16) linked_list->data.fixed_io.base_address; | 304 | temp16 = (u16) resource->data.fixed_io.base_address; |
306 | 305 | ||
307 | ACPI_MOVE_16_TO_16(buffer, &temp16); | 306 | ACPI_MOVE_16_TO_16(buffer, &temp16); |
308 | buffer += 2; | 307 | buffer += 2; |
309 | 308 | ||
310 | /* Set the range length */ | 309 | /* Set the range length */ |
311 | 310 | ||
312 | temp8 = (u8) linked_list->data.fixed_io.range_length; | 311 | temp8 = (u8) resource->data.fixed_io.range_length; |
313 | 312 | ||
314 | *buffer = temp8; | 313 | *buffer = temp8; |
315 | buffer += 1; | 314 | buffer += 1; |
@@ -358,7 +357,7 @@ acpi_rs_dma_resource(u8 * byte_stream_buffer, | |||
358 | /* The number of bytes consumed are Constant */ | 357 | /* The number of bytes consumed are Constant */ |
359 | 358 | ||
360 | *bytes_consumed = 3; | 359 | *bytes_consumed = 3; |
361 | output_struct->id = ACPI_RSTYPE_DMA; | 360 | output_struct->type = ACPI_RSTYPE_DMA; |
362 | 361 | ||
363 | /* Point to the 8-bits of Byte 1 */ | 362 | /* Point to the 8-bits of Byte 1 */ |
364 | 363 | ||
@@ -420,7 +419,7 @@ acpi_rs_dma_resource(u8 * byte_stream_buffer, | |||
420 | * | 419 | * |
421 | * FUNCTION: acpi_rs_dma_stream | 420 | * FUNCTION: acpi_rs_dma_stream |
422 | * | 421 | * |
423 | * PARAMETERS: linked_list - Pointer to the resource linked list | 422 | * PARAMETERS: Resource - Pointer to the resource linked list |
424 | * output_buffer - Pointer to the user's return buffer | 423 | * output_buffer - Pointer to the user's return buffer |
425 | * bytes_consumed - Pointer to where the number of bytes | 424 | * bytes_consumed - Pointer to where the number of bytes |
426 | * used in the output_buffer is returned | 425 | * used in the output_buffer is returned |
@@ -433,7 +432,7 @@ acpi_rs_dma_resource(u8 * byte_stream_buffer, | |||
433 | ******************************************************************************/ | 432 | ******************************************************************************/ |
434 | 433 | ||
435 | acpi_status | 434 | acpi_status |
436 | acpi_rs_dma_stream(struct acpi_resource *linked_list, | 435 | acpi_rs_dma_stream(struct acpi_resource *resource, |
437 | u8 ** output_buffer, acpi_size * bytes_consumed) | 436 | u8 ** output_buffer, acpi_size * bytes_consumed) |
438 | { | 437 | { |
439 | u8 *buffer = *output_buffer; | 438 | u8 *buffer = *output_buffer; |
@@ -443,17 +442,16 @@ acpi_rs_dma_stream(struct acpi_resource *linked_list, | |||
443 | 442 | ||
444 | ACPI_FUNCTION_TRACE("rs_dma_stream"); | 443 | ACPI_FUNCTION_TRACE("rs_dma_stream"); |
445 | 444 | ||
446 | /* The descriptor field is static */ | 445 | /* The Descriptor Type field is static */ |
447 | 446 | ||
448 | *buffer = 0x2A; | 447 | *buffer = ACPI_RDESC_TYPE_DMA_FORMAT | 0x02; |
449 | buffer += 1; | 448 | buffer += 1; |
450 | temp8 = 0; | 449 | temp8 = 0; |
451 | 450 | ||
452 | /* Loop through all of the Channels and set the mask bits */ | 451 | /* Loop through all of the Channels and set the mask bits */ |
453 | 452 | ||
454 | for (index = 0; | 453 | for (index = 0; index < resource->data.dma.number_of_channels; index++) { |
455 | index < linked_list->data.dma.number_of_channels; index++) { | 454 | temp16 = (u16) resource->data.dma.channels[index]; |
456 | temp16 = (u16) linked_list->data.dma.channels[index]; | ||
457 | temp8 |= 0x1 << temp16; | 455 | temp8 |= 0x1 << temp16; |
458 | } | 456 | } |
459 | 457 | ||
@@ -462,9 +460,9 @@ acpi_rs_dma_stream(struct acpi_resource *linked_list, | |||
462 | 460 | ||
463 | /* Set the DMA Info */ | 461 | /* Set the DMA Info */ |
464 | 462 | ||
465 | temp8 = (u8) ((linked_list->data.dma.type & 0x03) << 5); | 463 | temp8 = (u8) ((resource->data.dma.type & 0x03) << 5); |
466 | temp8 |= ((linked_list->data.dma.bus_master & 0x01) << 2); | 464 | temp8 |= ((resource->data.dma.bus_master & 0x01) << 2); |
467 | temp8 |= (linked_list->data.dma.transfer & 0x03); | 465 | temp8 |= (resource->data.dma.transfer & 0x03); |
468 | 466 | ||
469 | *buffer = temp8; | 467 | *buffer = temp8; |
470 | buffer += 1; | 468 | buffer += 1; |
diff --git a/drivers/acpi/resources/rsirq.c b/drivers/acpi/resources/rsirq.c index 56043fee96cb..75df962115cc 100644 --- a/drivers/acpi/resources/rsirq.c +++ b/drivers/acpi/resources/rsirq.c | |||
@@ -88,7 +88,7 @@ acpi_rs_irq_resource(u8 * byte_stream_buffer, | |||
88 | */ | 88 | */ |
89 | temp8 = *buffer; | 89 | temp8 = *buffer; |
90 | *bytes_consumed = (temp8 & 0x03) + 1; | 90 | *bytes_consumed = (temp8 & 0x03) + 1; |
91 | output_struct->id = ACPI_RSTYPE_IRQ; | 91 | output_struct->type = ACPI_RSTYPE_IRQ; |
92 | 92 | ||
93 | /* Point to the 16-bits of Bytes 1 and 2 */ | 93 | /* Point to the 16-bits of Bytes 1 and 2 */ |
94 | 94 | ||
@@ -177,7 +177,7 @@ acpi_rs_irq_resource(u8 * byte_stream_buffer, | |||
177 | * | 177 | * |
178 | * FUNCTION: acpi_rs_irq_stream | 178 | * FUNCTION: acpi_rs_irq_stream |
179 | * | 179 | * |
180 | * PARAMETERS: linked_list - Pointer to the resource linked list | 180 | * PARAMETERS: Resource - Pointer to the resource linked list |
181 | * output_buffer - Pointer to the user's return buffer | 181 | * output_buffer - Pointer to the user's return buffer |
182 | * bytes_consumed - Pointer to where the number of bytes | 182 | * bytes_consumed - Pointer to where the number of bytes |
183 | * used in the output_buffer is returned | 183 | * used in the output_buffer is returned |
@@ -190,7 +190,7 @@ acpi_rs_irq_resource(u8 * byte_stream_buffer, | |||
190 | ******************************************************************************/ | 190 | ******************************************************************************/ |
191 | 191 | ||
192 | acpi_status | 192 | acpi_status |
193 | acpi_rs_irq_stream(struct acpi_resource *linked_list, | 193 | acpi_rs_irq_stream(struct acpi_resource *resource, |
194 | u8 ** output_buffer, acpi_size * bytes_consumed) | 194 | u8 ** output_buffer, acpi_size * bytes_consumed) |
195 | { | 195 | { |
196 | u8 *buffer = *output_buffer; | 196 | u8 *buffer = *output_buffer; |
@@ -205,13 +205,13 @@ acpi_rs_irq_stream(struct acpi_resource *linked_list, | |||
205 | * The descriptor field is set based upon whether a third byte is | 205 | * The descriptor field is set based upon whether a third byte is |
206 | * needed to contain the IRQ Information. | 206 | * needed to contain the IRQ Information. |
207 | */ | 207 | */ |
208 | if (ACPI_EDGE_SENSITIVE == linked_list->data.irq.edge_level && | 208 | if (ACPI_EDGE_SENSITIVE == resource->data.irq.edge_level && |
209 | ACPI_ACTIVE_HIGH == linked_list->data.irq.active_high_low && | 209 | ACPI_ACTIVE_HIGH == resource->data.irq.active_high_low && |
210 | ACPI_EXCLUSIVE == linked_list->data.irq.shared_exclusive) { | 210 | ACPI_EXCLUSIVE == resource->data.irq.shared_exclusive) { |
211 | *buffer = 0x22; | 211 | *buffer = ACPI_RDESC_TYPE_IRQ_FORMAT | 0x02; |
212 | IRqinfo_byte_needed = FALSE; | 212 | IRqinfo_byte_needed = FALSE; |
213 | } else { | 213 | } else { |
214 | *buffer = 0x23; | 214 | *buffer = ACPI_RDESC_TYPE_IRQ_FORMAT | 0x03; |
215 | IRqinfo_byte_needed = TRUE; | 215 | IRqinfo_byte_needed = TRUE; |
216 | } | 216 | } |
217 | 217 | ||
@@ -221,8 +221,8 @@ acpi_rs_irq_stream(struct acpi_resource *linked_list, | |||
221 | /* Loop through all of the interrupts and set the mask bits */ | 221 | /* Loop through all of the interrupts and set the mask bits */ |
222 | 222 | ||
223 | for (index = 0; | 223 | for (index = 0; |
224 | index < linked_list->data.irq.number_of_interrupts; index++) { | 224 | index < resource->data.irq.number_of_interrupts; index++) { |
225 | temp8 = (u8) linked_list->data.irq.interrupts[index]; | 225 | temp8 = (u8) resource->data.irq.interrupts[index]; |
226 | temp16 |= 0x1 << temp8; | 226 | temp16 |= 0x1 << temp8; |
227 | } | 227 | } |
228 | 228 | ||
@@ -233,11 +233,11 @@ acpi_rs_irq_stream(struct acpi_resource *linked_list, | |||
233 | 233 | ||
234 | if (IRqinfo_byte_needed) { | 234 | if (IRqinfo_byte_needed) { |
235 | temp8 = 0; | 235 | temp8 = 0; |
236 | temp8 = (u8) ((linked_list->data.irq.shared_exclusive & | 236 | temp8 = (u8) ((resource->data.irq.shared_exclusive & |
237 | 0x01) << 4); | 237 | 0x01) << 4); |
238 | 238 | ||
239 | if (ACPI_LEVEL_SENSITIVE == linked_list->data.irq.edge_level && | 239 | if (ACPI_LEVEL_SENSITIVE == resource->data.irq.edge_level && |
240 | ACPI_ACTIVE_LOW == linked_list->data.irq.active_high_low) { | 240 | ACPI_ACTIVE_LOW == resource->data.irq.active_high_low) { |
241 | temp8 |= 0x08; | 241 | temp8 |= 0x08; |
242 | } else { | 242 | } else { |
243 | temp8 |= 0x01; | 243 | temp8 |= 0x01; |
@@ -302,7 +302,7 @@ acpi_rs_extended_irq_resource(u8 * byte_stream_buffer, | |||
302 | } | 302 | } |
303 | 303 | ||
304 | *bytes_consumed = temp16 + 3; | 304 | *bytes_consumed = temp16 + 3; |
305 | output_struct->id = ACPI_RSTYPE_EXT_IRQ; | 305 | output_struct->type = ACPI_RSTYPE_EXT_IRQ; |
306 | 306 | ||
307 | /* Point to the Byte3 */ | 307 | /* Point to the Byte3 */ |
308 | 308 | ||
@@ -441,7 +441,7 @@ acpi_rs_extended_irq_resource(u8 * byte_stream_buffer, | |||
441 | * | 441 | * |
442 | * FUNCTION: acpi_rs_extended_irq_stream | 442 | * FUNCTION: acpi_rs_extended_irq_stream |
443 | * | 443 | * |
444 | * PARAMETERS: linked_list - Pointer to the resource linked list | 444 | * PARAMETERS: Resource - Pointer to the resource linked list |
445 | * output_buffer - Pointer to the user's return buffer | 445 | * output_buffer - Pointer to the user's return buffer |
446 | * bytes_consumed - Pointer to where the number of bytes | 446 | * bytes_consumed - Pointer to where the number of bytes |
447 | * used in the output_buffer is returned | 447 | * used in the output_buffer is returned |
@@ -454,7 +454,7 @@ acpi_rs_extended_irq_resource(u8 * byte_stream_buffer, | |||
454 | ******************************************************************************/ | 454 | ******************************************************************************/ |
455 | 455 | ||
456 | acpi_status | 456 | acpi_status |
457 | acpi_rs_extended_irq_stream(struct acpi_resource *linked_list, | 457 | acpi_rs_extended_irq_stream(struct acpi_resource *resource, |
458 | u8 ** output_buffer, acpi_size * bytes_consumed) | 458 | u8 ** output_buffer, acpi_size * bytes_consumed) |
459 | { | 459 | { |
460 | u8 *buffer = *output_buffer; | 460 | u8 *buffer = *output_buffer; |
@@ -476,9 +476,8 @@ acpi_rs_extended_irq_stream(struct acpi_resource *linked_list, | |||
476 | 476 | ||
477 | /* Set the Interrupt vector flags */ | 477 | /* Set the Interrupt vector flags */ |
478 | 478 | ||
479 | temp8 = (u8) (linked_list->data.extended_irq.producer_consumer & 0x01); | 479 | temp8 = (u8) (resource->data.extended_irq.producer_consumer & 0x01); |
480 | temp8 |= | 480 | temp8 |= ((resource->data.extended_irq.shared_exclusive & 0x01) << 3); |
481 | ((linked_list->data.extended_irq.shared_exclusive & 0x01) << 3); | ||
482 | 481 | ||
483 | /* | 482 | /* |
484 | * Set the Interrupt Mode | 483 | * Set the Interrupt Mode |
@@ -489,44 +488,44 @@ acpi_rs_extended_irq_stream(struct acpi_resource *linked_list, | |||
489 | * | 488 | * |
490 | * - Edge/Level are defined opposite in the table vs the headers | 489 | * - Edge/Level are defined opposite in the table vs the headers |
491 | */ | 490 | */ |
492 | if (ACPI_EDGE_SENSITIVE == linked_list->data.extended_irq.edge_level) { | 491 | if (ACPI_EDGE_SENSITIVE == resource->data.extended_irq.edge_level) { |
493 | temp8 |= 0x2; | 492 | temp8 |= 0x2; |
494 | } | 493 | } |
495 | 494 | ||
496 | /* Set the Interrupt Polarity */ | 495 | /* Set the Interrupt Polarity */ |
497 | 496 | ||
498 | temp8 |= ((linked_list->data.extended_irq.active_high_low & 0x1) << 2); | 497 | temp8 |= ((resource->data.extended_irq.active_high_low & 0x1) << 2); |
499 | 498 | ||
500 | *buffer = temp8; | 499 | *buffer = temp8; |
501 | buffer += 1; | 500 | buffer += 1; |
502 | 501 | ||
503 | /* Set the Interrupt table length */ | 502 | /* Set the Interrupt table length */ |
504 | 503 | ||
505 | temp8 = (u8) linked_list->data.extended_irq.number_of_interrupts; | 504 | temp8 = (u8) resource->data.extended_irq.number_of_interrupts; |
506 | 505 | ||
507 | *buffer = temp8; | 506 | *buffer = temp8; |
508 | buffer += 1; | 507 | buffer += 1; |
509 | 508 | ||
510 | for (index = 0; | 509 | for (index = 0; |
511 | index < linked_list->data.extended_irq.number_of_interrupts; | 510 | index < resource->data.extended_irq.number_of_interrupts; |
512 | index++) { | 511 | index++) { |
513 | ACPI_MOVE_32_TO_32(buffer, | 512 | ACPI_MOVE_32_TO_32(buffer, |
514 | &linked_list->data.extended_irq. | 513 | &resource->data.extended_irq. |
515 | interrupts[index]); | 514 | interrupts[index]); |
516 | buffer += 4; | 515 | buffer += 4; |
517 | } | 516 | } |
518 | 517 | ||
519 | /* Resource Source Index and Resource Source are optional */ | 518 | /* Resource Source Index and Resource Source are optional */ |
520 | 519 | ||
521 | if (0 != linked_list->data.extended_irq.resource_source.string_length) { | 520 | if (0 != resource->data.extended_irq.resource_source.string_length) { |
522 | *buffer = | 521 | *buffer = |
523 | (u8) linked_list->data.extended_irq.resource_source.index; | 522 | (u8) resource->data.extended_irq.resource_source.index; |
524 | buffer += 1; | 523 | buffer += 1; |
525 | 524 | ||
526 | /* Copy the string */ | 525 | /* Copy the string */ |
527 | 526 | ||
528 | ACPI_STRCPY((char *)buffer, | 527 | ACPI_STRCPY((char *)buffer, |
529 | linked_list->data.extended_irq.resource_source. | 528 | resource->data.extended_irq.resource_source. |
530 | string_ptr); | 529 | string_ptr); |
531 | 530 | ||
532 | /* | 531 | /* |
@@ -535,8 +534,8 @@ acpi_rs_extended_irq_stream(struct acpi_resource *linked_list, | |||
535 | */ | 534 | */ |
536 | buffer += | 535 | buffer += |
537 | (acpi_size) (ACPI_STRLEN | 536 | (acpi_size) (ACPI_STRLEN |
538 | (linked_list->data.extended_irq. | 537 | (resource->data.extended_irq.resource_source. |
539 | resource_source.string_ptr) + 1); | 538 | string_ptr) + 1); |
540 | } | 539 | } |
541 | 540 | ||
542 | /* Return the number of bytes consumed in this operation */ | 541 | /* Return the number of bytes consumed in this operation */ |
diff --git a/drivers/acpi/resources/rslist.c b/drivers/acpi/resources/rslist.c index 103eb31c284e..87e75349dd0a 100644 --- a/drivers/acpi/resources/rslist.c +++ b/drivers/acpi/resources/rslist.c | |||
@@ -47,44 +47,143 @@ | |||
47 | #define _COMPONENT ACPI_RESOURCES | 47 | #define _COMPONENT ACPI_RESOURCES |
48 | ACPI_MODULE_NAME("rslist") | 48 | ACPI_MODULE_NAME("rslist") |
49 | 49 | ||
50 | /* Dispatch table for convert-to-stream functions */ | ||
51 | typedef | ||
52 | acpi_status(*ACPI_STREAM_HANDLER) (struct acpi_resource * resource, | ||
53 | u8 ** output_buffer, | ||
54 | acpi_size * bytes_consumed); | ||
55 | |||
56 | static ACPI_STREAM_HANDLER acpi_gbl_stream_dispatch[] = { | ||
57 | acpi_rs_irq_stream, /* ACPI_RSTYPE_IRQ */ | ||
58 | acpi_rs_dma_stream, /* ACPI_RSTYPE_DMA */ | ||
59 | acpi_rs_start_depend_fns_stream, /* ACPI_RSTYPE_START_DPF */ | ||
60 | acpi_rs_end_depend_fns_stream, /* ACPI_RSTYPE_END_DPF */ | ||
61 | acpi_rs_io_stream, /* ACPI_RSTYPE_IO */ | ||
62 | acpi_rs_fixed_io_stream, /* ACPI_RSTYPE_FIXED_IO */ | ||
63 | acpi_rs_vendor_stream, /* ACPI_RSTYPE_VENDOR */ | ||
64 | acpi_rs_end_tag_stream, /* ACPI_RSTYPE_END_TAG */ | ||
65 | acpi_rs_memory24_stream, /* ACPI_RSTYPE_MEM24 */ | ||
66 | acpi_rs_memory32_range_stream, /* ACPI_RSTYPE_MEM32 */ | ||
67 | acpi_rs_fixed_memory32_stream, /* ACPI_RSTYPE_FIXED_MEM32 */ | ||
68 | acpi_rs_address16_stream, /* ACPI_RSTYPE_ADDRESS16 */ | ||
69 | acpi_rs_address32_stream, /* ACPI_RSTYPE_ADDRESS32 */ | ||
70 | acpi_rs_address64_stream, /* ACPI_RSTYPE_ADDRESS64 */ | ||
71 | acpi_rs_extended_irq_stream, /* ACPI_RSTYPE_EXT_IRQ */ | ||
72 | acpi_rs_generic_register_stream /* ACPI_RSTYPE_GENERIC_REG */ | ||
73 | }; | ||
74 | |||
75 | /* Dispatch tables for convert-to-resource functions */ | ||
76 | |||
77 | typedef | ||
78 | acpi_status(*ACPI_RESOURCE_HANDLER) (u8 * byte_stream_buffer, | ||
79 | acpi_size * bytes_consumed, | ||
80 | u8 ** output_buffer, | ||
81 | acpi_size * structure_size); | ||
82 | |||
83 | static ACPI_RESOURCE_HANDLER acpi_gbl_sm_resource_dispatch[] = { | ||
84 | NULL, /* 0x00, Reserved */ | ||
85 | NULL, /* 0x01, Reserved */ | ||
86 | NULL, /* 0x02, Reserved */ | ||
87 | NULL, /* 0x03, Reserved */ | ||
88 | acpi_rs_irq_resource, /* ACPI_RDESC_TYPE_IRQ_FORMAT */ | ||
89 | acpi_rs_dma_resource, /* ACPI_RDESC_TYPE_DMA_FORMAT */ | ||
90 | acpi_rs_start_depend_fns_resource, /* ACPI_RDESC_TYPE_START_DEPENDENT */ | ||
91 | acpi_rs_end_depend_fns_resource, /* ACPI_RDESC_TYPE_END_DEPENDENT */ | ||
92 | acpi_rs_io_resource, /* ACPI_RDESC_TYPE_IO_PORT */ | ||
93 | acpi_rs_fixed_io_resource, /* ACPI_RDESC_TYPE_FIXED_IO_PORT */ | ||
94 | NULL, /* 0x0A, Reserved */ | ||
95 | NULL, /* 0x0B, Reserved */ | ||
96 | NULL, /* 0x0C, Reserved */ | ||
97 | NULL, /* 0x0D, Reserved */ | ||
98 | acpi_rs_vendor_resource, /* ACPI_RDESC_TYPE_SMALL_VENDOR */ | ||
99 | acpi_rs_end_tag_resource /* ACPI_RDESC_TYPE_END_TAG */ | ||
100 | }; | ||
101 | |||
102 | static ACPI_RESOURCE_HANDLER acpi_gbl_lg_resource_dispatch[] = { | ||
103 | NULL, /* 0x00, Reserved */ | ||
104 | acpi_rs_memory24_resource, /* ACPI_RDESC_TYPE_MEMORY_24 */ | ||
105 | acpi_rs_generic_register_resource, /* ACPI_RDESC_TYPE_GENERIC_REGISTER */ | ||
106 | NULL, /* 0x03, Reserved */ | ||
107 | acpi_rs_vendor_resource, /* ACPI_RDESC_TYPE_LARGE_VENDOR */ | ||
108 | acpi_rs_memory32_range_resource, /* ACPI_RDESC_TYPE_MEMORY_32 */ | ||
109 | acpi_rs_fixed_memory32_resource, /* ACPI_RDESC_TYPE_FIXED_MEMORY_32 */ | ||
110 | acpi_rs_address32_resource, /* ACPI_RDESC_TYPE_DWORD_ADDRESS_SPACE */ | ||
111 | acpi_rs_address16_resource, /* ACPI_RDESC_TYPE_WORD_ADDRESS_SPACE */ | ||
112 | acpi_rs_extended_irq_resource, /* ACPI_RDESC_TYPE_EXTENDED_XRUPT */ | ||
113 | acpi_rs_address64_resource, /* ACPI_RDESC_TYPE_QWORD_ADDRESS_SPACE */ | ||
114 | acpi_rs_address64_resource /* ACPI_RDESC_TYPE_EXTENDED_ADDRESS_SPACE */ | ||
115 | }; | ||
116 | |||
117 | /* Local prototypes */ | ||
118 | |||
119 | static ACPI_RESOURCE_HANDLER acpi_rs_get_resource_handler(u8 resource_type); | ||
120 | |||
50 | /******************************************************************************* | 121 | /******************************************************************************* |
51 | * | 122 | * |
52 | * FUNCTION: acpi_rs_get_resource_type | 123 | * FUNCTION: acpi_rs_get_resource_type |
53 | * | 124 | * |
54 | * PARAMETERS: resource_start_byte - Byte 0 of a resource descriptor | 125 | * PARAMETERS: resource_type - Byte 0 of a resource descriptor |
55 | * | 126 | * |
56 | * RETURN: The Resource Type with no extraneous bits | 127 | * RETURN: The Resource Type with no extraneous bits (except the large/ |
128 | * small bit -- left alone) | ||
57 | * | 129 | * |
58 | * DESCRIPTION: Extract the Resource Type/Name from the first byte of | 130 | * DESCRIPTION: Extract the Resource Type/Name from the first byte of |
59 | * a resource descriptor. | 131 | * a resource descriptor. |
60 | * | 132 | * |
61 | ******************************************************************************/ | 133 | ******************************************************************************/ |
62 | u8 acpi_rs_get_resource_type(u8 resource_start_byte) | ||
63 | { | ||
64 | 134 | ||
135 | u8 acpi_rs_get_resource_type(u8 resource_type) | ||
136 | { | ||
65 | ACPI_FUNCTION_ENTRY(); | 137 | ACPI_FUNCTION_ENTRY(); |
66 | 138 | ||
67 | /* Determine if this is a small or large resource */ | 139 | /* Determine if this is a small or large resource */ |
68 | 140 | ||
69 | switch (resource_start_byte & ACPI_RDESC_TYPE_MASK) { | 141 | if (resource_type & ACPI_RDESC_TYPE_LARGE) { |
70 | case ACPI_RDESC_TYPE_SMALL: | 142 | /* Large Resource Type -- bits 6:0 contain the name */ |
143 | |||
144 | return (resource_type); | ||
145 | } else { | ||
146 | /* Small Resource Type -- bits 6:3 contain the name */ | ||
147 | |||
148 | return ((u8) (resource_type & ACPI_RDESC_SMALL_MASK)); | ||
149 | } | ||
150 | } | ||
151 | |||
152 | /******************************************************************************* | ||
153 | * | ||
154 | * FUNCTION: acpi_rs_get_resource_handler | ||
155 | * | ||
156 | * PARAMETERS: resource_type - Byte 0 of a resource descriptor | ||
157 | * | ||
158 | * RETURN: Pointer to the resource conversion handler | ||
159 | * | ||
160 | * DESCRIPTION: Extract the Resource Type/Name from the first byte of | ||
161 | * a resource descriptor. | ||
162 | * | ||
163 | ******************************************************************************/ | ||
71 | 164 | ||
72 | /* Small Resource Type -- Only bits 6:3 are valid */ | 165 | static ACPI_RESOURCE_HANDLER acpi_rs_get_resource_handler(u8 resource_type) |
166 | { | ||
167 | ACPI_FUNCTION_ENTRY(); | ||
73 | 168 | ||
74 | return ((u8) (resource_start_byte & ACPI_RDESC_SMALL_MASK)); | 169 | /* Determine if this is a small or large resource */ |
75 | 170 | ||
76 | case ACPI_RDESC_TYPE_LARGE: | 171 | if (resource_type & ACPI_RDESC_TYPE_LARGE) { |
172 | /* Large Resource Type -- bits 6:0 contain the name */ | ||
77 | 173 | ||
78 | /* Large Resource Type -- All bits are valid */ | 174 | if (resource_type > ACPI_RDESC_LARGE_MAX) { |
175 | return (NULL); | ||
176 | } | ||
79 | 177 | ||
80 | return (resource_start_byte); | 178 | return (acpi_gbl_lg_resource_dispatch[(resource_type & |
179 | ACPI_RDESC_LARGE_MASK)]); | ||
180 | } else { | ||
181 | /* Small Resource Type -- bits 6:3 contain the name */ | ||
81 | 182 | ||
82 | default: | 183 | return (acpi_gbl_sm_resource_dispatch[((resource_type & |
83 | /* Invalid type */ | 184 | ACPI_RDESC_SMALL_MASK) |
84 | break; | 185 | >> 3)]); |
85 | } | 186 | } |
86 | |||
87 | return (0xFF); | ||
88 | } | 187 | } |
89 | 188 | ||
90 | /******************************************************************************* | 189 | /******************************************************************************* |
@@ -107,228 +206,70 @@ acpi_status | |||
107 | acpi_rs_byte_stream_to_list(u8 * byte_stream_buffer, | 206 | acpi_rs_byte_stream_to_list(u8 * byte_stream_buffer, |
108 | u32 byte_stream_buffer_length, u8 * output_buffer) | 207 | u32 byte_stream_buffer_length, u8 * output_buffer) |
109 | { | 208 | { |
209 | u8 *buffer = output_buffer; | ||
110 | acpi_status status; | 210 | acpi_status status; |
111 | acpi_size bytes_parsed = 0; | 211 | acpi_size bytes_parsed = 0; |
112 | u8 resource_type = 0; | ||
113 | acpi_size bytes_consumed = 0; | 212 | acpi_size bytes_consumed = 0; |
114 | u8 *buffer = output_buffer; | ||
115 | acpi_size structure_size = 0; | 213 | acpi_size structure_size = 0; |
116 | u8 end_tag_processed = FALSE; | ||
117 | struct acpi_resource *resource; | 214 | struct acpi_resource *resource; |
215 | ACPI_RESOURCE_HANDLER handler; | ||
118 | 216 | ||
119 | ACPI_FUNCTION_TRACE("rs_byte_stream_to_list"); | 217 | ACPI_FUNCTION_TRACE("rs_byte_stream_to_list"); |
120 | 218 | ||
121 | while (bytes_parsed < byte_stream_buffer_length && !end_tag_processed) { | 219 | /* Loop until end-of-buffer or an end_tag is found */ |
122 | /* The next byte in the stream is the resource type */ | 220 | |
123 | 221 | while (bytes_parsed < byte_stream_buffer_length) { | |
124 | resource_type = acpi_rs_get_resource_type(*byte_stream_buffer); | 222 | /* Get the handler associated with this Descriptor Type */ |
125 | 223 | ||
126 | switch (resource_type) { | 224 | handler = acpi_rs_get_resource_handler(*byte_stream_buffer); |
127 | case ACPI_RDESC_TYPE_MEMORY_24: | 225 | if (handler) { |
128 | /* | 226 | /* Convert a byte stream resource to local resource struct */ |
129 | * 24-Bit Memory Resource | 227 | |
130 | */ | 228 | status = handler(byte_stream_buffer, &bytes_consumed, |
131 | status = acpi_rs_memory24_resource(byte_stream_buffer, | 229 | &buffer, &structure_size); |
132 | &bytes_consumed, | 230 | } else { |
133 | &buffer, | 231 | /* Invalid resource type */ |
134 | &structure_size); | 232 | |
135 | break; | ||
136 | |||
137 | case ACPI_RDESC_TYPE_LARGE_VENDOR: | ||
138 | /* | ||
139 | * Vendor Defined Resource | ||
140 | */ | ||
141 | status = acpi_rs_vendor_resource(byte_stream_buffer, | ||
142 | &bytes_consumed, | ||
143 | &buffer, | ||
144 | &structure_size); | ||
145 | break; | ||
146 | |||
147 | case ACPI_RDESC_TYPE_MEMORY_32: | ||
148 | /* | ||
149 | * 32-Bit Memory Range Resource | ||
150 | */ | ||
151 | status = | ||
152 | acpi_rs_memory32_range_resource(byte_stream_buffer, | ||
153 | &bytes_consumed, | ||
154 | &buffer, | ||
155 | &structure_size); | ||
156 | break; | ||
157 | |||
158 | case ACPI_RDESC_TYPE_FIXED_MEMORY_32: | ||
159 | /* | ||
160 | * 32-Bit Fixed Memory Resource | ||
161 | */ | ||
162 | status = | ||
163 | acpi_rs_fixed_memory32_resource(byte_stream_buffer, | ||
164 | &bytes_consumed, | ||
165 | &buffer, | ||
166 | &structure_size); | ||
167 | break; | ||
168 | |||
169 | case ACPI_RDESC_TYPE_QWORD_ADDRESS_SPACE: | ||
170 | case ACPI_RDESC_TYPE_EXTENDED_ADDRESS_SPACE: | ||
171 | /* | ||
172 | * 64-Bit Address Resource | ||
173 | */ | ||
174 | status = acpi_rs_address64_resource(byte_stream_buffer, | ||
175 | &bytes_consumed, | ||
176 | &buffer, | ||
177 | &structure_size); | ||
178 | break; | ||
179 | |||
180 | case ACPI_RDESC_TYPE_DWORD_ADDRESS_SPACE: | ||
181 | /* | ||
182 | * 32-Bit Address Resource | ||
183 | */ | ||
184 | status = acpi_rs_address32_resource(byte_stream_buffer, | ||
185 | &bytes_consumed, | ||
186 | &buffer, | ||
187 | &structure_size); | ||
188 | break; | ||
189 | |||
190 | case ACPI_RDESC_TYPE_WORD_ADDRESS_SPACE: | ||
191 | /* | ||
192 | * 16-Bit Address Resource | ||
193 | */ | ||
194 | status = acpi_rs_address16_resource(byte_stream_buffer, | ||
195 | &bytes_consumed, | ||
196 | &buffer, | ||
197 | &structure_size); | ||
198 | break; | ||
199 | |||
200 | case ACPI_RDESC_TYPE_EXTENDED_XRUPT: | ||
201 | /* | ||
202 | * Extended IRQ | ||
203 | */ | ||
204 | status = | ||
205 | acpi_rs_extended_irq_resource(byte_stream_buffer, | ||
206 | &bytes_consumed, | ||
207 | &buffer, | ||
208 | &structure_size); | ||
209 | break; | ||
210 | |||
211 | case ACPI_RDESC_TYPE_IRQ_FORMAT: | ||
212 | /* | ||
213 | * IRQ Resource | ||
214 | */ | ||
215 | status = acpi_rs_irq_resource(byte_stream_buffer, | ||
216 | &bytes_consumed, &buffer, | ||
217 | &structure_size); | ||
218 | break; | ||
219 | |||
220 | case ACPI_RDESC_TYPE_DMA_FORMAT: | ||
221 | /* | ||
222 | * DMA Resource | ||
223 | */ | ||
224 | status = acpi_rs_dma_resource(byte_stream_buffer, | ||
225 | &bytes_consumed, &buffer, | ||
226 | &structure_size); | ||
227 | break; | ||
228 | |||
229 | case ACPI_RDESC_TYPE_START_DEPENDENT: | ||
230 | /* | ||
231 | * Start Dependent Functions Resource | ||
232 | */ | ||
233 | status = | ||
234 | acpi_rs_start_depend_fns_resource | ||
235 | (byte_stream_buffer, &bytes_consumed, &buffer, | ||
236 | &structure_size); | ||
237 | break; | ||
238 | |||
239 | case ACPI_RDESC_TYPE_END_DEPENDENT: | ||
240 | /* | ||
241 | * End Dependent Functions Resource | ||
242 | */ | ||
243 | status = | ||
244 | acpi_rs_end_depend_fns_resource(byte_stream_buffer, | ||
245 | &bytes_consumed, | ||
246 | &buffer, | ||
247 | &structure_size); | ||
248 | break; | ||
249 | |||
250 | case ACPI_RDESC_TYPE_IO_PORT: | ||
251 | /* | ||
252 | * IO Port Resource | ||
253 | */ | ||
254 | status = acpi_rs_io_resource(byte_stream_buffer, | ||
255 | &bytes_consumed, &buffer, | ||
256 | &structure_size); | ||
257 | break; | ||
258 | |||
259 | case ACPI_RDESC_TYPE_FIXED_IO_PORT: | ||
260 | /* | ||
261 | * Fixed IO Port Resource | ||
262 | */ | ||
263 | status = acpi_rs_fixed_io_resource(byte_stream_buffer, | ||
264 | &bytes_consumed, | ||
265 | &buffer, | ||
266 | &structure_size); | ||
267 | break; | ||
268 | |||
269 | case ACPI_RDESC_TYPE_SMALL_VENDOR: | ||
270 | /* | ||
271 | * Vendor Specific Resource | ||
272 | */ | ||
273 | status = acpi_rs_vendor_resource(byte_stream_buffer, | ||
274 | &bytes_consumed, | ||
275 | &buffer, | ||
276 | &structure_size); | ||
277 | break; | ||
278 | |||
279 | case ACPI_RDESC_TYPE_END_TAG: | ||
280 | /* | ||
281 | * End Tag | ||
282 | */ | ||
283 | end_tag_processed = TRUE; | ||
284 | status = acpi_rs_end_tag_resource(byte_stream_buffer, | ||
285 | &bytes_consumed, | ||
286 | &buffer, | ||
287 | &structure_size); | ||
288 | break; | ||
289 | |||
290 | default: | ||
291 | /* | ||
292 | * Invalid/Unknown resource type | ||
293 | */ | ||
294 | status = AE_AML_INVALID_RESOURCE_TYPE; | 233 | status = AE_AML_INVALID_RESOURCE_TYPE; |
295 | break; | ||
296 | } | 234 | } |
297 | 235 | ||
298 | if (ACPI_FAILURE(status)) { | 236 | if (ACPI_FAILURE(status)) { |
299 | return_ACPI_STATUS(status); | 237 | return_ACPI_STATUS(status); |
300 | } | 238 | } |
301 | 239 | ||
302 | /* Update the return value and counter */ | 240 | /* Set the aligned length of the new resource descriptor */ |
303 | 241 | ||
304 | bytes_parsed += bytes_consumed; | 242 | resource = ACPI_CAST_PTR(struct acpi_resource, buffer); |
243 | resource->length = | ||
244 | (u32) ACPI_ALIGN_RESOURCE_SIZE(resource->length); | ||
305 | 245 | ||
306 | /* Set the byte stream to point to the next resource */ | 246 | /* Normal exit on completion of an end_tag resource descriptor */ |
307 | 247 | ||
248 | if (acpi_rs_get_resource_type(*byte_stream_buffer) == | ||
249 | ACPI_RDESC_TYPE_END_TAG) { | ||
250 | return_ACPI_STATUS(AE_OK); | ||
251 | } | ||
252 | |||
253 | /* Update counter and point to the next input resource */ | ||
254 | |||
255 | bytes_parsed += bytes_consumed; | ||
308 | byte_stream_buffer += bytes_consumed; | 256 | byte_stream_buffer += bytes_consumed; |
309 | 257 | ||
310 | /* Set the Buffer to the next structure */ | 258 | /* Point to the next structure in the output buffer */ |
311 | 259 | ||
312 | resource = ACPI_CAST_PTR(struct acpi_resource, buffer); | ||
313 | resource->length = | ||
314 | (u32) ACPI_ALIGN_RESOURCE_SIZE(resource->length); | ||
315 | buffer += ACPI_ALIGN_RESOURCE_SIZE(structure_size); | 260 | buffer += ACPI_ALIGN_RESOURCE_SIZE(structure_size); |
316 | } | 261 | } |
317 | 262 | ||
318 | /* Check the reason for exiting the while loop */ | 263 | /* Completed buffer, but did not find an end_tag resource descriptor */ |
319 | 264 | ||
320 | if (!end_tag_processed) { | 265 | return_ACPI_STATUS(AE_AML_NO_RESOURCE_END_TAG); |
321 | return_ACPI_STATUS(AE_AML_NO_RESOURCE_END_TAG); | ||
322 | } | ||
323 | |||
324 | return_ACPI_STATUS(AE_OK); | ||
325 | } | 266 | } |
326 | 267 | ||
327 | /******************************************************************************* | 268 | /******************************************************************************* |
328 | * | 269 | * |
329 | * FUNCTION: acpi_rs_list_to_byte_stream | 270 | * FUNCTION: acpi_rs_list_to_byte_stream |
330 | * | 271 | * |
331 | * PARAMETERS: linked_list - Pointer to the resource linked list | 272 | * PARAMETERS: Resource - Pointer to the resource linked list |
332 | * byte_steam_size_needed - Calculated size of the byte stream | 273 | * byte_steam_size_needed - Calculated size of the byte stream |
333 | * needed from calling | 274 | * needed from calling |
334 | * acpi_rs_get_byte_stream_length() | 275 | * acpi_rs_get_byte_stream_length() |
@@ -346,180 +287,52 @@ acpi_rs_byte_stream_to_list(u8 * byte_stream_buffer, | |||
346 | ******************************************************************************/ | 287 | ******************************************************************************/ |
347 | 288 | ||
348 | acpi_status | 289 | acpi_status |
349 | acpi_rs_list_to_byte_stream(struct acpi_resource *linked_list, | 290 | acpi_rs_list_to_byte_stream(struct acpi_resource *resource, |
350 | acpi_size byte_stream_size_needed, | 291 | acpi_size byte_stream_size_needed, |
351 | u8 * output_buffer) | 292 | u8 * output_buffer) |
352 | { | 293 | { |
353 | acpi_status status; | ||
354 | u8 *buffer = output_buffer; | 294 | u8 *buffer = output_buffer; |
355 | acpi_size bytes_consumed = 0; | 295 | acpi_size bytes_consumed = 0; |
356 | u8 done = FALSE; | 296 | acpi_status status; |
357 | 297 | ||
358 | ACPI_FUNCTION_TRACE("rs_list_to_byte_stream"); | 298 | ACPI_FUNCTION_TRACE("rs_list_to_byte_stream"); |
359 | 299 | ||
360 | while (!done) { | 300 | /* Convert each resource descriptor in the list */ |
361 | switch (linked_list->id) { | ||
362 | case ACPI_RSTYPE_IRQ: | ||
363 | /* | ||
364 | * IRQ Resource | ||
365 | */ | ||
366 | status = | ||
367 | acpi_rs_irq_stream(linked_list, &buffer, | ||
368 | &bytes_consumed); | ||
369 | break; | ||
370 | |||
371 | case ACPI_RSTYPE_DMA: | ||
372 | /* | ||
373 | * DMA Resource | ||
374 | */ | ||
375 | status = | ||
376 | acpi_rs_dma_stream(linked_list, &buffer, | ||
377 | &bytes_consumed); | ||
378 | break; | ||
379 | |||
380 | case ACPI_RSTYPE_START_DPF: | ||
381 | /* | ||
382 | * Start Dependent Functions Resource | ||
383 | */ | ||
384 | status = acpi_rs_start_depend_fns_stream(linked_list, | ||
385 | &buffer, | ||
386 | &bytes_consumed); | ||
387 | break; | ||
388 | |||
389 | case ACPI_RSTYPE_END_DPF: | ||
390 | /* | ||
391 | * End Dependent Functions Resource | ||
392 | */ | ||
393 | status = acpi_rs_end_depend_fns_stream(linked_list, | ||
394 | &buffer, | ||
395 | &bytes_consumed); | ||
396 | break; | ||
397 | |||
398 | case ACPI_RSTYPE_IO: | ||
399 | /* | ||
400 | * IO Port Resource | ||
401 | */ | ||
402 | status = | ||
403 | acpi_rs_io_stream(linked_list, &buffer, | ||
404 | &bytes_consumed); | ||
405 | break; | ||
406 | |||
407 | case ACPI_RSTYPE_FIXED_IO: | ||
408 | /* | ||
409 | * Fixed IO Port Resource | ||
410 | */ | ||
411 | status = | ||
412 | acpi_rs_fixed_io_stream(linked_list, &buffer, | ||
413 | &bytes_consumed); | ||
414 | break; | ||
415 | |||
416 | case ACPI_RSTYPE_VENDOR: | ||
417 | /* | ||
418 | * Vendor Defined Resource | ||
419 | */ | ||
420 | status = | ||
421 | acpi_rs_vendor_stream(linked_list, &buffer, | ||
422 | &bytes_consumed); | ||
423 | break; | ||
424 | |||
425 | case ACPI_RSTYPE_END_TAG: | ||
426 | /* | ||
427 | * End Tag | ||
428 | */ | ||
429 | status = | ||
430 | acpi_rs_end_tag_stream(linked_list, &buffer, | ||
431 | &bytes_consumed); | ||
432 | 301 | ||
433 | /* An End Tag indicates the end of the Resource Template */ | 302 | while (1) { |
303 | /* Validate Type before dispatch */ | ||
434 | 304 | ||
435 | done = TRUE; | 305 | if (resource->type > ACPI_RSTYPE_MAX) { |
436 | break; | ||
437 | |||
438 | case ACPI_RSTYPE_MEM24: | ||
439 | /* | ||
440 | * 24-Bit Memory Resource | ||
441 | */ | ||
442 | status = | ||
443 | acpi_rs_memory24_stream(linked_list, &buffer, | ||
444 | &bytes_consumed); | ||
445 | break; | ||
446 | |||
447 | case ACPI_RSTYPE_MEM32: | ||
448 | /* | ||
449 | * 32-Bit Memory Range Resource | ||
450 | */ | ||
451 | status = | ||
452 | acpi_rs_memory32_range_stream(linked_list, &buffer, | ||
453 | &bytes_consumed); | ||
454 | break; | ||
455 | |||
456 | case ACPI_RSTYPE_FIXED_MEM32: | ||
457 | /* | ||
458 | * 32-Bit Fixed Memory Resource | ||
459 | */ | ||
460 | status = | ||
461 | acpi_rs_fixed_memory32_stream(linked_list, &buffer, | ||
462 | &bytes_consumed); | ||
463 | break; | ||
464 | |||
465 | case ACPI_RSTYPE_ADDRESS16: | ||
466 | /* | ||
467 | * 16-Bit Address Descriptor Resource | ||
468 | */ | ||
469 | status = acpi_rs_address16_stream(linked_list, &buffer, | ||
470 | &bytes_consumed); | ||
471 | break; | ||
472 | |||
473 | case ACPI_RSTYPE_ADDRESS32: | ||
474 | /* | ||
475 | * 32-Bit Address Descriptor Resource | ||
476 | */ | ||
477 | status = acpi_rs_address32_stream(linked_list, &buffer, | ||
478 | &bytes_consumed); | ||
479 | break; | ||
480 | |||
481 | case ACPI_RSTYPE_ADDRESS64: | ||
482 | /* | ||
483 | * 64-Bit Address Descriptor Resource | ||
484 | */ | ||
485 | status = acpi_rs_address64_stream(linked_list, &buffer, | ||
486 | &bytes_consumed); | ||
487 | break; | ||
488 | |||
489 | case ACPI_RSTYPE_EXT_IRQ: | ||
490 | /* | ||
491 | * Extended IRQ Resource | ||
492 | */ | ||
493 | status = | ||
494 | acpi_rs_extended_irq_stream(linked_list, &buffer, | ||
495 | &bytes_consumed); | ||
496 | break; | ||
497 | |||
498 | default: | ||
499 | /* | ||
500 | * If we get here, everything is out of sync, | ||
501 | * so exit with an error | ||
502 | */ | ||
503 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, | 306 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, |
504 | "Invalid descriptor type (%X) in resource list\n", | 307 | "Invalid descriptor type (%X) in resource list\n", |
505 | linked_list->id)); | 308 | resource->type)); |
506 | status = AE_BAD_DATA; | 309 | return_ACPI_STATUS(AE_BAD_DATA); |
507 | break; | ||
508 | } | 310 | } |
509 | 311 | ||
312 | /* Perform the conversion, per resource type */ | ||
313 | |||
314 | status = acpi_gbl_stream_dispatch[resource->type] (resource, | ||
315 | &buffer, | ||
316 | &bytes_consumed); | ||
510 | if (ACPI_FAILURE(status)) { | 317 | if (ACPI_FAILURE(status)) { |
511 | return_ACPI_STATUS(status); | 318 | return_ACPI_STATUS(status); |
512 | } | 319 | } |
513 | 320 | ||
514 | /* Set the Buffer to point to the open byte */ | 321 | /* Check for end-of-list */ |
322 | |||
323 | if (resource->type == ACPI_RSTYPE_END_TAG) { | ||
324 | /* An End Tag indicates the end of the Resource Template */ | ||
325 | |||
326 | return_ACPI_STATUS(AE_OK); | ||
327 | } | ||
328 | |||
329 | /* Set the Buffer to point to the next (output) resource descriptor */ | ||
515 | 330 | ||
516 | buffer += bytes_consumed; | 331 | buffer += bytes_consumed; |
517 | 332 | ||
518 | /* Point to the next object */ | 333 | /* Point to the next input resource object */ |
519 | 334 | ||
520 | linked_list = ACPI_PTR_ADD(struct acpi_resource, | 335 | resource = ACPI_PTR_ADD(struct acpi_resource, |
521 | linked_list, linked_list->length); | 336 | resource, resource->length); |
522 | } | 337 | } |
523 | |||
524 | return_ACPI_STATUS(AE_OK); | ||
525 | } | 338 | } |
diff --git a/drivers/acpi/resources/rsmemory.c b/drivers/acpi/resources/rsmemory.c index daba1a1ed46d..418f1afb10a3 100644 --- a/drivers/acpi/resources/rsmemory.c +++ b/drivers/acpi/resources/rsmemory.c | |||
@@ -84,11 +84,11 @@ acpi_rs_memory24_resource(u8 * byte_stream_buffer, | |||
84 | /* Point past the Descriptor to get the number of bytes consumed */ | 84 | /* Point past the Descriptor to get the number of bytes consumed */ |
85 | 85 | ||
86 | buffer += 1; | 86 | buffer += 1; |
87 | |||
88 | ACPI_MOVE_16_TO_16(&temp16, buffer); | 87 | ACPI_MOVE_16_TO_16(&temp16, buffer); |
88 | |||
89 | buffer += 2; | 89 | buffer += 2; |
90 | *bytes_consumed = (acpi_size) temp16 + 3; | 90 | *bytes_consumed = (acpi_size) temp16 + 3; |
91 | output_struct->id = ACPI_RSTYPE_MEM24; | 91 | output_struct->type = ACPI_RSTYPE_MEM24; |
92 | 92 | ||
93 | /* Check Byte 3 the Read/Write bit */ | 93 | /* Check Byte 3 the Read/Write bit */ |
94 | 94 | ||
@@ -133,7 +133,7 @@ acpi_rs_memory24_resource(u8 * byte_stream_buffer, | |||
133 | * | 133 | * |
134 | * FUNCTION: acpi_rs_memory24_stream | 134 | * FUNCTION: acpi_rs_memory24_stream |
135 | * | 135 | * |
136 | * PARAMETERS: linked_list - Pointer to the resource linked list | 136 | * PARAMETERS: Resource - Pointer to the resource linked list |
137 | * output_buffer - Pointer to the user's return buffer | 137 | * output_buffer - Pointer to the user's return buffer |
138 | * bytes_consumed - Pointer to where the number of bytes | 138 | * bytes_consumed - Pointer to where the number of bytes |
139 | * used in the output_buffer is returned | 139 | * used in the output_buffer is returned |
@@ -146,7 +146,7 @@ acpi_rs_memory24_resource(u8 * byte_stream_buffer, | |||
146 | ******************************************************************************/ | 146 | ******************************************************************************/ |
147 | 147 | ||
148 | acpi_status | 148 | acpi_status |
149 | acpi_rs_memory24_stream(struct acpi_resource *linked_list, | 149 | acpi_rs_memory24_stream(struct acpi_resource *resource, |
150 | u8 ** output_buffer, acpi_size * bytes_consumed) | 150 | u8 ** output_buffer, acpi_size * bytes_consumed) |
151 | { | 151 | { |
152 | u8 *buffer = *output_buffer; | 152 | u8 *buffer = *output_buffer; |
@@ -155,9 +155,9 @@ acpi_rs_memory24_stream(struct acpi_resource *linked_list, | |||
155 | 155 | ||
156 | ACPI_FUNCTION_TRACE("rs_memory24_stream"); | 156 | ACPI_FUNCTION_TRACE("rs_memory24_stream"); |
157 | 157 | ||
158 | /* The descriptor field is static */ | 158 | /* The Descriptor Type field is static */ |
159 | 159 | ||
160 | *buffer = 0x81; | 160 | *buffer = ACPI_RDESC_TYPE_MEMORY_24; |
161 | buffer += 1; | 161 | buffer += 1; |
162 | 162 | ||
163 | /* The length field is static */ | 163 | /* The length field is static */ |
@@ -168,30 +168,28 @@ acpi_rs_memory24_stream(struct acpi_resource *linked_list, | |||
168 | 168 | ||
169 | /* Set the Information Byte */ | 169 | /* Set the Information Byte */ |
170 | 170 | ||
171 | temp8 = (u8) (linked_list->data.memory24.read_write_attribute & 0x01); | 171 | temp8 = (u8) (resource->data.memory24.read_write_attribute & 0x01); |
172 | *buffer = temp8; | 172 | *buffer = temp8; |
173 | buffer += 1; | 173 | buffer += 1; |
174 | 174 | ||
175 | /* Set the Range minimum base address */ | 175 | /* Set the Range minimum base address */ |
176 | 176 | ||
177 | ACPI_MOVE_32_TO_16(buffer, | 177 | ACPI_MOVE_32_TO_16(buffer, &resource->data.memory24.min_base_address); |
178 | &linked_list->data.memory24.min_base_address); | ||
179 | buffer += 2; | 178 | buffer += 2; |
180 | 179 | ||
181 | /* Set the Range maximum base address */ | 180 | /* Set the Range maximum base address */ |
182 | 181 | ||
183 | ACPI_MOVE_32_TO_16(buffer, | 182 | ACPI_MOVE_32_TO_16(buffer, &resource->data.memory24.max_base_address); |
184 | &linked_list->data.memory24.max_base_address); | ||
185 | buffer += 2; | 183 | buffer += 2; |
186 | 184 | ||
187 | /* Set the base alignment */ | 185 | /* Set the base alignment */ |
188 | 186 | ||
189 | ACPI_MOVE_32_TO_16(buffer, &linked_list->data.memory24.alignment); | 187 | ACPI_MOVE_32_TO_16(buffer, &resource->data.memory24.alignment); |
190 | buffer += 2; | 188 | buffer += 2; |
191 | 189 | ||
192 | /* Set the range length */ | 190 | /* Set the range length */ |
193 | 191 | ||
194 | ACPI_MOVE_32_TO_16(buffer, &linked_list->data.memory24.range_length); | 192 | ACPI_MOVE_32_TO_16(buffer, &resource->data.memory24.range_length); |
195 | buffer += 2; | 193 | buffer += 2; |
196 | 194 | ||
197 | /* Return the number of bytes consumed in this operation */ | 195 | /* Return the number of bytes consumed in this operation */ |
@@ -238,12 +236,11 @@ acpi_rs_memory32_range_resource(u8 * byte_stream_buffer, | |||
238 | /* Point past the Descriptor to get the number of bytes consumed */ | 236 | /* Point past the Descriptor to get the number of bytes consumed */ |
239 | 237 | ||
240 | buffer += 1; | 238 | buffer += 1; |
241 | |||
242 | ACPI_MOVE_16_TO_16(&temp16, buffer); | 239 | ACPI_MOVE_16_TO_16(&temp16, buffer); |
240 | |||
243 | buffer += 2; | 241 | buffer += 2; |
244 | *bytes_consumed = (acpi_size) temp16 + 3; | 242 | *bytes_consumed = (acpi_size) temp16 + 3; |
245 | 243 | output_struct->type = ACPI_RSTYPE_MEM32; | |
246 | output_struct->id = ACPI_RSTYPE_MEM32; | ||
247 | 244 | ||
248 | /* | 245 | /* |
249 | * Point to the place in the output buffer where the data portion will | 246 | * Point to the place in the output buffer where the data portion will |
@@ -335,8 +332,7 @@ acpi_rs_fixed_memory32_resource(u8 * byte_stream_buffer, | |||
335 | 332 | ||
336 | buffer += 2; | 333 | buffer += 2; |
337 | *bytes_consumed = (acpi_size) temp16 + 3; | 334 | *bytes_consumed = (acpi_size) temp16 + 3; |
338 | 335 | output_struct->type = ACPI_RSTYPE_FIXED_MEM32; | |
339 | output_struct->id = ACPI_RSTYPE_FIXED_MEM32; | ||
340 | 336 | ||
341 | /* Check Byte 3 the Read/Write bit */ | 337 | /* Check Byte 3 the Read/Write bit */ |
342 | 338 | ||
@@ -369,7 +365,7 @@ acpi_rs_fixed_memory32_resource(u8 * byte_stream_buffer, | |||
369 | * | 365 | * |
370 | * FUNCTION: acpi_rs_memory32_range_stream | 366 | * FUNCTION: acpi_rs_memory32_range_stream |
371 | * | 367 | * |
372 | * PARAMETERS: linked_list - Pointer to the resource linked list | 368 | * PARAMETERS: Resource - Pointer to the resource linked list |
373 | * output_buffer - Pointer to the user's return buffer | 369 | * output_buffer - Pointer to the user's return buffer |
374 | * bytes_consumed - Pointer to where the number of bytes | 370 | * bytes_consumed - Pointer to where the number of bytes |
375 | * used in the output_buffer is returned | 371 | * used in the output_buffer is returned |
@@ -382,7 +378,7 @@ acpi_rs_fixed_memory32_resource(u8 * byte_stream_buffer, | |||
382 | ******************************************************************************/ | 378 | ******************************************************************************/ |
383 | 379 | ||
384 | acpi_status | 380 | acpi_status |
385 | acpi_rs_memory32_range_stream(struct acpi_resource *linked_list, | 381 | acpi_rs_memory32_range_stream(struct acpi_resource *resource, |
386 | u8 ** output_buffer, acpi_size * bytes_consumed) | 382 | u8 ** output_buffer, acpi_size * bytes_consumed) |
387 | { | 383 | { |
388 | u8 *buffer = *output_buffer; | 384 | u8 *buffer = *output_buffer; |
@@ -391,9 +387,9 @@ acpi_rs_memory32_range_stream(struct acpi_resource *linked_list, | |||
391 | 387 | ||
392 | ACPI_FUNCTION_TRACE("rs_memory32_range_stream"); | 388 | ACPI_FUNCTION_TRACE("rs_memory32_range_stream"); |
393 | 389 | ||
394 | /* The descriptor field is static */ | 390 | /* The Descriptor Type field is static */ |
395 | 391 | ||
396 | *buffer = 0x85; | 392 | *buffer = ACPI_RDESC_TYPE_MEMORY_32; |
397 | buffer += 1; | 393 | buffer += 1; |
398 | 394 | ||
399 | /* The length field is static */ | 395 | /* The length field is static */ |
@@ -405,30 +401,28 @@ acpi_rs_memory32_range_stream(struct acpi_resource *linked_list, | |||
405 | 401 | ||
406 | /* Set the Information Byte */ | 402 | /* Set the Information Byte */ |
407 | 403 | ||
408 | temp8 = (u8) (linked_list->data.memory32.read_write_attribute & 0x01); | 404 | temp8 = (u8) (resource->data.memory32.read_write_attribute & 0x01); |
409 | *buffer = temp8; | 405 | *buffer = temp8; |
410 | buffer += 1; | 406 | buffer += 1; |
411 | 407 | ||
412 | /* Set the Range minimum base address */ | 408 | /* Set the Range minimum base address */ |
413 | 409 | ||
414 | ACPI_MOVE_32_TO_32(buffer, | 410 | ACPI_MOVE_32_TO_32(buffer, &resource->data.memory32.min_base_address); |
415 | &linked_list->data.memory32.min_base_address); | ||
416 | buffer += 4; | 411 | buffer += 4; |
417 | 412 | ||
418 | /* Set the Range maximum base address */ | 413 | /* Set the Range maximum base address */ |
419 | 414 | ||
420 | ACPI_MOVE_32_TO_32(buffer, | 415 | ACPI_MOVE_32_TO_32(buffer, &resource->data.memory32.max_base_address); |
421 | &linked_list->data.memory32.max_base_address); | ||
422 | buffer += 4; | 416 | buffer += 4; |
423 | 417 | ||
424 | /* Set the base alignment */ | 418 | /* Set the base alignment */ |
425 | 419 | ||
426 | ACPI_MOVE_32_TO_32(buffer, &linked_list->data.memory32.alignment); | 420 | ACPI_MOVE_32_TO_32(buffer, &resource->data.memory32.alignment); |
427 | buffer += 4; | 421 | buffer += 4; |
428 | 422 | ||
429 | /* Set the range length */ | 423 | /* Set the range length */ |
430 | 424 | ||
431 | ACPI_MOVE_32_TO_32(buffer, &linked_list->data.memory32.range_length); | 425 | ACPI_MOVE_32_TO_32(buffer, &resource->data.memory32.range_length); |
432 | buffer += 4; | 426 | buffer += 4; |
433 | 427 | ||
434 | /* Return the number of bytes consumed in this operation */ | 428 | /* Return the number of bytes consumed in this operation */ |
@@ -441,7 +435,7 @@ acpi_rs_memory32_range_stream(struct acpi_resource *linked_list, | |||
441 | * | 435 | * |
442 | * FUNCTION: acpi_rs_fixed_memory32_stream | 436 | * FUNCTION: acpi_rs_fixed_memory32_stream |
443 | * | 437 | * |
444 | * PARAMETERS: linked_list - Pointer to the resource linked list | 438 | * PARAMETERS: Resource - Pointer to the resource linked list |
445 | * output_buffer - Pointer to the user's return buffer | 439 | * output_buffer - Pointer to the user's return buffer |
446 | * bytes_consumed - Pointer to where the number of bytes | 440 | * bytes_consumed - Pointer to where the number of bytes |
447 | * used in the output_buffer is returned | 441 | * used in the output_buffer is returned |
@@ -454,7 +448,7 @@ acpi_rs_memory32_range_stream(struct acpi_resource *linked_list, | |||
454 | ******************************************************************************/ | 448 | ******************************************************************************/ |
455 | 449 | ||
456 | acpi_status | 450 | acpi_status |
457 | acpi_rs_fixed_memory32_stream(struct acpi_resource *linked_list, | 451 | acpi_rs_fixed_memory32_stream(struct acpi_resource *resource, |
458 | u8 ** output_buffer, acpi_size * bytes_consumed) | 452 | u8 ** output_buffer, acpi_size * bytes_consumed) |
459 | { | 453 | { |
460 | u8 *buffer = *output_buffer; | 454 | u8 *buffer = *output_buffer; |
@@ -463,9 +457,9 @@ acpi_rs_fixed_memory32_stream(struct acpi_resource *linked_list, | |||
463 | 457 | ||
464 | ACPI_FUNCTION_TRACE("rs_fixed_memory32_stream"); | 458 | ACPI_FUNCTION_TRACE("rs_fixed_memory32_stream"); |
465 | 459 | ||
466 | /* The descriptor field is static */ | 460 | /* The Descriptor Type field is static */ |
467 | 461 | ||
468 | *buffer = 0x86; | 462 | *buffer = ACPI_RDESC_TYPE_FIXED_MEMORY_32; |
469 | buffer += 1; | 463 | buffer += 1; |
470 | 464 | ||
471 | /* The length field is static */ | 465 | /* The length field is static */ |
@@ -478,21 +472,19 @@ acpi_rs_fixed_memory32_stream(struct acpi_resource *linked_list, | |||
478 | /* Set the Information Byte */ | 472 | /* Set the Information Byte */ |
479 | 473 | ||
480 | temp8 = | 474 | temp8 = |
481 | (u8) (linked_list->data.fixed_memory32.read_write_attribute & 0x01); | 475 | (u8) (resource->data.fixed_memory32.read_write_attribute & 0x01); |
482 | *buffer = temp8; | 476 | *buffer = temp8; |
483 | buffer += 1; | 477 | buffer += 1; |
484 | 478 | ||
485 | /* Set the Range base address */ | 479 | /* Set the Range base address */ |
486 | 480 | ||
487 | ACPI_MOVE_32_TO_32(buffer, | 481 | ACPI_MOVE_32_TO_32(buffer, |
488 | &linked_list->data.fixed_memory32. | 482 | &resource->data.fixed_memory32.range_base_address); |
489 | range_base_address); | ||
490 | buffer += 4; | 483 | buffer += 4; |
491 | 484 | ||
492 | /* Set the range length */ | 485 | /* Set the range length */ |
493 | 486 | ||
494 | ACPI_MOVE_32_TO_32(buffer, | 487 | ACPI_MOVE_32_TO_32(buffer, &resource->data.fixed_memory32.range_length); |
495 | &linked_list->data.fixed_memory32.range_length); | ||
496 | buffer += 4; | 488 | buffer += 4; |
497 | 489 | ||
498 | /* Return the number of bytes consumed in this operation */ | 490 | /* Return the number of bytes consumed in this operation */ |
diff --git a/drivers/acpi/resources/rsmisc.c b/drivers/acpi/resources/rsmisc.c index 7a8a34e757f5..fa7f5a85b61d 100644 --- a/drivers/acpi/resources/rsmisc.c +++ b/drivers/acpi/resources/rsmisc.c | |||
@@ -49,6 +49,169 @@ ACPI_MODULE_NAME("rsmisc") | |||
49 | 49 | ||
50 | /******************************************************************************* | 50 | /******************************************************************************* |
51 | * | 51 | * |
52 | * FUNCTION: acpi_rs_generic_register_resource | ||
53 | * | ||
54 | * PARAMETERS: byte_stream_buffer - Pointer to the resource input byte | ||
55 | * stream | ||
56 | * bytes_consumed - Pointer to where the number of bytes | ||
57 | * consumed the byte_stream_buffer is | ||
58 | * returned | ||
59 | * output_buffer - Pointer to the return data buffer | ||
60 | * structure_size - Pointer to where the number of bytes | ||
61 | * in the return data struct is returned | ||
62 | * | ||
63 | * RETURN: Status | ||
64 | * | ||
65 | * DESCRIPTION: Take the resource byte stream and fill out the appropriate | ||
66 | * structure pointed to by the output_buffer. Return the | ||
67 | * number of bytes consumed from the byte stream. | ||
68 | * | ||
69 | ******************************************************************************/ | ||
70 | acpi_status | ||
71 | acpi_rs_generic_register_resource(u8 * byte_stream_buffer, | ||
72 | acpi_size * bytes_consumed, | ||
73 | u8 ** output_buffer, | ||
74 | acpi_size * structure_size) | ||
75 | { | ||
76 | u8 *buffer = byte_stream_buffer; | ||
77 | struct acpi_resource *output_struct = (void *)*output_buffer; | ||
78 | u16 temp16; | ||
79 | u8 temp8; | ||
80 | acpi_size struct_size = | ||
81 | ACPI_SIZEOF_RESOURCE(struct acpi_resource_generic_reg); | ||
82 | |||
83 | ACPI_FUNCTION_TRACE("rs_generic_register_resource"); | ||
84 | |||
85 | /* Byte 0 is the Descriptor Type */ | ||
86 | |||
87 | buffer += 1; | ||
88 | |||
89 | /* Get the Descriptor Length field (Bytes 1-2) */ | ||
90 | |||
91 | ACPI_MOVE_16_TO_16(&temp16, buffer); | ||
92 | buffer += 2; | ||
93 | |||
94 | /* Validate the descriptor length */ | ||
95 | |||
96 | if (temp16 != 12) { | ||
97 | return_ACPI_STATUS(AE_AML_BAD_RESOURCE_LENGTH); | ||
98 | } | ||
99 | |||
100 | /* The number of bytes consumed is fixed (12 + 3) */ | ||
101 | |||
102 | *bytes_consumed = 15; | ||
103 | |||
104 | /* Fill out the structure */ | ||
105 | |||
106 | output_struct->type = ACPI_RSTYPE_GENERIC_REG; | ||
107 | |||
108 | /* Get space_id (Byte 3) */ | ||
109 | |||
110 | temp8 = *buffer; | ||
111 | output_struct->data.generic_reg.space_id = temp8; | ||
112 | buffer += 1; | ||
113 | |||
114 | /* Get register_bit_width (Byte 4) */ | ||
115 | |||
116 | temp8 = *buffer; | ||
117 | output_struct->data.generic_reg.bit_width = temp8; | ||
118 | buffer += 1; | ||
119 | |||
120 | /* Get register_bit_offset (Byte 5) */ | ||
121 | |||
122 | temp8 = *buffer; | ||
123 | output_struct->data.generic_reg.bit_offset = temp8; | ||
124 | buffer += 1; | ||
125 | |||
126 | /* Get address_size (Byte 6) */ | ||
127 | |||
128 | temp8 = *buffer; | ||
129 | output_struct->data.generic_reg.address_size = temp8; | ||
130 | buffer += 1; | ||
131 | |||
132 | /* Get register_address (Bytes 7-14) */ | ||
133 | |||
134 | ACPI_MOVE_64_TO_64(&output_struct->data.generic_reg.address, buffer); | ||
135 | |||
136 | /* Set the Length parameter */ | ||
137 | |||
138 | output_struct->length = (u32) struct_size; | ||
139 | |||
140 | /* Return the final size of the structure */ | ||
141 | |||
142 | *structure_size = struct_size; | ||
143 | return_ACPI_STATUS(AE_OK); | ||
144 | } | ||
145 | |||
146 | /******************************************************************************* | ||
147 | * | ||
148 | * FUNCTION: acpi_rs_generic_register_stream | ||
149 | * | ||
150 | * PARAMETERS: Resource - Pointer to the resource linked list | ||
151 | * output_buffer - Pointer to the user's return buffer | ||
152 | * bytes_consumed - Pointer to where the number of bytes | ||
153 | * used in the output_buffer is returned | ||
154 | * | ||
155 | * RETURN: Status | ||
156 | * | ||
157 | * DESCRIPTION: Take the linked list resource structure and fills in the | ||
158 | * the appropriate bytes in a byte stream | ||
159 | * | ||
160 | ******************************************************************************/ | ||
161 | |||
162 | acpi_status | ||
163 | acpi_rs_generic_register_stream(struct acpi_resource *resource, | ||
164 | u8 ** output_buffer, acpi_size * bytes_consumed) | ||
165 | { | ||
166 | u8 *buffer = *output_buffer; | ||
167 | u16 temp16; | ||
168 | |||
169 | ACPI_FUNCTION_TRACE("rs_generic_register_stream"); | ||
170 | |||
171 | /* Set the Descriptor Type (Byte 0) */ | ||
172 | |||
173 | *buffer = ACPI_RDESC_TYPE_GENERIC_REGISTER; | ||
174 | buffer += 1; | ||
175 | |||
176 | /* Set the Descriptor Length (Bytes 1-2) */ | ||
177 | |||
178 | temp16 = 12; | ||
179 | ACPI_MOVE_16_TO_16(buffer, &temp16); | ||
180 | buffer += 2; | ||
181 | |||
182 | /* Set space_id (Byte 3) */ | ||
183 | |||
184 | *buffer = (u8) resource->data.generic_reg.space_id; | ||
185 | buffer += 1; | ||
186 | |||
187 | /* Set register_bit_width (Byte 4) */ | ||
188 | |||
189 | *buffer = (u8) resource->data.generic_reg.bit_width; | ||
190 | buffer += 1; | ||
191 | |||
192 | /* Set register_bit_offset (Byte 5) */ | ||
193 | |||
194 | *buffer = (u8) resource->data.generic_reg.bit_offset; | ||
195 | buffer += 1; | ||
196 | |||
197 | /* Set address_size (Byte 6) */ | ||
198 | |||
199 | *buffer = (u8) resource->data.generic_reg.address_size; | ||
200 | buffer += 1; | ||
201 | |||
202 | /* Set register_address (Bytes 7-14) */ | ||
203 | |||
204 | ACPI_MOVE_64_TO_64(buffer, &resource->data.generic_reg.address); | ||
205 | buffer += 8; | ||
206 | |||
207 | /* Return the number of bytes consumed in this operation */ | ||
208 | |||
209 | *bytes_consumed = ACPI_PTR_DIFF(buffer, *output_buffer); | ||
210 | return_ACPI_STATUS(AE_OK); | ||
211 | } | ||
212 | |||
213 | /******************************************************************************* | ||
214 | * | ||
52 | * FUNCTION: acpi_rs_end_tag_resource | 215 | * FUNCTION: acpi_rs_end_tag_resource |
53 | * | 216 | * |
54 | * PARAMETERS: byte_stream_buffer - Pointer to the resource input byte | 217 | * PARAMETERS: byte_stream_buffer - Pointer to the resource input byte |
@@ -67,6 +230,7 @@ ACPI_MODULE_NAME("rsmisc") | |||
67 | * number of bytes consumed from the byte stream. | 230 | * number of bytes consumed from the byte stream. |
68 | * | 231 | * |
69 | ******************************************************************************/ | 232 | ******************************************************************************/ |
233 | |||
70 | acpi_status | 234 | acpi_status |
71 | acpi_rs_end_tag_resource(u8 * byte_stream_buffer, | 235 | acpi_rs_end_tag_resource(u8 * byte_stream_buffer, |
72 | acpi_size * bytes_consumed, | 236 | acpi_size * bytes_consumed, |
@@ -81,9 +245,9 @@ acpi_rs_end_tag_resource(u8 * byte_stream_buffer, | |||
81 | 245 | ||
82 | *bytes_consumed = 2; | 246 | *bytes_consumed = 2; |
83 | 247 | ||
84 | /* Fill out the structure */ | 248 | /* Fill out the structure */ |
85 | 249 | ||
86 | output_struct->id = ACPI_RSTYPE_END_TAG; | 250 | output_struct->type = ACPI_RSTYPE_END_TAG; |
87 | 251 | ||
88 | /* Set the Length parameter */ | 252 | /* Set the Length parameter */ |
89 | 253 | ||
@@ -99,7 +263,7 @@ acpi_rs_end_tag_resource(u8 * byte_stream_buffer, | |||
99 | * | 263 | * |
100 | * FUNCTION: acpi_rs_end_tag_stream | 264 | * FUNCTION: acpi_rs_end_tag_stream |
101 | * | 265 | * |
102 | * PARAMETERS: linked_list - Pointer to the resource linked list | 266 | * PARAMETERS: Resource - Pointer to the resource linked list |
103 | * output_buffer - Pointer to the user's return buffer | 267 | * output_buffer - Pointer to the user's return buffer |
104 | * bytes_consumed - Pointer to where the number of bytes | 268 | * bytes_consumed - Pointer to where the number of bytes |
105 | * used in the output_buffer is returned | 269 | * used in the output_buffer is returned |
@@ -112,7 +276,7 @@ acpi_rs_end_tag_resource(u8 * byte_stream_buffer, | |||
112 | ******************************************************************************/ | 276 | ******************************************************************************/ |
113 | 277 | ||
114 | acpi_status | 278 | acpi_status |
115 | acpi_rs_end_tag_stream(struct acpi_resource *linked_list, | 279 | acpi_rs_end_tag_stream(struct acpi_resource *resource, |
116 | u8 ** output_buffer, acpi_size * bytes_consumed) | 280 | u8 ** output_buffer, acpi_size * bytes_consumed) |
117 | { | 281 | { |
118 | u8 *buffer = *output_buffer; | 282 | u8 *buffer = *output_buffer; |
@@ -120,9 +284,9 @@ acpi_rs_end_tag_stream(struct acpi_resource *linked_list, | |||
120 | 284 | ||
121 | ACPI_FUNCTION_TRACE("rs_end_tag_stream"); | 285 | ACPI_FUNCTION_TRACE("rs_end_tag_stream"); |
122 | 286 | ||
123 | /* The descriptor field is static */ | 287 | /* The Descriptor Type field is static */ |
124 | 288 | ||
125 | *buffer = 0x79; | 289 | *buffer = ACPI_RDESC_TYPE_END_TAG | 0x01; |
126 | buffer += 1; | 290 | buffer += 1; |
127 | 291 | ||
128 | /* | 292 | /* |
@@ -180,7 +344,7 @@ acpi_rs_vendor_resource(u8 * byte_stream_buffer, | |||
180 | 344 | ||
181 | temp8 = *buffer; | 345 | temp8 = *buffer; |
182 | 346 | ||
183 | if (temp8 & 0x80) { | 347 | if (temp8 & ACPI_RDESC_TYPE_LARGE) { |
184 | /* Large Item, point to the length field */ | 348 | /* Large Item, point to the length field */ |
185 | 349 | ||
186 | buffer += 1; | 350 | buffer += 1; |
@@ -210,7 +374,7 @@ acpi_rs_vendor_resource(u8 * byte_stream_buffer, | |||
210 | buffer += 1; | 374 | buffer += 1; |
211 | } | 375 | } |
212 | 376 | ||
213 | output_struct->id = ACPI_RSTYPE_VENDOR; | 377 | output_struct->type = ACPI_RSTYPE_VENDOR; |
214 | output_struct->data.vendor_specific.length = temp16; | 378 | output_struct->data.vendor_specific.length = temp16; |
215 | 379 | ||
216 | for (index = 0; index < temp16; index++) { | 380 | for (index = 0; index < temp16; index++) { |
@@ -239,7 +403,7 @@ acpi_rs_vendor_resource(u8 * byte_stream_buffer, | |||
239 | * | 403 | * |
240 | * FUNCTION: acpi_rs_vendor_stream | 404 | * FUNCTION: acpi_rs_vendor_stream |
241 | * | 405 | * |
242 | * PARAMETERS: linked_list - Pointer to the resource linked list | 406 | * PARAMETERS: Resource - Pointer to the resource linked list |
243 | * output_buffer - Pointer to the user's return buffer | 407 | * output_buffer - Pointer to the user's return buffer |
244 | * bytes_consumed - Pointer to where the number of bytes | 408 | * bytes_consumed - Pointer to where the number of bytes |
245 | * used in the output_buffer is returned | 409 | * used in the output_buffer is returned |
@@ -252,7 +416,7 @@ acpi_rs_vendor_resource(u8 * byte_stream_buffer, | |||
252 | ******************************************************************************/ | 416 | ******************************************************************************/ |
253 | 417 | ||
254 | acpi_status | 418 | acpi_status |
255 | acpi_rs_vendor_stream(struct acpi_resource *linked_list, | 419 | acpi_rs_vendor_stream(struct acpi_resource *resource, |
256 | u8 ** output_buffer, acpi_size * bytes_consumed) | 420 | u8 ** output_buffer, acpi_size * bytes_consumed) |
257 | { | 421 | { |
258 | u8 *buffer = *output_buffer; | 422 | u8 *buffer = *output_buffer; |
@@ -264,21 +428,21 @@ acpi_rs_vendor_stream(struct acpi_resource *linked_list, | |||
264 | 428 | ||
265 | /* Dereference the length to find if this is a large or small item. */ | 429 | /* Dereference the length to find if this is a large or small item. */ |
266 | 430 | ||
267 | if (linked_list->data.vendor_specific.length > 7) { | 431 | if (resource->data.vendor_specific.length > 7) { |
268 | /* Large Item, Set the descriptor field and length bytes */ | 432 | /* Large Item, Set the descriptor field and length bytes */ |
269 | 433 | ||
270 | *buffer = 0x84; | 434 | *buffer = ACPI_RDESC_TYPE_LARGE_VENDOR; |
271 | buffer += 1; | 435 | buffer += 1; |
272 | 436 | ||
273 | temp16 = (u16) linked_list->data.vendor_specific.length; | 437 | temp16 = (u16) resource->data.vendor_specific.length; |
274 | 438 | ||
275 | ACPI_MOVE_16_TO_16(buffer, &temp16); | 439 | ACPI_MOVE_16_TO_16(buffer, &temp16); |
276 | buffer += 2; | 440 | buffer += 2; |
277 | } else { | 441 | } else { |
278 | /* Small Item, Set the descriptor field */ | 442 | /* Small Item, Set the descriptor field */ |
279 | 443 | ||
280 | temp8 = 0x70; | 444 | temp8 = ACPI_RDESC_TYPE_SMALL_VENDOR; |
281 | temp8 |= (u8) linked_list->data.vendor_specific.length; | 445 | temp8 |= (u8) resource->data.vendor_specific.length; |
282 | 446 | ||
283 | *buffer = temp8; | 447 | *buffer = temp8; |
284 | buffer += 1; | 448 | buffer += 1; |
@@ -286,9 +450,8 @@ acpi_rs_vendor_stream(struct acpi_resource *linked_list, | |||
286 | 450 | ||
287 | /* Loop through all of the Vendor Specific fields */ | 451 | /* Loop through all of the Vendor Specific fields */ |
288 | 452 | ||
289 | for (index = 0; index < linked_list->data.vendor_specific.length; | 453 | for (index = 0; index < resource->data.vendor_specific.length; index++) { |
290 | index++) { | 454 | temp8 = resource->data.vendor_specific.reserved[index]; |
291 | temp8 = linked_list->data.vendor_specific.reserved[index]; | ||
292 | 455 | ||
293 | *buffer = temp8; | 456 | *buffer = temp8; |
294 | buffer += 1; | 457 | buffer += 1; |
@@ -341,7 +504,7 @@ acpi_rs_start_depend_fns_resource(u8 * byte_stream_buffer, | |||
341 | 504 | ||
342 | *bytes_consumed = (temp8 & 0x01) + 1; | 505 | *bytes_consumed = (temp8 & 0x01) + 1; |
343 | 506 | ||
344 | output_struct->id = ACPI_RSTYPE_START_DPF; | 507 | output_struct->type = ACPI_RSTYPE_START_DPF; |
345 | 508 | ||
346 | /* Point to Byte 1 if it is used */ | 509 | /* Point to Byte 1 if it is used */ |
347 | 510 | ||
@@ -421,7 +584,7 @@ acpi_rs_end_depend_fns_resource(u8 * byte_stream_buffer, | |||
421 | 584 | ||
422 | /* Fill out the structure */ | 585 | /* Fill out the structure */ |
423 | 586 | ||
424 | output_struct->id = ACPI_RSTYPE_END_DPF; | 587 | output_struct->type = ACPI_RSTYPE_END_DPF; |
425 | 588 | ||
426 | /* Set the Length parameter */ | 589 | /* Set the Length parameter */ |
427 | 590 | ||
@@ -437,7 +600,7 @@ acpi_rs_end_depend_fns_resource(u8 * byte_stream_buffer, | |||
437 | * | 600 | * |
438 | * FUNCTION: acpi_rs_start_depend_fns_stream | 601 | * FUNCTION: acpi_rs_start_depend_fns_stream |
439 | * | 602 | * |
440 | * PARAMETERS: linked_list - Pointer to the resource linked list | 603 | * PARAMETERS: Resource - Pointer to the resource linked list |
441 | * output_buffer - Pointer to the user's return buffer | 604 | * output_buffer - Pointer to the user's return buffer |
442 | * bytes_consumed - u32 pointer that is filled with | 605 | * bytes_consumed - u32 pointer that is filled with |
443 | * the number of bytes of the | 606 | * the number of bytes of the |
@@ -451,7 +614,7 @@ acpi_rs_end_depend_fns_resource(u8 * byte_stream_buffer, | |||
451 | ******************************************************************************/ | 614 | ******************************************************************************/ |
452 | 615 | ||
453 | acpi_status | 616 | acpi_status |
454 | acpi_rs_start_depend_fns_stream(struct acpi_resource *linked_list, | 617 | acpi_rs_start_depend_fns_stream(struct acpi_resource *resource, |
455 | u8 ** output_buffer, acpi_size * bytes_consumed) | 618 | u8 ** output_buffer, acpi_size * bytes_consumed) |
456 | { | 619 | { |
457 | u8 *buffer = *output_buffer; | 620 | u8 *buffer = *output_buffer; |
@@ -460,26 +623,25 @@ acpi_rs_start_depend_fns_stream(struct acpi_resource *linked_list, | |||
460 | ACPI_FUNCTION_TRACE("rs_start_depend_fns_stream"); | 623 | ACPI_FUNCTION_TRACE("rs_start_depend_fns_stream"); |
461 | 624 | ||
462 | /* | 625 | /* |
463 | * The descriptor field is set based upon whether a byte is needed | 626 | * The descriptor type field is set based upon whether a byte is needed |
464 | * to contain Priority data. | 627 | * to contain Priority data. |
465 | */ | 628 | */ |
466 | if (ACPI_ACCEPTABLE_CONFIGURATION == | 629 | if (ACPI_ACCEPTABLE_CONFIGURATION == |
467 | linked_list->data.start_dpf.compatibility_priority && | 630 | resource->data.start_dpf.compatibility_priority && |
468 | ACPI_ACCEPTABLE_CONFIGURATION == | 631 | ACPI_ACCEPTABLE_CONFIGURATION == |
469 | linked_list->data.start_dpf.performance_robustness) { | 632 | resource->data.start_dpf.performance_robustness) { |
470 | *buffer = 0x30; | 633 | *buffer = ACPI_RDESC_TYPE_START_DEPENDENT; |
471 | } else { | 634 | } else { |
472 | *buffer = 0x31; | 635 | *buffer = ACPI_RDESC_TYPE_START_DEPENDENT | 0x01; |
473 | buffer += 1; | 636 | buffer += 1; |
474 | 637 | ||
475 | /* Set the Priority Byte Definition */ | 638 | /* Set the Priority Byte Definition */ |
476 | 639 | ||
477 | temp8 = 0; | 640 | temp8 = 0; |
478 | temp8 = | 641 | temp8 = (u8) ((resource->data.start_dpf.performance_robustness & |
479 | (u8) ((linked_list->data.start_dpf. | 642 | 0x03) << 2); |
480 | performance_robustness & 0x03) << 2); | 643 | temp8 |= (resource->data.start_dpf.compatibility_priority & |
481 | temp8 |= | 644 | 0x03); |
482 | (linked_list->data.start_dpf.compatibility_priority & 0x03); | ||
483 | *buffer = temp8; | 645 | *buffer = temp8; |
484 | } | 646 | } |
485 | 647 | ||
@@ -495,7 +657,7 @@ acpi_rs_start_depend_fns_stream(struct acpi_resource *linked_list, | |||
495 | * | 657 | * |
496 | * FUNCTION: acpi_rs_end_depend_fns_stream | 658 | * FUNCTION: acpi_rs_end_depend_fns_stream |
497 | * | 659 | * |
498 | * PARAMETERS: linked_list - Pointer to the resource linked list | 660 | * PARAMETERS: Resource - Pointer to the resource linked list |
499 | * output_buffer - Pointer to the user's return buffer | 661 | * output_buffer - Pointer to the user's return buffer |
500 | * bytes_consumed - Pointer to where the number of bytes | 662 | * bytes_consumed - Pointer to where the number of bytes |
501 | * used in the output_buffer is returned | 663 | * used in the output_buffer is returned |
@@ -508,16 +670,16 @@ acpi_rs_start_depend_fns_stream(struct acpi_resource *linked_list, | |||
508 | ******************************************************************************/ | 670 | ******************************************************************************/ |
509 | 671 | ||
510 | acpi_status | 672 | acpi_status |
511 | acpi_rs_end_depend_fns_stream(struct acpi_resource *linked_list, | 673 | acpi_rs_end_depend_fns_stream(struct acpi_resource *resource, |
512 | u8 ** output_buffer, acpi_size * bytes_consumed) | 674 | u8 ** output_buffer, acpi_size * bytes_consumed) |
513 | { | 675 | { |
514 | u8 *buffer = *output_buffer; | 676 | u8 *buffer = *output_buffer; |
515 | 677 | ||
516 | ACPI_FUNCTION_TRACE("rs_end_depend_fns_stream"); | 678 | ACPI_FUNCTION_TRACE("rs_end_depend_fns_stream"); |
517 | 679 | ||
518 | /* The descriptor field is static */ | 680 | /* The Descriptor Type field is static */ |
519 | 681 | ||
520 | *buffer = 0x38; | 682 | *buffer = ACPI_RDESC_TYPE_END_DEPENDENT; |
521 | buffer += 1; | 683 | buffer += 1; |
522 | 684 | ||
523 | /* Return the number of bytes consumed in this operation */ | 685 | /* Return the number of bytes consumed in this operation */ |
diff --git a/drivers/acpi/resources/rsxface.c b/drivers/acpi/resources/rsxface.c index ee5a5c509199..1a87c4c7bd97 100644 --- a/drivers/acpi/resources/rsxface.c +++ b/drivers/acpi/resources/rsxface.c | |||
@@ -269,7 +269,7 @@ acpi_walk_resources(acpi_handle device_handle, | |||
269 | /* Walk the resource list */ | 269 | /* Walk the resource list */ |
270 | 270 | ||
271 | for (;;) { | 271 | for (;;) { |
272 | if (!resource || resource->id == ACPI_RSTYPE_END_TAG) { | 272 | if (!resource || resource->type == ACPI_RSTYPE_END_TAG) { |
273 | break; | 273 | break; |
274 | } | 274 | } |
275 | 275 | ||
@@ -360,8 +360,8 @@ EXPORT_SYMBOL(acpi_set_current_resources); | |||
360 | * | 360 | * |
361 | * FUNCTION: acpi_resource_to_address64 | 361 | * FUNCTION: acpi_resource_to_address64 |
362 | * | 362 | * |
363 | * PARAMETERS: resource - Pointer to a resource | 363 | * PARAMETERS: Resource - Pointer to a resource |
364 | * out - Pointer to the users's return | 364 | * Out - Pointer to the users's return |
365 | * buffer (a struct | 365 | * buffer (a struct |
366 | * struct acpi_resource_address64) | 366 | * struct acpi_resource_address64) |
367 | * | 367 | * |
@@ -381,7 +381,7 @@ acpi_resource_to_address64(struct acpi_resource *resource, | |||
381 | struct acpi_resource_address16 *address16; | 381 | struct acpi_resource_address16 *address16; |
382 | struct acpi_resource_address32 *address32; | 382 | struct acpi_resource_address32 *address32; |
383 | 383 | ||
384 | switch (resource->id) { | 384 | switch (resource->type) { |
385 | case ACPI_RSTYPE_ADDRESS16: | 385 | case ACPI_RSTYPE_ADDRESS16: |
386 | 386 | ||
387 | address16 = (struct acpi_resource_address16 *)&resource->data; | 387 | address16 = (struct acpi_resource_address16 *)&resource->data; |
diff --git a/drivers/acpi/utilities/utmisc.c b/drivers/acpi/utilities/utmisc.c index 0c5abc536c7a..aa1dcd851f89 100644 --- a/drivers/acpi/utilities/utmisc.c +++ b/drivers/acpi/utilities/utmisc.c | |||
@@ -811,7 +811,7 @@ u8 *acpi_ut_get_resource_end_tag(union acpi_operand_object * obj_desc) | |||
811 | 811 | ||
812 | while (buffer < end_buffer) { | 812 | while (buffer < end_buffer) { |
813 | buffer_byte = *buffer; | 813 | buffer_byte = *buffer; |
814 | if (buffer_byte & ACPI_RDESC_TYPE_MASK) { | 814 | if (buffer_byte & ACPI_RDESC_TYPE_LARGE) { |
815 | /* Large Descriptor - Length is next 2 bytes */ | 815 | /* Large Descriptor - Length is next 2 bytes */ |
816 | 816 | ||
817 | buffer += ((*(buffer + 1) | (*(buffer + 2) << 8)) + 3); | 817 | buffer += ((*(buffer + 1) | (*(buffer + 2) << 8)) + 3); |
diff --git a/drivers/acpi/utilities/utmutex.c b/drivers/acpi/utilities/utmutex.c index 90134c56ece9..e158b1b6313b 100644 --- a/drivers/acpi/utilities/utmutex.c +++ b/drivers/acpi/utilities/utmutex.c | |||
@@ -214,7 +214,7 @@ acpi_status acpi_ut_acquire_mutex(acpi_mutex_handle mutex_id) | |||
214 | * the ACPI subsystem code. | 214 | * the ACPI subsystem code. |
215 | */ | 215 | */ |
216 | for (i = mutex_id; i < MAX_MUTEX; i++) { | 216 | for (i = mutex_id; i < MAX_MUTEX; i++) { |
217 | if (acpi_gbl_mutex_info[i].owner_id == this_thread_id) { | 217 | if (acpi_gbl_mutex_info[i].thread_id == this_thread_id) { |
218 | if (i == mutex_id) { | 218 | if (i == mutex_id) { |
219 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, | 219 | ACPI_DEBUG_PRINT((ACPI_DB_ERROR, |
220 | "Mutex [%s] already acquired by this thread [%X]\n", | 220 | "Mutex [%s] already acquired by this thread [%X]\n", |
@@ -313,7 +313,7 @@ acpi_status acpi_ut_release_mutex(acpi_mutex_handle mutex_id) | |||
313 | * the ACPI subsystem code. | 313 | * the ACPI subsystem code. |
314 | */ | 314 | */ |
315 | for (i = mutex_id; i < MAX_MUTEX; i++) { | 315 | for (i = mutex_id; i < MAX_MUTEX; i++) { |
316 | if (acpi_gbl_mutex_info[i].owner_id == this_thread_id) { | 316 | if (acpi_gbl_mutex_info[i].thread_id == this_thread_id) { |
317 | if (i == mutex_id) { | 317 | if (i == mutex_id) { |
318 | continue; | 318 | continue; |
319 | } | 319 | } |
diff --git a/include/acpi/acconfig.h b/include/acpi/acconfig.h index 427cff1a3f83..1427c5cf4304 100644 --- a/include/acpi/acconfig.h +++ b/include/acpi/acconfig.h | |||
@@ -61,9 +61,9 @@ | |||
61 | * | 61 | * |
62 | */ | 62 | */ |
63 | 63 | ||
64 | /* Version string */ | 64 | /* Current ACPICA subsystem version in YYYYMMDD format */ |
65 | 65 | ||
66 | #define ACPI_CA_VERSION 0x20050902 | 66 | #define ACPI_CA_VERSION 0x20050916 |
67 | 67 | ||
68 | /* | 68 | /* |
69 | * OS name, used for the _OS object. The _OS object is essentially obsolete, | 69 | * OS name, used for the _OS object. The _OS object is essentially obsolete, |
diff --git a/include/acpi/acdisasm.h b/include/acpi/acdisasm.h index 3d96dcb1bb4b..759b4cff4f88 100644 --- a/include/acpi/acdisasm.h +++ b/include/acpi/acdisasm.h | |||
@@ -187,73 +187,73 @@ void acpi_dm_decode_attribute(u8 attribute); | |||
187 | * dmresrcl | 187 | * dmresrcl |
188 | */ | 188 | */ |
189 | void | 189 | void |
190 | acpi_dm_word_descriptor(struct asl_word_address_desc *resource, | 190 | acpi_dm_word_descriptor(union asl_resource_desc *resource, |
191 | u32 length, u32 level); | 191 | u32 length, u32 level); |
192 | 192 | ||
193 | void | 193 | void |
194 | acpi_dm_dword_descriptor(struct asl_dword_address_desc *resource, | 194 | acpi_dm_dword_descriptor(union asl_resource_desc *resource, |
195 | u32 length, u32 level); | 195 | u32 length, u32 level); |
196 | 196 | ||
197 | void | 197 | void |
198 | acpi_dm_extended_descriptor(struct asl_extended_address_desc *resource, | 198 | acpi_dm_extended_descriptor(union asl_resource_desc *resource, |
199 | u32 length, u32 level); | 199 | u32 length, u32 level); |
200 | 200 | ||
201 | void | 201 | void |
202 | acpi_dm_qword_descriptor(struct asl_qword_address_desc *resource, | 202 | acpi_dm_qword_descriptor(union asl_resource_desc *resource, |
203 | u32 length, u32 level); | 203 | u32 length, u32 level); |
204 | 204 | ||
205 | void | 205 | void |
206 | acpi_dm_memory24_descriptor(struct asl_memory_24_desc *resource, | 206 | acpi_dm_memory24_descriptor(union asl_resource_desc *resource, |
207 | u32 length, u32 level); | 207 | u32 length, u32 level); |
208 | 208 | ||
209 | void | 209 | void |
210 | acpi_dm_memory32_descriptor(struct asl_memory_32_desc *resource, | 210 | acpi_dm_memory32_descriptor(union asl_resource_desc *resource, |
211 | u32 length, u32 level); | 211 | u32 length, u32 level); |
212 | 212 | ||
213 | void | 213 | void |
214 | acpi_dm_fixed_mem32_descriptor(struct asl_fixed_memory_32_desc *resource, | 214 | acpi_dm_fixed_memory32_descriptor(union asl_resource_desc *resource, |
215 | u32 length, u32 level); | 215 | u32 length, u32 level); |
216 | 216 | ||
217 | void | 217 | void |
218 | acpi_dm_generic_register_descriptor(struct asl_general_register_desc *resource, | 218 | acpi_dm_generic_register_descriptor(union asl_resource_desc *resource, |
219 | u32 length, u32 level); | 219 | u32 length, u32 level); |
220 | 220 | ||
221 | void | 221 | void |
222 | acpi_dm_interrupt_descriptor(struct asl_extended_xrupt_desc *resource, | 222 | acpi_dm_interrupt_descriptor(union asl_resource_desc *resource, |
223 | u32 length, u32 level); | 223 | u32 length, u32 level); |
224 | 224 | ||
225 | void | 225 | void |
226 | acpi_dm_vendor_large_descriptor(struct asl_large_vendor_desc *resource, | 226 | acpi_dm_vendor_large_descriptor(union asl_resource_desc *resource, |
227 | u32 length, u32 level); | 227 | u32 length, u32 level); |
228 | 228 | ||
229 | /* | 229 | /* |
230 | * dmresrcs | 230 | * dmresrcs |
231 | */ | 231 | */ |
232 | void | 232 | void |
233 | acpi_dm_irq_descriptor(struct asl_irq_format_desc *resource, | 233 | acpi_dm_irq_descriptor(union asl_resource_desc *resource, |
234 | u32 length, u32 level); | 234 | u32 length, u32 level); |
235 | 235 | ||
236 | void | 236 | void |
237 | acpi_dm_dma_descriptor(struct asl_dma_format_desc *resource, | 237 | acpi_dm_dma_descriptor(union asl_resource_desc *resource, |
238 | u32 length, u32 level); | 238 | u32 length, u32 level); |
239 | 239 | ||
240 | void | 240 | void |
241 | acpi_dm_io_descriptor(struct asl_io_port_desc *resource, u32 length, u32 level); | 241 | acpi_dm_io_descriptor(union asl_resource_desc *resource, u32 length, u32 level); |
242 | 242 | ||
243 | void | 243 | void |
244 | acpi_dm_fixed_io_descriptor(struct asl_fixed_io_port_desc *resource, | 244 | acpi_dm_fixed_io_descriptor(union asl_resource_desc *resource, |
245 | u32 length, u32 level); | 245 | u32 length, u32 level); |
246 | 246 | ||
247 | void | 247 | void |
248 | acpi_dm_start_dependent_descriptor(struct asl_start_dependent_desc *resource, | 248 | acpi_dm_start_dependent_descriptor(union asl_resource_desc *resource, |
249 | u32 length, u32 level); | 249 | u32 length, u32 level); |
250 | 250 | ||
251 | void | 251 | void |
252 | acpi_dm_end_dependent_descriptor(struct asl_start_dependent_desc *resource, | 252 | acpi_dm_end_dependent_descriptor(union asl_resource_desc *resource, |
253 | u32 length, u32 level); | 253 | u32 length, u32 level); |
254 | 254 | ||
255 | void | 255 | void |
256 | acpi_dm_vendor_small_descriptor(struct asl_small_vendor_desc *resource, | 256 | acpi_dm_vendor_small_descriptor(union asl_resource_desc *resource, |
257 | u32 length, u32 level); | 257 | u32 length, u32 level); |
258 | 258 | ||
259 | /* | 259 | /* |
diff --git a/include/acpi/aclocal.h b/include/acpi/aclocal.h index 9fba0fddda90..76ac1533c405 100644 --- a/include/acpi/aclocal.h +++ b/include/acpi/aclocal.h | |||
@@ -744,12 +744,13 @@ struct acpi_bit_register_info { | |||
744 | #define ACPI_RDESC_TYPE_LARGE 0x80 | 744 | #define ACPI_RDESC_TYPE_LARGE 0x80 |
745 | #define ACPI_RDESC_TYPE_SMALL 0x00 | 745 | #define ACPI_RDESC_TYPE_SMALL 0x00 |
746 | 746 | ||
747 | #define ACPI_RDESC_TYPE_MASK 0x80 | 747 | #define ACPI_RDESC_SMALL_MASK 0x78 /* Bits 6:3 contain the type */ |
748 | #define ACPI_RDESC_SMALL_MASK 0x78 /* Only bits 6:3 contain the type */ | 748 | #define ACPI_RDESC_SMALL_LENGTH_MASK 0x07 /* Bits 2:0 contain the length */ |
749 | #define ACPI_RDESC_LARGE_MASK 0x7F /* Bits 6:0 contain the type */ | ||
749 | 750 | ||
750 | /* | 751 | /* |
751 | * Small resource descriptor types | 752 | * Small resource descriptor types |
752 | * Note: The 3 length bits (2:0) must be zero | 753 | * Note: Bits 2:0 are used for the descriptor length |
753 | */ | 754 | */ |
754 | #define ACPI_RDESC_TYPE_IRQ_FORMAT 0x20 | 755 | #define ACPI_RDESC_TYPE_IRQ_FORMAT 0x20 |
755 | #define ACPI_RDESC_TYPE_DMA_FORMAT 0x28 | 756 | #define ACPI_RDESC_TYPE_DMA_FORMAT 0x28 |
@@ -757,6 +758,10 @@ struct acpi_bit_register_info { | |||
757 | #define ACPI_RDESC_TYPE_END_DEPENDENT 0x38 | 758 | #define ACPI_RDESC_TYPE_END_DEPENDENT 0x38 |
758 | #define ACPI_RDESC_TYPE_IO_PORT 0x40 | 759 | #define ACPI_RDESC_TYPE_IO_PORT 0x40 |
759 | #define ACPI_RDESC_TYPE_FIXED_IO_PORT 0x48 | 760 | #define ACPI_RDESC_TYPE_FIXED_IO_PORT 0x48 |
761 | #define ACPI_RDESC_TYPE_RESERVED_S1 0x50 | ||
762 | #define ACPI_RDESC_TYPE_RESERVED_S2 0x58 | ||
763 | #define ACPI_RDESC_TYPE_RESERVED_S3 0x60 | ||
764 | #define ACPI_RDESC_TYPE_RESERVED_S4 0x68 | ||
760 | #define ACPI_RDESC_TYPE_SMALL_VENDOR 0x70 | 765 | #define ACPI_RDESC_TYPE_SMALL_VENDOR 0x70 |
761 | #define ACPI_RDESC_TYPE_END_TAG 0x78 | 766 | #define ACPI_RDESC_TYPE_END_TAG 0x78 |
762 | 767 | ||
@@ -764,7 +769,8 @@ struct acpi_bit_register_info { | |||
764 | * Large resource descriptor types | 769 | * Large resource descriptor types |
765 | */ | 770 | */ |
766 | #define ACPI_RDESC_TYPE_MEMORY_24 0x81 | 771 | #define ACPI_RDESC_TYPE_MEMORY_24 0x81 |
767 | #define ACPI_RDESC_TYPE_GENERAL_REGISTER 0x82 | 772 | #define ACPI_RDESC_TYPE_GENERIC_REGISTER 0x82 |
773 | #define ACPI_RDESC_TYPE_RESERVED_L1 0x83 | ||
768 | #define ACPI_RDESC_TYPE_LARGE_VENDOR 0x84 | 774 | #define ACPI_RDESC_TYPE_LARGE_VENDOR 0x84 |
769 | #define ACPI_RDESC_TYPE_MEMORY_32 0x85 | 775 | #define ACPI_RDESC_TYPE_MEMORY_32 0x85 |
770 | #define ACPI_RDESC_TYPE_FIXED_MEMORY_32 0x86 | 776 | #define ACPI_RDESC_TYPE_FIXED_MEMORY_32 0x86 |
@@ -773,6 +779,15 @@ struct acpi_bit_register_info { | |||
773 | #define ACPI_RDESC_TYPE_EXTENDED_XRUPT 0x89 | 779 | #define ACPI_RDESC_TYPE_EXTENDED_XRUPT 0x89 |
774 | #define ACPI_RDESC_TYPE_QWORD_ADDRESS_SPACE 0x8A | 780 | #define ACPI_RDESC_TYPE_QWORD_ADDRESS_SPACE 0x8A |
775 | #define ACPI_RDESC_TYPE_EXTENDED_ADDRESS_SPACE 0x8B | 781 | #define ACPI_RDESC_TYPE_EXTENDED_ADDRESS_SPACE 0x8B |
782 | #define ACPI_RDESC_LARGE_MAX 0x8B | ||
783 | |||
784 | /* | ||
785 | * Minimum lengths for descriptors with optional fields | ||
786 | */ | ||
787 | #define ACPI_RDESC_QWORD_MIN 43 | ||
788 | #define ACPI_RDESC_DWORD_MIN 23 | ||
789 | #define ACPI_RDESC_WORD_MIN 13 | ||
790 | #define ACPI_RDESC_EXT_XRUPT_MIN 6 | ||
776 | 791 | ||
777 | /***************************************************************************** | 792 | /***************************************************************************** |
778 | * | 793 | * |
diff --git a/include/acpi/acresrc.h b/include/acpi/acresrc.h index 38e798b05d08..ce2cf72fd4c8 100644 --- a/include/acpi/acresrc.h +++ b/include/acpi/acresrc.h | |||
@@ -110,7 +110,7 @@ acpi_rs_byte_stream_to_list(u8 * byte_stream_buffer, | |||
110 | u32 byte_stream_buffer_length, u8 * output_buffer); | 110 | u32 byte_stream_buffer_length, u8 * output_buffer); |
111 | 111 | ||
112 | acpi_status | 112 | acpi_status |
113 | acpi_rs_list_to_byte_stream(struct acpi_resource *linked_list, | 113 | acpi_rs_list_to_byte_stream(struct acpi_resource *resource, |
114 | acpi_size byte_stream_size_needed, | 114 | acpi_size byte_stream_size_needed, |
115 | u8 * output_buffer); | 115 | u8 * output_buffer); |
116 | 116 | ||
@@ -125,11 +125,11 @@ acpi_rs_fixed_io_resource(u8 * byte_stream_buffer, | |||
125 | u8 ** output_buffer, acpi_size * structure_size); | 125 | u8 ** output_buffer, acpi_size * structure_size); |
126 | 126 | ||
127 | acpi_status | 127 | acpi_status |
128 | acpi_rs_io_stream(struct acpi_resource *linked_list, | 128 | acpi_rs_io_stream(struct acpi_resource *resource, |
129 | u8 ** output_buffer, acpi_size * bytes_consumed); | 129 | u8 ** output_buffer, acpi_size * bytes_consumed); |
130 | 130 | ||
131 | acpi_status | 131 | acpi_status |
132 | acpi_rs_fixed_io_stream(struct acpi_resource *linked_list, | 132 | acpi_rs_fixed_io_stream(struct acpi_resource *resource, |
133 | u8 ** output_buffer, acpi_size * bytes_consumed); | 133 | u8 ** output_buffer, acpi_size * bytes_consumed); |
134 | 134 | ||
135 | acpi_status | 135 | acpi_status |
@@ -138,7 +138,7 @@ acpi_rs_irq_resource(u8 * byte_stream_buffer, | |||
138 | u8 ** output_buffer, acpi_size * structure_size); | 138 | u8 ** output_buffer, acpi_size * structure_size); |
139 | 139 | ||
140 | acpi_status | 140 | acpi_status |
141 | acpi_rs_irq_stream(struct acpi_resource *linked_list, | 141 | acpi_rs_irq_stream(struct acpi_resource *resource, |
142 | u8 ** output_buffer, acpi_size * bytes_consumed); | 142 | u8 ** output_buffer, acpi_size * bytes_consumed); |
143 | 143 | ||
144 | acpi_status | 144 | acpi_status |
@@ -147,7 +147,7 @@ acpi_rs_dma_resource(u8 * byte_stream_buffer, | |||
147 | u8 ** output_buffer, acpi_size * structure_size); | 147 | u8 ** output_buffer, acpi_size * structure_size); |
148 | 148 | ||
149 | acpi_status | 149 | acpi_status |
150 | acpi_rs_dma_stream(struct acpi_resource *linked_list, | 150 | acpi_rs_dma_stream(struct acpi_resource *resource, |
151 | u8 ** output_buffer, acpi_size * bytes_consumed); | 151 | u8 ** output_buffer, acpi_size * bytes_consumed); |
152 | 152 | ||
153 | acpi_status | 153 | acpi_status |
@@ -156,7 +156,7 @@ acpi_rs_address16_resource(u8 * byte_stream_buffer, | |||
156 | u8 ** output_buffer, acpi_size * structure_size); | 156 | u8 ** output_buffer, acpi_size * structure_size); |
157 | 157 | ||
158 | acpi_status | 158 | acpi_status |
159 | acpi_rs_address16_stream(struct acpi_resource *linked_list, | 159 | acpi_rs_address16_stream(struct acpi_resource *resource, |
160 | u8 ** output_buffer, acpi_size * bytes_consumed); | 160 | u8 ** output_buffer, acpi_size * bytes_consumed); |
161 | 161 | ||
162 | acpi_status | 162 | acpi_status |
@@ -165,7 +165,7 @@ acpi_rs_address32_resource(u8 * byte_stream_buffer, | |||
165 | u8 ** output_buffer, acpi_size * structure_size); | 165 | u8 ** output_buffer, acpi_size * structure_size); |
166 | 166 | ||
167 | acpi_status | 167 | acpi_status |
168 | acpi_rs_address32_stream(struct acpi_resource *linked_list, | 168 | acpi_rs_address32_stream(struct acpi_resource *resource, |
169 | u8 ** output_buffer, acpi_size * bytes_consumed); | 169 | u8 ** output_buffer, acpi_size * bytes_consumed); |
170 | 170 | ||
171 | acpi_status | 171 | acpi_status |
@@ -174,7 +174,7 @@ acpi_rs_address64_resource(u8 * byte_stream_buffer, | |||
174 | u8 ** output_buffer, acpi_size * structure_size); | 174 | u8 ** output_buffer, acpi_size * structure_size); |
175 | 175 | ||
176 | acpi_status | 176 | acpi_status |
177 | acpi_rs_address64_stream(struct acpi_resource *linked_list, | 177 | acpi_rs_address64_stream(struct acpi_resource *resource, |
178 | u8 ** output_buffer, acpi_size * bytes_consumed); | 178 | u8 ** output_buffer, acpi_size * bytes_consumed); |
179 | 179 | ||
180 | acpi_status | 180 | acpi_status |
@@ -190,12 +190,12 @@ acpi_rs_end_depend_fns_resource(u8 * byte_stream_buffer, | |||
190 | acpi_size * structure_size); | 190 | acpi_size * structure_size); |
191 | 191 | ||
192 | acpi_status | 192 | acpi_status |
193 | acpi_rs_start_depend_fns_stream(struct acpi_resource *linked_list, | 193 | acpi_rs_start_depend_fns_stream(struct acpi_resource *resource, |
194 | u8 ** output_buffer, | 194 | u8 ** output_buffer, |
195 | acpi_size * bytes_consumed); | 195 | acpi_size * bytes_consumed); |
196 | 196 | ||
197 | acpi_status | 197 | acpi_status |
198 | acpi_rs_end_depend_fns_stream(struct acpi_resource *linked_list, | 198 | acpi_rs_end_depend_fns_stream(struct acpi_resource *resource, |
199 | u8 ** output_buffer, acpi_size * bytes_consumed); | 199 | u8 ** output_buffer, acpi_size * bytes_consumed); |
200 | 200 | ||
201 | acpi_status | 201 | acpi_status |
@@ -204,7 +204,7 @@ acpi_rs_memory24_resource(u8 * byte_stream_buffer, | |||
204 | u8 ** output_buffer, acpi_size * structure_size); | 204 | u8 ** output_buffer, acpi_size * structure_size); |
205 | 205 | ||
206 | acpi_status | 206 | acpi_status |
207 | acpi_rs_memory24_stream(struct acpi_resource *linked_list, | 207 | acpi_rs_memory24_stream(struct acpi_resource *resource, |
208 | u8 ** output_buffer, acpi_size * bytes_consumed); | 208 | u8 ** output_buffer, acpi_size * bytes_consumed); |
209 | 209 | ||
210 | acpi_status | 210 | acpi_status |
@@ -220,11 +220,11 @@ acpi_rs_fixed_memory32_resource(u8 * byte_stream_buffer, | |||
220 | acpi_size * structure_size); | 220 | acpi_size * structure_size); |
221 | 221 | ||
222 | acpi_status | 222 | acpi_status |
223 | acpi_rs_memory32_range_stream(struct acpi_resource *linked_list, | 223 | acpi_rs_memory32_range_stream(struct acpi_resource *resource, |
224 | u8 ** output_buffer, acpi_size * bytes_consumed); | 224 | u8 ** output_buffer, acpi_size * bytes_consumed); |
225 | 225 | ||
226 | acpi_status | 226 | acpi_status |
227 | acpi_rs_fixed_memory32_stream(struct acpi_resource *linked_list, | 227 | acpi_rs_fixed_memory32_stream(struct acpi_resource *resource, |
228 | u8 ** output_buffer, acpi_size * bytes_consumed); | 228 | u8 ** output_buffer, acpi_size * bytes_consumed); |
229 | 229 | ||
230 | acpi_status | 230 | acpi_status |
@@ -233,7 +233,7 @@ acpi_rs_extended_irq_resource(u8 * byte_stream_buffer, | |||
233 | u8 ** output_buffer, acpi_size * structure_size); | 233 | u8 ** output_buffer, acpi_size * structure_size); |
234 | 234 | ||
235 | acpi_status | 235 | acpi_status |
236 | acpi_rs_extended_irq_stream(struct acpi_resource *linked_list, | 236 | acpi_rs_extended_irq_stream(struct acpi_resource *resource, |
237 | u8 ** output_buffer, acpi_size * bytes_consumed); | 237 | u8 ** output_buffer, acpi_size * bytes_consumed); |
238 | 238 | ||
239 | acpi_status | 239 | acpi_status |
@@ -242,7 +242,7 @@ acpi_rs_end_tag_resource(u8 * byte_stream_buffer, | |||
242 | u8 ** output_buffer, acpi_size * structure_size); | 242 | u8 ** output_buffer, acpi_size * structure_size); |
243 | 243 | ||
244 | acpi_status | 244 | acpi_status |
245 | acpi_rs_end_tag_stream(struct acpi_resource *linked_list, | 245 | acpi_rs_end_tag_stream(struct acpi_resource *resource, |
246 | u8 ** output_buffer, acpi_size * bytes_consumed); | 246 | u8 ** output_buffer, acpi_size * bytes_consumed); |
247 | 247 | ||
248 | acpi_status | 248 | acpi_status |
@@ -251,9 +251,23 @@ acpi_rs_vendor_resource(u8 * byte_stream_buffer, | |||
251 | u8 ** output_buffer, acpi_size * structure_size); | 251 | u8 ** output_buffer, acpi_size * structure_size); |
252 | 252 | ||
253 | acpi_status | 253 | acpi_status |
254 | acpi_rs_vendor_stream(struct acpi_resource *linked_list, | 254 | acpi_rs_vendor_stream(struct acpi_resource *resource, |
255 | u8 ** output_buffer, acpi_size * bytes_consumed); | 255 | u8 ** output_buffer, acpi_size * bytes_consumed); |
256 | 256 | ||
257 | u8 acpi_rs_get_resource_type(u8 resource_start_byte); | 257 | u8 acpi_rs_get_resource_type(u8 resource_start_byte); |
258 | 258 | ||
259 | /* | ||
260 | * rsmisc | ||
261 | */ | ||
262 | acpi_status | ||
263 | acpi_rs_generic_register_resource(u8 * byte_stream_buffer, | ||
264 | acpi_size * bytes_consumed, | ||
265 | u8 ** output_buffer, | ||
266 | acpi_size * structure_size); | ||
267 | |||
268 | acpi_status | ||
269 | acpi_rs_generic_register_stream(struct acpi_resource *resource, | ||
270 | u8 ** output_buffer, | ||
271 | acpi_size * bytes_consumed); | ||
272 | |||
259 | #endif /* __ACRESRC_H__ */ | 273 | #endif /* __ACRESRC_H__ */ |
diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h index 6213b27516e8..1dfa64fae4ec 100644 --- a/include/acpi/actypes.h +++ b/include/acpi/actypes.h | |||
@@ -1125,6 +1125,14 @@ struct acpi_resource_ext_irq { | |||
1125 | u32 interrupts[1]; | 1125 | u32 interrupts[1]; |
1126 | }; | 1126 | }; |
1127 | 1127 | ||
1128 | struct acpi_resource_generic_reg { | ||
1129 | u32 space_id; | ||
1130 | u32 bit_width; | ||
1131 | u32 bit_offset; | ||
1132 | u32 address_size; | ||
1133 | u64 address; | ||
1134 | }; | ||
1135 | |||
1128 | /* ACPI_RESOURCE_TYPEs */ | 1136 | /* ACPI_RESOURCE_TYPEs */ |
1129 | 1137 | ||
1130 | #define ACPI_RSTYPE_IRQ 0 | 1138 | #define ACPI_RSTYPE_IRQ 0 |
@@ -1142,6 +1150,8 @@ struct acpi_resource_ext_irq { | |||
1142 | #define ACPI_RSTYPE_ADDRESS32 12 | 1150 | #define ACPI_RSTYPE_ADDRESS32 12 |
1143 | #define ACPI_RSTYPE_ADDRESS64 13 | 1151 | #define ACPI_RSTYPE_ADDRESS64 13 |
1144 | #define ACPI_RSTYPE_EXT_IRQ 14 | 1152 | #define ACPI_RSTYPE_EXT_IRQ 14 |
1153 | #define ACPI_RSTYPE_GENERIC_REG 15 | ||
1154 | #define ACPI_RSTYPE_MAX 15 | ||
1145 | 1155 | ||
1146 | typedef u32 acpi_resource_type; | 1156 | typedef u32 acpi_resource_type; |
1147 | 1157 | ||
@@ -1161,10 +1171,11 @@ union acpi_resource_data { | |||
1161 | struct acpi_resource_address32 address32; | 1171 | struct acpi_resource_address32 address32; |
1162 | struct acpi_resource_address64 address64; | 1172 | struct acpi_resource_address64 address64; |
1163 | struct acpi_resource_ext_irq extended_irq; | 1173 | struct acpi_resource_ext_irq extended_irq; |
1174 | struct acpi_resource_generic_reg generic_reg; | ||
1164 | }; | 1175 | }; |
1165 | 1176 | ||
1166 | struct acpi_resource { | 1177 | struct acpi_resource { |
1167 | acpi_resource_type id; | 1178 | acpi_resource_type type; |
1168 | u32 length; | 1179 | u32 length; |
1169 | union acpi_resource_data data; | 1180 | union acpi_resource_data data; |
1170 | }; | 1181 | }; |
diff --git a/include/acpi/amlresrc.h b/include/acpi/amlresrc.h index 051786e4b210..a3c46ba6358d 100644 --- a/include/acpi/amlresrc.h +++ b/include/acpi/amlresrc.h | |||
@@ -157,10 +157,15 @@ struct asl_end_tag_desc { | |||
157 | 157 | ||
158 | /* LARGE descriptors */ | 158 | /* LARGE descriptors */ |
159 | 159 | ||
160 | #define ASL_LARGE_HEADER_COMMON \ | ||
161 | u8 descriptor_type;\ | ||
162 | u16 length; | ||
163 | |||
164 | struct asl_large_header { | ||
165 | ASL_LARGE_HEADER_COMMON}; | ||
166 | |||
160 | struct asl_memory_24_desc { | 167 | struct asl_memory_24_desc { |
161 | u8 descriptor_type; | 168 | ASL_LARGE_HEADER_COMMON u8 information; |
162 | u16 length; | ||
163 | u8 information; | ||
164 | u16 address_min; | 169 | u16 address_min; |
165 | u16 address_max; | 170 | u16 address_max; |
166 | u16 alignment; | 171 | u16 alignment; |
@@ -168,15 +173,11 @@ struct asl_memory_24_desc { | |||
168 | }; | 173 | }; |
169 | 174 | ||
170 | struct asl_large_vendor_desc { | 175 | struct asl_large_vendor_desc { |
171 | u8 descriptor_type; | 176 | ASL_LARGE_HEADER_COMMON u8 vendor_defined[1]; |
172 | u16 length; | ||
173 | u8 vendor_defined[1]; | ||
174 | }; | 177 | }; |
175 | 178 | ||
176 | struct asl_memory_32_desc { | 179 | struct asl_memory_32_desc { |
177 | u8 descriptor_type; | 180 | ASL_LARGE_HEADER_COMMON u8 information; |
178 | u16 length; | ||
179 | u8 information; | ||
180 | u32 address_min; | 181 | u32 address_min; |
181 | u32 address_max; | 182 | u32 address_max; |
182 | u32 alignment; | 183 | u32 alignment; |
@@ -184,17 +185,13 @@ struct asl_memory_32_desc { | |||
184 | }; | 185 | }; |
185 | 186 | ||
186 | struct asl_fixed_memory_32_desc { | 187 | struct asl_fixed_memory_32_desc { |
187 | u8 descriptor_type; | 188 | ASL_LARGE_HEADER_COMMON u8 information; |
188 | u16 length; | ||
189 | u8 information; | ||
190 | u32 base_address; | 189 | u32 base_address; |
191 | u32 range_length; | 190 | u32 range_length; |
192 | }; | 191 | }; |
193 | 192 | ||
194 | struct asl_extended_address_desc { | 193 | struct asl_extended_address_desc { |
195 | u8 descriptor_type; | 194 | ASL_LARGE_HEADER_COMMON u8 resource_type; |
196 | u16 length; | ||
197 | u8 resource_type; | ||
198 | u8 flags; | 195 | u8 flags; |
199 | u8 specific_flags; | 196 | u8 specific_flags; |
200 | u8 revision_iD; | 197 | u8 revision_iD; |
@@ -211,9 +208,7 @@ struct asl_extended_address_desc { | |||
211 | #define ASL_EXTENDED_ADDRESS_DESC_REVISION 1 /* ACPI 3.0 */ | 208 | #define ASL_EXTENDED_ADDRESS_DESC_REVISION 1 /* ACPI 3.0 */ |
212 | 209 | ||
213 | struct asl_qword_address_desc { | 210 | struct asl_qword_address_desc { |
214 | u8 descriptor_type; | 211 | ASL_LARGE_HEADER_COMMON u8 resource_type; |
215 | u16 length; | ||
216 | u8 resource_type; | ||
217 | u8 flags; | 212 | u8 flags; |
218 | u8 specific_flags; | 213 | u8 specific_flags; |
219 | u64 granularity; | 214 | u64 granularity; |
@@ -225,9 +220,7 @@ struct asl_qword_address_desc { | |||
225 | }; | 220 | }; |
226 | 221 | ||
227 | struct asl_dword_address_desc { | 222 | struct asl_dword_address_desc { |
228 | u8 descriptor_type; | 223 | ASL_LARGE_HEADER_COMMON u8 resource_type; |
229 | u16 length; | ||
230 | u8 resource_type; | ||
231 | u8 flags; | 224 | u8 flags; |
232 | u8 specific_flags; | 225 | u8 specific_flags; |
233 | u32 granularity; | 226 | u32 granularity; |
@@ -239,9 +232,7 @@ struct asl_dword_address_desc { | |||
239 | }; | 232 | }; |
240 | 233 | ||
241 | struct asl_word_address_desc { | 234 | struct asl_word_address_desc { |
242 | u8 descriptor_type; | 235 | ASL_LARGE_HEADER_COMMON u8 resource_type; |
243 | u16 length; | ||
244 | u8 resource_type; | ||
245 | u8 flags; | 236 | u8 flags; |
246 | u8 specific_flags; | 237 | u8 specific_flags; |
247 | u16 granularity; | 238 | u16 granularity; |
@@ -253,18 +244,14 @@ struct asl_word_address_desc { | |||
253 | }; | 244 | }; |
254 | 245 | ||
255 | struct asl_extended_xrupt_desc { | 246 | struct asl_extended_xrupt_desc { |
256 | u8 descriptor_type; | 247 | ASL_LARGE_HEADER_COMMON u8 flags; |
257 | u16 length; | ||
258 | u8 flags; | ||
259 | u8 table_length; | 248 | u8 table_length; |
260 | u32 interrupt_number[1]; | 249 | u32 interrupt_number[1]; |
261 | /* res_source_index, res_source optional fields follow */ | 250 | /* res_source_index, res_source optional fields follow */ |
262 | }; | 251 | }; |
263 | 252 | ||
264 | struct asl_general_register_desc { | 253 | struct asl_generic_register_desc { |
265 | u8 descriptor_type; | 254 | ASL_LARGE_HEADER_COMMON u8 address_space_id; |
266 | u16 length; | ||
267 | u8 address_space_id; | ||
268 | u8 bit_width; | 255 | u8 bit_width; |
269 | u8 bit_offset; | 256 | u8 bit_offset; |
270 | u8 access_size; /* ACPI 3.0, was Reserved */ | 257 | u8 access_size; /* ACPI 3.0, was Reserved */ |
@@ -280,13 +267,14 @@ struct asl_general_register_desc { | |||
280 | union asl_resource_desc { | 267 | union asl_resource_desc { |
281 | struct asl_irq_format_desc irq; | 268 | struct asl_irq_format_desc irq; |
282 | struct asl_dma_format_desc dma; | 269 | struct asl_dma_format_desc dma; |
283 | struct asl_start_dependent_desc std; | ||
284 | struct asl_end_dependent_desc end; | ||
285 | struct asl_io_port_desc iop; | 270 | struct asl_io_port_desc iop; |
286 | struct asl_fixed_io_port_desc fio; | 271 | struct asl_fixed_io_port_desc fio; |
272 | struct asl_start_dependent_desc std; | ||
273 | struct asl_end_dependent_desc end; | ||
287 | struct asl_small_vendor_desc smv; | 274 | struct asl_small_vendor_desc smv; |
288 | struct asl_end_tag_desc et; | 275 | struct asl_end_tag_desc et; |
289 | 276 | ||
277 | struct asl_large_header lhd; | ||
290 | struct asl_memory_24_desc M24; | 278 | struct asl_memory_24_desc M24; |
291 | struct asl_large_vendor_desc lgv; | 279 | struct asl_large_vendor_desc lgv; |
292 | struct asl_memory_32_desc M32; | 280 | struct asl_memory_32_desc M32; |
@@ -296,7 +284,7 @@ union asl_resource_desc { | |||
296 | struct asl_word_address_desc was; | 284 | struct asl_word_address_desc was; |
297 | struct asl_extended_address_desc eas; | 285 | struct asl_extended_address_desc eas; |
298 | struct asl_extended_xrupt_desc exx; | 286 | struct asl_extended_xrupt_desc exx; |
299 | struct asl_general_register_desc grg; | 287 | struct asl_generic_register_desc grg; |
300 | u32 u32_item; | 288 | u32 u32_item; |
301 | u16 u16_item; | 289 | u16 u16_item; |
302 | u8 U8item; | 290 | u8 U8item; |
diff --git a/include/acpi/platform/acenv.h b/include/acpi/platform/acenv.h index 16609c1ab2eb..08539125696a 100644 --- a/include/acpi/platform/acenv.h +++ b/include/acpi/platform/acenv.h | |||
@@ -68,6 +68,7 @@ | |||
68 | #define ACPI_APPLICATION | 68 | #define ACPI_APPLICATION |
69 | #define ACPI_DEBUGGER | 69 | #define ACPI_DEBUGGER |
70 | #define ACPI_DISASSEMBLER | 70 | #define ACPI_DISASSEMBLER |
71 | #define ACPI_MUTEX_DEBUG | ||
71 | #endif | 72 | #endif |
72 | 73 | ||
73 | #ifdef ACPI_ASL_COMPILER | 74 | #ifdef ACPI_ASL_COMPILER |