45 #define ACPI_CREATE_PREDEFINED_TABLE
52 #define _COMPONENT ACPI_NAMESPACE
95 u32 expected_btypes,
u32 package_index);
101 static
void acpi_ns_get_expected_types(
char *
buffer,
u32 expected_btypes);
107 static
const char *acpi_rtype_names[] = {
133 u32 user_param_count,
183 if (!return_object) {
184 if ((predefined->
info.expected_btypes) &&
188 "Missing expected return value"));
209 (!predefined->
info.expected_btypes) ||
229 status = acpi_ns_check_object_type(data, return_object_ptr,
230 predefined->
info.expected_btypes,
242 status = acpi_ns_check_package(data, return_object_ptr);
294 u32 user_param_count,
298 u32 required_params_current;
299 u32 required_params_old;
317 if (user_param_count < param_count) {
320 "Insufficient arguments - needs %u, found %u",
321 param_count, user_param_count));
322 }
else if (user_param_count > param_count) {
325 "Excess arguments - needs %u, found %u",
326 param_count, user_param_count));
335 required_params_current = predefined->
info.param_count & 0x0F;
336 required_params_old = predefined->
info.param_count >> 4;
339 if ((user_param_count != required_params_current) &&
340 (user_param_count != required_params_old)) {
343 "Parameter count mismatch - "
344 "caller passed %u, ACPI requires %u",
346 required_params_current));
355 if ((param_count != required_params_current) &&
356 (param_count != required_params_old)) {
358 "Parameter count mismatch - ASL declared %u, ACPI requires %u",
359 param_count, required_params_current));
389 this_name = predefined_names;
390 while (this_name->
info.name[0]) {
440 package = data->predefined + 1;
443 "%s Validating return Package of Type %X, Count %X\n",
445 return_object->
package.count));
456 elements = return_object->
package.elements;
457 count = return_object->
package.count;
463 "Return Package has no elements (empty)"));
485 if (count < expected_count) {
486 goto package_too_small;
487 }
else if (count > expected_count) {
489 "%s: Return Package is larger than needed - "
490 "found %u, expected %u\n",
497 status = acpi_ns_check_package_elements(data, elements,
514 for (i = 0; i <
count; i++) {
515 status = acpi_ns_check_object_type(data, elements,
534 expected_count = package->
ret_info3.count;
535 if (count < expected_count) {
536 goto package_too_small;
541 for (i = 0; i <
count; i++) {
542 if (i < package->ret_info3.count) {
547 acpi_ns_check_object_type(data, elements,
559 acpi_ns_check_object_type(data, elements,
576 status = acpi_ns_check_object_type(data, elements,
588 acpi_ns_check_package_list(data, package, elements, count);
595 status = acpi_ns_check_object_type(data, elements,
605 expected_count = (
u32) (*elements)->integer.value;
606 if (expected_count >= count) {
607 goto package_too_small;
610 count = expected_count;
616 acpi_ns_check_package_list(data, package, elements, count);
649 return_object = *return_object_ptr;
650 elements = return_object->
package.elements;
657 acpi_ns_check_package_list(data, package, elements, count);
665 "Invalid internal return type in table entry: %X",
678 "Return Package is too small - found %u elements, expected %u",
679 count, expected_count));
719 for (i = 0; i <
count; i++) {
721 sub_elements = sub_package->
package.elements;
726 status = acpi_ns_check_object_type(data, &sub_package,
744 if (sub_package->
package.count < expected_count) {
745 goto package_too_small;
749 acpi_ns_check_package_elements(data, sub_elements,
770 if (sub_package->
package.count < expected_count) {
771 goto package_too_small;
775 acpi_ns_check_package_elements(data, sub_elements,
795 expected_count = package->
ret_info2.count;
796 if (sub_package->
package.count < expected_count) {
797 goto package_too_small;
802 for (j = 0; j < expected_count; j++) {
804 acpi_ns_check_object_type(data,
820 expected_count = package->
ret_info.count1;
821 if (sub_package->
package.count < expected_count) {
822 goto package_too_small;
828 acpi_ns_check_package_elements(data, sub_elements,
844 status = acpi_ns_check_object_type(data, sub_elements,
855 expected_count = (
u32)(*sub_elements)->integer.value;
856 if (sub_package->
package.count < expected_count) {
857 goto package_too_small;
859 if (sub_package->
package.count <
861 expected_count = package->
ret_info.count1;
862 goto package_too_small;
864 if (expected_count == 0) {
871 expected_count = sub_package->
package.count;
872 (*sub_elements)->integer.value = expected_count;
878 acpi_ns_check_package_elements(data,
882 (expected_count - 1),
904 "Return Sub-Package[%u] is too small - found %u elements, expected %u",
905 i, sub_package->
package.count, expected_count));
945 for (i = 0; i <
count1; i++) {
946 status = acpi_ns_check_object_type(data, this_element,
947 type1, i + start_index);
954 for (i = 0; i <
count2; i++) {
955 status = acpi_ns_check_object_type(data, this_element,
957 (i + count1 + start_index));
989 u32 expected_btypes,
u32 package_index)
994 char type_buffer[48];
1002 if (!return_object) {
1009 goto type_error_exit;
1016 "Invalid return type - Found a Namespace node [%4.4s] type %s",
1017 return_object->
node.name.ascii,
1031 switch (return_object->
common.type) {
1055 goto type_error_exit;
1060 if (return_btype & expected_btypes) {
1065 status = acpi_ns_check_reference(data, return_object);
1074 package_index, return_object_ptr);
1083 acpi_ns_get_expected_types(type_buffer, expected_btypes);
1087 "Return type mismatch - found %s, expected %s",
1089 (return_object), type_buffer));
1092 "Return Package type mismatch at index %u - "
1093 "found %s, expected %s", package_index,
1095 (return_object), type_buffer));
1132 "Return type mismatch - unexpected reference object type [%s] %2.2X",
1153 static void acpi_ns_get_expected_types(
char *
buffer,
u32 expected_btypes)
1167 if (expected_btypes & this_rtype) {