Annotation of sys/arch/powerpc/include/pte.h, Revision 1.1.1.1
1.1 nbrk 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_ */
CVSweb