mtreg.h revision 1.6
11.6Smsaitoh/*	$NetBSD: mtreg.h,v 1.6 2021/12/05 02:25:29 msaitoh Exp $	*/
21.1Sgmcgarry
31.3Sperry/*
41.1Sgmcgarry * Copyright (c) 1992, The University of Utah and
51.1Sgmcgarry * the Computer Systems Laboratory at the University of Utah (CSL).
61.1Sgmcgarry * All rights reserved.
71.1Sgmcgarry *
81.1Sgmcgarry * Permission to use, copy, modify and distribute this software is hereby
91.1Sgmcgarry * granted provided that (1) source code retains these copyright, permission,
101.1Sgmcgarry * and disclaimer notices, and (2) redistributions including binaries
111.1Sgmcgarry * reproduce the notices in supporting documentation, and (3) all advertising
121.1Sgmcgarry * materials mentioning features or use of this software display the following
131.1Sgmcgarry * acknowledgement: ``This product includes software developed by the
141.1Sgmcgarry * Computer Systems Laboratory at the University of Utah.''
151.1Sgmcgarry *
161.1Sgmcgarry * THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF THIS SOFTWARE IN ITS "AS
171.1Sgmcgarry * IS" CONDITION.  THE UNIVERSITY OF UTAH AND CSL DISCLAIM ANY LIABILITY OF
181.1Sgmcgarry * ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
191.1Sgmcgarry *
201.1Sgmcgarry * CSL requests users of this software to return to csl-dist@cs.utah.edu any
211.1Sgmcgarry * improvements that they make and grant CSL redistribution rights.
221.1Sgmcgarry *
231.1Sgmcgarry *	Utah $Hdr: mtreg.h 1.4 95/09/12$
241.1Sgmcgarry */
251.1Sgmcgarry
261.1Sgmcgarry/*	@(#)mtreg.h	3.4	90/07/10	mt Xinu
271.1Sgmcgarry *
281.1Sgmcgarry *	Hewlett-Packard 7974, 7978, 7979 and 7980 HPIB Mag-Tape declarations.
291.1Sgmcgarry */
301.1Sgmcgarry
311.1Sgmcgarry/*
321.1Sgmcgarry *	Hardware Id's
331.1Sgmcgarry */
341.1Sgmcgarry
351.1Sgmcgarry#define MT7974AID	0x174
361.1Sgmcgarry#define MT7978ID	0x178
371.1Sgmcgarry#define MT7979AID	0x179
381.1Sgmcgarry#define MT7980ID	0x180
391.1Sgmcgarry
401.1Sgmcgarry/* convert bytes to 1k tape block and back */
411.1Sgmcgarry#define CTBTOK(x)	((x) >> 10)
421.1Sgmcgarry#define CTKTOB(x)	((x) << 10)
431.1Sgmcgarry
441.1Sgmcgarry/*
451.1Sgmcgarry *	Listen Secondary Commands
461.1Sgmcgarry */
471.1Sgmcgarry
481.1Sgmcgarry#define MTL_WRITE	0	/* write execute */
491.1Sgmcgarry#define MTL_TCMD	1	/* tape command */
501.1Sgmcgarry#define MTL_DIAG	4	/* download diagnostic */
511.1Sgmcgarry#define MTL_FUP		6	/* write firmware update */
521.1Sgmcgarry#define MTL_ECMD	7	/* end command */
531.1Sgmcgarry#define MTL_DCL		16	/* amigo device clear */
541.1Sgmcgarry#define MTL_CCRC	17	/* clear CRC */
551.1Sgmcgarry#define MTL_XTEST	29	/* run 7979a/7980 extended self test */
561.1Sgmcgarry#define MTL_LOOP	30	/* write interface loopback */
571.1Sgmcgarry#define MTL_TEST	31	/* run self test */
581.1Sgmcgarry
591.1Sgmcgarry/*
601.1Sgmcgarry *	Talk Secondary Commands
611.1Sgmcgarry */
621.1Sgmcgarry
631.1Sgmcgarry#define MTT_READ	0	/* read execute */
641.1Sgmcgarry#define MTT_STAT	1	/* read status */
651.1Sgmcgarry#define MTT_BCNT	2	/* read byte count */
661.1Sgmcgarry#define MTT_DIAG	3	/* read diagnostic results */
671.1Sgmcgarry#define MTT_FREV	4	/* read firmware revisions (7980xc) */
681.1Sgmcgarry#define MTT_LOG		5	/* read diagnostic log */
691.1Sgmcgarry#define MTT_FUP		6	/* read firmware update */
701.1Sgmcgarry#define MTT_XSTAT	15	/* read extended status (7979a/7980a) */
711.1Sgmcgarry#define MTT_DSJ		16	/* read DSJ (device specified jump) */
721.1Sgmcgarry#define MTT_RCRC	17	/* read CRC */
731.1Sgmcgarry#define MTT_XTEST	29	/* read 7979a/7980 extended self test */
741.1Sgmcgarry#define MTT_LOOP	30	/* read interface loopback */
751.1Sgmcgarry#define MTT_TEST	31	/* read self test */
761.1Sgmcgarry
771.1Sgmcgarry/*
781.1Sgmcgarry *	Tape commands
791.1Sgmcgarry */
801.1Sgmcgarry
811.1Sgmcgarry#define MTTC_SEL0	0	/* Select Unit 0 (native protocol) */
821.1Sgmcgarry#define MTTC_WRITE	5	/* Write Record */
831.1Sgmcgarry#define MTTC_WFM	6	/* Write File Mark */
841.1Sgmcgarry#define MTTC_WGAP	7	/* Write Gap */
851.1Sgmcgarry#define MTTC_READ	8	/* Read record */
861.1Sgmcgarry#define MTTC_FSR	9	/* forward space record */
871.1Sgmcgarry#define MTTC_BSR	10	/* backward space record */
881.1Sgmcgarry#define MTTC_FSF	11	/* forward space file */
891.1Sgmcgarry#define MTTC_BSF	12	/* backward space file */
901.1Sgmcgarry#define MTTC_REW	13	/* rewind */
911.1Sgmcgarry#define MTTC_REWOFF	14	/* rewind and go offline */
921.1Sgmcgarry#define MTTC_DC6250	15	/* set data compressed 6250 */
931.1Sgmcgarry#define MTTC_6250	16	/* set 6250 bpi */
941.1Sgmcgarry#define MTTC_1600	17	/* set 1600 bpi */
951.1Sgmcgarry#define MTTC_800	18	/* set 800 bpi */
961.1Sgmcgarry#define MTTC_NC6250	19	/* set non-compressed 6250 */
971.1Sgmcgarry#define MTTC_STSTP	20	/* start/stop mode only */
981.1Sgmcgarry#define MTTC_STRM	21	/* enable streaming */
991.1Sgmcgarry#define MTTC_DIRM	22	/* disable immediate report mode */
1001.1Sgmcgarry#define MTTC_EIRM	23	/* enable immediate report mode */
1011.1Sgmcgarry#define MTTC_STAT	24	/* request status */
1021.1Sgmcgarry#define MTTC_RLD	25	/* remote load */
1031.1Sgmcgarry#define MTTC_RUNLD	26	/* remote unload */
1041.1Sgmcgarry#define MTTC_RON	28	/* remote online */
1051.1Sgmcgarry#define MTTC_DDC	30	/* disable data compression */
1061.1Sgmcgarry#define MTTC_EDC	31	/* enable data compression */
1071.1Sgmcgarry
1081.1Sgmcgarry/*
1091.1Sgmcgarry *	End Command Bits (of any interest)
1101.1Sgmcgarry */
1111.1Sgmcgarry#define	MTE_COMPLETE	0x08	/* "marks the end of the report phase" */
1121.1Sgmcgarry#define	MTE_IDLE	0x04	/* enables parallel poll resp. for online */
1131.1Sgmcgarry#define	MTE_STOP	0x02	/* aborts transfer of "read" data */
1141.1Sgmcgarry
1151.1Sgmcgarry#define	MTE_DSJ_FORCE	0x100	/* XXX During readDSJ, force a status fetch */
1161.1Sgmcgarry
1171.1Sgmcgarry
1181.1Sgmcgarrystruct	mt_stat {
1191.1Sgmcgarry	u_char	m_stat[6];
1201.1Sgmcgarry};
1211.1Sgmcgarry
1221.1Sgmcgarry/* sc_flags */
1231.1Sgmcgarry#define	MTF_OPEN	0x0001	/* drive is in use (single-access device) */
1241.1Sgmcgarry#define	MTF_EXISTS	0x0002	/* device was found at boot time */
1251.1Sgmcgarry#define	MTF_ALIVE	0x0004	/* drive actually talks to us */
1261.1Sgmcgarry#define	MTF_WRT		0x0008	/* last command was a WRITE */
1271.1Sgmcgarry#define	MTF_IO		0x0010	/* next interrupt should start I/O (DMA) */
1281.1Sgmcgarry#define	MTF_REW		0x0020	/* tape is rewinding - must wait for it */
1291.1Sgmcgarry#define	MTF_HITEOF	0x0040	/* last read or FSR hit EOF (file mark) */
1301.1Sgmcgarry#define	MTF_HITBOF	0x0080	/* last BSR hit EOF (file mark) */
1311.1Sgmcgarry#define	MTF_ATEOT	0x0100	/* tape hit EOT - can allow one forward op */
1321.1Sgmcgarry#define	MTF_PASTEOT	0x0200	/* tape is beyond EOT - force backward motion */
1331.1Sgmcgarry#define	MTF_DSJTIMEO	0x0400	/* timed out gpibrecv()ing DSJ - continue it */
1341.5Smsaitoh#define	MTF_STATTIMEO	0x0800	/* timed out receiving STATUS - continue it */
1351.1Sgmcgarry#define	MTF_STATCONT	0x1000	/* STATTIMEO is continuable */
1361.1Sgmcgarry
1371.1Sgmcgarry/* additional "mtcommand"s */
1381.1Sgmcgarry#define MTRESET		16	/* reset the thing from scratch */
1391.1Sgmcgarry#define MTSET800BPI	17	/* density select */
1401.1Sgmcgarry#define MTSET1600BPI	18
1411.1Sgmcgarry#define MTSET6250BPI	19
1421.1Sgmcgarry#define MTSET6250DC	20	/* (data compressed - MT7980ID only) */
1431.1Sgmcgarry
1441.1Sgmcgarry/* status bytes */
1451.1Sgmcgarry#define sc_stat1	sc_stat.m_stat[0]
1461.1Sgmcgarry#define sc_stat2	sc_stat.m_stat[1]
1471.1Sgmcgarry#define sc_stat3	sc_stat.m_stat[2]
1481.1Sgmcgarry#define sc_stat4	sc_stat.m_stat[3]
1491.1Sgmcgarry#define sc_stat5	sc_stat.m_stat[4]
1501.1Sgmcgarry#define sc_stat6	sc_stat.m_stat[5]
1511.1Sgmcgarry
1521.1Sgmcgarry/*
1531.1Sgmcgarry *	Status Register definitions
1541.1Sgmcgarry */
1551.1Sgmcgarry
1561.1Sgmcgarry#define	SR1_EOF		0x80	/* positioned at File Mark */
1571.1Sgmcgarry#define	SR1_BOT		0x40	/* positioned at Beginning of Tape */
1581.1Sgmcgarry#define	SR1_EOT		0x20	/* positioned at End of Tape */
1591.2Swiz#define	SR1_SOFTERR	0x10	/* Recoverable Error has Occurred */
1601.1Sgmcgarry#define	SR1_REJECT	0x08	/* HPIB Cmd rejected - Regs 4 & 5 have info */
1611.1Sgmcgarry#define	SR1_RO		0x04	/* No Write Ring */
1621.1Sgmcgarry#define	SR1_ERR		0x02	/* Unrecoverable Data error - Reg 5 has info */
1631.1Sgmcgarry#define	SR1_ONLINE	0x01	/* Drive Online (must be to do any operation) */
1641.1Sgmcgarry
1651.1Sgmcgarry#define	SR2_6250	0x80	/* tape is 6250BPI */
1661.1Sgmcgarry#define	SR2_UNKDEN	0x40	/* non-blank tape is of unknown density */
1671.1Sgmcgarry#define	SR2_PARITY	0x20	/* internal bus data parity error detected */
1681.1Sgmcgarry#define	SR2_OVERRUN	0x10	/* data buffer overrun (not possible?) */
1691.1Sgmcgarry#define	SR2_RUNAWAY	0x08	/* during read, no data detected on tape */
1701.1Sgmcgarry#define	SR2_OPEN	0x04	/* tape door is open */
1711.1Sgmcgarry#define	SR2_LONGREC	0x02	/* large record support (32k@1600, 60K@6250,
1721.1Sgmcgarry				   otherwise, it's 16K at all densities) */
1731.1Sgmcgarry#define	SR2_IMMED	0x01	/* Immediate Response (for writes) enabled */
1741.1Sgmcgarry
1751.1Sgmcgarry#define	SR3_1600	0x80	/* tape is 1600BPI */
1761.1Sgmcgarry#define	SR3_800		0x40	/* tape is 800BPI */
1771.1Sgmcgarry#define	SR3_POWERUP	0x20	/* power recently restored or Dev Clr done */
1781.1Sgmcgarry#define	SR3_HPIBPAR	0x10	/* HPIB command parity error detected */
1791.1Sgmcgarry#define	SR3_LOST	0x08	/* position on tape is unknown */
1801.1Sgmcgarry#define	SR3_FMTERR	0x04	/* formatter error - Reg 5 has info */
1811.1Sgmcgarry#define	SR3_SVOERR	0x02	/* motion servo error - Reg 4 has info */
1821.1Sgmcgarry#define	SR3_CTLERR	0x01	/* controller error - Reg 5 has info */
1831.1Sgmcgarry
1841.1Sgmcgarry#define SR4_ERCLMASK	0xe0	/* Mask of error classes (for SR1_REJECT) */
1851.1Sgmcgarry#define SR4_NONE	0x00
1861.1Sgmcgarry#define SR4_DEVICE	0x40
1871.1Sgmcgarry#define SR4_PROTOCOL	0x60
1881.1Sgmcgarry#define SR4_SELFTEST	0xe0
1891.1Sgmcgarry#define	SR4_RETRYMASK	0x1f	/* Mask for retry count (for any error) */
1901.1Sgmcgarry
1911.1Sgmcgarry/* SR5 holds lots of error codes, referenced above.  Complete list:
1921.1Sgmcgarry * (DEVICE REJECT)
1931.1Sgmcgarry *	  5	Tape is write protected
1941.1Sgmcgarry *	  6	Tape isn't loaded
1951.1Sgmcgarry *	  7	Requested density not supported
1961.1Sgmcgarry *	  9	Tape being read is unreadable
1971.1Sgmcgarry *	 10	Tape being written is unidentifiable
1981.1Sgmcgarry *	 11	Drive offline
1991.1Sgmcgarry *	 16	Changing density while not at BOT
2001.1Sgmcgarry *	 19	Backward motion requested while at BOT
2011.1Sgmcgarry *	 23	Protocol out of sync
2021.1Sgmcgarry *	 24	Unknown tape command
2031.1Sgmcgarry *	 31	Write request too big for drive/density
2041.1Sgmcgarry *	 32	Beyond EOT
2051.1Sgmcgarry *	 33	Self Test Failure
2061.1Sgmcgarry *	 37	Tape positioning failure while removing readaheads
2071.1Sgmcgarry *	 40	Door open
2081.1Sgmcgarry * (UNRECOVERED DATA/FORMAT ERRORS)
2091.1Sgmcgarry *	 41	Tape velocity out of spec
2101.1Sgmcgarry *	 45	Multiple track data error
2111.1Sgmcgarry *	 47	Write verify failed
2121.1Sgmcgarry *	 48	Noise found while trying to detect data record
2131.1Sgmcgarry *	 49	Data format error
2141.1Sgmcgarry *	 50	Couldn't identify tape after rewind
2151.1Sgmcgarry *	 51	Gap detected before end of data record
2161.1Sgmcgarry *	 52	Data block dropout
2171.1Sgmcgarry *	 53	CRC error
2181.1Sgmcgarry *	 54	Parity error
2191.1Sgmcgarry *	 55	Door open
2201.1Sgmcgarry *	 57	Maximum skew exceeded
2211.1Sgmcgarry *	 58	False data block detected
2221.1Sgmcgarry *	 59	Corrected data error on write
2231.1Sgmcgarry *	 60	Buffer overrun - record size on tape larger than supported
2241.1Sgmcgarry *	 61	Data block timeout (possibly record length too long)
2251.1Sgmcgarry *	 62	Tape mark dropout
2261.1Sgmcgarry *	 63	Tape mark unverified
2271.1Sgmcgarry *	 64	Tape mark timeout (no gap following tape mark)
2281.1Sgmcgarry * (POSITION or SERVO ERRORS) - these are ALL internal to tape drive
2291.1Sgmcgarry *	 81	Servo unresponsive
2301.6Smsaitoh *	 82	Servo didn't respond with correct state
2311.1Sgmcgarry *	 83	Servo shutdown
2321.1Sgmcgarry *	 84	Servo detected hardware failure
2331.1Sgmcgarry *	 85	Servo protocol error
2341.1Sgmcgarry *	 86	Runtime Servo error
2351.1Sgmcgarry *	 87	Missing position interrupt
2361.1Sgmcgarry *	 88	No Gap after read or write
2371.1Sgmcgarry *	 89	Motor shutdown for safety reasons
2381.1Sgmcgarry *	 90	Couldn't find tape BOT mark
2391.1Sgmcgarry *	 91	Drive motor running too fast or slow
2401.1Sgmcgarry *	 92	Requested controller state invalid within context
2411.1Sgmcgarry *	 94	Tape positioning failure
2421.1Sgmcgarry * (FORMATTER ERROR)
2431.1Sgmcgarry *	101,108	Read formatter unresponsive
2441.1Sgmcgarry *	102,107	Read formatter hardware error
2451.1Sgmcgarry *	103	Write detected bad block
2461.1Sgmcgarry *	104	Erase failure
2471.1Sgmcgarry *	105	No data detected after write
2481.1Sgmcgarry *	106	Tracks out of sync on write verify
2491.1Sgmcgarry *	109	No gap timeout
2501.1Sgmcgarry *	110	Formatter <--> data buffer byte count mismatch
2511.1Sgmcgarry * (CONTROLLER ERROR) - these are ALL internal to drive
2521.1Sgmcgarry *	121	Transaction ID mismatch (device vs. controller)
2531.1Sgmcgarry *	122	Devoce report has no coorepinding command
2541.1Sgmcgarry *	123	Invalid device report
2551.1Sgmcgarry *	124	Repost queue overflow
2561.1Sgmcgarry *	125	Unknown command from device
2571.1Sgmcgarry *	126	Command queue overflow
2581.1Sgmcgarry *	128	Missing End-Of-Record flag in data buffer
2591.1Sgmcgarry *	129	Data buffer parity error
2601.1Sgmcgarry *	130	Data buffer underrun during write
2611.1Sgmcgarry *	131	Byte count mismatch in data buffer queue
2621.1Sgmcgarry *	132	Bad message type from device
2631.1Sgmcgarry *	133	Abort between HPIB interface and channel program
2641.1Sgmcgarry *	134	Unknown HPIB interface exception
2651.1Sgmcgarry *	137	Illegal access to servo conntroller registers
2661.1Sgmcgarry *	138	Device program firmware error
2671.1Sgmcgarry *	139	Hardware utilities firmware error
2681.1Sgmcgarry *	140	Channel program firmware error
2691.1Sgmcgarry *	141	Encoder inoperative
2701.1Sgmcgarry *	150	Tape position synchronization error
2711.1Sgmcgarry *	151	Tape deblocking error (Xtra Capacity only)
2721.1Sgmcgarry *	152	Compression/Decompression hardware error (Xtra Capacity only)
2731.1Sgmcgarry * (PROTOCOL ERROR) - USUALLY indicates deficiency in driver
2741.1Sgmcgarry *	161	No room in Command Queue
2751.1Sgmcgarry *	162	Expected "request DSJ"
2761.1Sgmcgarry *	163	Expected status request
2771.1Sgmcgarry *	165	Unknown unit select
2781.1Sgmcgarry *	166	Tape command secondary expected
2791.1Sgmcgarry *	167	Data byte expected
2801.1Sgmcgarry *	168	Missing EOI on data byte
2811.1Sgmcgarry *	170	Write command phase protocol error
2821.1Sgmcgarry *	172	Read record report phase error
2831.1Sgmcgarry *	173	Report phase protocol error
2841.1Sgmcgarry *	174	Cold load sequence error
2851.1Sgmcgarry *	175	HPIB protocol sequence error
2861.1Sgmcgarry *	176	END command expected
2871.1Sgmcgarry *	178	END DATA expected
2881.1Sgmcgarry *	180	Unknown interface secondary command
2891.1Sgmcgarry *	181	Misplaced data byte
2901.1Sgmcgarry *	184	Interface Loopback protocol error
2911.1Sgmcgarry *	185	Self test protocol error
2921.1Sgmcgarry *	188	HPIB parity error
2931.1Sgmcgarry *	189	Operator reset during protocol sequence
2941.1Sgmcgarry *	190	Device clear received
2951.1Sgmcgarry */
2961.1Sgmcgarry
2971.1Sgmcgarry/* SR6 is count of commands accepted since Immediate Response command failed */
298