Annotation of researchv10no/sys/mkconf/nobusdev.c, revision 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.