summaryrefslogtreecommitdiff
path: root/sys/arch/hp300/dev/mtreg.h
blob: 0277ca4905624493a3f37698c5056972996ed1b0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
/*	$OpenBSD: mtreg.h,v 1.4 2005/01/15 21:13:08 miod Exp $	*/
/*	$NetBSD: mtreg.h,v 1.1 1995/10/02 00:28:22 thorpej Exp $	*/

/*
 * Copyright (c) 1992, The University of Utah and
 * the Computer Systems Laboratory at the University of Utah (CSL).
 * All rights reserved.
 *
 * Permission to use, copy, modify and distribute this software is hereby
 * granted provided that (1) source code retains these copyright, permission,
 * and disclaimer notices, and (2) redistributions including binaries
 * reproduce the notices in supporting documentation, and (3) all advertising
 * materials mentioning features or use of this software display the following
 * acknowledgement: ``This product includes software developed by the
 * Computer Systems Laboratory at the University of Utah.''
 *
 * THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF THIS SOFTWARE IN ITS "AS
 * IS" CONDITION.  THE UNIVERSITY OF UTAH AND CSL DISCLAIM ANY LIABILITY OF
 * ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
 *
 * CSL requests users of this software to return to csl-dist@cs.utah.edu any
 * improvements that they make and grant CSL redistribution rights.
 *
 *	Utah $Hdr: mtreg.h 1.4 95/09/12$
 */
/*	@(#)mtreg.h	3.4	90/07/10	mt Xinu
 *
 *	Hewlett-Packard 7974, 7978, 7979 and 7980 HPIB Mag-Tape declarations.
 */

/*
 *	Hardware Id's
 */

#define MT7974AID	0x174
#define MT7978ID	0x178
#define MT7979AID	0x179
#define MT7980ID	0x180

/* convert bytes to 1k tape block and back */
#define CTBTOK(x)	((x) >> 10)
#define CTKTOB(x)	((x) << 10)

/*
 *	Listen Secondary Commands
 */

#define MTL_WRITE	0	/* write execute */
#define MTL_TCMD	1	/* tape command */
#define MTL_DIAG	4	/* download diagnostic */
#define MTL_FUP		6	/* write firmware update */
#define MTL_ECMD	7	/* end command */
#define MTL_DCL		16	/* amigo device clear */
#define MTL_CCRC	17	/* clear CRC */
#define MTL_XTEST	29	/* run 7979a/7980 extended self test */
#define MTL_LOOP	30	/* write interface loopback */
#define MTL_TEST	31	/* run self test */

/*
 *	Talk Secondary Commands
 */

#define MTT_READ	0	/* read execute */
#define MTT_STAT	1	/* read status */
#define MTT_BCNT	2	/* read byte count */
#define MTT_DIAG	3	/* read diagnostic results */
#define MTT_FREV	4	/* read firmware revisions (7980xc) */
#define MTT_LOG		5	/* read diagnostic log */
#define MTT_FUP		6	/* read firmware update */
#define MTT_XSTAT	15	/* read extended status (7979a/7980a) */
#define MTT_DSJ		16	/* read DSJ (device specified jump) */
#define MTT_RCRC	17	/* read CRC */
#define MTT_XTEST	29	/* read 7979a/7980 extended self test */
#define MTT_LOOP	30	/* read interface loopback */
#define MTT_TEST	31	/* read self test */

/*
 *	Tape commands
 */

#define MTTC_SEL0	0	/* Select Unit 0 (native protocol) */
#define MTTC_WRITE	5	/* Write Record */
#define MTTC_WFM	6	/* Write File Mark */
#define MTTC_WGAP	7	/* Write Gap */
#define MTTC_READ	8	/* Read record */
#define MTTC_FSR	9	/* forward space record */
#define MTTC_BSR	10	/* backward space record */
#define MTTC_FSF	11	/* forward space file */
#define MTTC_BSF	12	/* backward space file */
#define MTTC_REW	13	/* rewind */
#define MTTC_REWOFF	14	/* rewind and go offline */
#define MTTC_DC6250	15	/* set data compressed 6250 */
#define MTTC_6250	16	/* set 6250 bpi */
#define MTTC_1600	17	/* set 1600 bpi */
#define MTTC_800	18	/* set 800 bpi */
#define MTTC_NC6250	19	/* set non-compressed 6250 */
#define MTTC_STSTP	20	/* start/stop mode only */
#define MTTC_STRM	21	/* enable streaming */
#define MTTC_DIRM	22	/* disable immediate report mode */
#define MTTC_EIRM	23	/* enable immediate report mode */
#define MTTC_STAT	24	/* request status */
#define MTTC_RLD	25	/* remote load */
#define MTTC_RUNLD	26	/* remote unload */
#define MTTC_RON	28	/* remote online */
#define MTTC_DDC	30	/* disable data compression */
#define MTTC_EDC	31	/* enable data compression */

