ACPICA: Return object repair: Add string-to-unicode conversion
Used for the _STR and _MLS predefined names. Lv Zheng. Signed-off-by: Lv Zheng <lv.zheng@intel.com> Signed-off-by: Bob Moore <robert.moore@intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
76a6225bf0
commit
96b44cc684
|
@ -181,6 +181,10 @@ acpi_status
|
|||
acpi_ns_convert_to_buffer(union acpi_operand_object *original_object,
|
||||
union acpi_operand_object **return_object);
|
||||
|
||||
acpi_status
|
||||
acpi_ns_convert_to_unicode(union acpi_operand_object *original_object,
|
||||
union acpi_operand_object **return_object);
|
||||
|
||||
/*
|
||||
* nsdump - Namespace dump/print utilities
|
||||
*/
|
||||
|
|
|
@ -300,3 +300,67 @@ acpi_ns_convert_to_buffer(union acpi_operand_object *original_object,
|
|||
*return_object = new_object;
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: acpi_ns_convert_to_unicode
|
||||
*
|
||||
* PARAMETERS: original_object - ASCII String Object to be converted
|
||||
* return_object - Where the new converted object is returned
|
||||
*
|
||||
* RETURN: Status. AE_OK if conversion was successful.
|
||||
*
|
||||
* DESCRIPTION: Attempt to convert a String object to a Unicode string Buffer.
|
||||
*
|
||||
******************************************************************************/
|
||||
|
||||
acpi_status
|
||||
acpi_ns_convert_to_unicode(union acpi_operand_object *original_object,
|
||||
union acpi_operand_object **return_object)
|
||||
{
|
||||
union acpi_operand_object *new_object;
|
||||
char *ascii_string;
|
||||
u16 *unicode_buffer;
|
||||
u32 unicode_length;
|
||||
u32 i;
|
||||
|
||||
if (!original_object) {
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
/* If a Buffer was returned, it must be at least two bytes long */
|
||||
|
||||
if (original_object->common.type == ACPI_TYPE_BUFFER) {
|
||||
if (original_object->buffer.length < 2) {
|
||||
return (AE_AML_OPERAND_VALUE);
|
||||
}
|
||||
|
||||
*return_object = NULL;
|
||||
return (AE_OK);
|
||||
}
|
||||
|
||||
/*
|
||||
* The original object is an ASCII string. Convert this string to
|
||||
* a unicode buffer.
|
||||
*/
|
||||
ascii_string = original_object->string.pointer;
|
||||
unicode_length = (original_object->string.length * 2) + 2;
|
||||
|
||||
/* Create a new buffer object for the Unicode data */
|
||||
|
||||
new_object = acpi_ut_create_buffer_object(unicode_length);
|
||||
if (!new_object) {
|
||||
return (AE_NO_MEMORY);
|
||||
}
|
||||
|
||||
unicode_buffer = ACPI_CAST_PTR(u16, new_object->buffer.pointer);
|
||||
|
||||
/* Convert ASCII to Unicode */
|
||||
|
||||
for (i = 0; i < original_object->string.length; i++) {
|
||||
unicode_buffer[i] = (u16)ascii_string[i];
|
||||
}
|
||||
|
||||
*return_object = new_object;
|
||||
return (AE_OK);
|
||||
}
|
||||
|
|
|
@ -98,6 +98,13 @@ static const struct acpi_simple_repair_info *acpi_ns_match_simple_repair(struct
|
|||
* 2nd argument: Unexpected types that can be repaired
|
||||
*/
|
||||
static const struct acpi_simple_repair_info acpi_object_repair_info[] = {
|
||||
/* Unicode conversions */
|
||||
|
||||
{"_MLS", ACPI_RTYPE_STRING, 1,
|
||||
acpi_ns_convert_to_unicode},
|
||||
{"_STR", ACPI_RTYPE_STRING | ACPI_RTYPE_BUFFER,
|
||||
ACPI_NOT_PACKAGE_ELEMENT,
|
||||
acpi_ns_convert_to_unicode},
|
||||
{{0, 0, 0, 0}, 0, 0, NULL} /* Table terminator */
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user