xref: /netbsd-src/sys/dev/gpib/mtreg.h (revision 52d90fb8899c95a35ede50dbe096440b8405b8f8)
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