aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Rothwell <sfr@canb.auug.org.au>2006-09-21 04:00:00 -0400
committerPaul Mackerras <paulus@samba.org>2006-09-22 01:19:58 -0400
commitcaf81329c39b5c48f6cc0d78fa159b5a587e37f9 (patch)
tree7cf6afe7a14e2a9d1cc962895b61d8cb24e71793
parent7da8a2e5c1fd2ee513fdeac8d13c4f3623838fd0 (diff)
[POWERPC] Merge iSeries i/o operations with the rest
This patch changes the io operations so that they are out of line if CONFIG_PPC_ISERIES is set and includes a firmware feature check in that case. Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au> Signed-off-by: Paul Mackerras <paulus@samba.org>
-rw-r--r--arch/powerpc/kernel/io.c14
-rw-r--r--arch/powerpc/platforms/iseries/pci.c280
-rw-r--r--include/asm-powerpc/io.h148
-rw-r--r--include/asm-powerpc/iseries/iseries_io.h60
4 files changed, 319 insertions, 183 deletions
diff --git a/arch/powerpc/kernel/io.c b/arch/powerpc/kernel/io.c
index 80a3209acef4..e98180686b35 100644
--- a/arch/powerpc/kernel/io.c
+++ b/arch/powerpc/kernel/io.c
@@ -22,12 +22,16 @@
22#include <linux/module.h> 22#include <linux/module.h>
23 23
24#include <asm/io.h> 24#include <asm/io.h>
25#include <asm/firmware.h>
26#include <asm/bug.h>
25 27
26void _insb(volatile u8 __iomem *port, void *buf, long count) 28void _insb(volatile u8 __iomem *port, void *buf, long count)
27{ 29{
28 u8 *tbuf = buf; 30 u8 *tbuf = buf;
29 u8 tmp; 31 u8 tmp;
30 32
33 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES));
34
31 if (unlikely(count <= 0)) 35 if (unlikely(count <= 0))
32 return; 36 return;
33 asm volatile("sync"); 37 asm volatile("sync");
@@ -44,6 +48,8 @@ void _outsb(volatile u8 __iomem *port, const void *buf, long count)
44{ 48{
45 const u8 *tbuf = buf; 49 const u8 *tbuf = buf;
46 50
51 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES));
52
47 if (unlikely(count <= 0)) 53 if (unlikely(count <= 0))
48 return; 54 return;
49 asm volatile("sync"); 55 asm volatile("sync");
@@ -59,6 +65,8 @@ void _insw_ns(volatile u16 __iomem *port, void *buf, long count)
59 u16 *tbuf = buf; 65 u16 *tbuf = buf;
60 u16 tmp; 66 u16 tmp;
61 67
68 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES));
69
62 if (unlikely(count <= 0)) 70 if (unlikely(count <= 0))
63 return; 71 return;
64 asm volatile("sync"); 72 asm volatile("sync");
@@ -75,6 +83,8 @@ void _outsw_ns(volatile u16 __iomem *port, const void *buf, long count)
75{ 83{
76 const u16 *tbuf = buf; 84 const u16 *tbuf = buf;
77 85
86 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES));
87
78 if (unlikely(count <= 0)) 88 if (unlikely(count <= 0))
79 return; 89 return;
80 asm volatile("sync"); 90 asm volatile("sync");
@@ -90,6 +100,8 @@ void _insl_ns(volatile u32 __iomem *port, void *buf, long count)
90 u32 *tbuf = buf; 100 u32 *tbuf = buf;
91 u32 tmp; 101 u32 tmp;
92 102
103 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES));
104
93 if (unlikely(count <= 0)) 105 if (unlikely(count <= 0))
94 return; 106 return;
95 asm volatile("sync"); 107 asm volatile("sync");
@@ -106,6 +118,8 @@ void _outsl_ns(volatile u32 __iomem *port, const void *buf, long count)
106{ 118{
107 const u32 *tbuf = buf; 119 const u32 *tbuf = buf;
108 120
121 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES));
122
109 if (unlikely(count <= 0)) 123 if (unlikely(count <= 0))
110 return; 124 return;
111 asm volatile("sync"); 125 asm volatile("sync");
diff --git a/arch/powerpc/platforms/iseries/pci.c b/arch/powerpc/platforms/iseries/pci.c
index f4d427a7bb2d..3eb12065df23 100644
--- a/arch/powerpc/platforms/iseries/pci.c
+++ b/arch/powerpc/platforms/iseries/pci.c
@@ -34,6 +34,7 @@
34#include <asm/pci-bridge.h> 34#include <asm/pci-bridge.h>
35#include <asm/iommu.h> 35#include <asm/iommu.h>
36#include <asm/abs_addr.h> 36#include <asm/abs_addr.h>
37#include <asm/firmware.h>
37 38
38#include <asm/iseries/hv_call_xm.h> 39#include <asm/iseries/hv_call_xm.h>
39#include <asm/iseries/mf.h> 40#include <asm/iseries/mf.h>
@@ -270,46 +271,6 @@ void pcibios_fixup_resources(struct pci_dev *pdev)
270} 271}
271 272
272/* 273/*
273 * I/0 Memory copy MUST use mmio commands on iSeries
274 * To do; For performance, include the hv call directly
275 */
276void iSeries_memset_io(volatile void __iomem *dest, char c, size_t Count)
277{
278 u8 ByteValue = c;
279 long NumberOfBytes = Count;
280
281 while (NumberOfBytes > 0) {
282 iSeries_Write_Byte(ByteValue, dest++);
283 -- NumberOfBytes;
284 }
285}
286EXPORT_SYMBOL(iSeries_memset_io);
287
288void iSeries_memcpy_toio(volatile void __iomem *dest, void *source, size_t count)
289{
290 char *src = source;
291 long NumberOfBytes = count;
292
293 while (NumberOfBytes > 0) {
294 iSeries_Write_Byte(*src++, dest++);
295 -- NumberOfBytes;
296 }
297}
298EXPORT_SYMBOL(iSeries_memcpy_toio);
299
300void iSeries_memcpy_fromio(void *dest, const volatile void __iomem *src, size_t count)
301{
302 char *dst = dest;
303 long NumberOfBytes = count;
304
305 while (NumberOfBytes > 0) {
306 *dst++ = iSeries_Read_Byte(src++);
307 -- NumberOfBytes;
308 }
309}
310EXPORT_SYMBOL(iSeries_memcpy_fromio);
311
312/*
313 * Look down the chain to find the matching Device Device 274 * Look down the chain to find the matching Device Device
314 */ 275 */
315static struct device_node *find_Device_Node(int bus, int devfn) 276static struct device_node *find_Device_Node(int bus, int devfn)
@@ -491,7 +452,7 @@ static inline struct device_node *xlate_iomm_address(
491 * iSeries_Read_Word = Read Word (16 bit) 452 * iSeries_Read_Word = Read Word (16 bit)
492 * iSeries_Read_Long = Read Long (32 bit) 453 * iSeries_Read_Long = Read Long (32 bit)
493 */ 454 */
494u8 iSeries_Read_Byte(const volatile void __iomem *IoAddress) 455static u8 iSeries_Read_Byte(const volatile void __iomem *IoAddress)
495{ 456{
496 u64 BarOffset; 457 u64 BarOffset;
497 u64 dsa; 458 u64 dsa;
@@ -518,9 +479,8 @@ u8 iSeries_Read_Byte(const volatile void __iomem *IoAddress)
518 479
519 return (u8)ret.value; 480 return (u8)ret.value;
520} 481}
521EXPORT_SYMBOL(iSeries_Read_Byte);
522 482
523u16 iSeries_Read_Word(const volatile void __iomem *IoAddress) 483static u16 iSeries_Read_Word(const volatile void __iomem *IoAddress)
524{ 484{
525 u64 BarOffset; 485 u64 BarOffset;
526 u64 dsa; 486 u64 dsa;
@@ -548,9 +508,8 @@ u16 iSeries_Read_Word(const volatile void __iomem *IoAddress)
548 508
549 return swab16((u16)ret.value); 509 return swab16((u16)ret.value);
550} 510}
551EXPORT_SYMBOL(iSeries_Read_Word);
552 511
553u32 iSeries_Read_Long(const volatile void __iomem *IoAddress) 512static u32 iSeries_Read_Long(const volatile void __iomem *IoAddress)
554{ 513{
555 u64 BarOffset; 514 u64 BarOffset;
556 u64 dsa; 515 u64 dsa;
@@ -578,7 +537,6 @@ u32 iSeries_Read_Long(const volatile void __iomem *IoAddress)
578 537
579 return swab32((u32)ret.value); 538 return swab32((u32)ret.value);
580} 539}
581EXPORT_SYMBOL(iSeries_Read_Long);
582 540
583/* 541/*
584 * Write MM I/O Instructions for the iSeries 542 * Write MM I/O Instructions for the iSeries
@@ -587,7 +545,7 @@ EXPORT_SYMBOL(iSeries_Read_Long);
587 * iSeries_Write_Word = Write Word(16 bit) 545 * iSeries_Write_Word = Write Word(16 bit)
588 * iSeries_Write_Long = Write Long(32 bit) 546 * iSeries_Write_Long = Write Long(32 bit)
589 */ 547 */
590void iSeries_Write_Byte(u8 data, volatile void __iomem *IoAddress) 548static void iSeries_Write_Byte(u8 data, volatile void __iomem *IoAddress)
591{ 549{
592 u64 BarOffset; 550 u64 BarOffset;
593 u64 dsa; 551 u64 dsa;
@@ -612,9 +570,8 @@ void iSeries_Write_Byte(u8 data, volatile void __iomem *IoAddress)
612 rc = HvCall4(HvCallPciBarStore8, dsa, BarOffset, data, 0); 570 rc = HvCall4(HvCallPciBarStore8, dsa, BarOffset, data, 0);
613 } while (CheckReturnCode("WWB", DevNode, &retry, rc) != 0); 571 } while (CheckReturnCode("WWB", DevNode, &retry, rc) != 0);
614} 572}
615EXPORT_SYMBOL(iSeries_Write_Byte);
616 573
617void iSeries_Write_Word(u16 data, volatile void __iomem *IoAddress) 574static void iSeries_Write_Word(u16 data, volatile void __iomem *IoAddress)
618{ 575{
619 u64 BarOffset; 576 u64 BarOffset;
620 u64 dsa; 577 u64 dsa;
@@ -639,9 +596,8 @@ void iSeries_Write_Word(u16 data, volatile void __iomem *IoAddress)
639 rc = HvCall4(HvCallPciBarStore16, dsa, BarOffset, swab16(data), 0); 596 rc = HvCall4(HvCallPciBarStore16, dsa, BarOffset, swab16(data), 0);
640 } while (CheckReturnCode("WWW", DevNode, &retry, rc) != 0); 597 } while (CheckReturnCode("WWW", DevNode, &retry, rc) != 0);
641} 598}
642EXPORT_SYMBOL(iSeries_Write_Word);
643 599
644void iSeries_Write_Long(u32 data, volatile void __iomem *IoAddress) 600static void iSeries_Write_Long(u32 data, volatile void __iomem *IoAddress)
645{ 601{
646 u64 BarOffset; 602 u64 BarOffset;
647 u64 dsa; 603 u64 dsa;
@@ -666,4 +622,224 @@ void iSeries_Write_Long(u32 data, volatile void __iomem *IoAddress)
666 rc = HvCall4(HvCallPciBarStore32, dsa, BarOffset, swab32(data), 0); 622 rc = HvCall4(HvCallPciBarStore32, dsa, BarOffset, swab32(data), 0);
667 } while (CheckReturnCode("WWL", DevNode, &retry, rc) != 0); 623 } while (CheckReturnCode("WWL", DevNode, &retry, rc) != 0);
668} 624}
669EXPORT_SYMBOL(iSeries_Write_Long); 625
626extern unsigned char __raw_readb(const volatile void __iomem *addr)
627{
628 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES));
629
630 return *(volatile unsigned char __force *)addr;
631}
632EXPORT_SYMBOL(__raw_readb);
633
634extern unsigned short __raw_readw(const volatile void __iomem *addr)
635{
636 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES));
637
638 return *(volatile unsigned short __force *)addr;
639}
640EXPORT_SYMBOL(__raw_readw);
641
642extern unsigned int __raw_readl(const volatile void __iomem *addr)
643{
644 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES));
645
646 return *(volatile unsigned int __force *)addr;
647}
648EXPORT_SYMBOL(__raw_readl);
649
650extern unsigned long __raw_readq(const volatile void __iomem *addr)
651{
652 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES));
653
654 return *(volatile unsigned long __force *)addr;
655}
656EXPORT_SYMBOL(__raw_readq);
657
658extern void __raw_writeb(unsigned char v, volatile void __iomem *addr)
659{
660 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES));
661
662 *(volatile unsigned char __force *)addr = v;
663}
664EXPORT_SYMBOL(__raw_writeb);
665
666extern void __raw_writew(unsigned short v, volatile void __iomem *addr)
667{
668 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES));
669
670 *(volatile unsigned short __force *)addr = v;
671}
672EXPORT_SYMBOL(__raw_writew);
673
674extern void __raw_writel(unsigned int v, volatile void __iomem *addr)
675{
676 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES));
677
678 *(volatile unsigned int __force *)addr = v;
679}
680EXPORT_SYMBOL(__raw_writel);
681
682extern void __raw_writeq(unsigned long v, volatile void __iomem *addr)
683{
684 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES));
685
686 *(volatile unsigned long __force *)addr = v;
687}
688EXPORT_SYMBOL(__raw_writeq);
689
690int in_8(const volatile unsigned char __iomem *addr)
691{
692 if (firmware_has_feature(FW_FEATURE_ISERIES))
693 return iSeries_Read_Byte(addr);
694 return __in_8(addr);
695}
696EXPORT_SYMBOL(in_8);
697
698void out_8(volatile unsigned char __iomem *addr, int val)
699{
700 if (firmware_has_feature(FW_FEATURE_ISERIES))
701 iSeries_Write_Byte(val, addr);
702 else
703 __out_8(addr, val);
704}
705EXPORT_SYMBOL(out_8);
706
707int in_le16(const volatile unsigned short __iomem *addr)
708{
709 if (firmware_has_feature(FW_FEATURE_ISERIES))
710 return iSeries_Read_Word(addr);
711 return __in_le16(addr);
712}
713EXPORT_SYMBOL(in_le16);
714
715int in_be16(const volatile unsigned short __iomem *addr)
716{
717 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES));
718
719 return __in_be16(addr);
720}
721EXPORT_SYMBOL(in_be16);
722
723void out_le16(volatile unsigned short __iomem *addr, int val)
724{
725 if (firmware_has_feature(FW_FEATURE_ISERIES))
726 iSeries_Write_Word(val, addr);
727 else
728 __out_le16(addr, val);
729}
730EXPORT_SYMBOL(out_le16);
731
732void out_be16(volatile unsigned short __iomem *addr, int val)
733{
734 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES));
735
736 __out_be16(addr, val);
737}
738EXPORT_SYMBOL(out_be16);
739
740unsigned in_le32(const volatile unsigned __iomem *addr)
741{
742 if (firmware_has_feature(FW_FEATURE_ISERIES))
743 return iSeries_Read_Long(addr);
744 return __in_le32(addr);
745}
746EXPORT_SYMBOL(in_le32);
747
748unsigned in_be32(const volatile unsigned __iomem *addr)
749{
750 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES));
751
752 return __in_be32(addr);
753}
754EXPORT_SYMBOL(in_be32);
755
756void out_le32(volatile unsigned __iomem *addr, int val)
757{
758 if (firmware_has_feature(FW_FEATURE_ISERIES))
759 iSeries_Write_Long(val, addr);
760 else
761 __out_le32(addr, val);
762}
763EXPORT_SYMBOL(out_le32);
764
765void out_be32(volatile unsigned __iomem *addr, int val)
766{
767 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES));
768
769 __out_be32(addr, val);
770}
771EXPORT_SYMBOL(out_be32);
772
773unsigned long in_le64(const volatile unsigned long __iomem *addr)
774{
775 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES));
776
777 return __in_le64(addr);
778}
779EXPORT_SYMBOL(in_le64);
780
781unsigned long in_be64(const volatile unsigned long __iomem *addr)
782{
783 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES));
784
785 return __in_be64(addr);
786}
787EXPORT_SYMBOL(in_be64);
788
789void out_le64(volatile unsigned long __iomem *addr, unsigned long val)
790{
791 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES));
792
793 __out_le64(addr, val);
794}
795EXPORT_SYMBOL(out_le64);
796
797void out_be64(volatile unsigned long __iomem *addr, unsigned long val)
798{
799 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES));
800
801 __out_be64(addr, val);
802}
803EXPORT_SYMBOL(out_be64);
804
805void memset_io(volatile void __iomem *addr, int c, unsigned long n)
806{
807 if (firmware_has_feature(FW_FEATURE_ISERIES)) {
808 volatile char __iomem *d = addr;
809
810 while (n-- > 0) {
811 iSeries_Write_Byte(c, d++);
812 }
813 } else
814 eeh_memset_io(addr, c, n);
815}
816EXPORT_SYMBOL(memset_io);
817
818void memcpy_fromio(void *dest, const volatile void __iomem *src,
819 unsigned long n)
820{
821 if (firmware_has_feature(FW_FEATURE_ISERIES)) {
822 char *d = dest;
823 const volatile char __iomem *s = src;
824
825 while (n-- > 0) {
826 *d++ = iSeries_Read_Byte(s++);
827 }
828 } else
829 eeh_memcpy_fromio(dest, src, n);
830}
831EXPORT_SYMBOL(memcpy_fromio);
832
833void memcpy_toio(volatile void __iomem *dest, const void *src, unsigned long n)
834{
835 if (firmware_has_feature(FW_FEATURE_ISERIES)) {
836 const char *s = src;
837 volatile char __iomem *d = dest;
838
839 while (n-- > 0) {
840 iSeries_Write_Byte(*s++, d++);
841 }
842 } else
843 eeh_memcpy_toio(dest, src, n);
844}
845EXPORT_SYMBOL(memcpy_toio);
diff --git a/include/asm-powerpc/io.h b/include/asm-powerpc/io.h
index 174fb89d5eda..46bae1cf385b 100644
--- a/include/asm-powerpc/io.h
+++ b/include/asm-powerpc/io.h
@@ -20,9 +20,6 @@ extern int check_legacy_ioport(unsigned long base_port);
20#include <asm/page.h> 20#include <asm/page.h>
21#include <asm/byteorder.h> 21#include <asm/byteorder.h>
22#include <asm/paca.h> 22#include <asm/paca.h>
23#ifdef CONFIG_PPC_ISERIES
24#include <asm/iseries/iseries_io.h>
25#endif
26#include <asm/synch.h> 23#include <asm/synch.h>
27#include <asm/delay.h> 24#include <asm/delay.h>
28 25
@@ -37,41 +34,53 @@ extern unsigned long isa_io_base;
37extern unsigned long pci_io_base; 34extern unsigned long pci_io_base;
38 35
39#ifdef CONFIG_PPC_ISERIES 36#ifdef CONFIG_PPC_ISERIES
40/* __raw_* accessors aren't supported on iSeries */
41#define __raw_readb(addr) { BUG(); 0; }
42#define __raw_readw(addr) { BUG(); 0; }
43#define __raw_readl(addr) { BUG(); 0; }
44#define __raw_readq(addr) { BUG(); 0; }
45#define __raw_writeb(v, addr) { BUG(); 0; }
46#define __raw_writew(v, addr) { BUG(); 0; }
47#define __raw_writel(v, addr) { BUG(); 0; }
48#define __raw_writeq(v, addr) { BUG(); 0; }
49#define readb(addr) iSeries_Read_Byte(addr)
50#define readw(addr) iSeries_Read_Word(addr)
51#define readl(addr) iSeries_Read_Long(addr)
52#define writeb(data, addr) iSeries_Write_Byte((data),(addr))
53#define writew(data, addr) iSeries_Write_Word((data),(addr))
54#define writel(data, addr) iSeries_Write_Long((data),(addr))
55#define memset_io(a,b,c) iSeries_memset_io((a),(b),(c))
56#define memcpy_fromio(a,b,c) iSeries_memcpy_fromio((a), (b), (c))
57#define memcpy_toio(a,b,c) iSeries_memcpy_toio((a), (b), (c))
58
59#define inb(addr) readb(((void __iomem *)(long)(addr)))
60#define inw(addr) readw(((void __iomem *)(long)(addr)))
61#define inl(addr) readl(((void __iomem *)(long)(addr)))
62#define outb(data,addr) writeb(data,((void __iomem *)(long)(addr)))
63#define outw(data,addr) writew(data,((void __iomem *)(long)(addr)))
64#define outl(data,addr) writel(data,((void __iomem *)(long)(addr)))
65/*
66 * The *_ns versions below don't do byte-swapping.
67 * Neither do the standard versions now, these are just here
68 * for older code.
69 */
70#define insb(port, buf, ns) _insb((u8 __iomem *)((port)+pci_io_base), (buf), (ns))
71#define insw(port, buf, ns) _insw_ns((u16 __iomem *)((port)+pci_io_base), (buf), (ns))
72#define insl(port, buf, nl) _insl_ns((u32 __iomem *)((port)+pci_io_base), (buf), (nl))
73 37
74#else 38extern int in_8(const volatile unsigned char __iomem *addr);
39extern void out_8(volatile unsigned char __iomem *addr, int val);
40extern int in_le16(const volatile unsigned short __iomem *addr);
41extern int in_be16(const volatile unsigned short __iomem *addr);
42extern void out_le16(volatile unsigned short __iomem *addr, int val);
43extern void out_be16(volatile unsigned short __iomem *addr, int val);
44extern unsigned in_le32(const volatile unsigned __iomem *addr);
45extern unsigned in_be32(const volatile unsigned __iomem *addr);
46extern void out_le32(volatile unsigned __iomem *addr, int val);
47extern void out_be32(volatile unsigned __iomem *addr, int val);
48extern unsigned long in_le64(const volatile unsigned long __iomem *addr);
49extern unsigned long in_be64(const volatile unsigned long __iomem *addr);
50extern void out_le64(volatile unsigned long __iomem *addr, unsigned long val);
51extern void out_be64(volatile unsigned long __iomem *addr, unsigned long val);
52
53extern unsigned char __raw_readb(const volatile void __iomem *addr);
54extern unsigned short __raw_readw(const volatile void __iomem *addr);
55extern unsigned int __raw_readl(const volatile void __iomem *addr);
56extern unsigned long __raw_readq(const volatile void __iomem *addr);
57extern void __raw_writeb(unsigned char v, volatile void __iomem *addr);
58extern void __raw_writew(unsigned short v, volatile void __iomem *addr);
59extern void __raw_writel(unsigned int v, volatile void __iomem *addr);
60extern void __raw_writeq(unsigned long v, volatile void __iomem *addr);
61
62extern void memset_io(volatile void __iomem *addr, int c, unsigned long n);
63extern void memcpy_fromio(void *dest, const volatile void __iomem *src,
64 unsigned long n);
65extern void memcpy_toio(volatile void __iomem *dest, const void *src,
66 unsigned long n);
67
68#else /* CONFIG_PPC_ISERIES */
69
70#define in_8(addr) __in_8((addr))
71#define out_8(addr, val) __out_8((addr), (val))
72#define in_le16(addr) __in_le16((addr))
73#define in_be16(addr) __in_be16((addr))
74#define out_le16(addr, val) __out_le16((addr), (val))
75#define out_be16(addr, val) __out_be16((addr), (val))
76#define in_le32(addr) __in_le32((addr))
77#define in_be32(addr) __in_be32((addr))
78#define out_le32(addr, val) __out_le32((addr), (val))
79#define out_be32(addr, val) __out_be32((addr), (val))
80#define in_le64(addr) __in_le64((addr))
81#define in_be64(addr) __in_be64((addr))
82#define out_le64(addr, val) __out_le64((addr), (val))
83#define out_be64(addr, val) __out_be64((addr), (val))
75 84
76static inline unsigned char __raw_readb(const volatile void __iomem *addr) 85static inline unsigned char __raw_readb(const volatile void __iomem *addr)
77{ 86{
@@ -105,23 +114,11 @@ static inline void __raw_writeq(unsigned long v, volatile void __iomem *addr)
105{ 114{
106 *(volatile unsigned long __force *)addr = v; 115 *(volatile unsigned long __force *)addr = v;
107} 116}
108#define readb(addr) eeh_readb(addr)
109#define readw(addr) eeh_readw(addr)
110#define readl(addr) eeh_readl(addr)
111#define readq(addr) eeh_readq(addr)
112#define writeb(data, addr) eeh_writeb((data), (addr))
113#define writew(data, addr) eeh_writew((data), (addr))
114#define writel(data, addr) eeh_writel((data), (addr))
115#define writeq(data, addr) eeh_writeq((data), (addr))
116#define memset_io(a,b,c) eeh_memset_io((a),(b),(c)) 117#define memset_io(a,b,c) eeh_memset_io((a),(b),(c))
117#define memcpy_fromio(a,b,c) eeh_memcpy_fromio((a),(b),(c)) 118#define memcpy_fromio(a,b,c) eeh_memcpy_fromio((a),(b),(c))
118#define memcpy_toio(a,b,c) eeh_memcpy_toio((a),(b),(c)) 119#define memcpy_toio(a,b,c) eeh_memcpy_toio((a),(b),(c))
119#define inb(port) eeh_inb((unsigned long)port) 120
120#define outb(val, port) eeh_outb(val, (unsigned long)port) 121#endif /* CONFIG_PPC_ISERIES */
121#define inw(port) eeh_inw((unsigned long)port)
122#define outw(val, port) eeh_outw(val, (unsigned long)port)
123#define inl(port) eeh_inl((unsigned long)port)
124#define outl(val, port) eeh_outl(val, (unsigned long)port)
125 122
126/* 123/*
127 * The insw/outsw/insl/outsl macros don't do byte-swapping. 124 * The insw/outsw/insl/outsl macros don't do byte-swapping.
@@ -132,12 +129,25 @@ static inline void __raw_writeq(unsigned long v, volatile void __iomem *addr)
132#define insw(port, buf, ns) eeh_insw_ns((port), (buf), (ns)) 129#define insw(port, buf, ns) eeh_insw_ns((port), (buf), (ns))
133#define insl(port, buf, nl) eeh_insl_ns((port), (buf), (nl)) 130#define insl(port, buf, nl) eeh_insl_ns((port), (buf), (nl))
134 131
135#endif
136
137#define outsb(port, buf, ns) _outsb((u8 __iomem *)((port)+pci_io_base), (buf), (ns)) 132#define outsb(port, buf, ns) _outsb((u8 __iomem *)((port)+pci_io_base), (buf), (ns))
138#define outsw(port, buf, ns) _outsw_ns((u16 __iomem *)((port)+pci_io_base), (buf), (ns)) 133#define outsw(port, buf, ns) _outsw_ns((u16 __iomem *)((port)+pci_io_base), (buf), (ns))
139#define outsl(port, buf, nl) _outsl_ns((u32 __iomem *)((port)+pci_io_base), (buf), (nl)) 134#define outsl(port, buf, nl) _outsl_ns((u32 __iomem *)((port)+pci_io_base), (buf), (nl))
140 135
136#define readb(addr) eeh_readb(addr)
137#define readw(addr) eeh_readw(addr)
138#define readl(addr) eeh_readl(addr)
139#define readq(addr) eeh_readq(addr)
140#define writeb(data, addr) eeh_writeb((data), (addr))
141#define writew(data, addr) eeh_writew((data), (addr))
142#define writel(data, addr) eeh_writel((data), (addr))
143#define writeq(data, addr) eeh_writeq((data), (addr))
144#define inb(port) eeh_inb((unsigned long)port)
145#define outb(val, port) eeh_outb(val, (unsigned long)port)
146#define inw(port) eeh_inw((unsigned long)port)
147#define outw(val, port) eeh_outw(val, (unsigned long)port)
148#define inl(port) eeh_inl((unsigned long)port)
149#define outl(val, port) eeh_outl(val, (unsigned long)port)
150
141#define readb_relaxed(addr) readb(addr) 151#define readb_relaxed(addr) readb(addr)
142#define readw_relaxed(addr) readw(addr) 152#define readw_relaxed(addr) readw(addr)
143#define readl_relaxed(addr) readl(addr) 153#define readl_relaxed(addr) readl(addr)
@@ -258,7 +268,7 @@ static inline void iosync(void)
258 * and should not be used directly by device drivers. Use inb/readb 268 * and should not be used directly by device drivers. Use inb/readb
259 * instead. 269 * instead.
260 */ 270 */
261static inline int in_8(const volatile unsigned char __iomem *addr) 271static inline int __in_8(const volatile unsigned char __iomem *addr)
262{ 272{
263 int ret; 273 int ret;
264 274
@@ -267,14 +277,14 @@ static inline int in_8(const volatile unsigned char __iomem *addr)
267 return ret; 277 return ret;
268} 278}
269 279
270static inline void out_8(volatile unsigned char __iomem *addr, int val) 280static inline void __out_8(volatile unsigned char __iomem *addr, int val)
271{ 281{
272 __asm__ __volatile__("sync; stb%U0%X0 %1,%0" 282 __asm__ __volatile__("sync; stb%U0%X0 %1,%0"
273 : "=m" (*addr) : "r" (val)); 283 : "=m" (*addr) : "r" (val));
274 get_paca()->io_sync = 1; 284 get_paca()->io_sync = 1;
275} 285}
276 286
277static inline int in_le16(const volatile unsigned short __iomem *addr) 287static inline int __in_le16(const volatile unsigned short __iomem *addr)
278{ 288{
279 int ret; 289 int ret;
280 290
@@ -283,7 +293,7 @@ static inline int in_le16(const volatile unsigned short __iomem *addr)
283 return ret; 293 return ret;
284} 294}
285 295
286static inline int in_be16(const volatile unsigned short __iomem *addr) 296static inline int __in_be16(const volatile unsigned short __iomem *addr)
287{ 297{
288 int ret; 298 int ret;
289 299
@@ -292,21 +302,21 @@ static inline int in_be16(const volatile unsigned short __iomem *addr)
292 return ret; 302 return ret;
293} 303}
294 304
295static inline void out_le16(volatile unsigned short __iomem *addr, int val) 305static inline void __out_le16(volatile unsigned short __iomem *addr, int val)
296{ 306{
297 __asm__ __volatile__("sync; sthbrx %1,0,%2" 307 __asm__ __volatile__("sync; sthbrx %1,0,%2"
298 : "=m" (*addr) : "r" (val), "r" (addr)); 308 : "=m" (*addr) : "r" (val), "r" (addr));
299 get_paca()->io_sync = 1; 309 get_paca()->io_sync = 1;
300} 310}
301 311
302static inline void out_be16(volatile unsigned short __iomem *addr, int val) 312static inline void __out_be16(volatile unsigned short __iomem *addr, int val)
303{ 313{
304 __asm__ __volatile__("sync; sth%U0%X0 %1,%0" 314 __asm__ __volatile__("sync; sth%U0%X0 %1,%0"
305 : "=m" (*addr) : "r" (val)); 315 : "=m" (*addr) : "r" (val));
306 get_paca()->io_sync = 1; 316 get_paca()->io_sync = 1;
307} 317}
308 318
309static inline unsigned in_le32(const volatile unsigned __iomem *addr) 319static inline unsigned __in_le32(const volatile unsigned __iomem *addr)
310{ 320{
311 unsigned ret; 321 unsigned ret;
312 322
@@ -315,7 +325,7 @@ static inline unsigned in_le32(const volatile unsigned __iomem *addr)
315 return ret; 325 return ret;
316} 326}
317 327
318static inline unsigned in_be32(const volatile unsigned __iomem *addr) 328static inline unsigned __in_be32(const volatile unsigned __iomem *addr)
319{ 329{
320 unsigned ret; 330 unsigned ret;
321 331
@@ -324,21 +334,21 @@ static inline unsigned in_be32(const volatile unsigned __iomem *addr)
324 return ret; 334 return ret;
325} 335}
326 336
327static inline void out_le32(volatile unsigned __iomem *addr, int val) 337static inline void __out_le32(volatile unsigned __iomem *addr, int val)
328{ 338{
329 __asm__ __volatile__("sync; stwbrx %1,0,%2" : "=m" (*addr) 339 __asm__ __volatile__("sync; stwbrx %1,0,%2" : "=m" (*addr)
330 : "r" (val), "r" (addr)); 340 : "r" (val), "r" (addr));
331 get_paca()->io_sync = 1; 341 get_paca()->io_sync = 1;
332} 342}
333 343
334static inline void out_be32(volatile unsigned __iomem *addr, int val) 344static inline void __out_be32(volatile unsigned __iomem *addr, int val)
335{ 345{
336 __asm__ __volatile__("sync; stw%U0%X0 %1,%0" 346 __asm__ __volatile__("sync; stw%U0%X0 %1,%0"
337 : "=m" (*addr) : "r" (val)); 347 : "=m" (*addr) : "r" (val));
338 get_paca()->io_sync = 1; 348 get_paca()->io_sync = 1;
339} 349}
340 350
341static inline unsigned long in_le64(const volatile unsigned long __iomem *addr) 351static inline unsigned long __in_le64(const volatile unsigned long __iomem *addr)
342{ 352{
343 unsigned long tmp, ret; 353 unsigned long tmp, ret;
344 354
@@ -358,7 +368,7 @@ static inline unsigned long in_le64(const volatile unsigned long __iomem *addr)
358 return ret; 368 return ret;
359} 369}
360 370
361static inline unsigned long in_be64(const volatile unsigned long __iomem *addr) 371static inline unsigned long __in_be64(const volatile unsigned long __iomem *addr)
362{ 372{
363 unsigned long ret; 373 unsigned long ret;
364 374
@@ -367,7 +377,7 @@ static inline unsigned long in_be64(const volatile unsigned long __iomem *addr)
367 return ret; 377 return ret;
368} 378}
369 379
370static inline void out_le64(volatile unsigned long __iomem *addr, unsigned long val) 380static inline void __out_le64(volatile unsigned long __iomem *addr, unsigned long val)
371{ 381{
372 unsigned long tmp; 382 unsigned long tmp;
373 383
@@ -385,15 +395,13 @@ static inline void out_le64(volatile unsigned long __iomem *addr, unsigned long
385 get_paca()->io_sync = 1; 395 get_paca()->io_sync = 1;
386} 396}
387 397
388static inline void out_be64(volatile unsigned long __iomem *addr, unsigned long val) 398static inline void __out_be64(volatile unsigned long __iomem *addr, unsigned long val)
389{ 399{
390 __asm__ __volatile__("sync; std%U0%X0 %1,%0" : "=m" (*addr) : "r" (val)); 400 __asm__ __volatile__("sync; std%U0%X0 %1,%0" : "=m" (*addr) : "r" (val));
391 get_paca()->io_sync = 1; 401 get_paca()->io_sync = 1;
392} 402}
393 403
394#ifndef CONFIG_PPC_ISERIES
395#include <asm/eeh.h> 404#include <asm/eeh.h>
396#endif
397 405
398/** 406/**
399 * check_signature - find BIOS signatures 407 * check_signature - find BIOS signatures
@@ -409,7 +417,6 @@ static inline int check_signature(const volatile void __iomem * io_addr,
409 const unsigned char *signature, int length) 417 const unsigned char *signature, int length)
410{ 418{
411 int retval = 0; 419 int retval = 0;
412#ifndef CONFIG_PPC_ISERIES
413 do { 420 do {
414 if (readb(io_addr) != *signature) 421 if (readb(io_addr) != *signature)
415 goto out; 422 goto out;
@@ -419,7 +426,6 @@ static inline int check_signature(const volatile void __iomem * io_addr,
419 } while (length); 426 } while (length);
420 retval = 1; 427 retval = 1;
421out: 428out:
422#endif
423 return retval; 429 return retval;
424} 430}
425 431
diff --git a/include/asm-powerpc/iseries/iseries_io.h b/include/asm-powerpc/iseries/iseries_io.h
deleted file mode 100644
index f29009bd63c9..000000000000
--- a/include/asm-powerpc/iseries/iseries_io.h
+++ /dev/null
@@ -1,60 +0,0 @@
1#ifndef _ASM_POWERPC_ISERIES_ISERIES_IO_H
2#define _ASM_POWERPC_ISERIES_ISERIES_IO_H
3
4
5#ifdef CONFIG_PPC_ISERIES
6#include <linux/types.h>
7/*
8 * Created by Allan Trautman on Thu Dec 28 2000.
9 *
10 * Remaps the io.h for the iSeries Io
11 * Copyright (C) 2000 Allan H Trautman, IBM Corporation
12 *
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 2 of the License, or
16 * (at your option) any later version.
17 *
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License
24 * along with this program; if not, write to the:
25 * Free Software Foundation, Inc.,
26 * 59 Temple Place, Suite 330,
27 * Boston, MA 02111-1307 USA
28 *
29 * Change Activity:
30 * Created December 28, 2000
31 * End Change Activity
32 */
33
34#ifdef CONFIG_PCI
35extern u8 iSeries_Read_Byte(const volatile void __iomem * IoAddress);
36extern u16 iSeries_Read_Word(const volatile void __iomem * IoAddress);
37extern u32 iSeries_Read_Long(const volatile void __iomem * IoAddress);
38extern void iSeries_Write_Byte(u8 IoData, volatile void __iomem * IoAddress);
39extern void iSeries_Write_Word(u16 IoData, volatile void __iomem * IoAddress);
40extern void iSeries_Write_Long(u32 IoData, volatile void __iomem * IoAddress);
41
42extern void iSeries_memset_io(volatile void __iomem *dest, char x, size_t n);
43extern void iSeries_memcpy_toio(volatile void __iomem *dest, void *source,
44 size_t n);
45extern void iSeries_memcpy_fromio(void *dest,
46 const volatile void __iomem *source, size_t n);
47#else
48static inline u8 iSeries_Read_Byte(const volatile void __iomem *IoAddress)
49{
50 return 0xff;
51}
52
53static inline void iSeries_Write_Byte(u8 IoData,
54 volatile void __iomem *IoAddress)
55{
56}
57#endif /* CONFIG_PCI */
58
59#endif /* CONFIG_PPC_ISERIES */
60#endif /* _ASM_POWERPC_ISERIES_ISERIES_IO_H */