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];