xref: /freebsd/sys/powerpc/include/trap.h (revision f9bac91b18fc344fe5967f4367a1994588a26b10)
1f9bac91bSBenno Rice /*
2f9bac91bSBenno Rice  * Copyright (C) 1995, 1996 Wolfgang Solfrank.
3f9bac91bSBenno Rice  * Copyright (C) 1995, 1996 TooLs GmbH.
4f9bac91bSBenno Rice  * All rights reserved.
5f9bac91bSBenno Rice  *
6f9bac91bSBenno Rice  * Redistribution and use in source and binary forms, with or without
7f9bac91bSBenno Rice  * modification, are permitted provided that the following conditions
8f9bac91bSBenno Rice  * are met:
9f9bac91bSBenno Rice  * 1. Redistributions of source code must retain the above copyright
10f9bac91bSBenno Rice  *    notice, this list of conditions and the following disclaimer.
11f9bac91bSBenno Rice  * 2. Redistributions in binary form must reproduce the above copyright
12f9bac91bSBenno Rice  *    notice, this list of conditions and the following disclaimer in the
13f9bac91bSBenno Rice  *    documentation and/or other materials provided with the distribution.
14f9bac91bSBenno Rice  * 3. All advertising materials mentioning features or use of this software
15f9bac91bSBenno Rice  *    must display the following acknowledgement:
16f9bac91bSBenno Rice  *	This product includes software developed by TooLs GmbH.
17f9bac91bSBenno Rice  * 4. The name of TooLs GmbH may not be used to endorse or promote products
18f9bac91bSBenno Rice  *    derived from this software without specific prior written permission.
19f9bac91bSBenno Rice  *
20f9bac91bSBenno Rice  * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR
21f9bac91bSBenno Rice  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
22f9bac91bSBenno Rice  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
23f9bac91bSBenno Rice  * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24f9bac91bSBenno Rice  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25f9bac91bSBenno Rice  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
26f9bac91bSBenno Rice  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27f9bac91bSBenno Rice  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
28f9bac91bSBenno Rice  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
29f9bac91bSBenno Rice  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30f9bac91bSBenno Rice  *
31f9bac91bSBenno Rice  *	$NetBSD: trap.h,v 1.3 2000/05/25 21:10:14 is Exp $
32f9bac91bSBenno Rice  * $FreeBSD$
33f9bac91bSBenno Rice  */
34f9bac91bSBenno Rice 
35f9bac91bSBenno Rice #ifndef	_POWERPC_TRAP_H_
36f9bac91bSBenno Rice #define	_POWERPC_TRAP_H_
37f9bac91bSBenno Rice 
38f9bac91bSBenno Rice #define	EXC_RSVD	0x0000		/* Reserved */
39f9bac91bSBenno Rice #define	EXC_RST		0x0100		/* Reset */
40f9bac91bSBenno Rice #define	EXC_MCHK	0x0200		/* Machine Check */
41f9bac91bSBenno Rice #define	EXC_DSI		0x0300		/* Data Storage Interrupt */
42f9bac91bSBenno Rice #define	EXC_ISI		0x0400		/* Instruction Storage Interrupt */
43f9bac91bSBenno Rice #define	EXC_EXI		0x0500		/* External Interrupt */
44f9bac91bSBenno Rice #define	EXC_ALI		0x0600		/* Alignment Interrupt */
45f9bac91bSBenno Rice #define	EXC_PGM		0x0700		/* Program Interrupt */
46f9bac91bSBenno Rice #define	EXC_FPU		0x0800		/* Floating-point Unavailable */
47f9bac91bSBenno Rice #define	EXC_DECR	0x0900		/* Decrementer Interrupt */
48f9bac91bSBenno Rice #define	EXC_SC		0x0c00		/* System Call */
49f9bac91bSBenno Rice #define	EXC_TRC		0x0d00		/* Trace */
50f9bac91bSBenno Rice #define	EXC_FPA		0x0e00		/* Floating-point Assist */
51f9bac91bSBenno Rice 
52f9bac91bSBenno Rice /* The following are only available on 604: */
53f9bac91bSBenno Rice #define	EXC_PERF	0x0f00		/* Performance Monitoring */
54f9bac91bSBenno Rice #define	EXC_BPT		0x1300		/* Instruction Breakpoint */
55f9bac91bSBenno Rice #define	EXC_SMI		0x1400		/* System Managment Interrupt */
56f9bac91bSBenno Rice 
57f9bac91bSBenno Rice /* And these are only on the 603: */
58f9bac91bSBenno Rice #define	EXC_IMISS	0x1000		/* Instruction translation miss */
59f9bac91bSBenno Rice #define	EXC_DLMISS	0x1100		/* Data load translation miss */
60f9bac91bSBenno Rice #define	EXC_DSMISS	0x1200		/* Data store translation miss */
61f9bac91bSBenno Rice 
62f9bac91bSBenno Rice #define	EXC_LAST	0x2f00		/* Last possible exception vector */
63f9bac91bSBenno Rice 
64f9bac91bSBenno Rice #define	EXC_AST		0x3000		/* Fake AST vector */
65f9bac91bSBenno Rice 
66f9bac91bSBenno Rice /* Trap was in user mode */
67f9bac91bSBenno Rice #define	EXC_USER	0x10000
68f9bac91bSBenno Rice 
69f9bac91bSBenno Rice 
70f9bac91bSBenno Rice /*
71f9bac91bSBenno Rice  * EXC_ALI sets bits in the DSISR and DAR to provide enough
72f9bac91bSBenno Rice  * information to recover from the unaligned access without needing to
73f9bac91bSBenno Rice  * parse the offending instruction. This includes certain bits of the
74f9bac91bSBenno Rice  * opcode, and information about what registers are used. The opcode
75f9bac91bSBenno Rice  * indicator values below come from Appendix F of Book III of "The
76f9bac91bSBenno Rice  * PowerPC Architecture".
77f9bac91bSBenno Rice  */
78f9bac91bSBenno Rice 
79f9bac91bSBenno Rice #define	EXC_ALI_OPCODE_INDICATOR(dsisr) ((dsisr >> 10) & 0x7f)
80f9bac91bSBenno Rice #define	EXC_ALI_LFD	0x09
81f9bac91bSBenno Rice #define	EXC_ALI_STFD	0x0b
82f9bac91bSBenno Rice 
83f9bac91bSBenno Rice /* Macros to extract register information */
84f9bac91bSBenno Rice #define	EXC_ALI_RST(dsisr) ((dsisr >> 5) & 0x1f)   /* source or target */
85f9bac91bSBenno Rice #define	EXC_ALI_RA(dsisr) (dsisr & 0x1f)
86f9bac91bSBenno Rice 
87f9bac91bSBenno Rice #ifndef	LOCORE
88f9bac91bSBenno Rice 
89f9bac91bSBenno Rice void	trap(struct trapframe *);
90f9bac91bSBenno Rice 
91f9bac91bSBenno Rice #endif /* !LOCORE */
92f9bac91bSBenno Rice 
93f9bac91bSBenno Rice #endif	/* _POWERPC_TRAP_H_ */
94