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 34static inline void flush_cache_kmaps(void) 35{ 36 flush_cache_all(); 37} 38 39/* declarations for highmem.c */ 40extern unsigned long highstart_pfn, highend_pfn; 41 42extern pte_t *pkmap_page_table; 43 44extern void *kmap_high(struct page *page); 45extern void kunmap_high(struct page *page); 46 47extern 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 54extern void *kmap(struct page *page); 55extern void kunmap(struct page *page); 56extern void *kmap_atomic(struct page *page); 57extern void __kunmap_atomic(void *kvaddr); 58extern void *kmap_atomic_pfn(unsigned long pfn); 59extern struct page *kmap_atomic_to_page(void *ptr); 60#endif 61 62#endif 63