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

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

1.1       nbrk        1: /*     $OpenBSD: pipe.h,v 1.13 2005/11/21 18:16:46 millert Exp $       */
                      2:
                      3: /*
                      4:  * Copyright (c) 1996 John S. Dyson
                      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 immediately at the beginning of the file, without modification,
                     12:  *    this list of conditions, and the following disclaimer.
                     13:  * 2. Redistributions in binary form must reproduce the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer in the
                     15:  *    documentation and/or other materials provided with the distribution.
                     16:  * 3. Absolutely no warranty of function or purpose is made by the author
                     17:  *    John S. Dyson.
                     18:  * 4. This work was done expressly for inclusion into FreeBSD.  Other use
                     19:  *    is allowed if this notation is included.
                     20:  * 5. Modifications may be freely made to this file if the above conditions
                     21:  *    are met.
                     22:  */
                     23:
                     24: #ifndef _SYS_PIPE_H_
                     25: #define _SYS_PIPE_H_
                     26:
                     27: #ifndef _KERNEL
                     28: #include <sys/time.h>                  /* for struct timeval */
                     29: #include <sys/selinfo.h>                       /* for struct selinfo */
                     30: #include <uvm/uvm_extern.h>            /* for vm_page_t */
                     31: #include <machine/param.h>             /* for PAGE_SIZE */
                     32: #endif /* _KERNEL */
                     33:
                     34: /*
                     35:  * Pipe buffer size, keep moderate in value, pipes take kva space.
                     36:  */
                     37: #ifndef PIPE_SIZE
                     38: #define PIPE_SIZE      16384
                     39: #endif
                     40:
                     41: #ifndef BIG_PIPE_SIZE
                     42: #define BIG_PIPE_SIZE  (64*1024)
                     43: #endif
                     44:
                     45: /*
                     46:  * Pipe buffer information.
                     47:  * Separate in, out, cnt are used to simplify calculations.
                     48:  * Buffered write is active when the buffer.cnt field is set.
                     49:  */
                     50: struct pipebuf {
                     51:        u_int   cnt;            /* number of chars currently in buffer */
                     52:        u_int   in;             /* in pointer */
                     53:        u_int   out;            /* out pointer */
                     54:        u_int   size;           /* size of buffer */
                     55:        caddr_t buffer;         /* kva of buffer */
                     56: };
                     57:
                     58: /*
                     59:  * Bits in pipe_state.
                     60:  */
                     61: #define PIPE_ASYNC     0x004   /* Async? I/O. */
                     62: #define PIPE_WANTR     0x008   /* Reader wants some characters. */
                     63: #define PIPE_WANTW     0x010   /* Writer wants space to put characters. */
                     64: #define PIPE_WANT      0x020   /* Pipe is wanted to be run-down. */
                     65: #define PIPE_SEL       0x040   /* Pipe has a select active. */
                     66: #define PIPE_EOF       0x080   /* Pipe is in EOF condition. */
                     67: #define PIPE_LOCK      0x100   /* Process has exclusive access to pointers/data. */
                     68: #define PIPE_LWANT     0x200   /* Process wants exclusive access to pointers/data. */
                     69:
                     70: /*
                     71:  * Per-pipe data structure.
                     72:  * Two of these are linked together to produce bi-directional pipes.
                     73:  */
                     74: struct pipe {
                     75:        struct  pipebuf pipe_buffer;    /* data storage */
                     76:        struct  selinfo pipe_sel;       /* for compat with select */
                     77:        struct  timespec pipe_atime;    /* time of last access */
                     78:        struct  timespec pipe_mtime;    /* time of last modify */
                     79:        struct  timespec pipe_ctime;    /* time of status change */
                     80:        int     pipe_pgid;              /* process/group for async I/O */
                     81:        struct  pipe *pipe_peer;        /* link with other direction */
                     82:        u_int   pipe_state;             /* pipe status info */
                     83:        int     pipe_busy;              /* busy flag, mostly to handle rundown sanely */
                     84: };
                     85:
                     86: #ifdef _KERNEL
                     87: void   pipe_init(void);
                     88: #endif /* _KERNEL */
                     89:
                     90: #endif /* !_SYS_PIPE_H_ */

CVSweb