#sccs "@(#)uts/kern/sys:iobuf.h 1.1" /* Convergent Technologies - System V - May 1983 */ #ifndef iobuf_h #define iobuf_h #include #include /* * Each block device has a iobuf, which contains private state stuff * and 2 list heads: the b_forw/b_back list, which is doubly linked * and has all the buffers currently associated with that major * device; and the d_actf/d_actl list, which is private to the * device but in fact is always used for the head and tail * of the I/O queue for the device. * Various routines in bio.c look at b_forw/b_back * (notice they are the same as in the buf structure) * but the rest is private to each device driver. */ struct iobuf { int b_flags; /* see buf.h */ struct buf *b_forw; /* first buffer for this dev */ struct buf *b_back; /* last buffer for this dev */ struct buf *b_actf; /* head of I/O queue */ struct buf *b_actl; /* tail of I/O queue */ dev_t b_dev; /* major+minor device name */ char b_active; /* busy flag */ char b_errcnt; /* error count (for recovery) */ int io_nreg; /* number of regs to log on errors */ physadr io_addr; /* csr address */ time_t io_start; int io_s1; /* space for drivers to leave things */ int io_s2; /* space for drivers to leave things */ }; #define tabinit(dv,stat) {0,0,0,0,0,makedev(dv,0),0,0,0,0,0,stat,0,0} #define NDEVREG (sizeof(struct device)/sizeof(int)) #define B_ONCE 01 /* flag for once only driver operations */ #define B_TAPE 02 /* this is a magtape (no bdwrite) */ #define B_TIME 04 /* for timeout use */ /* * IO statistics are kept for each physical unit of each * block device (within the driver). Primary purpose is * to establish a guesstimate of error rates during * error logging. */ struct iostat { long io_ops; /* number of read/writes */ long io_misc; /* number of "other" operations */ ushort io_unlog; /* number of unlogged errors */ }; /* * structure for system accounting */ struct iotime { struct iostat ios; long io_bcnt; /* total blocks transferred */ time_t io_act; /* total controller active time */ time_t io_resp; /* total block response time */ }; #define io_cnt ios.io_ops #endif