mirror of https://github.com/xemu-project/xemu.git
target/ppc: divided mmu_helper.c in 2 files
Divided mmu_helper.c in 2 files, functions inside #ifdef CONFIG_SOFTMMU stayed in mmu_helper.c, other functions moved to mmu_common.c. Updated meson.build to compile mmu_common.c and only compile mmu_helper.c when CONFIG_TCG is set. Moved function declarations, #define and structs used by both files to internal.h except for functions that use structures defined in cpu.h, those were moved to cpu.h. Signed-off-by: Lucas Mateus Castro (alqotel) <lucas.araujo@eldorado.org.br> Message-Id: <20210723175627.72847-2-lucas.araujo@eldorado.org.br> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
a4e4c4b45f
commit
5118ebe839
|
@ -1330,6 +1330,15 @@ void store_booke_tsr(CPUPPCState *env, target_ulong val);
|
|||
void ppc_tlb_invalidate_all(CPUPPCState *env);
|
||||
void ppc_tlb_invalidate_one(CPUPPCState *env, target_ulong addr);
|
||||
void cpu_ppc_set_vhyp(PowerPCCPU *cpu, PPCVirtualHypervisor *vhyp);
|
||||
int ppcmas_tlb_check(CPUPPCState *env, ppcmas_tlb_t *tlb,
|
||||
hwaddr *raddrp, target_ulong address,
|
||||
uint32_t pid);
|
||||
int ppcemb_tlb_check(CPUPPCState *env, ppcemb_tlb_t *tlb,
|
||||
hwaddr *raddrp,
|
||||
target_ulong address, uint32_t pid, int ext,
|
||||
int i);
|
||||
hwaddr booke206_tlb_to_page_size(CPUPPCState *env,
|
||||
ppcmas_tlb_t *tlb);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
|
|
@ -245,4 +245,43 @@ static inline int prot_for_access_type(MMUAccessType access_type)
|
|||
g_assert_not_reached();
|
||||
}
|
||||
|
||||
/* PowerPC MMU emulation */
|
||||
|
||||
typedef struct mmu_ctx_t mmu_ctx_t;
|
||||
bool ppc_xlate(PowerPCCPU *cpu, vaddr eaddr, MMUAccessType access_type,
|
||||
hwaddr *raddrp, int *psizep, int *protp,
|
||||
int mmu_idx, bool guest_visible);
|
||||
int get_physical_address_wtlb(CPUPPCState *env, mmu_ctx_t *ctx,
|
||||
target_ulong eaddr,
|
||||
MMUAccessType access_type, int type,
|
||||
int mmu_idx);
|
||||
/* Software driven TLB helpers */
|
||||
int ppc6xx_tlb_getnum(CPUPPCState *env, target_ulong eaddr,
|
||||
int way, int is_code);
|
||||
/* Context used internally during MMU translations */
|
||||
struct mmu_ctx_t {
|
||||
hwaddr raddr; /* Real address */
|
||||
hwaddr eaddr; /* Effective address */
|
||||
int prot; /* Protection bits */
|
||||
hwaddr hash[2]; /* Pagetable hash values */
|
||||
target_ulong ptem; /* Virtual segment ID | API */
|
||||
int key; /* Access key */
|
||||
int nx; /* Non-execute area */
|
||||
};
|
||||
|
||||
/* Common routines used by software and hardware TLBs emulation */
|
||||
static inline int pte_is_valid(target_ulong pte0)
|
||||
{
|
||||
return pte0 & 0x80000000 ? 1 : 0;
|
||||
}
|
||||
|
||||
static inline void pte_invalidate(target_ulong *pte0)
|
||||
{
|
||||
*pte0 &= ~0x80000000;
|
||||
}
|
||||
|
||||
#define PTE_PTEM_MASK 0x7FFFFFBF
|
||||
#define PTE_CHECK_MASK (TARGET_PAGE_MASK | 0x7B)
|
||||
|
||||
|
||||
#endif /* PPC_INTERNAL_H */
|
||||
|
|
|
@ -37,11 +37,13 @@ ppc_softmmu_ss.add(files(
|
|||
'arch_dump.c',
|
||||
'machine.c',
|
||||
'mmu-hash32.c',
|
||||
'mmu_helper.c',
|
||||
'mmu_common.c',
|
||||
'monitor.c',
|
||||
))
|
||||
ppc_softmmu_ss.add(when: 'CONFIG_TCG', if_false: files(
|
||||
'tcg-stub.c'
|
||||
ppc_softmmu_ss.add(when: 'CONFIG_TCG', if_true: files(
|
||||
'mmu_helper.c',
|
||||
), if_false: files(
|
||||
'tcg-stub.c',
|
||||
))
|
||||
|
||||
ppc_softmmu_ss.add(when: 'TARGET_PPC64', if_true: files(
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue