Annotation of cci/d/ioex/vddc_ex.c, revision 1.1

1.1     ! root        1: #include "vddc.h"
        !             2: 
        !             3: extern long Probe, iob0, iob1, iob2, iob3, iob4;
        !             4: extern struct DEVPAR devpar[];
        !             5: long v_err;
        !             6: long format_flag = 0;
        !             7: 
        !             8: /*     Routine to exercise VDDC
        !             9: */
        !            10: vddc_ex()
        !            11: {      register long unit, last_blk, nodr;
        !            12: 
        !            13:        writes("\n\t** VDDC test **\n");
        !            14:        format_flag = 0;
        !            15:        for (nodr=unit=0;devpar[unit].nocyl;unit++) {
        !            16:                if (devpar[unit].alive) {
        !            17:                        nodr++;
        !            18:                        if (format_flag) vddc_ctlr(FORMAT,unit);
        !            19:                        Probe = 1;
        !            20:                        last_blk = v_probe(unit);
        !            21:                        Probe = 0;
        !            22:                        if ( last_blk > 0) {
        !            23:                                v_ex1(1,unit,last_blk);
        !            24:                                v_ex1(2,unit,last_blk-2);
        !            25:                                v_ex1(3,unit,last_blk-3); }
        !            26:                        }
        !            27:                }
        !            28:        if (!nodr) {
        !            29:                writes("\nNo drive available...");
        !            30:                return; }
        !            31:        if (!v_err) writes("\nVDDC passed..\n");
        !            32:                else  writes("\nVDDC failed..\n");
        !            33: }
        !            34: 
        !            35: v_ex1(factor,sdev,blk)
        !            36: long factor, blk;
        !            37: char sdev;
        !            38: {      register long ix, pat, *sptr, *dptr, loop;
        !            39:        unsigned short *s, *d;
        !            40: 
        !            41: 
        !            42:        pat = 0xababab00;       /* Pattern */
        !            43:        sptr = &iob0;           /* Source buffer */
        !            44:        dptr = &iob3;           /* Destination buffer */
        !            45: 
        !            46: for(v_err=loop=0;loop<40;loop++)
        !            47:        {
        !            48:        /* initialize pattern in source buffer */
        !            49:        for (ix=0; ix<(BLKSIZ/4)*factor; ix++) { 
        !            50:                sptr[ix] = pat + ix;    /* init. pattern in source buffer */
        !            51:                dptr[ix] = 0;           /* Clear destination buffer */
        !            52:                }
        !            53:        /* Write 1 block of data */
        !            54:        if (vddc_op(WR_COMP,sdev,blk,factor,&iob0)==0) { v_err=1; return(0); }
        !            55: 
        !            56:        /* Read 1 block of data */
        !            57:        if (vddc_op(RD_DATA,sdev,blk,factor,&iob3)==0) { v_err=1; return(0); }
        !            58: 
        !            59:        s = (unsigned short *)&iob0;            /* Source buffer */
        !            60:        d = (unsigned short *)&iob3;            /* Destination buffer */
        !            61:        for (ix=0; ix<(BLKSIZ/2)*factor; ix++) {
        !            62:                if (s[ix] != d[ix]) {
        !            63:                        writes("\nExpected ");
        !            64:                        writeh(s[ix] & 0xffff);
        !            65:                        writes(" , actual "); writeh(d[ix] & 0xffff);
        !            66:                        writes(", address "); writeh(&d[ix]);
        !            67:                        v_err = 1;
        !            68:                        }       
        !            69:                }
        !            70:        if (v_err) loop = 0;    /* If error then loop forever */
        !            71:        }
        !            72: }
        !            73: 
        !            74: 
        !            75: /*     routine to probe VDDC disk 
        !            76: */
        !            77: v_probe(sdev)
        !            78: char sdev;
        !            79: {      register long *dptr, blk, inc;
        !            80: 
        !            81:        inc = 2000;
        !            82:        blk = 0;
        !            83:        while (inc != 0) {
        !            84:                for(blk += inc;;blk += inc) { /* Read 1 block of data */
        !            85:                        if (vddc_op(RD_DATA,sdev,blk,1,&iob0)==0) 
        !            86:                                { blk -= inc; break; }
        !            87:                        }
        !            88:                inc /= 2;
        !            89:                }
        !            90:        if (blk <= 0) {
        !            91:                writes("\nCannot probe "); writes(devpar[sdev].name);
        !            92:                return(0); }
        !            93:        writes("\n"); writes(devpar[sdev].name); writes(" has ");
        !            94:        writed((blk*1024)/1000); writes(" Kbytes.\n");
        !            95:        return(blk);
        !            96: 
        !            97: }

unix.superglobalmegacorp.com

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