Commit | Line | Data |
---|---|---|
19814ea2 | 1 | /* iommu_common.h: UltraSparc SBUS/PCI common iommu declarations. |
1da177e4 | 2 | * |
19814ea2 | 3 | * Copyright (C) 1999, 2008 David S. Miller (davem@davemloft.net) |
1da177e4 LT |
4 | */ |
5 | ||
19814ea2 DM |
6 | #ifndef _IOMMU_COMMON_H |
7 | #define _IOMMU_COMMON_H | |
8 | ||
1da177e4 LT |
9 | #include <linux/kernel.h> |
10 | #include <linux/types.h> | |
11 | #include <linux/sched.h> | |
12 | #include <linux/mm.h> | |
24c31eed | 13 | #include <linux/scatterlist.h> |
fde6a3c8 | 14 | #include <linux/device.h> |
f0880257 | 15 | #include <linux/iommu-helper.h> |
84be456f | 16 | #include <linux/scatterlist.h> |
1da177e4 LT |
17 | |
18 | #include <asm/iommu.h> | |
1da177e4 LT |
19 | |
20 | /* | |
21 | * These give mapping size of each iommu pte/tlb. | |
22 | */ | |
23 | #define IO_PAGE_SHIFT 13 | |
24 | #define IO_PAGE_SIZE (1UL << IO_PAGE_SHIFT) | |
25 | #define IO_PAGE_MASK (~(IO_PAGE_SIZE-1)) | |
27ac792c | 26 | #define IO_PAGE_ALIGN(addr) ALIGN(addr, IO_PAGE_SIZE) |
1da177e4 LT |
27 | |
28 | #define IO_TSB_ENTRIES (128*1024) | |
29 | #define IO_TSB_SIZE (IO_TSB_ENTRIES * 8) | |
30 | ||
31 | /* | |
32 | * This is the hardwired shift in the iotlb tag/data parts. | |
33 | */ | |
34 | #define IOMMU_PAGE_SHIFT 13 | |
35 | ||
38192d52 DM |
36 | #define SG_ENT_PHYS_ADDRESS(SG) (__pa(sg_virt((SG)))) |
37 | ||
f0880257 FT |
38 | static inline int is_span_boundary(unsigned long entry, |
39 | unsigned long shift, | |
40 | unsigned long boundary_size, | |
41 | struct scatterlist *outs, | |
42 | struct scatterlist *sg) | |
43 | { | |
44 | unsigned long paddr = SG_ENT_PHYS_ADDRESS(outs); | |
0fcff28f JR |
45 | int nr = iommu_num_pages(paddr, outs->dma_length + sg->length, |
46 | IO_PAGE_SIZE); | |
f0880257 FT |
47 | |
48 | return iommu_is_span_boundary(entry, nr, shift, boundary_size); | |
49 | } | |
50 | ||
19814ea2 | 51 | #endif /* _IOMMU_COMMON_H */ |