4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
22 /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
23 /* All Rights Reserved */
27 * Copyright 2014 Garrett D'Amore <garrett@damore.org>
29 * Copyright (c) 1995, 1998 by Sun Microsystems, Inc.
30 * All rights reserved.
34 * Copyright 2015, Joyent, Inc.
45 * Structure of file descriptor/event pairs supplied in
48 typedef struct pollfd
{
49 int fd
; /* file desc to poll */
50 short events
; /* events of interest on fd */
51 short revents
; /* events that occurred on fd */
54 typedef unsigned long nfds_t
;
57 * Testable select events
59 #define POLLIN 0x0001 /* fd is readable */
60 #define POLLPRI 0x0002 /* high priority info at fd */
61 #define POLLOUT 0x0004 /* fd is writeable (won't block) */
62 #define POLLRDNORM 0x0040 /* normal data is readable */
63 #define POLLWRNORM POLLOUT
64 #define POLLRDBAND 0x0080 /* out-of-band data is readable */
65 #define POLLWRBAND 0x0100 /* out-of-band data is writeable */
66 #define POLLRDHUP 0x4000 /* read-side hangup */
68 #define POLLNORM POLLRDNORM
71 * Non-testable poll events (may not be specified in events field,
72 * but may be returned in revents field).
74 #define POLLERR 0x0008 /* fd has error condition */
75 #define POLLHUP 0x0010 /* fd has been hung up on */
76 #define POLLNVAL 0x0020 /* invalid pollfd entry */
79 * These events will never be specified in revents, but may be specified in
80 * events to control /dev/poll behavior.
82 #define POLLREMOVE 0x0800 /* remove cached /dev/poll fd */
83 #define POLLONESHOT 0x1000 /* /dev/poll should one-shot this fd */
84 #define POLLET 0x2000 /* edge-triggered /dev/poll fd */
89 * Additional private poll flags supported only by strpoll().
90 * Must be bit-wise distinct from the above POLL flags.
92 #define POLLRDDATA 0x0200 /* Wait for M_DATA; ignore M_PROTO only msgs */
93 #define POLLNOERR 0x0400 /* Ignore POLLERR conditions */
95 #define POLLCLOSED 0x8000 /* a (cached) poll fd has been closed */
99 #if defined(_KERNEL) || defined(_KMEMUSER)
101 #include <sys/thread.h>
104 * XXX We are forced to use a forward reference here because including
105 * file.h here will break i386 build. The real solution is to fix the
106 * broken parts in usr/src/stand/lib/fs.
111 * Poll list head structure. A pointer to this is passed to
112 * pollwakeup() from the caller indicating an event has occurred.
113 * Only the ph_list field is used, but for DDI compliance, we can't
114 * change the size of the structure.
116 typedef struct pollhead
{
117 struct polldat
*ph_list
; /* list of pollers */
118 void *ph_pad1
; /* unused -- see above */
119 short ph_pad2
; /* unused -- see above */
125 * Routine called to notify a process of the occurrence
128 extern void pollwakeup(pollhead_t
*, short);
133 extern int polllock(pollhead_t
*, kmutex_t
*);
134 extern int pollunlock(int *);
135 extern void pollrelock(int);
136 extern void pollcleanup(void);
137 extern void pollblockexit(struct fpollinfo
*);
138 extern void pollcacheclean(struct fpollinfo
*, int);
141 * public poll head interface:
143 * pollhead_clean clean up all polldats on a pollhead list
145 extern void pollhead_clean(pollhead_t
*);
147 #endif /* defined(_KERNEL) */
149 #endif /* defined(_KERNEL) || defined(_KMEMUSER) */
151 #if !defined(_KERNEL)
152 int poll(struct pollfd
*, nfds_t
, int);
153 #endif /* !_KERNEL */
159 #endif /* _SYS_POLL_H */