[SeaBIOS] [PATCH] mark VBE mapping as reserved in e820

Carl-Daniel Hailfinger c-d.hailfinger.devel.2006 at gmx.net
Sun Jan 24 17:45:25 CET 2010

On 24.01.2010 17:16, Izik Eidus wrote:
> On Sun, 24 Jan 2010 17:10:46 +0100
> Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net> wrote:
>> On 24.01.2010 16:32, Izik Eidus wrote:
>>> On Sun, 24 Jan 2010 15:26:55 +0100
>>> Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net> wrote:
>>>>> So we can see that even the acpi spec example mark the LFB region as reserved.
>>>> No, the memory hole is marked as reserved. The LFB region is not listed
>>>> above.
>>> But how in case you use vesa with isa, windows will know it cant remap pci devices
>>> into that physical address?
>> ISA only supports 24 bit addresses anyway, so you can't map any resource
>> of an ISA card above 16 MByte. That means an ISA device will never use
>> the region at 0xE0000000.
>> http://www.microsoft.com/whdc/connect/pci/isa-bus.mspx implies that the
>> ISAPNP interface of the BIOS is available for querying any resources, so
>> in case you have an EISA device and if that device can indeed use full
>> 32 bit addressing (very unusual for EISA hardware) you can still ask the
>> BIOS to retrieve the location of any memory regions.
> we are talking here about the framebuffer of the vesa device,
> it is hardcoded mapped by the vgabios, for example
> qemu will map it to that address (or 0xf000000) if they changed it.

Earlier, you wrote "vesa with isa". If Qemu or the VGABIOS maps the vesa
framebuffer of an ISA device at any address above 16 MB, that is a bug
because it would be impossible on real hardware.

> It is sure being used by std vga when not working with pci.
> int isa_vga_init(void)
> {
>     VGACommonState *s;
>     s = qemu_mallocz(sizeof(*s));
>     vga_common_init(s, VGA_RAM_SIZE);
>     vga_init(s);
>     vmstate_register(0, &vmstate_vga_common, s);
>     s->ds = graphic_console_init(s->update, s->invalidate,
>                                  s->screen_dump, s->text_update, s);
>     /* XXX: use optimized standard vga accesses */
>     cpu_register_physical_memory(VBE_DISPI_LFB_PHYSICAL_ADDRESS,
>                                  VGA_RAM_SIZE, s->vram_offset);

That looks like a bug. If you're talking about an ISA device, the LFB
must be smaller than 16 MB and its upper end must be at 16 MB or below.
If you only allow power-of-two sizes, the maximum LFB size is 8 MB
located at 8 MB. (LFB size of 16 MB is not allowed because it would mean
the lowest 640 kB are part of the LFB.)
If the device is EISA (instead of ISA) it can work, but I think you need
the full PNPBIOS extensions for it to work (AFAIK isapnptools have
readable docs/code and could help to find out what is needed).

> #endif
>     /* ROM BIOS */
>     rom_add_vga(VGABIOS_FILENAME);
>     return 0;
> }

Thanks for quoting that code.


Developer quote of the year:
"We are juggling too many chainsaws and flaming arrows and tigers."

More information about the SeaBIOS mailing list