io_trapped.h (1474B)
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 11struct 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 21int register_trapped_io(struct trapped_io *tiop); 22int handle_trapped_io(struct pt_regs *regs, unsigned long address); 23 24void __iomem *match_trapped_io_handler(struct list_head *list, 25 unsigned long offset, 26 unsigned long size); 27 28#ifdef CONFIG_HAS_IOMEM 29extern struct list_head trapped_mem; 30 31static 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 41extern struct list_head trapped_io; 42 43static 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 */