1d73cd428SNicolas Pitre #ifndef _ASM_HIGHMEM_H 2d73cd428SNicolas Pitre #define _ASM_HIGHMEM_H 3d73cd428SNicolas Pitre 4d73cd428SNicolas Pitre #include <asm/kmap_types.h> 5d73cd428SNicolas Pitre 6d73cd428SNicolas Pitre #define PKMAP_BASE (PAGE_OFFSET - PMD_SIZE) 7d73cd428SNicolas Pitre #define LAST_PKMAP PTRS_PER_PTE 8d73cd428SNicolas Pitre #define LAST_PKMAP_MASK (LAST_PKMAP - 1) 9d73cd428SNicolas Pitre #define PKMAP_NR(virt) (((virt) - PKMAP_BASE) >> PAGE_SHIFT) 10d73cd428SNicolas Pitre #define PKMAP_ADDR(nr) (PKMAP_BASE + ((nr) << PAGE_SHIFT)) 11d73cd428SNicolas Pitre 12d73cd428SNicolas Pitre #define kmap_prot PAGE_KERNEL 13d73cd428SNicolas Pitre 147e5a69e8SNicolas Pitre #define flush_cache_kmaps() \ 157e5a69e8SNicolas Pitre do { \ 167e5a69e8SNicolas Pitre if (cache_is_vivt()) \ 177e5a69e8SNicolas Pitre flush_cache_all(); \ 187e5a69e8SNicolas Pitre } while (0) 19d73cd428SNicolas Pitre 20d73cd428SNicolas Pitre extern pte_t *pkmap_page_table; 21d73cd428SNicolas Pitre 2243377453SNicolas Pitre #define ARCH_NEEDS_KMAP_HIGH_GET 2343377453SNicolas Pitre 24d73cd428SNicolas Pitre extern void *kmap_high(struct page *page); 2543377453SNicolas Pitre extern void *kmap_high_get(struct page *page); 26d73cd428SNicolas Pitre extern void kunmap_high(struct page *page); 27d73cd428SNicolas Pitre 287e5a69e8SNicolas Pitre extern void *kmap_high_l1_vipt(struct page *page, pte_t *saved_pte); 297e5a69e8SNicolas Pitre extern void kunmap_high_l1_vipt(struct page *page, pte_t saved_pte); 307e5a69e8SNicolas Pitre 317e5a69e8SNicolas Pitre /* 327e5a69e8SNicolas Pitre * The following functions are already defined by <linux/highmem.h> 337e5a69e8SNicolas Pitre * when CONFIG_HIGHMEM is not set. 347e5a69e8SNicolas Pitre */ 357e5a69e8SNicolas Pitre #ifdef CONFIG_HIGHMEM 36d73cd428SNicolas Pitre extern void *kmap(struct page *page); 37d73cd428SNicolas Pitre extern void kunmap(struct page *page); 38d73cd428SNicolas Pitre extern void *kmap_atomic(struct page *page, enum km_type type); 39d73cd428SNicolas Pitre extern void kunmap_atomic(void *kvaddr, enum km_type type); 40d73cd428SNicolas Pitre extern void *kmap_atomic_pfn(unsigned long pfn, enum km_type type); 41d73cd428SNicolas Pitre extern struct page *kmap_atomic_to_page(const void *ptr); 427e5a69e8SNicolas Pitre #endif 43d73cd428SNicolas Pitre 44d73cd428SNicolas Pitre #endif 45