Annotation of 43BSDReno/sys/vax/ka630.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * Copyright (c) 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:  *     @(#)ka630.c     7.6 (Berkeley) 11/8/88
        !             7:  */
        !             8: 
        !             9: #ifdef VAX630
        !            10: #include "param.h"
        !            11: #include "time.h"
        !            12: #include "kernel.h"
        !            13: #include "vmmac.h"
        !            14: 
        !            15: #include "mtpr.h"
        !            16: #include "cpu.h"
        !            17: #include "clock.h"
        !            18: #include "pte.h"
        !            19: #include "ka630.h"
        !            20: 
        !            21: /*
        !            22:  * 630-specific routines
        !            23:  */
        !            24: extern struct pte Clockmap[];
        !            25: extern struct pte Ka630map[];
        !            26: struct ka630clock ka630clock;
        !            27: struct ka630cpu ka630cpu;
        !            28: 
        !            29: ka630_init()
        !            30: {
        !            31: 
        !            32:        /*
        !            33:         * Map in the clock and the CPU.
        !            34:         */
        !            35:        ioaccess((caddr_t)0x200b8000, &Clockmap[0], sizeof(struct ka630clock));
        !            36:        ioaccess((caddr_t)0x20080000, &Ka630map[0], sizeof(struct ka630cpu));
        !            37: 
        !            38:        /*
        !            39:         * Clear restart and boot in progress flags in the CPMBX.
        !            40:         */
        !            41:        ka630clock.cpmbx = (ka630clock.cpmbx & KA630CLK_LANG) | KA630CLK_REBOOT;
        !            42: 
        !            43:        /*
        !            44:         * Enable memory parity error detection.
        !            45:         */
        !            46:        ka630cpu.ka630_mser = KA630MSER_PAREN;
        !            47: }
        !            48: 
        !            49: /* Start the real-time clock */
        !            50: ka630_clkstartrt()
        !            51: {
        !            52: 
        !            53:        mtpr(ICCS, ICCS_IE);
        !            54: }
        !            55: 
        !            56: /* init system time from tod clock */
        !            57: /* ARGSUSED */
        !            58: ka630_clkread(base)
        !            59:        time_t base;
        !            60: {
        !            61:        register struct ka630clock *claddr = &ka630clock;
        !            62:        struct chiptime c;
        !            63: 
        !            64:        claddr->csr1 = KA630CLK_SET;
        !            65:        while ((claddr->csr0 & KA630CLK_UIP) != 0)
        !            66:                ;
        !            67:        /* If the clock is valid, use it. */
        !            68:        if ((claddr->csr3 & KA630CLK_VRT) != 0 &&
        !            69:            (claddr->csr1 & KA630CLK_ENABLE) == KA630CLK_ENABLE) {
        !            70:                c.sec = claddr->sec;
        !            71:                c.min = claddr->min;
        !            72:                c.hour = claddr->hr;
        !            73:                c.day = claddr->day;
        !            74:                c.mon = claddr->mon;
        !            75:                c.year = claddr->yr;
        !            76: #ifndef lint
        !            77:                { int t = claddr->csr2; }       /* ??? */
        !            78: #endif
        !            79:                claddr->csr0 = KA630CLK_RATE;
        !            80:                claddr->csr1 = KA630CLK_ENABLE;
        !            81: 
        !            82:                time.tv_sec = chiptotime(&c);
        !            83:                return (time.tv_sec ? CLKREAD_OK : CLKREAD_BAD);
        !            84:        }
        !            85:        printf("WARNING: TOY clock invalid");
        !            86:        return (CLKREAD_BAD);
        !            87: }
        !            88: 
        !            89: /* Set the time of day clock, called via. stime system call.. */
        !            90: ka630_clkwrite()
        !            91: {
        !            92:        register struct ka630clock *claddr = &ka630clock;
        !            93:        struct chiptime c;
        !            94:        int s;
        !            95: 
        !            96:        timetochip(&c);
        !            97:        s = splhigh();
        !            98:        claddr->csr1 = KA630CLK_SET;
        !            99:        while ((claddr->csr0 & KA630CLK_UIP) != 0)
        !           100:                ;
        !           101:        claddr->sec = c.sec;
        !           102:        claddr->min = c.min;
        !           103:        claddr->hr = c.hour;
        !           104:        claddr->day = c.day;
        !           105:        claddr->mon = c.mon;
        !           106:        claddr->yr = c.year;
        !           107: #ifndef lint
        !           108:        { int t = claddr->csr2; }       /* ??? */
        !           109:        { int t = claddr->csr3; }       /* ??? */
        !           110: #endif
        !           111:        claddr->csr0 = KA630CLK_RATE;
        !           112:        claddr->csr1 = KA630CLK_ENABLE;
        !           113:        splx(s);
        !           114: }
        !           115: 
        !           116: ka630_memnop()
        !           117: {
        !           118: 
        !           119:        /* void */
        !           120: }
        !           121: 
        !           122: #define NMC630 10
        !           123: char *mc630[] = {
        !           124:        0,              "immcr (fsd)",  "immcr (ssd)",  "fpu err 0",
        !           125:        "fpu err 7",    "mmu st(tb)",   "mmu st(m=0)",  "pte in p0",
        !           126:        "pte in p1",    "un intr id",
        !           127: };
        !           128: 
        !           129: struct mc630frame {
        !           130:        int     mc63_bcnt;              /* byte count == 0xc */
        !           131:        int     mc63_summary;           /* summary parameter */
        !           132:        int     mc63_mrvaddr;           /* most recent vad */
        !           133:        int     mc63_istate;            /* internal state */
        !           134:        int     mc63_pc;                /* trapped pc */
        !           135:        int     mc63_psl;               /* trapped psl */
        !           136: };
        !           137: 
        !           138: ka630_mchk(cmcf)
        !           139:        caddr_t cmcf;
        !           140: {
        !           141:        register struct ka630cpu *ka630addr = &ka630cpu;
        !           142:        register struct mc630frame *mcf = (struct mc630frame *)cmcf;
        !           143:        register u_int type = mcf->mc63_summary;
        !           144: 
        !           145:        printf("machine check %x", type);
        !           146:        if (type < NMC630 && mc630[type])
        !           147:                printf(": %s", mc630[type]);
        !           148:        printf("\n\tvap %x istate %x pc %x psl %x\n",
        !           149:            mcf->mc63_mrvaddr, mcf->mc63_istate,
        !           150:            mcf->mc63_pc, mcf->mc63_psl);
        !           151:        if (ka630addr->ka630_mser & KA630MSER_MERR) {
        !           152:                printf("\tmser=0x%x ", ka630addr->ka630_mser);
        !           153:                if (ka630addr->ka630_mser & KA630MSER_CPUER)
        !           154:                        printf("page=%d", ka630addr->ka630_cear);
        !           155:                if (ka630addr->ka630_mser & KA630MSER_DQPE)
        !           156:                        printf("page=%d", ka630addr->ka630_dear);
        !           157:                printf("\n");
        !           158:        }
        !           159:        return (MCHK_PANIC);
        !           160: }
        !           161: #endif

unix.superglobalmegacorp.com

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