linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / drivers / acpi / utilities / uteval.c
index d6d7121..106cc97 100644 (file)
@@ -56,34 +56,6 @@ static acpi_status
 acpi_ut_translate_one_cid(union acpi_operand_object *obj_desc,
                          struct acpi_compatible_id *one_cid);
 
-/*
- * Strings supported by the _OSI predefined (internal) method.
- */
-static const char *acpi_interfaces_supported[] = {
-       /* Operating System Vendor Strings */
-
-       "Linux",
-       "Windows 2000",
-       "Windows 2001",
-       "Windows 2001 SP0",
-       "Windows 2001 SP1",
-       "Windows 2001 SP2",
-       "Windows 2001 SP3",
-       "Windows 2001 SP4",
-       "Windows 2001.1",
-       "Windows 2001.1 SP1",   /* Added 03/2006 */
-       "Windows 2006",         /* Added 03/2006 */
-
-       /* Feature Group Strings */
-
-       "Extended Address Space Descriptor"
-           /*
-            * All "optional" feature group strings (features that are implemented
-            * by the host) should be implemented in the host version of
-            * acpi_os_validate_interface and should not be added here.
-            */
-};
-
 /*******************************************************************************
  *
  * FUNCTION:    acpi_ut_osi_implementation
@@ -92,18 +64,18 @@ static const char *acpi_interfaces_supported[] = {
  *
  * RETURN:      Status
  *
- * DESCRIPTION: Implementation of the _OSI predefined control method
+ * DESCRIPTION: Implementation of _OSI predefined control method
+ *              Supported = _OSI (String)
  *
  ******************************************************************************/
 
 acpi_status acpi_ut_osi_implementation(struct acpi_walk_state *walk_state)
 {
-       acpi_status status;
        union acpi_operand_object *string_desc;
        union acpi_operand_object *return_desc;
        acpi_native_uint i;
 
-       ACPI_FUNCTION_TRACE(ut_osi_implementation);
+       ACPI_FUNCTION_TRACE("ut_osi_implementation");
 
        /* Validate the string input argument */
 
@@ -112,47 +84,28 @@ acpi_status acpi_ut_osi_implementation(struct acpi_walk_state *walk_state)
                return_ACPI_STATUS(AE_TYPE);
        }
 
-       /* Create a return object */
+       /* Create a return object (Default value = 0) */
 
        return_desc = acpi_ut_create_internal_object(ACPI_TYPE_INTEGER);
        if (!return_desc) {
                return_ACPI_STATUS(AE_NO_MEMORY);
        }
 
-       /* Default return value is SUPPORTED */
-
-       return_desc->integer.value = ACPI_UINT32_MAX;
-       walk_state->return_desc = return_desc;
-
-       /* Compare input string to static table of supported interfaces */
+       /* Compare input string to table of supported strings */
 
