xref: /qemu/hw/display/vhost-user-vga.c (revision 8110fa1d94f2997badc2af39231a1d279c5bb1ee)
1267f6646SMarc-André Lureau /*
2267f6646SMarc-André Lureau  * vhost-user VGA device
3267f6646SMarc-André Lureau  *
4267f6646SMarc-André Lureau  * Copyright Red Hat, Inc. 2018
5267f6646SMarc-André Lureau  *
6267f6646SMarc-André Lureau  * This work is licensed under the terms of the GNU GPL, version 2 or later.
7267f6646SMarc-André Lureau  * See the COPYING file in the top-level directory.
8267f6646SMarc-André Lureau  *
9267f6646SMarc-André Lureau  */
10267f6646SMarc-André Lureau 
11267f6646SMarc-André Lureau #include "qemu/osdep.h"
12267f6646SMarc-André Lureau #include "qapi/error.h"
13267f6646SMarc-André Lureau #include "virtio-vga.h"
14db1015e9SEduardo Habkost #include "qom/object.h"
15267f6646SMarc-André Lureau 
16267f6646SMarc-André Lureau #define TYPE_VHOST_USER_VGA "vhost-user-vga"
17267f6646SMarc-André Lureau 
18db1015e9SEduardo Habkost typedef struct VhostUserVGA VhostUserVGA;
19*8110fa1dSEduardo Habkost DECLARE_INSTANCE_CHECKER(VhostUserVGA, VHOST_USER_VGA,
20*8110fa1dSEduardo Habkost                          TYPE_VHOST_USER_VGA)
21267f6646SMarc-André Lureau 
22db1015e9SEduardo Habkost struct VhostUserVGA {
23267f6646SMarc-André Lureau     VirtIOVGABase parent_obj;
24267f6646SMarc-André Lureau 
25267f6646SMarc-André Lureau     VhostUserGPU vdev;
26db1015e9SEduardo Habkost };
27267f6646SMarc-André Lureau 
28267f6646SMarc-André Lureau static void vhost_user_vga_inst_initfn(Object *obj)
29267f6646SMarc-André Lureau {
30267f6646SMarc-André Lureau     VhostUserVGA *dev = VHOST_USER_VGA(obj);
31267f6646SMarc-André Lureau 
32267f6646SMarc-André Lureau     virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
33267f6646SMarc-André Lureau                                 TYPE_VHOST_USER_GPU);
34267f6646SMarc-André Lureau 
35267f6646SMarc-André Lureau     VIRTIO_VGA_BASE(dev)->vgpu = VIRTIO_GPU_BASE(&dev->vdev);
36267f6646SMarc-André Lureau 
37267f6646SMarc-André Lureau     object_property_add_alias(obj, "chardev",
38d2623129SMarkus Armbruster                               OBJECT(&dev->vdev), "chardev");
39267f6646SMarc-André Lureau }
40267f6646SMarc-André Lureau 
41267f6646SMarc-André Lureau static const VirtioPCIDeviceTypeInfo vhost_user_vga_info = {
42267f6646SMarc-André Lureau     .generic_name  = TYPE_VHOST_USER_VGA,
43267f6646SMarc-André Lureau     .parent        = TYPE_VIRTIO_VGA_BASE,
44267f6646SMarc-André Lureau     .instance_size = sizeof(struct VhostUserVGA),
45267f6646SMarc-André Lureau     .instance_init = vhost_user_vga_inst_initfn,
46267f6646SMarc-André Lureau };
47267f6646SMarc-André Lureau 
48267f6646SMarc-André Lureau static void vhost_user_vga_register_types(void)
49267f6646SMarc-André Lureau {
50267f6646SMarc-André Lureau     virtio_pci_types_register(&vhost_user_vga_info);
51267f6646SMarc-André Lureau }
52267f6646SMarc-André Lureau 
53267f6646SMarc-André Lureau type_init(vhost_user_vga_register_types)
54