| 
					
				 | 
			
			
				@@ -172,3 +172,59 @@ static inline void __iomem *__typesafe_io(unsigned long addr) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 #define PCI_IO_VIRT_BASE	0xfee00000 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 extern int pci_ioremap_io(unsigned int offset, phys_addr_t phys_addr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Now, pick up the machine-defined IO definitions 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#ifdef CONFIG_NEED_MACH_IO_H 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include <mach/io.h> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#elif defined(CONFIG_PCI) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IO_SPACE_LIMIT	((resource_size_t)0xfffff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define __io(a)		__typesafe_io(PCI_IO_VIRT_BASE + ((a) & IO_SPACE_LIMIT)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define __io(a)		__typesafe_io((a) & IO_SPACE_LIMIT) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * This is the limit of PC card/PCI/ISA IO space, which is by default 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 64K if we have PC card, PCI or ISA support.  Otherwise, default to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * zero to prevent ISA/PCI drivers claiming IO space (and potentially 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * oopsing.) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Only set this larger if you really need inb() et.al. to operate over 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * a larger address space.  Note that SOC_COMMON ioremaps each sockets 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * IO space area, and so inb() et.al. must be defined to operate as per 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * readb() et.al. on such platforms. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#ifndef IO_SPACE_LIMIT 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#if defined(CONFIG_PCMCIA_SOC_COMMON) || defined(CONFIG_PCMCIA_SOC_COMMON_MODULE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IO_SPACE_LIMIT ((resource_size_t)0xffffffff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#elif defined(CONFIG_PCI) || defined(CONFIG_ISA) || defined(CONFIG_PCCARD) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IO_SPACE_LIMIT ((resource_size_t)0xffff) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define IO_SPACE_LIMIT ((resource_size_t)0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *  IO port access primitives 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *  ------------------------- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * The ARM doesn't have special IO access instructions; all IO is memory 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * mapped.  Note that these are defined to perform little endian accesses 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * only.  Their primary purpose is to access PCI and ISA peripherals. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Note that for a big endian machine, this implies that the following 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * big endian mode connectivity is in place, as described by numerous 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * ARM documents: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *    PCI:  D0-D7   D8-D15 D16-D23 D24-D31 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ *    ARM: D24-D31 D16-D23  D8-D15  D0-D7 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * The machine specific io.h include defines __io to translate an "IO" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * address to a memory address. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * Note that we prevent GCC re-ordering or caching values in expressions 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * by introducing sequence points into the in*() definitions.  Note that 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * __raw_* do not guarantee this behaviour. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ * 
			 |