1 /*
2  * Copyright (c) 2018 Intel Corporation
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 #ifndef ZEPHYR_INCLUDE_POSIX_SIGNAL_H_
7 #define ZEPHYR_INCLUDE_POSIX_SIGNAL_H_
8 
9 #include "posix_types.h"
10 
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14 
15 #define SIGHUP    1  /**< Hangup */
16 #define SIGINT    2  /**< Interrupt */
17 #define SIGQUIT   3  /**< Quit */
18 #define SIGILL    4  /**< Illegal instruction */
19 #define SIGTRAP   5  /**< Trace/breakpoint trap */
20 #define SIGABRT   6  /**< Aborted */
21 #define SIGBUS    7  /**< Bus error */
22 #define SIGFPE    8  /**< Arithmetic exception */
23 #define SIGKILL   9  /**< Killed */
24 #define SIGUSR1   10 /**< User-defined signal 1 */
25 #define SIGSEGV   11 /**< Invalid memory reference */
26 #define SIGUSR2   12 /**< User-defined signal 2 */
27 #define SIGPIPE   13 /**< Broken pipe */
28 #define SIGALRM   14 /**< Alarm clock */
29 #define SIGTERM   15 /**< Terminated */
30 /* 16 not used */
31 #define SIGCHLD   17 /**< Child status changed */
32 #define SIGCONT   18 /**< Continued */
33 #define SIGSTOP   19 /**< Stop executing */
34 #define SIGTSTP   20 /**< Stopped */
35 #define SIGTTIN   21 /**< Stopped (read) */
36 #define SIGTTOU   22 /**< Stopped (write) */
37 #define SIGURG    23 /**< Urgent I/O condition */
38 #define SIGXCPU   24 /**< CPU time limit exceeded */
39 #define SIGXFSZ   25 /**< File size limit exceeded */
40 #define SIGVTALRM 26 /**< Virtual timer expired */
41 #define SIGPROF   27 /**< Profiling timer expired */
42 /* 28 not used */
43 #define SIGPOLL   29 /**< Pollable event occurred */
44 /* 30 not used */
45 #define SIGSYS    31 /**< Bad system call */
46 
47 #define RTSIG_MAX CONFIG_POSIX_RTSIG_MAX
48 #define SIGRTMIN 32
49 #define SIGRTMAX (SIGRTMIN + RTSIG_MAX)
50 #define _NSIG (SIGRTMAX + 1)
51 
52 BUILD_ASSERT(RTSIG_MAX >= 0);
53 
54 typedef struct {
55 	unsigned long sig[DIV_ROUND_UP(_NSIG, BITS_PER_LONG)];
56 } sigset_t;
57 
58 #ifndef SIGEV_NONE
59 #define SIGEV_NONE 1
60 #endif
61 
62 #ifndef SIGEV_SIGNAL
63 #define SIGEV_SIGNAL 2
64 #endif
65 
66 #ifndef SIGEV_THREAD
67 #define SIGEV_THREAD 3
68 #endif
69 
70 #ifndef SIG_BLOCK
71 #define SIG_BLOCK 0
72 #endif
73 #ifndef SIG_SETMASK
74 #define SIG_SETMASK 1
75 #endif
76 #ifndef SIG_UNBLOCK
77 #define SIG_UNBLOCK 2
78 #endif
79 
80 typedef int	sig_atomic_t;		/* Atomic entity type (ANSI) */
81 
82 union sigval {
83 	void *sival_ptr;
84 	int sival_int;
85 };
86 
87 struct sigevent {
88 	void (*sigev_notify_function)(union sigval val);
89 	pthread_attr_t *sigev_notify_attributes;
90 	union sigval sigev_value;
91 	int sigev_notify;
92 	int sigev_signo;
93 };
94 
95 #ifdef CONFIG_POSIX_SIGNAL
96 char *strsignal(int signum);
97 int sigemptyset(sigset_t *set);
98 int sigfillset(sigset_t *set);
99 int sigaddset(sigset_t *set, int signo);
100 int sigdelset(sigset_t *set, int signo);
101 int sigismember(const sigset_t *set, int signo);
102 int sigprocmask(int how, const sigset_t *ZRESTRICT set, sigset_t *ZRESTRICT oset);
103 
104 int pthread_sigmask(int how, const sigset_t *ZRESTRICT set, sigset_t *ZRESTRICT oset);
105 #endif /* CONFIG_POSIX_SIGNAL */
106 
107 #ifdef __cplusplus
108 }
109 #endif
110 
111 #endif /* ZEPHYR_INCLUDE_POSIX_SIGNAL_H_ */
112