]> git.proxmox.com Git - qemu.git/blame - include/exec/cpu-common.h
sun4m: Add FCode ROM for TCX framebuffer
[qemu.git] / include / exec / cpu-common.h
CommitLineData
1ad2134f
PB
1#ifndef CPU_COMMON_H
2#define CPU_COMMON_H 1
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
PB
9
10#ifndef NEED_CPU_H
022c62cb 11#include "exec/poison.h"
37b76cfd
PB
12#endif
13
1de7afc9
PB
14#include "qemu/bswap.h"
15#include "qemu/queue.h"
1ad2134f 16
92a31361
AF
17/**
18 * CPUListState:
19 * @cpu_fprintf: Print function.
20 * @file: File to print to using @cpu_fprint.
21 *
22 * State commonly used for iterating over CPU models.
23 */
24typedef struct CPUListState {
25 fprintf_function cpu_fprintf;
26 FILE *file;
27} CPUListState;
28
b3755a91
PB
29#if !defined(CONFIG_USER_ONLY)
30
dd310534
AG
31enum device_endian {
32 DEVICE_NATIVE_ENDIAN,
33 DEVICE_BIG_ENDIAN,
34 DEVICE_LITTLE_ENDIAN,
35};
36
1ad2134f 37/* address in the RAM (different from a physical address) */
4be403c8 38#if defined(CONFIG_XEN_BACKEND)
f15fbc4b
AP
39typedef uint64_t ram_addr_t;
40# define RAM_ADDR_MAX UINT64_MAX
41# define RAM_ADDR_FMT "%" PRIx64
42#else
53576999
SW
43typedef uintptr_t ram_addr_t;
44# define RAM_ADDR_MAX UINTPTR_MAX
45# define RAM_ADDR_FMT "%" PRIxPTR
f15fbc4b 46#endif
1ad2134f
PB
47
48/* memory API */
49
a8170e5e
AK
50typedef void CPUWriteMemoryFunc(void *opaque, hwaddr addr, uint32_t value);
51typedef uint32_t CPUReadMemoryFunc(void *opaque, hwaddr addr);
1ad2134f 52
cd19cfa2 53void qemu_ram_remap(ram_addr_t addr, ram_addr_t length);
1ad2134f 54/* This should not be used by devices. */
1b5ec234 55MemoryRegion *qemu_ram_addr_from_host(void *ptr, ram_addr_t *ram_addr);
c5705a77 56void qemu_ram_set_idstr(ram_addr_t addr, const char *name, DeviceState *dev);
1ad2134f 57
a8170e5e 58void cpu_physical_memory_rw(hwaddr addr, uint8_t *buf,
1ad2134f 59 int len, int is_write);
a8170e5e 60static inline void cpu_physical_memory_read(hwaddr addr,
3bad9814 61 void *buf, int len)
1ad2134f
PB
62{
63 cpu_physical_memory_rw(addr, buf, len, 0);
64}
a8170e5e 65static inline void cpu_physical_memory_write(hwaddr addr,
3bad9814 66 const void *buf, int len)
1ad2134f 67{
3bad9814 68 cpu_physical_memory_rw(addr, (void *)buf, len, 1);
1ad2134f 69}
a8170e5e
AK
70void *cpu_physical_memory_map(hwaddr addr,
71 hwaddr *plen,
1ad2134f 72 int is_write);
a8170e5e
AK
73void cpu_physical_memory_unmap(void *buffer, hwaddr len,
74 int is_write, hwaddr access_len);
1ad2134f 75void *cpu_register_map_client(void *opaque, void (*callback)(void *opaque));
1ad2134f 76
a8170e5e 77bool cpu_physical_memory_is_io(hwaddr phys_addr);
76f35538 78
6842a08e
BS
79/* Coalesced MMIO regions are areas where write operations can be reordered.
80 * This usually implies that write operations are side-effect free. This allows
81 * batching which can make a major impact on performance when using
82 * virtualization.
83 */
6842a08e
BS
84void qemu_flush_coalesced_mmio_buffer(void);
85
a8170e5e
AK
86uint32_t ldub_phys(hwaddr addr);
87uint32_t lduw_le_phys(hwaddr addr);
88uint32_t lduw_be_phys(hwaddr addr);
89uint32_t ldl_le_phys(hwaddr addr);
90uint32_t ldl_be_phys(hwaddr addr);
91uint64_t ldq_le_phys(hwaddr addr);
92uint64_t ldq_be_phys(hwaddr addr);
93void stb_phys(hwaddr addr, uint32_t val);
94void stw_le_phys(hwaddr addr, uint32_t val);
95void stw_be_phys(hwaddr addr, uint32_t val);
96void stl_le_phys(hwaddr addr, uint32_t val);
97void stl_be_phys(hwaddr addr, uint32_t val);
98void stq_le_phys(hwaddr addr, uint64_t val);
99void stq_be_phys(hwaddr addr, uint64_t val);
c227f099 100
21673cde 101#ifdef NEED_CPU_H
a8170e5e
AK
102uint32_t lduw_phys(hwaddr addr);
103uint32_t ldl_phys(hwaddr addr);
104uint64_t ldq_phys(hwaddr addr);
105void stl_phys_notdirty(hwaddr addr, uint32_t val);
a8170e5e
AK
106void stw_phys(hwaddr addr, uint32_t val);
107void stl_phys(hwaddr addr, uint32_t val);
108void stq_phys(hwaddr addr, uint64_t val);
21673cde
BS
109#endif
110
a8170e5e 111void cpu_physical_memory_write_rom(hwaddr addr,
1ad2134f
PB
112 const uint8_t *buf, int len);
113
0e0df1e2 114extern struct MemoryRegion io_mem_rom;
0e0df1e2 115extern struct MemoryRegion io_mem_notdirty;
1ad2134f 116
bd2fa51f
MH
117typedef void (RAMBlockIterFunc)(void *host_addr,
118 ram_addr_t offset, ram_addr_t length, void *opaque);
119
120void qemu_ram_foreach_block(RAMBlockIterFunc func, void *opaque);
121
b3755a91
PB
122#endif
123
1ad2134f 124#endif /* !CPU_COMMON_H */