1#ifndef _ASM_S390X_S390_H 2#define _ASM_S390X_S390_H 3 4#include <linux/config.h> 5#include <linux/socket.h> 6#include <linux/nfs_fs.h> 7#include <linux/sunrpc/svc.h> 8#include <linux/nfsd/nfsd.h> 9#include <linux/nfsd/export.h> 10 11#ifdef CONFIG_S390_SUPPORT 12 13/* Macro that masks the high order bit of an 32 bit pointer and converts it*/ 14/* to a 64 bit pointer */ 15#define A(__x) ((unsigned long)((__x) & 0x7FFFFFFFUL)) 16#define AA(__x) \ 17 ((unsigned long)(__x)) 18 19/* Now 32bit compatibility types */ 20typedef unsigned int __kernel_size_t32; 21typedef int __kernel_ssize_t32; 22typedef int __kernel_ptrdiff_t32; 23typedef int __kernel_time_t32; 24typedef int __kernel_clock_t32; 25typedef int __kernel_pid_t32; 26typedef unsigned short __kernel_ipc_pid_t32; 27typedef unsigned short __kernel_uid_t32; 28typedef unsigned short __kernel_gid_t32; 29typedef unsigned short __kernel_dev_t32; 30typedef unsigned int __kernel_ino_t32; 31typedef unsigned short __kernel_mode_t32; 32typedef unsigned short __kernel_umode_t32; 33typedef short __kernel_nlink_t32; 34typedef int __kernel_daddr_t32; 35typedef int __kernel_off_t32; 36typedef unsigned int __kernel_caddr_t32; 37typedef long __kernel_loff_t32; 38typedef __kernel_fsid_t __kernel_fsid_t32; 39 40struct ipc_kludge_32 { 41 __u32 msgp; /* pointer */ 42 __s32 msgtyp; 43}; 44 45#define F_GETLK64 12 46#define F_SETLK64 13 47#define F_SETLKW64 14 48 49struct flock32 { 50 short l_type; 51 short l_whence; 52 __kernel_off_t32 l_start; 53 __kernel_off_t32 l_len; 54 __kernel_pid_t32 l_pid; 55 short __unused; 56}; 57 58struct stat32 { 59 unsigned short st_dev; 60 unsigned short __pad1; 61 __u32 st_ino; 62 unsigned short st_mode; 63 unsigned short st_nlink; 64 unsigned short st_uid; 65 unsigned short st_gid; 66 unsigned short st_rdev; 67 unsigned short __pad2; 68 __u32 st_size; 69 __u32 st_blksize; 70 __u32 st_blocks; 71 __u32 st_atime; 72 __u32 __unused1; 73 __u32 st_mtime; 74 __u32 __unused2; 75 __u32 st_ctime; 76 __u32 __unused3; 77 __u32 __unused4; 78 __u32 __unused5; 79}; 80 81struct statfs32 { 82 __s32 f_type; 83 __s32 f_bsize; 84 __s32 f_blocks; 85 __s32 f_bfree; 86 __s32 f_bavail; 87 __s32 f_files; 88 __s32 f_ffree; 89 __kernel_fsid_t f_fsid; 90 __s32 f_namelen; 91 __s32 f_spare[6]; 92}; 93 94typedef __u32 old_sigset_t32; /* at least 32 bits */ 95 96struct old_sigaction32 { 97 __u32 sa_handler; /* Really a pointer, but need to deal with 32 bits */ 98 old_sigset_t32 sa_mask; /* A 32 bit mask */ 99 __u32 sa_flags; 100 __u32 sa_restorer; /* Another 32 bit pointer */ 101}; 102 103#define _SIGCONTEXT_NSIG_WORDS32 2 104typedef struct { 105 __u32 sig[_SIGCONTEXT_NSIG_WORDS32]; 106} sigset_t32; 107 108typedef union sigval32 { 109 int sival_int; 110 __u32 sival_ptr; 111} sigval_t32; 112 113typedef struct siginfo32 { 114 int si_signo; 115 int si_errno; 116 int si_code; 117 118 union { 119 int _pad[((128/sizeof(int)) - 3)]; 120 121 /* kill() */ 122 struct { 123 pid_t _pid; /* sender's pid */ 124 uid_t _uid; /* sender's uid */ 125 } _kill; 126 127 /* POSIX.1b timers */ 128 struct { 129 unsigned int _timer1; 130 unsigned int _timer2; 131 132 } _timer; 133 134 /* POSIX.1b signals */ 135 struct { 136 pid_t _pid; /* sender's pid */ 137 uid_t _uid; /* sender's uid */ 138 sigval_t32 _sigval; 139 } _rt; 140 141 /* SIGCHLD */ 142 struct { 143 pid_t _pid; /* which child */ 144 uid_t _uid; /* sender's uid */ 145 int _status;/* exit code */ 146 __kernel_clock_t32 _utime; 147 __kernel_clock_t32 _stime; 148 } _sigchld; 149 150 /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */ 151 struct { 152 __u32 _addr; /* faulting insn/memory ref. - pointer */ 153 } _sigfault; 154 155 /* SIGPOLL */ 156 struct { 157 int _band; /* POLL_IN, POLL_OUT, POLL_MSG */ 158 int _fd; 159 } _sigpoll; 160 } _sifields; 161} siginfo_t32; 162 163/* 164 * How these fields are to be accessed. 165 */ 166#define si_pid _sifields._kill._pid 167#define si_uid _sifields._kill._uid 168#define si_status _sifields._sigchld._status 169#define si_utime _sifields._sigchld._utime 170#define si_stime _sifields._sigchld._stime 171#define si_value _sifields._rt._sigval 172#define si_int _sifields._rt._sigval.sival_int 173#define si_ptr _sifields._rt._sigval.sival_ptr 174#define si_addr _sifields._sigfault._addr 175#define si_band _sifields._sigpoll._band 176#define si_fd _sifields._sigpoll._fd 177 178/* asm/sigcontext.h */ 179typedef union 180{ 181 __u64 d; 182 __u32 f; 183} freg_t32; 184 185typedef struct 186{ 187 unsigned int fpc; 188 freg_t32 fprs[__NUM_FPRS]; 189} _s390_fp_regs32; 190 191typedef struct 192{ 193 __u32 mask; 194 __u32 addr; 195} _psw_t32 __attribute__ ((aligned(8))); 196 197typedef struct 198{ 199 _psw_t32 psw; 200 __u32 gprs[__NUM_GPRS]; 201 __u32 acrs[__NUM_ACRS]; 202} _s390_regs_common32; 203 204typedef struct 205{ 206 _s390_regs_common32 regs; 207 _s390_fp_regs32 fpregs; 208} _sigregs32; 209 210#define _SIGCONTEXT_NSIG32 64 211#define _SIGCONTEXT_NSIG_BPW32 32 212#define __SIGNAL_FRAMESIZE32 96 213#define _SIGMASK_COPY_SIZE32 (sizeof(u32)*2) 214 215struct sigcontext32 216{ 217 __u32 oldmask[_SIGCONTEXT_NSIG_WORDS32]; 218 __u32 sregs; /* pointer */ 219}; 220 221/* asm/signal.h */ 222struct sigaction32 { 223 __u32 sa_handler; /* pointer */ 224 __u32 sa_flags; 225 __u32 sa_restorer; /* pointer */ 226 sigset_t32 sa_mask; /* mask last for extensibility */ 227}; 228 229typedef struct { 230 __u32 ss_sp; /* pointer */ 231 int ss_flags; 232 __kernel_size_t32 ss_size; 233} stack_t32; 234 235/* asm/ucontext.h */ 236struct ucontext32 { 237 __u32 uc_flags; 238 __u32 uc_link; /* pointer */ 239 stack_t32 uc_stack; 240 _sigregs32 uc_mcontext; 241 sigset_t32 uc_sigmask; /* mask last for extensibility */ 242}; 243 244#endif /* !CONFIG_S390_SUPPORT */ 245 246#endif /* _ASM_S390X_S390_H */ 247

