pte.h revision 1.31 1 1.31 matt /* $NetBSD: pte.h,v 1.31 2012/02/06 02:14:13 matt Exp $ */
2 1.17 thorpej
3 1.17 thorpej /*-
4 1.17 thorpej * Copyright (c) 1998 The NetBSD Foundation, Inc.
5 1.17 thorpej * All rights reserved.
6 1.17 thorpej *
7 1.17 thorpej * This code is derived from software contributed to The NetBSD Foundation
8 1.17 thorpej * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
9 1.17 thorpej * NASA Ames Research Center.
10 1.17 thorpej *
11 1.17 thorpej * Redistribution and use in source and binary forms, with or without
12 1.17 thorpej * modification, are permitted provided that the following conditions
13 1.17 thorpej * are met:
14 1.17 thorpej * 1. Redistributions of source code must retain the above copyright
15 1.17 thorpej * notice, this list of conditions and the following disclaimer.
16 1.17 thorpej * 2. Redistributions in binary form must reproduce the above copyright
17 1.17 thorpej * notice, this list of conditions and the following disclaimer in the
18 1.17 thorpej * documentation and/or other materials provided with the distribution.
19 1.17 thorpej *
20 1.17 thorpej * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
21 1.17 thorpej * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22 1.17 thorpej * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 1.17 thorpej * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
24 1.17 thorpej * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 1.17 thorpej * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 1.17 thorpej * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 1.17 thorpej * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 1.17 thorpej * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 1.17 thorpej * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 1.17 thorpej * POSSIBILITY OF SUCH DAMAGE.
31 1.17 thorpej */
32 1.1 cgd
33 1.1 cgd /*
34 1.8 cgd * Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
35 1.1 cgd * All rights reserved.
36 1.1 cgd *
37 1.1 cgd * Author: Chris G. Demetriou
38 1.31 matt *
39 1.1 cgd * Permission to use, copy, modify and distribute this software and
40 1.1 cgd * its documentation is hereby granted, provided that both the copyright
41 1.1 cgd * notice and this permission notice appear in all copies of the
42 1.1 cgd * software, derivative works or modified versions, and any portions
43 1.1 cgd * thereof, and that both notices appear in supporting documentation.
44 1.31 matt *
45 1.31 matt * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
46 1.31 matt * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
47 1.1 cgd * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
48 1.31 matt *
49 1.1 cgd * Carnegie Mellon requests users of this software to return to
50 1.1 cgd *
51 1.1 cgd * Software Distribution Coordinator or Software.Distribution (at) CS.CMU.EDU
52 1.1 cgd * School of Computer Science
53 1.1 cgd * Carnegie Mellon University
54 1.1 cgd * Pittsburgh PA 15213-3890
55 1.1 cgd *
56 1.1 cgd * any improvements or extensions that they make and grant Carnegie the
57 1.1 cgd * rights to redistribute these changes.
58 1.1 cgd */
59 1.1 cgd
60 1.14 thorpej #ifndef _ALPHA_PTE_H_
61 1.14 thorpej #define _ALPHA_PTE_H_
62 1.14 thorpej
63 1.1 cgd /*
64 1.1 cgd * Alpha page table entry.
65 1.1 cgd * Things which are in the VMS PALcode but not in the OSF PALcode
66 1.1 cgd * are marked with "(VMS)".
67 1.1 cgd *
68 1.1 cgd * This information derived from pp. (II) 3-3 - (II) 3-6 and
69 1.1 cgd * (III) 3-3 - (III) 3-5 of the "Alpha Architecture Reference Manual" by
70 1.1 cgd * Richard L. Sites.
71 1.1 cgd */
72 1.1 cgd
73 1.1 cgd /*
74 1.1 cgd * Alpha Page Table Entry
75 1.1 cgd */
76 1.5 cgd
77 1.5 cgd #include <machine/alpha_cpu.h>
78 1.5 cgd
79 1.5 cgd typedef alpha_pt_entry_t pt_entry_t;
80 1.5 cgd
81 1.1 cgd #define PTESHIFT 3 /* pte size == 1 << PTESHIFT */
82 1.1 cgd
83 1.5 cgd #define PG_V ALPHA_PTE_VALID
84 1.5 cgd #define PG_NV 0
85 1.5 cgd #define PG_FOR ALPHA_PTE_FAULT_ON_READ
86 1.5 cgd #define PG_FOW ALPHA_PTE_FAULT_ON_WRITE
87 1.5 cgd #define PG_FOE ALPHA_PTE_FAULT_ON_EXECUTE
88 1.5 cgd #define PG_ASM ALPHA_PTE_ASM
89 1.5 cgd #define PG_GH ALPHA_PTE_GRANULARITY
90 1.5 cgd #define PG_KRE ALPHA_PTE_KR
91 1.5 cgd #define PG_URE ALPHA_PTE_UR
92 1.5 cgd #define PG_KWE ALPHA_PTE_KW
93 1.5 cgd #define PG_UWE ALPHA_PTE_UW
94 1.28 chs #define PG_PROT (ALPHA_PTE_PROT | PG_EXEC | PG_FOE)
95 1.22 thorpej #define PG_RSVD 0x000000000000cc80 /* Reserved for hardware */
96 1.1 cgd #define PG_WIRED 0x0000000000010000 /* Wired. [SOFTWARE] */
97 1.19 thorpej #define PG_PVLIST 0x0000000000020000 /* on pv list [SOFTWARE] */
98 1.22 thorpej #define PG_EXEC 0x0000000000040000 /* execute perms [SOFTWARE] */
99 1.28 chs #define PG_FRAME ALPHA_PTE_PFN
100 1.1 cgd #define PG_SHIFT 32
101 1.5 cgd #define PG_PFNUM(x) ALPHA_PTE_TO_PFN(x)
102 1.23 thorpej
103 1.23 thorpej /*
104 1.23 thorpej * These are the PALcode PTE bits that we care about when checking to see
105 1.26 thorpej * if a PTE has changed in such a way as to require a TBI.
106 1.23 thorpej */
107 1.26 thorpej #define PG_PALCODE(x) ((x) & ALPHA_PTE_PALCODE)
108 1.1 cgd
109 1.20 thorpej #if defined(_KERNEL) || defined(__KVM_ALPHA_PRIVATE)
110 1.18 thorpej #define NPTEPG_SHIFT (PAGE_SHIFT - PTESHIFT)
111 1.24 thorpej #define NPTEPG (1L << NPTEPG_SHIFT)
112 1.18 thorpej
113 1.1 cgd #define PTEMASK (NPTEPG - 1)
114 1.18 thorpej
115 1.18 thorpej #define l3pte_index(va) \
116 1.25 thorpej (((vaddr_t)(va) >> PAGE_SHIFT) & PTEMASK)
117 1.18 thorpej
118 1.18 thorpej #define l2pte_index(va) \
119 1.25 thorpej (((vaddr_t)(va) >> (PAGE_SHIFT + NPTEPG_SHIFT)) & PTEMASK)
120 1.18 thorpej
121 1.18 thorpej #define l1pte_index(va) \
122 1.25 thorpej (((vaddr_t)(va) >> (PAGE_SHIFT + 2 * NPTEPG_SHIFT)) & PTEMASK)
123 1.1 cgd
124 1.16 thorpej #define VPT_INDEX(va) \
125 1.25 thorpej (((vaddr_t)(va) >> PAGE_SHIFT) & ((1 << 3 * NPTEPG_SHIFT) - 1))
126 1.17 thorpej
127 1.17 thorpej /* Space mapped by one level 1 PTE */
128 1.17 thorpej #define ALPHA_L1SEG_SIZE (1L << ((2 * NPTEPG_SHIFT) + PAGE_SHIFT))
129 1.17 thorpej
130 1.17 thorpej /* Space mapped by one level 2 PTE */
131 1.17 thorpej #define ALPHA_L2SEG_SIZE (1L << (NPTEPG_SHIFT + PAGE_SHIFT))
132 1.17 thorpej
133 1.17 thorpej #define alpha_trunc_l1seg(x) (((u_long)(x)) & ~(ALPHA_L1SEG_SIZE-1))
134 1.17 thorpej #define alpha_trunc_l2seg(x) (((u_long)(x)) & ~(ALPHA_L2SEG_SIZE-1))
135 1.20 thorpej #endif /* _KERNEL || __KVM_ALPHA_PRIVATE */
136 1.1 cgd
137 1.3 cgd #ifdef _KERNEL
138 1.21 thorpej extern pt_entry_t *kernel_lev1map; /* kernel level 1 page table */
139 1.14 thorpej #endif /* _KERNEL */
140 1.14 thorpej
141 1.14 thorpej #endif /* ! _ALPHA_PTE_H_ */
142