These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / acpi / acpica / nsxfname.c
index d66c326..4b4d2f4 100644 (file)
@@ -114,7 +114,7 @@ acpi_get_handle(acpi_handle parent,
 
                /* Special case for root-only, since we can't search for it */
 
-               if (!ACPI_STRCMP(pathname, ACPI_NS_ROOT_PATH)) {
+               if (!strcmp(pathname, ACPI_NS_ROOT_PATH)) {
                        *ret_handle =
                            ACPI_CAST_PTR(acpi_handle, acpi_gbl_root_node);
                        return (AE_OK);
@@ -172,11 +172,15 @@ acpi_get_name(acpi_handle handle, u32 name_type, struct acpi_buffer * buffer)
                return (status);
        }
 
-       if (name_type == ACPI_FULL_PATHNAME) {
+       if (name_type == ACPI_FULL_PATHNAME ||
+           name_type == ACPI_FULL_PATHNAME_NO_TRAILING) {
 
                /* Get the full pathname (From the namespace root) */
 
-               status = acpi_ns_handle_to_pathname(handle, buffer);
+               status = acpi_ns_handle_to_pathname(handle, buffer,
+                                                   name_type ==
+                                                   ACPI_FULL_PATHNAME ? FALSE :
+                                                   TRUE);
                return (status);
        }
 
@@ -242,7 +246,7 @@ static char *acpi_ns_copy_device_id(struct acpi_pnp_device_id *dest,
 
        /* Copy actual string and return a pointer to the next string area */
 
-       ACPI_MEMCPY(string_area, source->string, source->length);
+       memcpy(string_area, source->string, source->length);
        return (string_area + source->length);
 }
 
@@ -260,7 +264,7 @@ static char *acpi_ns_copy_device_id(struct acpi_pnp_device_id *dest,
  *              control methods (Such as in the case of a device.)
  *
  * For Device and Processor objects, run the Device _HID, _UID, _CID, _SUB,
- * _STA, _ADR, _sx_w, and _sx_d methods.
+ * _CLS, _STA, _ADR, _sx_w, and _sx_d methods.
  *
  * Note: Allocates the return buffer, must be freed by the caller.
  *
@@ -276,11 +280,12 @@ acpi_get_object_info(acpi_handle handle,
        struct acpi_pnp_device_id *hid = NULL;
        struct acpi_pnp_device_id *uid = NULL;
        struct acpi_pnp_device_id *sub = NULL;
+       struct acpi_pnp_device_id *cls = NULL;
        char *next_id_string;
        acpi_object_type type;
        acpi_name name;
        u8 param_count = 0;
-       u8 valid = 0;
+       u16 valid = 0;
        u32 info_size;
        u32 i;
        acpi_status status;
@@ -320,7 +325,7 @@ acpi_get_object_info(acpi_handle handle,
        if ((type == ACPI_TYPE_DEVICE) || (type == ACPI_TYPE_PROCESSOR)) {
                /*
                 * Get extra info for ACPI Device/Processor objects only:
-                * Run the Device _HID, _UID, _SUB, and _CID methods.
+                * Run the Device _HID, _UID, _SUB, _CID, and _CLS methods.
                 *
                 * Note: none of these methods are required, so they may or may
                 * not be present for this device. The Info->Valid bitfield is used
@@ -363,6 +368,14 @@ acpi_get_object_info(acpi_handle handle,
                             sizeof(struct acpi_pnp_device_id_list));
                        valid |= ACPI_VALID_CID;
                }
+
+               /* Execute the Device._CLS method */
+
+               status = acpi_ut_execute_CLS(node, &cls);
+               if (ACPI_SUCCESS(status)) {
+                       info_size += cls->length;
+                       valid |= ACPI_VALID_CLS;
+               }
        }
 
        /*
@@ -486,6 +499,11 @@ acpi_get_object_info(acpi_handle handle,
                }
        }
 
+       if (cls) {
+               next_id_string = acpi_ns_copy_device_id(&info->class_code,
+                                                       cls, next_id_string);
+       }
+
        /* Copy the fixed-length data */
 
        info->info_size = info_size;
@@ -510,6 +528,9 @@ cleanup:
        if (cid_list) {
                ACPI_FREE(cid_list);
        }
+       if (cls) {
+               ACPI_FREE(cls);
+       }
        return (status);
 }
 
@@ -620,7 +641,7 @@ acpi_status acpi_install_method(u8 *buffer)
 
        /* Copy the method AML to the local buffer */
 
-       ACPI_MEMCPY(aml_buffer, aml_start, aml_length);
+       memcpy(aml_buffer, aml_start, aml_length);
 
        /* Initialize the method object with the new method's information */