Welcome to mirror list, hosted at ThFree Co, Russian Federation.

mtio.h « cygwin « include « cygwin « winsup - cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 04d5df4515fb2710e44cdc65d9d3ce33c9d37190 (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
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
/* cygwin/mtio.h

   Copyright 1999, 2001, 2004 Red Hat, Inc.

   Written by Corinna Vinschen <corinna@vinschen.de>

This file is part of Cygwin.

This software is a copyrighted work licensed under the terms of the
Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
details. */

/* cygwin/mtio.h header file for Cygwin.

   by C. Vinschen.  */

#ifndef _CYGWIN_MTIO_H
#define _CYGWIN_MTIO_H

#include <sys/ioctl.h>
#include <asm/socket.h>

#ifndef DEFTAPE
#define DEFTAPE "/dev/tape"
#endif

/*
 * Structures and definitions for mag tape io control commands
 */

/* structure for MTIOCTOP - mag tape op command */
struct	mtop {
	short	mt_op;		/* operations defined below */
	int	mt_count;	/* how many of them */
};

/* Magnetic Tape operations [Not all operations supported by all drivers]: */
#define MTRESET 0	/* reset drive in case of problems */
#define MTFSF	1	/* forward space over FileMark,
			 * position at first record of next file
			 */
#define MTBSF	2	/* backward space FileMark (position before FM) */
#define MTFSR	3	/* forward space record */
#define MTBSR	4	/* backward space record */
#define MTWEOF	5	/* write an end-of-file record (mark) */
#define MTREW	6	/* rewind */
#define MTOFFL	7	/* rewind and put the drive offline (eject?) */
#define MTNOP	8	/* no op, set status only (read with MTIOCGET) */
#define MTRETEN 9	/* retension tape */
#define MTBSFM	10	/* +backward space FileMark, position at FM */
#define MTFSFM  11	/* +forward space FileMark, position at FM */
#define MTEOM	12	/* goto end of recorded media (for appending files).
			 * MTEOM positions after the last FM, ready for
			 * appending another file.
			 */
#define MTERASE 13	/* erase tape -- be careful! */

#define MTRAS1  14	/* run self test 1 (nondestructive) */
#define MTRAS2	15	/* run self test 2 (destructive) */
#define MTRAS3  16	/* reserved for self test 3 */

#define MTSETBLK 20	/* set block length (SCSI) */
#define MTSETDENSITY 21	/* set tape density (SCSI) */
#define MTSEEK	22	/* seek to block (Tandberg, etc.) */
#define MTTELL	23	/* tell block (Tandberg, etc.) */
#define MTSETDRVBUFFER 24 /* set the drive buffering according to SCSI-2 */
			/* ordinary buffered operation with code 1 */
#define MTFSS	25	/* space forward over setmarks */
#define MTBSS	26	/* space backward over setmarks */
#define MTWSM	27	/* write setmarks */

#define MTLOCK  28	/* lock the drive door */
#define MTUNLOCK 29	/* unlock the drive door */
#define MTLOAD  30	/* execute the SCSI load command */
#define MTUNLOAD 31	/* execute the SCSI unload command */
#define MTCOMPRESSION 32/* control compression with SCSI mode page 15 */
#define MTSETPART 33	/* Change the active tape partition */
#define MTMKPART  34	/* Format the tape with one or two partitions */

/* structure for MTIOCGET - mag tape get status command */

struct	mtget {
	long	mt_type;	/* type of magtape device */
	long	mt_resid;	/* residual count: (not sure)
				 *	number of bytes ignored, or
				 *	number of files not skipped, or
				 *	number of records not skipped.
				 *  Cygwin: remaining KB until 1.5.7.
				 *          active partition since 1.5.8
				 *          (same as on GNU-Linux).
				 */
	/* the following registers are device dependent */
	long	mt_dsreg;	/* status register, Contains blocksize and
				   density code.  See MT_ST_xxx macros below */
	long	mt_gstat;	/* generic (device independent) status */
	long	mt_erreg;	/* error register */
	/* The next two fields are not always used */
	long	mt_fileno;	/* number of current file on tape */
	long	mt_blkno;	/* current block number */
	/* The next are Windows NT specific */
	long long	mt_capacity;	/* Tape capacity in bytes */
	long long	mt_remaining;	/* Remaining bytes */
	int		mt_minblksize;
	int		mt_maxblksize;
	int		mt_defblksize;
	unsigned long	mt_featureslow;
	unsigned long	mt_featureshigh;
	unsigned long	mt_eotwarningzonesize;
};

/* structure for MTIOCPOS - mag tape get position command */

struct	mtpos {
	long	mt_blkno;	/* current block number */
};


/* mag tape io control commands */
#define	MTIOCTOP	_IOW('m', 1, struct mtop)	/* do a mag tape op */
#define	MTIOCGET	_IOR('m', 2, struct mtget)	/* get tape status */
#define	MTIOCPOS	_IOR('m', 3, struct mtpos)	/* get tape position */

/* Generic Mag Tape (device independent) status macros for examining
 * mt_gstat -- HP-UX compatible.
 * There is room for more generic status bits here, but I don't
 * know which of them are reserved. At least three or so should
 * be added to make this really useful.
 */
#define GMT_EOF(x)              ((x) & 0x80000000)
#define GMT_BOT(x)              ((x) & 0x40000000)
#define GMT_EOT(x)              ((x) & 0x20000000)
#define GMT_SM(x)               ((x) & 0x10000000)  /* DDS setmark */
#define GMT_EOD(x)              ((x) & 0x08000000)  /* DDS EOD */
#define GMT_WR_PROT(x)          ((x) & 0x04000000)
#define GMT_REP_SM(x)           ((x) & 0x02000000)  /* Cygwin: rep. setmarks */
#define GMT_ONLINE(x)           ((x) & 0x01000000)
#define GMT_D_6250(x)           ((x) & 0x00800000)
#define GMT_D_1600(x)           ((x) & 0x00400000)
#define GMT_D_800(x)            ((x) & 0x00200000)
#define GMT_PADDING(x)          ((x) & 0x00100000)  /* Cygwin: data padding */
#define GMT_HW_ECC(x)           ((x) & 0x00080000)  /* Cygwin: HW error corr. */
#define GMT_DR_OPEN(x)          ((x) & 0x00040000)  /* door open (no tape) */
#define GMT_HW_COMP(x)          ((x) & 0x00020000)  /* Cygwin: HW compression */
#define GMT_IM_REP_EN(x)        ((x) & 0x00010000)  /* immediate report mode */
#define GMT_CLN(x)              ((x) & 0x00008000)  /* cleaning requested */
/* 15 generic status bits unused */
/* Cygwin only: The below settings are also used by the GNU-Linux SCSI tape
   driver but they aren't usually reported here.  Unfortunately, there's no
   other official method to retrieve the values of these settings and
   reporting them here apparently doesn't hurt. */
#define GMT_TWO_FM(x)           ((x) & 0x00000080)  /* two fm after write */
#define GMT_FAST_MTEOM(x)       ((x) & 0x00000040)  /* fast seek to eom */
#define GMT_AUTO_LOCK(x)        ((x) & 0x00000020)  /* auto door lock on r/w */
#define GMT_SYSV(x)		((x) & 0x00000010)  /* SYSV read semantics */
#define GMT_NOWAIT(x)		((x) & 0x00000008)  /* don't wait for positioning commands */
#define GMT_ASYNC(x)		((x) & 0x00000004)  /* asynchronous writes */


/* SCSI-tape specific definitions */
/* Bitfield shifts in the status mt_dsreg */
#define MT_ST_BLKSIZE_SHIFT	0
#define MT_ST_BLKSIZE_MASK	0xffffff
#define MT_ST_DENSITY_SHIFT	24
#define MT_ST_DENSITY_MASK	0xff000000

#define MT_ST_SOFTERR_SHIFT	0
#define MT_ST_SOFTERR_MASK	0xffff

/* Bitfields for the MTSETDRVBUFFER ioctl.  */
#define MT_ST_OPTIONS           0xf0000000
#define MT_ST_BOOLEANS          0x10000000
#define MT_ST_SETBOOLEANS       0x30000000
#define MT_ST_CLEARBOOLEANS     0x40000000
#define MT_ST_WRITE_THRESHOLD   0x20000000	/* Not supported */
#define MT_ST_DEF_OPTIONS       0x60000000	/* Not supported */
#define MT_ST_EOT_WZ_SIZE	0xf0000000	/* Cygwin only */

#define MT_ST_BUFFER_WRITES     0x00000001
#define MT_ST_ASYNC_WRITES	0x00000002
#define MT_ST_READ_AHEAD        0x00000004	/* Not supported */
#define MT_ST_DEBUGGING         0x00000008	/* Not supported */
#define MT_ST_TWO_FM		0x00000010
#define MT_ST_FAST_MTEOM        0x00000020
#define MT_ST_AUTO_LOCK		0x00000040
#define MT_ST_DEF_WRITES        0x00000080	/* Not supported */
#define MT_ST_CAN_BSR           0x00000100	/* Not supported */
#define MT_ST_NO_BLKLIMS        0x00000200	/* Not supported */
#define MT_ST_CAN_PARTITIONS    0x00000400	/* Not supported */
#define MT_ST_SCSI2LOGICAL      0x00000800	/* Not supported */
#define MT_ST_SYSV              0x00001000
#define MT_ST_NOWAIT            0x00002000
#define MT_ST_ECC		0x00010000	/* Cygwin only */
#define MT_ST_PADDING		0x00020000	/* Cygwin only */
#define MT_ST_REPORT_SM		0x00040000	/* Cygwin only */

/*
 * Constants for mt_type. Not all of these are supported,
 * and these are not all of the ones that are supported.
 *
 * Only used when not colliding with Windows codes (see below)
 */
#define MT_ISUNKNOWN		0x01
#define MT_ISQIC02		0x02	/* Generic QIC-02 tape streamer */
#define MT_ISWT5150		0x03	/* Wangtek 5150EQ, QIC-150, QIC-02 */
#define MT_ISARCHIVE_5945L2	0x04	/* Archive 5945L-2, QIC-24, QIC-02? */
#define MT_ISCMSJ500		0x05	/* CMS Jumbo 500 (QIC-02?) */
#define MT_ISTDC3610		0x06	/* Tandberg 6310, QIC-24 */
#define MT_ISARCHIVE_VP60I	0x07	/* Archive VP60i, QIC-02 */
#define MT_ISARCHIVE_2150L	0x08	/* Archive Viper 2150L */
#define MT_ISARCHIVE_2060L	0x09	/* Archive Viper 2060L */
#define MT_ISARCHIVESC499	0x0A	/* Archive SC-499 QIC-36 controller */
#define MT_ISQIC02_ALL_FEATURES	0x0F	/* Generic QIC-02 with all features */
#define MT_ISWT5099EEN24	0x11	/* Wangtek 5099-een24, 60MB, QIC-24 */
#define MT_ISTEAC_MT2ST		0x12	/* Teac MT-2ST 155mb drive, Teac DC-1 card (Wangtek type) */
#define MT_ISEVEREX_FT40A	0x32	/* Everex FT40A (QIC-40) */
#define MT_ISDDS1		0x51	/* DDS device without partitions */
#define MT_ISDDS2		0x52	/* DDS device with partitions */
#define MT_ISSCSI1		0x71	/* Generic ANSI SCSI-1 tape unit */
#define MT_ISSCSI2		0x72	/* Generic ANSI SCSI-2 tape unit */

/* More constants for mt_type.  These are the codes used by Windows >= 5.1 */
#define MT_ISDDS_4mm 		0x20
#define MT_ISMiniQic 		0x21
#define MT_ISTravan 		0x22
#define MT_ISQIC 		0x23
#define MT_ISMP_8mm 		0x24
#define MT_ISAME_8mm 		0x25
#define MT_ISAIT1_8mm 		0x26
#define MT_ISDLT 		0x27
#define MT_ISNCTP 		0x28
#define MT_ISIBM_3480 		0x29
#define MT_ISIBM_3490E 		0x2a
#define MT_ISIBM_Magstar_3590 	0x2b
#define MT_ISIBM_Magstar_MP 	0x2c
#define MT_ISSTK_DATA_D3 	0x2d
#define MT_ISSONY_DTF 		0x2e
#define MT_ISDV_6mm 		0x2f
#define MT_ISDMI 		0x30
#define MT_ISSONY_D2 		0x31
#define MT_ISCLEANER_CARTRIDGE 	0x32
#define MT_ISAVATAR_F2 		0x4f
#define MT_ISMP2_8mm 		0x50
#define MT_ISDST_S 		0x51
#define MT_ISDST_M 		0x52
#define MT_ISDST_L 		0x53
#define MT_ISVXATape_1 		0x54
#define MT_ISVXATape_2 		0x55
#define MT_ISSTK_9840 		0x56
#define MT_ISLTO_Ultrium 	0x57
#define MT_ISLTO_Accelis 	0x58
#define MT_ISAIT_8mm 		0x5a
#define MT_ISADR_1 		0x5b
#define MT_ISADR_2 		0x5c
#define MT_ISSTK_9940 		0x5d

struct mt_tape_info {
	long t_type;		/* device type id (mt_type) */
	char *t_name;		/* descriptive name */
};

#define MT_TAPE_INFO	{ \
	{MT_ISUNKNOWN,		"Unknown type of tape device"}, \
	{MT_ISQIC02,		"Generic QIC-02 tape streamer"}, \
	{MT_ISWT5150,		"Wangtek 5150, QIC-150"}, \
	{MT_ISARCHIVE_5945L2,	"Archive 5945L-2"}, \
	{MT_ISCMSJ500,		"CMS Jumbo 500"}, \
	{MT_ISTDC3610,		"Tandberg TDC 3610, QIC-24"}, \
	{MT_ISARCHIVE_VP60I,	"Archive VP60i, QIC-02"}, \
	{MT_ISARCHIVE_2150L,	"Archive Viper 2150L"}, \
	{MT_ISARCHIVE_2060L,	"Archive Viper 2060L"}, \
	{MT_ISARCHIVESC499,	"Archive SC-499 QIC-36 controller"}, \
	{MT_ISQIC02_ALL_FEATURES, "Generic QIC-02 tape, all features"}, \
	{MT_ISWT5099EEN24,	"Wangtek 5099-een24, 60MB"}, \
	{MT_ISTEAC_MT2ST,	"Teac MT-2ST 155mb data cassette drive"}, \
	{MT_ISDDS_4mm,		"DDS"}, \
	{MT_ISMiniQic,		"MiniQic"}, \
	{MT_ISTravan,		"Travan tape"}, \
	{MT_ISQIC,		"QIC tape"}, \
	{MT_ISMP_8mm,		"8mm Exabyte metal particle tape"}, \
	{MT_ISAME_8mm,		"8mm Exabyte advanced metal evap tape"}, \
	{MT_ISAIT1_8mm,		"8mm Sony AIT1 tape"}, \
	{MT_ISDLT,		"DLT compact tape)"}, \
	{MT_ISNCTP,		"Philips NCTP tape"}, \
	{MT_ISIBM_3480,		"IBM 3480 tape"}, \
	{MT_ISIBM_3490E,	"IBM 3490E tape"}, \
	{MT_ISIBM_Magstar_3590,	"IBM Magstar 3590 tape"}, \
	{MT_ISIBM_Magstar_MP,	"IBM Magstar MP tape"}, \
	{MT_ISSTK_DATA_D3,	"STK data D3 tape"}, \
	{MT_ISSONY_DTF,		"Sony DTF tape"}, \
	{MT_ISDV_6mm,		"6mm digital video tape"}, \
	{MT_ISDMI,		"Exabyte DMI tape"}, \
	{MT_ISSONY_D2,		"Sony D2S or D2L tape"}, \
	{MT_ISCLEANER_CARTRIDGE, "Cleaner (all drive types that support cleaners)"}, \
	{MT_ISAVATAR_F2,	"Avatar 2"}, \
	{MT_ISMP2_8mm,		"8mm Hitachi tape"}, \
	{MT_ISDST_S,		"Ampex DST small tape"}, \
	{MT_ISDST_M,		"Ampex DST medium tape"}, \
	{MT_ISDST_L,		"Ampex DST large tape"}, \
	{MT_ISVXATape_1,	"Ecrix 8mm tape"}, \
	{MT_ISVXATape_2,	"Ecrix 8mm tape"}, \
	{MT_ISSTK_9840,		"STK 9840"}, \
	{MT_ISLTO_Ultrium,	"LTO Ultrium (IBM, HP, Seagate)"}, \
	{MT_ISLTO_Accelis,	"LTO Accelis (IBM, HP, Seagate)"}, \
	{MT_ISAIT_8mm,		"AIT tape (AIT2 or higher)"}, \
	{MT_ISADR_1,		"OnStream ADR1"}, \
	{MT_ISADR_2,		"OnStream ADR2"}, \
	{MT_ISSTK_9940,		"STK 9940"}, \
	{MT_ISSCSI1,		"Generic SCSI-1 tape"}, \
	{MT_ISSCSI2,		"Generic SCSI-2 tape"}, \
	{0, NULL} \
}

#endif /* _CYGWIN_MTIO_H */