xen/x86: make VGA support selectable
authorRoger Pau Monne <roger.pau@citrix.com>
Tue, 28 Nov 2017 09:54:17 +0000 (09:54 +0000)
committerWei Liu <wei.liu2@citrix.com>
Tue, 16 Jan 2018 18:34:04 +0000 (18:34 +0000)
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@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
tools/firmware/xen-dir/shim.config
xen/arch/x86/Kconfig
xen/arch/x86/boot/build32.mk
xen/arch/x86/boot/cmdline.c
xen/arch/x86/boot/trampoline.S
xen/arch/x86/efi/efi-boot.h
xen/arch/x86/platform_hypercall.c
xen/arch/x86/pv/dom0_build.c
xen/arch/x86/setup.c
xen/drivers/video/Kconfig
xen/include/asm-x86/setup.h

index 227a12fb4c62c0cd1f1ab02b5a95459cd360dbd1..78b965f4c79ddfb5648ba683e0f0968816f3bfb0 100644 (file)
@@ -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
 
index 4953533f16c1a63186b22f177fd486822ef6a160..f621e799ed164806e035b5bc0068be3876d0cc7d 100644 (file)
@@ -24,7 +24,6 @@ config X86
        select HAS_PDX
        select HAS_UBSAN
        select NUMA
-       select VGA
 
 config ARCH_DEFCONFIG
        string
index f7e8ebe67d70c92a34281ef5e21e7cae65ee02f6..48c7407c002fb43eea5c6f257f5d79e6b00de073 100644 (file)
@@ -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'
index 06aa064e72e95f08a276e12536a6136ee7294c59..51b0659a04f80c8cde43ebb61af6abd6ca03835a 100644 (file)
@@ -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);
 }
index f70d91354451ed14f28cdc3aded32b605b8071c6..5588c7986aa6aa6f0241ecdb484a81e57953dd08 100644 (file)
@@ -239,7 +239,9 @@ trampoline_boot_cpu_entry:
          */
         call    get_memory_map
         call    get_edd
+#ifdef CONFIG_VIDEO
         call    video
+#endif
 
         mov     $0x0200,%ax
         int     $0x16
@@ -287,10 +289,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
@@ -299,4 +304,6 @@ rm_idt: .word   256*4-1, 0, 0
 
 #include "mem.S"
 #include "edd.S"
+#ifdef CONFIG_VIDEO
 #include "video.S"
+#endif
index d30f688a5ad3fa8ba80a8ad2ca57d6fe3a9b6cdc..5789d2cb70726a556785e823ee4eafcdb514aa6c 100644 (file)
@@ -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)
index ebc2f394ee33aaa983ed4d2592026065a15e08b4..ea18c3215a0dc9cf32cdad55cc3efb1ec4221941 100644 (file)
@@ -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,
index 8fd40b52543c3a166df966cb9dc6cf60758d266c..50a423e35d0d3fcb62380dab367190459ab75d74 100644 (file)
@@ -827,11 +827,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);
index a11eb5c3023050d9bd3a4a4cad30f9a6bfb79090..3ef70d134619f5577a6fc41aee4dbde8a4ea1bf2 100644 (file)
@@ -457,6 +457,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 */
@@ -487,9 +488,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. */
@@ -525,6 +528,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)
@@ -742,6 +746,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. */
@@ -785,6 +790,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",
index 0ffbbd9a8808977f75e36c1bf2b826bf0ffe69c8..52e8ce6c15f893c33f212626b847d23520ce188a 100644 (file)
@@ -3,8 +3,14 @@ config VIDEO
        bool
 
 config VGA
-       bool
+       bool "VGA support" if !PV_SHIM_EXCLUSIVE
        select VIDEO
+       depends on X86
+       default y if !PV_SHIM_EXCLUSIVE
+       ---help---
+         Enable VGA output for the Xen hypervisor.
+
+         If unsure, say Y.
 
 config HAS_ARM_HDLCD
        bool
index 05d647d02e20a1fd960a971c1896503b4547d49a..19232afa01c987713ede6266b69d8c9fd0566301 100644 (file)
@@ -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,