1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef __ASM_SH_IO_TRAPPED_H 3 #define __ASM_SH_IO_TRAPPED_H 4 5 #include <linux/list.h> 6 #include <linux/ioport.h> 7 #include <asm/page.h> 8 9 #define IO_TRAPPED_MAGIC 0xfeedbeef 10 11 struct trapped_io { 12 unsigned int magic; 13 struct resource *resource; 14 unsigned int num_resources; 15 unsigned int minimum_bus_width; 16 struct list_head list; 17 void __iomem *virt_base; 18 } __aligned(PAGE_SIZE); 19 20 #ifdef CONFIG_IO_TRAPPED 21 int register_trapped_io(struct trapped_io *tiop); 22 int handle_trapped_io(struct pt_regs *regs, unsigned long address); 23 24 void __iomem *match_trapped_io_handler(struct list_head *list, 25 unsigned long offset, 26 unsigned long size); 27 28 #ifdef CONFIG_HAS_IOMEM 29 extern struct list_head trapped_mem; 30 31 static inline void __iomem * 32 __ioremap_trapped(unsigned long offset, unsigned long size) 33 { 34 return match_trapped_io_handler(&trapped_mem, offset, size); 35 } 36 #else 37 #define __ioremap_trapped(offset, size) NULL 38 #endif 39 40 #ifdef CONFIG_HAS_IOPORT_MAP 41 extern struct list_head trapped_io; 42 43 static inline void __iomem * 44 __ioport_map_trapped(unsigned long offset, unsigned long size) 45 { 46 return match_trapped_io_handler(&trapped_io, offset, size); 47 } 48 #else 49 #define __ioport_map_trapped(offset, size) NULL 50 #endif 51 52 #else 53 #define register_trapped_io(tiop) (-1) 54 #define handle_trapped_io(tiop, address) 0 55 #define __ioremap_trapped(offset, size) NULL 56 #define __ioport_map_trapped(offset, size) NULL 57 #endif 58 59 #endif /* __ASM_SH_IO_TRAPPED_H */ 60