76 lines
2.0 KiB
Diff
76 lines
2.0 KiB
Diff
|
# HG changeset patch
|
||
|
# User Andrew Cooper <andrew.cooper3@citrix.com>
|
||
|
# Date 1327758145 0
|
||
|
# Node ID ac9f32525376922fdf5b9efac7a1fe0ff866cc76
|
||
|
# Parent f8c2cf24a26cc6cdaaad9140e4b1dfc54f07bab3
|
||
|
vesa: flush lfb after zeroing
|
||
|
|
||
|
If Xen is going to relinquish the VGA console, flush the linear frame
|
||
|
buffer after zeroing it in vesa_endboot().
|
||
|
|
||
|
Failing to do so in some circumstances leads to the actual linear
|
||
|
framebuffer on the graphics card still containing the output of the
|
||
|
Xen boot console can lead to ugly graphics output when dom0 is setting
|
||
|
up the graphics card for its own use.
|
||
|
|
||
|
While the patch is quite large, it is mostly just code motion to
|
||
|
prevent having to forward declare lfb_flush(). The only functional
|
||
|
change to vesa_endboot() is to insert a call to lbf_flush().
|
||
|
|
||
|
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
|
||
|
Committed-by: Keir Fraser <keir@xen.org>
|
||
|
|
||
|
--- a/xen/drivers/video/vesa.c
|
||
|
+++ b/xen/drivers/video/vesa.c
|
||
|
@@ -153,24 +153,6 @@ void __init vesa_init(void)
|
||
|
xfree(line_len);
|
||
|
}
|
||
|
|
||
|
-void __init vesa_endboot(bool_t keep)
|
||
|
-{
|
||
|
- if ( keep )
|
||
|
- {
|
||
|
- xpos = 0;
|
||
|
- vga_puts = vesa_scroll_puts;
|
||
|
- }
|
||
|
- else
|
||
|
- {
|
||
|
- unsigned int i, bpp = (vlfb_info.bits_per_pixel + 7) >> 3;
|
||
|
- for ( i = 0; i < vlfb_info.height; i++ )
|
||
|
- memset(lfb + i * vlfb_info.bytes_per_line, 0,
|
||
|
- vlfb_info.width * bpp);
|
||
|
- }
|
||
|
-
|
||
|
- xfree(line_len);
|
||
|
-}
|
||
|
-
|
||
|
#if defined(CONFIG_X86)
|
||
|
|
||
|
#include <asm/mtrr.h>
|
||
|
@@ -217,6 +199,25 @@ static void lfb_flush(void)
|
||
|
|
||
|
#endif
|
||
|
|
||
|
+void __init vesa_endboot(bool_t keep)
|
||
|
+{
|
||
|
+ if ( keep )
|
||
|
+ {
|
||
|
+ xpos = 0;
|
||
|
+ vga_puts = vesa_scroll_puts;
|
||
|
+ }
|
||
|
+ else
|
||
|
+ {
|
||
|
+ unsigned int i, bpp = (vlfb_info.bits_per_pixel + 7) >> 3;
|
||
|
+ for ( i = 0; i < vlfb_info.height; i++ )
|
||
|
+ memset(lfb + i * vlfb_info.bytes_per_line, 0,
|
||
|
+ vlfb_info.width * bpp);
|
||
|
+ lfb_flush();
|
||
|
+ }
|
||
|
+
|
||
|
+ xfree(line_len);
|
||
|
+}
|
||
|
+
|
||
|
/* Render one line of text to given linear framebuffer line. */
|
||
|
static void vesa_show_line(
|
||
|
const unsigned char *text_line,
|