root / memory_mapping.h @ 1de7afc9
History | View | Annotate | Download (1.8 kB)
1 | 80167a8a | Wen Congyang | /*
|
---|---|---|---|
2 | 80167a8a | Wen Congyang | * QEMU memory mapping
|
3 | 80167a8a | Wen Congyang | *
|
4 | 80167a8a | Wen Congyang | * Copyright Fujitsu, Corp. 2011, 2012
|
5 | 80167a8a | Wen Congyang | *
|
6 | 80167a8a | Wen Congyang | * Authors:
|
7 | 80167a8a | Wen Congyang | * Wen Congyang <wency@cn.fujitsu.com>
|
8 | 80167a8a | Wen Congyang | *
|
9 | fc0608ac | Stefan Weil | * This work is licensed under the terms of the GNU GPL, version 2 or later.
|
10 | fc0608ac | Stefan Weil | * See the COPYING file in the top-level directory.
|
11 | 80167a8a | Wen Congyang | *
|
12 | 80167a8a | Wen Congyang | */
|
13 | 80167a8a | Wen Congyang | |
14 | 80167a8a | Wen Congyang | #ifndef MEMORY_MAPPING_H
|
15 | 80167a8a | Wen Congyang | #define MEMORY_MAPPING_H
|
16 | 80167a8a | Wen Congyang | |
17 | 1de7afc9 | Paolo Bonzini | #include "qemu/queue.h" |
18 | 80167a8a | Wen Congyang | |
19 | 80167a8a | Wen Congyang | /* The physical and virtual address in the memory mapping are contiguous. */
|
20 | 80167a8a | Wen Congyang | typedef struct MemoryMapping { |
21 | a8170e5e | Avi Kivity | hwaddr phys_addr; |
22 | 80167a8a | Wen Congyang | target_ulong virt_addr; |
23 | 80167a8a | Wen Congyang | ram_addr_t length; |
24 | 80167a8a | Wen Congyang | QTAILQ_ENTRY(MemoryMapping) next; |
25 | 80167a8a | Wen Congyang | } MemoryMapping; |
26 | 80167a8a | Wen Congyang | |
27 | 80167a8a | Wen Congyang | typedef struct MemoryMappingList { |
28 | 80167a8a | Wen Congyang | unsigned int num; |
29 | 80167a8a | Wen Congyang | MemoryMapping *last_mapping; |
30 | 80167a8a | Wen Congyang | QTAILQ_HEAD(, MemoryMapping) head; |
31 | 80167a8a | Wen Congyang | } MemoryMappingList; |
32 | 80167a8a | Wen Congyang | |
33 | 5f86146f | Paolo Bonzini | int cpu_get_memory_mapping(MemoryMappingList *list, CPUArchState *env);
|
34 | 5f86146f | Paolo Bonzini | bool cpu_paging_enabled(CPUArchState *env);
|
35 | 5f86146f | Paolo Bonzini | |
36 | 80167a8a | Wen Congyang | /*
|
37 | 80167a8a | Wen Congyang | * add or merge the memory region [phys_addr, phys_addr + length) into the
|
38 | 80167a8a | Wen Congyang | * memory mapping's list. The region's virtual address starts with virt_addr,
|
39 | 80167a8a | Wen Congyang | * and is contiguous. The list is sorted by phys_addr.
|
40 | 80167a8a | Wen Congyang | */
|
41 | 80167a8a | Wen Congyang | void memory_mapping_list_add_merge_sorted(MemoryMappingList *list,
|
42 | a8170e5e | Avi Kivity | hwaddr phys_addr, |
43 | a8170e5e | Avi Kivity | hwaddr virt_addr, |
44 | 80167a8a | Wen Congyang | ram_addr_t length); |
45 | 80167a8a | Wen Congyang | |
46 | 80167a8a | Wen Congyang | void memory_mapping_list_free(MemoryMappingList *list);
|
47 | 80167a8a | Wen Congyang | |
48 | 80167a8a | Wen Congyang | void memory_mapping_list_init(MemoryMappingList *list);
|
49 | 80167a8a | Wen Congyang | |
50 | c517076d | Wen Congyang | /*
|
51 | c517076d | Wen Congyang | * Return value:
|
52 | c517076d | Wen Congyang | * 0: success
|
53 | c517076d | Wen Congyang | * -1: failed
|
54 | c517076d | Wen Congyang | * -2: unsupported
|
55 | c517076d | Wen Congyang | */
|
56 | c517076d | Wen Congyang | int qemu_get_guest_memory_mapping(MemoryMappingList *list);
|
57 | c517076d | Wen Congyang | |
58 | 2b05ab52 | Wen Congyang | /* get guest's memory mapping without do paging(virtual address is 0). */
|
59 | 2b05ab52 | Wen Congyang | void qemu_get_guest_simple_memory_mapping(MemoryMappingList *list);
|
60 | 2b05ab52 | Wen Congyang | |
61 | 783e9b48 | Wen Congyang | void memory_mapping_filter(MemoryMappingList *list, int64_t begin,
|
62 | 783e9b48 | Wen Congyang | int64_t length); |
63 | 783e9b48 | Wen Congyang | |
64 | 80167a8a | Wen Congyang | #endif |