Annotation of researchv10dc/sys/md/mcrcomet.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * comet memory controller
                      3:  */
                      4: 
                      5: #include "sys/param.h"
                      6: #include "sys/systm.h"
                      7: #include "sys/nxaddr.h"
                      8: 
                      9: /*
                     10:  * intentional overlays:
                     11:  * if no memory controller configured,
                     12:  * mcrcnt will be 0
                     13:  * but there will be no undefined symbols
                     14:  */
                     15: 
                     16: int mcrcnt;
                     17: struct nxaddr mcraddr[1];      /* one or more */
                     18: caddr_t mcrregs[1];            /* one or more */
                     19: time_t mcrtime[1];             /* one or more */
                     20: 
                     21: int mcrtimeout = 60;           /* seconds between soft error reports */
                     22: 
                     23: struct device {
                     24:        long csr0;
                     25:        long csr1;
                     26:        long csr2;
                     27: };
                     28: 
                     29: /*
                     30:  * csr0
                     31:  */
                     32: #define        HARDERR 0x80000000      /* uncorrectable error */
                     33: #define        HARDLST 0x40000000      /* nested hard error */
                     34: #define        SOFTERR 0x20000000      /* corrected error */
                     35: 
                     36: /*
                     37:  * csr1
                     38:  */
                     39: #define        CRDENB  0x10000000      /* enable reporting soft errors */      
                     40: 
                     41: mcrinit()
                     42: {
                     43:        register int i;
                     44:        register struct device *m;
                     45: 
                     46:        for (i = 0; i < mcrcnt; i++)
                     47:                if ((m = (struct device *)nxaddr(&mcraddr[i])) == NULL
                     48:                ||  badaddr(&m->csr0, sizeof(long)))
                     49:                        printf("mcr%d absent\n", i);
                     50:                else {
                     51:                        mcrregs[i] = (caddr_t)m;
                     52:                        mcrenable((caddr_t)m);
                     53:                }
                     54: }
                     55: 
                     56: mcrenable(mm)
                     57: caddr_t mm;
                     58: {
                     59:        ((struct device *)mm)->csr1 = CRDENB;
                     60: }
                     61: 
                     62: memerr()
                     63: {
                     64:        register int i;
                     65:        register struct device *m;
                     66:        long csr[3];
                     67: 
                     68:        if (mcrcnt == 0) {
                     69:                printf("mem err, no controllers configured\n");
                     70:                return;         /* and hope */
                     71:        }
                     72:        for (i = 0; i < mcrcnt; i++) {
                     73:                if ((m = (struct device *)mcrregs[i]) == NULL)
                     74:                        continue;
                     75:                if (m->csr0 & (HARDERR|SOFTERR)) {
                     76:                        csr[0] = m->csr0;
                     77:                        csr[1] = m->csr1;
                     78:                        csr[2] = m->csr2;
                     79:                        m->csr0 = m->csr0;
                     80:                        if (mcrtime[i] != time)
                     81:                                mcrtime[i] = time;
                     82:                        else {
                     83:                                m->csr1 = 0;
                     84:                                timeout(mcrenable, (caddr_t)m, mcrtimeout*HZ);
                     85:                        }
                     86:                        printf("mcr%d: mem %s error %x %x %x\n", i,
                     87:                                csr[0]&HARDERR?"hard":"soft", csr[0], csr[1], csr[2]);
                     88:                        if (csr[0]&HARDERR)
                     89:                                panic("memerr");
                     90:                }
                     91:        }
                     92: }

unix.superglobalmegacorp.com

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