1c2466934SMike Pritchard.\" Copyright (c) 1996 2c2466934SMike Pritchard.\" Mike Pritchard <mpp@FreeBSD.org>. All rights reserved. 3c2466934SMike Pritchard.\" 4c2466934SMike Pritchard.\" Copyright (c) 1983, 1991, 1993 5c2466934SMike Pritchard.\" The Regents of the University of California. All rights reserved. 6c2466934SMike Pritchard.\" 7c2466934SMike Pritchard.\" Redistribution and use in source and binary forms, with or without 8c2466934SMike Pritchard.\" modification, are permitted provided that the following conditions 9c2466934SMike Pritchard.\" are met: 10c2466934SMike Pritchard.\" 1. Redistributions of source code must retain the above copyright 11c2466934SMike Pritchard.\" notice, this list of conditions and the following disclaimer. 12c2466934SMike Pritchard.\" 2. Redistributions in binary form must reproduce the above copyright 13c2466934SMike Pritchard.\" notice, this list of conditions and the following disclaimer in the 14c2466934SMike Pritchard.\" documentation and/or other materials provided with the distribution. 15c2466934SMike Pritchard.\" 3. All advertising materials mentioning features or use of this software 16c2466934SMike Pritchard.\" must display the following acknowledgement: 17c2466934SMike Pritchard.\" This product includes software developed by the University of 18c2466934SMike Pritchard.\" California, Berkeley and its contributors. 19c2466934SMike Pritchard.\" 4. Neither the name of the University nor the names of its contributors 20c2466934SMike Pritchard.\" may be used to endorse or promote products derived from this software 21c2466934SMike Pritchard.\" without specific prior written permission. 22c2466934SMike Pritchard.\" 23c2466934SMike Pritchard.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 24c2466934SMike Pritchard.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 25c2466934SMike Pritchard.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 26c2466934SMike Pritchard.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 27c2466934SMike Pritchard.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28c2466934SMike Pritchard.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29c2466934SMike Pritchard.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30c2466934SMike Pritchard.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31c2466934SMike Pritchard.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32c2466934SMike Pritchard.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33c2466934SMike Pritchard.\" SUCH DAMAGE. 34c2466934SMike Pritchard.\" 35c2466934SMike Pritchard.\" @(#)mtio.4 8.1 (Berkeley) 6/5/93 367f3dea24SPeter Wemm.\" $FreeBSD$ 37c2466934SMike Pritchard.\" 38c2466934SMike Pritchard.Dd February 11, 1996 39474fc32bSAlexey Zelkin.Dt MTIO 4 403d45e180SRuslan Ermilov.Os 41c2466934SMike Pritchard.Sh NAME 42c2466934SMike Pritchard.Nm mtio 43eb083802SRuslan Ermilov.Nd FreeBSD magtape interface 44c2466934SMike Pritchard.Sh DESCRIPTION 45c2466934SMike PritchardThe special files 46c2466934SMike Pritchardnamed 47095a0a15SPeter Pentchev.Pa /dev/[n]sa* 48c2466934SMike Pritchardrefer to SCSI tape drives, 49c2466934SMike Pritchardwhich may be attached to the system. 50095a0a15SPeter Pentchev.Pa /dev/[n]sa*.ctl 51c2466934SMike Pritchardare control devices that can be used to issue ioctls to the SCSI 52c2466934SMike Pritchardtape driver to set parameters that are required to last beyond the 53c2466934SMike Pritchardunmounting of a tape. 54c2466934SMike Pritchard.Pp 55c2466934SMike Pritchard.Pp 56c2466934SMike PritchardThe rewind devices automatically rewind 57c2466934SMike Pritchardwhen the last requested read, write or seek has finished, or the end of the tape 586d249eeeSSheldon Hearnhas been reached. 596d249eeeSSheldon HearnThe letter 60c2466934SMike Pritchard.Ql n 61c2466934SMike Pritchardis usually prepended to 62c2466934SMike Pritchardthe name of the no-rewind devices. 63c2466934SMike Pritchard.Pp 64c2466934SMike PritchardTapes can be written with either fixed length records or variable length 655203edcdSRuslan Ermilovrecords. 665203edcdSRuslan ErmilovSee 670a36ae36SMatt Jacob.Xr sa 4 68b5e7e999SRuslan Ermilovfor more information. 69b5e7e999SRuslan ErmilovTwo end-of-file markers mark the end of a tape, and 70c2466934SMike Pritchardone end-of-file marker marks the end of a tape file. 71c2466934SMike PritchardIf the tape is not to be rewound it is positioned with the 72c2466934SMike Pritchardhead in between the two tape marks, where the next write 73c2466934SMike Pritchardwill over write the second end-of-file marker. 74c2466934SMike Pritchard.Pp 75c2466934SMike PritchardAll of the magtape devices may be manipulated with the 76c2466934SMike Pritchard.Xr mt 1 77c2466934SMike Pritchardcommand. 78c2466934SMike Pritchard.Pp 79c2466934SMike PritchardA number of 80c2466934SMike Pritchard.Xr ioctl 2 81c2466934SMike Pritchardoperations are available 82c2466934SMike Pritchardon raw magnetic tape. 83c2466934SMike PritchardThe following definitions are from 84fe08efe6SRuslan Ermilov.In sys/mtio.h : 85c2466934SMike Pritchard.Bd -literal 86f5ead386SBruce Evans#ifndef _SYS_MTIO_H_ 87f5ead386SBruce Evans#define _SYS_MTIO_H_ 88f5ead386SBruce Evans 89f5ead386SBruce Evans#ifndef _KERNEL 90f5ead386SBruce Evans#include <sys/types.h> 91f5ead386SBruce Evans#endif 92f5ead386SBruce Evans#include <sys/ioccom.h> 93f5ead386SBruce Evans 94c2466934SMike Pritchard/* 95c2466934SMike Pritchard * Structures and definitions for mag tape io control commands 96c2466934SMike Pritchard */ 97c2466934SMike Pritchard 98c2466934SMike Pritchard/* structure for MTIOCTOP - mag tape op command */ 99c2466934SMike Pritchardstruct mtop { 100c2466934SMike Pritchard short mt_op; /* operations defined below */ 101c2466934SMike Pritchard daddr_t mt_count; /* how many of them */ 102c2466934SMike Pritchard}; 103c2466934SMike Pritchard 104c2466934SMike Pritchard/* operations */ 105c2466934SMike Pritchard#define MTWEOF 0 /* write an end-of-file record */ 106c2466934SMike Pritchard#define MTFSF 1 /* forward space file */ 107c2466934SMike Pritchard#define MTBSF 2 /* backward space file */ 108c2466934SMike Pritchard#define MTFSR 3 /* forward space record */ 109c2466934SMike Pritchard#define MTBSR 4 /* backward space record */ 110c2466934SMike Pritchard#define MTREW 5 /* rewind */ 111c2466934SMike Pritchard#define MTOFFL 6 /* rewind and put the drive offline */ 112c2466934SMike Pritchard#define MTNOP 7 /* no operation, sets status only */ 113c2466934SMike Pritchard#define MTCACHE 8 /* enable controller cache */ 114c2466934SMike Pritchard#define MTNOCACHE 9 /* disable controller cache */ 115c2466934SMike Pritchard 116c2466934SMike Pritchard#if defined(__FreeBSD__) 117c2466934SMike Pritchard/* Set block size for device. If device is a variable size dev */ 118c2466934SMike Pritchard/* a non zero parameter will change the device to a fixed block size */ 119c2466934SMike Pritchard/* device with block size set to that of the parameter passed in. */ 120c2466934SMike Pritchard/* Resetting the block size to 0 will restore the device to a variable */ 121c2466934SMike Pritchard/* block size device. */ 122c2466934SMike Pritchard 123c2466934SMike Pritchard#define MTSETBSIZ 10 124c2466934SMike Pritchard 125f5ead386SBruce Evans/* Set density values for device. Sets the value for the opened mode only. */ 126c2466934SMike Pritchard 127c2466934SMike Pritchard#define MTSETDNSTY 11 128c2466934SMike Pritchard 129c2466934SMike Pritchard#define MTERASE 12 /* erase to EOM */ 130c2466934SMike Pritchard#define MTEOD 13 /* Space to EOM */ 131c2466934SMike Pritchard#define MTCOMP 14 /* select compression mode 0=off, 1=def */ 132c2466934SMike Pritchard#define MTRETENS 15 /* re-tension tape */ 1330a36ae36SMatt Jacob#define MTWSS 16 /* write setmark(s) */ 1340a36ae36SMatt Jacob#define MTFSS 17 /* forward space setmark */ 1350a36ae36SMatt Jacob#define MTBSS 18 /* backward space setmark */ 1360a36ae36SMatt Jacob 1370a36ae36SMatt Jacob#define MT_COMP_ENABLE 0xffffffff 1380a36ae36SMatt Jacob#define MT_COMP_DISABLED 0xfffffffe 1390a36ae36SMatt Jacob#define MT_COMP_UNSUPP 0xfffffffd 1400a36ae36SMatt Jacob 1410a36ae36SMatt Jacob/* 1420a36ae36SMatt Jacob * Values in mt_dsreg that say what the device is doing 1430a36ae36SMatt Jacob */ 1440a36ae36SMatt Jacob#define MTIO_DSREG_NIL 0 /* Unknown */ 1450a36ae36SMatt Jacob#define MTIO_DSREG_REST 1 /* Doing Nothing */ 1460a36ae36SMatt Jacob#define MTIO_DSREG_RBSY 2 /* Communicating with tape (but no motion) */ 1470a36ae36SMatt Jacob#define MTIO_DSREG_WR 20 /* Writing */ 1480a36ae36SMatt Jacob#define MTIO_DSREG_FMK 21 /* Writing Filemarks */ 1490a36ae36SMatt Jacob#define MTIO_DSREG_ZER 22 /* Erasing */ 1500a36ae36SMatt Jacob#define MTIO_DSREG_RD 30 /* Reading */ 1510a36ae36SMatt Jacob#define MTIO_DSREG_FWD 40 /* Spacing Forward */ 1520a36ae36SMatt Jacob#define MTIO_DSREG_REV 41 /* Spacing Reverse */ 1530a36ae36SMatt Jacob#define MTIO_DSREG_POS 42 /* Hardware Positioning (direction unknown) */ 1540a36ae36SMatt Jacob#define MTIO_DSREG_REW 43 /* Rewinding */ 1550a36ae36SMatt Jacob#define MTIO_DSREG_TEN 44 /* Retensioning */ 1560a36ae36SMatt Jacob#define MTIO_DSREG_UNL 45 /* Unloading */ 157f5ead386SBruce Evans#define MTIO_DSREG_LD 46 /* Loading */ 158c2466934SMike Pritchard 159f5ead386SBruce Evans#endif /* __FreeBSD__ */ 160c2466934SMike Pritchard 161c2466934SMike Pritchard/* structure for MTIOCGET - mag tape get status command */ 162c2466934SMike Pritchard 163c2466934SMike Pritchardstruct mtget { 164c2466934SMike Pritchard short mt_type; /* type of magtape device */ 165c2466934SMike Pritchard/* the following two registers are grossly device dependent */ 166c2466934SMike Pritchard short mt_dsreg; /* ``drive status'' register */ 167c2466934SMike Pritchard short mt_erreg; /* ``error'' register */ 168c2466934SMike Pritchard/* end device-dependent registers */ 169c2466934SMike Pritchard short mt_resid; /* residual count */ 170c2466934SMike Pritchard#if defined (__FreeBSD__) 171c2466934SMike Pritchard daddr_t mt_blksiz; /* presently operating blocksize */ 172c2466934SMike Pritchard daddr_t mt_density; /* presently operating density */ 173f5ead386SBruce Evans u_int32_t mt_comp; /* presently operating compression */ 174c2466934SMike Pritchard daddr_t mt_blksiz0; /* blocksize for mode 0 */ 175c2466934SMike Pritchard daddr_t mt_blksiz1; /* blocksize for mode 1 */ 176c2466934SMike Pritchard daddr_t mt_blksiz2; /* blocksize for mode 2 */ 177c2466934SMike Pritchard daddr_t mt_blksiz3; /* blocksize for mode 3 */ 178c2466934SMike Pritchard daddr_t mt_density0; /* density for mode 0 */ 179c2466934SMike Pritchard daddr_t mt_density1; /* density for mode 1 */ 180c2466934SMike Pritchard daddr_t mt_density2; /* density for mode 2 */ 181c2466934SMike Pritchard daddr_t mt_density3; /* density for mode 3 */ 182c2466934SMike Pritchard/* the following are not yet implemented */ 183f5ead386SBruce Evans u_int32_t mt_comp0; /* compression type for mode 0 */ 184f5ead386SBruce Evans u_int32_t mt_comp1; /* compression type for mode 1 */ 185f5ead386SBruce Evans u_int32_t mt_comp2; /* compression type for mode 2 */ 186f5ead386SBruce Evans u_int32_t mt_comp3; /* compression type for mode 3 */ 1870a36ae36SMatt Jacob/* end not yet implemented */ 188c2466934SMike Pritchard#endif 189f5ead386SBruce Evans daddr_t mt_fileno; /* relative file number of current position */ 190f5ead386SBruce Evans daddr_t mt_blkno; /* relative block number of current position */ 191c2466934SMike Pritchard}; 192c2466934SMike Pritchard 1930a36ae36SMatt Jacob/* structure for MTIOCERRSTAT - tape get error status command */ 1940a36ae36SMatt Jacob/* really only supported for SCSI tapes right now */ 1950a36ae36SMatt Jacobstruct scsi_tape_errors { 1960a36ae36SMatt Jacob /* 1970a36ae36SMatt Jacob * These are latched from the last command that had a SCSI 1980a36ae36SMatt Jacob * Check Condition noted for these operations. The act 1990a36ae36SMatt Jacob * of issuing an MTIOCERRSTAT unlatches and clears them. 2000a36ae36SMatt Jacob */ 2010a36ae36SMatt Jacob u_int8_t io_sense[32]; /* Last Sense Data For Data I/O */ 2020a36ae36SMatt Jacob u_int32_t io_resid; /* residual count from last Data I/O */ 2030a36ae36SMatt Jacob u_int8_t io_cdb[16]; /* Command that Caused the Last Data Sense */ 2040a36ae36SMatt Jacob u_int8_t ctl_sense[32]; /* Last Sense Data For Control I/O */ 2050a36ae36SMatt Jacob u_int32_t ctl_resid; /* residual count from last Control I/O */ 2060a36ae36SMatt Jacob u_int8_t ctl_cdb[16]; /* Command that Caused the Last Control Sense */ 2070a36ae36SMatt Jacob /* 2080a36ae36SMatt Jacob * These are the read and write cumulative error counters. 2090a36ae36SMatt Jacob * (how to reset cumulative error counters is not yet defined). 2100a36ae36SMatt Jacob * (not implemented as yet but space is being reserved for them) 2110a36ae36SMatt Jacob */ 2120a36ae36SMatt Jacob struct { 2130a36ae36SMatt Jacob u_int32_t retries; /* total # retries performed */ 2140a36ae36SMatt Jacob u_int32_t corrected; /* total # corrections performed */ 215f87717faSMike Pritchard u_int32_t processed; /* total # corrections successful */ 2160a36ae36SMatt Jacob u_int32_t failures; /* total # corrections/retries failed */ 2170a36ae36SMatt Jacob u_int64_t nbytes; /* total # bytes processed */ 2180a36ae36SMatt Jacob } wterr, rderr; 2190a36ae36SMatt Jacob}; 2200a36ae36SMatt Jacob 2210a36ae36SMatt Jacobunion mterrstat { 2220a36ae36SMatt Jacob struct scsi_tape_errors scsi_errstat; 2230a36ae36SMatt Jacob char _reserved_padding[256]; 2240a36ae36SMatt Jacob}; 225f5ead386SBruce Evans 226c2466934SMike Pritchard/* 227c2466934SMike Pritchard * Constants for mt_type byte. These are the same 228c2466934SMike Pritchard * for controllers compatible with the types listed. 229c2466934SMike Pritchard */ 230c2466934SMike Pritchard#define MT_ISTS 0x01 /* TS-11 */ 231c2466934SMike Pritchard#define MT_ISHT 0x02 /* TM03 Massbus: TE16, TU45, TU77 */ 232c2466934SMike Pritchard#define MT_ISTM 0x03 /* TM11/TE10 Unibus */ 233c2466934SMike Pritchard#define MT_ISMT 0x04 /* TM78/TU78 Massbus */ 234c2466934SMike Pritchard#define MT_ISUT 0x05 /* SI TU-45 emulation on Unibus */ 235c2466934SMike Pritchard#define MT_ISCPC 0x06 /* SUN */ 236c2466934SMike Pritchard#define MT_ISAR 0x07 /* SUN */ 237c2466934SMike Pritchard#define MT_ISTMSCP 0x08 /* DEC TMSCP protocol (TU81, TK50) */ 238c2466934SMike Pritchard#define MT_ISCY 0x09 /* CCI Cipher */ 239c2466934SMike Pritchard#define MT_ISCT 0x0a /* HP 1/4 tape */ 240c2466934SMike Pritchard#define MT_ISFHP 0x0b /* HP 7980 1/2 tape */ 241c2466934SMike Pritchard#define MT_ISEXABYTE 0x0c /* Exabyte */ 242c2466934SMike Pritchard#define MT_ISEXA8200 0x0c /* Exabyte EXB-8200 */ 243c2466934SMike Pritchard#define MT_ISEXA8500 0x0d /* Exabyte EXB-8500 */ 244c2466934SMike Pritchard#define MT_ISVIPER1 0x0e /* Archive Viper-150 */ 245c2466934SMike Pritchard#define MT_ISPYTHON 0x0f /* Archive Python (DAT) */ 246c2466934SMike Pritchard#define MT_ISHPDAT 0x10 /* HP 35450A DAT drive */ 247c2466934SMike Pritchard#define MT_ISMFOUR 0x11 /* M4 Data 1/2 9track drive */ 248c2466934SMike Pritchard#define MT_ISTK50 0x12 /* DEC SCSI TK50 */ 249c2466934SMike Pritchard#define MT_ISMT02 0x13 /* Emulex MT02 SCSI tape controller */ 250c2466934SMike Pritchard 251c2466934SMike Pritchard/* mag tape io control commands */ 252c2466934SMike Pritchard#define MTIOCTOP _IOW('m', 1, struct mtop) /* do a mag tape op */ 253c2466934SMike Pritchard#define MTIOCGET _IOR('m', 2, struct mtget) /* get tape status */ 2540a36ae36SMatt Jacob/* these two do not appear to be used anywhere */ 255c2466934SMike Pritchard#define MTIOCIEOT _IO('m', 3) /* ignore EOT error */ 256c2466934SMike Pritchard#define MTIOCEEOT _IO('m', 4) /* enable EOT error */ 2570a36ae36SMatt Jacob/* 2580a36ae36SMatt Jacob * When more SCSI-3 SSC (streaming device) devices are out there 2590a36ae36SMatt Jacob * that support the full 32 byte type 2 structure, we'll have to 2600a36ae36SMatt Jacob * rethink these ioctls to support all the entities they haul into 2610a36ae36SMatt Jacob * the picture (64 bit blocks, logical file record numbers, etc..). 2620a36ae36SMatt Jacob */ 2630a36ae36SMatt Jacob#define MTIOCRDSPOS _IOR('m', 5, u_int32_t) /* get logical blk addr */ 2640a36ae36SMatt Jacob#define MTIOCRDHPOS _IOR('m', 6, u_int32_t) /* get hardware blk addr */ 2650a36ae36SMatt Jacob#define MTIOCSLOCATE _IOW('m', 5, u_int32_t) /* seek to logical blk addr */ 2660a36ae36SMatt Jacob#define MTIOCHLOCATE _IOW('m', 6, u_int32_t) /* seek to hardware blk addr */ 2670a36ae36SMatt Jacob#define MTIOCERRSTAT _IOR('m', 7, union mterrstat) /* get tape errors */ 268f5ead386SBruce Evans/* 269f5ead386SBruce Evans * Set EOT model- argument is number of filemarks to end a tape with. 270f5ead386SBruce Evans * Note that not all possible values will be accepted. 271f5ead386SBruce Evans */ 272f5ead386SBruce Evans#define MTIOCSETEOTMODEL _IOW('m', 8, u_int32_t) 273f5ead386SBruce Evans/* Get current EOT model */ 274f5ead386SBruce Evans#define MTIOCGETEOTMODEL _IOR('m', 8, u_int32_t) 275c2466934SMike Pritchard 276f5ead386SBruce Evans#ifndef _KERNEL 277095a0a15SPeter Pentchev#define DEFTAPE "/dev/nsa0" 278c2466934SMike Pritchard#endif 279c2466934SMike Pritchard 280f5ead386SBruce Evans#ifdef _KERNEL 281c2466934SMike Pritchard/* 282c2466934SMike Pritchard * minor device number 283c2466934SMike Pritchard */ 284c2466934SMike Pritchard 285c2466934SMike Pritchard#define T_UNIT 003 /* unit selection */ 286c2466934SMike Pritchard#define T_NOREWIND 004 /* no rewind on close */ 287c2466934SMike Pritchard#define T_DENSEL 030 /* density select */ 288c2466934SMike Pritchard#define T_800BPI 000 /* select 800 bpi */ 289c2466934SMike Pritchard#define T_1600BPI 010 /* select 1600 bpi */ 290c2466934SMike Pritchard#define T_6250BPI 020 /* select 6250 bpi */ 291c2466934SMike Pritchard#define T_BADBPI 030 /* undefined selection */ 292c2466934SMike Pritchard#endif 293f5ead386SBruce Evans 294f5ead386SBruce Evans#endif /* !_SYS_MTIO_H_ */ 295c2466934SMike Pritchard.Ed 296c2466934SMike Pritchard.Sh FILES 297095a0a15SPeter Pentchev.Bl -tag -width /dev/[n]sa* -compact 298095a0a15SPeter Pentchev.It Pa /dev/[n]sa* 299c2466934SMike Pritchard.El 300c2466934SMike Pritchard.Sh SEE ALSO 301c2466934SMike Pritchard.Xr mt 1 , 302c2466934SMike Pritchard.Xr tar 1 , 3038904de15SWarner Losh.Xr ast 4 , 304d08c353bSNeil Blakey-Milner.Xr sa 4 305c2466934SMike Pritchard.Sh HISTORY 306c2466934SMike PritchardThe 3074b66483fSRuslan Ermilov.Nm 308c2466934SMike Pritchardmanual appeared in 309c2466934SMike Pritchard.Bx 4.2 . 310400d45a3SMike PritchardAn i386 version first appeared in 311400d45a3SMike Pritchard.Fx 2.2 . 312c2466934SMike Pritchard.Sh BUGS 313c2466934SMike PritchardThe status should be returned in a device independent format. 314c2466934SMike Pritchard.Pp 315c2466934SMike PritchardThe special file naming should be redone in a more consistent and 316c2466934SMike Pritchardunderstandable manner. 317