18#ifndef _COBALT_POSIX_SIGNAL_H
19#define _COBALT_POSIX_SIGNAL_H
21#include <linux/signal.h>
22#include <cobalt/kernel/timer.h>
23#include <cobalt/kernel/list.h>
24#include <cobalt/uapi/signal.h>
25#include <xenomai/posix/syscall.h>
29struct cobalt_sigpending {
31 struct list_head next;
35void cobalt_copy_siginfo(
int code,
36 struct siginfo *__restrict__ dst,
37 const struct siginfo *__restrict__ src)
39 dst->si_signo = src->si_signo;
40 dst->si_errno = src->si_errno;
45 dst->si_tid = src->si_tid;
46 dst->si_overrun = src->si_overrun;
47 dst->si_value = src->si_value;
51 dst->si_value = src->si_value;
54 dst->si_pid = src->si_pid;
55 dst->si_uid = src->si_uid;
59int __cobalt_sigwait(sigset_t *set);
61int __cobalt_sigtimedwait(sigset_t *set,
62 const struct timespec64 *timeout,
66int __cobalt_sigwaitinfo(sigset_t *set,
70int __cobalt_sigqueue(pid_t pid,
int sig,
const union sigval *value);
72int cobalt_signal_send(
struct cobalt_thread *thread,
73 struct cobalt_sigpending *sigp,
76int cobalt_signal_send_pid(pid_t pid,
77 struct cobalt_sigpending *sigp);
79struct cobalt_sigpending *cobalt_signal_alloc(
void);
81void cobalt_signal_free(
struct cobalt_sigpending *sigp);
83void cobalt_signal_flush(
struct cobalt_thread *thread);
85int cobalt_signal_wait(sigset_t *set,
struct siginfo *si,
86 xnticks_t timeout, xntmode_t tmode);
88int __cobalt_kill(
struct cobalt_thread *thread,
91COBALT_SYSCALL_DECL(sigwait,
92 (
const sigset_t __user *u_set,
int __user *u_sig));
94COBALT_SYSCALL_DECL(sigtimedwait,
95 (
const sigset_t __user *u_set,
96 struct siginfo __user *u_si,
97 const struct __kernel_old_timespec __user *u_timeout));
99COBALT_SYSCALL_DECL(sigtimedwait64,
100 (
const sigset_t __user *u_set,
101 struct siginfo __user *u_si,
102 const struct __kernel_timespec __user *u_timeout));
104COBALT_SYSCALL_DECL(sigwaitinfo,
105 (
const sigset_t __user *u_set,
106 struct siginfo __user *u_si));
108COBALT_SYSCALL_DECL(sigpending,
109 (old_sigset_t __user *u_set));
111COBALT_SYSCALL_DECL(kill, (pid_t pid,
int sig));
113COBALT_SYSCALL_DECL(sigqueue,
114 (pid_t pid,
int sig,
const union sigval __user *u_value));
116int cobalt_signal_init(
void);
118void cobalt_signal_cleanup(
void);