diff options
Diffstat (limited to 'static/freebsd/man4/fdc.4 3.html')
| -rw-r--r-- | static/freebsd/man4/fdc.4 3.html | 313 |
1 files changed, 313 insertions, 0 deletions
diff --git a/static/freebsd/man4/fdc.4 3.html b/static/freebsd/man4/fdc.4 3.html new file mode 100644 index 00000000..012d0888 --- /dev/null +++ b/static/freebsd/man4/fdc.4 3.html @@ -0,0 +1,313 @@ +<table class="head"> + <tr> + <td class="head-ltitle">FDC(4)</td> + <td class="head-vol">Device Drivers Manual</td> + <td class="head-rtitle">FDC(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">fdc</code> — <span class="Nd">PC + architecture floppy disk controller 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 fdc</code></p> +<p class="Pp">In <span class="Pa">/boot/device.hints</span>: + <br/> + <code class="Cd">hint.fdc.0.at="isa"</code> + <br/> + <code class="Cd">hint.fdc.0.port="0x3F0"</code> + <br/> + <code class="Cd">hint.fdc.0.irq="6"</code> + <br/> + <code class="Cd">hint.fdc.0.drq="2"</code> + <br/> + <code class="Cd">hint.fdc.0.flags="0x0"</code> + <br/> + <code class="Cd">hint.fd.0.at="fdc0"</code> + <br/> + <code class="Cd">hint.fd.0.drive="0"</code> + <br/> + <code class="Cd">hint.fd.0.flags="0x0"</code> + <br/> + <code class="Cd">hint.fd.1.at="fdc0"</code> + <br/> + <code class="Cd">hint.fd.1.drive="1"</code> + <br/> + <code class="Cd">hint.fd.1.flags="0x0"</code></p> +</section> +<section class="Sh"> +<h1 class="Sh" id="DEPRECATION_NOTICE"><a class="permalink" href="#DEPRECATION_NOTICE">DEPRECATION + NOTICE</a></h1> +<p class="Pp">The <code class="Nm">fdc</code> driver is deprecated and may not + be present in <span class="Ux">FreeBSD 16.0</span> and later.</p> +</section> +<section class="Sh"> +<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1> +<section class="Ss"> +<h2 class="Ss" id="Device_Usage"><a class="permalink" href="#Device_Usage">Device + Usage</a></h2> +<p class="Pp">This driver provides access to floppy disk drives. Floppy disks + using either FM (single-density) or MFM (double or high-density) recording + can be handled.</p> +<p class="Pp" id="enhanced">Floppy disk controllers can connect up to four + drives each. The <code class="Nm">fdc</code> driver can currently handle up + to two drives per controller (or four drives on ACPI). Upon driver + initialization, an attempt is made to find out the type of the floppy + controller in use. The known controller types are either the original NE765 + or i8272 chips, or alternatively + <a class="permalink" href="#enhanced"><i class="Em">enhanced</i></a> + controllers that are compatible with the NE72065 or i82077 chips. These + enhanced controllers (among other enhancements) implement a FIFO for floppy + data transfers that will automatically be enabled once an enhanced chip has + been detected. This FIFO activation can be disabled using the per-controller + flags value of <var class="Ar">0x1</var>.</p> +<p class="Pp">By default, this driver creates a single device node + <span class="Pa">/dev/fd</span><var class="Ar">N</var> for each attached + drive with number <var class="Ar">N</var>. For historical reasons, device + nodes that use a trailing UFS-style partition letter (ranging from + ‘a’ through ‘h’) can also be accessed, which + will be implemented as symbolic links to the main device node.</p> +<p class="Pp">Accessing the main device node will attempt to autodetect the + density of the available medium for multi-density devices. Thus it is + possible to use either a 720 KB medium or a 1440 KB medium in a high-density + 3.5 inch standard floppy drive. Normally, this autodetection will only + happen once at the first call to <a class="Xr">open(2)</a> for the device + after inserting the medium. This assumes the drive offers proper changeline + support so media changes can be detected by the driver. To indicate a drive + that does not have the changeline support, this can be overridden using the + per-drive device flags value of <var class="Ar">0x10</var> (causing each + call to <a class="Xr">open(2)</a> to perform the autodetection).</p> +<p class="Pp">When trying to use a floppy device with special-density media, + other device nodes can be created, of the form + <span class="Pa">/dev/fd</span><var class="Ar">N</var>.<var class="Ar">MMMM</var>, + where <var class="Ar">N</var> is the drive number, and + <var class="Ar">MMMM</var> is a number between one and four digits + describing the device density. Up to 15 additional subdevices per drive can + be created that way. The administrator is free to decide on a policy how to + assign these numbers. The two common policies are to either implement + subdevices numbered 1 through 15, or to use a number that describes the + medium density in kilobytes. Initially, each of those devices will be + configured to the maximal density that is possible for the drive type (like + 1200 KB for 5.25 inch HD drives or 1440 KB for 3.5 inch HD drives). The + desired density to be used on that subdevice needs to be configured using + <a class="Xr">fdcontrol(8)</a>.</p> +<p class="Pp">Drive types are configured using the lower four bits of the + per-drive device flags. The following values can be specified:</p> +<div class="Bd-indent"> +<dl class="Bl-tag"> + <dt><var class="Ar">1</var></dt> + <dd>5.25 inch double-density device with 40 cylinders (360 KB native + capacity)</dd> + <dt><var class="Ar">2</var></dt> + <dd>5.25 inch high-density device with 80 cylinders (1200 KB native + capacity)</dd> + <dt><var class="Ar">3</var></dt> + <dd>3.5 inch double-density device with 80 cylinders (720 KB native + capacity)</dd> + <dt><var class="Ar">4</var></dt> + <dd>3.5 inch high-density device with 80 cylinders (1440 KB native + capacity)</dd> + <dt><var class="Ar">5</var></dt> + <dd>3.5 inch extra-density device with 80 cylinders (2880 KB native capacity, + usage currently restricted to at most 1440 KB media)</dd> + <dt><var class="Ar">6</var></dt> + <dd>Same as type 5, available for compatibility with some BIOSes</dd> +</dl> +</div> +<p class="Pp">On IA32 architectures, the drive type can be specified as 0 for + the drives. In that case, the CMOS configuration memory will be consulted to + obtain the value for that drive. The ACPI probe automatically determines + these values via the _FDE and _FDI methods, but this can be overridden by + specifying a drive type hint.</p> +<p class="Pp">Normally, each configured drive will be probed at initialization + time, using a short seek sequence. This is intended to find out about drives + that have been configured but are actually missing or otherwise not + responding. (The ACPI probe method does not perform this seek.) In some + environments (like laptops with detachable drives), it might be desirable to + bypass this drive probe, and pretend a drive to be there so the driver + autoconfiguration will work even if the drive is currently not present. For + that purpose, a per-drive device flags value of <var class="Ar">0x20</var> + needs to be specified.</p> +</section> +<section class="Ss"> +<h2 class="Ss" id="Programming_Interface"><a class="permalink" href="#Programming_Interface">Programming + Interface</a></h2> +<p class="Pp">In addition to the normal read and write functionality, the + <code class="Nm">fdc</code> driver offers a number of configurable options + using <a class="Xr">ioctl(2)</a>. In order to access any of this + functionality, programmers need to include the header file + <code class="In"><<a class="In">sys/fdcio.h</a>></code> into their + programs. The call to <a class="Xr">open(2)</a> can be performed in two + possible ways. When opening the device without the + <code class="Dv">O_NONBLOCK</code> flag set, the device is opened in a + normal way, which would cause the main device nodes to perform automatic + media density selection, and which will yield a file descriptor that is + fully available for any I/O operation or any of the following + <a class="Xr">ioctl(2)</a> commands.</p> +<p class="Pp">When opening the device with <code class="Dv">O_NONBLOCK</code> + set, automatic media density selection will be bypassed, and the device + remains in a half-opened state. No actual I/O operations are possible, but + many of the <a class="Xr">ioctl(2)</a> commands described below can be + performed. This mode is intended for access to the device without the + requirement to have an accessible media present, like for status inquiries + to the drive, or in order to format a medium. + <code class="Dv">O_NONBLOCK</code> needs to be cleared before I/O operations + are possible on the descriptor, which requires a prior specification of the + density using the <code class="Dv">FD_STYPE</code> command (see below). + Operations that are not allowed on the half-opened descriptor will cause an + error value of <code class="Er">EAGAIN</code>.</p> +<p class="Pp">The following <a class="Xr">ioctl(2)</a> commands are currently + available:</p> +<dl class="Bl-tag"> + <dt id="FD_FORM"><a class="permalink" href="#FD_FORM"><code class="Dv">FD_FORM</code></a></dt> + <dd>Used to format a floppy disk medium. Third argument is a pointer to a + <var class="Vt">struct fd_formb</var> specifying which track to format, + and which parameters to fill into the ID fields of the floppy disk + medium.</dd> + <dt id="FD_GTYPE"><a class="permalink" href="#FD_GTYPE"><code class="Dv">FD_GTYPE</code></a></dt> + <dd>Returns the current density definition record for the selected device. + Third argument is a pointer to <var class="Vt">struct fd_type</var>.</dd> + <dt id="FD_STYPE"><a class="permalink" href="#FD_STYPE"><code class="Dv">FD_STYPE</code></a></dt> + <dd>Adjusts the density definition of the selected device. Third argument is a + pointer to <var class="Vt">struct fd_type</var>. For the fixed-density + subdevices (1 through 15 per drive), this operation is restricted to a + process with superuser privileges. For the auto-selecting subdevice 0, the + operation is temporarily allowed to any process, but this setting will be + lost again upon the next autoselection. This can be used when formatting a + new medium (which will require to open the device using + <code class="Dv">O_NONBLOCK</code>, and thus to later adjust the density + using <code class="Dv">FD_STYPE</code>).</dd> + <dt id="FD_GOPTS"><a class="permalink" href="#FD_GOPTS"><code class="Dv">FD_GOPTS</code></a></dt> + <dd>Obtain the current drive options. Third argument is a pointer to + <var class="Vt">int</var>, containing a bitwise union of the following + possible flag values: + <dl class="Bl-tag"> + <dt id="FDOPT_NORETRY"><a class="permalink" href="#FDOPT_NORETRY"><code class="Dv">FDOPT_NORETRY</code></a></dt> + <dd>Do not automatically retry operations upon failure.</dd> + <dt id="FDOPT_NOERRLOG"><a class="permalink" href="#FDOPT_NOERRLOG"><code class="Dv">FDOPT_NOERRLOG</code></a></dt> + <dd>Do not cause “hard error” kernel logs for failed I/O + operations.</dd> + <dt id="FDOPT_NOERROR"><a class="permalink" href="#FDOPT_NOERROR"><code class="Dv">FDOPT_NOERROR</code></a></dt> + <dd>Do not indicate I/O errors when returning from + <a class="Xr">read(2)</a> or <a class="Xr">write(2)</a> system calls. + The caller is assumed to use <code class="Dv">FD_GSTAT</code> calls in + order to inquire about the success of each operation. This is intended + to allow even erroneous data from bad blocks to be retrieved using + normal I/O operations.</dd> + <dt id="FDOPT_AUTOSEL"><a class="permalink" href="#FDOPT_AUTOSEL"><code class="Dv">FDOPT_AUTOSEL</code></a></dt> + <dd>Device performs automatic density selection. Unlike the above flags, + this one is read-only.</dd> + </dl> + </dd> + <dt id="FD_SOPTS"><a class="permalink" href="#FD_SOPTS"><code class="Dv">FD_SOPTS</code></a></dt> + <dd>Set device options, see above for their meaning. Third argument is a + pointer to <var class="Vt">int</var>. Drive options will always be cleared + when closing the descriptor.</dd> + <dt id="FD_CLRERR"><a class="permalink" href="#FD_CLRERR"><code class="Dv">FD_CLRERR</code></a></dt> + <dd>Clear the internal low-level error counter. Normally, controller-level I/O + errors are only logged up to <code class="Dv">FDC_ERRMAX</code> errors + (currently defined to 100). This command resets the counter. Requires + superuser privileges.</dd> + <dt id="FD_READID"><a class="permalink" href="#FD_READID"><code class="Dv">FD_READID</code></a></dt> + <dd>Read one sector ID field from the floppy disk medium. Third argument is a + pointer to <var class="Vt">struct fdc_readid</var>, where the read data + will be returned. Can be used to analyze a floppy disk medium.</dd> + <dt id="FD_GSTAT"><a class="permalink" href="#FD_GSTAT"><code class="Dv">FD_GSTAT</code></a></dt> + <dd>Return the recent floppy disk controller status, if available. Third + argument is a pointer to <var class="Vt">struct fdc_status</var>, where + the status registers (ST0, ST1, ST2, C, H, R, and N) are being returned. + <code class="Er">EINVAL</code> will be caused if no recent status is + available.</dd> + <dt id="FD_GDTYPE"><a class="permalink" href="#FD_GDTYPE"><code class="Dv">FD_GDTYPE</code></a></dt> + <dd>Returns the floppy disk drive type. Third argument is a pointer to + <var class="Vt">enum fd_drivetype</var>. This type is the same as being + used in the per-drive configuration flags, or in the CMOS configuration + data or ACPI namespace on IA32 systems.</dd> +</dl> +</section> +</section> +<section class="Sh"> +<h1 class="Sh" id="SYSCTL_VARIABLES"><a class="permalink" href="#SYSCTL_VARIABLES">SYSCTL + VARIABLES</a></h1> +<dl class="Bl-tag"> + <dt id="debug.fdc.debugflags"><a class="permalink" href="#debug.fdc.debugflags"><code class="Dv">debug.fdc.debugflags</code></a></dt> + <dd>Selectively enable debugging by setting one or more flags. + <dl class="Bl-tag"> + <dt id="0x01"><a class="permalink" href="#0x01"><code class="Dv">0x01</code></a></dt> + <dd>Dump device registers on reset.</dd> + <dt id="0x02"><a class="permalink" href="#0x02"><code class="Dv">0x02</code></a></dt> + <dd>When an IO operation completes, print the number of retries when that + number is greater than zero.</dd> + <dt id="0x04"><a class="permalink" href="#0x04"><code class="Dv">0x04</code></a></dt> + <dd>Print when the number of retries exceeds + <code class="Dv">debug.fdc.retries</code> + (<code class="Dv">EIO</code>). Print when the option + <code class="Dv">FDOPT_NOERROR</code> is set and an error would have + returned from a write operation.</dd> + <dt id="0x08"><a class="permalink" href="#0x08"><code class="Dv">0x08</code></a></dt> + <dd>Print detailed IO command information.</dd> + <dt id="0x10"><a class="permalink" href="#0x10"><code class="Dv">0x10</code></a></dt> + <dd>Print status registers.</dd> + <dt id="0x20"><a class="permalink" href="#0x20"><code class="Dv">0x20</code></a></dt> + <dd>Print detailed status registers when interrupts complete. Print the + source code line number close to the source of a non-zero return from + a thread worker operation.</dd> + <dt id="0x40"><a class="permalink" href="#0x40"><code class="Dv">0x40</code></a></dt> + <dd>Print when the disk appears to be lost. Print cylinder, head, sector, + and sector shift information after a request to read an ID field. + Notify whether a disk probe resulted in finding a disk. When detecting + the density of media present, indicate whether the autosensing was + successful, and if so, the size of the medium in kilobytes. Print + detailed type information when setting the drive type.</dd> + <dt id="0x80"><a class="permalink" href="#0x80"><code class="Dv">0x80</code></a></dt> + <dd>Print when an unknown IOCTL is used.</dd> + </dl> + </dd> + <dt id="debug.fdc.fifo"><a class="permalink" href="#debug.fdc.fifo"><code class="Dv">debug.fdc.fifo</code></a></dt> + <dd>For enhanced controllers, allows a non-default FIFO threshold setting. The + default is 8 bytes.</dd> + <dt id="debug.fdc.retries"><a class="permalink" href="#debug.fdc.retries"><code class="Dv">debug.fdc.retries</code></a></dt> + <dd>Maximum number of retries to attempt. The default is 10.</dd> + <dt id="debug.fdc.spec1"><a class="permalink" href="#debug.fdc.spec1"><code class="Dv">debug.fdc.spec1</code></a></dt> + <dd>Specification byte one (step-rate + head unload). The default step rate is + 6 ms. The default head unload time is 240 ms.</dd> + <dt id="debug.fdc.spec2"><a class="permalink" href="#debug.fdc.spec2"><code class="Dv">debug.fdc.spec2</code></a></dt> + <dd>Specification byte two (head load time + no-dma). The default head load + time is 16 ms, and no-dma is 0 (disabled).</dd> + <dt id="debug.fdc.settle"><a class="permalink" href="#debug.fdc.settle"><code class="Dv">debug.fdc.settle</code></a></dt> + <dd>Head settling time in + <a class="permalink" href="#settle"><b class="Sy" id="settle">settle</b></a> + / hz seconds. The default value is set during device attach.</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/fd*</span></dt> + <dd>floppy disk device nodes</dd> +</dl> +</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">fdread(1)</a>, <a class="Xr">fdwrite(1)</a>, + <a class="Xr">ioctl(2)</a>, <a class="Xr">open(2)</a>, + <a class="Xr">read(2)</a>, <a class="Xr">write(2)</a>, + <a class="Xr">fdcontrol(8)</a>, <a class="Xr">fdformat(8)</a></p> +</section> +<section class="Sh"> +<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1> +<p class="Pp">This man page was initially written by <span class="An">Wilko + Bulte</span>, and later vastly rewritten by <span class="An">Jörg + Wunsch</span>.</p> +</section> +</div> +<table class="foot"> + <tr> + <td class="foot-date">November 16, 2025</td> + <td class="foot-os">FreeBSD 15.0</td> + </tr> +</table> |
