]> git.proxmox.com Git - mirror_qemu.git/blob - include/hw/virtio/dataplane/hostmem.h
hw: move headers to include/
[mirror_qemu.git] / include / hw / virtio / dataplane / hostmem.h
1 /*
2 * Thread-safe guest to host memory mapping
3 *
4 * Copyright 2012 Red Hat, Inc. and/or its affiliates
5 *
6 * Authors:
7 * Stefan Hajnoczi <stefanha@redhat.com>
8 *
9 * This work is licensed under the terms of the GNU GPL, version 2 or later.
10 * See the COPYING file in the top-level directory.
11 *
12 */
13
14 #ifndef HOSTMEM_H
15 #define HOSTMEM_H
16
17 #include "exec/memory.h"
18 #include "qemu/thread.h"
19
20 typedef struct {
21 void *host_addr;
22 hwaddr guest_addr;
23 uint64_t size;
24 bool readonly;
25 } HostMemRegion;
26
27 typedef struct {
28 /* The listener is invoked when regions change and a new list of regions is
29 * built up completely before they are installed.
30 */
31 MemoryListener listener;
32 HostMemRegion *new_regions;
33 size_t num_new_regions;
34
35 /* Current regions are accessed from multiple threads either to lookup
36 * addresses or to install a new list of regions. The lock protects the
37 * pointer and the regions.
38 */
39 QemuMutex current_regions_lock;
40 HostMemRegion *current_regions;
41 size_t num_current_regions;
42 } HostMem;
43
44 void hostmem_init(HostMem *hostmem);
45 void hostmem_finalize(HostMem *hostmem);
46
47 /**
48 * Map a guest physical address to a pointer
49 *
50 * Note that there is map/unmap mechanism here. The caller must ensure that
51 * mapped memory is no longer used across events like hot memory unplug. This
52 * can be done with other mechanisms like bdrv_drain_all() that quiesce
53 * in-flight I/O.
54 */
55 void *hostmem_lookup(HostMem *hostmem, hwaddr phys, hwaddr len, bool is_write);
56
57 #endif /* HOSTMEM_H */