|
@@ -49,6 +49,70 @@
|
|
|
#define _COMPONENT ACPI_RESOURCES
|
|
|
ACPI_MODULE_NAME("rscreate")
|
|
|
|
|
|
+/*******************************************************************************
|
|
|
+ *
|
|
|
+ * FUNCTION: acpi_buffer_to_resource
|
|
|
+ *
|
|
|
+ * PARAMETERS: aml_buffer - Pointer to the resource byte stream
|
|
|
+ * aml_buffer_length - Length of the aml_buffer
|
|
|
+ * resource_ptr - Where the converted resource is returned
|
|
|
+ *
|
|
|
+ * RETURN: Status
|
|
|
+ *
|
|
|
+ * DESCRIPTION: Convert a raw AML buffer to a resource list
|
|
|
+ *
|
|
|
+ ******************************************************************************/
|
|
|
+acpi_status
|
|
|
+acpi_buffer_to_resource(u8 *aml_buffer,
|
|
|
+ u16 aml_buffer_length,
|
|
|
+ struct acpi_resource **resource_ptr)
|
|
|
+{
|
|
|
+ acpi_status status;
|
|
|
+ acpi_size list_size_needed;
|
|
|
+ void *resource;
|
|
|
+ void *current_resource_ptr;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Note: we allow AE_AML_NO_RESOURCE_END_TAG, since an end tag
|
|
|
+ * is not required here.
|
|
|
+ */
|
|
|
+
|
|
|
+ /* Get the required length for the converted resource */
|
|
|
+
|
|
|
+ status = acpi_rs_get_list_length(aml_buffer, aml_buffer_length,
|
|
|
+ &list_size_needed);
|
|
|
+ if (status == AE_AML_NO_RESOURCE_END_TAG) {
|
|
|
+ status = AE_OK;
|
|
|
+ }
|
|
|
+ if (ACPI_FAILURE(status)) {
|
|
|
+ return (status);
|
|
|
+ }
|
|
|
+
|
|
|
+ /* Allocate a buffer for the converted resource */
|
|
|
+
|
|
|
+ resource = ACPI_ALLOCATE_ZEROED(list_size_needed);
|
|
|
+ current_resource_ptr = resource;
|
|
|
+ if (!resource) {
|
|
|
+ return (AE_NO_MEMORY);
|
|
|
+ }
|
|
|
+
|
|
|
+ /* Perform the AML-to-Resource conversion */
|
|
|
+
|
|
|
+ status = acpi_ut_walk_aml_resources(aml_buffer, aml_buffer_length,
|
|
|
+ acpi_rs_convert_aml_to_resources,
|
|
|
+ ¤t_resource_ptr);
|
|
|
+ if (status == AE_AML_NO_RESOURCE_END_TAG) {
|
|
|
+ status = AE_OK;
|
|
|
+ }
|
|
|
+ if (ACPI_FAILURE(status)) {
|
|
|
+ ACPI_FREE(resource);
|
|
|
+ } else {
|
|
|
+ *resource_ptr = resource;
|
|
|
+ }
|
|
|
+
|
|
|
+ return (status);
|
|
|
+}
|
|
|
+
|
|
|
/*******************************************************************************
|
|
|
*
|
|
|
* FUNCTION: acpi_rs_create_resource_list
|