diff options
Diffstat (limited to 'arch/powerpc/platforms/iseries')
37 files changed, 8408 insertions, 0 deletions
diff --git a/arch/powerpc/platforms/iseries/Kconfig b/arch/powerpc/platforms/iseries/Kconfig new file mode 100644 index 00000000000..b57cda3a081 --- /dev/null +++ b/arch/powerpc/platforms/iseries/Kconfig | |||
| @@ -0,0 +1,38 @@ | |||
| 1 | config PPC_ISERIES | ||
| 2 | bool "IBM Legacy iSeries" | ||
| 3 | depends on PPC64 && PPC_BOOK3S | ||
| 4 | select PPC_SMP_MUXED_IPI | ||
| 5 | select PPC_INDIRECT_PIO | ||
| 6 | select PPC_INDIRECT_MMIO | ||
| 7 | select PPC_PCI_CHOICE if EXPERT | ||
| 8 | |||
| 9 | menu "iSeries device drivers" | ||
| 10 | depends on PPC_ISERIES | ||
| 11 | |||
| 12 | config VIODASD | ||
| 13 | tristate "iSeries Virtual I/O disk support" | ||
| 14 | depends on BLOCK | ||
| 15 | select VIOPATH | ||
| 16 | help | ||
| 17 | If you are running on an iSeries system and you want to use | ||
| 18 | virtual disks created and managed by OS/400, say Y. | ||
| 19 | |||
| 20 | config VIOCD | ||
| 21 | tristate "iSeries Virtual I/O CD support" | ||
| 22 | depends on BLOCK | ||
| 23 | select VIOPATH | ||
| 24 | help | ||
| 25 | If you are running Linux on an IBM iSeries system and you want to | ||
| 26 | read a CD drive owned by OS/400, say Y here. | ||
| 27 | |||
| 28 | config VIOTAPE | ||
| 29 | tristate "iSeries Virtual Tape Support" | ||
| 30 | select VIOPATH | ||
| 31 | help | ||
| 32 | If you are running Linux on an iSeries system and you want Linux | ||
| 33 | to read and/or write a tape drive owned by OS/400, say Y here. | ||
| 34 | |||
| 35 | endmenu | ||
| 36 | |||
| 37 | config VIOPATH | ||
| 38 | bool | ||
diff --git a/arch/powerpc/platforms/iseries/Makefile b/arch/powerpc/platforms/iseries/Makefile new file mode 100644 index 00000000000..a7602b11ed9 --- /dev/null +++ b/arch/powerpc/platforms/iseries/Makefile | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | ccflags-y := -mno-minimal-toc | ||
| 2 | |||
| 3 | obj-y += exception.o | ||
| 4 | obj-y += hvlog.o hvlpconfig.o lpardata.o setup.o dt.o mf.o lpevents.o \ | ||
| 5 | hvcall.o proc.o htab.o iommu.o misc.o irq.o | ||
| 6 | obj-$(CONFIG_PCI) += pci.o | ||
| 7 | obj-$(CONFIG_SMP) += smp.o | ||
| 8 | obj-$(CONFIG_VIOPATH) += viopath.o vio.o | ||
| 9 | obj-$(CONFIG_MODULES) += ksyms.o | ||
diff --git a/arch/powerpc/platforms/iseries/call_hpt.h b/arch/powerpc/platforms/iseries/call_hpt.h new file mode 100644 index 00000000000..8d95fe4b554 --- /dev/null +++ b/arch/powerpc/platforms/iseries/call_hpt.h | |||
| @@ -0,0 +1,102 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2001 Mike Corrigan IBM Corporation | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or modify | ||
| 5 | * it under the terms of the GNU General Public License as published by | ||
| 6 | * the Free Software Foundation; either version 2 of the License, or | ||
| 7 | * (at your option) any later version. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License | ||
| 15 | * along with this program; if not, write to the Free Software | ||
| 16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 17 | */ | ||
| 18 | #ifndef _PLATFORMS_ISERIES_CALL_HPT_H | ||
| 19 | #define _PLATFORMS_ISERIES_CALL_HPT_H | ||
| 20 | |||
| 21 | /* | ||
| 22 | * This file contains the "hypervisor call" interface which is used to | ||
| 23 | * drive the hypervisor from the OS. | ||
| 24 | */ | ||
| 25 | |||
| 26 | #include <asm/iseries/hv_call_sc.h> | ||
| 27 | #include <asm/iseries/hv_types.h> | ||
| 28 | #include <asm/mmu.h> | ||
| 29 | |||
| 30 | #define HvCallHptGetHptAddress HvCallHpt + 0 | ||
| 31 | #define HvCallHptGetHptPages HvCallHpt + 1 | ||
| 32 | #define HvCallHptSetPp HvCallHpt + 5 | ||
| 33 | #define HvCallHptSetSwBits HvCallHpt + 6 | ||
| 34 | #define HvCallHptUpdate HvCallHpt + 7 | ||
| 35 | #define HvCallHptInvalidateNoSyncICache HvCallHpt + 8 | ||
| 36 | #define HvCallHptGet HvCallHpt + 11 | ||
| 37 | #define HvCallHptFindNextValid HvCallHpt + 12 | ||
| 38 | #define HvCallHptFindValid HvCallHpt + 13 | ||
| 39 | #define HvCallHptAddValidate HvCallHpt + 16 | ||
| 40 | #define HvCallHptInvalidateSetSwBitsGet HvCallHpt + 18 | ||
| 41 | |||
| 42 | |||
| 43 | static inline u64 HvCallHpt_getHptAddress(void) | ||
| 44 | { | ||
| 45 | return HvCall0(HvCallHptGetHptAddress); | ||
| 46 | } | ||
| 47 | |||
| 48 | static inline u64 HvCallHpt_getHptPages(void) | ||
| 49 | { | ||
| 50 | return HvCall0(HvCallHptGetHptPages); | ||
| 51 | } | ||
| 52 | |||
| 53 | static inline void HvCallHpt_setPp(u32 hpteIndex, u8 value) | ||
| 54 | { | ||
| 55 | HvCall2(HvCallHptSetPp, hpteIndex, value); | ||
| 56 | } | ||
| 57 | |||
| 58 | static inline void HvCallHpt_setSwBits(u32 hpteIndex, u8 bitson, u8 bitsoff) | ||
| 59 | { | ||
| 60 | HvCall3(HvCallHptSetSwBits, hpteIndex, bitson, bitsoff); | ||
| 61 | } | ||
| 62 | |||
| 63 | static inline void HvCallHpt_invalidateNoSyncICache(u32 hpteIndex) | ||
| 64 | { | ||
| 65 | HvCall1(HvCallHptInvalidateNoSyncICache, hpteIndex); | ||
| 66 | } | ||
| 67 | |||
| 68 | static inline u64 HvCallHpt_invalidateSetSwBitsGet(u32 hpteIndex, u8 bitson, | ||
| 69 | u8 bitsoff) | ||
| 70 | { | ||
| 71 | u64 compressedStatus; | ||
| 72 | |||
| 73 | compressedStatus = HvCall4(HvCallHptInvalidateSetSwBitsGet, | ||
| 74 | hpteIndex, bitson, bitsoff, 1); | ||
| 75 | HvCall1(HvCallHptInvalidateNoSyncICache, hpteIndex); | ||
| 76 | return compressedStatus; | ||
| 77 | } | ||
| 78 | |||
| 79 | static inline u64 HvCallHpt_findValid(struct hash_pte *hpte, u64 vpn) | ||
| 80 | { | ||
| 81 | return HvCall3Ret16(HvCallHptFindValid, hpte, vpn, 0, 0); | ||
| 82 | } | ||
| 83 | |||
| 84 | static inline u64 HvCallHpt_findNextValid(struct hash_pte *hpte, u32 hpteIndex, | ||
| 85 | u8 bitson, u8 bitsoff) | ||
| 86 | { | ||
| 87 | return HvCall3Ret16(HvCallHptFindNextValid, hpte, hpteIndex, | ||
| 88 | bitson, bitsoff); | ||
| 89 | } | ||
| 90 | |||
| 91 | static inline void HvCallHpt_get(struct hash_pte *hpte, u32 hpteIndex) | ||
| 92 | { | ||
| 93 | HvCall2Ret16(HvCallHptGet, hpte, hpteIndex, 0); | ||
| 94 | } | ||
| 95 | |||
| 96 | static inline void HvCallHpt_addValidate(u32 hpteIndex, u32 hBit, | ||
| 97 | struct hash_pte *hpte) | ||
| 98 | { | ||
| 99 | HvCall4(HvCallHptAddValidate, hpteIndex, hBit, hpte->v, hpte->r); | ||
| 100 | } | ||
| 101 | |||
| 102 | #endif /* _PLATFORMS_ISERIES_CALL_HPT_H */ | ||
diff --git a/arch/powerpc/platforms/iseries/call_pci.h b/arch/powerpc/platforms/iseries/call_pci.h new file mode 100644 index 00000000000..dbdf69850ed --- /dev/null +++ b/arch/powerpc/platforms/iseries/call_pci.h | |||
| @@ -0,0 +1,309 @@ | |||
| 1 | /* | ||
| 2 | * Provides the Hypervisor PCI calls for iSeries Linux Parition. | ||
