mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-30 07:34:12 +08: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
@ -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
|
||||
|
@ -376,6 +376,11 @@ acpi_status
|
||||
acpi_resource_to_address64(struct acpi_resource *resource,
|
||||
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
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user