Patrick Rudolph has uploaded this change for review.

View Change

acpigen: Add function to generate unicode names

Add function to generate Unicode names and use if for _STR.
The ACPI spec requires _STR to return a buffer containing UTF-16
characters.

Use the introduced function in IPMI driver.

Change-Id: I16992bd449e3a51f6a8875731cd45a9f43de5c8c
Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
---
M src/arch/x86/acpigen.c
M src/arch/x86/include/arch/acpigen.h
M src/drivers/ipmi/ipmi_kcs_ops.c
3 files changed, 17 insertions(+), 1 deletion(-)

git pull ssh://review.coreboot.org:29418/coreboot refs/changes/89/37789/1
diff --git a/src/arch/x86/acpigen.c b/src/arch/x86/acpigen.c
index cc724a0..15c58bd 100644
--- a/src/arch/x86/acpigen.c
+++ b/src/arch/x86/acpigen.c
@@ -199,6 +199,21 @@
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 */
+ acpigen_emit_word(c >= 0 ? c : '?');
+ }
+ acpigen_pop_len();
+}
+
void acpigen_emit_stream(const char *data, int size)
{
int i;
diff --git a/src/arch/x86/include/arch/acpigen.h b/src/arch/x86/include/arch/acpigen.h
index 8b8c873..f74c30f 100644
--- a/src/arch/x86/include/arch/acpigen.h
+++ b/src/arch/x86/include/arch/acpigen.h
@@ -310,6 +310,7 @@
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);
diff --git a/src/drivers/ipmi/ipmi_kcs_ops.c b/src/drivers/ipmi/ipmi_kcs_ops.c
index 5cb8995..e0fa1b0 100644
--- a/src/drivers/ipmi/ipmi_kcs_ops.c
+++ b/src/drivers/ipmi/ipmi_kcs_ops.c
@@ -253,7 +253,7 @@
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");

To view, visit change 37789. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I16992bd449e3a51f6a8875731cd45a9f43de5c8c
Gerrit-Change-Number: 37789
Gerrit-PatchSet: 1
Gerrit-Owner: Patrick Rudolph <patrick.rudolph@9elements.com>
Gerrit-MessageType: newchange