| David S. Miller | ad7ad57 | 2007-07-27 22:39:14 -0700 | [diff] [blame] | 1 | /* iommu.h: Definitions for the sun5 IOMMU. | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 2 | * | 
| David S. Miller | ad7ad57 | 2007-07-27 22:39:14 -0700 | [diff] [blame] | 3 | * Copyright (C) 1996, 1999, 2007 David S. Miller (davem@davemloft.net) | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 4 | */ | 
|  | 5 | #ifndef _SPARC64_IOMMU_H | 
|  | 6 | #define _SPARC64_IOMMU_H | 
|  | 7 |  | 
|  | 8 | /* The format of an iopte in the page tables. */ | 
| David S. Miller | 9b3627f | 2007-04-24 23:51:18 -0700 | [diff] [blame] | 9 | #define IOPTE_VALID   0x8000000000000000UL | 
|  | 10 | #define IOPTE_64K     0x2000000000000000UL | 
|  | 11 | #define IOPTE_STBUF   0x1000000000000000UL | 
|  | 12 | #define IOPTE_INTRA   0x0800000000000000UL | 
|  | 13 | #define IOPTE_CONTEXT 0x07ff800000000000UL | 
|  | 14 | #define IOPTE_PAGE    0x00007fffffffe000UL | 
|  | 15 | #define IOPTE_CACHE   0x0000000000000010UL | 
|  | 16 | #define IOPTE_WRITE   0x0000000000000002UL | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 17 |  | 
| David S. Miller | 7c963ad | 2005-05-31 16:57:59 -0700 | [diff] [blame] | 18 | #define IOMMU_NUM_CTXS	4096 | 
|  | 19 |  | 
| David S. Miller | 9b3627f | 2007-04-24 23:51:18 -0700 | [diff] [blame] | 20 | struct iommu_arena { | 
|  | 21 | unsigned long	*map; | 
|  | 22 | unsigned int	hint; | 
|  | 23 | unsigned int	limit; | 
|  | 24 | }; | 
|  | 25 |  | 
| David S. Miller | 6687508 | 2007-04-25 00:12:09 -0700 | [diff] [blame] | 26 | struct iommu { | 
|  | 27 | spinlock_t		lock; | 
|  | 28 | struct iommu_arena	arena; | 
|  | 29 | iopte_t			*page_table; | 
|  | 30 | u32			page_table_map_base; | 
|  | 31 | unsigned long		iommu_control; | 
|  | 32 | unsigned long		iommu_tsbbase; | 
|  | 33 | unsigned long		iommu_flush; | 
| David S. Miller | 861fe90 | 2007-05-02 17:31:36 -0700 | [diff] [blame] | 34 | unsigned long		iommu_flushinv; | 
| David S. Miller | ad7ad57 | 2007-07-27 22:39:14 -0700 | [diff] [blame] | 35 | unsigned long		iommu_tags; | 
| David S. Miller | 6687508 | 2007-04-25 00:12:09 -0700 | [diff] [blame] | 36 | unsigned long		iommu_ctxflush; | 
|  | 37 | unsigned long		write_complete_reg; | 
|  | 38 | unsigned long		dummy_page; | 
|  | 39 | unsigned long		dummy_page_pa; | 
|  | 40 | unsigned long		ctx_lowest_free; | 
|  | 41 | DECLARE_BITMAP(ctx_bitmap, IOMMU_NUM_CTXS); | 
|  | 42 | u32			dma_addr_mask; | 
|  | 43 | }; | 
|  | 44 |  | 
|  | 45 | struct strbuf { | 
|  | 46 | int			strbuf_enabled; | 
|  | 47 | unsigned long		strbuf_control; | 
|  | 48 | unsigned long		strbuf_pflush; | 
|  | 49 | unsigned long		strbuf_fsync; | 
|  | 50 | unsigned long		strbuf_ctxflush; | 
|  | 51 | unsigned long		strbuf_ctxmatch_base; | 
|  | 52 | unsigned long		strbuf_flushflag_pa; | 
|  | 53 | volatile unsigned long *strbuf_flushflag; | 
|  | 54 | volatile unsigned long	__flushflag_buf[(64+(64-1)) / sizeof(long)]; | 
|  | 55 | }; | 
|  | 56 |  | 
| David S. Miller | ad7ad57 | 2007-07-27 22:39:14 -0700 | [diff] [blame] | 57 | extern int iommu_table_init(struct iommu *iommu, int tsbsize, | 
|  | 58 | u32 dma_offset, u32 dma_addr_mask); | 
|  | 59 |  | 
|  | 60 | #endif /* !(_SPARC64_IOMMU_H) */ |