Xinu7/include/disk.h
/* disk.h - dssync, dsdirec */
#include <xebec.h> /* disk controller constants */
#include <dtc.h> /* disk interface constants */
typedef unsigned DBADDR; /* disk data block addresses */
#define DBNULL (DBADDR)0177777 /* null disk block address */
struct dsblk { /* disk driver control block */
struct dtc *dcsr; /* disk interface csr address */
struct dreq *dreqlst; /* list of pending requests */
int dnum; /* device number of this disk */
int dibsem; /* i-block mutual exclusion sem.*/
int dflsem; /* free list " " " */
int ddirsem; /* directory " " " */
int dnfiles; /* num. of currently open files */
char *ddir; /* address of in-core directory */
struct xbdcb ddcb; /* holds command that interface */
/* sends to disk controller */
};
extern struct dsblk dstab[];
struct dreq { /* node in list of requests */
DBADDR drdba; /* disk block address to use */
int drpid; /* process id making request */
char *drbuff; /* buffer address for read/write*/
char drop; /* operation: READ/WRITE/SEEK */
int drstat; /* returned status OK/SYSERR */
struct dreq *drnext; /* ptr to next node on req. list*/
};
#define DRNULL (struct dreq *) 0 /* null pointer in request list */
#define DIRBLK 0 /* block used to hold directory */
#define DONQ 2 /* status if request enqueued */
#define DBUFSIZ 512 /* size of disk data block */
#define DREQSIZ sizeof(struct dreq) /* size of disk request node */
#ifndef NDBUFF
#define NDBUFF 10 /* number of disk data buffers */
#endif
#define NDREQ 10 /* number of disk request buf. */
#define DREAD XOREAD /* read command in dreq.drop */
#define DWRITE XOWRITE /* write " */
#define DSEEK XOSEEK /* seek " */
#define DSYNC XOTDR /* sync " (test-disk-ready) */
extern int dskrbp; /* disk request node buffer pool*/
extern int dskdbp; /* disk data block buffer pool */
/* disk control function codes */
#define DSKSYNC 0 /* synchronize (flush all I/O) */
#define dssync(ddev) control((ddev),DSKSYNC);
#define dsdirec(ddev) ((struct dir *)devtab[ddev].dvioblk->ddir)