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