diff options
author | Vladimir Serbinenko <phcoder@gmail.com> | 2014-11-09 03:37:28 +0100 |
---|---|---|
committer | Vladimir Serbinenko <phcoder@gmail.com> | 2014-11-19 20:56:59 +0100 |
commit | 9acc1e8dfcf43d238354db61576efce6697d081a (patch) | |
tree | 11e424c5c4c3cf2e423b4de2c3fb01e182896fa5 /src/arch/x86 | |
parent | 663be6e9f2773c98c9850b7e2797490b5f6caf8b (diff) | |
download | coreboot-9acc1e8dfcf43d238354db61576efce6697d081a.tar.xz |
acpigen: Use implicit length patching in acpigen_write_resourcetemplate_footer
Change-Id: Ic177720b074fed13a17454dcb6765ac298365624
Signed-off-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-on: http://review.coreboot.org/7366
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Tested-by: build bot (Jenkins)
Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
Diffstat (limited to 'src/arch/x86')
-rw-r--r-- | src/arch/x86/boot/acpigen.c | 22 | ||||
-rw-r--r-- | src/arch/x86/include/arch/acpigen.h | 2 |
2 files changed, 14 insertions, 10 deletions
diff --git a/src/arch/x86/boot/acpigen.c b/src/arch/x86/boot/acpigen.c index f714d5985b..cc9f9abc48 100644 --- a/src/arch/x86/boot/acpigen.c +++ b/src/arch/x86/boot/acpigen.c @@ -382,13 +382,13 @@ int acpigen_write_empty_PTC(void) /* ControlRegister */ rlen = acpigen_write_resourcetemplate_header(); rlen += acpigen_write_register(&addr); - len += acpigen_write_resourcetemplate_footer(rlen); + len += acpigen_write_resourcetemplate_footer(); len += rlen; /* StatusRegister */ rlen = acpigen_write_resourcetemplate_header(); rlen += acpigen_write_register(&addr); - len += acpigen_write_resourcetemplate_footer(rlen); + len += acpigen_write_resourcetemplate_footer(); len += rlen; acpigen_patch_len(len - 1); @@ -535,7 +535,7 @@ int acpigen_write_CST_package_entry(acpi_cstate_t *cstate) acpigen_write_register(&cstate->resource); end = acpigen_get_current(); len += end - start; - len += acpigen_write_resourcetemplate_footer(len); + len += acpigen_write_resourcetemplate_footer(); len += len0; len += acpigen_write_dword(cstate->ctype); len += acpigen_write_dword(cstate->latency); @@ -713,20 +713,24 @@ int acpigen_write_resourcetemplate_header(void) return len; } -int acpigen_write_resourcetemplate_footer(int len) +int acpigen_write_resourcetemplate_footer(void) { char *p = len_stack[--ltop]; + int len; /* * end tag (acpi 4.0 Section 6.4.2.8) * 0x79 <checksum> * 0x00 is treated as a good checksum according to the spec * and is what iasl generates. */ - len += acpigen_emit_byte(0x79); - len += acpigen_emit_byte(0x00); + acpigen_emit_byte(0x79); + acpigen_emit_byte(0x00); + + len = gencurrent - p; + /* patch len word */ - p[0] = (len-6) & 0xff; - p[1] = ((len-6) >> 8) & 0xff; + p[0] = len & 0xff; + p[1] = (len >> 8) & 0xff; /* patch len field */ acpigen_patch_len(len-1); return 2; @@ -773,7 +777,7 @@ int acpigen_write_mainboard_resource_template(void) end = acpigen_get_current(); len += end-start; - len += acpigen_write_resourcetemplate_footer(len); + len += acpigen_write_resourcetemplate_footer(); return len; } diff --git a/src/arch/x86/include/arch/acpigen.h b/src/arch/x86/include/arch/acpigen.h index e07a0f5c22..64f496910b 100644 --- a/src/arch/x86/include/arch/acpigen.h +++ b/src/arch/x86/include/arch/acpigen.h @@ -63,7 +63,7 @@ int acpigen_write_mem32fixed(int readwrite, u32 base, u32 size); int acpigen_write_io16(u16 min, u16 max, u8 align, u8 len, u8 decode16); int acpigen_write_register(acpi_addr_t *addr); int acpigen_write_resourcetemplate_header(void); -int acpigen_write_resourcetemplate_footer(int len); +int acpigen_write_resourcetemplate_footer(void); int acpigen_write_mainboard_resource_template(void); int acpigen_write_mainboard_resources(const char *scope, const char *name); int acpigen_write_irq(u16 mask); |