|
|
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.1 (Berkeley) 6/5/86 ! 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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.