]> xenbits.xensource.com Git - seabios.git/commitdiff
Support skipping content when reading from QEMU fw_cfg romfile entries.
authorKevin O'Connor <kevin@koconnor.net>
Sat, 9 Feb 2013 19:55:30 +0000 (14:55 -0500)
committerKevin O'Connor <kevin@koconnor.net>
Wed, 13 Feb 2013 02:21:28 +0000 (21:21 -0500)
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
src/coreboot.c
src/paravirt.c
src/romfile.c

index 39699077752d7b7d8bd948ffcdd8491b99dc1c52..c0c6653d1dfce994c5aebb10d63bc33447766908 100644 (file)
@@ -354,7 +354,6 @@ coreboot_cbfs_init(void)
         }
         memset(file, 0, sizeof(*file));
         strtcpy(file->name, cfile->filename, sizeof(file->name));
-        dprintf(3, "Found CBFS file: %s\n", file->name);
         file->size = file->rawsize = be32_to_cpu(cfile->len);
         file->id = (u32)cfile;
         file->copy = cbfs_copyfile;
index cc6409412710f2d4fae461f0be5eee8ac1e45882..0d1fb358d44b9bc756dbeab3ef3add4bbdb7fa85 100644 (file)
@@ -133,7 +133,7 @@ qemu_cfg_select(u16 f)
 }
 
 static void
-qemu_cfg_read(u8 *buf, int len)
+qemu_cfg_read(void *buf, int len)
 {
     insb(PORT_QEMU_CFG_DATA, buf, len);
 }
@@ -416,14 +416,34 @@ u16 qemu_cfg_get_max_cpus(void)
     return cnt;
 }
 
-int qemu_cfg_read_file(struct romfile_s *file, void *dst, u32 maxlen)
+static int
+qemu_cfg_read_file(struct romfile_s *file, void *dst, u32 maxlen)
 {
     if (file->size > maxlen)
         return -1;
-    qemu_cfg_read_entry(dst, file->id, file->size);
+    qemu_cfg_select(file->id);
+    qemu_cfg_skip(file->rawsize);
+    qemu_cfg_read(dst, file->size);
     return file->size;
 }
 
+static void
+qemu_romfile_add(char *name, int select, int skip, int size)
+{
+    struct romfile_s *file = malloc_tmp(sizeof(*file));
+    if (!file) {
+        warn_noalloc();
+        return;
+    }
+    memset(file, 0, sizeof(*file));
+    strtcpy(file->name, name, sizeof(file->name));
+    file->id = select;
+    file->rawsize = skip; // Use rawsize to indicate skip length.
+    file->size = size;
+    file->copy = qemu_cfg_read_file;
+    romfile_add(file);
+}
+
 struct QemuCfgFile {
     u32  size;        /* file size */
     u16  select;      /* write this to 0x510 to read it */
@@ -442,18 +462,8 @@ void qemu_romfile_init(void)
     u32 e;
     for (e = 0; e < count; e++) {
         struct QemuCfgFile qfile;
-        qemu_cfg_read((void*)&qfile, sizeof(qfile));
-        struct romfile_s *file = malloc_tmp(sizeof(*file));
-        if (!file) {
-            warn_noalloc();
-            return;
-        }
-        memset(file, 0, sizeof(*file));
-        strtcpy(file->name, qfile.name, sizeof(file->name));
-        file->size = be32_to_cpu(qfile.size);
-        file->id = be16_to_cpu(qfile.select);
-        file->copy = qemu_cfg_read_file;
-        romfile_add(file);
-        dprintf(3, "Found fw_cfg file: %s (size=%d)\n", file->name, file->size);
+        qemu_cfg_read(&qfile, sizeof(qfile));
+        qemu_romfile_add(qfile.name, be16_to_cpu(qfile.select)
+                         , 0, be32_to_cpu(qfile.size));
     }
 }
index b732e29804714397b1494e936175e4a27e93c71b..93ee3d6defbc969375615ee1efd5554b6206b5a5 100644 (file)
@@ -12,6 +12,7 @@ static struct romfile_s *RomfileRoot;
 void
 romfile_add(struct romfile_s *file)
 {
+    dprintf(3, "Add romfile: %s (size=%d)\n", file->name, file->size);
     file->next = RomfileRoot;
     RomfileRoot = file;
 }