1 #pragma once
2 
3 #include <sys/ioctl.h>
4 #include <sys/types.h>
5 
6 struct mtop {
7     short mt_op;
8     int mt_count;
9 };
10 
11 #define _IOT_mtop _IOT(_IOTS(short), 1, _IOTS(int), 1, 0, 0)
12 #define _IOT_mtget _IOT(_IOTS(long), 7, 0, 0, 0, 0)
13 #define _IOT_mtpos _IOT_SIMPLE(long)
14 #define _IOT_mtconfiginfo _IOT(_IOTS(long), 2, _IOTS(short), 3, _IOTS(long), 1)
15 
16 #define MTRESET 0
17 #define MTFSF 1
18 #define MTBSF 2
19 #define MTFSR 3
20 #define MTBSR 4
21 #define MTWEOF 5
22 #define MTREW 6
23 #define MTOFFL 7
24 #define MTNOP 8
25 #define MTRETEN 9
26 #define MTBSFM 10
27 #define MTFSFM 11
28 #define MTEOM 12
29 #define MTERASE 13
30 #define MTRAS1 14
31 #define MTRAS2 15
32 #define MTRAS3 16
33 #define MTSETBLK 20
34 #define MTSETDENSITY 21
35 #define MTSEEK 22
36 #define MTTELL 23
37 #define MTSETDRVBUFFER 24
38 #define MTFSS 25
39 #define MTBSS 26
40 #define MTWSM 27
41 #define MTLOCK 28
42 #define MTUNLOCK 29
43 #define MTLOAD 30
44 #define MTUNLOAD 31
45 #define MTCOMPRESSION 32
46 #define MTSETPART 33
47 #define MTMKPART 34
48 
49 struct mtget {
50     long mt_type;
51     long mt_resid;
52     long mt_dsreg;
53     long mt_gstat;
54     long mt_erreg;
55     int mt_fileno;
56     int mt_blkno;
57 };
58 
59 #define MT_ISUNKNOWN 0x01
60 #define MT_ISQIC02 0x02
61 #define MT_ISWT5150 0x03
62 #define MT_ISARCHIVE_5945L2 0x04
63 #define MT_ISCMSJ500 0x05
64 #define MT_ISTDC3610 0x06
65 #define MT_ISARCHIVE_VP60I 0x07
66 #define MT_ISARCHIVE_2150L 0x08
67 #define MT_ISARCHIVE_2060L 0x09
68 #define MT_ISARCHIVESC499 0x0A
69 #define MT_ISQIC02_ALL_FEATURES 0x0F
70 #define MT_ISWT5099EEN24 0x11
71 #define MT_ISTEAC_MT2ST 0x12
72 #define MT_ISEVEREX_FT40A 0x32
73 #define MT_ISDDS1 0x51
74 #define MT_ISDDS2 0x52
75 #define MT_ISSCSI1 0x71
76 #define MT_ISSCSI2 0x72
77 #define MT_ISFTAPE_UNKNOWN 0x800000
78 #define MT_ISFTAPE_FLAG 0x800000
79 
80 struct mt_tape_info {
81     long t_type;
82     char* t_name;
83 };
84 
85 #define MT_TAPE_INFO                                                                              \
86     {                                                                                             \
87         {MT_ISUNKNOWN, "Unknown type of tape device"},                                            \
88             {MT_ISQIC02, "Generic QIC-02 tape streamer"}, {MT_ISWT5150, "Wangtek 5150, QIC-150"}, \
89             {MT_ISARCHIVE_5945L2, "Archive 5945L-2"}, {MT_ISCMSJ500, "CMS Jumbo 500"},            \
90             {MT_ISTDC3610, "Tandberg TDC 3610, QIC-24"},                                          \
91             {MT_ISARCHIVE_VP60I, "Archive VP60i, QIC-02"},                                        \
92             {MT_ISARCHIVE_2150L, "Archive Viper 2150L"},                                          \
93             {MT_ISARCHIVE_2060L, "Archive Viper 2060L"},                                          \
94             {MT_ISARCHIVESC499, "Archive SC-499 QIC-36 controller"},                              \
95             {MT_ISQIC02_ALL_FEATURES, "Generic QIC-02 tape, all features"},                       \
96             {MT_ISWT5099EEN24, "Wangtek 5099-een24, 60MB"},                                       \
97             {MT_ISTEAC_MT2ST, "Teac MT-2ST 155mb data cassette drive"},                           \
98             {MT_ISEVEREX_FT40A, "Everex FT40A, QIC-40"}, {MT_ISSCSI1, "Generic SCSI-1 tape"},     \
99             {MT_ISSCSI2, "Generic SCSI-2 tape"}, {                                                \
100             0, 0                                                                                  \
101         }                                                                                         \
102     }
103 
104 struct mtpos {
105     long mt_blkno;
106 };
107 
108 struct mtconfiginfo {
109     long mt_type;
110     long ifc_type;
111     unsigned short irqnr;
112     unsigned short dmanr;
113     unsigned short port;
114     unsigned long debug;
115     unsigned have_dens : 1;
116     unsigned have_bsf : 1;
117     unsigned have_fsr : 1;
118     unsigned have_bsr : 1;
119     unsigned have_eod : 1;
120     unsigned have_seek : 1;
121     unsigned have_tell : 1;
122     unsigned have_ras1 : 1;
123     unsigned have_ras2 : 1;
124     unsigned have_ras3 : 1;
125     unsigned have_qfa : 1;
126     unsigned pad1 : 5;
127     char reserved[10];
128 };
129 
130 #define MTIOCTOP _IOW('m', 1, struct mtop)
131 #define MTIOCGET _IOR('m', 2, struct mtget)
132 #define MTIOCPOS _IOR('m', 3, struct mtpos)
133 
134 #define MTIOCGETCONFIG _IOR('m', 4, struct mtconfiginfo)
135 #define MTIOCSETCONFIG _IOW('m', 5, struct mtconfiginfo)
136 
137 #define GMT_EOF(x) ((x)&0x80000000)
138 #define GMT_BOT(x) ((x)&0x40000000)
139 #define GMT_EOT(x) ((x)&0x20000000)
140 #define GMT_SM(x) ((x)&0x10000000)
141 #define GMT_EOD(x) ((x)&0x08000000)
142 #define GMT_WR_PROT(x) ((x)&0x04000000)
143 #define GMT_ONLINE(x) ((x)&0x01000000)
144 #define GMT_D_6250(x) ((x)&0x00800000)
145 #define GMT_D_1600(x) ((x)&0x00400000)
146 #define GMT_D_800(x) ((x)&0x00200000)
147 #define GMT_DR_OPEN(x) ((x)&0x00040000)
148 #define GMT_IM_REP_EN(x) ((x)&0x00010000)
149 
150 #define MT_ST_BLKSIZE_SHIFT 0
151 #define MT_ST_BLKSIZE_MASK 0xffffff
152 #define MT_ST_DENSITY_SHIFT 24
153 #define MT_ST_DENSITY_MASK 0xff000000
154 #define MT_ST_SOFTERR_SHIFT 0
155 #define MT_ST_SOFTERR_MASK 0xffff
156 #define MT_ST_OPTIONS 0xf0000000
157 #define MT_ST_BOOLEANS 0x10000000
158 #define MT_ST_SETBOOLEANS 0x30000000
159 #define MT_ST_CLEARBOOLEANS 0x40000000
160 #define MT_ST_WRITE_THRESHOLD 0x20000000
161 #define MT_ST_DEF_BLKSIZE 0x50000000
162 #define MT_ST_DEF_OPTIONS 0x60000000
163 #define MT_ST_BUFFER_WRITES 0x1
164 #define MT_ST_ASYNC_WRITES 0x2
165 #define MT_ST_READ_AHEAD 0x4
166 #define MT_ST_DEBUGGING 0x8
167 #define MT_ST_TWO_FM 0x10
168 #define MT_ST_FAST_MTEOM 0x20
169 #define MT_ST_AUTO_LOCK 0x40
170 #define MT_ST_DEF_WRITES 0x80
171 #define MT_ST_CAN_BSR 0x100
172 #define MT_ST_NO_BLKLIMS 0x200
173 #define MT_ST_CAN_PARTITIONS 0x400
174 #define MT_ST_SCSI2LOGICAL 0x800
175 #define MT_ST_CLEAR_DEFAULT 0xfffff
176 #define MT_ST_DEF_DENSITY (MT_ST_DEF_OPTIONS | 0x100000)
177 #define MT_ST_DEF_COMPRESSION (MT_ST_DEF_OPTIONS | 0x200000)
178 #define MT_ST_DEF_DRVBUFFER (MT_ST_DEF_OPTIONS | 0x300000)
179 #define MT_ST_HPLOADER_OFFSET 10000
180 #ifndef DEFTAPE
181 #define DEFTAPE "/dev/tape"
182 #endif
183