xref: /openbmc/linux/arch/arc/include/asm/highmem.h (revision 9cfc5c90)
1 /*
2  * Copyright (C) 2015 Synopsys, Inc. (www.synopsys.com)
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  *
8  */
9 
10 #ifndef _ASM_HIGHMEM_H
11 #define _ASM_HIGHMEM_H
12 
13 #ifdef CONFIG_HIGHMEM
14 
15 #include <uapi/asm/page.h>
16 #include <asm/kmap_types.h>
17 
18 /* start after vmalloc area */
19 #define FIXMAP_BASE		(PAGE_OFFSET - FIXMAP_SIZE - PKMAP_SIZE)
20 #define FIXMAP_SIZE		PGDIR_SIZE	/* only 1 PGD worth */
21 #define KM_TYPE_NR		((FIXMAP_SIZE >> PAGE_SHIFT)/NR_CPUS)
22 #define FIXMAP_ADDR(nr)		(FIXMAP_BASE + ((nr) << PAGE_SHIFT))
23 
24 /* start after fixmap area */
25 #define PKMAP_BASE		(FIXMAP_BASE + FIXMAP_SIZE)
26 #define PKMAP_SIZE		PGDIR_SIZE
27 #define LAST_PKMAP		(PKMAP_SIZE >> PAGE_SHIFT)
28 #define LAST_PKMAP_MASK		(LAST_PKMAP - 1)
29 #define PKMAP_ADDR(nr)		(PKMAP_BASE + ((nr) << PAGE_SHIFT))
30 #define PKMAP_NR(virt)		(((virt) - PKMAP_BASE) >> PAGE_SHIFT)
31 
32 #define kmap_prot		PAGE_KERNEL
33 
34 
35 #include <asm/cacheflush.h>
36 
37 extern void *kmap(struct page *page);
38 extern void *kmap_high(struct page *page);
39 extern void *kmap_atomic(struct page *page);
40 extern void __kunmap_atomic(void *kvaddr);
41 extern void kunmap_high(struct page *page);
42 
43 extern void kmap_init(void);
44 
45 static inline void flush_cache_kmaps(void)
46 {
47 	flush_cache_all();
48 }
49 
50 static inline void kunmap(struct page *page)
51 {
52 	BUG_ON(in_interrupt());
53 	if (!PageHighMem(page))
54 		return;
55 	kunmap_high(page);
56 }
57 
58 
59 #endif
60 
61 #endif
62