[coreboot-gerrit] New patch to review for coreboot: acpigen: Add an abstracted integer output method

Duncan Laurie (dlaurie@google.com) gerrit at coreboot.org
Thu May 12 22:40:53 CEST 2016


Duncan Laurie (dlaurie at google.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/14794

-gerrit

commit 57691136397ecc34b4255e57b8bb88abdce4cd7b
Author: Duncan Laurie <dlaurie at chromium.org>
Date:   Mon May 9 08:20:38 2016 -0700

    acpigen: Add an abstracted integer output method
    
    In order to produce smaller AML and not rely on the caller to size the
    output type appropriately add a helper function that will output an
    appropriately sized integer.
    
    To complete this also add helper functions for outputting the single
    OpCode for Zero and One and Ones.
    
    And finally add "name" variants of the helpers that will output a
    complete sequence like "Name (_UID, Zero)".
    
    Change-Id: I7ee4bc0a6347d15b8d49df357845a8bc2e517407
    Signed-off-by: Duncan Laurie <dlaurie at chromium.org>
---
 src/arch/x86/acpigen.c              | 49 +++++++++++++++++++++++++++++++++++++
 src/arch/x86/include/arch/acpigen.h |  7 ++++++
 2 files changed, 56 insertions(+)

diff --git a/src/arch/x86/acpigen.c b/src/arch/x86/acpigen.c
index 3782982..ea09b5b 100644
--- a/src/arch/x86/acpigen.c
+++ b/src/arch/x86/acpigen.c
@@ -124,6 +124,49 @@ void acpigen_write_qword(uint64_t data)
 	acpigen_emit_dword((data >> 32) & 0xffffffff);
 }
 
+void acpigen_write_zero(void)
+{
+	acpigen_emit_byte(0x00);
+}
+
+void acpigen_write_one(void)
+{
+	acpigen_emit_byte(0x01);
+}
+
+void acpigen_write_ones(void)
+{
+	acpigen_emit_byte(0xff);
+}
+
+void acpigen_write_integer(uint64_t data)
+{
+	if (data == 0)
+		acpigen_write_zero();
+	else if (data == 1)
+		acpigen_write_one();
+	else if (data <= 0xff)
+		acpigen_write_byte((unsigned char)data);
+	else if (data <= 0xffff)
+		acpigen_write_word((unsigned int)data);
+	else if (data <= 0xffffffff)
+		acpigen_write_dword((unsigned int)data);
+	else
+		acpigen_write_qword(data);
+}
+
+void acpigen_write_name_zero(const char *name)
+{
+	acpigen_write_name(name);
+	acpigen_write_one();
+}
+
+void acpigen_write_name_one(const char *name)
+{
+	acpigen_write_name(name);
+	acpigen_write_zero();
+}
+
 void acpigen_write_name_byte(const char *name, uint8_t val)
 {
 	acpigen_write_name(name);
@@ -142,6 +185,12 @@ void acpigen_write_name_qword(const char *name, uint64_t val)
 	acpigen_write_qword(val);
 }
 
+void acpigen_write_name_integer(const char *name, uint64_t val)
+{
+	acpigen_write_name(name);
+	acpigen_write_integer(val);
+}
+
 void acpigen_write_name_string(const char *name, const char *string)
 {
 	if (string) {
diff --git a/src/arch/x86/include/arch/acpigen.h b/src/arch/x86/include/arch/acpigen.h
index f718f51..2555164 100644
--- a/src/arch/x86/include/arch/acpigen.h
+++ b/src/arch/x86/include/arch/acpigen.h
@@ -27,6 +27,9 @@ void acpigen_pop_len(void);
 void acpigen_set_current(char *curr);
 char *acpigen_get_current(void);
 void acpigen_write_package(int nr_el);
+void acpigen_write_zero(void);
+void acpigen_write_one(void);
+void acpigen_write_ones(void);
 void acpigen_write_byte(unsigned int data);
 void acpigen_emit_byte(unsigned char data);
 void acpigen_emit_word(unsigned int data);
@@ -38,12 +41,16 @@ void acpigen_emit_eisaid(const char *eisaid);
 void acpigen_write_word(unsigned int data);
 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(const char *name);
+void acpigen_write_name_zero(const char *name);
+void acpigen_write_name_one(const char *name);
 void acpigen_write_name_string(const char *name, const char *string);
 void acpigen_write_name_dword(const char *name, uint32_t val);
 void acpigen_write_name_qword(const char *name, uint64_t val);
 void acpigen_write_name_byte(const char *name, uint8_t val);
+void acpigen_write_name_integer(const char *name, uint64_t val);
 void acpigen_write_scope(const char *name);
 void acpigen_write_method(const char *name, int nargs);
 void acpigen_write_device(const char *name);



More information about the coreboot-gerrit mailing list