|
|
Power 6/32 Unix version 1.2b
#include "vddc.h"
extern long Probe, iob0, iob1, iob2, iob3, iob4;
extern struct DEVPAR devpar[];
long v_err;
long format_flag = 0;
/* Routine to exercise VDDC
*/
vddc_ex()
{ register long unit, last_blk, nodr;
writes("\n\t** VDDC test **\n");
format_flag = 0;
for (nodr=unit=0;devpar[unit].nocyl;unit++) {
if (devpar[unit].alive) {
nodr++;
if (format_flag) vddc_ctlr(FORMAT,unit);
Probe = 1;
last_blk = v_probe(unit);
Probe = 0;
if ( last_blk > 0) {
v_ex1(1,unit,last_blk);
v_ex1(2,unit,last_blk-2);
v_ex1(3,unit,last_blk-3); }
}
}
if (!nodr) {
writes("\nNo drive available...");
return; }
if (!v_err) writes("\nVDDC passed..\n");
else writes("\nVDDC failed..\n");
}
v_ex1(factor,sdev,blk)
long factor, blk;
char sdev;
{ register long ix, pat, *sptr, *dptr, loop;
unsigned short *s, *d;
pat = 0xababab00; /* Pattern */
sptr = &iob0; /* Source buffer */
dptr = &iob3; /* Destination buffer */
for(v_err=loop=0;loop<40;loop++)
{
/* initialize pattern in source buffer */
for (ix=0; ix<(BLKSIZ/4)*factor; ix++) {
sptr[ix] = pat + ix; /* init. pattern in source buffer */
dptr[ix] = 0; /* Clear destination buffer */
}
/* Write 1 block of data */
if (vddc_op(WR_COMP,sdev,blk,factor,&iob0)==0) { v_err=1; return(0); }
/* Read 1 block of data */
if (vddc_op(RD_DATA,sdev,blk,factor,&iob3)==0) { v_err=1; return(0); }
s = (unsigned short *)&iob0; /* Source buffer */
d = (unsigned short *)&iob3; /* Destination buffer */
for (ix=0; ix<(BLKSIZ/2)*factor; ix++) {
if (s[ix] != d[ix]) {
writes("\nExpected ");
writeh(s[ix] & 0xffff);
writes(" , actual "); writeh(d[ix] & 0xffff);
writes(", address "); writeh(&d[ix]);
v_err = 1;
}
}
if (v_err) loop = 0; /* If error then loop forever */
}
}
/* routine to probe VDDC disk
*/
v_probe(sdev)
char sdev;
{ register long *dptr, blk, inc;
inc = 2000;
blk = 0;
while (inc != 0) {
for(blk += inc;;blk += inc) { /* Read 1 block of data */
if (vddc_op(RD_DATA,sdev,blk,1,&iob0)==0)
{ blk -= inc; break; }
}
inc /= 2;
}
if (blk <= 0) {
writes("\nCannot probe "); writes(devpar[sdev].name);
return(0); }
writes("\n"); writes(devpar[sdev].name); writes(" has ");
writed((blk*1024)/1000); writes(" Kbytes.\n");
return(blk);
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.