2005-04-16 15:20:36 -07:00
/* $Id: iommu.h,v 1.10 2001/03/08 09:55:56 davem Exp $
* iommu . h : Definitions for the sun5 IOMMU .
*
* Copyright ( C ) 1996 , 1999 David S . Miller ( davem @ caip . rutgers . edu )
*/
# ifndef _SPARC64_IOMMU_H
# define _SPARC64_IOMMU_H
/* The format of an iopte in the page tables. */
2007-04-24 23:51:18 -07:00
# define IOPTE_VALID 0x8000000000000000UL
# define IOPTE_64K 0x2000000000000000UL
# define IOPTE_STBUF 0x1000000000000000UL
# define IOPTE_INTRA 0x0800000000000000UL
# define IOPTE_CONTEXT 0x07ff800000000000UL
# define IOPTE_PAGE 0x00007fffffffe000UL
# define IOPTE_CACHE 0x0000000000000010UL
# define IOPTE_WRITE 0x0000000000000002UL
2005-04-16 15:20:36 -07:00
2005-05-31 16:57:59 -07:00
# define IOMMU_NUM_CTXS 4096
2007-04-24 23:51:18 -07:00
struct iommu_arena {
unsigned long * map ;
unsigned int hint ;
unsigned int limit ;
} ;
2007-04-25 00:12:09 -07:00
struct iommu {
spinlock_t lock ;
struct iommu_arena arena ;
iopte_t * page_table ;
u32 page_table_map_base ;
unsigned long iommu_control ;
unsigned long iommu_tsbbase ;
unsigned long iommu_flush ;
unsigned long iommu_ctxflush ;
unsigned long write_complete_reg ;
unsigned long dummy_page ;
unsigned long dummy_page_pa ;
unsigned long ctx_lowest_free ;
DECLARE_BITMAP ( ctx_bitmap , IOMMU_NUM_CTXS ) ;
u32 dma_addr_mask ;
} ;
struct strbuf {
int strbuf_enabled ;
unsigned long strbuf_control ;
unsigned long strbuf_pflush ;
unsigned long strbuf_fsync ;
unsigned long strbuf_ctxflush ;
unsigned long strbuf_ctxmatch_base ;
unsigned long strbuf_flushflag_pa ;
volatile unsigned long * strbuf_flushflag ;
volatile unsigned long __flushflag_buf [ ( 64 + ( 64 - 1 ) ) / sizeof ( long ) ] ;
} ;
2005-04-16 15:20:36 -07:00
# endif /* !(_SPARC_IOMMU_H) */