xref: /OK3568_Linux_fs/kernel/arch/nds32/include/uapi/asm/sigcontext.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2*4882a593Smuzhiyun // Copyright (C) 2005-2017 Andes Technology Corporation
3*4882a593Smuzhiyun 
4*4882a593Smuzhiyun #ifndef _ASMNDS32_SIGCONTEXT_H
5*4882a593Smuzhiyun #define _ASMNDS32_SIGCONTEXT_H
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun /*
8*4882a593Smuzhiyun  * Signal context structure - contains all info to do with the state
9*4882a593Smuzhiyun  * before the signal handler was invoked.  Note: only add new entries
10*4882a593Smuzhiyun  * to the end of the structure.
11*4882a593Smuzhiyun  */
12*4882a593Smuzhiyun struct fpu_struct {
13*4882a593Smuzhiyun 	unsigned long long fd_regs[32];
14*4882a593Smuzhiyun 	unsigned long fpcsr;
15*4882a593Smuzhiyun 	/*
16*4882a593Smuzhiyun 	 * When CONFIG_SUPPORT_DENORMAL_ARITHMETIC is defined, kernel prevents
17*4882a593Smuzhiyun 	 * hardware from treating the denormalized output as an underflow case
18*4882a593Smuzhiyun 	 * and rounding it to a normal number. Hence kernel enables the UDF and
19*4882a593Smuzhiyun 	 * IEX trap in the fpcsr register to step in the calculation.
20*4882a593Smuzhiyun 	 * However, the UDF and IEX trap enable bit in $fpcsr also lose
21*4882a593Smuzhiyun 	 * their use.
22*4882a593Smuzhiyun 	 *
23*4882a593Smuzhiyun 	 * UDF_IEX_trap replaces the feature of UDF and IEX trap enable bit in
24*4882a593Smuzhiyun 	 * $fpcsr to control the trap of underflow and inexact. The bit filed
25*4882a593Smuzhiyun 	 * of UDF_IEX_trap is the same as $fpcsr, 10th bit is used to enable UDF
26*4882a593Smuzhiyun 	 * exception trapping and 11th bit is used to enable IEX exception
27*4882a593Smuzhiyun 	 * trapping.
28*4882a593Smuzhiyun 	 *
29*4882a593Smuzhiyun 	 * UDF_IEX_trap is only modified through fp_udfiex_crtl syscall.
30*4882a593Smuzhiyun 	 * Therefore, UDF_IEX_trap needn't be saved and restored in each
31*4882a593Smuzhiyun 	 * context switch.
32*4882a593Smuzhiyun 	 */
33*4882a593Smuzhiyun 	unsigned long UDF_IEX_trap;
34*4882a593Smuzhiyun };
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun struct zol_struct {
37*4882a593Smuzhiyun 	unsigned long nds32_lc;	/* $LC */
38*4882a593Smuzhiyun 	unsigned long nds32_le;	/* $LE */
39*4882a593Smuzhiyun 	unsigned long nds32_lb;	/* $LB */
40*4882a593Smuzhiyun };
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun struct sigcontext {
43*4882a593Smuzhiyun 	unsigned long trap_no;
44*4882a593Smuzhiyun 	unsigned long error_code;
45*4882a593Smuzhiyun 	unsigned long oldmask;
46*4882a593Smuzhiyun 	unsigned long nds32_r0;
47*4882a593Smuzhiyun 	unsigned long nds32_r1;
48*4882a593Smuzhiyun 	unsigned long nds32_r2;
49*4882a593Smuzhiyun 	unsigned long nds32_r3;
50*4882a593Smuzhiyun 	unsigned long nds32_r4;
51*4882a593Smuzhiyun 	unsigned long nds32_r5;
52*4882a593Smuzhiyun 	unsigned long nds32_r6;
53*4882a593Smuzhiyun 	unsigned long nds32_r7;
54*4882a593Smuzhiyun 	unsigned long nds32_r8;
55*4882a593Smuzhiyun 	unsigned long nds32_r9;
56*4882a593Smuzhiyun 	unsigned long nds32_r10;
57*4882a593Smuzhiyun 	unsigned long nds32_r11;
58*4882a593Smuzhiyun 	unsigned long nds32_r12;
59*4882a593Smuzhiyun 	unsigned long nds32_r13;
60*4882a593Smuzhiyun 	unsigned long nds32_r14;
61*4882a593Smuzhiyun 	unsigned long nds32_r15;
62*4882a593Smuzhiyun 	unsigned long nds32_r16;
63*4882a593Smuzhiyun 	unsigned long nds32_r17;
64*4882a593Smuzhiyun 	unsigned long nds32_r18;
65*4882a593Smuzhiyun 	unsigned long nds32_r19;
66*4882a593Smuzhiyun 	unsigned long nds32_r20;
67*4882a593Smuzhiyun 	unsigned long nds32_r21;
68*4882a593Smuzhiyun 	unsigned long nds32_r22;
69*4882a593Smuzhiyun 	unsigned long nds32_r23;
70*4882a593Smuzhiyun 	unsigned long nds32_r24;
71*4882a593Smuzhiyun 	unsigned long nds32_r25;
72*4882a593Smuzhiyun 	unsigned long nds32_fp;	/* $r28 */
73*4882a593Smuzhiyun 	unsigned long nds32_gp;	/* $r29 */
74*4882a593Smuzhiyun 	unsigned long nds32_lp;	/* $r30 */
75*4882a593Smuzhiyun 	unsigned long nds32_sp;	/* $r31 */
76*4882a593Smuzhiyun 	unsigned long nds32_ipc;
77*4882a593Smuzhiyun 	unsigned long fault_address;
78*4882a593Smuzhiyun 	unsigned long used_math_flag;
79*4882a593Smuzhiyun 	/* FPU Registers */
80*4882a593Smuzhiyun 	struct fpu_struct fpu;
81*4882a593Smuzhiyun 	struct zol_struct zol;
82*4882a593Smuzhiyun };
83*4882a593Smuzhiyun 
84*4882a593Smuzhiyun #endif
85