|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1988 University of Utah. ! 3: * Copyright (c) 1982, 1990 The Regents of the University of California. ! 4: * All rights reserved. ! 5: * ! 6: * This code is derived from software contributed to Berkeley by ! 7: * the Systems Programming Group of the University of Utah Computer ! 8: * Science Department. ! 9: * ! 10: * Redistribution is only permitted until one year after the first shipment ! 11: * of 4.4BSD by the Regents. Otherwise, redistribution and use in source and ! 12: * binary forms are permitted provided that: (1) source distributions retain ! 13: * this entire copyright notice and comment, and (2) distributions including ! 14: * binaries display the following acknowledgement: This product includes ! 15: * software developed by the University of California, Berkeley and its ! 16: * contributors'' in the documentation or other materials provided with the ! 17: * distribution and in all advertising materials mentioning features or use ! 18: * of this software. Neither the name of the University nor the names of ! 19: * its contributors may be used to endorse or promote products derived from ! 20: * this software without specific prior written permission. ! 21: * THIS SOFTWARE IS PROVIDED AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED ! 22: * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF ! 23: * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 24: * ! 25: * from: Utah $Hdr: rdreg.h 1.14 89/02/27$ ! 26: * ! 27: * @(#)rdreg.h 7.1 (Berkeley) 5/8/90 ! 28: */ ! 29: ! 30: struct rd_iocmd { ! 31: char c_pad; ! 32: char c_unit; ! 33: char c_volume; ! 34: char c_saddr; ! 35: short c_hiaddr; ! 36: long c_addr; ! 37: char c_nop2; ! 38: char c_slen; ! 39: long c_len; ! 40: char c_cmd; ! 41: char c_pad2; ! 42: }; ! 43: ! 44: struct rd_rscmd { ! 45: char c_unit; ! 46: char c_sram; ! 47: char c_ram; ! 48: char c_cmd; ! 49: }; ! 50: ! 51: struct rd_stat { ! 52: char c_vu; ! 53: char c_pend; ! 54: short c_ref; ! 55: short c_fef; ! 56: short c_aef; ! 57: short c_ief; ! 58: union { ! 59: char cu_raw[10]; ! 60: struct { ! 61: short cu_msw; ! 62: long cu_lsl; ! 63: } cu_sva; ! 64: struct { ! 65: long cu_cyhd; ! 66: short cu_sect; ! 67: } cu_tva; ! 68: } c_pf; ! 69: }; ! 70: #define c_raw c_pf.cu_raw ! 71: #define c_blk c_pf.cu_sva.cu_lsl /* for now */ ! 72: #define c_tva c_pf.cu_tva ! 73: ! 74: struct rd_ssmcmd { ! 75: char c_unit; ! 76: char c_cmd; ! 77: short c_refm; ! 78: short c_fefm; ! 79: short c_aefm; ! 80: short c_iefm; ! 81: }; ! 82: ! 83: struct rd_srcmd { ! 84: char c_unit; ! 85: char c_nop; ! 86: char c_cmd; ! 87: char c_param; ! 88: }; ! 89: ! 90: struct rd_clearcmd { ! 91: char c_unit; ! 92: char c_cmd; ! 93: }; ! 94: ! 95: struct rd_describe { ! 96: u_int d_iuw:16, /* controller: installed unit word */ ! 97: d_cmaxxfr:16, /* controller: max transfer rate (Kb) */ ! 98: d_ctype:8, /* controller: controller type */ ! 99: d_utype:8, /* unit: unit type */ ! 100: d_name:24, /* unit: name (6 BCD digits) */ ! 101: d_sectsize:16, /* unit: # of bytes per block (sector) */ ! 102: d_blkbuf:8, /* unit: # of blocks which can be buffered */ ! 103: d_burstsize:8, /* unit: recommended burst size */ ! 104: d_blocktime:16, /* unit: block time (u-sec) */ ! 105: d_uavexfr:16, /* unit: average transfer rate (Kb) */ ! 106: d_retry:16, /* unit: optimal retry time (1/100-sec) */ ! 107: d_access:16, /* unit: access time param (1/100-sec) */ ! 108: d_maxint:8, /* unit: maximum interleave */ ! 109: d_fvbyte:8, /* unit: fixed volume byte */ ! 110: d_rvbyte:8, /* unit: removeable volume byte */ ! 111: d_maxcyl:24, /* volume: maximum cylinder */ ! 112: d_maxhead:8, /* volume: maximum head */ ! 113: d_maxsect:16, /* volume: maximum sector on track */ ! 114: d_maxvsecth:16, /* volume: maximum sector on volume (MSW) */ ! 115: d_maxvsectl:32, /* volume: maximum sector on volume (LSWs) */ ! 116: d_interleave:8; /* volume: current interleave */ ! 117: }; ! 118: ! 119: /* indicies into rdinfo -- order is arbitrary */ ! 120: #define RD7945A 0 ! 121: #define RD9134D 1 ! 122: #define RD9122S 2 ! 123: #define RD7912P 3 ! 124: #define RD7914P 4 ! 125: #define RD7958A 5 ! 126: #define RD7957A 6 ! 127: #define RD7933H 7 ! 128: #define RD9134L 8 ! 129: #define RD7936H 9 ! 130: #define RD7937H 10 ! 131: #define RD7914CT 11 ! 132: #define RD7946A 12 ! 133: #define RD9122D 13 ! 134: #define RD7957B 14 ! 135: #define RD7958B 15 ! 136: #define RD7959B 16 ! 137: ! 138: /* HW ids */ ! 139: #define RD7946AID 0x220 /* also 7945A */ ! 140: #define RD9134DID 0x221 /* also 9122S */ ! 141: #define RD9134LID 0x222 /* also 9122D */ ! 142: #define RD7912PID 0x209 ! 143: #define RD7914CTID 0x20A ! 144: #define RD7914PID 0x20B ! 145: #define RD7958AID 0x22B ! 146: #define RD7957AID 0x22A ! 147: #define RD7933HID 0x212 ! 148: #define RD7936HID 0x213 /* just guessing -- as of yet unknown */ ! 149: #define RD7937HID 0x214 ! 150: #define RD7957BID 0x22C /* another guess based on 7958B */ ! 151: #define RD7958BID 0x22D ! 152: #define RD7959BID 0x22E /* another guess based on 7958B */ ! 153: ! 154: #define NRD7945ABPT (32 >> (DEV_BSHIFT-8)) ! 155: #define NRD7945ATRK 7 ! 156: #define NRD9134DBPT (32 >> (DEV_BSHIFT-8)) ! 157: #define NRD9134DTRK 6 ! 158: #define NRD9122SBPT (16 >> (DEV_BSHIFT-8)) ! 159: #define NRD9122STRK 2 ! 160: #define NRD7912PBPT (64 >> (DEV_BSHIFT-8)) ! 161: #define NRD7912PTRK 7 ! 162: #define NRD7914PBPT (64 >> (DEV_BSHIFT-8)) ! 163: #define NRD7914PTRK 7 ! 164: #define NRD7933HBPT (92 >> (DEV_BSHIFT-8)) ! 165: #define NRD7933HTRK 13 ! 166: #define NRD9134LBPT (32 >> (DEV_BSHIFT-8)) ! 167: #define NRD9134LTRK 5 ! 168: ! 169: /* ! 170: * Several HP drives have an odd number of 256 byte sectors per track. ! 171: * This makes it rather difficult to break them into 512 and 1024 byte blocks. ! 172: * So...we just do like HPUX and don't bother to respect hardware track/head ! 173: * boundries -- we just mold the disk so that we use the entire capacity. ! 174: * HPUX also sometimes doen't abide by cylinder boundries, we attempt to ! 175: * whenever possible. ! 176: * ! 177: * DISK REAL (256 BPS) HPUX (1024 BPS) BSD (512 BPS) ! 178: * SPT x HD x CYL SPT x HD x CYL SPT x HD x CYL ! 179: * ----- --------------- --------------- -------------- ! 180: * 7936: 123 x 7 x 1396 25 x 7 x 1716 123 x 7 x 698 ! 181: * 7937: 123 x 13 x 1396 25 x 16 x 1395 123 x 13 x 698 ! 182: * ! 183: * 7957A: 63 x 5 x 1013 11 x 7 x 1036 22 x 7 x 1036 ! 184: * 7958A: 63 x 8 x 1013 21 x 6 x 1013 36 x 7 x 1013 ! 185: * ! 186: * 7957B: 63 x 4 x 1269 9 x 7 x 1269 18 x 7 x 1269 ! 187: * 7958B: 63 x 6 x 1572 21 x 9 x 786 42 x 9 x 786 ! 188: * 7959B: 63 x 12 x 1572 21 x 9 x 1572 42 x 9 x 1572 ! 189: */ ! 190: #if DEV_BSIZE == 512 ! 191: # define NRD7936HBPT 123 ! 192: # define NRD7936HTRK 7 ! 193: # define NRD7937HBPT 123 ! 194: # define NRD7937HTRK 13 ! 195: # define NRD7957ABPT 22 ! 196: # define NRD7957ATRK 7 ! 197: # define NRD7958ABPT 36 ! 198: # define NRD7958ATRK 7 ! 199: # define NRD7957BBPT 18 ! 200: # define NRD7957BTRK 7 ! 201: # define NRD7958BBPT 42 ! 202: # define NRD7958BTRK 9 ! 203: # define NRD7959BBPT 42 ! 204: # define NRD7959BTRK 9 ! 205: #endif ! 206: #if DEV_BSIZE == 1024 ! 207: # define NRD7957ABPT 11 ! 208: # define NRD7957ATRK 7 ! 209: # define NRD7958ABPT 21 ! 210: # define NRD7958ATRK 6 ! 211: # define NRD7957BBPT 9 ! 212: # define NRD7957BTRK 7 ! 213: # define NRD7958BBPT 21 ! 214: # define NRD7958BTRK 9 ! 215: # define NRD7959BBPT 21 ! 216: # define NRD7959BTRK 9 ! 217: #endif ! 218: ! 219: /* controller "unit" number */ ! 220: #define RDCTLR 15 ! 221: ! 222: /* convert 512 byte count into DEV_BSIZE count */ ! 223: #define RDSZ(x) ((x) >> (DEV_BSHIFT-9)) ! 224: ! 225: /* convert block number into sector number and back */ ! 226: #define RDBTOS(x) ((x) << (DEV_BSHIFT-8)) ! 227: #define RDSTOB(x) ((x) >> (DEV_BSHIFT-8)) ! 228: ! 229: /* extract cyl/head/sect info from three-vector address */ ! 230: #define RDCYL(tva) ((u_long)(tva).cu_cyhd >> 8) ! 231: #define RDHEAD(tva) ((tva).cu_cyhd & 0xFF) ! 232: #define RDSECT(tva) ((tva).cu_sect) ! 233: ! 234: #define REF_MASK 0x0 ! 235: #define FEF_MASK 0x0 ! 236: #define AEF_MASK 0x0 ! 237: #define IEF_MASK 0xF970 ! 238: ! 239: #define FEF_CU 0x4000 /* cross-unit */ ! 240: #define FEF_DR 0x0080 /* diagnostic result */ ! 241: #define FEF_IMR 0x0008 /* internal maintenance release */ ! 242: #define FEF_PF 0x0002 /* power fail */ ! 243: #define FEF_REXMT 0x0001 /* retransmit */ ! 244: #define AEF_UD 0x0040 /* unrecoverable data */ ! 245: #define IEF_RRMASK 0xe000 /* request release bits */ ! 246: #define IEF_MD 0x0020 /* marginal data */ ! 247: #define IEF_RD 0x0010 /* recoverable data */ ! 248: ! 249: #define C_READ 0x00 ! 250: #define C_RAM 0x00 /* single vector (i.e. sector number) */ ! 251: #define C_WRITE 0x02 ! 252: #define C_CLEAR 0x08 ! 253: #define C_STATUS 0x0d ! 254: #define C_SADDR 0x10 ! 255: #define C_SLEN 0x18 ! 256: #define C_SUNIT(x) (0x20 | (x)) ! 257: #define C_SVOL(x) (0x40 | (x)) ! 258: #define C_NOP 0x34 ! 259: #define C_DESC 0x35 ! 260: #define C_SREL 0x3b ! 261: #define C_SSM 0x3e ! 262: #define C_SRAM 0x48 ! 263: #define C_REL 0x140 ! 264: ! 265: #define C_CMD 0x05 ! 266: #define C_EXEC 0x0e ! 267: #define C_QSTAT 0x10 ! 268: #define C_TCMD 0x12
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.