Annotation of researchv10dc/sys/mkconf/nobusdev.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.