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