|
|
1.1 ! root 1: #include "vddc.h" ! 2: ! 3: extern long Probe, iob0, iob1, iob2, iob3, iob4; ! 4: extern struct DEVPAR devpar[]; ! 5: extern struct DA VDDCBASE []; ! 6: extern int type, cont; ! 7: long v_err; ! 8: long format_flag = 0; ! 9: ! 10: /* Routine to exercise VDDC ! 11: */ ! 12: vddc_ex() ! 13: { register long unit, last_blk, nodr; ! 14: format_flag = 0; ! 15: for (nodr=unit=0;devpar[unit+type*5].nocyl;unit++) { ! 16: if (devpar[unit+type*5].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: writes("\n\tWrite_Compare/Read/Compare test\n"); ! 24: writes("\n"); ! 25: v_ex1(1,unit,last_blk); ! 26: v_ex1(2,unit,last_blk-1); ! 27: v_ex1(3,unit,last_blk-2); } ! 28: } ! 29: } ! 30: if (!nodr) { ! 31: writes("\n\n...No drive available"); ! 32: return; } ! 33: if (!v_err) writes("\nVDDC passed..\n"); ! 34: else writes("\nVDDC failed..\n"); ! 35: } ! 36: ! 37: v_ex1(factor,sdev,blk) ! 38: long factor, blk; ! 39: int sdev; ! 40: { register long ix, pat, *sptr, *dptr, loop; ! 41: unsigned short *s, *d; ! 42: ! 43: pat = 0xababab00; /* Pattern */ ! 44: sptr = &iob0; /* Source buffer */ ! 45: dptr = &iob3; /* Destination buffer */ ! 46: ! 47: writes("Exercising block "); writed(blk); writes("\n"); ! 48: for(v_err=loop=0;loop<200;loop++) ! 49: { ! 50: /* initialize pattern in source buffer */ ! 51: for (ix=0; ix<(BLKSIZ/4)*factor; ix++) { ! 52: sptr[ix] = pat + ix; /* init. pattern in source buffer */ ! 53: dptr[ix] = 0; /* Clear destination buffer */ ! 54: } ! 55: /* Write 1 block of data */ ! 56: if (vddc_op(WR_COMP,sdev,blk,factor,&iob0)==0) {v_err=1;return(0);} ! 57: ! 58: /* Read 1 block of data */ ! 59: if (vddc_op(RD_DATA,sdev,blk,factor,&iob3)==0) {v_err=1;return(0);} ! 60: s = (unsigned short *)&iob0; /* Source buffer */ ! 61: d = (unsigned short *)&iob3; /* Destination buffer */ ! 62: for (ix=0; ix<(BLKSIZ/2)*factor; ix++) { ! 63: if (s[ix] != d[ix]) { ! 64: writes("\nCompare error: "); ! 65: writes("expected "); ! 66: writeh(s[ix] & 0xffff); ! 67: writes(" , actual "); writeh(d[ix] & 0xffff); ! 68: writes(", address "); writeh(&d[ix]); ! 69: v_err = 1; ! 70: } ! 71: } ! 72: if (v_err) loop = 0; /* If error then loop forever */ ! 73: } ! 74: } ! 75: ! 76: ! 77: /* routine to probe VDDC disk ! 78: */ ! 79: v_probe(sdev) ! 80: int sdev; ! 81: { register long *dptr, blk, inc; ! 82: inc = 2000; ! 83: blk = 0; ! 84: writes("\n\n\tRead Block test\n"); ! 85: while (inc != 0) { ! 86: for(blk += inc;;blk += inc) { /* Read 1 block of data */ ! 87: if (vddc_op(RD_DATA,sdev,blk,1,&iob0)==0) ! 88: { blk -= inc; break; } ! 89: } ! 90: inc /= 2; ! 91: } ! 92: if (blk <= 0) { ! 93: writes("\n...Cannot probe "); writes(devpar[sdev+type*5].name); ! 94: writed(sdev); ! 95: v_err = 1; ! 96: return(0); } ! 97: writes("\n"); writes(devpar[sdev+type*5].name); ! 98: writes(" unit "); writed(sdev); writes(" has "); ! 99: writed((blk*1024)/1000); writes(" Kbytes.\n"); ! 100: return(blk); ! 101: ! 102: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.