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