Annotation of 43BSDTahoe/sys/vax/ka730.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:  *     @(#)ka730.c     7.2 (Berkeley) 7/9/88
                      7:  */
                      8: 
                      9: #if VAX730
                     10: 
                     11: /*
                     12:  * 730-specific code.
                     13:  */
                     14: 
                     15: #include "param.h"
                     16: 
                     17: #include "cpu.h"
                     18: #include "mem.h"
                     19: #include "mtpr.h"
                     20: 
                     21: struct mcr730 {
                     22:        int     mc_addr;                /* address and syndrome */
                     23:        int     mc_err;                 /* error bits */
                     24: };
                     25: 
                     26: #define        M730_UNCORR     0x80000000      /* rds, uncorrectable error */
                     27: #define        M730_CRD        0x40000000      /* crd */
                     28: #define        M730_FTBPE      0x20000000      /* force tbuf parity error */
                     29: #define        M730_ENACRD     0x10000000      /* enable crd interrupt */
                     30: #define        M730_MME        0x08000000      /* mem-man enable (ala ipr) */
                     31: #define        M730_DM         0x04000000      /* diagnostic mode */
                     32: #define        M730_DISECC     0x02000000      /* disable ecc */
                     33: 
                     34: #define        M730_INH(mcr)   ((mcr)->mc_err = M730_MME)
                     35: #define        M730_ENA(mcr)   ((mcr)->mc_err = (M730_MME|M730_ENACRD))
                     36: #define        M730_ERR(mcr)   ((mcr)->mc_err & (M730_UNCORR|M730_CRD))
                     37: #define        M730_SYN(addr)  ((mcr)->mc_addr & 0x7f)
                     38: #define        M730_ADDR(addr) (((mcr)->mc_addr >> 8) & 0x7fff)
                     39: 
                     40: /* enable crd interrupts */
                     41: ka730_memenable()
                     42: {
                     43: 
                     44:        M730_ENA((struct mcr730 *)mcraddr[0]);
                     45: }
                     46: 
                     47: /* log crd errors */
                     48: ka730_memerr()
                     49: {
                     50:        register struct mcr730 *mcr = (struct mcr730 *)mcraddr[0];
                     51:        struct mcr730 amcr;
                     52: 
                     53:        /*
                     54:         * Must be careful on the 730 not to use invalid
                     55:         * instructions in I/O space, so make a copy;
                     56:         */
                     57:        amcr.mc_addr = mcr->mc_addr;
                     58:        amcr.mc_err = mcr->mc_err;
                     59:        if (M730_ERR(&amcr)) {
                     60:                printf("mcr0: %s", (amcr.mc_err & M730_UNCORR) ?
                     61:                    "hard error" : "soft ecc");
                     62:                printf(" addr %x syn %x\n", M730_ADDR(&amcr), M730_SYN(&amcr));
                     63:                M730_INH(mcr);
                     64:        }
                     65: }
                     66: 
                     67: #define        NMC730  12
                     68: char *mc730[] = {
                     69:        "tb par",       "bad retry",    "bad intr id",  "cant write ptem",
                     70:        "unkn mcr err", "iib rd err",   "nxm ref",      "cp rds",
                     71:        "unalgn ioref", "nonlw ioref",  "bad ioaddr",   "unalgn ubaddr",
                     72: };
                     73: 
                     74: struct mc730frame {
                     75:        int     mc3_bcnt;               /* byte count == 0xc */
                     76:        int     mc3_summary;            /* summary parameter */
                     77:        int     mc3_parm[2];            /* parameter 1 and 2 */
                     78:        int     mc3_pc;                 /* trapped pc */
                     79:        int     mc3_psl;                /* trapped psl */
                     80: };
                     81: 
                     82: ka730_mchk(cmcf)
                     83:        caddr_t cmcf;
                     84: {
                     85:        register struct mc730frame *mcf = (struct mc730frame *)cmcf;
                     86:        register u_int type = mcf->mc3_summary;
                     87: 
                     88:        printf("machine check %x: %s\n", type,
                     89:            type < NMC730 ? mc730[type] : "???");
                     90:        printf("\tparams %x,%x pc %x psl %x mcesr %x\n",
                     91:            mcf->mc3_parm[0], mcf->mc3_parm[1],
                     92:            mcf->mc3_pc, mcf->mc3_psl, mfpr(MCESR));
                     93:        mtpr(MCESR, 0xf);
                     94:        return (MCHK_PANIC);
                     95: }
                     96: #endif

unix.superglobalmegacorp.com

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