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/include/asm/pci.h | |
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/include/asm/pci.h')
-rw-r--r-- | arch/powerpc/include/asm/pci.h | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/arch/powerpc/include/asm/pci.h b/arch/powerpc/include/asm/pci.h index a05a942b1c25..0e52c7828ea4 100644 --- a/arch/powerpc/include/asm/pci.h +++ b/arch/powerpc/include/asm/pci.h | |||
@@ -60,6 +60,14 @@ static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel) | |||
60 | return channel ? 15 : 14; | 60 | return channel ? 15 : 14; |
61 | } | 61 | } |
62 | 62 | ||
63 | #ifdef CONFIG_PCI | ||
64 | extern void set_pci_dma_ops(struct dma_mapping_ops *dma_ops); | ||
65 | extern struct dma_mapping_ops *get_pci_dma_ops(void); | ||
66 | #else /* CONFIG_PCI */ | ||
67 | #define set_pci_dma_ops(d) | ||
68 | #define get_pci_dma_ops() NULL | ||
69 | #endif | ||
70 | |||
63 | #ifdef CONFIG_PPC64 | 71 | #ifdef CONFIG_PPC64 |
64 | 72 | ||
65 | /* | 73 | /* |
@@ -70,9 +78,6 @@ static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel) | |||
70 | #define PCI_DISABLE_MWI | 78 | #define PCI_DISABLE_MWI |
71 | 79 | ||
72 | #ifdef CONFIG_PCI | 80 | #ifdef CONFIG_PCI |
73 | extern void set_pci_dma_ops(struct dma_mapping_ops *dma_ops); | ||
74 | extern struct dma_mapping_ops *get_pci_dma_ops(void); | ||
75 | |||
76 | static inline void pci_dma_burst_advice(struct pci_dev *pdev, | 81 | static inline void pci_dma_burst_advice(struct pci_dev *pdev, |
77 | enum pci_dma_burst_strategy *strat, | 82 | enum pci_dma_burst_strategy *strat, |
78 | unsigned long *strategy_parameter) | 83 | unsigned long *strategy_parameter) |
@@ -89,9 +94,6 @@ static inline void pci_dma_burst_advice(struct pci_dev *pdev, | |||
89 | *strat = PCI_DMA_BURST_MULTIPLE; | 94 | *strat = PCI_DMA_BURST_MULTIPLE; |
90 | *strategy_parameter = cacheline_size; | 95 | *strategy_parameter = cacheline_size; |
91 | } | 96 | } |
92 | #else /* CONFIG_PCI */ | ||
93 | #define set_pci_dma_ops(d) | ||
94 | #define get_pci_dma_ops() NULL | ||
95 | #endif | 97 | #endif |
96 | 98 | ||
97 | #else /* 32-bit */ | 99 | #else /* 32-bit */ |