use fw_cfg_read_entry Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
diff --git a/fw_cfg.c b/fw_cfg.c index f8aea5a..85a2639 100644 --- a/fw_cfg.c +++ b/fw_cfg.c
@@ -73,8 +73,7 @@ fw_cfg_select(FW_CFG_KERNEL_ADDR); kernel_addr = (void *) fw_cfg_readl_le(); - fw_cfg_select(FW_CFG_KERNEL_DATA); - fw_cfg_read(kernel_addr, sz); + fw_cfg_read_entry(FW_CFG_KERNEL_DATA, kernel_addr, sz); fw_cfg_select(FW_CFG_INITRD_SIZE); sz = fw_cfg_readl_le(); @@ -83,8 +82,7 @@ fw_cfg_select(FW_CFG_INITRD_ADDR); mb = (struct mb_info *) fw_cfg_readl_le(); - fw_cfg_select(FW_CFG_INITRD_DATA); - fw_cfg_read(mb, sz); + fw_cfg_read_entry(FW_CFG_INITRD_DATA, mb, sz); mb->mem_lower = 639; mb->mem_upper = (lowmem - 1048576) >> 10; @@ -145,14 +143,12 @@ args.setup_size - sizeof(args.header)); fw_cfg_select(FW_CFG_KERNEL_DATA); - fw_cfg_read(args.kernel_addr, kernel_size); + fw_cfg_read_entry(FW_CFG_KERNEL_DATA, args.kernel_addr, kernel_size); - fw_cfg_select(FW_CFG_CMDLINE_DATA); - fw_cfg_read(args.cmdline_addr, args.cmdline_size); + fw_cfg_read_entry(FW_CFG_CMDLINE_DATA, args.cmdline_addr, args.cmdline_size); if (args.initrd_size) { - fw_cfg_select(FW_CFG_INITRD_DATA); - fw_cfg_read(args.initrd_addr, args.initrd_size); + fw_cfg_read_entry(FW_CFG_INITRD_DATA, args.initrd_addr, args.initrd_size); } boot_bzimage(&args);
diff --git a/include/fw_cfg.h b/include/fw_cfg.h index 48234f5..46fa869 100644 --- a/include/fw_cfg.h +++ b/include/fw_cfg.h
@@ -103,7 +103,7 @@ } static inline void -fw_cfg_read_entry(void *buf, int e, int len) +fw_cfg_read_entry(int e, void *buf, int len) { fw_cfg_select(e); fw_cfg_read(buf, len); @@ -114,4 +114,11 @@ uint32_t fw_cfg_file_size(int id); void fw_cfg_file_select(int id); +static inline void +fw_cfg_read_file(int id, void *buf, int len) +{ + fw_cfg_file_select(id); + fw_cfg_read(buf, len); +} + #endif
diff --git a/main.c b/main.c index b376c0d..1913b37 100644 --- a/main.c +++ b/main.c
@@ -43,7 +43,6 @@ size = fw_cfg_file_size(id); nr_map = size / sizeof(e820->map[0]) + 4; - fw_cfg_file_select(id); e820 = malloc(offsetof(struct e820map, map[nr_map])); e820->nr_map = nr_map; @@ -55,7 +54,7 @@ { .addr = 0xd0000, .size = 128 * 1024, .type = E820_NVS }; /* ACPI tables */ e820->map[3] = (struct e820entry) { .addr = 0xf0000, .size = 64 * 1024, .type = E820_RESERVED }; /* firmware */ - fw_cfg_read(&e820->map[4], size); + fw_cfg_read_file(id, &e820->map[4], size); for (i = 4; i < e820->nr_map; i++) if (e820->map[i].addr == 0) { lowmem = e820->map[i].size;
diff --git a/tables.c b/tables.c index 3f59b3e..bb533b6 100644 --- a/tables.c +++ b/tables.c
@@ -68,8 +68,7 @@ p = (char *)((uintptr_t)(p + align - 1) & -align); set_file_addr(id, p); - fw_cfg_file_select(id); - fw_cfg_read(p, n); + fw_cfg_read_file(id, p, n); } static void do_ptr(char *dest, char *src, uint32_t offset, uint8_t size) @@ -135,8 +134,7 @@ if (!n) return; - fw_cfg_file_select(id); - fw_cfg_read(script, n); + fw_cfg_read_file(id, script, n); for (i = 0; i < ARRAY_SIZE(script); i++) { struct loader_cmd *s = &script[i];