49 lines
1.5 KiB
C
49 lines
1.5 KiB
C
/* @(#)fifonode.h 1.1 94/10/31 SMI; */
|
|
|
|
#ifndef _specfs_fifonode_h
|
|
#define _specfs_fifonode_h
|
|
|
|
#ifdef KERNEL
|
|
|
|
/* fifonodes start with an snode so that 'spec_xxx()' routines work */
|
|
struct fifonode {
|
|
struct snode fn_snode; /* must be first */
|
|
struct fifo_bufhdr *fn_buf; /* ptr to first buffer */
|
|
struct fifo_bufhdr *fn_bufend; /* ptr to last buffer */
|
|
struct proc *fn_rsel; /* ptr to read selector */
|
|
struct proc *fn_wsel; /* ptr to write selector */
|
|
struct proc *fn_xsel; /* ptr to exception selector */
|
|
u_long fn_size; /* number of bytes in fifo */
|
|
short fn_wcnt; /* number of waiting readers */
|
|
short fn_rcnt; /* number of waiting writers */
|
|
short fn_wptr; /* write offset */
|
|
short fn_rptr; /* read offset */
|
|
short fn_flag; /* (see below) */
|
|
short fn_nbuf; /* number of buffers allocated */
|
|
};
|
|
|
|
#define fn_vnode fn_snode.s_vnode
|
|
|
|
/* bits in fn_flag in fifonode */
|
|
#define FIFO_RBLK 0x0001 /* blocked readers */
|
|
#define FIFO_WBLK 0x0002 /* blocked writers */
|
|
#define FIFO_RCOLL 0x0004 /* more than one read selector */
|
|
#define FIFO_WCOLL 0x0008 /* more than one write selector */
|
|
#define FIFO_XCOLL 0x0010 /* more than one exception selector */
|
|
|
|
/*
|
|
* Convert between fifonode, snode, and vnode pointers
|
|
*/
|
|
#define VTOF(VP) ((struct fifonode *)(VP)->v_data)
|
|
#define FTOV(FP) (&(FP)->fn_vnode)
|
|
#define FTOS(FP) (&(FP)->fn_snode)
|
|
|
|
|
|
/* define fifonode handling routines */
|
|
#define FIFOMARK(fp, x) smark(FTOS(fp), x)
|
|
#define FIFOLOCK(fp) SNLOCK(FTOS(fp))
|
|
#define FIFOUNLOCK(fp) SNUNLOCK(FTOS(fp))
|
|
|
|
#endif KERNEL
|
|
#endif /*!_specfs_fifonode_h*/
|