[BACK]Return to event.h CVS log [TXT][DIR] Up to [local] / sys / sys

Annotation of sys/sys/event.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: event.h,v 1.11 2007/05/30 00:23:48 tedu Exp $ */
                      2:
                      3: /*-
                      4:  * Copyright (c) 1999,2000,2001 Jonathan Lemon <jlemon@FreeBSD.org>
                      5:  * All rights reserved.
                      6:  *
                      7:  * Redistribution and use in source and binary forms, with or without
                      8:  * modification, are permitted provided that the following conditions
                      9:  * are met:
                     10:  * 1. Redistributions of source code must retain the above copyright
                     11:  *    notice, this list of conditions and the following disclaimer.
                     12:  * 2. Redistributions in binary form must reproduce the above copyright
                     13:  *    notice, this list of conditions and the following disclaimer in the
                     14:  *    documentation and/or other materials provided with the distribution.
                     15:  *
                     16:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
                     17:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     18:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     19:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
                     20:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     21:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     22:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     23:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     24:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     25:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     26:  * SUCH DAMAGE.
                     27:  *
                     28:  *     $FreeBSD: src/sys/sys/event.h,v 1.11 2001/02/24 01:41:31 jlemon Exp $
                     29:  */
                     30:
                     31: #ifndef _SYS_EVENT_H_
                     32: #define _SYS_EVENT_H_
                     33:
                     34: #define EVFILT_READ            (-1)
                     35: #define EVFILT_WRITE           (-2)
                     36: #define EVFILT_AIO             (-3)    /* attached to aio requests */
                     37: #define EVFILT_VNODE           (-4)    /* attached to vnodes */
                     38: #define EVFILT_PROC            (-5)    /* attached to struct proc */
                     39: #define EVFILT_SIGNAL          (-6)    /* attached to struct proc */
                     40: #define EVFILT_TIMER           (-7)    /* timers */
                     41:
                     42: #define EVFILT_SYSCOUNT                7
                     43:
                     44: #define EV_SET(kevp, a, b, c, d, e, f) do {    \
                     45:        (kevp)->ident = (a);                    \
                     46:        (kevp)->filter = (b);                   \
                     47:        (kevp)->flags = (c);                    \
                     48:        (kevp)->fflags = (d);                   \
                     49:        (kevp)->data = (e);                     \
                     50:        (kevp)->udata = (f);                    \
                     51: } while(0)
                     52:
                     53: struct kevent {
                     54:        u_int           ident;          /* identifier for this event */
                     55:        short           filter;         /* filter for event */
                     56:        u_short         flags;
                     57:        u_int           fflags;
                     58:        int             data;
                     59:        void            *udata;         /* opaque user data identifier */
                     60: };
                     61:
                     62: /* actions */
                     63: #define EV_ADD         0x0001          /* add event to kq (implies enable) */
                     64: #define EV_DELETE      0x0002          /* delete event from kq */
                     65: #define EV_ENABLE      0x0004          /* enable event */
                     66: #define EV_DISABLE     0x0008          /* disable event (not reported) */
                     67:
                     68: /* flags */
                     69: #define EV_ONESHOT     0x0010          /* only report one occurrence */
                     70: #define EV_CLEAR       0x0020          /* clear event state after reporting */
                     71:
                     72: #define EV_SYSFLAGS    0xF000          /* reserved by system */
                     73: #define EV_FLAG1       0x2000          /* filter-specific flag */
                     74:
                     75: /* returned values */
                     76: #define EV_EOF         0x8000          /* EOF detected */
                     77: #define EV_ERROR       0x4000          /* error, data contains errno */
                     78:
                     79: /*
                     80:  * data/hint flags for EVFILT_{READ|WRITE}, shared with userspace
                     81:  */
                     82: #define NOTE_LOWAT     0x0001                  /* low water mark */
                     83: #define NOTE_EOF       0x0002                  /* return on EOF */
                     84:
                     85: /*
                     86:  * data/hint flags for EVFILT_VNODE, shared with userspace
                     87:  */
                     88: #define        NOTE_DELETE     0x0001                  /* vnode was removed */
                     89: #define        NOTE_WRITE      0x0002                  /* data contents changed */
                     90: #define        NOTE_EXTEND     0x0004                  /* size increased */
                     91: #define        NOTE_ATTRIB     0x0008                  /* attributes changed */
                     92: #define        NOTE_LINK       0x0010                  /* link count changed */
                     93: #define        NOTE_RENAME     0x0020                  /* vnode was renamed */
                     94: #define        NOTE_REVOKE     0x0040                  /* vnode access was revoked */
                     95: #define        NOTE_TRUNCATE   0x0080                  /* vnode was truncated */
                     96:
                     97: /*
                     98:  * data/hint flags for EVFILT_PROC, shared with userspace
                     99:  */
                    100: #define        NOTE_EXIT       0x80000000              /* process exited */
                    101: #define        NOTE_FORK       0x40000000              /* process forked */
                    102: #define        NOTE_EXEC       0x20000000              /* process exec'd */
                    103: #define        NOTE_PCTRLMASK  0xf0000000              /* mask for hint bits */
                    104: #define        NOTE_PDATAMASK  0x000fffff              /* mask for pid */
                    105:
                    106: /* additional flags for EVFILT_PROC */
                    107: #define        NOTE_TRACK      0x00000001              /* follow across forks */
                    108: #define        NOTE_TRACKERR   0x00000002              /* could not track child */
                    109: #define        NOTE_CHILD      0x00000004              /* am a child process */
                    110:
                    111: /*
                    112:  * This is currently visible to userland to work around broken
                    113:  * programs which pull in <sys/proc.h> or <sys/selinfo.h>.
                    114:  */
                    115: #include <sys/queue.h>
                    116: struct knote;
                    117: SLIST_HEAD(klist, knote);
                    118:
                    119: #ifdef _KERNEL
                    120:
                    121: #define KNOTE(list, hint)      if ((list) != NULL) knote(list, hint)
                    122:
                    123: /*
                    124:  * Flag indicating hint is a signal.  Used by EVFILT_SIGNAL, and also
                    125:  * shared by EVFILT_PROC  (all knotes attached to p->p_klist)
                    126:  */
                    127: #define NOTE_SIGNAL    0x08000000
                    128:
                    129: struct filterops {
                    130:        int     f_isfd;         /* true if ident == filedescriptor */
                    131:        int     (*f_attach)(struct knote *kn);
                    132:        void    (*f_detach)(struct knote *kn);
                    133:        int     (*f_event)(struct knote *kn, long hint);
                    134: };
                    135:
                    136: struct knote {
                    137:        SLIST_ENTRY(knote)      kn_link;        /* for fd */
                    138:        SLIST_ENTRY(knote)      kn_selnext;     /* for struct selinfo */
                    139:        TAILQ_ENTRY(knote)      kn_tqe;
                    140:        struct                  kqueue *kn_kq;  /* which queue we are on */
                    141:        struct                  kevent kn_kevent;
                    142:        int                     kn_status;
                    143:        int                     kn_sfflags;     /* saved filter flags */
                    144:        int                     kn_sdata;       /* saved data field */
                    145:        union {
                    146:                struct          file *p_fp;     /* file data pointer */
                    147:                struct          proc *p_proc;   /* proc pointer */
                    148:        } kn_ptr;
                    149:        const struct            filterops *kn_fop;
                    150:        void                    *kn_hook;
                    151: #define KN_ACTIVE      0x01                    /* event has been triggered */
                    152: #define KN_QUEUED      0x02                    /* event is on queue */
                    153: #define KN_DISABLED    0x04                    /* event is disabled */
                    154: #define KN_DETACHED    0x08                    /* knote is detached */
                    155:
                    156: #define kn_id          kn_kevent.ident
                    157: #define kn_filter      kn_kevent.filter
                    158: #define kn_flags       kn_kevent.flags
                    159: #define kn_fflags      kn_kevent.fflags
                    160: #define kn_data                kn_kevent.data
                    161: #define kn_fp          kn_ptr.p_fp
                    162: };
                    163:
                    164: struct proc;
                    165:
                    166: extern void    knote(struct klist *list, long hint);
                    167: extern void    knote_remove(struct proc *p, struct klist *list);
                    168: extern void    knote_fdclose(struct proc *p, int fd);
                    169: extern int     kqueue_register(struct kqueue *kq,
                    170:                    struct kevent *kev, struct proc *p);
                    171: extern int     filt_seltrue(struct knote *kn, long hint);
                    172: extern void    klist_invalidate(struct klist *);
                    173:
                    174: #else  /* !_KERNEL */
                    175:
                    176: #include <sys/cdefs.h>
                    177: struct timespec;
                    178:
                    179: __BEGIN_DECLS
                    180: int    kqueue(void);
                    181: int    kevent(int kq, const struct kevent *changelist, int nchanges,
                    182:                    struct kevent *eventlist, int nevents,
                    183:                    const struct timespec *timeout);
                    184: __END_DECLS
                    185:
                    186: #endif /* !_KERNEL */
                    187:
                    188: #endif /* !_SYS_EVENT_H_ */

CVSweb