Deleted Added
full compact
tte.h (84182) tte.h (88652)
1/*-
2 * Copyright (c) 1997 Berkeley Software Design, Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.

--- 12 unchanged lines hidden (view full) ---

21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 *
28 * from: BSDI: pmap.v9.h,v 1.10.2.6 1999/08/23 22:18:44 cp Exp
1/*-
2 * Copyright (c) 1997 Berkeley Software Design, Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.

--- 12 unchanged lines hidden (view full) ---

21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * SUCH DAMAGE.
27 *
28 * from: BSDI: pmap.v9.h,v 1.10.2.6 1999/08/23 22:18:44 cp Exp
29 * $FreeBSD: head/sys/sparc64/include/tte.h 84182 2001-09-30 18:55:05Z jake $
29 * $FreeBSD: head/sys/sparc64/include/tte.h 88652 2001-12-29 08:24:02Z jake $
30 */
31
32#ifndef _MACHINE_TTE_H_
33#define _MACHINE_TTE_H_
34
30 */
31
32#ifndef _MACHINE_TTE_H_
33#define _MACHINE_TTE_H_
34
35#include <machine/atomic.h>
35#define TTE_SHIFT (4)
36
36
37#define TTE_SHIFT 4
38#define STTE_SHIFT 5
39
40#define TT_CTX_SHIFT (48)
41#define TT_VA_SHIFT (22)
42#define TT_VPN_SHIFT (9)
43
44#define TT_CTX_SIZE (13)
45#define TT_VA_SIZE (42)
46
37#define TT_CTX_SHIFT (48)
38#define TT_VA_SHIFT (22)
39#define TT_VPN_SHIFT (9)
40
41#define TT_CTX_SIZE (13)
42#define TT_VA_SIZE (42)
43
47#define TT_CTX_MASK ((1L << TT_CTX_SIZE) - 1)
48#define TT_VA_MASK ((1L << TT_VA_SIZE) - 1)
44#define TT_CTX_MASK ((1UL << TT_CTX_SIZE) - 1)
45#define TT_VA_MASK ((1UL << TT_VA_SIZE) - 1)
49
46
50#define TT_G (1L << 63)
47#define TT_G (1UL << 63)
51#define TT_CTX(ctx) (((u_long)(ctx) & TT_CTX_MASK) << TT_CTX_SHIFT)
52#define TT_VA(va) ((u_long)(va) >> TT_VA_SHIFT)
53
54#define TD_SIZE_SHIFT (61)
55#define TD_SOFT2_SHIFT (50)
56#define TD_DIAG_SHIFT (41)
57#define TD_PA_SHIFT (13)
58#define TD_SOFT_SHIFT (7)
59
60#define TD_SIZE_SIZE (2)
61#define TD_SOFT2_SIZE (9)
62#define TD_DIAG_SIZE (9)
63#define TD_PA_SIZE (28)
64#define TD_SOFT_SIZE (6)
65
48#define TT_CTX(ctx) (((u_long)(ctx) & TT_CTX_MASK) << TT_CTX_SHIFT)
49#define TT_VA(va) ((u_long)(va) >> TT_VA_SHIFT)
50
51#define TD_SIZE_SHIFT (61)
52#define TD_SOFT2_SHIFT (50)
53#define TD_DIAG_SHIFT (41)
54#define TD_PA_SHIFT (13)
55#define TD_SOFT_SHIFT (7)
56
57#define TD_SIZE_SIZE (2)
58#define TD_SOFT2_SIZE (9)
59#define TD_DIAG_SIZE (9)
60#define TD_PA_SIZE (28)
61#define TD_SOFT_SIZE (6)
62
66#define TD_SIZE_MASK (((1L << TD_SIZE_SIZE) - 1) << TD_SIZE_SHIFT)
67#define TD_SOFT2_MASK (((1L << TD_SOFT2_SIZE) - 1) << TD_SOFT2_SHIFT)
68#define TD_DIAG_MASK (((1L << TD_DIAG_SIZE) - 1) << TD_DIAG_SHIFT)
69#define TD_PA_MASK (((1L << TD_PA_SIZE) - 1) << TD_PA_SHIFT)
70#define TD_SOFT_MASK (((1L << TD_SOFT_SIZE) - 1) << TD_SOFT_SHIFT)
63#define TD_SIZE_MASK (((1UL << TD_SIZE_SIZE) - 1) << TD_SIZE_SHIFT)
64#define TD_SOFT2_MASK (((1UL << TD_SOFT2_SIZE) - 1) << TD_SOFT2_SHIFT)
65#define TD_DIAG_MASK (((1UL << TD_DIAG_SIZE) - 1) << TD_DIAG_SHIFT)
66#define TD_PA_MASK (((1UL << TD_PA_SIZE) - 1) << TD_PA_SHIFT)
67#define TD_SOFT_MASK (((1UL << TD_SOFT_SIZE) - 1) << TD_SOFT_SHIFT)
71
72#define TD_VA_LOW_SHIFT TD_SOFT2_SHIFT
73#define TD_VA_LOW_MASK TD_SOFT2_MASK
74
68
69#define TD_VA_LOW_SHIFT TD_SOFT2_SHIFT
70#define TD_VA_LOW_MASK TD_SOFT2_MASK
71
75#define TS_EXEC (1L << 4)
76#define TS_INIT (1L << 3)
77#define TS_MNG (1L << 2)
78#define TS_REF (1L << 1)
79#define TS_W (1L << 0)
72#define TS_EXEC (1UL << 4)
73#define TS_REF (1UL << 3)
74#define TS_PV (1UL << 2)
75#define TS_W (1UL << 1)
76#define TS_WIRED (1UL << 0)
80
77
81#define TD_V (1L << 63)
82#define TD_8K (0L << TD_SIZE_SHIFT)
83#define TD_64K (1L << TD_SIZE_SHIFT)
84#define TD_512K (2L << TD_SIZE_SHIFT)
85#define TD_4M (3L << TD_SIZE_SHIFT)
86#define TD_NFO (1L << 60)
87#define TD_IE (1L << 59)
78#define TD_V (1UL << 63)
79#define TD_8K (0UL << TD_SIZE_SHIFT)
80#define TD_64K (1UL << TD_SIZE_SHIFT)
81#define TD_512K (2UL << TD_SIZE_SHIFT)
82#define TD_4M (3UL << TD_SIZE_SHIFT)
83#define TD_NFO (1UL << 60)
84#define TD_IE (1UL << 59)
88#define TD_VPN_LOW(vpn) ((vpn << TD_SOFT2_SHIFT) & TD_SOFT2_MASK)
89#define TD_VA_LOW(va) (TD_VPN_LOW((va) >> PAGE_SHIFT))
90#define TD_PA(pa) ((pa) & TD_PA_MASK)
91#define TD_EXEC (TS_EXEC << TD_SOFT_SHIFT)
85#define TD_VPN_LOW(vpn) ((vpn << TD_SOFT2_SHIFT) & TD_SOFT2_MASK)
86#define TD_VA_LOW(va) (TD_VPN_LOW((va) >> PAGE_SHIFT))
87#define TD_PA(pa) ((pa) & TD_PA_MASK)
88#define TD_EXEC (TS_EXEC << TD_SOFT_SHIFT)
92#define TD_INIT (TS_INIT << TD_SOFT_SHIFT)
93#define TD_MNG (TS_MNG << TD_SOFT_SHIFT)
94#define TD_REF (TS_REF << TD_SOFT_SHIFT)
89#define TD_REF (TS_REF << TD_SOFT_SHIFT)
90#define TD_PV (TS_PV << TD_SOFT_SHIFT)
95#define TD_SW (TS_W << TD_SOFT_SHIFT)
91#define TD_SW (TS_W << TD_SOFT_SHIFT)
96#define TD_L (1L << 6)
97#define TD_CP (1L << 5)
98#define TD_CV (1L << 4)
99#define TD_E (1L << 3)
100#define TD_P (1L << 2)
101#define TD_W (1L << 1)
102#define TD_G (1L << 0)
92#define TD_WIRED (TS_WIRED << TD_SOFT_SHIFT)
93#define TD_L (1UL << 6)
94#define TD_CP (1UL << 5)
95#define TD_CV (1UL << 4)
96#define TD_E (1UL << 3)
97#define TD_P (1UL << 2)
98#define TD_W (1UL << 1)
99#define TD_G (1UL << 0)
103
104#define TT_GET_CTX(tag) (((tag) >> TT_CTX_SHIFT) & TT_CTX_MASK)
100
101#define TT_GET_CTX(tag) (((tag) >> TT_CTX_SHIFT) & TT_CTX_MASK)
102#define TD_GET_SIZE(d) (((d) >> TD_SIZE_SHIFT) & 3)
103#define TD_GET_PA(d) ((d) & TD_PA_MASK)
105
106struct tte {
107 u_long tte_tag;
108 u_long tte_data;
109};
110
104
105struct tte {
106 u_long tte_tag;
107 u_long tte_data;
108};
109
111struct stte {
112 struct tte st_tte;
113 vm_offset_t st_next;
114 vm_offset_t st_prev;
115};
116
117static __inline vm_offset_t
118tte_get_vpn(struct tte tte)
119{
120 return (((tte.tte_tag & TT_VA_MASK) << TT_VPN_SHIFT) |
121 ((tte.tte_data & TD_VA_LOW_MASK) >> TD_VA_LOW_SHIFT));
122}
123
124static __inline vm_offset_t
125tte_get_va(struct tte tte)
126{
127 return (tte_get_vpn(tte) << PAGE_SHIFT);
128}
129
110static __inline vm_offset_t
111tte_get_vpn(struct tte tte)
112{
113 return (((tte.tte_tag & TT_VA_MASK) << TT_VPN_SHIFT) |
114 ((tte.tte_data & TD_VA_LOW_MASK) >> TD_VA_LOW_SHIFT));
115}
116
117static __inline vm_offset_t
118tte_get_va(struct tte tte)
119{
120 return (tte_get_vpn(tte) << PAGE_SHIFT);
121}
122
130static __inline void
131tte_invalidate(struct tte *tp)
132{
133 atomic_clear_long(&tp->tte_data, TD_V);
134}
135
136static __inline int
137tte_match(struct tte tte, vm_offset_t va)
138{
139 return ((tte.tte_data & TD_V) != 0 &&
140 ((tte.tte_tag ^ TT_VA(va)) & TT_VA_MASK) == 0 &&
141 ((tte.tte_data ^ TD_VA_LOW(va)) & TD_VA_LOW_MASK) == 0);
142}
143
144#endif /* !_MACHINE_TTE_H_ */
123static __inline int
124tte_match(struct tte tte, vm_offset_t va)
125{
126 return ((tte.tte_data & TD_V) != 0 &&
127 ((tte.tte_tag ^ TT_VA(va)) & TT_VA_MASK) == 0 &&
128 ((tte.tte_data ^ TD_VA_LOW(va)) & TD_VA_LOW_MASK) == 0);
129}
130
131#endif /* !_MACHINE_TTE_H_ */