Module Name: src
Committed By: cliff
Date: Mon Mar 29 23:35:25 UTC 2010
Modified Files:
src/sys/arch/mips/rmi [matt-nb5-mips64]: rmixl_intr.c
Log Message:
- add IRT-based interrupt names for XLR
- rmixl_intr_string() calls chip-type-specific functions
to get appropriate names table
To generate a diff of this commit:
cvs rdiff -u -r1.1.2.15 -r1.1.2.16 src/sys/arch/mips/rmi/rmixl_intr.c
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/mips/rmi/rmixl_intr.c
diff -u src/sys/arch/mips/rmi/rmixl_intr.c:1.1.2.15 src/sys/arch/mips/rmi/rmixl_intr.c:1.1.2.16
--- src/sys/arch/mips/rmi/rmixl_intr.c:1.1.2.15 Sun Mar 21 21:25:30 2010
+++ src/sys/arch/mips/rmi/rmixl_intr.c Mon Mar 29 23:35:24 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: rmixl_intr.c,v 1.1.2.15 2010/03/21 21:25:30 cliff Exp $ */
+/* $NetBSD: rmixl_intr.c,v 1.1.2.16 2010/03/29 23:35:24 cliff Exp $ */
/*-
* Copyright (c) 2007 Ruslan Ermilov and Vsevolod Lobko.
@@ -64,7 +64,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rmixl_intr.c,v 1.1.2.15 2010/03/21 21:25:30 cliff Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rmixl_intr.c,v 1.1.2.16 2010/03/29 23:35:24 cliff Exp $");
#include "opt_ddb.h"
#define __INTR_PRIVATE
@@ -120,6 +120,45 @@
*/
/*
+ * rmixl_irtnames_xlrxxx
+ * - use for XLRxxx
+ */
+static const char * const rmixl_irtnames_xlrxxx[NIRTS] = {
+ "int 0 (watchdog)", /* 0 */
+ "int 1 (timer0)", /* 1 */
+ "int 2 (timer1)", /* 2 */
+ "int 3 (timer2)", /* 3 */
+ "int 4 (timer3)", /* 4 */
+ "int 5 (timer4)", /* 5 */
+ "int 6 (timer5)", /* 6 */
+ "int 7 (timer6)", /* 7 */
+ "int 8 (timer7)", /* 8 */
+ "int 9 (uart0)", /* 9 */
+ "int 10 (uart1)", /* 10 */
+ "int 11 (i2c0)", /* 11 */
+ "int 12 (i2c1)", /* 12 */
+ "int 13 (pcmcia)", /* 13 */
+ "int 14 (gpio)", /* 14 */
+ "int 15 (hyper)", /* 15 */
+ "int 16 (pcix)", /* 16 */
+ "int 17 (gmac0)", /* 17 */
+ "int 18 (gmac1)", /* 18 */
+ "int 19 (gmac2)", /* 19 */
+ "int 20 (gmac3)", /* 20 */
+ "int 21 (xgs0)", /* 21 */
+ "int 22 (xgs1)", /* 22 */
+ "int 23 (irq23)", /* 23 */
+ "int 24 (hyper_fatal)", /* 24 */
+ "int 25 (bridge_aerr)", /* 25 */
+ "int 26 (bridge_berr)", /* 26 */
+ "int 27 (bridge_tb)", /* 27 */
+ "int 28 (bridge_nmi)", /* 28 */
+ "int 29 (bridge_sram_derr)", /* 29 */
+ "int 30 (gpio_fatal)", /* 30 */
+ "int 31 (reserved)", /* 31 */
+};
+
+/*
* rmixl_irtnames_xls1xx
* - use for XLS1xx, XLS2xx, XLS4xx-Lite
*/
@@ -282,6 +321,9 @@
#endif
+static const char *rmixl_intr_string_xlr(int);
+static const char *rmixl_intr_string_xls(int);
+static uint32_t rmixl_irt_thread_mask(int);
static void rmixl_irt_init(int);
static void rmixl_irt_disestablish(int);
static void rmixl_irt_establish(int, int,
@@ -329,7 +371,8 @@
{
uint32_t r;
- KASSERT(cpu_rmixls(mips_options.mips_cpu));
+ KASSERT(cpu_rmixlr(mips_options.mips_cpu)
+ || cpu_rmixls(mips_options.mips_cpu));
#ifdef IOINTR_DEBUG
printf("IPL_NONE=%d, mask %#"PRIx64"\n",
@@ -440,8 +483,6 @@
const char *
rmixl_intr_string(int irq)
{
- const char *name;
-
if (irq < 0 || irq >= NINTRVECS)
panic("%s: irq index %d out of range, max %d",
__func__, irq, NIRTS - 1);
@@ -449,6 +490,29 @@
if (irq >= NIRTS)
return rmixl_vecnames_common[irq];
+ switch(cpu_rmixl_chip_type(mips_options.mips_cpu)) {
+ case CIDFL_RMI_TYPE_XLR:
+ return rmixl_intr_string_xlr(irq);
+ case CIDFL_RMI_TYPE_XLS:
+ return rmixl_intr_string_xls(irq);
+ case CIDFL_RMI_TYPE_XLP:
+ panic("%s: RMI XLP not yet supported", __func__);
+ }
+
+ return "undefined"; /* appease gcc */
+}
+
+static const char *
+rmixl_intr_string_xlr(int irq)
+{
+ return rmixl_irtnames_xlrxxx[irq];
+}
+
+static const char *
+rmixl_intr_string_xls(int irq)
+{
+ const char *name;
+
switch (MIPS_PRID_IMPL(mips_options.mips_cpu_id)) {
case MIPS_XLS104:
case MIPS_XLS108: