root / memory_mapping.h @ e3e87df4
History | View | Annotate | Download (2 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 | 80167a8a | Wen Congyang | * This work is licensed under the terms of the GNU GPL, version 2. See
|
10 | 80167a8a | Wen Congyang | * 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 | 80167a8a | Wen Congyang | #include "qemu-queue.h" |
18 | 80167a8a | Wen Congyang | |
19 | fae001f5 | Wen Congyang | #ifndef CONFIG_USER_ONLY
|
20 | 80167a8a | Wen Congyang | /* The physical and virtual address in the memory mapping are contiguous. */
|
21 | 80167a8a | Wen Congyang | typedef struct MemoryMapping { |
22 | 80167a8a | Wen Congyang | target_phys_addr_t phys_addr; |
23 | 80167a8a | Wen Congyang | target_ulong virt_addr; |
24 | 80167a8a | Wen Congyang | ram_addr_t length; |
25 | 80167a8a | Wen Congyang | QTAILQ_ENTRY(MemoryMapping) next; |
26 | 80167a8a | Wen Congyang | } MemoryMapping; |
27 | 80167a8a | Wen Congyang | |
28 | 80167a8a | Wen Congyang | typedef struct MemoryMappingList { |
29 | 80167a8a | Wen Congyang | unsigned int num; |
30 | 80167a8a | Wen Congyang | MemoryMapping *last_mapping; |
31 | 80167a8a | Wen Congyang | QTAILQ_HEAD(, MemoryMapping) head; |
32 | 80167a8a | Wen Congyang | } MemoryMappingList; |
33 | 80167a8a | Wen Congyang | |
34 | 80167a8a | Wen Congyang | /*
|
35 | 80167a8a | Wen Congyang | * add or merge the memory region [phys_addr, phys_addr + length) into the
|
36 | 80167a8a | Wen Congyang | * memory mapping's list. The region's virtual address starts with virt_addr,
|
37 | 80167a8a | Wen Congyang | * and is contiguous. The list is sorted by phys_addr.
|
38 | 80167a8a | Wen Congyang | */
|
39 | 80167a8a | Wen Congyang | void memory_mapping_list_add_merge_sorted(MemoryMappingList *list,
|
40 | 80167a8a | Wen Congyang | target_phys_addr_t phys_addr, |
41 | 80167a8a | Wen Congyang | target_phys_addr_t virt_addr, |
42 | 80167a8a | Wen Congyang | ram_addr_t length); |
43 | 80167a8a | Wen Congyang | |
44 | 80167a8a | Wen Congyang | void memory_mapping_list_free(MemoryMappingList *list);
|
45 | 80167a8a | Wen Congyang | |
46 | 80167a8a | Wen Congyang | void memory_mapping_list_init(MemoryMappingList *list);
|
47 | 80167a8a | Wen Congyang | |
48 | c517076d | Wen Congyang | /*
|
49 | c517076d | Wen Congyang | * Return value:
|
50 | c517076d | Wen Congyang | * 0: success
|
51 | c517076d | Wen Congyang | * -1: failed
|
52 | c517076d | Wen Congyang | * -2: unsupported
|
53 | c517076d | Wen Congyang | */
|
54 | c517076d | Wen Congyang | #if defined(CONFIG_HAVE_GET_MEMORY_MAPPING)
|
55 | c517076d | Wen Congyang | int qemu_get_guest_memory_mapping(MemoryMappingList *list);
|
56 | c517076d | Wen Congyang | #else
|
57 | c517076d | Wen Congyang | static inline int qemu_get_guest_memory_mapping(MemoryMappingList *list) |
58 | c517076d | Wen Congyang | { |
59 | c517076d | Wen Congyang | return -2; |
60 | c517076d | Wen Congyang | } |
61 | c517076d | Wen Congyang | #endif
|
62 | c517076d | Wen Congyang | |
63 | 2b05ab52 | Wen Congyang | /* get guest's memory mapping without do paging(virtual address is 0). */
|
64 | 2b05ab52 | Wen Congyang | void qemu_get_guest_simple_memory_mapping(MemoryMappingList *list);
|
65 | 2b05ab52 | Wen Congyang | |
66 | 783e9b48 | Wen Congyang | void memory_mapping_filter(MemoryMappingList *list, int64_t begin,
|
67 | 783e9b48 | Wen Congyang | int64_t length); |
68 | 783e9b48 | Wen Congyang | |
69 | fae001f5 | Wen Congyang | #else
|
70 | fae001f5 | Wen Congyang | |
71 | fae001f5 | Wen Congyang | /* We use MemoryMappingList* in cpu-all.h */
|
72 | fae001f5 | Wen Congyang | typedef struct MemoryMappingList MemoryMappingList; |
73 | fae001f5 | Wen Congyang | #endif
|
74 | 80167a8a | Wen Congyang | #endif |