| From c24bf9b4cc6a0f330ea355d73bfdf1dae7e63a05 Mon Sep 17 00:00:00 2001 |
| From: Corey Minyard <cminyard@mvista.com> |
| Date: Tue, 18 Dec 2012 14:21:19 -0800 |
| Subject: CRIS: fix I/O macros |
| |
| From: Corey Minyard <cminyard@mvista.com> |
| |
| commit c24bf9b4cc6a0f330ea355d73bfdf1dae7e63a05 upstream. |
| |
| The inb/outb macros for CRIS are broken from a number of points of view, |
| missing () around parameters and they have an unprotected if statement |
| in them. This was breaking the compile of IPMI on CRIS and thus I was |
| being annoyed by build regressions, so I fixed them. |
| |
| Plus I don't think they would have worked at all, since the data values |
| were missing "&" and the outsl had a "3" instead of a "4" for the size. |
| From what I can tell, this stuff is not used at all, so this can't be |
| any more broken than it was before, anyway. |
| |
| Signed-off-by: Corey Minyard <cminyard@mvista.com> |
| Cc: Jesper Nilsson <jesper.nilsson@axis.com> |
| Cc: Mikael Starvik <starvik@axis.com> |
| Acked-by: Geert Uytterhoeven <geert@linux-m68k.org> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/cris/include/asm/io.h | 39 +++++++++++++++++++++++++++++++++------ |
| 1 file changed, 33 insertions(+), 6 deletions(-) |
| |
| --- a/arch/cris/include/asm/io.h |
| +++ b/arch/cris/include/asm/io.h |
| @@ -133,12 +133,39 @@ static inline void writel(unsigned int b |
| #define insb(port,addr,count) (cris_iops ? cris_iops->read_io(port,addr,1,count) : 0) |
| #define insw(port,addr,count) (cris_iops ? cris_iops->read_io(port,addr,2,count) : 0) |
| #define insl(port,addr,count) (cris_iops ? cris_iops->read_io(port,addr,4,count) : 0) |
| -#define outb(data,port) if (cris_iops) cris_iops->write_io(port,(void*)(unsigned)data,1,1) |
| -#define outw(data,port) if (cris_iops) cris_iops->write_io(port,(void*)(unsigned)data,2,1) |
| -#define outl(data,port) if (cris_iops) cris_iops->write_io(port,(void*)(unsigned)data,4,1) |
| -#define outsb(port,addr,count) if(cris_iops) cris_iops->write_io(port,(void*)addr,1,count) |
| -#define outsw(port,addr,count) if(cris_iops) cris_iops->write_io(port,(void*)addr,2,count) |
| -#define outsl(port,addr,count) if(cris_iops) cris_iops->write_io(port,(void*)addr,3,count) |
| +static inline void outb(unsigned char data, unsigned int port) |
| +{ |
| + if (cris_iops) |
| + cris_iops->write_io(port, (void *) &data, 1, 1); |
| +} |
| +static inline void outw(unsigned short data, unsigned int port) |
| +{ |
| + if (cris_iops) |
| + cris_iops->write_io(port, (void *) &data, 2, 1); |
| +} |
| +static inline void outl(unsigned int data, unsigned int port) |
| +{ |
| + if (cris_iops) |
| + cris_iops->write_io(port, (void *) &data, 4, 1); |
| +} |
| +static inline void outsb(unsigned int port, const void *addr, |
| + unsigned long count) |
| +{ |
| + if (cris_iops) |
| + cris_iops->write_io(port, (void *)addr, 1, count); |
| +} |
| +static inline void outsw(unsigned int port, const void *addr, |
| + unsigned long count) |
| +{ |
| + if (cris_iops) |
| + cris_iops->write_io(port, (void *)addr, 2, count); |
| +} |
| +static inline void outsl(unsigned int port, const void *addr, |
| + unsigned long count) |
| +{ |
| + if (cris_iops) |
| + cris_iops->write_io(port, (void *)addr, 4, count); |
| +} |
| |
| /* |
| * Convert a physical pointer to a virtual kernel pointer for /dev/mem |