1367b8112SChris Zankel /* 2367b8112SChris Zankel * include/asm-xtensa/highmem.h 3367b8112SChris Zankel * 4367b8112SChris Zankel * This file is subject to the terms and conditions of the GNU General 5367b8112SChris Zankel * Public License. See the file "COPYING" in the main directory of 6367b8112SChris Zankel * this archive for more details. 7367b8112SChris Zankel * 8367b8112SChris Zankel * Copyright (C) 2003 - 2005 Tensilica Inc. 965559100SMax Filippov * Copyright (C) 2014 Cadence Design Systems Inc. 10367b8112SChris Zankel */ 11367b8112SChris Zankel 12367b8112SChris Zankel #ifndef _XTENSA_HIGHMEM_H 13367b8112SChris Zankel #define _XTENSA_HIGHMEM_H 14367b8112SChris Zankel 1565559100SMax Filippov #include <asm/cacheflush.h> 1665559100SMax Filippov #include <asm/fixmap.h> 1765559100SMax Filippov #include <asm/kmap_types.h> 1865559100SMax Filippov #include <asm/pgtable.h> 1965559100SMax Filippov 2065559100SMax Filippov #define PKMAP_BASE (FIXADDR_START - PMD_SIZE) 2165559100SMax Filippov #define LAST_PKMAP PTRS_PER_PTE 2265559100SMax Filippov #define LAST_PKMAP_MASK (LAST_PKMAP - 1) 2365559100SMax Filippov #define PKMAP_NR(virt) (((virt) - PKMAP_BASE) >> PAGE_SHIFT) 2465559100SMax Filippov #define PKMAP_ADDR(nr) (PKMAP_BASE + ((nr) << PAGE_SHIFT)) 2565559100SMax Filippov 2665559100SMax Filippov #define kmap_prot PAGE_KERNEL 2765559100SMax Filippov 2865559100SMax Filippov extern pte_t *pkmap_page_table; 2965559100SMax Filippov 3065559100SMax Filippov void *kmap_high(struct page *page); 3165559100SMax Filippov void kunmap_high(struct page *page); 3265559100SMax Filippov 3365559100SMax Filippov static inline void *kmap(struct page *page) 3465559100SMax Filippov { 3565559100SMax Filippov BUG_ON(in_interrupt()); 3665559100SMax Filippov if (!PageHighMem(page)) 3765559100SMax Filippov return page_address(page); 3865559100SMax Filippov return kmap_high(page); 3965559100SMax Filippov } 4065559100SMax Filippov 4165559100SMax Filippov static inline void kunmap(struct page *page) 4265559100SMax Filippov { 4365559100SMax Filippov BUG_ON(in_interrupt()); 4465559100SMax Filippov if (!PageHighMem(page)) 4565559100SMax Filippov return; 4665559100SMax Filippov kunmap_high(page); 4765559100SMax Filippov } 4865559100SMax Filippov 4965559100SMax Filippov static inline void flush_cache_kmaps(void) 5065559100SMax Filippov { 5165559100SMax Filippov flush_cache_all(); 5265559100SMax Filippov } 5365559100SMax Filippov 5465559100SMax Filippov void *kmap_atomic(struct page *page); 5565559100SMax Filippov void __kunmap_atomic(void *kvaddr); 5665559100SMax Filippov 5765559100SMax Filippov void kmap_init(void); 58367b8112SChris Zankel 59367b8112SChris Zankel #endif 60