xref: /netbsd-src/sys/arch/amiga/include/cpu.h (revision d710132b4b8ce7f7cccaaf660cb16aa16b4077a0)
1 /*	$NetBSD: cpu.h,v 1.55 2003/01/17 22:17:06 thorpej Exp $	*/
2 
3 /*
4  * Copyright (c) 1988 University of Utah.
5  * Copyright (c) 1982, 1990 The Regents of the University of California.
6  * All rights reserved.
7  *
8  * This code is derived from software contributed to Berkeley by
9  * the Systems Programming Group of the University of Utah Computer
10  * Science Department.
11  *
12  * Redistribution and use in source and binary forms, with or without
13  * modification, are permitted provided that the following conditions
14  * are met:
15  * 1. Redistributions of source code must retain the above copyright
16  *    notice, this list of conditions and the following disclaimer.
17  * 2. Redistributions in binary form must reproduce the above copyright
18  *    notice, this list of conditions and the following disclaimer in the
19  *    documentation and/or other materials provided with the distribution.
20  * 3. All advertising materials mentioning features or use of this software
21  *    must display the following acknowledgement:
22  *	This product includes software developed by the University of
23  *	California, Berkeley and its contributors.
24  * 4. Neither the name of the University nor the names of its contributors
25  *    may be used to endorse or promote products derived from this software
26  *    without specific prior written permission.
27  *
28  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
29  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
30  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
31  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
32  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
33  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
34  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
35  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
36  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
37  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
38  * SUCH DAMAGE.
39  *
40  * from: Utah $Hdr: cpu.h 1.16 91/03/25$
41  *
42  *	@(#)cpu.h	7.7 (Berkeley) 6/27/91
43  */
44 #ifndef _MACHINE_CPU_H_
45 #define _MACHINE_CPU_H_
46 
47 /*
48  * Exported definitions unique to amiga/68k cpu support.
49  */
50 
51 #if defined(_KERNEL_OPT)
52 #include "opt_lockdebug.h"
53 #endif
54 
55 /*
56  * Get common m68k CPU definitions.
57  */
58 #include <m68k/cpu.h>
59 #define	M68K_MMU_MOTOROLA
60 
61 #include <sys/sched.h>
62 struct cpu_info {
63 	struct schedstate_percpu ci_schedstate; /* scheduler state */
64 #if defined(DIAGNOSTIC) || defined(LOCKDEBUG)
65 	u_long ci_spin_locks;		/* # of spin locks held */
66 	u_long ci_simple_locks;		/* # of simple locks held */
67 #endif
68 };
69 
70 #ifdef _KERNEL
71 extern struct cpu_info cpu_info_store;
72 
73 #define	curcpu()	(&cpu_info_store)
74 
75 /*
76  * definitions of cpu-dependent requirements
77  * referenced in generic code
78  */
79 #define	cpu_swapin(p)			/* nothing */
80 #define	cpu_wait(p)			/* nothing */
81 #define	cpu_swapout(p)			/* nothing */
82 #define	cpu_number()			0
83 
84 void	cpu_proc_fork(struct proc *, struct proc *);
85 
86 
87 extern volatile unsigned int interrupt_depth;
88 /*
89  * Arguments to hardclock and gatherstats encapsulate the previous
90  * machine state in an opaque clockframe.  One the hp300, we use
91  * what the hardware pushes on an interrupt (frame format 0).
92  */
93 struct clockframe {
94 	u_short	sr;		/* sr at time of interrupt */
95 	u_long	pc;		/* pc at time of interrupt */
96 	u_short	vo;		/* vector offset (4-word frame) */
97 };
98 
99 #define	CLKF_USERMODE(framep)	(((framep)->sr & PSL_S) == 0)
100 /*#define	CLKF_BASEPRI(framep)	(((framep)->sr & PSL_IPL) == 0)*/
101 #define	CLKF_BASEPRI(framep)	(0)
102 #define	CLKF_PC(framep)		((framep)->pc)
103 #define	CLKF_INTR(framep)	(interrupt_depth > 1)
104 
105 
106 /*
107  * Preempt the current process if in interrupt from user mode,
108  * or after the current trap/syscall if in system mode.
109  */
110 extern int want_resched;	/* resched() was called */
111 #define	need_resched(ci)	{want_resched = 1; setsoftast();}
112 
113 /*
114  * Give a profiling tick to the current process from the softclock
115  * interrupt.  On hp300, request an ast to send us through trap(),
116  * marking the proc as needing a profiling tick.
117  */
118 #define	profile_tick(p, framep)	((p)->p_flag |= P_OWEUPC, setsoftast())
119 #define	need_proftick(p)	((p)->p_flag |= P_OWEUPC, setsoftast())
120 
121 /*
122  * Notify the current process (p) that it has a signal pending,
123  * process as soon as possible.
124  */
125 #define	signotify(p)	setsoftast()
126 
127 extern int astpending;		/* need trap before returning to user mode */
128 #define setsoftast()	(astpending = 1)
129 
130 #endif /* _KERNEL */
131 
132 /* include support for software interrupts */
133 #include <machine/mtpr.h>
134 
135 /*
136  * The rest of this should probably be moved to ../amiga/amigacpu.h,
137  * although some of it could probably be put into generic 68k headers.
138  */
139 
140 /* values for machineid (happen to be AFF_* settings of AttnFlags) */
141 #define AMIGA_68020	(1L<<1)
142 #define AMIGA_68030	(1L<<2)
143 #define AMIGA_68040	(1L<<3)
144 #define AMIGA_68881	(1L<<4)
145 #define AMIGA_68882	(1L<<5)
146 #define	AMIGA_FPU40	(1L<<6)
147 #define AMIGA_68060	(1L<<7)
148 
149 #ifdef _KERNEL
150 extern int machineid;
151 #endif
152 
153 /*
154  * CTL_MACHDEP definitions.
155  */
156 #define CPU_CONSDEV	1	/* dev_t: console terminal device */
157 #define CPU_MAXID	2	/* number of valid machdep ids */
158 
159 #define CTL_MACHDEP_NAMES { \
160 	{ 0, 0 }, \
161 	{ "console_device", CTLTYPE_STRUCT }, \
162 }
163 
164 #ifdef _KERNEL
165 /*
166  * Prototypes from amiga_init.c
167  */
168 void	*alloc_z2mem __P((long));
169 
170 /*
171  * Prototypes from autoconf.c
172  */
173 int	is_a1200 __P((void));
174 int	is_a3000 __P((void));
175 int	is_a4000 __P((void));
176 #ifdef DRACO
177 #define	is_draco() ((machineid >> 24) == 0x7d ? (machineid >> 16) & 0xff : 0)
178 #endif
179 
180 /*
181  * Prototypes from clock.c
182  */
183 u_long	clkread __P((void));
184 
185 #ifdef DRACO
186 /*
187  * Prototypes from kbd.c
188  */
189 void	drkbdintr __P((void));
190 
191 /*
192  * Prototypes from drsc.c
193  */
194 void	drsc_handler __P((void));
195 #endif
196 
197 /*
198  * Prototypes from locore.s
199  */
200 struct fpframe;
201 struct user;
202 struct pcb;
203 
204 void	clearseg __P((vm_offset_t));
205 void	doboot __P((void)) __attribute__((__noreturn__));
206 void	loadustp __P((int));
207 #ifdef FPCOPROC
208 void	m68881_save __P((struct fpframe *));
209 void	m68881_restore __P((struct fpframe *));
210 #endif
211 void	physcopyseg __P((vm_offset_t, vm_offset_t));
212 u_int	probeva __P((u_int, u_int));
213 void	proc_trampoline __P((void));
214 void	savectx __P((struct pcb *));
215 void	switch_exit __P((struct lwp *));
216 void	switch_lwp_exit __P((struct lwp *));
217 
218 /*
219  * Prototypes from machdep.c
220  */
221 int	badaddr __P((caddr_t));
222 int	badbaddr __P((caddr_t));
223 void	bootsync __P((void));
224 void	dumpconf __P((void));
225 
226 /*
227  * Prototypes from sys_machdep.c:
228  */
229 int	cachectl1 __P((unsigned long, vaddr_t, size_t, struct proc *));
230 int	dma_cachectl __P((caddr_t, int));
231 
232 /*
233  * Prototypes from vm_machdep.c
234  */
235 int	kvtop __P((caddr_t));
236 void	physaccess __P((caddr_t,  caddr_t, int, int));
237 void	physunaccess __P((caddr_t, int));
238 void	setredzone __P((u_int *, caddr_t));
239 
240 /*
241  * Prototypes from pmap.c:
242  */
243 void	pmap_bootstrap __P((vm_offset_t, vm_offset_t));
244 
245 #endif /* _KERNEL */
246 
247 #endif /* !_MACHINE_CPU_H_ */
248