]>
Commit | Line | Data |
---|---|---|
1ad2134f | 1 | #ifndef CPU_COMMON_H |
175de524 | 2 | #define CPU_COMMON_H |
1ad2134f | 3 | |
07f35073 | 4 | /* CPU interfaces that are target independent. */ |
1ad2134f | 5 | |
ce927ed9 | 6 | #ifndef CONFIG_USER_ONLY |
022c62cb | 7 | #include "exec/hwaddr.h" |
ce927ed9 | 8 | #endif |
37b76cfd | 9 | |
1de7afc9 PB |
10 | #include "qemu/bswap.h" |
11 | #include "qemu/queue.h" | |
fba0a593 | 12 | #include "qemu/fprintf-fn.h" |
1ad2134f | 13 | |
92a31361 AF |
14 | /** |
15 | * CPUListState: | |
16 | * @cpu_fprintf: Print function. | |
17 | * @file: File to print to using @cpu_fprint. | |
18 | * | |
19 | * State commonly used for iterating over CPU models. | |
20 | */ | |
21 | typedef struct CPUListState { | |
22 | fprintf_function cpu_fprintf; | |
23 | FILE *file; | |
24 | } CPUListState; | |
25 | ||
267f685b PB |
26 | /* The CPU list lock nests outside tb_lock/tb_unlock. */ |
27 | void qemu_init_cpu_list(void); | |
28 | void cpu_list_lock(void); | |
29 | void cpu_list_unlock(void); | |
30 | ||
b3755a91 PB |
31 | #if !defined(CONFIG_USER_ONLY) |
32 | ||
dd310534 AG |
33 | enum device_endian { |
34 | DEVICE_NATIVE_ENDIAN, | |
35 | DEVICE_BIG_ENDIAN, | |
36 | DEVICE_LITTLE_ENDIAN, | |
37 | }; | |
38 | ||
c99a29e7 YX |
39 | #if defined(HOST_WORDS_BIGENDIAN) |
40 | #define DEVICE_HOST_ENDIAN DEVICE_BIG_ENDIAN | |
41 | #else | |
42 | #define DEVICE_HOST_ENDIAN DEVICE_LITTLE_ENDIAN | |
43 | #endif | |
44 | ||
1ad2134f | 45 | /* address in the RAM (different from a physical address) */ |
4be403c8 | 46 | #if defined(CONFIG_XEN_BACKEND) |
f15fbc4b AP |
47 | typedef uint64_t ram_addr_t; |
48 | # define RAM_ADDR_MAX UINT64_MAX | |
49 | # define RAM_ADDR_FMT "%" PRIx64 | |
50 | #else | |
53576999 SW |
51 | typedef uintptr_t ram_addr_t; |
52 | # define RAM_ADDR_MAX UINTPTR_MAX | |
53 | # define RAM_ADDR_FMT "%" PRIxPTR | |
f15fbc4b | 54 | #endif |
1ad2134f | 55 | |
96d0e26c WG |
56 | extern ram_addr_t ram_size; |
57 | ||
1ad2134f PB |
58 | /* memory API */ |
59 | ||
a8170e5e AK |
60 | typedef void CPUWriteMemoryFunc(void *opaque, hwaddr addr, uint32_t value); |
61 | typedef uint32_t CPUReadMemoryFunc(void *opaque, hwaddr addr); | |
1ad2134f | 62 | |
cd19cfa2 | 63 | void qemu_ram_remap(ram_addr_t addr, ram_addr_t length); |
1ad2134f | 64 | /* This should not be used by devices. */ |
07bdaa41 | 65 | ram_addr_t qemu_ram_addr_from_host(void *ptr); |
e3dd7493 | 66 | RAMBlock *qemu_ram_block_by_name(const char *name); |
422148d3 | 67 | RAMBlock *qemu_ram_block_from_host(void *ptr, bool round_offset, |
f615f396 | 68 | ram_addr_t *offset); |
fa53a0e5 GA |
69 | void qemu_ram_set_idstr(RAMBlock *block, const char *name, DeviceState *dev); |
70 | void qemu_ram_unset_idstr(RAMBlock *block); | |
422148d3 | 71 | const char *qemu_ram_get_idstr(RAMBlock *rb); |
463a4ac2 | 72 | bool qemu_ram_is_shared(RAMBlock *rb); |
863e9621 | 73 | size_t qemu_ram_pagesize(RAMBlock *block); |
67f11b5c | 74 | size_t qemu_ram_pagesize_largest(void); |
1ad2134f | 75 | |
a8170e5e | 76 | void cpu_physical_memory_rw(hwaddr addr, uint8_t *buf, |
1ad2134f | 77 | int len, int is_write); |
a8170e5e | 78 | static inline void cpu_physical_memory_read(hwaddr addr, |
3bad9814 | 79 | void *buf, int len) |
1ad2134f PB |
80 | { |
81 | cpu_physical_memory_rw(addr, buf, len, 0); | |
82 | } | |
a8170e5e | 83 | static inline void cpu_physical_memory_write(hwaddr addr, |
3bad9814 | 84 | const void *buf, int len) |
1ad2134f | 85 | { |
3bad9814 | 86 | cpu_physical_memory_rw(addr, (void *)buf, len, 1); |
1ad2134f | 87 | } |
a8170e5e AK |
88 | void *cpu_physical_memory_map(hwaddr addr, |
89 | hwaddr *plen, | |
1ad2134f | 90 | int is_write); |
a8170e5e AK |
91 | void cpu_physical_memory_unmap(void *buffer, hwaddr len, |
92 | int is_write, hwaddr access_len); | |
e95205e1 FZ |
93 | void cpu_register_map_client(QEMUBH *bh); |
94 | void cpu_unregister_map_client(QEMUBH *bh); | |
1ad2134f | 95 | |
a8170e5e | 96 | bool cpu_physical_memory_is_io(hwaddr phys_addr); |
76f35538 | 97 | |
6842a08e BS |
98 | /* Coalesced MMIO regions are areas where write operations can be reordered. |
99 | * This usually implies that write operations are side-effect free. This allows | |
100 | * batching which can make a major impact on performance when using | |
101 | * virtualization. | |
102 | */ | |
6842a08e BS |
103 | void qemu_flush_coalesced_mmio_buffer(void); |
104 | ||
2a221651 | 105 | void cpu_physical_memory_write_rom(AddressSpace *as, hwaddr addr, |
1ad2134f | 106 | const uint8_t *buf, int len); |
582b55a9 | 107 | void cpu_flush_icache_range(hwaddr start, int len); |
1ad2134f | 108 | |
0e0df1e2 | 109 | extern struct MemoryRegion io_mem_rom; |
0e0df1e2 | 110 | extern struct MemoryRegion io_mem_notdirty; |
1ad2134f | 111 | |
e3807054 | 112 | typedef int (RAMBlockIterFunc)(const char *block_name, void *host_addr, |
bd2fa51f MH |
113 | ram_addr_t offset, ram_addr_t length, void *opaque); |
114 | ||
e3807054 | 115 | int qemu_ram_foreach_block(RAMBlockIterFunc func, void *opaque); |
d3a5038c | 116 | int ram_block_discard_range(RAMBlock *rb, uint64_t start, size_t length); |
bd2fa51f | 117 | |
b3755a91 PB |
118 | #endif |
119 | ||
175de524 | 120 | #endif /* CPU_COMMON_H */ |