Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

sparc: remove the sparc32_dma_ops indirection

There is no good reason to have a double indirection for the sparc32
dma ops, so remove the sparc32_dma_ops and define separate dma_map_ops
instance for the different IOMMU types.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Acked-by: David S. Miller <davem@davemloft.net>

+138 -236
+2 -46
arch/sparc/include/asm/dma.h
··· 91 91 #endif 92 92 93 93 #ifdef CONFIG_SPARC32 94 - 95 - /* Routines for data transfer buffers. */ 96 94 struct device; 97 - struct scatterlist; 98 95 99 - struct sparc32_dma_ops { 100 - __u32 (*get_scsi_one)(struct device *, char *, unsigned long); 101 - void (*get_scsi_sgl)(struct device *, struct scatterlist *, int); 102 - void (*release_scsi_one)(struct device *, __u32, unsigned long); 103 - void (*release_scsi_sgl)(struct device *, struct scatterlist *,int); 104 - #ifdef CONFIG_SBUS 105 - int (*map_dma_area)(struct device *, dma_addr_t *, unsigned long, unsigned long, int); 106 - void (*unmap_dma_area)(struct device *, unsigned long, int); 107 - #endif 108 - }; 109 - extern const struct sparc32_dma_ops *sparc32_dma_ops; 110 - 111 - #define mmu_get_scsi_one(dev,vaddr,len) \ 112 - sparc32_dma_ops->get_scsi_one(dev, vaddr, len) 113 - #define mmu_get_scsi_sgl(dev,sg,sz) \ 114 - sparc32_dma_ops->get_scsi_sgl(dev, sg, sz) 115 - #define mmu_release_scsi_one(dev,vaddr,len) \ 116 - sparc32_dma_ops->release_scsi_one(dev, vaddr,len) 117 - #define mmu_release_scsi_sgl(dev,sg,sz) \ 118 - sparc32_dma_ops->release_scsi_sgl(dev, sg, sz) 119 - 120 - #ifdef CONFIG_SBUS 121 - /* 122 - * mmu_map/unmap are provided by iommu/iounit; Invalid to call on IIep. 123 - * 124 - * The mmu_map_dma_area establishes two mappings in one go. 125 - * These mappings point to pages normally mapped at 'va' (linear address). 126 - * First mapping is for CPU visible address at 'a', uncached. 127 - * This is an alias, but it works because it is an uncached mapping. 128 - * Second mapping is for device visible address, or "bus" address. 129 - * The bus address is returned at '*pba'. 130 - * 131 - * These functions seem distinct, but are hard to split. 132 - * On sun4m, page attributes depend on the CPU type, so we have to 133 - * know if we are mapping RAM or I/O, so it has to be an additional argument 134 - * to a separate mapping function for CPU visible mappings. 135 - */ 136 - #define sbus_map_dma_area(dev,pba,va,a,len) \ 137 - sparc32_dma_ops->map_dma_area(dev, pba, va, a, len) 138 - #define sbus_unmap_dma_area(dev,ba,len) \ 139 - sparc32_dma_ops->unmap_dma_area(dev, ba, len) 140 - #endif /* CONFIG_SBUS */ 141 - 96 + unsigned long sparc_dma_alloc_resource(struct device *dev, size_t len); 97 + bool sparc_dma_free_resource(void *cpu_addr, size_t size); 142 98 #endif 143 99 144 100 #endif /* !(_ASM_SPARC_DMA_H) */
+3 -121
arch/sparc/kernel/ioport.c
··· 52 52 #include <asm/io-unit.h> 53 53 #include <asm/leon.h> 54 54 55 - const struct sparc32_dma_ops *sparc32_dma_ops; 56 - 57 55 /* This function must make sure that caches and memory are coherent after DMA 58 56 * On LEON systems without cache snooping it flushes the entire D-CACHE. 59 57 */ ··· 245 247 release_resource(res); 246 248 } 247 249 248 - static unsigned long sparc_dma_alloc_resource(struct device *dev, size_t len) 250 + unsigned long sparc_dma_alloc_resource(struct device *dev, size_t len) 249 251 { 250 252 struct resource *res; 251 253 ··· 264 266 return res->start; 265 267 } 266 268 267 - static bool sparc_dma_free_resource(void *cpu_addr, size_t size) 269 + bool sparc_dma_free_resource(void *cpu_addr, size_t size) 268 270 { 269 271 unsigned long addr = (unsigned long)cpu_addr; 270 272 struct resource *res; ··· 299 301 printk("sbus_set_sbus64: unsupported\n"); 300 302 } 301 303 EXPORT_SYMBOL(sbus_set_sbus64); 302 - 303 - /* 304 - * Allocate a chunk of memory suitable for DMA. 305 - * Typically devices use them for control blocks. 306 - * CPU may access them without any explicit flushing. 307 - */ 308 - static void *sbus_alloc_coherent(struct device *dev, size_t len, 309 - dma_addr_t *dma_addrp, gfp_t gfp, 310 - unsigned long attrs) 311 - { 312 - unsigned long len_total = PAGE_ALIGN(len); 313 - unsigned long va, addr; 314 - int order; 315 - 316 - /* XXX why are some lengths signed, others unsigned? */ 317 - if (len <= 0) { 318 - return NULL; 319 - } 320 - /* XXX So what is maxphys for us and how do drivers know it? */ 321 - if (len > 256*1024) { /* __get_free_pages() limit */ 322 - return NULL; 323 - } 324 - 325 - order = get_order(len_total); 326 - va = __get_free_pages(gfp, order); 327 - if (va == 0) 328 - goto err_nopages; 329 - 330 - addr = sparc_dma_alloc_resource(dev, len_total); 331 - if (!addr) 332 - goto err_nomem; 333 - 334 - // XXX The sbus_map_dma_area does this for us below, see comments. 335 - // srmmu_mapiorange(0, virt_to_phys(va), res->start, len_total); 336 - /* 337 - * XXX That's where sdev would be used. Currently we load 338 - * all iommu tables with the same translations. 339 - */ 340 - if (sbus_map_dma_area(dev, dma_addrp, va, addr, len_total) != 0) 341 - goto err_noiommu; 342 - 343 - return (void *)addr; 344 - 345 - err_noiommu: 346 - sparc_dma_free_resource((void *)addr, len_total); 347 - err_nomem: 348 - free_pages(va, order); 349 - err_nopages: 350 - return NULL; 351 - } 352 - 353 - static void sbus_free_coherent(struct device *dev, size_t n, void *p, 354 - dma_addr_t ba, unsigned long attrs) 355 - { 356 - struct page *pgv; 357 - 358 - n = PAGE_ALIGN(n); 359 - if (!sparc_dma_free_resource(p, n)) 360 - return; 361 - 362 - pgv = virt_to_page(p); 363 - sbus_unmap_dma_area(dev, ba, n); 364 - 365 - __free_pages(pgv, get_order(n)); 366 - } 367 - 368 - /* 369 - * Map a chunk of memory so that devices can see it. 370 - * CPU view of this memory may be inconsistent with 371 - * a device view and explicit flushing is necessary. 372 - */ 373 - static dma_addr_t sbus_map_page(struct device *dev, struct page *page, 374 - unsigned long offset, size_t len, 375 - enum dma_data_direction dir, 376 - unsigned long attrs) 377 - { 378 - void *va = page_address(page) + offset; 379 - 380 - /* XXX why are some lengths signed, others unsigned? */ 381 - if (len <= 0) { 382 - return 0; 383 - } 384 - /* XXX So what is maxphys for us and how do drivers know it? */ 385 - if (len > 256*1024) { /* __get_free_pages() limit */ 386 - return 0; 387 - } 388 - return mmu_get_scsi_one(dev, va, len); 389 - } 390 - 391 - static void sbus_unmap_page(struct device *dev, dma_addr_t ba, size_t n, 392 - enum dma_data_direction dir, unsigned long attrs) 393 - { 394 - mmu_release_scsi_one(dev, ba, n); 395 - } 396 - 397 - static int sbus_map_sg(struct device *dev, struct scatterlist *sg, int n, 398 - enum dma_data_direction dir, unsigned long attrs) 399 - { 400 - mmu_get_scsi_sgl(dev, sg, n); 401 - return n; 402 - } 403 - 404 - static void sbus_unmap_sg(struct device *dev, struct scatterlist *sg, int n, 405 - enum dma_data_direction dir, unsigned long attrs) 406 - { 407 - mmu_release_scsi_sgl(dev, sg, n); 408 - } 409 - 410 - static const struct dma_map_ops sbus_dma_ops = { 411 - .alloc = sbus_alloc_coherent, 412 - .free = sbus_free_coherent, 413 - .map_page = sbus_map_page, 414 - .unmap_page = sbus_unmap_page, 415 - .map_sg = sbus_map_sg, 416 - .unmap_sg = sbus_unmap_sg, 417 - }; 418 304 419 305 static int __init sparc_register_ioport(void) 420 306 { ··· 373 491 dma_make_coherent(paddr, PAGE_ALIGN(size)); 374 492 } 375 493 376 - const struct dma_map_ops *dma_ops = &sbus_dma_ops; 494 + const struct dma_map_ops *dma_ops; 377 495 EXPORT_SYMBOL(dma_ops); 378 496 379 497 #ifdef CONFIG_PROC_FS
+47 -18
arch/sparc/mm/io-unit.c
··· 12 12 #include <linux/mm.h> 13 13 #include <linux/highmem.h> /* pte_offset_map => kmap_atomic */ 14 14 #include <linux/bitops.h> 15 - #include <linux/scatterlist.h> 15 + #include <linux/dma-mapping.h> 16 16 #include <linux/of.h> 17 17 #include <linux/of_device.h> 18 18 ··· 140 140 return vaddr; 141 141 } 142 142 143 - static __u32 iounit_get_scsi_one(struct device *dev, char *vaddr, unsigned long len) 143 + static dma_addr_t iounit_map_page(struct device *dev, struct page *page, 144 + unsigned long offset, size_t len, enum dma_data_direction dir, 145 + unsigned long attrs) 144 146 { 147 + void *vaddr = page_address(page) + offset; 145 148 struct iounit_struct *iounit = dev->archdata.iommu; 146 149 unsigned long ret, flags; 147 150 151 + /* XXX So what is maxphys for us and how do drivers know it? */ 152 + if (!len || len > 256 * 1024) 153 + return DMA_MAPPING_ERROR; 154 + 148 155 spin_lock_irqsave(&iounit->lock, flags); 149 156 ret = iounit_get_area(iounit, (unsigned long)vaddr, len); 150 157 spin_unlock_irqrestore(&iounit->lock, flags); 151 158 return ret; 152 159 } 153 160 154 - static void iounit_get_scsi_sgl(struct device *dev, struct scatterlist *sg, int sz) 161 + static int iounit_map_sg(struct device *dev, struct scatterlist *sg, int sz, 162 + enum dma_data_direction dir, unsigned long attrs) 155 163 { 156 164 struct iounit_struct *iounit = dev->archdata.iommu; 157 165 unsigned long flags; ··· 173 165 sg = sg_next(sg); 174 166 } 175 167 spin_unlock_irqrestore(&iounit->lock, flags); 168 + return sz; 176 169 } 177 170 178 - static void iounit_release_scsi_one(struct device *dev, __u32 vaddr, unsigned long len) 171 + static void iounit_unmap_page(struct device *dev, dma_addr_t vaddr, size_t len, 172 + enum dma_data_direction dir, unsigned long attrs) 179 173 { 180 174 struct iounit_struct *iounit = dev->archdata.iommu; 181 175 unsigned long flags; ··· 191 181 spin_unlock_irqrestore(&iounit->lock, flags); 192 182 } 193 183 194 - static void iounit_release_scsi_sgl(struct device *dev, struct scatterlist *sg, int sz) 184 + static void iounit_unmap_sg(struct device *dev, struct scatterlist *sg, int sz, 185 + enum dma_data_direction dir, unsigned long attrs) 195 186 { 196 187 struct iounit_struct *iounit = dev->archdata.iommu; 197 188 unsigned long flags; ··· 212 201 } 213 202 214 203 #ifdef CONFIG_SBUS 215 - static int iounit_map_dma_area(struct device *dev, dma_addr_t *pba, unsigned long va, unsigned long addr, int len) 204 + static void *iounit_alloc(struct device *dev, size_t len, 205 + dma_addr_t *dma_handle, gfp_t gfp, unsigned long attrs) 216 206 { 217 207 struct iounit_struct *iounit = dev->archdata.iommu; 218 - unsigned long page, end; 208 + unsigned long va, addr, page, end, ret; 219 209 pgprot_t dvma_prot; 220 210 iopte_t __iomem *iopte; 221 211 222 - *pba = addr; 212 + /* XXX So what is maxphys for us and how do drivers know it? */ 213 + if (!len || len > 256 * 1024) 214 + return NULL; 215 + 216 + len = PAGE_ALIGN(len); 217 + va = __get_free_pages(gfp, get_order(len)); 218 + if (!va) 219 + return NULL; 220 + 221 + addr = ret = sparc_dma_alloc_resource(dev, len); 222 + if (!addr) 223 + goto out_free_pages; 224 + *dma_handle = addr; 223 225 224 226 dvma_prot = __pgprot(SRMMU_CACHE | SRMMU_ET_PTE | SRMMU_PRIV); 225 227 end = PAGE_ALIGN((addr + len)); ··· 261 237 flush_cache_all(); 262 238 flush_tlb_all(); 263 239 264 - return 0; 240 + return (void *)ret; 241 + 242 + out_free_pages: 243 + free_pages(va, get_order(len)); 244 + return NULL; 265 245 } 266 246 267 - static void iounit_unmap_dma_area(struct device *dev, unsigned long addr, int len) 247 + static void iounit_free(struct device *dev, size_t size, void *cpu_addr, 248 + dma_addr_t dma_addr, unsigned long attrs) 268 249 { 269 250 /* XXX Somebody please fill this in */ 270 251 } 271 252 #endif 272 253 273 - static const struct sparc32_dma_ops iounit_dma_ops = { 274 - .get_scsi_one = iounit_get_scsi_one, 275 - .get_scsi_sgl = iounit_get_scsi_sgl, 276 - .release_scsi_one = iounit_release_scsi_one, 277 - .release_scsi_sgl = iounit_release_scsi_sgl, 254 + static const struct dma_map_ops iounit_dma_ops = { 278 255 #ifdef CONFIG_SBUS 279 - .map_dma_area = iounit_map_dma_area, 280 - .unmap_dma_area = iounit_unmap_dma_area, 256 + .alloc = iounit_alloc, 257 + .free = iounit_free, 281 258 #endif 259 + .map_page = iounit_map_page, 260 + .unmap_page = iounit_unmap_page, 261 + .map_sg = iounit_map_sg, 262 + .unmap_sg = iounit_unmap_sg, 282 263 }; 283 264 284 265 void __init ld_mmu_iounit(void) 285 266 { 286 - sparc32_dma_ops = &iounit_dma_ops; 267 + dma_ops = &iounit_dma_ops; 287 268 }
+86 -51
arch/sparc/mm/iommu.c
··· 13 13 #include <linux/mm.h> 14 14 #include <linux/slab.h> 15 15 #include <linux/highmem.h> /* pte_offset_map => kmap_atomic */ 16 - #include <linux/scatterlist.h> 16 + #include <linux/dma-mapping.h> 17 17 #include <linux/of.h> 18 18 #include <linux/of_device.h> 19 19 ··· 205 205 return busa0; 206 206 } 207 207 208 - static u32 iommu_get_scsi_one(struct device *dev, char *vaddr, unsigned int len) 208 + static dma_addr_t __sbus_iommu_map_page(struct device *dev, struct page *page, 209 + unsigned long offset, size_t len) 209 210 { 210 - unsigned long off; 211 - int npages; 212 - struct page *page; 213 - u32 busa; 214 - 215 - off = (unsigned long)vaddr & ~PAGE_MASK; 216 - npages = (off + len + PAGE_SIZE-1) >> PAGE_SHIFT; 217 - page = virt_to_page((unsigned long)vaddr & PAGE_MASK); 218 - busa = iommu_get_one(dev, page, npages); 219 - return busa + off; 211 + void *vaddr = page_address(page) + offset; 212 + unsigned long off = (unsigned long)vaddr & ~PAGE_MASK; 213 + unsigned long npages = (off + len + PAGE_SIZE - 1) >> PAGE_SHIFT; 214 + 215 + /* XXX So what is maxphys for us and how do drivers know it? */ 216 + if (!len || len > 256 * 1024) 217 + return DMA_MAPPING_ERROR; 218 + return iommu_get_one(dev, virt_to_page(vaddr), npages) + off; 220 219 } 221 220 222 - static __u32 iommu_get_scsi_one_gflush(struct device *dev, char *vaddr, unsigned long len) 221 + static dma_addr_t sbus_iommu_map_page_gflush(struct device *dev, 222 + struct page *page, unsigned long offset, size_t len, 223 + enum dma_data_direction dir, unsigned long attrs) 223 224 { 224 225 flush_page_for_dma(0); 225 - return iommu_get_scsi_one(dev, vaddr, len); 226 + return __sbus_iommu_map_page(dev, page, offset, len); 226 227 } 227 228 228 - static __u32 iommu_get_scsi_one_pflush(struct device *dev, char *vaddr, unsigned long len) 229 + static dma_addr_t sbus_iommu_map_page_pflush(struct device *dev, 230 + struct page *page, unsigned long offset, size_t len, 231 + enum dma_data_direction dir, unsigned long attrs) 229 232 { 230 - unsigned long page = ((unsigned long) vaddr) & PAGE_MASK; 233 + void *vaddr = page_address(page) + offset; 234 + unsigned long p = ((unsigned long)vaddr) & PAGE_MASK; 231 235 232 - while(page < ((unsigned long)(vaddr + len))) { 233 - flush_page_for_dma(page); 234 - page += PAGE_SIZE; 236 + while (p < (unsigned long)vaddr + len) { 237 + flush_page_for_dma(p); 238 + p += PAGE_SIZE; 235 239 } 236 - return iommu_get_scsi_one(dev, vaddr, len); 240 + 241 + return __sbus_iommu_map_page(dev, page, offset, len); 237 242 } 238 243 239 - static void iommu_get_scsi_sgl_gflush(struct device *dev, struct scatterlist *sg, int sz) 244 + static int sbus_iommu_map_sg_gflush(struct device *dev, struct scatterlist *sg, 245 + int sz, enum dma_data_direction dir, unsigned long attrs) 240 246 { 241 247 int n; 242 248 ··· 254 248 sg->dma_length = sg->length; 255 249 sg = sg_next(sg); 256 250 } 251 + 252 + return sz; 257 253 } 258 254 259 - static void iommu_get_scsi_sgl_pflush(struct device *dev, struct scatterlist *sg, int sz) 255 + static int sbus_iommu_map_sg_pflush(struct device *dev, struct scatterlist *sg, 256 + int sz, enum dma_data_direction dir, unsigned long attrs) 260 257 { 261 258 unsigned long page, oldpage = 0; 262 259 int n, i; ··· 288 279 sg->dma_length = sg->length; 289 280 sg = sg_next(sg); 290 281 } 282 + 283 + return sz; 291 284 } 292 285 293 286 static void iommu_release_one(struct device *dev, u32 busa, int npages) ··· 308 297 bit_map_clear(&iommu->usemap, ioptex, npages); 309 298 } 310 299 311 - static void iommu_release_scsi_one(struct device *dev, __u32 vaddr, unsigned long len) 300 + static void sbus_iommu_unmap_page(struct device *dev, dma_addr_t dma_addr, 301 + size_t len, enum dma_data_direction dir, unsigned long attrs) 312 302 { 313 - unsigned long off; 303 + unsigned long off = dma_addr & ~PAGE_MASK; 314 304 int npages; 315 305 316 - off = vaddr & ~PAGE_MASK; 317 306 npages = (off + len + PAGE_SIZE-1) >> PAGE_SHIFT; 318 - iommu_release_one(dev, vaddr & PAGE_MASK, npages); 307 + iommu_release_one(dev, dma_addr & PAGE_MASK, npages); 319 308 } 320 309 321 - static void iommu_release_scsi_sgl(struct device *dev, struct scatterlist *sg, int sz) 310 + static void sbus_iommu_unmap_sg(struct device *dev, struct scatterlist *sg, 311 + int sz, enum dma_data_direction dir, unsigned long attrs) 322 312 { 323 313 int n; 324 314 325 315 while(sz != 0) { 326 316 --sz; 327 - 328 317 n = (sg->length + sg->offset + PAGE_SIZE-1) >> PAGE_SHIFT; 329 318 iommu_release_one(dev, sg->dma_address & PAGE_MASK, n); 330 319 sg->dma_address = 0x21212121; ··· 333 322 } 334 323 335 324 #ifdef CONFIG_SBUS 336 - static int iommu_map_dma_area(struct device *dev, dma_addr_t *pba, unsigned long va, 337 - unsigned long addr, int len) 325 + static void *sbus_iommu_alloc(struct device *dev, size_t len, 326 + dma_addr_t *dma_handle, gfp_t gfp, unsigned long attrs) 338 327 { 339 328 struct iommu_struct *iommu = dev->archdata.iommu; 340 - unsigned long page, end; 329 + unsigned long va, addr, page, end, ret; 341 330 iopte_t *iopte = iommu->page_table; 342 331 iopte_t *first; 343 332 int ioptex; 333 + 334 + /* XXX So what is maxphys for us and how do drivers know it? */ 335 + if (!len || len > 256 * 1024) 336 + return NULL; 337 + 338 + len = PAGE_ALIGN(len); 339 + va = __get_free_pages(gfp, get_order(len)); 340 + if (va == 0) 341 + return NULL; 342 + 343 + addr = ret = sparc_dma_alloc_resource(dev, len); 344 + if (!addr) 345 + goto out_free_pages; 344 346 345 347 BUG_ON((va & ~PAGE_MASK) != 0); 346 348 BUG_ON((addr & ~PAGE_MASK) != 0); ··· 409 385 flush_tlb_all(); 410 386 iommu_invalidate(iommu->regs); 411 387 412 - *pba = iommu->start + (ioptex << PAGE_SHIFT); 413 - return 0; 388 + *dma_handle = iommu->start + (ioptex << PAGE_SHIFT); 389 + return (void *)ret; 390 + 391 + out_free_pages: 392 + free_pages(va, get_order(len)); 393 + return NULL; 414 394 } 415 395 416 - static void iommu_unmap_dma_area(struct device *dev, unsigned long busa, int len) 396 + static void sbus_iommu_free(struct device *dev, size_t len, void *cpu_addr, 397 + dma_addr_t busa, unsigned long attrs) 417 398 { 418 399 struct iommu_struct *iommu = dev->archdata.iommu; 419 400 iopte_t *iopte = iommu->page_table; 420 - unsigned long end; 401 + struct page *page = virt_to_page(cpu_addr); 421 402 int ioptex = (busa - iommu->start) >> PAGE_SHIFT; 403 + unsigned long end; 404 + 405 + if (!sparc_dma_free_resource(cpu_addr, len)) 406 + return; 422 407 423 408 BUG_ON((busa & ~PAGE_MASK) != 0); 424 409 BUG_ON((len & ~PAGE_MASK) != 0); ··· 441 408 flush_tlb_all(); 442 409 iommu_invalidate(iommu->regs); 443 410 bit_map_clear(&iommu->usemap, ioptex, len >> PAGE_SHIFT); 411 + 412 + __free_pages(page, get_order(len)); 444 413 } 445 414 #endif 446 415 447 - static const struct sparc32_dma_ops iommu_dma_gflush_ops = { 448 - .get_scsi_one = iommu_get_scsi_one_gflush, 449 - .get_scsi_sgl = iommu_get_scsi_sgl_gflush, 450 - .release_scsi_one = iommu_release_scsi_one, 451 - .release_scsi_sgl = iommu_release_scsi_sgl, 416 + static const struct dma_map_ops sbus_iommu_dma_gflush_ops = { 452 417 #ifdef CONFIG_SBUS 453 - .map_dma_area = iommu_map_dma_area, 454 - .unmap_dma_area = iommu_unmap_dma_area, 418 + .alloc = sbus_iommu_alloc, 419 + .free = sbus_iommu_free, 455 420 #endif 421 + .map_page = sbus_iommu_map_page_gflush, 422 + .unmap_page = sbus_iommu_unmap_page, 423 + .map_sg = sbus_iommu_map_sg_gflush, 424 + .unmap_sg = sbus_iommu_unmap_sg, 456 425 }; 457 426 458 - static const struct sparc32_dma_ops iommu_dma_pflush_ops = { 459 - .get_scsi_one = iommu_get_scsi_one_pflush, 460 - .get_scsi_sgl = iommu_get_scsi_sgl_pflush, 461 - .release_scsi_one = iommu_release_scsi_one, 462 - .release_scsi_sgl = iommu_release_scsi_sgl, 427 + static const struct dma_map_ops sbus_iommu_dma_pflush_ops = { 463 428 #ifdef CONFIG_SBUS 464 - .map_dma_area = iommu_map_dma_area, 465 - .unmap_dma_area = iommu_unmap_dma_area, 429 + .alloc = sbus_iommu_alloc, 430 + .free = sbus_iommu_free, 466 431 #endif 432 + .map_page = sbus_iommu_map_page_pflush, 433 + .unmap_page = sbus_iommu_unmap_page, 434 + .map_sg = sbus_iommu_map_sg_pflush, 435 + .unmap_sg = sbus_iommu_unmap_sg, 467 436 }; 468 437 469 438 void __init ld_mmu_iommu(void) 470 439 { 471 440 if (flush_page_for_dma_global) { 472 441 /* flush_page_for_dma flushes everything, no matter of what page is it */ 473 - sparc32_dma_ops = &iommu_dma_gflush_ops; 442 + dma_ops = &sbus_iommu_dma_gflush_ops; 474 443 } else { 475 - sparc32_dma_ops = &iommu_dma_pflush_ops; 444 + dma_ops = &sbus_iommu_dma_pflush_ops; 476 445 } 477 446 478 447 if (viking_mxcc_present || srmmu_modtype == HyperSparc) {