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
|