xref: /OK3568_Linux_fs/kernel/arch/s390/include/uapi/asm/sigcontext.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  *  S390 version
4*4882a593Smuzhiyun  *    Copyright IBM Corp. 1999, 2000
5*4882a593Smuzhiyun  */
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #ifndef _ASM_S390_SIGCONTEXT_H
8*4882a593Smuzhiyun #define _ASM_S390_SIGCONTEXT_H
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #include <linux/compiler.h>
11*4882a593Smuzhiyun #include <linux/types.h>
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #define __NUM_GPRS		16
14*4882a593Smuzhiyun #define __NUM_FPRS		16
15*4882a593Smuzhiyun #define __NUM_ACRS		16
16*4882a593Smuzhiyun #define __NUM_VXRS		32
17*4882a593Smuzhiyun #define __NUM_VXRS_LOW		16
18*4882a593Smuzhiyun #define __NUM_VXRS_HIGH		16
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #ifndef __s390x__
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun /* Has to be at least _NSIG_WORDS from asm/signal.h */
23*4882a593Smuzhiyun #define _SIGCONTEXT_NSIG	64
24*4882a593Smuzhiyun #define _SIGCONTEXT_NSIG_BPW	32
25*4882a593Smuzhiyun /* Size of stack frame allocated when calling signal handler. */
26*4882a593Smuzhiyun #define __SIGNAL_FRAMESIZE	96
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun #else /* __s390x__ */
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun /* Has to be at least _NSIG_WORDS from asm/signal.h */
31*4882a593Smuzhiyun #define _SIGCONTEXT_NSIG	64
32*4882a593Smuzhiyun #define _SIGCONTEXT_NSIG_BPW	64
33*4882a593Smuzhiyun /* Size of stack frame allocated when calling signal handler. */
34*4882a593Smuzhiyun #define __SIGNAL_FRAMESIZE	160
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun #endif /* __s390x__ */
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun #define _SIGCONTEXT_NSIG_WORDS	(_SIGCONTEXT_NSIG / _SIGCONTEXT_NSIG_BPW)
39*4882a593Smuzhiyun #define _SIGMASK_COPY_SIZE	(sizeof(unsigned long)*_SIGCONTEXT_NSIG_WORDS)
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun typedef struct
42*4882a593Smuzhiyun {
43*4882a593Smuzhiyun         unsigned long mask;
44*4882a593Smuzhiyun         unsigned long addr;
45*4882a593Smuzhiyun } __attribute__ ((aligned(8))) _psw_t;
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun typedef struct
48*4882a593Smuzhiyun {
49*4882a593Smuzhiyun 	_psw_t psw;
50*4882a593Smuzhiyun 	unsigned long gprs[__NUM_GPRS];
51*4882a593Smuzhiyun 	unsigned int  acrs[__NUM_ACRS];
52*4882a593Smuzhiyun } _s390_regs_common;
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun typedef struct
55*4882a593Smuzhiyun {
56*4882a593Smuzhiyun 	unsigned int fpc;
57*4882a593Smuzhiyun 	unsigned int pad;
58*4882a593Smuzhiyun 	double   fprs[__NUM_FPRS];
59*4882a593Smuzhiyun } _s390_fp_regs;
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun typedef struct
62*4882a593Smuzhiyun {
63*4882a593Smuzhiyun 	_s390_regs_common regs;
64*4882a593Smuzhiyun 	_s390_fp_regs     fpregs;
65*4882a593Smuzhiyun } _sigregs;
66*4882a593Smuzhiyun 
67*4882a593Smuzhiyun typedef struct
68*4882a593Smuzhiyun {
69*4882a593Smuzhiyun #ifndef __s390x__
70*4882a593Smuzhiyun 	unsigned long gprs_high[__NUM_GPRS];
71*4882a593Smuzhiyun #endif
72*4882a593Smuzhiyun 	unsigned long long vxrs_low[__NUM_VXRS_LOW];
73*4882a593Smuzhiyun 	__vector128 vxrs_high[__NUM_VXRS_HIGH];
74*4882a593Smuzhiyun 	unsigned char __reserved[128];
75*4882a593Smuzhiyun } _sigregs_ext;
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun struct sigcontext
78*4882a593Smuzhiyun {
79*4882a593Smuzhiyun 	unsigned long	oldmask[_SIGCONTEXT_NSIG_WORDS];
80*4882a593Smuzhiyun 	_sigregs        __user *sregs;
81*4882a593Smuzhiyun };
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun 
84*4882a593Smuzhiyun #endif
85*4882a593Smuzhiyun 
86