|
|
1.1 ! root 1: /* mem.h 4.9 81/04/03 */ ! 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 0x40000000 /* correctable error, in [0] */ ! 54: ! 55: #define M750_INH(mcr) ((mcr)->mc_reg[1] = M750_ICRD) ! 56: #define M750_ENA(mcr) ((mcr)->mc_reg[0] = (M750_UNCORR|M750_CORERR), \ ! 57: (mcr)->mc_reg[1] = 0) ! 58: #define M750_ERR(mcr) ((mcr)->mc_reg[0] & (M750_UNCORR|M750_CORERR)) ! 59: ! 60: #define M750_SYN(mcr) ((mcr)->mc_reg[0] & 0x3f) ! 61: #define M750_ADDR(mcr) (((mcr)->mc_reg[0] >> 8) & 0x7fff) ! 62: #endif ! 63: ! 64: #if VAX7ZZ ! 65: #define M7ZZ_CRD 0x40000000 /* crd, in [1] */ ! 66: #define M7ZZ_FTBPE 0x20000000 /* force tbuf parity error, in [1] */ ! 67: #define M7ZZ_ENACRD 0x10000000 /* enable crd interrupt, in [1] */ ! 68: #define M7ZZ_MME 0x08000000 /* mem-man enable (ala ipr), in [1] */ ! 69: #define M7ZZ_DM 0x04000000 /* diagnostic mode, in [1] */ ! 70: #define M7ZZ_DISECC 0x02000000 /* disable ecc, in [1] */ ! 71: ! 72: #define M7ZZ_INH(mcr) ((mcr)->mc_reg[1] = M7ZZ_MME) ! 73: #define M7ZZ_ENA(mcr) ((mcr)->mc_reg[1] = (M7ZZ_MME|M7ZZ_ENACRD)) ! 74: #define M7ZZ_ERR(mcr) ((mcr)->mc_reg[1] & M7ZZ_CRD) ! 75: #define M7ZZ_SYN(mcr) ((mcr)->mc_reg[0] & 0x7f) ! 76: #define M7ZZ_ADDR(mcr) (((mcr)->mc_reg[0] >> 8) & 0x7fff) ! 77: #endif ! 78: ! 79: #define MEMINTVL (60*60*10) /* 10 minutes */ ! 80: ! 81: #ifdef KERNEL ! 82: int nmcr; ! 83: struct mcr *mcraddr[MAXNMCR]; ! 84: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.