aboutsummaryrefslogtreecommitdiff
path: root/en_US.ISO8859-1/books/handbook/hw/chapter.sgml
diff options
context:
space:
mode:
Diffstat (limited to 'en_US.ISO8859-1/books/handbook/hw/chapter.sgml')
-rw-r--r--en_US.ISO8859-1/books/handbook/hw/chapter.sgml5872
1 files changed, 0 insertions, 5872 deletions
diff --git a/en_US.ISO8859-1/books/handbook/hw/chapter.sgml b/en_US.ISO8859-1/books/handbook/hw/chapter.sgml
deleted file mode 100644
index 6d6a9b8157..0000000000
--- a/en_US.ISO8859-1/books/handbook/hw/chapter.sgml
+++ /dev/null
@@ -1,5872 +0,0 @@
-<!--
- The FreeBSD Documentation Project
-
- $FreeBSD: doc/en_US.ISO_8859-1/books/handbook/hw/chapter.sgml,v 1.34 2000/07/13 21:03:21 marko Exp $
--->
-
-<appendix id="hw">
- <title>PC Hardware compatibility</title>
-
- <para>Issues of hardware compatibility are among the most troublesome in the
- computer industry today and FreeBSD is by no means immune to trouble. In
- this respect, FreeBSD's advantage of being able to run on inexpensive
- commodity PC hardware is also its liability when it comes to support for
- the amazing variety of components on the market. While it would be
- impossible to provide a exhaustive listing of hardware that FreeBSD
- supports, this section serves as a catalog of the device drivers included
- with FreeBSD and the hardware each drivers supports. Where possible and
- appropriate, notes about specific products are included. You may also
- want to refer to <link linkend="kernelconfig-config">the kernel
- configuration file</link> section in this handbook for a list of
- supported devices.</para>
-
- <para>As FreeBSD is a volunteer project without a funded testing department,
- we depend on you, the user, for much of the information contained in this
- catalog. If you have direct experience of hardware that does or does not
- work with FreeBSD, please let us know by sending e-mail to the &a.doc;.
- Questions about supported hardware should be directed to the &a.questions;
- (see <link linkend="eresources-mail">Mailing Lists</link> for more
- information). When submitting information or asking a question, please
- remember to specify exactly what version of FreeBSD you are using and
- include as many details of your hardware as possible.</para>
-
- <sect1>
- <title>Resources on the Internet</title>
-
- <para>The following links have proven useful in selecting hardware. Though
- some of what you see won't necessarily be specific (or even applicable)
- to FreeBSD, most of the hardware information out there is OS
- independent. Please check with the FreeBSD hardware guide to make sure
- that your chosen configuration is supported before making any
- purchases.</para>
-
- <itemizedlist>
- <listitem>
- <para><ulink url="http://www.tomshardware.com/">The Pentium Systems
- Hardware Performance Guide</ulink></para>
- </listitem>
- </itemizedlist>
- </sect1>
-
- <sect1 id="hw-configs">
- <title>Sample Configurations</title>
-
- <para>The following list of sample hardware configurations by no means
- constitutes an endorsement of a given hardware vendor or product by
- <emphasis>The FreeBSD Project</emphasis>. This information is provided
- only as a public service and merely catalogs some of the experiences
- that various individuals have had with different hardware combinations.
- Your mileage may vary. Slippery when wet. Beware of dog.</para>
-
- <sect2 id="hw-jordans-picks">
- <title>Jordan's Picks</title>
-
- <para>I have had fairly good luck building workstation and server
- configurations with the following components. I can't guarantee that
- you will too, nor that any of the companies here will remain
- <quote>best buys</quote> forever. I will try, when I can, to keep this
- list up-to-date but cannot obviously guarantee that it will be at any
- given time.</para>
-
- <sect3 id="hw-mb">
- <title>Motherboards</title>
-
- <para>For Pentium Pro (P6) systems, I'm quite fond of the <ulink
- url="http://www.tyan.com/html/products.html">Tyan</ulink> S1668
- dual-processor motherboard as well as the Intel PR440FX motherboard
- with on-board SCSI WIDE and 100/10MB Intel EtherExpress NIC. You
- can build a dandy little single or dual processor system (which is
- supported in FreeBSD 3.0) for very little cost now that the Pentium
- Pro 180/256K chips have fallen so greatly in price, but no telling
- how much longer this will last.</para>
-
- <para>For the Pentium II, I'm rather partial to the <ulink
- url="http://www.asus.com.tw/">ASUS</ulink> <ulink
- url="http://www.asus.com.tw/Products/Motherboard/Pentiumpro/P2l97-s/index.html">P2l97-S</ulink>
- motherboard with the on-board Adaptec SCSI WIDE controller.</para>
-
- <para>For Pentium machines, the ASUS <ulink
- url="http://www.asus.com.tw/Products/Motherboard/Pentium/P55tp4/index.html">P55T2P4</ulink>
- motherboard appears to be a good choice for mid-to-high range
- Pentium server and workstation systems.</para>
-
- <para>Those wishing to build more fault-tolerant systems should also
- be sure to use Parity memory or, for truly 24/7 applications, ECC
- memory.</para>
-
- <note>
- <para>ECC memory does involve a slight performance trade-off (which
- may or may not be noticeable depending on your application) but
- buys you significantly increased fault-tolerance to memory
- errors.</para>
- </note>
- </sect3>
-
- <sect3>
- <title>Disk Controllers</title>
-
- <para>This one is a bit trickier, and while I used to recommend the
- <ulink url="http://www.buslogic.com/">Buslogic</ulink> controllers
- unilaterally for everything from ISA to PCI, now I tend to lean
- towards the <ulink url="http://www.adaptec.com/">Adaptec</ulink>
- 1542CF for ISA, Buslogic Bt747c for EISA and Adaptec 2940UW for
- PCI.</para>
-
- <para>The NCR/Symbios cards for PCI have also worked well for me,
- though you need to make sure that your motherboard supports the
- BIOS-less model if you're using one of those (if your card has
- nothing which looks even vaguely like a ROM chip on it, you've
- probably got one which expects its BIOS to be on your
- motherboard).</para>
-
- <para>If you should find that you need more than one SCSI controller
- in a PCI machine, you may wish to consider conserving your scarce
- PCI bus resources by buying the Adaptec 3940 card, which puts two
- SCSI controllers (and internal busses) in a single slot.</para>
-
- <note>
- <para>There are two types of 3940 on the market&mdash;the older
- model with AIC 7880 chips on it, and the newer one with AIC 7895
- chips. The newer model requires <ulink
- url="http://www.FreeBSD.org/pub/FreeBSD/development/cam/">CAM</ulink>
- support which is not yet part of FreeBSD&mdash;you have to add it,
- or install from one of the CAM binary snapshot release.</para>
- </note>
- </sect3>
-
- <sect3 id="hw-disks">
- <title>Disk drives</title>
-
- <para>In this particular game of Russian roulette, I'll make few
- specific recommendations except to say <quote>SCSI over IDE whenever
- you can afford it.</quote> Even in small desktop configurations, SCSI
- often makes more sense since it allows you to easily migrate drives
- from server to desktop as falling drive prices make it economical to
- do so. If you have more than one machine to administer then think
- of it not simply as storage, think of it as a food chain! For a
- serious server configuration, there's not even any
- argument&mdash;use SCSI equipment and good cables.</para>
- </sect3>
-
- <sect3 id="hw-jordans-picks-cdrom">
- <title>CDROM drives</title>
-
- <para>My SCSI preferences extend to SCSI CDROM drives as well, and
- while the <ulink url="http://www.toshiba.com/">Toshiba</ulink> drives
- have always been favorites of mine (in whatever speed is hot that
- week), I'm still fond of my good old <ulink
- url="http://www.plextor.com/">Plextor</ulink> PX-12CS drive. It's
- only a 12 speed, but it's offered excellent performance and
- reliability.</para>
-
- <para>Generally speaking, most SCSI CDROM drives I've seen have been
- of pretty solid construction and you probably won't go wrong with an
- HP or NEC SCSI CDROM drive either. SCSI CDROM prices also appear to
- have dropped considerably in the last few months and are now quite
- competitive with IDE CDROMs while remaining a technically superior
- solution. I now see no reason whatsoever to settle for an IDE CDROM
- drive if given a choice between the two.</para>
- </sect3>
-
- <sect3 id="hw-worm">
- <title>CD Recordable (WORM) drives</title>
-
- <para>At the time of this writing, FreeBSD supports 3 types of CDR
- drives (though I believe they all ultimately come from Phillips
- anyway): The Phillips CDD 522 (Acts like a Plasmon), the PLASMON
- RF4100 and the HP 6020i. I myself use the HP 6020i for burning
- CDROMs (in 2.2 and later releases&mdash;it does not work with
- earlier releases of the SCSI code) and it works very well. See
- <ulink
- url="file:/usr/share/examples/worm">/usr/share/examples/worm</ulink>
- on your 2.2 system for example scripts used to created ISO9660
- filesystem images (with RockRidge extensions) and burn them onto an
- HP6020i CDR.</para>
- </sect3>
-
- <sect3 id="hw-tape">
- <title>Tape drives</title>
-
- <para>I've had pretty good luck with both <ulink
- url="http://www.Exabyte.COM:80/Products/8mm/8505XL/Rfeatures.html">8mm
- drives</ulink> from <ulink
- url="http://www.exabyte.com/">Exabyte</ulink> and <ulink
- url="http://www-dmo.external.hp.com:80/tape/_cpb0001.htm">4mm
- (DAT)</ulink> drives from <ulink
- url="http://www.hp.com/">HP</ulink>.</para>
-
- <para>For backup purposes, I'd have to give the higher recommendation
- to the Exabyte due to the more robust nature (and higher storage
- capacity) of 8mm tape.</para>
- </sect3>
-
- <sect3 id="hw-video">
- <title>Video Cards</title>
-
- <para>If you can also afford to buy a commercial X server for
- US&#36;99 from <ulink url="http://www.xig.com/">Xi Graphics, Inc.
- (formerly X Inside, Inc)</ulink> then I can heartily recommend the
- <ulink url="http://www.matrox.com/">Matrox</ulink> <ulink
- url="http://www.matrox.com/mgaweb/brochure.htm">Millenium
- II</ulink> card. Note that support for this card is also
- excellent with the <ulink
- url="http://www.xfree86.org/">XFree86</ulink> server, which is now
- at version 3.3.2.</para>
-
- <para>You also certainly can't go wrong with one of <ulink
- url="http://www.nine.com/">Number 9's</ulink> cards &mdash; their
- S3 Vision 868 and 968 based cards (the 9FX series) also being quite
- fast and very well supported by XFree86's S3 server. You can also
- pick up their Revolution 3D cards very cheaply these days,
- especially if you require a lot of video memory.</para>
- </sect3>
-
- <sect3 id="hw-monitors">
- <title>Monitors</title>
-
- <para>I have had very good luck with the <ulink
- url="http://cons3.sel.sony.com/SEL/ccpg/display/ms17se2.html">Sony
- Multiscan 17seII monitors</ulink>, as have I with the Viewsonic
- offering in the same (Trinitron) tube. For larger than 17", all I
- can recommend at the time of this writing is to not spend any less
- than U.S. &#36;2,000 for a 21" monitor or &#36;1,700 for a 20"
- monitor if that's what you really need. There are good monitors
- available in the &gt;=20" range and there are also cheap monitors in
- the &gt;=20" range. Unfortunately, very few are both cheap and
- good!</para>
- </sect3>
-
- <sect3 id="hw-networking">
- <title>Networking</title>
-
- <para>I can recommend the Intel EtherExpress Pro/100B card first and
- foremost, followed by the <ulink
- url="http://www.smc.com/">SMC</ulink> Ultra 16 controller for any
- ISA application and the SMC EtherPower or Compex ENET32 cards for
- slightly cheaper PCI based networking. In general, any PCI NIC
- based around DEC's DC21041 Ethernet controller chip, such as the
- Znyx ZX342 or DEC DE435/450, will generally work quite well and can
- frequently be found in 2-port and 4-port version (useful for
- firewalls and routers), though the Pro/100MB card has the edge when
- it comes to providing the best performance with lower
- overhead.</para>
-
- <para>If what you're looking for is the cheapest possible solution
- then almost any NE2000 clone will do a fine job for very little
- cost.</para>
- </sect3>
-
- <sect3 id="hw-serial">
- <title>Serial</title>
-
- <para>If you're looking for high-speed serial networking solutions,
- then <ulink url="http://www.dgii.com/">Digi International</ulink>
- makes the <ulink
- url="http://www.dgii.com/prodprofiles/profiles-prices/digiprofiles/digispecs/sync570.html">SYNC/570</ulink>
- series, with drivers now in FreeBSD-CURRENT. <ulink
- url="http://www.etinc.com/">Emerging Technologies</ulink> also
- manufactures a board with T1/E1 capabilities, using software they
- provide. I have no direct experience using either product,
- however.</para>
-
- <para>multiport card options are somewhat more numerous, though it has
- to be said that FreeBSD's support for <ulink
- url="http://www.cyclades.com/">Cyclades</ulink>'s products is
- probably the tightest, primarily as a result of that company's
- commitment to making sure that we are adequately supplied with
- evaluation boards and technical specs. I've heard that the
- Cyclom-16Ye offers the best price/performance, though I've not
- checked the prices lately. Other multiport cards I've heard good
- things about are the BOCA and AST cards, and <ulink
- url="http://www.stallion.com/">Stallion Technologies</ulink>
- apparently offers an unofficial driver for their cards at <ulink
- url="ftp://ftp.stallion.com/drivers/unsupported/freebsd/stalbsd-0.0.4.tar.gz">this</ulink>
- location.</para>
- </sect3>
-
- <sect3 id="hw-audio">
- <title>Audio</title>
-
- <para>I currently use a <ulink url="http://www.creaf.com/">Creative
- Labs</ulink> AWE32 though just about anything from Creative Labs
- will generally work these days. This is not to say that other types
- of sound cards don't also work, simply that I have little experience
- with them (I was a former GUS fan, but Gravis's sound card situation
- has been dire for some time).</para>
- </sect3>
-
- <sect3 id="hw-vgrabbers">
- <title>Video</title>
-
- <para>For video capture, there are two good choices &mdash; any card
- based on the Brooktree BT848 chip, such as the Hauppage or WinTV
- boards, will work very nicely with FreeBSD. Another board which
- works for me is the <ulink
- url="http://www.matrox.com/">Matrox</ulink> <ulink
- url="http://www.matrox.com/imgweb/meteor.htm">Meteor</ulink> card.
- FreeBSD also supports the older video spigot card from Creative
- Labs, but those are getting somewhat difficult to find. Note that
- the Meteor frame grabber card <emphasis>will not work</emphasis>
- with motherboards based on the 440FX chipset! See the <link
- linkend="hw-mb">motherboard reference</link> section for details.
- In such cases, it's better to go with a BT848 based board.</para>
- </sect3>
- </sect2>
- </sect1>
-
- <sect1 id="hw-core">
- <title>Core/Processing</title>
-
- <sect2>
- <title>Motherboards, busses, and chipsets</title>
-
- <sect3>
- <title>* ISA</title>
-
- <para></para>
- </sect3>
-
- <sect3>
- <title>* EISA</title>
-
- <para></para>
- </sect3>
-
- <sect3>
- <title>* VLB</title>
-
- <para></para>
- </sect3>
-
- <sect3 id="hw-mb-pci">
- <title>PCI</title>
-
- <para><emphasis>Contributed by &a.obrien; from postings by
- &a.rgrimes;. 25 April 1995.</emphasis></para>
-
- <para><emphasis>Continuing updates by &a.jkh;.</emphasis> Last
- update on <emphasis>26 August 1996.</emphasis></para>
-
- <para>Of the Intel PCI chip sets, the following list describes various
- types of known-brokenness and the degree of breakage, listed from
- worst to best.</para>
-
- <variablelist>
- <varlistentry>
- <term>Mercury:</term>
-
- <listitem>
- <para>Cache coherency problems, especially if there are ISA bus
- masters behind the ISA to PCI bridge chip. Hardware flaw, only
- known work around is to turn the cache off.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>Saturn-I <emphasis>(ie, 82424ZX at rev 0, 1 or
- 2)</emphasis>:</term>
-
- <listitem>
- <para>Write back cache coherency problems. Hardware flaw, only
- known work around is to set the external cache to
- write-through mode. Upgrade to Saturn-II.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>Saturn-II <emphasis>(ie, 82424ZX at rev 3 or
- 4)</emphasis>:</term>
-
- <listitem>
- <para>Works fine, but many MB manufactures leave out the
- external dirty bit SRAM needed for write back operation.
- You can work around this either by running it in write
- through mode, or get the dirty bit SRAM installed (I
- have these for the ASUS PCI/I-486SP3G rev 1.6 and later
- boards).</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>Neptune:</term>
-
- <listitem>
- <para>Can not run more than 2 bus master devices. Admitted Intel
- design flaw. Workarounds include do not run more than 2 bus
- masters, special hardware design to replace the PCI bus
- arbiter (appears on Intel Altair board and several other Intel
- server group MB's). And of course Intel's official answer,
- move to the Triton chip set, we <quote>fixed it
- there</quote>.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>Triton <emphasis>(ie, 430FX)</emphasis>:</term>
-
- <listitem>
- <para>No known cache coherency or bus master problems, chip set
- does not implement parity checking. Workaround for parity
- issue. Use Triton-II based motherboards if you have the
- choice.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>Triton-II <emphasis>(ie, 430HX)</emphasis>:</term>
-
- <listitem>
- <para>All reports on motherboards using this chipset have been
- favorable so far. No known problems.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>Orion:</term>
-
- <listitem>
- <para>Early versions of this chipset suffered from a PCI
- write-posting bug which can cause noticeable performance
- degradation in applications where large amounts of PCI bus
- traffic is involved. B0 stepping or later revisions of the
- chipset fixed this problem.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><ulink
- url="http://developer.intel.com/design/pcisets/desktop.htm#440FX">440FX</ulink>:</term>
-
- <listitem>
- <para>This <ulink
- url="http://www.intel.com/procs/ppro/index.htm">Pentium
- Pro</ulink> support chipset seems to work well, and does not
- suffer from any of the early Orion chipset problems. It also
- supports a wider variety of memory, including ECC and parity.
- The only known problem with it is that the Matrox Meteor frame
- grabber card doesn't like it.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </sect3>
- </sect2>
-
- <sect2>
- <title>CPUs/FPUs</title>
-
- <para><emphasis>Contributed by &a.asami;. 26 December
- 1997.</emphasis></para>
-
- <sect3>
- <title>P6 class (Pentium Pro/Pentium II)</title>
-
- <para>Both the Pentium Pro and Pentium II work fine with FreeBSD. In
- fact, our main FTP site <ulink
- url="ftp://ftp.FreeBSD.org/">ftp.FreeBSD.org</ulink> (also known
- as "<filename>ftp.cdrom.com</filename>", world's largest ftp site)
- runs FreeBSD on a Pentium Pro. <ulink
- url="ftp://ftp.cdrom.com/archive-info/wcarchive.txt">Configurations
- details</ulink> are available for interested parties.</para>
- </sect3>
-
- <sect3>
- <title>Pentium class</title>
-
- <para>The Intel Pentium (P54C), Pentium MMX (P55C), AMD K6 and
- Cyrix/IBM 6x86MX processors are all reported to work with FreeBSD.
- I will not go into details of which processor is faster than what,
- there are millions of web sites on the Internet that tells you one
- way or another. <!-- smiley --><emphasis>:)</emphasis></para>
-
- <note>
- <para>Various CPUs have different voltage/cooling requirements. Make
- sure your motherboard can supply the exact voltage needed by the
- CPU. For instance, many recent MMX chips require split voltage
- (e.g., 2.9V core, 3.3V I/O). Also, some AMD and Cyrix/IBM chips
- run hotter than Intel chips. In that case, make sure you have
- good heatsink/fans (you can get the list of certified parts from
- their web pages).</para>
- </note>
-
- <sect4>
- <title>Clock speeds</title>
-
- <para><emphasis>Contributed by &a.rgrimes;. 1 October
- 1996.</emphasis></para>
-
- <para><emphasis>Updated by &a.asami;. 27 December
- 1997.</emphasis></para>
-
- <para>Pentium class machines use different clock speeds for the
- various parts of the system. These being the speed of the CPU,
- external memory bus, and the PCI bus. It is not always true that
- a <quote>faster</quote> processor will make a system faster than a
- <quote>slower</quote> one, due to the various clock speeds used.
- Below is a table showing the differences:</para>
-
- <informaltable frame="none">
- <tgroup cols="4">
- <thead>
- <row>
- <entry>Rated CPU MHz</entry>
- <entry>External Clock and Memory Bus MHz</entry>
- <entry>External to Internal Clock Multiplier</entry>
- <entry>PCI Bus Clock MHz</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry>60</entry>
- <entry>60</entry>
- <entry>1.0</entry>
- <entry>30</entry>
- </row>
-
- <row>
- <entry>66</entry>
- <entry>66</entry>
- <entry>1.0</entry>
- <entry>33</entry>
- </row>
-
- <row>
- <entry>75</entry>
- <entry>50</entry>
- <entry>1.5</entry>
- <entry>25</entry>
- </row>
-
- <row>
- <entry>90</entry>
- <entry>60</entry>
- <entry>1.5</entry>
- <entry>30</entry>
- </row>
-
- <row>
- <entry>100</entry>
- <entry>50</entry>
- <entry>2</entry>
- <entry>25</entry>
- </row>
-
- <row>
- <entry>100</entry>
- <entry>66</entry>
- <entry>1.5</entry>
- <entry>33</entry>
- </row>
-
- <row>
- <entry>120</entry>
- <entry>60</entry>
- <entry>2</entry>
- <entry>30</entry>
- </row>
-
- <row>
- <entry>133</entry>
- <entry>66</entry>
- <entry>2</entry>
- <entry>33</entry>
- </row>
-
- <row>
- <entry>150</entry>
- <entry>60</entry>
- <entry>2.5</entry>
- <entry>30 (Intel, AMD)</entry>
- </row>
-
- <row>
- <entry>150</entry>
- <entry>75</entry>
- <entry>2</entry>
- <entry>37.5 (Cyrix/IBM 6x86MX)</entry>
- </row>
-
- <row>
- <entry>166</entry>
- <entry>66</entry>
- <entry>2.5</entry>
- <entry>33</entry>
- </row>
-
- <row>
- <entry>180</entry>
- <entry>60</entry>
- <entry>3</entry>
- <entry>30</entry>
- </row>
-
- <row>
- <entry>200</entry>
- <entry>66</entry>
- <entry>3</entry>
- <entry>33</entry>
- </row>
-
- <row>
- <entry>233</entry>
- <entry>66</entry>
- <entry>3.5</entry>
- <entry>33</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <note>
- <para>66MHz may actually be 66.667MHz, but don't assume so.</para>
-
- <para>The Pentium 100 can be run at either 50MHz external clock
- with a multiplier of 2 or at 66MHz and a multiplier of
- 1.5.</para>
- </note>
-
- <para>As can be seen the best parts to be using are the 100, 133,
- 166, 200 and 233, with the exception that at a multiplier of 3 or
- more the CPU starves for memory.</para>
- </sect4>
-
- <sect4>
- <title>The AMD K6 Bug</title>
-
- <para>In 1997, there have been reports of the AMD K6 seg faulting
- during heavy compilation. That problem has been fixed in 3Q '97.
- According to reports, K6 chips with date mark <quote>9733</quote>
- or larger (i.e., manufactured in the 33rd week of '97 or later) do
- not have this bug.</para>
- </sect4>
- </sect3>
-
- <sect3>
- <title>* 486 class</title>
-
- <para></para>
- </sect3>
-
- <sect3>
- <title>* 386 class</title>
-
- <para></para>
- </sect3>
-
- <sect3>
- <title>286 class</title>
-
- <para>Sorry, FreeBSD does not run on 80286 machines. It is nearly
- impossible to run today's large full-featured unices on such
- hardware.</para>
- </sect3>
- </sect2>
-
- <sect2>
- <title>* Memory</title>
-
- <para>The minimum amount of memory you must have to install FreeBSD is 5
- MB. Once your system is up and running you can <link
- linkend="kernelconfig-building">build a custom kernel</link> that
- will use less memory. If you use the <filename>boot4.flp</filename>
- you can get away with having only 4 MB.</para>
- </sect2>
-
- <sect2>
- <title>* BIOS</title>
-
- <para></para>
- </sect2>
- </sect1>
-
- <sect1 id="hw-io">
- <title>Input/Output Devices</title>
-
- <sect2>
- <title>* Video cards</title>
-
- <para></para>
- </sect2>
-
- <sect2>
- <title>* Sound cards</title>
-
- <para></para>
- </sect2>
-
- <sect2>
- <title>Serial ports and multiport cards</title>
-
- <sect3 id="uart">
- <title>The UART: What it is and how it works</title>
-
- <para><emphasis>Copyright &copy; 1996 &a.uhclem;, All Rights
- Reserved. 13 January 1996.</emphasis></para>
-
- <para>The Universal Asynchronous Receiver/Transmitter (UART)
- controller is the key component of the serial communications
- subsystem of a computer. The UART takes bytes of data and transmits
- the individual bits in a sequential fashion. At the destination, a
- second UART re-assembles the bits into complete bytes.</para>
-
- <para>Serial transmission is commonly used with modems and for
- non-networked communication between computers, terminals and other
- devices.</para>
-
- <para>There are two primary forms of serial transmission: Synchronous
- and Asynchronous. Depending on the modes that are supported by the
- hardware, the name of the communication sub-system will usually
- include a <literal>A</literal> if it supports Asynchronous
- communications, and a <literal>S</literal> if it supports
- Synchronous communications. Both forms are described below.</para>
-
- <para>Some common acronyms are:
-
- <blockquote>
- <para>UART Universal Asynchronous
- Receiver/Transmitter</para>
- </blockquote>
-
- <blockquote>
- <para>USART Universal Synchronous-Asynchronous
- Receiver/Transmitter</para>
- </blockquote></para>
-
- <sect4>
- <title>Synchronous Serial Transmission</title>
-
- <para>Synchronous serial transmission requires that the sender and
- receiver share a clock with one another, or that the sender
- provide a strobe or other timing signal so that the receiver knows
- when to <quote>read</quote> the next bit of the data. In most
- forms of serial Synchronous communication, if there is no data
- available at a given instant to transmit, a fill character must be
- sent instead so that data is always being transmitted.
- Synchronous communication is usually more efficient because only
- data bits are transmitted between sender and receiver, and
- synchronous communication can be more more costly if extra wiring
- and circuits are required to share a clock signal between the
- sender and receiver.</para>
-
- <para>A form of Synchronous transmission is used with printers and
- fixed disk devices in that the data is sent on one set of wires
- while a clock or strobe is sent on a different wire. Printers and
- fixed disk devices are not normally serial devices because most
- fixed disk interface standards send an entire word of data for
- each clock or strobe signal by using a separate wire for each bit
- of the word. In the PC industry, these are known as Parallel
- devices.</para>
-
- <para>The standard serial communications hardware in the PC does not
- support Synchronous operations. This mode is described here for
- comparison purposes only.</para>
- </sect4>
-
- <sect4>
- <title>Asynchronous Serial Transmission</title>
-
- <para>Asynchronous transmission allows data to be transmitted
- without the sender having to send a clock signal to the receiver.
- Instead, the sender and receiver must agree on timing parameters
- in advance and special bits are added to each word which are used
- to synchronize the sending and receiving units.</para>
-
- <para>When a word is given to the UART for Asynchronous
- transmissions, a bit called the "Start Bit" is added to the
- beginning of each word that is to be transmitted. The Start Bit
- is used to alert the receiver that a word of data is about to be
- sent, and to force the clock in the receiver into synchronization
- with the clock in the transmitter. These two clocks must be
- accurate enough to not have the frequency drift by more than 10%
- during the transmission of the remaining bits in the word. (This
- requirement was set in the days of mechanical teleprinters and is
- easily met by modern electronic equipment.)</para>
-
- <para>After the Start Bit, the individual bits of the word of data
- are sent, with the Least Significant Bit (LSB) being sent first.
- Each bit in the transmission is transmitted for exactly the same
- amount of time as all of the other bits, and the receiver
- <quote>looks</quote> at the wire at approximately halfway through
- the period assigned to each bit to determine if the bit is a
- <literal>1</literal> or a <literal>0</literal>. For example, if
- it takes two seconds to send each bit, the receiver will examine
- the signal to determine if it is a <literal>1</literal> or a
- <literal>0</literal> after one second has passed, then it will
- wait two seconds and then examine the value of the next bit, and
- so on.</para>
-
- <para>The sender does not know when the receiver has
- <quote>looked</quote> at the value of the bit. The sender only
- knows when the clock says to begin transmitting the next bit of
- the word.</para>
-
- <para>When the entire data word has been sent, the transmitter may
- add a Parity Bit that the transmitter generates. The Parity Bit
- may be used by the receiver to perform simple error checking.
- Then at least one Stop Bit is sent by the transmitter.</para>
-
- <para>When the receiver has received all of the bits in the data
- word, it may check for the Parity Bits (both sender and receiver
- must agree on whether a Parity Bit is to be used), and then the
- receiver looks for a Stop Bit. If the Stop Bit does not appear
- when it is supposed to, the UART considers the entire word to be
- garbled and will report a Framing Error to the host processor when
- the data word is read. The usual cause of a Framing Error is that
- the sender and receiver clocks were not running at the same speed,
- or that the signal was interrupted.</para>
-
- <para>Regardless of whether the data was received correctly or not,
- the UART automatically discards the Start, Parity and Stop bits.
- If the sender and receiver are configured identically, these bits
- are not passed to the host.</para>
-
- <para>If another word is ready for transmission, the Start Bit for
- the new word can be sent as soon as the Stop Bit for the previous
- word has been sent.</para>
-
- <para>Because asynchronous data is <quote>self synchronizing</quote>,
- if there is no data to transmit, the transmission line can be
- idle.</para>
- </sect4>
-
- <sect4>
- <title>Other UART Functions</title>
-
- <para>In addition to the basic job of converting data from parallel
- to serial for transmission and from serial to parallel on
- reception, a UART will usually provide additional circuits for
- signals that can be used to indicate the state of the transmission
- media, and to regulate the flow of data in the event that the
- remote device is not prepared to accept more data. For example,
- when the device connected to the UART is a modem, the modem may
- report the presence of a carrier on the phone line while the
- computer may be able to instruct the modem to reset itself or to
- not take calls by asserting or disasserting one more more of these
- extra signals. The function of each of these additional signals is
- defined in the EIA RS232-C standard.</para>
- </sect4>
-
- <sect4>
- <title>The RS232-C and V.24 Standards</title>
-
- <para>In most computer systems, the UART is connected to circuitry
- that generates signals that comply with the EIA RS232-C
- specification. There is also a CCITT standard named V.24 that
- mirrors the specifications included in RS232-C.</para>
-
- <sect5>
- <title>RS232-C Bit Assignments (Marks and Spaces)</title>
-
- <para>In RS232-C, a value of <literal>1</literal> is called a
- <literal>Mark</literal> and a value of <literal>0</literal> is
- called a <literal>Space</literal>. When a communication line is
- idle, the line is said to be <quote>Marking</quote>, or
- transmitting continuous <literal>1</literal> values.</para>
-
- <para>The Start bit always has a value of <literal>0</literal> (a
- Space). The Stop Bit always has a value of <literal>1</literal>
- (a Mark). This means that there will always be a Mark (1) to
- Space (0) transition on the line at the start of every word,
- even when multiple word are transmitted back to back. This
- guarantees that sender and receiver can resynchronize their
- clocks regardless of the content of the data bits that are being
- transmitted.</para>
-
- <para>The idle time between Stop and Start bits does not have to
- be an exact multiple (including zero) of the bit rate of the
- communication link, but most UARTs are designed this way for
- simplicity.</para>
-
- <para>In RS232-C, the "Marking" signal (a <literal>1</literal>) is
- represented by a voltage between -2 VDC and -12 VDC, and a
- "Spacing" signal (a <literal>0</literal>) is represented by a
- voltage between 0 and +12 VDC. The transmitter is supposed to
- send +12 VDC or -12 VDC, and the receiver is supposed to allow
- for some voltage loss in long cables. Some transmitters in low
- power devices (like portable computers) sometimes use only +5
- VDC and -5 VDC, but these values are still acceptable to a
- RS232-C receiver, provided that the cable lengths are
- short.</para>
- </sect5>
-
- <sect5>
- <title>RS232-C Break Signal</title>
-
- <para>RS232-C also specifies a signal called a
- <literal>Break</literal>, which is caused by sending continuous
- Spacing values (no Start or Stop bits). When there is no
- electricity present on the data circuit, the line is considered
- to be sending <literal>Break</literal>.</para>
-
- <para>The <literal>Break</literal> signal must be of a duration
- longer than the time it takes to send a complete byte plus
- Start, Stop and Parity bits. Most UARTs can distinguish between
- a Framing Error and a Break, but if the UART cannot do this, the
- Framing Error detection can be used to identify Breaks.</para>
-
- <para>In the days of teleprinters, when numerous printers around
- the country were wired in series (such as news services), any
- unit could cause a <literal>Break</literal> by temporarily
- opening the entire circuit so that no current flowed. This was
- used to allow a location with urgent news to interrupt some
- other location that was currently sending information.</para>
-
- <para>In modern systems there are two types of Break signals. If
- the Break is longer than 1.6 seconds, it is considered a "Modem
- Break", and some modems can be programmed to terminate the
- conversation and go on-hook or enter the modems' command mode
- when the modem detects this signal. If the Break is smaller
- than 1.6 seconds, it signifies a Data Break and it is up to the
- remote computer to respond to this signal. Sometimes this form
- of Break is used as an Attention or Interrupt signal and
- sometimes is accepted as a substitute for the ASCII CONTROL-C
- character.</para>
-
- <para>Marks and Spaces are also equivalent to <quote>Holes</quote>
- and <quote>No Holes</quote> in paper tape systems.</para>
-
- <note>
- <para>Breaks cannot be generated from paper tape or from any
- other byte value, since bytes are always sent with Start and
- Stop bit. The UART is usually capable of generating the
- continuous Spacing signal in response to a special command
- from the host processor.</para>
- </note>
- </sect5>
-
- <sect5>
- <title>RS232-C DTE and DCE Devices</title>
-
- <para>The RS232-C specification defines two types of equipment:
- the Data Terminal Equipment (DTE) and the Data Carrier Equipment
- (DCE). Usually, the DTE device is the terminal (or computer),
- and the DCE is a modem. Across the phone line at the other end
- of a conversation, the receiving modem is also a DCE device and
- the computer that is connected to that modem is a DTE device.
- The DCE device receives signals on the pins that the DTE device
- transmits on, and vice versa.</para>
-
- <para>When two devices that are both DTE or both DCE must be
- connected together without a modem or a similar media translater
- between them, a NULL modem must be used. The NULL modem
- electrically re-arranges the cabling so that the transmitter
- output is connected to the receiver input on the other device,
- and vice versa. Similar translations are performed on all of
- the control signals so that each device will see what it thinks
- are DCE (or DTE) signals from the other device.</para>
-
- <para>The number of signals generated by the DTE and DCE devices
- are not symmetrical. The DTE device generates fewer signals for
- the DCE device than the DTE device receives from the DCE.</para>
- </sect5>
-
- <sect5>
- <title>RS232-C Pin Assignments</title>
-
- <para>The EIA RS232-C specification (and the ITU equivalent, V.24)
- calls for a twenty-five pin connector (usually a DB25) and
- defines the purpose of most of the pins in that
- connector.</para>
-
- <para>In the IBM Personal Computer and similar systems, a subset
- of RS232-C signals are provided via nine pin connectors (DB9).
- The signals that are not included on the PC connector deal
- mainly with synchronous operation, and this transmission mode is
- not supported by the UART that IBM selected for use in the IBM
- PC.</para>
-
- <para>Depending on the computer manufacturer, a DB25, a DB9, or
- both types of connector may be used for RS232-C communications.
- (The IBM PC also uses a DB25 connector for the parallel printer
- interface which causes some confusion.)</para>
-
- <para>Below is a table of the RS232-C signal assignments in the
- DB25 and DB9 connectors.</para>
-
- <informaltable frame="none">
- <tgroup cols="7">
- <thead>
- <row>
- <entry>DB25 RS232-C Pin</entry>
- <entry>DB9 IBM PC Pin</entry>
- <entry>EIA Circuit Symbol</entry>
- <entry>CCITT Circuit Symbol</entry>
- <entry>Common Name</entry>
- <entry>Signal Source</entry>
- <entry>Description</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry>1</entry>
- <entry>-</entry>
- <entry>AA</entry>
- <entry>101</entry>
- <entry>PG/FG</entry>
- <entry>-</entry>
- <entry>Frame/Protective Ground</entry>
- </row>
-
- <row>
- <entry>2</entry>
- <entry>3</entry>
- <entry>BA</entry>
- <entry>103</entry>
- <entry>TD</entry>
- <entry>DTE</entry>
- <entry>Transmit Data</entry>
- </row>
-
- <row>
- <entry>3</entry>
- <entry>2</entry>
- <entry>BB</entry>
- <entry>104</entry>
- <entry>RD</entry>
- <entry>DCE</entry>
- <entry>Receive Data</entry>
- </row>
-
- <row>
- <entry>4</entry>
- <entry>7</entry>
- <entry>CA</entry>
- <entry>105</entry>
- <entry>RTS</entry>
- <entry>DTE</entry>
- <entry>Request to Send</entry>
- </row>
-
- <row>
- <entry>5</entry>
- <entry>8</entry>
- <entry>CB</entry>
- <entry>106</entry>
- <entry>CTS</entry>
- <entry>DCE</entry>
- <entry>Clear to Send</entry>
- </row>
-
- <row>
- <entry>6</entry>
- <entry>6</entry>
- <entry>CC</entry>
- <entry>107</entry>
- <entry>DSR</entry>
- <entry>DCE</entry>
- <entry>Data Set Ready</entry>
- </row>
-
- <row>
- <entry>7</entry>
- <entry>5</entry>
- <entry>AV</entry>
- <entry>102</entry>
- <entry>SG/GND</entry>
- <entry>-</entry>
- <entry>Signal Ground</entry>
- </row>
-
- <row>
- <entry>8</entry>
- <entry>1</entry>
- <entry>CF</entry>
- <entry>109</entry>
- <entry>DCD/CD</entry>
- <entry>DCE</entry>
- <entry>Data Carrier Detect</entry>
- </row>
-
- <row>
- <entry>9</entry>
- <entry>-</entry>
- <entry>-</entry>
- <entry>-</entry>
- <entry>-</entry>
- <entry>-</entry>
- <entry>Reserved for Test</entry>
- </row>
-
- <row>
- <entry>10</entry>
- <entry>-</entry>
- <entry>-</entry>
- <entry>-</entry>
- <entry>-</entry>
- <entry>-</entry>
- <entry>Reserved for Test</entry>
- </row>
-
- <row>
- <entry>11</entry>
- <entry>-</entry>
- <entry>-</entry>
- <entry>-</entry>
- <entry>-</entry>
- <entry>-</entry>
- <entry>Reserved for Test</entry>
- </row>
-
- <row>
- <entry>12</entry>
- <entry>-</entry>
- <entry>CI</entry>
- <entry>122</entry>
- <entry>SRLSD</entry>
- <entry>DCE</entry>
- <entry>Sec. Recv. Line Signal Detector</entry>
- </row>
-
- <row>
- <entry>13</entry>
- <entry>-</entry>
- <entry>SCB</entry>
- <entry>121</entry>
- <entry>SCTS</entry>
- <entry>DCE</entry>
- <entry>Secondary Clear to Send</entry>
- </row>
-
- <row>
- <entry>14</entry>
- <entry>-</entry>
- <entry>SBA</entry>
- <entry>118</entry>
- <entry>STD</entry>
- <entry>DTE</entry>
- <entry>Secondary Transmit Data</entry>
- </row>
-
- <row>
- <entry>15</entry>
- <entry>-</entry>
- <entry>DB</entry>
- <entry>114</entry>
- <entry>TSET</entry>
- <entry>DCE</entry>
- <entry>Trans. Sig. Element Timing</entry>
- </row>
-
- <row>
- <entry>16</entry>
- <entry>-</entry>
- <entry>SBB</entry>
- <entry>119</entry>
- <entry>SRD</entry>
- <entry>DCE</entry>
- <entry>Secondary Received Data</entry>
- </row>
-
- <row>
- <entry>17</entry>
- <entry>-</entry>
- <entry>DD</entry>
- <entry>115</entry>
- <entry>RSET</entry>
- <entry>DCE</entry>
- <entry>Receiver Signal Element Timing</entry>
- </row>
-
- <row>
- <entry>18</entry>
- <entry>-</entry>
- <entry>-</entry>
- <entry>141</entry>
- <entry>LOOP</entry>
- <entry>DTE</entry>
- <entry>Local Loopback</entry>
- </row>
-
- <row>
- <entry>19</entry>
- <entry>-</entry>
- <entry>SCA</entry>
- <entry>120</entry>
- <entry>SRS</entry>
- <entry>DTE</entry>
- <entry>Secondary Request to Send</entry>
- </row>
-
- <row>
- <entry>20</entry>
- <entry>4</entry>
- <entry>CD</entry>
- <entry>108.2</entry>
- <entry>DTR</entry>
- <entry>DTE</entry>
- <entry>Data Terminal Ready</entry>
- </row>
-
- <row>
- <entry>21</entry>
- <entry>-</entry>
- <entry>-</entry>
- <entry>-</entry>
- <entry>RDL</entry>
- <entry>DTE</entry>
- <entry>Remote Digital Loopback</entry>
- </row>
-
- <row>
- <entry>22</entry>
- <entry>9</entry>
- <entry>CE</entry>
- <entry>125</entry>
- <entry>RI</entry>
- <entry>DCE</entry>
- <entry>Ring Indicator</entry>
- </row>
-
- <row>
- <entry>23</entry>
- <entry>-</entry>
- <entry>CH</entry>
- <entry>111</entry>
- <entry>DSRS</entry>
- <entry>DTE</entry>
- <entry>Data Signal Rate Selector</entry>
- </row>
-
- <row>
- <entry>24</entry>
- <entry>-</entry>
- <entry>DA</entry>
- <entry>113</entry>
- <entry>TSET</entry>
- <entry>DTE</entry>
- <entry>Trans. Sig. Element Timing</entry>
- </row>
-
- <row>
- <entry>25</entry>
- <entry>-</entry>
- <entry>-</entry>
- <entry>142</entry>
- <entry>-</entry>
- <entry>DCE</entry>
- <entry>Test Mode</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect5>
- </sect4>
-
- <sect4>
- <title>Bits, Baud and Symbols</title>
-
- <para>Baud is a measurement of transmission speed in asynchronous
- communication. Because of advances in modem communication
- technology, this term is frequently misused when describing the
- data rates in newer devices.</para>
-
- <para>Traditionally, a Baud Rate represents the number of bits that
- are actually being sent over the media, not the amount of data
- that is actually moved from one DTE device to the other. The Baud
- count includes the overhead bits Start, Stop and Parity that are
- generated by the sending UART and removed by the receiving UART.
- This means that seven-bit words of data actually take 10 bits to
- be completely transmitted. Therefore, a modem capable of moving
- 300 bits per second from one place to another can normally only
- move 30 7-bit words if Parity is used and one Start and Stop bit
- are present.</para>
-
- <para>If 8-bit data words are used and Parity bits are also used,
- the data rate falls to 27.27 words per second, because it now
- takes 11 bits to send the eight-bit words, and the modem still
- only sends 300 bits per second.</para>
-
- <para>The formula for converting bytes per second into a baud rate
- and vice versa was simple until error-correcting modems came
- along. These modems receive the serial stream of bits from the
- UART in the host computer (even when internal modems are used the
- data is still frequently serialized) and converts the bits back
- into bytes. These bytes are then combined into packets and sent
- over the phone line using a Synchronous transmission method. This
- means that the Stop, Start, and Parity bits added by the UART in
- the DTE (the computer) were removed by the modem before
- transmission by the sending modem. When these bytes are received
- by the remote modem, the remote modem adds Start, Stop and Parity
- bits to the words, converts them to a serial format and then sends
- them to the receiving UART in the remote computer, who then strips
- the Start, Stop and Parity bits.</para>
-
- <para>The reason all these extra conversions are done is so that the
- two modems can perform error correction, which means that the
- receiving modem is able to ask the sending modem to resend a block
- of data that was not received with the correct checksum. This
- checking is handled by the modems, and the DTE devices are usually
- unaware that the process is occurring.</para>
-
- <para>By striping the Start, Stop and Parity bits, the additional
- bits of data that the two modems must share between themselves to
- perform error-correction are mostly concealed from the effective
- transmission rate seen by the sending and receiving DTE equipment.
- For example, if a modem sends ten 7-bit words to another modem
- without including the Start, Stop and Parity bits, the sending
- modem will be able to add 30 bits of its own information that the
- receiving modem can use to do error-correction without impacting
- the transmission speed of the real data.</para>
-
- <para>The use of the term Baud is further confused by modems that
- perform compression. A single 8-bit word passed over the
- telephone line might represent a dozen words that were transmitted
- to the sending modem. The receiving modem will expand the data
- back to its original content and pass that data to the receiving
- DTE.</para>
-
- <para>Modern modems also include buffers that allow the rate that
- bits move across the phone line (DCE to DCE) to be a different
- speed than the speed that the bits move between the DTE and DCE on
- both ends of the conversation. Normally the speed between the DTE
- and DCE is higher than the DCE to DCE speed because of the use of
- compression by the modems.</para>
-
- <para>Because the number of bits needed to describe a byte varied
- during the trip between the two machines plus the differing
- bits-per-seconds speeds that are used present on the DTE-DCE and
- DCE-DCE links, the usage of the term Baud to describe the overall
- communication speed causes problems and can misrepresent the true
- transmission speed. So Bits Per Second (bps) is the correct term
- to use to describe the transmission rate seen at the DCE to DCE
- interface and Baud or Bits Per Second are acceptable terms to use
- when a connection is made between two systems with a wired
- connection, or if a modem is in use that is not performing
- error-correction or compression.</para>
-
- <para>Modern high speed modems (2400, 9600, 14,400, and 19,200bps)
- in reality still operate at or below 2400 baud, or more
- accurately, 2400 Symbols per second. High speed modem are able to
- encode more bits of data into each Symbol using a technique called
- Constellation Stuffing, which is why the effective bits per second
- rate of the modem is higher, but the modem continues to operate
- within the limited audio bandwidth that the telephone system
- provides. Modems operating at 28,800 and higher speeds have
- variable Symbol rates, but the technique is the same.</para>
- </sect4>
-
- <sect4>
- <title>The IBM Personal Computer UART</title>
-
- <para>Starting with the original IBM Personal Computer, IBM selected
- the National Semiconductor INS8250 UART for use in the IBM PC
- Parallel/Serial Adapter. Subsequent generations of compatible
- computers from IBM and other vendors continued to use the INS8250
- or improved versions of the National Semiconductor UART
- family.</para>
-
- <sect5>
- <title>National Semiconductor UART Family Tree</title>
-
- <para>There have been several versions and subsequent generations
- of the INS8250 UART. Each major version is described
- below.</para>
-
- <!-- This should really be a graphic -->
- <programlisting>
-INS8250 -&gt; INS8250B
- \
- \
- \-&gt; INS8250A -&gt; INS82C50A
- \
- \
- \-&gt; NS16450 -&gt; NS16C450
- \
- \
- \-&gt; NS16550 -&gt; NS16550A -&gt; PC16550D</programlisting>
-
- <variablelist>
- <varlistentry>
- <term>INS8250</term>
-
- <listitem>
- <para>This part was used in the original IBM PC and IBM
- PC/XT. The original name for this part was the INS8250
- ACE (Asynchronous Communications Element) and it is made
- from NMOS technology.</para>
-
- <para>The 8250 uses eight I/O ports and has a one-byte send
- and a one-byte receive buffer. This original UART has
- several race conditions and other flaws. The original IBM
- BIOS includes code to work around these flaws, but this
- made the BIOS dependent on the flaws being present, so
- subsequent parts like the 8250A, 16450 or 16550 could not
- be used in the original IBM PC or IBM PC/XT.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>INS8250-B</term>
-
- <listitem>
- <para>This is the slower speed of the INS8250 made from NMOS
- technology. It contains the same problems as the original
- INS8250.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>INS8250A</term>
-
- <listitem>
- <para>An improved version of the INS8250 using XMOS
- technology with various functional flaws corrected. The
- INS8250A was used initially in PC clone computers by
- vendors who used <quote>clean</quote> BIOS designs. Because
- of the corrections in the chip, this part could not be
- used with a BIOS compatible with the INS8250 or
- INS8250B.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>INS82C50A</term>
-
- <listitem>
- <para>This is a CMOS version (low power consumption) of the
- INS8250A and has similar functional
- characteristics.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>NS16450</term>
-
- <listitem>
- <para>Same as NS8250A with improvements so it can be used
- with faster CPU bus designs. IBM used this part in the
- IBM AT and updated the IBM BIOS to no longer rely on the
- bugs in the INS8250.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>NS16C450</term>
-
- <listitem>
- <para>This is a CMOS version (low power consumption) of the
- NS16450.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>NS16550</term>
-
- <listitem>
- <para>Same as NS16450 with a 16-byte send and receive buffer
- but the buffer design was flawed and could not be reliably
- be used.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>NS16550A</term>
-
- <listitem>
- <para>Same as NS16550 with the buffer flaws corrected. The
- 16550A and its successors have become the most popular
- UART design in the PC industry, mainly due it its ability
- to reliably handle higher data rates on operating systems
- with sluggish interrupt response times.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>NS16C552</term>
-
- <listitem>
- <para>This component consists of two NS16C550A CMOS UARTs in
- a single package.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>PC16550D</term>
-
- <listitem>
- <para>Same as NS16550A with subtle flaws corrected. This is
- revision D of the 16550 family and is the latest design
- available from National Semiconductor.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </sect5>
-
- <sect5>
- <title>The NS16550AF and the PC16550D are the same thing</title>
-
- <para>National reorganized their part numbering system a few years
- ago, and the NS16550AFN no longer exists by that name. (If you
- have a NS16550AFN, look at the date code on the part, which is a
- four digit number that usually starts with a nine. The first
- two digits of the number are the year, and the last two digits
- are the week in that year when the part was packaged. If you
- have a NS16550AFN, it is probably a few years old.)</para>
-
- <para>The new numbers are like PC16550DV, with minor differences
- in the suffix letters depending on the package material and its
- shape. (A description of the numbering system can be found
- below.)</para>
-
- <para>It is important to understand that in some stores, you may
- pay &#36;15(US) for a NS16550AFN made in 1990 and in the next
- bin are the new PC16550DN parts with minor fixes that National
- has made since the AFN part was in production, the PC16550DN was
- probably made in the past six months and it costs half (as low
- as &#36;5(US) in volume) as much as the NS16550AFN because they
- are readily available.</para>
-
- <para>As the supply of NS16550AFN chips continues to shrink, the
- price will probably continue to increase until more people
- discover and accept that the PC16550DN really has the same
- function as the old part number.</para>
- </sect5>
-
- <sect5>
- <title>National Semiconductor Part Numbering System</title>
-
- <para>The older NS<replaceable>nnnnnrqp</replaceable> part
- numbers are now of the format
- PC<replaceable>nnnnnrgp</replaceable>.</para>
-
- <para>The <replaceable>r</replaceable> is the revision field. The
- current revision of the 16550 from National Semiconductor is
- <literal>D</literal>.</para>
-
- <para>The <replaceable>p</replaceable> is the package-type field.
- The types are:</para>
-
- <informaltable frame="none">
- <tgroup cols="3">
- <tbody>
- <row>
- <entry>"F"</entry>
- <entry>QFP</entry>
- <entry>(quad flat pack) L lead type</entry>
- </row>
-
- <row>
- <entry>"N"</entry>
- <entry>DIP</entry>
- <entry>(dual inline package) through hole straight lead
- type</entry>
- </row>
-
- <row>
- <entry>"V"</entry>
- <entry>LPCC</entry>
- <entry>(lead plastic chip carrier) J lead type</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>The <replaceable>g</replaceable> is the product grade field.
- If an <literal>I</literal> precedes the package-type letter, it
- indicates an <quote>industrial</quote> grade part, which has
- higher specs than a standard part but not as high as Military
- Specification (Milspec) component. This is an optional
- field.</para>
-
- <para>So what we used to call a NS16550AFN (DIP Package) is now
- called a PC16550DN or PC16550DIN.</para>
- </sect5>
- </sect4>
-
- <sect4>
- <title>Other Vendors and Similar UARTs</title>
-
- <para>Over the years, the 8250, 8250A, 16450 and 16550 have been
- licensed or copied by other chip vendors. In the case of the
- 8250, 8250A and 16450, the exact circuit (the
- <quote>megacell</quote>) was licensed to many vendors, including
- Western Digital and Intel. Other vendors reverse-engineered the
- part or produced emulations that had similar behavior.</para>
-
- <para>In internal modems, the modem designer will frequently emulate
- the 8250A/16450 with the modem microprocessor, and the emulated
- UART will frequently have a hidden buffer consisting of several
- hundred bytes. Because of the size of the buffer, these
- emulations can be as reliable as a 16550A in their ability to
- handle high speed data. However, most operating systems will
- still report that the UART is only a 8250A or 16450, and may not
- make effective use of the extra buffering present in the emulated
- UART unless special drivers are used.</para>
-
- <para>Some modem makers are driven by market forces to abandon a
- design that has hundreds of bytes of buffer and instead use a
- 16550A UART so that the product will compare favorably in market
- comparisons even though the effective performance may be lowered
- by this action.</para>
-
- <para>A common misconception is that all parts with
- <quote>16550A</quote> written on them are identical in performance.
- There are differences, and in some cases, outright flaws in most
- of these 16550A clones.</para>
-
- <para>When the NS16550 was developed, the National Semiconductor
- obtained several patents on the design and they also limited
- licensing, making it harder for other vendors to provide a chip
- with similar features. Because of the patents, reverse-engineered
- designs and emulations had to avoid infringing the claims covered
- by the patents. Subsequently, these copies almost never perform
- exactly the same as the NS16550A or PC16550D, which are the parts
- most computer and modem makers want to buy but are sometimes
- unwilling to pay the price required to get the genuine
- part.</para>
-
- <para>Some of the differences in the clone 16550A parts are
- unimportant, while others can prevent the device from being used
- at all with a given operating system or driver. These differences
- may show up when using other drivers, or when particular
- combinations of events occur that were not well tested or
- considered in the Windows driver. This is because most modem
- vendors and 16550-clone makers use the Microsoft drivers from
- Windows for Workgroups 3.11 and the Microsoft MS-DOS utility as the
- primary tests for compatibility with the NS16550A. This
- over-simplistic criteria means that if a different operating
- system is used, problems could appear due to subtle differences
- between the clones and genuine components.</para>
-
- <para>National Semiconductor has made available a program named
- <application>COMTEST</application> that performs compatibility
- tests independent of any OS drivers. It should be remembered that
- the purpose of this type of program is to demonstrate the flaws in
- the products of the competition, so the program will report major
- as well as extremely subtle differences in behavior in the part
- being tested.</para>
-
- <para>In a series of tests performed by the author of this document
- in 1994, components made by National Semiconductor, TI, StarTech,
- and CMD as well as megacells and emulations embedded in internal
- modems were tested with COMTEST. A difference count for some of
- these components is listed below. Because these tests were
- performed in 1994, they may not reflect the current performance of
- the given product from a vendor.</para>
-
- <para>It should be noted that COMTEST normally aborts when an
- excessive number or certain types of problems have been detected.
- As part of this testing, COMTEST was modified so that it would not
- abort no matter how many differences were encountered.</para>
-
- <informaltable frame="none">
- <tgroup cols="3">
- <thead>
- <row>
- <entry>Vendor</entry>
- <entry>Part Number</entry>
- <entry>Errors (aka "differences" reported)</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry>National</entry>
- <entry>(PC16550DV)</entry>
- <entry>0</entry>
- </row>
-
- <row>
- <entry>National</entry>
- <entry>(NS16550AFN)</entry>
- <entry>0</entry>
- </row>
-
- <row>
- <entry>National</entry>
- <entry>(NS16C552V)</entry>
- <entry>0</entry>
- </row>
-
- <row>
- <entry>TI</entry>
- <entry>(TL16550AFN)</entry>
- <entry>3</entry>
- </row>
-
- <row>
- <entry>CMD</entry>
- <entry>(16C550PE)</entry>
- <entry>19</entry>
- </row>
-
- <row>
- <entry>StarTech</entry>
- <entry>(ST16C550J)</entry>
- <entry>23</entry>
- </row>
-
- <row>
- <entry>Rockwell</entry>
- <entry>Reference modem with internal 16550 or an
- emulation (RC144DPi/C3000-25)</entry>
- <entry>117</entry>
- </row>
-
- <row>
- <entry>Sierra</entry>
- <entry>Modem with an internal 16550
- (SC11951/SC11351)</entry>
- <entry>91</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <note>
- <para>To date, the author of this document has not found any
- non-National parts that report zero differences using the
- COMTEST program. It should also be noted that National has had
- five versions of the 16550 over the years and the newest parts
- behave a bit differently than the classic NS16550AFN that is
- considered the benchmark for functionality. COMTEST appears to
- turn a blind eye to the differences within the National product
- line and reports no errors on the National parts (except for the
- original 16550) even when there are official erratas that
- describe bugs in the A, B and C revisions of the parts, so this
- bias in COMTEST must be taken into account.</para>
- </note>
-
- <para>It is important to understand that a simple count of
- differences from COMTEST does not reveal a lot about what
- differences are important and which are not. For example, about
- half of the differences reported in the two modems listed above
- that have internal UARTs were caused by the clone UARTs not
- supporting five- and six-bit character modes. The real 16550,
- 16450, and 8250 UARTs all support these modes and COMTEST checks
- the functionality of these modes so over fifty differences are
- reported. However, almost no modern modem supports five- or
- six-bit characters, particularly those with error-correction and
- compression capabilities. This means that the differences related
- to five- and six-bit character modes can be discounted.</para>
-
- <para>Many of the differences COMTEST reports have to do with
- timing. In many of the clone designs, when the host reads from
- one port, the status bits in some other port may not update in the
- same amount of time (some faster, some slower) as a
- <emphasis>real</emphasis> NS16550AFN and COMTEST looks for these
- differences. This means that the number of differences can be
- misleading in that one device may only have one or two differences
- but they are extremely serious, and some other device that updates
- the status registers faster or slower than the reference part
- (that would probably never affect the operation of a properly
- written driver) could have dozens of differences reported.</para>
-
- <para>COMTEST can be used as a screening tool to alert the
- administrator to the presence of potentially incompatible
- components that might cause problems or have to be handled as a
- special case.</para>
-
- <para>If you run COMTEST on a 16550 that is in a modem or a modem is
- attached to the serial port, you need to first issue a ATE0&amp;W
- command to the modem so that the modem will not echo any of the
- test characters. If you forget to do this, COMTEST will report at
- least this one difference:</para>
-
- <screen>Error (6)...Timeout interrupt failed: IIR = c1 LSR = 61</screen>
- </sect4>
-
- <sect4>
- <title>8250/16450/16550 Registers</title>
-
- <para>The 8250/16450/16550 UART occupies eight contiguous I/O port
- addresses. In the IBM PC, there are two defined locations for
- these eight ports and they are known collectively as COM1 and
- COM2. The makers of PC-clones and add-on cards have created two
- additional areas known as COM3 and COM4, but these extra COM ports
- conflict with other hardware on some systems. The most common
- conflict is with video adapters that provide IBM 8514
- emulation.</para>
-
- <para>COM1 is located from 0x3f8 to 0x3ff and normally uses IRQ 4
- COM2 is located from 0x2f8 to 0x2ff and normally uses IRQ 3 COM3
- is located from 0x3e8 to 0x3ef and has no standardized IRQ COM4 is
- located from 0x2e8 to 0x2ef and has no standardized IRQ.</para>
-
- <para>A description of the I/O ports of the 8250/16450/16550 UART is
- provided below.</para>
-
- <informaltable frame="none">
- <tgroup cols="3">
- <thead>
- <row>
- <entry>I/O Port</entry>
- <entry>Access Allowed</entry>
- <entry>Description</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry>+0x00</entry>
- <entry>write (DLAB==0)</entry>
- <entry><para>Transmit Holding Register
- (THR).</para><para>Information written to this port are
- treated as data words and will be transmitted by the
- UART.</para></entry>
- </row>
-
- <row>
- <entry>+0x00</entry>
- <entry>read (DLAB==0)</entry>
- <entry><para>Receive Buffer Register (RBR).</para><para>Any
- data words received by the UART form the serial link are
- accessed by the host by reading this
- port.</para></entry>
- </row>
-
- <row>
- <entry>+0x00</entry>
- <entry>write/read (DLAB==1)</entry>
- <entry><para>Divisor Latch LSB (DLL)</para><para>This value
- will be divided from the master input clock (in the IBM
- PC, the master clock is 1.8432MHz) and the resulting
- clock will determine the baud rate of the UART. This
- register holds bits 0 thru 7 of the
- divisor.</para></entry>
- </row>
-
- <row>
- <entry>+0x01</entry>
- <entry>write/read (DLAB==1)</entry>
- <entry><para>Divisor Latch MSB (DLH)</para><para>This value
- will be divided from the master input clock (in the IBM
- PC, the master clock is 1.8432MHz) and the resulting
- clock will determine the baud rate of the UART. This
- register holds bits 8 thru 15 of the
- divisor.</para></entry>
- </row>
-
- <row>
- <entry>+0x01</entry>
- <entry>write/read (DLAB==0)</entry>
- <entrytbl cols="2">
- <colspec colnum="1" colname="col1">
- <colspec colnum="2" colname="col2">
- <spanspec namest="col1" nameend="col2" spanname="1to2">
-
- <tbody>
- <row>
- <entry spanname="1to2"><para>Interrupt Enable Register
- (IER)</para><para>The 8250/16450/16550 UART
- classifies events into one of four categories.
- Each category can be configured to generate an
- interrupt when any of the events occurs. The
- 8250/16450/16550 UART generates a single external
- interrupt signal regardless of how many events in
- the enabled categories have occurred. It is up to
- the host processor to respond to the interrupt and
- then poll the enabled interrupt categories
- (usually all categories have interrupts enabled)
- to determine the true cause(s) of the
- interrupt.</para></entry>
- </row>
-
- <row>
- <entry>Bit 7</entry>
- <entry>Reserved, always 0.</entry>
- </row>
-
- <row>
- <entry>Bit 6</entry>
- <entry>Reserved, always 0.</entry>
- </row>
-
- <row>
- <entry>Bit 5</entry>
- <entry>Reserved, always 0.</entry>
- </row>
-
- <row>
- <entry>Bit 4</entry>
- <entry>Reserved, always 0.</entry>
- </row>
-
- <row>
- <entry>Bit 3</entry>
- <entry>Enable Modem Status Interrupt (EDSSI). Setting
- this bit to "1" allows the UART to generate an
- interrupt when a change occurs on one or more of the
- status lines.</entry>
- </row>
-
- <row>
- <entry>Bit 2</entry>
- <entry>Enable Receiver Line Status Interrupt (ELSI)
- Setting this bit to "1" causes the UART to generate
- an interrupt when the an error (or a BREAK signal)
- has been detected in the incoming data.</entry>
- </row>
-
- <row>
- <entry>Bit 1</entry>
- <entry>Enable Transmitter Holding Register Empty
- Interrupt (ETBEI) Setting this bit to "1" causes the
- UART to generate an interrupt when the UART has room
- for one or more additional characters that are to be
- transmitted.</entry>
- </row>
-
- <row>
- <entry>Bit 0</entry>
- <entry>Enable Received Data Available Interrupt
- (ERBFI) Setting this bit to "1" causes the UART to
- generate an interrupt when the UART has received
- enough characters to exceed the trigger level of the
- FIFO, or the FIFO timer has expired (stale data), or
- a single character has been received when the FIFO
- is disabled.</entry>
- </row>
- </tbody>
- </entrytbl>
- </row>
-
- <row>
- <entry>+0x02</entry>
- <entry>write</entry>
- <entrytbl cols="4">
- <colspec colnum="1" colname="col1">
- <colspec colnum="2" colname="col2">
- <colspec colnum="3" colname="col3">
- <colspec colnum="4" colname="col4">
- <spanspec namest="col1" nameend="col4" spanname="1to4">
- <spanspec namest="col2" nameend="col4" spanname="2to4">
-
- <tbody>
- <row>
- <entry spanname="1to4">FIFO Control Register (FCR)
- (This port does not exist on the 8250 and 16450
- UART.)</entry>
- </row>
-
- <row>
- <entry>Bit 7</entry>
- <entry spanname="2to4">Receiver Trigger Bit #1</entry>
- </row>
-
- <row>
- <entry>Bit 6</entry>
- <entry spanname="2to4"><para>Receiver Trigger Bit
- #0</para><para>These two bits control at what
- point the receiver is to generate an interrupt
- when the FIFO is active.</para></entry>
- </row>
-
- <row>
- <entry colname="col2">7</entry>
- <entry colname="col3">6</entry>
- <entry colname="col4">How many words are received
- before an interrupt is generated</entry>
- </row>
-
- <row>
- <entry colname="col2">0</entry>
- <entry colname="col3">0</entry>
- <entry colname="col4">1</entry>
- </row>
-
- <row>
- <entry colname="col2">0</entry>
- <entry colname="col3">1</entry>
- <entry colname="col4">4</entry>
- </row>
-
- <row>
- <entry colname="col2">1</entry>
- <entry colname="col3">0</entry>
- <entry colname="col4">8</entry>
- </row>
-
- <row>
- <entry colname="col2">1</entry>
- <entry colname="col3">1</entry>
- <entry colname="col4">14</entry>
- </row>
-
- <row>
- <entry>Bit 5</entry>
- <entry spanname="2to4">Reserved, always 0.</entry>
- </row>
-
- <row>
- <entry>Bit 4</entry>
- <entry spanname="2to4">Reserved, always 0.</entry>
- </row>
-
- <row>
- <entry>Bit 3</entry>
- <entry spanname="2to4">DMA Mode Select. If Bit 0 is
- set to "1" (FIFOs enabled), setting this bit changes
- the operation of the -RXRDY and -TXRDY signals from
- Mode 0 to Mode 1.</entry>
- </row>
-
- <row>
- <entry>Bit 2</entry>
- <entry spanname="2to4">Transmit FIFO Reset. When a
- "1" is written to this bit, the contents of the FIFO
- are discarded. Any word currently being transmitted
- will be sent intact. This function is useful in
- aborting transfers.</entry>
- </row>
-
- <row>
- <entry>Bit 1</entry>
- <entry spanname="2to4">Receiver FIFO Reset. When a
- "1" is written to this bit, the contents of the FIFO
- are discarded. Any word currently being assembled
- in the shift register will be received
- intact.</entry>
- </row>
-
- <row>
- <entry>Bit 0</entry>
- <entry spanname="2to4">16550 FIFO Enable. When set,
- both the transmit and receive FIFOs are enabled.
- Any contents in the holding register, shift
- registers or FIFOs are lost when FIFOs are enabled
- or disabled.</entry>
- </row>
- </tbody>
- </entrytbl>
- </row>
-
- <row>
- <entry>+0x02</entry>
- <entry>read</entry>
- <entrytbl cols="6">
- <colspec colnum="1" colname="col1">
- <colspec colnum="2" colname="col2">
- <colspec colnum="3" colname="col3">
- <colspec colnum="4" colname="col4">
- <colspec colnum="5" colname="col5">
- <colspec colnum="6" colname="col6">
- <spanspec namest="col1" nameend="col6" spanname="1to6">
- <spanspec namest="col2" nameend="col6" spanname="2to6">
-
- <tbody>
- <row>
- <entry spanname="1to6">Interrupt Identification
- Register</entry>
- </row>
-
- <row>
- <entry>Bit 7</entry>
- <entry spanname="2to6">FIFOs enabled. On the
- 8250/16450 UART, this bit is zero.</entry>
- </row>
-
- <row>
- <entry>Bit 6</entry>
- <entry spanname="2to6">FIFOs enabled. On the
- 8250/16450 UART, this bit is zero.</entry>
- </row>
-
- <row>
- <entry>Bit 5</entry>
- <entry spanname="2to6">Reserved, always 0.</entry>
- </row>
-
- <row>
- <entry>Bit 4</entry>
- <entry spanname="2to6">Reserved, always 0.</entry>
- </row>
-
- <row>
- <entry>Bit 3</entry>
- <entry spanname="2to6">Interrupt ID Bit #2. On the
- 8250/16450 UART, this bit is zero.</entry>
- </row>
-
- <row>
- <entry>Bit 2</entry>
- <entry spanname="2to6">Interrupt ID Bit #1</entry>
- </row>
-
- <row>
- <entry>Bit 1</entry>
- <entry spanname="2to6">Interrupt ID Bit #0.These three
- bits combine to report the category of event that
- caused the interrupt that is in progress. These
- categories have priorities, so if multiple
- categories of events occur at the same time, the
- UART will report the more important events first and
- the host must resolve the events in the order they
- are reported. All events that caused the current
- interrupt must be resolved before any new interrupts
- will be generated. (This is a limitation of the PC
- architecture.)</entry>
- </row>
-
- <row>
- <entry colname="col2">2</entry>
- <entry colname="col3">1</entry>
- <entry colname="col4">0</entry>
- <entry colname="col5">Priority</entry>
- <entry colname="col6">Description</entry>
- </row>
-
- <row>
- <entry colname="col2">0</entry>
- <entry colname="col3">1</entry>
- <entry colname="col4">1</entry>
- <entry colname="col5">First</entry>
- <entry colname="col6">Received Error (OE, PE, BI, or
- FE)</entry>
- </row>
-
- <row>
- <entry colname="col2">0</entry>
- <entry colname="col3">1</entry>
- <entry colname="col4">0</entry>
- <entry colname="col5">Second</entry>
- <entry colname="col6">Received Data Available</entry>
- </row>
-
- <row>
- <entry colname="col2">1</entry>
- <entry colname="col3">1</entry>
- <entry colname="col4">0</entry>
- <entry colname="col5">Second</entry>
- <entry colname="col6">Trigger level identification
- (Stale data in receive buffer)</entry>
- </row>
-
- <row>
- <entry colname="col2">0</entry>
- <entry colname="col3">0</entry>
- <entry colname="col4">1</entry>
- <entry colname="col5">Third</entry>
- <entry colname="col6">Transmitter has room for more
- words (THRE)</entry>
- </row>
-
- <row>
- <entry colname="col2">0</entry>
- <entry colname="col3">0</entry>
- <entry colname="col4">0</entry>
- <entry colname="col5">Fourth</entry>
- <entry colname="col6">Modem Status Change (-CTS, -DSR,
- -RI, or -DCD)</entry>
- </row>
-
- <row>
- <entry>Bit 0</entry>
- <entry spanname="2to6">Interrupt Pending Bit. If this
- bit is set to "0", then at least one interrupt is
- pending.</entry>
- </row>
- </tbody>
- </entrytbl>
- </row>
-
- <row>
- <entry>+0x03</entry>
- <entry>write/read</entry>
- <entrytbl cols="5">
- <colspec colnum="1" colname="col1">
- <colspec colnum="2" colname="col2">
- <colspec colnum="3" colname="col3">
- <colspec colnum="4" colname="col4">
- <colspec colnum="5" colname="col5">
- <spanspec namest="col1" nameend="col5" spanname="1to5">
- <spanspec namest="col2" nameend="col5" spanname="2to5">
- <spanspec namest="col4" nameend="col5" spanname="4to5">
-
- <tbody>
- <row>
- <entry spanname="1to5">Line Control Register
- (LCR)</entry>
- </row>
-
- <row>
- <entry>Bit 7</entry>
- <entry spanname="2to5">Divisor Latch Access Bit
- (DLAB). When set, access to the data
- transmit/receive register (THR/RBR) and the
- Interrupt Enable Register (IER) is disabled. Any
- access to these ports is now redirected to the
- Divisor Latch Registers. Setting this bit, loading
- the Divisor Registers, and clearing DLAB should be
- done with interrupts disabled.</entry>
- </row>
-
- <row>
- <entry>Bit 6</entry>
- <entry spanname="2to5">Set Break. When set to "1",
- the transmitter begins to transmit continuous
- Spacing until this bit is set to "0". This
- overrides any bits of characters that are being
- transmitted.</entry>
- </row>
-
- <row>
- <entry>Bit 5</entry>
- <entry spanname="2to5">Stick Parity. When parity is
- enabled, setting this bit causes parity to always be
- "1" or "0", based on the value of Bit 4.</entry>
- </row>
-
- <row>
- <entry>Bit 4</entry>
- <entry spanname="2to5">Even Parity Select (EPS). When
- parity is enabled and Bit 5 is "0", setting this bit
- causes even parity to be transmitted and expected.
- Otherwise, odd parity is used.</entry>
- </row>
-
- <row>
- <entry>Bit 3</entry>
- <entry spanname="2to5">Parity Enable (PEN). When set
- to "1", a parity bit is inserted between the last
- bit of the data and the Stop Bit. The UART will
- also expect parity to be present in the received
- data.</entry>
- </row>
-
- <row>
- <entry>Bit 2</entry>
- <entry spanname="2to5">Number of Stop Bits (STB). If
- set to "1" and using 5-bit data words, 1.5 Stop Bits
- are transmitted and expected in each data word. For
- 6, 7 and 8-bit data words, 2 Stop Bits are
- transmitted and expected. When this bit is set to
- "0", one Stop Bit is used on each data word.</entry>
- </row>
-
- <row>
- <entry>Bit 1</entry>
- <entry spanname="2to5">Word Length Select Bit #1
- (WLSB1)</entry>
- </row>
-
- <row>
- <entry>Bit 0</entry>
- <entry spanname="2to5">Word Length Select Bit #0
- (WLSB0)</entry>
- </row>
-
- <row>
- <entry colname="col2" spanname="2to5">Together these
- bits specify the number of bits in each data
- word.</entry>
- </row>
-
- <row>
- <entry colname="col2">1</entry>
- <entry colname="col3">0</entry>
- <entry colname="col4" spanname="4to5">Word
- Length</entry>
- </row>
-
- <row>
- <entry colname="col2">0</entry>
- <entry colname="col3">0</entry>
- <entry colname="col4" spanname="4to5">5 Data
- Bits</entry>
- </row>
-
- <row>
- <entry colname="col2">0</entry>
- <entry colname="col3">1</entry>
- <entry colname="col4" spanname="4to5">6 Data
- Bits</entry>
- </row>
-
- <row>
- <entry colname="col2">1</entry>
- <entry colname="col3">0</entry>
- <entry colname="col4" spanname="4to5">7 Data
- Bits</entry>
- </row>
-
- <row>
- <entry colname="col2">1</entry>
- <entry colname="col3">1</entry>
- <entry colname="col4" spanname="4to5">8 Data
- Bits</entry>
- </row>
- </tbody>
- </entrytbl>
- </row>
-
- <row>
- <entry>+0x04</entry>
- <entry>write/read</entry>
- <entrytbl cols="2">
- <colspec colnum="1" colname="col1">
- <colspec colnum="2" colname="col2">
- <spanspec namest="col1" nameend="col2" spanname="1to2">
-
- <tbody>
- <row>
- <entry spanname="1to2">Modem Control Register
- (MCR)</entry>
- </row>
-
- <row>
- <entry>Bit 7</entry>
- <entry>Reserved, always 0.</entry>
- </row>
-
- <row>
- <entry>Bit 6</entry>
- <entry>Reserved, always 0.</entry>
- </row>
-
- <row>
- <entry>Bit 5</entry>
- <entry>Reserved, always 0.</entry>
- </row>
-
- <row>
- <entry>Bit 4</entry>
- <entry>Loop-Back Enable. When set to "1", the UART
- transmitter and receiver are internally connected
- together to allow diagnostic operations. In
- addition, the UART modem control outputs are
- connected to the UART modem control inputs. CTS is
- connected to RTS, DTR is connected to DSR, OUT1 is
- connected to RI, and OUT 2 is connected to
- DCD.</entry>
- </row>
-
- <row>
- <entry>Bit 3</entry>
- <entry>OUT 2. An auxiliary output that the host
- processor may set high or low. In the IBM PC serial
- adapter (and most clones), OUT 2 is used to
- tri-state (disable) the interrupt signal from the
- 8250/16450/16550 UART.</entry>
- </row>
-
- <row>
- <entry>Bit 2</entry>
- <entry>OUT 1. An auxiliary output that the host
- processor may set high or low. This output is not
- used on the IBM PC serial adapter.</entry>
- </row>
-
- <row>
- <entry>Bit 1</entry>
- <entry>Request to Send (RTS). When set to "1", the
- output of the UART -RTS line is Low
- (Active).</entry>
- </row>
-
- <row>
- <entry>Bit 0</entry>
- <entry>Data Terminal Ready (DTR). When set to "1",
- the output of the UART -DTR line is Low
- (Active).</entry>
- </row>
- </tbody>
- </entrytbl>
- </row>
-
- <row>
- <entry>+0x05</entry>
- <entry>write/read</entry>
- <entrytbl cols="2">
- <colspec colnum="1" colname="col1">
- <colspec colnum="2" colname="col2">
- <spanspec namest="col1" nameend="col2" spanname="1to2">
-
- <tbody>
- <row>
- <entry spanname="1to2">Line Status Register
- (LSR)</entry>
- </row>
-
- <row>
- <entry>Bit 7</entry>
- <entry>Error in Receiver FIFO. On the 8250/16450
- UART, this bit is zero. This bit is set to "1" when
- any of the bytes in the FIFO have one or more of the
- following error conditions: PE, FE, or BI.</entry>
- </row>
-
- <row>
- <entry>Bit 6</entry>
- <entry>Transmitter Empty (TEMT). When set to "1",
- there are no words remaining in the transmit FIFO
- or the transmit shift register. The transmitter is
- completely idle.</entry>
- </row>
-
- <row>
- <entry>Bit 5</entry>
- <entry>Transmitter Holding Register Empty (THRE).
- When set to "1", the FIFO (or holding register) now
- has room for at least one additional word to
- transmit. The transmitter may still be transmitting
- when this bit is set to "1".</entry>
- </row>
-
- <row>
- <entry>Bit 4</entry>
- <entry>Break Interrupt (BI). The receiver has
- detected a Break signal.</entry>
- </row>
-
- <row>
- <entry>Bit 3</entry>
- <entry>Framing Error (FE). A Start Bit was detected
- but the Stop Bit did not appear at the expected
- time. The received word is probably
- garbled.</entry>
- </row>
-
- <row>
- <entry>Bit 2</entry>
- <entry>Parity Error (PE). The parity bit was
- incorrect for the word received.</entry>
- </row>
-
- <row>
- <entry>Bit 1</entry>
- <entry>Overrun Error (OE). A new word was received
- and there was no room in the receive buffer. The
- newly-arrived word in the shift register is
- discarded. On 8250/16450 UARTs, the word in the
- holding register is discarded and the newly- arrived
- word is put in the holding register.</entry>
- </row>
-
- <row>
- <entry>Bit 0</entry>
- <entry>Data Ready (DR) One or more words are in the
- receive FIFO that the host may read. A word must be
- completely received and moved from the shift
- register into the FIFO (or holding register for
- 8250/16450 designs) before this bit is set.</entry>
- </row>
- </tbody>
- </entrytbl>
- </row>
-
- <row>
- <entry>+0x06</entry>
- <entry>write/read</entry>
- <entrytbl cols="2">
- <colspec colnum="1" colname="col1">
- <colspec colnum="2" colname="col2">
- <spanspec namest="col1" nameend="col2" spanname="1to2">
-
- <tbody>
- <row>
- <entry spanname="1to2">Modem Status Register
- (MSR)</entry>
- </row>
-
- <row>
- <entry>Bit 7</entry>
- <entry>Data Carrier Detect (DCD). Reflects the state
- of the DCD line on the UART.</entry>
- </row>
-
- <row>
- <entry>Bit 6</entry>
- <entry>Ring Indicator (RI). Reflects the state of the
- RI line on the UART.</entry>
- </row>
-
- <row>
- <entry>Bit 5</entry>
- <entry>Data Set Ready (DSR). Reflects the state of
- the DSR line on the UART.</entry>
- </row>
-
- <row>
- <entry>Bit 4</entry>
- <entry>Clear To Send (CTS). Reflects the state of the
- CTS line on the UART.</entry>
- </row>
-
- <row>
- <entry>Bit 3</entry>
- <entry>Delta Data Carrier Detect (DDCD). Set to "1"
- if the -DCD line has changed state one more more
- times since the last time the MSR was read by the
- host.</entry>
- </row>
-
- <row>
- <entry>Bit 2</entry>
- <entry>Trailing Edge Ring Indicator (TERI). Set to
- "1" if the -RI line has had a low to high transition
- since the last time the MSR was read by the
- host.</entry>
- </row>
-
- <row>
- <entry>Bit 1</entry>
- <entry>Delta Data Set Ready (DDSR). Set to "1" if the
- -DSR line has changed state one more more times
- since the last time the MSR was read by the
- host.</entry>
- </row>
-
- <row>
- <entry>Bit 0</entry>
- <entry>Delta Clear To Send (DCTS). Set to "1" if the
- -CTS line has changed state one more more times
- since the last time the MSR was read by the
- host.</entry>
- </row>
- </tbody>
- </entrytbl>
- </row>
-
- <row>
- <entry>+0x07</entry>
- <entry>write/read</entry>
- <entry>Scratch Register (SCR). This register performs no
- function in the UART. Any value can be written by the
- host to this location and read by the host later
- on.</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </sect4>
-
- <sect4>
- <title>Beyond the 16550A UART</title>
-
- <para>Although National Semiconductor has not offered any components
- compatible with the 16550 that provide additional features,
- various other vendors have. Some of these components are
- described below. It should be understood that to effectively
- utilize these improvements, drivers may have to be provided by the
- chip vendor since most of the popular operating systems do not
- support features beyond those provided by the 16550.</para>
-
- <variablelist>
- <varlistentry>
- <term>ST16650</term>
-
- <listitem>
- <para>By default this part is similar to the NS16550A, but an
- extended 32-byte send and receive buffer can be optionally
- enabled. Made by StarTech.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>TIL16660</term>
-
- <listitem>
- <para>By default this part behaves similar to the NS16550A,
- but an extended 64-byte send and receive buffer can be
- optionally enabled. Made by Texas Instruments.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>Hayes ESP</term>
-
- <listitem>
- <para>This proprietary plug-in card contains a 2048-byte send
- and receive buffer, and supports data rates to
- 230.4Kbit/sec. Made by Hayes.</para>
- </listitem>
- </varlistentry>
- </variablelist>
-
- <para>In addition to these <quote>dumb</quote> UARTs, many vendors
- produce intelligent serial communication boards. This type of
- design usually provides a microprocessor that interfaces with
- several UARTs, processes and buffers the data, and then alerts the
- main PC processor when necessary. Because the UARTs are not
- directly accessed by the PC processor in this type of
- communication system, it is not necessary for the vendor to use
- UARTs that are compatible with the 8250, 16450, or the 16550 UART.
- This leaves the designer free to components that may have better
- performance characteristics.</para>
- </sect4>
- </sect3>
-
- <sect3 id="sio">
- <title>Configuring the <devicename>sio</devicename> driver</title>
-
- <para>The <devicename>sio</devicename> driver provides support for
- NS8250-, NS16450-, NS16550 and NS16550A-based EIA RS-232C (CCITT
- V.24) communications interfaces. Several multiport cards are
- supported as well. See the &man.sio.4;
- manual page for detailed technical documentation.</para>
-
- <sect4>
- <title>Digi International (DigiBoard) PC/8</title>
-
- <para><emphasis>Contributed by &a.awebster;. 26 August
- 1995.</emphasis></para>
-
- <para>Here is a config snippet from a machine with a Digi
- International PC/8 with 16550. It has 8 modems connected to these
- 8 lines, and they work just great. Do not forget to add
- <literal>options COM_MULTIPORT</literal> or it will not work very
- well!</para>
-
- <programlisting>
-device sio4 at isa? port 0x100 tty flags 0xb05
-device sio5 at isa? port 0x108 tty flags 0xb05
-device sio6 at isa? port 0x110 tty flags 0xb05
-device sio7 at isa? port 0x118 tty flags 0xb05
-device sio8 at isa? port 0x120 tty flags 0xb05
-device sio9 at isa? port 0x128 tty flags 0xb05
-device sio10 at isa? port 0x130 tty flags 0xb05
-device sio11 at isa? port 0x138 tty flags 0xb05 irq 9 vector siointr</programlisting>
-
- <para>The trick in setting this up is that the MSB of the flags
- represent the last SIO port, in this case 11 so flags are
- 0xb05.</para>
- </sect4>
-
- <sect4>
- <title>Boca 16</title>
-
- <para><emphasis>Contributed by &a.whiteside;. 26 August
- 1995.</emphasis></para>
-
- <para>The procedures to make a Boca 16 port board with FreeBSD are
- pretty straightforward, but you will need a couple things to make
- it work:</para>
-
- <orderedlist>
- <listitem>
- <para>You either need the kernel sources installed so you can
- recompile the necessary options or you will need someone else
- to compile it for you. The 2.0.5 default kernel does
- <emphasis>not</emphasis> come with multiport support enabled
- and you will need to add a device entry for each port
- anyways.</para>
- </listitem>
-
- <listitem>
- <para>Two, you will need to know the interrupt and IO setting
- for your Boca Board so you can set these options properly in
- the kernel.</para>
- </listitem>
- </orderedlist>
-
- <para>One important note &mdash; the actual UART chips for the Boca
- 16 are in the connector box, not on the internal board itself. So
- if you have it unplugged, probes of those ports will fail. I have
- never tested booting with the box unplugged and plugging it back
- in, and I suggest you do not either.</para>
-
- <para>If you do not already have a custom kernel configuration file
- set up, refer to <link linkend="kernelconfig">Kernel
- Configuration</link> for general procedures. The following are
- the specifics for the Boca 16 board and assume you are using the
- kernel name MYKERNEL and editing with vi.</para>
-
- <procedure>
- <step>
- <para>Add the line
-
- <programlisting>
-options COM_MULTIPORT</programlisting>
-
- to the config file.</para>
- </step>
-
- <step>
- <para>Where the current <literal>device
- sio<replaceable>n</replaceable></literal> lines are, you
- will need to add 16 more devices. Only the last device
- includes the interrupt vector for the board. (See the
- &man.sio.4; manual page for detail as
- to why.) The following example is for a Boca Board with an
- interrupt of 3, and a base IO address 100h. The IO address
- for Each port is +8 hexadecimal from the previous port, thus
- the 100h, 108h, 110h... addresses.</para>
-
- <programlisting>
-device sio1 at isa? port 0x100 tty flags 0x1005
-device sio2 at isa? port 0x108 tty flags 0x1005
-device sio3 at isa? port 0x110 tty flags 0x1005
-device sio4 at isa? port 0x118 tty flags 0x1005
-&hellip;
-device sio15 at isa? port 0x170 tty flags 0x1005
-device sio16 at isa? port 0x178 tty flags 0x1005 irq 3 vector siointr</programlisting>
-
- <para>The flags entry <emphasis>must</emphasis> be changed from
- this example unless you are using the exact same sio
- assignments. Flags are set according to
- 0x<replaceable>M</replaceable><replaceable>YY</replaceable>
- where <replaceable>M</replaceable> indicates the minor number
- of the master port (the last port on a Boca 16) and
- <replaceable>YY</replaceable> indicates if FIFO is enabled or
- disabled(enabled), IRQ sharing is used(yes) and if there is an
- AST/4 compatible IRQ control register(no). In this example,
- <programlisting> flags 0x1005</programlisting> indicates that
- the master port is sio16. If I added another board and
- assigned sio17 through sio28, the flags for all 16 ports on
- <emphasis>that</emphasis> board would be 0x1C05, where 1C
- indicates the minor number of the master port. Do not change
- the 05 setting.</para>
- </step>
-
- <step>
- <para>Save and complete the kernel configuration, recompile,
- install and reboot. Presuming you have successfully installed
- the recompiled kernel and have it set to the correct address
- and IRQ, your boot message should indicate the successful
- probe of the Boca ports as follows: (obviously the sio
- numbers, IO and IRQ could be different)</para>
-
- <screen>sio1 at 0x100-0x107 flags 0x1005 on isa
-sio1: type 16550A (multiport)
-sio2 at 0x108-0x10f flags 0x1005 on isa
-sio2: type 16550A (multiport)
-sio3 at 0x110-0x117 flags 0x1005 on isa
-sio3: type 16550A (multiport)
-sio4 at 0x118-0x11f flags 0x1005 on isa
-sio4: type 16550A (multiport)
-sio5 at 0x120-0x127 flags 0x1005 on isa
-sio5: type 16550A (multiport)
-sio6 at 0x128-0x12f flags 0x1005 on isa
-sio6: type 16550A (multiport)
-sio7 at 0x130-0x137 flags 0x1005 on isa
-sio7: type 16550A (multiport)
-sio8 at 0x138-0x13f flags 0x1005 on isa
-sio8: type 16550A (multiport)
-sio9 at 0x140-0x147 flags 0x1005 on isa
-sio9: type 16550A (multiport)
-sio10 at 0x148-0x14f flags 0x1005 on isa
-sio10: type 16550A (multiport)
-sio11 at 0x150-0x157 flags 0x1005 on isa
-sio11: type 16550A (multiport)
-sio12 at 0x158-0x15f flags 0x1005 on isa
-sio12: type 16550A (multiport)
-sio13 at 0x160-0x167 flags 0x1005 on isa
-sio13: type 16550A (multiport)
-sio14 at 0x168-0x16f flags 0x1005 on isa
-sio14: type 16550A (multiport)
-sio15 at 0x170-0x177 flags 0x1005 on isa
-sio15: type 16550A (multiport)
-sio16 at 0x178-0x17f irq 3 flags 0x1005 on isa
-sio16: type 16550A (multiport master)</screen>
-
- <para>If the messages go by too fast to see,
-
- <screen>&prompt.root; <userinput>dmesg | more</userinput></screen>
- will show you the boot messages.</para>
- </step>
-
- <step>
- <para>Next, appropriate entries in <filename>/dev</filename> for
- the devices must be made using the
- <filename>/dev/MAKEDEV</filename> script. After becoming
- root:</para>
-
- <screen>&prompt.root; <userinput>cd /dev</userinput>
-&prompt.root; <userinput>./MAKEDEV tty1</userinput>
-&prompt.root; <userinput>./MAKEDEV cua1</userinput>
-<emphasis>(everything in between)</emphasis>
-&prompt.root; <userinput>./MAKEDEV ttyg</userinput>
-&prompt.root; <userinput>./MAKEDEV cuag</userinput></screen>
-
- <para>If you do not want or need call-out devices for some
- reason, you can dispense with making the
- <filename>cua*</filename> devices.</para>
- </step>
-
- <step>
- <para>If you want a quick and sloppy way to make sure the
- devices are working, you can simply plug a modem into each
- port and (as root)
-
- <screen>&prompt.root; <userinput>echo at &gt; ttyd*</userinput></screen>
- for each device you have made. You
- <emphasis>should</emphasis> see the RX lights flash for each
- working port.</para>
- </step>
- </procedure>
- </sect4>
-
- <sect4>
- <title>Support for Cheap Multi-UART Cards</title>
-
- <para><emphasis>Contributed by Helge Oldach
- <email>hmo@sep.hamburg.com</email>, September
- 1999</emphasis></para>
-
- <para>Ever wondered about FreeBSD support for your 20$ multi-I/O
- card with two (or more) COM ports, sharing IRQs? Here's
- how:</para>
-
- <para>Usually the only option to support these kind of boards is to
- use a distinct IRQ for each port. For example, if your CPU board
- has an on-board <devicename>COM1</devicename> port (aka
- <devicename>sio0</devicename>&ndash;I/O address 0x3F8 and IRQ 4)
- and you have an extension board with two UARTs, you will commonly
- need to configure them as <devicename>COM2</devicename> (aka
- <devicename>sio1</devicename>&ndash;I/O address 0x2F8 and IRQ 3),
- and the third port (aka <devicename>sio2</devicename>) as I/O
- 0x3E8 and IRQ 5. Obviously this is a waste of IRQ resources, as
- it should be basically possible to run both extension board ports
- using a single IRQ with the <literal>COM_MULTIPORT</literal>
- configuration described in the previous sections.</para>
-
- <para>Such cheap I/O boards commonly have a 4 by 3 jumper matrix for
- the COM ports, similar to the following:</para>
-
-<programlisting> o o o *
-Port A |
- o * o *
-Port B |
- o * o o
-IRQ 2 3 4 5</programlisting>
-
- <para>Shown here is port A wired for IRQ 5 and port B wired for IRQ
- 3. The IRQ columns on your specific board may vary&mdash;other
- boards may supply jumpers for IRQs 3, 4, 5, and 7 instead.</para>
-
- <para>One could conclude that wiring both ports for IRQ 3 using a
- handcrafted wire-made jumper covering all three connection points
- in the IRQ 3 column would solve the issue, but no. You cannot
- duplicate IRQ 3 because the output drivers of each UART are wired
- in a <quote>totem pole</quote> fashion, so if one of the UARTs
- drives IRQ 3, the output signal will not be what you would expect.
- Depending on the implementation of the extension board or your
- motherboard, the IRQ 3 line will continuously stay up, or always
- stay low.</para>
-
- <para>You need to decouple the IRQ drivers for the two UARTs, so
- that the IRQ line of the board only goes up if (and only if) one
- of the UARTs asserts a IRQ, and stays low otherwise. The solution
- was proposed by Joerg Wunsch
- <email>j@ida.interface-business.de</email>: To solder up a
- wired-or consisting of two diodes (Germanium or Schottky-types
- strongly preferred) and a 1 kOhm resistor. Here is the schematic,
- starting from the 4 by 3 jumper field above:</para>
-
-<programlisting> Diode
- +---------->|-------+
- / |
- o * o o | 1 kOhm
-Port A +----|######|-------+
- o * o o | |
-Port B `-------------------+ ==+==
- o * o o | Ground
- \ |
- +--------->|-------+
-IRQ 2 3 4 5 Diode</programlisting>
-
- <para>The cathodes of the diodes are connected to a common point,
- together with a 1 kOhm pull-down resistor. It is essential to
- connect the resistor to ground to avoid floating of the IRQ line
- on the bus.</para>
-
- <para>Now we are ready to configure a kernel. Staying with this
- example, we would configure:</para>
-
- <programlisting># standard on-board COM1 port
-device sio0 at isa? port "IO_COM1" tty flags 0x10
-# patched-up multi-I/O extension board
-options COM_MULTIPORT
-device sio1 at isa? port "IO_COM2" tty flags 0x205
-device sio2 at isa? port "IO_COM3" tty flags 0x205 irq 3</programlisting>
-
- <para>Note that the <literal>flags</literal> setting for
- <devicename>sio1</devicename> and <devicename>sio2</devicename> is
- truly essential; refer to
- &man.sio.4; for details. (Generally, the <literal>2</literal> in
- the "flags" attribute refers to <devicename>sio</devicename>2
- which holds the IRQ, and you surely want a <literal>5</literal>
- low nibble.) With kernel verbose mode turned on this should yield
- something similar to this:</para>
-
- <screen>sio0: irq maps: 0x1 0x11 0x1 0x1
-sio0 at 0x3f8-0x3ff irq 4 flags 0x10 on isa
-sio0: type 16550A
-sio1: irq maps: 0x1 0x9 0x1 0x1
-sio1 at 0x2f8-0x2ff flags 0x205 on isa
-sio1: type 16550A (multiport)
-sio2: irq maps: 0x1 0x9 0x1 0x1
-sio2 at 0x3e8-0x3ef irq 3 flags 0x205 on isa
-sio2: type 16550A (multiport master)</screen>
-
- <para>Though <filename>/sys/i386/isa/sio.c</filename> is somewhat
- cryptic with its use of the <quote>irq maps</quote> array above,
- the basic idea is that you observe <literal>0x1</literal> in the
- first, third, and fourth place. This means that the corresponding
- IRQ was set upon output and cleared after, which is just what we
- would expect. If your kernel does not display this behavior, most
- likely there is something wrong with your wiring.</para>
- </sect4>
- </sect3>
-
- <sect3 id="cy">
- <title>Configuring the <devicename>cy</devicename> driver</title>
-
- <para><emphasis>Contributed by Alex Nash. 6 June
- 1996.</emphasis></para>
-
- <para>The Cyclades multiport cards are based on the
- <devicename>cy</devicename> driver instead of the usual
- <devicename>sio</devicename> driver used by other multiport cards.
- Configuration is a simple matter of:</para>
-
- <procedure>
- <step>
- <para>Add the <devicename>cy</devicename> device to your <link
- linkend="kernelconfig-config">kernel configuration</link>
- (note that your irq and iomem settings may differ).</para>
-
- <programlisting>
-device cy0 at isa? tty irq 10 iomem 0xd4000 iosiz 0x2000 vector cyintr</programlisting>
- </step>
-
- <step>
- <para><link linkend="kernelconfig-building">Rebuild and
- install</link> the new kernel.</para>
- </step>
-
- <step>
- <para>Make the <link linkend="kernelconfig-nodes">device
- nodes</link> by typing (the following example assumes an
- 8-port board):</para>
-
- <screen>&prompt.root; <userinput>cd /dev</userinput>
-&prompt.root; <userinput>for i in 0 1 2 3 4 5 6 7;do ./MAKEDEV cuac$i ttyc$i;done</userinput></screen>
- </step>
-
- <step>
- <para>If appropriate, add <link linkend="dialup">dialup</link>
- entries to <link linkend="dialup-ttys">/etc/ttys</link> by
- duplicating serial device (<literal>ttyd</literal>) entries and
- using <literal>ttyc</literal> in place of
- <literal>ttyd</literal>. For example:</para>
-
- <programlisting>
-ttyc0 "/usr/libexec/getty std.38400" unknown on insecure
-ttyc1 "/usr/libexec/getty std.38400" unknown on insecure
-ttyc2 "/usr/libexec/getty std.38400" unknown on insecure
-&hellip;
-ttyc7 "/usr/libexec/getty std.38400" unknown on insecure</programlisting>
- </step>
-
- <step>
- <para>Reboot with the new kernel.</para>
- </step>
- </procedure>
- </sect3>
-
- <sect3>
- <title>Configuring the <devicename>si</devicename> driver</title>
-
- <para><emphasis>Contributed by &a.nsayer;. 25 March
- 1998.</emphasis></para>
-
- <para>The Specialix SI/XIO and SX multiport cards use the
- <devicename>si</devicename> driver. A single machine can
- have up to 4 host cards. The following host cards
- are supported:</para>
-
- <itemizedlist>
- <listitem><para>ISA SI/XIO host card (2 versions)</para></listitem>
- <listitem><para>EISA SI/XIO host card</para></listitem>
- <listitem><para>PCI SI/XIO host card</para></listitem>
- <listitem><para>ISA SX host card</para></listitem>
- <listitem><para>PCI SX host card</para></listitem>
- </itemizedlist>
-
- <para>Although the SX and SI/XIO host cards look markedly different,
- their functionality are basically the same. The host cards do not
- use I/O locations, but instead require a 32K chunk of memory. The
- factory configuration for ISA cards places this at
- <literal>0xd0000-0xd7fff</literal>.
- They also require an IRQ. PCI cards will, of course, auto-configure
- themselves.</para>
-
- <para>You can attach up to 4 external modules to each host card. The
- external modules contain either 4 or 8 serial ports. They come in
- the following varieties:</para>
-
- <itemizedlist>
- <listitem><para>SI 4 or 8 port modules. Up to 57600 bps on each port
- supported.</para></listitem>
-
- <listitem><para>XIO 8 port modules. Up to 115200 bps on each port
- supported. One type of XIO module has 7 serial and 1 parallel
- port.</para></listitem>
-
- <listitem><para>SXDC 8 port modules. Up to 921600 bps on each port
- supported. Like XIO, a module is available with one parallel
- port as well.</para></listitem>
- </itemizedlist>
-
- <para>To configure an ISA host card, add the following line to your
- <link linkend="kernelconfig-config">kernel configuration
- file</link>, changing the numbers as appropriate:</para>
-
- <programlisting>
-device si0 at isa? tty iomem 0xd0000 irq 11</programlisting>
-
- <para>Valid IRQ numbers are 9, 10, 11, 12 and 15 for SX ISA host cards
- and 11, 12 and 15 for SI/XIO ISA host cards.</para>
-
- <para>To configure an EISA or PCI host card, use this line:</para>
-
- <programlisting>
-device si0</programlisting>
-
- <para>After adding the configuration entry, <link
- linkend="kernelconfig-building"> rebuild and install</link> your
- new kernel.</para>
-
- <para>After rebooting with the new kernel, you need to make the <link
- linkend="kernelconfig-nodes"> device nodes</link> in /dev. The
- <filename>MAKEDEV</filename> script will take care of this for you.
- Count how many total ports you have and type:</para>
-
- <screen>&prompt.root; <userinput>cd /dev</userinput>
-&prompt.root; <userinput>./MAKEDEV ttyA<replaceable>nn</replaceable> cuaA<replaceable>nn</replaceable></userinput></screen>
-
- <para>(where <replaceable>nn</replaceable> is the number of
- ports)</para>
-
- <para>If you want login prompts to appear on these ports, you will
- need to add lines like this to <link
- linkend="dialup"><filename>/etc/ttys</filename></link>:</para>
-
- <programlisting>
-ttyA01 "/usr/libexec/getty std.9600" vt100 on insecure
- </programlisting>
-
- <para>Change the terminal type as appropriate. For modems,
- <userinput>dialup</userinput> or <userinput>unknown</userinput> is
- fine.</para>
- </sect3>
- </sect2>
-
- <sect2>
- <title>* Parallel ports</title>
-
- <para></para>
- </sect2>
-
- <sect2>
- <title>* Modems</title>
-
- <para></para>
- </sect2>
-
- <sect2>
- <title>* Network cards</title>
-
- <para></para>
- </sect2>
-
- <sect2>
- <title>* Keyboards</title>
-
- <para></para>
- </sect2>
-
- <sect2>
- <title>Mice</title>
-
- <para><emphasis>Contributed by Joel Sutton
- <email>jsutton@bbcon.com.au</email> January 2000</emphasis></para>
-
- <para>FreeBSD supports a variety of different mice via the PS/2, serial
- and USB ports. Most users choose to use the mouse daemon to handle
- their mouse because it allows interaction in both X and on the system
- console. For more information on the mouse daemon refer to
- &man.moused.8;. The examples throughout this section assume that
- the mouse daemon is being used.</para>
-
- <note>
- <para>This section contains the names of specific products that the
- author has confirmed will work with FreeBSD. Other similar devices
- not listed may also be supported.</para>
- </note>
-
- <sect3>
- <title>PS/2</title>
-
- <sect4>
- <title>System Configuration</title>
-
- <para>To ensure that your PS/2 mouse functions correctly with the
- mouse daemon you will need to include the following text in
- <filename>/etc/rc.conf</filename></para>
-
- <programlisting>moused_enable="YES"
-moused_type="ps/2"
-moused_port="/dev/psm0"</programlisting>
- </sect4>
-
- <sect4>
- <title>Known Compatible Devices</title>
-
- <itemizedlist>
- <listitem>
- <para>Logitech First Mouse - Three Button</para>
- </listitem>
-
- <listitem>
- <para>Microsoft Serial - PS/2 Compatible Mouse</para>
- </listitem>
- </itemizedlist>
- </sect4>
- </sect3>
-
- <sect3>
- <title>Serial</title>
-
- <sect4>
- <title>System Configuration</title>
-
- <para>To ensure that your serial mouse functions correctly with the
- mouse daemon you will need to include the following text in
- <filename>/etc/rc.conf</filename>. This example assumes that the
- mouse is connected to <devicename>COM1:</devicename> and can be
- automatically recognized by the mouse daemon.</para>
-
- <programlisting>moused_enable="YES"
-moused_type="auto"
-moused_port="/dev/cuaa0"</programlisting>
-
- <para>See the &man.moused.8; manual page for a detailed description
- of how to configure the mouse daemon to work with specific types
- of serial mice.</para>
- </sect4>
-
- <sect4>
- <title>Known Compatible Devices</title>
-
- <itemizedlist>
- <listitem>
- <para>Generic Microsoft Compatible Mice</para>
- </listitem>
-
- <listitem>
- <para>Logitech First Mouse - Three Button</para>
- </listitem>
-
- <listitem>
- <para>Microsoft Serial - PS/2 Compatible Mouse</para>
- </listitem>
- </itemizedlist>
- </sect4>
- </sect3>
-
- <sect3>
- <title>USB</title>
-
- <sect4>
- <title>System Configuration</title>
-
- <para>The USB device drivers are a relatively new addition to
- FreeBSD and have not yet been included in the GENERIC kernel. The
- following procedure is an example of how to setup the relevant
- drivers on a typical system.</para>
-
- <procedure>
- <step>
- <para>Add the <devicename>ums</devicename> device to the usb
- section of your <link linkend="kernelconfig-config">kernel
- configuration</link>. For example:
- </para>
-
- <programlisting>controller usb0 controller uhci0 device ums0</programlisting>
- </step>
-
- <step>
- <para><link linkend="kernelconfig-building">Rebuild and
- install</link> the new kernel.</para>
- </step>
-
- <step>
- <para>Make the <link linkend="kernelconfig-nodes">device
- node</link> by typing:</para>
-
- <screen>&prompt.root; <userinput>cd /dev</userinput>
-&prompt.root; <userinput>sh MAKEDEV ums0</userinput></screen>
- </step>
-
- <step>
- <para>Include the following text in
- <filename>/etc/rc.conf</filename> to ensure correct operation
- of the mouse daemon:</para>
-
- <programlisting>moused_enable="YES"
-moused_type="auto"
-moused_port="/dev/ums0"</programlisting>
- </step>
-
- <step>
- <para>Reboot the system.</para>
- <screen>&prompt.root; <userinput>shutdown -r now</userinput></screen>
- </step>
- </procedure>
- </sect4>
-
- <sect4>
- <title>Known Compatible Devices</title>
-
- <itemizedlist>
- <listitem>
- <para>Logitech TrackMan - Marble Wheel</para>
- </listitem>
- </itemizedlist>
- </sect4>
- </sect3>
- </sect2>
-
-<![ %not.published; [
-
- <sect2>
- <title>* Other</title>
-
- <para></para>
- </sect2>
- </sect1>
-
-]]>
-
- <sect1 id="hw-storage">
- <title>Storage Devices</title>
-
- <sect2 id="esdi">
- <title>Using ESDI hard disks</title>
-
- <para><emphasis>Copyright &copy; 1995, &a.wilko;. 24
- September 1995.</emphasis></para>
-
- <para>ESDI is an acronym that means Enhanced Small Device Interface. It
- is loosely based on the good old ST506/412 interface originally
- devised by Seagate Technology, the makers of the first affordable
- 5.25" winchester disk.</para>
-
- <para>The acronym says Enhanced, and rightly so. In the first place the
- speed of the interface is higher, 10 or 15 Mbits/second instead of the
- 5 Mbits/second of ST412 interfaced drives. Secondly some higher level
- commands are added, making the ESDI interface somewhat 'smarter' to
- the operating system driver writers. It is by no means as smart as
- SCSI by the way. ESDI is standardized by ANSI.</para>
-
- <para>Capacities of the drives are boosted by putting more sectors on
- each track. Typical is 35 sectors per track, high capacity drives I
- have seen were up to 54 sectors/track.</para>
-
- <para>Although ESDI has been largely obsoleted by IDE and SCSI
- interfaces, the availability of free or cheap surplus drives makes
- them ideal for low (or now) budget systems.</para>
-
- <sect3>
- <title>Concepts of ESDI</title>
-
- <sect4>
- <title>Physical connections</title>
-
- <para>The ESDI interface uses two cables connected to each drive.
- One cable is a 34 pin flat cable edge connector that carries the
- command and status signals from the controller to the drive and
- vice-versa. The command cable is daisy chained between all the
- drives. So, it forms a bus onto which all drives are
- connected.</para>
-
- <para>The second cable is a 20 pin flat cable edge connector that
- carries the data to and from the drive. This cable is radially
- connected, so each drive has its own direct connection to the
- controller.</para>
-
- <para>To the best of my knowledge PC ESDI controllers are limited to
- using a maximum of 2 drives per controller. This is compatibility
- feature(?) left over from the WD1003 standard that reserves only a
- single bit for device addressing.</para>
- </sect4>
-
- <sect4>
- <title>Device addressing</title>
-
- <para>On each command cable a maximum of 7 devices and 1 controller
- can be present. To enable the controller to uniquely identify
- which drive it addresses, each ESDI device is equipped with
- jumpers or switches to select the devices address.</para>
-
- <para>On PC type controllers the first drive is set to address 0,
- the second disk to address 1. <emphasis>Always make
- sure</emphasis> you set each disk to an unique address! So, on a
- PC with its two drives/controller maximum the first drive is drive
- 0, the second is drive 1.</para>
- </sect4>
-
- <sect4>
- <title>Termination</title>
-
- <para>The daisy chained command cable (the 34 pin cable remember?)
- needs to be terminated at the last drive on the chain. For this
- purpose ESDI drives come with a termination resistor network that
- can be removed or disabled by a jumper when it is not used.</para>
-
- <para>So, one and <emphasis>only</emphasis> one drive, the one at
- the farthest end of the command cable has its terminator
- installed/enabled. The controller automatically terminates the
- other end of the cable. Please note that this implies that the
- controller must be at one end of the cable and
- <emphasis>not</emphasis> in the middle.</para>
- </sect4>
- </sect3>
-
- <sect3>
- <title>Using ESDI disks with FreeBSD</title>
-
- <para>Why is ESDI such a pain to get working in the first
- place?</para>
-
- <para>People who tried ESDI disks with FreeBSD are known to have
- developed a profound sense of frustration. A combination of factors
- works against you to produce effects that are hard to understand
- when you have never seen them before.</para>
-
- <para>This has also led to the popular legend ESDI and FreeBSD is a
- plain NO-GO. The following sections try to list all the pitfalls
- and solutions.</para>
-
- <sect4>
- <title>ESDI speed variants</title>
-
- <para>As briefly mentioned before, ESDI comes in two speed flavors.
- The older drives and controllers use a 10 Mbits/second data
- transfer rate. Newer stuff uses 15 Mbits/second.</para>
-
- <para>It is not hard to imagine that 15 Mbits/second drive cause
- problems on controllers laid out for 10 Mbits/second. As always,
- consult your controller <emphasis>and</emphasis> drive
- documentation to see if things match.</para>
- </sect4>
-
- <sect4>
- <title>Stay on track</title>
-
- <para>Mainstream ESDI drives use 34 to 36 sectors per track. Most
- (older) controllers cannot handle more than this number of
- sectors. Newer, higher capacity, drives use higher numbers of
- sectors per track. For instance, I own a 670 MB drive that has 54
- sectors per track.</para>
-
- <para>In my case, the controller could not handle this number of
- sectors. It proved to work well except that it only used 35
- sectors on each track. This meant losing a lot of disk
- space.</para>
-
- <para>Once again, check the documentation of your hardware for more
- info. Going out-of-spec like in the example might or might not
- work. Give it a try or get another more capable
- controller.</para>
- </sect4>
-
- <sect4>
- <title>Hard or soft sectoring</title>
-
- <para>Most ESDI drives allow hard or soft sectoring to be selected
- using a jumper. Hard sectoring means that the drive will produce
- a sector pulse on the start of each new sector. The controller
- uses this pulse to tell when it should start to write or
- read.</para>
-
- <para>Hard sectoring allows a selection of sector size (normally
- 256, 512 or 1024 bytes per formatted sector). FreeBSD uses 512
- byte sectors. The number of sectors per track also varies while
- still using the same number of bytes per formatted sector. The
- number of <emphasis>unformatted</emphasis> bytes per sector
- varies, dependent on your controller it needs more or less
- overhead bytes to work correctly. Pushing more sectors on a
- track of course gives you more usable space, but might give
- problems if your controller needs more bytes than the drive
- offers.</para>
-
- <para>In case of soft sectoring, the controller itself determines
- where to start/stop reading or writing. For ESDI hard sectoring
- is the default (at least on everything I came across). I never
- felt the urge to try soft sectoring.</para>
-
- <para>In general, experiment with sector settings before you install
- FreeBSD because you need to re-run the low-level format after each
- change.</para>
- </sect4>
-
- <sect4>
- <title>Low level formatting</title>
-
- <para>ESDI drives need to be low level formatted before they are
- usable. A reformat is needed whenever you figgle with the number
- of sectors/track jumpers or the physical orientation of the drive
- (horizontal, vertical). So, first think, then format. The format
- time must not be underestimated, for big disks it can take
- hours.</para>
-
- <para>After a low level format, a surface scan is done to find and
- flag bad sectors. Most disks have a manufacturer bad block list
- listed on a piece of paper or adhesive sticker. In addition, on
- most disks the list is also written onto the disk. Please use the
- manufacturer's list. It is much easier to remap a defect now than
- after FreeBSD is installed.</para>
-
- <para>Stay away from low-level formatters that mark all sectors of a
- track as bad as soon as they find one bad sector. Not only does
- this waste space, it also and more importantly causes you grief
- with bad144 (see the section on bad144).</para>
- </sect4>
-
- <sect4>
- <title>Translations</title>
-
- <para>Translations, although not exclusively a ESDI-only problem,
- might give you real trouble. Translations come in multiple
- flavors. Most of them have in common that they attempt to work
- around the limitations posed upon disk geometries by the original
- IBM PC/AT design (thanks IBM!).</para>
-
- <para>First of all there is the (in)famous 1024 cylinder limit. For
- a system to be able to boot, the stuff (whatever operating system)
- must be in the first 1024 cylinders of a disk. Only 10 bits are
- available to encode the cylinder number. For the number of
- sectors the limit is 64 (0-63). When you combine the 1024
- cylinder limit with the 16 head limit (also a design feature) you
- max out at fairly limited disk sizes.</para>
-
- <para>To work around this problem, the manufacturers of ESDI PC
- controllers added a BIOS prom extension on their boards. This
- BIOS extension handles disk I/O for booting (and for some
- operating systems <emphasis>all</emphasis> disk I/O) by using
- translation. For instance, a big drive might be presented to the
- system as having 32 heads and 64 sectors/track. The result is
- that the number of cylinders is reduced to something below 1024
- and is therefore usable by the system without problems. It is
- noteworthy to know that FreeBSD does not use the BIOS after its
- kernel has started. More on this later.</para>
-
- <para>A second reason for translations is the fact that most older
- system BIOSes could only handle drives with 17 sectors per track
- (the old ST412 standard). Newer system BIOSes usually have a
- user-defined drive type (in most cases this is drive type
- 47).</para>
-
- <warning>
- <para>Whatever you do to translations after reading this document,
- keep in mind that if you have multiple operating systems on the
- same disk, all must use the same translation</para>
- </warning>
-
- <para>While on the subject of translations, I have seen one
- controller type (but there are probably more like this) offer the
- option to logically split a drive in multiple partitions as a BIOS
- option. I had select 1 drive == 1 partition because this
- controller wrote this info onto the disk. On power-up it read the
- info and presented itself to the system based on the info from the
- disk.</para>
- </sect4>
-
- <sect4>
- <title>Spare sectoring</title>
-
- <para>Most ESDI controllers offer the possibility to remap bad
- sectors. During/after the low-level format of the disk bad
- sectors are marked as such, and a replacement sector is put in
- place (logically of course) of the bad one.</para>
-
- <para>In most cases the remapping is done by using N-1 sectors on
- each track for actual data storage, and sector N itself is the
- spare sector. N is the total number of sectors physically
- available on the track. The idea behind this is that the
- operating system sees a 'perfect' disk without bad sectors. In
- the case of FreeBSD this concept is not usable.</para>
-
- <para>The problem is that the translation from
- <emphasis>bad</emphasis> to <emphasis>good</emphasis> is performed
- by the BIOS of the ESDI controller. FreeBSD, being a true 32 bit
- operating system, does not use the BIOS after it has been booted.
- Instead, it has device drivers that talk directly to the
- hardware.</para>
-
- <para><emphasis>So: don't use spare sectoring, bad block remapping
- or whatever it may be called by the controller manufacturer when
- you want to use the disk for FreeBSD.</emphasis></para>
- </sect4>
-
- <sect4>
- <title>Bad block handling</title>
-
- <para>The preceding section leaves us with a problem. The
- controller's bad block handling is not usable and still FreeBSD's
- filesystems assume perfect media without any flaws. To solve this
- problem, FreeBSD use the <command>bad144</command> tool. Bad144
- (named after a Digital Equipment standard for bad block handling)
- scans a FreeBSD slice for bad blocks. Having found these bad
- blocks, it writes a table with the offending block numbers to the
- end of the FreeBSD slice.</para>
-
- <para>When the disk is in operation, the disk accesses are checked
- against the table read from the disk. Whenever a block number is
- requested that is in the <command>bad144</command> list, a
- replacement block (also from the end of the FreeBSD slice) is
- used. In this way, the <command>bad144</command> replacement
- scheme presents 'perfect' media to the FreeBSD filesystems.</para>
-
- <para>There are a number of potential pitfalls associated with the
- use of <command>bad144</command>. First of all, the slice cannot
- have more than 126 bad sectors. If your drive has a high number
- of bad sectors, you might need to divide it into multiple FreeBSD
- slices each containing less than 126 bad sectors. Stay away from
- low-level format programs that mark <emphasis>every</emphasis>
- sector of a track as bad when they find a flaw on the track. As
- you can imagine, the 126 limit is quickly reached when the
- low-level format is done this way.</para>
-
- <para>Second, if the slice contains the root filesystem, the slice
- should be within the 1024 cylinder BIOS limit. During the boot
- process the bad144 list is read using the BIOS and this only
- succeeds when the list is within the 1024 cylinder limit.</para>
-
- <note>
- <para>The restriction is not that only the root
- <emphasis>filesystem</emphasis> must be within the 1024 cylinder
- limit, but rather the entire <emphasis>slice</emphasis> that
- contains the root filesystem.</para>
- </note>
- </sect4>
-
- <sect4>
- <title>Kernel configuration</title>
-
- <para>ESDI disks are handled by the same <literal>wd</literal>driver
- as IDE and ST412 MFM disks. The <literal>wd</literal> driver
- should work for all WD1003 compatible interfaces.</para>
-
- <para>Most hardware is jumperable for one of two different I/O
- address ranges and IRQ lines. This allows you to have two wd
- type controllers in one system.</para>
-
- <para>When your hardware allows non-standard strappings, you can use
- these with FreeBSD as long as you enter the correct info into the
- kernel config file. An example from the kernel config file (they
- live in <filename>/sys/i386/conf</filename> BTW).</para>
-
- <programlisting>
-# First WD compatible controller
-controller wdc0 at isa? port "IO_WD1" bio irq 14 vector wdintr
-disk wd0 at wdc0 drive 0
-disk wd1 at wdc0 drive 1
-# Second WD compatible controller
-controller wdc1 at isa? port "IO_WD2" bio irq 15 vector wdintr
-disk wd2 at wdc1 drive 0
-disk wd3 at wdc1 drive 1</programlisting>
- </sect4>
- </sect3>
-
- <sect3>
- <title>Particulars on ESDI hardware</title>
-
- <sect4>
- <title>Adaptec 2320 controllers</title>
-
- <para>I successfully installed FreeBSD onto a ESDI disk controlled
- by a ACB-2320. No other operating system was present on the
- disk.</para>
-
- <para>To do so I low level formatted the disk using
- <command>NEFMT.EXE</command> (<command>ftp</command>able from
- <hostid role="fqdn">www.adaptec.com</hostid>) and answered NO to
- the question whether the disk should be formatted with a spare
- sector on each track. The BIOS on the ACD-2320 was disabled. I
- used the <literal>free configurable</literal> option in the system
- BIOS to allow the BIOS to boot it.</para>
-
- <para>Before using <command>NEFMT.EXE</command> I tried to format
- the disk using the ACB-2320 BIOS built-in formatter. This proved
- to be a show stopper, because it did not give me an option to
- disable spare sectoring. With spare sectoring enabled the FreeBSD
- installation process broke down on the <command>bad144</command>
- run.</para>
-
- <para>Please check carefully which
- ACB-232<replaceable>xy</replaceable> variant you have. The
- <replaceable>x</replaceable> is either <literal>0</literal> or
- <literal>2</literal>, indicating a controller without or with a
- floppy controller on board.</para>
-
- <para>The <literal>y</literal> is more interesting. It can either
- be a blank, a <literal>A-8</literal> or a <literal>D</literal>. A
- blank indicates a plain 10 Mbits/second controller. An
- <literal>A-8</literal> indicates a 15 Mbits/second controller
- capable of handling 52 sectors/track. A <literal>D</literal>
- means a 15 Mbits/second controller that can also handle drives
- with &gt; 36 sectors/track (also 52 ?).</para>
-
- <para>All variations should be capable of using 1:1 interleaving.
- Use 1:1, FreeBSD is fast enough to handle it.</para>
- </sect4>
-
- <sect4>
- <title>Western Digital WD1007 controllers</title>
-
- <para>I successfully installed FreeBSD onto a ESDI disk controlled
- by a WD1007 controller. To be precise, it was a WD1007-WA2.
- Other variations of the WD1007 do exist.</para>
-
- <para>To get it to work, I had to disable the sector translation and
- the WD1007's onboard BIOS. This implied I could not use the
- low-level formatter built into this BIOS. Instead, I grabbed
- <command>WDFMT.EXE</command> from <hostid
- role="fqdn">www.wdc.com</hostid> Running this formatted my drive
- just fine.</para>
- </sect4>
-
- <sect4>
- <title>Ultrastor U14F controllers</title>
-
- <para>According to multiple reports from the net, Ultrastor ESDI
- boards work OK with FreeBSD. I lack any further info on
- particular settings.</para>
- </sect4>
- </sect3>
-
- <sect3 id="esdi-further-reading">
- <title>Further reading</title>
-
- <para>If you intend to do some serious ESDI hacking, you might want to
- have the official standard at hand:</para>
-
- <para>The latest ANSI X3T10 committee document is: Enhanced Small
- Device Interface (ESDI) [X3.170-1990/X3.170a-1991] [X3T10/792D
- Rev 11]</para>
-
- <para>On Usenet the newsgroup <ulink
- url="news:comp.periphs">comp.periphs</ulink> is a noteworthy place
- to look for more info.</para>
-
- <para>The World Wide Web (WWW) also proves to be a very handy info
- source: For info on Adaptec ESDI controllers see <ulink
- url="http://www.adaptec.com/">http://www.adaptec.com/</ulink>. For
- info on Western Digital controllers see <ulink
- url="http://www.wdc.com/">http://www.wdc.com/</ulink>.</para>
- </sect3>
-
- <sect3>
- <title>Thanks to...</title>
-
- <para>Andrew Gordon for sending me an Adaptec 2320 controller and ESDI
- disk for testing.</para>
- </sect3>
- </sect2>
-
- <sect2 id="scsi">
- <title>What is SCSI?</title>
-
- <para><emphasis>Copyright &copy; 1995, &a.wilko;. July 6,
- 1996.</emphasis></para>
-
- <para>SCSI is an acronym for Small Computer Systems Interface. It is an
- ANSI standard that has become one of the leading I/O buses in the
- computer industry. The foundation of the SCSI standard was laid by
- Shugart Associates (the same guys that gave the world the first mini
- floppy disks) when they introduced the SASI bus (Shugart Associates
- Standard Interface).</para>
-
- <para>After some time an industry effort was started to come to a more
- strict standard allowing devices from different vendors to work
- together. This effort was recognized in the ANSI SCSI-1 standard.
- The SCSI-1 standard (approximately 1985) is rapidly becoming obsolete. The
- current standard is SCSI-2 (see <link
- linkend="scsi-further-reading">Further reading</link>), with SCSI-3
- on the drawing boards.</para>
-
- <para>In addition to a physical interconnection standard, SCSI defines a
- logical (command set) standard to which disk devices must adhere.
- This standard is called the Common Command Set (CCS) and was developed
- more or less in parallel with ANSI SCSI-1. SCSI-2 includes the
- (revised) CCS as part of the standard itself. The commands are
- dependent on the type of device at hand. It does not make much sense
- of course to define a Write command for a scanner.</para>
-
- <para>The SCSI bus is a parallel bus, which comes in a number of
- variants. The oldest and most used is an 8 bit wide bus, with
- single-ended signals, carried on 50 wires. (If you do not know what
- single-ended means, do not worry, that is what this document is all
- about.) Modern designs also use 16 bit wide buses, with differential
- signals. This allows transfer speeds of 20Mbytes/second, on cables
- lengths of up to 25 meters. SCSI-2 allows a maximum bus width of 32
- bits, using an additional cable. Quickly emerging are Ultra SCSI (also
- called Fast-20) and Ultra2 (also called Fast-40). Fast-20 is 20
- million transfers per second (20 Mbytes/sec on a 8 bit bus), Fast-40
- is 40 million transfers per second (40 Mbytes/sec on a 8 bit bus).
- Most hard drives sold today are single-ended Ultra SCSI (8 or 16
- bits).</para>
-
- <para>Of course the SCSI bus not only has data lines, but also a number
- of control signals. A very elaborate protocol is part of the standard
- to allow multiple devices to share the bus in an efficient manner. In
- SCSI-2, the data is always checked using a separate parity line. In
- pre-SCSI-2 designs parity was optional.</para>
-
- <para>In SCSI-3 even faster bus types are introduced, along with a
- serial SCSI busses that reduces the cabling overhead and allows a
- higher maximum bus length. You might see names like SSA and
- fibre channel in this context. None of the serial buses are currently
- in widespread use (especially not in the typical FreeBSD environment).
- For this reason the serial bus types are not discussed any
- further.</para>
-
- <para>As you could have guessed from the description above, SCSI devices
- are intelligent. They have to be to adhere to the SCSI standard
- (which is over 2 inches thick BTW). So, for a hard disk drive for
- instance you do not specify a head/cylinder/sector to address a
- particular block, but simply the number of the block you want.
- Elaborate caching schemes, automatic bad block replacement etc are all
- made possible by this 'intelligent device' approach.</para>
-
- <para>On a SCSI bus, each possible pair of devices can communicate.
- Whether their function allows this is another matter, but the standard
- does not restrict it. To avoid signal contention, the 2 devices have
- to arbitrate for the bus before using it.</para>
-
- <para>The philosophy of SCSI is to have a standard that allows
- older-standard devices to work with newer-standard ones. So, an old
- SCSI-1 device should normally work on a SCSI-2 bus. I say Normally,
- because it is not absolutely sure that the implementation of an old
- device follows the (old) standard closely enough to be acceptable on a
- new bus. Modern devices are usually more well-behaved, because the
- standardization has become more strict and is better adhered to by the
- device manufacturers.</para>
-
- <para>Generally speaking, the chances of getting a working set of
- devices on a single bus is better when all the devices are SCSI-2 or
- newer. This implies that you do not have to dump all your old stuff
- when you get that shiny 2GB disk: I own a system on which a pre-SCSI-1
- disk, a SCSI-2 QIC tape unit, a SCSI-1 helical scan tape unit and 2
- SCSI-1 disks work together quite happily. From a performance
- standpoint you might want to separate your older and newer (=faster)
- devices however.</para>
-
- <sect3>
- <title>Components of SCSI</title>
-
- <para>As said before, SCSI devices are smart. The idea is to put the
- knowledge about intimate hardware details onto the SCSI device
- itself. In this way, the host system does not have to worry about
- things like how many heads are hard disks has, or how many tracks
- there are on a specific tape device. If you are curious, the
- standard specifies commands with which you can query your devices on
- their hardware particulars. FreeBSD uses this capability during
- boot to check out what devices are connected and whether they need
- any special treatment.</para>
-
- <para>The advantage of intelligent devices is obvious: the device
- drivers on the host can be made in a much more generic fashion,
- there is no longer a need to change (and qualify!) drivers for every
- odd new device that is introduced.</para>
-
- <para>For cabling and connectors there is a golden rule: get good
- stuff. With bus speeds going up all the time you will save yourself
- a lot of grief by using good material.</para>
-
- <para>So, gold plated connectors, shielded cabling, sturdy connector
- hoods with strain reliefs etc are the way to go. Second golden rule:
- do no use cables longer than necessary. I once spent 3 days hunting
- down a problem with a flaky machine only to discover that shortening
- the SCSI bus by 1 meter solved the problem. And the original bus
- length was well within the SCSI specification.</para>
- </sect3>
-
- <sect3>
- <title>SCSI bus types</title>
-
- <para>From an electrical point of view, there are two incompatible bus
- types: single-ended and differential. This means that there are two
- different main groups of SCSI devices and controllers, which cannot
- be mixed on the same bus. It is possible however to use special
- converter hardware to transform a single-ended bus into a
- differential one (and vice versa). The differences between the bus
- types are explained in the next sections.</para>
-
- <para>In lots of SCSI related documentation there is a sort of jargon
- in use to abbreviate the different bus types. A small list:</para>
-
- <itemizedlist>
- <listitem>
- <para>FWD: Fast Wide Differential</para>
- </listitem>
-
- <listitem>
- <para>FND: Fast Narrow Differential</para>
- </listitem>
-
- <listitem>
- <para>SE: Single Ended</para>
- </listitem>
-
- <listitem>
- <para>FN: Fast Narrow</para>
- </listitem>
-
- <listitem>
- <para>etc.</para>
- </listitem>
- </itemizedlist>
-
-
- <para>With a minor amount of imagination one can usually imagine what
- is meant.</para>
-
- <para>Wide is a bit ambiguous, it can indicate 16 or 32 bit buses. As
- far as I know, the 32 bit variant is not (yet) in use, so wide
- normally means 16 bit.</para>
-
- <para>Fast means that the timing on the bus is somewhat different, so
- that on a narrow (8 bit) bus 10 Mbytes/sec are possible instead of 5
- Mbytes/sec for 'slow' SCSI. As discussed before, bus speeds of 20
- and 40 million transfers/second are also emerging (Fast-20 == Ultra
- SCSI and Fast-40 == Ultra2 SCSI).</para>
-
- <note>
- <para>The data lines &gt; 8 are only used for data transfers and
- device addressing. The transfers of commands and status messages
- etc are only performed on the lowest 8 data lines. The standard
- allows narrow devices to operate on a wide bus. The usable bus
- width is negotiated between the devices. You have to watch your
- device addressing closely when mixing wide and narrow.</para>
- </note>
-
- <sect4>
- <title>Single ended buses</title>
-
- <para>A single-ended SCSI bus uses signals that are either 5 Volts
- or 0 Volts (indeed, TTL levels) and are relative to a COMMON
- ground reference. A singled ended 8 bit SCSI bus has
- approximately 25 ground lines, who are all tied to a single `rail'
- on all devices. A standard single ended bus has a maximum length
- of 6 meters. If the same bus is used with fast-SCSI devices, the
- maximum length allowed drops to 3 meters. Fast-SCSI means that
- instead of 5Mbytes/sec the bus allows 10Mbytes/sec
- transfers.</para>
-
- <para>Fast-20 (Ultra SCSI) and Fast-40 allow for 20 and 40 million
- transfers/second respectively. So, F20 is 20 Mbytes/second on a 8
- bit bus, 40 Mbytes/second on a 16 bit bus etc. For F20 the max
- bus length is 1.5 meters, for F40 it becomes 0.75 meters. Be
- aware that F20 is pushing the limits quite a bit, so you will
- quickly find out if your SCSI bus is electrically sound.</para>
-
- <note>
- <para>If some devices on your bus use 'fast' to communicate your
- bus must adhere to the length restrictions for fast
- buses!</para>
- </note>
-
- <para>It is obvious that with the newer fast-SCSI devices the bus
- length can become a real bottleneck. This is why the differential
- SCSI bus was introduced in the SCSI-2 standard.</para>
-
- <para>For connector pinning and connector types please refer to the
- SCSI-2 standard (see <link linkend="scsi-further-reading">Further
- reading</link>) itself, connectors etc are listed there in
- painstaking detail.</para>
-
- <para>Beware of devices using non-standard cabling. For instance
- Apple uses a 25pin D-type connecter (like the one on serial ports
- and parallel printers). Considering that the official SCSI bus
- needs 50 pins you can imagine the use of this connector needs some
- 'creative cabling'. The reduction of the number of ground wires
- they used is a bad idea, you better stick to 50 pins cabling in
- accordance with the SCSI standard. For Fast-20 and 40 do not even
- think about buses like this.</para>
- </sect4>
-
- <sect4>
- <title>Differential buses</title>
-
- <para>A differential SCSI bus has a maximum length of 25 meters.
- Quite a difference from the 3 meters for a single-ended fast-SCSI
- bus. The idea behind differential signals is that each bus signal
- has its own return wire. So, each signal is carried on a
- (preferably twisted) pair of wires. The voltage difference
- between these two wires determines whether the signal is asserted
- or de-asserted. To a certain extent the voltage difference
- between ground and the signal wire pair is not relevant (do not
- try 10 kVolts though).</para>
-
- <para>It is beyond the scope of this document to explain why this
- differential idea is so much better. Just accept that
- electrically seen the use of differential signals gives a much
- better noise margin. You will normally find differential buses in
- use for inter-cabinet connections. Because of the lower cost
- single ended is mostly used for shorter buses like inside
- cabinets.</para>
-
- <para>There is nothing that stops you from using differential stuff
- with FreeBSD, as long as you use a controller that has device
- driver support in FreeBSD. As an example, Adaptec marketed the
- AHA1740 as a single ended board, whereas the AHA1744 was
- differential. The software interface to the host is identical for
- both.</para>
- </sect4>
-
- <sect4>
- <title>Terminators</title>
-
- <para>Terminators in SCSI terminology are resistor networks that are
- used to get a correct impedance matching. Impedance matching is
- important to get clean signals on the bus, without reflections or
- ringing. If you once made a long distance telephone call on a bad
- line you probably know what reflections are. With 20Mbytes/sec
- traveling over your SCSI bus, you do not want signals echoing
- back.</para>
-
- <para>Terminators come in various incarnations, with more or less
- sophisticated designs. Of course, there are internal and external
- variants. Many SCSI devices come with a number of sockets in
- which a number of resistor networks can (must be!) installed. If
- you remove terminators from a device, carefully store them. You
- will need them when you ever decide to reconfigure your SCSI bus.
- There is enough variation in even these simple tiny things to make
- finding the exact replacement a frustrating business. There are
- also SCSI devices that have a single jumper to enable or disable a
- built-in terminator. There are special terminators you can stick
- onto a flat cable bus. Others look like external connectors, or a
- connector hood without a cable. So, lots of choice as you can
- see.</para>
-
- <para>There is much debate going on if and when you should switch
- from simple resistor (passive) terminators to active terminators.
- Active terminators contain slightly more elaborate circuit to give
- cleaner bus signals. The general consensus seems to be that the
- usefulness of active termination increases when you have long
- buses and/or fast devices. If you ever have problems with your
- SCSI buses you might consider trying an active terminator. Try to
- borrow one first, they reputedly are quite expensive.</para>
-
- <para>Please keep in mind that terminators for differential and
- single-ended buses are not identical. You should <emphasis>not
- mix</emphasis> the two variants.</para>
-
- <para>OK, and now where should you install your terminators? This is
- by far the most misunderstood part of SCSI. And it is by far the
- simplest. The rule is: <emphasis>every single line on the SCSI
- bus has 2 (two) terminators, one at each end of the
- bus.</emphasis> So, two and not one or three or whatever. Do
- yourself a favor and stick to this rule. It will save you endless
- grief, because wrong termination has the potential to introduce
- highly mysterious bugs. (Note the <quote>potential</quote> here;
- the nastiest part is that it may or may not work.)</para>
-
- <para>A common pitfall is to have an internal (flat) cable in a
- machine and also an external cable attached to the controller. It
- seems almost everybody forgets to remove the terminators from the
- controller. The terminator must now be on the last external
- device, and not on the controller! In general, every
- reconfiguration of a SCSI bus must pay attention to this.</para>
-
- <note>
- <para>Termination is to be done on a per-line basis. This means
- if you have both narrow and wide buses connected to the same
- host adapter, you need to enable termination on the higher 8
- bits of the bus on the adapter (as well as the last devices on
- each bus, of course).</para>
- </note>
-
- <para>What I did myself is remove all terminators from my SCSI
- devices and controllers. I own a couple of external terminators,
- for both the Centronics-type external cabling and for the internal
- flat cable connectors. This makes reconfiguration much
- easier.</para>
-
- <para>On modern devices, sometimes integrated terminators are used.
- These things are special purpose integrated circuits that can be
- enabled or disabled with a control pin. It is not necessary to
- physically remove them from a device. You may find them on newer
- host adapters, sometimes they are software configurable, using
- some sort of setup tool. Some will even auto-detect the cables
- attached to the connectors and automatically set up the
- termination as necessary. At any rate, consult your
- documentation!</para>
- </sect4>
-
- <sect4>
- <title>Terminator power</title>
-
- <para>The terminators discussed in the previous chapter need power
- to operate properly. On the SCSI bus, a line is dedicated to this
- purpose. So, simple huh?</para>
-
- <para>Not so. Each device can provide its own terminator power to
- the terminator sockets it has on-device. But if you have external
- terminators, or when the device supplying the terminator power to
- the SCSI bus line is switched off you are in trouble.</para>
-
- <para>The idea is that initiators (these are devices that initiate
- actions on the bus, a discussion follows) must supply terminator
- power. All SCSI devices are allowed (but not required) to supply
- terminator power.</para>
-
- <para>To allow for un-powered devices on a bus, the terminator power
- must be supplied to the bus via a diode. This prevents the
- backflow of current to un-powered devices.</para>
-
- <para>To prevent all kinds of nastiness, the terminator power is
- usually fused. As you can imagine, fuses might blow. This can,
- but does not have to, lead to a non functional bus. If multiple
- devices supply terminator power, a single blown fuse will not put
- you out of business. A single supplier with a blown fuse
- certainly will. Clever external terminators sometimes have a LED
- indication that shows whether terminator power is present.</para>
-
- <para>In newer designs auto-restoring fuses that 'reset' themselves
- after some time are sometimes used.</para>
- </sect4>
-
- <sect4>
- <title>Device addressing</title>
-
- <para>Because the SCSI bus is, ehh, a bus there must be a way to
- distinguish or address the different devices connected to
- it.</para>
-
- <para>This is done by means of the SCSI or target ID. Each device
- has a unique target ID. You can select the ID to which a device
- must respond using a set of jumpers, or a dip switch, or something
- similar. Some SCSI host adapters let you change the target ID
- from the boot menu. (Yet some others will not let you change the
- ID from 7.) Consult the documentation of your device for more
- information.</para>
-
- <para>Beware of multiple devices configured to use the same ID.
- Chaos normally reigns in this case. A pitfall is that one of the
- devices sharing the same ID sometimes even manages to answer to
- I/O requests!</para>
-
- <para>For an 8 bit bus, a maximum of 8 targets is possible. The
- maximum is 8 because the selection is done bitwise using the 8
- data lines on the bus. For wide buses this increases to the
- number of data lines (usually 16).</para>
-
- <note>
- <para>A narrow SCSI device can not communicate with a SCSI device
- with a target ID larger than 7. This means it is generally not
- a good idea to move your SCSI host adapter's target ID to
- something higher than 7 (or your CDROM will stop
- working).</para>
- </note>
-
- <para>The higher the SCSI target ID, the higher the priority the
- devices has. When it comes to arbitration between devices that
- want to use the bus at the same time, the device that has the
- highest SCSI ID will win. This also means that the SCSI host
- adapter usually uses target ID 7. Note however that the lower 8
- IDs have higher priorities than the higher 8 IDs on a wide-SCSI
- bus. Thus, the order of target IDs is: [7 6 .. 1 0 15 14 .. 9 8]
- on a wide-SCSI system. (If you you are wondering why the lower 8
- have higher priority, read the previous paragraph for a
- hint.)</para>
-
- <para>For a further subdivision, the standard allows for Logical
- Units or LUNs for short. A single target ID may have multiple
- LUNs. For example, a tape device including a tape changer may
- have LUN 0 for the tape device itself, and LUN 1 for the tape
- changer. In this way, the host system can address each of the
- functional units of the tape changer as desired.</para>
- </sect4>
-
- <sect4>
- <title>Bus layout</title>
-
- <para>SCSI buses are linear. So, not shaped like Y-junctions, star
- topologies, rings, cobwebs or whatever else people might want to
- invent. One of the most common mistakes is for people with
- wide-SCSI host adapters to connect devices on all three connecters
- (external connector, internal wide connector, internal narrow
- connector). Don't do that. It may appear to work if you are
- really lucky, but I can almost guarantee that your system will
- stop functioning at the most unfortunate moment (this is also
- known as <quote>Murphy's law</quote>).</para>
-
- <para>You might notice that the terminator issue discussed earlier
- becomes rather hairy if your bus is not linear. Also, if you have
- more connectors than devices on your internal SCSI cable, make
- sure you attach devices on connectors on both ends instead of
- using the connectors in the middle and let one or both ends
- dangle. This will screw up the termination of the bus.</para>
-
- <para>The electrical characteristics, its noise margins and
- ultimately the reliability of it all are tightly related to linear
- bus rule.</para>
-
- <para><emphasis>Stick to the linear bus rule!</emphasis></para>
- </sect4>
- </sect3>
-
- <sect3>
- <title>Using SCSI with FreeBSD</title>
-
- <sect4>
- <title>About translations, BIOSes and magic...</title>
-
- <para>As stated before, you should first make sure that you have a
- electrically sound bus.</para>
-
- <para>When you want to use a SCSI disk on your PC as boot disk, you
- must aware of some quirks related to PC BIOSes. The PC BIOS in
- its first incarnation used a low level physical interface to the
- hard disk. So, you had to tell the BIOS (using a setup tool or a
- BIOS built-in setup) how your disk physically looked like. This
- involved stating number of heads, number of cylinders, number of
- sectors per track, obscure things like precompensation and reduced
- write current cylinder etc.</para>
-
- <para>One might be inclined to think that since SCSI disks are smart
- you can forget about this. Alas, the arcane setup issue is still
- present today. The system BIOS needs to know how to access your
- SCSI disk with the head/cyl/sector method in order to load the
- FreeBSD kernel during boot.</para>
-
- <para>The SCSI host adapter or SCSI controller you have put in your
- AT/EISA/PCI/whatever bus to connect your disk therefore has its
- own on-board BIOS. During system startup, the SCSI BIOS takes
- over the hard disk interface routines from the system BIOS. To
- fool the system BIOS, the system setup is normally set to No hard
- disk present. Obvious, isn't it?</para>
-
- <para>The SCSI BIOS itself presents to the system a so called
- <emphasis>translated</emphasis> drive. This means that a fake
- drive table is constructed that allows the PC to boot the drive.
- This translation is often (but not always) done using a pseudo
- drive with 64 heads and 32 sectors per track. By varying the
- number of cylinders, the SCSI BIOS adapts to the actual drive
- size. It is useful to note that 32 * 64 / 2 = the size of your
- drive in megabytes. The division by 2 is to get from disk blocks
- that are normally 512 bytes in size to Kbytes.</para>
-
- <para>Right. All is well now?! No, it is not. The system BIOS has
- another quirk you might run into. The number of cylinders of a
- bootable hard disk cannot be greater than 1024. Using the
- translation above, this is a show-stopper for disks greater than 1
- GB. With disk capacities going up all the time this is causing
- problems.</para>
-
- <para>Fortunately, the solution is simple: just use another
- translation, e.g. with 128 heads instead of 32. In most cases new
- SCSI BIOS versions are available to upgrade older SCSI host
- adapters. Some newer adapters have an option, in the form of a
- jumper or software setup selection, to switch the translation the
- SCSI BIOS uses.</para>
-
- <para>It is very important that <emphasis>all</emphasis> operating
- systems on the disk use the <emphasis>same translation</emphasis>
- to get the right idea about where to find the relevant partitions.
- So, when installing FreeBSD you must answer any questions about
- heads/cylinders etc using the translated values your host adapter
- uses.</para>
-
- <para>Failing to observe the translation issue might lead to
- un-bootable systems or operating systems overwriting each others
- partitions. Using fdisk you should be able to see all
- partitions.</para>
-
- <para>You might have heard some talk of <quote>lying</quote> devices?
- Older FreeBSD kernels used to report the geometry of SCSI disks
- when booting. An example from one of my systems:</para>
-
- <screen>aha0 targ 0 lun 0: &lt;MICROP 1588-15MB1057404HSP4&gt;
-sd0: 636MB (1303250 total sec), 1632 cyl, 15 head, 53 sec, bytes/sec 512</screen>
-
- <para>Newer kernels usually do not report this information.
- e.g.</para>
-
- <screen>(bt0:0:0): "SEAGATE ST41651 7574" type 0 fixed SCSI 2
-sd0(bt0:0:0): Direct-Access 1350MB (2766300 512 byte sectors)</screen>
-
- <para>Why has this changed?</para>
-
- <para>This info is retrieved from the SCSI disk itself. Newer disks
- often use a technique called zone bit recording. The idea is that
- on the outer cylinders of the drive there is more space so more
- sectors per track can be put on them. This results in disks that
- have more tracks on outer cylinders than on the inner cylinders
- and, last but not least, have more capacity. You can imagine that
- the value reported by the drive when inquiring about the geometry
- now becomes suspect at best, and nearly always misleading. When
- asked for a geometry , it is nearly always better to supply the
- geometry used by the BIOS, or <emphasis>if the BIOS is never going
- to know about this disk</emphasis>, (e.g. it is not a booting
- disk) to supply a fictitious geometry that is convenient.</para>
- </sect4>
-
- <sect4>
- <title>SCSI subsystem design</title>
-
- <para>FreeBSD uses a layered SCSI subsystem. For each different
- controller card a device driver is written. This driver knows all
- the intimate details about the hardware it controls. The driver
- has a interface to the upper layers of the SCSI subsystem through
- which it receives its commands and reports back any status.</para>
-
- <para>On top of the card drivers there are a number of more generic
- drivers for a class of devices. More specific: a driver for tape
- devices (abbreviation: st), magnetic disks (sd), CDROMs (cd) etc.
- In case you are wondering where you can find this stuff, it all
- lives in <filename>/sys/scsi</filename>. See the man pages in
- section 4 for more details.</para>
-
- <para>The multi level design allows a decoupling of low-level bit
- banging and more high level stuff. Adding support for another
- piece of hardware is a much more manageable problem.</para>
- </sect4>
-
- <sect4>
- <title>Kernel configuration</title>
-
- <para>Dependent on your hardware, the kernel configuration file must
- contain one or more lines describing your host adapter(s). This
- includes I/O addresses, interrupts etc. Consult the man page for
- your adapter driver to get more info. Apart from that, check out
- <filename>/sys/i386/conf/LINT</filename> for an overview of a
- kernel config file. <filename>LINT</filename> contains every
- possible option you can dream of. It does
- <emphasis>not</emphasis> imply <filename>LINT</filename> will
- actually get you to a working kernel at all.</para>
-
- <para>Although it is probably stating the obvious: the kernel config
- file should reflect your actual hardware setup. So, interrupts,
- I/O addresses etc must match the kernel config file. During
- system boot messages will be displayed to indicate whether the
- configured hardware was actually found.</para>
-
- <note>
- <para>Note that most of the EISA/PCI drivers (namely
- <devicename>ahb</devicename>, <devicename>ahc</devicename>,
- <devicename>ncr</devicename> and <devicename>amd</devicename>
- will automatically obtain the correct parameters from the host
- adapters themselves at boot time; thus, you just need to write,
- for instance, <literal>controller ahc0</literal>.</para>
- </note>
-
- <para>An example loosely based on the FreeBSD 2.2.5-Release kernel
- config file <filename>LINT</filename> with some added comments
- (between []):</para>
-
- <programlisting>
-# SCSI host adapters: `aha', `ahb', `aic', `bt', `nca'
-#
-# aha: Adaptec 154x
-# ahb: Adaptec 174x
-# ahc: Adaptec 274x/284x/294x
-# aic: Adaptec 152x and sound cards using the Adaptec AIC-6360 (slow!)
-# amd: AMD 53c974 based SCSI cards (e.g., Tekram DC-390 and 390T)
-# bt: Most Buslogic controllers
-# nca: ProAudioSpectrum cards using the NCR 5380 or Trantor T130
-# ncr: NCR/Symbios 53c810/815/825/875 etc based SCSI cards
-# uha: UltraStore 14F and 34F
-# sea: Seagate ST01/02 8 bit controller (slow!)
-# wds: Western Digital WD7000 controller (no scatter/gather!).
-#
-
-[For an Adaptec AHA274x/284x/294x/394x etc controller]
-controller ahc0
-
-[For an NCR/Symbios 53c875 based controller]
-controller ncr0
-
-[For an Ultrastor adapter]
-controller uha0 at isa? port "IO_UHA0" bio irq ? drq 5 vector uhaintr
-
-# Map SCSI buses to specific SCSI adapters
-controller scbus0 at ahc0
-controller scbus2 at ncr0
-controller scbus1 at uha0
-
-# The actual SCSI devices
-disk sd0 at scbus0 target 0 unit 0 [SCSI disk 0 is at scbus 0, LUN 0]
-disk sd1 at scbus0 target 1 [implicit LUN 0 if omitted]
-disk sd2 at scbus1 target 3 [SCSI disk on the uha0]
-disk sd3 at scbus2 target 4 [SCSI disk on the ncr0]
-tape st1 at scbus0 target 6 [SCSI tape at target 6]
-device cd0 at scbus? [the first ever CDROM found, no wiring]</programlisting>
-
- <para>The example above tells the kernel to look for a ahc (Adaptec
- 274x) controller, then for an NCR/Symbios board, and so on. The
- lines following the controller specifications tell the kernel to
- configure specific devices but <emphasis>only</emphasis> attach
- them when they match the target ID and LUN specified on the
- corresponding bus.</para>
-
- <para>Wired down devices get <quote>first shot</quote> at the unit
- numbers so the first non <quote>wired down</quote> device, is
- allocated the unit number one greater than the highest
- <quote>wired down</quote> unit number for that kind of device. So,
- if you had a SCSI tape at target ID 2 it would be configured as
- st2, as the tape at target ID 6 is wired down to unit number
- 1.</para>
-
- <note>
- <para>Wired down devices need not be found to get their unit
- number. The unit number for a wired down device is reserved for
- that device, even if it is turned off at boot time. This allows
- the device to be turned on and brought on-line at a later time,
- without rebooting. Notice that a device's unit number has
- <emphasis>no</emphasis> relationship with its target ID on the
- SCSI bus.</para>
- </note>
-
- <para>Below is another example of a kernel config file as used by
- FreeBSD version &lt; 2.0.5. The difference with the first example
- is that devices are not <quote>wired down</quote>. <quote>Wired
- down</quote> means that you specify which SCSI target belongs to
- which device.</para>
-
- <para>A kernel built to the config file below will attach the first
- SCSI disk it finds to sd0, the second disk to sd1 etc. If you ever
- removed or added a disk, all other devices of the same type (disk
- in this case) would 'move around'. This implies you have to
- change <filename>/etc/fstab</filename> each time.</para>
-
- <para>Although the old style still works, you are
- <emphasis>strongly</emphasis> recommended to use this new feature.
- It will save you a lot of grief whenever you shift your hardware
- around on the SCSI buses. So, when you re-use your old trusty
- config file after upgrading from a pre-FreeBSD2.0.5.R system check
- this out.</para>
-
- <programlisting>
-[driver for Adaptec 174x]
-controller ahb0 at isa? bio irq 11 vector ahbintr
-
-[for Adaptec 154x]
-controller aha0 at isa? port "IO_AHA0" bio irq 11 drq 5 vector ahaintr
-
-[for Seagate ST01/02]
-controller sea0 at isa? bio irq 5 iomem 0xc8000 iosiz 0x2000 vector seaintr
-
-controller scbus0
-
-device sd0 [support for 4 SCSI harddisks, sd0 up sd3]
-device st0 [support for 2 SCSI tapes]
-
-[for the CDROM]
-device cd0 #Only need one of these, the code dynamically grows</programlisting>
-
- <para>Both examples support SCSI disks. If during boot more devices
- of a specific type (e.g. sd disks) are found than are configured
- in the booting kernel, the system will simply allocate more
- devices, incrementing the unit number starting at the last number
- <quote>wired down</quote>. If there are no <quote>wired
- down</quote> devices then counting starts at unit 0.</para>
-
- <para>Use <command>man 4 scsi</command> to check for the latest info
- on the SCSI subsystem. For more detailed info on host adapter
- drivers use e.g., <command>man 4 ahc</command> for info on the
- Adaptec 294x driver.</para>
- </sect4>
-
- <sect4>
- <title>Tuning your SCSI kernel setup</title>
-
- <para>Experience has shown that some devices are slow to respond to
- INQUIRY commands after a SCSI bus reset (which happens at boot
- time). An INQUIRY command is sent by the kernel on boot to see
- what kind of device (disk, tape, CDROM etc.) is connected to a
- specific target ID. This process is called device probing by the
- way.</para>
-
- <para>To work around the 'slow response' problem, FreeBSD allows a
- tunable delay time before the SCSI devices are probed following a
- SCSI bus reset. You can set this delay time in your kernel
- configuration file using a line like:</para>
-
- <programlisting>
-options SCSI_DELAY=15 #Be pessimistic about Joe SCSI device</programlisting>
-
- <para>This line sets the delay time to 15 seconds. On my own system
- I had to use 3 seconds minimum to get my trusty old CDROM drive
- to be recognized. Start with a high value (say 30 seconds or so)
- when you have problems with device recognition. If this helps,
- tune it back until it just stays working.</para>
- </sect4>
-
- <sect4 id="scsi-rogue-devices">
- <title>Rogue SCSI devices</title>
-
- <para>Although the SCSI standard tries to be complete and concise,
- it is a complex standard and implementing things correctly is no
- easy task. Some vendors do a better job then others.</para>
-
- <para>This is exactly where the <quote>rogue</quote> devices come
- into view. Rogues are devices that are recognized by the FreeBSD
- kernel as behaving slightly (...) non-standard. Rogue devices are
- reported by the kernel when booting. An example for two of my
- cartridge tape units:</para>
-
- <screen>Feb 25 21:03:34 yedi /kernel: ahb0 targ 5 lun 0: &lt;TANDBERG TDC 3600 -06:&gt;
-Feb 25 21:03:34 yedi /kernel: st0: Tandberg tdc3600 is a known rogue
-
-Mar 29 21:16:37 yedi /kernel: aha0 targ 5 lun 0: &lt;ARCHIVE VIPER 150 21247-005&gt;
-Mar 29 21:16:37 yedi /kernel: st1: Archive Viper 150 is a known rogue </screen>
-
- <para>For instance, there are devices that respond to all LUNs on a
- certain target ID, even if they are actually only one device. It
- is easy to see that the kernel might be fooled into believing that
- there are 8 LUNs at that particular target ID. The confusion this
- causes is left as an exercise to the reader.</para>
-
- <para>The SCSI subsystem of FreeBSD recognizes devices with bad
- habits by looking at the INQUIRY response they send when probed.
- Because the INQUIRY response also includes the version number of
- the device firmware, it is even possible that for different
- firmware versions different workarounds are used. See e.g.
- <filename>/sys/scsi/st.c</filename> and
- <filename>/sys/scsi/scsiconf.c</filename> for more info on how
- this is done.</para>
-
- <para>This scheme works fine, but keep in mind that it of course
- only works for devices that are known to be weird. If you are the
- first to connect your bogus Mumbletech SCSI CDROM you might be
- the one that has to define which workaround is needed.</para>
-
- <para>After you got your Mumbletech working, please send the
- required workaround to the FreeBSD development team for inclusion
- in the next release of FreeBSD. Other Mumbletech owners will be
- grateful to you.</para>
- </sect4>
-
- <sect4>
- <title>Multiple LUN devices</title>
-
- <para>In some cases you come across devices that use multiple
- logical units (LUNs) on a single SCSI ID. In most cases FreeBSD
- only probes devices for LUN 0. An example are so called bridge
- boards that connect 2 non-SCSI harddisks to a SCSI bus (e.g. an
- Emulex MD21 found in old Sun systems).</para>
-
- <para>This means that any devices with LUNs != 0 are not normally
- found during device probe on system boot. To work around this
- problem you must add an appropriate entry in /sys/scsi/scsiconf.c
- and rebuild your kernel.</para>
-
- <para>Look for a struct that is initialized like below:</para>
-
- <programlisting>
-{
- T_DIRECT, T_FIXED, "MAXTOR", "XT-4170S", "B5A",
- "mx1", SC_ONE_LU
-}</programlisting>
-
- <para>For you Mumbletech BRIDGE2000 that has more than one LUN, acts
- as a SCSI disk and has firmware revision 123 you would add
- something like:</para>
-
- <programlisting>
-{
- T_DIRECT, T_FIXED, "MUMBLETECH", "BRIDGE2000", "123",
- "sd", SC_MORE_LUS
-}</programlisting>
-
- <para>The kernel on boot scans the inquiry data it receives against
- the table and acts accordingly. See the source for more
- info.</para>
- </sect4>
-
- <sect4>
- <title>Tagged command queuing</title>
-
- <para>Modern SCSI devices, particularly magnetic disks,
- support what is called tagged command queuing (TCQ).</para>
-
- <para>In a nutshell, TCQ allows the device to have multiple I/O
- requests outstanding at the same time. Because the device is
- intelligent, it can optimize its operations (like head
- positioning) based on its own request queue. On SCSI devices
- like RAID (Redundant Array of Independent Disks) arrays the TCQ
- function is indispensable to take advantage of the device's
- inherent parallelism.</para>
-
- <para>Each I/O request is uniquely identified by a <quote>tag</quote>
- (hence the name tagged command queuing) and this tag is used by
- FreeBSD to see which I/O in the device drivers queue is reported
- as complete by the device.</para>
-
- <para>It should be noted however that TCQ requires device driver
- support and that some devices implemented it <quote>not quite
- right</quote> in their firmware. This problem bit me once, and it
- leads to highly mysterious problems. In such cases, try to
- disable TCQ.</para>
- </sect4>
-
- <sect4>
- <title>Busmaster host adapters</title>
-
- <para>Most, but not all, SCSI host adapters are bus mastering
- controllers. This means that they can do I/O on their own without
- putting load onto the host CPU for data movement.</para>
-
- <para>This is of course an advantage for a multitasking operating
- system like FreeBSD. It must be noted however that there might be
- some rough edges.</para>
-
- <para>For instance an Adaptec 1542 controller can be set to use
- different transfer speeds on the host bus (ISA or AT in this
- case). The controller is settable to different rates because not
- all motherboards can handle the higher speeds. Problems like
- hang-ups, bad data etc might be the result of using a higher data
- transfer rate then your motherboard can stomach.</para>
-
- <para>The solution is of course obvious: switch to a lower data
- transfer rate and try if that works better.</para>
-
- <para>In the case of a Adaptec 1542, there is an option that can be
- put into the kernel config file to allow dynamic determination of
- the right, read: fastest feasible, transfer rate. This option is
- disabled by default:</para>
-
- <programlisting>
-options "TUNE_1542" #dynamic tune of bus DMA speed</programlisting>
-
- <para>Check the man pages for the host adapter that you use. Or
- better still, use the ultimate documentation (read: driver
- source).</para>
- </sect4>
- </sect3>
-
- <sect3>
- <title>Tracking down problems</title>
-
- <para>The following list is an attempt to give a guideline for the
- most common SCSI problems and their solutions. It is by no means
- complete.</para>
-
- <itemizedlist>
- <listitem>
- <para>Check for loose connectors and cables.</para>
- </listitem>
-
- <listitem>
- <para>Check and double check the location and number of your
- terminators.</para>
- </listitem>
-
- <listitem>
- <para>Check if your bus has at least one supplier of terminator
- power (especially with external terminators.</para>
- </listitem>
-
- <listitem>
- <para>Check if no double target IDs are used.</para>
- </listitem>
-
- <listitem>
- <para>Check if all devices to be used are powered up.</para>
- </listitem>
-
- <listitem>
- <para>Make a minimal bus config with as little devices as
- possible.</para>
- </listitem>
-
- <listitem>
- <para>If possible, configure your host adapter to use slow bus
- speeds.</para>
- </listitem>
-
- <listitem>
- <para>Disable tagged command queuing to make things as simple as
- possible (for a NCR host adapter based system see man
- ncrcontrol)</para>
- </listitem>
-
- <listitem>
- <para>If you can compile a kernel, make one with the
- <literal>SCSIDEBUG</literal> option, and try accessing the
- device with debugging turned on for that device. If your device
- does not even probe at startup, you may have to define the
- address of the device that is failing, and the desired debug
- level in <filename>/sys/scsi/scsidebug.h</filename>. If it
- probes but just does not work, you can use the
- &man.scsi.8; command to dynamically set a debug level to
- it in a running kernel (if <literal>SCSIDEBUG</literal> is
- defined). This will give you <emphasis>copious</emphasis>
- debugging output with which to confuse the gurus. See
- <command>man 4 scsi</command> for more exact information. Also
- look at <command>man 8 scsi</command>.</para>
- </listitem>
- </itemizedlist>
- </sect3>
-
- <sect3 id="scsi-further-reading">
- <title>Further reading</title>
-
- <para>If you intend to do some serious SCSI hacking, you might want to
- have the official standard at hand:</para>
-
- <para>Approved American National Standards can be purchased from
- ANSI at
-
- <address>
- <otheraddr>13th Floor</otheraddr>
- <street>11 West 42nd Street</street>
- <city>New York</city>
- <state>NY</state> <postcode>10036</postcode>
- Sales Dept: <phone>(212) 642-4900</phone>
- </address>
- </para>
-
- <para>You can also buy many ANSI
- standards and most committee draft documents from Global
- Engineering Documents,
-
- <address>
- <street>15 Inverness Way East</street>
- <city>Englewood</city>
- <state>CO</state>, <postcode>80112-5704</postcode>
- Phone: <phone>(800) 854-7179</phone>
- Outside USA and Canada: <phone>(303) 792-2181</phone>
- Fax: <fax>(303) 792- 2192</fax>
- </address>
- </para>
-
- <para>Many X3T10 draft documents are available electronically on the
- SCSI BBS (719-574-0424) and on the <hostid
- role="fqdn">ncrinfo.ncr.com</hostid> anonymous ftp site.</para>
-
- <para>Latest X3T10 committee documents are:</para>
-
- <itemizedlist>
- <listitem>
- <para>AT Attachment (ATA or IDE) [X3.221-1994]
- (<emphasis>Approved</emphasis>)</para>
- </listitem>
-
- <listitem>
- <para>ATA Extensions (ATA-2) [X3T10/948D Rev 2i]</para>
- </listitem>
-
- <listitem>
- <para>Enhanced Small Device Interface (ESDI)
- [X3.170-1990/X3.170a-1991]
- (<emphasis>Approved</emphasis>)</para>
- </listitem>
-
- <listitem>
- <para>Small Computer System Interface &mdash; 2 (SCSI-2)
- [X3.131-1994] (<emphasis>Approved</emphasis>)</para>
- </listitem>
-
- <listitem>
- <para>SCSI-2 Common Access Method Transport and SCSI Interface
- Module (CAM) [X3T10/792D Rev 11]</para>
- </listitem>
- </itemizedlist>
-
- <para>Other publications that might provide you with additional
- information are:</para>
-
- <itemizedlist>
- <listitem>
- <para><quote>SCSI: Understanding the Small Computer System
- Interface</quote>, written by NCR Corporation. Available from:
- Prentice Hall, Englewood Cliffs, NJ, 07632 Phone: (201) 767-5937
- ISBN 0-13-796855-8</para>
- </listitem>
-
- <listitem>
- <para><quote>Basics of SCSI</quote>, a SCSI tutorial written by
- Ancot Corporation Contact Ancot for availability information at:
- Phone: (415) 322-5322 Fax: (415) 322-0455</para>
- </listitem>
-
- <listitem>
- <para><quote>SCSI Interconnection Guide Book</quote>, an AMP
- publication (dated 4/93, Catalog 65237) that lists the various
- SCSI connectors and suggests cabling schemes. Available from
- AMP at (800) 522-6752 or (717) 564-0100</para>
- </listitem>
-
- <listitem>
- <para><quote>Fast Track to SCSI</quote>, A Product Guide written by
- Fujitsu. Available from: Prentice Hall, Englewood Cliffs, NJ,
- 07632 Phone: (201) 767-5937 ISBN 0-13-307000-X</para>
- </listitem>
-
- <listitem>
- <para><quote>The SCSI Bench Reference</quote>, <quote>The SCSI
- Encyclopedia</quote>, and the <quote>SCSI Tutor</quote>, ENDL
- Publications, 14426 Black Walnut Court, Saratoga CA, 95070
- Phone: (408) 867-6642</para>
- </listitem>
-
- <listitem>
- <para><quote>Zadian SCSI Navigator</quote> (quick ref. book) and
- <quote>Discover the Power of SCSI</quote> (First book along with
- a one-hour video and tutorial book), Zadian Software, Suite 214,
- 1210 S. Bascom Ave., San Jose, CA 92128, (408) 293-0800</para>
- </listitem>
- </itemizedlist>
-
- <para>On Usenet the newsgroups <ulink
- url="news:comp.periphs.scsi">comp.periphs.scsi</ulink> and <ulink
- url="news:comp.periphs">comp.periphs</ulink> are noteworthy places
- to look for more info. You can also find the SCSI-Faq there, which
- is posted periodically.</para>
-
- <para>Most major SCSI device and host adapter suppliers operate ftp
- sites and/or BBS systems. They may be valuable sources of
- information about the devices you own.</para>
- </sect3>
- </sect2>
-
- <sect2 id="hw-storage-controllers">
- <title>* Disk/tape controllers</title>
-
- <sect3>
- <title>* SCSI</title>
-
- <para></para>
- </sect3>
-
- <sect3>
- <title>* IDE</title>
-
- <para></para>
- </sect3>
-
- <sect3>
- <title>* Floppy</title>
-
- <para></para>
- </sect3>
- </sect2>
-
- <sect2>
- <title>Hard drives</title>
-
- <sect3>
- <title>SCSI hard drives</title>
-
- <para><emphasis>Contributed by &a.asami;. 17 February
- 1998.</emphasis></para>
-
- <para>As mentioned in the <link linkend="scsi">SCSI</link> section,
- virtually all SCSI hard drives sold today are SCSI-2 compliant and
- thus will work fine as long as you connect them to a supported SCSI
- host adapter. Most problems people encounter are either due to
- badly designed cabling (cable too long, star topology, etc.),
- insufficient termination, or defective parts. Please refer to the
- <link linkend="scsi">SCSI</link> section first if your SCSI hard
- drive is not working. However, there are a couple of things you may
- want to take into account before you purchase SCSI hard drives for
- your system.</para>
-
- <sect4>
- <title>Rotational speed</title>
-
- <para>Rotational speeds of SCSI drives sold today range from around
- 4,500RPM to 10,000RPM. Most of them are either 5,400RPM or
- 7,200RPM. Even though the 7,200RPM drives can generally transfer
- data faster, they run considerably hotter than their 5,400RPM
- counterparts. A large fraction of today's disk drive malfunctions
- are heat-related. If you do not have very good cooling in your PC
- case, you may want to stick with 5,400RPM or slower drives.</para>
-
- <para>Note that newer drives, with higher areal recording densities,
- can deliver much more bits per rotation than older ones. Today's
- top-of-line 5,400RPM drives can sustain a throughput comparable to
- 7,200RPM drives of one or two model generations ago. The number
- to find on the spec sheet for bandwidth is <quote>internal data
- (or transfer) rate</quote>. It is usually in megabits/sec so
- divide it by 8 and you'll get the rough approximation of how much
- megabytes/sec you can get out of the drive.</para>
-
- <para>(If you are a speed maniac and want a 10,000RPM drive for your
- cute little PC, be my guest; however, those drives become
- extremely hot. Don't even think about it if you don't have a fan
- blowing air <emphasis>directly at</emphasis> the drive or a
- properly ventilated disk enclosure.)</para>
-
- <para>Obviously, the latest 10,000RPM drives and 7,200RPM drives can
- deliver more data than the latest 5,400RPM drives, so if absolute
- bandwidth is the necessity for your applications, you have little
- choice but to get the faster drives. Also, if you need low
- latency, faster drives are better; not only do they usually have
- lower average seek times, but also the rotational delay is one
- place where slow-spinning drives can never beat a faster one.
- (The average rotational latency is half the time it takes to
- rotate the drive once; thus, it's 3 milliseconds for 10,000RPM
- drives, 4.2ms for 7,200RPM drives and 5.6ms for 5,400RPM drives.)
- Latency is seek time plus rotational delay. Make sure you
- understand whether you need low latency or more accesses per
- second, though; in the latter case (e.g., news servers), it may
- not be optimal to purchase one big fast drive. You can achieve
- similar or even better results by using the ccd (concatenated
- disk) driver to create a striped disk array out of multiple slower
- drives for comparable overall cost.</para>
-
- <para>Make sure you have adequate air flow around the drive,
- especially if you are going to use a fast-spinning drive. You
- generally need at least 1/2" (1.25cm) of spacing above and below a
- drive. Understand how the air flows through your PC case. Most
- cases have the power supply suck the air out of the back. See
- where the air flows in, and put the drive where it will have the
- largest volume of cool air flowing around it. You may need to seal
- some unwanted holes or add a new fan for effective cooling.</para>
-
- <para>Another consideration is noise. Many 7,200 or faster drives
- generate a high-pitched whine which is quite unpleasant to most
- people. That, plus the extra fans often required for cooling, may
- make 7,200 or faster drives unsuitable for some office and home
- environments.</para>
- </sect4>
-
- <sect4>
- <title>Form factor</title>
-
- <para>Most SCSI drives sold today are of 3.5" form factor. They
- come in two different heights; 1.6" (<quote>half-height</quote>) or
- 1" (<quote>low-profile</quote>). The half-height drive is the same
- height as a CDROM drive. However, don't forget the spacing rule
- mentioned in the previous section. If you have three standard
- 3.5" drive bays, you will not be able to put three half-height
- drives in there (without frying them, that is).</para>
- </sect4>
-
- <sect4>
- <title>Interface</title>
-
- <para>The majority of SCSI hard drives sold today are Ultra or
- Ultra-wide SCSI. The maximum bandwidth of Ultra SCSI is 20MB/sec,
- and Ultra-wide SCSI is 40MB/sec. There is no difference in max
- cable length between Ultra and Ultra-wide; however, the more
- devices you have on the same bus, the sooner you will start having
- bus integrity problems. Unless you have a well-designed disk
- enclosure, it is not easy to make more than 5 or 6 Ultra SCSI
- drives work on a single bus.</para>
-
- <para>On the other hand, if you need to connect many drives, going
- for Fast-wide SCSI may not be a bad idea. That will have the same
- max bandwidth as Ultra (narrow) SCSI, while electronically it's
- much easier to get it <quote>right</quote>. My advice would be: if
- you want to connect many disks, get wide SCSI drives; they usually
- cost a little more but it may save you down the road. (Besides,
- if you can't afford the cost difference, you shouldn't be building
- a disk array.)</para>
-
- <para>There are two variant of wide SCSI drives; 68-pin and 80-pin
- SCA (Single Connector Attach). The SCA drives don't have a
- separate 4-pin power connector, and also read the SCSI ID settings
- through the 80-pin connector. If you are really serious about
- building a large storage system, get SCA drives and a good SCA
- enclosure (dual power supply with at least one extra fan). They
- are more electronically sound than 68-pin counterparts because
- there is no <quote>stub</quote> of the SCSI bus inside the disk
- canister as in arrays built from 68-pin drives. They are easier
- to install too (you just need to screw the drive in the canister,
- instead of trying to squeeze in your fingers in a tight place to
- hook up all the little cables (like the SCSI ID and disk activity
- LED lines).</para>
- </sect4>
- </sect3>
-
- <sect3>
- <title>* IDE hard drives</title>
-
- <para></para>
- </sect3>
- </sect2>
-
- <sect2>
- <title>Tape drives</title>
-
- <para><emphasis>Contributed by &a.jmb;. 2 July
- 1996.</emphasis></para>
-
- <sect3>
- <title>General tape access commands</title>
-
- <para>&man.mt.1; provides generic access to the tape drives. Some of
- the more common commands are <command>rewind</command>,
- <command>erase</command>, and <command>status</command>. See the
- &man.mt.1; manual page for a detailed description.</para>
- </sect3>
-
- <sect3>
- <title>Controller Interfaces</title>
-
- <para>There are several different interfaces that support tape drives.
- The interfaces are SCSI, IDE, Floppy and Parallel Port. A wide
- variety of tape drives are available for these interfaces.
- Controllers are discussed in <link
- linkend="hw-storage-controllers">Disk/tape
- controllers</link>.</para>
- </sect3>
-
- <sect3>
- <title>SCSI drives</title>
-
- <para>The &man.st.4; driver provides support for 8mm (Exabyte), 4mm
- (DAT: Digital Audio Tape), QIC (Quarter-Inch Cartridge), DLT
- (Digital Linear Tape), QIC Mini cartridge and 9-track (remember the
- big reels that you see spinning in Hollywood computer rooms) tape
- drives. See the &man.st.4; manual page for a detailed
- description.</para>
-
- <para>The drives listed below are currently being used by members of
- the FreeBSD community. They are not the only drives that will work
- with FreeBSD. They just happen to be the ones that we use.</para>
-
- <sect4>
- <title>4mm (DAT: Digital Audio Tape)</title>
-
- <para><link linkend="hw-storage-python-28454">Archive Python
- 28454</link></para>
-
- <para><link linkend="hw-storage-python-04687">Archive Python
- 04687</link></para>
-
- <para><link linkend="hw-storage-hp1533a">HP C1533A</link></para>
-
- <para><link linkend="hw-storage-hp1534a">HP C1534A</link></para>
-
- <para><link linkend="hw-storage-hp35450a">HP 35450A</link></para>
-
- <para><link linkend="hw-storage-hp35470a">HP 35470A</link></para>
-
- <para><link linkend="hw-storage-hp35480a">HP 35480A</link></para>
-
- <para><link linkend="hw-storage-sdt5000">SDT-5000</link></para>
-
- <para><link linkend="hw-storage-wangtek6200">Wangtek
- 6200</link></para>
- </sect4>
-
- <sect4>
- <title>8mm (Exabyte)</title>
-
- <para><link linkend="hw-storage-exb8200">EXB-8200</link></para>
-
- <para><link linkend="hw-storage-exb8500">EXB-8500</link></para>
-
- <para><link linkend="hw-storage-exb8505">EXB-8505</link></para>
- </sect4>
-
- <sect4>
- <title>QIC (Quarter-Inch Cartridge)</title>
-
- <para><link linkend="hw-storage-anaconda">Archive Anaconda
- 2750</link></para>
-
- <para><link linkend="hw-storage-viper60">Archive Viper
- 60</link></para>
-
- <para><link linkend="hw-storage-viper150">Archive Viper
- 150</link></para>
-
- <para><link linkend="hw-storage-viper2525">Archive Viper
- 2525</link></para>
-
- <para><link linkend="hw-storage-tandberg3600">Tandberg TDC
- 3600</link></para>
-
- <para><link linkend="hw-storage-tandberg3620">Tandberg TDC
- 3620</link></para>
-
- <para><link linkend="hw-storage-tandberg3800">Tandberg TDC
- 3800</link></para>
-
- <para><link linkend="hw-storage-tandberg4222">Tandberg TDC
- 4222</link></para>
-
- <para><link linkend="hw-storage-wangtek5525es">Wangtek
- 5525ES</link></para>
- </sect4>
-
- <sect4>
- <title>DLT (Digital Linear Tape)</title>
-
- <para><link linkend="hw-storage-dectz87">Digital TZ87</link></para>
- </sect4>
-
- <sect4>
- <title>Mini-Cartridge</title>
-
- <para><link linkend="hw-storage-ctms3200">Conner CTMS
- 3200</link></para>
-
- <para><link linkend="hw-storage-exb2501">Exabyte 2501</link></para>
- </sect4>
-
- <sect4>
- <title>Autoloaders/Changers</title>
-
- <para><link linkend="hw-storage-hp1553a">Hewlett-Packard HP C1553A
- Autoloading DDS2</link></para>
- </sect4>
- </sect3>
-
- <sect3>
- <title>* IDE drives</title>
-
- <para></para>
- </sect3>
-
- <sect3>
- <title>Floppy drives</title>
-
- <para><link linkend="hw-storage-conner420r">Conner 420R</link></para>
- </sect3>
-
- <sect3>
- <title>* Parallel port drives</title>
-
- <para></para>
- </sect3>
-
- <sect3>
- <title>Detailed Information</title>
-
- <sect4 id="hw-storage-anaconda">
- <title>Archive Anaconda 2750</title>
-
- <para>The boot message identifier for this drive is <literal>ARCHIVE
- ANCDA 2750 28077 -003 type 1 removable SCSI 2</literal></para>
-
- <para>This is a QIC tape drive.</para>
-
- <para>Native capacity is 1.35GB when using QIC-1350 tapes. This
- drive will read and write QIC-150 (DC6150), QIC-250 (DC6250), and
- QIC-525 (DC6525) tapes as well.</para>
-
- <para>Data transfer rate is 350kB/s using
- &man.dump.8;. Rates of 530kB/s have been reported when using
- <link linkend="backups-programs-amanda">Amanda</link></para>
-
- <para>Production of this drive has been discontinued.</para>
-
- <para>The SCSI bus connector on this tape drive is reversed from
- that on most other SCSI devices. Make sure that you have enough
- SCSI cable to twist the cable one-half turn before and after the
- Archive Anaconda tape drive, or turn your other SCSI devices
- upside-down.</para>
-
- <para>Two kernel code changes are required to use this drive. This
- drive will not work as delivered.</para>
-
- <para>If you have a SCSI-2 controller, short jumper 6. Otherwise,
- the drive behaves are a SCSI-1 device. When operating as a SCSI-1
- device, this drive, <quote>locks</quote> the SCSI bus during some
- tape operations, including: fsf, rewind, and rewoffl.</para>
-
- <para>If you are using the NCR SCSI controllers, patch the file
- <filename>/usr/src/sys/pci/ncr.c</filename> (as shown below).
- Build and install a new kernel.</para>
-
- <programlisting>
-*** 4831,4835 ****
- };
-
-! if (np-&gt;latetime&gt;4) {
- /*
- ** Although we tried to wake it up,
---- 4831,4836 ----
- };
-
-! if (np-&gt;latetime&gt;1200) {
- /*
- ** Although we tried to wake it up,</programlisting>
-
- <para>Reported by: &a.jmb;</para>
- </sect4>
-
- <sect4 id="hw-storage-python-28454">
- <title>Archive Python 28454</title>
-
- <para>The boot message identifier for this drive is <literal>ARCHIVE
- Python 28454-XXX4ASB</literal> <literal>type 1 removable SCSI
- 2</literal> <literal>density code 0x8c, 512-byte
- blocks</literal></para>
-
- <para>This is a DDS-1 tape drive.</para>
-
- <para>Native capacity is 2.5GB on 90m tapes.</para>
-
- <para>Data transfer rate is XXX.</para>
-
- <para>This drive was repackaged by Sun Microsystems as model
- 595-3067.</para>
-
- <para>Reported by: Bob Bishop <email>rb@gid.co.uk</email></para>
-
- <para>Throughput is in the 1.5 MByte/sec range, however this will
- drop if the disks and tape drive are on the same SCSI
- controller.</para>
-
- <para>Reported by: Robert E. Seastrom
- <email>rs@seastrom.com</email></para>
- </sect4>
-
- <sect4 id="hw-storage-python-04687">
- <title>Archive Python 04687</title>
-
- <para>The boot message identifier for this drive is <literal>ARCHIVE
- Python 04687-XXX 6580</literal> <literal>Removable Sequential
- Access SCSI-2 device</literal></para>
-
- <para>This is a DAT-DDS-2 drive.</para>
-
- <para>Native capacity is 4GB when using 120m tapes.</para>
-
- <para>This drive supports hardware data compression. Switch 4
- controls MRS (Media Recognition System). MRS tapes have stripes
- on the transparent leader. Switch 4 <emphasis>off</emphasis>
- enables MRS, <emphasis>on</emphasis> disables MRS.</para>
-
- <para>Parity is controlled by switch 5. Switch 5
- <emphasis>on</emphasis> to enable parity control. Compression is
- enabled with Switch 6 <emphasis>off</emphasis>. It is possible to
- override compression with the <literal>SCSI MODE SELECT</literal>
- command (see &man.mt.1;).</para>
-
- <para>Data transfer rate is 800kB/s.</para>
- </sect4>
-
- <sect4 id="hw-storage-viper60">
- <title>Archive Viper 60</title>
-
- <para>The boot message identifier for this drive is <literal>ARCHIVE
- VIPER 60 21116 -007</literal> <literal>type 1 removable SCSI
- 1</literal></para>
-
- <para>This is a QIC tape drive.</para>
-
- <para>Native capacity is 60MB.</para>
-
- <para>Data transfer rate is XXX.</para>
-
- <para>Production of this drive has been discontinued.</para>
-
- <para>Reported by: Philippe Regnauld
- <email>regnauld@hsc.fr</email></para>
- </sect4>
-
- <sect4 id="hw-storage-viper150">
- <title>Archive Viper 150</title>
-
- <para>The boot message identifier for this drive is <literal>ARCHIVE
- VIPER 150 21531 -004</literal> <literal>Archive Viper 150 is a
- known rogue</literal> <literal>type 1 removable SCSI
- 1</literal>. A multitude of firmware revisions exist for this
- drive. Your drive may report different numbers (e.g
- <literal>21247 -005</literal>.</para>
-
- <para>This is a QIC tape drive.</para>
-
- <para>Native capacity is 150/250MB. Both 150MB (DC6150) and 250MB
- (DC6250) tapes have the recording format. The 250MB tapes are
- approximately 67% longer than the 150MB tapes. This drive can
- read 120MB tapes as well. It can not write 120MB tapes.</para>
-
- <para>Data transfer rate is 100kB/s</para>
-
- <para>This drive reads and writes DC6150 (150MB) and DC6250 (250MB)
- tapes.</para>
-
- <para>This drives quirks are known and pre-compiled into the scsi
- tape device driver (&man.st.4;).</para>
-
- <para>Under FreeBSD 2.2-CURRENT, use <command>mt blocksize
- 512</command> to set the blocksize. (The particular drive had
- firmware revision 21247 -005. Other firmware revisions may behave
- differently) Previous versions of FreeBSD did not have this
- problem.</para>
-
- <para>Production of this drive has been discontinued.</para>
-
- <para>Reported by: Pedro A M Vazquez
- <email>vazquez@IQM.Unicamp.BR</email></para>
-
- <para>&a.msmith;</para>
- </sect4>
-
- <sect4 id="hw-storage-viper2525">
- <title>Archive Viper 2525</title>
-
- <para>The boot message identifier for this drive is <literal>ARCHIVE
- VIPER 2525 25462 -011</literal> <literal>type 1 removable SCSI
- 1</literal></para>
-
- <para>This is a QIC tape drive.</para>
-
- <para>Native capacity is 525MB.</para>
-
- <para>Data transfer rate is 180kB/s at 90 inches/sec.</para>
-
- <para>The drive reads QIC-525, QIC-150, QIC-120 and QIC-24 tapes.
- Writes QIC-525, QIC-150, and QIC-120.</para>
-
- <para>Firmware revisions prior to <literal>25462 -011</literal> are
- bug ridden and will not function properly.</para>
-
- <para>Production of this drive has been discontinued.</para>
- </sect4>
-
- <sect4 id="hw-storage-conner420r">
- <title>Conner 420R</title>
-
- <para>The boot message identifier for this drive is <literal>Conner
- tape</literal>.</para>
-
- <para>This is a floppy controller, mini cartridge tape drive.</para>
-
- <para>Native capacity is XXXX</para>
-
- <para>Data transfer rate is XXX</para>
-
- <para>The drive uses QIC-80 tape cartridges.</para>
-
- <para>Reported by: Mark Hannon
- <email>mark@seeware.DIALix.oz.au</email></para>
- </sect4>
-
- <sect4 id="hw-storage-ctms3200">
- <title>Conner CTMS 3200</title>
-
- <para>The boot message identifier for this drive is <literal>CONNER
- CTMS 3200 7.00</literal> <literal>type 1 removable SCSI
- 2</literal>.</para>
-
- <para>This is a mini cartridge tape drive.</para>
-
- <para>Native capacity is XXXX</para>
-
- <para>Data transfer rate is XXX</para>
-
- <para>The drive uses QIC-3080 tape cartridges.</para>
-
- <para>Reported by: Thomas S. Traylor
- <email>tst@titan.cs.mci.com</email></para>
- </sect4>
-
- <sect4 id="hw-storage-dectz87">
- <title><ulink
- url="http://www.digital.com/info/Customer-Update/931206004.txt.html">DEC TZ87</ulink></title>
-
- <para>The boot message identifier for this drive is <literal>DEC
- TZ87 (C) DEC 9206</literal> <literal>type 1 removable SCSI
- 2</literal> <literal>density code 0x19</literal></para>
-
- <para>This is a DLT tape drive.</para>
-
- <para>Native capacity is 10GB.</para>
-
- <para>This drive supports hardware data compression.</para>
-
- <para>Data transfer rate is 1.2MB/s.</para>
-
- <para>This drive is identical to the Quantum DLT2000. The drive
- firmware can be set to emulate several well-known drives,
- including an Exabyte 8mm drive.</para>
-
- <para>Reported by: &a.wilko;</para>
- </sect4>
-
- <sect4 id="hw-storage-exb2501">
- <title><ulink
- url="http://www.Exabyte.COM:80/Products/Minicartridge/2501/Rfeatures.html">Exabyte EXB-2501</ulink></title>
-
- <para>The boot message identifier for this drive is <literal>EXABYTE
- EXB-2501</literal></para>
-
- <para>This is a mini-cartridge tape drive.</para>
-
- <para>Native capacity is 1GB when using MC3000XL
- mini cartridges.</para>
-
- <para>Data transfer rate is XXX</para>
-
- <para>This drive can read and write DC2300 (550MB), DC2750 (750MB),
- MC3000 (750MB), and MC3000XL (1GB) mini cartridges.</para>
-
- <para>WARNING: This drive does not meet the SCSI-2 specifications.
- The drive locks up completely in response to a SCSI MODE_SELECT
- command unless there is a formatted tape in the drive. Before
- using this drive, set the tape blocksize with</para>
-
- <screen>&prompt.root; <userinput>mt -f /dev/st0ctl.0 blocksize 1024</userinput></screen>
-
- <para>Before using a mini cartridge for the first time, the
- mini cartridge must be formated. FreeBSD 2.1.0-RELEASE and
- earlier:</para>
-
- <screen>&prompt.root; <userinput>/sbin/scsi -f /dev/rst0.ctl -s 600 -c "4 0 0 0 0 0"</userinput></screen>
-
- <para>(Alternatively, fetch a copy of the
- <command>scsiformat</command> shell script from FreeBSD
- 2.1.5/2.2.) FreeBSD 2.1.5 and later:</para>
-
- <screen>&prompt.root; <userinput>/sbin/scsiformat -q -w /dev/rst0.ctl</userinput></screen>
-
- <para>Right now, this drive cannot really be recommended for
- FreeBSD.</para>
-
- <para>Reported by: Bob Beaulieu
- <email>ez@eztravel.com</email></para>
- </sect4>
-
- <sect4 id="hw-storage-exb8200">
- <title>Exabyte EXB-8200</title>
-
- <para>The boot message identifier for this drive is <literal>EXABYTE
- EXB-8200 252X</literal> <literal>type 1 removable SCSI
- 1</literal></para>
-
- <para>This is an 8mm tape drive.</para>
-
- <para>Native capacity is 2.3GB.</para>
-
- <para>Data transfer rate is 270kB/s.</para>
-
- <para>This drive is fairly slow in responding to the SCSI bus during
- boot. A custom kernel may be required (set SCSI_DELAY to 10
- seconds).</para>
-
- <para>There are a large number of firmware configurations for this
- drive, some have been customized to a particular vendor's
- hardware. The firmware can be changed via EPROM
- replacement.</para>
-
- <para>Production of this drive has been discontinued.</para>
-
- <para>Reported by: &a.msmith;</para>
- </sect4>
-
- <sect4 id="hw-storage-exb8500">
- <title>Exabyte EXB-8500</title>
-
- <para>The boot message identifier for this drive is <literal>EXABYTE
- EXB-8500-85Qanx0 0415</literal> <literal>type 1 removable SCSI
- 2</literal></para>
-
- <para>This is an 8mm tape drive.</para>
-
- <para>Native capacity is 5GB.</para>
-
- <para>Data transfer rate is 300kB/s.</para>
-
- <para>Reported by: Greg Lehey <email>grog@lemis.de</email></para>
- </sect4>
-
- <sect4 id="hw-storage-exb8505">
- <title><ulink
- url="http://www.Exabyte.COM:80/Products/8mm/8505XL/Rfeatures.html">Exabyte EXB-8505</ulink></title>
-
- <para>The boot message identifier for this drive is
- <literal>EXABYTE EXB-85058SQANXR1 05B0</literal> <literal>type 1
- removable SCSI 2</literal></para>
-
- <para>This is an 8mm tape drive which supports compression, and is
- upward compatible with the EXB-5200 and EXB-8500.</para>
-
- <para>Native capacity is 5GB.</para>
-
- <para>The drive supports hardware data compression.</para>
-
- <para>Data transfer rate is 300kB/s.</para>
-
- <para>Reported by: Glen Foster
- <email>gfoster@gfoster.com</email></para>
- </sect4>
-
- <sect4 id="hw-storage-hp1533a">
- <title>Hewlett-Packard HP C1533A</title>
-
- <para>The boot message identifier for this drive is <literal>HP
- C1533A 9503</literal> <literal>type 1 removable SCSI
- 2</literal>.</para>
-
- <para>This is a DDS-2 tape drive. DDS-2 means hardware data
- compression and narrower tracks for increased data
- capacity.</para>
-
- <para>Native capacity is 4GB when using 120m tapes. This drive
- supports hardware data compression.</para>
-
- <para>Data transfer rate is 510kB/s.</para>
-
- <para>This drive is used in Hewlett-Packard's SureStore 6000eU and
- 6000i tape drives and C1533A DDS-2 DAT drive.</para>
-
- <para>The drive has a block of 8 dip switches. The proper settings
- for FreeBSD are: 1 ON; 2 ON; 3 OFF; 4 ON; 5 ON; 6 ON; 7 ON; 8
- ON.</para>
-
- <informaltable frame="none">
- <tgroup cols="3">
- <thead>
- <row>
- <entry>switch 1</entry>
- <entry>switch 2</entry>
- <entry>Result</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry>On</entry>
- <entry>On</entry>
- <entry>Compression enabled at power-on, with host
- control</entry>
- </row>
-
- <row>
- <entry>On</entry>
- <entry>Off</entry>
- <entry>Compression enabled at power-on, no host
- control</entry>
- </row>
-
- <row>
- <entry>Off</entry>
- <entry>On</entry>
- <entry>Compression disabled at power-on, with host
- control</entry>
- </row>
-
- <row>
- <entry>Off</entry>
- <entry>Off</entry>
- <entry>Compression disabled at power-on, no host
- control</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>Switch 3 controls MRS (Media Recognition System). MRS tapes
- have stripes on the transparent leader. These identify the tape
- as DDS (Digital Data Storage) grade media. Tapes that do not have
- the stripes will be treated as write-protected. Switch 3 OFF
- enables MRS. Switch 3 ON disables MRS.</para>
-
- <para>See <ulink url="http://www.hp.com/tape/c_intro.html">HP
- SureStore Tape Products</ulink> and <ulink
- url="http://www.impediment.com/hp/hp_technical.html">Hewlett-Packard
- Disk and Tape Technical Information</ulink> for more information
- on configuring this drive.</para>
-
- <para><emphasis>Warning:</emphasis> Quality control on these drives
- varies greatly. One FreeBSD core-team member has returned 2 of
- these drives. Neither lasted more than 5 months.</para>
-
- <para>Reported by: &a.se;</para>
- </sect4>
-
- <sect4 id="hw-storage-hp1534a">
- <title>Hewlett-Packard HP 1534A</title>
-
- <para>The boot message identifier for this drive is <literal>HP
- HP35470A T503</literal> <literal>type 1 removable SCSI
- 2</literal> <literal>Sequential-Access density code 0x13,
- variable blocks</literal>.</para>
-
- <para>This is a DDS-1 tape drive. DDS-1 is the original DAT tape
- format.</para>
-
- <para>Native capacity is 2GB when using 90m tapes.</para>
-
- <para>Data transfer rate is 183kB/s.</para>
-
- <para>The same mechanism is used in Hewlett-Packard's SureStore
- <ulink url="http://www.dmo.hp.com/tape/sst2000.htm">2000i</ulink>
- tape drive, C35470A DDS format DAT drive, C1534A DDS format DAT
- drive and HP C1536A DDS format DAT drive.</para>
-
- <para>The HP C1534A DDS format DAT drive has two indicator lights,
- one green and one amber. The green one indicates tape action:
- slow flash during load, steady when loaded, fast flash during
- read/write operations. The amber one indicates warnings: slow
- flash when cleaning is required or tape is nearing the end of its
- useful life, steady indicates an hard fault. (factory service
- required?)</para>
-
- <para>Reported by Gary Crutcher
- <email>gcrutchr@nightflight.com</email></para>
- </sect4>
-
- <sect4 id="hw-storage-hp1553a">
- <title>Hewlett-Packard HP C1553A Autoloading DDS2</title>
-
- <para>The boot message identifier for this drive is "".</para>
-
- <para>This is a DDS-2 tape drive with a tape changer. DDS-2 means
- hardware data compression and narrower tracks for increased data
- capacity.</para>
-
- <para>Native capacity is 24GB when using 120m tapes. This drive
- supports hardware data compression.</para>
-
- <para>Data transfer rate is 510kB/s (native).</para>
-
- <para>This drive is used in Hewlett-Packard's SureStore <ulink
- url="http://www.dmo.hp.com/tape/sst12000.htm">12000e</ulink>
- tape drive.</para>
-
- <para>The drive has two selectors on the rear panel. The selector
- closer to the fan is SCSI id. The other selector should be set to
- 7.</para>
-
- <para>There are four internal switches. These should be set: 1 ON;
- 2 ON; 3 ON; 4 OFF.</para>
-
- <para>At present the kernel drivers do not automatically change
- tapes at the end of a volume. This shell script can be used to
- change tapes:</para>
-
- <programlisting>
-#!/bin/sh
-PATH="/sbin:/usr/sbin:/bin:/usr/bin"; export PATH
-
-usage()
-{
- echo "Usage: dds_changer [123456ne] raw-device-name
- echo "1..6 = Select cartridge"
- echo "next cartridge"
- echo "eject magazine"
- exit 2
-}
-
-if [ $# -ne 2 ] ; then
- usage
-fi
-
-cdb3=0
-cdb4=0
-cdb5=0
-
-case $1 in
- [123456])
- cdb3=$1
- cdb4=1
- ;;
- n)
- ;;
- e)
- cdb5=0x80
- ;;
- ?)
- usage
- ;;
-esac
-
-scsi -f $2 -s 100 -c "1b 0 0 $cdb3 $cdb4 $cdb5"</programlisting>
- </sect4>
-
- <sect4 id="hw-storage-hp35450a">
- <title>Hewlett-Packard HP 35450A</title>
-
- <para>The boot message identifier for this drive is <literal>HP
- HP35450A -A C620</literal> <literal>type 1 removable SCSI
- 2</literal> <literal>Sequential-Access density code
- 0x13</literal></para>
-
- <para>This is a DDS-1 tape drive. DDS-1 is the original DAT tape
- format.</para>
-
- <para>Native capacity is 1.2GB.</para>
-
- <para>Data transfer rate is 160kB/s.</para>
-
- <para>Reported by: Mark Thompson
- <email>mark.a.thompson@pobox.com</email></para>
- </sect4>
-
- <sect4 id="hw-storage-hp35470a">
- <title>Hewlett-Packard HP 35470A</title>
-
- <para>The boot message identifier for this drive is <literal>HP
- HP35470A 9 09</literal> <literal>type 1 removable SCSI
- 2</literal></para>
-
- <para>This is a DDS-1 tape drive. DDS-1 is the original DAT tape
- format.</para>
-
- <para>Native capacity is 2GB when using 90m tapes.</para>
-
- <para>Data transfer rate is 183kB/s.</para>
-
- <para>The same mechanism is used in Hewlett-Packard's SureStore
- <ulink url="http://www.dmo.hp.com/tape/sst2000.htm">2000i</ulink>
- tape drive, C35470A DDS format DAT drive, C1534A DDS format DAT
- drive, and HP C1536A DDS format DAT drive.</para>
-
- <para><emphasis>Warning:</emphasis> Quality control on these drives
- varies greatly. One FreeBSD core-team member has returned 5 of
- these drives. None lasted more than 9 months.</para>
-
- <para>Reported by: David Dawes
- <email>dawes@rf900.physics.usyd.edu.au</email> (9 09)</para>
-
- </sect4>
-
- <sect4 id="hw-storage-hp35480a">
- <title>Hewlett-Packard HP 35480A</title>
-
- <para>The boot message identifier for this drive is <literal>HP
- HP35480A 1009</literal> <literal>type 1 removable SCSI
- 2</literal> <literal>Sequential-Access density code
- 0x13</literal>.</para>
-
- <para>This is a DDS-DC tape drive. DDS-DC is DDS-1 with hardware
- data compression. DDS-1 is the original DAT tape format.</para>
-
- <para>Native capacity is 2GB when using 90m tapes. It cannot handle
- 120m tapes. This drive supports hardware data compression.
- Please refer to the section on <link
- linkend="hw-storage-hp1533a">HP C1533A</link> for the proper
- switch settings.</para>
-
- <para>Data transfer rate is 183kB/s.</para>
-
- <para>This drive is used in Hewlett-Packard's SureStore <ulink
- url="http://www.dmo.hp.com/tape/sst5000.htm">5000eU</ulink> and
- <ulink url="http://www.dmo.hp.com/tape/sst5000.htm">5000i</ulink>
- tape drives and C35480A DDS format DAT drive..</para>
-
- <para>This drive will occasionally hang during a tape eject
- operation (<command>mt offline</command>). Pressing the front
- panel button will eject the tape and bring the tape drive back to
- life.</para>
-
- <para>WARNING: HP 35480-03110 only. On at least two occasions this
- tape drive when used with FreeBSD 2.1.0, an IBM Server 320 and an
- 2940W SCSI controller resulted in all SCSI disk partitions being
- lost. The problem has not be analyzed or resolved at this
- time.</para>
- </sect4>
-
- <sect4 id="hw-storage-sdt5000">
- <title><ulink
- url="http://www.sel.sony.com/SEL/ccpg/storage/tape/t5000.html">Sony SDT-5000</ulink></title>
-
- <para>There are at least two significantly different models: one is
- a DDS-1 and the other DDS-2. The DDS-1 version is
- <literal>SDT-5000 3.02</literal>. The DDS-2 version is
- <literal>SONY SDT-5000 327M</literal>. The DDS-2 version has a 1MB
- cache. This cache is able to keep the tape streaming in almost
- any circumstances.</para>
-
- <para>The boot message identifier for this drive is <literal>SONY
- SDT-5000 3.02</literal> <literal>type 1 removable SCSI
- 2</literal> <literal>Sequential-Access density code
- 0x13</literal></para>
-
- <para>Native capacity is 4GB when using 120m tapes. This drive
- supports hardware data compression.</para>
-
- <para>Data transfer rate is depends upon the model or the drive. The
- rate is 630kB/s for the <literal>SONY SDT-5000 327M</literal>
- while compressing the data. For the <literal>SONY SDT-5000
- 3.02</literal>, the data transfer rate is 225kB/s.</para>
-
- <para>In order to get this drive to stream, set the blocksize to 512
- bytes (<command>mt blocksize 512</command>) reported by Kenneth
- Merry <email>ken@ulc199.residence.gatech.edu</email>.</para>
-
- <para><literal>SONY SDT-5000 327M</literal> information reported by
- Charles Henrich <email>henrich@msu.edu</email>.</para>
-
- <para>Reported by: &a.jmz;</para>
- </sect4>
-
- <sect4 id="hw-storage-tandberg3600">
- <title>Tandberg TDC 3600</title>
-
- <para>The boot message identifier for this drive is
- <literal>TANDBERG TDC 3600 =08:</literal> <literal>type 1
- removable SCSI 2</literal></para>
-
- <para>This is a QIC tape drive.</para>
-
- <para>Native capacity is 150/250MB.</para>
-
- <para>This drive has quirks which are known and work around code is
- present in the scsi tape device driver (&man.st.4;).
- Upgrading the firmware to XXX version will fix the quirks and
- provide SCSI 2 capabilities.</para>
-
- <para>Data transfer rate is 80kB/s.</para>
-
- <para>IBM and Emerald units will not work. Replacing the firmware
- EPROM of these units will solve the problem.</para>
-
- <para>Reported by: &a.msmith;</para>
- </sect4>
-
- <sect4 id="hw-storage-tandberg3620">
- <title>Tandberg TDC 3620</title>
-
- <para>This is very similar to the <link
- linkend="hw-storage-tandberg3600">Tandberg TDC 3600</link>
- drive.</para>
-
- <para>Reported by: &a.joerg;</para>
- </sect4>
-
- <sect4 id="hw-storage-tandberg3800">
- <title>Tandberg TDC 3800</title>
-
- <para>The boot message identifier for this drive is
- <literal>TANDBERG TDC 3800 =04Y</literal> <literal>Removable
- Sequential Access SCSI-2 device</literal></para>
-
- <para>This is a QIC tape drive.</para>
-
- <para>Native capacity is 525MB.</para>
-
- <para>Reported by: &a.jhs;</para>
- </sect4>
-
- <sect4 id="hw-storage-tandberg4222">
- <title>Tandberg TDC 4222</title>
-
- <para>The boot message identifier for this drive is
- <literal>TANDBERG TDC 4222 =07</literal> <literal>type 1 removable
- SCSI 2</literal></para>
-
- <para>This is a QIC tape drive.</para>
-
- <para>Native capacity is 2.5GB. The drive will read all cartridges
- from the 60 MB (DC600A) upwards, and write 150 MB (DC6150)
- upwards. Hardware compression is optionally supported for the 2.5
- GB cartridges.</para>
-
- <para>This drives quirks are known and pre-compiled into the scsi
- tape device driver (&man.st.4;) beginning with FreeBSD
- 2.2-CURRENT. For previous versions of FreeBSD, use
- <command>mt</command> to read one block from the tape, rewind the
- tape, and then execute the backup program (<command>mt fsr 1; mt
- rewind; dump ...</command>)</para>
-
- <para>Data transfer rate is 600kB/s (vendor claim with compression),
- 350 KB/s can even be reached in start/stop mode. The rate
- decreases for smaller cartridges.</para>
-
- <para>Reported by: &a.joerg;</para>
- </sect4>
-
- <sect4 id="hw-storage-wangtek5525es">
- <title>Wangtek 5525ES</title>
-
- <para>The boot message identifier for this drive is <literal>WANGTEK
- 5525ES SCSI REV7 3R1</literal> <literal>type 1 removable SCSI
- 1</literal> <literal>density code 0x11, 1024-byte
- blocks</literal></para>
-
- <para>This is a QIC tape drive.</para>
-
- <para>Native capacity is 525MB.</para>
-
- <para>Data transfer rate is 180kB/s.</para>
-
- <para>The drive reads 60, 120, 150, and 525MB tapes. The drive will
- not write 60MB (DC600 cartridge) tapes. In order to overwrite 120
- and 150 tapes reliably, first erase (<command>mt erase</command>)
- the tape. 120 and 150 tapes used a wider track (fewer tracks per
- tape) than 525MB tapes. The <quote>extra</quote> width of the
- previous tracks is not overwritten, as a result the new data lies
- in a band surrounded on both sides by the previous data unless the
- tape have been erased.</para>
-
- <para>This drives quirks are known and pre-compiled into the scsi
- tape device driver (&man.st.4;).</para>
-
- <para>Other firmware revisions that are known to work are:
- M75D</para>
-
- <para>Reported by: Marc van Kempen <email>marc@bowtie.nl</email>
- <literal>REV73R1</literal> Andrew Gordon
- <email>Andrew.Gordon@net-tel.co.uk</email>
- <literal>M75D</literal></para>
- </sect4>
-
- <sect4 id="hw-storage-wangtek6200">
- <title>Wangtek 6200</title>
-
- <para>The boot message identifier for this drive is <literal>WANGTEK
- 6200-HS 4B18</literal> <literal>type 1 removable SCSI
- 2</literal> <literal>Sequential-Access density code
- 0x13</literal></para>
-
- <para>This is a DDS-1 tape drive.</para>
-
- <para>Native capacity is 2GB using 90m tapes.</para>
-
- <para>Data transfer rate is 150kB/s.</para>
-
- <para>Reported by: Tony Kimball <email>alk@Think.COM</email></para>
- </sect4>
- </sect3>
-
- <sect3>
- <title>* Problem drives</title>
-
- <para></para>
- </sect3>
- </sect2>
-
- <sect2>
- <title>CDROM drives</title>
-
- <para><emphasis>Contributed by &a.obrien;. 23 November
- 1997.</emphasis></para>
-
- <para>As mentioned in <link linkend="hw-jordans-picks-cdrom">Jordan's
- Picks</link> Generally speaking those in <emphasis>The FreeBSD
- Project</emphasis> prefer SCSI CDROM drives over IDE CDROM drives.
- However not all SCSI CDROM drives are equal. Some feel the quality of
- some SCSI CDROM drives have been deteriorating to that of IDE CDROM
- drives. Toshiba used to be the favored stand-by, but many on the SCSI
- mailing list have found displeasure with the 12x speed XM-5701TA as
- its volume (when playing audio CDROMs) is not controllable by the
- various audio player software.</para>
-
- <para>Another area where SCSI CDROM manufacturers are cutting corners is
- adherence to the <link linkend="scsi-further-reading">SCSI
- specification</link>. Many SCSI CDROMs will respond to <link
- linkend="scsi-rogue-devices">multiple LUNs</link> for its target
- address. Known violators include the 6x Teac CD-56S 1.0D.</para>
- </sect2>
-
- <sect2>
- <title>* Other</title>
-
- <para></para>
- </sect2>
- </sect1>
-
- <sect1 id="hw-other">
- <title>* Other</title>
-
-
- <sect2>
- <title>* PCMCIA</title>
-
- <para></para>
- </sect2>
- </sect1>
-</appendix>
-
-<!--
- Local Variables:
- mode: sgml
- sgml-declaration: "../appendix.decl"
- sgml-indent-data: t
- sgml-omittag: nil
- sgml-always-quote-attributes: t
- sgml-parent-document: ("../book.sgml" "part" "appendix")
- End:
--->
-