1/* $Id: signal.h,v 1.1.1.1 2008/10/15 03:27:26 james26_jang Exp $ */
2#ifndef _ASMSPARC64_SIGNAL_H
3#define _ASMSPARC64_SIGNAL_H
4
5#include <asm/sigcontext.h>
6
7#ifdef __KERNEL__
8#ifndef __ASSEMBLY__
9#include <linux/personality.h>
10#include <linux/types.h>
11#endif
12#endif
13
14/* On the Sparc the signal handlers get passed a 'sub-signal' code
15 * for certain signal types, which we document here.
16 */
17#define SIGHUP		 1
18#define SIGINT		 2
19#define SIGQUIT		 3
20#define SIGILL		 4
21#define    SUBSIG_STACK       0
22#define    SUBSIG_ILLINST     2
23#define    SUBSIG_PRIVINST    3
24#define    SUBSIG_BADTRAP(t)  (0x80 + (t))
25
26#define SIGTRAP		 5
27#define SIGABRT		 6
28#define SIGIOT		 6
29
30#define SIGEMT           7
31#define    SUBSIG_TAG    10
32
33#define SIGFPE		 8
34#define    SUBSIG_FPDISABLED     0x400
35#define    SUBSIG_FPERROR        0x404
36#define    SUBSIG_FPINTOVFL      0x001
37#define    SUBSIG_FPSTSIG        0x002
38#define    SUBSIG_IDIVZERO       0x014
39#define    SUBSIG_FPINEXACT      0x0c4
40#define    SUBSIG_FPDIVZERO      0x0c8
41#define    SUBSIG_FPUNFLOW       0x0cc
42#define    SUBSIG_FPOPERROR      0x0d0
43#define    SUBSIG_FPOVFLOW       0x0d4
44
45#define SIGKILL		 9
46#define SIGBUS          10
47#define    SUBSIG_BUSTIMEOUT    1
48#define    SUBSIG_ALIGNMENT     2
49#define    SUBSIG_MISCERROR     5
50
51#define SIGSEGV		11
52#define    SUBSIG_NOMAPPING     3
53#define    SUBSIG_PROTECTION    4
54#define    SUBSIG_SEGERROR      5
55
56#define SIGSYS		12
57
58#define SIGPIPE		13
59#define SIGALRM		14
60#define SIGTERM		15
61#define SIGURG          16
62
63/* SunOS values which deviate from the Linux/i386 ones */
64#define SIGSTOP		17
65#define SIGTSTP		18
66#define SIGCONT		19
67#define SIGCHLD		20
68#define SIGTTIN		21
69#define SIGTTOU		22
70#define SIGIO		23
71#define SIGPOLL		SIGIO   /* SysV name for SIGIO */
72#define SIGXCPU		24
73#define SIGXFSZ		25
74#define SIGVTALRM	26
75#define SIGPROF		27
76#define SIGWINCH	28
77#define SIGLOST		29
78#define SIGPWR		SIGLOST
79#define SIGUSR1		30
80#define SIGUSR2		31
81
82/* Most things should be clean enough to redefine this at will, if care
83   is taken to make libc match.  */
84
85#define __OLD_NSIG	32
86#define __NEW_NSIG      64
87#define _NSIG_BPW     	64
88#define _NSIG_WORDS   	(__NEW_NSIG / _NSIG_BPW)
89
90#define _NSIG_BPW32   	32
91#define _NSIG_WORDS32 	(__NEW_NSIG / _NSIG_BPW32)
92
93#define SIGRTMIN       32
94#define SIGRTMAX       (__NEW_NSIG - 1)
95
96#if defined(__KERNEL__) || defined(__WANT_POSIX1B_SIGNALS__)
97#define _NSIG			__NEW_NSIG
98#define __new_sigset_t		sigset_t
99#define __new_sigset_t32	sigset_t32
100#define __new_sigaction		sigaction
101#define __new_sigaction32	sigaction32
102#define __old_sigset_t		old_sigset_t
103#define __old_sigset_t32	old_sigset_t32
104#define __old_sigaction		old_sigaction
105#define __old_sigaction32	old_sigaction32
106#else
107#define _NSIG			__OLD_NSIG
108#define NSIG			_NSIG
109#define __old_sigset_t		sigset_t
110#define __old_sigset_t32	sigset_t32
111#define __old_sigaction		sigaction
112#define __old_sigaction32	sigaction32
113#endif
114
115#ifndef __ASSEMBLY__
116
117typedef unsigned long __old_sigset_t;            /* at least 32 bits */
118typedef unsigned int __old_sigset_t32;
119
120typedef struct {
121       unsigned long sig[_NSIG_WORDS];
122} __new_sigset_t;
123
124typedef struct {
125       unsigned int sig[_NSIG_WORDS32];
126} __new_sigset_t32;
127
128/* A SunOS sigstack */
129struct sigstack {
130	char *the_stack;
131	int   cur_status;
132};
133
134/* Sigvec flags */
135#define SV_SSTACK    1     /* This signal handler should use sig-stack */
136#define SV_INTR      2     /* Sig return should not restart system call */
137#define SV_RESET     4     /* Set handler to SIG_DFL upon taken signal */
138#define SV_IGNCHILD  8     /* Do not send SIGCHLD */
139
140/*
141 * sa_flags values: SA_STACK is not currently supported, but will allow the
142 * usage of signal stacks by using the (now obsolete) sa_restorer field in
143 * the sigaction structure as a stack pointer. This is now possible due to
144 * the changes in signal handling. LBT 010493.
145 * SA_INTERRUPT is a no-op, but left due to historical reasons. Use the
146 * SA_RESTART flag to get restarting signals (which were the default long ago)
147 * SA_SHIRQ flag is for shared interrupt support on PCI and EISA.
148 */
149#define SA_NOCLDSTOP	SV_IGNCHILD
150#define SA_STACK	SV_SSTACK
151#define SA_ONSTACK	SV_SSTACK
152#define SA_RESTART	SV_INTR
153#define SA_ONESHOT	SV_RESET
154#define SA_INTERRUPT	0x10
155#define SA_NOMASK	0x20
156#define SA_SHIRQ	0x40
157#define SA_NOCLDWAIT    0x100 /* not supported yet */
158#define SA_SIGINFO      0x200
159
160
161#define SIG_BLOCK          0x01	/* for blocking signals */
162#define SIG_UNBLOCK        0x02	/* for unblocking signals */
163#define SIG_SETMASK        0x04	/* for setting the signal mask */
164
165/*
166 * sigaltstack controls
167 */
168#define SS_ONSTACK	1
169#define SS_DISABLE	2
170
171#define MINSIGSTKSZ	4096
172#define SIGSTKSZ	16384
173
174#ifdef __KERNEL__
175/*
176 * These values of sa_flags are used only by the kernel as part of the
177 * irq handling routines.
178 *
179 * SA_INTERRUPT is also used by the irq handling routines.
180 *
181 * DJHR
182 * SA_STATIC_ALLOC is used for the SPARC system to indicate that this
183 * interrupt handler's irq structure should be statically allocated
184 * by the request_irq routine.
185 * The alternative is that arch/sparc/kernel/irq.c has carnal knowledge
186 * of interrupt usage and that sucks. Also without a flag like this
187 * it may be possible for the free_irq routine to attempt to free
188 * statically allocated data.. which is NOT GOOD.
189 *
190 */
191#define SA_PROBE SA_ONESHOT
192#define SA_SAMPLE_RANDOM SA_RESTART
193#define SA_STATIC_ALLOC		0x80
194#endif
195
196/* Type of a signal handler.  */
197#ifdef __KERNEL__
198typedef void (*__sighandler_t)(int, struct sigcontext *);
199#else
200typedef void (*__sighandler_t)(int);
201#endif
202
203#define SIG_DFL	((__sighandler_t)0)	/* default signal handling */
204#define SIG_IGN	((__sighandler_t)1)	/* ignore signal */
205#define SIG_ERR	((__sighandler_t)-1)	/* error return from signal */
206
207struct __new_sigaction {
208	__sighandler_t		sa_handler;
209	unsigned long		sa_flags;
210	void 			(*sa_restorer)(void);     /* not used by Linux/SPARC yet */
211	__new_sigset_t		sa_mask;
212};
213
214struct __new_sigaction32 {
215	unsigned		sa_handler;
216	unsigned int    	sa_flags;
217	unsigned		sa_restorer;     /* not used by Linux/SPARC yet */
218	__new_sigset_t32 	sa_mask;
219};
220
221#ifdef __KERNEL__
222struct k_sigaction {
223	struct __new_sigaction 	sa;
224	void			*ka_restorer;
225};
226#endif
227
228struct __old_sigaction {
229	__sighandler_t  	sa_handler;
230	__old_sigset_t  	sa_mask;
231	unsigned long   	sa_flags;
232	void 			(*sa_restorer)(void);     /* not used by Linux/SPARC yet */
233};
234
235struct __old_sigaction32 {
236	unsigned		sa_handler;
237	__old_sigset_t32  	sa_mask;
238	unsigned int    	sa_flags;
239	unsigned		sa_restorer;     /* not used by Linux/SPARC yet */
240};
241
242typedef struct sigaltstack {
243	void			*ss_sp;
244	int			ss_flags;
245	size_t			ss_size;
246} stack_t;
247
248#ifdef __KERNEL__
249typedef struct sigaltstack32 {
250	u32			ss_sp;
251	int			ss_flags;
252	__kernel_size_t32	ss_size;
253} stack_t32;
254#endif
255
256#endif /* !(__ASSEMBLY__) */
257
258#endif /* !(_ASMSPARC64_SIGNAL_H) */
259