summaryrefslogtreecommitdiff
path: root/sys/arch/hp300/include
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arch/hp300/include')
-rw-r--r--sys/arch/hp300/include/autoconf.h5
-rw-r--r--sys/arch/hp300/include/cpu.h64
-rw-r--r--sys/arch/hp300/include/hpux_machdep.h9
-rw-r--r--sys/arch/hp300/include/intr.h176
-rw-r--r--sys/arch/hp300/include/param.h76
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