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