Annotation of 43BSDTahoe/sys/vaxstand/autoconf.c, revision 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.