13d729aecSJerry Jelinek /* 23d729aecSJerry Jelinek * This file and its contents are supplied under the terms of the 33d729aecSJerry Jelinek * Common Development and Distribution License ("CDDL"), version 1.0. 43d729aecSJerry Jelinek * You may only use this file in accordance with the terms of version 53d729aecSJerry Jelinek * 1.0 of the CDDL. 63d729aecSJerry Jelinek * 73d729aecSJerry Jelinek * A full copy of the text of the CDDL should have accompanied this 83d729aecSJerry Jelinek * source. A copy of the CDDL is also available via the Internet at 93d729aecSJerry Jelinek * http://www.illumos.org/license/CDDL. 103d729aecSJerry Jelinek */ 113d729aecSJerry Jelinek 123d729aecSJerry Jelinek /* 13*abf99a00SPatrick Mooney * Copyright 2016 Joyent, Inc. 143d729aecSJerry Jelinek */ 153d729aecSJerry Jelinek 163d729aecSJerry Jelinek /* 173d729aecSJerry Jelinek * Header file to support the signalfd facility. Note that this facility 183d729aecSJerry Jelinek * is designed to be binary compatible with the Linux signalfd facility, modulo 193d729aecSJerry Jelinek * the signals themselves; values for constants here should therefore exactly 203d729aecSJerry Jelinek * match those found in Linux, and this facility shouldn't be extended 213d729aecSJerry Jelinek * independently of Linux. 223d729aecSJerry Jelinek */ 233d729aecSJerry Jelinek 243d729aecSJerry Jelinek #ifndef _SYS_SIGNALFD_H 253d729aecSJerry Jelinek #define _SYS_SIGNALFD_H 263d729aecSJerry Jelinek 273d729aecSJerry Jelinek #include <sys/types.h> 283d729aecSJerry Jelinek 293d729aecSJerry Jelinek #ifdef __cplusplus 303d729aecSJerry Jelinek extern "C" { 313d729aecSJerry Jelinek #endif 323d729aecSJerry Jelinek 333d729aecSJerry Jelinek /* 343d729aecSJerry Jelinek * To assure binary compatibility with Linux, these values are fixed at their 353d729aecSJerry Jelinek * Linux equivalents, not their native ones. 363d729aecSJerry Jelinek */ 373d729aecSJerry Jelinek #define SFD_CLOEXEC 02000000 /* LX_O_CLOEXEC */ 383d729aecSJerry Jelinek #define SFD_NONBLOCK 04000 /* LX_O_NONBLOCK */ 393d729aecSJerry Jelinek 403d729aecSJerry Jelinek /* 413d729aecSJerry Jelinek * These ioctl values are specific to the native implementation; applications 423d729aecSJerry Jelinek * shouldn't be using them directly, and they should therefore be safe to 433d729aecSJerry Jelinek * change without breaking apps. 443d729aecSJerry Jelinek */ 453d729aecSJerry Jelinek #define SIGNALFDIOC (('s' << 24) | ('f' << 16) | ('d' << 8)) 463d729aecSJerry Jelinek #define SIGNALFDIOC_MASK (SIGNALFDIOC | 1) /* set mask */ 473d729aecSJerry Jelinek 483d729aecSJerry Jelinek typedef struct signalfd_siginfo { 493d729aecSJerry Jelinek uint32_t ssi_signo; /* signal from signal.h */ 503d729aecSJerry Jelinek int32_t ssi_errno; /* error from errno.h */ 513d729aecSJerry Jelinek int32_t ssi_code; /* signal code */ 523d729aecSJerry Jelinek uint32_t ssi_pid; /* PID of sender */ 533d729aecSJerry Jelinek uint32_t ssi_uid; /* real UID of sender */ 543d729aecSJerry Jelinek int32_t ssi_fd; /* File descriptor (SIGIO) */ 553d729aecSJerry Jelinek uint32_t ssi_tid; /* unused */ 563d729aecSJerry Jelinek uint32_t ssi_band; /* band event (SIGIO) */ 573d729aecSJerry Jelinek uint32_t ssi_overrun; /* unused */ 583d729aecSJerry Jelinek uint32_t ssi_trapno; /* trap number that caused signal */ 593d729aecSJerry Jelinek int32_t ssi_status; /* exit status or signal (SIGCHLD) */ 603d729aecSJerry Jelinek int32_t ssi_int; /* unused */ 613d729aecSJerry Jelinek uint64_t ssi_ptr; /* unused */ 623d729aecSJerry Jelinek uint64_t ssi_utime; /* user CPU time consumed (SIGCHLD) */ 633d729aecSJerry Jelinek uint64_t ssi_stime; /* system CPU time consumed (SIGCHLD) */ 643d729aecSJerry Jelinek uint64_t ssi_addr; /* address that generated signal */ 653d729aecSJerry Jelinek uint8_t ssi_pad[48]; /* Pad size to 128 bytes to allow for */ 663d729aecSJerry Jelinek /* additional fields in the future. */ 673d729aecSJerry Jelinek } signalfd_siginfo_t; 683d729aecSJerry Jelinek 693d729aecSJerry Jelinek #ifndef _KERNEL 703d729aecSJerry Jelinek 713d729aecSJerry Jelinek extern int signalfd(int, const sigset_t *, int); 723d729aecSJerry Jelinek 733d729aecSJerry Jelinek #else 743d729aecSJerry Jelinek 753d729aecSJerry Jelinek #define SIGNALFDMNRN_SIGNALFD 0 763d729aecSJerry Jelinek #define SIGNALFDMNRN_CLONE 1 773d729aecSJerry Jelinek 783d729aecSJerry Jelinek /* 793d729aecSJerry Jelinek * This holds the proc_t state for a process which is using signalfd. 80*abf99a00SPatrick Mooney * Its presence and contents are protected by p_lock. 813d729aecSJerry Jelinek */ 823d729aecSJerry Jelinek typedef struct sigfd_proc_state { 833d729aecSJerry Jelinek void (*sigfd_pollwake_cb)(void *, int); 843d729aecSJerry Jelinek list_t sigfd_list; 853d729aecSJerry Jelinek } sigfd_proc_state_t; 863d729aecSJerry Jelinek 873d729aecSJerry Jelinek 883d729aecSJerry Jelinek extern void (*sigfd_exit_helper)(); 893d729aecSJerry Jelinek 903d729aecSJerry Jelinek #endif /* _KERNEL */ 913d729aecSJerry Jelinek 923d729aecSJerry Jelinek #ifdef __cplusplus 933d729aecSJerry Jelinek } 943d729aecSJerry Jelinek #endif 953d729aecSJerry Jelinek 963d729aecSJerry Jelinek #endif /* _SYS_SIGNALFD_H */ 97