Commit 934ef33e authored by Jan Beulich's avatar Jan Beulich Committed by Juergen Gross

x86/PVH: obtain VGA console info in Dom0

A new platform-op was added to Xen to allow obtaining the same VGA
console information PV Dom0 is handed. Invoke the new function and have
the output data processed by xen_init_vga().
Signed-off-by: default avatarJan Beulich <jbeulich@suse.com>
Reviewed-by: default avatarJuergen Gross <jgross@suse.com>

Link: https://lore.kernel.org/r/8f315e92-7bda-c124-71cc-478ab9c5e610@suse.comSigned-off-by: default avatarJuergen Gross <jgross@suse.com>
parent 99a7bcaf
...@@ -45,6 +45,6 @@ obj-$(CONFIG_PARAVIRT_SPINLOCKS)+= spinlock.o ...@@ -45,6 +45,6 @@ obj-$(CONFIG_PARAVIRT_SPINLOCKS)+= spinlock.o
obj-$(CONFIG_XEN_DEBUG_FS) += debugfs.o obj-$(CONFIG_XEN_DEBUG_FS) += debugfs.o
obj-$(CONFIG_XEN_PV_DOM0) += vga.o obj-$(CONFIG_XEN_DOM0) += vga.o
obj-$(CONFIG_XEN_EFI) += efi.o obj-$(CONFIG_XEN_EFI) += efi.o
...@@ -1389,7 +1389,8 @@ asmlinkage __visible void __init xen_start_kernel(struct start_info *si) ...@@ -1389,7 +1389,8 @@ asmlinkage __visible void __init xen_start_kernel(struct start_info *si)
x86_platform.set_legacy_features = x86_platform.set_legacy_features =
xen_dom0_set_legacy_features; xen_dom0_set_legacy_features;
xen_init_vga(info, xen_start_info->console.dom0.info_size); xen_init_vga(info, xen_start_info->console.dom0.info_size,
&boot_params.screen_info);
xen_start_info->console.domU.mfn = 0; xen_start_info->console.domU.mfn = 0;
xen_start_info->console.domU.evtchn = 0; xen_start_info->console.domU.evtchn = 0;
......
...@@ -43,6 +43,19 @@ void __init xen_pvh_init(struct boot_params *boot_params) ...@@ -43,6 +43,19 @@ void __init xen_pvh_init(struct boot_params *boot_params)
x86_init.oem.banner = xen_banner; x86_init.oem.banner = xen_banner;
xen_efi_init(boot_params); xen_efi_init(boot_params);
if (xen_initial_domain()) {
struct xen_platform_op op = {
.cmd = XENPF_get_dom0_console,
};
long ret = HYPERVISOR_platform_op(&op);
if (ret > 0)
xen_init_vga(&op.u.dom0_console,
min(ret * sizeof(char),
sizeof(op.u.dom0_console)),
&boot_params->screen_info);
}
} }
void __init mem_map_via_hcall(struct boot_params *boot_params_p) void __init mem_map_via_hcall(struct boot_params *boot_params_p)
......
...@@ -9,10 +9,9 @@ ...@@ -9,10 +9,9 @@
#include "xen-ops.h" #include "xen-ops.h"
void __init xen_init_vga(const struct dom0_vga_console_info *info, size_t size) void __init xen_init_vga(const struct dom0_vga_console_info *info, size_t size,
struct screen_info *screen_info)
{ {
struct screen_info *screen_info = &boot_params.screen_info;
/* This is drawn from a dump from vgacon:startup in /* This is drawn from a dump from vgacon:startup in
* standard Linux. */ * standard Linux. */
screen_info->orig_video_mode = 3; screen_info->orig_video_mode = 3;
......
...@@ -108,11 +108,12 @@ static inline void xen_uninit_lock_cpu(int cpu) ...@@ -108,11 +108,12 @@ static inline void xen_uninit_lock_cpu(int cpu)
struct dom0_vga_console_info; struct dom0_vga_console_info;
#ifdef CONFIG_XEN_PV_DOM0 #ifdef CONFIG_XEN_DOM0
void __init xen_init_vga(const struct dom0_vga_console_info *, size_t size); void __init xen_init_vga(const struct dom0_vga_console_info *, size_t size,
struct screen_info *);
#else #else
static inline void __init xen_init_vga(const struct dom0_vga_console_info *info, static inline void __init xen_init_vga(const struct dom0_vga_console_info *info,
size_t size) size_t size, struct screen_info *si)
{ {
} }
#endif #endif
......
...@@ -483,6 +483,8 @@ struct xenpf_symdata { ...@@ -483,6 +483,8 @@ struct xenpf_symdata {
}; };
DEFINE_GUEST_HANDLE_STRUCT(xenpf_symdata); DEFINE_GUEST_HANDLE_STRUCT(xenpf_symdata);
#define XENPF_get_dom0_console 64
struct xen_platform_op { struct xen_platform_op {
uint32_t cmd; uint32_t cmd;
uint32_t interface_version; /* XENPF_INTERFACE_VERSION */ uint32_t interface_version; /* XENPF_INTERFACE_VERSION */
...@@ -506,6 +508,7 @@ struct xen_platform_op { ...@@ -506,6 +508,7 @@ struct xen_platform_op {
struct xenpf_mem_hotadd mem_add; struct xenpf_mem_hotadd mem_add;
struct xenpf_core_parking core_parking; struct xenpf_core_parking core_parking;
struct xenpf_symdata symdata; struct xenpf_symdata symdata;
struct dom0_vga_console_info dom0_console;
uint8_t pad[128]; uint8_t pad[128];
} u; } u;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment