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