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