141480Smckusick /* 241480Smckusick * Copyright (c) 1988 University of Utah. 3*63151Sbostic * Copyright (c) 1982, 1990, 1993 4*63151Sbostic * The Regents of the University of California. All rights reserved. 541480Smckusick * 641480Smckusick * This code is derived from software contributed to Berkeley by 741480Smckusick * the Systems Programming Group of the University of Utah Computer 841480Smckusick * Science Department. 941480Smckusick * 1041480Smckusick * %sccs.include.redist.c% 1141480Smckusick * 1246681Smckusick * from: Utah $Hdr: rdreg.h 1.2 90/10/12$ 1341480Smckusick * 14*63151Sbostic * @(#)rdreg.h 8.1 (Berkeley) 06/10/93 1541480Smckusick */ 1641480Smckusick 1741480Smckusick struct rd_iocmd { 1841480Smckusick char c_pad; 1941480Smckusick char c_unit; 2041480Smckusick char c_volume; 2141480Smckusick char c_saddr; 2241480Smckusick short c_hiaddr; 2341480Smckusick long c_addr; 2441480Smckusick char c_nop2; 2541480Smckusick char c_slen; 2641480Smckusick long c_len; 2741480Smckusick char c_cmd; 2841480Smckusick char c_pad2; 2941480Smckusick }; 3041480Smckusick 3141480Smckusick struct rd_rscmd { 3241480Smckusick char c_unit; 3341480Smckusick char c_sram; 3441480Smckusick char c_ram; 3541480Smckusick char c_cmd; 3641480Smckusick }; 3741480Smckusick 3841480Smckusick struct rd_stat { 3941480Smckusick char c_vu; 4041480Smckusick char c_pend; 4141480Smckusick short c_ref; 4241480Smckusick short c_fef; 4341480Smckusick short c_aef; 4441480Smckusick short c_ief; 4541480Smckusick union { 4641480Smckusick char cu_raw[10]; 4741480Smckusick struct { 4841480Smckusick short cu_msw; 4941480Smckusick long cu_lsl; 5041480Smckusick } cu_sva; 5141480Smckusick struct { 5241480Smckusick long cu_cyhd; 5341480Smckusick short cu_sect; 5441480Smckusick } cu_tva; 5541480Smckusick } c_pf; 5641480Smckusick }; 5741480Smckusick #define c_raw c_pf.cu_raw 5841480Smckusick #define c_blk c_pf.cu_sva.cu_lsl /* for now */ 5941480Smckusick #define c_tva c_pf.cu_tva 6041480Smckusick 6141480Smckusick struct rd_ssmcmd { 6241480Smckusick char c_unit; 6341480Smckusick char c_cmd; 6441480Smckusick short c_refm; 6541480Smckusick short c_fefm; 6641480Smckusick short c_aefm; 6741480Smckusick short c_iefm; 6841480Smckusick }; 6941480Smckusick 7041480Smckusick struct rd_srcmd { 7141480Smckusick char c_unit; 7241480Smckusick char c_nop; 7341480Smckusick char c_cmd; 7441480Smckusick char c_param; 7541480Smckusick }; 7641480Smckusick 7741480Smckusick struct rd_clearcmd { 7841480Smckusick char c_unit; 7941480Smckusick char c_cmd; 8041480Smckusick }; 8141480Smckusick 8241480Smckusick struct rd_describe { 8341480Smckusick u_int d_iuw:16, /* controller: installed unit word */ 8441480Smckusick d_cmaxxfr:16, /* controller: max transfer rate (Kb) */ 8541480Smckusick d_ctype:8, /* controller: controller type */ 8641480Smckusick d_utype:8, /* unit: unit type */ 8741480Smckusick d_name:24, /* unit: name (6 BCD digits) */ 8841480Smckusick d_sectsize:16, /* unit: # of bytes per block (sector) */ 8941480Smckusick d_blkbuf:8, /* unit: # of blocks which can be buffered */ 9041480Smckusick d_burstsize:8, /* unit: recommended burst size */ 9141480Smckusick d_blocktime:16, /* unit: block time (u-sec) */ 9241480Smckusick d_uavexfr:16, /* unit: average transfer rate (Kb) */ 9341480Smckusick d_retry:16, /* unit: optimal retry time (1/100-sec) */ 9441480Smckusick d_access:16, /* unit: access time param (1/100-sec) */ 9541480Smckusick d_maxint:8, /* unit: maximum interleave */ 9641480Smckusick d_fvbyte:8, /* unit: fixed volume byte */ 9741480Smckusick d_rvbyte:8, /* unit: removeable volume byte */ 9841480Smckusick d_maxcyl:24, /* volume: maximum cylinder */ 9941480Smckusick d_maxhead:8, /* volume: maximum head */ 10041480Smckusick d_maxsect:16, /* volume: maximum sector on track */ 10141480Smckusick d_maxvsecth:16, /* volume: maximum sector on volume (MSW) */ 10241480Smckusick d_maxvsectl:32, /* volume: maximum sector on volume (LSWs) */ 10341480Smckusick d_interleave:8; /* volume: current interleave */ 10441480Smckusick }; 10541480Smckusick 10657327Shibler /* HW ids */ 10757327Shibler #define RD7946AID 0x220 /* also 7945A */ 10857327Shibler #define RD9134DID 0x221 /* also 9122S */ 10957327Shibler #define RD9134LID 0x222 /* also 9122D */ 11057327Shibler #define RD7912PID 0x209 11157327Shibler #define RD7914CTID 0x20A 11257327Shibler #define RD7914PID 0x20B 11357327Shibler #define RD7958AID 0x22B 11457327Shibler #define RD7957AID 0x22A 11557327Shibler #define RD7933HID 0x212 11657327Shibler #define RD7936HID 0x213 /* just guessing -- as of yet unknown */ 11757327Shibler #define RD7937HID 0x214 11857327Shibler #define RD7957BID 0x22C /* another guess based on 7958B */ 11957327Shibler #define RD7958BID 0x22D 12057327Shibler #define RD7959BID 0x22E /* another guess based on 7958B */ 12157327Shibler #define RD2200AID 0x22F 12257327Shibler #define RD2203AID 0x230 /* yet another guess */ 12357327Shibler 12457327Shibler /* SW ids -- indicies into rdidentinfo, order is arbitrary */ 12541480Smckusick #define RD7945A 0 12641480Smckusick #define RD9134D 1 12741480Smckusick #define RD9122S 2 12841480Smckusick #define RD7912P 3 12941480Smckusick #define RD7914P 4 13041480Smckusick #define RD7958A 5 13141480Smckusick #define RD7957A 6 13241480Smckusick #define RD7933H 7 13341480Smckusick #define RD9134L 8 13441480Smckusick #define RD7936H 9 13541480Smckusick #define RD7937H 10 13641480Smckusick #define RD7914CT 11 13741480Smckusick #define RD7946A 12 13841480Smckusick #define RD9122D 13 13941480Smckusick #define RD7957B 14 14041480Smckusick #define RD7958B 15 14141480Smckusick #define RD7959B 16 14241480Smckusick 14357327Shibler #define NRD7945ABPT 16 14441480Smckusick #define NRD7945ATRK 7 14557327Shibler #define NRD9134DBPT 16 14641480Smckusick #define NRD9134DTRK 6 14757327Shibler #define NRD9122SBPT 8 14841480Smckusick #define NRD9122STRK 2 14957327Shibler #define NRD7912PBPT 32 15041480Smckusick #define NRD7912PTRK 7 15157327Shibler #define NRD7914PBPT 32 15241480Smckusick #define NRD7914PTRK 7 15357327Shibler #define NRD7933HBPT 46 15441480Smckusick #define NRD7933HTRK 13 15557327Shibler #define NRD9134LBPT 16 15641480Smckusick #define NRD9134LTRK 5 15741480Smckusick 15841480Smckusick /* 15941480Smckusick * Several HP drives have an odd number of 256 byte sectors per track. 16041480Smckusick * This makes it rather difficult to break them into 512 and 1024 byte blocks. 16141480Smckusick * So...we just do like HPUX and don't bother to respect hardware track/head 16241480Smckusick * boundries -- we just mold the disk so that we use the entire capacity. 16341480Smckusick * HPUX also sometimes doen't abide by cylinder boundries, we attempt to 16441480Smckusick * whenever possible. 16541480Smckusick * 16641480Smckusick * DISK REAL (256 BPS) HPUX (1024 BPS) BSD (512 BPS) 16741480Smckusick * SPT x HD x CYL SPT x HD x CYL SPT x HD x CYL 16841480Smckusick * ----- --------------- --------------- -------------- 16946681Smckusick * 7936: 123 x 7 x 1396 25 x 7 x 1716 123 x 7 x 698 17046681Smckusick * 7937: 123 x 13 x 1396 25 x 16 x 1395 123 x 13 x 698 17141480Smckusick * 17246681Smckusick * 7957A: 63 x 5 x 1013 11 x 7 x 1036 22 x 7 x 1036 17346681Smckusick * 7958A: 63 x 8 x 1013 21 x 6 x 1013 36 x 7 x 1013 17441480Smckusick * 17546681Smckusick * 7957B: 63 x 4 x 1269 9 x 7 x 1269 18 x 7 x 1269 17646681Smckusick * 7958B: 63 x 6 x 1572 21 x 9 x 786 42 x 9 x 786 17746681Smckusick * 7959B: 63 x 12 x 1572 21 x 9 x 1572 42 x 9 x 1572 17846681Smckusick * 17946681Smckusick * 2200A: 113 x 8 x 1449 113 x 2 x 1449 113 x 4 x 1449 18046681Smckusick * 2203A: 113 x 16 x 1449 113 x 4 x 1449 113 x 8 x 1449 18141480Smckusick */ 18257327Shibler #define NRD7936HBPT 123 18357327Shibler #define NRD7936HTRK 7 18457327Shibler #define NRD7937HBPT 123 18557327Shibler #define NRD7937HTRK 13 18657327Shibler #define NRD7957ABPT 22 18757327Shibler #define NRD7957ATRK 7 18857327Shibler #define NRD7958ABPT 36 18957327Shibler #define NRD7958ATRK 7 19057327Shibler #define NRD7957BBPT 18 19157327Shibler #define NRD7957BTRK 7 19257327Shibler #define NRD7958BBPT 42 19357327Shibler #define NRD7958BTRK 9 19457327Shibler #define NRD7959BBPT 42 19557327Shibler #define NRD7959BTRK 9 19657327Shibler #define NRD2200ABPT 113 19757327Shibler #define NRD2200ATRK 4 19857327Shibler #define NRD2203ABPT 113 19957327Shibler #define NRD2203ATRK 8 20041480Smckusick 20141480Smckusick /* controller "unit" number */ 20241480Smckusick #define RDCTLR 15 20341480Smckusick 20441480Smckusick /* convert 512 byte count into DEV_BSIZE count */ 20541480Smckusick #define RDSZ(x) ((x) >> (DEV_BSHIFT-9)) 20641480Smckusick 20741480Smckusick /* convert block number into sector number and back */ 20841480Smckusick #define RDBTOS(x) ((x) << (DEV_BSHIFT-8)) 20941480Smckusick #define RDSTOB(x) ((x) >> (DEV_BSHIFT-8)) 21041480Smckusick 21141480Smckusick /* extract cyl/head/sect info from three-vector address */ 21241480Smckusick #define RDCYL(tva) ((u_long)(tva).cu_cyhd >> 8) 21341480Smckusick #define RDHEAD(tva) ((tva).cu_cyhd & 0xFF) 21441480Smckusick #define RDSECT(tva) ((tva).cu_sect) 21541480Smckusick 21641480Smckusick #define REF_MASK 0x0 21741480Smckusick #define FEF_MASK 0x0 21841480Smckusick #define AEF_MASK 0x0 21941480Smckusick #define IEF_MASK 0xF970 22041480Smckusick 22141480Smckusick #define FEF_CU 0x4000 /* cross-unit */ 22241480Smckusick #define FEF_DR 0x0080 /* diagnostic result */ 22341480Smckusick #define FEF_IMR 0x0008 /* internal maintenance release */ 22441480Smckusick #define FEF_PF 0x0002 /* power fail */ 22541480Smckusick #define FEF_REXMT 0x0001 /* retransmit */ 22641480Smckusick #define AEF_UD 0x0040 /* unrecoverable data */ 22741480Smckusick #define IEF_RRMASK 0xe000 /* request release bits */ 22841480Smckusick #define IEF_MD 0x0020 /* marginal data */ 22941480Smckusick #define IEF_RD 0x0010 /* recoverable data */ 23041480Smckusick 23141480Smckusick #define C_READ 0x00 23241480Smckusick #define C_RAM 0x00 /* single vector (i.e. sector number) */ 23341480Smckusick #define C_WRITE 0x02 23441480Smckusick #define C_CLEAR 0x08 23541480Smckusick #define C_STATUS 0x0d 23641480Smckusick #define C_SADDR 0x10 23741480Smckusick #define C_SLEN 0x18 23841480Smckusick #define C_SUNIT(x) (0x20 | (x)) 23941480Smckusick #define C_SVOL(x) (0x40 | (x)) 24041480Smckusick #define C_NOP 0x34 24141480Smckusick #define C_DESC 0x35 24241480Smckusick #define C_SREL 0x3b 24341480Smckusick #define C_SSM 0x3e 24441480Smckusick #define C_SRAM 0x48 24541480Smckusick #define C_REL 0x140 24641480Smckusick 24741480Smckusick #define C_CMD 0x05 24841480Smckusick #define C_EXEC 0x0e 24941480Smckusick #define C_QSTAT 0x10 25041480Smckusick #define C_TCMD 0x12 251