]> xenbits.xensource.com Git - people/dwmw2/xen.git/commitdiff
x86/platform: introduce hypercall to get initial video console settings
authorRoger Pau Monné <roger.pau@citrix.com>
Tue, 6 Dec 2022 12:53:43 +0000 (13:53 +0100)
committerJan Beulich <jbeulich@suse.com>
Tue, 6 Dec 2022 12:53:43 +0000 (13:53 +0100)
This is required so PVH dom0 can get the initial video console state
as handled by Xen.  PV dom0 will get this as part of the start_info,
but it doesn't seem necessary to place such information in the
HVM start info.

Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
xen/arch/x86/platform_hypercall.c
xen/drivers/video/vga.c
xen/include/public/platform.h

index a7341dc3d7d305257ad05c06d79e7592bd5fe90f..3f0d0389af447a2cc5ac7c9558723c67c7097e5a 100644 (file)
@@ -839,6 +839,17 @@ ret_t do_platform_op(
     }
     break;
 
+    case XENPF_get_dom0_console:
+        if ( !fill_console_start_info(&op->u.dom0_console) )
+        {
+            ret = -ENODEV;
+            break;
+        }
+
+        if ( copy_field_to_guest(u_xenpf_op, op, u.dom0_console) )
+            ret = -EFAULT;
+        break;
+
     default:
         ret = -ENOSYS;
         break;
index 29a88e82415c4dead8b86a00346bcb09239f5159..0a03508bee60270ff4d708d44fb9a58f8a7ef303 100644 (file)
@@ -205,7 +205,7 @@ static void cf_check vga_text_puts(const char *s, size_t nr)
     }
 }
 
-int __init fill_console_start_info(struct dom0_vga_console_info *ci)
+int fill_console_start_info(struct dom0_vga_console_info *ci)
 {
     memcpy(ci, &vga_console_info, sizeof(*ci));
     return 1;
index 5e1494fe9ab3e3110408c3204ecd81eebdf2e833..14784dfa77be3155f8a7e3e2b8b36d517927ae27 100644 (file)
@@ -605,6 +605,11 @@ struct xenpf_symdata {
 typedef struct xenpf_symdata xenpf_symdata_t;
 DEFINE_XEN_GUEST_HANDLE(xenpf_symdata_t);
 
+/* Fetch the video console information and mode setup by Xen. */
+#define XENPF_get_dom0_console 64
+typedef struct dom0_vga_console_info xenpf_dom0_console_t;
+DEFINE_XEN_GUEST_HANDLE(xenpf_dom0_console_t);
+
 /*
  * ` enum neg_errnoval
  * ` HYPERVISOR_platform_op(const struct xen_platform_op*);
@@ -635,6 +640,7 @@ struct xen_platform_op {
         xenpf_core_parking_t          core_parking;
         xenpf_resource_op_t           resource_op;
         xenpf_symdata_t               symdata;
+        xenpf_dom0_console_t          dom0_console;
         uint8_t                       pad[128];
     } u;
 };