Annotation of cci/d/pits/vddc_ex.c, revision 1.1.1.2

1.1       root        1: #include "vddc.h"
                      2: 
1.1.1.2 ! root        3: extern int cyccnt;
1.1       root        4: extern long Probe, iob0, iob1, iob2, iob3, iob4;
                      5: extern struct DEVPAR devpar[];
                      6: extern int type, cont;
1.1.1.2 ! root        7: long v_err1, v_errprb, v_err2;
1.1       root        8: 
1.1.1.2 ! root        9: /*     
        !            10: **     Routine to exercise VDDC
1.1       root       11: */
1.1.1.2 ! root       12: 
1.1       root       13: vddc_ex()
                     14: {      register long unit, last_blk, nodr;
1.1.1.2 ! root       15:        long track;
        !            16:        struct DEVPAR *dp;
        !            17:        v_err1 = v_err2 = v_errprb = 0;         /* Clear error flags */
        !            18: for (nodr=unit=0;devpar[unit+type*5].nocyl;unit++) {
        !            19:        if (devpar[unit+type*5].alive) {
        !            20:        dp = &devpar[unit+type*5];
        !            21:                nodr++;
        !            22:                Probe = 1;
        !            23:                last_blk = v_probe(unit);
        !            24:                Probe = 0;
        !            25:                if ( last_blk > 0) {
        !            26:                        writes("\n\tWrite/Read/Compare test\n");
        !            27:                        writes("\nExercising   cylinder   track   sectors\n");
        !            28:                        for(track=0;track<dp->notraks;track++) {
        !            29:                                v_ex1(unit,dp->secs_trak/2,track,dp->nocyl-2);
1.1       root       30:                        }
                     31:                }
1.1.1.2 ! root       32:                v_ex2(unit,dp->nocyl-2,dp->secs_trak/2);
        !            33:        }
        !            34: }
1.1       root       35:        if (!nodr) {
                     36:                writes("\n\n...No drive available");
1.1.1.2 ! root       37:                return; 
        !            38:        }
        !            39:        if (!v_err1 && !v_errprb && !v_err2) {
        !            40:                writes("\n\nVDDC passed...\n");
        !            41:                }
        !            42:        else    {
        !            43:                writes("\n\nVDDC failed...\n");
        !            44:        }
1.1       root       45: }
                     46: 
1.1.1.2 ! root       47: v_ex1(sdev,factor,trk,cyl)
        !            48: long factor, trk, cyl;
1.1       root       49: int sdev;
                     50: {      register long ix, pat, *sptr, *dptr, loop;
                     51:        unsigned short *s, *d;
                     52: 
1.1.1.2 ! root       53:        pat = 0xabab0000;       /* Pattern */
1.1       root       54:        sptr = &iob0;           /* Source buffer */
                     55:        dptr = &iob3;           /* Destination buffer */
1.1.1.2 ! root       56:        writes("\n");
        !            57:        writes("\t\t");writed(cyl);
        !            58:        writes("\t  ");writed(trk);
        !            59:        writes("\t ");writes("0-");
        !            60:        writed(devpar[sdev+type*5].secs_trak-1);
        !            61: for(loop=0;loop<50;loop++) {
        !            62: /* 
        !            63: **     Initialize pattern in source buffer 
        !            64: */
1.1       root       65:        for (ix=0; ix<(BLKSIZ/4)*factor; ix++) { 
                     66:                sptr[ix] = pat + ix;    /* init. pattern in source buffer */
                     67:                dptr[ix] = 0;           /* Clear destination buffer */
1.1.1.2 ! root       68:        }
        !            69: /* 
        !            70: **     Write x sectors of data 
        !            71: */
        !            72:        if (vddc_op2(W_DATA,sdev,cyl,trk,0,factor,&iob0)==0) {
        !            73:                v_err1 = 1;
        !            74:                return(0);
        !            75:        }
        !            76: /* 
        !            77: **     Read x sectors of data 
        !            78: */
        !            79:        if (vddc_op2(R_DATA,sdev,cyl,trk,0,factor,&iob3)==0) {
        !            80:                v_err1 = 1;
        !            81:                return(0);
        !            82:        }
1.1       root       83:        s = (unsigned short *)&iob0;            /* Source buffer */
                     84:        d = (unsigned short *)&iob3;            /* Destination buffer */
                     85:        for (ix=0; ix<(BLKSIZ/2)*factor; ix++) {
                     86:                if (s[ix] != d[ix]) {
                     87:                        writes("\nCompare error: ");
                     88:                        writes("expected ");
                     89:                        writeh(s[ix] & 0xffff);
                     90:                        writes(" , actual "); writeh(d[ix] & 0xffff);
                     91:                        writes(", address "); writeh(&d[ix]);
1.1.1.2 ! root       92:                        v_err1 = 1;
        !            93:                }       
1.1       root       94:        }
1.1.1.2 ! root       95:        if (v_err1) loop = 0;   /* If error then loop forever */
1.1       root       96: }
1.1.1.2 ! root       97: }
        !            98: /*
        !            99: **     routine to test reverse seek
        !           100: */
        !           101: v_ex2(sdev,maxcyl,factor)
        !           102: char sdev;
        !           103: long maxcyl, factor;
        !           104: {      long cyl, loop;
        !           105:        writes("\n\n\tReverse Seek Test \n");
        !           106:        for(loop = 1; loop<=cyccnt ; loop++){  
        !           107:                writes("\nCycle ");writed (loop);
        !           108:                for(cyl = maxcyl;cyl >= 0;cyl--){ 
        !           109:                        if(vddc_op3(SEEK,sdev,cyl,0,0)==0){
        !           110:                                v_err2=1;
        !           111:                                return(0);
        !           112:                        }
        !           113:                        DELAY(0x1a0a);  
        !           114:                }
        !           115:        if (vddc_op2(R_DATA,sdev,maxcyl,0,0,factor,&iob3)==0) {
        !           116:                writes("\nfailed going to max cylinder.");
        !           117:                v_err2 = 1;
        !           118:                return(0);}
        !           119:        }
        !           120:        return(0);
        !           121: }      
        !           122: /*     
        !           123: **      routine to probe VDDC disk 
1.1       root      124: */
                    125: v_probe(sdev)
                    126: int sdev;
                    127: {      register long *dptr, blk, inc;
1.1.1.2 ! root      128: 
1.1       root      129:        blk = 0;
1.1.1.2 ! root      130:        inc = 2000;
1.1       root      131:        writes("\n\n\tRead Block test\n");
                    132:        while (inc != 0) {
                    133:                for(blk += inc;;blk += inc) { /* Read 1 block of data */
1.1.1.2 ! root      134:                        if (vddc_op(R_DATA,sdev,blk,1,&iob0)==0) 
1.1       root      135:                                { blk -= inc; break; }
                    136:                }
1.1.1.2 ! root      137:                inc /= 2;
        !           138:        }
1.1       root      139:        if (blk <= 0) {
                    140:                writes("\n...Cannot probe "); writes(devpar[sdev+type*5].name);
                    141:                writed(sdev);
1.1.1.2 ! root      142:                v_errprb = 1;
        !           143:                return(0)        !           144:        }
1.1       root      145:        writes("\n"); writes(devpar[sdev+type*5].name); 
                    146:         writes(" unit "); writed(sdev); writes(" has ");
                    147:        writed((blk*1024)/1000); writes(" Kbytes.\n");
                    148:        return(blk);
                    149: }

unix.superglobalmegacorp.com

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