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" 18*2ae16a6aSMarkus Armbruster #include "qapi/qapi-types-misc.h" 195f503cd9SPankaj Gupta #include "sysemu/hostmem.h" 205f503cd9SPankaj Gupta 215f503cd9SPankaj Gupta #define TYPE_VIRTIO_PMEM "virtio-pmem" 225f503cd9SPankaj Gupta 235f503cd9SPankaj Gupta #define VIRTIO_PMEM(obj) \ 245f503cd9SPankaj Gupta OBJECT_CHECK(VirtIOPMEM, (obj), TYPE_VIRTIO_PMEM) 255f503cd9SPankaj Gupta #define VIRTIO_PMEM_CLASS(oc) \ 265f503cd9SPankaj Gupta OBJECT_CLASS_CHECK(VirtIOPMEMClass, (oc), TYPE_VIRTIO_PMEM) 275f503cd9SPankaj Gupta #define VIRTIO_PMEM_GET_CLASS(obj) \ 285f503cd9SPankaj Gupta OBJECT_GET_CLASS(VirtIOPMEMClass, (obj), TYPE_VIRTIO_PMEM) 295f503cd9SPankaj Gupta 305f503cd9SPankaj Gupta #define VIRTIO_PMEM_ADDR_PROP "memaddr" 315f503cd9SPankaj Gupta #define VIRTIO_PMEM_MEMDEV_PROP "memdev" 325f503cd9SPankaj Gupta 335f503cd9SPankaj Gupta typedef struct VirtIOPMEM { 345f503cd9SPankaj Gupta VirtIODevice parent_obj; 355f503cd9SPankaj Gupta 365f503cd9SPankaj Gupta VirtQueue *rq_vq; 375f503cd9SPankaj Gupta uint64_t start; 385f503cd9SPankaj Gupta HostMemoryBackend *memdev; 395f503cd9SPankaj Gupta } VirtIOPMEM; 405f503cd9SPankaj Gupta 415f503cd9SPankaj Gupta typedef struct VirtIOPMEMClass { 425f503cd9SPankaj Gupta /* private */ 435f503cd9SPankaj Gupta VirtIODevice parent; 445f503cd9SPankaj Gupta 455f503cd9SPankaj Gupta /* public */ 465f503cd9SPankaj Gupta void (*fill_device_info)(const VirtIOPMEM *pmem, VirtioPMEMDeviceInfo *vi); 475f503cd9SPankaj Gupta MemoryRegion *(*get_memory_region)(VirtIOPMEM *pmem, Error **errp); 485f503cd9SPankaj Gupta } VirtIOPMEMClass; 495f503cd9SPankaj Gupta 505f503cd9SPankaj Gupta #endif 51