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 (1UL << PAGE_SHIFT)
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) ((void *) 0)
44 #define PAGE_PTR(address) ((void *) 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 extern __inline__ unsigned long get_segmap(unsigned long addr)
69 {
70 register unsigned long entry;
71
72 __asm__ __volatile__("lduha [%1] 0x3, %0" :
73 "=r" (entry) :
74 "r" (addr));
75
76 return entry;
77 }
78
79 extern __inline__ void put_segmap(unsigned long* addr, unsigned long entry)
80 {
81
82 __asm__ __volatile__("stha %1, [%0] 0x3" : : "r" (addr), "r" (entry));
83
84 return;
85 }
86
87 extern __inline__ unsigned long get_pte(unsigned long addr)
88 {
89 register unsigned long entry;
90
91 __asm__ __volatile__("lda [%1] 0x4, %0" :
92 "=r" (entry) :
93 "r" (addr));
94 return entry;
95 }
96
97 extern __inline__ void put_pte(unsigned long addr, unsigned long entry)
98 {
99 __asm__ __volatile__("sta %1, [%0] 0x4" : :
100 "r" (addr),
101 "r" (entry));
102
103 return;
104 }
105
106 extern __inline__ void switch_to_context(int context)
107 {
108 __asm__ __volatile__("stba %0, [%1] 0x2" : :
109 "r" (context),
110 "r" (0x30000000));
111
112 return;
113 }
114
115 extern __inline__ int get_context(void)
116 {
117 register int ctx;
118
119 __asm__ __volatile__("lduba [%1] 0x2, %0" :
120 "=r" (ctx) :
121 "r" (0x30000000));
122
123 return ctx;
124 }
125
126 #endif
127
128 #endif