1*52d90fb8Sandvar /* $NetBSD: mtreg.h,v 1.7 2023/08/19 17:32:02 andvar Exp $ */ 20f968376Sgmcgarry 30f968376Sgmcgarry /* 40f968376Sgmcgarry * Copyright (c) 1992, The University of Utah and 50f968376Sgmcgarry * the Computer Systems Laboratory at the University of Utah (CSL). 60f968376Sgmcgarry * All rights reserved. 70f968376Sgmcgarry * 80f968376Sgmcgarry * Permission to use, copy, modify and distribute this software is hereby 90f968376Sgmcgarry * granted provided that (1) source code retains these copyright, permission, 100f968376Sgmcgarry * and disclaimer notices, and (2) redistributions including binaries 110f968376Sgmcgarry * reproduce the notices in supporting documentation, and (3) all advertising 120f968376Sgmcgarry * materials mentioning features or use of this software display the following 130f968376Sgmcgarry * acknowledgement: ``This product includes software developed by the 140f968376Sgmcgarry * Computer Systems Laboratory at the University of Utah.'' 150f968376Sgmcgarry * 160f968376Sgmcgarry * THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF THIS SOFTWARE IN ITS "AS 170f968376Sgmcgarry * IS" CONDITION. THE UNIVERSITY OF UTAH AND CSL DISCLAIM ANY LIABILITY OF 180f968376Sgmcgarry * ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. 190f968376Sgmcgarry * 200f968376Sgmcgarry * CSL requests users of this software to return to csl-dist@cs.utah.edu any 210f968376Sgmcgarry * improvements that they make and grant CSL redistribution rights. 220f968376Sgmcgarry * 230f968376Sgmcgarry * Utah $Hdr: mtreg.h 1.4 95/09/12$ 240f968376Sgmcgarry */ 250f968376Sgmcgarry 260f968376Sgmcgarry /* @(#)mtreg.h 3.4 90/07/10 mt Xinu 270f968376Sgmcgarry * 280f968376Sgmcgarry * Hewlett-Packard 7974, 7978, 7979 and 7980 HPIB Mag-Tape declarations. 290f968376Sgmcgarry */ 300f968376Sgmcgarry 310f968376Sgmcgarry /* 320f968376Sgmcgarry * Hardware Id's 330f968376Sgmcgarry */ 340f968376Sgmcgarry 350f968376Sgmcgarry #define MT7974AID 0x174 360f968376Sgmcgarry #define MT7978ID 0x178 370f968376Sgmcgarry #define MT7979AID 0x179 380f968376Sgmcgarry #define MT7980ID 0x180 390f968376Sgmcgarry 400f968376Sgmcgarry /* convert bytes to 1k tape block and back */ 410f968376Sgmcgarry #define CTBTOK(x) ((x) >> 10) 420f968376Sgmcgarry #define CTKTOB(x) ((x) << 10) 430f968376Sgmcgarry 440f968376Sgmcgarry /* 450f968376Sgmcgarry * Listen Secondary Commands 460f968376Sgmcgarry */ 470f968376Sgmcgarry 480f968376Sgmcgarry #define MTL_WRITE 0 /* write execute */ 490f968376Sgmcgarry #define MTL_TCMD 1 /* tape command */ 500f968376Sgmcgarry #define MTL_DIAG 4 /* download diagnostic */ 510f968376Sgmcgarry #define MTL_FUP 6 /* write firmware update */ 520f968376Sgmcgarry #define MTL_ECMD 7 /* end command */ 530f968376Sgmcgarry #define MTL_DCL 16 /* amigo device clear */ 540f968376Sgmcgarry #define MTL_CCRC 17 /* clear CRC */ 550f968376Sgmcgarry #define MTL_XTEST 29 /* run 7979a/7980 extended self test */ 560f968376Sgmcgarry #define MTL_LOOP 30 /* write interface loopback */ 570f968376Sgmcgarry #define MTL_TEST 31 /* run self test */ 580f968376Sgmcgarry 590f968376Sgmcgarry /* 600f968376Sgmcgarry * Talk Secondary Commands 610f968376Sgmcgarry */ 620f968376Sgmcgarry 630f968376Sgmcgarry #define MTT_READ 0 /* read execute */ 640f968376Sgmcgarry #define MTT_STAT 1 /* read status */ 650f968376Sgmcgarry #define MTT_BCNT 2 /* read byte count */ 660f968376Sgmcgarry #define MTT_DIAG 3 /* read diagnostic results */ 670f968376Sgmcgarry #define MTT_FREV 4 /* read firmware revisions (7980xc) */ 680f968376Sgmcgarry #define MTT_LOG 5 /* read diagnostic log */ 690f968376Sgmcgarry #define MTT_FUP 6 /* read firmware update */ 700f968376Sgmcgarry #define MTT_XSTAT 15 /* read extended status (7979a/7980a) */ 710f968376Sgmcgarry #define MTT_DSJ 16 /* read DSJ (device specified jump) */ 720f968376Sgmcgarry #define MTT_RCRC 17 /* read CRC */ 730f968376Sgmcgarry #define MTT_XTEST 29 /* read 7979a/7980 extended self test */ 740f968376Sgmcgarry #define MTT_LOOP 30 /* read interface loopback */ 750f968376Sgmcgarry #define MTT_TEST 31 /* read self test */ 760f968376Sgmcgarry 770f968376Sgmcgarry /* 780f968376Sgmcgarry * Tape commands 790f968376Sgmcgarry */ 800f968376Sgmcgarry 810f968376Sgmcgarry #define MTTC_SEL0 0 /* Select Unit 0 (native protocol) */ 820f968376Sgmcgarry #define MTTC_WRITE 5 /* Write Record */ 830f968376Sgmcgarry #define MTTC_WFM 6 /* Write File Mark */ 840f968376Sgmcgarry #define MTTC_WGAP 7 /* Write Gap */ 850f968376Sgmcgarry #define MTTC_READ 8 /* Read record */ 860f968376Sgmcgarry #define MTTC_FSR 9 /* forward space record */ 870f968376Sgmcgarry #define MTTC_BSR 10 /* backward space record */ 880f968376Sgmcgarry #define MTTC_FSF 11 /* forward space file */ 890f968376Sgmcgarry #define MTTC_BSF 12 /* backward space file */ 900f968376Sgmcgarry #define MTTC_REW 13 /* rewind */ 910f968376Sgmcgarry #define MTTC_REWOFF 14 /* rewind and go offline */ 920f968376Sgmcgarry #define MTTC_DC6250 15 /* set data compressed 6250 */ 930f968376Sgmcgarry #define MTTC_6250 16 /* set 6250 bpi */ 940f968376Sgmcgarry #define MTTC_1600 17 /* set 1600 bpi */ 950f968376Sgmcgarry #define MTTC_800 18 /* set 800 bpi */ 960f968376Sgmcgarry #define MTTC_NC6250 19 /* set non-compressed 6250 */ 970f968376Sgmcgarry #define MTTC_STSTP 20 /* start/stop mode only */ 980f968376Sgmcgarry #define MTTC_STRM 21 /* enable streaming */ 990f968376Sgmcgarry #define MTTC_DIRM 22 /* disable immediate report mode */ 1000f968376Sgmcgarry #define MTTC_EIRM 23 /* enable immediate report mode */ 1010f968376Sgmcgarry #define MTTC_STAT 24 /* request status */ 1020f968376Sgmcgarry #define MTTC_RLD 25 /* remote load */ 1030f968376Sgmcgarry #define MTTC_RUNLD 26 /* remote unload */ 1040f968376Sgmcgarry #define MTTC_RON 28 /* remote online */ 1050f968376Sgmcgarry #define MTTC_DDC 30 /* disable data compression */ 1060f968376Sgmcgarry #define MTTC_EDC 31 /* enable data compression */ 1070f968376Sgmcgarry 1080f968376Sgmcgarry /* 1090f968376Sgmcgarry * End Command Bits (of any interest) 1100f968376Sgmcgarry */ 1110f968376Sgmcgarry #define MTE_COMPLETE 0x08 /* "marks the end of the report phase" */ 1120f968376Sgmcgarry #define MTE_IDLE 0x04 /* enables parallel poll resp. for online */ 1130f968376Sgmcgarry #define MTE_STOP 0x02 /* aborts transfer of "read" data */ 1140f968376Sgmcgarry 1150f968376Sgmcgarry #define MTE_DSJ_FORCE 0x100 /* XXX During readDSJ, force a status fetch */ 1160f968376Sgmcgarry 1170f968376Sgmcgarry 1180f968376Sgmcgarry struct mt_stat { 1190f968376Sgmcgarry u_char m_stat[6]; 1200f968376Sgmcgarry }; 1210f968376Sgmcgarry 1220f968376Sgmcgarry /* sc_flags */ 1230f968376Sgmcgarry #define MTF_OPEN 0x0001 /* drive is in use (single-access device) */ 1240f968376Sgmcgarry #define MTF_EXISTS 0x0002 /* device was found at boot time */ 1250f968376Sgmcgarry #define MTF_ALIVE 0x0004 /* drive actually talks to us */ 1260f968376Sgmcgarry #define MTF_WRT 0x0008 /* last command was a WRITE */ 1270f968376Sgmcgarry #define MTF_IO 0x0010 /* next interrupt should start I/O (DMA) */ 1280f968376Sgmcgarry #define MTF_REW 0x0020 /* tape is rewinding - must wait for it */ 1290f968376Sgmcgarry #define MTF_HITEOF 0x0040 /* last read or FSR hit EOF (file mark) */ 1300f968376Sgmcgarry #define MTF_HITBOF 0x0080 /* last BSR hit EOF (file mark) */ 1310f968376Sgmcgarry #define MTF_ATEOT 0x0100 /* tape hit EOT - can allow one forward op */ 1320f968376Sgmcgarry #define MTF_PASTEOT 0x0200 /* tape is beyond EOT - force backward motion */ 1330f968376Sgmcgarry #define MTF_DSJTIMEO 0x0400 /* timed out gpibrecv()ing DSJ - continue it */ 13439c3181aSmsaitoh #define MTF_STATTIMEO 0x0800 /* timed out receiving STATUS - continue it */ 1350f968376Sgmcgarry #define MTF_STATCONT 0x1000 /* STATTIMEO is continuable */ 1360f968376Sgmcgarry 1370f968376Sgmcgarry /* additional "mtcommand"s */ 1380f968376Sgmcgarry #define MTRESET 16 /* reset the thing from scratch */ 1390f968376Sgmcgarry #define MTSET800BPI 17 /* density select */ 1400f968376Sgmcgarry #define MTSET1600BPI 18 1410f968376Sgmcgarry #define MTSET6250BPI 19 1420f968376Sgmcgarry #define MTSET6250DC 20 /* (data compressed - MT7980ID only) */ 1430f968376Sgmcgarry 1440f968376Sgmcgarry /* status bytes */ 1450f968376Sgmcgarry #define sc_stat1 sc_stat.m_stat[0] 1460f968376Sgmcgarry #define sc_stat2 sc_stat.m_stat[1] 1470f968376Sgmcgarry #define sc_stat3 sc_stat.m_stat[2] 1480f968376Sgmcgarry #define sc_stat4 sc_stat.m_stat[3] 1490f968376Sgmcgarry #define sc_stat5 sc_stat.m_stat[4] 1500f968376Sgmcgarry #define sc_stat6 sc_stat.m_stat[5] 1510f968376Sgmcgarry 1520f968376Sgmcgarry /* 1530f968376Sgmcgarry * Status Register definitions 1540f968376Sgmcgarry */ 1550f968376Sgmcgarry 1560f968376Sgmcgarry #define SR1_EOF 0x80 /* positioned at File Mark */ 1570f968376Sgmcgarry #define SR1_BOT 0x40 /* positioned at Beginning of Tape */ 1580f968376Sgmcgarry #define SR1_EOT 0x20 /* positioned at End of Tape */ 159f05e6f1aSwiz #define SR1_SOFTERR 0x10 /* Recoverable Error has Occurred */ 1600f968376Sgmcgarry #define SR1_REJECT 0x08 /* HPIB Cmd rejected - Regs 4 & 5 have info */ 1610f968376Sgmcgarry #define SR1_RO 0x04 /* No Write Ring */ 1620f968376Sgmcgarry #define SR1_ERR 0x02 /* Unrecoverable Data error - Reg 5 has info */ 1630f968376Sgmcgarry #define SR1_ONLINE 0x01 /* Drive Online (must be to do any operation) */ 1640f968376Sgmcgarry 1650f968376Sgmcgarry #define SR2_6250 0x80 /* tape is 6250BPI */ 1660f968376Sgmcgarry #define SR2_UNKDEN 0x40 /* non-blank tape is of unknown density */ 1670f968376Sgmcgarry #define SR2_PARITY 0x20 /* internal bus data parity error detected */ 1680f968376Sgmcgarry #define SR2_OVERRUN 0x10 /* data buffer overrun (not possible?) */ 1690f968376Sgmcgarry #define SR2_RUNAWAY 0x08 /* during read, no data detected on tape */ 1700f968376Sgmcgarry #define SR2_OPEN 0x04 /* tape door is open */ 1710f968376Sgmcgarry #define SR2_LONGREC 0x02 /* large record support (32k@1600, 60K@6250, 1720f968376Sgmcgarry otherwise, it's 16K at all densities) */ 1730f968376Sgmcgarry #define SR2_IMMED 0x01 /* Immediate Response (for writes) enabled */ 1740f968376Sgmcgarry 1750f968376Sgmcgarry #define SR3_1600 0x80 /* tape is 1600BPI */ 1760f968376Sgmcgarry #define SR3_800 0x40 /* tape is 800BPI */ 1770f968376Sgmcgarry #define SR3_POWERUP 0x20 /* power recently restored or Dev Clr done */ 1780f968376Sgmcgarry #define SR3_HPIBPAR 0x10 /* HPIB command parity error detected */ 1790f968376Sgmcgarry #define SR3_LOST 0x08 /* position on tape is unknown */ 1800f968376Sgmcgarry #define SR3_FMTERR 0x04 /* formatter error - Reg 5 has info */ 1810f968376Sgmcgarry #define SR3_SVOERR 0x02 /* motion servo error - Reg 4 has info */ 1820f968376Sgmcgarry #define SR3_CTLERR 0x01 /* controller error - Reg 5 has info */ 1830f968376Sgmcgarry 1840f968376Sgmcgarry #define SR4_ERCLMASK 0xe0 /* Mask of error classes (for SR1_REJECT) */ 1850f968376Sgmcgarry #define SR4_NONE 0x00 1860f968376Sgmcgarry #define SR4_DEVICE 0x40 1870f968376Sgmcgarry #define SR4_PROTOCOL 0x60 1880f968376Sgmcgarry #define SR4_SELFTEST 0xe0 1890f968376Sgmcgarry #define SR4_RETRYMASK 0x1f /* Mask for retry count (for any error) */ 1900f968376Sgmcgarry 1910f968376Sgmcgarry /* SR5 holds lots of error codes, referenced above. Complete list: 1920f968376Sgmcgarry * (DEVICE REJECT) 1930f968376Sgmcgarry * 5 Tape is write protected 1940f968376Sgmcgarry * 6 Tape isn't loaded 1950f968376Sgmcgarry * 7 Requested density not supported 1960f968376Sgmcgarry * 9 Tape being read is unreadable 1970f968376Sgmcgarry * 10 Tape being written is unidentifiable 1980f968376Sgmcgarry * 11 Drive offline 1990f968376Sgmcgarry * 16 Changing density while not at BOT 2000f968376Sgmcgarry * 19 Backward motion requested while at BOT 2010f968376Sgmcgarry * 23 Protocol out of sync 2020f968376Sgmcgarry * 24 Unknown tape command 2030f968376Sgmcgarry * 31 Write request too big for drive/density 2040f968376Sgmcgarry * 32 Beyond EOT 2050f968376Sgmcgarry * 33 Self Test Failure 2060f968376Sgmcgarry * 37 Tape positioning failure while removing readaheads 2070f968376Sgmcgarry * 40 Door open 2080f968376Sgmcgarry * (UNRECOVERED DATA/FORMAT ERRORS) 2090f968376Sgmcgarry * 41 Tape velocity out of spec 2100f968376Sgmcgarry * 45 Multiple track data error 2110f968376Sgmcgarry * 47 Write verify failed 2120f968376Sgmcgarry * 48 Noise found while trying to detect data record 2130f968376Sgmcgarry * 49 Data format error 2140f968376Sgmcgarry * 50 Couldn't identify tape after rewind 2150f968376Sgmcgarry * 51 Gap detected before end of data record 2160f968376Sgmcgarry * 52 Data block dropout 2170f968376Sgmcgarry * 53 CRC error 2180f968376Sgmcgarry * 54 Parity error 2190f968376Sgmcgarry * 55 Door open 2200f968376Sgmcgarry * 57 Maximum skew exceeded 2210f968376Sgmcgarry * 58 False data block detected 2220f968376Sgmcgarry * 59 Corrected data error on write 2230f968376Sgmcgarry * 60 Buffer overrun - record size on tape larger than supported 2240f968376Sgmcgarry * 61 Data block timeout (possibly record length too long) 2250f968376Sgmcgarry * 62 Tape mark dropout 2260f968376Sgmcgarry * 63 Tape mark unverified 2270f968376Sgmcgarry * 64 Tape mark timeout (no gap following tape mark) 2280f968376Sgmcgarry * (POSITION or SERVO ERRORS) - these are ALL internal to tape drive 2290f968376Sgmcgarry * 81 Servo unresponsive 2306a2ec4ecSmsaitoh * 82 Servo didn't respond with correct state 2310f968376Sgmcgarry * 83 Servo shutdown 2320f968376Sgmcgarry * 84 Servo detected hardware failure 2330f968376Sgmcgarry * 85 Servo protocol error 2340f968376Sgmcgarry * 86 Runtime Servo error 2350f968376Sgmcgarry * 87 Missing position interrupt 2360f968376Sgmcgarry * 88 No Gap after read or write 2370f968376Sgmcgarry * 89 Motor shutdown for safety reasons 2380f968376Sgmcgarry * 90 Couldn't find tape BOT mark 2390f968376Sgmcgarry * 91 Drive motor running too fast or slow 2400f968376Sgmcgarry * 92 Requested controller state invalid within context 2410f968376Sgmcgarry * 94 Tape positioning failure 2420f968376Sgmcgarry * (FORMATTER ERROR) 2430f968376Sgmcgarry * 101,108 Read formatter unresponsive 2440f968376Sgmcgarry * 102,107 Read formatter hardware error 2450f968376Sgmcgarry * 103 Write detected bad block 2460f968376Sgmcgarry * 104 Erase failure 2470f968376Sgmcgarry * 105 No data detected after write 2480f968376Sgmcgarry * 106 Tracks out of sync on write verify 2490f968376Sgmcgarry * 109 No gap timeout 2500f968376Sgmcgarry * 110 Formatter <--> data buffer byte count mismatch 2510f968376Sgmcgarry * (CONTROLLER ERROR) - these are ALL internal to drive 2520f968376Sgmcgarry * 121 Transaction ID mismatch (device vs. controller) 253*52d90fb8Sandvar * 122 Device report has no corresponding command 2540f968376Sgmcgarry * 123 Invalid device report 2550f968376Sgmcgarry * 124 Repost queue overflow 2560f968376Sgmcgarry * 125 Unknown command from device 2570f968376Sgmcgarry * 126 Command queue overflow 2580f968376Sgmcgarry * 128 Missing End-Of-Record flag in data buffer 2590f968376Sgmcgarry * 129 Data buffer parity error 2600f968376Sgmcgarry * 130 Data buffer underrun during write 2610f968376Sgmcgarry * 131 Byte count mismatch in data buffer queue 2620f968376Sgmcgarry * 132 Bad message type from device 2630f968376Sgmcgarry * 133 Abort between HPIB interface and channel program 2640f968376Sgmcgarry * 134 Unknown HPIB interface exception 265*52d90fb8Sandvar * 137 Illegal access to servo controller registers 2660f968376Sgmcgarry * 138 Device program firmware error 2670f968376Sgmcgarry * 139 Hardware utilities firmware error 2680f968376Sgmcgarry * 140 Channel program firmware error 2690f968376Sgmcgarry * 141 Encoder inoperative 2700f968376Sgmcgarry * 150 Tape position synchronization error 2710f968376Sgmcgarry * 151 Tape deblocking error (Xtra Capacity only) 2720f968376Sgmcgarry * 152 Compression/Decompression hardware error (Xtra Capacity only) 2730f968376Sgmcgarry * (PROTOCOL ERROR) - USUALLY indicates deficiency in driver 2740f968376Sgmcgarry * 161 No room in Command Queue 2750f968376Sgmcgarry * 162 Expected "request DSJ" 2760f968376Sgmcgarry * 163 Expected status request 2770f968376Sgmcgarry * 165 Unknown unit select 2780f968376Sgmcgarry * 166 Tape command secondary expected 2790f968376Sgmcgarry * 167 Data byte expected 2800f968376Sgmcgarry * 168 Missing EOI on data byte 2810f968376Sgmcgarry * 170 Write command phase protocol error 2820f968376Sgmcgarry * 172 Read record report phase error 2830f968376Sgmcgarry * 173 Report phase protocol error 2840f968376Sgmcgarry * 174 Cold load sequence error 2850f968376Sgmcgarry * 175 HPIB protocol sequence error 2860f968376Sgmcgarry * 176 END command expected 2870f968376Sgmcgarry * 178 END DATA expected 2880f968376Sgmcgarry * 180 Unknown interface secondary command 2890f968376Sgmcgarry * 181 Misplaced data byte 2900f968376Sgmcgarry * 184 Interface Loopback protocol error 2910f968376Sgmcgarry * 185 Self test protocol error 2920f968376Sgmcgarry * 188 HPIB parity error 2930f968376Sgmcgarry * 189 Operator reset during protocol sequence 2940f968376Sgmcgarry * 190 Device clear received 2950f968376Sgmcgarry */ 2960f968376Sgmcgarry 2970f968376Sgmcgarry /* SR6 is count of commands accepted since Immediate Response command failed */ 298