target-i386: Use mulu2 and muls2
[qemu/pbrook.git] / hw / dataplane / hostmem.h
blobb2cf09333fbdcfa29b6a48f6c47b5b3449b7d0fe
1 /*
2 * Thread-safe guest to host memory mapping
4 * Copyright 2012 Red Hat, Inc. and/or its affiliates
6 * Authors:
7 * Stefan Hajnoczi <stefanha@redhat.com>
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.
14 #ifndef HOSTMEM_H
15 #define HOSTMEM_H
17 #include "exec/memory.h"
18 #include "qemu/thread.h"
20 typedef struct {
21 void *host_addr;
22 hwaddr guest_addr;
23 uint64_t size;
24 bool readonly;
25 } HostMemRegion;
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.
31 MemoryListener listener;
32 HostMemRegion *new_regions;
33 size_t num_new_regions;
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.
39 QemuMutex current_regions_lock;
40 HostMemRegion *current_regions;
41 size_t num_current_regions;
42 } HostMem;
44 void hostmem_init(HostMem *hostmem);
45 void hostmem_finalize(HostMem *hostmem);
47 /**
48 * Map a guest physical address to a pointer
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.
55 void *hostmem_lookup(HostMem *hostmem, hwaddr phys, hwaddr len, bool is_write);
57 #endif /* HOSTMEM_H */