This source file includes following definitions.
- get_segmap
- put_segmap
- get_pte
- put_pte
- switch_to_context
- get_context
1
2
3
4
5
6
7 #ifndef _SPARC_PAGE_H
8 #define _SPARC_PAGE_H
9
10 #include <asm/asi.h>
11 #include <asm/contregs.h>
12
13
14
15
16
17 #define invalidate() flush_vac_context()
18
19
20 #define PAGE_SHIFT 12
21 #define PGDIR_SHIFT 18
22 #define PAGE_SIZE 4096
23 #define PGDIR_SIZE (1UL << PGDIR_SHIFT)
24
25 #ifdef __KERNEL__
26
27 #define BITS_PER_PTR (8*sizeof(unsigned long))
28 #define PAGE_MASK (~(PAGE_SIZE-1))
29 #define PGDIR_MASK (~(PGDIR_SIZE-1))
30 #define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK)
31 #define PGDIR_ALIGN(addr) (((addr)+PGDIR_SIZE-1)&PGDIR_MASK)
32 #define PTR_MASK (~(sizeof(void*)-1))
33
34
35 #define SIZEOF_PTR_LOG2 2
36
37
38
39
40
41
42
43 #define PAGE_DIR_OFFSET(base, address) ((unsigned long *) 0)
44 #define PAGE_PTR(address) ((unsigned long) 0)
45 #define PTRS_PER_PAGE (64)
46
47
48
49 #define PTE_V 0x80000000
50 #define PTE_ACC 0x60000000
51 #define PTE_W 0x40000000
52 #define PTE_P 0x20000000
53 #define PTE_NC 0x10000000
54 #define PTE_TYP 0x0c000000
55 #define PTE_RMEM 0x00000000
56 #define PTE_IO 0x04000000
57 #define PTE_VME16 0x08000000
58 #define PTE_VME32 0x0c000000
59 #define PTE_R 0x02000000
60 #define PTE_M 0x01000000
61 #define PTE_RESV 0x00f80000
62 #define PTE_PHYPG 0x0007ffff
63
64
65
66
67
68 #ifndef __ASSEMBLY__
69 extern __inline__ unsigned long get_segmap(unsigned long addr)
70 {
71 register unsigned long entry;
72
73 __asm__ __volatile__("lduha [%1] 0x3, %0" :
74 "=r" (entry) :
75 "r" (addr));
76
77 return entry;
78 }
79
80 extern __inline__ void put_segmap(unsigned long* addr, unsigned long entry)
81 {
82
83 __asm__ __volatile__("stha %1, [%0] 0x3" : : "r" (addr), "r" (entry));
84
85 return;
86 }
87
88 extern __inline__ unsigned long get_pte(unsigned long addr)
89 {
90 register unsigned long entry;
91
92 __asm__ __volatile__("lda [%1] 0x4, %0" :
93 "=r" (entry) :
94 "r" (addr));
95 return entry;
96 }
97
98 extern __inline__ void put_pte(unsigned long addr, unsigned long entry)
99 {
100 __asm__ __volatile__("sta %1, [%0] 0x4" : :
101 "r" (addr),
102 "r" (entry));
103
104 return;
105 }
106
107 extern __inline__ void switch_to_context(int context)
108 {
109 __asm__ __volatile__("stba %0, [%1] 0x2" : :
110 "r" (context),
111 "r" (0x30000000));
112
113 return;
114 }
115
116 extern __inline__ int get_context(void)
117 {
118 register int ctx;
119
120 __asm__ __volatile__("lduba [%1] 0x2, %0" :
121 "=r" (ctx) :
122 "r" (0x30000000));
123
124 return ctx;
125 }
126
127
128
129
130
131
132
133 #define SET_PAGE_DIR(tsk,pgdir)
134
135
136 #endif
137
138 #endif
139
140 #endif