powerpc/cell: cell_dma_dev_setup_iommu() return the iommu table
Make cell_dma_dev_setup_iommu() return a pointer to the struct iommu_table (or NULL if no table can be found) rather than putting this pointer into dev->archdata.dma_data (let the caller do that), and rename this function to cell_get_iommu_table() to reflect this change. This will allow us to get the iommu table for a device that doesn't have the table in the archdata. Signed-off-by: Mark Nelson <markn@au1.ibm.com> Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
committed by
Benjamin Herrenschmidt
parent
3affedc4e1
commit
7e5f810503
@@ -540,7 +540,7 @@ static unsigned long cell_dma_direct_offset;
|
|||||||
static unsigned long dma_iommu_fixed_base;
|
static unsigned long dma_iommu_fixed_base;
|
||||||
struct dma_mapping_ops dma_iommu_fixed_ops;
|
struct dma_mapping_ops dma_iommu_fixed_ops;
|
||||||
|
|
||||||
static void cell_dma_dev_setup_iommu(struct device *dev)
|
static struct iommu_table *cell_get_iommu_table(struct device *dev)
|
||||||
{
|
{
|
||||||
struct iommu_window *window;
|
struct iommu_window *window;
|
||||||
struct cbe_iommu *iommu;
|
struct cbe_iommu *iommu;
|
||||||
@@ -555,11 +555,11 @@ static void cell_dma_dev_setup_iommu(struct device *dev)
|
|||||||
printk(KERN_ERR "iommu: missing iommu for %s (node %d)\n",
|
printk(KERN_ERR "iommu: missing iommu for %s (node %d)\n",
|
||||||
archdata->of_node ? archdata->of_node->full_name : "?",
|
archdata->of_node ? archdata->of_node->full_name : "?",
|
||||||
archdata->numa_node);
|
archdata->numa_node);
|
||||||
return;
|
return NULL;
|
||||||
}
|
}
|
||||||
window = list_entry(iommu->windows.next, struct iommu_window, list);
|
window = list_entry(iommu->windows.next, struct iommu_window, list);
|
||||||
|
|
||||||
archdata->dma_data = &window->table;
|
return &window->table;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cell_dma_dev_setup_fixed(struct device *dev);
|
static void cell_dma_dev_setup_fixed(struct device *dev);
|
||||||
@@ -572,7 +572,7 @@ static void cell_dma_dev_setup(struct device *dev)
|
|||||||
if (get_dma_ops(dev) == &dma_iommu_fixed_ops)
|
if (get_dma_ops(dev) == &dma_iommu_fixed_ops)
|
||||||
cell_dma_dev_setup_fixed(dev);
|
cell_dma_dev_setup_fixed(dev);
|
||||||
else if (get_pci_dma_ops() == &dma_iommu_ops)
|
else if (get_pci_dma_ops() == &dma_iommu_ops)
|
||||||
cell_dma_dev_setup_iommu(dev);
|
archdata->dma_data = cell_get_iommu_table(dev);
|
||||||
else if (get_pci_dma_ops() == &dma_direct_ops)
|
else if (get_pci_dma_ops() == &dma_direct_ops)
|
||||||
archdata->dma_data = (void *)cell_dma_direct_offset;
|
archdata->dma_data = (void *)cell_dma_direct_offset;
|
||||||
else
|
else
|
||||||
|
Reference in New Issue
Block a user