diff options
| -rw-r--r-- | arch/powerpc/kernel/io.c | 14 | ||||
| -rw-r--r-- | arch/powerpc/platforms/iseries/pci.c | 280 | ||||
| -rw-r--r-- | include/asm-powerpc/io.h | 148 | ||||
| -rw-r--r-- | include/asm-powerpc/iseries/iseries_io.h | 60 |
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 | ||
| 26 | void _insb(volatile u8 __iomem *port, void *buf, long count) | 28 | void _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 | */ | ||
| 276 | void 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 | } | ||
| 286 | EXPORT_SYMBOL(iSeries_memset_io); | ||
| 287 | |||
| 288 | void 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 | } | ||
| 298 | EXPORT_SYMBOL(iSeries_memcpy_toio); | ||
| 299 | |||
| 300 | void 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 | } | ||
| 310 | EXPORT_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 | */ |
| 315 | static struct device_node *find_Device_Node(int bus, int devfn) | 276 | static 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 | */ |
| 494 | u8 iSeries_Read_Byte(const volatile void __iomem *IoAddress) | 455 | static 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 | } |
| 521 | EXPORT_SYMBOL(iSeries_Read_Byte); | ||
| 522 | 482 | ||
| 523 | u16 iSeries_Read_Word(const volatile void __iomem *IoAddress) | 483 | static 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 | } |
| 551 | EXPORT_SYMBOL(iSeries_Read_Word); | ||
| 552 | 511 | ||
| 553 | u32 iSeries_Read_Long(const volatile void __iomem *IoAddress) | 512 | static 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 | } |
| 581 | EXPORT_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 | */ |
| 590 | void iSeries_Write_Byte(u8 data, volatile void __iomem *IoAddress) | 548 | static 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 | } |
| 615 | EXPORT_SYMBOL(iSeries_Write_Byte); | ||
| 616 | 573 | ||
| 617 | void iSeries_Write_Word(u16 data, volatile void __iomem *IoAddress) | 574 | static 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 | } |
| 642 | EXPORT_SYMBOL(iSeries_Write_Word); | ||
| 643 | 599 | ||
| 644 | void iSeries_Write_Long(u32 data, volatile void __iomem *IoAddress) | 600 | static 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 | } |
| 669 | EXPORT_SYMBOL(iSeries_Write_Long); | 625 | |
| 626 | extern 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 | } | ||
| 632 | EXPORT_SYMBOL(__raw_readb); | ||
| 633 | |||
| 634 | extern 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 | } | ||
| 640 | EXPORT_SYMBOL(__raw_readw); | ||
| 641 | |||
| 642 | extern 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 | } | ||
| 648 | EXPORT_SYMBOL(__raw_readl); | ||
| 649 | |||
| 650 | extern 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 | } | ||
| 656 | EXPORT_SYMBOL(__raw_readq); | ||
| 657 | |||
| 658 | extern 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 | } | ||
| 664 | EXPORT_SYMBOL(__raw_writeb); | ||
| 665 | |||
| 666 | extern 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 | } | ||
| 672 | EXPORT_SYMBOL(__raw_writew); | ||
| 673 | |||
| 674 | extern 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 | } | ||
| 680 | EXPORT_SYMBOL(__raw_writel); | ||
| 681 | |||
| 682 | extern 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 | } | ||
| 688 | EXPORT_SYMBOL(__raw_writeq); | ||
| 689 | |||
| 690 | int 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 | } | ||
| 696 | EXPORT_SYMBOL(in_8); | ||
| 697 | |||
| 698 | void 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 | } | ||
| 705 | EXPORT_SYMBOL(out_8); | ||
| 706 | |||
| 707 | int 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 | } | ||
| 713 | EXPORT_SYMBOL(in_le16); | ||
| 714 | |||
| 715 | int 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 | } | ||
| 721 | EXPORT_SYMBOL(in_be16); | ||
| 722 | |||
| 723 | void 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 | } | ||
| 730 | EXPORT_SYMBOL(out_le16); | ||
| 731 | |||
| 732 | void 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 | } | ||
| 738 | EXPORT_SYMBOL(out_be16); | ||
| 739 | |||
| 740 | unsigned 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 | } | ||
| 746 | EXPORT_SYMBOL(in_le32); | ||
| 747 | |||
| 748 | unsigned in_be32(const volatile unsigned __iomem *addr) | ||
| 749 | { | ||
| 750 | BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES)); | ||
| 751 | |||
| 752 | return __in_be32(addr); | ||
| 753 | } | ||
| 754 | EXPORT_SYMBOL(in_be32); | ||
| 755 | |||
| 756 | void 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 | } | ||
| 763 | EXPORT_SYMBOL(out_le32); | ||
| 764 | |||
| 765 | void 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 | } | ||
| 771 | EXPORT_SYMBOL(out_be32); | ||
| 772 | |||
| 773 | unsigned 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 | } | ||
| 779 | EXPORT_SYMBOL(in_le64); | ||
| 780 | |||
| 781 | unsigned 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 | } | ||
| 787 | EXPORT_SYMBOL(in_be64); | ||
| 788 | |||
| 789 | void 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 | } | ||
| 795 | EXPORT_SYMBOL(out_le64); | ||
| 796 | |||
| 797 | void 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 | } | ||
| 803 | EXPORT_SYMBOL(out_be64); | ||
| 804 | |||
| 805 | void 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 | } | ||
| 816 | EXPORT_SYMBOL(memset_io); | ||
| 817 | |||
| 818 | void 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 | } | ||
| 831 | EXPORT_SYMBOL(memcpy_fromio); | ||
| 832 | |||
| 833 | void 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 | } | ||
| 845 | EXPORT_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; | |||
| 37 | extern unsigned long pci_io_base; | 34 | extern 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 | 38 | extern int in_8(const volatile unsigned char __iomem *addr); |
| 39 | extern void out_8(volatile unsigned char __iomem *addr, int val); | ||
| 40 | extern int in_le16(const volatile unsigned short __iomem *addr); | ||
| 41 | extern int in_be16(const volatile unsigned short __iomem *addr); | ||
| 42 | extern void out_le16(volatile unsigned short __iomem *addr, int val); | ||
| 43 | extern void out_be16(volatile unsigned short __iomem *addr, int val); | ||
| 44 | extern unsigned in_le32(const volatile unsigned __iomem *addr); | ||
| 45 | extern unsigned in_be32(const volatile unsigned __iomem *addr); | ||
| 46 | extern void out_le32(volatile unsigned __iomem *addr, int val); | ||
| 47 | extern void out_be32(volatile unsigned __iomem *addr, int val); | ||
| 48 | extern unsigned long in_le64(const volatile unsigned long __iomem *addr); | ||
| 49 | extern unsigned long in_be64(const volatile unsigned long __iomem *addr); | ||
| 50 | extern void out_le64(volatile unsigned long __iomem *addr, unsigned long val); | ||
| 51 | extern void out_be64(volatile unsigned long __iomem *addr, unsigned long val); | ||
| 52 | |||
| 53 | extern unsigned char __raw_readb(const volatile void __iomem *addr); | ||
| 54 | extern unsigned short __raw_readw(const volatile void __iomem *addr); | ||
| 55 | extern unsigned int __raw_readl(const volatile void __iomem *addr); | ||
| 56 | extern unsigned long __raw_readq(const volatile void __iomem *addr); | ||
| 57 | extern void __raw_writeb(unsigned char v, volatile void __iomem *addr); | ||
| 58 | extern void __raw_writew(unsigned short v, volatile void __iomem *addr); | ||
| 59 | extern void __raw_writel(unsigned int v, volatile void __iomem *addr); | ||
| 60 | extern void __raw_writeq(unsigned long v, volatile void __iomem *addr); | ||
| 61 | |||
| 62 | extern void memset_io(volatile void __iomem *addr, int c, unsigned long n); | ||
| 63 | extern void memcpy_fromio(void *dest, const volatile void __iomem *src, | ||
| 64 | unsigned long n); | ||
| 65 | extern 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 | ||
| 76 | static inline unsigned char __raw_readb(const volatile void __iomem *addr) | 85 | static 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 | */ |
| 261 | static inline int in_8(const volatile unsigned char __iomem *addr) | 271 | static 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 | ||
| 270 | static inline void out_8(volatile unsigned char __iomem *addr, int val) | 280 | static 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 | ||
| 277 | static inline int in_le16(const volatile unsigned short __iomem *addr) | 287 | static 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 | ||
| 286 | static inline int in_be16(const volatile unsigned short __iomem *addr) | 296 | static 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 | ||
| 295 | static inline void out_le16(volatile unsigned short __iomem *addr, int val) | 305 | static 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 | ||
| 302 | static inline void out_be16(volatile unsigned short __iomem *addr, int val) | 312 | static 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 | ||
| 309 | static inline unsigned in_le32(const volatile unsigned __iomem *addr) | 319 | static 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 | ||
| 318 | static inline unsigned in_be32(const volatile unsigned __iomem *addr) | 328 | static 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 | ||
| 327 | static inline void out_le32(volatile unsigned __iomem *addr, int val) | 337 | static 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 | ||
| 334 | static inline void out_be32(volatile unsigned __iomem *addr, int val) | 344 | static 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 | ||
| 341 | static inline unsigned long in_le64(const volatile unsigned long __iomem *addr) | 351 | static 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 | ||
| 361 | static inline unsigned long in_be64(const volatile unsigned long __iomem *addr) | 371 | static 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 | ||
| 370 | static inline void out_le64(volatile unsigned long __iomem *addr, unsigned long val) | 380 | static 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 | ||
| 388 | static inline void out_be64(volatile unsigned long __iomem *addr, unsigned long val) | 398 | static 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; |
| 421 | out: | 428 | out: |
| 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 | ||
| 35 | extern u8 iSeries_Read_Byte(const volatile void __iomem * IoAddress); | ||
| 36 | extern u16 iSeries_Read_Word(const volatile void __iomem * IoAddress); | ||
| 37 | extern u32 iSeries_Read_Long(const volatile void __iomem * IoAddress); | ||
| 38 | extern void iSeries_Write_Byte(u8 IoData, volatile void __iomem * IoAddress); | ||
| 39 | extern void iSeries_Write_Word(u16 IoData, volatile void __iomem * IoAddress); | ||
| 40 | extern void iSeries_Write_Long(u32 IoData, volatile void __iomem * IoAddress); | ||
| 41 | |||
| 42 | extern void iSeries_memset_io(volatile void __iomem *dest, char x, size_t n); | ||
| 43 | extern void iSeries_memcpy_toio(volatile void __iomem *dest, void *source, | ||
| 44 | size_t n); | ||
| 45 | extern void iSeries_memcpy_fromio(void *dest, | ||
| 46 | const volatile void __iomem *source, size_t n); | ||
| 47 | #else | ||
| 48 | static inline u8 iSeries_Read_Byte(const volatile void __iomem *IoAddress) | ||
| 49 | { | ||
| 50 | return 0xff; | ||
| 51 | } | ||
| 52 | |||
| 53 | static 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 */ | ||
