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 /* Most Alphas support 32-bit ISA DMA. Exceptions are XL, Ruffian,
34    Sable, and Alcor (see asm-alpha/dma.h for details). */
35 #define ISA_DMA_MASK	(MAX_DMA_ADDRESS - IDENT_ADDR - 1)
36 
37 static inline unsigned long
mk_iommu_pte(unsigned long paddr)38 mk_iommu_pte(unsigned long paddr)
39 {
40 	return (paddr >> (PAGE_SHIFT-1)) | 1;
41 }
42 
43 static inline long
calc_npages(long bytes)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
size_for_memory(unsigned long max)54 size_for_memory(unsigned long max)
55 {
56 	unsigned long mem = max_low_pfn << PAGE_SHIFT;
57 	if (mem < max)
58 		max = 1UL << ceil_log2(mem);
59 	return max;
60 }
61 
62 struct pci_iommu_arena *
iommu_arena_new_node(int nid,struct pci_controller * hose,dma_addr_t base,unsigned long window_size,unsigned long align)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 *
iommu_arena_new(struct pci_controller * hose,dma_addr_t base,unsigned long window_size,unsigned long align)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
iommu_arena_find_pages(struct pci_iommu_arena * arena,long n,long mask)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
iommu_arena_alloc(struct pci_iommu_arena * arena,long n,unsigned int align)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
iommu_arena_free(struct pci_iommu_arena * arena,long ofs,long n)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 /* Map a single buffer of the indicated size for PCI DMA in streaming
212    mode.  The 32-bit PCI bus mastering address to use is returned.
213    Once the device is given the dma address, the device owns this memory
214    until either pci_unmap_single or pci_dma_sync_single is performed.  */
215 
216 static dma_addr_t
pci_map_single_1(struct pci_dev * pdev,void * cpu_addr,size_t size,int dac_allowed)217 pci_map_single_1(struct pci_dev *pdev, void *cpu_addr, size_t size,
218 		 int dac_allowed)
219 {
220 	struct pci_controller *hose = pdev ? pdev->sysdata : pci_isa_hose;
221 	dma_addr_t max_dma = pdev ? pdev->dma_mask : ISA_DMA_MASK;
222 	struct pci_iommu_arena *arena;
223 	long npages, dma_ofs, i;
224 	unsigned long paddr;
225 	dma_addr_t ret;
226 
227 	paddr = __pa(cpu_addr);
228 
229 #if !DEBUG_NODIRECT
230 	/* First check to see if we can use the direct map window.  */
231 	if (paddr + size + __direct_map_base - 1 <= max_dma
232 	    && paddr + size <= __direct_map_size) {
233 		ret = paddr + __direct_map_base;
234 
235 		DBGA2("pci_map_single: [%p,%lx] -> direct %lx from %p\n",
236 		      cpu_addr, size, ret, __builtin_return_address(0));
237 
238 		return ret;
239 	}
240 #endif
241 
242 	/* Next, use DAC if selected earlier.  */
243 	if (dac_allowed) {
244 		ret = paddr + alpha_mv.pci_dac_offset;
245 
246 		DBGA2("pci_map_single: [%p,%lx] -> DAC %lx from %p\n",
247 		      cpu_addr, size, ret, __builtin_return_address(0));
248 
249 		return ret;
250 	}
251 
252 	/* If the machine doesn't define a pci_tbi routine, we have to
253 	   assume it doesn't support sg mapping, and, since we tried to
254 	   use direct_map above, it now must be considered an error. */
255 	if (! alpha_mv.mv_pci_tbi) {
256 		static int been_here = 0; /* Only print the message once. */
257 		if (!been_here) {
258 		    printk(KERN_WARNING "pci_map_single: no HW sg\n");
259 		    been_here = 1;
260 		}
261 		return 0;
262 	}
263 
264 	arena = hose->sg_pci;
265 	if (!arena || arena->dma_base + arena->size - 1 > max_dma)
266 		arena = hose->sg_isa;
267 
268 	npages = calc_npages((paddr & ~PAGE_MASK) + size);
269 	/* Force allocation to 64KB boundary for all ISA devices. */
270 	dma_ofs = iommu_arena_alloc(arena, npages, pdev ? 0 : 8);
271 	if (dma_ofs < 0) {
272 		printk(KERN_WARNING "pci_map_single failed: "
273 		       "could not allocate dma page tables\n");
274 		return 0;
275 	}
276 
277 	paddr &= PAGE_MASK;
278 	for (i = 0; i < npages; ++i, paddr += PAGE_SIZE)
279 		arena->ptes[i + dma_ofs] = mk_iommu_pte(paddr);
280 
281 	ret = arena->dma_base + dma_ofs * PAGE_SIZE;
282 	ret += (unsigned long)cpu_addr & ~PAGE_MASK;
283 
284 	DBGA2("pci_map_single: [%p,%lx] np %ld -> sg %lx from %p\n",
285 	      cpu_addr, size, npages, ret, __builtin_return_address(0));
286 
287 	return ret;
288 }
289 
290 dma_addr_t
pci_map_single(struct pci_dev * pdev,void * cpu_addr,size_t size,int dir)291 pci_map_single(struct pci_dev *pdev, void *cpu_addr, size_t size, int dir)
292 {
293 	int dac_allowed;
294 
295 	if (dir == PCI_DMA_NONE)
296 		BUG();
297 
298 	dac_allowed = pdev ? pci_dac_dma_supported(pdev, pdev->dma_mask) : 0;
299 	return pci_map_single_1(pdev, cpu_addr, size, dac_allowed);
300 }
301 
302 dma_addr_t
pci_map_page(struct pci_dev * pdev,struct page * page,unsigned long offset,size_t size,int dir)303 pci_map_page(struct pci_dev *pdev, struct page *page, unsigned long offset,
304 	     size_t size, int dir)
305 {
306 	int dac_allowed;
307 
308 	if (dir == PCI_DMA_NONE)
309 		BUG();
310 
311 	dac_allowed = pdev ? pci_dac_dma_supported(pdev, pdev->dma_mask) : 0;
312 	return pci_map_single_1(pdev, (char *)page_address(page) + offset,
313 				size, dac_allowed);
314 }
315 
316 /* Unmap a single streaming mode DMA translation.  The DMA_ADDR and
317    SIZE must match what was provided for in a previous pci_map_single
318    call.  All other usages are undefined.  After this call, reads by
319    the cpu to the buffer are guarenteed to see whatever the device
320    wrote there.  */
321 
322 void
pci_unmap_single(struct pci_dev * pdev,dma_addr_t dma_addr,size_t size,int direction)323 pci_unmap_single(struct pci_dev *pdev, dma_addr_t dma_addr, size_t size,
324 		 int direction)
325 {
326 	unsigned long flags;
327 	struct pci_controller *hose = pdev ? pdev->sysdata : pci_isa_hose;
328 	struct pci_iommu_arena *arena;
329 	long dma_ofs, npages;
330 
331 	if (direction == PCI_DMA_NONE)
332 		BUG();
333 
334 	if (dma_addr >= __direct_map_base
335 	    && dma_addr < __direct_map_base + __direct_map_size) {
336 		/* Nothing to do.  */
337 
338 		DBGA2("pci_unmap_single: direct [%lx,%lx] from %p\n",
339 		      dma_addr, size, __builtin_return_address(0));
340 
341 		return;
342 	}
343 
344 	if (dma_addr > 0xffffffff) {
345 		DBGA2("pci64_unmap_single: DAC [%lx,%lx] from %p\n",
346 		      dma_addr, size, __builtin_return_address(0));
347 		return;
348 	}
349 
350 	arena = hose->sg_pci;
351 	if (!arena || dma_addr < arena->dma_base)
352 		arena = hose->sg_isa;
353 
354 	dma_ofs = (dma_addr - arena->dma_base) >> PAGE_SHIFT;
355 	if (dma_ofs * PAGE_SIZE >= arena->size) {
356 		printk(KERN_ERR "Bogus pci_unmap_single: dma_addr %lx "
357 		       " base %lx size %x\n", dma_addr, arena->dma_base,
358 		       arena->size);
359 		return;
360 		BUG();
361 	}
362 
363 	npages = calc_npages((dma_addr & ~PAGE_MASK) + size);
364 
365 	spin_lock_irqsave(&arena->lock, flags);
366 
367 	iommu_arena_free(arena, dma_ofs, npages);
368 
369         /* If we're freeing ptes above the `next_entry' pointer (they
370            may have snuck back into the TLB since the last wrap flush),
371            we need to flush the TLB before reallocating the latter.  */
372 	if (dma_ofs >= arena->next_entry)
373 		alpha_mv.mv_pci_tbi(hose, dma_addr, dma_addr + size - 1);
374 
375 	spin_unlock_irqrestore(&arena->lock, flags);
376 
377 	DBGA2("pci_unmap_single: sg [%lx,%lx] np %ld from %p\n",
378 	      dma_addr, size, npages, __builtin_return_address(0));
379 }
380 
381 void
pci_unmap_page(struct pci_dev * pdev,dma_addr_t dma_addr,size_t size,int direction)382 pci_unmap_page(struct pci_dev *pdev, dma_addr_t dma_addr,
383 	       size_t size, int direction)
384 {
385 	pci_unmap_single(pdev, dma_addr, size, direction);
386 }
387 
388 /* Allocate and map kernel buffer using consistent mode DMA for PCI
389    device.  Returns non-NULL cpu-view pointer to the buffer if
390    successful and sets *DMA_ADDRP to the pci side dma address as well,
391    else DMA_ADDRP is undefined.  */
392 
393 void *
pci_alloc_consistent(struct pci_dev * pdev,size_t size,dma_addr_t * dma_addrp)394 pci_alloc_consistent(struct pci_dev *pdev, size_t size, dma_addr_t *dma_addrp)
395 {
396 	void *cpu_addr;
397 	long order = get_order(size);
398 	int gfp = GFP_ATOMIC;
399 
400 try_again:
401 	cpu_addr = (void *)__get_free_pages(gfp, order);
402 	if (! cpu_addr) {
403 		printk(KERN_INFO "pci_alloc_consistent: "
404 		       "get_free_pages failed from %p\n",
405 			__builtin_return_address(0));
406 		/* ??? Really atomic allocation?  Otherwise we could play
407 		   with vmalloc and sg if we can't find contiguous memory.  */
408 		return NULL;
409 	}
410 	memset(cpu_addr, 0, size);
411 
412 	*dma_addrp = pci_map_single_1(pdev, cpu_addr, size, 0);
413 	if (*dma_addrp == 0) {
414 		free_pages((unsigned long)cpu_addr, order);
415 		if (alpha_mv.mv_pci_tbi || (gfp & GFP_DMA))
416 			return NULL;
417 		/* The address doesn't fit required mask and we
418 		   do not have iommu. Try again with GFP_DMA. */
419 		gfp |= GFP_DMA;
420 		goto try_again;
421 	}
422 
423 	DBGA2("pci_alloc_consistent: %lx -> [%p,%x] from %p\n",
424 	      size, cpu_addr, *dma_addrp, __builtin_return_address(0));
425 
426 	return cpu_addr;
427 }
428 
429 /* Free and unmap a consistent DMA buffer.  CPU_ADDR and DMA_ADDR must
430    be values that were returned from pci_alloc_consistent.  SIZE must
431    be the same as what as passed into pci_alloc_consistent.
432    References to the memory and mappings assosciated with CPU_ADDR or
433    DMA_ADDR past this call are illegal.  */
434 
435 void
pci_free_consistent(struct pci_dev * pdev,size_t size,void * cpu_addr,dma_addr_t dma_addr)436 pci_free_consistent(struct pci_dev *pdev, size_t size, void *cpu_addr,
437 		    dma_addr_t dma_addr)
438 {
439 	pci_unmap_single(pdev, dma_addr, size, PCI_DMA_BIDIRECTIONAL);
440 	free_pages((unsigned long)cpu_addr, get_order(size));
441 
442 	DBGA2("pci_free_consistent: [%x,%lx] from %p\n",
443 	      dma_addr, size, __builtin_return_address(0));
444 }
445 
446 
447 /* Classify the elements of the scatterlist.  Write dma_address
448    of each element with:
449 	0   : Followers all physically adjacent.
450 	1   : Followers all virtually adjacent.
451 	-1  : Not leader, physically adjacent to previous.
452 	-2  : Not leader, virtually adjacent to previous.
453    Write dma_length of each leader with the combined lengths of
454    the mergable followers.  */
455 
456 #define SG_ENT_VIRT_ADDRESS(SG)				\
457 	((SG)->address					\
458 	 ? (SG)->address				\
459 	 : page_address((SG)->page) + (SG)->offset)
460 
461 #define SG_ENT_PHYS_ADDRESS(SG)	\
462         __pa(SG_ENT_VIRT_ADDRESS(SG))
463 
464 static void
sg_classify(struct scatterlist * sg,struct scatterlist * end,int virt_ok)465 sg_classify(struct scatterlist *sg, struct scatterlist *end, int virt_ok)
466 {
467 	unsigned long next_paddr;
468 	struct scatterlist *leader;
469 	long leader_flag, leader_length;
470 
471 	leader = sg;
472 	leader_flag = 0;
473 	leader_length = leader->length;
474 	next_paddr = SG_ENT_PHYS_ADDRESS(leader) + leader_length;
475 
476 	for (++sg; sg < end; ++sg) {
477 		unsigned long addr, len;
478 		addr = SG_ENT_PHYS_ADDRESS(sg);
479 		len = sg->length;
480 
481 		if (next_paddr == addr) {
482 			sg->dma_address = -1;
483 			leader_length += len;
484 		} else if (((next_paddr | addr) & ~PAGE_MASK) == 0 && virt_ok) {
485 			sg->dma_address = -2;
486 			leader_flag = 1;
487 			leader_length += len;
488 		} else {
489 			leader->dma_address = leader_flag;
490 			leader->dma_length = leader_length;
491 			leader = sg;
492 			leader_flag = 0;
493 			leader_length = len;
494 		}
495 
496 		next_paddr = addr + len;
497 	}
498 
499 	leader->dma_address = leader_flag;
500 	leader->dma_length = leader_length;
501 }
502 
503 /* Given a scatterlist leader, choose an allocation method and fill
504    in the blanks.  */
505 
506 static int
sg_fill(struct scatterlist * leader,struct scatterlist * end,struct scatterlist * out,struct pci_iommu_arena * arena,dma_addr_t max_dma,int dac_allowed)507 sg_fill(struct scatterlist *leader, struct scatterlist *end,
508 	struct scatterlist *out, struct pci_iommu_arena *arena,
509 	dma_addr_t max_dma, int dac_allowed)
510 {
511 	unsigned long paddr = SG_ENT_PHYS_ADDRESS(leader);
512 	long size = leader->dma_length;
513 	struct scatterlist *sg;
514 	unsigned long *ptes;
515 	long npages, dma_ofs, i;
516 
517 #if !DEBUG_NODIRECT
518 	/* If everything is physically contiguous, and the addresses
519 	   fall into the direct-map window, use it.  */
520 	if (leader->dma_address == 0
521 	    && paddr + size + __direct_map_base - 1 <= max_dma
522 	    && paddr + size <= __direct_map_size) {
523 		out->dma_address = paddr + __direct_map_base;
524 		out->dma_length = size;
525 
526 		DBGA("    sg_fill: [%p,%lx] -> direct %lx\n",
527 		     __va(paddr), size, out->dma_address);
528 
529 		return 0;
530 	}
531 #endif
532 
533 	/* If physically contiguous and DAC is available, use it.  */
534 	if (leader->dma_address == 0 && dac_allowed) {
535 		out->dma_address = paddr + alpha_mv.pci_dac_offset;
536 		out->dma_length = size;
537 
538 		DBGA("    sg_fill: [%p,%lx] -> DAC %lx\n",
539 		     __va(paddr), size, out->dma_address);
540 
541 		return 0;
542 	}
543 
544 	/* Otherwise, we'll use the iommu to make the pages virtually
545 	   contiguous.  */
546 
547 	paddr &= ~PAGE_MASK;
548 	npages = calc_npages(paddr + size);
549 	dma_ofs = iommu_arena_alloc(arena, npages, 0);
550 	if (dma_ofs < 0) {
551 		/* If we attempted a direct map above but failed, die.  */
552 		if (leader->dma_address == 0)
553 			return -1;
554 
555 		/* Otherwise, break up the remaining virtually contiguous
556 		   hunks into individual direct maps and retry.  */
557 		sg_classify(leader, end, 0);
558 		return sg_fill(leader, end, out, arena, max_dma, dac_allowed);
559 	}
560 
561 	out->dma_address = arena->dma_base + dma_ofs*PAGE_SIZE + paddr;
562 	out->dma_length = size;
563 
564 	DBGA("    sg_fill: [%p,%lx] -> sg %lx np %ld\n",
565 	     __va(paddr), size, out->dma_address, npages);
566 
567 	/* All virtually contiguous.  We need to find the length of each
568 	   physically contiguous subsegment to fill in the ptes.  */
569 	ptes = &arena->ptes[dma_ofs];
570 	sg = leader;
571 	do {
572 #if DEBUG_ALLOC > 0
573 		struct scatterlist *last_sg = sg;
574 #endif
575 
576 		size = sg->length;
577 		paddr = SG_ENT_PHYS_ADDRESS(sg);
578 
579 		while (sg+1 < end && (int) sg[1].dma_address == -1) {
580 			size += sg[1].length;
581 			sg++;
582 		}
583 
584 		npages = calc_npages((paddr & ~PAGE_MASK) + size);
585 
586 		paddr &= PAGE_MASK;
587 		for (i = 0; i < npages; ++i, paddr += PAGE_SIZE)
588 			*ptes++ = mk_iommu_pte(paddr);
589 
590 #if DEBUG_ALLOC > 0
591 		DBGA("    (%ld) [%p,%x] np %ld\n",
592 		     last_sg - leader, SG_ENT_VIRT_ADDRESS(last_sg),
593 		     last_sg->length, npages);
594 		while (++last_sg <= sg) {
595 			DBGA("        (%ld) [%p,%x] cont\n",
596 			     last_sg - leader, SG_ENT_VIRT_ADDRESS(last_sg),
597 			     last_sg->length);
598 		}
599 #endif
600 	} while (++sg < end && (int) sg->dma_address < 0);
601 
602 	return 1;
603 }
604 
605 int
pci_map_sg(struct pci_dev * pdev,struct scatterlist * sg,int nents,int direction)606 pci_map_sg(struct pci_dev *pdev, struct scatterlist *sg, int nents,
607 	   int direction)
608 {
609 	struct scatterlist *start, *end, *out;
610 	struct pci_controller *hose;
611 	struct pci_iommu_arena *arena;
612 	dma_addr_t max_dma;
613 	int dac_allowed;
614 
615 	if (direction == PCI_DMA_NONE)
616 		BUG();
617 
618 	dac_allowed = pdev ? pci_dac_dma_supported(pdev, pdev->dma_mask) : 0;
619 
620 	/* Fast path single entry scatterlists.  */
621 	if (nents == 1) {
622 		sg->dma_length = sg->length;
623 		sg->dma_address
624 		  = pci_map_single_1(pdev, SG_ENT_VIRT_ADDRESS(sg),
625 				     sg->length, dac_allowed);
626 		return sg->dma_address != 0;
627 	}
628 
629 	start = sg;
630 	end = sg + nents;
631 
632 	/* First, prepare information about the entries.  */
633 	sg_classify(sg, end, alpha_mv.mv_pci_tbi != 0);
634 
635 	/* Second, figure out where we're going to map things.  */
636 	if (alpha_mv.mv_pci_tbi) {
637 		hose = pdev ? pdev->sysdata : pci_isa_hose;
638 		max_dma = pdev ? pdev->dma_mask : ISA_DMA_MASK;
639 		arena = hose->sg_pci;
640 		if (!arena || arena->dma_base + arena->size - 1 > max_dma)
641 			arena = hose->sg_isa;
642 	} else {
643 		max_dma = -1;
644 		arena = NULL;
645 		hose = NULL;
646 	}
647 
648 	/* Third, iterate over the scatterlist leaders and allocate
649 	   dma space as needed.  */
650 	for (out = sg; sg < end; ++sg) {
651 		if ((int) sg->dma_address < 0)
652 			continue;
653 		if (sg_fill(sg, end, out, arena, max_dma, dac_allowed) < 0)
654 			goto error;
655 		out++;
656 	}
657 
658 	/* Mark the end of the list for pci_unmap_sg.  */
659 	if (out < end)
660 		out->dma_length = 0;
661 
662 	if (out - start == 0)
663 		printk(KERN_WARNING "pci_map_sg failed: no entries?\n");
664 	DBGA("pci_map_sg: %ld entries\n", out - start);
665 
666 	return out - start;
667 
668  error:
669 	printk(KERN_WARNING "pci_map_sg failed: "
670 	       "could not allocate dma page tables\n");
671 
672 	/* Some allocation failed while mapping the scatterlist
673 	   entries.  Unmap them now.  */
674 	if (out > start)
675 		pci_unmap_sg(pdev, start, out - start, direction);
676 	return 0;
677 }
678 
679 /* Unmap a set of streaming mode DMA translations.  Again, cpu read
680    rules concerning calls here are the same as for pci_unmap_single()
681    above.  */
682 
683 void
pci_unmap_sg(struct pci_dev * pdev,struct scatterlist * sg,int nents,int direction)684 pci_unmap_sg(struct pci_dev *pdev, struct scatterlist *sg, int nents,
685 	     int direction)
686 {
687 	unsigned long flags;
688 	struct pci_controller *hose;
689 	struct pci_iommu_arena *arena;
690 	struct scatterlist *end;
691 	dma_addr_t max_dma;
692 	dma_addr_t fbeg, fend;
693 
694 	if (direction == PCI_DMA_NONE)
695 		BUG();
696 
697 	if (! alpha_mv.mv_pci_tbi)
698 		return;
699 
700 	hose = pdev ? pdev->sysdata : pci_isa_hose;
701 	max_dma = pdev ? pdev->dma_mask : ISA_DMA_MASK;
702 	arena = hose->sg_pci;
703 	if (!arena || arena->dma_base + arena->size - 1 > max_dma)
704 		arena = hose->sg_isa;
705 
706 	fbeg = -1, fend = 0;
707 
708 	spin_lock_irqsave(&arena->lock, flags);
709 
710 	for (end = sg + nents; sg < end; ++sg) {
711 		dma64_addr_t addr;
712 		size_t size;
713 		long npages, ofs;
714 		dma_addr_t tend;
715 
716 		addr = sg->dma_address;
717 		size = sg->dma_length;
718 		if (!size)
719 			break;
720 
721 		if (addr > 0xffffffff) {
722 			/* It's a DAC address -- nothing to do.  */
723 			DBGA("    (%ld) DAC [%lx,%lx]\n",
724 			      sg - end + nents, addr, size);
725 			continue;
726 		}
727 
728 		if (addr >= __direct_map_base
729 		    && addr < __direct_map_base + __direct_map_size) {
730 			/* Nothing to do.  */
731 			DBGA("    (%ld) direct [%lx,%lx]\n",
732 			      sg - end + nents, addr, size);
733 			continue;
734 		}
735 
736 		DBGA("    (%ld) sg [%lx,%lx]\n",
737 		     sg - end + nents, addr, size);
738 
739 		npages = calc_npages((addr & ~PAGE_MASK) + size);
740 		ofs = (addr - arena->dma_base) >> PAGE_SHIFT;
741 		iommu_arena_free(arena, ofs, npages);
742 
743 		tend = addr + size - 1;
744 		if (fbeg > addr) fbeg = addr;
745 		if (fend < tend) fend = tend;
746 	}
747 
748         /* If we're freeing ptes above the `next_entry' pointer (they
749            may have snuck back into the TLB since the last wrap flush),
750            we need to flush the TLB before reallocating the latter.  */
751 	if ((fend - arena->dma_base) >> PAGE_SHIFT >= arena->next_entry)
752 		alpha_mv.mv_pci_tbi(hose, fbeg, fend);
753 
754 	spin_unlock_irqrestore(&arena->lock, flags);
755 
756 	DBGA("pci_unmap_sg: %ld entries\n", nents - (end - sg));
757 }
758 
759 
760 /* Return whether the given PCI device DMA address mask can be
761    supported properly.  */
762 
763 int
pci_dma_supported(struct pci_dev * pdev,u64 mask)764 pci_dma_supported(struct pci_dev *pdev, u64 mask)
765 {
766 	struct pci_controller *hose;
767 	struct pci_iommu_arena *arena;
768 
769 	/* If there exists a direct map, and the mask fits either
770 	   the entire direct mapped space or the total system memory as
771 	   shifted by the map base */
772 	if (__direct_map_size != 0
773 	    && (__direct_map_base + __direct_map_size - 1 <= mask
774 		|| __direct_map_base + (max_low_pfn<<PAGE_SHIFT)-1 <= mask))
775 		return 1;
776 
777 	/* Check that we have a scatter-gather arena that fits.  */
778 	hose = pdev ? pdev->sysdata : pci_isa_hose;
779 	arena = hose->sg_isa;
780 	if (arena && arena->dma_base + arena->size - 1 <= mask)
781 		return 1;
782 	arena = hose->sg_pci;
783 	if (arena && arena->dma_base + arena->size - 1 <= mask)
784 		return 1;
785 
786 	/* As last resort try ZONE_DMA.  */
787 	if (!__direct_map_base && MAX_DMA_ADDRESS - IDENT_ADDR - 1 <= mask)
788 		return 1;
789 
790 	return 0;
791 }
792 
793 
794 /*
795  * AGP GART extensions to the IOMMU
796  */
797 int
iommu_reserve(struct pci_iommu_arena * arena,long pg_count,long align_mask)798 iommu_reserve(struct pci_iommu_arena *arena, long pg_count, long align_mask)
799 {
800 	unsigned long flags;
801 	unsigned long *ptes;
802 	long i, p;
803 
804 	if (!arena) return -EINVAL;
805 
806 	spin_lock_irqsave(&arena->lock, flags);
807 
808 	/* Search for N empty ptes.  */
809 	ptes = arena->ptes;
810 	p = iommu_arena_find_pages(arena, pg_count, align_mask);
811 	if (p < 0) {
812 		spin_unlock_irqrestore(&arena->lock, flags);
813 		return -1;
814 	}
815 
816 	/* Success.  Mark them all reserved (ie not zero and invalid)
817 	   for the iommu tlb that could load them from under us.
818 	   They will be filled in with valid bits by _bind() */
819 	for (i = 0; i < pg_count; ++i)
820 		ptes[p+i] = IOMMU_RESERVED_PTE;
821 
822 	arena->next_entry = p + pg_count;
823 	spin_unlock_irqrestore(&arena->lock, flags);
824 
825 	return p;
826 }
827 
828 int
iommu_release(struct pci_iommu_arena * arena,long pg_start,long pg_count)829 iommu_release(struct pci_iommu_arena *arena, long pg_start, long pg_count)
830 {
831 	unsigned long *ptes;
832 	long i;
833 
834 	if (!arena) return -EINVAL;
835 
836 	ptes = arena->ptes;
837 
838 	/* Make sure they're all reserved first... */
839 	for(i = pg_start; i < pg_start + pg_count; i++)
840 		if (ptes[i] != IOMMU_RESERVED_PTE)
841 			return -EBUSY;
842 
843 	iommu_arena_free(arena, pg_start, pg_count);
844 	return 0;
845 }
846 
847 int
iommu_bind(struct pci_iommu_arena * arena,long pg_start,long pg_count,unsigned long * physaddrs)848 iommu_bind(struct pci_iommu_arena *arena, long pg_start, long pg_count,
849 	   unsigned long *physaddrs)
850 {
851 	unsigned long flags;
852 	unsigned long *ptes;
853 	long i, j;
854 
855 	if (!arena) return -EINVAL;
856 
857 	spin_lock_irqsave(&arena->lock, flags);
858 
859 	ptes = arena->ptes;
860 
861 	for(j = pg_start; j < pg_start + pg_count; j++) {
862 		if (ptes[j] != IOMMU_RESERVED_PTE) {
863 			spin_unlock_irqrestore(&arena->lock, flags);
864 			return -EBUSY;
865 		}
866 	}
867 
868 	for(i = 0, j = pg_start; i < pg_count; i++, j++)
869 		ptes[j] = mk_iommu_pte(physaddrs[i]);
870 
871 	spin_unlock_irqrestore(&arena->lock, flags);
872 
873 	return 0;
874 }
875 
876 int
iommu_unbind(struct pci_iommu_arena * arena,long pg_start,long pg_count)877 iommu_unbind(struct pci_iommu_arena *arena, long pg_start, long pg_count)
878 {
879 	unsigned long *p;
880 	long i;
881 
882 	if (!arena) return -EINVAL;
883 
884 	p = arena->ptes + pg_start;
885 	for(i = 0; i < pg_count; i++)
886 		p[i] = IOMMU_RESERVED_PTE;
887 
888 	return 0;
889 }
890 
891 /* True if the machine supports DAC addressing, and DEV can
892    make use of it given MASK.  */
893 
894 int
pci_dac_dma_supported(struct pci_dev * dev,u64 mask)895 pci_dac_dma_supported(struct pci_dev *dev, u64 mask)
896 {
897 	dma64_addr_t dac_offset = alpha_mv.pci_dac_offset;
898 	int ok = 1;
899 
900 	/* If this is not set, the machine doesn't support DAC at all.  */
901 	if (dac_offset == 0)
902 		ok = 0;
903 
904 	/* The device has to be able to address our DAC bit.  */
905 	if ((dac_offset & dev->dma_mask) != dac_offset)
906 		ok = 0;
907 
908 	/* If both conditions above are met, we are fine. */
909 	DBGA("pci_dac_dma_supported %s from %p\n",
910 	     ok ? "yes" : "no", __builtin_return_address(0));
911 
912 	return ok;
913 }
914 
915 dma64_addr_t
pci_dac_page_to_dma(struct pci_dev * pdev,struct page * page,unsigned long offset,int direction)916 pci_dac_page_to_dma(struct pci_dev *pdev, struct page *page,
917 		    unsigned long offset, int direction)
918 {
919 	return (alpha_mv.pci_dac_offset
920 		+ __pa(page_address(page))
921 		+ (dma64_addr_t) offset);
922 }
923 
924 struct page *
pci_dac_dma_to_page(struct pci_dev * pdev,dma64_addr_t dma_addr)925 pci_dac_dma_to_page(struct pci_dev *pdev, dma64_addr_t dma_addr)
926 {
927 	unsigned long paddr = (dma_addr & PAGE_MASK) - alpha_mv.pci_dac_offset;
928 	return virt_to_page(__va(paddr));
929 }
930 
931 unsigned long
pci_dac_dma_to_offset(struct pci_dev * pdev,dma64_addr_t dma_addr)932 pci_dac_dma_to_offset(struct pci_dev *pdev, dma64_addr_t dma_addr)
933 {
934 	return (dma_addr & ~PAGE_MASK);
935 }
936