summaryrefslogtreecommitdiff
path: root/static/freebsd/man4/pass.4 3.html
diff options
context:
space:
mode:
Diffstat (limited to 'static/freebsd/man4/pass.4 3.html')
-rw-r--r--static/freebsd/man4/pass.4 3.html167
1 files changed, 167 insertions, 0 deletions
diff --git a/static/freebsd/man4/pass.4 3.html b/static/freebsd/man4/pass.4 3.html
new file mode 100644
index 00000000..c2a062ec
--- /dev/null
+++ b/static/freebsd/man4/pass.4 3.html
@@ -0,0 +1,167 @@
+<table class="head">
+ <tr>
+ <td class="head-ltitle">PASS(4)</td>
+ <td class="head-vol">Device Drivers Manual</td>
+ <td class="head-rtitle">PASS(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">pass</code> &#x2014; <span class="Nd">CAM
+ application passthrough 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 pass</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">pass</code> driver provides a way for
+ userland applications to issue CAM CCBs to the kernel.</p>
+<p class="Pp">Since the <code class="Nm">pass</code> driver allows direct access
+ to the CAM subsystem, system administrators should exercise caution when
+ granting access to this driver. If used improperly, this driver can allow
+ userland applications to crash a machine or cause data loss.</p>
+<p class="Pp">The <code class="Nm">pass</code> driver attaches to every SCSI and
+ ATA device found in the system. Since it attaches to every device, it
+ provides a generic means of accessing SCSI and ATA devices, and allows the
+ user to access devices which have no &quot;standard&quot; peripheral driver
+ associated with them.</p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="KERNEL_CONFIGURATION"><a class="permalink" href="#KERNEL_CONFIGURATION">KERNEL
+ CONFIGURATION</a></h1>
+<p class="Pp">It is only necessary to configure one <code class="Nm">pass</code>
+ device in the kernel; <code class="Nm">pass</code> devices are automatically
+ allocated as SCSI and ATA devices are found.</p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="IOCTLS"><a class="permalink" href="#IOCTLS">IOCTLS</a></h1>
+<dl class="Bl-tag">
+ <dt>CAMIOCOMMAND union ccb *</dt>
+ <dd>This ioctl takes most kinds of CAM CCBs and passes them through to the CAM
+ transport layer for action. Note that some CCB types are not allowed
+ through the passthrough device, and must be sent through the
+ <a class="Xr">xpt(4)</a> device instead. Some examples of xpt-only CCBs
+ are XPT_SCAN_BUS, XPT_DEV_MATCH, XPT_RESET_BUS, XPT_SCAN_LUN, XPT_ENG_INQ,
+ and XPT_ENG_EXEC. These CCB types have various attributes that make it
+ illogical or impossible to service them through the passthrough interface.
+ <p class="Pp">If the user would like the kernel to do error recovery, the
+ <code class="Dv">CAM_PASS_ERR_RECOVER</code> flag must be set on the
+ CCB, and the retry_count field set to the number of retries.</p>
+ </dd>
+ <dt>CAMGETPASSTHRU union ccb *</dt>
+ <dd>This ioctl takes an XPT_GDEVLIST CCB, and returns the passthrough device
+ corresponding to the device in question. Although this ioctl is available
+ through the <code class="Nm">pass</code> driver, it is of limited use,
+ since the caller must already know that the device in question is a
+ passthrough device if they are issuing this ioctl. It is probably more
+ useful to issue this ioctl through the <a class="Xr">xpt(4)</a>
+ device.</dd>
+ <dt>CAMIOQUEUE union ccb *</dt>
+ <dd>Queue a CCB to the <code class="Nm">pass</code> driver to be executed
+ asynchronously. The caller may use <a class="Xr">select(2)</a>,
+ <a class="Xr">poll(2)</a> or <a class="Xr">kevent(2)</a> to receive
+ notification when the CCB has completed.
+ <p class="Pp">This ioctl takes most CAM CCBs, but some CCB types are not
+ allowed through the pass device, and must be sent through the
+ <a class="Xr">xpt(4)</a> device instead. Some examples of xpt-only CCBs
+ are XPT_SCAN_BUS, XPT_DEV_MATCH, XPT_RESET_BUS, XPT_SCAN_LUN,
+ XPT_ENG_INQ, and XPT_ENG_EXEC. These CCB types have various attributes
+ that make it illogical or impossible to service them through the
+ passthrough interface.</p>
+ <p class="Pp">Although the <code class="Dv">CAMIOQUEUE</code> ioctl is not
+ defined to take an argument, it does require a pointer to a union ccb.
+ It is not defined to take an argument to avoid an extra malloc and copy
+ inside the generic <a class="Xr">ioctl(2)</a> handler.</p>
+ <p class="Pp">The completed CCB will be returned via the
+ <code class="Dv">CAMIOGET</code> ioctl. An error will only be returned
+ from the <code class="Dv">CAMIOQUEUE</code> ioctl if there is an error
+ allocating memory for the request or copying memory from userland. All
+ other errors will be reported as standard CAM CCB status errors. Since
+ the CCB is not copied back to the user process from the pass driver in
+ the <code class="Dv">CAMIOQUEUE</code> ioctl, the user's passed-in CCB
+ will not be modified. This is the case even with immediate CCBs.
+ Instead, the completed CCB must be retrieved via the
+ <code class="Dv">CAMIOGET</code> ioctl and the status examined.</p>
+ <p class="Pp">Multiple CCBs may be queued via the
+ <code class="Dv">CAMIOQUEUE</code> ioctl at any given time, and they may
+ complete in a different order than the order that they were submitted.
+ The caller must take steps to identify CCBs that are queued and
+ completed. The <code class="Dv">periph_priv</code> structure inside
+ struct ccb_hdr is available for userland use with the
+ <code class="Dv">CAMIOQUEUE</code> and <code class="Dv">CAMIOGET</code>
+ ioctls, and will be preserved across calls. Also, the periph_links
+ linked list pointers inside struct ccb_hdr are available for userland
+ use with the <code class="Dv">CAMIOQUEUE</code> and
+ <code class="Dv">CAMIOGET</code> ioctls and will be preserved across
+ calls.</p>
+ <p class="Pp">If the user would like the kernel to do error recovery, the
+ <code class="Dv">CAM_PASS_ERR_RECOVER</code> flag must be set on the
+ CCB, and the retry_count field set to the number of retries.</p>
+ </dd>
+ <dt>CAMIOGET union ccb *</dt>
+ <dd>Retrieve completed CAM CCBs queued via the
+ <code class="Dv">CAMIOQUEUE</code> ioctl. An error will only be returned
+ from the <code class="Dv">CAMIOGET</code> ioctl if the
+ <code class="Nm">pass</code> driver fails to copy data to the user process
+ or if there are no completed CCBs available to retrieve. If no CCBs are
+ available to retrieve, errno will be set to
+ <code class="Dv">ENOENT</code>.
+ <p class="Pp">All other errors will be reported as standard CAM CCB status
+ errors.</p>
+ <p class="Pp">Although the <code class="Dv">CAMIOGET</code> ioctl is not
+ defined to take an argument, it does require a pointer to a union ccb.
+ It is not defined to take an argument to avoid an extra malloc and copy
+ inside the generic <a class="Xr">ioctl(2)</a> handler.</p>
+ <p class="Pp">The pass driver will report via <a class="Xr">select(2)</a>,
+ <a class="Xr">poll(2)</a> or <a class="Xr">kevent(2)</a> when a CCB has
+ completed. One CCB may be retrieved per <code class="Dv">CAMIOGET</code>
+ call. CCBs may be returned in an order different than the order they
+ were submitted. So the caller should use the
+ <code class="Dv">periph_priv</code> area inside the CCB header to store
+ pointers to identifying information.</p>
+ </dd>
+</dl>
+</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/pass</span><var class="Ar">n</var></dt>
+ <dd>Character device nodes for the <code class="Nm">pass</code> driver. There
+ should be one of these for each device accessed through the CAM
+ subsystem.</dd>
+</dl>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="DIAGNOSTICS"><a class="permalink" href="#DIAGNOSTICS">DIAGNOSTICS</a></h1>
+<p class="Pp">None.</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">kqueue(2)</a>, <a class="Xr">poll(2)</a>,
+ <a class="Xr">select(2)</a>, <a class="Xr">cam(3)</a>,
+ <a class="Xr">cam_cdbparse(3)</a>, <a class="Xr">cam(4)</a>,
+ <a class="Xr">cd(4)</a>, <a class="Xr">ctl(4)</a>, <a class="Xr">da(4)</a>,
+ <a class="Xr">sa(4)</a>, <a class="Xr">xpt(4)</a>,
+ <a class="Xr">camcontrol(8)</a>, <a class="Xr">camdd(8)</a></p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
+<p class="Pp">The CAM passthrough driver first appeared in
+ <span class="Ux">FreeBSD 3.0</span>.</p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
+<p class="Pp"><span class="An">Kenneth Merry</span>
+ &lt;<a class="Mt" href="mailto:ken@FreeBSD.org">ken@FreeBSD.org</a>&gt;</p>
+</section>
+</div>
+<table class="foot">
+ <tr>
+ <td class="foot-date">May 3, 2017</td>
+ <td class="foot-os">FreeBSD 15.0</td>
+ </tr>
+</table>