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