Annotation of researchv10no/sys/mkconf/mscpdev.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * MSCP device address routines
                      3:  */
                      4: 
                      5: #include "mkconf.h"
                      6: 
                      7: /*
                      8:  * addressing stuff
                      9:  */
                     10: 
                     11: #define        a_adp   addr[0]         /* controller number */
                     12: #define        a_unit  addr[1]         /* unit number */
                     13: #define        a_type  addr[2]         /* controller type */
                     14: 
                     15: mscpsyntax(dp, ap, n)
                     16: register Dev *dp;
                     17: register char **ap;
                     18: register int n;
                     19: {
                     20:        register int i;
                     21:        register Mdev *mp;
                     22: 
                     23:        dp->a_type = dp->a_unit = -1;
                     24:        while (--n > 0) {
                     25:                if (strcmp(*ap, "unit") == 0) {
                     26:                        if (--n < 0) {
                     27:                                fprint(STDERR, "%s %d: no unit number\n",
                     28:                                        dp->mdev->name, dp->id);
                     29:                                errs++;
                     30:                                return (1);
                     31:                        }
                     32:                        dp->a_unit = nconv(*++ap);
                     33:                        ap++;
                     34:                        continue;
                     35:                }
                     36:                if ((mp = mdlook(*ap)) == NULL
                     37:                ||   mp->adptype != AMSCP) {
                     38:                        fprint(STDERR, "%s %d: bad word %s\n",
                     39:                                dp->mdev->name, dp->id, *ap);
                     40:                        errs++;
                     41:                        return (1);
                     42:                }
                     43:                if (--n < 0) {
                     44:                        fprint(STDERR, "%s %d: no ctl number\n",
                     45:                                dp->mdev->name, dp->id);
                     46:                        errs++;
                     47:                        return (1);
                     48:                }
                     49:                for (i = 0; i <= nmscp; i++)
                     50:                        if (mscpsw[i].dev == mp)
                     51:                                break;
                     52:                if (i > nmscp) {
                     53:                        fprint(STDERR, "%s %d %s: mscp gok\n",
                     54:                                dp->mdev->name, dp->id, mp->name);
                     55:                        errs++;
                     56:                        return (1);
                     57:                }
                     58:                dp->a_type = i;
                     59:                dp->a_adp = nconv(*++ap);
                     60:                ++ap;
                     61:        }
                     62:        if (dp->a_type < 0 || dp->a_unit < 0) {
                     63:                fprint(STDERR, "%s %d: missing ctl or unit\n",
                     64:                        dp->mdev->name, dp->id);
                     65:                errs++;
                     66:                return (1);
                     67:        }
                     68:        return (0);
                     69: }
                     70: 
                     71: mscpfixup(dp)
                     72: register Dev *dp;
                     73: {
                     74:        register Dev *ep;
                     75: 
                     76:        for (ep = dlist; ep; ep = ep->next)
                     77:                if (ep->mdev->adptype == dp->mdev->atype
                     78:                &&  ep->id == dp->a_adp)
                     79:                        break;
                     80:        if (ep == NULL) {
                     81:                fprint(STDERR, "%s %d: orphan mscp device\n", dp->mdev->name, dp->id);
                     82:                errs++;
                     83:                return;
                     84:        }
                     85:        dp->parent = ep;
                     86: }
                     87: 
                     88: mscpputaddr(fd, dp)
                     89: int fd;
                     90: register Dev *dp;
                     91: {
                     92:        register int count;
                     93:        register Mdev *mp;
                     94:        static int didtab = 0;
                     95: 
                     96:        if (didtab == 0) {
                     97:                mscptab(fd);
                     98:                didtab++;
                     99:        }
                    100:        mp = dp->mdev;
                    101:        count = 0;
                    102:        fprint(fd, "struct msaddr %saddr[] = {\n", mp->tag);
                    103:        for (mp = dp->mdev; dp && dp->mdev == mp; dp = dp->next) {
                    104:                while (count++ < dp->id)
                    105:                        fprint(fd, "\t{-1},\n");
                    106:                fprint(fd, "\t{%ld, %ld, %ld},\n", dp->a_adp, dp->a_type, dp->a_unit);
                    107:        }
                    108:        count *= mp->rept;
                    109:        fprint(fd, "};\nint %scnt = %d;\n", mp->tag, count);
                    110:        putstrs(fd, mp, count);
                    111: }
                    112: 
                    113: /*
                    114:  * write the mscp port table
                    115:  * do it here so it only exists if there are mscp devices
                    116:  *
                    117:  * assume <sys/mscp.h> was included in cfdata.h or something
                    118:  */
                    119: 
                    120: mscptab(fd)
                    121: int fd;
                    122: {
                    123:        register int i;
                    124:        register int max;
                    125: 
                    126:        max = 0;
                    127:        for (i = 0; i <= nmscp; i++)
                    128:                if (mscpsw[i].used) {
                    129:                        fprint(fd, "extern struct msportsw %sport;\n", mscpsw[i].dev->tag);
                    130:                        max = i;
                    131:                }
                    132:        fprint(fd, "int nmsport = %d;\nstruct msportsw *msportsw[] = {\n", max+1);
                    133:        for (i = 0; i <= max; i++)
                    134:                if (mscpsw[i].used)
                    135:                        fprint(fd, "\t&%sport,\t/* %d */\n",
                    136:                          mscpsw[i].dev->tag, i);
                    137:                else
                    138:                        fprint(fd, "\tNULL,\n");
                    139:        fprint(fd, "};\n");
                    140: }

unix.superglobalmegacorp.com

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