|
|
1.1 root 1: /* dlcoin.c - dlcoin */
2:
3: #include <conf.h>
4: #include <kernel.h>
5: #include <slu11.h>
6: #include <proc.h>
7: #include <sleep.h>
8: #include <dlc.h>
9:
10: /*------------------------------------------------------------------------
11: * dlcoin -- dlc output interrupt handler
12: *------------------------------------------------------------------------
13: */
14: INTPROC dlcoin(dptr)
15: register struct dlblk *dptr;
16: {
17: struct csr *cptr;
18: char ch;
19:
20: cptr = dptr->dioaddr;
21:
22: switch (dptr->dostate) {
23:
24: case DLOINIT: /* non-blockmode output */
25: if (dptr->dovalid) {
26: cptr->ctbuf = dptr->dochar;
27: dptr->dovalid = FALSE;
28: } else
29: cptr->ctstat = SLUDISABLE;
30: return;
31:
32: case DLOREADY: /* ready to write block */
33: cptr->ctbuf = DLSTART;
34: dptr->dostate = DLOSTALL;
35: dptr->dostall = DLNSTALL;
36: dptr->doesc = FALSE;
37: return;
38:
39: case DLOSTALL: /* stalling a while */
40: cptr->ctstat = SLUDISABLE;
41: cptr->ctstat = SLUENABLE;
42: if (dptr->dostall-- > 0)
43: return;
44: dptr->dostate = DLOWRITE;
45: return;
46:
47: case DLOWRITE: /* writing a block */
48: if (dptr->docount-- <= 0) {
49: dptr->dostate = DLODONE;
50: cptr->ctbuf = DLEOB;
51: return;
52: }
53: if (((ch= *dptr->donext++)&DLESCMASK)==DLESCPED){
54: if (dptr->doesc) {
55: dptr->doesc = FALSE;
56: cptr->ctbuf = ch & DLEBMASK;
57: } else {
58: dptr->donext--;
59: dptr->docount++;
60: dptr->doesc = TRUE;
61: cptr->ctbuf = DLESC;
62: }
63: return;
64: }
65: cptr->ctbuf = ch;
66: return;
67:
68: case DLODONE: /* finished writing */
69: if (dptr->docount < 0) {
70: ready(dptr->doproc, RESCHYES);
71: dptr->docount = 0;
72: }
73: cptr->ctstat = SLUDISABLE;
74: return;
75:
76: case DLORESTART: /* restart transmission */
77: dptr->dostate = DLOREADY;
78: dptr->donext = dptr->dostart;
79: dptr->docount = dptr->dotot;
80: cptr->ctstat = SLUDISABLE;
81: cptr->ctstat = SLUENABLE;
82: return;
83:
84: default:
85: panic("impossible dlc output state");
86: }
87: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.