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

Reply via email to