|
|
1.1 root 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.4 (Berkeley) 4/4/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 "param.h"
14: #include "disklabel.h"
15: #include "saio.h"
16:
17: #define SECTSIZ 512
18:
19: extern int end;
20: char *malloc();
21:
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
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 *
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.