From 9acc1e8dfcf43d238354db61576efce6697d081a Mon Sep 17 00:00:00 2001 From: Vladimir Serbinenko Date: Sun, 9 Nov 2014 03:37:28 +0100 Subject: acpigen: Use implicit length patching in acpigen_write_resourcetemplate_footer Change-Id: Ic177720b074fed13a17454dcb6765ac298365624 Signed-off-by: Vladimir Serbinenko Reviewed-on: http://review.coreboot.org/7366 Reviewed-by: Paul Menzel Tested-by: build bot (Jenkins) Reviewed-by: Edward O'Callaghan --- src/arch/x86/boot/acpigen.c | 22 +++++++++++++--------- src/arch/x86/include/arch/acpigen.h | 2 +- src/drivers/lenovo/wacom.c | 18 ++++++++---------- 3 files changed, 22 insertions(+), 20 deletions(-) (limited to 'src') 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 * 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); -- cgit v1.2.3