|
|
1.1 ! root 1: /* ! 2: * routines for ANOBUS: adapter with no address info ! 3: */ ! 4: ! 5: #include "mkconf.h" ! 6: ! 7: static char *nobusfields[] = { ! 8: "voff", "vec", 0 ! 9: }; ! 10: ! 11: #define a_voff addr[0] ! 12: #define a_vec addr[1] ! 13: ! 14: #define VFMT "X%s%d%d" /* name of vector interface routine */ ! 15: ! 16: int ! 17: nobussyntax(dp, ap, n) ! 18: register Dev *dp; ! 19: char **ap; ! 20: int n; ! 21: { ! 22: char *p; ! 23: ! 24: dp->a_voff = 0; ! 25: if ((p = keyread(dp->addr, ap, n, nobusfields)) != NULL) { ! 26: fprint(STDERR, "%s %d: bad field %s\n", dp->mdev->name, dp->id, p); ! 27: errs++; ! 28: return (1); ! 29: } ! 30: dp->vecoff = dp->a_voff; ! 31: if (dp->mdev->nvec && dp->a_vec == 0) { ! 32: fprint(STDERR, "%s %d: needs a vector\n", dp->mdev->name, dp->id); ! 33: errs++; ! 34: return (1); ! 35: } ! 36: return (0); ! 37: } ! 38: ! 39: /* ! 40: * fixup routine: ! 41: * just insert our vectors, if any ! 42: */ ! 43: int ! 44: nobusfixup(dp) ! 45: register Dev *dp; ! 46: { ! 47: register int vec; ! 48: register int i; ! 49: register Mdev *mp; ! 50: char vname[20]; ! 51: ! 52: mp = dp->mdev; ! 53: vec = dp->a_vec; ! 54: if (dp->parent) ! 55: vec += dp->parent->vecoff; ! 56: for (i = 0; i < mp->nvec; i++, vec += 4) { ! 57: sprint(vname, VFMT, mp->tag, dp->id, i); ! 58: newvec(vec, SINTR, vname); ! 59: } ! 60: } ! 61: ! 62: int ! 63: nobusputaddr(fd, dp) ! 64: int fd; ! 65: register Dev *dp; ! 66: { ! 67: register int count; ! 68: register Mdev *mp; ! 69: ! 70: count = 0; ! 71: for (mp = dp->mdev; dp && dp->mdev == mp; dp = dp->next) ! 72: count++; ! 73: count *= mp->rept; ! 74: fprint(fd, "int %scnt = %d;\n", mp->tag, count); ! 75: putstrs(fd, mp, count); ! 76: } ! 77: ! 78: /* ! 79: * put out vectors ! 80: */ ! 81: ! 82: nobusputvec(fd, dp) ! 83: int fd; ! 84: register Dev *dp; ! 85: { ! 86: register int i; ! 87: char vname[30]; ! 88: ! 89: for (i = 0; i < dp->mdev->nvec; i++) { ! 90: sprint(vname, VFMT, dp->mdev->tag, dp->id, i); ! 91: stdputvec(fd, dp, vname, i); ! 92: } ! 93: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.