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 flush_cache_kmaps(void)34static 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 #endif 60 61 #endif 62