122851890Sopenharmony_ci/*
222851890Sopenharmony_ci * This header was generated from the Linux kernel headers by update_headers.py,
322851890Sopenharmony_ci * to provide necessary information from kernel to userspace, such as constants,
422851890Sopenharmony_ci * structures, and macros, and thus, contains no copyrightable information.
522851890Sopenharmony_ci */
622851890Sopenharmony_ci#ifndef __ASM_SIGCONTEXT_H
722851890Sopenharmony_ci#define __ASM_SIGCONTEXT_H
822851890Sopenharmony_ci#ifndef __ASSEMBLY__
922851890Sopenharmony_ci#include <linux/types.h>
1022851890Sopenharmony_cistruct sigcontext {
1122851890Sopenharmony_ci	__u64 fault_address;
1222851890Sopenharmony_ci
1322851890Sopenharmony_ci	__u64 regs[31];
1422851890Sopenharmony_ci	__u64 sp;
1522851890Sopenharmony_ci	__u64 pc;
1622851890Sopenharmony_ci	__u64 pstate;
1722851890Sopenharmony_ci
1822851890Sopenharmony_ci	__u8 __reserved[4096] __attribute__((__aligned__(16)));
1922851890Sopenharmony_ci};
2022851890Sopenharmony_cistruct _aarch64_ctx {
2122851890Sopenharmony_ci	__u32 magic;
2222851890Sopenharmony_ci	__u32 size;
2322851890Sopenharmony_ci};
2422851890Sopenharmony_ci#define FPSIMD_MAGIC	0x46508001
2522851890Sopenharmony_cistruct fpsimd_context {
2622851890Sopenharmony_ci	struct _aarch64_ctx head;
2722851890Sopenharmony_ci	__u32 fpsr;
2822851890Sopenharmony_ci	__u32 fpcr;
2922851890Sopenharmony_ci	__uint128_t vregs[32];
3022851890Sopenharmony_ci};
3122851890Sopenharmony_ci#define ESR_MAGIC	0x45535201
3222851890Sopenharmony_cistruct esr_context {
3322851890Sopenharmony_ci	struct _aarch64_ctx head;
3422851890Sopenharmony_ci	__u64 esr;
3522851890Sopenharmony_ci};
3622851890Sopenharmony_ci#define EXTRA_MAGIC	0x45585401
3722851890Sopenharmony_cistruct extra_context {
3822851890Sopenharmony_ci	struct _aarch64_ctx head;
3922851890Sopenharmony_ci	__u64 datap;
4022851890Sopenharmony_ci	__u32 size;
4122851890Sopenharmony_ci	__u32 __reserved[3];
4222851890Sopenharmony_ci};
4322851890Sopenharmony_ci#define SVE_MAGIC	0x53564501
4422851890Sopenharmony_cistruct sve_context {
4522851890Sopenharmony_ci	struct _aarch64_ctx head;
4622851890Sopenharmony_ci	__u16 vl;
4722851890Sopenharmony_ci	__u16 __reserved[3];
4822851890Sopenharmony_ci};
4922851890Sopenharmony_ci#endif
5022851890Sopenharmony_ci#define SVE_VQ_BYTES		16
5122851890Sopenharmony_ci#define SVE_VQ_MIN		1
5222851890Sopenharmony_ci#define SVE_VQ_MAX		512
5322851890Sopenharmony_ci#define SVE_VL_MIN		(SVE_VQ_MIN * SVE_VQ_BYTES)
5422851890Sopenharmony_ci#define SVE_VL_MAX		(SVE_VQ_MAX * SVE_VQ_BYTES)
5522851890Sopenharmony_ci#define SVE_NUM_ZREGS		32
5622851890Sopenharmony_ci#define SVE_NUM_PREGS		16
5722851890Sopenharmony_ci#define sve_vl_valid(vl) \
5822851890Sopenharmony_ci	((vl) % SVE_VQ_BYTES == 0 && (vl) >= SVE_VL_MIN && (vl) <= SVE_VL_MAX)
5922851890Sopenharmony_ci#define sve_vq_from_vl(vl)	((vl) / SVE_VQ_BYTES)
6022851890Sopenharmony_ci#define sve_vl_from_vq(vq)	((vq) * SVE_VQ_BYTES)
6122851890Sopenharmony_ci#define SVE_SIG_ZREG_SIZE(vq)	((__u32)(vq) * SVE_VQ_BYTES)
6222851890Sopenharmony_ci#define SVE_SIG_PREG_SIZE(vq)	((__u32)(vq) * (SVE_VQ_BYTES / 8))
6322851890Sopenharmony_ci#define SVE_SIG_FFR_SIZE(vq)	SVE_SIG_PREG_SIZE(vq)
6422851890Sopenharmony_ci#define SVE_SIG_REGS_OFFSET					\
6522851890Sopenharmony_ci	((sizeof(struct sve_context) + (SVE_VQ_BYTES - 1))	\
6622851890Sopenharmony_ci		/ SVE_VQ_BYTES * SVE_VQ_BYTES)
6722851890Sopenharmony_ci#define SVE_SIG_ZREGS_OFFSET	SVE_SIG_REGS_OFFSET
6822851890Sopenharmony_ci#define SVE_SIG_ZREG_OFFSET(vq, n) \
6922851890Sopenharmony_ci	(SVE_SIG_ZREGS_OFFSET + SVE_SIG_ZREG_SIZE(vq) * (n))
7022851890Sopenharmony_ci#define SVE_SIG_ZREGS_SIZE(vq) \
7122851890Sopenharmony_ci	(SVE_SIG_ZREG_OFFSET(vq, SVE_NUM_ZREGS) - SVE_SIG_ZREGS_OFFSET)
7222851890Sopenharmony_ci#define SVE_SIG_PREGS_OFFSET(vq) \
7322851890Sopenharmony_ci	(SVE_SIG_ZREGS_OFFSET + SVE_SIG_ZREGS_SIZE(vq))
7422851890Sopenharmony_ci#define SVE_SIG_PREG_OFFSET(vq, n) \
7522851890Sopenharmony_ci	(SVE_SIG_PREGS_OFFSET(vq) + SVE_SIG_PREG_SIZE(vq) * (n))
7622851890Sopenharmony_ci#define SVE_SIG_PREGS_SIZE(vq) \
7722851890Sopenharmony_ci	(SVE_SIG_PREG_OFFSET(vq, SVE_NUM_PREGS) - SVE_SIG_PREGS_OFFSET(vq))
7822851890Sopenharmony_ci#define SVE_SIG_FFR_OFFSET(vq) \
7922851890Sopenharmony_ci	(SVE_SIG_PREGS_OFFSET(vq) + SVE_SIG_PREGS_SIZE(vq))
8022851890Sopenharmony_ci#define SVE_SIG_REGS_SIZE(vq) \
8122851890Sopenharmony_ci	(SVE_SIG_FFR_OFFSET(vq) + SVE_SIG_FFR_SIZE(vq) - SVE_SIG_REGS_OFFSET)
8222851890Sopenharmony_ci#define SVE_SIG_CONTEXT_SIZE(vq) (SVE_SIG_REGS_OFFSET + SVE_SIG_REGS_SIZE(vq))
8322851890Sopenharmony_ci#endif
84