]> git.proxmox.com Git - mirror_qemu.git/blame - memory.h
memory: code motion: move MEMORY_LISTENER_CALL()
[mirror_qemu.git] / memory.h
CommitLineData
093bc2cd
AK
1/*
2 * Physical memory management API
3 *
4 * Copyright 2011 Red Hat, Inc. and/or its affiliates
5 *
6 * Authors:
7 * Avi Kivity <avi@redhat.com>
8 *
9 * This work is licensed under the terms of the GNU GPL, version 2. See
10 * the COPYING file in the top-level directory.
11 *
12 */
13
14#ifndef MEMORY_H
15#define MEMORY_H
16
17#ifndef CONFIG_USER_ONLY
18
19#include <stdint.h>
20#include <stdbool.h>
21#include "qemu-common.h"
22#include "cpu-common.h"
23#include "targphys.h"
24#include "qemu-queue.h"
658b2224 25#include "iorange.h"
627a0e90 26#include "ioport.h"
08dafab4 27#include "int128.h"
093bc2cd
AK
28
29typedef struct MemoryRegionOps MemoryRegionOps;
30typedef struct MemoryRegion MemoryRegion;
627a0e90 31typedef struct MemoryRegionPortio MemoryRegionPortio;
74901c3b 32typedef struct MemoryRegionMmio MemoryRegionMmio;
093bc2cd
AK
33
34/* Must match *_DIRTY_FLAGS in cpu-all.h. To be replaced with dynamic
35 * registration.
36 */
37#define DIRTY_MEMORY_VGA 0
38#define DIRTY_MEMORY_CODE 1
39#define DIRTY_MEMORY_MIGRATION 3
40
74901c3b
AK
41struct MemoryRegionMmio {
42 CPUReadMemoryFunc *read[3];
43 CPUWriteMemoryFunc *write[3];
44};
45
093bc2cd
AK
46/*
47 * Memory region callbacks
48 */
49struct MemoryRegionOps {
50 /* Read from the memory region. @addr is relative to @mr; @size is
51 * in bytes. */
52 uint64_t (*read)(void *opaque,
53 target_phys_addr_t addr,
54 unsigned size);
55 /* Write to the memory region. @addr is relative to @mr; @size is
56 * in bytes. */
57 void (*write)(void *opaque,
58 target_phys_addr_t addr,
59 uint64_t data,
60 unsigned size);
61
62 enum device_endian endianness;
63 /* Guest-visible constraints: */
64 struct {
65 /* If nonzero, specify bounds on access sizes beyond which a machine
66 * check is thrown.
67 */
68 unsigned min_access_size;
69 unsigned max_access_size;
70 /* If true, unaligned accesses are supported. Otherwise unaligned
71 * accesses throw machine checks.
72 */
73 bool unaligned;
897fa7cf
AK
74 /*
75 * If present, and returns #false, the transaction is not accepted
76 * by the device (and results in machine dependent behaviour such
77 * as a machine check exception).
78 */
79 bool (*accepts)(void *opaque, target_phys_addr_t addr,
80 unsigned size, bool is_write);
093bc2cd
AK
81 } valid;
82 /* Internal implementation constraints: */
83 struct {
84 /* If nonzero, specifies the minimum size implemented. Smaller sizes
85 * will be rounded upwards and a partial result will be returned.
86 */
87 unsigned min_access_size;
88 /* If nonzero, specifies the maximum size implemented. Larger sizes
89 * will be done as a series of accesses with smaller sizes.
90 */
91 unsigned max_access_size;
92 /* If true, unaligned accesses are supported. Otherwise all accesses
93 * are converted to (possibly multiple) naturally aligned accesses.
94 */
95 bool unaligned;
96 } impl;
627a0e90
AK
97
98 /* If .read and .write are not present, old_portio may be used for
99 * backwards compatibility with old portio registration
100 */
101 const MemoryRegionPortio *old_portio;
74901c3b
AK
102 /* If .read and .write are not present, old_mmio may be used for
103 * backwards compatibility with old mmio registration
104 */
105 const MemoryRegionMmio old_mmio;
093bc2cd
AK
106};
107
108typedef struct CoalescedMemoryRange CoalescedMemoryRange;
3e9d69e7 109typedef struct MemoryRegionIoeventfd MemoryRegionIoeventfd;
093bc2cd
AK
110
111struct MemoryRegion {
112 /* All fields are private - violators will be prosecuted */
113 const MemoryRegionOps *ops;
114 void *opaque;
115 MemoryRegion *parent;
08dafab4 116 Int128 size;
093bc2cd 117 target_phys_addr_t addr;
545e92e0 118 void (*destructor)(MemoryRegion *mr);
093bc2cd 119 ram_addr_t ram_addr;
658b2224 120 IORange iorange;
b3b00c78 121 bool subpage;
14a3c10a 122 bool terminates;
d0a9b5bc 123 bool readable;
8ea9252a 124 bool ram;
fb1cd6f9 125 bool readonly; /* For RAM regions */
6bba19ba 126 bool enabled;
75c578dc 127 bool rom_device;
1660e72d 128 bool warning_printed; /* For reservations */
093bc2cd
AK
129 MemoryRegion *alias;
130 target_phys_addr_t alias_offset;
131 unsigned priority;
132 bool may_overlap;
133 QTAILQ_HEAD(subregions, MemoryRegion) subregions;
134 QTAILQ_ENTRY(MemoryRegion) subregions_link;
135 QTAILQ_HEAD(coalesced_ranges, CoalescedMemoryRange) coalesced;
136 const char *name;
5a583347 137 uint8_t dirty_log_mask;
3e9d69e7
AK
138 unsigned ioeventfd_nb;
139 MemoryRegionIoeventfd *ioeventfds;
093bc2cd
AK
140};
141
627a0e90
AK
142struct MemoryRegionPortio {
143 uint32_t offset;
144 uint32_t len;
145 unsigned size;
146 IOPortReadFunc *read;
147 IOPortWriteFunc *write;
148};
149
2dd30228 150#define PORTIO_END_OF_LIST() { }
627a0e90 151
e2177955
AK
152typedef struct MemoryRegionSection MemoryRegionSection;
153
154/**
155 * MemoryRegionSection: describes a fragment of a #MemoryRegion
156 *
157 * @mr: the region, or %NULL if empty
7664e80c 158 * @address_space: the address space the region is mapped in
e2177955
AK
159 * @offset_within_region: the beginning of the section, relative to @mr's start
160 * @size: the size of the section; will not exceed @mr's boundaries
161 * @offset_within_address_space: the address of the first byte of the section
162 * relative to the region's address space
163 */
164struct MemoryRegionSection {
165 MemoryRegion *mr;
7664e80c 166 MemoryRegion *address_space;
e2177955
AK
167 target_phys_addr_t offset_within_region;
168 uint64_t size;
169 target_phys_addr_t offset_within_address_space;
170};
171
7664e80c
AK
172typedef struct MemoryListener MemoryListener;
173
174/**
175 * MemoryListener: callbacks structure for updates to the physical memory map
176 *
177 * Allows a component to adjust to changes in the guest-visible memory map.
178 * Use with memory_listener_register() and memory_listener_unregister().
179 */
180struct MemoryListener {
181 void (*region_add)(MemoryListener *listener, MemoryRegionSection *section);
182 void (*region_del)(MemoryListener *listener, MemoryRegionSection *section);
183 void (*log_start)(MemoryListener *listener, MemoryRegionSection *section);
184 void (*log_stop)(MemoryListener *listener, MemoryRegionSection *section);
185 void (*log_sync)(MemoryListener *listener, MemoryRegionSection *section);
186 void (*log_global_start)(MemoryListener *listener);
187 void (*log_global_stop)(MemoryListener *listener);
72e22d2f
AK
188 /* Lower = earlier (during add), later (during del) */
189 unsigned priority;
190 QTAILQ_ENTRY(MemoryListener) link;
7664e80c
AK
191};
192
093bc2cd
AK
193/**
194 * memory_region_init: Initialize a memory region
195 *
69ddaf66 196 * The region typically acts as a container for other memory regions. Use
093bc2cd
AK
197 * memory_region_add_subregion() to add subregions.
198 *
199 * @mr: the #MemoryRegion to be initialized
200 * @name: used for debugging; not visible to the user or ABI
201 * @size: size of the region; any subregions beyond this size will be clipped
202 */
203void memory_region_init(MemoryRegion *mr,
204 const char *name,
205 uint64_t size);
206/**
207 * memory_region_init_io: Initialize an I/O memory region.
208 *
69ddaf66 209 * Accesses into the region will cause the callbacks in @ops to be called.
093bc2cd
AK
210 * if @size is nonzero, subregions will be clipped to @size.
211 *
212 * @mr: the #MemoryRegion to be initialized.
213 * @ops: a structure containing read and write callbacks to be used when
214 * I/O is performed on the region.
215 * @opaque: passed to to the read and write callbacks of the @ops structure.
216 * @name: used for debugging; not visible to the user or ABI
217 * @size: size of the region.
218 */
219void memory_region_init_io(MemoryRegion *mr,
220 const MemoryRegionOps *ops,
221 void *opaque,
222 const char *name,
223 uint64_t size);
224
225/**
226 * memory_region_init_ram: Initialize RAM memory region. Accesses into the
69ddaf66 227 * region will modify memory directly.
093bc2cd
AK
228 *
229 * @mr: the #MemoryRegion to be initialized.
c5705a77 230 * @name: the name of the region.
093bc2cd
AK
231 * @size: size of the region.
232 */
233void memory_region_init_ram(MemoryRegion *mr,
093bc2cd
AK
234 const char *name,
235 uint64_t size);
236
237/**
238 * memory_region_init_ram: Initialize RAM memory region from a user-provided.
69ddaf66 239 * pointer. Accesses into the region will modify
093bc2cd
AK
240 * memory directly.
241 *
242 * @mr: the #MemoryRegion to be initialized.
c5705a77 243 * @name: the name of the region.
093bc2cd
AK
244 * @size: size of the region.
245 * @ptr: memory to be mapped; must contain at least @size bytes.
246 */
247void memory_region_init_ram_ptr(MemoryRegion *mr,
093bc2cd
AK
248 const char *name,
249 uint64_t size,
250 void *ptr);
251
252/**
253 * memory_region_init_alias: Initialize a memory region that aliases all or a
254 * part of another memory region.
255 *
256 * @mr: the #MemoryRegion to be initialized.
257 * @name: used for debugging; not visible to the user or ABI
258 * @orig: the region to be referenced; @mr will be equivalent to
259 * @orig between @offset and @offset + @size - 1.
260 * @offset: start of the section in @orig to be referenced.
261 * @size: size of the region.
262 */
263void memory_region_init_alias(MemoryRegion *mr,
264 const char *name,
265 MemoryRegion *orig,
266 target_phys_addr_t offset,
267 uint64_t size);
d0a9b5bc
AK
268
269/**
270 * memory_region_init_rom_device: Initialize a ROM memory region. Writes are
271 * handled via callbacks.
272 *
273 * @mr: the #MemoryRegion to be initialized.
274 * @ops: callbacks for write access handling.
c5705a77 275 * @name: the name of the region.
d0a9b5bc
AK
276 * @size: size of the region.
277 */
278void memory_region_init_rom_device(MemoryRegion *mr,
279 const MemoryRegionOps *ops,
75f5941c 280 void *opaque,
d0a9b5bc
AK
281 const char *name,
282 uint64_t size);
283
1660e72d
JK
284/**
285 * memory_region_init_reservation: Initialize a memory region that reserves
286 * I/O space.
287 *
288 * A reservation region primariy serves debugging purposes. It claims I/O
289 * space that is not supposed to be handled by QEMU itself. Any access via
290 * the memory API will cause an abort().
291 *
292 * @mr: the #MemoryRegion to be initialized
293 * @name: used for debugging; not visible to the user or ABI
294 * @size: size of the region.
295 */
296void memory_region_init_reservation(MemoryRegion *mr,
297 const char *name,
298 uint64_t size);
093bc2cd 299/**
69ddaf66 300 * memory_region_destroy: Destroy a memory region and reclaim all resources.
093bc2cd
AK
301 *
302 * @mr: the region to be destroyed. May not currently be a subregion
303 * (see memory_region_add_subregion()) or referenced in an alias
304 * (see memory_region_init_alias()).
305 */
306void memory_region_destroy(MemoryRegion *mr);
307
308/**
309 * memory_region_size: get a memory region's size.
310 *
311 * @mr: the memory region being queried.
312 */
313uint64_t memory_region_size(MemoryRegion *mr);
314
8ea9252a
AK
315/**
316 * memory_region_is_ram: check whether a memory region is random access
317 *
318 * Returns %true is a memory region is random access.
319 *
320 * @mr: the memory region being queried
321 */
322bool memory_region_is_ram(MemoryRegion *mr);
323
8991c79b
AK
324/**
325 * memory_region_name: get a memory region's name
326 *
327 * Returns the string that was used to initialize the memory region.
328 *
329 * @mr: the memory region being queried
330 */
331const char *memory_region_name(MemoryRegion *mr);
332
55043ba3
AK
333/**
334 * memory_region_is_logging: return whether a memory region is logging writes
335 *
336 * Returns %true if the memory region is logging writes
337 *
338 * @mr: the memory region being queried
339 */
340bool memory_region_is_logging(MemoryRegion *mr);
341
ce7923da
AK
342/**
343 * memory_region_is_rom: check whether a memory region is ROM
344 *
345 * Returns %true is a memory region is read-only memory.
346 *
347 * @mr: the memory region being queried
348 */
349bool memory_region_is_rom(MemoryRegion *mr);
350
093bc2cd
AK
351/**
352 * memory_region_get_ram_ptr: Get a pointer into a RAM memory region.
353 *
354 * Returns a host pointer to a RAM memory region (created with
355 * memory_region_init_ram() or memory_region_init_ram_ptr()). Use with
356 * care.
357 *
358 * @mr: the memory region being queried.
359 */
360void *memory_region_get_ram_ptr(MemoryRegion *mr);
361
093bc2cd
AK
362/**
363 * memory_region_set_log: Turn dirty logging on or off for a region.
364 *
365 * Turns dirty logging on or off for a specified client (display, migration).
366 * Only meaningful for RAM regions.
367 *
368 * @mr: the memory region being updated.
369 * @log: whether dirty logging is to be enabled or disabled.
370 * @client: the user of the logging information; %DIRTY_MEMORY_MIGRATION or
371 * %DIRTY_MEMORY_VGA.
372 */
373void memory_region_set_log(MemoryRegion *mr, bool log, unsigned client);
374
375/**
cd7a45c9
BS
376 * memory_region_get_dirty: Check whether a range of bytes is dirty
377 * for a specified client.
093bc2cd 378 *
cd7a45c9 379 * Checks whether a range of bytes has been written to since the last
093bc2cd
AK
380 * call to memory_region_reset_dirty() with the same @client. Dirty logging
381 * must be enabled.
382 *
383 * @mr: the memory region being queried.
384 * @addr: the address (relative to the start of the region) being queried.
cd7a45c9 385 * @size: the size of the range being queried.
093bc2cd
AK
386 * @client: the user of the logging information; %DIRTY_MEMORY_MIGRATION or
387 * %DIRTY_MEMORY_VGA.
388 */
389bool memory_region_get_dirty(MemoryRegion *mr, target_phys_addr_t addr,
cd7a45c9 390 target_phys_addr_t size, unsigned client);
093bc2cd
AK
391
392/**
fd4aa979 393 * memory_region_set_dirty: Mark a range of bytes as dirty in a memory region.
093bc2cd 394 *
fd4aa979
BS
395 * Marks a range of bytes as dirty, after it has been dirtied outside
396 * guest code.
093bc2cd 397 *
fd4aa979 398 * @mr: the memory region being dirtied.
093bc2cd 399 * @addr: the address (relative to the start of the region) being dirtied.
fd4aa979 400 * @size: size of the range being dirtied.
093bc2cd 401 */
fd4aa979
BS
402void memory_region_set_dirty(MemoryRegion *mr, target_phys_addr_t addr,
403 target_phys_addr_t size);
093bc2cd
AK
404
405/**
406 * memory_region_sync_dirty_bitmap: Synchronize a region's dirty bitmap with
407 * any external TLBs (e.g. kvm)
408 *
409 * Flushes dirty information from accelerators such as kvm and vhost-net
410 * and makes it available to users of the memory API.
411 *
412 * @mr: the region being flushed.
413 */
414void memory_region_sync_dirty_bitmap(MemoryRegion *mr);
415
416/**
417 * memory_region_reset_dirty: Mark a range of pages as clean, for a specified
418 * client.
419 *
420 * Marks a range of pages as no longer dirty.
421 *
422 * @mr: the region being updated.
423 * @addr: the start of the subrange being cleaned.
424 * @size: the size of the subrange being cleaned.
425 * @client: the user of the logging information; %DIRTY_MEMORY_MIGRATION or
426 * %DIRTY_MEMORY_VGA.
427 */
428void memory_region_reset_dirty(MemoryRegion *mr, target_phys_addr_t addr,
429 target_phys_addr_t size, unsigned client);
430
431/**
432 * memory_region_set_readonly: Turn a memory region read-only (or read-write)
433 *
434 * Allows a memory region to be marked as read-only (turning it into a ROM).
435 * only useful on RAM regions.
436 *
437 * @mr: the region being updated.
438 * @readonly: whether rhe region is to be ROM or RAM.
439 */
440void memory_region_set_readonly(MemoryRegion *mr, bool readonly);
441
d0a9b5bc
AK
442/**
443 * memory_region_rom_device_set_readable: enable/disable ROM readability
444 *
445 * Allows a ROM device (initialized with memory_region_init_rom_device() to
446 * to be marked as readable (default) or not readable. When it is readable,
447 * the device is mapped to guest memory. When not readable, reads are
448 * forwarded to the #MemoryRegion.read function.
449 *
450 * @mr: the memory region to be updated
451 * @readable: whether reads are satisified directly (%true) or via callbacks
452 * (%false)
453 */
454void memory_region_rom_device_set_readable(MemoryRegion *mr, bool readable);
455
093bc2cd
AK
456/**
457 * memory_region_set_coalescing: Enable memory coalescing for the region.
458 *
459 * Enabled writes to a region to be queued for later processing. MMIO ->write
460 * callbacks may be delayed until a non-coalesced MMIO is issued.
461 * Only useful for IO regions. Roughly similar to write-combining hardware.
462 *
463 * @mr: the memory region to be write coalesced
464 */
465void memory_region_set_coalescing(MemoryRegion *mr);
466
467/**
468 * memory_region_add_coalescing: Enable memory coalescing for a sub-range of
469 * a region.
470 *
471 * Like memory_region_set_coalescing(), but works on a sub-range of a region.
472 * Multiple calls can be issued coalesced disjoint ranges.
473 *
474 * @mr: the memory region to be updated.
475 * @offset: the start of the range within the region to be coalesced.
476 * @size: the size of the subrange to be coalesced.
477 */
478void memory_region_add_coalescing(MemoryRegion *mr,
479 target_phys_addr_t offset,
480 uint64_t size);
481
482/**
483 * memory_region_clear_coalescing: Disable MMIO coalescing for the region.
484 *
485 * Disables any coalescing caused by memory_region_set_coalescing() or
486 * memory_region_add_coalescing(). Roughly equivalent to uncacheble memory
487 * hardware.
488 *
489 * @mr: the memory region to be updated.
490 */
491void memory_region_clear_coalescing(MemoryRegion *mr);
492
3e9d69e7
AK
493/**
494 * memory_region_add_eventfd: Request an eventfd to be triggered when a word
495 * is written to a location.
496 *
497 * Marks a word in an IO region (initialized with memory_region_init_io())
498 * as a trigger for an eventfd event. The I/O callback will not be called.
69ddaf66 499 * The caller must be prepared to handle failure (that is, take the required
3e9d69e7
AK
500 * action if the callback _is_ called).
501 *
502 * @mr: the memory region being updated.
503 * @addr: the address within @mr that is to be monitored
504 * @size: the size of the access to trigger the eventfd
505 * @match_data: whether to match against @data, instead of just @addr
506 * @data: the data to match against the guest write
507 * @fd: the eventfd to be triggered when @addr, @size, and @data all match.
508 **/
509void memory_region_add_eventfd(MemoryRegion *mr,
510 target_phys_addr_t addr,
511 unsigned size,
512 bool match_data,
513 uint64_t data,
514 int fd);
515
516/**
69ddaf66 517 * memory_region_del_eventfd: Cancel an eventfd.
3e9d69e7 518 *
69ddaf66
ASRJ
519 * Cancels an eventfd trigger requested by a previous
520 * memory_region_add_eventfd() call.
3e9d69e7
AK
521 *
522 * @mr: the memory region being updated.
523 * @addr: the address within @mr that is to be monitored
524 * @size: the size of the access to trigger the eventfd
525 * @match_data: whether to match against @data, instead of just @addr
526 * @data: the data to match against the guest write
527 * @fd: the eventfd to be triggered when @addr, @size, and @data all match.
528 */
529void memory_region_del_eventfd(MemoryRegion *mr,
530 target_phys_addr_t addr,
531 unsigned size,
532 bool match_data,
533 uint64_t data,
534 int fd);
093bc2cd 535/**
69ddaf66 536 * memory_region_add_subregion: Add a subregion to a container.
093bc2cd 537 *
69ddaf66 538 * Adds a subregion at @offset. The subregion may not overlap with other
093bc2cd
AK
539 * subregions (except for those explicitly marked as overlapping). A region
540 * may only be added once as a subregion (unless removed with
541 * memory_region_del_subregion()); use memory_region_init_alias() if you
542 * want a region to be a subregion in multiple locations.
543 *
544 * @mr: the region to contain the new subregion; must be a container
545 * initialized with memory_region_init().
546 * @offset: the offset relative to @mr where @subregion is added.
547 * @subregion: the subregion to be added.
548 */
549void memory_region_add_subregion(MemoryRegion *mr,
550 target_phys_addr_t offset,
551 MemoryRegion *subregion);
552/**
69ddaf66 553 * memory_region_add_subregion: Add a subregion to a container, with overlap.
093bc2cd 554 *
69ddaf66 555 * Adds a subregion at @offset. The subregion may overlap with other
093bc2cd
AK
556 * subregions. Conflicts are resolved by having a higher @priority hide a
557 * lower @priority. Subregions without priority are taken as @priority 0.
558 * A region may only be added once as a subregion (unless removed with
559 * memory_region_del_subregion()); use memory_region_init_alias() if you
560 * want a region to be a subregion in multiple locations.
561 *
562 * @mr: the region to contain the new subregion; must be a container
563 * initialized with memory_region_init().
564 * @offset: the offset relative to @mr where @subregion is added.
565 * @subregion: the subregion to be added.
566 * @priority: used for resolving overlaps; highest priority wins.
567 */
568void memory_region_add_subregion_overlap(MemoryRegion *mr,
569 target_phys_addr_t offset,
570 MemoryRegion *subregion,
571 unsigned priority);
e34911c4
AK
572
573/**
574 * memory_region_get_ram_addr: Get the ram address associated with a memory
575 * region
576 *
dabdf394 577 * DO NOT USE THIS FUNCTION. This is a temporary workaround while the Xen
e34911c4
AK
578 * code is being reworked.
579 */
580ram_addr_t memory_region_get_ram_addr(MemoryRegion *mr);
581
093bc2cd
AK
582/**
583 * memory_region_del_subregion: Remove a subregion.
584 *
585 * Removes a subregion from its container.
586 *
587 * @mr: the container to be updated.
588 * @subregion: the region being removed; must be a current subregion of @mr.
589 */
590void memory_region_del_subregion(MemoryRegion *mr,
591 MemoryRegion *subregion);
592
6bba19ba
AK
593/*
594 * memory_region_set_enabled: dynamically enable or disable a region
595 *
596 * Enables or disables a memory region. A disabled memory region
597 * ignores all accesses to itself and its subregions. It does not
598 * obscure sibling subregions with lower priority - it simply behaves as
599 * if it was removed from the hierarchy.
600 *
601 * Regions default to being enabled.
602 *
603 * @mr: the region to be updated
604 * @enabled: whether to enable or disable the region
605 */
606void memory_region_set_enabled(MemoryRegion *mr, bool enabled);
607
2282e1af
AK
608/*
609 * memory_region_set_address: dynamically update the address of a region
610 *
611 * Dynamically updates the address of a region, relative to its parent.
612 * May be used on regions are currently part of a memory hierarchy.
613 *
614 * @mr: the region to be updated
615 * @addr: new address, relative to parent region
616 */
617void memory_region_set_address(MemoryRegion *mr, target_phys_addr_t addr);
618
4703359e
AK
619/*
620 * memory_region_set_alias_offset: dynamically update a memory alias's offset
621 *
622 * Dynamically updates the offset into the target region that an alias points
623 * to, as if the fourth argument to memory_region_init_alias() has changed.
624 *
625 * @mr: the #MemoryRegion to be updated; should be an alias.
626 * @offset: the new offset into the target memory region
627 */
628void memory_region_set_alias_offset(MemoryRegion *mr,
629 target_phys_addr_t offset);
630
e2177955
AK
631/**
632 * memory_region_find: locate a MemoryRegion in an address space
633 *
634 * Locates the first #MemoryRegion within an address space given by
635 * @address_space that overlaps the range given by @addr and @size.
636 *
637 * Returns a #MemoryRegionSection that describes a contiguous overlap.
638 * It will have the following characteristics:
639 * .@offset_within_address_space >= @addr
640 * .@offset_within_address_space + .@size <= @addr + @size
641 * .@size = 0 iff no overlap was found
642 * .@mr is non-%NULL iff an overlap was found
643 *
644 * @address_space: a top-level (i.e. parentless) region that contains
645 * the region to be found
646 * @addr: start of the area within @address_space to be searched
647 * @size: size of the area to be searched
648 */
649MemoryRegionSection memory_region_find(MemoryRegion *address_space,
650 target_phys_addr_t addr, uint64_t size);
651
86e775c6
AK
652
653/**
654 * memory_global_sync_dirty_bitmap: synchronize the dirty log for all memory
655 *
656 * Synchronizes the dirty page log for an entire address space.
657 * @address_space: a top-level (i.e. parentless) region that contains the
658 * memory being synchronized
659 */
660void memory_global_sync_dirty_bitmap(MemoryRegion *address_space);
661
69ddaf66
ASRJ
662/**
663 * memory_region_transaction_begin: Start a transaction.
664 *
665 * During a transaction, changes will be accumulated and made visible
dabdf394 666 * only when the transaction ends (is committed).
4ef4db86
AK
667 */
668void memory_region_transaction_begin(void);
69ddaf66
ASRJ
669
670/**
671 * memory_region_transaction_commit: Commit a transaction and make changes
672 * visible to the guest.
4ef4db86
AK
673 */
674void memory_region_transaction_commit(void);
675
7664e80c
AK
676/**
677 * memory_listener_register: register callbacks to be called when memory
678 * sections are mapped or unmapped into an address
679 * space
680 *
681 * @listener: an object containing the callbacks to be called
682 */
683void memory_listener_register(MemoryListener *listener);
684
685/**
686 * memory_listener_unregister: undo the effect of memory_listener_register()
687 *
688 * @listener: an object containing the callbacks to be removed
689 */
690void memory_listener_unregister(MemoryListener *listener);
691
692/**
693 * memory_global_dirty_log_start: begin dirty logging for all regions
694 */
695void memory_global_dirty_log_start(void);
696
697/**
698 * memory_global_dirty_log_stop: begin dirty logging for all regions
699 */
700void memory_global_dirty_log_stop(void);
701
314e2987
BS
702void mtree_info(fprintf_function mon_printf, void *f);
703
093bc2cd
AK
704#endif
705
706#endif