xref: /openbmc/linux/arch/xtensa/include/asm/highmem.h (revision 65559100)
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