diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2012-05-31 00:20:55 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2012-06-02 20:06:18 -0400 |
commit | 59d6ca52a7eba5b1f4f2becf70fd446dccaf0a2e (patch) | |
tree | a90ca99b49e14bd73076a35183be1a14143534e6 /src/optionroms.c | |
parent | 51d6ba3e6fac2e78679145fe34f3861225670ae9 (diff) | |
download | seabios-59d6ca52a7eba5b1f4f2becf70fd446dccaf0a2e.tar.gz |
Cache romfile entries.
Create a 'struct romfile_s' and populate a list of all romfiles at
start of init. Caching the romfiles both simplifies the code and
makes it more efficient.
Also, convert the ramdisk code to use romfile helpers instead of
directly accessing cbfs.
Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'src/optionroms.c')
-rw-r--r-- | src/optionroms.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/optionroms.c b/src/optionroms.c index bd2f977b..00697b24 100644 --- a/src/optionroms.c +++ b/src/optionroms.c @@ -13,7 +13,6 @@ #include "pci_regs.h" // PCI_ROM_ADDRESS #include "pci_ids.h" // PCI_CLASS_DISPLAY_VGA #include "boot.h" // IPL -#include "paravirt.h" // qemu_cfg_* #include "optionroms.h" // struct rom_header @@ -151,7 +150,8 @@ getRomPriority(u64 *sources, struct rom_header *rom, int instance) return -1; if (source & RS_PCIROM) return bootprio_find_pci_rom((void*)(u32)source, instance); - return bootprio_find_named_rom(romfile_name(source), instance); + struct romfile_s *file = (void*)(u32)source; + return bootprio_find_named_rom(file->name, instance); } @@ -160,15 +160,15 @@ getRomPriority(u64 *sources, struct rom_header *rom, int instance) ****************************************************************/ static struct rom_header * -deploy_romfile(u32 file) +deploy_romfile(struct romfile_s *file) { - u32 size = romfile_size(file); + u32 size = file->size; struct rom_header *rom = rom_reserve(size); if (!rom) { warn_noalloc(); return NULL; } - int ret = romfile_copy(file, rom, size); + int ret = file->copy(file, rom, size); if (ret <= 0) return NULL; return rom; @@ -181,7 +181,7 @@ lookup_hardcode(struct pci_device *pci) char fname[17]; snprintf(fname, sizeof(fname), "pci%04x,%04x.rom" , pci->vendor, pci->device); - u32 file = romfile_find(fname); + struct romfile_s *file = romfile_find(fname); if (file) return deploy_romfile(file); return NULL; @@ -191,14 +191,14 @@ lookup_hardcode(struct pci_device *pci) static void run_file_roms(const char *prefix, int isvga, u64 *sources) { - u32 file = 0; + struct romfile_s *file = NULL; for (;;) { file = romfile_findprefix(prefix, file); if (!file) break; struct rom_header *rom = deploy_romfile(file); if (rom) { - setRomSource(sources, rom, file); + setRomSource(sources, rom, (u32)file); init_optionrom(rom, 0, isvga); } } |