[coreboot] SeaBIOS and boot of SATA raid card
Rudolf Marek
r.marek at assembler.cz
Wed Dec 17 09:01:01 CET 2008
> The simple way to do this (reload the ebda_seg from the bda) on every
> access is going to lead to terrible code generation. It may be
> simpler to implement the Post Memory Manager (PMM) interface - in
> theory, an option rom shouldn't relocate the ebda if it can allocate
> memory via PMM. Another possibility would be to assign a segment to
> the current ebda location (eg, fs/gs) at every entry to the C code.
yes perhaps, because when PPM manager fails to provide memory, the option rom
will do the EBDA stuff anyway.
> Hrmm. I'm not sure what the following part of your patch does:
The option rom has either BEV OR BCV not both. BEV is for network card, just a
entrypoint. BCV will patch the int13 and add new device there.
>
>> @@ -341,13 +343,29 @@
>> callrom(rom, OPTION_ROM_INITVECTOR, 0);
>> continue;
>> }
>> - // PnP rom.
>> - if (pnp->bev)
>> - // Can boot system - add to IPL list.
>> - add_ipl(rom, pnp);
>> - else if (pnp->bcv)
>> - // Has BCV - run it now.
>> - callrom(rom, pnp->bcv, 0);
>> + /* rebuild the PNP block, init migh have change that */
>> + pnp = get_pnp_rom(rom);
>> +
>> + /* for further details check BIOS Boot Specification */
>> + while (pnp) {
>> + dprintf(1, "$PnP at %p\n",pnp);
>> +
>> + if ((pnp->bev) && (!pnp->bcv))
>> + add_ipl(rom, pnp, IPL_TYPE_BEV);
>> +
>> + if ((!pnp->bev) && (pnp->bcv)) {
>> + dprintf(1, "Running BCV %x\n",pnp->bcv);
>> + callrom(rom, pnp->bcv, 0);
>> + add_ipl(rom, pnp, pnp->type_lo);
the type_lo is not the boot type, Its a PCI type it seems so it then should be
HDD (this can fix the floppy item which is wrong)
>> + }
>> +
>> + if (pnp->nextoffset)
there can be more BEV/BCVs in the chain.
>> + pnp = (struct pnp_data *) (((u8 *) pnp) + pnp->nextoffset);
>> + else
>> + pnp = NULL;
>> + }
>> +
>> +
>> }
>> }
>>
Rudolf
More information about the coreboot
mailing list