From 6407de302c00462be29eb3a7d3d4b24e092494f9 Mon Sep 17 00:00:00 2001 From: Zhao Yakui Date: Mon, 15 Aug 2022 10:42:42 +0800 Subject: [PATCH] ACRN:DM:VDisplay: vdpy_init connection returns the supported number of vScreen Vdisplay module will create the gui_window (vScreen) based on the virtio-gpu parameter. When virtio-gpu device tries to establish the connection with vdisplay module, it will return the supported number of vScreen. Then the virtio-gpu device can initialize the correct info for the guest_vm. BTW: The number is fixed to 1. Tracked-On: #7988 Signed-off-by: Zhao Yakui Reviewed-by: Peng Sun --- devicemodel/hw/pci/virtio/virtio_gpu.c | 2 +- devicemodel/hw/vdisplay_sdl.c | 4 +++- devicemodel/include/vdisplay.h | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/devicemodel/hw/pci/virtio/virtio_gpu.c b/devicemodel/hw/pci/virtio/virtio_gpu.c index 2f8c4362e..cf3d20823 100644 --- a/devicemodel/hw/pci/virtio/virtio_gpu.c +++ b/devicemodel/hw/pci/virtio/virtio_gpu.c @@ -1485,7 +1485,7 @@ virtio_gpu_init(struct vmctx *ctx, struct pci_vdev *dev, char *opts) gpu->vq, BACKEND_VBSU); - gpu->vdpy_handle = vdpy_init(); + gpu->vdpy_handle = vdpy_init(NULL); gpu->base.mtx = &gpu->mtx; gpu->base.device_caps = VIRTIO_GPU_S_HOSTCAPS; diff --git a/devicemodel/hw/vdisplay_sdl.c b/devicemodel/hw/vdisplay_sdl.c index 567a2de6f..4cf19f985 100644 --- a/devicemodel/hw/vdisplay_sdl.c +++ b/devicemodel/hw/vdisplay_sdl.c @@ -1069,7 +1069,7 @@ bool vdpy_submit_bh(int handle, struct vdpy_display_bh *bh_task) } int -vdpy_init() +vdpy_init(int *num_vscreens) { int err, count; @@ -1100,6 +1100,8 @@ vdpy_init() } vdpy.s.n_connect++; + if (num_vscreens) + *num_vscreens = 1; return vdpy.s.n_connect; } diff --git a/devicemodel/include/vdisplay.h b/devicemodel/include/vdisplay.h index fc0e91b46..ab15566d9 100644 --- a/devicemodel/include/vdisplay.h +++ b/devicemodel/include/vdisplay.h @@ -85,7 +85,7 @@ struct cursor { int vdpy_parse_cmd_option(const char *opts); int gfx_ui_init(); -int vdpy_init(); +int vdpy_init(int *num_vscreens); void vdpy_get_display_info(int handle, int scanout_id, struct display_info *info); void vdpy_surface_set(int handle, int scanout_id, struct surface *surf); void vdpy_surface_update(int handle, int scanout_id, struct surface *surf);