Print this page
10529 Convert mtio(7I) to mandoc

Split Close
Expand all
Collapse all
          --- old/usr/src/man/man7i/mtio.7i.man.txt
          +++ new/usr/src/man/man7i/mtio.7i.man.txt
   1    1  MTIO(7I)                        Ioctl Requests                        MTIO(7I)
   2    2  
   3      -
   4      -
   5    3  NAME
   6      -       mtio - general magnetic tape interface
        4 +     mtio - general magnetic tape interface
   7    5  
   8    6  SYNOPSIS
   9      -       #include <sys/types.h>
  10      -       #include <sys/ioctl.h>
  11      -       #include <sys/mtio.h>
        7 +     #include <sys/types.h>
        8 +     #include <sys/ioctl.h>
        9 +     #include <sys/mtio.h>
  12   10  
  13      -
  14   11  DESCRIPTION
  15      -       1/2", 1/4", 4mm, and 8mm magnetic tape drives all share the same
  16      -       general character device interface.
       12 +     1/2", 1/4", 4mm, and 8mm magnetic tape drives all share the same general
       13 +     character device interface.
  17   14  
       15 +     There are two types of tape records: data records and end-of-file (EOF)
       16 +     records.  EOF records are also known as tape marks and file marks.  A
       17 +     record is separated by interrecord (or tape) gaps on a tape.
  18   18  
  19      -       There are two types of tape records: data records and end-of-file (EOF)
  20      -       records. SEOF records are also known as tape marks and file marks. A
  21      -       record is separated by interrecord (or tape) gaps on a tape.
       19 +     End-of-recorded-media (EOM) is indicated by two EOF marks on 1/2" tape;
       20 +     by one EOF mark on 1/4", 4mm, and 8mm cartridge tapes.
  22   21  
       22 +   1/2" Reel Tape
       23 +     Data bytes are recorded in parallel onto the 9-track tape.  Since it is a
       24 +     variable-length tape device, the number of bytes in a physical record may
       25 +     vary.
  23   26  
  24      -       End-of-recorded-media (EOM) is indicated by two EOF marks on 1/2" tape;
  25      -       by one EOF mark on 1/4", 4mm, and 8mm cartridge tapes.
       27 +     The recording formats available (check specific tape drive) are 800 BPI,
       28 +     1600 BPI, 6250 BPI, and data compression.  Actual storage capacity is a
       29 +     function of the recording format and the length of the tape reel.  For
       30 +     example, using a 2400 foot tape, 20 Mbyte can be stored using 800 BPI, 40
       31 +     Mbyte using 1600 BPI, 140 Mbyte using 6250 BPI, or up to 700 Mbyte using
       32 +     data compression.
  26   33  
  27      -   1/2 Reel Tape"
  28      -       Data bytes are recorded in parallel onto the 9-track tape. Since it is
  29      -       a variable-length tape device, the number of bytes in a  physical
  30      -       record may vary.
       34 +   1/4" Cartridge Tape
       35 +     Data is recorded serially onto 1/4" cartridge tape.  The number of bytes
       36 +     per record is determined by the physical record size of the device.  The
       37 +     I/O request size must be a multiple of the physical record size of the
       38 +     device.  For QIC-11, QIC-24, and QIC-150 tape drives, the block size is
       39 +     512 bytes.
  31   40  
       41 +     The records are recorded on tracks in a serpentine motion.  As one track
       42 +     is completed, the drive switches to the next and begins writing in the
       43 +     opposite direction, eliminating the wasted motion of rewinding.  Each
       44 +     file, including the last, ends with one file mark.
  32   45  
  33      -       The recording formats available (check specific tape drive) are 800
  34      -       BPI, 1600 BPI, 6250 BPI, and data compression. Actual storage capacity
  35      -       is a function of the recording format and the length of the tape reel.
  36      -       For example, using a 2400 foot tape, 20 Mbyte can be stored using 800
  37      -       BPI, 40 Mbyte using 1600 BPI, 140 Mbyte using 6250 BPI, or up to 700
  38      -       Mbyte using data compression.
       46 +     Storage capacity is based on the number of tracks the drive is capable of
       47 +     recording.  For example, 4-track drives can only record 20 Mbyte of data
       48 +     on a 450 foot tape; 9-track drives can record up to 45 Mbyte of data on a
       49 +     tape of the same length.  QIC-11 is the only tape format available for
       50 +     4-track tape drives.  In contrast, 9-track tape drives can use either
       51 +     QIC-24 or QIC-11.  Storage capacity is not appreciably affected by using
       52 +     either format.  QIC-24 is preferable to QIC-11 because it records a
       53 +     reference signal to mark the position of the first track on the tape, and
       54 +     each block has a unique block number.
  39   55  
  40      -   1/4 Cartridge Tape"
  41      -       Data is recorded serially onto 1/4" cartridge tape. The number of bytes
  42      -       per record is determined by the physical record size of the device. The
  43      -       I/O request size must be a multiple of the physical record size of the
  44      -       device. For QIC-11, QIC-24, and QIC-150 tape drives, the block size is
  45      -       512 bytes.
       56 +     The QIC-150 tape drives require DC-6150 (or equivalent) tape cartridges
       57 +     for writing.  However, they can read other tape cartridges in QIC-11,
       58 +     QIC-24, or QIC-120 tape formats.
  46   59  
  47      -
  48      -       The records are recorded on tracks in a serpentine motion. As one track
  49      -       is completed, the drive switches to the next and begins writing in the
  50      -       opposite direction, eliminating the wasted motion of rewinding. Each
  51      -       file, including the last, ends with one file mark.
  52      -
  53      -
  54      -       Storage capacity is based on the number of tracks the drive is capable
  55      -       of recording. For example, 4-track drives can only record 20 Mbyte of
  56      -       data on a 450 foot tape; 9-track drives can record up to 45 Mbyte of
  57      -       data on a tape of the same length. QIC-11 is the only tape format
  58      -       available for 4-track tape drives. In contrast, 9-track tape drives can
  59      -       use either QIC-24 or QIC-11. Storage capacity is not appreciably
  60      -       affected by using either format. QIC-24 is preferable to QIC-11 because
  61      -       it records a reference signal to mark the position of the first track
  62      -       on the tape, and each block has a unique block number.
  63      -
  64      -
  65      -       The QIC-150 tape drives require DC-6150 (or equivalent) tape cartridges
  66      -       for writing. However, they can read other tape cartridges in QIC-11,
  67      -       QIC-24, or QIC-120 tape formats.
  68      -
  69   60     8mm Cartridge Tape
  70      -       Data is recorded serially onto 8mm helical scan cartridge tape. Since
  71      -       it is a variable-length tape device, the number of bytes in a  physical
  72      -       record may vary. The recording formats available (check specific tape
  73      -       drive) are standard 2Gbyte, 5Gbyte, and compressed format.
       61 +     Data is recorded serially onto 8mm helical scan cartridge tape.  Since it
       62 +     is a variable-length tape device, the number of bytes in a physical
       63 +     record may vary.  The recording formats available (check specific tape
       64 +     drive) are standard 2Gbyte, 5Gbyte, and compressed format.
  74   65  
  75   66     4mm DAT Tape
  76      -       Data is recorded either in Digital Data Storage (DDS) tape format or in
  77      -       Digital Data Storage, Data Compressed (DDS-DC) tape format. Since it is
  78      -       a variable-length tape device, the number of bytes in a  physical
  79      -       record may vary. The recording formats available are standard 2Gbyte
  80      -       and compressed format.
       67 +     Data is recorded either in Digital Data Storage (DDS) tape format or in
       68 +     Digital Data Storage, Data Compressed (DDS-DC) tape format.  Since it is
       69 +     a variable-length tape device, the number of bytes in a physical record
       70 +     may vary.  The recording formats available are standard 2Gbyte and
       71 +     compressed format.
  81   72  
  82   73     Persistent Error Handling
  83      -       Persistent error handling is a modification of the current error
  84      -       handling behaviors, BSD and SVR4. With persistent error handling
  85      -       enabled, all tape operations after an error or exception will return
  86      -       immediately with an error.  Persistent error handling can be most
  87      -       useful with asynchronous tape operations that use the aioread(3C) and
  88      -       aiowrite(3C) functions.
       74 +     Persistent error handling is a modification of the current error handling
       75 +     behaviors, BSD and SVR4.  With persistent error handling enabled, all
       76 +     tape operations after an error or exception will return immediately with
       77 +     an error.  Persistent error handling can be most useful with asynchronous
       78 +     tape operations that use the aioread(3C) and aiowrite(3C) functions.
  89   79  
       80 +     To enable persistent error handling, the ioctl MTIOCPERSISTENT must be
       81 +     issued.  If this ioctl succeeds, then persistent error handling is
       82 +     enabled and changes the current error behavior.  This ioctl will fail if
       83 +     the device driver does not support persistent error handling.
  90   84  
  91      -       To enable persistent error handling, the ioctl MTIOCPERSISTENT must be
  92      -       issued. If this ioctl succeeds, then persistent error handling is
  93      -       enabled and changes the current error behavior. This ioctl will fail if
  94      -       the device driver does not support persistent error handling.
       85 +     With persistent error handling enabled, all tape operations after an
       86 +     exception or error will return with the same error as the first command
       87 +     that failed; the operations will not be executed.  An exception is some
       88 +     event that might stop normal tape operations, such as an End Of File
       89 +     (EOF) mark or an End Of Tape (EOT) mark.  An example of an error is a
       90 +     media error.  The MTIOCLRERR ioctl must be issued to allow normal tape
       91 +     operations to continue and to clear the error.
  95   92  
       93 +     Disabling persistent error handling returns the error behavior to normal
       94 +     SVR4 error handling, and will not occur until all outstanding operations
       95 +     are completed.  Applications should wait for all outstanding operations
       96 +     to complete before disabling persistent error handling.  Closing the
       97 +     device will also disable persistent error handling and clear any errors
       98 +     or exceptions.
  96   99  
  97      -       With persistent error handling enabled, all tape operations after an
  98      -       exception or error will return with the same error as the first command
  99      -       that failed; the operations will not be executed. An exception is some
 100      -       event that might stop normal tape operations, such as an End Of File
 101      -       (EOF) mark or  an End Of Tape (EOT) mark. An example of an error is a
 102      -       media error. The MTIOCLRERR ioctl must be issued to allow normal tape
 103      -       operations to continue and to clear the error.
      100 +     The Read Operation and Write Operation subsections contain more pertinent
      101 +     information reguarding persistent error handling.
 104  102  
 105      -
 106      -       Disabling persistent error handling returns the error behavior to
 107      -       normal SVR4 error handling, and will not occur until all outstanding
 108      -       operations are completed. Applications should wait for all outstanding
 109      -       operations to complete before disabling persistent error handling.
 110      -       Closing the device will also disable persistent error handling and
 111      -       clear any errors or exceptions.
 112      -
 113      -
 114      -       The Read Operation and Write Operation subsections contain more
 115      -       pertinent information reguarding persistent error handling.
 116      -
 117  103     Read Operation
 118      -       The read(2) function reads the next record on the tape. The record size
 119      -       is passed back as the number of bytes read, provided it is not greater
 120      -       than the number requested. When a tape mark or end of data is read, a
 121      -       zero byte count is returned; all successive reads after the zero read
 122      -       will return an error and errno will be set to EIO. To move to the next
 123      -       file, an MTFSF ioctl can be issued before or after the read causing the
 124      -       error. This error handling behavior is different from the older BSD
 125      -       behavior, where another read will fetch the first record of the next
 126      -       tape file. If the BSD behavior is required, device names containing the
 127      -       letter b (for BSD behavior) in the final component should be used. If
 128      -       persistent error handling was enabled with either the BSD or SVR4 tape
 129      -       device behavior, all operations after this read error will return EIO
 130      -       errors until the MTIOCLRERR ioctl is issued. An MTFSF ioctl can then he
 131      -       issued.
      104 +     The read(2) function reads the next record on the tape.  The record size
      105 +     is passed back as the number of bytes read, provided it is not greater
      106 +     than the number requested.  When a tape mark or end of data is read, a
      107 +     zero byte count is returned; all successive reads after the zero read
      108 +     will return an error and errno will be set to EIO.  To move to the next
      109 +     file, an MTFSF ioctl can be issued before or after the read causing the
      110 +     error.  This error handling behavior is different from the older BSD
      111 +     behavior, where another read will fetch the first record of the next tape
      112 +     file.  If the BSD behavior is required, device names containing the
      113 +     letter `b' (for BSD behavior) in the final component should be used.  If
      114 +     persistent error handling was enabled with either the BSD or SVR4 tape
      115 +     device behavior, all operations after this read error will return EIO
      116 +     errors until the MTIOCLRERR ioctl is issued.  An MTFSF ioctl can then he
      117 +     issued.
 132  118  
      119 +     Two successful successive reads that both return zero byte counts
      120 +     indicate EOM on the tape.  No further reading should be performed past
      121 +     the EOM.
 133  122  
 134      -       Two successful successive reads that both return zero byte counts
 135      -       indicate EOM on the tape. No further reading should be performed past
 136      -       the EOM.
      123 +     Fixed-length I/O tape devices require the number of bytes read to be a
      124 +     multiple of the physical record size.  For example, 1/4" cartridge tape
      125 +     devices only read multiples of 512 bytes.  If the blocking factor is
      126 +     greater than 64,512 bytes (minphys limit), fixed-length I/O tape devices
      127 +     read multiple records.
 137  128  
      129 +     Most tape devices which support variable-length I/O operations may read a
      130 +     range of 1 to 65,535 bytes.  If the record size exceeds 65,535 bytes, the
      131 +     driver reads multiple records to satisfy the request.  These multiple
      132 +     records are limited to 65,534 bytes.  Newer variable-length tape drivers
      133 +     may relax the above limitation and allow applications to read record
      134 +     sizes larger than 65,534.  Refer to the specific tape driver man page for
      135 +     details.
 138  136  
 139      -       Fixed-length I/O tape devices require the number of bytes read to be a
 140      -       multiple of the physical record size. For example, 1/4" cartridge tape
 141      -       devices only read multiples of 512 bytes. If the blocking factor is
 142      -       greater than 64,512 bytes (minphys limit), fixed-length I/O tape
 143      -       devices read multiple records.
      137 +     Reading past logical EOT is transparent to the user.  A read operation
      138 +     should never hit physical EOT.
 144  139  
      140 +     Read requests that are lesser than a physical tape record are not
      141 +     allowed.  Appropriate error is returned.
 145  142  
 146      -       Most tape devices which support variable-length I/O operations may read
 147      -       a range of 1 to 65,535 bytes. If the record size exceeds 65,535 bytes,
 148      -       the driver reads multiple records to satisfy the request. These
 149      -       multiple records are limited to 65,534 bytes. Newer variable-length
 150      -       tape drivers may relax the above limitation and allow applications to
 151      -       read record sizes larger than 65,534. Refer to the specific tape driver
 152      -       man page for details.
 153      -
 154      -
 155      -       Reading past logical EOT is transparent to the user. A read operation
 156      -       should never hit physical EOT.
 157      -
 158      -
 159      -       Read requests that are lesser than a physical tape record are not
 160      -       allowed.  Appropriate error is returned.
 161      -
 162  143     Write Operation
 163      -       The write(2) function writes the next record on the tape. The record
 164      -       has the same length as the given buffer.
      144 +     The write(2) function writes the next record on the tape.  The record has
      145 +     the same length as the given buffer.
 165  146  
      147 +     Writing is allowed on 1/4" tape at either the beginning of tape or after
      148 +     the last written file on the tape.  With the Exabyte 8200, data may be
      149 +     appended only at the beginning of tape, before a filemark, or after the
      150 +     last written file on the tape.
 166  151  
 167      -       Writing is allowed on 1/4" tape at either the beginning of tape or
 168      -       after the last written file on the tape. With the Exabyte 8200, data
 169      -       may be appended only at the beginning of tape, before a filemark, or
 170      -       after the last written file on the tape.
      152 +     Writing is not so restricted on 1/2", 4mm, and the other 8mm cartridge
      153 +     tape drives.  Care should be used when appending files onto 1/2" reel
      154 +     tape devices, since an extra file mark is appended after the last file to
      155 +     mark the EOM.  This extra file mark must be overwritten to prevent the
      156 +     creation of a null file.  To facilitate write append operations, a space
      157 +     to the EOM ioctl is provided.  Care should be taken when overwriting
      158 +     records; the erase head is just forward of the write head and any
      159 +     following records will also be erased.
 171  160  
      161 +     Fixed-length I/O tape devices require the number of bytes written to be a
      162 +     multiple of the physical record size.  For example, 1/4" cartridge tape
      163 +     devices only write multiples of 512 bytes.
 172  164  
 173      -       Writing is not so restricted on 1/2", 4mm, and the other 8mm cartridge
 174      -       tape drives. Care should be used when appending files onto 1/2" reel
 175      -       tape devices, since an extra file mark is appended after the last file
 176      -       to mark the EOM. This extra file mark must be overwritten to prevent
 177      -       the creation of a null file. To facilitate write append operations, a
 178      -       space to the EOM ioctl is provided. Care should be taken when
 179      -       overwriting records; the erase head is just forward of the write head
 180      -       and any following records will also be erased.
      165 +     Fixed-length I/O tape devices write multiple records if the blocking
      166 +     factor is greater than 64,512 bytes (minphys limit).  These multiple
      167 +     writes are limited to 64,512 bytes.  For example, if a write request is
      168 +     issued for 65,536 bytes using a 1/4" cartridge tape, two writes are
      169 +     issued; the first for 64,512 bytes and the second for 1024 bytes.
 181  170  
      171 +     Most tape devices which support variable-length I/O operations may write
      172 +     a range of 1 to 65,535 bytes.  If the record size exceeds 65,535 bytes,
      173 +     the driver writes multiple records to satisfy the request.  These
      174 +     multiple records are limited to 65,534 bytes.  As an example, if a write
      175 +     request for 65,540 bytes is issued, two records are written; one for
      176 +     65,534 bytes followed by another record for 6 bytes.  Newer variable-
      177 +     length tape drivers may relax the above limitation and allow applications
      178 +     to write record sizes larger than 65,534.  effer to the specific tape
      179 +     driver man page for details.
 182  180  
 183      -       Fixed-length I/O tape devices require the number of bytes written to be
 184      -       a multiple of the physical record size. For example, 1/4" cartridge
 185      -       tape devices only write multiples of 512 bytes.
      181 +     When logical EOT is encountered during a write, that write operation
      182 +     completes and the number of bytes successfully transferred is returned
      183 +     (note that a 'short write' may have occurred and not all the requested
      184 +     bytes would have been transferred.  The actual amount of data written
      185 +     will depend on the type of device being used).  The next write will
      186 +     return a zero byte count.  A third write will successfully transfer some
      187 +     bytes (as indicated by the returned byte count, which again could be a
      188 +     short write); the fourth will transfer zero bytes, and so on, until the
      189 +     physical EOT is reached and all writes will fail with EIO.
 186  190  
      191 +     When logical EOT is encountered with persistent error handling enabled,
      192 +     the current write may complete or be a short write.  The next write will
      193 +     return a zero byte count.  At this point an application should act
      194 +     appropriately for end of tape cleanup or issue yet another write, which
      195 +     will return the error ENOSPC.  After clearing the exception with
      196 +     MTIOCLRERR, the next write will succeed (possibly short), followed by
      197 +     another zero byte write count, and then another ENOSPC error.
 187  198  
 188      -       Fixed-length I/O tape devices write multiple records if the blocking
 189      -       factor is greater than 64,512 bytes (minphys limit). These multiple
 190      -       writes are limited to 64,512 bytes. For example, if a write request is
 191      -       issued for 65,536 bytes using a 1/4" cartridge tape, two writes are
 192      -       issued; the first for 64,512 bytes and the second for 1024 bytes.
      199 +     Allowing writes after EOT has been encountered enables the flushing of
      200 +     buffers.  However, it is strongly recommended to terminate the writing
      201 +     and close the file as soon as possible.
 193  202  
      203 +     Seeks are ignored in tape I/O.
 194  204  
 195      -       Most tape devices which support variable-length I/O operations may
 196      -       write a range of 1 to 65,535 bytes. If the record size exceeds 65,535
 197      -       bytes, the driver writes multiple records to satisfy the request. These
 198      -       multiple records are limited to 65,534 bytes. As an example, if a write
 199      -       request for 65,540 bytes is issued, two records are written; one for
 200      -       65,534 bytes followed by another record for 6 bytes. Newer variable-
 201      -       length tape drivers may relax the above limitation and allow
 202      -       applications to write record sizes larger  than 65,534.  Refer to the
 203      -       specific tape driver man page for details.
 204      -
 205      -
 206      -       When logical EOT is encountered during a write, that write operation
 207      -       completes and the number of bytes successfully transferred is returned
 208      -       (note that a 'short write' may have occurred and not all the requested
 209      -       bytes would have been transferred. The actual amount of data written
 210      -       will depend on the type of device being used). The next write will
 211      -       return a zero byte count. A third write will successfully transfer some
 212      -       bytes (as indicated by the returned byte count, which again could be a
 213      -       short write); the fourth will transfer zero bytes, and so on, until the
 214      -       physical EOT is reached and all writes will fail with EIO.
 215      -
 216      -
 217      -       When logical EOT is encountered with persistent error handling enabled,
 218      -       the current write may complete or be a short write. The next write will
 219      -       return a zero byte count. At this point an application should act
 220      -       appropriately for end of tape cleanup or issue yet another write, which
 221      -       will return the error ENOSPC. After clearing the exception with
 222      -       MTIOCLRERR, the next write will succeed (possibly short), followed by
 223      -       another zero byte write count, and then another ENOSPC error.
 224      -
 225      -
 226      -       Allowing writes after LEOT has been encountered enables the flushing of
 227      -       buffers. However, it is strongly recommended to terminate the writing
 228      -       and close the file as soon as possible.
 229      -
 230      -
 231      -       Seeks are ignored in tape I/O.
 232      -
 233  205     Close Operation
 234      -       Magnetic tapes are rewound when closed, except when the "no-rewind"
 235      -       devices have been specified. The names of no-rewind device files use
 236      -       the letter n as the end of the final component. The no-rewind version
 237      -       of /dev/rmt/0l is /dev/rmt/0ln. In case of error for a no-rewind
 238      -       device, the next open rewinds the device.
      206 +     Magnetic tapes are rewound when closed, except when the "no-rewind"
      207 +     devices have been specified.  The names of no-rewind device files use the
      208 +     letter `n' as the end of the final component.  The no-rewind version of
      209 +     /dev/rmt/0l is /dev/rmt/0ln.  In case of error for a no-rewind device,
      210 +     the next open rewinds the device.
 239  211  
      212 +     If the driver was opened for reading and a no-rewind device has been
      213 +     specified, the close advances the tape past the next filemark (unless the
      214 +     current file position is at EOM), leaving the tape correctly positioned
      215 +     to read the first record of the next file.  However, if the tape is at
      216 +     the first record of a file it doesn't advance again to the first record
      217 +     of the next file.  These semantics are different from the older BSD
      218 +     behavior.  If BSD behavior is required where no implicit space operation
      219 +     is executed on close, the non-rewind device name containing the letter
      220 +     `b' (for BSD behavior) in the final component should be specified.
 240  221  
 241      -       If the driver was opened for reading and a no-rewind device has been
 242      -       specified, the close advances the tape past the next filemark (unless
 243      -       the current file position is at EOM), leaving the tape correctly
 244      -       positioned to read the first record of the next file. However, if the
 245      -       tape is at the first record of a file it doesn't advance again to the
 246      -       first record of the next file. These semantics are different from the
 247      -       older BSD behavior. If BSD behavior is required where no implicit space
 248      -       operation is executed on close, the non-rewind device name containing
 249      -       the letter b (for BSD behavior) in the final component should be
 250      -       specified.
      222 +     If data was written, a file mark is automatically written by the driver
      223 +     upon close.  If the rewinding device was specified, the tape will be
      224 +     rewound after the file mark is written.  If the user wrote a file mark
      225 +     prior to closing, then no file mark is written upon close.  If a file
      226 +     positioning ioctl, like rewind, is issued after writing, a file mark is
      227 +     written before repositioning the tape.
 251  228  
      229 +     All buffers are flushed on closing a tape device.  Hence, it is strongly
      230 +     recommended that the application wait for all buffers to be flushed
      231 +     before closing the device.  This can be done by writing a filemark via
      232 +     MTWEOF, even with a zero count.
 252  233  
 253      -       If data was written, a file mark is automatically written by the driver
 254      -       upon close. If the rewinding device was specified, the tape will be
 255      -       rewound after the file mark is written. If the user wrote a file mark
 256      -       prior to closing, then no file mark is written upon close. If a file
 257      -       positioning ioctl, like rewind, is issued after writing, a file mark is
 258      -       written before repositioning the tape.
      234 +     Note that for 1/2" reel tape devices, two file marks are written to mark
      235 +     the EOM before rewinding or performing a file positioning ioctl.  If the
      236 +     user wrote a file mark before closing a 1/2" reel tape device, the driver
      237 +     will always write a file mark before closing to insure that the end of
      238 +     recorded media is marked properly.  If the non-rewinding device was
      239 +     specified, two file marks are written and the tape is left positioned
      240 +     between the two so that the second one is overwritten on a subsequent
      241 +     open(2) and write(2).
 259  242  
      243 +     If no data was written and the driver was opened for WRITE-ONLY access,
      244 +     one or two file marks are written, thus creating a null file.
 260  245  
 261      -       All buffers are flushed on closing a tape device. Hence, it is strongly
 262      -       recommended that the application wait for all buffers to be flushed
 263      -       before closing the device. This can be done by writing a filemark via
 264      -       MTWEOF, even with a zero count.
      246 +     After closing the device, persistent error handling will be disabled and
      247 +     any error or exception will be cleared.
 265  248  
 266      -
 267      -       Note that for 1/2" reel tape devices, two file marks are written to
 268      -       mark the EOM before rewinding or performing a file positioning ioctl.
 269      -       If the user wrote a file mark before closing a 1/2" reel tape device,
 270      -       the driver will always write a file mark before closing to insure that
 271      -       the end of recorded media is marked properly. If the non-rewinding
 272      -       device was specified, two file marks are written and the tape is left
 273      -       positioned between the two so that the second one is overwritten on a
 274      -       subsequent open(2) and write(2).
 275      -
 276      -
 277      -       If no data was written and the driver was opened for WRITE-ONLY access,
 278      -       one or two file marks are written, thus creating a null file.
 279      -
 280      -
 281      -       After closing the device, persistent error handling will be disabled
 282      -       and any error or exception will be cleared.
 283      -
 284  249  IOCTLS
 285      -       Not all devices support all ioctls. The driver returns an ENOTTY error
 286      -       on unsupported ioctls.
      250 +     Not all devices support all ioctls.  The driver returns an ENOTTY error
      251 +     on unsupported ioctls.
 287  252  
      253 +     The following structure definitions for magnetic tape ioctl(2) commands
      254 +     are from <sys/mtio.h>.
 288  255  
 289      -       The following structure definitions for magnetic tape ioctl commands
 290      -       are from <sys/mtio.h>.
      256 +     The minor device byte structure is:
 291  257  
      258 +     15      7      6          5          4         3          2       1   0
      259 +     ________________________________________________________________________
      260 +     Unit #       BSD      Reserved   Density   Density   No rewind    Unit #
      261 +     Bits 7-15   behavior              Select    Select    on Close    Bits 0-1
 292  262  
 293      -       The minor device byte structure is::
      263 +     /*
      264 +      * Layout of minor device byte:
      265 +      */
      266 +     #define MTUNIT(dev)   (((minor(dev) & 0xff80) >> 5) + (minor(dev) & 0x3))
      267 +     #define MT_NOREWIND     (1 <<2)
      268 +     #define MT_DENSITY_MASK (3 <<3)
      269 +     #define MT_DENSITY1     (0 <<3) /* Lowest density/format */
      270 +     #define MT_DENSITY2     (1 <<3)
      271 +     #define MT_DENSITY3     (2 <<3)
      272 +     #define MT_DENSITY4     (3 <<3) /* Highest density/format */
      273 +     #define MTMINOR(unit)   (((unit & 0x7fc) << 5) + (unit & 0x3))
      274 +     #define MT_BSD  (1 <<6)         /* BSD behavior on close */
 294  275  
 295      -         15      7      6          5          4         3          2       1   0
 296      -         ________________________________________________________________________
 297      -         Unit #       BSD      Reserved   Density   Density   No rewind    Unit #
 298      -         Bits 7-15   behavior              Select    Select    on Close    Bits 0-1
      276 +     /* Structure for MTIOCTOP - magnetic tape operation command */
 299  277  
      278 +     struct mtop {
      279 +       short   mt_op;       /* operation */
      280 +       daddr_t mt_count;    /* number of operations */
      281 +     };
 300  282  
 301      -         /*
 302      -          * Layout of minor device byte:
 303      -          */
 304      -         #define MTUNIT(dev) (((minor(dev) & 0xff80) >> 5) +
 305      -         (minor(dev) & 0x3))
 306      -         #define MT_NOREWIND (1 <<2)
 307      -         #define MT_DENSITY_MASK  (3 <<3)
 308      -         #define MT_DENSITY1 (0 <<3)   /* Lowest density/format */
 309      -         #define MT_DENSITY2 (1 <<3)
 310      -         #define MT_DENSITY3 (2 <<3)
 311      -         #define MT_DENSITY4 (3 <<3)   /* Highest density/format */
 312      -         #define MTMINOR(unit)    (((unit & 0x7fc) << 5) + (unit & 0x3))
 313      -         #define MT_BSD (1 <<6)       /* BSD behavior on close */
      283 +     /* Structure for MTIOCLTOP - magnetic tape operation command */
      284 +     Works exactly like MTIOCTOP except passes 64 bit mt_count values.
      285 +     struct mtlop {
      286 +             short           mt_op;
      287 +             short           pad[3];
      288 +             int64_t         mt_count;
      289 +     };
 314  290  
      291 +     The following operations of MTIOCTOP and MTIOCLTOP ioctls are supported:
 315  292  
 316      -         /* Structure for MTIOCTOP - magnetic tape operation command */
      293 +       MTWEOF         Write an end-of-file record
      294 +       MTFSF          Forward space over file mark
      295 +       MTBSF          Backward space over file mark (1/2", 8mm only)
      296 +       MTFSR          Forward space to inter-record gap
      297 +       MTBSR          Backward space to inter-record gap
      298 +       MTREW          Rewind
      299 +       MTOFFL         Rewind and take the drive off-line
      300 +       MTNOP          No operation, sets status only
      301 +       MTRETEN        Retension the tape (cartridge tape only)
      302 +       MTERASE        Erase the entire tape and rewind
      303 +       MTEOM          Position to EOM
      304 +       MTNBSF         Backward space file to beginning of file
      305 +       MTSRSZ         Set record size
      306 +       MTGRSZ         Get record size
      307 +       MTTELL         Get current position
      308 +       MTSEEK         Go to requested position
      309 +       MTFSSF         Forward to requested number of sequential file marks
      310 +       MTBSSF         Backward to requested number of sequential file marks
      311 +       MTLOCK         Prevent media removal
      312 +       MTUNLOCK       Allow media removal
      313 +       MTLOAD         Load the next tape cartridge into the tape drive
      314 +       MTIOCGETERROR  Retrieve error records from the st driver
 317  315  
 318      -         struct  mtop {
 319      -           short   mt_op;       /* operation */
 320      -           daddr_t mt_count;    /* number of operations */
 321      -         };
      316 +       /* structure for MTIOCGET - magnetic tape get status command */
 322  317  
      318 +       struct  mtget {
      319 +         short mt_type;        /* type of magtape device */
 323  320  
 324      -         /* Structure for MTIOCLTOP - magnetic tape operation command */
 325      -         Works exactly like MTIOCTOP except passes 64 bit mt_count values.
 326      -         struct  mtlop    {
 327      -                 short           mt_op;
 328      -                 short           pad[3];
 329      -                 int64_t         mt_count;
 330      -         };
 331      -
 332      -
 333      -
 334      -       The following operations of MTIOCTOP and MTIOCLTOP ioctls are
 335      -       supported:
 336      -
 337      -       MTWEOF
 338      -                        write an end-of-file record
 339      -
 340      -
 341      -       MTFSF
 342      -                        forward space over file mark
 343      -
 344      -
 345      -       MTBSF
 346      -                        backward space over file mark (1/2", 8mm only)
 347      -
 348      -
 349      -       MTFSR
 350      -                        forward space to inter-record gap
 351      -
 352      -
 353      -       MTBSR
 354      -                        backward space to inter-record gap
 355      -
 356      -
 357      -       MTREW
 358      -                        rewind
 359      -
 360      -
 361      -       MTOFFL
 362      -                        rewind and take the drive off-line
 363      -
 364      -
 365      -       MTNOP
 366      -                        no operation, sets status only
 367      -
 368      -
 369      -       MTRETEN
 370      -                        retension the tape (cartridge tape only)
 371      -
 372      -
 373      -       MTERASE
 374      -                        erase the entire tape and rewind
 375      -
 376      -
 377      -       MTEOM
 378      -                        position to EOM
 379      -
 380      -
 381      -       MTNBSF
 382      -                        backward space file to beginning of file
 383      -
 384      -
 385      -       MTSRSZ
 386      -                        set record size
 387      -
 388      -
 389      -       MTGRSZ
 390      -                        get record size
 391      -
 392      -
 393      -       MTTELL
 394      -                        get current position
 395      -
 396      -
 397      -       MTSEEK
 398      -                        go to  requested  position
 399      -
 400      -
 401      -       MTFSSF
 402      -                        forward to requested number of sequential file marks
 403      -
 404      -
 405      -       MTBSSF
 406      -                        backward to requested number of sequential file marks
 407      -
 408      -
 409      -       MTLOCK
 410      -                        prevent media removal
 411      -
 412      -
 413      -       MTUNLOCK
 414      -                        allow media removal
 415      -
 416      -
 417      -       MTLOAD
 418      -                        load the next tape cartridge into the tape drive
 419      -
 420      -
 421      -       MTIOCGETERROR
 422      -                        retrieve error records from the st driver
 423      -
 424      -
 425      -         /* structure for MTIOCGET - magnetic tape get status command */
 426      -
 427      -         struct  mtget {
 428      -           short   mt_type;  /* type of magtape device */
 429  321           /* the following two registers are device dependent */
 430      -           short  mt_dsreg;      /* "drive status" register */
 431      -           short  mt_erreg;      /* "error" register */
 432      -         /* optional error info. */
 433      -           daddr_t   mt_resid;   /* residual count */
 434      -           daddr_t   mt_fileno;  /* file number of current position */
 435      -           daddr_t   mt_blkno;   /* block number of current position */
 436      -           ushort_t  mt_flags;
 437      -           short     mt_bf;      /* optimum blocking factor */
 438      -         };
 439      -         /* structure for MTIOCGETDRIVETYPE - get tape config data command */
 440      -         struct mtdrivetype_request {
 441      -           int  size;
 442      -           struct  mtdrivetype    *mtdtp;
 443      -         };
 444      -         struct mtdrivetype {
 445      -           char    name[64];                  /* Name, for debug */
 446      -           char    vid[25];                   /* Vendor id and product id */
 447      -           char    type;                      /* Drive type for driver */
 448      -           int     bsize;                     /* Block size */
 449      -           int     options;                   /* Drive options */
 450      -           int     max_rretries;              /* Max read retries */
 451      -           int     max_wretries;              /* Max write retries */
 452      -           uchar_t densities[MT_NDENSITIES];  /* density codes,low->hi */
 453      -           uchar_t default_density;           /* Default density chosen */
 454      -           uchar_t speeds[MT_NSPEEDS];        /* speed codes, low->hi */
 455      -           ushort_t non_motion_timeout;       /* Seconds for non-motion */
 456      -           ushort_t io_timeout;               /* Seconds for data to from tape */
 457      -           ushort_t rewind_timeout;           /* Seconds to rewind */
 458      -           ushort_t space_timeout;            /* Seconds to space anywhere */
 459      -           ushort_t load_timeout;             /* Seconds to load tape and ready */
 460      -           ushort_t unload_timeout;           /* Seconds to unload */
 461      -           ushort_t erase_timeout;            /* Seconds to do long erase */
 462      -         };
      322 +         short  mt_dsreg;      /* "drive status" register */
      323 +         short  mt_erreg;      /* "error" register */
 463  324  
      325 +         /* optional error info.  */
      326 +         daddr_t   mt_resid;   /* residual count */
      327 +         daddr_t   mt_fileno;  /* file number of current position */
      328 +         daddr_t   mt_blkno;   /* block number of current position */
      329 +         ushort_t  mt_flags;
      330 +         short     mt_bf;      /* optimum blocking factor */
      331 +       };
 464  332  
 465      -         /* structure for MTIOCGETPOS and MTIOCRESTPOS - get/set tape position */
 466      -              /*
 467      -           * eof/eot/eom codes.
 468      -               */
 469      -          typedef enum {
 470      -                ST_NO_EOF,
 471      -                ST_EOF_PENDING,         /* filemrk pending */
 472      -                ST_EOF,                 /* at filemark */
 473      -                ST_EOT_PENDING,         /* logical eot pend. */
 474      -                ST_EOT,                 /* at logical eot */
 475      -                ST_EOM,                 /* at physical eot */
 476      -                ST_WRITE_AFTER_EOM      /* flag allowing writes after EOM */
 477      -              }pstatus;
      333 +       /* structure for MTIOCGETDRIVETYPE - get tape config data command */
      334 +       struct mtdrivetype_request {
      335 +         int  size;
      336 +         struct  mtdrivetype   *mtdtp;
      337 +       };
      338 +       struct mtdrivetype {
      339 +         char    name[64];                  /* Name, for debug */
      340 +         char    vid[25];                   /* Vendor id and product id */
      341 +         char    type;                      /* Drive type for driver */
      342 +         int     bsize;                     /* Block size */
      343 +         int     options;                   /* Drive options */
      344 +         int     max_rretries;              /* Max read retries */
      345 +         int     max_wretries;              /* Max write retries */
      346 +         uchar_t densities[MT_NDENSITIES];  /* density codes,low->hi */
      347 +         uchar_t default_density;           /* Default density chosen */
      348 +         uchar_t speeds[MT_NSPEEDS];        /* speed codes, low->hi */
      349 +         ushort_t non_motion_timeout;       /* Seconds for non-motion */
      350 +         ushort_t io_timeout;               /* Seconds for data to from tape */
      351 +         ushort_t rewind_timeout;           /* Seconds to rewind */
      352 +         ushort_t space_timeout;            /* Seconds to space anywhere */
      353 +         ushort_t load_timeout;             /* Seconds to load tape and ready */
      354 +         ushort_t unload_timeout;           /* Seconds to unload */
      355 +         ushort_t erase_timeout;            /* Seconds to do long erase */
      356 +       };
 478  357  
 479      -              typedef enum { invalid, legacy, logical } posmode;
      358 +       /* structure for MTIOCGETPOS and MTIOCRESTPOS - get/set tape position */
      359 +       /*
      360 +        * eof/eot/eom codes.
      361 +        */
      362 +        typedef enum {
      363 +              ST_NO_EOF,
      364 +              ST_EOF_PENDING,         /* filemrk pending */
      365 +              ST_EOF,                 /* at filemark */
      366 +              ST_EOT_PENDING,         /* logical eot pend.  */
      367 +              ST_EOT,                 /* at logical eot */
      368 +              ST_EOM,                 /* at physical eot */
      369 +              ST_WRITE_AFTER_EOM      /* flag allowing writes after EOM */
      370 +       } pstatus;
 480  371  
 481      -              typedef struct tapepos {
 482      -                      uint64_t lgclblkno;   /* Blks from start of partition */
 483      -                      int32_t fileno;       /* Num. of current file */
 484      -                      int32_t blkno;        /* Blk  number in current file */
 485      -                      int32_t partition;    /* Current partition */
 486      -                      pstatus eof;         /* eof states */
 487      -                      posmode pmode;         /* which pos. data is valid */
 488      -                      char    pad[4];
 489      -              }tapepos_t;
      372 +       typedef enum { invalid, legacy, logical } posmode;
 490  373  
 491      -              If the pmode is legacy,fileno and blkno fields are valid.
 492      -              If the pmode is logical, lgclblkno field is valid.
      374 +       typedef struct tapepos {
      375 +          uint64_t lgclblkno;  /* Blks from start of partition */
      376 +          int32_t fileno;      /* Num. of current file */
      377 +          int32_t blkno;       /* Blk  number in current file */
      378 +          int32_t partition;   /* Current partition */
      379 +          pstatus eof;         /* eof states */
      380 +          posmode pmode;       /* which pos. data is valid */
      381 +          char    pad[4];
      382 +       } tapepos_t;
 493  383  
      384 +     If the pmode is legacy, fileno and blkno fields are valid.
 494  385  
      386 +     If the pmode is logical, lgclblkno field is valid.
 495  387  
 496      -       The MTWEOF ioctl is used for writing file marks to tape. Not only does
 497      -       this signify the end of a file, but also usually has the side effect of
 498      -       flushing all buffers in the tape drive to the tape medium. A zero count
 499      -       MTWEOF will just flush all the buffers and will not write any file
 500      -       marks.  Because a successful completion of this tape operation will
 501      -       guarantee that all tape data has been written to the tape medium, it is
 502      -       recommended that this tape operation be issued before closing a tape
 503      -       device.
      388 +     The MTWEOF ioctl is used for writing file marks to tape.  Not only does
      389 +     this signify the end of a file, but also usually has the side effect of
      390 +     flushing all buffers in the tape drive to the tape medium.  A zero count
      391 +     MTWEOF will just flush all the buffers and will not write any file marks.
      392 +     Because a successful completion of this tape operation will guarantee
      393 +     that all tape data has been written to the tape medium, it is recommended
      394 +     that this tape operation be issued before closing a tape device.
 504  395  
      396 +     When spacing forward over a record (either data or EOF), the tape head is
      397 +     positioned in the tape gap between the record just skipped and the next
      398 +     record.  When spacing forward over file marks (EOF records), the tape
      399 +     head is positioned in the tape gap between the next EOF record and the
      400 +     record that follows it.
 505  401  
 506      -       When spacing forward over a record (either data or EOF), the tape head
 507      -       is positioned in the tape gap between the record just skipped and the
 508      -       next record.  When spacing forward over file marks (EOF records), the
 509      -       tape head is positioned in the tape gap between the next EOF record and
 510      -       the record that follows it.
      402 +     When spacing backward over a record (either data or EOF), the tape head
      403 +     is positioned in the tape gap immediately preceding the tape record where
      404 +     the tape head is currently positioned.  When spacing backward over file
      405 +     marks (EOF records), the tape head is positioned in the tape gap
      406 +     preceding the EOF.  Thus the next read would fetch the EOF.
 511  407  
      408 +     Record skipping does not go past a file mark; file skipping does not go
      409 +     past the EOM.  After an MTFSR <huge number> command, the driver leaves
      410 +     the tape logically positioned before the EOF.  A related feature is that
      411 +     EOFs remain pending until the tape is closed.  For example, a program
      412 +     which first reads all the records of a file up to and including the EOF
      413 +     and then performs an MTFSF command will leave the tape positioned just
      414 +     after that same EOF, rather than skipping the next file.
 512  415  
 513      -       When spacing backward over a record (either data or EOF), the tape head
 514      -       is positioned in the tape gap immediately preceding the tape record
 515      -       where the tape head is currently positioned. When spacing backward over
 516      -       file marks (EOF records), the tape head is positioned in the tape gap
 517      -       preceding the EOF. Thus the next read would fetch the EOF.
      416 +     The MTNBSF and MTFSF operations are inverses.  Thus, an "MTFSF -1" is
      417 +     equivalent to an "MTNBSF 1".  An "MTNBSF 0" is the same as "MTFSF 0";
      418 +     both position the tape device at the beginning of the current file.
 518  419  
      420 +     MTBSF moves the tape backwards by file marks.  The tape position will end
      421 +     on the beginning of the tape side of the desired file mark.  An "MTBSF 0"
      422 +     will position the tape at the end of the current file, before the
      423 +     filemark.
 519  424  
 520      -       Record skipping does not go past a file mark; file skipping does not go
 521      -       past the EOM. After an MTFSR <huge number> command, the driver leaves
 522      -       the tape logically positioned before the EOF. A related feature is that
 523      -       EOFs remain pending until the tape is closed. For example, a program
 524      -       which first reads all the records of a file up to and including the EOF
 525      -       and then performs an MTFSF command will leave the tape positioned just
 526      -       after that same EOF, rather than skipping the next file.
      425 +     MTBSR and MTFSR operations perform much like space file operations,
      426 +     except that they move by records instead of files.  Variable-length I/O
      427 +     devices (1/2" reel, for example) space actual records; fixed-length I/O
      428 +     devices space physical records (blocks).  1/4" cartridge tape, for
      429 +     example, spaces 512 byte physical records.  The status ioctl residual
      430 +     count contains the number of files or records not skipped.
 527  431  
      432 +     MTFSSF and MTBSSF space forward or backward, respectively, to the next
      433 +     occurrence of the requested number of file marks, one following another.
      434 +     If there are more sequential file marks on tape than were requested, it
      435 +     spaces over the requested number and positions after the requested file
      436 +     mark.  Note that not all drives support this command and if a request is
      437 +     sent to a drive that does not, ENOTTY is returned.
 528  438  
 529      -       The MTNBSF and MTFSF operations are inverses. Thus, an " MTFSF -1" is
 530      -       equivalent to an " MTNBSF 1". An " MTNBSF 0" is the same as " MTFSF 0";
 531      -       both position the tape device at the beginning of the current file.
      439 +     MTOFFL rewinds and, if appropriate, takes the device off-line by
      440 +     unloading the tape.  It is recommended that the device be closed after
      441 +     offlining and then re-opened after a tape has been inserted to facilitate
      442 +     portability to other platforms and other operating systems.  Attempting
      443 +     to re-open the device with no tape will result in an error unless the
      444 +     O_NDELAY flag is used.  (See open(2).)
 532  445  
      446 +     The MTRETEN retension ioctl applies only to 1/4" cartridge tape devices.
      447 +     It is used to restore tape tension, improving the tape's soft error rate
      448 +     after extensive start-stop operations or long-term storage.
 533  449  
 534      -       MTBSF moves the tape backwards by file marks. The tape position will
 535      -       end on the beginning of the tape side of the desired file mark. An "
 536      -       MTBSF 0" will position the tape at the end of the current file, before
 537      -       the filemark.
      450 +     MTERASE rewinds the tape, erases it completely, and returns to the
      451 +     beginning of tape.  Erasing may take a long time depending on the device
      452 +     and/or tapes.  For time details, refer to the drive specific manual.
 538  453  
      454 +     MTEOM positions the tape at a location just after the last file written
      455 +     on the tape.  For 1/4" cartridge and 8mm tape, this is after the last
      456 +     file mark on the tape.  For 1/2" reel tape, this is just after the first
      457 +     file mark but before the second (and last) file mark on the tape.
      458 +     Additional files can then be appended onto the tape from that point.
 539  459  
 540      -       MTBSR and MTFSR operations perform much like space file operations,
 541      -       except that they move by records instead of files. Variable-length I/O
 542      -       devices (1/2" reel, for example) space actual records; fixed-length I/O
 543      -       devices space physical records (blocks). 1/4" cartridge tape, for
 544      -       example, spaces 512 byte physical records. The status ioctl residual
 545      -       count contains the number of files or records not skipped.
      460 +     Note the difference between MTBSF (backspace over file mark) and MTNBSF
      461 +     (backspace file to beginning of file).  The former moves the tape
      462 +     backward until it crosses an EOF mark, leaving the tape positioned before
      463 +     the file mark.  The latter leaves the tape positioned after the file
      464 +     mark.  Hence, "MTNBSF n" is equivalent to "MTBSF (n+1)" followed by
      465 +     "MTFSF 1".  The 1/4" cartridge tape devices do not support MTBSF.
 546  466  
      467 +     MTSRSZ and MTGRSZ are used to set and get fixed record lengths.  The
      468 +     MTSRSZ ioctl allows variable length and fixed length tape drives that
      469 +     support multiple record sizes to set the record length.  The mt_count
      470 +     field of the mtop struct is used to pass the record size to/from the
      471 +     st(7D) driver.  A value of `0' indicates variable record size.  The
      472 +     MTSRSZ ioctl makes a variable-length tape device behave like a fixed-
      473 +     length tape device.  Refer to the specific tape driver man page for
      474 +     details.
 547  475  
 548      -       MTFSSF and MTBSSF space forward or backward, respectively, to the next
 549      -       occurrence of the requested number of file marks, one following
 550      -       another. If there are more sequential file marks on tape than were
 551      -       requested, it spaces over the requested number and positions after the
 552      -       requested file mark. Note that not all drives support this command and
 553      -       if a request is sent to a drive that does not, ENOTTY is returned.
      476 +     MTLOAD loads the next tape cartridge into the tape drive.  This is
      477 +     generally only used with stacker and tower type tape drives which handle
      478 +     multiple tapes per tape drive.  A tape device without a tape inserted can
      479 +     be opened with the O_NDELAY flag, in order to execute this operation.
 554  480  
      481 +     MTIOCGETERROR allows user-level applications to retrieve error records
      482 +     from the st(7D) driver.  An error record consists of the SCSI command cdb
      483 +     which causes the error and a scsi_arq_status(9S) structure if available.
      484 +     The user-level application is responsible for allocating and releasing
      485 +     the memory for mtee_cdb_buf and scsi_arq_status of each mterror_entry.
      486 +     Before issuing the ioctl, the mtee_arq_status_len value should be at
      487 +     least equal to `sizeof (struct scsi_arq_status)'.  If more sense data
      488 +     than the size of scsi_arq_status(9S) is desired, the mtee_arq_status_len
      489 +     may be larger than `sizeof (struct scsi_arq_status)' by the amount of
      490 +     additional extended sense data desired.  The es_add_len field of
      491 +     scsi_extended_sense(9S) can be used to determine the amount of valid
      492 +     sense data returned by the device.
 555  493  
 556      -       MTOFFL rewinds and, if appropriate, takes the device off-line by
 557      -       unloading the tape. It is recommended that the device be closed after
 558      -       offlining and then re-opened after a tape has been inserted to
 559      -       facilitate portability to other platforms and other operating systems.
 560      -       Attempting to re-open the device with no tape will result in an error
 561      -       unless the O_NDELAY flag is used.  (See open(2).)
      494 +     The MTIOCGET get status ioctl(2) call returns the drive ID (mt_type),
      495 +     sense key error (mt_erreg), file number (mt_fileno), optimum blocking
      496 +     factor (mt_bf) and record number (mt_blkno) of the last error.  The
      497 +     residual count (mt_resid) is set to the number of bytes not transferred
      498 +     or files/records not spaced.  The flags word (mt_flags) contains
      499 +     information indicating if the device is SCSI, if the device is a reel
      500 +     device and whether the device supports absolute file positioning.  The
      501 +     mt_flags also indicates if the device is requesting cleaning media be
      502 +     used, whether the device is capable of reporting the requirement of
      503 +     cleaning media and if the currently loaded media is WORM (Write Once Read
      504 +     Many) media.
 562  505  
      506 +     Note -- When tape alert cleaning is managed by the st driver, the tape
      507 +     target driver may continue to return a "drive needs cleaning" status
      508 +     unless an MTIOCGE ioct(2) call is made while the cleaning media is in the
      509 +     drive.
 563  510  
 564      -       The MTRETEN retension ioctl applies only to 1/4" cartridge tape
 565      -       devices.  It is used to restore tape tension, improving the tape's soft
 566      -       error rate after extensive start-stop operations or long-term storage.
      511 +     The MTIOCGETDRIVETYPE get drivetype ioctl call returns the name of the
      512 +     tape drive as defined in st.conf (name), Vendor ID and model (product),
      513 +     ID (vid), type of tape device (type), block size (size), drive options
      514 +     (options), maximum read retry count (max_rretries), maximum write retry
      515 +     count (max_wretries), densities supported by the drive (densities), and
      516 +     default density of the tape drive (default_density).
 567  517  
      518 +     The MTIOCGETPOS ioctl returns the current tape position of the drive.  It
      519 +     is returned in struct tapepos as defined in
      520 +     /usr/include/sys/scsi/targets/stdef.h.
 568  521  
 569      -       MTERASE rewinds the tape, erases it completely, and returns to the
 570      -       beginning of tape. Erasing may take a long time depending on the device
 571      -       and/or tapes. For time details, refer to the drive specific manual.
      522 +     The MTIOCRESTPOS ioctl restores a saved position from the MTIOCGETPOS.
 572  523  
 573      -
 574      -       MTEOM positions the tape at a location just after the last file written
 575      -       on the tape. For 1/4" cartridge and 8mm tape, this is after the last
 576      -       file mark on the tape. For 1/2" reel tape, this is just after the first
 577      -       file mark but before the second (and last) file mark on the tape.
 578      -       Additional files can then be appended onto the tape from that point.
 579      -
 580      -
 581      -       Note the difference between MTBSF (backspace over file mark) and MTNBSF
 582      -       (backspace file to beginning of file). The former moves the tape
 583      -       backward until it crosses an EOF mark, leaving the tape positioned
 584      -       before the file mark. The latter leaves the tape positioned after the
 585      -       file mark. Hence, "MTNBSF n" is equivalent to "MTBSF (n+1)" followed by
 586      -       "MTFSF 1". The 1/4" cartridge tape devices do not support MTBSF.
 587      -
 588      -
 589      -       MTSRSZ and MTGRSZ are used to set and get fixed record lengths. The
 590      -       MTSRSZ ioctl allows variable length and fixed length tape drives that
 591      -       support multiple record sizes to set the record length. The mt_count
 592      -       field of the  mtop struct is used to pass the record size to/from the
 593      -       st driver. A value of 0 indicates variable record size. The MTSRSZ
 594      -       ioctl makes a variable-length tape device behave like a fixed-length
 595      -       tape device. Refer to the specific tape driver man page for details.
 596      -
 597      -
 598      -       MTLOAD loads the next tape cartridge into the tape drive. This is
 599      -       generally only used with stacker and tower type tape drives which
 600      -       handle multiple tapes per tape drive. A tape device without a tape
 601      -       inserted can be opened with the O_NDELAY flag, in order to execute this
 602      -       operation.
 603      -
 604      -
 605      -       MTIOCGETERROR allows user-level applications to retrieve error records
 606      -       from the st driver. An error record consists of the SCSI command cdb
 607      -       which causes the error and a scsi_arq_status(9S) structure if
 608      -       available.  The user-level application is responsible for allocating
 609      -       and releasing the memory for mtee_cdb_buf and scsi_arq_status of each
 610      -       mterror_entry. Before issuing the ioctl, the mtee_arq_status_len value
 611      -       should be at least equal to "sizeof(struct scsi_arq_status)." If more
 612      -       sense data than the size of scsi_arq_status(9S) is desired, the
 613      -       mtee_arq_status_len may be larger than "sizeof(struct scsi_arq_status)"
 614      -       by the amount of additional extended sense data desired.  The
 615      -       es_add_len field of scsi_extended_sense(9S) can be used to determine
 616      -       the amount of valid sense data returned by the device.
 617      -
 618      -
 619      -       The MTIOCGET get status ioctl call returns the drive ID (mt_type),
 620      -       sense key error (mt_erreg), file  number (mt_fileno), optimum blocking
 621      -       factor (mt_bf) and record number (mt_blkno) of the last error. The
 622      -       residual count (mt_resid) is set to the number of bytes not transferred
 623      -       or files/records not spaced. The flags word (mt_flags) contains
 624      -       information indicating if the device is SCSI, if the device is a reel
 625      -       device and whether the device supports absolute file positioning. The
 626      -       mt_flags also indicates if the device is requesting cleaning media be
 627      -       used, whether the device is capable of reporting the requirement of
 628      -       cleaning media and if the currently loaded media is WORM (Write Once
 629      -       Read Many) media.
 630      -
 631      -       Note -
 632      -
 633      -         When tape alert cleaning is managed by the st driver, the tape target
 634      -         driver may continue to return a "drive needs cleaning" status unless
 635      -         an MTIOCGET ioctl() call is made while the cleaning media is in the
 636      -         drive.
 637      -
 638      -
 639      -       The  MTIOCGETDRIVETYPE get drivetype ioctl call returns the name of the
 640      -       tape drive as defined in  st.conf (name), Vendor ID and model
 641      -       (product), ID (vid), type of tape device (type), block size  (bsize),
 642      -       drive options  (options), maximum read retry count (max_rretries),
 643      -       maximum write retry count (max_wretries), densities supported by the
 644      -       drive (densities), and default density of the tape drive
 645      -       (default_density).
 646      -
 647      -
 648      -       The MTIOCGETPOS ioctl returns the current tape position of the drive.
 649      -       It is returned in struct tapepos as defined in
 650      -       /usr/include/sys/scsi/targets/stdef.h.
 651      -
 652      -
 653      -       The  MTIOCRESTPOS ioctl restores a saved position from the MTIOCGETPOS.
 654      -
 655  524     Persistent Error Handling IOCTLs and Asynchronous Tape Operations
 656      -       MTIOCPERSISTENT
 657      -                                enables/disables persistent error handling
      525 +     MTIOCPERSISTENT        enables/disables persistent error handling
      526 +     MTIOCPERSISTENTSTATUS  queries for persistent error handling
      527 +     MTIOCLRERR             clears persistent error handling
      528 +     MTIOCGUARANTEEDORDER   checks whether driver guarantees order of I/O's
 658  529  
      530 +     The MTIOCPERSISTENT ioctl enables or disables persistent error handling.
      531 +     It takes as an argument a pointer to an integer that turns it either on
      532 +     or off.  If the ioctl succeeds, the desired operation was successful.  It
      533 +     will wait for all outstanding I/O's to complete before changing the
      534 +     persistent error handling status.  For example,
 659  535  
 660      -       MTIOCPERSISTENTSTATUS
 661      -                                queries for persistent error handling
      536 +       int on = 1;
      537 +       ioctl(fd, MTIOCPERSISTENT, &on);
      538 +       int off = 0;
      539 +       ioctl(fd, MTIOCPERSISTENT, &off);
 662  540  
      541 +     The MTIOCPERSISTENTSTATUS ioctl enables or disables persistent error
      542 +     handling.  It takes as an argument a pointer to an integer inserted by
      543 +     the driver.  The integer can be either 1 if persistent error handling is
      544 +     `on', or 0 if persistent error handling is `off'.  It will not wait for
      545 +     outstanding I/O's.  For example,
 663  546  
 664      -       MTIOCLRERR
 665      -                                clears persistent error handling
      547 +       int query;
      548 +       ioctl(fd, MTIOCPERSISTENTSTATUS, &query);
 666  549  
      550 +     The MTIOCLRERR ioctl clears persistent error handling and allows tape
      551 +     operations to continual normally.  This ioctl requires no argument and
      552 +     will always succeed, even if persistent error handling has not been
      553 +     enabled.  It will wait for any outstanding I/O's before it clears the
      554 +     error.
 667  555  
 668      -       MTIOCGUARANTEEDORDER
 669      -                                checks whether driver guarantees order of
 670      -                                I/O's
      556 +     The MTIOCGUARANTEEDORDER ioctl is used to determine whether the driver
      557 +     guarantees the order of I/O's.  It takes no argument.  If the ioctl
      558 +     succeeds, the driver will support guaranteed order.  If the driver does
      559 +     not support guaranteed order, then it should not be used for asynchronous
      560 +     I/O with libaio(3lib).  It will wait for any outstanding I/O's before it
      561 +     returns.  For example,
 671  562  
      563 +       ioctl(fd, MTIOCGUARANTEEDORDER)
 672  564  
      565 +     See the Persistent Error Handling subsection above for more information
      566 +     on persistent error handling.
 673  567  
 674      -       The MTIOCPERSISTENT ioctl enables or disables persistent error
 675      -       handling.  It takes as an argument a pointer to an integer that turns
 676      -       it either on or off.  If the ioctl succeeds, the desired operation was
 677      -       successful. It will wait for all outstanding I/O's to complete before
 678      -       changing the persistent error handling status. For example,
 679      -
 680      -         int on = 1;
 681      -         ioctl(fd, MTIOCPERSISTENT, &on);
 682      -         int off = 0;
 683      -         ioctl(fd, MTIOCPERSISTENT, &off);
 684      -
 685      -
 686      -
 687      -       The MTIOCPERSISTENTSTATUS ioctl enables or disables persistent error
 688      -       handling. It takes as an argument a pointer to an integer inserted by
 689      -       the driver. The integer can be either 1 if persistent error handling is
 690      -       'on', or 0 if persistent error handling is 'off'. It will not wait for
 691      -       outstanding I/O's.  For example,
 692      -
 693      -         int query;
 694      -         ioctl(fd, MTIOCPERSISTENTSTATUS, &query);
 695      -
 696      -
 697      -
 698      -       The MTIOCLRERR ioctl clears persistent error handling and allows tape
 699      -       operations to continual normally. This ioctl requires no argument and
 700      -       will always succeed, even if persistent error handling has not been
 701      -       enabled. It will wait for any outstanding I/O's before it clears the
 702      -       error.
 703      -
 704      -
 705      -       The MTIOCGUARANTEEDORDER ioctl is used to determine whether the driver
 706      -       guarantees the order of I/O's. It takes no argument. If the ioctl
 707      -       succeeds, the driver will support guaranteed order. If the driver does
 708      -       not support guaranteed order, then it should not be used for
 709      -       asynchronous I/O with libaio. It will wait for any outstanding I/O's
 710      -       before it returns. For example,
 711      -
 712      -         ioctl(fd, MTIOCGUARANTEEDORDER)
 713      -
 714      -
 715      -
 716      -       See the Persistent Error Handling subsection above for more information
 717      -       on persistent error handling.
 718      -
 719  568     Asynchronous and State Change IOCTLS
 720      -       MTIOCSTATE
 721      -                     This ioctl blocks until the state of the drive, inserted
 722      -                     or ejected, is changed. The argument is a pointer to a
 723      -                     mtio_state, enum, whose possible enumerations are listed
 724      -                     below. The initial value should be either the last
 725      -                     reported state of the drive, or MTIO_NONE. Upon return,
 726      -                     the enum pointed to by the argument is updated with the
 727      -                     current state of the drive.
      569 +     MTIOCSTATE
      570 +        This ioctl blocks until the state of the drive, inserted or ejected,
      571 +        is changed.  The argument is a pointer to a enum mtio_state, whose
      572 +        possible enumerations are listed below.  The initial value should be
      573 +        either the last reported state of the drive, or MTIO_NONE.  Upon
      574 +        return, the enum pointed to by the argument is updated with the
      575 +        current state of the drive.
 728  576  
      577 +          enum mtio_state {
      578 +              MTIO_NONE      /* Return tape's current state */
      579 +              MTIO_EJECTED   /* Tape state is "ejected" */
      580 +              MTIO_INSERTED  /* Tape state is "inserted" */
      581 +          };
 729  582  
 730      -         enum mtio_state {
 731      -         MTIO_NONE      /* Return tape's current state */
 732      -         MTIO_EJECTED   /* Tape state is "ejected" */
 733      -         MTIO_INSERTED  /* Tape state is "inserted" */
 734      -         ;
      583 +     When using asynchronous operations, most ioctls will wait for all
      584 +     outstanding commands to complete before they are executed.
 735  585  
 736      -
 737      -
 738      -       When using asynchronous operations, most ioctls will wait for all
 739      -       outstanding commands to complete before they are executed.
 740      -
 741  586     IOCTLS for Multi-initiator Configurations
 742      -       MTIOCRESERVE
 743      -                            reserve the tape drive
      587 +     MTIOCRESERVE       reserve the tape drive
      588 +     MTIOCRELEASE       revert back to the default behavior of reserve on
      589 +                        open/release on close
      590 +     MTIOCFORCERESERVE  reserve the tape unit by breaking reservation held by
      591 +                        another host
 744  592  
      593 +     The MTIOCRESERVE ioctl reserves the tape drive such that it does not
      594 +     release the tape drive at close.  This changes the default behavior of
      595 +     releasing the device upon close.  Reserving the tape drive that is
      596 +     already reserved has no effect.  For example,
 745  597  
 746      -       MTIOCRELEASE
 747      -                            revert back to the default behavior of reserve on
 748      -                            open/release on close
 749      -
 750      -
 751      -       MTIOCFORCERESERVE
 752      -                            reserve the tape unit by breaking reservation held
 753      -                            by another host
 754      -
 755      -
 756      -
 757      -       The MTIOCRESERVE ioctl reserves the tape drive such that it does not
 758      -       release the tape drive at close. This changes the default behavior of
 759      -       releasing the device upon close. Reserving the tape drive that is
 760      -       already reserved has no effect. For example,
 761      -
 762      -
 763  598         ioctl(fd, MTIOCRESERVE);
 764  599  
      600 +     The MTIOCRELEASE ioctl reverts back to the default behavior of reserve on
      601 +     open/release on close operation, and a release will occur during the next
      602 +     close.  Releasing the tape drive that is already released has no effect.
      603 +     For example,
 765  604  
 766      -       The MTIOCRELEASE ioctl reverts back to the default behavior of reserve
 767      -       on open/release on close operation, and a release will occur during the
 768      -       next close. Releasing the tape drive that is already released has no
 769      -       effect. For example,
 770      -
 771      -
 772  605         ioctl(fd, MTIOCRELEASE);
 773  606  
      607 +     The MTIOCFORCERESERVE ioctl breaks a reservation held by another host,
      608 +     interrupting any I/O in progress by that other host, and then reserves
      609 +     the tape unit.  This ioctl can be executed only with super-user
      610 +     privileges.  It is recommended to open the tape device in O_NDELAY mode
      611 +     when this ioctl needs to be executed, otherwise the open will fail if
      612 +     another host indeed has it reserved.  For example,
 774  613  
 775      -       The MTIOCFORCERESERVE ioctl breaks a reservation held by another host,
 776      -       interrupting any I/O in progress by that other host, and then reserves
 777      -       the tape unit. This ioctl can be executed only with super-user
 778      -       privileges. It is recommended to open the tape device in O_NDELAY mode
 779      -       when this ioctl needs to be executed, otherwise the open will fail if
 780      -       another host indeed has it reserved. For example,
      614 +       ioctl(fd, MTIOCFORCERESERVE);
 781  615  
 782      -         ioctl(fd, MTIOCFORCERESERVE);
 783      -
 784      -
 785  616     IOCTLS for Handling Tape Configuration Options
 786      -       MTIOCSHORTFMK
 787      -                              enables/disables support for writing short
 788      -                              filemarks. This is specific to Exabyte drives.
      617 +     MTIOCSHORTFMK        enables/disables support for writing short
      618 +                          filemarks.  This is specific to Exabyte drives.
 789  619  
      620 +     MTIOCREADIGNOREILI   enables/disables suppress incorrect length indicator
      621 +                          (SILI) support during reads
 790  622  
 791      -       MTIOCREADIGNOREILI
 792      -                              enables/disables suppress incorrect length
 793      -                              indicator (SILI) support during reads
      623 +     MTIOCREADIGNOREEOFS  enables/disables support for reading past two EOF
      624 +                          marks which otherwise indicate End-Of-recording-
      625 +                          Media (EOM) in the case of 1/2" reel tape drives
 794  626  
      627 +     The MTIOCSHORTFMK ioctl enables or disables support for short filemarks.
      628 +     This ioctl is only applicable to Exabyte drives which support short
      629 +     filemarks.  As an argument, it takes a pointer to an integer.  If 0
      630 +     (zero) is the specified integer, then long filemarks will be written.  If
      631 +     1 is the specified integer, then short filemarks will be written.  The
      632 +     specified tape behavior will be in effect until the device is closed.
 795  633  
 796      -       MTIOCREADIGNOREEOFS
 797      -                              enables/disables support for reading past two
 798      -                              EOF marks which otherwise indicate End-Of-
 799      -                              recording-Media (EOM) in the case of 1/2" reel
 800      -                              tape drives
      634 +     For example:
 801  635  
      636 +       int on = 1;
      637 +       int off = 0;
      638 +       /* enable short filemarks */
      639 +       ioctl(fd, MTIOSHORTFMK, &on);
      640 +       /* disable short filemarks */
      641 +       ioctl(fd, MTIOCSHORTFMK, &off);
 802  642  
      643 +     Tape drives which do not support short filemarks will return an errno of
      644 +     ENOTTY.
 803  645  
 804      -       The MTIOCSHORTFMK ioctl enables or disables support for short
 805      -       filemarks.  This ioctl is only applicable to Exabyte drives which
 806      -       support short filemarks.  As an argument, it takes a pointer to an
 807      -       integer.  If 0 (zero) is the specified integer, then long filemarks
 808      -       will be written. If 1 is the  specified integer, then short filemarks
 809      -       will be written. The specified tape behavior will be in effect until
 810      -       the device is closed.
      646 +     The MTIOCREADIGNOREILI ioctl enables or disables the suppress incorrect
      647 +     length indicator (SILI) support during reads.  As an argument, it takes a
      648 +     pointer to an integer.  If 0 (zero) is the specified integer, SILI will
      649 +     not be used during reads and incorrect length indicator will not be
      650 +     suppressed.  If 1 is the specified integer, SILI will be used during
      651 +     reads and incorrect length indicator will be suppressed.  The specified
      652 +     tape behavior will be in effect until the device is closed.
 811  653  
      654 +     For example:
 812  655  
 813      -       For example:
      656 +       int on = 1;
      657 +       int off = 0;
      658 +       ioctl(fd, MTIOREADIGNOREILI, &on);
      659 +       ioctl(fd, MTIOREADIGNOREILI, &off);
 814  660  
 815      -         int on = 1;
 816      -         int off = 0;
 817      -         /* enable short filemarks */
 818      -         ioctl(fd, MTIOSHORTFMK, &on);
 819      -         /* disable short filemarks */
 820      -         ioctl(fd, MTIOCSHORTFMK, &off);
      661 +     The MTIOCREADIGNOREEOFS ioctl enables or disables support for reading
      662 +     past double EOF marks which otherwise indicate End-Of-recorded-media
      663 +     (EOM) in the case of 1/2" reel tape drives.  As an argument, it takes a
      664 +     pointer to an integer.  If 0 (zero) is the specified integer, then double
      665 +     EOF marks indicate End-Of-recodred-media (EOD).  If 1 is the specified
      666 +     integer, the double EOF marks no longer indicate EOM, thus allowing
      667 +     applications to read past two EOF marks.  In this case it is the
      668 +     responsibility of the application to detect end-of-recorded-media (EOM).
      669 +     The specified tape behavior will be in effect until the device is closed.
 821  670  
      671 +     For example:
 822  672  
      673 +       int on = 1;
      674 +       int off = 0;
      675 +       ioctl(fd, MTIOREADIGNOREEOFS, &on);
      676 +       ioctl(fd, MTIOREADIGNOREEOFS, &off);
 823  677  
 824      -       Tape drives which do not support short filemarks will return an errno
 825      -       of ENOTTY.
      678 +     Tape drives other than 1/2" reel tapes will return an errno of ENOTTY.
 826  679  
      680 +FILES
      681 +     /dev/rmt/<unit number><density>[<BSD behavior>][<no rewind>]
 827  682  
 828      -       The MTIOCREADIGNOREILI ioctl enables or disables the suppress incorrect
 829      -       length indicator (SILI) support during reads.  As an argument, it takes
 830      -       a pointer to an integer.   If 0 (zero) is the specified integer, SILI
 831      -       will not be used during reads and incorrect length indicator will not
 832      -       be suppressed.  If 1 is  the specified integer, SILI will be used
 833      -       during reads and incorrect length indicator will be suppressed.  The
 834      -       specified  tape behavior will be in effect until the device is closed.
      683 +     Where <density> can be `l', `m', `h', `u/c' (low, medium, high,
      684 +     ultra/compressed, respectively), the <BSD behavior> option is `b, and
      685 +     the' <no rewind> option is `n'.
 835  686  
      687 +     For example, /dev/rmt/0hbn specifies unit 0, high density, BSD behavior
      688 +     and no rewind.
 836  689  
 837      -       For example:
 838      -
 839      -         int on = 1;
 840      -         int off = 0;
 841      -         ioctl(fd, MTIOREADIGNOREILI, &on);
 842      -         ioctl(fd, MTIOREADIGNOREILI, &off);
 843      -
 844      -
 845      -
 846      -       The MTIOCREADIGNOREEOFS ioctl enables or disables support for reading
 847      -       past double EOF marks which otherwise indicate End-Of-recorded-media
 848      -       (EOM) in the case of 1/2" reel tape drives.  As an argument, it takes a
 849      -       pointer to an integer.   If 0 (zero) is the specified integer, then
 850      -       double EOF marks indicate End-Of-recodred-media (EOD). If 1 is the
 851      -       specified integer, the double EOF marks no longer indicate EOM, thus
 852      -       allowing applications to read past two EOF marks.  In this case it is
 853      -       the responsibility of the application to detect end-of-recorded-media
 854      -       (EOM).  The specified  tape behavior will be in effect until the device
 855      -       is closed.
 856      -
 857      -
 858      -       For example:
 859      -
 860      -         int on = 1;
 861      -         int off = 0;
 862      -         ioctl(fd, MTIOREADIGNOREEOFS, &on);
 863      -         ioctl(fd, MTIOREADIGNOREEOFS, &off);
 864      -
 865      -
 866      -
 867      -       Tape drives other than 1/2" reel tapes will return an errno of ENOTTY.
 868      -
 869  690  EXAMPLES
 870      -       Example 1 Tape Positioning and Tape Drives
      691 +     Example 1 Tape Positioning and Tape Drives
 871  692  
      693 +     Suppose you have written three files to the non-rewinding 1/2" tape
      694 +     device, /dev/rmt/0ln, and that you want to go back and dd(1M) the second
      695 +     file off the tape.  The commands to do this are:
 872  696  
 873      -       Suppose you have written three files to the non-rewinding 1/2" tape
 874      -       device, /dev/rmt/0ln, and that you want to go back and dd(1M) the
 875      -       second file off the tape. The commands to do this are:
      697 +       mt -F /dev/rmt/0lbn bsf 3
      698 +       mt -F /dev/rmt/0lbn fsf 1
      699 +       dd if=/dev/rmt/0ln
 876  700  
      701 +     To accomplish the same tape positioning in a C program, followed by a get
      702 +     status ioctl:
 877  703  
 878      -         mt -F /dev/rmt/0lbn bsf 3
 879      -         mt -F /dev/rmt/0lbn fsf 1
 880      -         dd if=/dev/rmt/0ln
      704 +       struct mtop mt_command;
      705 +       struct mtget mt_status;
      706 +       mt_command.mt_op = MTBSF;
      707 +       mt_command.mt_count = 3;
      708 +       ioctl(fd, MTIOCTOP, &mt_command);
      709 +       mt_command.mt_op = MTFSF;
      710 +       mt_command.mt_count = 1;
      711 +       ioctl(fd, MTIOCTOP, &mt_command);
      712 +       ioctl(fd, MTIOCGET, (char *)&mt_status);
 881  713  
      714 +     or
 882  715  
      716 +       mt_command.mt_op = MTNBSF;
      717 +       mt_command.mt_count = 2;
      718 +       ioctl(fd, MTIOCTOP, &mt_command);
      719 +       ioctl(fd, MTIOCGET, (char *)&mt_status);
 883  720  
 884      -       To accomplish the same tape positioning in a C program, followed by a
 885      -       get status ioctl:
      721 +     To get information about the tape drive:
 886  722  
      723 +       struct mtdrivetype mtdt;
      724 +       struct mtdrivetype_request mtreq;
      725 +       mtreq.size = sizeof(struct mtdrivetype);
      726 +       mtreq.mtdtp = &mtdt;
      727 +       ioctl(fd, MTIOCGETDRIVETYPE, &mtreq);
 887  728  
 888      -         struct mtop mt_command;
 889      -         struct mtget mt_status;
 890      -         mt_command.mt_op = MTBSF;
 891      -         mt_command.mt_count = 3;
 892      -         ioctl(fd, MTIOCTOP, &mt_command);
 893      -         mt_command.mt_op = MTFSF;
 894      -         mt_command.mt_count = 1;
 895      -         ioctl(fd, MTIOCTOP, &mt_command);
 896      -         ioctl(fd, MTIOCGET, (char *)&mt_status);
 897      -
 898      -
 899      -
 900      -       or
 901      -
 902      -
 903      -         mt_command.mt_op = MTNBSF;
 904      -         mt_command.mt_count = 2;
 905      -         ioctl(fd, MTIOCTOP, &mt_command);
 906      -         ioctl(fd, MTIOCGET, (char *)&mt_status);
 907      -
 908      -
 909      -
 910      -       To get information about the tape drive:
 911      -
 912      -
 913      -         struct mtdrivetype mtdt;
 914      -         struct mtdrivetype_request mtreq;
 915      -         mtreq.size = sizeof(struct mtdrivetype);
 916      -         mtreq.mtdtp = &mtdt;
 917      -         ioctl(fd, MTIOCGETDRIVETYPE, &mtreq);
 918      -
 919      -
 920      -FILES
 921      -       /dev/rmt/<unit number><density>[<BSD behavior>][<no rewind>]
 922      -
 923      -
 924      -       Where density can be l, m, h, u/c (low, medium, high, ultra/compressed,
 925      -       respectively), the BSD behavior  option is b, and the no rewind  option
 926      -       is n.
 927      -
 928      -
 929      -       For example, /dev/rmt/0hbn specifies unit 0, high density, BSD behavior
 930      -       and no rewind.
 931      -
 932  729  SEE ALSO
 933      -       mt(1), tar(1), dd(1M), open(2), read(2), write(2), aioread(3C),
 934      -       aiowrite(3C), ar.h(3HEAD), st(7D)
      730 +     mt(1), tar(1), dd(1M), open(2), read(2), write(2), aioread(3C),
      731 +     aiowrite(3C), ar.h(3HEAD), st(7D)
 935  732  
      733 +     1/4 Inch Tape Drive Tutorial
 936  734  
 937      -       1/4 Inch Tape Drive Tutorial
 938      -
 939      -
 940      -
 941      -                                 April 9, 2016                        MTIO(7I)
      735 +illumos                         August 31, 2018                        illumos
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX