diff options
author | Becky Bruce <beckyb@kernel.crashing.org> | 2009-09-21 04:26:35 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2009-09-24 01:31:43 -0400 |
commit | 738ef42e32fe95553a424c04016b936c9f6c9afb (patch) | |
tree | f45f21a92eacbb22bd3223c5ac725473c6ec1d72 /arch/powerpc/include | |
parent | 1cebd7a0f62804ca24f7b7b35e8105000b9e879a (diff) |
powerpc: Change archdata dma_data to a union
Sometimes this is used to hold a simple offset, and sometimes
it is used to hold a pointer. This patch changes it to a union containing
void * and dma_addr_t. get/set accessors are also provided, because it was
getting a bit ugly to get to the actual data.
Signed-off-by: Becky Bruce <beckyb@kernel.crashing.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/include')
-rw-r--r-- | arch/powerpc/include/asm/device.h | 11 | ||||
-rw-r--r-- | arch/powerpc/include/asm/dma-mapping.h | 10 | ||||
-rw-r--r-- | arch/powerpc/include/asm/iommu.h | 10 |
3 files changed, 28 insertions, 3 deletions
diff --git a/arch/powerpc/include/asm/device.h b/arch/powerpc/include/asm/device.h index 9dade15d1ab4..6d94d27ed850 100644 --- a/arch/powerpc/include/asm/device.h +++ b/arch/powerpc/include/asm/device.h | |||
@@ -15,7 +15,16 @@ struct dev_archdata { | |||
15 | 15 | ||
16 | /* DMA operations on that device */ | 16 | /* DMA operations on that device */ |
17 | struct dma_map_ops *dma_ops; | 17 | struct dma_map_ops *dma_ops; |
18 | void *dma_data; | 18 | |
19 | /* | ||
20 | * When an iommu is in use, dma_data is used as a ptr to the base of the | ||
21 | * iommu_table. Otherwise, it is a simple numerical offset. | ||
22 | */ | ||
23 | union { | ||
24 | dma_addr_t dma_offset; | ||
25 | void *iommu_table_base; | ||
26 | } dma_data; | ||
27 | |||
19 | #ifdef CONFIG_SWIOTLB | 28 | #ifdef CONFIG_SWIOTLB |
20 | dma_addr_t max_direct_dma_addr; | 29 | dma_addr_t max_direct_dma_addr; |
21 | #endif | 30 | #endif |
diff --git a/arch/powerpc/include/asm/dma-mapping.h b/arch/powerpc/include/asm/dma-mapping.h index 34b919fe8cda..e281daebddca 100644 --- a/arch/powerpc/include/asm/dma-mapping.h +++ b/arch/powerpc/include/asm/dma-mapping.h | |||
@@ -97,14 +97,20 @@ static inline void set_dma_ops(struct device *dev, struct dma_map_ops *ops) | |||
97 | * swiotlb use this function, but it is typically not used by implementations | 97 | * swiotlb use this function, but it is typically not used by implementations |
98 | * with an iommu. | 98 | * with an iommu. |
99 | */ | 99 | */ |
100 | static inline unsigned long get_dma_offset(struct device *dev) | 100 | static inline dma_addr_t get_dma_offset(struct device *dev) |
101 | { | 101 | { |
102 | if (dev) | 102 | if (dev) |
103 | return (unsigned long)dev->archdata.dma_data; | 103 | return dev->archdata.dma_data.dma_offset; |
104 | 104 | ||
105 | return PCI_DRAM_OFFSET; | 105 | return PCI_DRAM_OFFSET; |
106 | } | 106 | } |
107 | 107 | ||
108 | static inline void set_dma_offset(struct device *dev, dma_addr_t off) | ||
109 | { | ||
110 | if (dev) | ||
111 | dev->archdata.dma_data.dma_offset = off; | ||
112 | } | ||
113 | |||
108 | /* this will be removed soon */ | 114 | /* this will be removed soon */ |
109 | #define flush_write_buffers() | 115 | #define flush_write_buffers() |
110 | 116 | ||
diff --git a/arch/powerpc/include/asm/iommu.h b/arch/powerpc/include/asm/iommu.h index 7464c0daddd1..edfc9803ec91 100644 --- a/arch/powerpc/include/asm/iommu.h +++ b/arch/powerpc/include/asm/iommu.h | |||
@@ -70,6 +70,16 @@ struct iommu_table { | |||
70 | 70 | ||
71 | struct scatterlist; | 71 | struct scatterlist; |
72 | 72 | ||
73 | static inline void set_iommu_table_base(struct device *dev, void *base) | ||
74 | { | ||
75 | dev->archdata.dma_data.iommu_table_base = base; | ||
76 | } | ||
77 | |||
78 | static inline void *get_iommu_table_base(struct device *dev) | ||
79 | { | ||
80 | return dev->archdata.dma_data.iommu_table_base; | ||
81 | } | ||
82 | |||
73 | /* Frees table for an individual device node */ | 83 | /* Frees table for an individual device node */ |
74 | extern void iommu_free_table(struct iommu_table *tbl, const char *node_name); | 84 | extern void iommu_free_table(struct iommu_table *tbl, const char *node_name); |
75 | 85 | ||