This source file includes following definitions.
- get_order
- ___pa
1
2
3
4
5
6
7
8
9
10
11 #ifndef _XTENSA_PAGE_H
12 #define _XTENSA_PAGE_H
13
14 #include <asm/processor.h>
15 #include <asm/types.h>
16 #include <asm/cache.h>
17 #include <asm/kmem_layout.h>
18
19
20
21
22
23 #define PAGE_SHIFT 12
24 #define PAGE_SIZE (__XTENSA_UL_CONST(1) << PAGE_SHIFT)
25 #define PAGE_MASK (~(PAGE_SIZE-1))
26
27 #ifdef CONFIG_MMU
28 #define PAGE_OFFSET XCHAL_KSEG_CACHED_VADDR
29 #define PHYS_OFFSET XCHAL_KSEG_PADDR
30 #define MAX_LOW_PFN (PHYS_PFN(XCHAL_KSEG_PADDR) + \
31 PHYS_PFN(XCHAL_KSEG_SIZE))
32 #else
33 #define PAGE_OFFSET _AC(CONFIG_DEFAULT_MEM_START, UL)
34 #define PHYS_OFFSET _AC(CONFIG_DEFAULT_MEM_START, UL)
35 #define MAX_LOW_PFN PHYS_PFN(0xfffffffful)
36 #endif
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 #if DCACHE_WAY_SIZE > PAGE_SIZE
67 # define DCACHE_ALIAS_ORDER (DCACHE_WAY_SHIFT - PAGE_SHIFT)
68 # define DCACHE_ALIAS_MASK (PAGE_MASK & (DCACHE_WAY_SIZE - 1))
69 # define DCACHE_ALIAS(a) (((a) & DCACHE_ALIAS_MASK) >> PAGE_SHIFT)
70 # define DCACHE_ALIAS_EQ(a,b) ((((a) ^ (b)) & DCACHE_ALIAS_MASK) == 0)
71 #else
72 # define DCACHE_ALIAS_ORDER 0
73 # define DCACHE_ALIAS(a) ((void)(a), 0)
74 #endif
75 #define DCACHE_N_COLORS (1 << DCACHE_ALIAS_ORDER)
76
77 #if ICACHE_WAY_SIZE > PAGE_SIZE
78 # define ICACHE_ALIAS_ORDER (ICACHE_WAY_SHIFT - PAGE_SHIFT)
79 # define ICACHE_ALIAS_MASK (PAGE_MASK & (ICACHE_WAY_SIZE - 1))
80 # define ICACHE_ALIAS(a) (((a) & ICACHE_ALIAS_MASK) >> PAGE_SHIFT)
81 # define ICACHE_ALIAS_EQ(a,b) ((((a) ^ (b)) & ICACHE_ALIAS_MASK) == 0)
82 #else
83 # define ICACHE_ALIAS_ORDER 0
84 #endif
85
86
87 #ifdef __ASSEMBLY__
88
89 #define __pgprot(x) (x)
90
91 #else
92
93
94
95
96
97 typedef struct { unsigned long pte; } pte_t;
98 typedef struct { unsigned long pgd; } pgd_t;
99 typedef struct { unsigned long pgprot; } pgprot_t;
100 typedef struct page *pgtable_t;
101
102 #define pte_val(x) ((x).pte)
103 #define pgd_val(x) ((x).pgd)
104 #define pgprot_val(x) ((x).pgprot)
105
106 #define __pte(x) ((pte_t) { (x) } )
107 #define __pgd(x) ((pgd_t) { (x) } )
108 #define __pgprot(x) ((pgprot_t) { (x) } )
109
110
111
112
113
114
115 #if XCHAL_HAVE_NSA
116
117 static inline __attribute_const__ int get_order(unsigned long size)
118 {
119 int lz;
120 asm ("nsau %0, %1" : "=r" (lz) : "r" ((size - 1) >> PAGE_SHIFT));
121 return 32 - lz;
122 }
123
124 #else
125
126 # include <asm-generic/getorder.h>
127
128 #endif
129
130 struct page;
131 struct vm_area_struct;
132 extern void clear_page(void *page);
133 extern void copy_page(void *to, void *from);
134
135
136
137
138
139
140 #if defined(CONFIG_MMU) && DCACHE_WAY_SIZE > PAGE_SIZE
141 extern void clear_page_alias(void *vaddr, unsigned long paddr);
142 extern void copy_page_alias(void *to, void *from,
143 unsigned long to_paddr, unsigned long from_paddr);
144
145 #define clear_user_highpage clear_user_highpage
146 void clear_user_highpage(struct page *page, unsigned long vaddr);
147 #define __HAVE_ARCH_COPY_USER_HIGHPAGE
148 void copy_user_highpage(struct page *to, struct page *from,
149 unsigned long vaddr, struct vm_area_struct *vma);
150 #else
151 # define clear_user_page(page, vaddr, pg) clear_page(page)
152 # define copy_user_page(to, from, vaddr, pg) copy_page(to, from)
153 #endif
154
155
156
157
158
159
160
161
162 #define ARCH_PFN_OFFSET (PHYS_OFFSET >> PAGE_SHIFT)
163
164 #ifdef CONFIG_MMU
165 static inline unsigned long ___pa(unsigned long va)
166 {
167 unsigned long off = va - PAGE_OFFSET;
168
169 if (off >= XCHAL_KSEG_SIZE)
170 off -= XCHAL_KSEG_SIZE;
171
172 return off + PHYS_OFFSET;
173 }
174 #define __pa(x) ___pa((unsigned long)(x))
175 #else
176 #define __pa(x) \
177 ((unsigned long) (x) - PAGE_OFFSET + PHYS_OFFSET)
178 #endif
179 #define __va(x) \
180 ((void *)((unsigned long) (x) - PHYS_OFFSET + PAGE_OFFSET))
181 #define pfn_valid(pfn) \
182 ((pfn) >= ARCH_PFN_OFFSET && ((pfn) - ARCH_PFN_OFFSET) < max_mapnr)
183
184 #ifdef CONFIG_DISCONTIGMEM
185 # error CONFIG_DISCONTIGMEM not supported
186 #endif
187
188 #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
189 #define page_to_virt(page) __va(page_to_pfn(page) << PAGE_SHIFT)
190 #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT)
191 #define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT)
192
193 #endif
194
195 #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \
196 VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
197
198 #include <asm-generic/memory_model.h>
199 #endif