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