1: /*
2: * SCCS id @(#)dn.c 2.3 (2.11BSD GTE) 1997/1/18
3: */
4:
5: /*
6: * DN-11 ACU interface
7: */
8:
9: #include "dn.h"
10:
11: #if NDN > 0
12: #include "param.h"
13: #include "user.h"
14: #include "uio.h"
15: #include "kernel.h"
16: #include "dnreg.h"
17:
18: #define DNPRI (PZERO+5)
19:
20: struct dndevice *dn_addr[NDN];
21:
22: dnattach(addr, unit)
23: struct dndevice *addr;
24: {
25: if ((unsigned)unit >= NDN)
26: return 0;
27: dn_addr[unit] = addr;
28: return 1;
29: }
30:
31: /*ARGSUSED*/
32: dnopen(dev, flag)
33: register dev_t dev;
34: {
35: register struct dndevice *dp;
36:
37: dev = minor(dev);
38: if (dev >= NDN << 2 || (dp = dn_addr[dev >> 2]) == NULL
39: || (dp->dnisr[dev & 03] & (DN_PWI | DN_FDLO | DN_FCRQ)))
40: return(ENXIO);
41: else {
42: dp->dnisr[0] |= DN_MINAB;
43: dp->dnisr[dev & 03] = DN_INTENB | DN_MINAB | DN_FCRQ;
44: }
45: return(0);
46: }
47:
48: dnclose(dev, flag)
49: register dev_t dev;
50: {
51: dev = minor(dev);
52: dn_addr[dev >> 2]->dnisr[dev & 03] = DN_MINAB;
53: return(0);
54: }
55:
56: dnwrite(dev, uio, flag)
57: register dev_t dev;
58: register struct uio *uio;
59: int flag;
60: {
61: register int c, *dp;
62: int s;
63:
64: dev = minor(dev);
65: dp = (int *)&(dn_addr[dev >> 2]->dnisr[dev & 03]);
66: while ((*dp & (DN_PWI | DN_ACR | DN_DSS)) == 0) {
67: s = spl4();
68: if ((*dp & DN_FPND) == 0 || !uio->uio_resid || (c = uwritec(uio)) < 0)
69: sleep((caddr_t) dp, DNPRI);
70: else if (c == '-') {
71: sleep((caddr_t) &lbolt, DNPRI);
72: sleep((caddr_t) &lbolt, DNPRI);
73: } else
74: {
75: *dp = (c << 8) | DN_INTENB|DN_MINAB|DN_FDPR|DN_FCRQ;
76: sleep((caddr_t) dp, DNPRI);
77: }
78: splx(s);
79: }
80: if (*dp & (DN_PWI | DN_ACR))
81: return(EIO);
82: return(0);
83: }
84:
85: dnint(dn11)
86: {
87: register int *dp, *ep;
88:
89: dp = (int *)&(dn_addr[dn11]->dnisr[0]);
90: *dp &= ~DN_MINAB;
91: for (ep = dp; ep < dp + 4; ep++)
92: if (*ep & DN_DONE) {
93: *ep &= ~DN_DONE;
94: wakeup((caddr_t)ep);
95: }
96: *dp |= DN_MINAB;
97: }
98: #endif /* NDN */
Defined functions
dnint
defined in line
85; used 1 times
Defined variables
Defined macros
DNPRI
defined in line
18; used 4 times