diff --git a/src/arch/x86/boot/acpigen.c b/src/arch/x86/boot/acpigen.c index 222a2db284..0689273b0a 100644 --- a/src/arch/x86/boot/acpigen.c +++ b/src/arch/x86/boot/acpigen.c @@ -57,6 +57,19 @@ void acpigen_patch_len(int len) } +void acpigen_pop_len(void) +{ + int len; + ASSERT(ltop > 0) + char *p = len_stack[--ltop]; + len = gencurrent - p; + ASSERT(len <= ACPIGEN_MAXLEN) + /* generate store length for 0xfff max */ + p[0] = (0x40 | (len & 0xf)); + p[1] = (len >> 4 & 0xff); + +} + void acpigen_set_current(char *curr) { gencurrent = curr; diff --git a/src/arch/x86/include/arch/acpigen.h b/src/arch/x86/include/arch/acpigen.h index 3217dbeca3..d9df5d016a 100644 --- a/src/arch/x86/include/arch/acpigen.h +++ b/src/arch/x86/include/arch/acpigen.h @@ -27,6 +27,7 @@ int acpigen_write_len_f(void); void acpigen_patch_len(int len); +void acpigen_pop_len(void); void acpigen_set_current(char *curr); char *acpigen_get_current(void); int acpigen_write_package(int nr_el);