diff options
author | Michael Ellerman <michael@ellerman.id.au> | 2008-01-29 09:14:01 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2008-01-30 20:11:10 -0500 |
commit | 86865771ea213d756b03e1f2ff44d3f811672762 (patch) | |
tree | 8e82d63ab4cf2ea9815b4a1b0ba7dae0f0f36cf6 /arch/powerpc/platforms | |
parent | 7fc67afc436cf7f74d8cc697012696187332fc35 (diff) |
[POWERPC] Split out the IOMMU logic from cell_dma_dev_setup()
Split the IOMMU logic out from cell_dma_dev_setup() into a separate
function. If we're not using dma_direct_ops or dma_iommu_ops we don't
know what the hell's going on, so BUG.
Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/platforms')
-rw-r--r-- | arch/powerpc/platforms/cell/iommu.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/arch/powerpc/platforms/cell/iommu.c b/arch/powerpc/platforms/cell/iommu.c index b3655aa88ddb..a6e6bc1b020f 100644 --- a/arch/powerpc/platforms/cell/iommu.c +++ b/arch/powerpc/platforms/cell/iommu.c | |||
@@ -507,17 +507,12 @@ static struct cbe_iommu *cell_iommu_for_node(int nid) | |||
507 | 507 | ||
508 | static unsigned long cell_dma_direct_offset; | 508 | static unsigned long cell_dma_direct_offset; |
509 | 509 | ||
510 | static void cell_dma_dev_setup(struct device *dev) | 510 | static void cell_dma_dev_setup_iommu(struct device *dev) |
511 | { | 511 | { |
512 | struct iommu_window *window; | 512 | struct iommu_window *window; |
513 | struct cbe_iommu *iommu; | 513 | struct cbe_iommu *iommu; |
514 | struct dev_archdata *archdata = &dev->archdata; | 514 | struct dev_archdata *archdata = &dev->archdata; |
515 | 515 | ||
516 | if (get_pci_dma_ops() == &dma_direct_ops) { | ||
517 | archdata->dma_data = (void *)cell_dma_direct_offset; | ||
518 | return; | ||
519 | } | ||
520 | |||
521 | /* Current implementation uses the first window available in that | 516 | /* Current implementation uses the first window available in that |
522 | * node's iommu. We -might- do something smarter later though it may | 517 | * node's iommu. We -might- do something smarter later though it may |
523 | * never be necessary | 518 | * never be necessary |
@@ -534,6 +529,18 @@ static void cell_dma_dev_setup(struct device *dev) | |||
534 | archdata->dma_data = &window->table; | 529 | archdata->dma_data = &window->table; |
535 | } | 530 | } |
536 | 531 | ||
532 | static void cell_dma_dev_setup(struct device *dev) | ||
533 | { | ||
534 | struct dev_archdata *archdata = &dev->archdata; | ||
535 | |||
536 | if (get_pci_dma_ops() == &dma_iommu_ops) | ||
537 | cell_dma_dev_setup_iommu(dev); | ||
538 | else if (get_pci_dma_ops() == &dma_direct_ops) | ||
539 | archdata->dma_data = (void *)cell_dma_direct_offset; | ||
540 | else | ||
541 | BUG(); | ||
542 | } | ||
543 | |||
537 | static void cell_pci_dma_dev_setup(struct pci_dev *dev) | 544 | static void cell_pci_dma_dev_setup(struct pci_dev *dev) |
538 | { | 545 | { |
539 | cell_dma_dev_setup(&dev->dev); | 546 | cell_dma_dev_setup(&dev->dev); |