Annotation of cci/d/mem/locate.c, revision 1.1

1.1     ! root        1: /* 
        !             2:        This routine locate the error at
        !             3:        the board level.
        !             4: */
        !             5: #include "definitions"
        !             6: extern struct OPTIONS OPTIONS;
        !             7: 
        !             8: extern long    maxmem,endprog,scb;
        !             9: extern long    eccloc(), cycle,test_no,errcnt;
        !            10: extern long    loop_flg,hlt_flg,prt_flg;
        !            11: 
        !            12: extern struct tmp_mcbr{
        !            13:     unsigned                   :2;
        !            14:     unsigned   syndrome       :7;
        !            15:     unsigned   chk_bits       :7;
        !            16:     unsigned                 :14;
        !            17:     unsigned   versabus_type   :2;
        !            18: } tmp_mcbr;
        !            19: 
        !            20: extern struct tmp_mear{
        !            21:     unsigned   mear          :16;
        !            22:     unsigned                 :10;
        !            23:     unsigned   ber           :1;
        !            24:     unsigned   erm           :1;
        !            25:     unsigned   axe           :1;
        !            26:     unsigned   err_code      :3;
        !            27: } tmp_mear; 
        !            28: 
        !            29: struct mcbr{
        !            30:     unsigned                   :18;
        !            31:     unsigned   synd_bits      :7;
        !            32:     unsigned   check_bits     :7;
        !            33: };
        !            34: 
        !            35: struct mer{
        !            36:     unsigned                 :16;
        !            37:     unsigned                 :10;
        !            38:     unsigned   ber           :1;
        !            39:     unsigned   erm           :1;
        !            40:     unsigned   axe           :1;
        !            41:     unsigned   err_code      :3;
        !            42: };
        !            43: 
        !            44: struct mcr{
        !            45:     unsigned              :16;
        !            46:     unsigned   err_count  : 8;
        !            47:     unsigned   clr_error  : 1;
        !            48:     unsigned   clr_count  : 1;
        !            49:     unsigned   init       : 1;
        !            50:     unsigned               : 1;
        !            51:     unsigned   diag_read  : 1;
        !            52:     unsigned   diag_writ  : 1;
        !            53:     unsigned   correction : 1; /* Enable Error Correction */
        !            54:     unsigned   detection  : 1; /* Enable Error Detection */
        !            55: };
        !            56: 
        !            57: long *CPCR = (long *)0xffffb028;       /* Ptr to CP Control register */
        !            58: 
        !            59: 
        !            60: locate(addr,exp,act)
        !            61: long addr,exp,act;
        !            62: {
        !            63:   long intl, board,b1, bank;
        !            64:   register struct mcr *MCR = (struct mcr *)0xffffb000;
        !            65:   register struct mer *MER = (struct mer *)0xffffb020;
        !            66:   register struct mcbr *MCBR = (struct mcbr *)0xffffb008;
        !            67: 
        !            68:        if(OPTIONS.fourmb) {
        !            69:                if (!(loc4mb(addr,&board,&bank,&intl))) 
        !            70:                return(0); }
        !            71:        else {
        !            72:                if (!(locboard(addr,&board,&bank,&intl))) 
        !            73:                return(0); }
        !            74:        intl = *CPCR & 3;       /* Read Memory Interleave status */
        !            75:        if (intl) {
        !            76:                if (intl==1) intl=2;
        !            77:                        else intl = 4;
        !            78:                }
        !            79:        writes("\n"); writed(intl);writes(" ways interleave.");
        !            80:        writes("\nBoard # "); writed(board);
        !            81:        writes(", Bank # "); writed(bank,1);
        !            82:        writes("\nIC number(s) : ");
        !            83:        locic(bank,exp,act);
        !            84: }
        !            85: 
        !            86: char *names[4] = {
        !            87:        " U7"," U5"," U3"," U1" 
        !            88: };
        !            89: 
        !            90: locic(bk,exp,act)
        !            91: long bk, exp, act;
        !            92: {      register long ix, bad, bit, b2;
        !            93:        char *this, str[4];
        !            94: 
        !            95:        for(ix=0;ix<3;ix++) str[ix] = names[bk][ix];
        !            96:        str[3] = '\0';
        !            97:        this = str;
        !            98:        bad = exp ^ act;                /* Exclusive OR */
        !            99:        bit = 1;
        !           100:        writes("\n");
        !           101:        for(ix=0;ix<32; ix++, bit <<= 1) {
        !           102:                if (ix == 16) this[2]++;        /* Second row */
        !           103:                if (bad & bit) {
        !           104:                        /* Bit in error */
        !           105:                        b2 = ix;
        !           106:                        if (ix > 15) b2 = ix-16;
        !           107:                        writes(this);
        !           108:                        b2 += 2;
        !           109:                        if (b2 >= 10) { writes("1");
        !           110:                                b2 -= 10;
        !           111:                                }
        !           112:                            else writes("0");
        !           113:                        pt_hex(b2,1);
        !           114:                        }
        !           115:                }
        !           116:        writes("\n");
        !           117: }
        !           118: /*
        !           119:        locate board and bank for 1 mbyte memory array
        !           120: */
        !           121: locboard(addr,board,bank,intl)
        !           122: long addr;
        !           123: long *board, *bank,*intl;
        !           124: {
        !           125:        register long inl, b1;
        !           126:        writes("\n1 mb");
        !           127:        inl = *CPCR & 3;        /* Read Memory Interleave status */
        !           128:        *intl = inl;
        !           129:        if (inl==2) {
        !           130:                writes("\nInvalid memory interleave status : ");
        !           131:                writeh(inl);
        !           132:                return(0); }
        !           133:        if (!inl) {
        !           134:                /* Non_interleave */
        !           135:                *board = (addr & 0x3ff00000) >> 20;
        !           136:                *bank = (addr & 0xc0000) >> 18;
        !           137:                }
        !           138:             else {
        !           139:                if (inl==1) {
        !           140:                        /* 2 ways interleave */
        !           141:                        *board = (addr & 0x3fd00000) >> 20;
        !           142:                        b1 = (addr & 0x4) >> 2;
        !           143:                        *board |= b1;
        !           144:                        *bank = (addr & 0x180000) >> 19;
        !           145:                        *intl = 2;
        !           146:                        }
        !           147:                    else  {
        !           148:                        /* 4 ways interleave */
        !           149:                        *board = (addr & 0x3fc00000) >> 20;
        !           150:                        b1 = (addr & 0xc) >> 2;
        !           151:                        *board |= b1;
        !           152:                        *bank = (addr & 0x300000) >> 20;
        !           153:                        *intl = 4;
        !           154:                        }
        !           155:                }
        !           156:        return(1);
        !           157: }
        !           158: /*
        !           159:        locate board and bank for 4 mbyte memory array
        !           160: */
        !           161: loc4mb(addr,board,bank,intl)
        !           162: long addr;
        !           163: long *board, *bank,*intl;
        !           164: {
        !           165:        register long inl, b1;
        !           166:        writes("\n4 mb");
        !           167: 
        !           168:        inl = *CPCR & 3;        /* Read Memory Interleave status */
        !           169:        *intl = inl;
        !           170:        if (inl==2) {
        !           171:                writes("\nInvalid memory interleave status : ");
        !           172:                writeh(inl);
        !           173:                return(0); }
        !           174:        if (!inl) {
        !           175:                /* Non_interleave */
        !           176:                *board = (addr & 0x3fc00000) >> 22;
        !           177:                *bank = (addr & 0x300000) >> 20;
        !           178:                }
        !           179:             else {
        !           180:                if (inl==1) {
        !           181:                        /* 2 ways interleave */
        !           182:                        *board = (addr & 0x3f800000) >> 22;
        !           183:                        b1 = (addr & 0x4) >> 2;
        !           184:                        *board |= b1;
        !           185:                        *bank = (addr & 0x600000) >> 21;
        !           186:                        *intl = 2;
        !           187:                        }
        !           188:                    else  {
        !           189:                        /* 4 ways interleave */
        !           190:                        *board = (addr & 0x3f000000) >> 22;
        !           191:                        b1 = (addr & 0xc) >> 2;
        !           192:                        *board |= b1;
        !           193:                        *bank = (addr & 0xc00000) >> 22;
        !           194:                        *intl = 4;
        !           195:                        }
        !           196:                }
        !           197:        return(1);
        !           198: }

unix.superglobalmegacorp.com

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