summaryrefslogtreecommitdiff
path: root/static/freebsd/man4/sa.4 3.html
diff options
context:
space:
mode:
Diffstat (limited to 'static/freebsd/man4/sa.4 3.html')
-rw-r--r--static/freebsd/man4/sa.4 3.html425
1 files changed, 0 insertions, 425 deletions
diff --git a/static/freebsd/man4/sa.4 3.html b/static/freebsd/man4/sa.4 3.html
deleted file mode 100644
index 326ad744..00000000
--- a/static/freebsd/man4/sa.4 3.html
+++ /dev/null
@@ -1,425 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">SA(4)</td>
- <td class="head-vol">Device Drivers Manual</td>
- <td class="head-rtitle">SA(4)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">sa</code> &#x2014; <span class="Nd">SCSI
- Sequential Access device driver</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp"><code class="Cd">device sa</code></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The <code class="Nm">sa</code> driver provides support for all
- SCSI devices of the sequential access class that are attached to the system
- through a supported SCSI Host Adapter. The sequential access class includes
- tape and other linear access devices.</p>
-<p class="Pp">A SCSI Host adapter must also be separately configured into the
- system before a SCSI sequential access device can be configured.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="MOUNT_SESSIONS"><a class="permalink" href="#MOUNT_SESSIONS">MOUNT
- SESSIONS</a></h1>
-<p class="Pp">The <code class="Nm">sa</code> driver is based around the concept
- of a
- &#x201C;<a class="permalink" href="#mount"><i class="Em" id="mount">mount
- session</i></a>&#x201D;, which is defined as the period between the time
- that a tape is mounted, and the time when it is unmounted. Any parameters
- set during a mount session remain in effect for the remainder of the session
- or until replaced. The tape can be unmounted, bringing the session to a
- close in several ways. These include:</p>
-<ol class="Bl-enum">
- <li>Closing a `rewind device', referred to as sub-mode 00 below. An example is
- <span class="Pa">/dev/sa0</span>.</li>
- <li>Using the MTOFFL <a class="Xr">ioctl(2)</a> command, reachable through the
- &#x2018;<code class="Cm">offline</code>&#x2019; command of
- <a class="Xr">mt(1)</a>.</li>
-</ol>
-<p class="Pp">It should be noted that tape devices are exclusive open devices,
- except in the case where a control mode device is opened. In the latter
- case, exclusive access is only sought when needed (e.g., to set
- parameters).</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SUB-MODES"><a class="permalink" href="#SUB-MODES">SUB-MODES</a></h1>
-<p class="Pp">The sub-modes differ in the action taken when the device is
- closed:</p>
-<dl class="Bl-tag">
- <dt><span class="Pa">/dev/sa*</span></dt>
- <dd>A close will rewind the device; if the tape has been written, then a file
- mark will be written before the rewind is requested. The device is
- unmounted.</dd>
- <dt><span class="Pa">/dev/nsa*</span></dt>
- <dd>A close will leave the tape mounted. If the tape was written to, a file
- mark will be written. No other head positioning takes place. Any further
- reads or writes will occur directly after the last read, or the written
- file mark.</dd>
- <dt><span class="Pa">/dev/esa*</span></dt>
- <dd>A close will rewind the device. If the tape has been written, then a file
- mark will be written before the rewind is requested. On completion of the
- rewind an unload command will be issued. The device is unmounted.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BLOCKING_MODES"><a class="permalink" href="#BLOCKING_MODES">BLOCKING
- MODES</a></h1>
-<p class="Pp">SCSI tapes may run in either
- &#x2018;<a class="permalink" href="#variable"><i class="Em" id="variable">variable</i></a>&#x2019;
- or
- &#x2018;<a class="permalink" href="#fixed"><i class="Em" id="fixed">fixed</i></a>&#x2019;
- block-size modes. Most QIC-type devices run in fixed block-size mode, where
- most nine-track tapes and many new cartridge formats allow variable
- block-size. The difference between the two is as follows:</p>
-<dl class="Bl-inset">
- <dt id="part">Variable block-size:</dt>
- <dd>Each write made to the device results in a single logical record written
- to the tape. One can never read or write
- <a class="permalink" href="#part"><i class="Em">part</i></a> of a record
- from tape (though you may request a larger block and read a smaller
- record); nor can one read multiple blocks. Data from a single write is
- therefore read by a single read. The block size used may be any value
- supported by the device, the SCSI adapter and the system (usually between
- 1 byte and 64 Kbytes, sometimes more).
- <p class="Pp">When reading a variable record/block from the tape, the head
- is logically considered to be immediately after the last item read, and
- before the next item after that. If the next item is a file mark, but it
- was never read, then the next process to read will immediately hit the
- file mark and receive an end-of-file notification.</p>
- </dd>
- <dt>Fixed block-size:</dt>
- <dd>Data written by the user is passed to the tape as a succession of fixed
- size blocks. It may be contiguous in memory, but it is considered to be a
- series of independent blocks. One may never write an amount of data that
- is not an exact multiple of the blocksize. One may read and write the same
- data as a different set of records. In other words, blocks that were
- written together may be read separately, and vice-versa.
- <p class="Pp">If one requests more blocks than remain in the file, the drive
- will encounter the file mark. As there is some data to return (unless
- there were no records before the file mark), the read will succeed,
- returning that data. The next read will return immediately with a value
- of 0. (As above, if the file mark is never read, it remains for the next
- process to read if in no-rewind mode.)</p>
- </dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BLOCK_SIZES"><a class="permalink" href="#BLOCK_SIZES">BLOCK
- SIZES</a></h1>
-<p class="Pp">By default, the driver will NOT accept reads or writes to a tape
- device that are larger than may be written to or read from the mounted tape
- using a single write or read request. Because of this, the application
- author may have confidence that his wishes are respected in terms of the
- block size written to tape. For example, if the user tries to write a 256KB
- block to the tape, but the controller can handle no more than 128KB, the
- write will fail. The previous <span class="Ux">FreeBSD</span> behavior,
- prior to <span class="Ux">FreeBSD</span> 10.0, was to break up large reads
- or writes into smaller blocks when going to the tape. The problem with that
- behavior, though, is that it hides the actual on-tape block size from the
- application writer, at least in variable block mode.</p>
-<p class="Pp">If the user would like his large reads and writes broken up into
- separate pieces, he may set the following loader tunables. Note that these
- tunables WILL GO AWAY in <span class="Ux">FreeBSD 11.0</span>. They are
- provided for transition purposes only.</p>
-<dl class="Bl-tag">
- <dt>kern.cam.sa.allow_io_split</dt>
- <dd>
- <p class="Pp">This variable, when set to 1, will configure all
- <code class="Nm">sa</code> devices to split large buffers into smaller
- pieces when needed.</p>
- </dd>
- <dt>kern.cam.sa.%d.allow_io_split</dt>
- <dd>
- <p class="Pp">This variable, when set to 1, will configure the given
- <code class="Nm">sa</code> unit to split large buffers into multiple
- pieces. This will override the global setting, if it exists.</p>
- </dd>
-</dl>
-<p class="Pp">There are several <a class="Xr">sysctl(8)</a> variables available
- to view block handling parameters:</p>
-<dl class="Bl-tag">
- <dt>kern.cam.sa.%d.allow_io_split</dt>
- <dd>
- <p class="Pp">This variable allows the user to see, but not modify, the
- current I/O split setting. The user is not permitted to modify this
- setting so that there is no chance of behavior changing for the
- application while a tape is mounted.</p>
- </dd>
- <dt>kern.cam.sa.%d.maxio</dt>
- <dd>
- <p class="Pp">This variable shows the maximum I/O size in bytes that is
- allowed by the combination of kernel tuning parameters (MAXPHYS,
- DFLTPHYS) and the capabilities of the controller that is attached to the
- tape drive. Applications may look at this value for a guide on how large
- an I/O may be permitted, but should keep in mind that the actual maximum
- may be restricted further by the tape drive via the SCSI READ BLOCK
- LIMITS command.</p>
- </dd>
- <dt>kern.cam.sa.%d.cpi_maxio</dt>
- <dd>
- <p class="Pp">This variable shows the maximum I/O size supported by the
- controller, in bytes, that is reported via the CAM Path Inquiry CCB
- (XPT_PATH_INQ). If this is 0, that means that the controller has not
- reported a maximum I/O size.</p>
- </dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="FILE_MARK_HANDLING"><a class="permalink" href="#FILE_MARK_HANDLING">FILE
- MARK HANDLING</a></h1>
-<p class="Pp">The handling of file marks on write is automatic. If the user has
- written to the tape, and has not done a read since the last write, then a
- file mark will be written to the tape when the device is closed. If a rewind
- is requested after a write, then the driver assumes that the last file on
- the tape has been written, and ensures that there are two file marks written
- to the tape. The exception to this is that there seems to be a standard
- (which we follow, but do not understand why) that certain types of tape do
- not actually write two file marks to tape, but when read, report a `phantom'
- file mark when the last file is read. These devices include the QIC family
- of devices. (It might be that this set of devices is the same set as that of
- fixed block devices. This has not been determined yet, and they are treated
- as separate behaviors by the driver at this time.)</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="PARAMETERS"><a class="permalink" href="#PARAMETERS">PARAMETERS</a></h1>
-<p class="Pp">The <code class="Nm">sa</code> driver supports a number of
- parameters. The user can query parameters using &#x201C;mt param -l&#x201D;
- (which uses the <code class="Dv">MTIOCPARAMGET</code> ioctl) and the user
- can set parameters using &#x201C;mt param -s&#x201D; (which uses the
- <code class="Dv">MTIOCPARAMSET</code> ioctl). See <a class="Xr">mt(1)</a>
- and <a class="Xr">mtio(4)</a> for more details on the interface.</p>
-<p class="Pp">Supported parameters:</p>
-<dl class="Bl-tag">
- <dt>sili</dt>
- <dd>The default is 0. When set to 1, it sets the Suppress Incorrect Length
- Indicator (SILI) bit on tape reads. Tape drives normally return sense data
- (which contains the residual) when the application reads a block that is
- not the same length as the amount of data requested. The SILI bit
- suppresses that notification in most cases. See the SSC-5 spec (available
- at t10.org), specifically the section on the READ(6) command, for more
- information.</dd>
- <dt>eot_warn</dt>
- <dd>The default is 0. By default, the <code class="Nm">sa</code> driver
- reports entering Programmable Early Warning, Early Warning and End of
- Media conditions by returning a write with 0 bytes written, and
- <code class="Dv">errno</code> set to 0. If <var class="Va">eot_warn</var>
- is set to 1, the <code class="Nm">sa</code> driver will set
- <code class="Dv">errno</code> to <code class="Dv">ENOSPC</code> when it
- enters any of the out of space conditions.</dd>
- <dt>protection.protection_supported</dt>
- <dd>This is a read-only parameter, and is set to 1 if the tape drive supports
- protection information.</dd>
- <dt>protection.prot_method</dt>
- <dd>If protection is supported, set this to the desired protection method
- supported by the tape drive. As of SSC-5r03 (available at t10.org), the
- protection method values are:
- <dl class="Bl-tag">
- <dt>0</dt>
- <dd>No protection.</dd>
- <dt>1</dt>
- <dd>Reed-Solomon CRC, 4 bytes in length.</dd>
- <dt>2</dt>
- <dd>CRC32C, 4 bytes in length.</dd>
- </dl>
- </dd>
- <dt>protection.pi_length</dt>
- <dd>Length of the protection information, see above for lengths.</dd>
- <dt>protection.lbp_w</dt>
- <dd>If set to 1, enable logical block protection on writes. The CRC must be
- appended to the end of the block written to the tape driver. The tape
- drive will verify the CRC when it receives the block.</dd>
- <dt>protection.lbp_r</dt>
- <dd>If set to 1, enable logical block protection on reads. The CRC will be
- appended to the end of the block read from the tape driver. The
- application should verify the CRC when it receives the block.</dd>
- <dt>protection.rdbp</dt>
- <dd>If set to 1, enable logical block protection on the RECOVER BUFFERED DATA
- command. The <code class="Nm">sa</code> driver does not currently use the
- RECOVER BUFFERED DATA command.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="TIMEOUTS"><a class="permalink" href="#TIMEOUTS">TIMEOUTS</a></h1>
-<p class="Pp">The <code class="Nm">sa</code> driver has a set of default
- timeouts for SCSI commands (READ, WRITE, TEST UNIT READY, etc.) that will
- likely work in most cases for many tape drives.</p>
-<p class="Pp">For newer tape drives that claim to support the SPC-4 standard
- (SCSI Primary Commands 4) or later standards, the <code class="Nm">sa</code>
- driver will attempt to use the REPORT SUPPORTED OPERATION CODES command to
- fetch timeout descriptors from the drive. If the drive does report timeout
- descriptors, the <code class="Nm">sa</code> driver will use the drive's
- recommended timeouts for commands.</p>
-<p class="Pp">The timeouts in use are reported in units of
- <b class="Sy">thousandths</b> of a second via the
- <var class="Va">kern.cam.sa.%d.timeout.*</var> <a class="Xr">sysctl(8)</a>
- variables.</p>
-<p class="Pp">To override either the default timeouts, or the timeouts
- recommended by the drive, you can set one of two sets of loader tunable
- values. If you have a drive that supports the REPORT SUPPORTED OPERATION
- CODES timeout descriptors (see the <a class="Xr">camcontrol(8)</a>
- <var class="Va">opcodes</var> subcommand) it is generally best to use those
- values. The global <var class="Va">kern.cam.sa.timeout.*</var> values will
- override the timeouts for all <code class="Nm">sa</code> driver instances.
- If there are 5 tape drives in the system, they'll all get the same timeouts.
- The <var class="Va">kern.cam.sa.%d.timeout.*</var> values (where %d is the
- numeric <code class="Nm">sa</code> instance number) will override the global
- timeouts as well as either the default timeouts or the timeouts recommended
- by the drive.</p>
-<p class="Pp">To set timeouts after boot, the per-instance timeout values, for
- example: <var class="Va">kern.cam.sa.0.timeout.read</var>, are available as
- sysctl variables.</p>
-<p class="Pp">If a tape drive arrives after boot, the global tunables or
- per-instance tunables that apply to the newly arrived drive will be
- used.</p>
-<p class="Pp">Loader tunables:</p>
-<p class="Pp"></p>
-<dl class="Bl-tag Bl-compact">
- <dt>kern.cam.sa.timeout.erase</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.timeout.locate</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.timeout.mode_select</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.timeout.mode_sense</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.timeout.prevent</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.timeout.read</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.timeout.read_position</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.timeout.read_block_limits</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.timeout.report_density</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.timeout.reserve</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.timeout.rewind</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.timeout.space</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.timeout.tur</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.timeout.write</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.timeout.write_filemarks</dt>
- <dd style="width: auto;">&#x00A0;</dd>
-</dl>
-<p class="Pp">Loader tunable values and <a class="Xr">sysctl(8)</a> values:</p>
-<p class="Pp"></p>
-<dl class="Bl-tag Bl-compact">
- <dt>kern.cam.sa.%d.timeout.erase</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.%d.timeout.locate</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.%d.timeout.mode_select</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.%d.timeout.mode_sense</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.%d.timeout.prevent</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.%d.timeout.read</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.%d.timeout.read_position</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.%d.timeout.read_block_limits</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.%d.timeout.report_density</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.%d.timeout.reserve</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.%d.timeout.rewind</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.%d.timeout.space</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.%d.timeout.tur</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.%d.timeout.write</dt>
- <dd style="width: auto;">&#x00A0;</dd>
- <dt>kern.cam.sa.%d.timeout.write_filemarks</dt>
- <dd style="width: auto;">&#x00A0;</dd>
-</dl>
-<p class="Pp">As mentioned above, the timeouts are set and reported in
- <b class="Sy">thousandths</b> of a second, so be sure to account for that
- when setting them.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IOCTLS"><a class="permalink" href="#IOCTLS">IOCTLS</a></h1>
-<p class="Pp">The <code class="Nm">sa</code> driver supports all of the ioctls
- of <a class="Xr">mtio(4)</a>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="FILES"><a class="permalink" href="#FILES">FILES</a></h1>
-<dl class="Bl-tag Bl-compact">
- <dt><span class="Pa">/dev/[n][e]sa[0-9]</span></dt>
- <dd>general form:</dd>
- <dt><span class="Pa">/dev/sa0</span></dt>
- <dd>Rewind on close</dd>
- <dt><span class="Pa">/dev/nsa0</span></dt>
- <dd>No rewind on close</dd>
- <dt><span class="Pa">/dev/esa0</span></dt>
- <dd>Eject on close (if capable)</dd>
- <dt><span class="Pa">/dev/sa0.ctl</span></dt>
- <dd>Control mode device (to examine state while another program is accessing
- the device, e.g.).</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DIAGNOSTICS"><a class="permalink" href="#DIAGNOSTICS">DIAGNOSTICS</a></h1>
-<p class="Pp">The <code class="Nm">sa</code> driver supports injecting End Of
- Media (EOM) notification to aid application development and testing. EOM is
- indicated to the application by returning the read or write with 0 bytes
- written. In addition, when EOM is injected, the tape position status will be
- updated to temporarily show Beyond of the Programmable Early Warning (BPEW)
- status. To see BPEW status, use the <code class="Dv">MTIOCEXTGET</code>
- ioctl, which is used by the &#x201C;mt status&#x201D; command. To inject an
- EOM notification, set the</p>
-<p class="Pp"><var class="Va">kern.cam.sa.%d.inject_eom</var></p>
-<p class="Pp">sysctl variable to 1. One EOM notification will be sent, BPEW
- status will be set for one position query, and then the driver state will be
- reset to normal.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">mt(1)</a>, <a class="Xr">cam(4)</a>,
- <a class="Xr">mtio(4)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">The <code class="Nm">sa</code> driver was written for the CAM SCSI
- subsystem by <span class="An">Justin T. Gibbs</span> and
- <span class="An">Kenneth Merry</span>. Many ideas were gleaned from the
- <code class="Nm">st</code> device driver written and ported from Mach 2.5 by
- <span class="An">Julian Elischer</span>.</p>
-<p class="Pp">The owner of record for many years was <span class="An">Matthew
- Jacob</span>. The current maintainer is <span class="An">Kenneth
- Merry</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="BUGS"><a class="permalink" href="#BUGS">BUGS</a></h1>
-<p class="Pp">This driver lacks many of the hacks required to deal with older
- devices. Many older SCSI-1 devices may not work properly with this driver
- yet.</p>
-<p class="Pp">Additionally, certain tapes (QIC tapes mostly) that were written
- under <span class="Ux">FreeBSD</span> 2.X are not automatically read
- correctly with this driver: you may need to explicitly set variable block
- mode or set to the blocksize that works best for your device in order to
- read tapes written under <span class="Ux">FreeBSD</span> 2.X.</p>
-<p class="Pp">Partitions are only supported for status information and location.
- It would be nice to add support for creating and editing tape
- partitions.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">January 18, 2022</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>