]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - arch/metag/include/asm/highmem.h
6646a15c73dd70c55dbb999d422c84234d6d6e15
[karo-tx-linux.git] / arch / metag / include / asm / highmem.h
1 #ifndef _ASM_HIGHMEM_H
2 #define _ASM_HIGHMEM_H
3
4 #include <asm/cacheflush.h>
5 #include <asm/kmap_types.h>
6 #include <asm/fixmap.h>
7
8 /*
9  * Right now we initialize only a single pte table. It can be extended
10  * easily, subsequent pte tables have to be allocated in one physical
11  * chunk of RAM.
12  */
13 /*
14  * Ordering is (from lower to higher memory addresses):
15  *
16  * high_memory
17  *                      Persistent kmap area
18  * PKMAP_BASE
19  *                      fixed_addresses
20  * FIXADDR_START
21  * FIXADDR_TOP
22  *                      Vmalloc area
23  * VMALLOC_START
24  * VMALLOC_END
25  */
26 #define PKMAP_BASE              (FIXADDR_START - PMD_SIZE)
27 #define LAST_PKMAP              PTRS_PER_PTE
28 #define LAST_PKMAP_MASK         (LAST_PKMAP - 1)
29 #define PKMAP_NR(virt)          (((virt) - PKMAP_BASE) >> PAGE_SHIFT)
30 #define PKMAP_ADDR(nr)          (PKMAP_BASE + ((nr) << PAGE_SHIFT))
31
32 #define kmap_prot               PAGE_KERNEL
33
34 static inline void flush_cache_kmaps(void)
35 {
36         flush_cache_all();
37 }
38
39 /* declarations for highmem.c */
40 extern unsigned long highstart_pfn, highend_pfn;
41
42 extern pte_t *pkmap_page_table;
43
44 extern void *kmap_high(struct page *page);
45 extern void kunmap_high(struct page *page);
46
47 extern void kmap_init(void);
48
49 /*
50  * The following functions are already defined by <linux/highmem.h>
51  * when CONFIG_HIGHMEM is not set.
52  */
53 #ifdef CONFIG_HIGHMEM
54 extern void *kmap(struct page *page);
55 extern void kunmap(struct page *page);
56 extern void *kmap_atomic(struct page *page);
57 extern void __kunmap_atomic(void *kvaddr);
58 extern void *kmap_atomic_pfn(unsigned long pfn);
59 extern struct page *kmap_atomic_to_page(void *ptr);
60 #endif
61
62 #endif