xref: /qemu/hw/virtio/vhost-user-i2c-pci.c (revision 06b40d250ecfa1633209c2e431a7a38acfd03a98)
1538bb6f1SViresh Kumar /*
2538bb6f1SViresh Kumar  * Vhost-user i2c virtio device PCI glue
3538bb6f1SViresh Kumar  *
4538bb6f1SViresh Kumar  * Copyright (c) 2021 Viresh Kumar <viresh.kumar@linaro.org>
5538bb6f1SViresh Kumar  *
6538bb6f1SViresh Kumar  * SPDX-License-Identifier: GPL-2.0-or-later
7538bb6f1SViresh Kumar  */
8538bb6f1SViresh Kumar 
9538bb6f1SViresh Kumar #include "qemu/osdep.h"
10538bb6f1SViresh Kumar #include "hw/qdev-properties.h"
11538bb6f1SViresh Kumar #include "hw/virtio/vhost-user-i2c.h"
12e1b1f534SAlex Bennée #include "hw/virtio/virtio-pci.h"
13538bb6f1SViresh Kumar 
14538bb6f1SViresh Kumar struct VHostUserI2CPCI {
15538bb6f1SViresh Kumar     VirtIOPCIProxy parent_obj;
16538bb6f1SViresh Kumar     VHostUserI2C vdev;
17538bb6f1SViresh Kumar };
18538bb6f1SViresh Kumar 
19538bb6f1SViresh Kumar typedef struct VHostUserI2CPCI VHostUserI2CPCI;
20538bb6f1SViresh Kumar 
21538bb6f1SViresh Kumar #define TYPE_VHOST_USER_I2C_PCI "vhost-user-i2c-pci-base"
22538bb6f1SViresh Kumar 
DECLARE_INSTANCE_CHECKER(VHostUserI2CPCI,VHOST_USER_I2C_PCI,TYPE_VHOST_USER_I2C_PCI)23538bb6f1SViresh Kumar DECLARE_INSTANCE_CHECKER(VHostUserI2CPCI, VHOST_USER_I2C_PCI,
24538bb6f1SViresh Kumar                          TYPE_VHOST_USER_I2C_PCI)
25538bb6f1SViresh Kumar 
26538bb6f1SViresh Kumar static void vhost_user_i2c_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
27538bb6f1SViresh Kumar {
28538bb6f1SViresh Kumar     VHostUserI2CPCI *dev = VHOST_USER_I2C_PCI(vpci_dev);
29538bb6f1SViresh Kumar     DeviceState *vdev = DEVICE(&dev->vdev);
30538bb6f1SViresh Kumar 
31538bb6f1SViresh Kumar     vpci_dev->nvectors = 1;
32538bb6f1SViresh Kumar     qdev_realize(vdev, BUS(&vpci_dev->bus), errp);
33538bb6f1SViresh Kumar }
34538bb6f1SViresh Kumar 
vhost_user_i2c_pci_class_init(ObjectClass * klass,const void * data)35*12d1a768SPhilippe Mathieu-Daudé static void vhost_user_i2c_pci_class_init(ObjectClass *klass, const void *data)
36538bb6f1SViresh Kumar {
37538bb6f1SViresh Kumar     DeviceClass *dc = DEVICE_CLASS(klass);
38538bb6f1SViresh Kumar     VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
39538bb6f1SViresh Kumar     PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
40538bb6f1SViresh Kumar     k->realize = vhost_user_i2c_pci_realize;
41538bb6f1SViresh Kumar     set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
42538bb6f1SViresh Kumar     pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
43538bb6f1SViresh Kumar     pcidev_k->device_id = 0; /* Set by virtio-pci based on virtio id */
44538bb6f1SViresh Kumar     pcidev_k->revision = 0x00;
45538bb6f1SViresh Kumar     pcidev_k->class_id = PCI_CLASS_COMMUNICATION_OTHER;
46538bb6f1SViresh Kumar }
47538bb6f1SViresh Kumar 
vhost_user_i2c_pci_instance_init(Object * obj)48538bb6f1SViresh Kumar static void vhost_user_i2c_pci_instance_init(Object *obj)
49538bb6f1SViresh Kumar {
50538bb6f1SViresh Kumar     VHostUserI2CPCI *dev = VHOST_USER_I2C_PCI(obj);
51538bb6f1SViresh Kumar 
52538bb6f1SViresh Kumar     virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
53538bb6f1SViresh Kumar                                 TYPE_VHOST_USER_I2C);
54538bb6f1SViresh Kumar }
55538bb6f1SViresh Kumar 
56538bb6f1SViresh Kumar static const VirtioPCIDeviceTypeInfo vhost_user_i2c_pci_info = {
57538bb6f1SViresh Kumar     .base_name = TYPE_VHOST_USER_I2C_PCI,
58538bb6f1SViresh Kumar     .non_transitional_name = "vhost-user-i2c-pci",
59538bb6f1SViresh Kumar     .instance_size = sizeof(VHostUserI2CPCI),
60538bb6f1SViresh Kumar     .instance_init = vhost_user_i2c_pci_instance_init,
61538bb6f1SViresh Kumar     .class_init = vhost_user_i2c_pci_class_init,
62538bb6f1SViresh Kumar };
63538bb6f1SViresh Kumar 
vhost_user_i2c_pci_register(void)64538bb6f1SViresh Kumar static void vhost_user_i2c_pci_register(void)
65538bb6f1SViresh Kumar {
66538bb6f1SViresh Kumar     virtio_pci_types_register(&vhost_user_i2c_pci_info);
67538bb6f1SViresh Kumar }
68538bb6f1SViresh Kumar 
69538bb6f1SViresh Kumar type_init(vhost_user_i2c_pci_register);
70