Statistics
| Branch: | Revision:

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