From: David Gibson Only compile vio.c on iSeries and pSeries, since other PPC64 platforms (PowerMac) don't use virtual IO. The resulting #ifdefs in dma.c are kind of ugly, but at least contained, and I can't see a nicer way of doing it for the time being. Signed-off-by: David Gibson Signed-off-by: Andrew Morton --- 25-akpm/arch/ppc64/Kconfig | 5 +++++ 25-akpm/arch/ppc64/kernel/Makefile | 3 ++- 25-akpm/arch/ppc64/kernel/dma.c | 20 ++++++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff -puN arch/ppc64/Kconfig~ppc64-dont-build-virtual-io-drivers-for-powermac arch/ppc64/Kconfig --- 25/arch/ppc64/Kconfig~ppc64-dont-build-virtual-io-drivers-for-powermac 2004-10-21 20:52:31.826628760 -0700 +++ 25-akpm/arch/ppc64/Kconfig 2004-10-21 20:52:31.833627696 -0700 @@ -110,6 +110,11 @@ config PPC_SPLPAR processors, that is, which share physical processors between two or more partitions. +config IBMVIO + depends on PPC_PSERIES || PPC_ISERIES + bool + default y + config U3_DART bool depends on PPC_MULTIPLATFORM diff -puN arch/ppc64/kernel/dma.c~ppc64-dont-build-virtual-io-drivers-for-powermac arch/ppc64/kernel/dma.c --- 25/arch/ppc64/kernel/dma.c~ppc64-dont-build-virtual-io-drivers-for-powermac 2004-10-21 20:52:31.827628608 -0700 +++ 25-akpm/arch/ppc64/kernel/dma.c 2004-10-21 20:52:31.834627544 -0700 @@ -17,8 +17,10 @@ int dma_supported(struct device *dev, u6 { if (dev->bus == &pci_bus_type) return pci_dma_supported(to_pci_dev(dev), mask); +#ifdef CONFIG_IBMVIO if (dev->bus == &vio_bus_type) return vio_dma_supported(to_vio_dev(dev), mask); +#endif /* CONFIG_IBMVIO */ BUG(); return 0; } @@ -28,8 +30,10 @@ int dma_set_mask(struct device *dev, u64 { if (dev->bus == &pci_bus_type) return pci_set_dma_mask(to_pci_dev(dev), dma_mask); +#ifdef CONFIG_IBMVIO if (dev->bus == &vio_bus_type) return vio_set_dma_mask(to_vio_dev(dev), dma_mask); +#endif /* CONFIG_IBMVIO */ BUG(); return 0; } @@ -40,8 +44,10 @@ void *dma_alloc_coherent(struct device * { if (dev->bus == &pci_bus_type) return pci_alloc_consistent(to_pci_dev(dev), size, dma_handle); +#ifdef CONFIG_IBMVIO if (dev->bus == &vio_bus_type) return vio_alloc_consistent(to_vio_dev(dev), size, dma_handle); +#endif /* CONFIG_IBMVIO */ BUG(); return NULL; } @@ -52,8 +58,10 @@ void dma_free_coherent(struct device *de { if (dev->bus == &pci_bus_type) pci_free_consistent(to_pci_dev(dev), size, cpu_addr, dma_handle); +#ifdef CONFIG_IBMVIO else if (dev->bus == &vio_bus_type) vio_free_consistent(to_vio_dev(dev), size, cpu_addr, dma_handle); +#endif /* CONFIG_IBMVIO */ else BUG(); } @@ -64,8 +72,10 @@ dma_addr_t dma_map_single(struct device { if (dev->bus == &pci_bus_type) return pci_map_single(to_pci_dev(dev), cpu_addr, size, (int)direction); +#ifdef CONFIG_IBMVIO if (dev->bus == &vio_bus_type) return vio_map_single(to_vio_dev(dev), cpu_addr, size, direction); +#endif /* CONFIG_IBMVIO */ BUG(); return (dma_addr_t)0; } @@ -76,8 +86,10 @@ void dma_unmap_single(struct device *dev { if (dev->bus == &pci_bus_type) pci_unmap_single(to_pci_dev(dev), dma_addr, size, (int)direction); +#ifdef CONFIG_IBMVIO else if (dev->bus == &vio_bus_type) vio_unmap_single(to_vio_dev(dev), dma_addr, size, direction); +#endif /* CONFIG_IBMVIO */ else BUG(); } @@ -89,8 +101,10 @@ dma_addr_t dma_map_page(struct device *d { if (dev->bus == &pci_bus_type) return pci_map_page(to_pci_dev(dev), page, offset, size, (int)direction); +#ifdef CONFIG_IBMVIO if (dev->bus == &vio_bus_type) return vio_map_page(to_vio_dev(dev), page, offset, size, direction); +#endif /* CONFIG_IBMVIO */ BUG(); return (dma_addr_t)0; } @@ -101,8 +115,10 @@ void dma_unmap_page(struct device *dev, { if (dev->bus == &pci_bus_type) pci_unmap_page(to_pci_dev(dev), dma_address, size, (int)direction); +#ifdef CONFIG_IBMVIO else if (dev->bus == &vio_bus_type) vio_unmap_page(to_vio_dev(dev), dma_address, size, direction); +#endif /* CONFIG_IBMVIO */ else BUG(); } @@ -113,8 +129,10 @@ int dma_map_sg(struct device *dev, struc { if (dev->bus == &pci_bus_type) return pci_map_sg(to_pci_dev(dev), sg, nents, (int)direction); +#ifdef CONFIG_IBMVIO if (dev->bus == &vio_bus_type) return vio_map_sg(to_vio_dev(dev), sg, nents, direction); +#endif /* CONFIG_IBMVIO */ BUG(); return 0; } @@ -125,8 +143,10 @@ void dma_unmap_sg(struct device *dev, st { if (dev->bus == &pci_bus_type) pci_unmap_sg(to_pci_dev(dev), sg, nhwentries, (int)direction); +#ifdef CONFIG_IBMVIO else if (dev->bus == &vio_bus_type) vio_unmap_sg(to_vio_dev(dev), sg, nhwentries, direction); +#endif /* CONFIG_IBMVIO */ else BUG(); } diff -puN arch/ppc64/kernel/Makefile~ppc64-dont-build-virtual-io-drivers-for-powermac arch/ppc64/kernel/Makefile --- 25/arch/ppc64/kernel/Makefile~ppc64-dont-build-virtual-io-drivers-for-powermac 2004-10-21 20:52:31.829628304 -0700 +++ 25-akpm/arch/ppc64/kernel/Makefile 2004-10-21 20:52:31.833627696 -0700 @@ -11,7 +11,7 @@ obj-y := setup.o entry.o t udbg.o binfmt_elf32.o sys_ppc32.o ioctl32.o \ ptrace32.o signal32.o rtc.o init_task.o \ lmb.o cputable.o cpu_setup_power4.o idle_power4.o \ - iommu.o sysfs.o vio.o + iommu.o sysfs.o obj-$(CONFIG_PPC_OF) += of_device.o @@ -45,6 +45,7 @@ obj-$(CONFIG_LPARCFG) += lparcfg.o obj-$(CONFIG_HVC_CONSOLE) += hvconsole.o obj-$(CONFIG_BOOTX_TEXT) += btext.o obj-$(CONFIG_HVCS) += hvcserver.o +obj-$(CONFIG_IBMVIO) += vio.o obj-$(CONFIG_PPC_PMAC) += pmac_setup.o pmac_feature.o pmac_pci.o \ pmac_time.o pmac_nvram.o pmac_low_i2c.o \ _