Annotation of 43BSDTahoe/sys/vaxstand/autoconf.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1982, 1986, 1988 Regents of the University of California.
                      3:  * All rights reserved.  The Berkeley software License Agreement
                      4:  * specifies the terms and conditions for redistribution.
                      5:  *
                      6:  *     @(#)autoconf.c  7.11 (Berkeley) 7/10/88
                      7:  */
                      8: 
                      9: #include "param.h"
                     10: #include "reboot.h"
                     11: 
                     12: #include "../vax/cpu.h"
                     13: #include "../vax/nexus.h"
                     14: #include "../vax/pte.h"
                     15: #include "../vax/mtpr.h"
                     16: #include "../vaxuba/ubareg.h"
                     17: #include "../vaxmba/mbareg.h"
                     18: 
                     19: #include "savax.h"
                     20: 
                     21: #ifdef VAX8200
                     22: #include "../vaxbi/bireg.h"
                     23: #endif
                     24: 
                     25: #if VAX8600 || VAX8200 || VAX780
                     26: /*
                     27:  * These are used on CPU's that do configuration.
                     28:  */
                     29: struct uba_regs *ubaddrspace[MAXNUBA];
                     30: caddr_t        uioaddrspace[MAXNUBA];
                     31: struct mba_regs *mbaddrspace[MAXNMBA];
                     32: #endif
                     33: 
                     34: #if VAX750
                     35: #define        UTR(i)  ((struct uba_regs *)(NEX750+(i)))
                     36: #define        UMA(i)  ((caddr_t)UMEM750(i)+UBAIOADDR)
                     37: #define        MTR(i)  ((struct mba_regs *)(NEX750+(i)))
                     38: 
                     39: struct uba_regs *ubaddr750[] = { UTR(8), UTR(9) };
                     40: caddr_t        uioaddr750[] = { UMA(0), UMA(1) };
                     41: struct mba_regs *mbaddr750[] = { MTR(4), MTR(5), MTR(6), MTR(7) };
                     42: 
                     43: #undef UTR
                     44: #undef UMA
                     45: #undef MTR
                     46: #endif
                     47: 
                     48: #if VAX730
                     49: #define        UTR(i)  ((struct uba_regs *)(NEX730+(i)))
                     50: #define        UMA     ((caddr_t)UMEM730+UBAIOADDR)
                     51: 
                     52: struct uba_regs *ubaddr730[] = { UTR(3) };
                     53: caddr_t        uioaddr730[] = { UMA };
                     54: 
                     55: #undef UTR
                     56: #undef UMA
                     57: #endif
                     58: 
                     59: #if VAX630
                     60: /*
                     61:  * The map registers start at 20088000 on the ka630, so
                     62:  * subtract a 2k offset to make things work.
                     63:  *
                     64:  * This could stand serious cleanup.
                     65:  */
                     66: struct uba_regs *ubaddr630[] =
                     67:        { (struct uba_regs *)((caddr_t)QBAMAP630 - 0x800) };
                     68: caddr_t        uioaddr630[] = { (caddr_t)QIOPAGE630 };
                     69: 
                     70: int (*v_getc)(), (*v_putc)();
                     71: 
                     72: #ifndef SMALL
                     73: /*
                     74:  * Virtual console configuration tables.
                     75:  */
                     76: extern qv_init(),qd_init();
                     77: 
                     78: int (*vcons_init[])() = {
                     79:        qd_init,
                     80:        qv_init,
                     81:        0
                     82: };
                     83: #endif
                     84: #endif
                     85: 
                     86: #ifndef SMALL
                     87: extern int boothowto;
                     88: int debug = 0;
                     89: #endif
                     90: int cpuspeed = 1;
                     91: 
                     92: configure()
                     93: {
                     94:        union cpusid cpusid;
                     95:        register int i;
                     96: 
                     97: #ifndef SMALL
                     98:        if (boothowto & RB_KDB)         /* XXX */
                     99:                debug = 1;
                    100: #endif
                    101:        cpusid.cpusid = mfpr(SID);
                    102:        cpu = cpusid.cpuany.cp_type;
                    103:        switch (cpu) {
                    104: 
                    105: #if VAX8600
                    106:        case VAX_8600:
                    107: #ifndef SMALL
                    108:                if (debug)
                    109:                        printf("cpu: 8600\nsbia 0:\n");
                    110: #endif
                    111:                cpuspeed = 6;
                    112:                probenexi(NEXA8600, (caddr_t)UMEMA8600(0)+UBAIOADDR, 0);
                    113:                probenexi(NEXB8600, (caddr_t)UMEMB8600(0)+UBAIOADDR, 1);
                    114:                break;
                    115: #endif
                    116: 
                    117: #if VAX780
                    118:        case VAX_780:
                    119: #ifndef SMALL
                    120:                if (debug)
                    121:                        printf("cpu: 780\n");
                    122: #endif
                    123:                cpuspeed = 2;
                    124:                probenexi(NEX780, (caddr_t)UMEM780(0)+UBAIOADDR, 0);
                    125:                break;
                    126: #endif
                    127: 
                    128: #if VAX8200
                    129:        case VAX_8200: {
                    130:                register struct bi_node *bi;
                    131: 
                    132:                cpuspeed = 2;
                    133:                for (i = 0, bi = BI_BASE(0); i < NNODEBI; i++, bi++) {
                    134:                        if (badaddr((caddr_t)bi, sizeof (long)))
                    135:                                continue;
                    136: #ifdef notdef
                    137:                        /* clear bus errors */
                    138:                        bi->biic.bi_ber = ~(BIBER_MBZ|BIBER_NMR|BIBER_UPEN);
                    139: #endif
                    140: #ifndef SMALL
                    141:                        if (debug)
                    142:                                printf("node%d: ", i);
                    143: #endif
                    144:                        switch (bi->biic.bi_dtype) {
                    145: 
                    146:                        case BIDT_DWBUA:
                    147:                                if (nuba >= MAXNUBA)    /* sorry */
                    148:                                        break;
                    149: #ifndef SMALL
                    150:                                if (debug)
                    151:                                        printf("uba%d\n", nuba);
                    152: #endif
                    153:                                ubaddrspace[nuba] = (struct uba_regs *)bi;
                    154:                                uioaddrspace[nuba] = (caddr_t)UMEM8200(i) +
                    155:                                    UBAIOADDR;
                    156:                                ((struct dwbua_regs *)bi)->bua_csr |=
                    157:                                    BUACSR_UPI;
                    158:                                nuba++;
                    159:                                break;
                    160: 
                    161:                        case BIDT_KDB50:
                    162:                                if (nkdb < MAXNKDB) {
                    163:                                        kdbaddr[nkdb++] = (caddr_t)bi;
                    164: #ifndef SMALL
                    165:                                        if (debug)
                    166:                                                printf("kdb%d\n", nkdb);
                    167: #endif
                    168:                                }
                    169:                                break;
                    170: #ifndef SMALL
                    171:                        default:
                    172:                                if (debug)
                    173:                                        printf("unknown type %x\n",
                    174:                                            bi->biic.bi_dtype);
                    175:                                break;
                    176: #endif
                    177:                        }
                    178:                }
                    179:                ubaddr = ubaddrspace;
                    180:                uioaddr = uioaddrspace;
                    181:        }
                    182:                break;
                    183: #endif
                    184: 
                    185: #if VAX750
                    186:        case VAX_750:
                    187: #ifndef SMALL
                    188:                if (debug)
                    189:                        printf("cpu: 750 -- assuming standard config\n");
                    190: #endif
                    191:                mbaddr = mbaddr750;
                    192:                ubaddr = ubaddr750;
                    193:                uioaddr = uioaddr750;
                    194:                nmba = sizeof (mbaddr750) / sizeof (mbaddr750[0]);
                    195:                nuba = 2;
                    196:                break;
                    197: #endif
                    198: 
                    199: #if VAX730
                    200:        case VAX_730:
                    201: #ifndef SMALL
                    202:                if (debug)
                    203:                        printf("cpu: 730 -- assuming standard config\n");
                    204: #endif
                    205:                ubaddr = ubaddr730;
                    206:                uioaddr = uioaddr730;
                    207:                nuba = 1;
                    208:                break;
                    209: #endif
                    210: 
                    211: #if VAX630
                    212:        case VAX_630:
                    213: #ifndef SMALL
                    214:                if (debug)
                    215:                        printf("cpu: uVAX II\n");
                    216: #endif
                    217:                ubaddr = ubaddr630;
                    218:                uioaddr = uioaddr630;
                    219:                nuba = 1;
                    220:                break;
                    221: #endif
                    222:        }
                    223: 
                    224:        /*
                    225:         * Forward into the past...
                    226:         */
                    227: /*
                    228:        for (i = 0; i < nmba; i++)
                    229:                if (!badaddr(mbaddr[i], sizeof(long)))
                    230:                        mbaddr[i]->mba_cr = MBCR_INIT;
                    231: */
                    232: 
                    233:        switch (cpu) {
                    234: 
                    235: #if VAX750 || VAX730
                    236:        case VAX_750:
                    237:        case VAX_730:
                    238:                mtpr(IUR, 0);
                    239:                break;
                    240: #endif
                    241: 
                    242: #if VAX630
                    243:        case VAX_630:
                    244:                mtpr(IUR, 0);
                    245:                *((char *)QIOPAGE630 + QIPCR) = Q_LMEAE;
                    246: #if !defined(SMALL)
                    247:                /*
                    248:                 * configure the console
                    249:                 */
                    250:                for(i = 0; vcons_init[i] && !(*vcons_init[i])(); i++)
                    251:                        ;
                    252: #endif
                    253:                break;
                    254: #endif /* VAX630 */
                    255:        }
                    256: 
                    257:        /* give unibus devices a chance to recover... */
                    258:        if (nuba > 0)
                    259:                DELAY(500000);
                    260: }
                    261: 
                    262: #if VAX8600 || VAX780
                    263: probenexi(nxp, umembase, sbia)
                    264:        register struct nexus *nxp;
                    265:        caddr_t umembase;
                    266:        int sbia;
                    267: {
                    268:        register int i;
                    269:        union nexcsr nexcsr;
                    270:        int first = 1;
                    271: 
                    272:        for (i = 0; i < 16; i++, nxp++) {
                    273:                if (badaddr(nxp, sizeof(long)))
                    274:                        continue;
                    275:                nexcsr = nxp->nexcsr;
                    276:                if (nexcsr.nex_csr & NEX_APD)
                    277:                        continue;
                    278: #ifndef SMALL
                    279:                if (debug) {
                    280:                        if (first && sbia != 0)
                    281:                                printf("sbia %d:\n", sbia);
                    282:                        printf("tr%d: ", i);
                    283:                        first = 0;
                    284:                }
                    285: #endif
                    286:                switch (nexcsr.nex_type) {
                    287:                default:
                    288: #ifndef SMALL
                    289:                        if (debug)
                    290:                                printf("nexid %2x\n", nexcsr.nex_type);
                    291: #endif
                    292:                        break;
                    293: 
                    294:                case NEX_MEM4:
                    295:                case NEX_MEM4I:
                    296:                case NEX_MEM16:
                    297:                case NEX_MEM16I:
                    298:                case NEX_MEM64L:
                    299:                case NEX_MEM64LI:
                    300:                case NEX_MEM64U:
                    301:                case NEX_MEM64UI:
                    302:                case NEX_MEM64I:
                    303: #ifndef SMALL
                    304:                        if (debug)
                    305:                                printf("mem\n");
                    306: #endif
                    307:                        break;
                    308: 
                    309:                case NEX_CI:
                    310: #ifndef SMALL
                    311:                        if (debug)
                    312:                                printf("ci\n");
                    313: #endif
                    314:                        break;
                    315: 
                    316:                case NEX_DR32:
                    317: #ifndef SMALL
                    318:                        if (debug)
                    319:                                printf("dr32\n");
                    320: #endif
                    321:                        break;
                    322: 
                    323:                case NEX_MPM0:
                    324:                case NEX_MPM1:
                    325:                case NEX_MPM2:
                    326:                case NEX_MPM3:
                    327: #ifndef SMALL
                    328:                        if (debug)
                    329:                                printf("mpm\n");
                    330: #endif
                    331:                        break;
                    332: 
                    333:                case NEX_MBA:
                    334:                        if (nmba >= MAXNMBA) {
                    335: #ifndef SMALL
                    336:                                if (debug)
                    337:                                        printf("unsupported mba\n");
                    338: #endif
                    339:                                break;
                    340:                        }
                    341: #ifndef SMALL
                    342:                        if (debug)
                    343:                                printf("mba%d\n", nmba);
                    344: #endif
                    345:                        mbaddrspace[nmba] = (struct mba_regs *)nxp;
                    346:                        nmba++;
                    347:                        break;
                    348: 
                    349:                case NEX_UBA0:
                    350:                case NEX_UBA1:
                    351:                case NEX_UBA2:
                    352:                case NEX_UBA3:
                    353:                        if (nuba >= MAXNUBA) {
                    354: #ifndef SMALL
                    355:                                if (debug)
                    356:                                        printf("unsupported uba\n");
                    357: #endif
                    358:                                break;
                    359:                        }
                    360: #ifndef SMALL
                    361:                        if (debug)
                    362:                                printf("uba%d umem%d", nuba,
                    363:                                    nexcsr.nex_type&3);
                    364: #endif
                    365:                        ubaddrspace[nuba] = (struct uba_regs *)nxp;
                    366:                        uioaddrspace[nuba] = umembase +
                    367:                            (nexcsr.nex_csr & 3) * (512*NBPG);
                    368: #ifndef SMALL
                    369:                        if (debug)
                    370:                                printf(" (%x)\n", uioaddrspace[nuba]);
                    371: #endif
                    372:                        nuba++;
                    373:                        ((struct uba_regs *)nxp)->uba_cr = UBACR_ADINIT;
                    374:                        break;
                    375:                }
                    376:        }
                    377:        mbaddr = mbaddrspace;
                    378:        ubaddr = ubaddrspace;
                    379:        uioaddr = uioaddrspace;
                    380: #undef UTR
                    381: #undef UMA
                    382: #undef MTR
                    383: }
                    384: #endif /* VAX780 || VAX8600 */

unix.superglobalmegacorp.com

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