attached. ron
Some changes for option roms: - don't make users pick the name. Names for option roms are in the v3-defined format of pci%04x,%04x.rom with the vendor and device id filling in the %04x. - users pass in vendor and device id. - users pass in a dest. If the dest is 0, the address of the ROM image in FLASH is returned. If the address is non-zero, then the decmpressor is called, and it will make sure the ROM image is copied to the destination (even in the uncompressed case).
Signed-off-by: Ronald G. Minnich <[email protected]> Index: src/lib/romfs.c =================================================================== --- src/lib/romfs.c (revision 4043) +++ src/lib/romfs.c (working copy) @@ -130,17 +130,34 @@ return (void *) ROMFS_SUBHEADER(file); } -int romfs_load_optionrom(const char *name, u32 dest) +void *romfs_load_optionrom(u16 vendor, u16 device, u32 dest) { - struct romfs_optionrom *orom = (struct romfs_optionrom *) + char name[17]; + struct romfs_optionrom *orom; + u8 *src; + + sprintf(name,"pci%04x,%04x.rom", vendor, device); + + orom = (struct romfs_optionrom *) romfs_find_file(name, ROMFS_TYPE_OPTIONROM); if (orom == NULL) - return -1; + return NULL; + /* They might have specified a dest address. If so, we can decompress. + * If not, there's not much hope of decompressing or relocating the rom. + * in the common case, the expansion rom is uncompressed, we + * pass 0 in for the dest, and all we have to do is find the rom and + * return a pointer to it. + */ + + src = ((unsigned char *) orom) + sizeof(struct romfs_optionrom); + + if (! dest) + return src; + if (romfs_decompress(ntohl(orom->compression), - ((unsigned char *) orom) + - sizeof(struct romfs_optionrom), + (void *) src, (void *) dest, ntohl(orom->len))) return -1;
-- coreboot mailing list: [email protected] http://www.coreboot.org/mailman/listinfo/coreboot

