1 /* 2 * Copyright (c) 1982 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 6.2 (Berkeley) 06/08/85 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 "../h/param.h" 14 #include "../h/inode.h" 15 #include "../h/fs.h" 16 #include "saio.h" 17 18 #define SECTSIZ 512 19 20 extern int end; 21 char *malloc(); 22 char *prompt(); 23 24 main() 25 { 26 char *cp, *bp; 27 int fd, tracksize, debug; 28 register int sector, lastsector; 29 struct st st; 30 31 printf("Testprogram for stand-alone driver\n\n"); 32 again: 33 cp = prompt("Enable debugging (1=bse, 2=ecc, 3=bse+ecc)? "); 34 debug = atoi(cp); 35 if (debug < 0) 36 debug = 0; 37 fd = getdevice(); 38 ioctl(fd, SAIODEVDATA, (char *)&st); 39 printf("Device data: #cylinders=%d, #tracks=%d, #sectors=%d\n", 40 st.ncyl, st.ntrak, st.nsect); 41 ioctl(fd, SAIODEBUG, (char *)debug); 42 tracksize = st.nsect * 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, 0); 47 lastsector = st.ncyl * st.nspc; 48 for (sector = 0; sector < lastsector; sector += st.nsect) { 49 if (sector && (sector % (st.nspc * 10)) == 0) 50 printf("cylinder %d\n", sector/st.nspc); 51 read(fd, bp, tracksize); 52 } 53 goto again; 54 } 55 56 /* 57 * Prompt and verify a device name from the user. 58 */ 59 getdevice() 60 { 61 register char *cp; 62 register struct devsw *dp; 63 int fd; 64 65 top: 66 cp = prompt("Device to read? "); 67 if ((fd = open(cp, 2)) < 0) { 68 printf("Known devices are: "); 69 for (dp = devsw; dp->dv_name; dp++) 70 printf("%s ",dp->dv_name); 71 printf("\n"); 72 goto top; 73 } 74 return (fd); 75 } 76 77 char * 78 prompt(msg) 79 char *msg; 80 { 81 static char buf[132]; 82 83 printf("%s", msg); 84 gets(buf); 85 return (buf); 86 } 87 88 /* 89 * Allocate memory on a page-aligned address. 90 * Round allocated chunk to a page multiple to 91 * ease next request. 92 */ 93 char * 94 malloc(size) 95 int size; 96 { 97 char *result; 98 static caddr_t last = 0; 99 100 if (last == 0) 101 last = (caddr_t)(((int)&end + 511) & ~0x1ff); 102 size = (size + 511) & ~0x1ff; 103 result = (char *)last; 104 last += size; 105 return (result); 106 } 107