diff options
Diffstat (limited to 'arch/ppc64/kernel/sys_ppc32.c')
| -rw-r--r-- | arch/ppc64/kernel/sys_ppc32.c | 55 |
1 files changed, 1 insertions, 54 deletions
diff --git a/arch/ppc64/kernel/sys_ppc32.c b/arch/ppc64/kernel/sys_ppc32.c index 214914a95a50..e93c13458910 100644 --- a/arch/ppc64/kernel/sys_ppc32.c +++ b/arch/ppc64/kernel/sys_ppc32.c | |||
| @@ -708,62 +708,9 @@ asmlinkage int sys32_pciconfig_write(u32 bus, u32 dfn, u32 off, u32 len, u32 ubu | |||
| 708 | compat_ptr(ubuf)); | 708 | compat_ptr(ubuf)); |
| 709 | } | 709 | } |
| 710 | 710 | ||
| 711 | #define IOBASE_BRIDGE_NUMBER 0 | ||
| 712 | #define IOBASE_MEMORY 1 | ||
| 713 | #define IOBASE_IO 2 | ||
| 714 | #define IOBASE_ISA_IO 3 | ||
| 715 | #define IOBASE_ISA_MEM 4 | ||
| 716 | |||
| 717 | asmlinkage int sys32_pciconfig_iobase(u32 which, u32 in_bus, u32 in_devfn) | 711 | asmlinkage int sys32_pciconfig_iobase(u32 which, u32 in_bus, u32 in_devfn) |
| 718 | { | 712 | { |
| 719 | #ifdef CONFIG_PCI | 713 | return sys_pciconfig_iobase(which, in_bus, in_devfn); |
| 720 | struct pci_controller* hose; | ||
| 721 | struct list_head *ln; | ||
| 722 | struct pci_bus *bus = NULL; | ||
| 723 | struct device_node *hose_node; | ||
| 724 | |||
| 725 | /* Argh ! Please forgive me for that hack, but that's the | ||
| 726 | * simplest way to get existing XFree to not lockup on some | ||
| 727 | * G5 machines... So when something asks for bus 0 io base | ||
| 728 | * (bus 0 is HT root), we return the AGP one instead. | ||
| 729 | */ | ||
| 730 | #ifdef CONFIG_PPC_PMAC | ||
| 731 | if (systemcfg->platform == PLATFORM_POWERMAC && | ||
| 732 | machine_is_compatible("MacRISC4")) | ||
| 733 | if (in_bus == 0) | ||
| 734 | in_bus = 0xf0; | ||
| 735 | #endif /* CONFIG_PPC_PMAC */ | ||
| 736 | |||
| 737 | /* That syscall isn't quite compatible with PCI domains, but it's | ||
| 738 | * used on pre-domains setup. We return the first match | ||
| 739 | */ | ||
| 740 | |||
| 741 | for (ln = pci_root_buses.next; ln != &pci_root_buses; ln = ln->next) { | ||
| 742 | bus = pci_bus_b(ln); | ||
| 743 | if (in_bus >= bus->number && in_bus < (bus->number + bus->subordinate)) | ||
| 744 | break; | ||
| 745 | bus = NULL; | ||
| 746 | } | ||
| 747 | if (bus == NULL || bus->sysdata == NULL) | ||
| 748 | return -ENODEV; | ||
| 749 | |||
| 750 | hose_node = (struct device_node *)bus->sysdata; | ||
| 751 | hose = hose_node->phb; | ||
| 752 | |||
| 753 | switch (which) { | ||
| 754 | case IOBASE_BRIDGE_NUMBER: | ||
| 755 | return (long)hose->first_busno; | ||
| 756 | case IOBASE_MEMORY: | ||
| 757 | return (long)hose->pci_mem_offset; | ||
| 758 | case IOBASE_IO: | ||
| 759 | return (long)hose->io_base_phys; | ||
| 760 | case IOBASE_ISA_IO: | ||
| 761 | return (long)isa_io_base; | ||
| 762 | case IOBASE_ISA_MEM: | ||
| 763 | return -EINVAL; | ||
| 764 | } | ||
| 765 | #endif /* CONFIG_PCI */ | ||
| 766 | return -EOPNOTSUPP; | ||
| 767 | } | 714 | } |
| 768 | 715 | ||
| 769 | 716 | ||
