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