Annotation of cci/usr/src/etc/config/mkioconf.c, revision 1.1.1.1

1.1       root        1: #ifndef lint
                      2: static char sccsid[] = "@(#)mkioconf.c 2.9 (Berkeley) 8/11/83";
                      3: #endif
                      4: 
                      5: #include <stdio.h>
                      6: #include "y.tab.h"
                      7: #include "config.h"
                      8: 
                      9: /*
                     10:  * build the ioconf.c file
                     11:  */
                     12: char   *qu();
                     13: char   *intv();
                     14: 
                     15: #if MACHINE_TAHOE
                     16: tahoe_ioconf()
                     17: {
                     18:        register struct device *dp, *mp, *np;
                     19:        register int vba_n, slave;
                     20:        FILE *fp;
                     21: 
                     22:        fp = fopen(path("ioconf.c"), "w");
                     23:        if (fp == 0) {
                     24:                perror(path("ioconf.c"));
                     25:                exit(1);
                     26:        }
                     27:        fprintf(fp, "#include \"../h/param.h\"\n");
                     28:        fprintf(fp, "#include \"../machine/pte.h\"\n");
                     29:        fprintf(fp, "#include \"../h/buf.h\"\n");
                     30:        fprintf(fp, "#include \"../h/map.h\"\n");
                     31:        fprintf(fp, "\n");
                     32:        fprintf(fp, "#include \"../vba/vbavar.h\"\n");
                     33:        fprintf(fp, "\n");
                     34:        fprintf(fp, "#define C (caddr_t)\n\n");
                     35:        /*
                     36:         * Now generate interrupt vectors for the versabus
                     37:         */
                     38:        for (dp = dtab; dp != 0; dp = dp->d_next) {
                     39:                if (dp->d_vec != 0) {
                     40:                        struct idlst *ip;
                     41:                        mp = dp->d_conn;
                     42:                        if (mp == 0 || mp == TO_NEXUS ||
                     43:                            !eq(mp->d_name, "vba"))
                     44:                                continue;
                     45:                        fprintf(fp,
                     46:                            "extern struct vba_driver %sdriver;\n",
                     47:                            dp->d_name);
                     48:                        fprintf(fp, "extern ");
                     49:                        ip = dp->d_vec;
                     50:                        for (;;) {
                     51:                                fprintf(fp, "X%s%d()", ip->id, dp->d_unit);
                     52:                                ip = ip->id_next;
                     53:                                if (ip == 0)
                     54:                                        break;
                     55:                                fprintf(fp, ", ");
                     56:                        }
                     57:                        fprintf(fp, ";\n");
                     58:                        fprintf(fp, "int\t (*%sint%d[])() = { ", dp->d_name,
                     59:                            dp->d_unit, dp->d_unit);
                     60:                        ip = dp->d_vec;
                     61:                        for (;;) {
                     62:                                fprintf(fp, "X%s%d", ip->id, dp->d_unit);
                     63:                                ip = ip->id_next;
                     64:                                if (ip == 0)
                     65:                                        break;
                     66:                                fprintf(fp, ", ");
                     67:                        }
                     68:                        fprintf(fp, ", 0 } ;\n");
                     69:                }
                     70:        }
                     71:        fprintf(fp, "\nstruct vba_ctlr vbminit[] = {\n");
                     72:        fprintf(fp, "/*\t driver,\tctlr,\tvbanum,\talive,\tintr,\taddr */\n");
                     73:        for (dp = dtab; dp != 0; dp = dp->d_next) {
                     74:                mp = dp->d_conn;
                     75:                if (dp->d_type != CONTROLLER || mp == TO_NEXUS || mp == 0 ||
                     76:                    !eq(mp->d_name, "vba"))
                     77:                        continue;
                     78:                if (dp->d_vec == 0) {
                     79:                        printf("must specify vector for %s%d\n",
                     80:                            dp->d_name, dp->d_unit);
                     81:                        continue;
                     82:                }
                     83:                if (dp->d_addr == 0) {
                     84:                        printf("must specify csr address for %s%d\n",
                     85:                            dp->d_name, dp->d_unit);
                     86:                        continue;
                     87:                }
                     88:                if (dp->d_drive != UNKNOWN || dp->d_slave != UNKNOWN) {
                     89:                        printf("drives need their own entries; dont ");
                     90:                        printf("specify drive or slave for %s%d\n",
                     91:                            dp->d_name, dp->d_unit);
                     92:                        continue;
                     93:                }
                     94:                if (dp->d_flags) {
                     95:                        printf("controllers (e.g. %s%d) ",
                     96:                            dp->d_name, dp->d_unit);
                     97:                        printf("don't have flags, only devices do\n");
                     98:                        continue;
                     99:                }
                    100:                fprintf(fp,
                    101:                    "\t{ &%sdriver,\t%d,\t%s,\t0,\t%sint%d, C 0x%x },\n",
                    102:                    dp->d_name, dp->d_unit, qu(mp->d_unit),
                    103:                    dp->d_name, dp->d_unit, dp->d_addr);
                    104:        }
                    105:        fprintf(fp, "\t0\n};\n");
                    106: /* versabus devices */
                    107:        fprintf(fp, "\nstruct vba_device vbdinit[] = {\n");
                    108:        fprintf(fp,
                    109: "\t/* driver,  unit, ctlr,  vbanum, slave,   intr,    addr,    dk, flags*/\n");
                    110:        for (dp = dtab; dp != 0; dp = dp->d_next) {
                    111:                mp = dp->d_conn;
                    112:                if (dp->d_unit == QUES || dp->d_type != DEVICE || mp == 0 ||
                    113:                    mp == TO_NEXUS || mp->d_type == MASTER ||
                    114:                    eq(mp->d_name, "mba"))
                    115:                        continue;
                    116:                np = mp->d_conn;
                    117:                if (np != 0 && np != TO_NEXUS && eq(np->d_name, "mba"))
                    118:                        continue;
                    119:                np = 0;
                    120:                if (eq(mp->d_name, "vba")) {
                    121:                        if (dp->d_vec == 0) {
                    122:                                printf("must specify vector for device %s%d\n",
                    123:                                    dp->d_name, dp->d_unit);
                    124:                                continue;
                    125:                        }
                    126:                        if (dp->d_addr == 0) {
                    127:                                printf("must specify csr for device %s%d\n",
                    128:                                    dp->d_name, dp->d_unit);
                    129:                                continue;
                    130:                        }
                    131:                        if (dp->d_drive != UNKNOWN || dp->d_slave != UNKNOWN) {
                    132:                                printf("drives/slaves can be specified ");
                    133:                                printf("only for controllers, ");
                    134:                                printf("not for device %s%d\n",
                    135:                                    dp->d_name, dp->d_unit);
                    136:                                continue;
                    137:                        }
                    138:                        vba_n = mp->d_unit;
                    139:                        slave = QUES;
                    140:                } else {
                    141:                        if ((np = mp->d_conn) == 0) {
                    142:                                printf("%s%d isn't connected to anything ",
                    143:                                    mp->d_name, mp->d_unit);
                    144:                                printf(", so %s%d is unattached\n",
                    145:                                    dp->d_name, dp->d_unit);
                    146:                                continue;
                    147:                        }
                    148:                        vba_n = np->d_unit;
                    149:                        if (dp->d_drive == UNKNOWN) {
                    150:                                printf("must specify ``drive number'' ");
                    151:                                printf("for %s%d\n", dp->d_name, dp->d_unit);
                    152:                                continue;
                    153:                        }
                    154:                        /* NOTE THAT ON THE UNIBUS ``drive'' IS STORED IN */
                    155:                        /* ``SLAVE'' AND WE DON'T WANT A SLAVE SPECIFIED */
                    156:                        if (dp->d_slave != UNKNOWN) {
                    157:                                printf("slave numbers should be given only ");
                    158:                                printf("for massbus tapes, not for %s%d\n",
                    159:                                    dp->d_name, dp->d_unit);
                    160:                                continue;
                    161:                        }
                    162:                        if (dp->d_vec != 0) {
                    163:                                printf("interrupt vectors should not be ");
                    164:                                printf("given for drive %s%d\n",
                    165:                                    dp->d_name, dp->d_unit);
                    166:                                continue;
                    167:                        }
                    168:                        if (dp->d_addr != 0) {
                    169:                                printf("csr addresses should be given only ");
                    170:                                printf("on controllers, not on %s%d\n",
                    171:                                    dp->d_name, dp->d_unit);
                    172:                                continue;
                    173:                        }
                    174:                        slave = dp->d_drive;
                    175:                }
                    176:                fprintf(fp, "\t{ &%sdriver,  %2d,   %s,",
                    177:                    eq(mp->d_name, "vba") ? dp->d_name : mp->d_name, dp->d_unit,
                    178:                    eq(mp->d_name, "vba") ? " -1" : qu(mp->d_unit));
                    179:                fprintf(fp, "  %s,    %2d,   %s, C 0x%-6x,  %d,  0x%x },\n",
                    180:                    qu(vba_n), slave, intv(dp), dp->d_addr, dp->d_dk,
                    181:                    dp->d_flags);
                    182:        }
                    183:        fprintf(fp, "\t0\n};\n");
                    184:        (void) fclose(fp);
                    185: }
                    186: #endif
                    187: 
                    188: #if MACHINE_VAX
                    189: vax_ioconf()
                    190: {
                    191: }
                    192: #endif
                    193: 
                    194: #if MACHINE_SUN
                    195: sun_ioconf()
                    196: {
                    197:        register struct device *dp, *mp;
                    198:        register int slave;
                    199:        FILE *fp;
                    200: 
                    201:        fp = fopen(path("ioconf.c"), "w");
                    202:        if (fp == 0) {
                    203:                perror(path("ioconf.c"));
                    204:                exit(1);
                    205:        }
                    206:        fprintf(fp, "#include \"../h/param.h\"\n");
                    207:        fprintf(fp, "#include \"../h/buf.h\"\n");
                    208:        fprintf(fp, "#include \"../h/map.h\"\n");
                    209:        fprintf(fp, "#include \"../h/vm.h\"\n");
                    210:        fprintf(fp, "\n");
                    211:        fprintf(fp, "#include \"../sundev/mbvar.h\"\n");
                    212:        fprintf(fp, "\n");
                    213:        fprintf(fp, "#define C (caddr_t)\n\n");
                    214:        fprintf(fp, "\n");
                    215:        /*
                    216:         * Now generate interrupt vectors for the Multibus
                    217:         */
                    218:        for (dp = dtab; dp != 0; dp = dp->d_next) {
                    219:                if (dp->d_pri != 0) {
                    220:                        mp = dp->d_conn;
                    221:                        if (mp == 0 || mp == TO_NEXUS ||
                    222:                            !eq(mp->d_name, "mb"))
                    223:                                continue;
                    224:                        fprintf(fp, "extern struct mb_driver %sdriver;\n",
                    225:                            dp->d_name);
                    226:                }
                    227:        }
                    228:        /*
                    229:         * Now spew forth the mb_cinfo structure
                    230:         */
                    231:        fprintf(fp, "\nstruct mb_ctlr mbcinit[] = {\n");
                    232:        fprintf(fp, "/*\t driver,\tctlr,\talive,\taddr,\tintpri */\n");
                    233:        for (dp = dtab; dp != 0; dp = dp->d_next) {
                    234:                mp = dp->d_conn;
                    235:                if (dp->d_type != CONTROLLER || mp == TO_NEXUS || mp == 0 ||
                    236:                    !eq(mp->d_name, "mb"))
                    237:                        continue;
                    238:                if (dp->d_pri == 0) {
                    239:                        printf("must specify priority for %s%d\n",
                    240:                            dp->d_name, dp->d_unit);
                    241:                        continue;
                    242:                }
                    243:                if (dp->d_addr == 0) {
                    244:                        printf("must specify csr address for %s%d\n",
                    245:                            dp->d_name, dp->d_unit);
                    246:                        continue;
                    247:                }
                    248:                if (dp->d_drive != UNKNOWN || dp->d_slave != UNKNOWN) {
                    249:                        printf("drives need their own entries; ");
                    250:                        printf("dont specify drive or slave for %s%d\n",
                    251:                            dp->d_name, dp->d_unit);
                    252:                        continue;
                    253:                }
                    254:                if (dp->d_flags) {
                    255:                        printf("controllers (e.g. %s%d) don't have flags, ");
                    256:                        printf("only devices do\n",
                    257:                            dp->d_name, dp->d_unit);
                    258:                        continue;
                    259:                }
                    260:                fprintf(fp, "\t{ &%sdriver,\t%d,\t0,\tC 0x%x,\t%d },\n",
                    261:                    dp->d_name, dp->d_unit, dp->d_addr, dp->d_pri);
                    262:        }
                    263:        fprintf(fp, "\t0\n};\n");
                    264:        /*
                    265:         * Now we go for the mb_device stuff
                    266:         */
                    267:        fprintf(fp, "\nstruct mb_device mbdinit[] = {\n");
                    268:        fprintf(fp,
                    269: "\t/* driver,  unit, ctlr,  slave,   addr,    pri,    dk, flags*/\n");
                    270:        for (dp = dtab; dp != 0; dp = dp->d_next) {
                    271:                mp = dp->d_conn;
                    272:                if (dp->d_unit == QUES || dp->d_type != DEVICE || mp == 0 ||
                    273:                    mp == TO_NEXUS || mp->d_type == MASTER ||
                    274:                    eq(mp->d_name, "vba"))
                    275:                        continue;
                    276:                if (eq(mp->d_name, "mb")) {
                    277:                        if (dp->d_pri == 0) {
                    278:                                printf("must specify vector for device %s%d\n",
                    279:                                    dp->d_name, dp->d_unit);
                    280:                                continue;
                    281:                        }
                    282:                        if (dp->d_addr == 0) {
                    283:                                printf("must specify csr for device %s%d\n",
                    284:                                    dp->d_name, dp->d_unit);
                    285:                                continue;
                    286:                        }
                    287:                        if (dp->d_drive != UNKNOWN || dp->d_slave != UNKNOWN) {
                    288:                                printf("drives/slaves can be specified only ");
                    289:                                printf("for controllers, not for device %s%d\n",
                    290:                                    dp->d_name, dp->d_unit);
                    291:                                continue;
                    292:                        }
                    293:                        slave = QUES;
                    294:                } else {
                    295:                        if (mp->d_conn == 0) {
                    296:                                printf("%s%d isn't connected to anything, ",
                    297:                                    mp->d_name, mp->d_unit);
                    298:                                printf("so %s%d is unattached\n",
                    299:                                    dp->d_name, dp->d_unit);
                    300:                                continue;
                    301:                        }
                    302:                        if (dp->d_drive == UNKNOWN) {
                    303:                                printf("must specify ``drive number'' for %s%d\n",
                    304:                                   dp->d_name, dp->d_unit);
                    305:                                continue;
                    306:                        }
                    307:                        /* NOTE THAT ON THE UNIBUS ``drive'' IS STORED IN */
                    308:                        /* ``SLAVE'' AND WE DON'T WANT A SLAVE SPECIFIED */
                    309:                        if (dp->d_slave != UNKNOWN) {
                    310:                                printf("slave numbers should be given only ");
                    311:                                printf("for massbus tapes, not for %s%d\n",
                    312:                                    dp->d_name, dp->d_unit);
                    313:                                continue;
                    314:                        }
                    315:                        if (dp->d_pri != 0) {
                    316:                                printf("interrupt priority should not be ");
                    317:                                printf("given for drive %s%d\n",
                    318:                                    dp->d_name, dp->d_unit);
                    319:                                continue;
                    320:                        }
                    321:                        if (dp->d_addr != 0) {
                    322:                                printf("csr addresses should be given only");
                    323:                                printf("on controllers, not on %s%d\n",
                    324:                                    dp->d_name, dp->d_unit);
                    325:                                continue;
                    326:                        }
                    327:                        slave = dp->d_drive;
                    328:                }
                    329:                fprintf(fp,
                    330: "\t{ &%sdriver,  %2d,   %s,    %2d,   C 0x%x, %d,  %d,  0x%x },\n",
                    331:                    eq(mp->d_name, "mb") ? dp->d_name : mp->d_name, dp->d_unit,
                    332:                    eq(mp->d_name, "mb") ? " -1" : qu(mp->d_unit),
                    333:                    slave, dp->d_addr, dp->d_pri, dp->d_dk, dp->d_flags);
                    334:        }
                    335:        fprintf(fp, "\t0\n};\n");
                    336:        (void) fclose(fp);
                    337: }
                    338: #endif
                    339: 
                    340: char *intv(dev)
                    341:        register struct device *dev;
                    342: {
                    343:        static char buf[20];
                    344: 
                    345:        if (dev->d_vec == 0)
                    346:                return ("     0");
                    347:        return (sprintf(buf, "%sint%d", dev->d_name, dev->d_unit));
                    348: }
                    349: 
                    350: char *
                    351: qu(num)
                    352: {
                    353: 
                    354:        if (num == QUES)
                    355:                return ("'?'");
                    356:        if (num == UNKNOWN)
                    357:                return (" -1");
                    358:        return (sprintf(errbuf, "%3d", num));
                    359: }

unix.superglobalmegacorp.com

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