-       for (i = 0; i < ACPI_ARRAY_LENGTH(acpi_interfaces_supported); i++) {
-               if (!ACPI_STRCMP
-                   (string_desc->string.pointer,
-                    acpi_interfaces_supported[i])) {
+       for (i = 0; i < ACPI_NUM_OSI_STRINGS; i++) {
+               if (!ACPI_STRCMP(string_desc->string.pointer,
+                                ACPI_CAST_PTR(char,
+                                              acpi_gbl_valid_osi_strings[i])))
+               {
+                       /* This string is supported */
 
-                       /* The interface is supported */
-
-                       return_ACPI_STATUS(AE_CTRL_TERMINATE);
+                       return_desc->integer.value = 0xFFFFFFFF;
+                       break;
                }
        }
 
-       /*
-        * Did not match the string in the static table, call the host OSL to
-        * check for a match with one of the optional strings (such as
-        * "Module Device", "3.0 Thermal Model", etc.)
-        */
-       status = acpi_os_validate_interface(string_desc->string.pointer);
-       if (ACPI_SUCCESS(status)) {
-
-               /* The interface is supported */
-
-               return_ACPI_STATUS(AE_CTRL_TERMINATE);
-       }
-
-       /* The interface is not supported */
-
-       return_desc->integer.value = 0;
+       walk_state->return_desc = return_desc;
        return_ACPI_STATUS(AE_CTRL_TERMINATE);
 }
 
@@ -181,26 +134,19 @@ acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node,
                        u32 expected_return_btypes,
                        union acpi_operand_object **return_desc)
 {
-       struct acpi_evaluate_info *info;
+       struct acpi_parameter_info info;
        acpi_status status;
        u32 return_btype;
 
-       ACPI_FUNCTION_TRACE(ut_evaluate_object);
+       ACPI_FUNCTION_TRACE("ut_evaluate_object");
 
-       /* Allocate the evaluation information block */
-
-       info = ACPI_ALLOCATE_ZEROED(sizeof(struct acpi_evaluate_info));
-       if (!info) {
-               return_ACPI_STATUS(AE_NO_MEMORY);
-       }
-
-       info->prefix_node = prefix_node;
-       info->pathname = path;
-       info->parameter_type = ACPI_PARAM_ARGS;
+       info.node = prefix_node;
+       info.parameters = NULL;
+       info.parameter_type = ACPI_PARAM_ARGS;
 
        /* Evaluate the object/method */
 
-       status = acpi_ns_evaluate(info);
+       status = acpi_ns_evaluate_relative(path, &info);
        if (ACPI_FAILURE(status)) {
                if (status == AE_NOT_FOUND) {
                        ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
@@ -212,25 +158,25 @@ acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node,
                                          prefix_node, path, status);
                }
 
-               goto cleanup;
+               return_ACPI_STATUS(status);
        }
 
        /* Did we get a return object? */
 
