target-mips: add a function to do virtual -> physical translations
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
This commit is contained in:
parent
1147e18994
commit
25b91e32e0
@ -590,6 +590,8 @@ int cpu_mips_handle_mmu_fault (CPUState *env, target_ulong address, int rw,
|
||||
#define cpu_handle_mmu_fault cpu_mips_handle_mmu_fault
|
||||
void do_interrupt (CPUState *env);
|
||||
void r4k_invalidate_tlb (CPUState *env, int idx, int use_extra);
|
||||
target_phys_addr_t do_translate_address (CPUState *env, target_ulong address,
|
||||
int rw);
|
||||
|
||||
static inline void cpu_pc_from_tb(CPUState *env, TranslationBlock *tb)
|
||||
{
|
||||
|
@ -310,6 +310,29 @@ int cpu_mips_handle_mmu_fault (CPUState *env, target_ulong address, int rw,
|
||||
return ret;
|
||||
}
|
||||
|
||||
#if !defined(CONFIG_USER_ONLY)
|
||||
target_phys_addr_t do_translate_address(CPUState *env, target_ulong address, int rw)
|
||||
{
|
||||
target_phys_addr_t physical;
|
||||
int prot;
|
||||
int access_type;
|
||||
int ret = 0;
|
||||
|
||||
rw &= 1;
|
||||
|
||||
/* data access */
|
||||
access_type = ACCESS_INT;
|
||||
ret = get_physical_address(env, &physical, &prot,
|
||||
address, rw, access_type);
|
||||
if (ret != TLBRET_MATCH) {
|
||||
raise_mmu_exception(env, address, rw, ret);
|
||||
cpu_loop_exit();
|
||||
}
|
||||
|
||||
return physical;
|
||||
}
|
||||
#endif
|
||||
|
||||
static const char * const excp_names[EXCP_LAST + 1] = {
|
||||
[EXCP_RESET] = "reset",
|
||||
[EXCP_SRESET] = "soft reset",
|
||||
|
Loading…
Reference in New Issue
Block a user