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.5 (Berkeley) 12/16/90
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 "sys/param.h"
14 #include "sys/disklabel.h"
15 #include "stand/saio.h"
16
17 #define SECTSIZ 512
18
19 extern int end;
20 char *malloc();
21
main()22 main()
23 {
24 register int fd, sector, lastsector, tracksize;
25 register char *bp;
26 struct disklabel dl;
27 int debug;
28
29 printf("Testprogram for stand-alone driver\n\n");
30 again:
31 debug = getdebug("Enable debugging (0=none, 1=bse, 2=ecc, 3=bse+ecc)? ");
32 if (debug < 0)
33 debug = 0;
34 fd = getfile("Device to read?", 2);
35 ioctl(fd, SAIODEVDATA, &dl);
36 printf("Device data: #cylinders=%d, #tracks=%d, #sectors=%d\n",
37 dl.d_ncylinders, dl.d_ntracks, dl.d_nsectors);
38 ioctl(fd, SAIODEBUG, (char *)debug);
39 tracksize = dl.d_nsectors * SECTSIZ;
40 bp = malloc(tracksize);
41 printf("Reading in %d byte records\n", tracksize);
42 printf("Start ...make sure drive is on-line\n");
43 lseek(fd, 0, L_SET);
44 lastsector = dl.d_ncylinders * dl.d_secpercyl;
45 for (sector = 0; sector < lastsector; sector += dl.d_nsectors) {
46 if (sector && (sector % (dl.d_secpercyl * 10)) == 0)
47 printf("cylinder %d\n", sector/dl.d_secpercyl);
48 read(fd, bp, tracksize);
49 }
50 goto again;
51 /*NOTREACHED*/
52 }
53
54 static
getdebug(msg)55 getdebug(msg)
56 char *msg;
57 {
58 char buf[132];
59
60 printf("%s", msg);
61 gets(buf);
62 return (atoi(buf));
63 }
64
65 /*
66 * Allocate memory on a page-aligned address.
67 * Round allocated chunk to a page multiple to
68 * ease next request.
69 */
70 static char *
malloc(size)71 malloc(size)
72 int size;
73 {
74 static caddr_t last = 0;
75 char *result;
76
77 if (last == 0)
78 last = (caddr_t)(((int)&end + 511) & ~0x1ff);
79 size = (size + 511) & ~0x1ff;
80 result = (char *)last;
81 last += size;
82 return (result);
83 }
84