iommu: parisc: pass struct device to iommu_alloc_range

This adds struct device argument to sba_alloc_range and ccio_alloc_range, a
preparation for modifications to fix the IOMMU segment boundary problem.  This
change enables ccio_alloc_range to access to LLD's segment boundary limits.

[akpm@linux-foundation.org: coding-style fixes]
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Cc: Kyle McMartin <kyle@parisc-linux.org>
Cc: Matthew Wilcox <matthew@wil.cx>
Cc: Grant Grundler <grundler@parisc-linux.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
FUJITA Tomonori 2008-03-04 14:29:28 -08:00 committed by Linus Torvalds
parent 3715863aa1
commit 7c8cda625a
3 changed files with 7 additions and 7 deletions

View file

@ -341,7 +341,7 @@ static int ioc_count;
* of available pages for the requested size. * of available pages for the requested size.
*/ */
static int static int
ccio_alloc_range(struct ioc *ioc, size_t size) ccio_alloc_range(struct ioc *ioc, struct device *dev, size_t size)
{ {
unsigned int pages_needed = size >> IOVP_SHIFT; unsigned int pages_needed = size >> IOVP_SHIFT;
unsigned int res_idx; unsigned int res_idx;
@ -760,7 +760,7 @@ ccio_map_single(struct device *dev, void *addr, size_t size,
ioc->msingle_pages += size >> IOVP_SHIFT; ioc->msingle_pages += size >> IOVP_SHIFT;
#endif #endif
idx = ccio_alloc_range(ioc, size); idx = ccio_alloc_range(ioc, dev, size);
iovp = (dma_addr_t)MKIOVP(idx); iovp = (dma_addr_t)MKIOVP(idx);
pdir_start = &(ioc->pdir_base[idx]); pdir_start = &(ioc->pdir_base[idx]);

View file

@ -96,8 +96,8 @@ iommu_fill_pdir(struct ioc *ioc, struct scatterlist *startsg, int nents,
static inline unsigned int static inline unsigned int
iommu_coalesce_chunks(struct ioc *ioc, struct device *dev, iommu_coalesce_chunks(struct ioc *ioc, struct device *dev,
struct scatterlist *startsg, int nents, struct scatterlist *startsg, int nents,
int (*iommu_alloc_range)(struct ioc *, size_t)) int (*iommu_alloc_range)(struct ioc *, struct device *, size_t))
{ {
struct scatterlist *contig_sg; /* contig chunk head */ struct scatterlist *contig_sg; /* contig chunk head */
unsigned long dma_offset, dma_len; /* start/len of DMA stream */ unsigned long dma_offset, dma_len; /* start/len of DMA stream */
@ -166,7 +166,7 @@ iommu_coalesce_chunks(struct ioc *ioc, struct device *dev,
dma_len = ALIGN(dma_len + dma_offset, IOVP_SIZE); dma_len = ALIGN(dma_len + dma_offset, IOVP_SIZE);
sg_dma_address(contig_sg) = sg_dma_address(contig_sg) =
PIDE_FLAG PIDE_FLAG
| (iommu_alloc_range(ioc, dma_len) << IOVP_SHIFT) | (iommu_alloc_range(ioc, dev, dma_len) << IOVP_SHIFT)
| dma_offset; | dma_offset;
n_mappings++; n_mappings++;
} }

View file

@ -404,7 +404,7 @@ sba_search_bitmap(struct ioc *ioc, unsigned long bits_wanted)
* resource bit map. * resource bit map.
*/ */
static int static int
sba_alloc_range(struct ioc *ioc, size_t size) sba_alloc_range(struct ioc *ioc, struct device *dev, size_t size)
{ {
unsigned int pages_needed = size >> IOVP_SHIFT; unsigned int pages_needed = size >> IOVP_SHIFT;
#ifdef SBA_COLLECT_STATS #ifdef SBA_COLLECT_STATS
@ -710,7 +710,7 @@ sba_map_single(struct device *dev, void *addr, size_t size,
ioc->msingle_calls++; ioc->msingle_calls++;
ioc->msingle_pages += size >> IOVP_SHIFT; ioc->msingle_pages += size >> IOVP_SHIFT;
#endif #endif
pide = sba_alloc_range(ioc, size); pide = sba_alloc_range(ioc, dev, size);
iovp = (dma_addr_t) pide << IOVP_SHIFT; iovp = (dma_addr_t) pide << IOVP_SHIFT;
DBG_RUN("%s() 0x%p -> 0x%lx\n", DBG_RUN("%s() 0x%p -> 0x%lx\n",