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