Commit | Line | Data |
---|---|---|
bbc17704 JH |
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); | |
bbc17704 JH |
59 | #endif |
60 | ||
61 | #endif |