summaryrefslogtreecommitdiff
path: root/sys/arch/vax/include/trap.h
blob: 3efef61a1de742c4000577d643348e9b1b092f36 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*      $NetBSD: trap.h,v 1.10 1995/12/13 18:54:03 ragge Exp $     */

/*-
 * Copyright (c) 1990 The Regents of the University of California.
 * All rights reserved.
 *
 * This code is derived from software contributed to Berkeley by
 * William Jolitz.
 *
 * 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 University of
 *	California, Berkeley and its contributors.
 * 4. Neither the name of the University 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 REGENTS 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.
 *
 *	@(#)trap.h	5.4 (Berkeley) 5/9/91
 */

/*
 * Trap type values
 * also known in trap.c for name strings
 */
#ifndef _VAX_TRAP_H_
#define _VAX_TRAP_H_

#define	T_RESADFLT	0	/* reserved addressing */
#define	T_PRIVINFLT	1	/* privileged instruction */
#define	T_RESOPFLT	2	/* reserved operand */
#define	T_BPTFLT	3	/* breakpoint instruction */
#define	T_SYSCALL	5	/* system call (kcall) */
#define	T_ARITHFLT	6	/* arithmetic trap */
#define	T_ASTFLT	7	/* system forced exception */
#define	T_PTELEN	8	/* Page table length exceeded */
#define	T_TRANSFLT	9	/* translation fault */
#define	T_TRCTRAP	10	/* trace trap */
/* #define	T_COMPAT	11	/* compatibility mode fault on VAX */
#define	T_ACCFLT	12	/* Access violation fault */
/* #define	T_TABLEFLT	13	/* page table fault */
/* #define	T_ALIGNFLT	14	/* alignment fault */
#define	T_KSPNOTVAL	15	/* kernel stack pointer not valid */
/* #define	T_BUSERR	16	/* bus error */
#define	T_KDBTRAP	17	/* kernel debugger trap */

/* #define	T_DIVIDE	18	/* integer divide fault */
/* #define	T_NMI		19	/* non-maskable trap */
/* #define	T_OFLOW		20	/* overflow trap */
/* #define	T_BOUND		21	/* bound instruction fault */
/* #define	T_DNA		22	/* device not available fault */
/* #define	T_DOUBLEFLT	23	/* double fault */
/* #define	T_FPOPFLT	24	/* fp coprocessor operand fetch fault */
/* #define	T_TSSFLT	25	/* invalid tss fault */
/* #define	T_SEGNPFLT	26	/* segment not present fault */
/* #define	T_STKFLT	27	/* stack fault */
/* #define	T_RESERVED	28	/* reserved fault base */

/* These gets ORed with the word for page handling routines */
#define	T_WRITE		0x80
#define	T_PTEFETCH	0x40

/* Trap's coming from user mode */
#define	T_USER	0x100

#ifndef ASSEMBLER
/* If we want to alter USP in some syscall, we do it with mtpr */
struct	trapframe {
	int	fp;	/* Stack frame pointer */
        int     ap;     /* Argument pointer on user stack */
        int     r0;     /* General registers saved upon trap/syscall */
        int     r1;
        int     r2;
        int     r3;
        int     r4;
        int     r5;
        int     r6;
        int     r7;
        int     r8;
        int     r9;
        int     r10;
        int     r11;
	int	trap;	/* Type of trap */
        u_int	code;   /* Trap specific code */
        u_int   pc;     /* User pc */
        u_int   psl;    /* User psl */
};

/*
 * This struct is used when setting up interrupt vectors dynamically.
 * It pushes a longword between 0-63 on the stack; this number is
 * normally used as the ctlr number on devices. This use effectively
 * limits the number of interruptable ctlrs on the unibus to 64.
 */
struct ivec_dsp {
	char	pushr; 		/* pushr */
	char	pushrarg;	/* $3f */
	char	pushl; 		/* pushl */
	char	pushlarg;	/* $? */
	char	nop;      	/* nop, for foolish gcc */
	char	calls[3]; 	/* calls $1,? */
	void	(*hoppaddr)();	/* jump for calls */
	char	popr;	  	/* popr $0x3f */
	char	poprarg;
	char	rei;      	/* rei */
	char	pad;		/* sizeof(struct ivec_dsp) == 16 */
};

#endif /* ASSEMBLER */

#endif _VAX_TRAP_H_