1267f6646SMarc-André Lureau /*
2267f6646SMarc-André Lureau * vhost-user GPU PCI 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 "hw/virtio/virtio-gpu-pci.h"
14db1015e9SEduardo Habkost #include "qom/object.h"
15267f6646SMarc-André Lureau
16267f6646SMarc-André Lureau #define TYPE_VHOST_USER_GPU_PCI "vhost-user-gpu-pci"
17db1015e9SEduardo Habkost typedef struct VhostUserGPUPCI VhostUserGPUPCI;
188110fa1dSEduardo Habkost DECLARE_INSTANCE_CHECKER(VhostUserGPUPCI, VHOST_USER_GPU_PCI,
198110fa1dSEduardo Habkost TYPE_VHOST_USER_GPU_PCI)
20267f6646SMarc-André Lureau
21db1015e9SEduardo Habkost struct VhostUserGPUPCI {
22267f6646SMarc-André Lureau VirtIOGPUPCIBase parent_obj;
23267f6646SMarc-André Lureau
24267f6646SMarc-André Lureau VhostUserGPU vdev;
25db1015e9SEduardo Habkost };
26267f6646SMarc-André Lureau
vhost_user_gpu_pci_initfn(Object * obj)27267f6646SMarc-André Lureau static void vhost_user_gpu_pci_initfn(Object *obj)
28267f6646SMarc-André Lureau {
29267f6646SMarc-André Lureau VhostUserGPUPCI *dev = VHOST_USER_GPU_PCI(obj);
30267f6646SMarc-André Lureau
31267f6646SMarc-André Lureau virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
32267f6646SMarc-André Lureau TYPE_VHOST_USER_GPU);
33267f6646SMarc-André Lureau
34267f6646SMarc-André Lureau VIRTIO_GPU_PCI_BASE(obj)->vgpu = VIRTIO_GPU_BASE(&dev->vdev);
35267f6646SMarc-André Lureau
36267f6646SMarc-André Lureau object_property_add_alias(obj, "chardev",
37d2623129SMarkus Armbruster OBJECT(&dev->vdev), "chardev");
38267f6646SMarc-André Lureau }
39267f6646SMarc-André Lureau
40267f6646SMarc-André Lureau static const VirtioPCIDeviceTypeInfo vhost_user_gpu_pci_info = {
41267f6646SMarc-André Lureau .generic_name = TYPE_VHOST_USER_GPU_PCI,
42267f6646SMarc-André Lureau .parent = TYPE_VIRTIO_GPU_PCI_BASE,
43267f6646SMarc-André Lureau .instance_size = sizeof(VhostUserGPUPCI),
44267f6646SMarc-André Lureau .instance_init = vhost_user_gpu_pci_initfn,
45267f6646SMarc-André Lureau };
46561d0f45SGerd Hoffmann module_obj(TYPE_VHOST_USER_GPU_PCI);
47*24ce7aa7SJose R. Ziviani module_kconfig(VHOST_USER_GPU);
48267f6646SMarc-André Lureau
vhost_user_gpu_pci_register_types(void)49267f6646SMarc-André Lureau static void vhost_user_gpu_pci_register_types(void)
50267f6646SMarc-André Lureau {
51267f6646SMarc-André Lureau virtio_pci_types_register(&vhost_user_gpu_pci_info);
52267f6646SMarc-André Lureau }
53267f6646SMarc-André Lureau
54267f6646SMarc-André Lureau type_init(vhost_user_gpu_pci_register_types)
55