summaryrefslogtreecommitdiff
path: root/dialects/uw/uw7/sys/fs/fifonode.h
diff options
context:
space:
mode:
Diffstat (limited to 'dialects/uw/uw7/sys/fs/fifonode.h')
-rw-r--r--dialects/uw/uw7/sys/fs/fifonode.h143
1 files changed, 143 insertions, 0 deletions
diff --git a/dialects/uw/uw7/sys/fs/fifonode.h b/dialects/uw/uw7/sys/fs/fifonode.h
new file mode 100644
index 0000000..39a6857
--- /dev/null
+++ b/dialects/uw/uw7/sys/fs/fifonode.h
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 1998 The Santa Cruz Operation, Inc.. All Rights Reserved.
+ *
+ * THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF THE
+ * SANTA CRUZ OPERATION INC.
+ *
+ * The copyright notice above does not evidence any actual or intended
+ * publication of such source code.
+ */
+
+#ifndef _FS_FIFOFS_FIFONODE_H /* wrapper symbol for kernel use */
+#define _FS_FIFOFS_FIFONODE_H /* subject to change without notice */
+
+#ident "@(#)kern:fs/fifofs/fifonode.h 1.14"
+#ident "$Header: $"
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+#ifdef _KERNEL_HEADERS
+
+#include <util/types.h> /* REQUIRED */
+#include <util/ksynch.h> /* REQUIRED */
+#include <fs/vnode.h> /* REQUIRED */
+
+#elif defined(_KERNEL) || defined(_KMEMUSER)
+
+#include <sys/types.h> /* REQUIRED */
+#include <sys/ksynch.h> /* REQUIRED */
+#include <sys/vnode.h> /* REQUIRED */
+
+#endif /* _KERNEL_HEADERS */
+
+#if defined(_KERNEL) || defined(_KMEMUSER)
+
+struct nodelock {
+ lock_t n_lock;
+ int n_count;
+};
+
+/*
+ * Each FIFOFS object is identified by a struct fifonode/vnode pair.
+ */
+struct fifonode {
+ struct vnode fn_vnode; /* represents the fifo/pipe */
+ struct vnode *fn_mate; /* the other end of a pipe */
+ struct vnode *fn_realvp; /* node being shadowed by fifo */
+ sleep_t fn_iolock; /* fifonode iolock */
+ sv_t fn_rwait; /* wait for first reader */
+ sv_t fn_wwait; /* wait for first writer */
+ sv_t fn_fdwait; /* to synchronize fd passing */
+ sv_t fn_openwait; /* to serialize fifo_open */
+ ino_t fn_ino; /* node id for pipes */
+ short fn_wcnt; /* number of writers */
+ short fn_rcnt; /* number of readers */
+ short fn_open; /* open count of node*/
+ ushort fn_flag; /* flags as defined below */
+ struct vnode *fn_unique; /* new vnode created by CONNLD */
+ time_t fn_atime; /* creation times for pipe */
+ time_t fn_mtime;
+ time_t fn_ctime;
+ struct fifonode *fn_nextp; /* next link in the linked list */
+ struct fifonode *fn_backp; /* back link in linked list */
+ struct nodelock *fn_nodelp; /* lock shared by both ends of a pipe */
+};
+
+#endif /* _KERNEL || _KMEMUSER */
+
+#ifdef _KERNEL
+
+/*
+ * Valid flags for fifonodes.
+ */
+#define ISPIPE 01 /* fifonode is that of a pipe */
+#define FIFOWOPEN 02 /* open in progress */
+#define FIFOWCLOSE 04 /* close in progress */
+#define FIFOSEND 010 /* file descriptor at stream head of pipe */
+#define FIFOPASS 020 /* CONNLD passed a new vnode in fn_unique */
+#define FIFOMACPRIV 040 /* bypass MAC checks for privilege process */
+#define CONNLDPUSHED 0100 /* CONNLD is pushed */
+#define FIFOMODTIME 0200 /* access/modification/change time modified */
+
+#define FIFOBSIZE 1024 /* FIFOFS block size */
+
+/* #ifdef MERGE */
+extern int fifo_rdchk(vnode_t *);
+/* #endif MERGE */
+
+/*
+ * Macros to convert a vnode to a fifonode, and vice versa.
+ */
+#define VTOF(vp) ((struct fifonode *)((vp)->v_data))
+#define FTOV(fp) (&(fp)->fn_vnode)
+
+/*
+ * Functions used in multiple places.
+ */
+extern int fifo_rdchk(vnode_t *);
+extern int fifo_mkpipe(vnode_t **, vnode_t **, cred_t *);
+extern void fifo_rmpipe(vnode_t *, vnode_t *, cred_t *);
+
+/*
+ * Macros for manipulating locks and synchronization variables
+ */
+
+/*
+ * Macros called by fifovp() and fifo_inactive()
+ * to avoid a race on the vnode.
+ */
+#define FIFO_LOCK(fp, lockp) \
+ SLEEP_LOCK_RELLOCK(&(fp)->fn_iolock, PRIPIPE, lockp)
+#define FIFO_TRYLOCK(fp) SLEEP_TRYLOCK(&(fp)->fn_iolock)
+#define FIFO_LOCKBLKD(fp) SLEEP_LOCKBLKD(&(fp)->fn_iolock)
+#define FIFO_UNLOCK(fp) SLEEP_UNLOCK(&(fp)->fn_iolock)
+
+/*
+ * Macro to manipulate fn_nodelp->n_lock.
+ */
+#define PIPE_LOCK(fp) LOCK(&(fp)->fn_nodelp->n_lock, PLFIFO)
+#define PIPE_UNLOCK(fp, pl) UNLOCK(&(fp)->fn_nodelp->n_lock, pl)
+
+/*
+ * Macro to manipulate fn_fdwait.
+ * While waiting on fn_fdwait, fn_nodelp->n_lock is dropped.
+ */
+#define FIFO_FDWAIT(fp) \
+ SV_WAIT_SIG(&(fp)->fn_fdwait, PRIPIPE, &(fp)->fn_nodelp->n_lock)
+#define FIFO_FDWAKEUP(fp) SV_SIGNAL(&(fp)->fn_fdwait, 0)
+
+/*
+ * Macro to obtain and release the stream head mutex, sd_mutex
+ */
+#define STREAM_LOCK(stp) LOCK((stp)->sd_mutex, PLSTR);
+#define STREAM_UNLOCK(stp, pl) UNLOCK((stp)->sd_mutex, pl);
+
+#endif /* _KERNEL */
+
+#if defined(__cplusplus)
+ }
+#endif
+
+#endif /* _FS_FIFOFS_FIFONODE_H */