diff options
Diffstat (limited to 'sys/arch/hp300/include')
-rw-r--r-- | sys/arch/hp300/include/autoconf.h | 5 | ||||
-rw-r--r-- | sys/arch/hp300/include/cpu.h | 64 | ||||
-rw-r--r-- | sys/arch/hp300/include/hpux_machdep.h | 9 | ||||
-rw-r--r-- | sys/arch/hp300/include/intr.h | 176 | ||||
-rw-r--r-- | sys/arch/hp300/include/param.h | 76 |
5 files changed, 243 insertions, 87 deletions
diff --git a/sys/arch/hp300/include/autoconf.h b/sys/arch/hp300/include/autoconf.h index 039c70ffc1b..4dfc2583426 100644 --- a/sys/arch/hp300/include/autoconf.h +++ b/sys/arch/hp300/include/autoconf.h @@ -1,5 +1,5 @@ -/* $OpenBSD: autoconf.h,v 1.3 1997/02/03 04:48:00 downsj Exp $ */ -/* $NetBSD: autoconf.h,v 1.3 1996/03/03 16:49:17 thorpej Exp $ */ +/* $OpenBSD: autoconf.h,v 1.4 1997/04/16 11:56:33 downsj Exp $ */ +/* $NetBSD: autoconf.h,v 1.4 1997/04/01 03:03:56 scottr Exp $ */ /*- * Copyright (c) 1996 The NetBSD Foundation, Inc. @@ -44,6 +44,7 @@ extern caddr_t conaddr; /* KVA of console device */ extern int convasize; /* size of mapping at conaddr */ extern int conforced; /* console has been forced */ +void configure __P((void)); void hp300_cninit __P((void)); void console_scan __P((int (*)(int, caddr_t, void *), void *)); caddr_t iomap __P((caddr_t, int)); diff --git a/sys/arch/hp300/include/cpu.h b/sys/arch/hp300/include/cpu.h index 495520dbc2d..d8217c91a33 100644 --- a/sys/arch/hp300/include/cpu.h +++ b/sys/arch/hp300/include/cpu.h @@ -1,5 +1,5 @@ -/* $OpenBSD: cpu.h,v 1.5 1997/01/12 15:13:33 downsj Exp $ */ -/* $NetBSD: cpu.h,v 1.21 1996/10/07 06:29:30 thorpej Exp $ */ +/* $OpenBSD: cpu.h,v 1.6 1997/04/16 11:56:34 downsj Exp $ */ +/* $NetBSD: cpu.h,v 1.24 1997/04/14 02:28:50 thorpej Exp $ */ /* * Copyright (c) 1988 University of Utah. @@ -56,6 +56,11 @@ #include <m68k/cpu.h> /* + * Get interrupt glue. + */ +#include <machine/intr.h> + +/* * definitions of cpu-dependent requirements * referenced in generic code */ @@ -110,19 +115,6 @@ struct clockframe { int astpending; /* need to trap before returning to user mode */ int want_resched; /* resched() was called */ - -/* - * simulated software interrupt register - */ -extern unsigned char ssir; - -#define SIR_NET 0x1 -#define SIR_CLOCK 0x2 - -#define siroff(x) ssir &= ~(x) -#define setsoftnet() ssir |= SIR_NET -#define setsoftclock() ssir |= SIR_CLOCK - /* * CTL_MACHDEP definitions. */ @@ -209,9 +201,40 @@ extern int cpuspeed; /* CPU speed, in MHz */ extern char *intiobase, *intiolimit; extern void (*vectab[]) __P((void)); -struct frame; +struct frame; +struct fpframe; +struct pcb; /* locore.s functions */ +void m68881_save __P((struct fpframe *)); +void m68881_restore __P((struct fpframe *)); +u_long getdfc __P((void)); +u_long getsfc __P((void)); +void DCIA __P((void)); +void DCIS __P((void)); +void DCIU __P((void)); +void ICIA __P((void)); +void ICPA __P((void)); +void PCIA __P((void)); +void TBIA __P((void)); +void TBIS __P((vm_offset_t)); +void TBIAS __P((void)); +void TBIAU __P((void)); +#if defined(M68040) +void DCFA __P((void)); +void DCFP __P((vm_offset_t)); +void DCFL __P((vm_offset_t)); +void DCPL __P((vm_offset_t)); +void DCPP __P((vm_offset_t)); +void ICPL __P((vm_offset_t)); +void ICPP __P((vm_offset_t)); +#endif +int suline __P((caddr_t, caddr_t)); +void savectx __P((struct pcb *)); +void switch_exit __P((struct proc *)); +void proc_trampoline __P((void)); +void loadustp __P((int)); + void doboot __P((void)) __attribute__((__noreturn__)); void ecacheon __P((void)); @@ -221,6 +244,15 @@ void ecacheoff __P((void)); int badaddr __P((caddr_t)); int badbaddr __P((caddr_t)); void regdump __P((struct frame *, int)); +void dumpconf __P((void)); + +/* sys_machdep.c functions */ +int cachectl __P((int, caddr_t, int)); + +/* vm_machdep.c functions */ +void physaccess __P((caddr_t, caddr_t, int, int)); +void physunaccess __P((caddr_t, int)); +int kvtop __P((caddr_t)); /* what is this supposed to do? i.e. how is it different than startrtclock? */ #define enablertclock() diff --git a/sys/arch/hp300/include/hpux_machdep.h b/sys/arch/hp300/include/hpux_machdep.h index 7c6f14f1e9e..337986aa9fb 100644 --- a/sys/arch/hp300/include/hpux_machdep.h +++ b/sys/arch/hp300/include/hpux_machdep.h @@ -1,5 +1,5 @@ -/* $OpenBSD: hpux_machdep.h,v 1.4 1997/03/26 08:32:46 downsj Exp $ */ -/* $NetBSD: hpux_machdep.h,v 1.6 1997/03/16 10:02:40 thorpej Exp $ */ +/* $OpenBSD: hpux_machdep.h,v 1.5 1997/04/16 11:56:34 downsj Exp $ */ +/* $NetBSD: hpux_machdep.h,v 1.7 1997/04/01 20:05:14 scottr Exp $ */ /*- * Copyright (c) 1996, 1997 The NetBSD Foundation, Inc. @@ -66,6 +66,10 @@ struct hpuxsigcontext { int _hsc_ap; /* pointer to hpuxsigstate */ }; +#ifdef _KERNEL +struct exec_package; +struct exec_vmcmd; + int hpux_cpu_makecmds __P((struct proc *, struct exec_package *)); int hpux_cpu_vmcmd __P((struct proc *, struct exec_vmcmd *)); void hpux_cpu_bsd_to_hpux_stat __P((struct stat *, struct hpux_stat *)); @@ -76,5 +80,6 @@ int hpux_to_bsd_uoff __P((int *, int *, struct proc *)); void hpux_sendsig __P((sig_t, int, int, u_long, int, union sigval)); void hpux_setregs __P((struct proc *, struct exec_package *, u_long, register_t *)); +#endif /* _KERNEL */ #endif /* ! _MACHINE_HPUX_MACHDEP_H_ */ diff --git a/sys/arch/hp300/include/intr.h b/sys/arch/hp300/include/intr.h new file mode 100644 index 00000000000..af46f056d31 --- /dev/null +++ b/sys/arch/hp300/include/intr.h @@ -0,0 +1,176 @@ +/* $OpenBSD: intr.h,v 1.1 1997/04/16 11:56:35 downsj Exp $ */ +/* $NetBSD: intr.h,v 1.1 1997/04/14 02:28:51 thorpej Exp $ */ + +/*- + * Copyright (c) 1996, 1997 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by Jason R. Thorpe. + * + * 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. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the NetBSD + * Foundation, Inc. and its contributors. + * 4. Neither the name of The NetBSD Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. 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 REGENTS 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. + */ + +#ifndef _HP300_INTR_H_ +#define _HP300_INTR_H_ + +#include <machine/psl.h> + +#ifdef _HP300_INTR_H_PRIVATE +#include <sys/queue.h> + +/* + * The location and size of the autovectored interrupt portion + * of the vector table. + */ +#define ISRLOC 0x18 +#define NISR 8 + +struct isr { + LIST_ENTRY(isr) isr_link; + int (*isr_func) __P((void *)); + void *isr_arg; + int isr_ipl; + int isr_priority; +}; +#endif /* _HP300_INTR_H_PRIVATE */ + +/* + * Interrupt "levels". These are a more abstract representation + * of interrupt levels, and do not have the same meaning as m68k + * CPU interrupt levels. They serve two purposes: + * + * - properly order ISRs in the list for that CPU ipl + * - compute CPU PSL values for the spl*() calls. + */ +#define IPL_NONE 0 /* disable only this interrupt */ +#define IPL_BIO 1 /* disable block I/O interrupts */ +#define IPL_NET 2 /* disable network interrupts */ +#define IPL_TTY 3 /* disable terminal interrupts */ +#define IPL_TTYNOBUF 4 /* IPL_TTY + higher ISR priority */ +#define IPL_CLOCK 5 /* disable clock interrupts */ +#define IPL_HIGH 6 /* disable all interrupts */ + +/* + * Convert PSL values to CPU IPLs and vice-versa. + */ +#define PSLTOIPL(x) (((x) >> 8) & 0xf) +#define IPLTOPSL(x) ((((x) & 0xf) << 8) | PSL_S) + +#ifdef _KERNEL +/* + * spl functions; all but spl0 are done in-line + */ + +#define _spl(s) \ +({ \ + register int _spl_r; \ + \ + __asm __volatile ("clrl %0; movew sr,%0; movew %1,sr" : \ + "&=d" (_spl_r) : "di" (s)); \ + _spl_r; \ +}) + +#define _splraise(s) \ +({ \ + register int _spl_r; \ + \ + __asm __volatile ("clrl %0; movew sr,%0;" : "&=d" (_spl_r) : ); \ + if ((_spl_r & PSL_IPL) < ((s) & PSL_IPL)) \ + __asm __volatile ("movew %0,sr;" : : "di" (s)); \ + _spl_r; \ +}) + +/* spl0 requires checking for software interrupts */ +#define spl1() _spl(PSL_S|PSL_IPL1) +#define spl2() _spl(PSL_S|PSL_IPL2) +#define spl3() _spl(PSL_S|PSL_IPL3) +#define spl4() _spl(PSL_S|PSL_IPL4) +#define spl5() _spl(PSL_S|PSL_IPL5) +#define spl6() _spl(PSL_S|PSL_IPL6) +#define spl7() _spl(PSL_S|PSL_IPL7) + +/* + * These four globals contain the appropriate PSL_S|PSL_IPL? values + * to raise interupt priority to the requested level. + */ +extern unsigned short hp300_bioipl; +extern unsigned short hp300_netipl; +extern unsigned short hp300_ttyipl; +extern unsigned short hp300_impipl; + +/* These spl calls are _not_ to be used by machine-independent code. */ +#define splhil() _splraise(PSL_S|PSL_IPL1) +#define splkbd() splhil() +#define splsoft() spl1() + +/* These spl calls are used by machine-independent code. */ +#define splsoftclock() splsoft() +#define splsoftnet() splsoft() +#define splbio() _splraise(hp300_bioipl) +#define splnet() _splraise(hp300_netipl) +#define spltty() _splraise(hp300_ttyipl) +#define splimp() _splraise(hp300_impipl) +#define splclock() spl6() +#define splstatclock() spl6() +#define splvm() spl6() +#define splhigh() spl7() +#define splsched() spl7() + +/* watch out for side effects */ +#define splx(s) ((s) & PSL_IPL ? _spl((s)) : spl0()) + +/* + * Simulated software interrupt register. + */ +extern volatile u_int8_t ssir; + +#define SIR_NET 0x01 +#define SIR_CLOCK 0x02 + +#define siron(mask) \ + __asm __volatile ( "orb %0,_ssir" : : "i" ((mask))) +#define siroff(mask) \ + __asm __volatile ( "andb %0,_ssir" : : "ir" (~(mask))); + +#define setsoftnet() siron(SIR_NET) +#define setsoftclock() siron(SIR_CLOCK) + +/* locore.s */ +int spl0 __P((void)); + +/* intr.c */ +void intr_init __P((void)); +void *intr_establish __P((int (*)(void *), void *, int, int)); +void intr_disestablish __P((void *)); +void intr_dispatch __P((int)); +void intr_printlevels __P((void)); +#endif /* _KERNEL */ + +#endif /* _HP300_INTR_H_ */ diff --git a/sys/arch/hp300/include/param.h b/sys/arch/hp300/include/param.h index a5c8ef1fe01..1d5f8e5baeb 100644 --- a/sys/arch/hp300/include/param.h +++ b/sys/arch/hp300/include/param.h @@ -1,5 +1,5 @@ -/* $OpenBSD: param.h,v 1.6 1997/02/04 06:21:33 downsj Exp $ */ -/* $NetBSD: param.h,v 1.28 1997/02/02 09:34:26 thorpej Exp $ */ +/* $OpenBSD: param.h,v 1.7 1997/04/16 11:56:35 downsj Exp $ */ +/* $NetBSD: param.h,v 1.32 1997/04/14 02:28:51 thorpej Exp $ */ /* * Copyright (c) 1988 University of Utah. @@ -53,6 +53,11 @@ #define MID_MACHINE MID_M68K /* + * Interrupt glue. + */ +#include <machine/intr.h> + +/* * Round p (pointer or byte index) up to a correctly-aligned value for all * data types (int, long, ...). The result is u_int and must be cast to * any desired pointer type. @@ -141,74 +146,11 @@ #define hp300_btop(x) ((unsigned)(x) >> PGSHIFT) #define hp300_ptob(x) ((unsigned)(x) << PGSHIFT) -/* - * spl functions; all but spl0 are done in-line - */ -#include <machine/psl.h> - -#define _spl(s) \ -({ \ - register int _spl_r; \ -\ - __asm __volatile ("clrl %0; movew sr,%0; movew %1,sr" : \ - "&=d" (_spl_r) : "di" (s)); \ - _spl_r; \ -}) - -#define _splraise(s) \ -({ \ - register int _spl_r; \ -\ - __asm __volatile ("clrl %0; movew sr,%0;" : "&=d" (_spl_r) : ); \ - if ((_spl_r & PSL_IPL) < ((s) & PSL_IPL)) \ - __asm __volatile ("movew %0,sr;" : : "di" (s)); \ - _spl_r; \ -}) - -/* spl0 requires checking for software interrupts */ -#define spl1() _spl(PSL_S|PSL_IPL1) -#define spl2() _spl(PSL_S|PSL_IPL2) -#define spl3() _spl(PSL_S|PSL_IPL3) -#define spl4() _spl(PSL_S|PSL_IPL4) -#define spl5() _spl(PSL_S|PSL_IPL5) -#define spl6() _spl(PSL_S|PSL_IPL6) -#define spl7() _spl(PSL_S|PSL_IPL7) - #if defined(_KERNEL) && !defined(_LOCORE) -/* - * These four globals contain the appropriate PSL_S|PSL_IPL? values - * to raise interrupt priority to the requested level. - */ -extern unsigned short hp300_bioipl; -extern unsigned short hp300_netipl; -extern unsigned short hp300_ttyipl; -extern unsigned short hp300_impipl; -#endif /* _KERNEL && !_LOCORE */ - -/* These spl calls are _not_ to be used by machine-independent code. */ -#define splhil() _splraise(PSL_S|PSL_IPL1) -#define splkbd() splhil() - -/* These spl calls are used by machine-independent code. */ -#define splsoftclock() spl1() -#define splsoftnet() spl1() -#define splbio() _splraise(hp300_bioipl) -#define splnet() _splraise(hp300_netipl) -#define spltty() _splraise(hp300_ttyipl) -#define splimp() _splraise(hp300_impipl) -#define splclock() spl6() -#define splstatclock() spl6() -#define splvm() spl6() -#define splhigh() spl7() -#define splsched() spl7() - -/* watch out for side effects */ -#define splx(s) (s & PSL_IPL ? _spl(s) : spl0()) - -#if defined(_KERNEL) && !defined(_LOCORE) -extern void _delay __P((u_int)); #define delay(us) _delay((us) << 8) #define DELAY(us) delay(us) + +void _delay __P((u_int)); #endif /* _KERNEL && !_LOCORE */ #ifdef COMPAT_HPUX |