|
|
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.