1 /* 2 * Copyright 2010-2012 Haiku, Inc. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Francois Revol 7 * Ithamar R. Adema, ithamar.adema@team-embedded.nl 8 * Alexander von Gluck, kallisti5@unixzen.com 9 */ 10 #ifndef _ARCH_ARM_ARM_MMU_H 11 #define _ARCH_ARM_ARM_MMU_H 12 13 14 /* 15 * generic arm mmu definitions 16 */ 17 18 /* 19 * L1 defines for the page directory (page table walk methods) 20 */ 21 #define MMU_L1_TYPE_FAULT 0x0 22 // MMU Fault 23 // 31 2 10 24 // | |00| 25 #define MMU_L1_TYPE_SECTION 0x2 26 // Single step table walk, 4096 entries 27 // 1024K pages, 16K consumed 28 // 31 20 19 12 11 10 9 8 5 432 10 29 // | page table address | 0? | AP |0| domain |1CB|10| 30 #define MMU_L1_TYPE_FINE 0x3 31 // Three(?) step table walk, 1024 entries 32 // 1K, 4K, 64K pages, 4K consumed 33 // 31 12 11 9 8 5 432 10 34 // | page table address | 0? | domain |100|11| 35 #define MMU_L1_TYPE_COARSE 0x1 36 // Two step table walk, 256 entries 37 // 4K(Haiku), 64K pages, 1K consumed 38 // 31 10 9 8 5 432 10 39 // | page table address |0| domain |000|01| 40 41 42 // the domain is not used so and the ? is implementation specified... have not 43 // found it in the cortex A8 reference... so I set t to 0 44 // page table must obviously be on multiple of 1KB 45 46 /* 47 * L2-Page descriptors... now things get really complicated... 48 * there are three different types of pages large pages (64KB) and small(4KB) 49 * and "small extended". 50 * only small extende is used by now.... 51 * and there is a new and a old format of page table entries 52 * I will use the old format... 53 */ 54 55 #define MMU_L2_TYPE_SMALLEXT 0x3 56 /* for new format entries (cortex-a8) */ 57 #define MMU_L2_TYPE_SMALLNEW 0x2 58 59 // for B C and TEX see ARM arm B4-11 60 #define MMU_L2_FLAG_B 0x4 61 #define MMU_L2_FLAG_C 0x8 62 #define MMU_L2_FLAG_TEX 0 // use 0b000 as TEX 63 #define MMU_L2_FLAG_AP_RW 0x30 // allow read and write for user and system 64 // #define MMU_L2_FLAG_AP_ 65 66 67 #define MMU_L1_TABLE_SIZE (4096 * 4) 68 //4096 entries (one entry per MB) -> 16KB 69 #define MMU_L2_COARSE_TABLE_SIZE (256 * 4) 70 //256 entries (one entry per 4KB) -> 1KB 71 72 73 /* 74 * definitions for CP15 r1 75 */ 76 77 #define CR_R1_MMU 0x1 // enable MMU 78 #define CP_R1_XP 0x800000 // if XP=0 then use backwards comaptible 79 // translation tables 80 81 #define VADDR_TO_PDENT(va) ((va) >> 20) 82 #define VADDR_TO_PTENT(va) (((va) & 0xff000) >> 12) 83 #define VADDR_TO_PGOFF(va) ((va) & 0x0fff) 84 85 #define ARM_PDE_ADDRESS_MASK 0xfffffc00 86 #define ARM_PTE_ADDRESS_MASK 0xfffff000 87 88 #endif /* _ARCH_ARM_ARM_MMU_H */ 89