1d5fee0bbSSuraj Jitindar Singh #ifndef MMU_RADIX64_H 2d5fee0bbSSuraj Jitindar Singh #define MMU_RADIX64_H 3d5fee0bbSSuraj Jitindar Singh 4d5fee0bbSSuraj Jitindar Singh #ifndef CONFIG_USER_ONLY 5d5fee0bbSSuraj Jitindar Singh 6d5fee0bbSSuraj Jitindar Singh /* Radix Quadrants */ 7d5fee0bbSSuraj Jitindar Singh #define R_EADDR_MASK 0x3FFFFFFFFFFFFFFF 8d5fee0bbSSuraj Jitindar Singh #define R_EADDR_QUADRANT 0xC000000000000000 9d5fee0bbSSuraj Jitindar Singh #define R_EADDR_QUADRANT0 0x0000000000000000 10d5fee0bbSSuraj Jitindar Singh #define R_EADDR_QUADRANT1 0x4000000000000000 11d5fee0bbSSuraj Jitindar Singh #define R_EADDR_QUADRANT2 0x8000000000000000 12d5fee0bbSSuraj Jitindar Singh #define R_EADDR_QUADRANT3 0xC000000000000000 13d5fee0bbSSuraj Jitindar Singh 14d5fee0bbSSuraj Jitindar Singh /* Radix Partition Table Entry Fields */ 1579825f4dSBenjamin Herrenschmidt #define PATE1_R_PRTB 0x0FFFFFFFFFFFF000 1679825f4dSBenjamin Herrenschmidt #define PATE1_R_PRTS 0x000000000000001F 17d5fee0bbSSuraj Jitindar Singh 18d5fee0bbSSuraj Jitindar Singh /* Radix Process Table Entry Fields */ 19d5fee0bbSSuraj Jitindar Singh #define PRTBE_R_GET_RTS(rts) \ 20d5fee0bbSSuraj Jitindar Singh ((((rts >> 58) & 0x18) | ((rts >> 5) & 0x7)) + 31) 21d5fee0bbSSuraj Jitindar Singh #define PRTBE_R_RPDB 0x0FFFFFFFFFFFFF00 22d5fee0bbSSuraj Jitindar Singh #define PRTBE_R_RPDS 0x000000000000001F 23d5fee0bbSSuraj Jitindar Singh 24d5fee0bbSSuraj Jitindar Singh /* Radix Page Directory/Table Entry Fields */ 25d5fee0bbSSuraj Jitindar Singh #define R_PTE_VALID 0x8000000000000000 26d5fee0bbSSuraj Jitindar Singh #define R_PTE_LEAF 0x4000000000000000 27d5fee0bbSSuraj Jitindar Singh #define R_PTE_SW0 0x2000000000000000 28d5fee0bbSSuraj Jitindar Singh #define R_PTE_RPN 0x01FFFFFFFFFFF000 29d5fee0bbSSuraj Jitindar Singh #define R_PTE_SW1 0x0000000000000E00 30d5fee0bbSSuraj Jitindar Singh #define R_GET_SW(sw) (((sw >> 58) & 0x8) | ((sw >> 9) & 0x7)) 31d5fee0bbSSuraj Jitindar Singh #define R_PTE_R 0x0000000000000100 32d5fee0bbSSuraj Jitindar Singh #define R_PTE_C 0x0000000000000080 33d5fee0bbSSuraj Jitindar Singh #define R_PTE_ATT 0x0000000000000030 34d5fee0bbSSuraj Jitindar Singh #define R_PTE_ATT_NORMAL 0x0000000000000000 35d5fee0bbSSuraj Jitindar Singh #define R_PTE_ATT_SAO 0x0000000000000010 36d5fee0bbSSuraj Jitindar Singh #define R_PTE_ATT_NI_IO 0x0000000000000020 37d5fee0bbSSuraj Jitindar Singh #define R_PTE_ATT_TOLERANT_IO 0x0000000000000030 38d5fee0bbSSuraj Jitindar Singh #define R_PTE_EAA_PRIV 0x0000000000000008 39d5fee0bbSSuraj Jitindar Singh #define R_PTE_EAA_R 0x0000000000000004 40d5fee0bbSSuraj Jitindar Singh #define R_PTE_EAA_RW 0x0000000000000002 41d5fee0bbSSuraj Jitindar Singh #define R_PTE_EAA_X 0x0000000000000001 42d5fee0bbSSuraj Jitindar Singh #define R_PDE_NLB PRTBE_R_RPDB 43d5fee0bbSSuraj Jitindar Singh #define R_PDE_NLS PRTBE_R_RPDS 44d5fee0bbSSuraj Jitindar Singh 45d5fee0bbSSuraj Jitindar Singh #ifdef TARGET_PPC64 46d5fee0bbSSuraj Jitindar Singh 47*51806b54SRichard Henderson bool ppc_radix64_xlate(PowerPCCPU *cpu, vaddr eaddr, MMUAccessType access_type, 48*51806b54SRichard Henderson hwaddr *raddr, int *psizep, int *protp, 49*51806b54SRichard Henderson bool guest_visible); 50d5fee0bbSSuraj Jitindar Singh 51d5fee0bbSSuraj Jitindar Singh static inline int ppc_radix64_get_prot_eaa(uint64_t pte) 52d5fee0bbSSuraj Jitindar Singh { 53d5fee0bbSSuraj Jitindar Singh return (pte & R_PTE_EAA_R ? PAGE_READ : 0) | 54d5fee0bbSSuraj Jitindar Singh (pte & R_PTE_EAA_RW ? PAGE_READ | PAGE_WRITE : 0) | 55d5fee0bbSSuraj Jitindar Singh (pte & R_PTE_EAA_X ? PAGE_EXEC : 0); 56d5fee0bbSSuraj Jitindar Singh } 57d5fee0bbSSuraj Jitindar Singh 586fc00960SGreg Kurz static inline int ppc_radix64_get_prot_amr(const PowerPCCPU *cpu) 59d5fee0bbSSuraj Jitindar Singh { 606fc00960SGreg Kurz const CPUPPCState *env = &cpu->env; 61d5fee0bbSSuraj Jitindar Singh int amr = env->spr[SPR_AMR] >> 62; /* We only care about key0 AMR63:62 */ 62d5fee0bbSSuraj Jitindar Singh int iamr = env->spr[SPR_IAMR] >> 62; /* We only care about key0 IAMR63:62 */ 63d5fee0bbSSuraj Jitindar Singh 64d5fee0bbSSuraj Jitindar Singh return (amr & 0x2 ? 0 : PAGE_WRITE) | /* Access denied if bit is set */ 65d5fee0bbSSuraj Jitindar Singh (amr & 0x1 ? 0 : PAGE_READ) | 66d5fee0bbSSuraj Jitindar Singh (iamr & 0x1 ? 0 : PAGE_EXEC); 67d5fee0bbSSuraj Jitindar Singh } 68d5fee0bbSSuraj Jitindar Singh 69d5fee0bbSSuraj Jitindar Singh #endif /* TARGET_PPC64 */ 70d5fee0bbSSuraj Jitindar Singh 71d5fee0bbSSuraj Jitindar Singh #endif /* CONFIG_USER_ONLY */ 72d5fee0bbSSuraj Jitindar Singh 73d5fee0bbSSuraj Jitindar Singh #endif /* MMU_RADIX64_H */ 74