OpenCores
URL https://opencores.org/ocsvn/scarts/scarts/trunk

Subversion Repositories scarts

[/] [scarts/] [trunk/] [toolchain/] [scarts-newlib/] [newlib-1.17.0/] [newlib/] [libc/] [sys/] [linux/] [sys/] [event.h] - Blame information for rev 9

Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.