Merge tag 'ecryptfs-3.6-rc1-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git...
[cascardo/linux.git] / drivers / acpi / utils.c
index adbbc1c..3e87c9c 100644 (file)
@@ -412,3 +412,45 @@ out:
        return status;
 }
 EXPORT_SYMBOL(acpi_get_physical_device_location);
+
+/**
+ * acpi_evaluate_hotplug_ost: Evaluate _OST for hotplug operations
+ * @handle: ACPI device handle
+ * @source_event: source event code
+ * @status_code: status code
+ * @status_buf: optional detailed information (NULL if none)
+ *
+ * Evaluate _OST for hotplug operations. All ACPI hotplug handlers
+ * must call this function when evaluating _OST for hotplug operations.
+ * When the platform does not support _OST, this function has no effect.
+ */
+acpi_status
+acpi_evaluate_hotplug_ost(acpi_handle handle, u32 source_event,
+               u32 status_code, struct acpi_buffer *status_buf)
+{
+#ifdef ACPI_HOTPLUG_OST
+       union acpi_object params[3] = {
+               {.type = ACPI_TYPE_INTEGER,},
+               {.type = ACPI_TYPE_INTEGER,},
+               {.type = ACPI_TYPE_BUFFER,}
+       };
+       struct acpi_object_list arg_list = {3, params};
+       acpi_status status;
+
+       params[0].integer.value = source_event;
+       params[1].integer.value = status_code;
+       if (status_buf != NULL) {
+               params[2].buffer.pointer = status_buf->pointer;
+               params[2].buffer.length = status_buf->length;
+       } else {
+               params[2].buffer.pointer = NULL;
+               params[2].buffer.length = 0;
+       }
+
+       status = acpi_evaluate_object(handle, "_OST", &arg_list, NULL);
+       return status;
+#else
+       return AE_OK;
+#endif
+}
+EXPORT_SYMBOL(acpi_evaluate_hotplug_ost);