Module Name: src Committed By: mrg Date: Sun Mar 20 20:42:06 UTC 2011
Modified Files: src/sys/arch/sparc64/dev: iommureg.h Log Message: define 'struct iommureg2', that includes the full set of regs for the schizo and pyro iommu's. use these in IOMMUREG(). add back IOMMUREG_READ() and IOMMUREG_WRITE() macros. To generate a diff of this commit: cvs rdiff -u -r1.18 -r1.19 src/sys/arch/sparc64/dev/iommureg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/sparc64/dev/iommureg.h diff -u src/sys/arch/sparc64/dev/iommureg.h:1.18 src/sys/arch/sparc64/dev/iommureg.h:1.19 --- src/sys/arch/sparc64/dev/iommureg.h:1.18 Wed Mar 16 05:49:43 2011 +++ src/sys/arch/sparc64/dev/iommureg.h Sun Mar 20 20:42:06 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: iommureg.h,v 1.18 2011/03/16 05:49:43 mrg Exp $ */ +/* $NetBSD: iommureg.h,v 1.19 2011/03/20 20:42:06 mrg Exp $ */ /* * Copyright (c) 1992, 1993 @@ -48,11 +48,26 @@ * controllers. */ -/* iommmu registers */ +/* + * iommu registers - keep iommureg2 aligned with iommureg, so we can always + * use offsetof on iommureg2, regardless of the controller. + */ struct iommureg { - uint64_t iommu_cr; /* IOMMU control register */ - uint64_t iommu_tsb; /* IOMMU TSB base register */ - uint64_t iommu_flush; /* IOMMU flush register */ + volatile uint64_t iommu_cr; /* IOMMU control register */ + volatile uint64_t iommu_tsb; /* IOMMU TSB base register */ + volatile uint64_t iommu_flush; /* IOMMU flush register */ +}; + +/* iommu registers for schizo and newer controllers. */ +struct iommureg2 { + volatile uint64_t iommu_cr; /* IOMMU control register */ + volatile uint64_t iommu_tsb; /* IOMMU TSB base register */ + volatile uint64_t iommu_flush; /* IOMMU flush register */ + volatile u_int64_t iommu_ctxflush; + volatile u_int64_t iommu_reserved[28]; + volatile u_int64_t iommu_cache_flush; + volatile u_int64_t iommu_cache_invalidate; + volatile u_int64_t iommu_reserved2[30]; }; /* streaming buffer registers */ @@ -62,8 +77,20 @@ uint64_t strbuf_flushsync;/* streaming buffer flush sync */ }; -#define IOMMUREG(x) (offsetof(struct iommureg, x)) +#define IOMMUREG(x) (offsetof(struct iommureg2, x)) #define STRBUFREG(x) (offsetof(struct iommu_strbuf, x)) + +#define IOMMUREG_READ(is, reg) \ + bus_space_read_8((is)->is_bustag, \ + (is)->is_iommu, \ + IOMMUREG(reg)) + +#define IOMMUREG_WRITE(is, reg, v) \ + bus_space_write_8((is)->is_bustag, \ + (is)->is_iommu, \ + IOMMUREG(reg), \ + (v)) + /* streaming buffer control register */ #define STRBUF_EN 0x000000000000000001LL #define STRBUF_D 0x000000000000000002LL