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;
198110fa1dSEduardo Habkost DECLARE_INSTANCE_CHECKER(VhostUserVGA, VHOST_USER_VGA,
208110fa1dSEduardo 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
vhost_user_vga_inst_initfn(Object * obj)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,
442ada901fSEduardo Habkost .instance_size = sizeof(VhostUserVGA),
45267f6646SMarc-André Lureau .instance_init = vhost_user_vga_inst_initfn,
46267f6646SMarc-André Lureau };
47561d0f45SGerd Hoffmann module_obj(TYPE_VHOST_USER_VGA);
48*24ce7aa7SJose R. Ziviani module_kconfig(VHOST_USER_VGA);
49267f6646SMarc-André Lureau
vhost_user_vga_register_types(void)50267f6646SMarc-André Lureau static void vhost_user_vga_register_types(void)
51267f6646SMarc-André Lureau {
52267f6646SMarc-André Lureau virtio_pci_types_register(&vhost_user_vga_info);
53267f6646SMarc-André Lureau }
54267f6646SMarc-André Lureau
55267f6646SMarc-André Lureau type_init(vhost_user_vga_register_types)
56