summaryrefslogtreecommitdiffstats
path: root/include/exec/cpu-common.h
diff options
context:
space:
mode:
authorPeter Maydell2022-03-07 20:07:44 +0100
committerPeter Maydell2022-03-07 20:07:44 +0100
commit99c4a9e68eafade057e33906d23b2face24ca1ff (patch)
treee2a06b969305dce29201a441f3e9ffe2630613ae /include/exec/cpu-common.h
parentMerge remote-tracking branch 'remotes/hreitz-gitlab/tags/pull-block-2022-03-0... (diff)
parentaccel/tcg: Remove pointless CPUArchState casts (diff)
downloadqemu-99c4a9e68eafade057e33906d23b2face24ca1ff.tar.gz
qemu-99c4a9e68eafade057e33906d23b2face24ca1ff.tar.xz
qemu-99c4a9e68eafade057e33906d23b2face24ca1ff.zip
Merge remote-tracking branch 'remotes/philmd/tags/abstract-arch-cpu-20220307' into staging
- Re-org accel/ and softmmu/ to have more target-agnostic objects. - Use CPUArchState as an abstract type, defined by each target (CPUState is our interface with generic code, CPUArchState is our interface with target-specific code). # gpg: Signature made Sun 06 Mar 2022 23:23:19 GMT # gpg: using RSA key FAABE75E12917221DCFD6BB2E3E32C2CDEADC0DE # gpg: Good signature from "Philippe Mathieu-Daudé (F4BUG) <f4bug@amsat.org>" [unknown] # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: FAAB E75E 1291 7221 DCFD 6BB2 E3E3 2C2C DEAD C0DE * remotes/philmd/tags/abstract-arch-cpu-20220307: (33 commits) accel/tcg: Remove pointless CPUArchState casts target/i386: Remove pointless CPUArchState casts target: Use ArchCPU as interface to target CPU target: Introduce and use OBJECT_DECLARE_CPU_TYPE() macro target: Use CPUArchState as interface to target-specific CPU state target: Use forward declared type instead of structure type target/hexagon: Add missing 'hw/core/cpu.h' include target: Include missing 'cpu.h' Hexagon (target/hexagon) convert to OBJECT_DECLARE_TYPE target/i386/tcg/sysemu: Include missing 'exec/exec-all.h' header cpu: Add missing 'exec/exec-all.h' and 'qemu/accel.h' headers exec/cpu_ldst: Include 'cpu.h' to get target_ulong definition meson: Display libfdt as disabled when system emulation is disabled softmmu: Build target-agnostic objects once softmmu: Add qemu_init_arch_modules() exec/cpu: Make address_space_init/reloading_memory_map target agnostic exec/gdbstub: Make gdb_exit() / gdb_set_stop_cpu() target agnostic misc: Add missing "sysemu/cpu-timers.h" include misc: Remove unnecessary "sysemu/cpu-timers.h" include softmmu/cpu-timers: Remove unused 'exec/exec-all.h' header ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'include/exec/cpu-common.h')
-rw-r--r--include/exec/cpu-common.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/include/exec/cpu-common.h b/include/exec/cpu-common.h
index de5f444b19..7f7b5943c7 100644
--- a/include/exec/cpu-common.h
+++ b/include/exec/cpu-common.h
@@ -7,6 +7,18 @@
#include "exec/hwaddr.h"
#endif
+/**
+ * vaddr:
+ * Type wide enough to contain any #target_ulong virtual address.
+ */
+typedef uint64_t vaddr;
+#define VADDR_PRId PRId64
+#define VADDR_PRIu PRIu64
+#define VADDR_PRIo PRIo64
+#define VADDR_PRIx PRIx64
+#define VADDR_PRIX PRIX64
+#define VADDR_MAX UINT64_MAX
+
/* Using intptr_t ensures that qemu_*_page_mask is sign-extended even
* when intptr_t is 32-bit and we are aligning a long long.
*/
@@ -78,6 +90,28 @@ void qemu_ram_unset_migratable(RAMBlock *rb);
size_t qemu_ram_pagesize(RAMBlock *block);
size_t qemu_ram_pagesize_largest(void);
+/**
+ * cpu_address_space_init:
+ * @cpu: CPU to add this address space to
+ * @asidx: integer index of this address space
+ * @prefix: prefix to be used as name of address space
+ * @mr: the root memory region of address space
+ *
+ * Add the specified address space to the CPU's cpu_ases list.
+ * The address space added with @asidx 0 is the one used for the
+ * convenience pointer cpu->as.
+ * The target-specific code which registers ASes is responsible
+ * for defining what semantics address space 0, 1, 2, etc have.
+ *
+ * Before the first call to this function, the caller must set
+ * cpu->num_ases to the total number of address spaces it needs
+ * to support.
+ *
+ * Note that with KVM only one address space is supported.
+ */
+void cpu_address_space_init(CPUState *cpu, int asidx,
+ const char *prefix, MemoryRegion *mr);
+
void cpu_physical_memory_rw(hwaddr addr, void *buf,
hwaddr len, bool is_write);
static inline void cpu_physical_memory_read(hwaddr addr,
@@ -90,6 +124,7 @@ static inline void cpu_physical_memory_write(hwaddr addr,
{
cpu_physical_memory_rw(addr, (void *)buf, len, true);
}
+void cpu_reloading_memory_map(void);
void *cpu_physical_memory_map(hwaddr addr,
hwaddr *plen,
bool is_write);
@@ -116,6 +151,10 @@ int ram_block_discard_range(RAMBlock *rb, uint64_t start, size_t length);
#endif
+/* Returns: 0 on success, -1 on error */
+int cpu_memory_rw_debug(CPUState *cpu, vaddr addr,
+ void *ptr, size_t len, bool is_write);
+
/* vl.c */
extern int singlestep;