• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * This header was generated from the Linux kernel headers by update_headers.py,
3  * to provide necessary information from kernel to userspace, such as constants,
4  * structures, and macros, and thus, contains no copyrightable information.
5  */
6 #ifndef __ASM_SIGCONTEXT_H
7 #define __ASM_SIGCONTEXT_H
8 #ifndef __ASSEMBLY__
9 #include <linux/types.h>
10 struct sigcontext {
11 	__u64 fault_address;
12 
13 	__u64 regs[31];
14 	__u64 sp;
15 	__u64 pc;
16 	__u64 pstate;
17 
18 	__u8 __reserved[4096] __attribute__((__aligned__(16)));
19 };
20 struct _aarch64_ctx {
21 	__u32 magic;
22 	__u32 size;
23 };
24 #define FPSIMD_MAGIC	0x46508001
25 struct fpsimd_context {
26 	struct _aarch64_ctx head;
27 	__u32 fpsr;
28 	__u32 fpcr;
29 	__uint128_t vregs[32];
30 };
31 #define ESR_MAGIC	0x45535201
32 struct esr_context {
33 	struct _aarch64_ctx head;
34 	__u64 esr;
35 };
36 #define EXTRA_MAGIC	0x45585401
37 struct extra_context {
38 	struct _aarch64_ctx head;
39 	__u64 datap;
40 	__u32 size;
41 	__u32 __reserved[3];
42 };
43 #define SVE_MAGIC	0x53564501
44 struct sve_context {
45 	struct _aarch64_ctx head;
46 	__u16 vl;
47 	__u16 __reserved[3];
48 };
49 #endif
50 #define SVE_VQ_BYTES		16
51 #define SVE_VQ_MIN		1
52 #define SVE_VQ_MAX		512
53 #define SVE_VL_MIN		(SVE_VQ_MIN * SVE_VQ_BYTES)
54 #define SVE_VL_MAX		(SVE_VQ_MAX * SVE_VQ_BYTES)
55 #define SVE_NUM_ZREGS		32
56 #define SVE_NUM_PREGS		16
57 #define sve_vl_valid(vl) \
58 	((vl) % SVE_VQ_BYTES == 0 && (vl) >= SVE_VL_MIN && (vl) <= SVE_VL_MAX)
59 #define sve_vq_from_vl(vl)	((vl) / SVE_VQ_BYTES)
60 #define sve_vl_from_vq(vq)	((vq) * SVE_VQ_BYTES)
61 #define SVE_SIG_ZREG_SIZE(vq)	((__u32)(vq) * SVE_VQ_BYTES)
62 #define SVE_SIG_PREG_SIZE(vq)	((__u32)(vq) * (SVE_VQ_BYTES / 8))
63 #define SVE_SIG_FFR_SIZE(vq)	SVE_SIG_PREG_SIZE(vq)
64 #define SVE_SIG_REGS_OFFSET					\
65 	((sizeof(struct sve_context) + (SVE_VQ_BYTES - 1))	\
66 		/ SVE_VQ_BYTES * SVE_VQ_BYTES)
67 #define SVE_SIG_ZREGS_OFFSET	SVE_SIG_REGS_OFFSET
68 #define SVE_SIG_ZREG_OFFSET(vq, n) \
69 	(SVE_SIG_ZREGS_OFFSET + SVE_SIG_ZREG_SIZE(vq) * (n))
70 #define SVE_SIG_ZREGS_SIZE(vq) \
71 	(SVE_SIG_ZREG_OFFSET(vq, SVE_NUM_ZREGS) - SVE_SIG_ZREGS_OFFSET)
72 #define SVE_SIG_PREGS_OFFSET(vq) \
73 	(SVE_SIG_ZREGS_OFFSET + SVE_SIG_ZREGS_SIZE(vq))
74 #define SVE_SIG_PREG_OFFSET(vq, n) \
75 	(SVE_SIG_PREGS_OFFSET(vq) + SVE_SIG_PREG_SIZE(vq) * (n))
76 #define SVE_SIG_PREGS_SIZE(vq) \
77 	(SVE_SIG_PREG_OFFSET(vq, SVE_NUM_PREGS) - SVE_SIG_PREGS_OFFSET(vq))
78 #define SVE_SIG_FFR_OFFSET(vq) \
79 	(SVE_SIG_PREGS_OFFSET(vq) + SVE_SIG_PREGS_SIZE(vq))
80 #define SVE_SIG_REGS_SIZE(vq) \
81 	(SVE_SIG_FFR_OFFSET(vq) + SVE_SIG_FFR_SIZE(vq) - SVE_SIG_REGS_OFFSET)
82 #define SVE_SIG_CONTEXT_SIZE(vq) (SVE_SIG_REGS_OFFSET + SVE_SIG_REGS_SIZE(vq))
83 #endif
84