diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2008-10-14 15:06:25 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2008-10-14 15:06:25 +0000 |
commit | e2324c081a4b1a0c6d7fdaaa99e0d5ef29325e20 (patch) | |
tree | 828a80e48298c57d4b897d3b9a74f9ade00bbdf1 /cpukit/libfs/src/pipe/pipe.h | |
parent | Fix formatting. (diff) | |
download | rtems-e2324c081a4b1a0c6d7fdaaa99e0d5ef29325e20.tar.bz2 |
2008-10-14 Wei Shen <cquark@gmail.com>
* Makefile.am, preinstall.am, libcsupport/src/mknod.c,
libcsupport/src/open.c, libcsupport/src/pipe.c, libfs/Makefile.am,
libfs/preinstall.am, libfs/src/imfs/imfs.h,
libfs/src/imfs/imfs_creat.c, libfs/src/imfs/imfs_debug.c,
libfs/src/imfs/imfs_eval.c, libfs/src/imfs/imfs_initsupp.c,
libfs/src/imfs/imfs_mknod.c, libfs/src/imfs/imfs_stat.c,
libfs/src/imfs/memfile.c: Initial commit of POSIX pipe support.
* libfs/src/imfs/imfs_fifo.c, libfs/src/pipe/fifo.c,
libfs/src/pipe/pipe.c, libfs/src/pipe/pipe.h: New files.
Diffstat (limited to 'cpukit/libfs/src/pipe/pipe.h')
-rw-r--r-- | cpukit/libfs/src/pipe/pipe.h | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/cpukit/libfs/src/pipe/pipe.h b/cpukit/libfs/src/pipe/pipe.h new file mode 100644 index 0000000000..54f7525524 --- /dev/null +++ b/cpukit/libfs/src/pipe/pipe.h @@ -0,0 +1,113 @@ +/* + * pipe.h: header of POSIX FIFO/pipe + * + * Author: Wei Shen <cquark@gmail.com> + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.com/license/LICENSE. + * + * $Id$ + */ + +#ifndef _RTEMS_PIPE_H +#define _RTEMS_PIPE_H + +#include <rtems/libio.h> + +/* Control block to manage each pipe */ +typedef struct pipe_control { + char *Buffer; + uint Size; + uint Start; + uint Length; + uint Readers; + uint Writers; + uint waitingReaders; + uint waitingWriters; + uint readerCounter; /* incremental counters */ + uint writerCounter; /* for differentiation of successive opens */ + rtems_id Semaphore; + rtems_id readBarrier; /* wait queues */ + rtems_id writeBarrier; +#if 0 + boolean Anonymous; /* anonymous pipe or FIFO */ +#endif +} pipe_control_t; + +/* + * Called by pipe() to create an anonymous pipe. + */ +int pipe_create( + int filsdes[2] +); + +/* + * Interface to file system close. + * + * *pipep points to pipe control structure. When the last user releases pipe, + * it will be set to NULL. + */ +int pipe_release( + pipe_control_t **pipep, + rtems_libio_t *iop +); + +/* + * Interface to file system open. + * + * *pipep points to pipe control structure. If called with *pipep = NULL, + * fifo_open will try allocating and initializing a control structure. If the + * call succeeds, *pipep will be set to address of new control structure. + */ +int fifo_open( + pipe_control_t **pipep, + rtems_libio_t *iop +); + +/* + * Interface to file system read. + */ +ssize_t pipe_read( + pipe_control_t *pipe, + void *buffer, + size_t count, + rtems_libio_t *iop +); + +/* + * Interface to file system write. + */ +ssize_t pipe_write( + pipe_control_t *pipe, + const void *buffer, + size_t count, + rtems_libio_t *iop +); + +/* + * Interface to file system ioctl. + */ +int pipe_ioctl( + pipe_control_t *pipe, + uint32_t cmd, + void *buffer, + rtems_libio_t *iop +); + +/* + * Interface to file system lseek. + */ +int pipe_lseek( + pipe_control_t *pipe, + off_t offset, + int whence, + rtems_libio_t *iop +); + +/* + * Initialization of FIFO/pipe module. + */ +void rtems_pipe_initialize (void); + +#endif /* #define _RTEMS_PIPE_H */ |