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