-       if (!info->return_object) {
+       if (!info.return_object) {
                if (expected_return_btypes) {
                        ACPI_ERROR_METHOD("No object was returned from",
                                          prefix_node, path, AE_NOT_EXIST);
 
-                       status = AE_NOT_EXIST;
+                       return_ACPI_STATUS(AE_NOT_EXIST);
                }
 
-               goto cleanup;
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* Map the return object type to the bitmapped type */
 
-       switch (ACPI_GET_OBJECT_TYPE(info->return_object)) {
+       switch (ACPI_GET_OBJECT_TYPE(info.return_object)) {
        case ACPI_TYPE_INTEGER:
                return_btype = ACPI_BTYPE_INTEGER;
                break;
@@ -258,8 +204,8 @@ acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node,
                 * happen frequently if the "implicit return" feature is enabled.
                 * Just delete the return object and return AE_OK.
                 */
-               acpi_ut_remove_reference(info->return_object);
-               goto cleanup;
+               acpi_ut_remove_reference(info.return_object);
+               return_ACPI_STATUS(AE_OK);
        }
 
        /* Is the return object one of the expected types? */
@@ -271,23 +217,19 @@ acpi_ut_evaluate_object(struct acpi_namespace_node *prefix_node,
                ACPI_ERROR((AE_INFO,
                            "Type returned from %s was incorrect: %s, expected Btypes: %X",
                            path,
-                           acpi_ut_get_object_type_name(info->return_object),
+                           acpi_ut_get_object_type_name(info.return_object),
                            expected_return_btypes));
 
                /* On error exit, we must delete the return object */
 
-               acpi_ut_remove_reference(info->return_object);
-               status = AE_TYPE;
-               goto cleanup;
+               acpi_ut_remove_reference(info.return_object);
+               return_ACPI_STATUS(AE_TYPE);
        }
 
        /* Object type is OK, return it */
 
-       *return_desc = info->return_object;
-
-      cleanup:
-       ACPI_FREE(info);
-       return_ACPI_STATUS(status);
+       *return_desc = info.return_object;
+       return_ACPI_STATUS(AE_OK);
 }
 
 /*******************************************************************************
@@ -315,7 +257,7 @@ acpi_ut_evaluate_numeric_object(char *object_name,
        union acpi_operand_object *obj_desc;
        acpi_status status;
 
-       ACPI_FUNCTION_TRACE(ut_evaluate_numeric_object);
+       ACPI_FUNCTION_TRACE("ut_evaluate_numeric_object");
 
        status = acpi_ut_evaluate_object(device_node, object_name,
                                         ACPI_BTYPE_INTEGER, &obj_desc);
@@ -391,7 +333,7 @@ acpi_ut_execute_HID(struct acpi_namespace_node *device_node,
        union acpi_operand_object *obj_desc;
        acpi_status status;
 
-       ACPI_FUNCTION_TRACE(ut_execute_HID);
+       ACPI_FUNCTION_TRACE("ut_execute_HID");
 
        status = acpi_ut_evaluate_object(device_node, METHOD_NAME__HID,
                                         ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING,
@@ -401,7 +343,6 @@ acpi_ut_execute_HID(struct acpi_namespace_node *device_node,
        }
 
        if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) {
-
                /* Convert the Numeric HID to string */
 
                acpi_ex_eisa_id_to_string((u32) obj_desc->integer.value,
@@ -495,7 +436,7 @@ acpi_ut_execute_CID(struct acpi_namespace_node * device_node,
        struct acpi_compatible_id_list *cid_list;
        acpi_native_uint i;
 
-       ACPI_FUNCTION_TRACE(ut_execute_CID);
+       ACPI_FUNCTION_TRACE("ut_execute_CID");
 
        /* Evaluate the _CID method for this device */
 
@@ -518,7 +459,7 @@ acpi_ut_execute_CID(struct acpi_namespace_node * device_node,
        size = (((count - 1) * sizeof(struct acpi_compatible_id)) +
                sizeof(struct acpi_compatible_id_list));
 
-       cid_list = ACPI_ALLOCATE_ZEROED((acpi_size) size);
+       cid_list = ACPI_MEM_CALLOCATE((acpi_size) size);
        if (!cid_list) {
                return_ACPI_STATUS(AE_NO_MEMORY);
        }
@@ -538,7 +479,6 @@ acpi_ut_execute_CID(struct acpi_namespace_node * device_node,
        /* The _CID object can be either a single CID or a package (list) of CIDs */
 
        if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_PACKAGE) {
-
                /* Translate each package element */
 
                for (i = 0; i < count; i++) {
@@ -559,7 +499,7 @@ acpi_ut_execute_CID(struct acpi_namespace_node * device_node,
        /* Cleanup on error */
 
        if (ACPI_FAILURE(status)) {
-               ACPI_FREE(cid_list);
+               ACPI_MEM_FREE(cid_list);
        } else {
                *return_cid_list = cid_list;
        }
@@ -593,7 +533,7 @@ acpi_ut_execute_UID(struct acpi_namespace_node *device_node,
        union acpi_operand_object *obj_desc;
        acpi_status status;
 
-       ACPI_FUNCTION_TRACE(ut_execute_UID);
+       ACPI_FUNCTION_TRACE("ut_execute_UID");
 
        status = acpi_ut_evaluate_object(device_node, METHOD_NAME__UID,
                                         ACPI_BTYPE_INTEGER | ACPI_BTYPE_STRING,
@@ -603,7 +543,6 @@ acpi_ut_execute_UID(struct acpi_namespace_node *device_node,
        }
 
        if (ACPI_GET_OBJECT_TYPE(obj_desc) == ACPI_TYPE_INTEGER) {
-
                /* Convert the Numeric UID to string */
 
                acpi_ex_unsigned_integer_to_string(obj_desc->integer.value,
@@ -643,7 +582,7 @@ acpi_ut_execute_STA(struct acpi_namespace_node *device_node, u32 * flags)
        union acpi_operand_object *obj_desc;
        acpi_status status;
 
-       ACPI_FUNCTION_TRACE(ut_execute_STA);
+       ACPI_FUNCTION_TRACE("ut_execute_STA");
 
        status = acpi_ut_evaluate_object(device_node, METHOD_NAME__STA,
                                         ACPI_BTYPE_INTEGER, &obj_desc);
@@ -693,7 +632,7 @@ acpi_ut_execute_sxds(struct acpi_namespace_node *device_node, u8 * highest)
        acpi_status status;
        u32 i;
 
-       ACPI_FUNCTION_TRACE(ut_execute_sxds);
+       ACPI_FUNCTION_TRACE("ut_execute_Sxds");
 
        for (i = 0; i < 4; i++) {
                highest[i] = 0xFF;