1 /* 2 * Virtio MEM device 3 * 4 * Copyright (C) 2020 Red Hat, Inc. 5 * 6 * Authors: 7 * David Hildenbrand <david@redhat.com> 8 * 9 * This work is licensed under the terms of the GNU GPL, version 2. 10 * See the COPYING file in the top-level directory. 11 */ 12 13 #ifndef HW_VIRTIO_MEM_H 14 #define HW_VIRTIO_MEM_H 15 16 #include "standard-headers/linux/virtio_mem.h" 17 #include "hw/virtio/virtio.h" 18 #include "qapi/qapi-types-misc.h" 19 #include "sysemu/hostmem.h" 20 21 #define TYPE_VIRTIO_MEM "virtio-mem" 22 23 #define VIRTIO_MEM(obj) \ 24 OBJECT_CHECK(VirtIOMEM, (obj), TYPE_VIRTIO_MEM) 25 #define VIRTIO_MEM_CLASS(oc) \ 26 OBJECT_CLASS_CHECK(VirtIOMEMClass, (oc), TYPE_VIRTIO_MEM) 27 #define VIRTIO_MEM_GET_CLASS(obj) \ 28 OBJECT_GET_CLASS(VirtIOMEMClass, (obj), TYPE_VIRTIO_MEM) 29 30 #define VIRTIO_MEM_MEMDEV_PROP "memdev" 31 #define VIRTIO_MEM_NODE_PROP "node" 32 #define VIRTIO_MEM_SIZE_PROP "size" 33 #define VIRTIO_MEM_REQUESTED_SIZE_PROP "requested-size" 34 #define VIRTIO_MEM_BLOCK_SIZE_PROP "block-size" 35 #define VIRTIO_MEM_ADDR_PROP "memaddr" 36 37 typedef struct VirtIOMEM { 38 VirtIODevice parent_obj; 39 40 /* guest -> host request queue */ 41 VirtQueue *vq; 42 43 /* bitmap used to track unplugged memory */ 44 int32_t bitmap_size; 45 unsigned long *bitmap; 46 47 /* assigned memory backend and memory region */ 48 HostMemoryBackend *memdev; 49 50 /* NUMA node */ 51 uint32_t node; 52 53 /* assigned address of the region in guest physical memory */ 54 uint64_t addr; 55 56 /* usable region size (<= region_size) */ 57 uint64_t usable_region_size; 58 59 /* actual size (how much the guest plugged) */ 60 uint64_t size; 61 62 /* requested size */ 63 uint64_t requested_size; 64 65 /* block size and alignment */ 66 uint64_t block_size; 67 } VirtIOMEM; 68 69 typedef struct VirtIOMEMClass { 70 /* private */ 71 VirtIODevice parent; 72 73 /* public */ 74 void (*fill_device_info)(const VirtIOMEM *vmen, VirtioMEMDeviceInfo *vi); 75 MemoryRegion *(*get_memory_region)(VirtIOMEM *vmem, Error **errp); 76 } VirtIOMEMClass; 77 78 #endif 79