target/mips: Let get_seg*_physical_address() take MMUAccessType arg
get_physical_address() calls get_seg_physical_address() and get_segctl_physical_address() passing a MMUAccessType type. Let the prototypes use it as argument, as it is stricter than an integer. Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Jiaxun Yang <jiaxun.yang@flygoat.com> Message-Id: <20210128144125.3696119-13-f4bug@amsat.org>
This commit is contained in:
parent
7c6e2049f0
commit
67b663d6fa
@ -222,7 +222,7 @@ static int is_seg_am_mapped(unsigned int am, bool eu, int mmu_idx)
|
|||||||
|
|
||||||
static int get_seg_physical_address(CPUMIPSState *env, hwaddr *physical,
|
static int get_seg_physical_address(CPUMIPSState *env, hwaddr *physical,
|
||||||
int *prot, target_ulong real_address,
|
int *prot, target_ulong real_address,
|
||||||
int rw, int mmu_idx,
|
MMUAccessType access_type, int mmu_idx,
|
||||||
unsigned int am, bool eu,
|
unsigned int am, bool eu,
|
||||||
target_ulong segmask,
|
target_ulong segmask,
|
||||||
hwaddr physical_base)
|
hwaddr physical_base)
|
||||||
@ -234,7 +234,8 @@ static int get_seg_physical_address(CPUMIPSState *env, hwaddr *physical,
|
|||||||
return mapped;
|
return mapped;
|
||||||
} else if (mapped) {
|
} else if (mapped) {
|
||||||
/* The segment is TLB mapped */
|
/* The segment is TLB mapped */
|
||||||
return env->tlb->map_address(env, physical, prot, real_address, rw);
|
return env->tlb->map_address(env, physical, prot, real_address,
|
||||||
|
access_type);
|
||||||
} else {
|
} else {
|
||||||
/* The segment is unmapped */
|
/* The segment is unmapped */
|
||||||
*physical = physical_base | (real_address & segmask);
|
*physical = physical_base | (real_address & segmask);
|
||||||
@ -245,15 +246,15 @@ static int get_seg_physical_address(CPUMIPSState *env, hwaddr *physical,
|
|||||||
|
|
||||||
static int get_segctl_physical_address(CPUMIPSState *env, hwaddr *physical,
|
static int get_segctl_physical_address(CPUMIPSState *env, hwaddr *physical,
|
||||||
int *prot, target_ulong real_address,
|
int *prot, target_ulong real_address,
|
||||||
int rw, int mmu_idx,
|
MMUAccessType access_type, int mmu_idx,
|
||||||
uint16_t segctl, target_ulong segmask)
|
uint16_t segctl, target_ulong segmask)
|
||||||
{
|
{
|
||||||
unsigned int am = (segctl & CP0SC_AM_MASK) >> CP0SC_AM;
|
unsigned int am = (segctl & CP0SC_AM_MASK) >> CP0SC_AM;
|
||||||
bool eu = (segctl >> CP0SC_EU) & 1;
|
bool eu = (segctl >> CP0SC_EU) & 1;
|
||||||
hwaddr pa = ((hwaddr)segctl & CP0SC_PA_MASK) << 20;
|
hwaddr pa = ((hwaddr)segctl & CP0SC_PA_MASK) << 20;
|
||||||
|
|
||||||
return get_seg_physical_address(env, physical, prot, real_address, rw,
|
return get_seg_physical_address(env, physical, prot, real_address,
|
||||||
mmu_idx, am, eu, segmask,
|
access_type, mmu_idx, am, eu, segmask,
|
||||||
pa & ~(hwaddr)segmask);
|
pa & ~(hwaddr)segmask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user