aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/sparc/include/asm/io-unit.h4
-rw-r--r--arch/sparc/kernel/sparc_ksyms.c3
-rw-r--r--arch/sparc/mm/io-unit.c48
3 files changed, 0 insertions, 55 deletions
diff --git a/arch/sparc/include/asm/io-unit.h b/arch/sparc/include/asm/io-unit.h
index 96823b47fd45..01ab2f613e91 100644
--- a/arch/sparc/include/asm/io-unit.h
+++ b/arch/sparc/include/asm/io-unit.h
@@ -55,8 +55,4 @@ struct iounit_struct {
55#define IOUNIT_BMAPM_START IOUNIT_BMAP2_END 55#define IOUNIT_BMAPM_START IOUNIT_BMAP2_END
56#define IOUNIT_BMAPM_END ((IOUNIT_DMA_SIZE - IOUNIT_DVMA_SIZE) >> PAGE_SHIFT) 56#define IOUNIT_BMAPM_END ((IOUNIT_DMA_SIZE - IOUNIT_DVMA_SIZE) >> PAGE_SHIFT)
57 57
58extern __u32 iounit_map_dma_init(struct sbus_bus *, int);
59#define iounit_map_dma_finish(sbus, addr, len) mmu_release_scsi_one(addr, len, sbus)
60extern __u32 iounit_map_dma_page(__u32, void *, struct sbus_bus *);
61
62#endif /* !(_SPARC_IO_UNIT_H) */ 58#endif /* !(_SPARC_IO_UNIT_H) */
diff --git a/arch/sparc/kernel/sparc_ksyms.c b/arch/sparc/kernel/sparc_ksyms.c
index f2722ee3967d..a9478dbef2e4 100644
--- a/arch/sparc/kernel/sparc_ksyms.c
+++ b/arch/sparc/kernel/sparc_ksyms.c
@@ -134,9 +134,6 @@ EXPORT_SYMBOL(set_auxio);
134EXPORT_SYMBOL(get_auxio); 134EXPORT_SYMBOL(get_auxio);
135#endif 135#endif
136EXPORT_SYMBOL(io_remap_pfn_range); 136EXPORT_SYMBOL(io_remap_pfn_range);
137 /* P3: iounit_xxx may be needed, sun4d users */
138/* EXPORT_SYMBOL(iounit_map_dma_init); */
139/* EXPORT_SYMBOL(iounit_map_dma_page); */
140 137
141#ifndef CONFIG_SMP 138#ifndef CONFIG_SMP
142EXPORT_SYMBOL(BTFIXUP_CALL(___xchg32)); 139EXPORT_SYMBOL(BTFIXUP_CALL(___xchg32));
diff --git a/arch/sparc/mm/io-unit.c b/arch/sparc/mm/io-unit.c
index caf551ad9d8c..53900230c2d2 100644
--- a/arch/sparc/mm/io-unit.c
+++ b/arch/sparc/mm/io-unit.c
@@ -267,51 +267,3 @@ void __init ld_mmu_iounit(void)
267 BTFIXUPSET_CALL(mmu_unmap_dma_area, iounit_unmap_dma_area, BTFIXUPCALL_NORM); 267 BTFIXUPSET_CALL(mmu_unmap_dma_area, iounit_unmap_dma_area, BTFIXUPCALL_NORM);
268#endif 268#endif
269} 269}
270
271__u32 iounit_map_dma_init(struct sbus_bus *sbus, int size)
272{
273 int i, j, k, npages;
274 unsigned long rotor, scan, limit;
275 unsigned long flags;
276 __u32 ret;
277 struct iounit_struct *iounit = sbus->ofdev.dev.archdata.iommu;
278
279 npages = (size + (PAGE_SIZE-1)) >> PAGE_SHIFT;
280 i = 0x0213;
281 spin_lock_irqsave(&iounit->lock, flags);
282next: j = (i & 15);
283 rotor = iounit->rotor[j - 1];
284 limit = iounit->limit[j];
285 scan = rotor;
286nexti: scan = find_next_zero_bit(iounit->bmap, limit, scan);
287 if (scan + npages > limit) {
288 if (limit != rotor) {
289 limit = rotor;
290 scan = iounit->limit[j - 1];
291 goto nexti;
292 }
293 i >>= 4;
294 if (!(i & 15))
295 panic("iounit_map_dma_init: Couldn't find free iopte slots for %d bytes\n", size);
296 goto next;
297 }
298 for (k = 1, scan++; k < npages; k++)
299 if (test_bit(scan++, iounit->bmap))
300 goto nexti;
301 iounit->rotor[j - 1] = (scan < limit) ? scan : iounit->limit[j - 1];
302 scan -= npages;
303 ret = IOUNIT_DMA_BASE + (scan << PAGE_SHIFT);
304 for (k = 0; k < npages; k++, scan++)
305 set_bit(scan, iounit->bmap);
306 spin_unlock_irqrestore(&iounit->lock, flags);
307 return ret;
308}
309
310__u32 iounit_map_dma_page(__u32 vaddr, void *addr, struct sbus_bus *sbus)
311{
312 int scan = (vaddr - IOUNIT_DMA_BASE) >> PAGE_SHIFT;
313 struct iounit_struct *iounit = sbus->ofdev.dev.archdata.iommu;
314
315 iounit->page_table[scan] = MKIOPTE(__pa(((unsigned long)addr) & PAGE_MASK));
316 return vaddr + (((unsigned long)addr) & ~PAGE_MASK);
317}