diff options
-rw-r--r-- | xen/arch/x86/boot/video.S | 3 | ||||
-rw-r--r-- | xen/arch/x86/setup.c | 3 | ||||
-rw-r--r-- | xen/drivers/video/vesa.c | 2 | ||||
-rw-r--r-- | xen/include/public/xen-compat.h | 2 | ||||
-rw-r--r-- | xen/include/public/xen.h | 6 |
5 files changed, 14 insertions, 2 deletions
diff --git a/xen/arch/x86/boot/video.S b/xen/arch/x86/boot/video.S index 1e3c034234..d27fb12330 100644 --- a/xen/arch/x86/boot/video.S +++ b/xen/arch/x86/boot/video.S @@ -44,6 +44,7 @@ #define PARAM_LFB_COLORS 0x1c #define PARAM_VESAPM_SEG 0x24 #define PARAM_VESAPM_OFF 0x26 +#define PARAM_VESA_ATTRIB 0x28 #define _param(param) bootsym(boot_vid_info)+(param) video: xorw %ax, %ax @@ -129,6 +130,8 @@ mopar_gr: movl %eax, _param(PARAM_LFB_COLORS) movl 35(%di), %eax movl %eax, _param(PARAM_LFB_COLORS+4) + movw 0(%di), %ax + movw %ax, _param(PARAM_VESA_ATTRIB) # get video mem size leaw vesa_glob_info, %di diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c index d58642bbba..f1f161597c 100644 --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -308,6 +308,7 @@ struct boot_video_info { u8 rsvd_pos; /* 0x23 */ u16 vesapm_seg; /* 0x24 */ u16 vesapm_off; /* 0x26 */ + u16 vesa_attrib; /* 0x28 */ }; static void __init parse_video_info(void) @@ -340,6 +341,8 @@ static void __init parse_video_info(void) vga_console_info.u.vesa_lfb.blue_size = bvi->blue_size; vga_console_info.u.vesa_lfb.rsvd_pos = bvi->rsvd_pos; vga_console_info.u.vesa_lfb.rsvd_size = bvi->rsvd_size; + vga_console_info.u.vesa_lfb.gbl_caps = bvi->capabilities; + vga_console_info.u.vesa_lfb.mode_attrs = bvi->vesa_attrib; } } diff --git a/xen/drivers/video/vesa.c b/xen/drivers/video/vesa.c index 8f5b5c690b..04064f786d 100644 --- a/xen/drivers/video/vesa.c +++ b/xen/drivers/video/vesa.c @@ -46,7 +46,7 @@ void __init vesa_early_init(void) { unsigned int vram_vmode; - /* XXX vga_compat = !(boot_video_info.capabilities & 2); */ + vga_compat = !(vesa_lfb_info.capabilities & 2); if ( (vlfb_info.bits_per_pixel < 8) || (vlfb_info.bits_per_pixel > 32) ) return; diff --git a/xen/include/public/xen-compat.h b/xen/include/public/xen-compat.h index 19b0a2c733..77ca51af1a 100644 --- a/xen/include/public/xen-compat.h +++ b/xen/include/public/xen-compat.h @@ -27,7 +27,7 @@ #ifndef __XEN_PUBLIC_XEN_COMPAT_H__ #define __XEN_PUBLIC_XEN_COMPAT_H__ -#define __XEN_LATEST_INTERFACE_VERSION__ 0x00030205 +#define __XEN_LATEST_INTERFACE_VERSION__ 0x00030206 #if defined(__XEN__) || defined(__XEN_TOOLS__) /* Xen is built with matching headers and implements the latest interface. */ diff --git a/xen/include/public/xen.h b/xen/include/public/xen.h index 3a06ebfe21..991128f0ee 100644 --- a/xen/include/public/xen.h +++ b/xen/include/public/xen.h @@ -565,6 +565,12 @@ typedef struct dom0_vga_console_info { uint8_t green_pos, green_size; uint8_t blue_pos, blue_size; uint8_t rsvd_pos, rsvd_size; +#if __XEN_INTERFACE_VERSION__ >= 0x00030206 + /* VESA capabilities (offset 0xa, VESA command 0x4f00). */ + uint32_t gbl_caps; + /* Mode attributes (offset 0x0, VESA command 0x4f01). */ + uint16_t mode_attrs; +#endif } vesa_lfb; } u; } dom0_vga_console_info_t; |