18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci* Copyright (C) 2020 Loongson Technology Corporation Limited
48c2ecf20Sopenharmony_ci*
58c2ecf20Sopenharmony_ci* Author: Hanlu Li <lihanlu@loongson.cn>
68c2ecf20Sopenharmony_ci*/
78c2ecf20Sopenharmony_ci#ifndef _UAPI_ASM_SIGCONTEXT_H
88c2ecf20Sopenharmony_ci#define _UAPI_ASM_SIGCONTEXT_H
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci#include <linux/types.h>
118c2ecf20Sopenharmony_ci#include <linux/posix_types.h>
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci/* FP context was used */
148c2ecf20Sopenharmony_ci#define SC_USED_FP		(1 << 0)
158c2ecf20Sopenharmony_ci/* Address error was due to memory load */
168c2ecf20Sopenharmony_ci#define SC_ADDRERR_RD		(1 << 30)
178c2ecf20Sopenharmony_ci/* Address error was due to memory store */
188c2ecf20Sopenharmony_ci#define SC_ADDRERR_WR		(1 << 31)
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_cistruct sigcontext {
218c2ecf20Sopenharmony_ci	__u64	sc_pc;
228c2ecf20Sopenharmony_ci	__u64	sc_regs[32];
238c2ecf20Sopenharmony_ci	__u32	sc_flags;
248c2ecf20Sopenharmony_ci	__u64	sc_extcontext[0] __attribute__((__aligned__(16)));
258c2ecf20Sopenharmony_ci};
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_ci#define CONTEXT_INFO_ALIGN	16
288c2ecf20Sopenharmony_cistruct sctx_info {
298c2ecf20Sopenharmony_ci	__u32	magic;
308c2ecf20Sopenharmony_ci	__u32	size;
318c2ecf20Sopenharmony_ci	__u64	padding;	/* padding to 16 bytes */
328c2ecf20Sopenharmony_ci};
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_ci/* FPU context */
358c2ecf20Sopenharmony_ci#define FPU_CTX_MAGIC		0x46505501
368c2ecf20Sopenharmony_ci#define FPU_CTX_ALIGN		8
378c2ecf20Sopenharmony_cistruct fpu_context {
388c2ecf20Sopenharmony_ci	__u64	regs[32];
398c2ecf20Sopenharmony_ci	__u64	fcc;
408c2ecf20Sopenharmony_ci	__u32	fcsr;
418c2ecf20Sopenharmony_ci};
428c2ecf20Sopenharmony_ci
438c2ecf20Sopenharmony_ci/* LSX context */
448c2ecf20Sopenharmony_ci#define LSX_CTX_MAGIC		0x53580001
458c2ecf20Sopenharmony_ci#define LSX_CTX_ALIGN		16
468c2ecf20Sopenharmony_cistruct lsx_context {
478c2ecf20Sopenharmony_ci	__u64	regs[2*32];
488c2ecf20Sopenharmony_ci	__u64	fcc;
498c2ecf20Sopenharmony_ci	__u32	fcsr;
508c2ecf20Sopenharmony_ci};
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ci/* LASX context */
538c2ecf20Sopenharmony_ci#define LASX_CTX_MAGIC		0x41535801
548c2ecf20Sopenharmony_ci#define LASX_CTX_ALIGN		32
558c2ecf20Sopenharmony_cistruct lasx_context {
568c2ecf20Sopenharmony_ci	__u64	regs[4*32];
578c2ecf20Sopenharmony_ci	__u64	fcc;
588c2ecf20Sopenharmony_ci	__u32	fcsr;
598c2ecf20Sopenharmony_ci};
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_ci/* LBT context */
628c2ecf20Sopenharmony_ci#define LBT_CTX_MAGIC		0x42540001
638c2ecf20Sopenharmony_ci#define LBT_CTX_ALIGN		8
648c2ecf20Sopenharmony_cistruct lbt_context {
658c2ecf20Sopenharmony_ci	__u64	scr[4];
668c2ecf20Sopenharmony_ci	__u32	eflags;
678c2ecf20Sopenharmony_ci};
688c2ecf20Sopenharmony_ci
698c2ecf20Sopenharmony_ci#endif /* _UAPI_ASM_SIGCONTEXT_H */
70