aboutsummaryrefslogtreecommitdiffstats
path: root/src/optionroms.c
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2012-05-31 00:20:55 -0400
committerKevin O'Connor <kevin@koconnor.net>2012-06-02 20:06:18 -0400
commit59d6ca52a7eba5b1f4f2becf70fd446dccaf0a2e (patch)
treea90ca99b49e14bd73076a35183be1a14143534e6 /src/optionroms.c
parent51d6ba3e6fac2e78679145fe34f3861225670ae9 (diff)
downloadseabios-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.c16
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);
}
}