xref: /openbmc/qemu/include/sysemu/hostmem.h (revision e6816458)
11f070489SIgor Mammedov /*
21f070489SIgor Mammedov  * QEMU Host Memory Backend
31f070489SIgor Mammedov  *
41f070489SIgor Mammedov  * Copyright (C) 2013-2014 Red Hat Inc
51f070489SIgor Mammedov  *
61f070489SIgor Mammedov  * Authors:
71f070489SIgor Mammedov  *   Igor Mammedov <imammedo@redhat.com>
81f070489SIgor Mammedov  *
91f070489SIgor Mammedov  * This work is licensed under the terms of the GNU GPL, version 2 or later.
101f070489SIgor Mammedov  * See the COPYING file in the top-level directory.
111f070489SIgor Mammedov  */
12121d0712SMarkus Armbruster 
13121d0712SMarkus Armbruster #ifndef SYSEMU_HOSTMEM_H
14121d0712SMarkus Armbruster #define SYSEMU_HOSTMEM_H
151f070489SIgor Mammedov 
16b58c5c2dSMarkus Armbruster #include "sysemu/numa.h"
178ac25c84SMarkus Armbruster #include "qapi/qapi-types-machine.h"
181f070489SIgor Mammedov #include "qom/object.h"
191f070489SIgor Mammedov #include "exec/memory.h"
204cf1b76bSHu Tao #include "qemu/bitmap.h"
21*e6816458SDavid Hildenbrand #include "qemu/thread-context.h"
221f070489SIgor Mammedov 
231f070489SIgor Mammedov #define TYPE_MEMORY_BACKEND "memory-backend"
24c821774aSEduardo Habkost OBJECT_DECLARE_TYPE(HostMemoryBackend, HostMemoryBackendClass,
2530b5707cSEduardo Habkost                     MEMORY_BACKEND)
261f070489SIgor Mammedov 
27900c0ba3SIgor Mammedov /* hostmem-ram.c */
28900c0ba3SIgor Mammedov /**
29900c0ba3SIgor Mammedov  * @TYPE_MEMORY_BACKEND_RAM:
30900c0ba3SIgor Mammedov  * name of backend that uses mmap on the anonymous RAM
31900c0ba3SIgor Mammedov  */
32900c0ba3SIgor Mammedov 
33900c0ba3SIgor Mammedov #define TYPE_MEMORY_BACKEND_RAM "memory-backend-ram"
34900c0ba3SIgor Mammedov 
35900c0ba3SIgor Mammedov /* hostmem-file.c */
36900c0ba3SIgor Mammedov /**
37900c0ba3SIgor Mammedov  * @TYPE_MEMORY_BACKEND_FILE:
38900c0ba3SIgor Mammedov  * name of backend that uses mmap on a file descriptor
39900c0ba3SIgor Mammedov  */
40900c0ba3SIgor Mammedov #define TYPE_MEMORY_BACKEND_FILE "memory-backend-file"
41900c0ba3SIgor Mammedov 
421f070489SIgor Mammedov 
431f070489SIgor Mammedov /**
441f070489SIgor Mammedov  * HostMemoryBackendClass:
451f070489SIgor Mammedov  * @parent_class: opaque parent class container
461f070489SIgor Mammedov  */
471f070489SIgor Mammedov struct HostMemoryBackendClass {
481f070489SIgor Mammedov     ObjectClass parent_class;
49bd9262d9SHu Tao 
50bd9262d9SHu Tao     void (*alloc)(HostMemoryBackend *backend, Error **errp);
511f070489SIgor Mammedov };
521f070489SIgor Mammedov 
531f070489SIgor Mammedov /**
541f070489SIgor Mammedov  * @HostMemoryBackend
551f070489SIgor Mammedov  *
561f070489SIgor Mammedov  * @parent: opaque parent object container
571f070489SIgor Mammedov  * @size: amount of memory backend provides
581f070489SIgor Mammedov  * @mr: MemoryRegion representing host memory belonging to backend
59ffac16faSIgor Mammedov  * @prealloc_threads: number of threads to be used for preallocatining RAM
601f070489SIgor Mammedov  */
611f070489SIgor Mammedov struct HostMemoryBackend {
621f070489SIgor Mammedov     /* private */
631f070489SIgor Mammedov     Object parent;
641f070489SIgor Mammedov 
651f070489SIgor Mammedov     /* protected */
661f070489SIgor Mammedov     uint64_t size;
67fa0cb34dSMarc-André Lureau     bool merge, dump, use_canonical_path;
689181fb70SDavid Hildenbrand     bool prealloc, is_mapped, share, reserve;
69ffac16faSIgor Mammedov     uint32_t prealloc_threads;
70*e6816458SDavid Hildenbrand     ThreadContext *prealloc_context;
714cf1b76bSHu Tao     DECLARE_BITMAP(host_nodes, MAX_NODES + 1);
724cf1b76bSHu Tao     HostMemPolicy policy;
731f070489SIgor Mammedov 
741f070489SIgor Mammedov     MemoryRegion mr;
751f070489SIgor Mammedov };
761f070489SIgor Mammedov 
774728b574SPeter Xu bool host_memory_backend_mr_inited(HostMemoryBackend *backend);
787943e97bSDavid Hildenbrand MemoryRegion *host_memory_backend_get_memory(HostMemoryBackend *backend);
791f070489SIgor Mammedov 
802aece63cSXiao Guangrong void host_memory_backend_set_mapped(HostMemoryBackend *backend, bool mapped);
812aece63cSXiao Guangrong bool host_memory_backend_is_mapped(HostMemoryBackend *backend);
822b108085SDavid Gibson size_t host_memory_backend_pagesize(HostMemoryBackend *memdev);
83fa0cb34dSMarc-André Lureau char *host_memory_backend_get_name(HostMemoryBackend *backend);
842b108085SDavid Gibson 
851f070489SIgor Mammedov #endif
86