1198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris/*
2198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris * This file is subject to the terms and conditions of the GNU General Public
3198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris * License.  See the file "COPYING" in the main directory of this archive
4198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris * for more details.
5198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris *
6198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris * Copyright (C) 1998, 1999, 2001, 2003 Ralf Baechle
7198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris * Copyright (C) 2000, 2001 Silicon Graphics, Inc.
8198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris */
9198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#ifndef _UAPI_ASM_SIGINFO_H
10198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#define _UAPI_ASM_SIGINFO_H
11198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
12198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
13198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#define __ARCH_SIGEV_PREAMBLE_SIZE (sizeof(long) + 2*sizeof(int))
14198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#undef __ARCH_SI_TRAPNO /* exception code needs to fill this ...  */
15198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
16198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#define HAVE_ARCH_SIGINFO_T
17198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
18198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris/*
19198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris * Careful to keep union _sifields from shifting ...
20198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris */
21e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#if _MIPS_SZLONG == 32
22198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#define __ARCH_SI_PREAMBLE_SIZE (3 * sizeof(int))
23e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#elif _MIPS_SZLONG == 64
24198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#define __ARCH_SI_PREAMBLE_SIZE (4 * sizeof(int))
25e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#else
26e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#error _MIPS_SZLONG neither 32 nor 64
27198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#endif
28198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
29e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris#define __ARCH_SIGSYS
30e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris
31d4bfa476e64733d26a737ecb94b81c41860851d6Christopher Ferris#include <asm-generic/siginfo.h>
32198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
3312e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris/* We can't use generic siginfo_t, because our si_code and si_errno are swapped */
34198084289b68143fd4ea72dec91515eec00d700fChristopher Ferristypedef struct siginfo {
35198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris	int si_signo;
36198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris	int si_code;
37198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris	int si_errno;
38198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris	int __pad0[SI_MAX_SIZE / sizeof(int) - SI_PAD_SIZE - 3];
39198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
40198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris	union {
41198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		int _pad[SI_PAD_SIZE];
42198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
43198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		/* kill() */
44198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		struct {
45ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris			__kernel_pid_t _pid;	/* sender's pid */
46198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			__ARCH_SI_UID_T _uid;	/* sender's uid */
47198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		} _kill;
48198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
49198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		/* POSIX.1b timers */
50198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		struct {
51ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris			__kernel_timer_t _tid;	/* timer id */
52198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			int _overrun;		/* overrun count */
53198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)];
54198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			sigval_t _sigval;	/* same as below */
55198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			int _sys_private;	/* not to be passed to user */
56198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		} _timer;
57198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
58198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		/* POSIX.1b signals */
59198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		struct {
60ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris			__kernel_pid_t _pid;	/* sender's pid */
61198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			__ARCH_SI_UID_T _uid;	/* sender's uid */
62198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			sigval_t _sigval;
63198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		} _rt;
64198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
65198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		/* SIGCHLD */
66198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		struct {
67ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris			__kernel_pid_t _pid;	/* which child */
68198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			__ARCH_SI_UID_T _uid;	/* sender's uid */
69198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			int _status;		/* exit code */
70ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris			__kernel_clock_t _utime;
71ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris			__kernel_clock_t _stime;
72198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		} _sigchld;
73198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
74198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		/* IRIX SIGCHLD */
75198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		struct {
76ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris			__kernel_pid_t _pid;	/* which child */
77ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris			__kernel_clock_t _utime;
78198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			int _status;		/* exit code */
79ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris			__kernel_clock_t _stime;
80198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		} _irix_sigchld;
81198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
82198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
83198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		struct {
84198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			void __user *_addr; /* faulting insn/memory ref. */
85198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#ifdef __ARCH_SI_TRAPNO
86198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			int _trapno;	/* TRAP # which caused the signal */
87198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#endif
88198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			short _addr_lsb;
89ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris			union {
90ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris				/* used when si_code=SEGV_BNDERR */
91ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris				struct {
92ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris					void __user *_lower;
93ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris					void __user *_upper;
94ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris				} _addr_bnd;
95ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris				/* used when si_code=SEGV_PKUERR */
96ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris				__u32 _pkey;
97ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris			};
98198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		} _sigfault;
99198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
100198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		/* SIGPOLL, SIGXFSZ (To do ...)	 */
101198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		struct {
102198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			__ARCH_SI_BAND_T _band; /* POLL_IN, POLL_OUT, POLL_MSG */
103198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris			int _fd;
104198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris		} _sigpoll;
105e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris
106e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris		/* SIGSYS */
107e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris		struct {
108e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris			void __user *_call_addr; /* calling user insn */
109e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris			int _syscall;	/* triggering system call number */
110e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris			unsigned int _arch;	/* AUDIT_ARCH_* of syscall */
111e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris		} _sigsys;
112198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris	} _sifields;
113198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris} siginfo_t;
114198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
115198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris/*
116198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris * si_code values
117198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris * Again these have been chosen to be IRIX compatible.
118198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris */
119198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#undef SI_ASYNCIO
120198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#undef SI_TIMER
121198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#undef SI_MESGQ
122198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#define SI_ASYNCIO	-2	/* sent by AIO completion */
123198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#define SI_TIMER __SI_CODE(__SI_TIMER, -3) /* sent by timer expiration */
124198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#define SI_MESGQ __SI_CODE(__SI_MESGQ, -4) /* sent by real time mesq state change */
125198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris
126198084289b68143fd4ea72dec91515eec00d700fChristopher Ferris#endif /* _UAPI_ASM_SIGINFO_H */
127