new asm-mips/io.h

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



A last cleanups for io.h looks bit wrong.  Please apply.

--- linux-sgi-cvs/include/asm-mips/io.h	Mon Nov 26 10:49:40 2001
+++ linux.new/include/asm-mips/io.h	Mon Nov 26 12:06:31 2001
@@ -283,7 +283,7 @@
 {
 	while(count--) {
 		outb(*(__u8 *)addr, port);
-		addr++; port++;
+		addr++;
 	}
 }
 
@@ -291,7 +291,7 @@
 {
 	while(count--) {
 		*(__u8 *)addr = inb(port);
-		addr++; port++;
+		addr++;
 	}
 }
 
@@ -299,7 +299,7 @@
 {
 	while(count--) {
 		outw(*(__u16 *)addr, port);
-		addr+=2; port+=2;
+		addr+=2;
 	}
 }
 
@@ -307,7 +307,7 @@
 {
 	while(count--) {
 		*(__u16 *)addr = inw(port);
-		addr+=2; port+=2;
+		addr+=2;
 	}
 }
 
@@ -315,7 +315,7 @@
 {
 	while(count--) {
 		outl(*(__u32 *)addr, port);
-		addr+=4; port+=4;
+		addr+=4;
 	}
 }
 
@@ -323,7 +323,7 @@
 {
 	while(count--) {
 		*(__u32 *)addr = inw(port);
-		addr+=4; port+=4;
+		addr+=4;
 	}
 }
 
---

By the way, I have some boards which require special I/O routines.
Some of these boards need byteswap on PCI I/O region but noswap on ISA
region.  And some of these boards do not require byteswap but need
swap the address ('port' values).  I added following codes to support
these boards.  Is it worth to apply?

--- linux-sgi-cvs/include/asm-mips/io.h	Mon Nov 26 10:49:40 2001
+++ linux.new/include/asm-mips/io.h	Mon Nov 26 12:06:31 2001
@@ -352,5 +352,88 @@
 #define dma_cache_wback_inv(start,size)	_dma_cache_wback_inv(start,size)
 #define dma_cache_wback(start,size)	_dma_cache_wback(start,size)
 #define dma_cache_inv(start,size)	_dma_cache_inv(start,size)
+
+#ifdef CONFIG_HAVE_BOARD_IO_FUNCS
+/* redefine all I/O access routines */
+struct mips_io_funcs {
+	void (*writeb)(unsigned char b, volatile unsigned char *addr);
+	void (*writew)(unsigned short b, volatile unsigned short *addr);
+	void (*writel)(unsigned int b, volatile unsigned int *addr);
+	unsigned char (*readb)(volatile unsigned char *addr);
+	unsigned short (*readw)(volatile unsigned short *addr);
+	unsigned int (*readl)(volatile unsigned int *addr);
+	void (*outb)(unsigned int value, unsigned long port);
+	void (*outw)(unsigned int value, unsigned long port);
+	void (*outl)(unsigned int value, unsigned long port);
+	unsigned char (*inb)(unsigned long port);
+	unsigned short (*inw)(unsigned long port);
+	unsigned int (*inl)(unsigned long port);
+	void (*outsb)(unsigned long port, const void *addr, unsigned int count);
+	void (*outsw)(unsigned long port, const void *addr, unsigned int count);
+	void (*outsl)(unsigned long port, const void *addr, unsigned int count);
+	void (*insb)(unsigned long port, void *addr, unsigned int count);
+	void (*insw)(unsigned long port, void *addr, unsigned int count);
+	void (*insl)(unsigned long port, void *addr, unsigned int count);
+	void (*memset_io)(volatile void *addr, int c, int len);
+	void (*memcpy_fromio)(void *to, volatile void *from, int len);
+	void (*memcpy_toio)(volatile void *to, const void *from, int len);
+};
+/* board dependent part should declare this variable. */
+extern struct mips_io_funcs mips_io_funcs;
+#undef writeb
+#undef writew
+#undef writel
+#undef readb
+#undef readw
+#undef readl
+#undef outb
+#undef inb
+#undef outb_p
+#undef inb_p
+#undef outw
+#undef inw
+#undef outw_p
+#undef inw_p
+#undef outl
+#undef inl
+#undef outl_p
+#undef inl_p
+#undef outsb
+#undef insb
+#undef outsw
+#undef insw
+#undef outsl
+#undef insl
+#undef memset_io
+#undef memcpy_fromio
+#undef memcpy_toio
+#define writeb(b,addr) (*mips_io_funcs.writeb)(b, (volatile unsigned char *)(addr))
+#define writew(b,addr) (*mips_io_funcs.writew)(b, (volatile unsigned short *)(addr))
+#define writel(b,addr) (*mips_io_funcs.writel)(b, (volatile unsigned int *)(addr))
+#define readb(addr) (*mips_io_funcs.readb)((volatile unsigned char *)(addr))
+#define readw(addr) (*mips_io_funcs.readw)((volatile unsigned short *)(addr))
+#define readl(addr) (*mips_io_funcs.readl)((volatile unsigned int *)(addr))
+#define outb(val,port)	(*mips_io_funcs.outb)((val),(port))
+#define inb(port)	(*mips_io_funcs.inb)(port)
+#define outb_p(val,port)	(*mips_io_funcs.outb)((val),(port))
+#define inb_p(port)	(*mips_io_funcs.inb)(port)
+#define outw(val,port)	(*mips_io_funcs.outw)((val),(port))
+#define inw(port)	(*mips_io_funcs.inw)(port)
+#define outw_p(val,port)	(*mips_io_funcs.outw)((val),(port))
+#define inw_p(port)	(*mips_io_funcs.inw)(port)
+#define outl(val,port)	(*mips_io_funcs.outl)((val),(port))
+#define inl(port)	(*mips_io_funcs.inl)(port)
+#define outl_p(val,port)	(*mips_io_funcs.outl)((val),(port))
+#define inl_p(port)	(*mips_io_funcs.inl)(port)
+#define outsb(port,addr,count)	(*mips_io_funcs.outsb)((port),(addr),(count))
+#define insb(port,addr,count)	(*mips_io_funcs.insb)((port),(addr),(count))
+#define outsw(port,addr,count)	(*mips_io_funcs.outsw)((port),(addr),(count))
+#define insw(port,addr,count)	(*mips_io_funcs.insw)((port),(addr),(count))
+#define outsl(port,addr,count)	(*mips_io_funcs.outsl)((port),(addr),(count))
+#define insl(port,addr,count)	(*mips_io_funcs.insl)((port),(addr),(count))
+#define memset_io(a,b,c)	(*mips_io_funcs.memset_io)((volatile void *)(a),(b),(c))
+#define memcpy_fromio(a,b,c)	(*mips_io_funcs.memcpy_fromio)((a),(volatile void *)(b),(c))
+#define memcpy_toio(a,b,c)	(*mips_io_funcs.memcpy_toio)((volatile void *)(a),(b),(c))
+#endif /* CONFIG_HAVE_BOARD_IO_FUNCS */
 
 #endif /* _ASM_IO_H */
---
Atsushi Nemoto

[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux