在 2021/1/28 下午10:41, Philippe Mathieu-Daudé 写道:
> 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: Jiaxun Yang <jiaxun.yang@flygoat.com>
> ---
> target/mips/tlb_helper.c | 11 ++++++-----
> 1 file changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/target/mips/tlb_helper.c b/target/mips/tlb_helper.c
> index 64e89591abc..14f5b1a0a9c 100644
> --- a/target/mips/tlb_helper.c
> +++ b/target/mips/tlb_helper.c
> @@ -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,
> int *prot, target_ulong real_address,
> - int rw, int mmu_idx,
> + MMUAccessType access_type, int mmu_idx,
> unsigned int am, bool eu,
> target_ulong segmask,
> hwaddr physical_base)
> @@ -234,7 +234,8 @@ static int get_seg_physical_address(CPUMIPSState *env, hwaddr *physical,
> return mapped;
> } else if (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 {
> /* The segment is unmapped */
> *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,
> int *prot, target_ulong real_address,
> - int rw, int mmu_idx,
> + MMUAccessType access_type, int mmu_idx,
> uint16_t segctl, target_ulong segmask)
> {
> unsigned int am = (segctl & CP0SC_AM_MASK) >> CP0SC_AM;
> bool eu = (segctl >> CP0SC_EU) & 1;
> hwaddr pa = ((hwaddr)segctl & CP0SC_PA_MASK) << 20;
>
> - return get_seg_physical_address(env, physical, prot, real_address, rw,
> - mmu_idx, am, eu, segmask,
> + return get_seg_physical_address(env, physical, prot, real_address,
> + access_type, mmu_idx, am, eu, segmask,
> pa & ~(hwaddr)segmask);
> }
>