Use common mips generic software interrupt routines.
This commit is contained in:
parent
0e1a71bba5
commit
14b42ecf3b
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: autoconf.c,v 1.10 2003/07/15 01:29:21 lukem Exp $ */
|
/* $NetBSD: autoconf.c,v 1.11 2003/09/12 17:55:44 tsutsui Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000 Soren S. Jorvang. All rights reserved.
|
* Copyright (c) 2000 Soren S. Jorvang. All rights reserved.
|
||||||
@ -26,7 +26,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.10 2003/07/15 01:29:21 lukem Exp $");
|
__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.11 2003/09/12 17:55:44 tsutsui Exp $");
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <sys/systm.h>
|
#include <sys/systm.h>
|
||||||
@ -49,6 +49,9 @@ int cpuspeed = 100; /* Until we know more precisely. */
|
|||||||
void
|
void
|
||||||
cpu_configure()
|
cpu_configure()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
softintr_init();
|
||||||
|
|
||||||
(void)splhigh();
|
(void)splhigh();
|
||||||
|
|
||||||
if (config_rootfound("mainbus", "mainbus") == NULL)
|
if (config_rootfound("mainbus", "mainbus") == NULL)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: locore_machdep.S,v 1.3 2000/03/31 14:51:49 soren Exp $ */
|
/* $NetBSD: locore_machdep.S,v 1.4 2003/09/12 17:55:44 tsutsui Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000 Soren S. Jorvang. All rights reserved.
|
* Copyright (c) 2000 Soren S. Jorvang. All rights reserved.
|
||||||
@ -37,12 +37,7 @@
|
|||||||
.globl _C_LABEL(eintrnames)
|
.globl _C_LABEL(eintrnames)
|
||||||
|
|
||||||
_C_LABEL(intrnames):
|
_C_LABEL(intrnames):
|
||||||
.asciiz "softclock"
|
|
||||||
.asciiz "softnet"
|
|
||||||
|
|
||||||
_C_LABEL(eintrnames):
|
_C_LABEL(eintrnames):
|
||||||
.align 2
|
|
||||||
_C_LABEL(intrcnt):
|
_C_LABEL(intrcnt):
|
||||||
.word 0,0
|
|
||||||
_C_LABEL(eintrcnt):
|
_C_LABEL(eintrcnt):
|
||||||
.word 0
|
.word 0
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: machdep.c,v 1.46 2003/09/12 15:29:48 tsutsui Exp $ */
|
/* $NetBSD: machdep.c,v 1.47 2003/09/12 17:55:45 tsutsui Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000 Soren S. Jorvang. All rights reserved.
|
* Copyright (c) 2000 Soren S. Jorvang. All rights reserved.
|
||||||
@ -26,7 +26,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.46 2003/09/12 15:29:48 tsutsui Exp $");
|
__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.47 2003/09/12 17:55:45 tsutsui Exp $");
|
||||||
|
|
||||||
#include "opt_ddb.h"
|
#include "opt_ddb.h"
|
||||||
#include "opt_kgdb.h"
|
#include "opt_kgdb.h"
|
||||||
@ -61,7 +61,6 @@ __KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.46 2003/09/12 15:29:48 tsutsui Exp $")
|
|||||||
#include <machine/pte.h>
|
#include <machine/pte.h>
|
||||||
#include <machine/autoconf.h>
|
#include <machine/autoconf.h>
|
||||||
#include <machine/intr.h>
|
#include <machine/intr.h>
|
||||||
#include <machine/intr_machdep.h>
|
|
||||||
#include <mips/locore.h>
|
#include <mips/locore.h>
|
||||||
|
|
||||||
#include <machine/nvram.h>
|
#include <machine/nvram.h>
|
||||||
@ -422,7 +421,14 @@ delay(n)
|
|||||||
|
|
||||||
#define NINTR 6
|
#define NINTR 6
|
||||||
|
|
||||||
static struct cobalt_intr intrtab[NINTR];
|
static struct cobalt_intrhand intrtab[NINTR];
|
||||||
|
|
||||||
|
const u_int32_t mips_ipl_si_to_sr[_IPL_NSOFT] = {
|
||||||
|
MIPS_SOFT_INT_MASK_0, /* IPL_SOFT */
|
||||||
|
MIPS_SOFT_INT_MASK_0, /* IPL_SOFTCLOCK */
|
||||||
|
MIPS_SOFT_INT_MASK_1, /* IPL_SOFTNET */
|
||||||
|
MIPS_SOFT_INT_MASK_1, /* IPL_SOFTSERIAL */
|
||||||
|
};
|
||||||
|
|
||||||
void *
|
void *
|
||||||
cpu_intr_establish(level, ipl, func, arg)
|
cpu_intr_establish(level, ipl, func, arg)
|
||||||
@ -434,12 +440,12 @@ cpu_intr_establish(level, ipl, func, arg)
|
|||||||
if (level < 0 || level >= NINTR)
|
if (level < 0 || level >= NINTR)
|
||||||
panic("invalid interrupt level");
|
panic("invalid interrupt level");
|
||||||
|
|
||||||
if (intrtab[level].func != NULL)
|
if (intrtab[level].ih_func != NULL)
|
||||||
panic("cannot share CPU interrupts");
|
panic("cannot share CPU interrupts");
|
||||||
|
|
||||||
intrtab[level].cookie_type = COBALT_COOKIE_TYPE_CPU;
|
intrtab[level].cookie_type = COBALT_COOKIE_TYPE_CPU;
|
||||||
intrtab[level].func = func;
|
intrtab[level].ih_func = func;
|
||||||
intrtab[level].arg = arg;
|
intrtab[level].ih_arg = arg;
|
||||||
|
|
||||||
return &intrtab[level];
|
return &intrtab[level];
|
||||||
}
|
}
|
||||||
@ -448,11 +454,11 @@ void
|
|||||||
cpu_intr_disestablish(cookie)
|
cpu_intr_disestablish(cookie)
|
||||||
void *cookie;
|
void *cookie;
|
||||||
{
|
{
|
||||||
struct cobalt_intr *p = cookie;
|
struct cobalt_intrhand *ih = cookie;
|
||||||
|
|
||||||
if (p->cookie_type == COBALT_COOKIE_TYPE_CPU) {
|
if (ih->cookie_type == COBALT_COOKIE_TYPE_CPU) {
|
||||||
p->func = NULL;
|
ih->ih_func = NULL;
|
||||||
p->arg = NULL;
|
ih->ih_arg = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -486,8 +492,8 @@ cpu_intr(status, cause, pc, ipending)
|
|||||||
|
|
||||||
for (i = 0; i < 5; i++) {
|
for (i = 0; i < 5; i++) {
|
||||||
if (ipending & (MIPS_INT_MASK_0 << i))
|
if (ipending & (MIPS_INT_MASK_0 << i))
|
||||||
if (intrtab[i].func != NULL)
|
if (intrtab[i].ih_func != NULL)
|
||||||
if ((*intrtab[i].func)(intrtab[i].arg))
|
if ((*intrtab[i].ih_func)(intrtab[i].ih_arg))
|
||||||
cause &= ~(MIPS_INT_MASK_0 << i);
|
cause &= ~(MIPS_INT_MASK_0 << i);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -506,20 +512,14 @@ cpu_intr(status, cause, pc, ipending)
|
|||||||
|
|
||||||
_splset((status & ~cause & MIPS_HARD_INT_MASK) | MIPS_SR_INT_IE);
|
_splset((status & ~cause & MIPS_HARD_INT_MASK) | MIPS_SR_INT_IE);
|
||||||
|
|
||||||
/* 'softnet' interrupt */
|
/* software interrupt */
|
||||||
if (ipending & MIPS_SOFT_INT_MASK_1) {
|
ipending &= (MIPS_SOFT_INT_MASK_1|MIPS_SOFT_INT_MASK_0);
|
||||||
clearsoftnet();
|
if (ipending == 0)
|
||||||
uvmexp.softs++;
|
return;
|
||||||
netintr();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* 'softclock' interrupt */
|
_clrsoftintr(ipending);
|
||||||
if (ipending & MIPS_SOFT_INT_MASK_0) {
|
|
||||||
clearsoftclock();
|
softintr_dispatch(ipending);
|
||||||
uvmexp.softs++;
|
|
||||||
intrcnt[SOFTCLOCK_INTR]++;
|
|
||||||
softclock(NULL);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# $NetBSD: files.cobalt,v 1.16 2003/07/27 01:19:25 thorpej Exp $
|
# $NetBSD: files.cobalt,v 1.17 2003/09/12 17:55:47 tsutsui Exp $
|
||||||
|
|
||||||
maxpartitions 16
|
maxpartitions 16
|
||||||
|
|
||||||
@ -30,6 +30,8 @@ file arch/cobalt/cobalt/console.c
|
|||||||
file arch/cobalt/cobalt/disksubr.c
|
file arch/cobalt/cobalt/disksubr.c
|
||||||
file arch/cobalt/cobalt/machdep.c
|
file arch/cobalt/cobalt/machdep.c
|
||||||
|
|
||||||
|
file arch/mips/mips/softintr.c
|
||||||
|
|
||||||
file dev/md_root.c memory_disk_hooks
|
file dev/md_root.c memory_disk_hooks
|
||||||
|
|
||||||
file dev/cons.c
|
file dev/cons.c
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# $NetBSD: std.cobalt,v 1.7 2003/08/30 22:44:39 chs Exp $
|
# $NetBSD: std.cobalt,v 1.8 2003/09/12 17:55:48 tsutsui Exp $
|
||||||
|
|
||||||
machine cobalt mips
|
machine cobalt mips
|
||||||
makeoptions MACHINE_ARCH="mipsel"
|
makeoptions MACHINE_ARCH="mipsel"
|
||||||
@ -10,6 +10,4 @@ options MIPS3_L2CACHE_ABSENT
|
|||||||
options EXEC_ELF32 # exec ELF32 binaries
|
options EXEC_ELF32 # exec ELF32 binaries
|
||||||
options EXEC_SCRIPT # exec #! scripts
|
options EXEC_SCRIPT # exec #! scripts
|
||||||
|
|
||||||
options __NO_SOFT_SERIAL_INTERRUPT
|
|
||||||
|
|
||||||
makeoptions DEFTEXTADDR="0x80001000"
|
makeoptions DEFTEXTADDR="0x80001000"
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: com_mainbus.c,v 1.6 2003/07/15 01:29:23 lukem Exp $ */
|
/* $NetBSD: com_mainbus.c,v 1.7 2003/09/12 17:55:50 tsutsui Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000 Soren S. Jorvang. All rights reserved.
|
* Copyright (c) 2000 Soren S. Jorvang. All rights reserved.
|
||||||
@ -26,7 +26,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__KERNEL_RCSID(0, "$NetBSD: com_mainbus.c,v 1.6 2003/07/15 01:29:23 lukem Exp $");
|
__KERNEL_RCSID(0, "$NetBSD: com_mainbus.c,v 1.7 2003/09/12 17:55:50 tsutsui Exp $");
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <sys/systm.h>
|
#include <sys/systm.h>
|
||||||
@ -45,7 +45,6 @@ __KERNEL_RCSID(0, "$NetBSD: com_mainbus.c,v 1.6 2003/07/15 01:29:23 lukem Exp $"
|
|||||||
|
|
||||||
#include <machine/autoconf.h>
|
#include <machine/autoconf.h>
|
||||||
#include <machine/intr.h>
|
#include <machine/intr.h>
|
||||||
#include <machine/intr_machdep.h>
|
|
||||||
#include <machine/bus.h>
|
#include <machine/bus.h>
|
||||||
|
|
||||||
#include <dev/ic/comreg.h>
|
#include <dev/ic/comreg.h>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: intr.h,v 1.14 2003/09/12 15:03:24 tsutsui Exp $ */
|
/* $NetBSD: intr.h,v 1.15 2003/09/12 17:55:42 tsutsui Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000 Soren S. Jorvang. All rights reserved.
|
* Copyright (c) 2000 Soren S. Jorvang. All rights reserved.
|
||||||
@ -32,6 +32,7 @@
|
|||||||
#define IPL_BIO 1 /* Disable block I/O interrupts. */
|
#define IPL_BIO 1 /* Disable block I/O interrupts. */
|
||||||
#define IPL_NET 2 /* Disable network interrupts. */
|
#define IPL_NET 2 /* Disable network interrupts. */
|
||||||
#define IPL_TTY 3 /* Disable terminal interrupts. */
|
#define IPL_TTY 3 /* Disable terminal interrupts. */
|
||||||
|
#define IPL_SERIAL 3 /* Disable serial hardware interrupts. */
|
||||||
#define IPL_VM 4 /* Memory allocation */
|
#define IPL_VM 4 /* Memory allocation */
|
||||||
#define IPL_CLOCK 5 /* Disable clock interrupts. */
|
#define IPL_CLOCK 5 /* Disable clock interrupts. */
|
||||||
#define IPL_STATCLOCK 6 /* Disable profiling interrupts. */
|
#define IPL_STATCLOCK 6 /* Disable profiling interrupts. */
|
||||||
@ -44,12 +45,19 @@
|
|||||||
#define IST_EDGE 2 /* edge-triggered */
|
#define IST_EDGE 2 /* edge-triggered */
|
||||||
#define IST_LEVEL 3 /* level-triggered */
|
#define IST_LEVEL 3 /* level-triggered */
|
||||||
|
|
||||||
/* Soft interrupt masks. */
|
/* Soft interrupt numbers. */
|
||||||
#define SIR_CLOCK 31
|
#define IPL_SOFT 0 /* generic software interrupts */
|
||||||
#define SIR_NET 30
|
#define IPL_SOFTSERIAL 1 /* serial software interrupts */
|
||||||
#define SIR_CLOCKMASK ((1 << SIR_CLOCK))
|
#define IPL_SOFTNET 2 /* network software interrupts */
|
||||||
#define SIR_NETMASK ((1 << SIR_NET) | SIR_CLOCKMASK)
|
#define IPL_SOFTCLOCK 3 /* clock software interrupts */
|
||||||
#define SIR_ALLMASK (SIR_CLOCKMASK | SIR_NETMASK)
|
#define _IPL_NSOFT 4
|
||||||
|
|
||||||
|
#define IPL_SOFTNAMES { \
|
||||||
|
"misc", \
|
||||||
|
"serial", \
|
||||||
|
"net", \
|
||||||
|
"clock", \
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef _KERNEL
|
#ifdef _KERNEL
|
||||||
#ifndef _LOCORE
|
#ifndef _LOCORE
|
||||||
@ -64,35 +72,48 @@ extern void _splnone(void);
|
|||||||
extern void _setsoftintr(int);
|
extern void _setsoftintr(int);
|
||||||
extern void _clrsoftintr(int);
|
extern void _clrsoftintr(int);
|
||||||
|
|
||||||
#define setsoftclock() _setsoftintr(MIPS_SOFT_INT_MASK_0)
|
|
||||||
#define setsoftnet() _setsoftintr(MIPS_SOFT_INT_MASK_1)
|
|
||||||
#define clearsoftclock() _clrsoftintr(MIPS_SOFT_INT_MASK_0)
|
|
||||||
#define clearsoftnet() _clrsoftintr(MIPS_SOFT_INT_MASK_1)
|
|
||||||
|
|
||||||
#define splhigh() _splraise(MIPS_INT_MASK)
|
#define splhigh() _splraise(MIPS_INT_MASK)
|
||||||
#define spl0() (void)_spllower(0)
|
#define spl0() (void)_spllower(0)
|
||||||
#define splx(s) (void)_splset(s)
|
#define splx(s) (void)_splset(s)
|
||||||
#define SPLSOFT MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1
|
#define SPLSOFT (MIPS_SOFT_INT_MASK_0 | MIPS_SOFT_INT_MASK_1)
|
||||||
#define SPLBIO SPLSOFT | MIPS_INT_MASK_4
|
#define SPLBIO (SPLSOFT | MIPS_INT_MASK_4)
|
||||||
#define SPLNET SPLBIO | MIPS_INT_MASK_1 | MIPS_INT_MASK_2
|
#define SPLNET (SPLBIO | MIPS_INT_MASK_1 | MIPS_INT_MASK_2)
|
||||||
#define SPLTTY SPLNET | MIPS_INT_MASK_3
|
#define SPLTTY (SPLNET | MIPS_INT_MASK_3)
|
||||||
#define SPLCLOCK SPLTTY | MIPS_INT_MASK_0 | MIPS_INT_MASK_5
|
#define SPLCLOCK (SPLTTY | MIPS_INT_MASK_0 | MIPS_INT_MASK_5)
|
||||||
#define splbio() _splraise(SPLBIO)
|
#define splbio() _splraise(SPLBIO)
|
||||||
#define splnet() _splraise(SPLNET)
|
#define splnet() _splraise(SPLNET)
|
||||||
#define spltty() _splraise(SPLTTY)
|
#define spltty() _splraise(SPLTTY)
|
||||||
#define splclock() _splraise(SPLCLOCK)
|
#define splserial() _splraise(SPLTTY)
|
||||||
|
#define splclock() _splraise(SPLCLOCK)
|
||||||
#define splvm() splclock()
|
#define splvm() splclock()
|
||||||
#define splstatclock() splclock()
|
#define splstatclock() splclock()
|
||||||
#define splsoftclock() _splraise(MIPS_SOFT_INT_MASK_0)
|
|
||||||
#define splsoftnet() _splraise(MIPS_SOFT_INT_MASK_0|MIPS_SOFT_INT_MASK_1)
|
|
||||||
#define spllowersoftclock() _spllower(MIPS_SOFT_INT_MASK_0)
|
#define spllowersoftclock() _spllower(MIPS_SOFT_INT_MASK_0)
|
||||||
|
|
||||||
#define splsched() splhigh()
|
#define splsched() splhigh()
|
||||||
#define spllock() splhigh()
|
#define spllock() splhigh()
|
||||||
|
|
||||||
|
#define splsoft() _splraise(MIPS_SOFT_INT_MASK_0)
|
||||||
|
#define splsoftclock() _splraise(MIPS_SOFT_INT_MASK_0)
|
||||||
|
#define splsoftnet() _splraise(MIPS_SOFT_INT_MASK_0|MIPS_SOFT_INT_MASK_1)
|
||||||
|
#define splsoftserial() _splraise(MIPS_SOFT_INT_MASK_0|MIPS_SOFT_INT_MASK_1)
|
||||||
|
|
||||||
extern unsigned int intrcnt[];
|
extern unsigned int intrcnt[];
|
||||||
#define SOFTCLOCK_INTR 0
|
|
||||||
#define SOFTNET_INTR 1
|
struct cobalt_intrhand {
|
||||||
|
LIST_ENTRY(cobalt_intrhand) ih_q;
|
||||||
|
int (*ih_func)(void *);
|
||||||
|
void *ih_arg;
|
||||||
|
int cookie_type;
|
||||||
|
#define COBALT_COOKIE_TYPE_CPU 0x1
|
||||||
|
#define COBALT_COOKIE_TYPE_ICU 0x2
|
||||||
|
};
|
||||||
|
|
||||||
|
#include <mips/softintr.h>
|
||||||
|
|
||||||
|
void *cpu_intr_establish(int, int, int (*)(void *), void *);
|
||||||
|
void *icu_intr_establish(int, int, int, int (*)(void *), void *);
|
||||||
|
void cpu_intr_disestablish(void *);
|
||||||
|
void icu_intr_disestablish(void *);
|
||||||
|
|
||||||
#endif /* !_LOCORE */
|
#endif /* !_LOCORE */
|
||||||
#endif /* _LOCORE */
|
#endif /* _LOCORE */
|
||||||
|
@ -1,39 +0,0 @@
|
|||||||
/* $NetBSD: intr_machdep.h,v 1.1 2002/01/13 23:02:34 augustss Exp $ */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (c) 2000 Soren S. Jorvang. All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions, and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
||||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
||||||
* SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
struct cobalt_intr {
|
|
||||||
int cookie_type;
|
|
||||||
#define COBALT_COOKIE_TYPE_CPU 0x1
|
|
||||||
#define COBALT_COOKIE_TYPE_ICU 0x2
|
|
||||||
int (*func)(void *);
|
|
||||||
void *arg;
|
|
||||||
};
|
|
||||||
|
|
||||||
extern void * cpu_intr_establish(int, int, int (*)(void *), void *);
|
|
||||||
extern void * icu_intr_establish(int, int, int, int (*)(void *), void *);
|
|
||||||
extern void cpu_intr_disestablish(void *);
|
|
||||||
extern void icu_intr_disestablish(void *);
|
|
@ -1,5 +1,6 @@
|
|||||||
/* $NetBSD: types.h,v 1.3 2002/02/28 03:17:26 simonb Exp $ */
|
/* $NetBSD: types.h,v 1.4 2003/09/12 17:55:42 tsutsui Exp $ */
|
||||||
|
|
||||||
#include <mips/types.h>
|
#include <mips/types.h>
|
||||||
|
|
||||||
#define __HAVE_DEVICE_REGISTER
|
#define __HAVE_DEVICE_REGISTER
|
||||||
|
#define __HAVE_GENERIC_SOFT_INTERRUPTS
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: pci_machdep.c,v 1.14 2003/09/12 14:59:15 tsutsui Exp $ */
|
/* $NetBSD: pci_machdep.c,v 1.15 2003/09/12 17:55:52 tsutsui Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000 Soren S. Jorvang. All rights reserved.
|
* Copyright (c) 2000 Soren S. Jorvang. All rights reserved.
|
||||||
@ -26,7 +26,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__KERNEL_RCSID(0, "$NetBSD: pci_machdep.c,v 1.14 2003/09/12 14:59:15 tsutsui Exp $");
|
__KERNEL_RCSID(0, "$NetBSD: pci_machdep.c,v 1.15 2003/09/12 17:55:52 tsutsui Exp $");
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
@ -38,7 +38,6 @@ __KERNEL_RCSID(0, "$NetBSD: pci_machdep.c,v 1.14 2003/09/12 14:59:15 tsutsui Exp
|
|||||||
#define _COBALT_BUS_DMA_PRIVATE
|
#define _COBALT_BUS_DMA_PRIVATE
|
||||||
#include <machine/bus.h>
|
#include <machine/bus.h>
|
||||||
#include <machine/intr.h>
|
#include <machine/intr.h>
|
||||||
#include <machine/intr_machdep.h>
|
|
||||||
|
|
||||||
#include <dev/pci/pcivar.h>
|
#include <dev/pci/pcivar.h>
|
||||||
#include <dev/pci/pcireg.h>
|
#include <dev/pci/pcireg.h>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: pcib.c,v 1.8 2003/09/12 14:59:15 tsutsui Exp $ */
|
/* $NetBSD: pcib.c,v 1.9 2003/09/12 17:55:53 tsutsui Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000 Soren S. Jorvang. All rights reserved.
|
* Copyright (c) 2000 Soren S. Jorvang. All rights reserved.
|
||||||
@ -26,7 +26,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__KERNEL_RCSID(0, "$NetBSD: pcib.c,v 1.8 2003/09/12 14:59:15 tsutsui Exp $");
|
__KERNEL_RCSID(0, "$NetBSD: pcib.c,v 1.9 2003/09/12 17:55:53 tsutsui Exp $");
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
@ -38,7 +38,6 @@ __KERNEL_RCSID(0, "$NetBSD: pcib.c,v 1.8 2003/09/12 14:59:15 tsutsui Exp $");
|
|||||||
#include <machine/bus.h>
|
#include <machine/bus.h>
|
||||||
#include <machine/autoconf.h>
|
#include <machine/autoconf.h>
|
||||||
#include <machine/intr.h>
|
#include <machine/intr.h>
|
||||||
#include <machine/intr_machdep.h>
|
|
||||||
|
|
||||||
#include <dev/pci/pcivar.h>
|
#include <dev/pci/pcivar.h>
|
||||||
#include <dev/pci/pcireg.h>
|
#include <dev/pci/pcireg.h>
|
||||||
@ -53,7 +52,7 @@ static int icu_intr(void *);
|
|||||||
CFATTACH_DECL(pcib, sizeof(struct device),
|
CFATTACH_DECL(pcib, sizeof(struct device),
|
||||||
pcib_match, pcib_attach, NULL, NULL);
|
pcib_match, pcib_attach, NULL, NULL);
|
||||||
|
|
||||||
static struct cobalt_intr icu[IO_ICUSIZE];
|
static struct cobalt_intrhand icu[IO_ICUSIZE];
|
||||||
|
|
||||||
static int
|
static int
|
||||||
pcib_match(parent, match, aux)
|
pcib_match(parent, match, aux)
|
||||||
@ -107,10 +106,10 @@ icu_intr_establish(irq, type, level, func, arg)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < IO_ICUSIZE; i++) {
|
for (i = 0; i < IO_ICUSIZE; i++) {
|
||||||
if (icu[i].func == NULL) {
|
if (icu[i].ih_func == NULL) {
|
||||||
icu[i].cookie_type = COBALT_COOKIE_TYPE_ICU;
|
icu[i].cookie_type = COBALT_COOKIE_TYPE_ICU;
|
||||||
icu[i].func = func;
|
icu[i].ih_func = func;
|
||||||
icu[i].arg = arg;
|
icu[i].ih_arg = arg;
|
||||||
return &icu[i];
|
return &icu[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -122,11 +121,11 @@ void
|
|||||||
icu_intr_disestablish(cookie)
|
icu_intr_disestablish(cookie)
|
||||||
void *cookie;
|
void *cookie;
|
||||||
{
|
{
|
||||||
struct cobalt_intr *p = cookie;
|
struct cobalt_intrhand *ih = cookie;
|
||||||
|
|
||||||
if (p->cookie_type == COBALT_COOKIE_TYPE_ICU) {
|
if (ih->cookie_type == COBALT_COOKIE_TYPE_ICU) {
|
||||||
p->func = NULL;
|
ih->ih_func = NULL;
|
||||||
p->arg = NULL;
|
ih->ih_arg = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,10 +136,10 @@ icu_intr(arg)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < IO_ICUSIZE; i++) {
|
for (i = 0; i < IO_ICUSIZE; i++) {
|
||||||
if (icu[i].func == NULL)
|
if (icu[i].ih_func == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
(*icu[i].func)(icu[i].arg);
|
(*icu[i].ih_func)(icu[i].ih_arg);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: pciide_machdep.c,v 1.4 2003/07/15 01:29:23 lukem Exp $ */
|
/* $NetBSD: pciide_machdep.c,v 1.5 2003/09/12 17:55:54 tsutsui Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000 Soren S. Jorvang. All rights reserved.
|
* Copyright (c) 2000 Soren S. Jorvang. All rights reserved.
|
||||||
@ -26,7 +26,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__KERNEL_RCSID(0, "$NetBSD: pciide_machdep.c,v 1.4 2003/07/15 01:29:23 lukem Exp $");
|
__KERNEL_RCSID(0, "$NetBSD: pciide_machdep.c,v 1.5 2003/09/12 17:55:54 tsutsui Exp $");
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <sys/systm.h>
|
#include <sys/systm.h>
|
||||||
@ -37,7 +37,7 @@ __KERNEL_RCSID(0, "$NetBSD: pciide_machdep.c,v 1.4 2003/07/15 01:29:23 lukem Exp
|
|||||||
#include <dev/pci/pciidereg.h>
|
#include <dev/pci/pciidereg.h>
|
||||||
#include <dev/pci/pciidevar.h>
|
#include <dev/pci/pciidevar.h>
|
||||||
|
|
||||||
#include <machine/intr_machdep.h>
|
#include <machine/intr.h>
|
||||||
|
|
||||||
void *
|
void *
|
||||||
pciide_machdep_compat_intr_establish(dev, pa, chan, func, arg)
|
pciide_machdep_compat_intr_establish(dev, pa, chan, func, arg)
|
||||||
|
Loading…
Reference in New Issue
Block a user