xref: /openbmc/qemu/hw/display/vhost-user-vga.c (revision 57c9363c452af64fe058aa946cc923eae7f7ad33)
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