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

1.1       root        1: /*     mem.h   6.1     83/07/29        */
                      2: 
                      3: /*
                      4:  * Memory controller registers
                      5:  *
                      6:  * The way in which the data is stored in these registers varies
                      7:  * per cpu, so we define macros here to mask that.
                      8:  */
                      9: struct mcr {
                     10:        int     mc_reg[3];
                     11: };
                     12: 
                     13: /*
                     14:  * Compute maximum possible number of memory controllers,
                     15:  * for sizing of the mcraddr array.
                     16:  */
                     17: #if VAX780
                     18: #define        MAXNMCR         4
                     19: #else
                     20: #define        MAXNMCR         1
                     21: #endif
                     22: 
                     23: /*
                     24:  * For each processor type we define 5 macros:
                     25:  *     M???_INH(mcr)           inhibits further crd interrupts from mcr
                     26:  *     M???_ENA(mcr)           enables another crd interrupt from mcr
                     27:  *     M???_ERR(mcr)           tells whether an error is waiting
                     28:  *     M???_SYN(mcr)           gives the syndrome bits of the error
                     29:  *     M???_ADDR(mcr)          gives the address of the error
                     30:  */
                     31: #if VAX780
                     32: #define        M780_ICRD       0x40000000      /* inhibit crd interrupts, in [2] */
                     33: #define        M780_HIER       0x20000000      /* high error rate, in reg[2] */
                     34: #define        M780_ERLOG      0x10000000      /* error log request, in reg[2] */
                     35: /* on a 780, memory crd's occur only when bit 15 is set in the SBIER */
                     36: /* register; bit 14 there is an error bit which we also clear */
                     37: /* these bits are in the back of the ``red book'' (or in the VMS code) */
                     38: 
                     39: #define        M780_INH(mcr)   \
                     40:        (((mcr)->mc_reg[2] = (M780_ICRD|M780_HIER|M780_ERLOG)), mtpr(SBIER, 0))
                     41: #define        M780_ENA(mcr)   \
                     42:        (((mcr)->mc_reg[2] = (M780_HIER|M780_ERLOG)), mtpr(SBIER, 3<<14))
                     43: #define        M780_ERR(mcr)   \
                     44:        ((mcr)->mc_reg[2] & (M780_ERLOG))
                     45: 
                     46: #define        M780_SYN(mcr)   ((mcr)->mc_reg[2] & 0xff)
                     47: #define        M780_ADDR(mcr)  (((mcr)->mc_reg[2] >> 8) & 0xfffff)
                     48: #endif
                     49: 
                     50: #if VAX750
                     51: #define        M750_ICRD       0x10000000      /* inhibit crd interrupts, in [1] */
                     52: #define        M750_UNCORR     0xc0000000      /* uncorrectable error, in [0] */
                     53: #define        M750_CORERR     0x20000000      /* correctable error, in [0] */
                     54: 
                     55: #define        M750_INH(mcr)   ((mcr)->mc_reg[1] = 0)
                     56: #define        M750_ENA(mcr)   ((mcr)->mc_reg[0] = (M750_UNCORR|M750_CORERR), \
                     57:                            (mcr)->mc_reg[1] = M750_ICRD)
                     58: #define        M750_ERR(mcr)   ((mcr)->mc_reg[0] & (M750_UNCORR|M750_CORERR))
                     59: 
                     60: #define        M750_SYN(mcr)   ((mcr)->mc_reg[0] & 0x7f)
                     61: #define        M750_ADDR(mcr)  (((mcr)->mc_reg[0] >> 9) & 0x7fff)
                     62: #endif
                     63: 
                     64: #if VAX730
                     65: #define        M730_CRD        0x40000000      /* crd, in [1] */
                     66: #define        M730_FTBPE      0x20000000      /* force tbuf parity error, in [1] */
                     67: #define        M730_ENACRD     0x10000000      /* enable crd interrupt, in [1] */
                     68: #define        M730_MME        0x08000000      /* mem-man enable (ala ipr), in [1] */
                     69: #define        M730_DM         0x04000000      /* diagnostic mode, in [1] */
                     70: #define        M730_DISECC     0x02000000      /* disable ecc, in [1] */
                     71: 
                     72: #define        M730_INH(mcr)   ((mcr)->mc_reg[1] = M730_MME)
                     73: #define        M730_ENA(mcr)   ((mcr)->mc_reg[1] = (M730_MME|M730_ENACRD))
                     74: #define        M730_ERR(mcr)   ((mcr)->mc_reg[1] & M730_CRD)
                     75: #define        M730_SYN(mcr)   ((mcr)->mc_reg[0] & 0x7f)
                     76: #define        M730_ADDR(mcr)  (((mcr)->mc_reg[0] >> 8) & 0x7fff)
                     77: #endif
                     78: 
                     79: #define        MEMINTVL        (60*10)         /* 10 minutes */
                     80: 
                     81: #ifdef KERNEL
                     82: int    nmcr;
                     83: struct mcr *mcraddr[MAXNMCR];
                     84: #endif

unix.superglobalmegacorp.com

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