mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 00:34:20 +08:00
asm-generic: io: don't perform swab during {in,out} string functions
The {in,out}s{b,w,l} functions are designed to operate on a stream of bytes and therefore should not perform any byte-swapping, regardless of the CPU byte order. This patch fixes the generic IO header so that {in,out}s{b,w,l} call the __raw_{read,write} functions directly rather than going via the endian-correcting accessors. Signed-off-by: Will Deacon <will.deacon@arm.com> Cc: Mike Frysinger <vapier@gentoo.org> Acked-by: Arnd Bergmann <arnd@arndb.de> Acked-by: Ben Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
da01ee3c8e
commit
41739ee355
@ -154,7 +154,7 @@ static inline void insb(unsigned long addr, void *buffer, int count)
|
||||
if (count) {
|
||||
u8 *buf = buffer;
|
||||
do {
|
||||
u8 x = inb(addr);
|
||||
u8 x = __raw_readb(addr + PCI_IOBASE);
|
||||
*buf++ = x;
|
||||
} while (--count);
|
||||
}
|
||||
@ -167,7 +167,7 @@ static inline void insw(unsigned long addr, void *buffer, int count)
|
||||
if (count) {
|
||||
u16 *buf = buffer;
|
||||
do {
|
||||
u16 x = inw(addr);
|
||||
u16 x = __raw_readw(addr + PCI_IOBASE);
|
||||
*buf++ = x;
|
||||
} while (--count);
|
||||
}
|
||||
@ -180,7 +180,7 @@ static inline void insl(unsigned long addr, void *buffer, int count)
|
||||
if (count) {
|
||||
u32 *buf = buffer;
|
||||
do {
|
||||
u32 x = inl(addr);
|
||||
u32 x = __raw_readl(addr + PCI_IOBASE);
|
||||
*buf++ = x;
|
||||
} while (--count);
|
||||
}
|
||||
@ -193,7 +193,7 @@ static inline void outsb(unsigned long addr, const void *buffer, int count)
|
||||
if (count) {
|
||||
const u8 *buf = buffer;
|
||||
do {
|
||||
outb(*buf++, addr);
|
||||
__raw_writeb(*buf++, addr + PCI_IOBASE);
|
||||
} while (--count);
|
||||
}
|
||||
}
|
||||
@ -205,7 +205,7 @@ static inline void outsw(unsigned long addr, const void *buffer, int count)
|
||||
if (count) {
|
||||
const u16 *buf = buffer;
|
||||
do {
|
||||
outw(*buf++, addr);
|
||||
__raw_writew(*buf++, addr + PCI_IOBASE);
|
||||
} while (--count);
|
||||
}
|
||||
}
|
||||
@ -217,7 +217,7 @@ static inline void outsl(unsigned long addr, const void *buffer, int count)
|
||||
if (count) {
|
||||
const u32 *buf = buffer;
|
||||
do {
|
||||
outl(*buf++, addr);
|
||||
__raw_writel(*buf++, addr + PCI_IOBASE);
|
||||
} while (--count);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user