From 96dbb2c0a24fdc6bbe4d8d834f0b879e01fdcae3 Mon Sep 17 00:00:00 2001 From: Paolo Bonzini Date: Tue, 6 Sep 2016 14:44:22 +0200 Subject: use fw_cfg_read_entry Signed-off-by: Paolo Bonzini --- fw_cfg.c | 14 +++++--------- include/fw_cfg.h | 9 ++++++++- main.c | 3 +-- tables.c | 6 ++---- 4 files changed, 16 insertions(+), 16 deletions(-) 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 @@ static void boot_multiboot_from_fw_cfg(void) 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 @@ static void boot_multiboot_from_fw_cfg(void) 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 @@ void boot_from_fwcfg(void) 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_skip(int len) } 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 @@ int fw_cfg_file_id(char *name); 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 @@ static void extract_e820(void) 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 @@ static void extract_e820(void) { .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 @@ static void do_alloc(char *file, uint32_t align, uint8_t zone) 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 @@ void extract_acpi(void) 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]; -- cgit v1.1