]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
acpi: Support writing a string
authorSimon Glass <sjg@chromium.org>
Tue, 7 Jul 2020 19:11:53 +0000 (13:11 -0600)
committerBin Meng <bmeng.cn@gmail.com>
Fri, 17 Jul 2020 06:32:24 +0000 (14:32 +0800)
ACPI supports storing a simple null-terminated string. Add support for
this.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Wolfgang Wallner <wolfgang.wallner@br-automation.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
include/acpi/acpigen.h
lib/acpi/acpigen.c
test/dm/acpigen.c

index 9e52ec589f5fa66ef52f4e04c48730d577ef2ce6..14b96203a9d2f756be6e2a04c88efd60bf5cacc1 100644 (file)
@@ -24,6 +24,7 @@ enum {
        BYTE_PREFIX             = 0x0a,
        WORD_PREFIX             = 0x0b,
        DWORD_PREFIX            = 0x0c,
+       STRING_PREFIX           = 0x0d,
        QWORD_PREFIX            = 0x0e,
        PACKAGE_OP              = 0x12,
 };
@@ -155,4 +156,13 @@ char *acpigen_write_package(struct acpi_ctx *ctx, int nr_el);
  */
 void acpigen_write_integer(struct acpi_ctx *ctx, u64 data);
 
+/**
+ * acpigen_write_string() - Write a string
+ *
+ * This writes a STRING_PREFIX followed by a null-terminated string
+ *
+ * @ctx: ACPI context pointer
+ * @str: String to write
+ */
+void acpigen_write_string(struct acpi_ctx *ctx, const char *str);
 #endif
index 27d4eab7a60783d6b75d31ef42063ba085d6ecdc..b254ef6c9a9e8f836fe96f3da5f2c3e417c01f38 100644 (file)
@@ -147,3 +147,9 @@ void acpigen_emit_string(struct acpi_ctx *ctx, const char *str)
        acpigen_emit_stream(ctx, str, str ? strlen(str) : 0);
        acpigen_emit_byte(ctx, '\0');
 }
+
+void acpigen_write_string(struct acpi_ctx *ctx, const char *str)
+{
+       acpigen_emit_byte(ctx, STRING_PREFIX);
+       acpigen_emit_string(ctx, str);
+}
index 187001d2fcbcd0e1f0eb0b37317e610aa7a6e69a..c360f55dd3d0688b8db9848c31663ee1814778a5 100644 (file)
@@ -23,6 +23,7 @@
 #define ACPI_CONTEXT_SIZE      150
 
 #define TEST_STRING    "frogmore"
+#define TEST_STRING2   "ranch"
 #define TEST_STREAM2   "\xfa\xde"
 
 #define TEST_INT8      0x7d
@@ -477,3 +478,30 @@ static int dm_test_acpi_integer(struct unit_test_state *uts)
        return 0;
 }
 DM_TEST(dm_test_acpi_integer, 0);
+
+/* Test writing a string */
+static int dm_test_acpi_string(struct unit_test_state *uts)
+{
+       struct acpi_ctx *ctx;
+       u8 *ptr;
+
+       ut_assertok(alloc_context(&ctx));
+
+       ptr = acpigen_get_current(ctx);
+
+       acpigen_write_string(ctx, TEST_STRING);
+       acpigen_write_string(ctx, TEST_STRING2);
+
+       ut_asserteq(2 + sizeof(TEST_STRING) + sizeof(TEST_STRING2),
+                   acpigen_get_current(ctx) - ptr);
+       ut_asserteq(STRING_PREFIX, ptr[0]);
+       ut_asserteq_str(TEST_STRING, (char *)ptr + 1);
+       ptr += 1 + sizeof(TEST_STRING);
+       ut_asserteq(STRING_PREFIX, ptr[0]);
+       ut_asserteq_str(TEST_STRING2, (char *)ptr + 1);
+
+       free_context(&ctx);
+
+       return 0;
+}
+DM_TEST(dm_test_acpi_string, 0);