/*
 *	End Command Bits (of any interest)
 */
#define	MTE_COMPLETE	0x08	/* "marks the end of the report phase" */
#define	MTE_IDLE	0x04	/* enables parallel poll resp. for online */
#define	MTE_STOP	0x02	/* aborts transfer of "read" data */

#define	MTE_DSJ_FORCE	0x100	/* XXX During readDSJ, force a status fetch */


struct	mt_stat {
	u_char	m_stat[6];
};

/* sc_flags */
#define	MTF_OPEN	0x0001	/* drive is in use (single-access device) */
#define	MTF_EXISTS	0x0002	/* device was found at boot time */
#define	MTF_ALIVE	0x0004	/* drive actually talks to us */
#define	MTF_WRT		0x0008	/* last command was a WRITE */
#define	MTF_IO		0x0010	/* next interrupt should start I/O (DMA) */
#define	MTF_REW		0x0020	/* tape is rewinding - must wait for it */
#define	MTF_HITEOF	0x0040	/* last read or FSR hit EOF (file mark) */
#define	MTF_HITBOF	0x0080	/* last BSR hit EOF (file mark) */
#define	MTF_ATEOT	0x0100	/* tape hit EOT - can allow one forward op */
#define	MTF_PASTEOT	0x0200	/* tape is beyond EOT - force backward motion */
#define	MTF_DSJTIMEO	0x0400	/* timed out hpibrecv()ing DSJ - continue it */
#define	MTF_STATTIMEO	0x0800	/* timed out receiving STATUS - continue it */
#define	MTF_STATCONT	0x1000	/* STATTIMEO is continuable */

/* additional "mtcommand"s */
#define MTRESET		16	/* reset the thing from scratch */
#define MTSET800BPI	17	/* density select */
#define MTSET1600BPI	18
#define MTSET6250BPI	19
#define MTSET6250DC	20	/* (data compressed - MT7980ID only) */

/* status bytes */
#define sc_stat1	sc_stat.m_stat[0]
#define sc_stat2	sc_stat.m_stat[1]
#define sc_stat3	sc_stat.m_stat[2]
#define sc_stat4	sc_stat.m_stat[3]
#define sc_stat5	sc_stat.m_stat[4]
#define sc_stat6	sc_stat.m_stat[5]

/*
 *	Status Register definitions
 */

#define	SR1_EOF		0x80	/* positioned at File Mark */
#define	SR1_BOT		0x40	/* positioned at Beginning of Tape */
#define	SR1_EOT		0x20	/* positioned at End of Tape */
#define	SR1_SOFTERR	0x10	/* Recoverable Error has Occured */
#define	SR1_REJECT	0x08	/* HPIB Cmd rejected - Regs 4 & 5 have info */
#define	SR1_RO		0x04	/* No Write Ring */
#define	SR1_ERR		0x02	/* Unrecoverable Data error - Reg 5 has info */
#define	SR1_ONLINE	0x01	/* Drive Online (must be to do any operation) */

#define	SR2_6250	0x80	/* tape is 6250BPI */
#define	SR2_UNKDEN	0x40	/* non-blank tape is of unknown density */
#define	SR2_PARITY	0x20	/* internal bus data parity error detected */
#define	SR2_OVERRUN	0x10	/* data buffer overrun (not possible?) */
#define	SR2_RUNAWAY	0x08	/* during read, no data detected on tape */
#define	SR2_OPEN	0x04	/* tape door is open */
#define	SR2_LONGREC	0x02	/* large record support (32k@1600, 60K@6250,
				   otherwise, it's 16K at all densities) */
#define	SR2_IMMED	0x01	/* Immediate Response (for writes) enabled */

#define	SR3_1600	0x80	/* tape is 1600BPI */
#define	SR3_800		0x40	/* tape is 800BPI */
#define	SR3_POWERUP	0x20	/* power recently restored or Dev Clr done */
#define	SR3_HPIBPAR	0x10	/* HPIB command parity error detected */
#define	SR3_LOST	0x08	/* position on tape is unknown */
#define	SR3_FMTERR	0x04	/* formatter error - Reg 5 has info */
#define	SR3_SVOERR	0x02	/* motion servo error - Reg 4 has info */
#define	SR3_CTLERR	0x01	/* controller error - Reg 5 has info */

