[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH for-xen-4.5 v4 15/18] x86: move video data to boot_info
Signed-off-by: Daniel Kiper <daniel.kiper@xxxxxxxxxx> --- xen/arch/x86/boot_info.c | 78 ++++++++++++++++++++++++++++++ xen/arch/x86/efi/efi-boot.h | 74 ++++++++++++++--------------- xen/arch/x86/platform_hypercall.c | 9 ++-- xen/arch/x86/setup.c | 94 +++++-------------------------------- xen/common/efi/runtime.c | 6 +++ xen/drivers/video/vesa.c | 7 +-- xen/drivers/video/vga.c | 18 ++++--- xen/include/asm-x86/boot_info.h | 8 ++++ xen/include/asm-x86/config.h | 2 - xen/include/xen/vga.h | 18 ------- 10 files changed, 157 insertions(+), 157 deletions(-) delete mode 100644 xen/include/xen/vga.h diff --git a/xen/arch/x86/boot_info.c b/xen/arch/x86/boot_info.c index c1a4977..5f990e1 100644 --- a/xen/arch/x86/boot_info.c +++ b/xen/arch/x86/boot_info.c @@ -33,11 +33,46 @@ #include <asm/page.h> #include <asm/setup.h> +struct boot_video_info { + u8 orig_x; /* 0x00 */ + u8 orig_y; /* 0x01 */ + u8 orig_video_mode; /* 0x02 */ + u8 orig_video_cols; /* 0x03 */ + u8 orig_video_lines; /* 0x04 */ + u8 orig_video_isVGA; /* 0x05 */ + u16 orig_video_points; /* 0x06 */ + + /* VESA graphic mode -- linear frame buffer */ + u32 capabilities; /* 0x08 */ + u16 lfb_linelength; /* 0x0c */ + u16 lfb_width; /* 0x0e */ + u16 lfb_height; /* 0x10 */ + u16 lfb_depth; /* 0x12 */ + u32 lfb_base; /* 0x14 */ + u32 lfb_size; /* 0x18 */ + u8 red_size; /* 0x1c */ + u8 red_pos; /* 0x1d */ + u8 green_size; /* 0x1e */ + u8 green_pos; /* 0x1f */ + u8 blue_size; /* 0x20 */ + u8 blue_pos; /* 0x21 */ + u8 rsvd_size; /* 0x22 */ + u8 rsvd_pos; /* 0x23 */ + u16 vesapm_seg; /* 0x24 */ + u16 vesapm_off; /* 0x26 */ + u16 vesa_attrib; /* 0x28 */ +}; + /* These symbols live in the boot trampoline. Access via bootsym(). */ extern struct e820entry e820map[]; extern unsigned int e820nr; extern unsigned int lowmem_kb, highmem_kb; +extern struct boot_video_info boot_vid_info; + +extern unsigned short boot_edid_caps; +extern unsigned char boot_edid_info[128]; + static boot_info_t __read_mostly boot_info_mb = { .boot_loader_name = "UNKNOWN", .cmdline = NULL, @@ -52,6 +87,9 @@ static boot_info_t __read_mostly boot_info_mb = { .acpi = EFI_INVALID_TABLE_ADDR, .acpi20 = EFI_INVALID_TABLE_ADDR, .smbios = EFI_INVALID_TABLE_ADDR, + .vga_console_info = {}, + .edid_caps = 0, + .edid_info = NULL, .mods_nr = 0, .mods = NULL, .warn_msg = NULL, @@ -138,6 +176,44 @@ static void __init init_mmap(boot_info_t *boot_info, mbd_t *mbd) boot_info->e820map = e820_raw; } +static void __init init_video_info(boot_info_t *boot_info) +{ + struct boot_video_info *bvi = &bootsym(boot_vid_info); + + if ( (bvi->orig_video_isVGA == 1) && (bvi->orig_video_mode == 3) ) + { + boot_info->vga_console_info.video_type = XEN_VGATYPE_TEXT_MODE_3; + boot_info->vga_console_info.u.text_mode_3.font_height = bvi->orig_video_points; + boot_info->vga_console_info.u.text_mode_3.cursor_x = bvi->orig_x; + boot_info->vga_console_info.u.text_mode_3.cursor_y = bvi->orig_y; + boot_info->vga_console_info.u.text_mode_3.rows = bvi->orig_video_lines; + boot_info->vga_console_info.u.text_mode_3.columns = bvi->orig_video_cols; + } + else if ( bvi->orig_video_isVGA == 0x23 ) + { + boot_info->vga_console_info.video_type = XEN_VGATYPE_VESA_LFB; + boot_info->vga_console_info.u.vesa_lfb.width = bvi->lfb_width; + boot_info->vga_console_info.u.vesa_lfb.height = bvi->lfb_height; + boot_info->vga_console_info.u.vesa_lfb.bytes_per_line = bvi->lfb_linelength; + boot_info->vga_console_info.u.vesa_lfb.bits_per_pixel = bvi->lfb_depth; + boot_info->vga_console_info.u.vesa_lfb.lfb_base = bvi->lfb_base; + boot_info->vga_console_info.u.vesa_lfb.lfb_size = bvi->lfb_size; + boot_info->vga_console_info.u.vesa_lfb.red_pos = bvi->red_pos; + boot_info->vga_console_info.u.vesa_lfb.red_size = bvi->red_size; + boot_info->vga_console_info.u.vesa_lfb.green_pos = bvi->green_pos; + boot_info->vga_console_info.u.vesa_lfb.green_size = bvi->green_size; + boot_info->vga_console_info.u.vesa_lfb.blue_pos = bvi->blue_pos; + boot_info->vga_console_info.u.vesa_lfb.blue_size = bvi->blue_size; + boot_info->vga_console_info.u.vesa_lfb.rsvd_pos = bvi->rsvd_pos; + boot_info->vga_console_info.u.vesa_lfb.rsvd_size = bvi->rsvd_size; + boot_info->vga_console_info.u.vesa_lfb.gbl_caps = bvi->capabilities; + boot_info->vga_console_info.u.vesa_lfb.mode_attrs = bvi->vesa_attrib; + } + + boot_info->edid_caps = bootsym(boot_edid_caps); + boot_info->edid_info = bootsym(boot_edid_info); +} + boot_info_t __init *__init_boot_info(u32 mbd_pa) { mbd_t *mbd = __va(mbd_pa); @@ -155,6 +231,8 @@ boot_info_t __init *__init_boot_info(u32 mbd_pa) if ( boot_info_mb.err_msg ) goto err; + init_video_info(&boot_info_mb); + boot_info_mb.mods_nr = mbd->mods_nr; boot_info_mb.mods = __va(mbd->mods); diff --git a/xen/arch/x86/efi/efi-boot.h b/xen/arch/x86/efi/efi-boot.h index d8b30c1..8ee3e93 100644 --- a/xen/arch/x86/efi/efi-boot.h +++ b/xen/arch/x86/efi/efi-boot.h @@ -3,7 +3,7 @@ * is intended to be included by common/efi/boot.c _only_, and * therefore can define arch specific global variables. */ -#include <xen/vga.h> +#include <xen/video.h> #include <asm/e820.h> #include <asm/edd.h> #include <asm/msr.h> @@ -454,10 +454,10 @@ static void __init efi_arch_edd(void) static void __init efi_arch_console_init(UINTN cols, UINTN rows) { - vga_console_info.video_type = XEN_VGATYPE_TEXT_MODE_3; - vga_console_info.u.text_mode_3.columns = cols; - vga_console_info.u.text_mode_3.rows = rows; - vga_console_info.u.text_mode_3.font_height = 16; + boot_info_efi.vga_console_info.video_type = XEN_VGATYPE_TEXT_MODE_3; + boot_info_efi.vga_console_info.u.text_mode_3.columns = cols; + boot_info_efi.vga_console_info.u.text_mode_3.rows = rows; + boot_info_efi.vga_console_info.u.text_mode_3.font_height = 16; } static void __init efi_arch_video_init(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop, @@ -469,40 +469,40 @@ static void __init efi_arch_video_init(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop, switch ( mode_info->PixelFormat ) { case PixelRedGreenBlueReserved8BitPerColor: - vga_console_info.u.vesa_lfb.red_pos = 0; - vga_console_info.u.vesa_lfb.red_size = 8; - vga_console_info.u.vesa_lfb.green_pos = 8; - vga_console_info.u.vesa_lfb.green_size = 8; - vga_console_info.u.vesa_lfb.blue_pos = 16; - vga_console_info.u.vesa_lfb.blue_size = 8; - vga_console_info.u.vesa_lfb.rsvd_pos = 24; - vga_console_info.u.vesa_lfb.rsvd_size = 8; + boot_info_efi.vga_console_info.u.vesa_lfb.red_pos = 0; + boot_info_efi.vga_console_info.u.vesa_lfb.red_size = 8; + boot_info_efi.vga_console_info.u.vesa_lfb.green_pos = 8; + boot_info_efi.vga_console_info.u.vesa_lfb.green_size = 8; + boot_info_efi.vga_console_info.u.vesa_lfb.blue_pos = 16; + boot_info_efi.vga_console_info.u.vesa_lfb.blue_size = 8; + boot_info_efi.vga_console_info.u.vesa_lfb.rsvd_pos = 24; + boot_info_efi.vga_console_info.u.vesa_lfb.rsvd_size = 8; bpp = 32; break; case PixelBlueGreenRedReserved8BitPerColor: - vga_console_info.u.vesa_lfb.red_pos = 16; - vga_console_info.u.vesa_lfb.red_size = 8; - vga_console_info.u.vesa_lfb.green_pos = 8; - vga_console_info.u.vesa_lfb.green_size = 8; - vga_console_info.u.vesa_lfb.blue_pos = 0; - vga_console_info.u.vesa_lfb.blue_size = 8; - vga_console_info.u.vesa_lfb.rsvd_pos = 24; - vga_console_info.u.vesa_lfb.rsvd_size = 8; + boot_info_efi.vga_console_info.u.vesa_lfb.red_pos = 16; + boot_info_efi.vga_console_info.u.vesa_lfb.red_size = 8; + boot_info_efi.vga_console_info.u.vesa_lfb.green_pos = 8; + boot_info_efi.vga_console_info.u.vesa_lfb.green_size = 8; + boot_info_efi.vga_console_info.u.vesa_lfb.blue_pos = 0; + boot_info_efi.vga_console_info.u.vesa_lfb.blue_size = 8; + boot_info_efi.vga_console_info.u.vesa_lfb.rsvd_pos = 24; + boot_info_efi.vga_console_info.u.vesa_lfb.rsvd_size = 8; bpp = 32; break; case PixelBitMask: bpp = set_color(mode_info->PixelInformation.RedMask, bpp, - &vga_console_info.u.vesa_lfb.red_pos, - &vga_console_info.u.vesa_lfb.red_size); + &boot_info_efi.vga_console_info.u.vesa_lfb.red_pos, + &boot_info_efi.vga_console_info.u.vesa_lfb.red_size); bpp = set_color(mode_info->PixelInformation.GreenMask, bpp, - &vga_console_info.u.vesa_lfb.green_pos, - &vga_console_info.u.vesa_lfb.green_size); + &boot_info_efi.vga_console_info.u.vesa_lfb.green_pos, + &boot_info_efi.vga_console_info.u.vesa_lfb.green_size); bpp = set_color(mode_info->PixelInformation.BlueMask, bpp, - &vga_console_info.u.vesa_lfb.blue_pos, - &vga_console_info.u.vesa_lfb.blue_size); + &boot_info_efi.vga_console_info.u.vesa_lfb.blue_pos, + &boot_info_efi.vga_console_info.u.vesa_lfb.blue_size); bpp = set_color(mode_info->PixelInformation.ReservedMask, bpp, - &vga_console_info.u.vesa_lfb.rsvd_pos, - &vga_console_info.u.vesa_lfb.rsvd_size); + &boot_info_efi.vga_console_info.u.vesa_lfb.rsvd_pos, + &boot_info_efi.vga_console_info.u.vesa_lfb.rsvd_size); if ( bpp > 0 ) break; /* fall through */ @@ -513,16 +513,16 @@ static void __init efi_arch_video_init(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop, } if ( bpp > 0 ) { - vga_console_info.video_type = XEN_VGATYPE_EFI_LFB; - vga_console_info.u.vesa_lfb.gbl_caps = 2; /* possibly non-VGA */ - vga_console_info.u.vesa_lfb.width = + boot_info_efi.vga_console_info.video_type = XEN_VGATYPE_EFI_LFB; + boot_info_efi.vga_console_info.u.vesa_lfb.gbl_caps = 2; /* possibly non-VGA */ + boot_info_efi.vga_console_info.u.vesa_lfb.width = mode_info->HorizontalResolution; - vga_console_info.u.vesa_lfb.height = mode_info->VerticalResolution; - vga_console_info.u.vesa_lfb.bits_per_pixel = bpp; - vga_console_info.u.vesa_lfb.bytes_per_line = + boot_info_efi.vga_console_info.u.vesa_lfb.height = mode_info->VerticalResolution; + boot_info_efi.vga_console_info.u.vesa_lfb.bits_per_pixel = bpp; + boot_info_efi.vga_console_info.u.vesa_lfb.bytes_per_line = (mode_info->PixelsPerScanLine * bpp + 7) >> 3; - vga_console_info.u.vesa_lfb.lfb_base = gop->Mode->FrameBufferBase; - vga_console_info.u.vesa_lfb.lfb_size = + boot_info_efi.vga_console_info.u.vesa_lfb.lfb_base = gop->Mode->FrameBufferBase; + boot_info_efi.vga_console_info.u.vesa_lfb.lfb_size = (gop->Mode->FrameBufferSize + 0xffff) >> 16; } } diff --git a/xen/arch/x86/platform_hypercall.c b/xen/arch/x86/platform_hypercall.c index 32f39b2..7687dd1 100644 --- a/xen/arch/x86/platform_hypercall.c +++ b/xen/arch/x86/platform_hypercall.c @@ -30,6 +30,7 @@ #include <asm/mtrr.h> #include <asm/io_apic.h> #include <asm/setup.h> +#include <asm/boot_info.h> #include "cpu/mtrr/mtrr.h" #include <xsm/xsm.h> @@ -357,13 +358,13 @@ ret_t do_platform_op(XEN_GUEST_HANDLE_PARAM(xen_platform_op_t) u_xenpf_op) ret = -ESRCH; if ( op->u.firmware_info.index != 0 ) break; - if ( *(u32 *)bootsym(boot_edid_info) == 0x13131313 ) + if ( *(u32 *)boot_info->edid_info == 0x13131313 ) break; op->u.firmware_info.u.vbeddc_info.capabilities = - bootsym(boot_edid_caps); + boot_info->edid_caps; op->u.firmware_info.u.vbeddc_info.edid_transfer_time = - bootsym(boot_edid_caps) >> 8; + boot_info->edid_caps >> 8; ret = 0; if ( __copy_field_to_guest(u_xenpf_op, op, u.firmware_info. @@ -371,7 +372,7 @@ ret_t do_platform_op(XEN_GUEST_HANDLE_PARAM(xen_platform_op_t) u_xenpf_op) __copy_field_to_guest(u_xenpf_op, op, u.firmware_info. u.vbeddc_info.edid_transfer_time) || copy_to_compat(op->u.firmware_info.u.vbeddc_info.edid, - bootsym(boot_edid_info), 128) ) + boot_info->edid_info, 128) ) ret = -EFAULT; break; case XEN_FW_EFI_INFO: diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c index 6417419..05f9e93 100644 --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -20,7 +20,7 @@ #include <xen/keyhandler.h> #include <xen/numa.h> #include <xen/rcupdate.h> -#include <xen/vga.h> +#include <xen/video.h> #include <xen/dmi.h> #include <xen/pfn.h> #include <xen/nodemask.h> @@ -397,76 +397,6 @@ static void __init setup_max_pdx(unsigned long top_page) /* A temporary copy of the e820 map that we can mess with during bootstrap. */ static struct e820map __initdata boot_e820; -struct boot_video_info { - u8 orig_x; /* 0x00 */ - u8 orig_y; /* 0x01 */ - u8 orig_video_mode; /* 0x02 */ - u8 orig_video_cols; /* 0x03 */ - u8 orig_video_lines; /* 0x04 */ - u8 orig_video_isVGA; /* 0x05 */ - u16 orig_video_points; /* 0x06 */ - - /* VESA graphic mode -- linear frame buffer */ - u32 capabilities; /* 0x08 */ - u16 lfb_linelength; /* 0x0c */ - u16 lfb_width; /* 0x0e */ - u16 lfb_height; /* 0x10 */ - u16 lfb_depth; /* 0x12 */ - u32 lfb_base; /* 0x14 */ - u32 lfb_size; /* 0x18 */ - u8 red_size; /* 0x1c */ - u8 red_pos; /* 0x1d */ - u8 green_size; /* 0x1e */ - u8 green_pos; /* 0x1f */ - u8 blue_size; /* 0x20 */ - u8 blue_pos; /* 0x21 */ - u8 rsvd_size; /* 0x22 */ - u8 rsvd_pos; /* 0x23 */ - u16 vesapm_seg; /* 0x24 */ - u16 vesapm_off; /* 0x26 */ - u16 vesa_attrib; /* 0x28 */ -}; -extern struct boot_video_info boot_vid_info; - -static void __init parse_video_info(void) -{ - struct boot_video_info *bvi = &bootsym(boot_vid_info); - - /* The EFI loader fills vga_console_info directly. */ - if ( efi_enabled ) - return; - - if ( (bvi->orig_video_isVGA == 1) && (bvi->orig_video_mode == 3) ) - { - vga_console_info.video_type = XEN_VGATYPE_TEXT_MODE_3; - vga_console_info.u.text_mode_3.font_height = bvi->orig_video_points; - vga_console_info.u.text_mode_3.cursor_x = bvi->orig_x; - vga_console_info.u.text_mode_3.cursor_y = bvi->orig_y; - vga_console_info.u.text_mode_3.rows = bvi->orig_video_lines; - vga_console_info.u.text_mode_3.columns = bvi->orig_video_cols; - } - else if ( bvi->orig_video_isVGA == 0x23 ) - { - vga_console_info.video_type = XEN_VGATYPE_VESA_LFB; - vga_console_info.u.vesa_lfb.width = bvi->lfb_width; - vga_console_info.u.vesa_lfb.height = bvi->lfb_height; - vga_console_info.u.vesa_lfb.bytes_per_line = bvi->lfb_linelength; - vga_console_info.u.vesa_lfb.bits_per_pixel = bvi->lfb_depth; - vga_console_info.u.vesa_lfb.lfb_base = bvi->lfb_base; - vga_console_info.u.vesa_lfb.lfb_size = bvi->lfb_size; - vga_console_info.u.vesa_lfb.red_pos = bvi->red_pos; - vga_console_info.u.vesa_lfb.red_size = bvi->red_size; - vga_console_info.u.vesa_lfb.green_pos = bvi->green_pos; - vga_console_info.u.vesa_lfb.green_size = bvi->green_size; - vga_console_info.u.vesa_lfb.blue_pos = bvi->blue_pos; - 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; - } -} - static void __init kexec_reserve_area(struct e820map *e820) { unsigned long kdump_start = kexec_crash_area.start; @@ -592,8 +522,6 @@ void __init noreturn __start_xen(boot_info_t *boot_info_ptr) * allocing any xenheap structures wanted in lower memory. */ kexec_early_calculations(); - parse_video_info(); - if ( cpu_has_efer ) rdmsrl(MSR_EFER, this_cpu(efer)); asm volatile ( "mov %%cr4,%0" : "=r" (this_cpu(cr4)) ); @@ -621,20 +549,20 @@ void __init noreturn __start_xen(boot_info_t *boot_info_ptr) printk("Video information:\n"); /* Print VGA display mode information. */ - switch ( vga_console_info.video_type ) + switch ( boot_info->vga_console_info.video_type ) { case XEN_VGATYPE_TEXT_MODE_3: printk(" VGA is text mode %dx%d, font 8x%d\n", - vga_console_info.u.text_mode_3.columns, - vga_console_info.u.text_mode_3.rows, - vga_console_info.u.text_mode_3.font_height); + boot_info->vga_console_info.u.text_mode_3.columns, + boot_info->vga_console_info.u.text_mode_3.rows, + boot_info->vga_console_info.u.text_mode_3.font_height); break; case XEN_VGATYPE_VESA_LFB: case XEN_VGATYPE_EFI_LFB: printk(" VGA is graphics mode %dx%d, %d bpp\n", - vga_console_info.u.vesa_lfb.width, - vga_console_info.u.vesa_lfb.height, - vga_console_info.u.vesa_lfb.bits_per_pixel); + boot_info->vga_console_info.u.vesa_lfb.width, + boot_info->vga_console_info.u.vesa_lfb.height, + boot_info->vga_console_info.u.vesa_lfb.bits_per_pixel); break; default: printk(" No VGA detected\n"); @@ -642,15 +570,15 @@ void __init noreturn __start_xen(boot_info_t *boot_info_ptr) } /* Print VBE/DDC EDID information. */ - if ( bootsym(boot_edid_caps) != 0x1313 ) + if ( boot_info->edid_caps != 0x1313 ) { - u16 caps = bootsym(boot_edid_caps); + u16 caps = boot_info->edid_caps; printk(" VBE/DDC methods:%s%s%s; ", (caps & 1) ? " V1" : "", (caps & 2) ? " V2" : "", !(caps & 3) ? " none" : ""); printk("EDID transfer time: %d seconds\n", caps >> 8); - if ( *(u32 *)bootsym(boot_edid_info) == 0x13131313 ) + if ( *(u32 *)boot_info->edid_info == 0x13131313 ) { printk(" EDID info not retrieved because "); if ( !(caps & 3) ) diff --git a/xen/common/efi/runtime.c b/xen/common/efi/runtime.c index abaebd4..6212bed 100644 --- a/xen/common/efi/runtime.c +++ b/xen/common/efi/runtime.c @@ -5,6 +5,7 @@ #include <xen/guest_access.h> #include <xen/irq.h> #include <xen/time.h> +#include <xen/video.h> #ifndef CONFIG_ARM /* TODO - disabled until implemented on ARM */ #include <asm/boot_info.h> #include <asm/e820.h> @@ -45,6 +46,8 @@ const struct efi_pci_rom *__read_mostly efi_pci_roms; #ifndef CONFIG_ARM /* TODO - disabled until implemented on ARM */ extern struct e820entry e820map[]; +extern unsigned char boot_edid_info[128]; + static boot_module_t __read_mostly boot_info_mods[3] = {}; boot_info_t __read_mostly boot_info_efi = { @@ -61,6 +64,9 @@ boot_info_t __read_mostly boot_info_efi = { .acpi = EFI_INVALID_TABLE_ADDR, .acpi20 = EFI_INVALID_TABLE_ADDR, .smbios = EFI_INVALID_TABLE_ADDR, + .vga_console_info = {}, + .edid_caps = 0, + .edid_info = boot_edid_info, .mods_nr = 0, .mods = boot_info_mods, .warn_msg = NULL, diff --git a/xen/drivers/video/vesa.c b/xen/drivers/video/vesa.c index 575db62..942a356 100644 --- a/xen/drivers/video/vesa.c +++ b/xen/drivers/video/vesa.c @@ -9,13 +9,14 @@ #include <xen/lib.h> #include <xen/xmalloc.h> #include <xen/kernel.h> -#include <xen/vga.h> +#include <xen/video.h> #include <asm/io.h> #include <asm/page.h> +#include <asm/boot_info.h> #include "font.h" #include "lfb.h" -#define vlfb_info vga_console_info.u.vesa_lfb +#define vlfb_info boot_info->vga_console_info.u.vesa_lfb static void lfb_flush(void); @@ -43,7 +44,7 @@ void __init vesa_early_init(void) { unsigned int vram_vmode; - vga_compat = !(vga_console_info.u.vesa_lfb.gbl_caps & 2); + vga_compat = !(boot_info->vga_console_info.u.vesa_lfb.gbl_caps & 2); if ( (vlfb_info.bits_per_pixel < 8) || (vlfb_info.bits_per_pixel > 32) ) return; diff --git a/xen/drivers/video/vga.c b/xen/drivers/video/vga.c index 40e5963..608d92b 100644 --- a/xen/drivers/video/vga.c +++ b/xen/drivers/video/vga.c @@ -8,12 +8,10 @@ #include <xen/init.h> #include <xen/lib.h> #include <xen/mm.h> -#include <xen/vga.h> +#include <xen/video.h> #include <xen/pci.h> #include <asm/io.h> - -/* Filled in by arch boot code. */ -struct xen_vga_console_info vga_console_info; +#include <asm/boot_info.h> static int vgacon_keep; static unsigned int xpos, ypos; @@ -75,15 +73,15 @@ void __init video_init(void) vgacon_keep = 1; } - switch ( vga_console_info.video_type ) + switch ( boot_info->vga_console_info.video_type ) { case XEN_VGATYPE_TEXT_MODE_3: if ( page_is_ram_type(paddr_to_pfn(0xB8000), RAM_TYPE_CONVENTIONAL) || ((video = ioremap(0xB8000, 0x8000)) == NULL) ) return; outw(0x200a, 0x3d4); /* disable cursor */ - columns = vga_console_info.u.text_mode_3.columns; - lines = vga_console_info.u.text_mode_3.rows; + columns = boot_info->vga_console_info.u.text_mode_3.columns; + lines = boot_info->vga_console_info.u.text_mode_3.rows; memset(video, 0, columns * lines * 2); video_puts = vga_text_puts; break; @@ -92,7 +90,7 @@ void __init video_init(void) vesa_early_init(); break; default: - memset(&vga_console_info, 0, sizeof(vga_console_info)); + memset(&boot_info->vga_console_info, 0, sizeof(boot_info->vga_console_info)); break; } } @@ -163,7 +161,7 @@ void __init video_endboot(void) } } - switch ( vga_console_info.video_type ) + switch ( boot_info->vga_console_info.video_type ) { case XEN_VGATYPE_TEXT_MODE_3: if ( !vgacon_keep ) @@ -206,6 +204,6 @@ static void vga_text_puts(const char *s) int __init fill_console_start_info(struct dom0_vga_console_info *ci) { - memcpy(ci, &vga_console_info, sizeof(*ci)); + memcpy(ci, &boot_info->vga_console_info, sizeof(*ci)); return 1; } diff --git a/xen/include/asm-x86/boot_info.h b/xen/include/asm-x86/boot_info.h index 4d888ab..97f8a3b 100644 --- a/xen/include/asm-x86/boot_info.h +++ b/xen/include/asm-x86/boot_info.h @@ -20,6 +20,7 @@ #define __BOOT_INFO_H__ #include <xen/types.h> +#include <xen/video.h> #include <asm/e820.h> #include <asm/mbd.h> @@ -80,6 +81,13 @@ typedef struct { /* SMBIOS physical address. */ paddr_t smbios; + /* VGA console info. */ + struct xen_vga_console_info vga_console_info; + + /* EDID info. */ + unsigned short edid_caps; + unsigned char *edid_info; + /* Number of modules. */ unsigned int mods_nr; diff --git a/xen/include/asm-x86/config.h b/xen/include/asm-x86/config.h index 210ff57..ae68322 100644 --- a/xen/include/asm-x86/config.h +++ b/xen/include/asm-x86/config.h @@ -119,8 +119,6 @@ extern unsigned int trampoline_xen_phys_start; extern unsigned char trampoline_cpu_started; extern char wakeup_start[]; extern unsigned int video_mode, video_flags; -extern unsigned short boot_edid_caps; -extern unsigned char boot_edid_info[128]; #endif #define asmlinkage diff --git a/xen/include/xen/vga.h b/xen/include/xen/vga.h deleted file mode 100644 index f72b63d..0000000 --- a/xen/include/xen/vga.h +++ /dev/null @@ -1,18 +0,0 @@ -/* - * vga.h - * - * This file is subject to the terms and conditions of the GNU General Public - * License. See the file COPYING in the main directory of this archive - * for more details. - */ - -#ifndef _XEN_VGA_H -#define _XEN_VGA_H - -#include <xen/video.h> - -#ifdef CONFIG_VGA -extern struct xen_vga_console_info vga_console_info; -#endif - -#endif /* _XEN_VGA_H */ -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |