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 | |
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>
-rw-r--r-- | src/arch/x86/boot/acpigen.c | 22 | ||||
-rw-r--r-- | src/arch/x86/include/arch/acpigen.h | 2 | ||||
-rw-r--r-- | src/drivers/lenovo/wacom.c | 18 |
3 files changed, 22 insertions, 20 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); diff --git a/src/drivers/lenovo/wacom.c b/src/drivers/lenovo/wacom.c index ce49535cc3..7368afe416 100644 --- a/src/drivers/lenovo/wacom.c +++ b/src/drivers/lenovo/wacom.c @@ -93,8 +93,6 @@ void drivers_lenovo_serial_ports_ssdt_generate(const char *scope, int have_dock_serial) { - int reslen; - acpigen_write_scope(scope); if (drivers_lenovo_is_wacom_present()) { @@ -105,11 +103,11 @@ drivers_lenovo_serial_ports_ssdt_generate(const char *scope, acpigen_write_name("_CRS"); - reslen = acpigen_write_resourcetemplate_header(); - reslen += acpigen_write_io16(0x200, 0x200, 1, 8, 1); - reslen += acpigen_write_irq((1 << 5)); + acpigen_write_resourcetemplate_header(); + acpigen_write_io16(0x200, 0x200, 1, 8, 1); + acpigen_write_irq((1 << 5)); - acpigen_write_resourcetemplate_footer(reslen); + acpigen_write_resourcetemplate_footer(); acpigen_write_method("_STA", 0); /* return */ @@ -131,11 +129,11 @@ drivers_lenovo_serial_ports_ssdt_generate(const char *scope, acpigen_write_name("_CRS"); - reslen = acpigen_write_resourcetemplate_header(); - reslen += acpigen_write_io16(0x3f8, 0x3f8, 1, 8, 1); - reslen += acpigen_write_irq(1 << 4); + acpigen_write_resourcetemplate_header(); + acpigen_write_io16(0x3f8, 0x3f8, 1, 8, 1); + acpigen_write_irq(1 << 4); - acpigen_write_resourcetemplate_footer(reslen); + acpigen_write_resourcetemplate_footer(); /* method op */ acpigen_write_method("_STA", 0); |