#define SR4_ERCLMASK	0xe0	/* Mask of error classes (for SR1_REJECT) */
#define SR4_NONE	0x00
#define SR4_DEVICE	0x40
#define SR4_PROTOCOL	0x60
#define SR4_SELFTEST	0xe0
#define	SR4_RETRYMASK	0x1f	/* Mask for retry count (for any error) */

/* SR5 holds lots of error codes, referenced above.  Complete list:
 * (DEVICE REJECT)
 *	  5	Tape is write protected
 *	  6	Tape isn't loaded
 *	  7	Requested density not supported
 *	  9	Tape being read is unreadable
 *	 10	Tape being written is unidentifiable
 *	 11	Drive offline
 *	 16	Changing density while not at BOT
 *	 19	Backward motion requested while at BOT
 *	 23	Protocol out of sync
 *	 24	Unknown tape command
 *	 31	Write request too big for drive/density
 *	 32	Beyond EOT
 *	 33	Self Test Failure
 *	 37	Tape positioning failure while removing readaheads
 *	 40	Door open
 * (UNRECOVERED DATA/FORMAT ERRORS)
 *	 41	Tape velocity out of spec
 *	 45	Multiple track data error
 *	 47	Write verify failed
 *	 48	Noise found while trying to detect data record
 *	 49	Data format error
 *	 50	Couldn't identify tape after rewind
 *	 51	Gap detected before end of data record
 *	 52	Data block dropout
 *	 53	CRC error
 *	 54	Parity error
 *	 55	Door open
 *	 57	Maximum skew exceeded
 *	 58	False data block detected
 *	 59	Corrected data error on write
 *	 60	Buffer overrun - record size on tape larger than supported
 *	 61	Data block timeout (possibly record length too long)
 *	 62	Tape mark dropout
 *	 63	Tape mark unverified
 *	 64	Tape mark timeout (no gap following tape mark)
 * (POSITION or SERVO ERRORS) - these are ALL internal to tape drive
 *	 81	Servo unresponsive
 *	 82	Servo didn't respond with corect state
 *	 83	Servo shutdown
 *	 84	Servo detected hardware failure
 *	 85	Servo protocol error
 *	 86	Runtime Servo error
 *	 87	Missing position interrupt
 *	 88	No Gap after read or write
 *	 89	Motor shutdown for safety reasons
 *	 90	Couldn't find tape BOT mark
 *	 91	Drive motor running too fast or slow
 *	 92	Requested controller state invalid within context
 *	 94	Tape positioning failure
 * (FORMATTER ERROR)
 *	101,108	Read formatter unresponsive
 *	102,107	Read formatter hardware error
 *	103	Write detected bad block
 *	104	Erase failure
 *	105	No data detected after write
 *	106	Tracks out of sync on write verify
 *	109	No gap timeout
 *	110	Formatter <--> data buffer byte count mismatch
 * (CONTROLLER ERROR) - these are ALL internal to drive
 *	121	Transaction ID mismatch (device vs. controller)
 *	122	Devoce report has no coorepinding command
 *	123	Invalid device report
 *	124	Repost queue overflow
 *	125	Unknown command from device
 *	126	Command queue overflow
 *	128	Missing End-Of-Record flag in data buffer
 *	129	Data buffer parity error
 *	130	Data buffer underrun during write
 *	131	Byte count mismatch in data buffer queue
 *	132	Bad message type from device
 *	133	Abort between HPIB interface and channel program
 *	134	Unknown HPIB interface exception
 *	137	Illegal access to servo conntroller registers
 *	138	Device program firmware error
 *	139	Hardware utilities firmware error
 *	140	Channel program firmware error
 *	141	Encoder inoperative
 *	150	Tape position synchronization error
 *	151	Tape deblocking error (Xtra Capacity only)
 *	152	Compression/Decompression hardware error (Xtra Capacity only)
 * (PROTOCOL ERROR) - USUALLY indicates deficiency in driver
 *	161	No room in Command Queue
 *	162	Expected "request DSJ"
 *	163	Expected status request
 *	165	Unknown unit select
 *	166	Tape command secondary expected
 *	167	Data byte expected
 *	168	Missing EOI on data byte
 *	170	Write command phase protocol error
 *	172	Read record report phase error
 *	173	Report phase protocol error
 *	174	Cold load sequence error
 *	175	HPIB protocol sequence error
 *	176	END command expected
 *	178	END DATA expected
 *	180	Unknown interface secondary command
 *	181	Misplaced data byte
 *	184	Interface Loopback protocol error
 *	185	Self test protocol error
 *	188	HPIB parity error
 *	189	Operator reset during protocol sequence
 *	190	Device clear received
 */

/* SR6 is count of commands accepted since Immediate Response command failed */