1 /* $OpenBSD: pte.h,v 1.9 2005/12/17 07:31:26 miod Exp $ */ 2 /* $NetBSD: pte.h,v 1.1 1996/09/30 16:34:32 ws Exp $ */ 3 4 /*- 5 * Copyright (C) 1995, 1996 Wolfgang Solfrank. 6 * Copyright (C) 1995, 1996 TooLs GmbH. 7 * All rights reserved. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 1. Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 2. Redistributions in binary form must reproduce the above copyright 15 * notice, this list of conditions and the following disclaimer in the 16 * documentation and/or other materials provided with the distribution. 17 * 3. All advertising materials mentioning features or use of this software 18 * must display the following acknowledgement: 19 * This product includes software developed by TooLs GmbH. 20 * 4. The name of TooLs GmbH may not be used to endorse or promote products 21 * derived from this software without specific prior written permission. 22 * 23 * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR 24 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 25 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 26 * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 27 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 28 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 29 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 30 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 31 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 32 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 33 */ 34 35 #ifndef _POWERPC_PTE_H_ 36 #define _POWERPC_PTE_H_ 37 38 #include <sys/queue.h> 39 40 /* 41 * Page Table Entries 42 */ 43 #ifndef _LOCORE 44 struct pte_32 { 45 u_int32_t pte_hi; 46 u_int32_t pte_lo; 47 }; 48 struct pte_64 { 49 u_int64_t pte_hi; 50 u_int64_t pte_lo; 51 }; 52 #endif /* _LOCORE */ 53 54 /* 32 bit */ 55 /* High word: */ 56 #define PTE_VALID_32 0x80000000 57 #define PTE_VSID_SHIFT_32 7 58 #define PTE_HID_32 0x00000040 59 #define PTE_API_32 0x0000003f 60 /* Low word: */ 61 #define PTE_RPGN_32 0xfffff000 62 #define PTE_REF_32 0x00000100 63 #define PTE_CHG_32 0x00000080 64 #define PTE_WIM_32 0x00000078 65 #define PTE_W_32 0x00000040 66 #define PTE_EXE_32 0x00000040 /* only used in pmap_attr, same as PTE_W */ 67 #define PTE_I_32 0x00000020 68 #define PTE_M_32 0x00000010 69 #define PTE_G_32 0x00000008 70 #define PTE_PP_32 0x00000003 71 #define PTE_RO_32 0x00000003 72 #define PTE_RW_32 0x00000002 73 74 75 /* 64 bit */ 76 /* High doubleword: */ 77 #define PTE_VALID_64 0x0000000000000001ULL 78 #define PTE_AVPN_SHIFT_64 7 79 #define PTE_AVPN_64 0xffffffffffffff80ULL 80 #define PTE_API_SHIFT_64 7 81 #define PTE_API_64 0x0000000000000f80ULL 82 #define PTE_VSID_SHIFT_64 12 83 #define PTE_VSID_64 0xfffffffffffff000ULL 84 #define PTE_HID_64 0x0000000000000002ULL 85 /* Low word: */ 86 #define PTE_RPGN_64 0x3ffffffffffff000ULL 87 #define PTE_REF_64 0x0000000000000100ULL 88 #define PTE_CHG_64 0x0000000000000080ULL 89 #define PTE_WIMG_64 0x0000000000000078ULL 90 #define PTE_W_64 0x0000000000000040ULL 91 #define PTE_EXE_64 PTE_W 92 #define PTE_I_64 0x0000000000000020ULL 93 #define PTE_M_64 0x0000000000000010ULL 94 #define PTE_G_64 0x0000000000000008ULL 95 #define PTE_N_64 0x0000000000000004ULL 96 #define PTE_PP_64 0x0000000000000003ULL 97 #define PTE_RO_64 0x0000000000000003ULL 98 #define PTE_RW_64 0x0000000000000002ULL 99 100 #ifndef _LOCORE 101 typedef struct pte_32 pte32_t; 102 typedef struct pte_64 pte64_t; 103 #endif /* _LOCORE */ 104 105 /* 106 * Extract bits from address 107 */ 108 #define ADDR_SR_SHIFT 28 109 #define ADDR_PIDX 0x0ffff000 110 #define ADDR_PIDX_SHIFT 12 111 #define ADDR_API_SHIFT_32 22 112 #define ADDR_API_SHIFT_64 16 113 #define ADDR_POFF 0x00000fff 114 115 #ifndef _LOCORE 116 #ifdef _KERNEL 117 extern struct pte *ptable; 118 extern int ptab_cnt; 119 #endif /* _KERNEL */ 120 #endif /* _LOCORE */ 121 122 /* 123 * Bits in DSISR: 124 */ 125 #define DSISR_DIRECT 0x80000000 126 #define DSISR_NOTFOUND 0x40000000 127 #define DSISR_PROTECT 0x08000000 128 #define DSISR_INVRX 0x04000000 129 #define DSISR_STORE 0x02000000 130 #define DSISR_DABR 0x00400000 131 #define DSISR_SEGMENT 0x00200000 132 #define DSISR_EAR 0x00100000 133 134 /* 135 * Bits in SRR1 on ISI: 136 */ 137 #define ISSRR1_NOTFOUND 0x40000000 138 #define ISSRR1_DIRECT 0x10000000 139 #define ISSRR1_PROTECT 0x08000000 140 #define ISSRR1_SEGMENT 0x00200000 141 142 #ifdef _KERNEL 143 #ifndef _LOCORE 144 extern u_int dsisr(void); 145 extern vaddr_t dar(void); 146 #endif /* _KERNEL */ 147 #endif /* _LOCORE */ 148 #endif /* _POWERPC_PTE_H_ */ 149