|
|
1.1 ! root 1: /* parms.c - display hard drive parameters per "atparm" in kernel */ ! 2: ! 3: #include <stdio.h> ! 4: #include <l.out.h> ! 5: ! 6: /* ! 7: * For easy referencing. ! 8: */ ! 9: #define at_table nl[0].n_value ! 10: #define plowner nl[1].n_value ! 11: #define NDRIVE 2 ! 12: ! 13: struct dparm_s { ! 14: unsigned short d_ncyl; /* number of cylinders */ ! 15: unsigned char d_nhead; /* number of heads */ ! 16: unsigned short d_rwcc; /* reduced write current cyl */ ! 17: unsigned short d_wpcc; /* write pre-compensation cyl */ ! 18: unsigned char d_eccl; /* max ecc data length */ ! 19: unsigned char d_ctrl; /* control byte */ ! 20: unsigned char d_fill2[3]; ! 21: unsigned short d_landc; /* landing zone cylinder */ ! 22: unsigned char d_nspt; /* number of sectors per track */ ! 23: unsigned char d_fill3; ! 24: ! 25: } atparm[ NDRIVE ] = { ! 26: 0 /* Initialized to allow patching */ ! 27: }; ! 28: ! 29: /* ! 30: * Table for namelist. ! 31: */ ! 32: struct nlist nl[] ={ ! 33: "atparm_", 0, 0, ! 34: "" ! 35: }; ! 36: ! 37: /* ! 38: * Symbols. ! 39: */ ! 40: char *kfile; /* Kernel data memory file */ ! 41: char *nfile; /* Namelist file */ ! 42: int kfd; /* Kernel memory file descriptor */ ! 43: ! 44: main(argc, argv) ! 45: char *argv[]; ! 46: { ! 47: register int i; ! 48: register char *cp; ! 49: ! 50: initialise(); ! 51: for (i=1; i<argc; i++) { ! 52: for (cp=&argv[i][0]; *cp; cp++) { ! 53: switch (*cp) { ! 54: case '-': ! 55: continue; ! 56: case 'c': ! 57: if (++i >= argc) ! 58: usage(); ! 59: nfile = argv[i]; ! 60: continue; ! 61: default: ! 62: usage(); ! 63: } ! 64: } ! 65: } ! 66: execute(); ! 67: exit(0); ! 68: } ! 69: ! 70: /* ! 71: * Initialise. ! 72: */ ! 73: initialise() ! 74: { ! 75: nfile = "/coherent"; ! 76: kfile = "/dev/kmem"; ! 77: } ! 78: ! 79: /* ! 80: * Print out usage. ! 81: */ ! 82: usage() ! 83: { ! 84: panic("Usage: parms [-][c kernel_file]"); ! 85: } ! 86: ! 87: /* ! 88: * Display parameters ! 89: */ ! 90: execute() ! 91: { ! 92: int dr; ! 93: ! 94: nlist(nfile, nl); ! 95: if (nl[0].n_type == 0) ! 96: panic("Bad namelist file %s", nfile); ! 97: if ((kfd = open(kfile, 0)) < 0) ! 98: panic("Cannot open %s", kfile); ! 99: ! 100: kread((long)at_table, atparm, sizeof(atparm)); ! 101: printf("Hard drive parameters as stored in \"at\" driver:\n"); ! 102: for (dr = 0; dr < NDRIVE; dr++) { ! 103: printf("drive %d cyl=%4d hd=%2d spt=%2d ctrl=%02x\n", ! 104: dr, atparm[dr].d_ncyl, atparm[dr].d_nhead, ! 105: atparm[dr].d_nspt, atparm[dr].d_ctrl); ! 106: } ! 107: } ! 108: ! 109: /* ! 110: * Read `n' bytes into the buffer `bp' from kernel memory ! 111: * starting at seek position `s'. ! 112: */ ! 113: kread(s, bp, n) ! 114: long s; ! 115: { ! 116: lseek(kfd, (long)s, 0); ! 117: if (read(kfd, bp, n) != n) ! 118: panic("Kernel memory read error"); ! 119: } ! 120: ! 121: /* ! 122: * Print out an error message and exit. ! 123: */ ! 124: panic(a1) ! 125: char *a1; ! 126: { ! 127: fflush(stdout); ! 128: fprintf(stderr, "%r", &a1); ! 129: fprintf(stderr, "\n"); ! 130: exit(1); ! 131: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.