File:  [Power 6/32 Unix Tahoe 4.2BSD] / cci / d / ioex / u_ex.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Sun Jul 28 12:24:19 2019 UTC (6 years, 11 months ago) by root
Branches: bsd, MAIN
CVS tags: v12b, v121, HEAD
Power 6/32 Unix version 1.2b

#include "udc.h"
#define SCRATCH		CMD_R
#define TSTBLK		5010

extern long Probe, iob0, iob1, iob2, iob3, iob4;
long u_err;

/*	Routine to exercise UDC
*/
u_ex()
{
	Probe = 1;
	u_probe(CMD_R);
	u_probe(CMD_F);
	Probe = 0;
 	u_ex1(1);
 	u_ex1(2);
 	u_ex1(3);
	if (!u_err) writes("\nUDC passed..\n");
		else  writes("\nUDC failed..\n");
}

u_ex1(factor)
long factor;
{	register long ix, pat, *sptr, *dptr, blk, loop;
	unsigned short *s, *d;
	char sdev;

	sdev = SCRATCH;		/* Play on the removable */
	blk = TSTBLK;		/* Read write test from block no. */

	pat = 0xababab00;	/* Pattern */
	sptr = &iob0;		/* Source buffer */
	dptr = &iob3;		/* Destination buffer */

for(u_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 (disk_rw(WRITE,sdev,blk,factor,&iob0)==0) { u_err=1; return(0); }

	/* Read 1 block of data */
	if (disk_rw(READ,sdev,blk,factor,&iob3)==0) { u_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]);
			u_err = 1;
			}	
		}
	if (u_err) loop = 0; 	/* If error then loop forever */
	}
}


/*	routine to probe CMD disk 
*/
u_probe(sdev)
char sdev;
{	register long *dptr, blk, inc;

	inc = 200;
	blk = 0;
	while (inc != 1) {
		for(;;blk += inc)	{	/* Read 1 block (1K) of data */
			if (disk_rw(READ,sdev,blk,1,&iob0)==0) 
				{ blk -= inc; break; }
			}
		inc /= 2;
		}
	if (sdev == CMD_F) writes("\n** CMD fixed has ");
		else  writes("\n** CMD removable has ");
	writed(blk); writes(" Kbytes\n");

}

unix.superglobalmegacorp.com

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