qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

virtio-balloon-pci.c (2872B)


      1 /*
      2  * Virtio balloon PCI Bindings
      3  *
      4  * Copyright IBM, Corp. 2007
      5  * Copyright (c) 2009 CodeSourcery
      6  *
      7  * Authors:
      8  *  Anthony Liguori   <aliguori@us.ibm.com>
      9  *  Paul Brook        <paul@codesourcery.com>
     10  *
     11  * Contributions after 2012-01-13 are licensed under the terms of the
     12  * GNU GPL, version 2 or (at your option) any later version.
     13  */
     14 
     15 #include "qemu/osdep.h"
     16 
     17 #include "hw/virtio/virtio-pci.h"
     18 #include "hw/qdev-properties.h"
     19 #include "hw/virtio/virtio-balloon.h"
     20 #include "qapi/error.h"
     21 #include "qemu/module.h"
     22 #include "qom/object.h"
     23 
     24 typedef struct VirtIOBalloonPCI VirtIOBalloonPCI;
     25 
     26 /*
     27  * virtio-balloon-pci: This extends VirtioPCIProxy.
     28  */
     29 #define TYPE_VIRTIO_BALLOON_PCI "virtio-balloon-pci-base"
     30 DECLARE_INSTANCE_CHECKER(VirtIOBalloonPCI, VIRTIO_BALLOON_PCI,
     31                          TYPE_VIRTIO_BALLOON_PCI)
     32 
     33 struct VirtIOBalloonPCI {
     34     VirtIOPCIProxy parent_obj;
     35     VirtIOBalloon vdev;
     36 };
     37 
     38 static void virtio_balloon_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
     39 {
     40     VirtIOBalloonPCI *dev = VIRTIO_BALLOON_PCI(vpci_dev);
     41     DeviceState *vdev = DEVICE(&dev->vdev);
     42 
     43     vpci_dev->class_code = PCI_CLASS_OTHERS;
     44     qdev_realize(vdev, BUS(&vpci_dev->bus), errp);
     45 }
     46 
     47 static void virtio_balloon_pci_class_init(ObjectClass *klass, void *data)
     48 {
     49     DeviceClass *dc = DEVICE_CLASS(klass);
     50     VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
     51     PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
     52     k->realize = virtio_balloon_pci_realize;
     53     set_bit(DEVICE_CATEGORY_MISC, dc->categories);
     54     pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
     55     pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_BALLOON;
     56     pcidev_k->revision = VIRTIO_PCI_ABI_VERSION;
     57     pcidev_k->class_id = PCI_CLASS_OTHERS;
     58 }
     59 
     60 static void virtio_balloon_pci_instance_init(Object *obj)
     61 {
     62     VirtIOBalloonPCI *dev = VIRTIO_BALLOON_PCI(obj);
     63 
     64     virtio_instance_init_common(obj, &dev->vdev, sizeof(dev->vdev),
     65                                 TYPE_VIRTIO_BALLOON);
     66     object_property_add_alias(obj, "guest-stats", OBJECT(&dev->vdev),
     67                                   "guest-stats");
     68     object_property_add_alias(obj, "guest-stats-polling-interval",
     69                               OBJECT(&dev->vdev),
     70                               "guest-stats-polling-interval");
     71 }
     72 
     73 static const VirtioPCIDeviceTypeInfo virtio_balloon_pci_info = {
     74     .base_name             = TYPE_VIRTIO_BALLOON_PCI,
     75     .generic_name          = "virtio-balloon-pci",
     76     .transitional_name     = "virtio-balloon-pci-transitional",
     77     .non_transitional_name = "virtio-balloon-pci-non-transitional",
     78     .instance_size = sizeof(VirtIOBalloonPCI),
     79     .instance_init = virtio_balloon_pci_instance_init,
     80     .class_init    = virtio_balloon_pci_class_init,
     81 };
     82 
     83 static void virtio_balloon_pci_register(void)
     84 {
     85     virtio_pci_types_register(&virtio_balloon_pci_info);
     86 }
     87 
     88 type_init(virtio_balloon_pci_register)