summaryrefslogtreecommitdiffstats
path: root/include/qom
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2016-01-21 14:15:05 +0000
committerTimothy Pearson <tpearson@raptorengineering.com>2019-11-29 19:28:25 -0600
commitb7d611a274c91f854aee874b99b1ab85c8c44051 (patch)
tree6f126809a6d4a58792f49c1ef9fbc4e547eaf2de /include/qom
parent107081ed4f3e4f8ddc89b68538f0646fe7baa1c6 (diff)
downloadhqemu-b7d611a274c91f854aee874b99b1ab85c8c44051.zip
hqemu-b7d611a274c91f854aee874b99b1ab85c8c44051.tar.gz
cpu: Add new asidx_from_attrs() method
Add a new method to CPUClass which the memory system core can use to obtain the correct address space index to use for a memory access with a given set of transaction attributes, together with the wrapper function cpu_asidx_from_attrs() which implements the default behaviour ("always use asidx 0") for CPU classes which don't provide the method. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Acked-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
Diffstat (limited to 'include/qom')
-rw-r--r--include/qom/cpu.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/include/qom/cpu.h b/include/qom/cpu.h
index e64585b..7fde414 100644
--- a/include/qom/cpu.h
+++ b/include/qom/cpu.h
@@ -104,6 +104,8 @@ struct TranslationBlock;
* associated memory transaction attributes to use for the access.
* CPUs which use memory transaction attributes should implement this
* instead of get_phys_page_debug.
+ * @asidx_from_attrs: Callback to return the CPU AddressSpace to use for
+ * a memory access with the specified memory transaction attributes.
* @gdb_read_register: Callback for letting GDB read a register.
* @gdb_write_register: Callback for letting GDB write a register.
* @debug_excp_handler: Callback for handling debug exceptions.
@@ -160,6 +162,7 @@ typedef struct CPUClass {
hwaddr (*get_phys_page_debug)(CPUState *cpu, vaddr addr);
hwaddr (*get_phys_page_attrs_debug)(CPUState *cpu, vaddr addr,
MemTxAttrs *attrs);
+ int (*asidx_from_attrs)(CPUState *cpu, MemTxAttrs attrs);
int (*gdb_read_register)(CPUState *cpu, uint8_t *buf, int reg);
int (*gdb_write_register)(CPUState *cpu, uint8_t *buf, int reg);
void (*debug_excp_handler)(CPUState *cpu);
@@ -494,6 +497,23 @@ static inline hwaddr cpu_get_phys_page_debug(CPUState *cpu, vaddr addr)
return cpu_get_phys_page_attrs_debug(cpu, addr, &attrs);
}
+
+/** cpu_asidx_from_attrs:
+ * @cpu: CPU
+ * @attrs: memory transaction attributes
+ *
+ * Returns the address space index specifying the CPU AddressSpace
+ * to use for a memory access with the given transaction attributes.
+ */
+static inline int cpu_asidx_from_attrs(CPUState *cpu, MemTxAttrs attrs)
+{
+ CPUClass *cc = CPU_GET_CLASS(cpu);
+
+ if (cc->asidx_from_attrs) {
+ return cc->asidx_from_attrs(cpu, attrs);
+ }
+ return 0;
+}
#endif
/**
OpenPOWER on IntegriCloud