15f503cd9SPankaj Gupta /* 25f503cd9SPankaj Gupta * Virtio PMEM device 35f503cd9SPankaj Gupta * 45f503cd9SPankaj Gupta * Copyright (C) 2018-2019 Red Hat, Inc. 55f503cd9SPankaj Gupta * 65f503cd9SPankaj Gupta * Authors: 75f503cd9SPankaj Gupta * Pankaj Gupta <pagupta@redhat.com> 85f503cd9SPankaj Gupta * David Hildenbrand <david@redhat.com> 95f503cd9SPankaj Gupta * 105f503cd9SPankaj Gupta * This work is licensed under the terms of the GNU GPL, version 2. 115f503cd9SPankaj Gupta * See the COPYING file in the top-level directory. 125f503cd9SPankaj Gupta */ 135f503cd9SPankaj Gupta 145f503cd9SPankaj Gupta #ifndef HW_VIRTIO_PMEM_H 155f503cd9SPankaj Gupta #define HW_VIRTIO_PMEM_H 165f503cd9SPankaj Gupta 175f503cd9SPankaj Gupta #include "hw/virtio/virtio.h" 182ae16a6aSMarkus Armbruster #include "qapi/qapi-types-misc.h" 19*db1015e9SEduardo Habkost #include "qom/object.h" 205f503cd9SPankaj Gupta 215f503cd9SPankaj Gupta #define TYPE_VIRTIO_PMEM "virtio-pmem" 225f503cd9SPankaj Gupta 23*db1015e9SEduardo Habkost typedef struct VirtIOPMEM VirtIOPMEM; 24*db1015e9SEduardo Habkost typedef struct VirtIOPMEMClass VirtIOPMEMClass; 255f503cd9SPankaj Gupta #define VIRTIO_PMEM(obj) \ 265f503cd9SPankaj Gupta OBJECT_CHECK(VirtIOPMEM, (obj), TYPE_VIRTIO_PMEM) 275f503cd9SPankaj Gupta #define VIRTIO_PMEM_CLASS(oc) \ 285f503cd9SPankaj Gupta OBJECT_CLASS_CHECK(VirtIOPMEMClass, (oc), TYPE_VIRTIO_PMEM) 295f503cd9SPankaj Gupta #define VIRTIO_PMEM_GET_CLASS(obj) \ 305f503cd9SPankaj Gupta OBJECT_GET_CLASS(VirtIOPMEMClass, (obj), TYPE_VIRTIO_PMEM) 315f503cd9SPankaj Gupta 325f503cd9SPankaj Gupta #define VIRTIO_PMEM_ADDR_PROP "memaddr" 335f503cd9SPankaj Gupta #define VIRTIO_PMEM_MEMDEV_PROP "memdev" 345f503cd9SPankaj Gupta 35*db1015e9SEduardo Habkost struct VirtIOPMEM { 365f503cd9SPankaj Gupta VirtIODevice parent_obj; 375f503cd9SPankaj Gupta 385f503cd9SPankaj Gupta VirtQueue *rq_vq; 395f503cd9SPankaj Gupta uint64_t start; 405f503cd9SPankaj Gupta HostMemoryBackend *memdev; 41*db1015e9SEduardo Habkost }; 425f503cd9SPankaj Gupta 43*db1015e9SEduardo Habkost struct VirtIOPMEMClass { 445f503cd9SPankaj Gupta /* private */ 455f503cd9SPankaj Gupta VirtIODevice parent; 465f503cd9SPankaj Gupta 475f503cd9SPankaj Gupta /* public */ 485f503cd9SPankaj Gupta void (*fill_device_info)(const VirtIOPMEM *pmem, VirtioPMEMDeviceInfo *vi); 495f503cd9SPankaj Gupta MemoryRegion *(*get_memory_region)(VirtIOPMEM *pmem, Error **errp); 50*db1015e9SEduardo Habkost }; 515f503cd9SPankaj Gupta 525f503cd9SPankaj Gupta #endif 53