Back to index

glibc  2.9
mtio.h
Go to the documentation of this file.
00001 /* Structures and definitions for magnetic tape I/O control commands.
00002    Copyright (C) 1996, 1997 Free Software Foundation, Inc.
00003    This file is part of the GNU C Library.
00004 
00005    The GNU C Library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Lesser General Public
00007    License as published by the Free Software Foundation; either
00008    version 2.1 of the License, or (at your option) any later version.
00009 
00010    The GNU C Library is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Lesser General Public License for more details.
00014 
00015    You should have received a copy of the GNU Lesser General Public
00016    License along with the GNU C Library; if not, write to the Free
00017    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
00018    02111-1307 USA.  */
00019 
00020 /* Written by H. Bergman <hennus@cybercomm.nl>.  */
00021 
00022 #ifndef _SYS_MTIO_H
00023 #define _SYS_MTIO_H  1
00024 
00025 /* Get necessary definitions from system and kernel headers.  */
00026 #include <sys/types.h>
00027 #include <sys/ioctl.h>
00028 
00029 
00030 /* Structure for MTIOCTOP - magnetic tape operation command.  */
00031 struct mtop
00032   {
00033     short int mt_op;        /* Operations defined below.  */
00034     int mt_count;           /* How many of them.  */
00035   };
00036 #define _IOT_mtop /* Hurd ioctl type field.  */ \
00037   _IOT (_IOTS (short), 1, _IOTS (int), 1, 0, 0)
00038 
00039 /* Magnetic Tape operations [Not all operations supported by all drivers].  */
00040 #define MTRESET 0    /* +reset drive in case of problems.  */
00041 #define MTFSF 1      /* Forward space over FileMark,
00042                       * position at first record of next file.  */
00043 #define MTBSF 2      /* Backward space FileMark (position before FM).  */
00044 #define MTFSR 3      /* Forward space record.  */
00045 #define MTBSR 4      /* Backward space record.  */
00046 #define MTWEOF       5      /* Write an end-of-file record (mark).  */
00047 #define MTREW 6      /* Rewind.  */
00048 #define MTOFFL       7      /* Rewind and put the drive offline (eject?).  */
00049 #define MTNOP 8      /* No op, set status only (read with MTIOCGET).  */
00050 #define MTRETEN 9    /* Retension tape.  */
00051 #define MTBSFM       10     /* +backward space FileMark, position at FM.  */
00052 #define MTFSFM  11   /* +forward space FileMark, position at FM.  */
00053 #define MTEOM 12     /* Goto end of recorded media (for appending files).
00054                         MTEOM positions after the last FM, ready for
00055                         appending another file.  */
00056 #define MTERASE 13   /* Erase tape -- be careful!  */
00057 
00058 #define MTRAS1  14   /* Run self test 1 (nondestructive).  */
00059 #define MTRAS2       15     /* Run self test 2 (destructive).  */
00060 #define MTRAS3  16   /* Reserved for self test 3.  */
00061 
00062 #define MTSETBLK 20  /* Set block length (SCSI).  */
00063 #define MTSETDENSITY 21     /* Set tape density (SCSI).  */
00064 #define MTSEEK       22     /* Seek to block (Tandberg, etc.).  */
00065 #define MTTELL       23     /* Tell block (Tandberg, etc.).  */
00066 #define MTSETDRVBUFFER 24 /* Set the drive buffering according to SCSI-2.
00067                           Ordinary buffered operation with code 1.  */
00068 #define MTFSS 25     /* Space forward over setmarks.  */
00069 #define MTBSS 26     /* Space backward over setmarks.  */
00070 #define MTWSM 27     /* Write setmarks.  */
00071 
00072 #define MTLOCK  28   /* Lock the drive door.  */
00073 #define MTUNLOCK 29  /* Unlock the drive door.  */
00074 #define MTLOAD  30   /* Execute the SCSI load command.  */
00075 #define MTUNLOAD 31  /* Execute the SCSI unload command.  */
00076 #define MTCOMPRESSION 32/* Control compression with SCSI mode page 15.  */
00077 #define MTSETPART 33 /* Change the active tape partition.  */
00078 #define MTMKPART  34 /* Format the tape with one or two partitions.  */
00079 
00080 /* structure for MTIOCGET - mag tape get status command */
00081 
00082 struct mtget
00083   {
00084     long int mt_type;              /* Type of magtape device.  */
00085     long int mt_resid;             /* Residual count: (not sure)
00086                                number of bytes ignored, or
00087                                number of files not skipped, or
00088                                number of records not skipped.  */
00089     /* The following registers are device dependent.  */
00090     long int mt_dsreg;             /* Status register.  */
00091     long int mt_gstat;             /* Generic (device independent) status.  */
00092     long int mt_erreg;             /* Error register.  */
00093     /* The next two fields are not always used.  */
00094     __daddr_t mt_fileno;    /* Number of current file on tape.  */
00095     __daddr_t mt_blkno;            /* Current block number.  */
00096   };
00097 #define _IOT_mtget /* Hurd ioctl type field.  */ \
00098   _IOT (_IOTS (long), 7, 0, 0, 0, 0)
00099 
00100 
00101 /* Constants for mt_type. Not all of these are supported, and
00102    these are not all of the ones that are supported.  */
00103 #define MT_ISUNKNOWN        0x01
00104 #define MT_ISQIC02          0x02   /* Generic QIC-02 tape streamer.  */
00105 #define MT_ISWT5150         0x03   /* Wangtek 5150EQ, QIC-150, QIC-02.  */
00106 #define MT_ISARCHIVE_5945L2 0x04   /* Archive 5945L-2, QIC-24, QIC-02?. */
00107 #define MT_ISCMSJ500        0x05   /* CMS Jumbo 500 (QIC-02?).  */
00108 #define MT_ISTDC3610        0x06   /* Tandberg 6310, QIC-24.  */
00109 #define MT_ISARCHIVE_VP60I  0x07   /* Archive VP60i, QIC-02.  */
00110 #define MT_ISARCHIVE_2150L  0x08   /* Archive Viper 2150L.  */
00111 #define MT_ISARCHIVE_2060L  0x09   /* Archive Viper 2060L.  */
00112 #define MT_ISARCHIVESC499   0x0A   /* Archive SC-499 QIC-36 controller. */
00113 #define MT_ISQIC02_ALL_FEATURES    0x0F   /* Generic QIC-02 with all features. */
00114 #define MT_ISWT5099EEN24    0x11   /* Wangtek 5099-een24, 60MB, QIC-24. */
00115 #define MT_ISTEAC_MT2ST            0x12   /* Teac MT-2ST 155mb drive,
00116                                       Teac DC-1 card (Wangtek type).  */
00117 #define MT_ISEVEREX_FT40A   0x32   /* Everex FT40A (QIC-40).  */
00118 #define MT_ISDDS1           0x51   /* DDS device without partitions.  */
00119 #define MT_ISDDS2           0x52   /* DDS device with partitions.  */
00120 #define MT_ISSCSI1          0x71   /* Generic ANSI SCSI-1 tape unit.  */
00121 #define MT_ISSCSI2          0x72   /* Generic ANSI SCSI-2 tape unit.  */
00122 
00123 /* QIC-40/80/3010/3020 ftape supported drives.
00124    20bit vendor ID + 0x800000 (see vendors.h in ftape distribution).  */
00125 #define MT_ISFTAPE_UNKNOWN  0x800000 /* obsolete */
00126 #define MT_ISFTAPE_FLAG            0x800000
00127 
00128 struct mt_tape_info
00129   {
00130     long int t_type;        /* Device type id (mt_type).  */
00131     char *t_name;           /* Descriptive name.  */
00132   };
00133 
00134 #define MT_TAPE_INFO \
00135   {                                                                  \
00136        {MT_ISUNKNOWN,              "Unknown type of tape device"},                 \
00137        {MT_ISQIC02,         "Generic QIC-02 tape streamer"},         \
00138        {MT_ISWT5150,        "Wangtek 5150, QIC-150"},                \
00139        {MT_ISARCHIVE_5945L2,       "Archive 5945L-2"},                      \
00140        {MT_ISCMSJ500,              "CMS Jumbo 500"},                        \
00141        {MT_ISTDC3610,              "Tandberg TDC 3610, QIC-24"},                   \
00142        {MT_ISARCHIVE_VP60I, "Archive VP60i, QIC-02"},                \
00143        {MT_ISARCHIVE_2150L, "Archive Viper 2150L"},                         \
00144        {MT_ISARCHIVE_2060L, "Archive Viper 2060L"},                         \
00145        {MT_ISARCHIVESC499,  "Archive SC-499 QIC-36 controller"},            \
00146        {MT_ISQIC02_ALL_FEATURES, "Generic QIC-02 tape, all features"},             \
00147        {MT_ISWT5099EEN24,   "Wangtek 5099-een24, 60MB"},                    \
00148        {MT_ISTEAC_MT2ST,    "Teac MT-2ST 155mb data cassette drive"},     \
00149        {MT_ISEVEREX_FT40A,  "Everex FT40A, QIC-40"},                 \
00150        {MT_ISSCSI1,         "Generic SCSI-1 tape"},                         \
00151        {MT_ISSCSI2,         "Generic SCSI-2 tape"},                         \
00152        {0, NULL}                                                     \
00153   }
00154 
00155 
00156 /* Structure for MTIOCPOS - mag tape get position command.  */
00157 
00158 struct mtpos
00159   {
00160     long int mt_blkno;      /* Current block number.  */
00161   };
00162 #define _IOT_mtpos /* Hurd ioctl type field.  */ \
00163   _IOT_SIMPLE (long)
00164 
00165 
00166 /* Structure for MTIOCGETCONFIG/MTIOCSETCONFIG primarily intended
00167    as an interim solution for QIC-02 until DDI is fully implemented.  */
00168 struct mtconfiginfo
00169   {
00170     long int mt_type;              /* Drive type.  */
00171     long int ifc_type;             /* Interface card type.  */
00172     unsigned short int irqnr;      /* IRQ number to use.  */
00173     unsigned short int dmanr;      /* DMA channel to use.  */
00174     unsigned short int port;       /* IO port base address.  */
00175 
00176     unsigned long int debug;       /* Debugging flags.  */
00177 
00178     unsigned have_dens:1;
00179     unsigned have_bsf:1;
00180     unsigned have_fsr:1;
00181     unsigned have_bsr:1;
00182     unsigned have_eod:1;
00183     unsigned have_seek:1;
00184     unsigned have_tell:1;
00185     unsigned have_ras1:1;
00186     unsigned have_ras2:1;
00187     unsigned have_ras3:1;
00188     unsigned have_qfa:1;
00189 
00190     unsigned pad1:5;
00191     char reserved[10];
00192   };
00193 #define _IOT_mtconfiginfo /* Hurd ioctl type field.  */ \
00194   _IOT (_IOTS (long), 2, _IOTS (short), 3, _IOTS (long), 1) /* XXX wrong */
00195 
00196 
00197 /* Magnetic tape I/O control commands.  */
00198 #define       MTIOCTOP      _IOW('m', 1, struct mtop)   /* Do a mag tape op. */
00199 #define       MTIOCGET      _IOR('m', 2, struct mtget)  /* Get tape status.  */
00200 #define       MTIOCPOS      _IOR('m', 3, struct mtpos)  /* Get tape position.*/
00201 
00202 /* The next two are used by the QIC-02 driver for runtime reconfiguration.
00203    See tpqic02.h for struct mtconfiginfo.  */
00204 #define       MTIOCGETCONFIG       _IOR('m', 4, struct mtconfiginfo) /* Get tape config.*/
00205 #define       MTIOCSETCONFIG       _IOW('m', 5, struct mtconfiginfo) /* Set tape config.*/
00206 
00207 /* Generic Mag Tape (device independent) status macros for examining
00208    mt_gstat -- HP-UX compatible.
00209    There is room for more generic status bits here, but I don't
00210    know which of them are reserved. At least three or so should
00211    be added to make this really useful.  */
00212 #define GMT_EOF(x)              ((x) & 0x80000000)
00213 #define GMT_BOT(x)              ((x) & 0x40000000)
00214 #define GMT_EOT(x)              ((x) & 0x20000000)
00215 #define GMT_SM(x)               ((x) & 0x10000000)  /* DDS setmark */
00216 #define GMT_EOD(x)              ((x) & 0x08000000)  /* DDS EOD */
00217 #define GMT_WR_PROT(x)          ((x) & 0x04000000)
00218 /* #define GMT_ ?           ((x) & 0x02000000) */
00219 #define GMT_ONLINE(x)           ((x) & 0x01000000)
00220 #define GMT_D_6250(x)           ((x) & 0x00800000)
00221 #define GMT_D_1600(x)           ((x) & 0x00400000)
00222 #define GMT_D_800(x)            ((x) & 0x00200000)
00223 /* #define GMT_ ?           ((x) & 0x00100000) */
00224 /* #define GMT_ ?           ((x) & 0x00080000) */
00225 #define GMT_DR_OPEN(x)          ((x) & 0x00040000)  /* Door open (no tape).  */
00226 /* #define GMT_ ?           ((x) & 0x00020000) */
00227 #define GMT_IM_REP_EN(x)        ((x) & 0x00010000)  /* Immediate report mode.*/
00228 /* 16 generic status bits unused.  */
00229 
00230 
00231 /* SCSI-tape specific definitions.  Bitfield shifts in the status  */
00232 #define MT_ST_BLKSIZE_SHIFT 0
00233 #define MT_ST_BLKSIZE_MASK  0xffffff
00234 #define MT_ST_DENSITY_SHIFT 24
00235 #define MT_ST_DENSITY_MASK  0xff000000
00236 
00237 #define MT_ST_SOFTERR_SHIFT 0
00238 #define MT_ST_SOFTERR_MASK  0xffff
00239 
00240 /* Bitfields for the MTSETDRVBUFFER ioctl.  */
00241 #define MT_ST_OPTIONS              0xf0000000
00242 #define MT_ST_BOOLEANS             0x10000000
00243 #define MT_ST_SETBOOLEANS   0x30000000
00244 #define MT_ST_CLEARBOOLEANS 0x40000000
00245 #define MT_ST_WRITE_THRESHOLD      0x20000000
00246 #define MT_ST_DEF_BLKSIZE   0x50000000
00247 #define MT_ST_DEF_OPTIONS   0x60000000
00248 
00249 #define MT_ST_BUFFER_WRITES 0x1
00250 #define MT_ST_ASYNC_WRITES  0x2
00251 #define MT_ST_READ_AHEAD    0x4
00252 #define MT_ST_DEBUGGING            0x8
00253 #define MT_ST_TWO_FM        0x10
00254 #define MT_ST_FAST_MTEOM    0x20
00255 #define MT_ST_AUTO_LOCK            0x40
00256 #define MT_ST_DEF_WRITES    0x80
00257 #define MT_ST_CAN_BSR              0x100
00258 #define MT_ST_NO_BLKLIMS    0x200
00259 #define MT_ST_CAN_PARTITIONS    0x400
00260 #define MT_ST_SCSI2LOGICAL      0x800
00261 
00262 /* The mode parameters to be controlled. Parameter chosen with bits 20-28.  */
00263 #define MT_ST_CLEAR_DEFAULT 0xfffff
00264 #define MT_ST_DEF_DENSITY   (MT_ST_DEF_OPTIONS | 0x100000)
00265 #define MT_ST_DEF_COMPRESSION      (MT_ST_DEF_OPTIONS | 0x200000)
00266 #define MT_ST_DEF_DRVBUFFER (MT_ST_DEF_OPTIONS | 0x300000)
00267 
00268 /* The offset for the arguments for the special HP changer load command.  */
00269 #define MT_ST_HPLOADER_OFFSET 10000
00270 
00271 
00272 /* Specify default tape device.  */
00273 #ifndef DEFTAPE
00274 # define DEFTAPE     "/dev/tape"
00275 #endif
00276 
00277 #endif /* mtio.h */