From b1e756451c59b342a9d15433379bf543ddedd56b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= Date: Wed, 25 Mar 2015 13:36:52 +0200 Subject: [PATCH] intel_bios_reader: Read the child device size from VBT MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New stuff has been added to the end of the child device block at various times, so using a hardcoded size for the block is a bad idea. Fortunately the size of the block is listed in the VBT just before the blocks themselves, so grab it from there. Signed-off-by: Ville Syrjälä --- tools/intel_bios.h | 2 +- tools/intel_bios_reader.c | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/tools/intel_bios.h b/tools/intel_bios.h index aedc5fcb..64e723d4 100644 --- a/tools/intel_bios.h +++ b/tools/intel_bios.h @@ -269,7 +269,7 @@ struct bdb_general_definitions { * TV and LVDS are missing, so be careful when interpreting * [4] and [5]. */ - struct child_device_config devices[0]; + uint8_t devices[0]; /* may be another device block here on some platforms */ } __attribute__ ((packed)); diff --git a/tools/intel_bios_reader.c b/tools/intel_bios_reader.c index 02390956..a5412f5a 100644 --- a/tools/intel_bios_reader.c +++ b/tools/intel_bios_reader.c @@ -341,7 +341,6 @@ static void dump_child_device(struct child_device_config *child) static void dump_general_definitions(const struct bdb_block *block) { struct bdb_general_definitions *defs = block->data; - struct child_device_config *child; int i; int child_device_num; @@ -354,9 +353,11 @@ static void dump_general_definitions(const struct bdb_block *block) printf("\tBoot display type: 0x%02x%02x\n", defs->boot_display[1], defs->boot_display[0]); printf("\tTV data block present: %s\n", YESNO(tv_present)); - child_device_num = (block->size - sizeof(*defs)) / sizeof(*child); + printf("\tChild device size: %d\n", defs->child_dev_size); + child_device_num = (block->size - sizeof(*defs)) / + defs->child_dev_size; for (i = 0; i < child_device_num; i++) - dump_child_device(&defs->devices[i]); + dump_child_device((void*)&defs->devices[i * defs->child_dev_size]); } static void dump_child_devices(const struct bdb_block *block)