1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _LINUX_IOREMAP_H
3 #define _LINUX_IOREMAP_H
4 
5 #include <linux/kasan.h>
6 #include <asm/pgtable.h>
7 #include <asm/vmalloc.h>
8 
9 #if defined(CONFIG_HAS_IOMEM) || defined(CONFIG_GENERIC_IOREMAP)
10 /*
11  * Ioremap often, but not always uses the generic vmalloc area. E.g on
12  * Power ARCH, it could have different ioremap space.
13  */
14 #ifndef IOREMAP_START
15 #define IOREMAP_START   VMALLOC_START
16 #define IOREMAP_END     VMALLOC_END
17 #endif
is_ioremap_addr(const void * x)18 static inline bool is_ioremap_addr(const void *x)
19 {
20 	unsigned long addr = (unsigned long)kasan_reset_tag(x);
21 
22 	return addr >= IOREMAP_START && addr < IOREMAP_END;
23 }
24 #else
is_ioremap_addr(const void * x)25 static inline bool is_ioremap_addr(const void *x)
26 {
27 	return false;
28 }
29 #endif
30 
31 #endif /* _LINUX_IOREMAP_H */
32