diff options
author | dyson <dyson@FreeBSD.org> | 1996-01-28 23:38:26 +0000 |
---|---|---|
committer | dyson <dyson@FreeBSD.org> | 1996-01-28 23:38:26 +0000 |
commit | 026024aadddf151f1052a03c6d81ca98a747d629 (patch) | |
tree | b0fe4dbaf274f606e4d720acd7dfed35e9591020 /sys/sys/pipe.h | |
parent | 72b11e691f1b04a70923bce5e14a27b8c2d3be54 (diff) | |
download | FreeBSD-src-026024aadddf151f1052a03c6d81ca98a747d629.zip FreeBSD-src-026024aadddf151f1052a03c6d81ca98a747d629.tar.gz |
Added new files to support the new fast pipes. After the follow-on
commits, pipe performance should increase significantly. The pipe(2)
system call is currently supported, while fifofs will be added later.
Diffstat (limited to 'sys/sys/pipe.h')
-rw-r--r-- | sys/sys/pipe.h | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/sys/sys/pipe.h b/sys/sys/pipe.h new file mode 100644 index 0000000..2815805 --- /dev/null +++ b/sys/sys/pipe.h @@ -0,0 +1,73 @@ +/* + * Copyright (c) 1996 John S. Dyson + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice immediately at the beginning of the file, without modification, + * this list of conditions, and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Absolutely no warranty of function or purpose is made by the author + * John S. Dyson. + * 4. This work was done expressly for inclusion into FreeBSD. Other use + * is allowed if this notation is included. + * 5. Modifications may be freely made to this file if the above conditions + * are met. + * + * $Id$ + */ + +#ifndef OLD_PIPE + +struct vm_object; + +/* + * pipe buffer information + * Seperate in, out, cnt is used to simplify calculations. + */ +struct pipebuf { + u_int cnt; /* number of chars currently in buffer */ + u_int in; /* in pointer */ + u_int out; /* out pointer */ + u_int size; /* size of buffer */ + caddr_t buffer; /* kva of buffer */ + struct vm_object *object; /* VM object containing buffer */ +}; + +/* + * pipe_state bits + */ +#define PIPE_NBIO 0x1 /* non-blocking I/O */ +#define PIPE_ASYNC 0x4 /* Async? I/O */ +#define PIPE_WANTR 0x8 /* Reader wants some characters */ +#define PIPE_WANTW 0x10 /* Writer wants space to put characters */ +#define PIPE_WANT 0x20 /* Pipe is wanted to be run-down */ +#define PIPE_SEL 0x40 /* Pipe has a select active */ +#define PIPE_EOF 0x80 /* Pipe is in EOF condition */ +#define PIPE_LOCK 0x100 /* Process has exclusive access to pointers/data */ +#define PIPE_LWANT 0x200 /* Process wants exclusive access to pointers/data */ + +/* + * Per-pipe data structure + * Two of these are linked together to produce bi-directional + * pipes. + */ +struct pipe { + struct pipebuf pipe_buffer; /* data storage */ + struct selinfo pipe_sel; /* for compat with select */ + struct timeval pipe_atime; /* time of last access */ + struct timeval pipe_mtime; /* time of last modify */ + struct timeval pipe_ctime; /* time of status change */ + int pipe_pgid; + struct pipe *pipe_peer; /* link with other direction */ + u_int pipe_state; /* pipe status info */ + int pipe_busy; /* busy flag, mostly to handle rundown sanely */ +}; + +int pipe_stat __P((struct pipe *pipe, struct stat *ub)); + +#endif |