162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Author: Hanlu Li <lihanlu@loongson.cn>
462306a36Sopenharmony_ci *         Huacai Chen <chenhuacai@loongson.cn>
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * Copyright (C) 2020-2022 Loongson Technology Corporation Limited
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci#ifndef _UAPI_ASM_SIGCONTEXT_H
962306a36Sopenharmony_ci#define _UAPI_ASM_SIGCONTEXT_H
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include <linux/types.h>
1262306a36Sopenharmony_ci#include <linux/posix_types.h>
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci/* FP context was used */
1562306a36Sopenharmony_ci#define SC_USED_FP		(1 << 0)
1662306a36Sopenharmony_ci/* Address error was due to memory load */
1762306a36Sopenharmony_ci#define SC_ADDRERR_RD		(1 << 30)
1862306a36Sopenharmony_ci/* Address error was due to memory store */
1962306a36Sopenharmony_ci#define SC_ADDRERR_WR		(1 << 31)
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_cistruct sigcontext {
2262306a36Sopenharmony_ci	__u64	sc_pc;
2362306a36Sopenharmony_ci	__u64	sc_regs[32];
2462306a36Sopenharmony_ci	__u32	sc_flags;
2562306a36Sopenharmony_ci	__u64	sc_extcontext[0] __attribute__((__aligned__(16)));
2662306a36Sopenharmony_ci};
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci#define CONTEXT_INFO_ALIGN	16
2962306a36Sopenharmony_cistruct sctx_info {
3062306a36Sopenharmony_ci	__u32	magic;
3162306a36Sopenharmony_ci	__u32	size;
3262306a36Sopenharmony_ci	__u64	padding;	/* padding to 16 bytes */
3362306a36Sopenharmony_ci};
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci/* FPU context */
3662306a36Sopenharmony_ci#define FPU_CTX_MAGIC		0x46505501
3762306a36Sopenharmony_ci#define FPU_CTX_ALIGN		8
3862306a36Sopenharmony_cistruct fpu_context {
3962306a36Sopenharmony_ci	__u64	regs[32];
4062306a36Sopenharmony_ci	__u64	fcc;
4162306a36Sopenharmony_ci	__u32	fcsr;
4262306a36Sopenharmony_ci};
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci/* LSX context */
4562306a36Sopenharmony_ci#define LSX_CTX_MAGIC		0x53580001
4662306a36Sopenharmony_ci#define LSX_CTX_ALIGN		16
4762306a36Sopenharmony_cistruct lsx_context {
4862306a36Sopenharmony_ci	__u64	regs[2*32];
4962306a36Sopenharmony_ci	__u64	fcc;
5062306a36Sopenharmony_ci	__u32	fcsr;
5162306a36Sopenharmony_ci};
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci/* LASX context */
5462306a36Sopenharmony_ci#define LASX_CTX_MAGIC		0x41535801
5562306a36Sopenharmony_ci#define LASX_CTX_ALIGN		32
5662306a36Sopenharmony_cistruct lasx_context {
5762306a36Sopenharmony_ci	__u64	regs[4*32];
5862306a36Sopenharmony_ci	__u64	fcc;
5962306a36Sopenharmony_ci	__u32	fcsr;
6062306a36Sopenharmony_ci};
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ci/* LBT context */
6362306a36Sopenharmony_ci#define LBT_CTX_MAGIC		0x42540001
6462306a36Sopenharmony_ci#define LBT_CTX_ALIGN		8
6562306a36Sopenharmony_cistruct lbt_context {
6662306a36Sopenharmony_ci	__u64	regs[4];
6762306a36Sopenharmony_ci	__u32	eflags;
6862306a36Sopenharmony_ci	__u32	ftop;
6962306a36Sopenharmony_ci};
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci#endif /* _UAPI_ASM_SIGCONTEXT_H */
73