acpigen: Add function to generate unicode names
The ACPI spec 6.3 chapter 6.1.10 states that _STR has to return a buffer containing UTF-16 characters. Add function to generate Unicode names and use it for _STR. It will replace non-ASCII characters with '?'. Use the introduced function in IPMI driver. Fixes ACPI warning shown in fwts. Change-Id: I16992bd449e3a51f6a8875731cd45a9f43de5c8c Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/37789 Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Reviewed-by: Philipp Deppenwiese <zaolin.daisuki@gmail.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
2dd3b5c0f8
commit
389c827943
|
@ -199,6 +199,21 @@ void acpigen_write_name_string(const char *name, const char *string)
|
|||
acpigen_write_string(string);
|
||||
}
|
||||
|
||||
void acpigen_write_name_unicode(const char *name, const char *string)
|
||||
{
|
||||
const size_t len = strlen(string) + 1;
|
||||
acpigen_write_name(name);
|
||||
acpigen_emit_byte(BUFFER_OP);
|
||||
acpigen_write_len_f();
|
||||
acpigen_write_integer(len);
|
||||
for (size_t i = 0; i < len; i++) {
|
||||
const char c = string[i];
|
||||
/* Simple ASCII to UTF-16 conversion, replace non ASCII characters */
|
||||
acpigen_emit_word(c >= 0 ? c : '?');
|
||||
}
|
||||
acpigen_pop_len();
|
||||
}
|
||||
|
||||
void acpigen_emit_stream(const char *data, int size)
|
||||
{
|
||||
int i;
|
||||
|
|
|
@ -309,6 +309,7 @@ void acpigen_write_dword(unsigned int data);
|
|||
void acpigen_write_qword(uint64_t data);
|
||||
void acpigen_write_integer(uint64_t data);
|
||||
void acpigen_write_string(const char *string);
|
||||
void acpigen_write_name_unicode(const char *name, const char *string);
|
||||
void acpigen_write_name(const char *name);
|
||||
void acpigen_write_name_zero(const char *name);
|
||||
void acpigen_write_name_one(const char *name);
|
||||
|
|
|
@ -253,7 +253,7 @@ static void ipmi_ssdt(struct device *dev)
|
|||
acpigen_write_scope(scope);
|
||||
acpigen_write_device("SPMI");
|
||||
acpigen_write_name_string("_HID", "IPI0001");
|
||||
acpigen_write_name_string("_STR", "IPMI_KCS");
|
||||
acpigen_write_name_unicode("_STR", "IPMI_KCS");
|
||||
acpigen_write_name_byte("_UID", dev->command);
|
||||
acpigen_write_STA(0xf);
|
||||
acpigen_write_name("_CRS");
|
||||
|
|
Loading…
Reference in New Issue