Annotation of researchv10dc/sys/mkconf/ubadev.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * routines for unibus devices
        !             3:  */
        !             4: 
        !             5: #include "mkconf.h"
        !             6: 
        !             7: /*
        !             8:  * address parts
        !             9:  */
        !            10: 
        !            11: static char *ubafields[] = {
        !            12:        "ub", "reg", "vec", NULL
        !            13: };
        !            14: 
        !            15: #define        a_adp   addr[0]         /* adapter number */
        !            16: #define        a_addr  addr[1]         /* UNIBUS address */
        !            17: #define        a_vec   addr[2]         /* UNIBUS vector */
        !            18: 
        !            19: #define        VFMT    "X%s%d%d"
        !            20: 
        !            21: /*
        !            22:  * syntax checks
        !            23:  */
        !            24: 
        !            25: int
        !            26: ubasyntax(dp, ap, n)
        !            27: register Dev *dp;
        !            28: char **ap;
        !            29: int n;
        !            30: {
        !            31:        char *p;
        !            32: 
        !            33:        dp->a_vec = 0;
        !            34:        if ((p = keyread(dp->addr, ap, n, ubafields)) != NULL) {
        !            35:                fprint(STDERR, "%s %d: bad field %s\n", dp->mdev->name, dp->id, p);
        !            36:                errs++;
        !            37:                return (1);
        !            38:        }
        !            39:        if (dp->a_addr == 0) {
        !            40:                fprint(STDERR, "%s %d: no address\n", dp->mdev->name, dp->id);
        !            41:                return (1);
        !            42:        }
        !            43:        dp->a_addr |= 0760000;  /* 16->18 bit language */
        !            44:        return (0);
        !            45: }
        !            46: 
        !            47: /*
        !            48:  * intermediate fixups:
        !            49:  *     find the parent
        !            50:  *     store the vector
        !            51:  */
        !            52: 
        !            53: int
        !            54: ubafixup(dp)
        !            55: register Dev *dp;
        !            56: {
        !            57:        register int vec;
        !            58:        register int i;
        !            59:        char vname[30];
        !            60: 
        !            61:        ubaparent(dp);
        !            62:        if (dp->parent == NULL) {
        !            63:                fprint(STDERR, "%s %d: no unibus adapter %ld\n",
        !            64:                        dp->mdev->name, dp->id, dp->a_adp);
        !            65:                errs++;
        !            66:                return;
        !            67:        }
        !            68:        if (dp->a_vec) {
        !            69:                vec = dp->parent->vecoff + dp->a_vec;
        !            70:                for (i = 0; i < dp->mdev->nvec; i++, vec += 4) {
        !            71:                        sprint(vname, VFMT, dp->mdev->tag, dp->id, i);
        !            72:                        newvec(vec, SINTR, vname);
        !            73:                }
        !            74:        }
        !            75: }
        !            76: 
        !            77: ubaparent(dp)
        !            78: register Dev *dp;
        !            79: {
        !            80:        register Dev *ep;
        !            81: 
        !            82:        for (ep = dlist; ep; ep = ep->next)
        !            83:                if (ep->mdev->adptype == dp->mdev->atype
        !            84:                &&  ep->id == dp->a_adp)
        !            85:                        break;
        !            86:        dp->parent = ep;
        !            87: }
        !            88: 
        !            89: ubaputaddr(fd, dp)
        !            90: register Dev *dp;
        !            91: {
        !            92:        register int count;
        !            93:        register Mdev *mp;
        !            94: 
        !            95:        mp = dp->mdev;
        !            96:        count = 0;
        !            97:        fprint(fd, "struct ubaddr %saddr[] = {\n", mp->tag);
        !            98:        for (mp = dp->mdev; dp && dp->mdev == mp; dp = dp->next) {
        !            99:                while (count++ < dp->id)
        !           100:                        fprint(fd, "\t{-1, -1, -1},\n");
        !           101:                fprint(fd, "\t{0%lo, 0%lo, %ld},\n",
        !           102:                        dp->a_addr, dp->a_vec, dp->a_adp);
        !           103:        }
        !           104:        count *= mp->rept;
        !           105:        fprint(fd, "};\nint %scnt = %d;\n", mp->tag, count);
        !           106:        putstrs(fd, mp, count);
        !           107: 
        !           108: }
        !           109: 
        !           110: ubaputvec(fd, dp)
        !           111: register Dev *dp;
        !           112: {
        !           113:        register int i;
        !           114:        char vname[30];
        !           115: 
        !           116:        if (dp->a_vec == 0)
        !           117:                return;
        !           118:        for (i = 0; i < dp->mdev->nvec; i++) {
        !           119:                sprint(vname, VFMT, dp->mdev->tag, dp->id, i);
        !           120:                stdputvec(fd, dp, vname, i);
        !           121:        }
        !           122: }

unix.superglobalmegacorp.com

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