xref: /openbsd/sys/arch/alpha/include/frame.h (revision 2fa72412)
1*2fa72412Spirofti /*	$OpenBSD: frame.h,v 1.4 2011/03/23 16:54:34 pirofti Exp $	*/
250ce9ee0Sniklas /*	$NetBSD: frame.h,v 1.3 1996/07/11 05:31:32 cgd Exp $	*/
3df930be7Sderaadt 
4df930be7Sderaadt /*
5df930be7Sderaadt  * Copyright (c) 1994, 1995 Carnegie-Mellon University.
6df930be7Sderaadt  * All rights reserved.
7df930be7Sderaadt  *
8df930be7Sderaadt  * Author: Chris G. Demetriou
9df930be7Sderaadt  *
10df930be7Sderaadt  * Permission to use, copy, modify and distribute this software and
11df930be7Sderaadt  * its documentation is hereby granted, provided that both the copyright
12df930be7Sderaadt  * notice and this permission notice appear in all copies of the
13df930be7Sderaadt  * software, derivative works or modified versions, and any portions
14df930be7Sderaadt  * thereof, and that both notices appear in supporting documentation.
15df930be7Sderaadt  *
16df930be7Sderaadt  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
17df930be7Sderaadt  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
18df930be7Sderaadt  * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
19df930be7Sderaadt  *
20df930be7Sderaadt  * Carnegie Mellon requests users of this software to return to
21df930be7Sderaadt  *
22df930be7Sderaadt  *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
23df930be7Sderaadt  *  School of Computer Science
24df930be7Sderaadt  *  Carnegie Mellon University
25df930be7Sderaadt  *  Pittsburgh PA 15213-3890
26df930be7Sderaadt  *
27df930be7Sderaadt  * any improvements or extensions that they make and grant Carnegie the
28df930be7Sderaadt  * rights to redistribute these changes.
29df930be7Sderaadt  */
30df930be7Sderaadt 
31*2fa72412Spirofti #ifndef _MACHINE_FRAME_H_
32*2fa72412Spirofti #define	_MACHINE_FRAME_H_
33df930be7Sderaadt 
3450ce9ee0Sniklas #include <machine/alpha_cpu.h>
35df930be7Sderaadt 
36df930be7Sderaadt /*
3750ce9ee0Sniklas  * Software trap, exception, and syscall frame.
38df930be7Sderaadt  *
3950ce9ee0Sniklas  * Includes "hardware" (PALcode) frame.
4050ce9ee0Sniklas  *
4150ce9ee0Sniklas  * PALcode puts ALPHA_HWFRAME_* fields on stack.  We have to add
4250ce9ee0Sniklas  * all of the general-purpose registers except for zero, for sp
4350ce9ee0Sniklas  * (which is automatically saved in the PCB's USP field for entries
4450ce9ee0Sniklas  * from user mode, and which is implicitly saved and restored by the
4550ce9ee0Sniklas  * calling conventions for entries from kernel mode), and (on traps
4650ce9ee0Sniklas  * and exceptions) for a0, a1, and a2 (which are saved by PALcode).
47df930be7Sderaadt  */
48df930be7Sderaadt 
4950ce9ee0Sniklas /* Quadword offsets of the registers to be saved. */
50df930be7Sderaadt #define	FRAME_V0	0
51df930be7Sderaadt #define	FRAME_T0	1
52df930be7Sderaadt #define	FRAME_T1	2
53df930be7Sderaadt #define	FRAME_T2	3
54df930be7Sderaadt #define	FRAME_T3	4
55df930be7Sderaadt #define	FRAME_T4	5
56df930be7Sderaadt #define	FRAME_T5	6
57df930be7Sderaadt #define	FRAME_T6	7
58df930be7Sderaadt #define	FRAME_T7	8
59df930be7Sderaadt #define	FRAME_S0	9
60df930be7Sderaadt #define	FRAME_S1	10
61df930be7Sderaadt #define	FRAME_S2	11
62df930be7Sderaadt #define	FRAME_S3	12
63df930be7Sderaadt #define	FRAME_S4	13
64df930be7Sderaadt #define	FRAME_S5	14
65df930be7Sderaadt #define	FRAME_S6	15
66df930be7Sderaadt #define	FRAME_A3	16
67df930be7Sderaadt #define	FRAME_A4	17
68df930be7Sderaadt #define	FRAME_A5	18
69df930be7Sderaadt #define	FRAME_T8	19
70df930be7Sderaadt #define	FRAME_T9	20
71df930be7Sderaadt #define	FRAME_T10	21
72df930be7Sderaadt #define	FRAME_T11	22
73df930be7Sderaadt #define	FRAME_RA	23
74df930be7Sderaadt #define	FRAME_T12	24
75df930be7Sderaadt #define	FRAME_AT	25
76df930be7Sderaadt #define	FRAME_SP	26
7750ce9ee0Sniklas 
7850ce9ee0Sniklas #define	FRAME_SW_SIZE	(FRAME_SP + 1)
7950ce9ee0Sniklas #define	FRAME_HW_OFFSET	FRAME_SW_SIZE
8050ce9ee0Sniklas 
8150ce9ee0Sniklas #define	FRAME_PS	(FRAME_HW_OFFSET + ALPHA_HWFRAME_PS)
8250ce9ee0Sniklas #define	FRAME_PC	(FRAME_HW_OFFSET + ALPHA_HWFRAME_PC)
8350ce9ee0Sniklas #define	FRAME_GP	(FRAME_HW_OFFSET + ALPHA_HWFRAME_GP)
8450ce9ee0Sniklas #define	FRAME_A0	(FRAME_HW_OFFSET + ALPHA_HWFRAME_A0)
8550ce9ee0Sniklas #define	FRAME_A1	(FRAME_HW_OFFSET + ALPHA_HWFRAME_A1)
8650ce9ee0Sniklas #define	FRAME_A2	(FRAME_HW_OFFSET + ALPHA_HWFRAME_A2)
8750ce9ee0Sniklas 
8850ce9ee0Sniklas #define	FRAME_HW_SIZE	ALPHA_HWFRAME_SIZE
8950ce9ee0Sniklas #define	FRAME_SIZE	(FRAME_HW_OFFSET + FRAME_HW_SIZE)
90df930be7Sderaadt 
91df930be7Sderaadt struct trapframe {
9250ce9ee0Sniklas 	unsigned long	tf_regs[FRAME_SIZE];	/* See above */
93df930be7Sderaadt };
94df930be7Sderaadt 
95*2fa72412Spirofti #endif /* _MACHINE_FRAME_H_ */
96