Annotation of 43BSD/sys/vax/mem.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1982, 1986 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:  *     @(#)mem.h       7.1 (Berkeley) 6/5/86
                      7:  */
                      8: 
                      9: /*
                     10:  * Memory controller registers
                     11:  *
                     12:  * The way in which the data is stored in these registers varies
                     13:  * per controller and cpu, so we define macros here to mask that.
                     14:  */
                     15: struct mcr {
                     16:        int     mc_reg[6];
                     17: };
                     18: 
                     19: /*
                     20:  * Compute maximum possible number of memory controllers,
                     21:  * for sizing of the mcraddr array.
                     22:  */
                     23: #if VAX780
                     24: #define        MAXNMCR         4
                     25: #else
                     26: #define        MAXNMCR         1
                     27: #endif
                     28: 
                     29: /*
                     30:  * For each controller type we define 5 macros:
                     31:  *     M???_INH(mcr)           inhibits further crd interrupts from mcr
                     32:  *     M???_ENA(mcr)           enables another crd interrupt from mcr
                     33:  *     M???_ERR(mcr)           tells whether an error is waiting
                     34:  *     M???_SYN(mcr)           gives the syndrome bits of the error
                     35:  *     M???_ADDR(mcr)          gives the address of the error
                     36:  */
                     37: 
                     38: #if VAX8600
                     39: /*
                     40:  * 8600 register bit definitions
                     41:  */
                     42: #define        M8600_ICRD      0x400           /* inhibit crd interrupts */
                     43: #define M8600_TB_ERR   0xf00           /* translation buffer error mask */
                     44: /*
                     45:  * MDECC register
                     46:  */
                     47: #define        M8600_ADDR_PE   0x080000        /* address parity error */
                     48: #define M8600_DBL_ERR  0x100000        /* data double bit error */
                     49: #define        M8600_SNG_ERR   0x200000        /* data single bit error */
                     50: #define        M8600_BDT_ERR   0x400000        /* bad data error */
                     51: 
                     52: /*
                     53:  * ESPA register is used to address scratch pad registers in the Ebox.
                     54:  * To access a register in the scratch pad, write the ESPA with the address
                     55:  * and then read the ESPD register.  
                     56:  *
                     57:  * NOTE:  In assmebly code, the the mfpr instruction that reads the ESPD
                     58:  *       register must immedately follow the mtpr instruction that setup
                     59:  *       the ESPA register -- per the VENUS processor register spec.
                     60:  *
                     61:  * The scratchpad registers that are supplied for a single bit ECC 
                     62:  * error are:
                     63:  */
                     64: #define        SPAD_MSTAT1     0x25            /* scratch pad mstat1 register  */
                     65: #define SPAD_MSTAT2    0x26            /* scratch pad mstat2 register  */
                     66: #define SPAD_MDECC     0x27            /* scratch pad mdecc register   */
                     67: #define SPAD_MEAR      0x2a            /* scratch pad mear register    */
                     68: 
                     69: #define M8600_MEMERR(mdecc) ((mdecc) & 0x780000)
                     70: #define M8600_HRDERR(mdecc) ((mdecc) & 0x580000)
                     71: #define M8600_ENA (mtpr(MERG, (mfpr(MERG) & ~M8600_ICRD)))
                     72: #define M8600_INH (mtpr(EHSR, 0), mtpr(MERG, (mfpr(MERG) | M8600_ICRD)))
                     73: #define M8600_SYN(mdecc) (((mdecc) >> 9) & 0x3f)
                     74: #define M8600_ADDR(mear) ((mear) & 0x3ffffffc)
                     75: #define M8600_ARRAY(mear) (((mear) >> 22) & 0x0f)
                     76: 
                     77: #define M8600_MDECC_BITS "\20\27BAD_DT_ERR\26SNG_BIT_ERR\25DBL_BIT_ERR\
                     78: \24ADDR_PE"
                     79: #define M8600_MSTAT1_BITS "\20\30CPR_PE_A\27CPR_PE_B\26ABUS_DT_PE\
                     80: \25ABUS_CTL_MSK_PE\24ABUS_ADR_PE\23ABUS_C/A_CYCLE\22ABUS_ADP_1\21ABUS_ADP_0\
                     81: \20TB_MISS\17BLK_HIT\16C0_TAG_MISS\15CHE_MISS\14TB_VAL_ERR\13TB_PTE_B_PE\
                     82: \12TB_PTE_A_PE\11TB_TAG_PE\10WR_DT_PE_B3\7WR_DT_PE_B2\6WR_DT_PE_B1\
                     83: \5WR_DT_PE_B0\4CHE_RD_DT_PE\3CHE_SEL\2ANY_REFL\1CP_BW_CHE_DT_PE"
                     84: #define M8600_MSTAT2_BITS "\20\20CP_BYT_WR\17ABUS_BD_DT_CODE\10MULT_ERR\
                     85: \7CHE_TAG_PE\6CHE_TAG_W_PE\5CHE_WRTN_BIT\4NXM\3CP-IO_BUF_ERR\2MBOX_LOCK"
                     86: #endif VAX8600
                     87: 
                     88: #if VAX780
                     89: #define        M780_ICRD       0x40000000      /* inhibit crd interrupts, in [2] */
                     90: #define        M780_HIER       0x20000000      /* high error rate, in reg[2] */
                     91: #define        M780_ERLOG      0x10000000      /* error log request, in reg[2] */
                     92: /* on a 780, memory crd's occur only when bit 15 is set in the SBIER */
                     93: /* register; bit 14 there is an error bit which we also clear */
                     94: /* these bits are in the back of the ``red book'' (or in the VMS code) */
                     95: 
                     96: #define        M780C_INH(mcr)  \
                     97:        (((mcr)->mc_reg[2] = (M780_ICRD|M780_HIER|M780_ERLOG)), mtpr(SBIER, 0))
                     98: #define        M780C_ENA(mcr)  \
                     99:        (((mcr)->mc_reg[2] = (M780_HIER|M780_ERLOG)), mtpr(SBIER, 3<<14))
                    100: #define        M780C_ERR(mcr)  \
                    101:        ((mcr)->mc_reg[2] & (M780_ERLOG))
                    102: 
                    103: #define        M780C_SYN(mcr)  ((mcr)->mc_reg[2] & 0xff)
                    104: #define        M780C_ADDR(mcr) (((mcr)->mc_reg[2] >> 8) & 0xfffff)
                    105: 
                    106: #define        M780EL_INH(mcr) \
                    107:        (((mcr)->mc_reg[2] = (M780_ICRD|M780_HIER|M780_ERLOG)), mtpr(SBIER, 0))
                    108: #define        M780EL_ENA(mcr) \
                    109:        (((mcr)->mc_reg[2] = (M780_HIER|M780_ERLOG)), mtpr(SBIER, 3<<14))
                    110: #define        M780EL_ERR(mcr) \
                    111:        ((mcr)->mc_reg[2] & (M780_ERLOG))
                    112: 
                    113: #define        M780EL_SYN(mcr) ((mcr)->mc_reg[2] & 0x7f)
                    114: #define        M780EL_ADDR(mcr)        (((mcr)->mc_reg[2] >> 11) & 0x1ffff)
                    115: 
                    116: #define        M780EU_INH(mcr) \
                    117:        (((mcr)->mc_reg[3] = (M780_ICRD|M780_HIER|M780_ERLOG)), mtpr(SBIER, 0))
                    118: #define        M780EU_ENA(mcr) \
                    119:        (((mcr)->mc_reg[3] = (M780_HIER|M780_ERLOG)), mtpr(SBIER, 3<<14))
                    120: #define        M780EU_ERR(mcr) \
                    121:        ((mcr)->mc_reg[3] & (M780_ERLOG))
                    122: 
                    123: #define        M780EU_SYN(mcr) ((mcr)->mc_reg[3] & 0x7f)
                    124: #define        M780EU_ADDR(mcr)        (((mcr)->mc_reg[3] >> 11) & 0x1ffff)
                    125: #endif
                    126: 
                    127: #if VAX750
                    128: #define        M750_ICRD       0x10000000      /* inhibit crd interrupts, in [1] */
                    129: #define        M750_UNCORR     0xc0000000      /* uncorrectable error, in [0] */
                    130: #define        M750_CORERR     0x20000000      /* correctable error, in [0] */
                    131: 
                    132: #define        M750_INH(mcr)   ((mcr)->mc_reg[1] = 0)
                    133: #define        M750_ENA(mcr)   ((mcr)->mc_reg[0] = (M750_UNCORR|M750_CORERR), \
                    134:                            (mcr)->mc_reg[1] = M750_ICRD)
                    135: #define        M750_ERR(mcr)   ((mcr)->mc_reg[0] & (M750_UNCORR|M750_CORERR))
                    136: 
                    137: #define        M750_SYN(mcr)   ((mcr)->mc_reg[0] & 0x7f)
                    138: #define        M750_ADDR(mcr)  (((mcr)->mc_reg[0] >> 9) & 0x7fff)
                    139: #endif
                    140: 
                    141: #if VAX730
                    142: #define        M730_UNCORR     0x80000000      /* rds, uncorrectable error, in [1] */
                    143: #define        M730_CRD        0x40000000      /* crd, in [1] */
                    144: #define        M730_FTBPE      0x20000000      /* force tbuf parity error, in [1] */
                    145: #define        M730_ENACRD     0x10000000      /* enable crd interrupt, in [1] */
                    146: #define        M730_MME        0x08000000      /* mem-man enable (ala ipr), in [1] */
                    147: #define        M730_DM         0x04000000      /* diagnostic mode, in [1] */
                    148: #define        M730_DISECC     0x02000000      /* disable ecc, in [1] */
                    149: 
                    150: #define        M730_INH(mcr)   ((mcr)->mc_reg[1] = M730_MME)
                    151: #define        M730_ENA(mcr)   ((mcr)->mc_reg[1] = (M730_MME|M730_ENACRD))
                    152: #define        M730_ERR(mcr)   ((mcr)->mc_reg[1] & (M730_UNCORR|M730_CRD))
                    153: #define        M730_SYN(mcr)   ((mcr)->mc_reg[0] & 0x7f)
                    154: #define        M730_ADDR(mcr)  (((mcr)->mc_reg[0] >> 8) & 0x7fff)
                    155: #endif
                    156: 
                    157: /* controller types */
                    158: #define        M780C   1
                    159: #define        M780EL  2
                    160: #define        M780EU  3
                    161: #define        M750    4
                    162: #define        M730    5
                    163: 
                    164: #define        MEMINTVL        (60*10)         /* 10 minutes */
                    165: 
                    166: #ifdef KERNEL
                    167: int    nmcr;
                    168: struct mcr *mcraddr[MAXNMCR];
                    169: int    mcrtype[MAXNMCR];
                    170: #endif

unix.superglobalmegacorp.com

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