vgabios: Check if mode is currently supported as vesa specifications

Vesa specification require that mode information return if a given
mode is supported or not so test if we can support it checking
required memory and set correctly supported bit.

Signed-off-by: Frediano Ziglio <frediano.ziglio@citrix.com>
Committed-by: Keir Fraser <keir@xen.org>
This commit is contained in:
Frediano Ziglio committed 2012-05-07 13:38:57 +01:00
1 parent 4da31be120
commit e7ee11ad72
1 file changed
+12
+12
View File
@@ -928,10 +928,22 @@ Bit16u *AX;Bit16u CX; Bit16u ES;Bit16u DI;
if (cur_info != 0)
{
Bit16u max_bpp = dispi_get_max_bpp();
Bit16u size_64k;
Bit16u totalMemory;
outw(VBE_DISPI_IOPORT_INDEX, VBE_DISPI_INDEX_VIDEO_MEMORY_64K);
totalMemory = inw(VBE_DISPI_IOPORT_DATA);
#ifdef DEBUG
printf("VBE found mode %x\n",CX);
#endif
memcpyb(ss, &info, 0xc000, &(cur_info->info), sizeof(ModeInfoBlockCompact));
size_64k = size64(info.XResolution, info.YResolution, info.BitsPerPixel);
if ((info.XResolution > dispi_get_max_xres()) ||
(info.BitsPerPixel > max_bpp) ||
(size_64k > totalMemory))
info.ModeAttributes &= ~VBE_MODE_ATTRIBUTE_SUPPORTED;
if (using_lfb) {
info.NumberOfBanks = 1;
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.