1/* $NetBSD: frame.h,v 1.5 2020/08/06 06:49:55 ryo Exp $ */
 2
 3/*-
 4 * Copyright (c) 2014 The NetBSD Foundation, Inc.
 5 * All rights reserved.
 6 *
 7 * This code is derived from software contributed to The NetBSD Foundation
 8 * by Matt Thomas of 3am Software Foundry.
 9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 *    notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 *    notice, this list of conditions and the following disclaimer in the
17 *    documentation and/or other materials provided with the distribution.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 */
31
32#ifndef _AARCH64_FRAME_H_
33#define _AARCH64_FRAME_H_
34
35#ifdef __aarch64__
36
37#include <aarch64/reg.h>
38
39struct trapframe {
40	struct reg tf_regs __aligned(16);
41	uint64_t tf_esr;		// 32-bit register
42	uint64_t tf_far;		// 64-bit register
43#define tf_reg		tf_regs.r_reg
44#define tf_lr		tf_regs.r_reg[30]
45#define tf_pc		tf_regs.r_pc
46#define tf_sp		tf_regs.r_sp
47#define tf_spsr		tf_regs.r_spsr
48};
49
50#ifdef _KERNEL
51/* size of trapframe (stack pointer) must be 16byte aligned */
52__CTASSERT((sizeof(struct trapframe) & 15) == 0);
53#endif
54
55#define TF_SIZE		sizeof(struct trapframe)
56
57#define FB_X19	0
58#define FB_X20	1
59#define FB_X21	2
60#define FB_X22	3
61#define FB_X23	4
62#define FB_X24	5
63#define FB_X25	6
64#define FB_X26	7
65#define FB_X27	8
66#define FB_X28	9
67#define FB_X29	10
68#define FB_LR	11
69#define FB_SP	12
70#define FB_MAX	13
71struct faultbuf {
72	register_t fb_reg[FB_MAX];
73};
74
75#define	lwp_trapframe(l)		((l)->l_md.md_utf)
76
77#elif defined(__arm__)
78
79#include <arm/frame.h>
80
81#endif /* __aarch64__/__arm__ */
82
83#endif /* _AARCH64_FRAME_H_ */