diff options
author | Becky Bruce <becky.bruce@freescale.com> | 2008-09-12 06:34:46 -0400 |
---|---|---|
committer | Kumar Gala <galak@kernel.crashing.org> | 2008-09-24 17:26:45 -0400 |
commit | 4fc665b88a79a45bae8bbf3a05563c27c7337c3d (patch) | |
tree | ca668c2fab7c3a4d62b92174f4a5fcae2625cdd1 /arch/powerpc/kernel/pci_32.c | |
parent | 8fae0353247530d2124b2419052fa6120462fa99 (diff) |
powerpc: Merge 32 and 64-bit dma code
We essentially adopt the 64-bit dma code, with some changes to support
32-bit systems, including HIGHMEM. dma functions on 32-bit are now
invoked via accessor functions which call the correct op for a device based
on archdata dma_ops. If there is no archdata dma_ops, this defaults
to dma_direct_ops.
In addition, the dma_map/unmap_page functions are added to dma_ops
because we can't just fall back on map/unmap_single when HIGHMEM is
enabled. In the case of dma_direct_*, we stop using map/unmap_single
and just use the page version - this saves a lot of ugly
ifdeffing. We leave map/unmap_single in the dma_ops definition,
though, because they are needed by the iommu code, which does not
implement map/unmap_page. Ideally, going forward, we will completely
eliminate map/unmap_single and just have map/unmap_page, if it's
workable for 64-bit.
Signed-off-by: Becky Bruce <becky.bruce@freescale.com>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/kernel/pci_32.c')
-rw-r--r-- | arch/powerpc/kernel/pci_32.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/pci_32.c b/arch/powerpc/kernel/pci_32.c index 88db4ffaf11c..174b77ee18ff 100644 --- a/arch/powerpc/kernel/pci_32.c +++ b/arch/powerpc/kernel/pci_32.c | |||
@@ -424,6 +424,7 @@ void __devinit pcibios_do_bus_setup(struct pci_bus *bus) | |||
424 | unsigned long io_offset; | 424 | unsigned long io_offset; |
425 | struct resource *res; | 425 | struct resource *res; |
426 | int i; | 426 | int i; |
427 | struct pci_dev *dev; | ||
427 | 428 | ||
428 | /* Hookup PHB resources */ | 429 | /* Hookup PHB resources */ |
429 | io_offset = (unsigned long)hose->io_base_virt - isa_io_base; | 430 | io_offset = (unsigned long)hose->io_base_virt - isa_io_base; |
@@ -457,6 +458,12 @@ void __devinit pcibios_do_bus_setup(struct pci_bus *bus) | |||
457 | bus->resource[i+1] = res; | 458 | bus->resource[i+1] = res; |
458 | } | 459 | } |
459 | } | 460 | } |
461 | |||
462 | if (ppc_md.pci_dma_bus_setup) | ||
463 | ppc_md.pci_dma_bus_setup(bus); | ||
464 | |||
465 | list_for_each_entry(dev, &bus->devices, bus_list) | ||
466 | pcibios_setup_new_device(dev); | ||
460 | } | 467 | } |
461 | 468 | ||
462 | /* the next one is stolen from the alpha port... */ | 469 | /* the next one is stolen from the alpha port... */ |