mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
xen/x86: make VGA support selectable
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>
This commit is contained in:
1 parent
4ee1b6eb8a
commit
ebb26b509f
11 files changed
+40
-5
No files matched your search
@@ -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
|
||||
|
||||
|
||||
@@ -24,7 +24,6 @@ config X86
|
||||
select HAS_PDX
|
||||
select HAS_UBSAN
|
||||
select NUMA
|
||||
select VGA
|
||||
|
||||
config ARCH_DEFCONFIG
|
||||
string
|
||||
|
||||
@@ -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'
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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
|
||||
@@ -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,
|
||||
|
||||