xref: /csrg-svn/sys/vax/stand/drtest.c (revision 14278)
1 /*	drtest.c	6.1	83/07/29	*/
2 
3 /*
4  * Standalone program to test a disk and driver
5  * by reading the disk a track at a time.
6  */
7 #include "../h/param.h"
8 #include "../h/inode.h"
9 #include "../h/fs.h"
10 #include "saio.h"
11 
12 #define SECTSIZ	512
13 
14 extern	int end;
15 char	*malloc();
16 char	*prompt();
17 
18 main()
19 {
20 	char *cp, *bp;
21 	int fd, tracksize, debug;
22 	register int sector, lastsector;
23 	struct st st;
24 
25 	printf("Testprogram for stand-alone driver\n\n");
26 again:
27 	cp = prompt("Enable debugging (1=bse, 2=ecc, 3=bse+ecc)? ");
28 	debug = atoi(cp);
29 	if (debug < 0)
30 		debug = 0;
31 	fd = getdevice();
32 	ioctl(fd, SAIODEVDATA, (char *)&st);
33 	printf("Device data: #cylinders=%d, #tracks=%d, #sectors=%d\n",
34 		st.ncyl, st.ntrak, st.nsect);
35 	ioctl(fd, SAIODEBUG, (char *)debug);
36 	tracksize = st.nsect * SECTSIZ;
37 	bp = malloc(tracksize);
38 	printf("Reading in %d byte records\n", tracksize);
39 	printf("Start ...make sure drive is on-line\n");
40 	lseek(fd, 0, 0);
41 	lastsector = st.ncyl * st.nspc;
42 	for (sector = 0; sector < lastsector; sector += st.nsect) {
43 		if (sector && (sector % (st.nspc * 10)) == 0)
44 			printf("cylinder %d\n", sector/st.nspc);
45 		read(fd, bp, tracksize);
46 	}
47 	goto again;
48 }
49 
50 /*
51  * Prompt and verify a device name from the user.
52  */
53 getdevice()
54 {
55 	register char *cp;
56 	register struct devsw *dp;
57 	int fd;
58 
59 top:
60 	cp = prompt("Device to read? ");
61 	if ((fd = open(cp, 2)) < 0) {
62 		printf("Known devices are: ");
63 		for (dp = devsw; dp->dv_name; dp++)
64 			printf("%s ",dp->dv_name);
65 		printf("\n");
66 		goto top;
67 	}
68 	return (fd);
69 }
70 
71 char *
72 prompt(msg)
73 	char *msg;
74 {
75 	static char buf[132];
76 
77 	printf("%s", msg);
78 	gets(buf);
79 	return (buf);
80 }
81 
82 /*
83  * Allocate memory on a page-aligned address.
84  * Round allocated chunk to a page multiple to
85  * ease next request.
86  */
87 char *
88 malloc(size)
89 	int size;
90 {
91 	char *result;
92 	static caddr_t last = 0;
93 
94 	if (last == 0)
95 		last = (caddr_t)(((int)&end + 511) & ~0x1ff);
96 	size = (size + 511) & ~0x1ff;
97 	result = (char *)last;
98 	last += size;
99 	return (result);
100 }
101