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