Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
e7cc9a73 MD |
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 | ||
ce816fa8 | 40 | #ifdef CONFIG_HAS_IOPORT_MAP |
e7cc9a73 MD |
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 */ |