mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-11-01 17:08:10 +00:00
ACPI 5.0: New interface, acpi_buffer_to_resource
This interface converts an AML buffer to an internal ACPI_RESOURCE. Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Lin Ming <ming.m.lin@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
parent
a91cdde20a
commit
0e24317804
2 changed files with 69 additions and 0 deletions
|
@ -49,6 +49,70 @@
|
||||||
#define _COMPONENT ACPI_RESOURCES
|
#define _COMPONENT ACPI_RESOURCES
|
||||||
ACPI_MODULE_NAME("rscreate")
|
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
|
* FUNCTION: acpi_rs_create_resource_list
|
||||||
|
|
|
@ -376,6 +376,11 @@ acpi_status
|
||||||
acpi_resource_to_address64(struct acpi_resource *resource,
|
acpi_resource_to_address64(struct acpi_resource *resource,
|
||||||
struct acpi_resource_address64 *out);
|
struct acpi_resource_address64 *out);
|
||||||
|
|
||||||
|
acpi_status
|
||||||
|
acpi_buffer_to_resource(u8 *aml_buffer,
|
||||||
|
u16 aml_buffer_length,
|
||||||
|
struct acpi_resource **resource_ptr);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Hardware (ACPI device) interfaces
|
* Hardware (ACPI device) interfaces
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in a new issue