|
|
1.1 root 1: /* disk.h - dssync, dsdirec */
2:
3: #include <xebec.h> /* disk controller constants */
1.1.1.2 ! root 4: #include <dtc86.h> /* disk interface constants */
1.1 root 5:
1.1.1.2 ! root 6: typedef unsigned short DBADDR; /* disk data block addresses */
! 7: #define DBNULL (DBADDR) 0xffff /* null disk block address */
1.1 root 8:
9: struct dsblk { /* disk driver control block */
10: struct dtc *dcsr; /* disk interface csr address */
11: struct dreq *dreqlst; /* list of pending requests */
12: int dnum; /* device number of this disk */
13: int dibsem; /* i-block mutual exclusion sem.*/
14: int dflsem; /* free list " " " */
15: int ddirsem; /* directory " " " */
16: int dnfiles; /* num. of currently open files */
17: char *ddir; /* address of in-core directory */
18: struct xbdcb ddcb; /* holds command that interface */
19: /* sends to disk controller */
20: };
21: extern struct dsblk dstab[];
22:
23: struct dreq { /* node in list of requests */
24: DBADDR drdba; /* disk block address to use */
25: int drpid; /* process id making request */
26: char *drbuff; /* buffer address for read/write*/
27: char drop; /* operation: READ/WRITE/SEEK */
28: int drstat; /* returned status OK/SYSERR */
29: struct dreq *drnext; /* ptr to next node on req. list*/
30: };
31:
32: #define DRNULL (struct dreq *) 0 /* null pointer in request list */
33: #define DIRBLK 0 /* block used to hold directory */
34: #define DONQ 2 /* status if request enqueued */
35: #define DBUFSIZ 512 /* size of disk data block */
36: #define DREQSIZ sizeof(struct dreq) /* size of disk request node */
37: #ifndef NDBUFF
38: #define NDBUFF 10 /* number of disk data buffers */
39: #endif
40: #define NDREQ 10 /* number of disk request buf. */
41: #define DREAD XOREAD /* read command in dreq.drop */
42: #define DWRITE XOWRITE /* write " */
43: #define DSEEK XOSEEK /* seek " */
44: #define DSYNC XOTDR /* sync " (test-disk-ready) */
45:
1.1.1.2 ! root 46: #ifdef mc68000
! 47: #define BUS_COM (0x000000)
! 48: #define BUS_BUF (0x000000+sizeof(struct xbdcb))
! 49: #define MULTI(address) (address + 0x100000)
! 50: #endif
! 51:
1.1 root 52: extern int dskrbp; /* disk request node buffer pool*/
53: extern int dskdbp; /* disk data block buffer pool */
54:
55: /* disk control function codes */
56:
57: #define DSKSYNC 0 /* synchronize (flush all I/O) */
58: #define dssync(ddev) control((ddev),DSKSYNC);
59:
1.1.1.2 ! root 60: #define dsdirec(ddev) (struct dir *) (((struct dsblk *)devtab[ddev].dvioblk)->ddir)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.