1 | /* |
2 | * Virtio PMEM device |
3 | * |
4 | * Copyright (C) 2018-2019 Red Hat, Inc. |
5 | * |
6 | * Authors: |
7 | * Pankaj Gupta <pagupta@redhat.com> |
8 | * David Hildenbrand <david@redhat.com> |
9 | * |
10 | * This work is licensed under the terms of the GNU GPL, version 2. |
11 | * See the COPYING file in the top-level directory. |
12 | */ |
13 | |
14 | #ifndef HW_VIRTIO_PMEM_H |
15 | #define HW_VIRTIO_PMEM_H |
16 | |
17 | #include "hw/virtio/virtio.h" |
18 | #include "qapi/qapi-types-misc.h" |
19 | |
20 | #define TYPE_VIRTIO_PMEM "virtio-pmem" |
21 | |
22 | #define VIRTIO_PMEM(obj) \ |
23 | OBJECT_CHECK(VirtIOPMEM, (obj), TYPE_VIRTIO_PMEM) |
24 | #define VIRTIO_PMEM_CLASS(oc) \ |
25 | OBJECT_CLASS_CHECK(VirtIOPMEMClass, (oc), TYPE_VIRTIO_PMEM) |
26 | #define VIRTIO_PMEM_GET_CLASS(obj) \ |
27 | OBJECT_GET_CLASS(VirtIOPMEMClass, (obj), TYPE_VIRTIO_PMEM) |
28 | |
29 | #define VIRTIO_PMEM_ADDR_PROP "memaddr" |
30 | #define VIRTIO_PMEM_MEMDEV_PROP "memdev" |
31 | |
32 | typedef struct VirtIOPMEM { |
33 | VirtIODevice parent_obj; |
34 | |
35 | VirtQueue *rq_vq; |
36 | uint64_t start; |
37 | HostMemoryBackend *memdev; |
38 | } VirtIOPMEM; |
39 | |
40 | typedef struct VirtIOPMEMClass { |
41 | /* private */ |
42 | VirtIODevice parent; |
43 | |
44 | /* public */ |
45 | void (*fill_device_info)(const VirtIOPMEM *pmem, VirtioPMEMDeviceInfo *vi); |
46 | MemoryRegion *(*get_memory_region)(VirtIOPMEM *pmem, Error **errp); |
47 | } VirtIOPMEMClass; |
48 | |
49 | #endif |
50 | |