1224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
2224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Based on arch/arm/include/asm/ptrace.h
3224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
4224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Copyright (C) 1996-2003 Russell King
5224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Copyright (C) 2012 ARM Ltd.
6224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
7224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * This program is free software; you can redistribute it and/or modify
8224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * it under the terms of the GNU General Public License version 2 as
9224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * published by the Free Software Foundation.
10224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
11224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * This program is distributed in the hope that it will be useful,
12224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * but WITHOUT ANY WARRANTY; without even the implied warranty of
13224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * GNU General Public License for more details.
15224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng *
16224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * You should have received a copy of the GNU General Public License
17224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
19224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef _UAPI__ASM_PTRACE_H
20224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define _UAPI__ASM_PTRACE_H
21224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
22224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/types.h>
23224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
24224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <asm/hwcap.h>
25224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
26224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
27224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
28224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * PSR bits
29224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
30224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define PSR_MODE_EL0t	0x00000000
31224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define PSR_MODE_EL1t	0x00000004
32224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define PSR_MODE_EL1h	0x00000005
33224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define PSR_MODE_EL2t	0x00000008
34224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define PSR_MODE_EL2h	0x00000009
35224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define PSR_MODE_EL3t	0x0000000c
36224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define PSR_MODE_EL3h	0x0000000d
37224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define PSR_MODE_MASK	0x0000000f
38224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
39224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* AArch32 CPSR bits */
40224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define PSR_MODE32_BIT		0x00000010
41224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
42224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* AArch64 SPSR bits */
43224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define PSR_F_BIT	0x00000040
44224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define PSR_I_BIT	0x00000080
45224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define PSR_A_BIT	0x00000100
46224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define PSR_D_BIT	0x00000200
47224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define PSR_Q_BIT	0x08000000
48224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define PSR_V_BIT	0x10000000
49224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define PSR_C_BIT	0x20000000
50224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define PSR_Z_BIT	0x40000000
51224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define PSR_N_BIT	0x80000000
52224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
53224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
54224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Groups of PSR bits
55224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
56224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define PSR_f		0xff000000	/* Flags		*/
57224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define PSR_s		0x00ff0000	/* Status		*/
58224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define PSR_x		0x0000ff00	/* Extension		*/
59224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define PSR_c		0x000000ff	/* Control		*/
60224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
61224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
62224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef __ASSEMBLY__
63224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
64224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/*
65224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * User structures for general purpose, floating point and debug registers.
66224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
67224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct user_pt_regs {
68224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64		regs[31];
69224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64		sp;
70224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64		pc;
71224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64		pstate;
72224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
73224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
74224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct user_fpsimd_state {
75224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__uint128_t	vregs[32];
76224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32		fpsr;
77224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32		fpcr;
78224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
79224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
80224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct user_hwdebug_state {
81224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32		dbg_info;
82224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32		pad;
83224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	struct {
84224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng		__u64	addr;
85224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng		__u32	ctrl;
86224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng		__u32	pad;
87224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	}		dbg_regs[16];
88224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
89224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
90224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif /* __ASSEMBLY__ */
91224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
92224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif /* _UAPI__ASM_PTRACE_H */
93