|
|
1.1 root 1: /*
2: * DR-11C interface
3: * The routines in this driver are not called through the normal
4: * device interface. Instead, they are available for other device
5: * drivers to use to send arbitrary information out on a DR-11C.
6: */
7:
8: #include "sys/param.h"
9: #include "sys/ubaddr.h"
10:
11: /* number of output bits available in a DR -- must be a power of 2 */
12: #define DRWIDTH 16
13:
14: /* DRWIDTH is 2**DRSHIFT */
15: #define DRSHIFT 4
16:
17: extern int drcnt;
18: extern struct ubaddr draddr[];
19: extern caddr_t drreg[];
20:
21: struct drreg {
22: u_short drcsr, drout, drin;
23: };
24:
25: /* set bit n of the dr-11 complex to v */
26: drsetbit (n, v)
27: register int n;
28: register int v;
29: {
30: register struct drreg *drptr;
31: register int i;
32:
33: i = n>>DRSHIFT;
34: if (i < 0 || i >= drcnt)
35: return;
36: if ((drptr = (struct drreg *)drreg[i]) == NULL) {
37: if ((drptr = (struct drreg *)ubaddr(&draddr[i])) == NULL
38: || ubbadaddr(draddr[i].ubno, &drptr->drout, sizeof(short))) {
39: printf("drbit dr11 %d absent\n", i);
40: return;
41: }
42: drreg[i] = (caddr_t)drptr;
43: }
44: i = 1 << (n & (DRWIDTH - 1));
45: if (v)
46: drptr->drout |= i;
47: else
48: drptr->drout &= ~i;
49: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.