xref: /openbsd-src/sys/arch/sh/include/trap.h (revision 2fa72412907ae78c4787a4a8f888c5f0486e225c)
1*2fa72412Spirofti /*	$OpenBSD: trap.h,v 1.4 2011/03/23 16:54:37 pirofti Exp $	*/
295c7671fSmiod /*	$NetBSD: exception.h,v 1.9 2006/07/22 21:58:29 uwe Exp $	*/
395c7671fSmiod 
495c7671fSmiod /*-
595c7671fSmiod  * Copyright (c) 2002 The NetBSD Foundation, Inc.
695c7671fSmiod  * All rights reserved.
795c7671fSmiod  *
895c7671fSmiod  * Redistribution and use in source and binary forms, with or without
995c7671fSmiod  * modification, are permitted provided that the following conditions
1095c7671fSmiod  * are met:
1195c7671fSmiod  * 1. Redistributions of source code must retain the above copyright
1295c7671fSmiod  *    notice, this list of conditions and the following disclaimer.
1395c7671fSmiod  * 2. Redistributions in binary form must reproduce the above copyright
1495c7671fSmiod  *    notice, this list of conditions and the following disclaimer in the
1595c7671fSmiod  *    documentation and/or other materials provided with the distribution.
1695c7671fSmiod  *
1795c7671fSmiod  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
1895c7671fSmiod  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
1995c7671fSmiod  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
2095c7671fSmiod  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
2195c7671fSmiod  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2295c7671fSmiod  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2395c7671fSmiod  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2495c7671fSmiod  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2595c7671fSmiod  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2695c7671fSmiod  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2795c7671fSmiod  * POSSIBILITY OF SUCH DAMAGE.
2895c7671fSmiod  */
2995c7671fSmiod 
30*2fa72412Spirofti #ifndef _SH_TRAP_H_
31*2fa72412Spirofti #define	_SH_TRAP_H_
3295c7671fSmiod /*
3395c7671fSmiod  * SH3/SH4 Exception handling.
3495c7671fSmiod  */
3595c7671fSmiod #include <sh/devreg.h>
3695c7671fSmiod 
3795c7671fSmiod #ifdef _KERNEL
3895c7671fSmiod #define	SH3_TRA			0xffffffd0	/* 32bit */
3995c7671fSmiod #define	SH3_EXPEVT		0xffffffd4	/* 32bit */
4095c7671fSmiod #define	SH3_INTEVT		0xffffffd8	/* 32bit */
4195c7671fSmiod #define	SH7709_INTEVT2		0xa4000000	/* 32bit */
4295c7671fSmiod 
4395c7671fSmiod #define	SH4_TRA			0xff000020	/* 32bit */
4495c7671fSmiod #define	SH4_EXPEVT		0xff000024	/* 32bit */
4595c7671fSmiod #define	SH4_INTEVT		0xff000028	/* 32bit */
4695c7671fSmiod 
4795c7671fSmiod /*
4895c7671fSmiod  * EXPEVT
4995c7671fSmiod  */
5095c7671fSmiod /* Reset exception */
5195c7671fSmiod #define	EXPEVT_RESET_POWER	0x000	/* Power-On reset */
5295c7671fSmiod #define	EXPEVT_RESET_MANUAL	0x020	/* Manual reset */
5395c7671fSmiod #define	EXPEVT_RESET_TLB_MULTI_HIT	0x140	/* SH4 only */
5495c7671fSmiod 
5595c7671fSmiod /* General exception */
5695c7671fSmiod #define	EXPEVT_TLB_MISS_LD	0x040	/* TLB miss (load) */
5795c7671fSmiod #define	EXPEVT_TLB_MISS_ST	0x060	/* TLB miss (store) */
5895c7671fSmiod #define	EXPEVT_TLB_MOD		0x080	/* Initial page write */
5995c7671fSmiod #define	EXPEVT_TLB_PROT_LD	0x0a0	/* Protection violation (load) */
6095c7671fSmiod #define	EXPEVT_TLB_PROT_ST	0x0c0	/* Protection violation (store)*/
6195c7671fSmiod #define	EXPEVT_ADDR_ERR_LD	0x0e0	/* Address error (load) */
6295c7671fSmiod #define	EXPEVT_ADDR_ERR_ST	0x100	/* Address error (store) */
6395c7671fSmiod #define	EXPEVT_FPU		0x120	/* FPU exception */
6495c7671fSmiod #define	EXPEVT_TRAPA		0x160	/* Unconditional trap (TRAPA) */
6595c7671fSmiod #define	EXPEVT_RES_INST		0x180	/* Illegal instruction */
6695c7671fSmiod #define	EXPEVT_SLOT_INST	0x1a0	/* Illegal slot instruction */
6795c7671fSmiod #define	EXPEVT_BREAK		0x1e0	/* User break */
6895c7671fSmiod #define	EXPEVT_FPU_DISABLE	0x800	/* FPU disabled */
6995c7671fSmiod #define	EXPEVT_FPU_SLOT_DISABLE	0x820	/* Slot FPU disabled */
7095c7671fSmiod 
7195c7671fSmiod /* Software bit */
7295c7671fSmiod #define	EXP_USER		0x001	/* exception from user-mode */
7395c7671fSmiod 
7495c7671fSmiod #define	_SH_TRA_SYSCALL		0x80	/* syscall trapa number */
75cc697ce9Smiod #define	_SH_TRA_CACHECTL	0x81	/* cachectl trapa number */
7695c7671fSmiod #define	_SH_TRA_BREAK		0xc3	/* magic number for debugger */
7795c7671fSmiod 
7895c7671fSmiod /*
7995c7671fSmiod  * INTEVT/INTEVT2
8095c7671fSmiod  */
8195c7671fSmiod /* External interrupt */
8295c7671fSmiod #define	SH_INTEVT_NMI		0x1c0
8395c7671fSmiod 
8495c7671fSmiod #define	SH_INTEVT_TMU0_TUNI0	0x400
8595c7671fSmiod #define	SH_INTEVT_TMU1_TUNI1	0x420
8695c7671fSmiod #define	SH_INTEVT_TMU2_TUNI2	0x440
8795c7671fSmiod #define	SH_INTEVT_TMU2_TICPI2	0x460
8895c7671fSmiod 
8995c7671fSmiod #define	SH_INTEVT_SCI_ERI	0x4e0
9095c7671fSmiod #define	SH_INTEVT_SCI_RXI	0x500
9195c7671fSmiod #define	SH_INTEVT_SCI_TXI	0x520
9295c7671fSmiod #define	SH_INTEVT_SCI_TEI	0x540
9395c7671fSmiod 
9495c7671fSmiod #define	SH_INTEVT_WDT_ITI	0x560
9595c7671fSmiod 
9695c7671fSmiod #define	SH_INTEVT_IRL9		0x320
9795c7671fSmiod #define	SH_INTEVT_IRL11		0x360
9895c7671fSmiod #define	SH_INTEVT_IRL13		0x3a0
9995c7671fSmiod 
10095c7671fSmiod #define	SH4_INTEVT_SCIF_ERI	0x700
10195c7671fSmiod #define	SH4_INTEVT_SCIF_RXI	0x720
10295c7671fSmiod #define	SH4_INTEVT_SCIF_BRI	0x740
10395c7671fSmiod #define	SH4_INTEVT_SCIF_TXI	0x760
10495c7671fSmiod 
10595c7671fSmiod #define	SH7709_INTEVT2_IRQ0	0x600
10695c7671fSmiod #define	SH7709_INTEVT2_IRQ1	0x620
10795c7671fSmiod #define	SH7709_INTEVT2_IRQ2	0x640
10895c7671fSmiod #define	SH7709_INTEVT2_IRQ3	0x660
10995c7671fSmiod #define	SH7709_INTEVT2_IRQ4	0x680
11095c7671fSmiod #define	SH7709_INTEVT2_IRQ5	0x6a0
11195c7671fSmiod 
11295c7671fSmiod #define	SH7709_INTEVT2_PINT07	0x700
11395c7671fSmiod #define	SH7709_INTEVT2_PINT8F	0x720
11495c7671fSmiod 
11595c7671fSmiod #define SH7709_INTEVT2_DEI0	0x800
11695c7671fSmiod #define SH7709_INTEVT2_DEI1	0x820
11795c7671fSmiod #define SH7709_INTEVT2_DEI2	0x840
11895c7671fSmiod #define SH7709_INTEVT2_DEI3	0x860
11995c7671fSmiod 
12095c7671fSmiod #define	SH7709_INTEVT2_IRDA_ERI	0x880
12195c7671fSmiod #define	SH7709_INTEVT2_IRDA_RXI	0x8a0
12295c7671fSmiod #define	SH7709_INTEVT2_IRDA_BRI	0x8c0
12395c7671fSmiod #define	SH7709_INTEVT2_IRDA_TXI	0x8e0
12495c7671fSmiod 
12595c7671fSmiod #define	SH7709_INTEVT2_SCIF_ERI	0x900
12695c7671fSmiod #define	SH7709_INTEVT2_SCIF_RXI	0x920
12795c7671fSmiod #define	SH7709_INTEVT2_SCIF_BRI	0x940
12895c7671fSmiod #define	SH7709_INTEVT2_SCIF_TXI	0x960
12995c7671fSmiod 
13095c7671fSmiod #define	SH7709_INTEVT2_ADC	0x980
13195c7671fSmiod 
13295c7671fSmiod /* SH7750R, SH7751, SH7751R */
13395c7671fSmiod #define	SH4_INTEVT_IRL0		0x240
13495c7671fSmiod #define	SH4_INTEVT_IRL1		0x2a0
13595c7671fSmiod #define	SH4_INTEVT_IRL2		0x300
13695c7671fSmiod #define	SH4_INTEVT_IRL3		0x360
13795c7671fSmiod 
13895c7671fSmiod #define	SH4_INTEVT_IRQ0		0x200
13995c7671fSmiod #define	SH4_INTEVT_IRQ1		0x220
14095c7671fSmiod #define	SH4_INTEVT_IRQ2		0x240
14195c7671fSmiod #define	SH4_INTEVT_IRQ3		0x260
14295c7671fSmiod #define	SH4_INTEVT_IRQ4		0x280
14395c7671fSmiod #define	SH4_INTEVT_IRQ5		0x2a0
14495c7671fSmiod #define	SH4_INTEVT_IRQ6		0x2c0
14595c7671fSmiod #define	SH4_INTEVT_IRQ7		0x2e0
14695c7671fSmiod #define	SH4_INTEVT_IRQ8		0x300
14795c7671fSmiod #define	SH4_INTEVT_IRQ9		0x320
14895c7671fSmiod #define	SH4_INTEVT_IRQ10	0x340
14995c7671fSmiod #define	SH4_INTEVT_IRQ11	0x360
15095c7671fSmiod #define	SH4_INTEVT_IRQ12	0x380
15195c7671fSmiod #define	SH4_INTEVT_IRQ13	0x3a0
15295c7671fSmiod #define	SH4_INTEVT_IRQ14	0x3c0
15395c7671fSmiod #define	SH4_INTEVT_IRQ15	0x3e0
15495c7671fSmiod 
15595c7671fSmiod #define	SH4_INTEVT_TMU3		0xb00
15695c7671fSmiod #define	SH4_INTEVT_TMU4		0xb80
15795c7671fSmiod 
15895c7671fSmiod #define	SH4_INTEVT_PCISERR	0xa00
15995c7671fSmiod #define	SH4_INTEVT_PCIERR	0xae0
16095c7671fSmiod #define	SH4_INTEVT_PCIPWDWN	0xac0
16195c7671fSmiod #define	SH4_INTEVT_PCIPWON	0xaa0
16295c7671fSmiod #define	SH4_INTEVT_PCIDMA0	0xa80
16395c7671fSmiod #define	SH4_INTEVT_PCIDMA1	0xa60
16495c7671fSmiod #define	SH4_INTEVT_PCIDMA2	0xa40
16595c7671fSmiod #define	SH4_INTEVT_PCIDMA3	0xa20
16695c7671fSmiod 
16795c7671fSmiod #ifndef _LOCORE
16895c7671fSmiod 
16995c7671fSmiod #if defined(SH3) && defined(SH4)
17095c7671fSmiod extern uint32_t __sh_TRA;
17195c7671fSmiod extern uint32_t __sh_EXPEVT;
17295c7671fSmiod extern uint32_t __sh_INTEVT;
17395c7671fSmiod #endif /* SH3 && SH4 */
17495c7671fSmiod 
17595c7671fSmiod extern const char * const exp_type[];
17695c7671fSmiod extern const int exp_types;
17795c7671fSmiod 
17895c7671fSmiod #endif /* !_LOCORE */
17995c7671fSmiod 
18095c7671fSmiod #endif /* _KERNEL */
181*2fa72412Spirofti #endif /* !_SH_TRAP_H_ */
182