Module Name: src
Committed By: matt
Date: Sun Feb 20 07:58:14 UTC 2011
Modified Files:
src/sys/arch/hpcmips/conf: std.hpcmips std.lcard
src/sys/arch/hpcmips/hpcmips: autoconf.c bus_dma.c bus_space.c cpu.c
hpcapm_machdep.c interrupt.c machdep.c mainbus.c
src/sys/arch/hpcmips/include: intr.h sysconf.h
src/sys/arch/hpcmips/tx: tx39.c tx39icu.c
src/sys/arch/hpcmips/vr: vr.c vrdcu.c
Log Message:
Merge forward matt-nb5-mips64
Adapt to new interrupt/spl framework
(XXX don't know how to deal with use of spllower in sleep/pause code so
hpcmips kernel will fail to compile).
To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.20 src/sys/arch/hpcmips/conf/std.hpcmips
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/hpcmips/conf/std.lcard
cvs rdiff -u -r1.23 -r1.24 src/sys/arch/hpcmips/hpcmips/autoconf.c
cvs rdiff -u -r1.35 -r1.36 src/sys/arch/hpcmips/hpcmips/bus_dma.c
cvs rdiff -u -r1.28 -r1.29 src/sys/arch/hpcmips/hpcmips/bus_space.c
cvs rdiff -u -r1.16 -r1.17 src/sys/arch/hpcmips/hpcmips/cpu.c
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/hpcmips/hpcmips/hpcapm_machdep.c
cvs rdiff -u -r1.17 -r1.18 src/sys/arch/hpcmips/hpcmips/interrupt.c
cvs rdiff -u -r1.113 -r1.114 src/sys/arch/hpcmips/hpcmips/machdep.c
cvs rdiff -u -r1.30 -r1.31 src/sys/arch/hpcmips/hpcmips/mainbus.c
cvs rdiff -u -r1.22 -r1.23 src/sys/arch/hpcmips/include/intr.h
cvs rdiff -u -r1.15 -r1.16 src/sys/arch/hpcmips/include/sysconf.h
cvs rdiff -u -r1.41 -r1.42 src/sys/arch/hpcmips/tx/tx39.c
cvs rdiff -u -r1.27 -r1.28 src/sys/arch/hpcmips/tx/tx39icu.c
cvs rdiff -u -r1.58 -r1.59 src/sys/arch/hpcmips/vr/vr.c
cvs rdiff -u -r1.5 -r1.6 src/sys/arch/hpcmips/vr/vrdcu.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/hpcmips/conf/std.hpcmips
diff -u src/sys/arch/hpcmips/conf/std.hpcmips:1.19 src/sys/arch/hpcmips/conf/std.hpcmips:1.20
--- src/sys/arch/hpcmips/conf/std.hpcmips:1.19 Sun Dec 11 12:17:33 2005
+++ src/sys/arch/hpcmips/conf/std.hpcmips Sun Feb 20 07:58:13 2011
@@ -1,4 +1,4 @@
-# $NetBSD: std.hpcmips,v 1.19 2005/12/11 12:17:33 christos Exp $
+# $NetBSD: std.hpcmips,v 1.20 2011/02/20 07:58:13 matt Exp $
# standard, required hpcmips info
machine hpcmips mips
@@ -6,7 +6,7 @@
makeoptions MACHINE_ARCH="mipsel"
options NOFPU # No FPU
-options SOFTFLOAT # emulate FPU insn
+options FPEMUL # emulate FPU insn
mainbus0 at root
cpu* at mainbus0
Index: src/sys/arch/hpcmips/conf/std.lcard
diff -u src/sys/arch/hpcmips/conf/std.lcard:1.7 src/sys/arch/hpcmips/conf/std.lcard:1.8
--- src/sys/arch/hpcmips/conf/std.lcard:1.7 Sat Sep 16 02:14:56 2006
+++ src/sys/arch/hpcmips/conf/std.lcard Sun Feb 20 07:58:13 2011
@@ -1,4 +1,4 @@
-# $NetBSD: std.lcard,v 1.7 2006/09/16 02:14:56 gdamore Exp $
+# $NetBSD: std.lcard,v 1.8 2011/02/20 07:58:13 matt Exp $
# standard, required hpcmips info
machine hpcmips mips
@@ -6,7 +6,7 @@
makeoptions MACHINE_ARCH="mipsel"
options NOFPU # No FPU
-options SOFTFLOAT # emulate FPU insn
+options FPEMUL # emulate FPU insn
options MIPS3 # R4000/R4400/R4600 CPUs
options MIPS3_4100 # VR4100 core
Index: src/sys/arch/hpcmips/hpcmips/autoconf.c
diff -u src/sys/arch/hpcmips/hpcmips/autoconf.c:1.23 src/sys/arch/hpcmips/hpcmips/autoconf.c:1.24
--- src/sys/arch/hpcmips/hpcmips/autoconf.c:1.23 Tue Feb 8 20:20:14 2011
+++ src/sys/arch/hpcmips/hpcmips/autoconf.c Sun Feb 20 07:58:13 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: autoconf.c,v 1.23 2011/02/08 20:20:14 rmind Exp $ */
+/* $NetBSD: autoconf.c,v 1.24 2011/02/20 07:58:13 matt Exp $ */
/*
* Copyright (c) 1988 University of Utah.
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.23 2011/02/08 20:20:14 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.24 2011/02/20 07:58:13 matt Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -76,7 +76,7 @@
panic("no mainbus found");
/* Configuration is finished, turn on interrupts. */
- _splnone(); /* enable all source forcing SOFT_INTs cleared */
+ spl0(); /* enable all source forcing SOFT_INTs cleared */
}
void
Index: src/sys/arch/hpcmips/hpcmips/bus_dma.c
diff -u src/sys/arch/hpcmips/hpcmips/bus_dma.c:1.35 src/sys/arch/hpcmips/hpcmips/bus_dma.c:1.36
--- src/sys/arch/hpcmips/hpcmips/bus_dma.c:1.35 Mon Dec 14 00:46:03 2009
+++ src/sys/arch/hpcmips/hpcmips/bus_dma.c Sun Feb 20 07:58:13 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: bus_dma.c,v 1.35 2009/12/14 00:46:03 matt Exp $ */
+/* $NetBSD: bus_dma.c,v 1.36 2011/02/20 07:58:13 matt Exp $ */
/*-
* Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bus_dma.c,v 1.35 2009/12/14 00:46:03 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bus_dma.c,v 1.36 2011/02/20 07:58:13 matt Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -516,13 +516,12 @@
bus_size_t boundary, bus_dma_segment_t *segs, int nsegs, int *rsegs,
int flags)
{
- extern paddr_t avail_start, avail_end; /* XXX */
psize_t high;
- high = avail_end - PAGE_SIZE;
+ high = mips_avail_end - PAGE_SIZE;
return (_hpcmips_bd_mem_alloc_range(t, size, alignment, boundary,
- segs, nsegs, rsegs, flags, avail_start, high));
+ segs, nsegs, rsegs, flags, mips_avail_start, high));
}
/*
@@ -536,10 +535,9 @@
int flags, paddr_t low, paddr_t high)
{
#ifdef DIAGNOSTIC
- extern paddr_t avail_start, avail_end; /* XXX */
- high = high<(avail_end - PAGE_SIZE)? high: (avail_end - PAGE_SIZE);
- low = low>avail_start? low: avail_start;
+ high = high<(mips_avail_end - PAGE_SIZE)? high: (mips_avail_end - PAGE_SIZE);
+ low = low>mips_avail_start? low: mips_avail_start;
#endif
return (_bus_dmamem_alloc_range_common(t, size, alignment, boundary,
Index: src/sys/arch/hpcmips/hpcmips/bus_space.c
diff -u src/sys/arch/hpcmips/hpcmips/bus_space.c:1.28 src/sys/arch/hpcmips/hpcmips/bus_space.c:1.29
--- src/sys/arch/hpcmips/hpcmips/bus_space.c:1.28 Sat Nov 7 07:27:43 2009
+++ src/sys/arch/hpcmips/hpcmips/bus_space.c Sun Feb 20 07:58:14 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: bus_space.c,v 1.28 2009/11/07 07:27:43 cegger Exp $ */
+/* $NetBSD: bus_space.c,v 1.29 2011/02/20 07:58:14 matt Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bus_space.c,v 1.28 2009/11/07 07:27:43 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bus_space.c,v 1.29 2011/02/20 07:58:14 matt Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -250,7 +250,7 @@
/*
* Update the same virtual address entry.
*/
- MachTLBUpdate(va, opte);
+ tlb_update(va, opte);
}
return (bpa);
}
Index: src/sys/arch/hpcmips/hpcmips/cpu.c
diff -u src/sys/arch/hpcmips/hpcmips/cpu.c:1.16 src/sys/arch/hpcmips/hpcmips/cpu.c:1.17
--- src/sys/arch/hpcmips/hpcmips/cpu.c:1.16 Mon Dec 14 00:46:04 2009
+++ src/sys/arch/hpcmips/hpcmips/cpu.c Sun Feb 20 07:58:14 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: cpu.c,v 1.16 2009/12/14 00:46:04 matt Exp $ */
+/* $NetBSD: cpu.c,v 1.17 2011/02/20 07:58:14 matt Exp $ */
/*-
* Copyright (c) 1999 Shin Takemura, All rights reserved.
* Copyright (c) 1999-2001 SATO Kazumi, All rights reserved.
@@ -56,27 +56,28 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.16 2009/12/14 00:46:04 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.17 2011/02/20 07:58:14 matt Exp $");
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/device.h>
+#include <sys/cpu.h>
#include <sys/bus.h>
#include <machine/sysconf.h>
#include <machine/autoconf.h>
/* Definition of the driver for autoconfig. */
-static int cpumatch(struct device *, struct cfdata *, void *);
-static void cpuattach(struct device *, struct device *, void *);
+static int cpumatch(device_t, cfdata_t, void *);
+static void cpuattach(device_t, device_t, void *);
-CFATTACH_DECL(cpu, sizeof (struct device),
+CFATTACH_DECL_NEW(cpu, 0,
cpumatch, cpuattach, NULL, NULL);
extern struct cfdriver cpu_cd;
static int
-cpumatch(struct device *parent, struct cfdata *cf, void *aux)
+cpumatch(device_t parent, cfdata_t cf, void *aux)
{
struct mainbus_attach_args *ma = aux;
@@ -85,12 +86,16 @@
}
static void
-cpuattach(struct device *parent, struct device *dev, void *aux)
+cpuattach(device_t parent, device_t self, void *aux)
{
+ struct cpu_info * const ci = curcpu();
- printf(": ");
+ ci->ci_dev = self;
+ self->dv_private = ci;
- cpu_identify();
+ aprint_normal(": ");
+
+ cpu_identify(self);
/* install CPU specific idle routine if any. */
if (platform.cpu_idle != NULL)
Index: src/sys/arch/hpcmips/hpcmips/hpcapm_machdep.c
diff -u src/sys/arch/hpcmips/hpcmips/hpcapm_machdep.c:1.3 src/sys/arch/hpcmips/hpcmips/hpcapm_machdep.c:1.4
--- src/sys/arch/hpcmips/hpcmips/hpcapm_machdep.c:1.3 Wed Mar 18 10:22:29 2009
+++ src/sys/arch/hpcmips/hpcmips/hpcapm_machdep.c Sun Feb 20 07:58:14 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: hpcapm_machdep.c,v 1.3 2009/03/18 10:22:29 cegger Exp $ */
+/* $NetBSD: hpcapm_machdep.c,v 1.4 2011/02/20 07:58:14 matt Exp $ */
/*
* Copyright (c) 2000 Takemura Shin
@@ -29,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hpcapm_machdep.c,v 1.3 2009/03/18 10:22:29 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hpcapm_machdep.c,v 1.4 2011/02/20 07:58:14 matt Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -91,35 +91,35 @@
machine_sleep(void)
{
#if NVRIP_COMMON > 0
- if (platid_match(&platid, &platid_mask_CPU_MIPS_VR_41XX)) {
- /*
- * disable all interrupts except PIU interrupt
- */
- vrip_intr_suspend();
- _spllower(~MIPS_INT_MASK_0);
-
- /*
- * SUSPEND instruction puts the CPU into power saveing
- * state until some interrupt occuer.
- * It sleeps until you push the power button.
- */
- __asm(".set noreorder");
- __asm(".word " ___STRING(VR_OPCODE_SUSPEND));
- __asm("nop");
- __asm("nop");
- __asm("nop");
- __asm("nop");
- __asm("nop");
- __asm(".set reorder");
-
- splhigh();
- vrip_intr_resume();
- delay(1000); /* 1msec */
- }
+ if (platid_match(&platid, &platid_mask_CPU_MIPS_VR_41XX)) {
+ /*
+ * disable all interrupts except PIU interrupt
+ */
+ vrip_intr_suspend();
+ _spllower(~MIPS_INT_MASK_0);
+
+ /*
+ * SUSPEND instruction puts the CPU into power saveing
+ * state until some interrupt occuer.
+ * It sleeps until you push the power button.
+ */
+ __asm(".set noreorder");
+ __asm(".word " ___STRING(VR_OPCODE_SUSPEND));
+ __asm("nop");
+ __asm("nop");
+ __asm("nop");
+ __asm("nop");
+ __asm("nop");
+ __asm(".set reorder");
+
+ splhigh();
+ vrip_intr_resume();
+ delay(1000); /* 1msec */
+ }
#endif /* NVRIP_COMMON > 0 */
#ifdef TX39XX
- if (platid_match(&platid, &platid_mask_CPU_MIPS_TX)) {
- tx39power_suspend_cpu();
- }
+ if (platid_match(&platid, &platid_mask_CPU_MIPS_TX)) {
+ tx39power_suspend_cpu();
+ }
#endif
}
Index: src/sys/arch/hpcmips/hpcmips/interrupt.c
diff -u src/sys/arch/hpcmips/hpcmips/interrupt.c:1.17 src/sys/arch/hpcmips/hpcmips/interrupt.c:1.18
--- src/sys/arch/hpcmips/hpcmips/interrupt.c:1.17 Mon Dec 20 00:25:34 2010
+++ src/sys/arch/hpcmips/hpcmips/interrupt.c Sun Feb 20 07:58:14 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: interrupt.c,v 1.17 2010/12/20 00:25:34 matt Exp $ */
+/* $NetBSD: interrupt.c,v 1.18 2011/02/20 07:58:14 matt Exp $ */
/*-
* Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -30,26 +30,24 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.17 2010/12/20 00:25:34 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: interrupt.c,v 1.18 2011/02/20 07:58:14 matt Exp $");
#include "opt_vr41xx.h"
#include "opt_tx39xx.h"
+#define __INTR_PRIVATE
+
#include <sys/param.h>
#include <sys/malloc.h>
+#include <sys/intr.h>
#include <machine/sysconf.h>
-extern const u_int32_t __ipl_sr_bits_vr[];
-extern const u_int32_t __ipl_sr_bits_tx[];
-
-const u_int32_t *ipl_sr_bits;
-
void
intr_init(void)
{
- ipl_sr_bits = CPUISMIPS3 ? __ipl_sr_bits_vr : __ipl_sr_bits_tx;
+ ipl_sr_map = CPUISMIPS3 ? __ipl_sr_map_vr : __ipl_sr_map_tx;
}
#if defined(VR41XX) && defined(TX39XX)
@@ -62,9 +60,9 @@
*
*/
void
-cpu_intr(uint32_t status, uint32_t cause, vaddr_t pc, uint32_t ipending)
+cpu_intr(int ppl, vaddr_t pc, uint32_t status)
{
- (*platform.cpu_intr)(status, cause, pc, ipending);
+ (*platform.cpu_intr)(ppl, pc, status);
}
#endif /* VR41XX && TX39XX */
Index: src/sys/arch/hpcmips/hpcmips/machdep.c
diff -u src/sys/arch/hpcmips/hpcmips/machdep.c:1.113 src/sys/arch/hpcmips/hpcmips/machdep.c:1.114
--- src/sys/arch/hpcmips/hpcmips/machdep.c:1.113 Tue Feb 8 20:20:15 2011
+++ src/sys/arch/hpcmips/hpcmips/machdep.c Sun Feb 20 07:58:14 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.113 2011/02/08 20:20:15 rmind Exp $ */
+/* $NetBSD: machdep.c,v 1.114 2011/02/20 07:58:14 matt Exp $ */
/*-
* Copyright (c) 1999 Shin Takemura, All rights reserved.
@@ -69,7 +69,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.113 2011/02/08 20:20:15 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.114 2011/02/20 07:58:14 matt Exp $");
#include "opt_vr41xx.h"
#include "opt_tx39xx.h"
@@ -103,6 +103,7 @@
#include <ufs/mfs/mfs_extern.h> /* mfs_initminiroot() */
#include <dev/cons.h> /* cntab access (cpu_reboot) */
+#include <machine/locore.h>
#include <machine/psl.h>
#include <machine/sysconf.h>
#include <machine/platid.h>
@@ -184,15 +185,6 @@
int mem_cluster_cnt;
phys_ram_seg_t mem_clusters[VM_PHYSSEG_MAX];
-/*
- * safepri is a safe priority for sleep to set for a spin-wait
- * during autoconfiguration or after a panic.
- * Used as an argument to splx().
- * XXX disables interrupt 5 to disable mips3 on-chip clock, which also
- * disables mips1 FPU interrupts.
- */
-int safepri = MIPS3_PSL_LOWIPL; /* XXX */
-
void mach_init(int, char *[], struct bootinfo *);
#ifdef DEBUG
@@ -326,7 +318,7 @@
* Initialize locore-function vector.
* Clear out the I and D caches.
*/
- mips_vector_init();
+ mips_vector_init(NULL, false);
intr_init();
#ifdef DEBUG
@@ -448,22 +440,8 @@
physmem += atop(mem_clusters[i].size);
}
- /* Cluster 0 is always the kernel, which doesn't get loaded. */
- for (i = 1; i < mem_cluster_cnt; i++) {
- paddr_t start;
- psize_t size;
-
- start = (paddr_t)mem_clusters[i].start;
- size = (psize_t)mem_clusters[i].size;
-
- printf("loading %#"PRIxPADDR",%#"PRIxPSIZE"\n", start, size);
-
- memset((void *)MIPS_PHYS_TO_KSEG1(start), 0, size);
-
- uvm_page_physload(atop(start), atop(start + size),
- atop(start), atop(start + size),
- VM_FREELIST_DEFAULT);
- }
+ mips_page_physload(MIPS_KSEG0_START, (vaddr_t)kernend,
+ mem_clusters, mem_cluster_cnt, NULL, 0);
/*
* Initialize error message buffer (at end of core).
@@ -544,7 +522,6 @@
{
/* take a snap shot before clobbering any registers */
- if (curlwp)
savectx(curpcb);
#ifdef DEBUG
Index: src/sys/arch/hpcmips/hpcmips/mainbus.c
diff -u src/sys/arch/hpcmips/hpcmips/mainbus.c:1.30 src/sys/arch/hpcmips/hpcmips/mainbus.c:1.31
--- src/sys/arch/hpcmips/hpcmips/mainbus.c:1.30 Fri Jan 4 22:13:56 2008
+++ src/sys/arch/hpcmips/hpcmips/mainbus.c Sun Feb 20 07:58:14 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: mainbus.c,v 1.30 2008/01/04 22:13:56 ad Exp $ */
+/* $NetBSD: mainbus.c,v 1.31 2011/02/20 07:58:14 matt Exp $ */
/*-
* Copyright (c) 1999
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mainbus.c,v 1.30 2008/01/04 22:13:56 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mainbus.c,v 1.31 2011/02/20 07:58:14 matt Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -54,28 +54,27 @@
#define STATIC static
#endif
-STATIC int mainbus_match(struct device *, struct cfdata *, void *);
-STATIC void mainbus_attach(struct device *, struct device *, void *);
-STATIC int mainbus_search(struct device *, struct cfdata *,
- const int *, void *);
+STATIC int mainbus_match(device_t, cfdata_t, void *);
+STATIC void mainbus_attach(device_t, device_t, void *);
+STATIC int mainbus_search(device_t, cfdata_t, const int *, void *);
STATIC int mainbus_print(void *, const char *);
-CFATTACH_DECL(mainbus, sizeof(struct device),
+CFATTACH_DECL_NEW(mainbus, 0,
mainbus_match, mainbus_attach, NULL, NULL);
STATIC int __mainbus_attached;
int
-mainbus_match(struct device *parent, struct cfdata *cf, void *aux)
+mainbus_match(device_t parent, cfdata_t cf, void *aux)
{
return (__mainbus_attached ? 0 : 1); /* don't attach twice */
}
void
-mainbus_attach(struct device *parent, struct device *self, void *aux)
+mainbus_attach(device_t parent, device_t self, void *aux)
{
- static const char *devnames[] = { /* ATTACH ORDER */
+ static const char * const devnames[] = { /* ATTACH ORDER */
"cpu", /* 1. CPU */
"vrip", "vr4102ip", "vr4122ip",
"vr4181ip", /* 2. System BUS */
@@ -106,8 +105,7 @@
}
int
-mainbus_search(struct device *parent, struct cfdata *cf,
- const int *ldesc, void *aux)
+mainbus_search(device_t parent, cfdata_t cf, const int *ldesc, void *aux)
{
struct mainbus_attach_args *ma = (void *)aux;
int locator = cf->cf_loc[MAINBUSCF_PLATFORM];
Index: src/sys/arch/hpcmips/include/intr.h
diff -u src/sys/arch/hpcmips/include/intr.h:1.22 src/sys/arch/hpcmips/include/intr.h:1.23
--- src/sys/arch/hpcmips/include/intr.h:1.22 Fri Jan 4 22:03:25 2008
+++ src/sys/arch/hpcmips/include/intr.h Sun Feb 20 07:58:14 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: intr.h,v 1.22 2008/01/04 22:03:25 ad Exp $ */
+/* $NetBSD: intr.h,v 1.23 2011/02/20 07:58:14 matt Exp $ */
/*
* Copyright (c) 1998 Jonathan Stone. All rights reserved.
@@ -33,62 +33,17 @@
#ifndef _HPCMIPS_INTR_H_
#define _HPCMIPS_INTR_H_
-#define IPL_NONE 0 /* disable only this interrupt */
-#define IPL_SOFTCLOCK 1 /* clock software interrupts (SI 0) */
-#define IPL_SOFTBIO 1 /* bio software interrupts (SI 0) */
-#define IPL_SOFTNET 2 /* network software interrupts (SI 1) */
-#define IPL_SOFTSERIAL 2 /* serial software interrupts (SI 1) */
-#define IPL_VM 3
-#define IPL_SCHED 4
-#define IPL_HIGH 4 /* disable all interrupts */
-
-#define _IPL_N 5
-
-#define _IPL_SI0_FIRST IPL_SOFTCLOCK
-#define _IPL_SI0_LAST IPL_SOFTBIO
-
-#define _IPL_SI1_FIRST IPL_SOFTNET
-#define _IPL_SI1_LAST IPL_SOFTSERIAL
-
-/* Interrupt sharing types. */
-#define IST_UNUSABLE -1 /* interrupt cannot be used */
-#define IST_NONE 0 /* none */
-#define IST_PULSE 1 /* pulsed */
-#define IST_EDGE 2 /* edge-triggered */
-#define IST_LEVEL 3 /* level-triggered */
+#include <mips/intr.h>
#ifdef _KERNEL
#ifndef _LOCORE
-#include <mips/cpuregs.h>
-#include <mips/locore.h>
-
-extern const u_int32_t *ipl_sr_bits;
void intr_init(void);
-#define spl0() (void) _spllower(0)
-#define splx(s) (void) _splset(s)
-
-typedef int ipl_t;
-typedef struct {
- ipl_t _sr;
-} ipl_cookie_t;
-
-static inline ipl_cookie_t
-makeiplcookie(ipl_t ipl)
-{
-
- return (ipl_cookie_t){._sr = ipl_sr_bits[ipl]};
-}
-
-static inline int
-splraiseipl(ipl_cookie_t icookie)
-{
-
- return _splraise(icookie._sr);
-}
-
-#include <sys/spl.h>
+#ifdef __INTR_PRIVATE
+extern const struct ipl_sr_map __ipl_sr_map_vr;
+extern const struct ipl_sr_map __ipl_sr_map_tx;
+#endif
#endif /* !_LOCORE */
#endif /* _KERNEL */
Index: src/sys/arch/hpcmips/include/sysconf.h
diff -u src/sys/arch/hpcmips/include/sysconf.h:1.15 src/sys/arch/hpcmips/include/sysconf.h:1.16
--- src/sys/arch/hpcmips/include/sysconf.h:1.15 Tue Dec 15 06:01:43 2009
+++ src/sys/arch/hpcmips/include/sysconf.h Sun Feb 20 07:58:14 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: sysconf.h,v 1.15 2009/12/15 06:01:43 mrg Exp $ */
+/* $NetBSD: sysconf.h,v 1.16 2011/02/20 07:58:14 matt Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All rights reserved.
@@ -62,7 +62,7 @@
* reboot - reboot or powerdown
* clock -
*/
- void (*cpu_intr)(uint32_t, uint32_t, vaddr_t, uint32_t);
+ void (*cpu_intr)(int, vaddr_t, u_int32_t);
void (*cpu_idle)(void);
void (*cons_init)(void);
void (*fb_init)(void **);
Index: src/sys/arch/hpcmips/tx/tx39.c
diff -u src/sys/arch/hpcmips/tx/tx39.c:1.41 src/sys/arch/hpcmips/tx/tx39.c:1.42
--- src/sys/arch/hpcmips/tx/tx39.c:1.41 Thu Jan 21 01:23:15 2010
+++ src/sys/arch/hpcmips/tx/tx39.c Sun Feb 20 07:58:14 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: tx39.c,v 1.41 2010/01/21 01:23:15 pooka Exp $ */
+/* $NetBSD: tx39.c,v 1.42 2011/02/20 07:58:14 matt Exp $ */
/*-
* Copyright (c) 1999, 2000 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tx39.c,v 1.41 2010/01/21 01:23:15 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tx39.c,v 1.42 2011/02/20 07:58:14 matt Exp $");
#include "opt_vr41xx.h"
#include "opt_tx39xx.h"
@@ -39,12 +39,12 @@
#include <sys/param.h>
#include <sys/systm.h>
+#include <sys/intr.h>
#include <uvm/uvm_extern.h>
#include <mips/cache.h>
-#include <machine/locore.h> /* cpu_id */
#include <machine/bootinfo.h> /* bootinfo */
#include <machine/sysconf.h> /* platform */
@@ -84,7 +84,7 @@
#define TX_INTR cpu_intr /* locore_mips3 directly call this */
#endif
-extern void TX_INTR(u_int32_t, u_int32_t, u_int32_t, u_int32_t);
+extern void TX_INTR(int, vaddr_t, uint32_t);
void tx39clock_cpuspeed(int *, int *);
@@ -114,7 +114,7 @@
platform.reboot = tx_reboot;
- model = MIPS_PRID_REV(cpu_id);
+ model = MIPS_PRID_REV(mips_options.mips_cpu_id);
switch (model) {
default:
@@ -181,9 +181,9 @@
tx_find_dram(paddr_t start, paddr_t end)
{
char *page, *startaddr, *endaddr;
- u_int32_t magic0, magic1;
-#define MAGIC0 (*(volatile u_int32_t *)(page + 0))
-#define MAGIC1 (*(volatile u_int32_t *)(page + 4))
+ uint32_t magic0, magic1;
+#define MAGIC0 (*(volatile uint32_t *)(page + 0))
+#define MAGIC1 (*(volatile uint32_t *)(page + 4))
startaddr = (char *)MIPS_PHYS_TO_KSEG1(start);
endaddr = (char *)MIPS_PHYS_TO_KSEG1(end);
@@ -238,7 +238,7 @@
tx_reboot(int howto, char *bootstr)
{
- goto *(u_int32_t *)MIPS_RESET_EXC_VEC;
+ goto *(uint32_t *)MIPS_RESET_EXC_VEC;
}
void
Index: src/sys/arch/hpcmips/tx/tx39icu.c
diff -u src/sys/arch/hpcmips/tx/tx39icu.c:1.27 src/sys/arch/hpcmips/tx/tx39icu.c:1.28
--- src/sys/arch/hpcmips/tx/tx39icu.c:1.27 Mon Dec 20 00:25:34 2010
+++ src/sys/arch/hpcmips/tx/tx39icu.c Sun Feb 20 07:58:14 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: tx39icu.c,v 1.27 2010/12/20 00:25:34 matt Exp $ */
+/* $NetBSD: tx39icu.c,v 1.28 2011/02/20 07:58:14 matt Exp $ */
/*-
* Copyright (c) 1999-2001 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tx39icu.c,v 1.27 2010/12/20 00:25:34 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tx39icu.c,v 1.28 2011/02/20 07:58:14 matt Exp $");
#include "opt_vr41xx.h"
#include "opt_tx39xx.h"
@@ -305,7 +305,7 @@
}
void
-TX_INTR(u_int32_t status, u_int32_t cause, u_int32_t pc, u_int32_t ipending)
+TX_INTR(u_int32_t status, u_int32_t cause, vaddr_t pc, u_int32_t ipending)
{
struct tx39icu_softc *sc;
tx_chipset_tag_t tc;
@@ -417,8 +417,10 @@
#endif
ci->ci_idepth--;
#ifdef __HAVE_FAST_SOFTINTS
- _splset((status & ~cause & MIPS_HARD_INT_MASK) | MIPS_SR_INT_IE);
- softintr(ipending);
+ ipending &= MIPS_SOFT_INT_MASK;
+ if (ipending == 0)
+ return;
+ softint_process(ipending);
#endif
}
Index: src/sys/arch/hpcmips/vr/vr.c
diff -u src/sys/arch/hpcmips/vr/vr.c:1.58 src/sys/arch/hpcmips/vr/vr.c:1.59
--- src/sys/arch/hpcmips/vr/vr.c:1.58 Mon Dec 20 00:25:34 2010
+++ src/sys/arch/hpcmips/vr/vr.c Sun Feb 20 07:58:14 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: vr.c,v 1.58 2010/12/20 00:25:34 matt Exp $ */
+/* $NetBSD: vr.c,v 1.59 2011/02/20 07:58:14 matt Exp $ */
/*-
* Copyright (c) 1999-2002
@@ -35,12 +35,14 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vr.c,v 1.58 2010/12/20 00:25:34 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vr.c,v 1.59 2011/02/20 07:58:14 matt Exp $");
#include "opt_vr41xx.h"
#include "opt_tx39xx.h"
#include "opt_kgdb.h"
+#define __INTR_PRIVATE
+
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/reboot.h>
@@ -127,22 +129,19 @@
* This is a mask of bits to clear in the SR when we go to a
* given interrupt priority level.
*/
-const u_int32_t __ipl_sr_bits_vr[_IPL_N] = {
- 0, /* IPL_NONE */
-
- MIPS_SOFT_INT_MASK_0, /* IPL_SOFTCLOCK */
-
- MIPS_SOFT_INT_MASK_0|
- MIPS_SOFT_INT_MASK_1, /* IPL_SOFTNET */
-
- MIPS_SOFT_INT_MASK_0|
- MIPS_SOFT_INT_MASK_1|
- MIPS_INT_MASK_0, /* IPL_VM */
-
- MIPS_SOFT_INT_MASK_0|
- MIPS_SOFT_INT_MASK_1|
- MIPS_INT_MASK_0|
- MIPS_INT_MASK_1, /* IPL_SCHED */
+const struct ipl_sr_map __ipl_sr_map_vr = {
+ .sr_bits = {
+ [IPL_NONE] = 0,
+ [IPL_SOFTCLOCK] = MIPS_SOFT_INT_MASK_0,
+ [IPL_SOFTNET] = MIPS_SOFT_INT_MASK,
+ [IPL_VM] = MIPS_SOFT_INT_MASK
+ | MIPS_INT_MASK_0,
+ [IPL_SCHED] = MIPS_SOFT_INT_MASK
+ | MIPS_INT_MASK_0
+ | MIPS_INT_MASK_1,
+ [IPL_DDB] = MIPS_INT_MASK,
+ [IPL_VM] = MIPS_INT_MASK,
+ },
};
#if defined(VR41XX) && defined(TX39XX)
@@ -152,7 +151,7 @@
#endif
void vr_init(void);
-void VR_INTR(u_int32_t, u_int32_t, u_int32_t, u_int32_t);
+void VR_INTR(int, vaddr_t, uint32_t);
extern void vr_idle(void);
STATIC void vr_cons_init(void);
STATIC void vr_fb_init(void **);
@@ -163,8 +162,8 @@
/*
* CPU interrupt dispatch table (HwInt[0:3])
*/
-STATIC int vr_null_handler(void *, u_int32_t, u_int32_t);
-STATIC int (*vr_intr_handler[4])(void *, u_int32_t, u_int32_t) =
+STATIC int vr_null_handler(void *, uint32_t, uint32_t);
+STATIC int (*vr_intr_handler[4])(void *, uint32_t, uint32_t) =
{
vr_null_handler,
vr_null_handler,
@@ -535,51 +534,30 @@
* Handle interrupts.
*/
void
-VR_INTR(u_int32_t status, u_int32_t cause, u_int32_t pc, u_int32_t ipending)
+VR_INTR(int ppl, vaddr_t pc, uint32_t status)
{
- struct cpu_info *ci;
-
- ci = curcpu();
- ci->ci_idepth++;
- ci->ci_data.cpu_nintr++;
-
- /* Deal with unneded compare interrupts occasionally so that we can
- * keep spllowersoftclock. */
- if (ipending & MIPS_INT_MASK_5) {
- mips3_cp0_compare_write(0);
- }
-
- if (ipending & MIPS_INT_MASK_1) {
- _splset(MIPS_SR_INT_IE); /* for spllowersoftclock */
- /* Remove the lower priority pending bits from status so that
- * spllowersoftclock will not happen if other interrupts are
- * pending. */
- (*vr_intr_handler[1])(vr_intr_arg[1], pc, status & ~(ipending
- & (MIPS_INT_MASK_0|MIPS_SOFT_INT_MASK_0|MIPS_SOFT_INT_MASK_1)));
- }
+ uint32_t ipending;
+ int ipl;
- if (ipending & MIPS_INT_MASK_0) {
- _splset(MIPS_INT_MASK_1|MIPS_SR_INT_IE);
- (*vr_intr_handler[0])(vr_intr_arg[0], pc, status);
- }
- ci->ci_idepth--;
+ while (ppl < (ipl = splintr(&ipending))) {
+ /* Deal with unneded compare interrupts occasionally so that
+ * we can keep spllowersoftclock. */
+ if (ipending & MIPS_INT_MASK_5) {
+ mips3_cp0_compare_write(0);
+ }
-#ifdef __HAVE_FAST_SOFTINTS
- if (ipending & MIPS_SOFT_INT_MASK_1) {
- _splset(MIPS_INT_MASK_1|MIPS_INT_MASK_0|MIPS_SR_INT_IE);
- softintr(MIPS_SOFT_INT_MASK_1);
- }
+ if (ipending & MIPS_INT_MASK_1) {
+ (*vr_intr_handler[1])(vr_intr_arg[1], pc, ipending);
+ }
- if (ipending & MIPS_SOFT_INT_MASK_0) {
- _splset(MIPS_SOFT_INT_MASK_1|MIPS_INT_MASK_1|MIPS_INT_MASK_0|
- MIPS_SR_INT_IE);
- softintr(MIPS_SOFT_INT_MASK_0);
+ if (ipending & MIPS_INT_MASK_0) {
+ (*vr_intr_handler[0])(vr_intr_arg[0], pc, status);
+ }
}
-#endif
}
void *
-vr_intr_establish(int line, int (*ih_fun)(void *, u_int32_t, u_int32_t),
+vr_intr_establish(int line, int (*ih_fun)(void *, uint32_t, uint32_t),
void *ih_arg)
{
@@ -601,7 +579,7 @@
}
int
-vr_null_handler(void *arg, u_int32_t pc, u_int32_t status)
+vr_null_handler(void *arg, uint32_t pc, uint32_t status)
{
printf("vr_null_handler\n");
Index: src/sys/arch/hpcmips/vr/vrdcu.c
diff -u src/sys/arch/hpcmips/vr/vrdcu.c:1.5 src/sys/arch/hpcmips/vr/vrdcu.c:1.6
--- src/sys/arch/hpcmips/vr/vrdcu.c:1.5 Sun Dec 11 12:17:34 2005
+++ src/sys/arch/hpcmips/vr/vrdcu.c Sun Feb 20 07:58:14 2011
@@ -24,7 +24,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vrdcu.c,v 1.5 2005/12/11 12:17:34 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vrdcu.c,v 1.6 2011/02/20 07:58:14 matt Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -219,17 +219,16 @@
bus_size_t boundary, bus_dma_segment_t *segs,
int nsegs, int *rsegs, int flags)
{
- extern paddr_t avail_start, avail_end; /* XXX */
paddr_t high;
DPRINTFN(1, ("_vrdcu_dmamem_alloc\n"));
- high = (avail_end < VRDMAAU_BOUNCE_THRESHOLD ?
- avail_end : VRDMAAU_BOUNCE_THRESHOLD) - PAGE_SIZE;
+ high = (mips_avail_end < VRDMAAU_BOUNCE_THRESHOLD ?
+ mips_avail_end : VRDMAAU_BOUNCE_THRESHOLD) - PAGE_SIZE;
alignment = alignment > VRDMAAU_ALIGNMENT ?
alignment : VRDMAAU_ALIGNMENT;
return _hpcmips_bd_mem_alloc_range(t, size, alignment, boundary,
segs, nsegs, rsegs, flags,
- avail_start, high);
+ mips_avail_start, high);
}