On Thu, Dec 23, 2010 at 11:29:41AM +0200, Gleb Natapov wrote:
At the time of bev/bcv initialization the device rom was loaded from is no longer know. Only memory address where rom resides is know at this point. This patch create mapping between boot priority and rom address at rom initialization time for use during bev/bcv init.
Signed-off-by: Gleb Natapov gleb@redhat.com
I find this patch confusing. How about the patch below instead?
-Kevin
diff --git a/src/optionroms.c b/src/optionroms.c index 854c33f..579fdd8 100644 --- a/src/optionroms.c +++ b/src/optionroms.c @@ -195,13 +195,17 @@ copy_rom(struct rom_header *rom) return (void*)RomEnd; }
+static u8 RomPriority[(BUILD_BIOS_ADDR - BUILD_ROM_START) / OPTION_ROM_ALIGN]; + // Run rom init code and note rom size. static int -init_optionrom(struct rom_header *rom, u16 bdf, int isvga) +init_optionrom(struct rom_header *rom, u16 bdf, int isvga, u8 prio) { if (! is_valid_rom(rom)) return -1;
+ RomPriority[((u32)rom - BUILD_ROM_START) / OPTION_ROM_ALIGN] = prio; + if (isvga || get_pnp_rom(rom)) // Only init vga and PnP roms here. callrom(rom, bdf); @@ -249,7 +253,7 @@ run_file_roms(const char *prefix, int isvga) break; int ret = romfile_copy(file, (void*)RomEnd, max_rom() - RomEnd); if (ret > 0) - init_optionrom((void*)RomEnd, 0, isvga); + init_optionrom((void*)RomEnd, 0, isvga, -1); } }
@@ -342,7 +346,7 @@ init_pcirom(u16 bdf, int isvga) if (! rom) // No ROM present. return -1; - return init_optionrom(rom, bdf, isvga); + return init_optionrom(rom, bdf, isvga, -1); }
@@ -364,7 +368,7 @@ optionrom_setup(void) // Option roms are already deployed on the system. u32 pos = RomEnd; while (pos < max_rom()) { - int ret = init_optionrom((void*)pos, 0, 0); + int ret = init_optionrom((void*)pos, 0, 0, -1); if (ret) pos += OPTION_ROM_ALIGN; else @@ -430,7 +434,7 @@ vga_setup(void)
if (CONFIG_OPTIONROMS_DEPLOYED) { // Option roms are already deployed on the system. - init_optionrom((void*)BUILD_ROM_START, 0, 1); + init_optionrom((void*)BUILD_ROM_START, 0, 1, -1); } else { // Clear option rom memory memset((void*)RomEnd, 0, _max_rom() - RomEnd);