1/* $Id: iommu.h,v 1.1.1.1 2007/08/03 18:53:36 Exp $ 2 * iommu.h: Definitions for the sun5 IOMMU. 3 * 4 * Copyright (C) 1996, 1999 David S. Miller (davem@caip.rutgers.edu) 5 */ 6#ifndef _SPARC64_IOMMU_H 7#define _SPARC64_IOMMU_H 8 9/* The format of an iopte in the page tables. */ 10#define IOPTE_VALID 0x8000000000000000UL 11#define IOPTE_64K 0x2000000000000000UL 12#define IOPTE_STBUF 0x1000000000000000UL 13#define IOPTE_INTRA 0x0800000000000000UL 14#define IOPTE_CONTEXT 0x07ff800000000000UL 15#define IOPTE_PAGE 0x00007fffffffe000UL 16#define IOPTE_CACHE 0x0000000000000010UL 17#define IOPTE_WRITE 0x0000000000000002UL 18 19#define IOMMU_NUM_CTXS 4096 20 21struct iommu_arena { 22 unsigned long *map; 23 unsigned int hint; 24 unsigned int limit; 25}; 26 27struct iommu { 28 spinlock_t lock; 29 struct iommu_arena arena; 30 iopte_t *page_table; 31 u32 page_table_map_base; 32 unsigned long iommu_control; 33 unsigned long iommu_tsbbase; 34 unsigned long iommu_flush; 35 unsigned long iommu_flushinv; 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 45struct 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 57#endif /* !(_SPARC_IOMMU_H) */ 58