From: Kevin O'Connor Date: Tue, 4 Sep 2012 17:16:36 +0000 (-0400) Subject: vgabios: Check for relocatable windows before advertising support for it. X-Git-Tag: rel-1.7.2~66 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=49ddd9ebbebab5a9f2e40f63755c66747a175257;p=seabios.git vgabios: Check for relocatable windows before advertising support for it. Use the VBE_win_granularity field to determine if the memory windows are relocatable. (Bochs and Cirrus vga support relocatable windows while the standard vga controller does not.) Signed-off-by: Kevin O'Connor --- diff --git a/vgasrc/bochsvga.c b/vgasrc/bochsvga.c index 2a8aeb1..938dba0 100644 --- a/vgasrc/bochsvga.c +++ b/vgasrc/bochsvga.c @@ -364,6 +364,7 @@ bochsvga_init(void) SET_VGA(VBE_framebuffer, lfb_addr); u32 totalmem = dispi_read(VBE_DISPI_INDEX_VIDEO_MEMORY_64K) * 64 * 1024; SET_VGA(VBE_total_memory, totalmem); + SET_VGA(VBE_win_granularity, 64); SET_VGA(VBE_capabilities, VBE_CAPABILITY_8BIT_DAC); dprintf(1, "VBE DISPI: lfb_addr=%x, size %d MB\n", diff --git a/vgasrc/vbe.c b/vgasrc/vbe.c index 01c8071..f44231b 100644 --- a/vgasrc/vbe.c +++ b/vgasrc/vbe.c @@ -17,7 +17,7 @@ u32 VBE_total_memory VAR16 = 256 * 1024; u32 VBE_capabilities VAR16; u32 VBE_framebuffer VAR16; -u16 VBE_win_granularity VAR16 = 64; +u16 VBE_win_granularity VAR16; static void vbe_104f00(struct bregs *regs) @@ -91,12 +91,13 @@ vbe_104f01(struct bregs *regs) if (framebuffer) mode_attr |= VBE_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER_MODE; SET_FARVAR(seg, info->mode_attributes, mode_attr); + u32 win_granularity = GET_GLOBAL(VBE_win_granularity); SET_FARVAR(seg, info->winA_attributes, - VBE_WINDOW_ATTRIBUTE_RELOCATABLE | + (win_granularity ? VBE_WINDOW_ATTRIBUTE_RELOCATABLE : 0) | VBE_WINDOW_ATTRIBUTE_READABLE | VBE_WINDOW_ATTRIBUTE_WRITEABLE); SET_FARVAR(seg, info->winB_attributes, 0); - SET_FARVAR(seg, info->win_granularity, GET_GLOBAL(VBE_win_granularity)); + SET_FARVAR(seg, info->win_granularity, win_granularity); SET_FARVAR(seg, info->win_size, 64); /* Bank size 64K */ SET_FARVAR(seg, info->winA_seg, GET_GLOBAL(vmode_g->sstart)); SET_FARVAR(seg, info->winB_seg, 0x0);