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