|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.