1*29629d9eSAndrew Turner /*- 2*29629d9eSAndrew Turner * Copyright 2014 Svatopluk Kraus <onwahe@gmail.com> 3*29629d9eSAndrew Turner * Copyright 2014 Michal Meloun <meloun@miracle.cz> 4*29629d9eSAndrew Turner * All rights reserved. 5*29629d9eSAndrew Turner * 6*29629d9eSAndrew Turner * Redistribution and use in source and binary forms, with or without 7*29629d9eSAndrew Turner * modification, are permitted provided that the following conditions 8*29629d9eSAndrew Turner * are met: 9*29629d9eSAndrew Turner * 1. Redistributions of source code must retain the above copyright 10*29629d9eSAndrew Turner * notice, this list of conditions and the following disclaimer. 11*29629d9eSAndrew Turner * 2. Redistributions in binary form must reproduce the above copyright 12*29629d9eSAndrew Turner * notice, this list of conditions and the following disclaimer in the 13*29629d9eSAndrew Turner * documentation and/or other materials provided with the distribution. 14*29629d9eSAndrew Turner * 15*29629d9eSAndrew Turner * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16*29629d9eSAndrew Turner * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17*29629d9eSAndrew Turner * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18*29629d9eSAndrew Turner * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19*29629d9eSAndrew Turner * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20*29629d9eSAndrew Turner * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21*29629d9eSAndrew Turner * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22*29629d9eSAndrew Turner * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23*29629d9eSAndrew Turner * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24*29629d9eSAndrew Turner * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25*29629d9eSAndrew Turner * SUCH DAMAGE. 26*29629d9eSAndrew Turner */ 27*29629d9eSAndrew Turner 28*29629d9eSAndrew Turner #ifndef _MACHINE_PTE_V6_H_ 29*29629d9eSAndrew Turner #define _MACHINE_PTE_V6_H_ 30*29629d9eSAndrew Turner 31*29629d9eSAndrew Turner /* 32*29629d9eSAndrew Turner * Domain Types for the Domain Access Control Register. 33*29629d9eSAndrew Turner */ 34*29629d9eSAndrew Turner #define DOMAIN_FAULT 0x00 /* no access */ 35*29629d9eSAndrew Turner #define DOMAIN_CLIENT 0x01 /* client */ 36*29629d9eSAndrew Turner #define DOMAIN_RESERVED 0x02 /* reserved */ 37*29629d9eSAndrew Turner #define DOMAIN_MANAGER 0x03 /* manager */ 38*29629d9eSAndrew Turner 39*29629d9eSAndrew Turner /* 40*29629d9eSAndrew Turner * TEX remap registers attributes 41*29629d9eSAndrew Turner */ 42*29629d9eSAndrew Turner #define PRRR_SO 0 /* Strongly ordered memory */ 43*29629d9eSAndrew Turner #define PRRR_DEV 1 /* Device memory */ 44*29629d9eSAndrew Turner #define PRRR_MEM 2 /* Normal memory */ 45*29629d9eSAndrew Turner #define PRRR_DS0 (1 << 16) /* Shared bit for Device, S = 0 */ 46*29629d9eSAndrew Turner #define PRRR_DS1 (1 << 17) /* Shared bit for Device, S = 1 */ 47*29629d9eSAndrew Turner #define PRRR_NS0 (1 << 18) /* Shared bit for Normal, S = 0 */ 48*29629d9eSAndrew Turner #define PRRR_NS1 (1 << 19) /* Shared bit for Normal, S = 1 */ 49*29629d9eSAndrew Turner #define PRRR_NOS_SHIFT 24 /* base shif for Not Outer Shared bits */ 50*29629d9eSAndrew Turner 51*29629d9eSAndrew Turner #define NMRR_NC 0 /* Noncachable*/ 52*29629d9eSAndrew Turner #define NMRR_WB_WA 1 /* Write Back, Write Allocate */ 53*29629d9eSAndrew Turner #define NMRR_WT 2 /* Write Through, Non-Write Allocate */ 54*29629d9eSAndrew Turner #define NMRR_WB 3 /* Write Back, Non-Write Allocate */ 55*29629d9eSAndrew Turner 56*29629d9eSAndrew Turner /* 57*29629d9eSAndrew Turner * 58*29629d9eSAndrew Turner * The ARM MMU is capable of mapping memory in the following chunks: 59*29629d9eSAndrew Turner * 60*29629d9eSAndrew Turner * 16M Supersections (L1 table) 61*29629d9eSAndrew Turner * 62*29629d9eSAndrew Turner * 1M Sections (L1 table) 63*29629d9eSAndrew Turner * 64*29629d9eSAndrew Turner * 64K Large Pages (L2 table) 65*29629d9eSAndrew Turner * 66*29629d9eSAndrew Turner * 4K Small Pages (L2 table) 67*29629d9eSAndrew Turner * 68*29629d9eSAndrew Turner * 69*29629d9eSAndrew Turner * Coarse Tables can map Large and Small Pages. 70*29629d9eSAndrew Turner * Coarse Tables are 1K in length. 71*29629d9eSAndrew Turner * 72*29629d9eSAndrew Turner * The Translation Table Base register holds the pointer to the 73*29629d9eSAndrew Turner * L1 Table. The L1 Table is a 16K contiguous chunk of memory 74*29629d9eSAndrew Turner * aligned to a 16K boundary. Each entry in the L1 Table maps 75*29629d9eSAndrew Turner * 1M of virtual address space, either via a Section mapping or 76*29629d9eSAndrew Turner * via an L2 Table. 77*29629d9eSAndrew Turner * 78*29629d9eSAndrew Turner */ 79*29629d9eSAndrew Turner #define L1_TABLE_SIZE 0x4000 /* 16K */ 80*29629d9eSAndrew Turner #define L1_ENTRIES 0x1000 /* 4K */ 81*29629d9eSAndrew Turner #define L2_TABLE_SIZE 0x0400 /* 1K */ 82*29629d9eSAndrew Turner #define L2_ENTRIES 0x0100 /* 256 */ 83*29629d9eSAndrew Turner 84*29629d9eSAndrew Turner /* ARMv6 super-sections. */ 85*29629d9eSAndrew Turner #define L1_SUP_SIZE 0x01000000 /* 16M */ 86*29629d9eSAndrew Turner #define L1_SUP_OFFSET (L1_SUP_SIZE - 1) 87*29629d9eSAndrew Turner #define L1_SUP_FRAME (~L1_SUP_OFFSET) 88*29629d9eSAndrew Turner #define L1_SUP_SHIFT 24 89*29629d9eSAndrew Turner 90*29629d9eSAndrew Turner #define L1_S_SIZE 0x00100000 /* 1M */ 91*29629d9eSAndrew Turner #define L1_S_OFFSET (L1_S_SIZE - 1) 92*29629d9eSAndrew Turner #define L1_S_FRAME (~L1_S_OFFSET) 93*29629d9eSAndrew Turner #define L1_S_SHIFT 20 94*29629d9eSAndrew Turner 95*29629d9eSAndrew Turner #define L2_L_SIZE 0x00010000 /* 64K */ 96*29629d9eSAndrew Turner #define L2_L_OFFSET (L2_L_SIZE - 1) 97*29629d9eSAndrew Turner #define L2_L_FRAME (~L2_L_OFFSET) 98*29629d9eSAndrew Turner #define L2_L_SHIFT 16 99*29629d9eSAndrew Turner 100*29629d9eSAndrew Turner #define L2_S_SIZE 0x00001000 /* 4K */ 101*29629d9eSAndrew Turner #define L2_S_OFFSET (L2_S_SIZE - 1) 102*29629d9eSAndrew Turner #define L2_S_FRAME (~L2_S_OFFSET) 103*29629d9eSAndrew Turner #define L2_S_SHIFT 12 104*29629d9eSAndrew Turner 105*29629d9eSAndrew Turner /* 106*29629d9eSAndrew Turner * ARM MMU L1 Descriptors 107*29629d9eSAndrew Turner */ 108*29629d9eSAndrew Turner #define L1_TYPE_INV 0x00 /* Invalid (fault) */ 109*29629d9eSAndrew Turner #define L1_TYPE_C 0x01 /* Coarse L2 */ 110*29629d9eSAndrew Turner #define L1_TYPE_S 0x02 /* Section */ 111*29629d9eSAndrew Turner #define L1_TYPE_MASK 0x03 /* Mask of type bits */ 112*29629d9eSAndrew Turner 113*29629d9eSAndrew Turner /* L1 Section Descriptor */ 114*29629d9eSAndrew Turner #define L1_S_B 0x00000004 /* bufferable Section */ 115*29629d9eSAndrew Turner #define L1_S_C 0x00000008 /* cacheable Section */ 116*29629d9eSAndrew Turner #define L1_S_NX 0x00000010 /* not executeable */ 117*29629d9eSAndrew Turner #define L1_S_DOM(x) ((x) << 5) /* domain */ 118*29629d9eSAndrew Turner #define L1_S_DOM_MASK L1_S_DOM(0xf) 119*29629d9eSAndrew Turner #define L1_S_P 0x00000200 /* ECC enable for this section */ 120*29629d9eSAndrew Turner #define L1_S_AP(x) ((x) << 10) /* access permissions */ 121*29629d9eSAndrew Turner #define L1_S_AP0 0x00000400 /* access permissions bit 0 */ 122*29629d9eSAndrew Turner #define L1_S_AP1 0x00000800 /* access permissions bit 1 */ 123*29629d9eSAndrew Turner #define L1_S_TEX(x) ((x) << 12) /* type extension */ 124*29629d9eSAndrew Turner #define L1_S_TEX0 0x00001000 /* type extension bit 0 */ 125*29629d9eSAndrew Turner #define L1_S_TEX1 0x00002000 /* type extension bit 1 */ 126*29629d9eSAndrew Turner #define L1_S_TEX2 0x00004000 /* type extension bit 2 */ 127*29629d9eSAndrew Turner #define L1_S_AP2 0x00008000 /* access permissions bit 2 */ 128*29629d9eSAndrew Turner #define L1_S_SHARED 0x00010000 /* shared */ 129*29629d9eSAndrew Turner #define L1_S_NG 0x00020000 /* not global */ 130*29629d9eSAndrew Turner #define L1_S_SUPERSEC 0x00040000 /* Section is a super-section. */ 131*29629d9eSAndrew Turner #define L1_S_ADDR_MASK 0xfff00000 /* phys address of section */ 132*29629d9eSAndrew Turner 133*29629d9eSAndrew Turner /* L1 Coarse Descriptor */ 134*29629d9eSAndrew Turner #define L1_C_DOM(x) ((x) << 5) /* domain */ 135*29629d9eSAndrew Turner #define L1_C_DOM_MASK L1_C_DOM(0xf) 136*29629d9eSAndrew Turner #define L1_C_P 0x00000200 /* ECC enable for this section */ 137*29629d9eSAndrew Turner #define L1_C_ADDR_MASK 0xfffffc00 /* phys address of L2 Table */ 138*29629d9eSAndrew Turner 139*29629d9eSAndrew Turner /* 140*29629d9eSAndrew Turner * ARM MMU L2 Descriptors 141*29629d9eSAndrew Turner */ 142*29629d9eSAndrew Turner #define L2_TYPE_INV 0x00 /* Invalid (fault) */ 143*29629d9eSAndrew Turner #define L2_TYPE_L 0x01 /* Large Page - 64k - not used yet*/ 144*29629d9eSAndrew Turner #define L2_TYPE_S 0x02 /* Small Page - 4 */ 145*29629d9eSAndrew Turner #define L2_TYPE_MASK 0x03 146*29629d9eSAndrew Turner 147*29629d9eSAndrew Turner #define L2_NX 0x00000001 /* Not executable */ 148*29629d9eSAndrew Turner #define L2_B 0x00000004 /* Bufferable page */ 149*29629d9eSAndrew Turner #define L2_C 0x00000008 /* Cacheable page */ 150*29629d9eSAndrew Turner #define L2_CB_SHIFT 2 /* C,B bit field shift */ 151*29629d9eSAndrew Turner #define L2_AP(x) ((x) << 4) 152*29629d9eSAndrew Turner #define L2_AP0 0x00000010 /* access permissions bit 0*/ 153*29629d9eSAndrew Turner #define L2_AP1 0x00000020 /* access permissions bit 1*/ 154*29629d9eSAndrew Turner #define L2_TEX_SHIFT 6 /* type extension field shift */ 155*29629d9eSAndrew Turner #define L2_TEX(x) ((x) << L2_TEX_SHIFT) /* type extension */ 156*29629d9eSAndrew Turner #define L2_TEX0 0x00000040 /* type extension bit 0 */ 157*29629d9eSAndrew Turner #define L2_TEX1 0x00000080 /* type extension bit 1 */ 158*29629d9eSAndrew Turner #define L2_TEX2 0x00000100 /* type extension bit 2 */ 159*29629d9eSAndrew Turner #define L2_AP2 0x00000200 /* access permissions bit 2*/ 160*29629d9eSAndrew Turner #define L2_SHARED 0x00000400 /* shared */ 161*29629d9eSAndrew Turner #define L2_NG 0x00000800 /* not global */ 162*29629d9eSAndrew Turner 163*29629d9eSAndrew Turner /* 164*29629d9eSAndrew Turner * TEX classes encoding 165*29629d9eSAndrew Turner */ 166*29629d9eSAndrew Turner #define TEX1_CLASS_0 ( 0) 167*29629d9eSAndrew Turner #define TEX1_CLASS_1 ( L1_S_B) 168*29629d9eSAndrew Turner #define TEX1_CLASS_2 ( L1_S_C ) 169*29629d9eSAndrew Turner #define TEX1_CLASS_3 ( L1_S_C | L1_S_B) 170*29629d9eSAndrew Turner #define TEX1_CLASS_4 (L1_S_TEX0 ) 171*29629d9eSAndrew Turner #define TEX1_CLASS_5 (L1_S_TEX0 | L1_S_B) 172*29629d9eSAndrew Turner #define TEX1_CLASS_6 (L1_S_TEX0 | L1_S_C ) /* Reserved for ARM11 */ 173*29629d9eSAndrew Turner #define TEX1_CLASS_7 (L1_S_TEX0 | L1_S_C | L1_S_B) 174*29629d9eSAndrew Turner 175*29629d9eSAndrew Turner #define TEX2_CLASS_0 ( 0) 176*29629d9eSAndrew Turner #define TEX2_CLASS_1 ( L2_B) 177*29629d9eSAndrew Turner #define TEX2_CLASS_2 ( L2_C ) 178*29629d9eSAndrew Turner #define TEX2_CLASS_3 ( L2_C | L2_B) 179*29629d9eSAndrew Turner #define TEX2_CLASS_4 (L2_TEX0 ) 180*29629d9eSAndrew Turner #define TEX2_CLASS_5 (L2_TEX0 | L2_B) 181*29629d9eSAndrew Turner #define TEX2_CLASS_6 (L2_TEX0 | L2_C ) /* Reserved for ARM11 */ 182*29629d9eSAndrew Turner #define TEX2_CLASS_7 (L2_TEX0 | L2_C | L2_B) 183*29629d9eSAndrew Turner 184*29629d9eSAndrew Turner /* L1 table definitions. */ 185*29629d9eSAndrew Turner #define NB_IN_PT1 L1_TABLE_SIZE 186*29629d9eSAndrew Turner #define NPTE1_IN_PT1 L1_ENTRIES 187*29629d9eSAndrew Turner 188*29629d9eSAndrew Turner /* L2 table definitions. */ 189*29629d9eSAndrew Turner #define NB_IN_PT2 L2_TABLE_SIZE 190*29629d9eSAndrew Turner #define NPTE2_IN_PT2 L2_ENTRIES 191*29629d9eSAndrew Turner 192*29629d9eSAndrew Turner /* 193*29629d9eSAndrew Turner * Map memory attributes to TEX classes 194*29629d9eSAndrew Turner */ 195*29629d9eSAndrew Turner #define PTE2_ATTR_WB_WA TEX2_CLASS_0 196*29629d9eSAndrew Turner #define PTE2_ATTR_NOCACHE TEX2_CLASS_1 197*29629d9eSAndrew Turner #define PTE2_ATTR_DEVICE TEX2_CLASS_2 198*29629d9eSAndrew Turner #define PTE2_ATTR_SO TEX2_CLASS_3 199*29629d9eSAndrew Turner #define PTE2_ATTR_WT TEX2_CLASS_4 200*29629d9eSAndrew Turner /* 201*29629d9eSAndrew Turner * Software defined bits for L1 descriptors 202*29629d9eSAndrew Turner * - L1_AP0 is used as page accessed bit 203*29629d9eSAndrew Turner * - L1_AP2 (RO / not RW) is used as page not modified bit 204*29629d9eSAndrew Turner * - L1_TEX0 is used as software emulated RO bit 205*29629d9eSAndrew Turner */ 206*29629d9eSAndrew Turner #define PTE1_V L1_TYPE_S /* Valid bit */ 207*29629d9eSAndrew Turner #define PTE1_A L1_S_AP0 /* Accessed - software emulated */ 208*29629d9eSAndrew Turner #define PTE1_NM L1_S_AP2 /* not modified bit - software emulated 209*29629d9eSAndrew Turner * used as real write enable bit */ 210*29629d9eSAndrew Turner #define PTE1_M 0 /* Modified (dummy) */ 211*29629d9eSAndrew Turner #define PTE1_S L1_S_SHARED /* Shared */ 212*29629d9eSAndrew Turner #define PTE1_NG L1_S_NG /* Not global */ 213*29629d9eSAndrew Turner #define PTE1_G 0 /* Global (dummy) */ 214*29629d9eSAndrew Turner #define PTE1_NX L1_S_NX /* Not executable */ 215*29629d9eSAndrew Turner #define PTE1_X 0 /* Executable (dummy) */ 216*29629d9eSAndrew Turner #define PTE1_RO L1_S_TEX1 /* Read Only */ 217*29629d9eSAndrew Turner #define PTE1_RW 0 /* Read-Write (dummy) */ 218*29629d9eSAndrew Turner #define PTE1_U L1_S_AP1 /* User */ 219*29629d9eSAndrew Turner #define PTE1_NU 0 /* Not user (kernel only) (dummy) */ 220*29629d9eSAndrew Turner #define PTE1_W L1_S_TEX2 /* Wired */ 221*29629d9eSAndrew Turner 222*29629d9eSAndrew Turner #define PTE1_SHIFT L1_S_SHIFT 223*29629d9eSAndrew Turner #define PTE1_SIZE L1_S_SIZE 224*29629d9eSAndrew Turner #define PTE1_OFFSET L1_S_OFFSET 225*29629d9eSAndrew Turner #define PTE1_FRAME L1_S_FRAME 226*29629d9eSAndrew Turner 227*29629d9eSAndrew Turner #define PTE1_ATTR_MASK (L1_S_TEX0 | L1_S_C | L1_S_B) 228*29629d9eSAndrew Turner 229*29629d9eSAndrew Turner #define PTE1_AP_KR (PTE1_RO | PTE1_NM) 230*29629d9eSAndrew Turner #define PTE1_AP_KRW 0 231*29629d9eSAndrew Turner #define PTE1_AP_KRUR (PTE1_RO | PTE1_NM | PTE1_U) 232*29629d9eSAndrew Turner #define PTE1_AP_KRWURW PTE1_U 233*29629d9eSAndrew Turner 234*29629d9eSAndrew Turner /* 235*29629d9eSAndrew Turner * PTE1 descriptors creation macros. 236*29629d9eSAndrew Turner */ 237*29629d9eSAndrew Turner #define PTE1_PA(pa) ((pa) & PTE1_FRAME) 238*29629d9eSAndrew Turner #define PTE1_AP_COMMON (PTE1_V | PTE1_S) 239*29629d9eSAndrew Turner 240*29629d9eSAndrew Turner #define PTE1(pa, ap, attr) (PTE1_PA(pa) | (ap) | (attr) | PTE1_AP_COMMON) 241*29629d9eSAndrew Turner 242*29629d9eSAndrew Turner #define PTE1_KERN(pa, ap, attr) PTE1(pa, (ap) | PTE1_A | PTE1_G, attr) 243*29629d9eSAndrew Turner #define PTE1_KERN_NG(pa, ap, attr) PTE1(pa, (ap) | PTE1_A | PTE1_NG, attr) 244*29629d9eSAndrew Turner 245*29629d9eSAndrew Turner #define PTE1_LINK(pa) (((pa) & L1_C_ADDR_MASK) | L1_TYPE_C) 246*29629d9eSAndrew Turner 247*29629d9eSAndrew Turner /* 248*29629d9eSAndrew Turner * Software defined bits for L2 descriptors 249*29629d9eSAndrew Turner * - L2_AP0 is used as page accessed bit 250*29629d9eSAndrew Turner * - L2_AP2 (RO / not RW) is used as page not modified bit 251*29629d9eSAndrew Turner * - L2_TEX0 is used as software emulated RO bit 252*29629d9eSAndrew Turner */ 253*29629d9eSAndrew Turner #define PTE2_V L2_TYPE_S /* Valid bit */ 254*29629d9eSAndrew Turner #define PTE2_A L2_AP0 /* Accessed - software emulated */ 255*29629d9eSAndrew Turner #define PTE2_NM L2_AP2 /* not modified bit - software emulated 256*29629d9eSAndrew Turner * used as real write enable bit */ 257*29629d9eSAndrew Turner #define PTE2_M 0 /* Modified (dummy) */ 258*29629d9eSAndrew Turner #define PTE2_S L2_SHARED /* Shared */ 259*29629d9eSAndrew Turner #define PTE2_NG L2_NG /* Not global */ 260*29629d9eSAndrew Turner #define PTE2_G 0 /* Global (dummy) */ 261*29629d9eSAndrew Turner #define PTE2_NX L2_NX /* Not executable */ 262*29629d9eSAndrew Turner #define PTE2_X 0 /* Not executable (dummy) */ 263*29629d9eSAndrew Turner #define PTE2_RO L2_TEX1 /* Read Only */ 264*29629d9eSAndrew Turner #define PTE2_U L2_AP1 /* User */ 265*29629d9eSAndrew Turner #define PTE2_NU 0 /* Not user (kernel only) (dummy) */ 266*29629d9eSAndrew Turner #define PTE2_W L2_TEX2 /* Wired */ 267*29629d9eSAndrew Turner 268*29629d9eSAndrew Turner #define PTE2_SHIFT L2_S_SHIFT 269*29629d9eSAndrew Turner #define PTE2_SIZE L2_S_SIZE 270*29629d9eSAndrew Turner #define PTE2_OFFSET L2_S_OFFSET 271*29629d9eSAndrew Turner #define PTE2_FRAME L2_S_FRAME 272*29629d9eSAndrew Turner 273*29629d9eSAndrew Turner #define PTE2_ATTR_MASK (L2_TEX0 | L2_C | L2_B) 274*29629d9eSAndrew Turner /* PTE2 attributes to TEX class index: (TEX0 C B) */ 275*29629d9eSAndrew Turner #define PTE2_ATTR2IDX(attr) \ 276*29629d9eSAndrew Turner ((((attr) & (L2_C | L2_B)) >> L2_CB_SHIFT) | \ 277*29629d9eSAndrew Turner (((attr) & L2_TEX0) >> (L2_TEX_SHIFT - L2_CB_SHIFT))) 278*29629d9eSAndrew Turner 279*29629d9eSAndrew Turner #define PTE2_AP_KR (PTE2_RO | PTE2_NM) 280*29629d9eSAndrew Turner #define PTE2_AP_KRW 0 281*29629d9eSAndrew Turner #define PTE2_AP_KRUR (PTE2_RO | PTE2_NM | PTE2_U) 282*29629d9eSAndrew Turner #define PTE2_AP_KRWURW PTE2_U 283*29629d9eSAndrew Turner 284*29629d9eSAndrew Turner /* 285*29629d9eSAndrew Turner * PTE2 descriptors creation macros. 286*29629d9eSAndrew Turner */ 287*29629d9eSAndrew Turner #define PTE2_PA(pa) ((pa) & PTE2_FRAME) 288*29629d9eSAndrew Turner #define PTE2_AP_COMMON (PTE2_V | PTE2_S) 289*29629d9eSAndrew Turner 290*29629d9eSAndrew Turner #define PTE2(pa, ap, attr) (PTE2_PA(pa) | (ap) | (attr) | PTE2_AP_COMMON) 291*29629d9eSAndrew Turner 292*29629d9eSAndrew Turner #define PTE2_KERN(pa, ap, attr) PTE2(pa, (ap) | PTE2_A | PTE2_G, attr) 293*29629d9eSAndrew Turner #define PTE2_KERN_NG(pa, ap, attr) PTE2(pa, (ap) | PTE2_A | PTE2_NG, attr) 294*29629d9eSAndrew Turner 295*29629d9eSAndrew Turner #endif /* !_MACHINE_PTE_V6_H_ */ 296