[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH RFC v1 39/74] xen/x86: make VGA support selectable
From: Roger Pau Monne <roger.pau@xxxxxxxxxx> Through a Kconfig option. Enable it by default, and disable it for the PV-in-PVH shim. Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> --- tools/firmware/xen-dir/shim.config | 3 +-- xen/arch/x86/Kconfig | 1 - xen/arch/x86/boot/build32.mk | 1 + xen/arch/x86/boot/cmdline.c | 5 ++++- xen/arch/x86/boot/trampoline.S | 7 +++++++ xen/arch/x86/efi/efi-boot.h | 4 ++++ xen/arch/x86/platform_hypercall.c | 2 ++ xen/arch/x86/pv/dom0_build.c | 2 ++ xen/arch/x86/setup.c | 6 ++++++ xen/drivers/video/Kconfig | 8 +++++++- xen/include/asm-x86/setup.h | 6 ++++++ 11 files changed, 40 insertions(+), 5 deletions(-) diff --git a/tools/firmware/xen-dir/shim.config b/tools/firmware/xen-dir/shim.config index 227a12fb4c..78b965f4c7 100644 --- a/tools/firmware/xen-dir/shim.config +++ b/tools/firmware/xen-dir/shim.config @@ -68,8 +68,7 @@ CONFIG_HAS_EHCI=y CONFIG_HAS_CPUFREQ=y CONFIG_HAS_PASSTHROUGH=y CONFIG_HAS_PCI=y -CONFIG_VIDEO=y -CONFIG_VGA=y +# CONFIG_VGA is not set CONFIG_DEFCONFIG_LIST="$ARCH_DEFCONFIG" CONFIG_ARCH_SUPPORTS_INT128=y diff --git a/xen/arch/x86/Kconfig b/xen/arch/x86/Kconfig index 4953533f16..f621e799ed 100644 --- a/xen/arch/x86/Kconfig +++ b/xen/arch/x86/Kconfig @@ -24,7 +24,6 @@ config X86 select HAS_PDX select HAS_UBSAN select NUMA - select VGA config ARCH_DEFCONFIG string diff --git a/xen/arch/x86/boot/build32.mk b/xen/arch/x86/boot/build32.mk index f7e8ebe67d..48c7407c00 100644 --- a/xen/arch/x86/boot/build32.mk +++ b/xen/arch/x86/boot/build32.mk @@ -5,6 +5,7 @@ include $(XEN_ROOT)/Config.mk $(call cc-options-add,CFLAGS,CC,$(EMBEDDED_EXTRA_CFLAGS)) CFLAGS += -Werror -fno-asynchronous-unwind-tables -fno-builtin -g0 -msoft-float +CFLAGS += -I$(XEN_ROOT)/xen/include CFLAGS := $(filter-out -flto,$(CFLAGS)) # NB. awk invocation is a portable alternative to 'head -n -1' diff --git a/xen/arch/x86/boot/cmdline.c b/xen/arch/x86/boot/cmdline.c index 06aa064e72..51b0659a04 100644 --- a/xen/arch/x86/boot/cmdline.c +++ b/xen/arch/x86/boot/cmdline.c @@ -30,6 +30,7 @@ asm ( " jmp cmdline_parse_early \n" ); +#include <xen/kconfig.h> #include "defs.h" #include "video.h" @@ -336,5 +337,7 @@ void __stdcall cmdline_parse_early(const char *cmdline, early_boot_opts_t *ebo) ebo->skip_realmode = skip_realmode(cmdline); ebo->opt_edd = edd_parse(cmdline); ebo->opt_edid = edid_parse(cmdline); - vga_parse(cmdline, ebo); + + if ( IS_ENABLED(CONFIG_VIDEO) ) + vga_parse(cmdline, ebo); } diff --git a/xen/arch/x86/boot/trampoline.S b/xen/arch/x86/boot/trampoline.S index 4d640f3fcd..a17a90df5e 100644 --- a/xen/arch/x86/boot/trampoline.S +++ b/xen/arch/x86/boot/trampoline.S @@ -219,7 +219,9 @@ trampoline_boot_cpu_entry: */ call get_memory_map call get_edd +#ifdef CONFIG_VIDEO call video +#endif mov $0x0200,%ax int $0x16 @@ -267,10 +269,13 @@ opt_edid: .byte 0 /* EDID parsing option (force/no/default). */ /* Padding. */ .byte 0 + +#ifdef CONFIG_VIDEO GLOBAL(boot_vid_mode) .word VIDEO_80x25 /* If we don't run at all, assume basic video mode 3 at 80x25. */ vesa_size: .word 0,0,0 /* width x depth x height */ +#endif GLOBAL(kbd_shift_flags) .byte 0 @@ -279,4 +284,6 @@ rm_idt: .word 256*4-1, 0, 0 #include "mem.S" #include "edd.S" +#ifdef CONFIG_VIDEO #include "video.S" +#endif diff --git a/xen/arch/x86/efi/efi-boot.h b/xen/arch/x86/efi/efi-boot.h index d30f688a5a..5789d2cb70 100644 --- a/xen/arch/x86/efi/efi-boot.h +++ b/xen/arch/x86/efi/efi-boot.h @@ -479,16 +479,19 @@ static void __init efi_arch_edd(void) static void __init efi_arch_console_init(UINTN cols, UINTN rows) { +#ifdef CONFIG_VIDEO 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; +#endif } static void __init efi_arch_video_init(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop, UINTN info_size, EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *mode_info) { +#ifdef CONFIG_VIDEO int bpp = 0; switch ( mode_info->PixelFormat ) @@ -550,6 +553,7 @@ static void __init efi_arch_video_init(EFI_GRAPHICS_OUTPUT_PROTOCOL *gop, vga_console_info.u.vesa_lfb.lfb_size = (gop->Mode->FrameBufferSize + 0xffff) >> 16; } +#endif } static void __init efi_arch_memory_setup(void) diff --git a/xen/arch/x86/platform_hypercall.c b/xen/arch/x86/platform_hypercall.c index ebc2f394ee..ea18c3215a 100644 --- a/xen/arch/x86/platform_hypercall.c +++ b/xen/arch/x86/platform_hypercall.c @@ -388,6 +388,7 @@ ret_t do_platform_op(XEN_GUEST_HANDLE_PARAM(xen_platform_op_t) u_xenpf_op) } case XEN_FW_VBEDDC_INFO: ret = -ESRCH; +#ifdef CONFIG_VIDEO if ( op->u.firmware_info.index != 0 ) break; if ( *(u32 *)bootsym(boot_edid_info) == 0x13131313 ) @@ -406,6 +407,7 @@ ret_t do_platform_op(XEN_GUEST_HANDLE_PARAM(xen_platform_op_t) u_xenpf_op) copy_to_compat(op->u.firmware_info.u.vbeddc_info.edid, bootsym(boot_edid_info), 128) ) ret = -EFAULT; +#endif break; case XEN_FW_EFI_INFO: ret = efi_get_info(op->u.firmware_info.index, diff --git a/xen/arch/x86/pv/dom0_build.c b/xen/arch/x86/pv/dom0_build.c index 09c765a06f..23d5993b7e 100644 --- a/xen/arch/x86/pv/dom0_build.c +++ b/xen/arch/x86/pv/dom0_build.c @@ -828,11 +828,13 @@ int __init dom0_construct_pv(struct domain *d, if ( cmdline != NULL ) strlcpy((char *)si->cmd_line, cmdline, sizeof(si->cmd_line)); +#ifdef CONFIG_VIDEO if ( fill_console_start_info((void *)(si + 1)) ) { si->console.dom0.info_off = sizeof(struct start_info); si->console.dom0.info_size = sizeof(struct dom0_vga_console_info); } +#endif if ( is_pv_32bit_domain(d) ) xlat_start_info(si, XLAT_start_info_console_dom0); diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c index 4dff2bca8b..99f5d61eb8 100644 --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -456,6 +456,7 @@ 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; +#ifdef CONFIG_VIDEO struct boot_video_info { u8 orig_x; /* 0x00 */ u8 orig_y; /* 0x01 */ @@ -486,9 +487,11 @@ struct boot_video_info { u16 vesa_attrib; /* 0x28 */ }; extern struct boot_video_info boot_vid_info; +#endif static void __init parse_video_info(void) { +#ifdef CONFIG_VIDEO struct boot_video_info *bvi = &bootsym(boot_vid_info); /* vga_console_info is filled directly on EFI platform. */ @@ -524,6 +527,7 @@ static void __init parse_video_info(void) vga_console_info.u.vesa_lfb.gbl_caps = bvi->capabilities; vga_console_info.u.vesa_lfb.mode_attrs = bvi->vesa_attrib; } +#endif } static void __init kexec_reserve_area(struct e820map *e820) @@ -741,6 +745,7 @@ void __init noreturn __start_xen(unsigned long mbi_p) printk("Xen image load base address: %#lx\n", xen_phys_start); +#ifdef CONFIG_VIDEO printk("Video information:\n"); /* Print VGA display mode information. */ @@ -784,6 +789,7 @@ void __init noreturn __start_xen(unsigned long mbi_p) printk("of reasons unknown\n"); } } +#endif printk("Disc information:\n"); printk(" Found %d MBR signatures\n", diff --git a/xen/drivers/video/Kconfig b/xen/drivers/video/Kconfig index 0ffbbd9a88..e668462a94 100644 --- a/xen/drivers/video/Kconfig +++ b/xen/drivers/video/Kconfig @@ -3,8 +3,14 @@ config VIDEO bool config VGA - bool + bool "VGA support" select VIDEO + depends on X86 + default y + ---help--- + Enable VGA output for the Xen hypervisor. + + If unsure, say Y. config HAS_ARM_HDLCD bool diff --git a/xen/include/asm-x86/setup.h b/xen/include/asm-x86/setup.h index c5b3d4ef18..b68ec9de4d 100644 --- a/xen/include/asm-x86/setup.h +++ b/xen/include/asm-x86/setup.h @@ -31,8 +31,14 @@ void arch_init_memory(void); void subarch_init_memory(void); void init_IRQ(void); + +#ifdef CONFIG_VIDEO void vesa_init(void); void vesa_mtrr_init(void); +#else +static inline void vesa_init(void) {}; +static inline void vesa_mtrr_init(void) {}; +#endif int construct_dom0( struct domain *d, -- 2.11.0 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |