1 /* 2 * linux/arch/alpha/kernel/pci_iommu.c 3 */ 4 5 #include <linux/kernel.h> 6 #include <linux/mm.h> 7 #include <linux/pci.h> 8 #include <linux/slab.h> 9 #include <linux/bootmem.h> 10 #include <linux/scatterlist.h> 11 #include <linux/log2.h> 12 #include <linux/dma-mapping.h> 13 #include <linux/iommu-helper.h> 14 15 #include <asm/io.h> 16 #include <asm/hwrpb.h> 17 18 #include "proto.h" 19 #include "pci_impl.h" 20 21 22 #define DEBUG_ALLOC 0 23 #if DEBUG_ALLOC > 0 24 # define DBGA(args...) printk(KERN_DEBUG args) 25 #else 26 # define DBGA(args...) 27 #endif 28 #if DEBUG_ALLOC > 1 29 # define DBGA2(args...) printk(KERN_DEBUG args) 30 #else 31 # define DBGA2(args...) 32 #endif 33 34 #define DEBUG_NODIRECT 0 35 36 #define ISA_DMA_MASK 0x00ffffff 37 38 static inline unsigned long 39 mk_iommu_pte(unsigned long paddr) 40 { 41 return (paddr >> (PAGE_SHIFT-1)) | 1; 42 } 43 44 /* Return the minimum of MAX or the first power of two larger 45 than main memory. */ 46 47 unsigned long 48 size_for_memory(unsigned long max) 49 { 50 unsigned long mem = max_low_pfn << PAGE_SHIFT; 51 if (mem < max) 52 max = roundup_pow_of_two(mem); 53 return max; 54 } 55 56 struct pci_iommu_arena * __init 57 iommu_arena_new_node(int nid, struct pci_controller *hose, dma_addr_t base, 58 unsigned long window_size, unsigned long align) 59 { 60 unsigned long mem_size; 61 struct pci_iommu_arena *arena; 62 63 mem_size = window_size / (PAGE_SIZE / sizeof(unsigned long)); 64 65 /* Note that the TLB lookup logic uses bitwise concatenation, 66 not addition, so the required arena alignment is based on 67 the size of the window. Retain the align parameter so that 68 particular systems can over-align the arena. */ 69 if (align < mem_size) 70 align = mem_size; 71 72 73 #ifdef CONFIG_DISCONTIGMEM 74 75 arena = alloc_bootmem_node(NODE_DATA(nid), sizeof(*arena)); 76 if (!NODE_DATA(nid) || !arena) { 77 printk("%s: couldn't allocate arena from node %d\n" 78 " falling back to system-wide allocation\n", 79 __func__, nid); 80 arena = alloc_bootmem(sizeof(*arena)); 81 } 82 83 arena->ptes = __alloc_bootmem_node(NODE_DATA(nid), mem_size, align, 0); 84 if (!NODE_DATA(nid) || !arena->ptes) { 85 printk("%s: couldn't allocate arena ptes from node %d\n" 86 " falling back to system-wide allocation\n", 87 __func__, nid); 88 arena->ptes = __alloc_bootmem(mem_size, align, 0); 89 } 90 91 #else /* CONFIG_DISCONTIGMEM */ 92 93 arena = alloc_bootmem(sizeof(*arena)); 94 arena->ptes = __alloc_bootmem(mem_size, align, 0); 95 96 #endif /* CONFIG_DISCONTIGMEM */ 97 98 spin_lock_init(&arena->lock); 99 arena->hose = hose; 100 arena->dma_base = base; 101 arena->size = window_size; 102 arena->next_entry = 0; 103 104 /* Align allocations to a multiple of a page size. Not needed 105 unless there are chip bugs. */ 106 arena->align_entry = 1; 107 108 return arena; 109 } 110 111 struct pci_iommu_arena * __init 112 iommu_arena_new(struct pci_controller *hose, dma_addr_t base, 113 unsigned long window_size, unsigned long align) 114 { 115 return iommu_arena_new_node(0, hose, base, window_size, align); 116 } 117 118 /* Must be called with the arena lock held */ 119 static long 120 iommu_arena_find_pages(struct device *dev, struct pci_iommu_arena *arena, 121 long n, long mask) 122 { 123 unsigned long *ptes; 124 long i, p, nent; 125 int pass = 0; 126 unsigned long base; 127 unsigned long boundary_size; 128 129 base = arena->dma_base >> PAGE_SHIFT; 130 if (dev) { 131 boundary_size = dma_get_seg_boundary(dev) + 1; 132 boundary_size >>= PAGE_SHIFT; 133 } else { 134 boundary_size = 1UL << (32 - PAGE_SHIFT); 135 } 136 137 /* Search forward for the first mask-aligned sequence of N free ptes */ 138 ptes = arena->ptes; 139 nent = arena->size >> PAGE_SHIFT; 140 p = ALIGN(arena->next_entry, mask + 1); 141 i = 0; 142 143 again: 144 while (i < n && p+i < nent) { 145 if (!i && iommu_is_span_boundary(p, n, base, boundary_size)) { 146 p = ALIGN(p + 1, mask + 1); 147 goto again; 148 } 149 150 if (ptes[p+i]) 151 p = ALIGN(p + i + 1, mask + 1), i = 0; 152 else 153 i = i + 1; 154 } 155 156 if (i < n) { 157 if (pass < 1) { 158 /* 159 * Reached the end. Flush the TLB and restart 160 * the search from the beginning. 161 */ 162 alpha_mv.mv_pci_tbi(arena->hose, 0, -1); 163 164 pass++; 165 p = 0; 166 i = 0; 167 goto again; 168 } else 169 return -1; 170 } 171 172 /* Success. It's the responsibility of the caller to mark them 173 in use before releasing the lock */ 174 return p; 175 } 176 177 static long 178 iommu_arena_alloc(struct device *dev, struct pci_iommu_arena *arena, long n, 179 unsigned int align) 180 { 181 unsigned long flags; 182 unsigned long *ptes; 183 long i, p, mask; 184 185 spin_lock_irqsave(&arena->lock, flags); 186 187 /* Search for N empty ptes */ 188 ptes = arena->ptes; 189 mask = max(align, arena->align_entry) - 1; 190 p = iommu_arena_find_pages(dev, arena, n, mask); 191 if (p < 0) { 192 spin_unlock_irqrestore(&arena->lock, flags); 193 return -1; 194 } 195 196 /* Success. Mark them all in use, ie not zero and invalid 197 for the iommu tlb that could load them from under us. 198 The chip specific bits will fill this in with something 199 kosher when we return. */ 200 for (i = 0; i < n; ++i) 201 ptes[p+i] = IOMMU_INVALID_PTE; 202 203 arena->next_entry = p + n; 204 spin_unlock_irqrestore(&arena->lock, flags); 205 206 return p; 207 } 208 209 static void 210 iommu_arena_free(struct pci_iommu_arena *arena, long ofs, long n) 211 { 212 unsigned long *p; 213 long i; 214 215 p = arena->ptes + ofs; 216 for (i = 0; i < n; ++i) 217 p[i] = 0; 218 } 219 220 /* True if the machine supports DAC addressing, and DEV can 221 make use of it given MASK. */ 222 static int pci_dac_dma_supported(struct pci_dev *hwdev, u64 mask); 223 224 /* Map a single buffer of the indicated size for PCI DMA in streaming 225 mode. The 32-bit PCI bus mastering address to use is returned. 226 Once the device is given the dma address, the device owns this memory 227 until either pci_unmap_single or pci_dma_sync_single is performed. */ 228 229 static dma_addr_t 230 pci_map_single_1(struct pci_dev *pdev, void *cpu_addr, size_t size, 231 int dac_allowed) 232 { 233 struct pci_controller *hose = pdev ? pdev->sysdata : pci_isa_hose; 234 dma_addr_t max_dma = pdev ? pdev->dma_mask : ISA_DMA_MASK; 235 struct pci_iommu_arena *arena; 236 long npages, dma_ofs, i; 237 unsigned long paddr; 238 dma_addr_t ret; 239 unsigned int align = 0; 240 struct device *dev = pdev ? &pdev->dev : NULL; 241 242 paddr = __pa(cpu_addr); 243 244 #if !DEBUG_NODIRECT 245 /* First check to see if we can use the direct map window. */ 246 if (paddr + size + __direct_map_base - 1 <= max_dma 247 && paddr + size <= __direct_map_size) { 248 ret = paddr + __direct_map_base; 249 250 DBGA2("pci_map_single: [%p,%zx] -> direct %llx from %p\n", 251 cpu_addr, size, ret, __builtin_return_address(0)); 252 253 return ret; 254 } 255 #endif 256 257 /* Next, use DAC if selected earlier. */ 258 if (dac_allowed) { 259 ret = paddr + alpha_mv.pci_dac_offset; 260 261 DBGA2("pci_map_single: [%p,%zx] -> DAC %llx from %p\n", 262 cpu_addr, size, ret, __builtin_return_address(0)); 263 264 return ret; 265 } 266 267 /* If the machine doesn't define a pci_tbi routine, we have to 268 assume it doesn't support sg mapping, and, since we tried to 269 use direct_map above, it now must be considered an error. */ 270 if (! alpha_mv.mv_pci_tbi) { 271 printk_once(KERN_WARNING "pci_map_single: no HW sg\n"); 272 return 0; 273 } 274 275 arena = hose->sg_pci; 276 if (!arena || arena->dma_base + arena->size - 1 > max_dma) 277 arena = hose->sg_isa; 278 279 npages = iommu_num_pages(paddr, size, PAGE_SIZE); 280 281 /* Force allocation to 64KB boundary for ISA bridges. */ 282 if (pdev && pdev == isa_bridge) 283 align = 8; 284 dma_ofs = iommu_arena_alloc(dev, arena, npages, align); 285 if (dma_ofs < 0) { 286 printk(KERN_WARNING "pci_map_single failed: " 287 "could not allocate dma page tables\n"); 288 return 0; 289 } 290 291 paddr &= PAGE_MASK; 292 for (i = 0; i < npages; ++i, paddr += PAGE_SIZE) 293 arena->ptes[i + dma_ofs] = mk_iommu_pte(paddr); 294 295 ret = arena->dma_base + dma_ofs * PAGE_SIZE; 296 ret += (unsigned long)cpu_addr & ~PAGE_MASK; 297 298 DBGA2("pci_map_single: [%p,%zx] np %ld -> sg %llx from %p\n", 299 cpu_addr, size, npages, ret, __builtin_return_address(0)); 300 301 return ret; 302 } 303 304 dma_addr_t 305 pci_map_single(struct pci_dev *pdev, void *cpu_addr, size_t size, int dir) 306 { 307 int dac_allowed; 308 309 if (dir == PCI_DMA_NONE) 310 BUG(); 311 312 dac_allowed = pdev ? pci_dac_dma_supported(pdev, pdev->dma_mask) : 0; 313 return pci_map_single_1(pdev, cpu_addr, size, dac_allowed); 314 } 315 EXPORT_SYMBOL(pci_map_single); 316 317 dma_addr_t 318 pci_map_page(struct pci_dev *pdev, struct page *page, unsigned long offset, 319 size_t size, int dir) 320 { 321 int dac_allowed; 322 323 if (dir == PCI_DMA_NONE) 324 BUG(); 325 326 dac_allowed = pdev ? pci_dac_dma_supported(pdev, pdev->dma_mask) : 0; 327 return pci_map_single_1(pdev, (char *)page_address(page) + offset, 328 size, dac_allowed); 329 } 330 EXPORT_SYMBOL(pci_map_page); 331 332 /* Unmap a single streaming mode DMA translation. The DMA_ADDR and 333 SIZE must match what was provided for in a previous pci_map_single 334 call. All other usages are undefined. After this call, reads by 335 the cpu to the buffer are guaranteed to see whatever the device 336 wrote there. */ 337 338 void 339 pci_unmap_single(struct pci_dev *pdev, dma_addr_t dma_addr, size_t size, 340 int direction) 341 { 342 unsigned long flags; 343 struct pci_controller *hose = pdev ? pdev->sysdata : pci_isa_hose; 344 struct pci_iommu_arena *arena; 345 long dma_ofs, npages; 346 347 if (direction == PCI_DMA_NONE) 348 BUG(); 349 350 if (dma_addr >= __direct_map_base 351 && dma_addr < __direct_map_base + __direct_map_size) { 352 /* Nothing to do. */ 353 354 DBGA2("pci_unmap_single: direct [%llx,%zx] from %p\n", 355 dma_addr, size, __builtin_return_address(0)); 356 357 return; 358 } 359 360 if (dma_addr > 0xffffffff) { 361 DBGA2("pci64_unmap_single: DAC [%llx,%zx] from %p\n", 362 dma_addr, size, __builtin_return_address(0)); 363 return; 364 } 365 366 arena = hose->sg_pci; 367 if (!arena || dma_addr < arena->dma_base) 368 arena = hose->sg_isa; 369 370 dma_ofs = (dma_addr - arena->dma_base) >> PAGE_SHIFT; 371 if (dma_ofs * PAGE_SIZE >= arena->size) { 372 printk(KERN_ERR "Bogus pci_unmap_single: dma_addr %llx " 373 " base %llx size %x\n", 374 dma_addr, arena->dma_base, arena->size); 375 return; 376 BUG(); 377 } 378 379 npages = iommu_num_pages(dma_addr, size, PAGE_SIZE); 380 381 spin_lock_irqsave(&arena->lock, flags); 382 383 iommu_arena_free(arena, dma_ofs, npages); 384 385 /* If we're freeing ptes above the `next_entry' pointer (they 386 may have snuck back into the TLB since the last wrap flush), 387 we need to flush the TLB before reallocating the latter. */ 388 if (dma_ofs >= arena->next_entry) 389 alpha_mv.mv_pci_tbi(hose, dma_addr, dma_addr + size - 1); 390 391 spin_unlock_irqrestore(&arena->lock, flags); 392 393 DBGA2("pci_unmap_single: sg [%llx,%zx] np %ld from %p\n", 394 dma_addr, size, npages, __builtin_return_address(0)); 395 } 396 EXPORT_SYMBOL(pci_unmap_single); 397 398 void 399 pci_unmap_page(struct pci_dev *pdev, dma_addr_t dma_addr, 400 size_t size, int direction) 401 { 402 pci_unmap_single(pdev, dma_addr, size, direction); 403 } 404 EXPORT_SYMBOL(pci_unmap_page); 405 406 /* Allocate and map kernel buffer using consistent mode DMA for PCI 407 device. Returns non-NULL cpu-view pointer to the buffer if 408 successful and sets *DMA_ADDRP to the pci side dma address as well, 409 else DMA_ADDRP is undefined. */ 410 411 void * 412 __pci_alloc_consistent(struct pci_dev *pdev, size_t size, 413 dma_addr_t *dma_addrp, gfp_t gfp) 414 { 415 void *cpu_addr; 416 long order = get_order(size); 417 418 gfp &= ~GFP_DMA; 419 420 try_again: 421 cpu_addr = (void *)__get_free_pages(gfp, order); 422 if (! cpu_addr) { 423 printk(KERN_INFO "pci_alloc_consistent: " 424 "get_free_pages failed from %p\n", 425 __builtin_return_address(0)); 426 /* ??? Really atomic allocation? Otherwise we could play 427 with vmalloc and sg if we can't find contiguous memory. */ 428 return NULL; 429 } 430 memset(cpu_addr, 0, size); 431 432 *dma_addrp = pci_map_single_1(pdev, cpu_addr, size, 0); 433 if (*dma_addrp == 0) { 434 free_pages((unsigned long)cpu_addr, order); 435 if (alpha_mv.mv_pci_tbi || (gfp & GFP_DMA)) 436 return NULL; 437 /* The address doesn't fit required mask and we 438 do not have iommu. Try again with GFP_DMA. */ 439 gfp |= GFP_DMA; 440 goto try_again; 441 } 442 443 DBGA2("pci_alloc_consistent: %zx -> [%p,%llx] from %p\n", 444 size, cpu_addr, *dma_addrp, __builtin_return_address(0)); 445 446 return cpu_addr; 447 } 448 EXPORT_SYMBOL(__pci_alloc_consistent); 449 450 /* Free and unmap a consistent DMA buffer. CPU_ADDR and DMA_ADDR must 451 be values that were returned from pci_alloc_consistent. SIZE must 452 be the same as what as passed into pci_alloc_consistent. 453 References to the memory and mappings associated with CPU_ADDR or 454 DMA_ADDR past this call are illegal. */ 455 456 void 457 pci_free_consistent(struct pci_dev *pdev, size_t size, void *cpu_addr, 458 dma_addr_t dma_addr) 459 { 460 pci_unmap_single(pdev, dma_addr, size, PCI_DMA_BIDIRECTIONAL); 461 free_pages((unsigned long)cpu_addr, get_order(size)); 462 463 DBGA2("pci_free_consistent: [%llx,%zx] from %p\n", 464 dma_addr, size, __builtin_return_address(0)); 465 } 466 EXPORT_SYMBOL(pci_free_consistent); 467 468 /* Classify the elements of the scatterlist. Write dma_address 469 of each element with: 470 0 : Followers all physically adjacent. 471 1 : Followers all virtually adjacent. 472 -1 : Not leader, physically adjacent to previous. 473 -2 : Not leader, virtually adjacent to previous. 474 Write dma_length of each leader with the combined lengths of 475 the mergable followers. */ 476 477 #define SG_ENT_VIRT_ADDRESS(SG) (sg_virt((SG))) 478 #define SG_ENT_PHYS_ADDRESS(SG) __pa(SG_ENT_VIRT_ADDRESS(SG)) 479 480 static void 481 sg_classify(struct device *dev, struct scatterlist *sg, struct scatterlist *end, 482 int virt_ok) 483 { 484 unsigned long next_paddr; 485 struct scatterlist *leader; 486 long leader_flag, leader_length; 487 unsigned int max_seg_size; 488 489 leader = sg; 490 leader_flag = 0; 491 leader_length = leader->length; 492 next_paddr = SG_ENT_PHYS_ADDRESS(leader) + leader_length; 493 494 /* we will not marge sg without device. */ 495 max_seg_size = dev ? dma_get_max_seg_size(dev) : 0; 496 for (++sg; sg < end; ++sg) { 497 unsigned long addr, len; 498 addr = SG_ENT_PHYS_ADDRESS(sg); 499 len = sg->length; 500 501 if (leader_length + len > max_seg_size) 502 goto new_segment; 503 504 if (next_paddr == addr) { 505 sg->dma_address = -1; 506 leader_length += len; 507 } else if (((next_paddr | addr) & ~PAGE_MASK) == 0 && virt_ok) { 508 sg->dma_address = -2; 509 leader_flag = 1; 510 leader_length += len; 511 } else { 512 new_segment: 513 leader->dma_address = leader_flag; 514 leader->dma_length = leader_length; 515 leader = sg; 516 leader_flag = 0; 517 leader_length = len; 518 } 519 520 next_paddr = addr + len; 521 } 522 523 leader->dma_address = leader_flag; 524 leader->dma_length = leader_length; 525 } 526 527 /* Given a scatterlist leader, choose an allocation method and fill 528 in the blanks. */ 529 530 static int 531 sg_fill(struct device *dev, struct scatterlist *leader, struct scatterlist *end, 532 struct scatterlist *out, struct pci_iommu_arena *arena, 533 dma_addr_t max_dma, int dac_allowed) 534 { 535 unsigned long paddr = SG_ENT_PHYS_ADDRESS(leader); 536 long size = leader->dma_length; 537 struct scatterlist *sg; 538 unsigned long *ptes; 539 long npages, dma_ofs, i; 540 541 #if !DEBUG_NODIRECT 542 /* If everything is physically contiguous, and the addresses 543 fall into the direct-map window, use it. */ 544 if (leader->dma_address == 0 545 && paddr + size + __direct_map_base - 1 <= max_dma 546 && paddr + size <= __direct_map_size) { 547 out->dma_address = paddr + __direct_map_base; 548 out->dma_length = size; 549 550 DBGA(" sg_fill: [%p,%lx] -> direct %llx\n", 551 __va(paddr), size, out->dma_address); 552 553 return 0; 554 } 555 #endif 556 557 /* If physically contiguous and DAC is available, use it. */ 558 if (leader->dma_address == 0 && dac_allowed) { 559 out->dma_address = paddr + alpha_mv.pci_dac_offset; 560 out->dma_length = size; 561 562 DBGA(" sg_fill: [%p,%lx] -> DAC %llx\n", 563 __va(paddr), size, out->dma_address); 564 565 return 0; 566 } 567 568 /* Otherwise, we'll use the iommu to make the pages virtually 569 contiguous. */ 570 571 paddr &= ~PAGE_MASK; 572 npages = iommu_num_pages(paddr, size, PAGE_SIZE); 573 dma_ofs = iommu_arena_alloc(dev, arena, npages, 0); 574 if (dma_ofs < 0) { 575 /* If we attempted a direct map above but failed, die. */ 576 if (leader->dma_address == 0) 577 return -1; 578 579 /* Otherwise, break up the remaining virtually contiguous 580 hunks into individual direct maps and retry. */ 581 sg_classify(dev, leader, end, 0); 582 return sg_fill(dev, leader, end, out, arena, max_dma, dac_allowed); 583 } 584 585 out->dma_address = arena->dma_base + dma_ofs*PAGE_SIZE + paddr; 586 out->dma_length = size; 587 588 DBGA(" sg_fill: [%p,%lx] -> sg %llx np %ld\n", 589 __va(paddr), size, out->dma_address, npages); 590 591 /* All virtually contiguous. We need to find the length of each 592 physically contiguous subsegment to fill in the ptes. */ 593 ptes = &arena->ptes[dma_ofs]; 594 sg = leader; 595 do { 596 #if DEBUG_ALLOC > 0 597 struct scatterlist *last_sg = sg; 598 #endif 599 600 size = sg->length; 601 paddr = SG_ENT_PHYS_ADDRESS(sg); 602 603 while (sg+1 < end && (int) sg[1].dma_address == -1) { 604 size += sg[1].length; 605 sg++; 606 } 607 608 npages = iommu_num_pages(paddr, size, PAGE_SIZE); 609 610 paddr &= PAGE_MASK; 611 for (i = 0; i < npages; ++i, paddr += PAGE_SIZE) 612 *ptes++ = mk_iommu_pte(paddr); 613 614 #if DEBUG_ALLOC > 0 615 DBGA(" (%ld) [%p,%x] np %ld\n", 616 last_sg - leader, SG_ENT_VIRT_ADDRESS(last_sg), 617 last_sg->length, npages); 618 while (++last_sg <= sg) { 619 DBGA(" (%ld) [%p,%x] cont\n", 620 last_sg - leader, SG_ENT_VIRT_ADDRESS(last_sg), 621 last_sg->length); 622 } 623 #endif 624 } while (++sg < end && (int) sg->dma_address < 0); 625 626 return 1; 627 } 628 629 int 630 pci_map_sg(struct pci_dev *pdev, struct scatterlist *sg, int nents, 631 int direction) 632 { 633 struct scatterlist *start, *end, *out; 634 struct pci_controller *hose; 635 struct pci_iommu_arena *arena; 636 dma_addr_t max_dma; 637 int dac_allowed; 638 struct device *dev; 639 640 if (direction == PCI_DMA_NONE) 641 BUG(); 642 643 dac_allowed = pdev ? pci_dac_dma_supported(pdev, pdev->dma_mask) : 0; 644 645 dev = pdev ? &pdev->dev : NULL; 646 647 /* Fast path single entry scatterlists. */ 648 if (nents == 1) { 649 sg->dma_length = sg->length; 650 sg->dma_address 651 = pci_map_single_1(pdev, SG_ENT_VIRT_ADDRESS(sg), 652 sg->length, dac_allowed); 653 return sg->dma_address != 0; 654 } 655 656 start = sg; 657 end = sg + nents; 658 659 /* First, prepare information about the entries. */ 660 sg_classify(dev, sg, end, alpha_mv.mv_pci_tbi != 0); 661 662 /* Second, figure out where we're going to map things. */ 663 if (alpha_mv.mv_pci_tbi) { 664 hose = pdev ? pdev->sysdata : pci_isa_hose; 665 max_dma = pdev ? pdev->dma_mask : ISA_DMA_MASK; 666 arena = hose->sg_pci; 667 if (!arena || arena->dma_base + arena->size - 1 > max_dma) 668 arena = hose->sg_isa; 669 } else { 670 max_dma = -1; 671 arena = NULL; 672 hose = NULL; 673 } 674 675 /* Third, iterate over the scatterlist leaders and allocate 676 dma space as needed. */ 677 for (out = sg; sg < end; ++sg) { 678 if ((int) sg->dma_address < 0) 679 continue; 680 if (sg_fill(dev, sg, end, out, arena, max_dma, dac_allowed) < 0) 681 goto error; 682 out++; 683 } 684 685 /* Mark the end of the list for pci_unmap_sg. */ 686 if (out < end) 687 out->dma_length = 0; 688 689 if (out - start == 0) 690 printk(KERN_WARNING "pci_map_sg failed: no entries?\n"); 691 DBGA("pci_map_sg: %ld entries\n", out - start); 692 693 return out - start; 694 695 error: 696 printk(KERN_WARNING "pci_map_sg failed: " 697 "could not allocate dma page tables\n"); 698 699 /* Some allocation failed while mapping the scatterlist 700 entries. Unmap them now. */ 701 if (out > start) 702 pci_unmap_sg(pdev, start, out - start, direction); 703 return 0; 704 } 705 EXPORT_SYMBOL(pci_map_sg); 706 707 /* Unmap a set of streaming mode DMA translations. Again, cpu read 708 rules concerning calls here are the same as for pci_unmap_single() 709 above. */ 710 711 void 712 pci_unmap_sg(struct pci_dev *pdev, struct scatterlist *sg, int nents, 713 int direction) 714 { 715 unsigned long flags; 716 struct pci_controller *hose; 717 struct pci_iommu_arena *arena; 718 struct scatterlist *end; 719 dma_addr_t max_dma; 720 dma_addr_t fbeg, fend; 721 722 if (direction == PCI_DMA_NONE) 723 BUG(); 724 725 if (! alpha_mv.mv_pci_tbi) 726 return; 727 728 hose = pdev ? pdev->sysdata : pci_isa_hose; 729 max_dma = pdev ? pdev->dma_mask : ISA_DMA_MASK; 730 arena = hose->sg_pci; 731 if (!arena || arena->dma_base + arena->size - 1 > max_dma) 732 arena = hose->sg_isa; 733 734 fbeg = -1, fend = 0; 735 736 spin_lock_irqsave(&arena->lock, flags); 737 738 for (end = sg + nents; sg < end; ++sg) { 739 dma64_addr_t addr; 740 size_t size; 741 long npages, ofs; 742 dma_addr_t tend; 743 744 addr = sg->dma_address; 745 size = sg->dma_length; 746 if (!size) 747 break; 748 749 if (addr > 0xffffffff) { 750 /* It's a DAC address -- nothing to do. */ 751 DBGA(" (%ld) DAC [%llx,%zx]\n", 752 sg - end + nents, addr, size); 753 continue; 754 } 755 756 if (addr >= __direct_map_base 757 && addr < __direct_map_base + __direct_map_size) { 758 /* Nothing to do. */ 759 DBGA(" (%ld) direct [%llx,%zx]\n", 760 sg - end + nents, addr, size); 761 continue; 762 } 763 764 DBGA(" (%ld) sg [%llx,%zx]\n", 765 sg - end + nents, addr, size); 766 767 npages = iommu_num_pages(addr, size, PAGE_SIZE); 768 ofs = (addr - arena->dma_base) >> PAGE_SHIFT; 769 iommu_arena_free(arena, ofs, npages); 770 771 tend = addr + size - 1; 772 if (fbeg > addr) fbeg = addr; 773 if (fend < tend) fend = tend; 774 } 775 776 /* If we're freeing ptes above the `next_entry' pointer (they 777 may have snuck back into the TLB since the last wrap flush), 778 we need to flush the TLB before reallocating the latter. */ 779 if ((fend - arena->dma_base) >> PAGE_SHIFT >= arena->next_entry) 780 alpha_mv.mv_pci_tbi(hose, fbeg, fend); 781 782 spin_unlock_irqrestore(&arena->lock, flags); 783 784 DBGA("pci_unmap_sg: %ld entries\n", nents - (end - sg)); 785 } 786 EXPORT_SYMBOL(pci_unmap_sg); 787 788 789 /* Return whether the given PCI device DMA address mask can be 790 supported properly. */ 791 792 int 793 pci_dma_supported(struct pci_dev *pdev, u64 mask) 794 { 795 struct pci_controller *hose; 796 struct pci_iommu_arena *arena; 797 798 /* If there exists a direct map, and the mask fits either 799 the entire direct mapped space or the total system memory as 800 shifted by the map base */ 801 if (__direct_map_size != 0 802 && (__direct_map_base + __direct_map_size - 1 <= mask || 803 __direct_map_base + (max_low_pfn << PAGE_SHIFT) - 1 <= mask)) 804 return 1; 805 806 /* Check that we have a scatter-gather arena that fits. */ 807 hose = pdev ? pdev->sysdata : pci_isa_hose; 808 arena = hose->sg_isa; 809 if (arena && arena->dma_base + arena->size - 1 <= mask) 810 return 1; 811 arena = hose->sg_pci; 812 if (arena && arena->dma_base + arena->size - 1 <= mask) 813 return 1; 814 815 /* As last resort try ZONE_DMA. */ 816 if (!__direct_map_base && MAX_DMA_ADDRESS - IDENT_ADDR - 1 <= mask) 817 return 1; 818 819 return 0; 820 } 821 EXPORT_SYMBOL(pci_dma_supported); 822 823 824 /* 825 * AGP GART extensions to the IOMMU 826 */ 827 int 828 iommu_reserve(struct pci_iommu_arena *arena, long pg_count, long align_mask) 829 { 830 unsigned long flags; 831 unsigned long *ptes; 832 long i, p; 833 834 if (!arena) return -EINVAL; 835 836 spin_lock_irqsave(&arena->lock, flags); 837 838 /* Search for N empty ptes. */ 839 ptes = arena->ptes; 840 p = iommu_arena_find_pages(NULL, arena, pg_count, align_mask); 841 if (p < 0) { 842 spin_unlock_irqrestore(&arena->lock, flags); 843 return -1; 844 } 845 846 /* Success. Mark them all reserved (ie not zero and invalid) 847 for the iommu tlb that could load them from under us. 848 They will be filled in with valid bits by _bind() */ 849 for (i = 0; i < pg_count; ++i) 850 ptes[p+i] = IOMMU_RESERVED_PTE; 851 852 arena->next_entry = p + pg_count; 853 spin_unlock_irqrestore(&arena->lock, flags); 854 855 return p; 856 } 857 858 int 859 iommu_release(struct pci_iommu_arena *arena, long pg_start, long pg_count) 860 { 861 unsigned long *ptes; 862 long i; 863 864 if (!arena) return -EINVAL; 865 866 ptes = arena->ptes; 867 868 /* Make sure they're all reserved first... */ 869 for(i = pg_start; i < pg_start + pg_count; i++) 870 if (ptes[i] != IOMMU_RESERVED_PTE) 871 return -EBUSY; 872 873 iommu_arena_free(arena, pg_start, pg_count); 874 return 0; 875 } 876 877 int 878 iommu_bind(struct pci_iommu_arena *arena, long pg_start, long pg_count, 879 struct page **pages) 880 { 881 unsigned long flags; 882 unsigned long *ptes; 883 long i, j; 884 885 if (!arena) return -EINVAL; 886 887 spin_lock_irqsave(&arena->lock, flags); 888 889 ptes = arena->ptes; 890 891 for(j = pg_start; j < pg_start + pg_count; j++) { 892 if (ptes[j] != IOMMU_RESERVED_PTE) { 893 spin_unlock_irqrestore(&arena->lock, flags); 894 return -EBUSY; 895 } 896 } 897 898 for(i = 0, j = pg_start; i < pg_count; i++, j++) 899 ptes[j] = mk_iommu_pte(page_to_phys(pages[i])); 900 901 spin_unlock_irqrestore(&arena->lock, flags); 902 903 return 0; 904 } 905 906 int 907 iommu_unbind(struct pci_iommu_arena *arena, long pg_start, long pg_count) 908 { 909 unsigned long *p; 910 long i; 911 912 if (!arena) return -EINVAL; 913 914 p = arena->ptes + pg_start; 915 for(i = 0; i < pg_count; i++) 916 p[i] = IOMMU_RESERVED_PTE; 917 918 return 0; 919 } 920 921 /* True if the machine supports DAC addressing, and DEV can 922 make use of it given MASK. */ 923 924 static int 925 pci_dac_dma_supported(struct pci_dev *dev, u64 mask) 926 { 927 dma64_addr_t dac_offset = alpha_mv.pci_dac_offset; 928 int ok = 1; 929 930 /* If this is not set, the machine doesn't support DAC at all. */ 931 if (dac_offset == 0) 932 ok = 0; 933 934 /* The device has to be able to address our DAC bit. */ 935 if ((dac_offset & dev->dma_mask) != dac_offset) 936 ok = 0; 937 938 /* If both conditions above are met, we are fine. */ 939 DBGA("pci_dac_dma_supported %s from %p\n", 940 ok ? "yes" : "no", __builtin_return_address(0)); 941 942 return ok; 943 } 944 945 /* Helper for generic DMA-mapping functions. */ 946 947 struct pci_dev * 948 alpha_gendev_to_pci(struct device *dev) 949 { 950 if (dev && dev->bus == &pci_bus_type) 951 return to_pci_dev(dev); 952 953 /* Assume that non-PCI devices asking for DMA are either ISA or EISA, 954 BUG() otherwise. */ 955 BUG_ON(!isa_bridge); 956 957 /* Assume non-busmaster ISA DMA when dma_mask is not set (the ISA 958 bridge is bus master then). */ 959 if (!dev || !dev->dma_mask || !*dev->dma_mask) 960 return isa_bridge; 961 962 /* For EISA bus masters, return isa_bridge (it might have smaller 963 dma_mask due to wiring limitations). */ 964 if (*dev->dma_mask >= isa_bridge->dma_mask) 965 return isa_bridge; 966 967 /* This assumes ISA bus master with dma_mask 0xffffff. */ 968 return NULL; 969 } 970 EXPORT_SYMBOL(alpha_gendev_to_pci); 971 972 int 973 dma_set_mask(struct device *dev, u64 mask) 974 { 975 if (!dev->dma_mask || 976 !pci_dma_supported(alpha_gendev_to_pci(dev), mask)) 977 return -EIO; 978 979 *dev->dma_mask = mask; 980 981 return 0; 982 } 983 EXPORT_SYMBOL(dma_set_mask); 984