import of upstream 2.4.34.4 from kernel.org
[linux-2.4.git] / arch / s390x / kernel / linux32.h
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 */
20 typedef unsigned int           __kernel_size_t32;
21 typedef int                    __kernel_ssize_t32;
22 typedef int                    __kernel_ptrdiff_t32;
23 typedef int                    __kernel_time_t32;
24 typedef int                    __kernel_clock_t32;
25 typedef int                    __kernel_pid_t32;
26 typedef unsigned short         __kernel_ipc_pid_t32;
27 typedef unsigned short         __kernel_uid_t32;
28 typedef unsigned short         __kernel_gid_t32;
29 typedef unsigned short         __kernel_dev_t32;
30 typedef unsigned int           __kernel_ino_t32;
31 typedef unsigned short         __kernel_mode_t32;
32 typedef unsigned short         __kernel_umode_t32;
33 typedef short                  __kernel_nlink_t32;
34 typedef int                    __kernel_daddr_t32;
35 typedef int                    __kernel_off_t32;
36 typedef unsigned int           __kernel_caddr_t32;
37 typedef long                   __kernel_loff_t32;
38 typedef __kernel_fsid_t        __kernel_fsid_t32;  
39
40 struct 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
49 struct 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
58 struct 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
81 struct 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
94 typedef __u32 old_sigset_t32;       /* at least 32 bits */ 
95
96 struct 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 
104 typedef struct {
105         __u32   sig[_SIGCONTEXT_NSIG_WORDS32];
106 } sigset_t32;  
107
108 typedef union sigval32 {
109         int     sival_int;
110         __u32   sival_ptr;
111 } sigval_t32;
112                  
113 typedef 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 */
179 typedef union
180 {
181         __u64   d;
182         __u32   f; 
183 } freg_t32;
184
185 typedef struct
186 {
187         unsigned int    fpc;
188         freg_t32        fprs[__NUM_FPRS];              
189 } _s390_fp_regs32;
190
191 typedef struct 
192 {
193         __u32   mask;
194         __u32   addr;
195 } _psw_t32 __attribute__ ((aligned(8)));
196
197 typedef struct
198 {
199         _psw_t32        psw;
200         __u32           gprs[__NUM_GPRS];
201         __u32           acrs[__NUM_ACRS];
202 } _s390_regs_common32;
203
204 typedef 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
215 struct sigcontext32
216 {
217         __u32   oldmask[_SIGCONTEXT_NSIG_WORDS32];
218         __u32   sregs;                          /* pointer */
219 };
220
221 /* asm/signal.h */
222 struct 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
229 typedef struct {
230         __u32                   ss_sp;          /* pointer */
231         int                     ss_flags;
232         __kernel_size_t32       ss_size;
233 } stack_t32;
234
235 /* asm/ucontext.h */
236 struct 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 */