xref: /original-bsd/sys/vax/stand/drtest.c (revision 1aa52444)
1 /*
2  * Copyright (c) 1982, 1986 Regents of the University of California.
3  * All rights reserved.  The Berkeley software License Agreement
4  * specifies the terms and conditions for redistribution.
5  *
6  *	@(#)drtest.c	7.3 (Berkeley) 03/04/88
7  */
8 
9 /*
10  * Standalone program to test a disk and driver
11  * by reading the disk a track at a time.
12  */
13 #include "param.h"
14 #include "inode.h"
15 #include "fs.h"
16 #include "disklabel.h"
17 
18 #include "saio.h"
19 
20 #define SECTSIZ	512
21 
22 extern	int end;
23 char	*malloc();
24 
25 main()
26 {
27 	register int fd, sector, lastsector, tracksize;
28 	register char *bp;
29 	struct disklabel dl;
30 	int debug;
31 
32 	printf("Testprogram for stand-alone driver\n\n");
33 again:
34 	debug = getdebug("Enable debugging (0=none, 1=bse, 2=ecc, 3=bse+ecc)? ");
35 	if (debug < 0)
36 		debug = 0;
37 	fd = getfile("Device to read?", 2);
38 	ioctl(fd, SAIODEVDATA, &dl);
39 	printf("Device data: #cylinders=%d, #tracks=%d, #sectors=%d\n",
40 		dl.d_ncylinders, dl.d_ntracks, dl.d_nsectors);
41 	ioctl(fd, SAIODEBUG, (char *)debug);
42 	tracksize = dl.d_nsectors * SECTSIZ;
43 	bp = malloc(tracksize);
44 	printf("Reading in %d byte records\n", tracksize);
45 	printf("Start ...make sure drive is on-line\n");
46 	lseek(fd, 0, L_SET);
47 	lastsector = dl.d_ncylinders * dl.d_secpercyl;
48 	for (sector = 0; sector < lastsector; sector += dl.d_nsectors) {
49 		if (sector && (sector % (dl.d_secpercyl * 10)) == 0)
50 			printf("cylinder %d\n", sector/dl.d_secpercyl);
51 		read(fd, bp, tracksize);
52 	}
53 	goto again;
54 	/*NOTREACHED*/
55 }
56 
57 static
58 getdebug(msg)
59 	char *msg;
60 {
61 	char buf[132];
62 
63 	printf("%s", msg);
64 	gets(buf);
65 	return (atoi(buf));
66 }
67 
68 /*
69  * Allocate memory on a page-aligned address.
70  * Round allocated chunk to a page multiple to
71  * ease next request.
72  */
73 static char *
74 malloc(size)
75 	int size;
76 {
77 	static caddr_t last = 0;
78 	char *result;
79 
80 	if (last == 0)
81 		last = (caddr_t)(((int)&end + 511) & ~0x1ff);
82 	size = (size + 511) & ~0x1ff;
83 	result = (char *)last;
84 	last += size;
85 	return (result);
86 }
87