home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 August / PCWorld_1999-08_cd.bin / doc / HOWTO / Modem-HOWTO < prev    next >
Text File  |  1999-05-24  |  157KB  |  3,565 lines

  1.   Modem-HOWTO
  2.   David S.Lawyer    <mailto:bf347@lafn.org> Contains much info
  3.   from Serial-HOWTO by Greg Hankins
  4.   v0.03, May 1999
  5.  
  6.   Help with selecting, connecting, configuring, trouble-shooting, and
  7.   understanding modems for a PC.  See Serial-HOWTO for multiport serial
  8.   boards.
  9.   ______________________________________________________________________
  10.  
  11.   Table of Contents
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.   1. Introduction
  68.  
  69.      1.1 Copyright, Trademarks, Disclaimer, & Credits
  70.         1.1.1 Copyright
  71.         1.1.2 Trademarks
  72.         1.1.3 Disclaimer
  73.         1.1.4 Credits
  74.      1.2 Future Plans, You Can Help
  75.      1.3 New Versions of this HOWTO
  76.      1.4 What is a Modem ?
  77.      1.5 Quick Install
  78.         1.5.1 External Modem Install
  79.         1.5.2 Internal Modems (on ISA bus)
  80.         1.5.3 All Modems
  81.  
  82.   2. Modem & Serial Port Basics
  83.  
  84.      2.1 Modem Converts Digital to Analog (and conversely)
  85.      2.2 What is a Serial Port ?
  86.         2.2.1 Intro to Serial
  87.         2.2.2 Pins and Wires
  88.         2.2.3 Internal Modem Contains Serial Port
  89.      2.3 IO Address & IRQ
  90.      2.4 Interrupts
  91.      2.5 Data Compression (by the Modem)
  92.      2.6 Error Correction
  93.      2.7 Data Flow (Speeds)
  94.      2.8 Flow Control
  95.         2.8.1 Flow Control Explained by an Example
  96.         2.8.2 Symptoms of No Flow Control
  97.         2.8.3 Hardware vs. Software Flow Control
  98.         2.8.4 Modem-to-Modem Flow Control
  99.      2.9 Data Flow Path; Buffers
  100.      2.10 Complex Flow Control Example
  101.      2.11 Modem Commands
  102.  
  103.   3. Configuring Modems (including the serial port)
  104.  
  105.      3.1 Configuring Overview
  106.      3.2 Configuring the IRQ and IO-Address of the Serial Port
  107.         3.2.1 Plug-and-Play
  108.         3.2.2 Using a PnP BIOS to I0-IRQ Configure
  109.         3.2.3 External Modem Configure
  110.         3.2.4 If More Than 2 Serial Ports
  111.         3.2.5 Methods for Setting IO Addresses and IRQs
  112.         3.2.6 Avoiding IO Address Conflicts of IBM 8514 Video Board
  113.      3.3 What is the current IO address and IRQ of my Serial Port ?
  114.         3.3.1 What does the device driver think?
  115.         3.3.2 What is set in my serial port hardware?
  116.      3.4 Other Configuring
  117.         3.4.1 Configuring Hardware Flow Control (RTS/CTS)
  118.      3.5 Modem Configuration (excluding serial port)
  119.         3.5.1 AT Commands
  120.         3.5.2 Init Strings: Saving and Recalling
  121.         3.5.3 Other Modem Commands
  122.  
  123.   4. Modems for a Linux PC
  124.  
  125.      4.1 External vs. Internal
  126.      4.2 External Modems
  127.         4.2.1 PnP External Modems
  128.         4.2.2 Cabling & Installation
  129.         4.2.3 What the Lights (LED's) Mean
  130.      4.3 Internal Modems
  131.      4.4 Internal Modems You Must Avoid (winmodems, etc.)
  132.      4.5 Which Internal Modems are Best to Avoid ?
  133.         4.5.1 MWave and DSP Modems
  134.         4.5.2 Rockwell (RPI) Drivers
  135.         4.5.3 PCI Modems
  136.  
  137.   5. Serial Port Devices
  138.  
  139.      5.1 Serial Port Device Names & Numbers
  140.      5.2 Creating Devices In the /dev directory
  141.      5.3 Link ttySN to /dev/modem ?
  142.      5.4 The cua Device
  143.  
  144.   6. Interesting Programs You Should Know About
  145.  
  146.      6.1 What is getty?
  147.         6.1.1 About mgetty
  148.         6.1.2 About getty_ps
  149.         6.1.3 About agetty and mingetty
  150.      6.2 What is Setserial ?
  151.         6.2.1 Intro to Setserial
  152.         6.2.2 Probing
  153.         6.2.3 Boot-time Configuration
  154.         6.2.4 IRQs
  155.      6.3 What is isapnp ?
  156.      6.4 What is wvdialconf ?
  157.      6.5 What is stty ?
  158.  
  159.   7. Trying Out Your Modem (Dialing Out)
  160.  
  161.      7.1 Are You Ready to Dial Out ?
  162.      7.2 Dialing Out with Minicom
  163.      7.3 Dialing Out with Kermit
  164.  
  165.   8. Uugetty for Dial-In (from the old Serial-HOWTO)
  166.  
  167.      8.1 Installing getty_ps
  168.      8.2 Setting up uugetty
  169.         8.2.1 Modern Modems
  170.         8.2.2 Old slow modems
  171.         8.2.3 Login Banner
  172.      8.3 Customizing uugetty
  173.  
  174.   9. What Speed Should I Use with My Modem?
  175.  
  176.      9.1 Speed and Data Compression
  177.      9.2 Where do I Set Speed ?
  178.      9.3 Can't Set a High Enough Speed
  179.      9.4 Speed Table
  180.  
  181.   10. Communications Programs And Utilities
  182.  
  183.      10.1 Minicom vs. Kermit
  184.      10.2 Lists of Programs
  185.         10.2.1 Least Popular Dialout
  186.         10.2.2 Most Popular Dialout
  187.         10.2.3 Fax
  188.         10.2.4 Voicemail
  189.         10.2.5 Dial-in (uses getty)
  190.         10.2.6 Other
  191.      10.3 (TT
  192.  
  193.   11. What Are UARTs?  How Do They Affect Performance?
  194.  
  195.   12. Troubleshooting
  196.  
  197.      12.1 Software
  198.      12.2 My Modem is Physically There but Can't be Found
  199.      12.3 "Operation not supported by device" (error message) for ttySx
  200.      12.4 Slow. Text appears on the screen slowly after long delays
  201.      12.5 Uploading (downloading) files is broken/slow
  202.      12.6 For Dial-in I Keep Getting "line NNN of inittab invalid"
  203.      12.7 When I Try To Dial Out, It Says "/dev/ttySN: Device or resource busy"
  204.      12.8 I Keep Getting "Getty respawning too fast: disabled for 5 minutes"
  205.      12.9 My Modem is Hosed after Someone Hangs Up, or uugetty doesn't respawn
  206.      12.10 uugetty Still Doesn't Work
  207.  
  208.   13. Flash Upgrades
  209.  
  210.   14. Problems Explained
  211.  
  212.      14.1 Interrupt Mis-set
  213.      14.2 Interrupt Conflicts
  214.  
  215.   15. Other Sources of Information
  216.  
  217.      15.1 Misc
  218.      15.2 Books
  219.      15.3 HOWTOs
  220.      15.4 Usenet newsgroups
  221.      15.5 Web Sites
  222.  
  223.   16. Appendix A:  How Modems Work (technical) (unfinished)
  224.  
  225.      16.1 Modulation Details
  226.         16.1.1 Intro to Modulation
  227.         16.1.2 Frequency Modulation
  228.         16.1.3 Amplitude Modulation
  229.         16.1.4 Phase Modulation
  230.         16.1.5 Combination Modulation
  231.         16.1.6 56k Modems (v.90)
  232.  
  233.   17. Appendix B:  "baud" vs. "bps"
  234.  
  235.      17.1 A simple example
  236.      17.2 Real examples
  237.  
  238.   18. Appendix C:  Terminal Server Connection
  239.  
  240.   19. Appendix D:  Other Types of Modems
  241.  
  242.      19.1 Digital-to-Digital "Modems"
  243.      19.2 ISDN "Modems"
  244.      19.3 Digital Subscriber Line (DSL)
  245.  
  246.  
  247.   ______________________________________________________________________
  248.  
  249.   1.  Introduction
  250.  
  251.   This covers conventional modems for PC's, mainly modems on the ISA bus
  252.   (although much of this should also apply to the PCI bus).  For modems
  253.   on the PCMCIA bus see the PCMCIA-HOWTO: PCMCIA serial and modem
  254.   devices.
  255.  
  256.  
  257.   1.1.  Copyright, Trademarks, Disclaimer, & Credits
  258.  
  259.   1.1.1.  Copyright
  260.  
  261.   Copyright (c) 1998-9 by David S. Lawyer and Greg Hankins.  Please
  262.   freely copy and distribute (sell or give away) this document.  For
  263.   corrections and minor changes contact the maintainer.  Otherwise you
  264.   may create derivative works and distribute them provided you:
  265.   1. Discuss it with the maintainer (if there is one).  2. Put the
  266.   derivative work at the mirrored LDP Internet site (or the like) for
  267.   free downloading.  3. License the work in the spirit of this license
  268.   or use GPL.  4. Give due credit to previous authors and major
  269.   contributors.
  270.  
  271.  
  272.   1.1.2.  Trademarks
  273.  
  274.   If certain words are trademarks, the context should make it clear to
  275.   whom they belong.  For example "MS Windows" (or just "Windows")
  276.   implies that "Windows" belongs to Microsoft (MS).  "Hayes" is a
  277.   trademark of Microcomputer Products Inc.  I use "winmodem" to mean any
  278.   modem which requires MS-Windows and not in the trademark sense.
  279.  
  280.  
  281.   1.1.3.  Disclaimer
  282.  
  283.   Much of the info in this HOWTO was obtained from the previous Serial-
  284.   HOWTO, the Internet, etc. and may be unreliable.  While I haven't
  285.   intentionally tried to mislead you, there are likely a number of
  286.   errors in this document.  Please let me know about them.  Since this
  287.   is free documentation, it should be obvious that neither I nor
  288.   previous authors can be held legally responsible for any errors.
  289.  
  290.  
  291.   1.1.4.  Credits
  292.  
  293.   The following is only a rough approximation of how version 0.0 of this
  294.   document was created:  About 1/3 of the material here was lifted
  295.   directly from Serial-HOWTO v. 1.11 by Greg Hankins.
  296.   <mailto:gregh@cc.gatech.edu> (with his permission).  About another 1/3
  297.   was taken from that Serial-HOWTO and revised.  The remaining 1/3 is
  298.   newly created by the author: David S. Lawyer  <mailto:bf347@lafn.org>.
  299.  
  300.  
  301.   1.2.  Future Plans, You Can Help
  302.  
  303.   An explanation of how to set up modems for dial-in is lacking in this
  304.   version but should be included in the next.  Please let me know of any
  305.   errors in facts, opinions, logic, spelling, grammar, clarity, links,
  306.   etc.  But first, if the date is over a months old, check to see that
  307.   you have the latest version.  Please send me any other info that you
  308.   think belongs in this document.  The French "Modems-HOWTO" needs to be
  309.   somehow merged with this document (but I don't know French).
  310.  
  311.  
  312.   1.3.  New Versions of this HOWTO
  313.  
  314.   New versions of this Modem-HOWTO come out every month or so since
  315.   modem situation is rapidly changing (and since I'm still learning).
  316.   Your problem might be solved in the latest version.  It will be
  317.   available to browse and/or download at LDP mirror sites.  For a list
  318.   of such sites see:  <http://metalab.unc.edu/LDP/mirrors.html> If you
  319.   only want to quickly check the date of the latest version you may not
  320.   want to use a mirror site so check out:
  321.   <http://metalab.unc.edu/LDP/HOWTO/Modem-HOWTO.html>.
  322.  
  323.  
  324.   1.4.  What is a Modem ?
  325.  
  326.   A modem is a device that lets one send digital signals over ordinary
  327.   telephone lines not designed for digital signals.  If telephone lines
  328.   were all digital then you wouldn't need a modem.  It permits your
  329.   computer to connect to and communicate with the rest of the world.
  330.   When you use a modem, you normally use a communication program or web
  331.   browser (which includes such a program) to utilize the modem and dial-
  332.   out on a telephone line.  Advanced modem users can set things up so
  333.   that others may phone in to them and use their computer.  This is
  334.   called "dial-in".
  335.  
  336.   There are two basic types of modems for a PC: external and internal.
  337.   The external sets on your desk outside the PC while the internal is
  338.   not visible since it's inside the PC.  The external modem plugs into a
  339.   connector on the back of the PC known as a "serial port".  The
  340.   internal modem is a card that is inserted inside the computer and has
  341.   an (invisible) serial port built into it.  For a more detailed
  342.   comparison see ``External vs. Internal''.  Thus when you get an
  343.   internal modem, you also get a dedicated serial port (which can only
  344.   be used with the modem and not with anything else such as another
  345.   modem or a printer).  In Linux, the serial ports are named ttyS0,
  346.   ttyS1, etc. (corresponding respectively to COM1, COM2, etc. in
  347.   Dos/Windows).
  348.  
  349.   The serial port is not to be confused with the "Universal Serial Bus"
  350.   (USB) which uses a special modular connector and may be used with
  351.   modems in the future.  See ``Modem & Serial Port Basics'' for more
  352.   details on modems and serial ports.
  353.  
  354.  
  355.   1.5.  Quick Install
  356.  
  357.   1.5.1.  External Modem Install
  358.  
  359.   With a straight-thru or modem cable, connect the modem to an unused
  360.   serial port on the PC.  Make sure you know the name of the serial
  361.   port: COM1 is ttyS0, COM2 is ttyS1.  You may need to check the BIOS
  362.   setup menu to determine this.  Plug in the power cord to provide power
  363.   to the modem.  See ``All Modems'' for further instructions.
  364.  
  365.  
  366.   1.5.2.  Internal Modems (on ISA bus)
  367.  
  368.   (See ``PCI Modems'' for the PCI bus) If the modem says it will only
  369.   work under MS Windows, you are out of luck.  If you already have 2
  370.   serial ports, make this the 3rd serial port (ttyS2 = COM3).  Find an
  371.   unused IRQ number to use.  An unused one is often IRQ5 for the 2nd
  372.   parallel port or a sound card (which you may not have).  Then set the
  373.   jumpers (or the like) on the internal modem to the unused IRQ and IO
  374.   address 3E8 (ttyS2) .
  375.  
  376.   "Or the like" (in the previous sentence) may be a bit tricky.  If the
  377.   modem is a Plug and Play (PnP) for the ISA bus, the equivalent
  378.   probably can be done using the "isapnp" program which comes with
  379.   "isapnptools".  See "man isapnp" or the FAQ for it.  See also "Plug-
  380.   and-Play-HOWTO.  With a PnP-BIOS you may be able to tell the CMOS
  381.   setup menu that you don't have a PnP OS and then the BIOS may set a
  382.   suitable IRQ and IO address in the modem card.  I once thought that if
  383.   you configured the modem under Windows 9x then Windows would be nice
  384.   and put that configuration info (IRQ and IO address) into the BIOS's
  385.   flash memory so that it could be used by the BIOS each time you start
  386.   Linux.  But it may not do this so try it only as a last resort.  You
  387.   might try using ICU utility under Windows..  There may even be a way
  388.   to disable PnP using software (under Windows) that came with the
  389.   modem.
  390.  
  391.   Finally you must also find the file where "setserial" is run and add a
  392.   line something like: "setserial /dev/ttyS2 irq5".  See ``All Modems''
  393.   for further instructions.
  394.  
  395.  
  396.  
  397.   1.5.3.  All Modems
  398.  
  399.   Plug the modem into a telephone line.  Then start up a communication
  400.   program such as minicom and go to the configuration menu for the
  401.   serial port.  Assign it a high baud rate a few times higher than the
  402.   bit rate of your modem.  See ``Speed Table'' for the "best" speeds to
  403.   use.  Tell it the full name of your serial port such as /dev/ttyS1.
  404.   Set hardware flow control (RTS/CTS).  Now you need to save these
  405.   settings and exit minicom.  Then start minicom again, type AT to see
  406.   if your modem is there and responds with OK.  Then go to the dial
  407.   directory (or menu) and dial a number.
  408.  
  409.  
  410.   2.  Modem & Serial Port Basics
  411.  
  412.   You don't have to understand the basics to use and install a modem.
  413.   But understanding it may help to determine what is wrong if you run
  414.   into problems.  After reading this section, if you want to understand
  415.   it even better you may want to see ``How Modems Work'' in this
  416.   document (not yet complete).  A future version of Serial-HOWTO
  417.   (expected by Feb. 1999).  should cover more on the serial port itself.
  418.  
  419.  
  420.   2.1.  Modem Converts Digital to Analog (and conversely)
  421.  
  422.   Most all telephone main lines are digital already but the lines
  423.   leading to your house (or business) are usually analog which means
  424.   that they were designed to transmit a voltage wave which is an exact
  425.   replica of the sound wave coming out of your mouth.  Such a voltage
  426.   wave is called "analog".  If viewed on an oscilloscope it looks like a
  427.   sine wave of varying frequency and amplitude.  A digital signal is
  428.   like a square wave.  For example 3 v (volts) might be a 1-bit and 0 v
  429.   could be a 0-bit.  For most serial ports (used by external modems) +12
  430.   v is a 0-bit and -12 v is a 1-bit (some are + or - 5 v).
  431.  
  432.   To send data from your computer over the phone line, the modem takes
  433.   the digital signal from your computer and converts it to "analog".  It
  434.   does this by both creating an analog sine wave and then "MODulating"
  435.   it.  Since the result still represents digital data, it could also be
  436.   called a digital signal instead of analog.  But it looks something
  437.   like an analog signal and almost everyone calls it analog.  At the
  438.   other end of the phone line another modem "DEModulates" this signal
  439.   and the pure digital signal is recovered.  Put together the "mod" and
  440.   "dem" parts of the two words above and you get "modem" (if you drop
  441.   one of the two d's).  A "modem" is thus a MODulator-DEModulator.  Just
  442.   what modulation is may be found in the section ``Modulation Details''.
  443.  
  444.  
  445.   2.2.  What is a Serial Port ?
  446.  
  447.   2.2.1.  Intro to Serial
  448.  
  449.   Since modems have a serial port between them and the computer, it's
  450.   necessary to understand the serial port as well as the modem.  The
  451.   serial port is an IO (Input/Output) device.  Most PC's have one or two
  452.   serial ports.  Each has a 9-pin connector (sometimes 25-pin) on the
  453.   back of the computer.  Computer programs can send data (bytes) to the
  454.   transmit pin (output) and receive bytes from the receive pin (input).
  455.   The other pins are for control purposes and ground.
  456.  
  457.   The serial port is much more than just a connector.  It converts the
  458.   data from parallel to serial and changes the electrical representation
  459.   of the data.  Inside the computer, data bits flow in parallel (using
  460.   many wires at the same time).  Serial flow is a stream of bits over a
  461.   single wire (such as on the transmit or receive pin of the serial
  462.   connector).  For the serial port to create such a flow, it must
  463.   convert data from parallel (inside the computer) to serial on the
  464.   transmit pin (and conversely).
  465.  
  466.   Most of the electronics of the serial port is found in a computer chip
  467.   (or a section of a chip) known as a UART.  For more details on UARTs
  468.   see the section ``What Are UARTs?  How Do They Affect Performance?''.
  469.   But you may want to finish this section first so that you will
  470.   hopefully understand how the UART fits into the overall scheme of
  471.   things.
  472.  
  473.  
  474.   2.2.2.  Pins and Wires
  475.  
  476.   Old PC's used 25 pin connectors but only about 9 pins were actually
  477.   used, so today most connectors are only 9-pin.  Each of the 9 pins
  478.   connects to a wire.  Besides the two wires used for transmitting and
  479.   receiving data, another pin (wire) is signal ground.  The voltage on
  480.   any wire is measured with respect to this ground.  There are still
  481.   more wires which are for control purposes (signalling) only and not
  482.   for sending bytes.  All of these signals could have been sent on a
  483.   single wire, but instead, there is a separate dedicated wire for every
  484.   type of signal.  Some (or all) these control wires are called "modem
  485.   control lines".  These control wires are either in the asserted state
  486.   (on) of +12 volts or in the negated state (off) of -12 volts.  There
  487.   is a wire to signal the computer to stop sending bytes to the modem.
  488.   Conversely, another wire signals the modem to stop sending bytes to
  489.   the computer.  Other wires may tell the modem to hang up the telephone
  490.   line or tell the computer that a connection has been made or that the
  491.   telephone line is ringing (someone is attempting to call in).
  492.  
  493.  
  494.   2.2.3.  Internal Modem Contains Serial Port
  495.  
  496.   For an internal modem there is no 9-pin connector but the behavior is
  497.   exactly as if the above mentioned cable wires existed.  Instead of a a
  498.   12 volt signal in a wire giving the state of a modem control line, the
  499.   internal modem may just use a status bit in its own memory (a
  500.   register) to determine the state of this non-existent "wire".  The
  501.   internal modem's serial port looks just like a real serial port to the
  502.   computer.  It even includes the speed limits that one may set at
  503.   ordinary serial ports such as 115200 bits/sec.  Unfortunately today,
  504.   many internal modems don't work exactly this way but instead use MS
  505.   Windows software to help do their job and will not work under Linux.
  506.   See ``Avoid: winmodems''.
  507.  
  508.  
  509.   2.3.  IO Address & IRQ
  510.  
  511.   Since the computer needs to communicate with each serial port, the
  512.   operating system (OS) must know that the serial port exists, where it
  513.   is (its IO address) and what wire (IRQ number) the serial port is to
  514.   use to request service from the computer's CPU.  Thus every serial
  515.   port device must store in its non-volatile memory both its IO address
  516.   and its Interrupt ReQuest number: IRQ.  The IRQ determines what wire
  517.   is used to request service using interrupt signals.  See
  518.   ``Interrupts''.
  519.  
  520.   The serial ports are labeled ttyS0, ttyS1, etc. (corresponding to
  521.   COM1, COM2, etc. in DOS).  There is also an obsolete set of names:
  522.   cua0, cua1, etc which are almost the same as ttyS0, ttyS1, etc.  See
  523.   ``The cua Device''.  Which one of these names refers to certain
  524.   physical serial port is determined (in part) by the IO address stored
  525.   inside the hardware chip of the physical port.  This mapping of names
  526.   (such as ttyS1) to IO addresses and IRQ's may be set by the
  527.   "setserial" command.  ``What is Setserial''.  This does not set the IO
  528.   address and IRQ on the hardware itself (which is set by jumpers or by
  529.   plug-and-play).
  530.  
  531.  
  532.   2.4.  Interrupts
  533.  
  534.   Bytes come in over the phone line to the modem, are converted from
  535.   analog to digital by the modem and passed along to the serial port on
  536.   their way to their destination inside your computer.  When the serial
  537.   port gets say 8 bytes from the modem (may be set to 1, 4, 8, or 14) it
  538.   signals the CPU to fetch them by sending an electrical signal known as
  539.   an interrupt on a dedicated conductor.  Old serial ports would always
  540.   send an interrupt for every byte received.
  541.  
  542.   Each interrupt conductor (inside the computer) has a number (IRQ) and
  543.   the serial port must know which conductor to use to signal on.  For
  544.   example, ttyS0 normally uses IRQ number 4 known as IRQ4 (or IRQ 4).  A
  545.   list of them and more will be found in "man setserial" (search for
  546.   "Configuring Serial Ports").  Interrupts are issued whenever the
  547.   serial port needs to get the CPU's attention.  It's important to do
  548.   this in a timely manner since the buffer inside the serial port can
  549.   hold only 16 (1 in old modems) incoming bytes.  If the CPU fails to
  550.   remove such received bytes promptly, then there will not be any space
  551.   left for any more incoming bytes and the small buffer may overflow
  552.   (overrun).  Bytes will be lost.  For an external modem, there is no
  553.   way to stop the flow rapidly enough to prevent this.  For an internal
  554.   modem the 16-byte buffer is on the same card and a good modem will not
  555.   write to it if it's full.  Thus a good internal modem will not overrun
  556.   the 16-byte buffers and this is one advantage of an internal modem.
  557.  
  558.   Interrupts are also issued when the serial port has just sent out all
  559.   16 of it bytes from its small transmit buffer to the modem.  It then
  560.   has space for 16 more outgoing bytes.  The interrupt is to notify the
  561.   CPU of that fact so that it may put more bytes in the small transmit
  562.   buffer to be transmitted.  Also, when a modem control line changes
  563.   state an interrupt is issued.
  564.  
  565.   The buffers mentioned above are all hardware buffers.  The serial port
  566.   also has large buffers in main memory.  This will be explained later
  567.  
  568.   Interrupts convey a lot of information but only indirectly.  The
  569.   interrupt itself just tells a chip called the interrupt controller
  570.   that a certain serial port needs attention.  The interrupt controller
  571.   then signals the CPU.  The CPU runs a special program to service the
  572.   serial port.  That program is called an interrupt service routine
  573.   (part of the serial driver software).  It tries to find out what has
  574.   happened at the serial port and then deals with the problem such a
  575.   transferring bytes from (or to) the serial port's hardware buffer.
  576.   This program can easily find out what has happened since the serial
  577.   port has registers at IO addresses known to the the serial driver
  578.   software.  These registers contain status information about the serial
  579.   port.  The software reads these registers and by inspecting the
  580.   contents, finds out what has happened and takes appropriate action.
  581.  
  582.  
  583.   2.5.  Data Compression (by the Modem)
  584.  
  585.   Before continuing with the basics of the serial port, one needs to
  586.   understand about something done by the modem: data compression.  In
  587.   some cases this task is actually done by software run on the
  588.   computer's CPU but unfortunately at present, such software only works
  589.   for MS Windows.  The discussion here will be for the case where the
  590.   modem itself does the compression since this is what must happen in
  591.   order for the modem to work under Linux.
  592.  
  593.   In order to send data faster over the phone line, one may compress
  594.   (encode it) using a custom encoding scheme which itself depends on the
  595.   data.  The encoded data is smaller than the original (less bytes) and
  596.   can be sent over the Internet in less time.  This process is called
  597.   "data compression".
  598.  
  599.   If you download files from the Internet, they are likely already
  600.   compressed and it is not feasible for the modem to try to compress
  601.   them further.  Your modem may sense that what is passing thru has
  602.   already been compressed and refrain from trying a compress it any
  603.   more.  If you are receiving data which has been compressed by the
  604.   other modem, your modem will decompress it and create many more bytes
  605.   than were sent over the phone line.  Thus the flow of data from your
  606.   modem into your computer will be higher than the flow over the phone
  607.   line to you.  The ratio of this flow is called the compression ratio.
  608.   Compression ratios as high as 4 are possible, but not very likely.
  609.  
  610.  
  611.   2.6.  Error Correction
  612.  
  613.   Similar to data compression, modems may be set to do error correction.
  614.   While there is some overhead cost involved which slows down the
  615.   byte/sec flow rate, the fact that error correction strips off start
  616.   and stop bits actually increases the data byte/sec flow rate.
  617.  
  618.   For the serial port's interface with the external world, each 8-bit
  619.   byte has 2 extra bits added to it: a start-bit and a stop-bit.
  620.   Without error correction, these extra stop and stop bits usually go
  621.   right thru the modem and out over the phone lines.  But when error
  622.   correction is enabled, these extra bits are stripped off and the 8-bit
  623.   bytes are put into packets.  This is more efficient and results in
  624.   higher byte/sec flow in spite of the fact that there are a few more
  625.   bytes added for packet headers and error correction purposes.
  626.  
  627.  
  628.   2.7.  Data Flow (Speeds)
  629.  
  630.   Data (bytes representing letters, pictures, etc.) flows from your
  631.   computer to your modem and then out on the telephone line (and
  632.   conversely).  Flow rates (such as 56k (56000) bits/sec) are
  633.   (incorrectly) called "speed".  But almost everyone says "speed"
  634.   instead of "flow rate".  If there were no data compression the flow
  635.   rate from the computer to the modem would be about the same as the
  636.   flow rate over the telephone line.
  637.  
  638.   Actually there are two different speeds to consider at your end of the
  639.   phone line:
  640.  
  641.  
  642.   ╖  The speed on the phone line itself (DCE speed) modem-to-modem
  643.  
  644.   ╖  The speed from your computer's serial port to your modem (DTE
  645.      speed)
  646.  
  647.   When you dial out and connect to another modem on the other end of the
  648.   phone line, your modem often sends you a message like "CONNECT 28800"
  649.   or "CONNECT 115200".  What do these mean?  Well, its either the DCE
  650.   speed or the DTE speed. If it's higher than the advertised modem speed
  651.   it must be the DTE modem-to-computer speed.  This is the case for the
  652.   115200 speed shown above.  The 28800 must be a DCE (modem-to-modem)
  653.   speed since the serial port has no such speed.  One may configure the
  654.   modem to report either speed.  Some modems report both speeds and
  655.   report the modem-to-modem speed as (for example): CARRIER 28800.
  656.  
  657.   If you have an internal modem you would not expect that there would be
  658.   any speed limit on the DTE speed from your modem to your computer
  659.   since you modem is inside your computer and is almost part of your
  660.   computer.  But there is since the modem contains a dedicated serial
  661.   port within it.
  662.  
  663.   It's important to understand that the average speed is often less than
  664.   the specified speed, especially on the short DTE computer-to-modem
  665.   line.  Waits (or idle time) result in a lower average speed.  These
  666.   waits may include long waits of perhaps a second due to ``Flow
  667.   Control''.  At the other extreme there may be very short waits (idle
  668.   time) of several micro-seconds separating the end of one byte and the
  669.   start of the next byte.  In addition, modems will fallback to lower
  670.   speeds if the telephone line conditions are less than pristine.
  671.  
  672.   For a discussion of what DTE speed is best to use see section ``What
  673.   Speed Should I Use''.
  674.  
  675.  
  676.   2.8.  Flow Control
  677.  
  678.   Flow control means the ability to stop the flow of bytes in a wire.
  679.   It also includes provisions to restart the flow without any loss of
  680.   bytes.  Flow control is needed for modems to allow a jump in flow
  681.   rates.
  682.  
  683.  
  684.   2.8.1.  Flow Control Explained by an Example
  685.  
  686.   For example, consider the case where your 33.6k modem is not doing any
  687.   data compression or error correction.  You have set the serial port
  688.   speed to 115,200 bits/sec (bps).  You are sending data from your
  689.   computer to the phone line.  Then the flow from the your computer to
  690.   your modem is at 115.2k bps.  However the flow from your modem out the
  691.   phone line is at best only 33.6k bps.  Since a faster flow (115.2k) is
  692.   going into your modem than is coming out of it, the modem is storing
  693.   the excess flow (115.2k -33.6k = 81.6k) in one of its buffers.  This
  694.   buffer would eventually overrun (run out of storage space) unless the
  695.   115.2k flow is stopped.
  696.  
  697.   But now flow control comes to the rescue.  When the modem's buffer is
  698.   almost full, the modem sends a stop signal to the serial port.  The
  699.   serial port passes on the stop signal to the device driver and the
  700.   115.2k bps flow is halted.  Then the modem continues to send out data
  701.   at 33.6k bps drawing on the data it previous accumulated in its
  702.   buffer.  Since nothing is coming into the buffer, the level of bytes
  703.   in it starts to drop.  When almost no bytes are left in the buffer,
  704.   the modem sends a start signal to the serial port and the 115.2k flow
  705.   from the computer to the modem resumes.  In effect, flow control
  706.   creates an average flow rate (in this case 33.6k) which is
  707.   significantly less than the "on" flow rate of 115.2k bps.  This is
  708.   "start-stop" flow control.
  709.  
  710.   The above is an example of flow control for flow from the computer to
  711.   the modem , but there is also flow control which is used for the
  712.   opposite direction of flow: from a modem to a computer.  You don't
  713.   often need it in this direction (for flow from a modem to PC), but a
  714.   for complex example of a case where it's needed see ``Complex Flow
  715.   Control Example''.  But if you don't have a high enough speed set
  716.   between the modem and the computer (serial port speed) then you do
  717.   need to slow down the flow from the modem to the PC.  To do this you
  718.   must stop the incoming flow of bytes over the telephone line.   Your
  719.   modem must tell the other modem to stop sending.  See ``Modem-to-Modem
  720.   Flow Control''   More details on flow control may eventually be put
  721.   into the Serial-HOWTO.
  722.  
  723.  
  724.  
  725.  
  726.  
  727.   2.8.2.  Symptoms of No Flow Control
  728.  
  729.   Understanding flow-control theory can be of practical use.  For
  730.   example I used my modem to access the Internet and it seemed to work
  731.   fine.  But after a few months I tried to send long files from my PC to
  732.   an ISP and a huge amount of retries and errors resulted (but
  733.   eventually Kermit could send a long file after many retries).
  734.   Receiving in the other direction (from my ISP to me) worked fine.  The
  735.   problem turned out to be a hardware defect in my modem that had
  736.   resulted in disabling flow control.  My modem's buffer was overflowing
  737.   (overrunning) on long outgoing files since no "stop" signal was ever
  738.   sent to the computer to halt sending to the modem.  There was no
  739.   problem in the direction from the modem to my computer since the
  740.   capacity (say 115.2k) was always higher than the flow over the
  741.   telephone line.  The fix was to enable flow control by putting an
  742.   enable-flow-control command for the modem last in the init string.
  743.  
  744.  
  745.   2.8.3.  Hardware vs. Software Flow Control
  746.  
  747.   For modems, it's best to use "hardware" flow control that uses two
  748.   dedicated "modem control" wires to send the "stop" and "start"
  749.   signals.  Software flow control uses the main receive and transmit
  750.   wires to send the start and stop signals.  It uses the ASCII control
  751.   characters DC1 (start) and DC3 (stop) for this purpose.  They are just
  752.   inserted into the regular stream of data.  Software flow control is
  753.   not only slower in reacting but also does not allow the sending of
  754.   binary data thru the modem unless special precautions are taken.
  755.   Since binary data will likely contain DC1 and DC3, special means must
  756.   be taken to distinguish between a DC3 that means a flow control stop
  757.   and a DC3 that is part of the binary code.  Likewise for DC1.  To get
  758.   software flow control to work for binary data requires both modem
  759.   (hardware) and software support.
  760.  
  761.  
  762.   2.8.4.  Modem-to-Modem Flow Control
  763.  
  764.   This is the flow control of the data sent over the telephone lines
  765.   between two modems.  Practically speaking, it only exists when you
  766.   have error correction set.  Actually, even without error correction
  767.   it's possible to enable software flow control between modems but it
  768.   may interfere with sending binary data so it's not often used.
  769.  
  770.  
  771.   2.9.  Data Flow Path; Buffers
  772.  
  773.   Although much has been explained about this including flow control, a
  774.   pair of 16-byte serial port buffers (in the hardware), and a pair of
  775.   larger buffers inside the modem, there is still another pair of
  776.   buffers.  These are large buffers (perhaps 8k) in main memory also
  777.   known as serial port buffers.  When an application program sends bytes
  778.   to the serial port (and modem), they first get stashed in the the
  779.   transmit serial port buffer in main memory.  The pair consists of both
  780.   this transmit buffer and a receive buffer for the opposite direction
  781.   of byte-flow.
  782.  
  783.   The serial device driver takes out say 16 bytes from this transmit
  784.   buffer, one byte at a time and puts them into the 16-byte transmit
  785.   buffer in the serial hardware for transmission.  Once in that transmit
  786.   buffer, there is no way to stop them from being transmitted.  They are
  787.   then transmitted to the modem which also has a fair sized (say 1k)
  788.   buffer.  When the device driver (on orders from flow control) stops
  789.   the flow of outgoing bytes from the computer, what it actually stops
  790.   is the flow of outgoing bytes from the large transmit buffer in main
  791.   memory.  Even after this has happened and the flow to the modem has
  792.   stopped, an application program may keep sending bytes to the 8k
  793.   transmit buffer until it becomes fill.  When it gets fill, the
  794.   application program can't send any more bytes to it (a "write"
  795.   statement in a C_program blocks) and the application program
  796.   temporarily stops running and waits until some buffer space becomes
  797.   available.  Thus a flow control "stop" is ultimately able to stop the
  798.   program that is sending the bytes.  Even though this program stops,
  799.   the computer does not necessarily stop computing.  It may switch to
  800.   running other processes while it's waiting at a flow control stop.
  801.   The above was a little oversimplified since there is another
  802.   alternative of having the application program itself do something else
  803.   while it is waiting to "write".
  804.  
  805.  
  806.   2.10.  Complex Flow Control Example
  807.  
  808.   For many situations, there is a transmit path involving several links,
  809.   each with its own flow control.  For example, I type at a text-
  810.   terminal connected to a PC.  Inside the PC is a modem to access a BBS.
  811.   For this I use the application program "minicom" which deals with 2
  812.   serial ports: one connected to the modem and another connected to the
  813.   text-terminal.  What I type at the text terminal goes into the first
  814.   serial port to minicom, then from minicom out the second serial port
  815.   to the modem, and then onto the telephone line to the BBS.  The text-
  816.   terminal has a limit to the speed at which bytes can be displayed on
  817.   its screen and issues a flow control "stop" from time to time to slow
  818.   down the flow.  What happens when such a "stop" is issued?  Let's
  819.   consider a case where the "stop" is long enough to get thru to the BBS
  820.   and stop the program at the BBS which is sending out the bytes.
  821.  
  822.   Let's trace out the flow of this "stop" (which may be "hardware" on
  823.   some links and "software" on others).  First, suppose I'm "capturing"
  824.   a long file from the BBS which is being sent simultaneously to both my
  825.   text-terminal and a to file on my hard-disk.  The bytes are coming in
  826.   faster than the terminal can handle them so it sends a "stop" out its
  827.   serial port to the first serial port on my PC.  The device driver
  828.   detects it and stops sending bytes from the 8k serial buffer (in main
  829.   memory) to the terminal.  Now minicom still keeps sending out bytes
  830.   for the terminal into this 8k buffer.
  831.  
  832.   When this 8k transmit buffer (on the first serial port) is full,
  833.   minicom must stop writing to it.  Minicom stops and waits.  But this
  834.   also causes minicom to stop reading from the 8k receive buffer on the
  835.   2nd serial port connected to the modem.  Flow from the modem continues
  836.   until this 8k buffer too fills up and sends a different "stop" to the
  837.   modem.  Now the modem's buffer ceases to send to the serial port and
  838.   also fills up.  The modem (assuming error correction is enabled) sends
  839.   a "stop signal" to the other modem at the BBS.  This modem stops
  840.   sending bytes out of its buffer and when its buffer gets fill, another
  841.   stop signal is sent to the serial port of the BBS.  At the BBS, the
  842.   8-k (or whatever) buffer fills up and the program at the BBS can't
  843.   write to it anymore and thus temporarily halts.
  844.  
  845.   Thus a stop signal from a text terminal has halted a programs on a BBS
  846.   computer.  What a Rube Goldberg (complex) sequence of events!  Note
  847.   that the stop signal passed thru 4 serial ports, 2 modems, and one
  848.   application program (minicom).  This counts the serial port attached
  849.   to the terminal.  Each serial port has 2 buffers (in one direction of
  850.   flow): the 8k one and the hardware 16-byte one.  The application
  851.   program may have a buffer in main memory as specified in its C-code.
  852.   This adds up to 11 different buffers the data is passing thru.  Note
  853.   that the small serial hardware buffers do not participate directly in
  854.   flow control.
  855.  
  856.   If the terminal speed limitation is the bottleneck in the flow from
  857.   the BBS to the terminal, then its flow control "stop" is actually
  858.   stopping the program that is sending from the BBS as explained above.
  859.   But you may ask, how can a "stop" last so long that 11 buffers (some
  860.   of them large) all get filled up?   It can actually happen this way if
  861.   all the buffers were near their upper limits when the terminal sent
  862.   out the "stop".
  863.  
  864.   But if you were to run a simulation on it you would discover that it's
  865.   usually more complicated than this.  At an instant of time some links
  866.   are flowing and others are stopped (due to flow control).  A "stop"
  867.   from the terminal seldom propagates back to the BBS neatly as
  868.   described above.  It may take a few "stops" from the terminal to
  869.   result in a "stop" at the BBS.  To understand what is going on you
  870.   really need to observe a simulation which can be done for a simple
  871.   case with coins on a table.  Use only a few buffers and set the upper
  872.   level for each buffer at only a few coins.
  873.  
  874.   Does one really need to understand all this?  Well, understanding this
  875.   explained to me why capturing text from a BBS was loosing text.  The
  876.   situation was exactly the above example but modem-to-modem flow
  877.   control was disabled.  Chunks of captured text that were supposed to
  878.   get to the hard-disk never got there because of an overflow (overrun)
  879.   at the modem buffer due to flow control "stops" from the terminal.
  880.   Even though the BBS had a flow path to the hard-disk without
  881.   bottlenecks, the overflow due to the terminal happened on this path
  882.   and chunks of text were lost.
  883.  
  884.  
  885.   2.11.  Modem Commands
  886.  
  887.   Commands to the modem are sent to it from the communication software
  888.   over the same conductor as used to send data.  The commands are short
  889.   ASCII strings.  Examples are "AT&K3" for enabling hardware flow
  890.   control (RTS/CTS) between your computer and modem; and "ATDT5393401
  891.   for Dialing the number 5393401.  Note all commands are prefaced by
  892.   "AT".   Some commands such as enabling flow control help configure the
  893.   modem.  Other commands such as dialing a number actually do something.
  894.   There are about a hundred or so different possible commands.  When
  895.   your communication software starts running, it first sends an "init"
  896.   string of commands to the modem to configure it.  All commands are
  897.   sent on the ordinary data line before the modem dials (or receives a
  898.   call).
  899.  
  900.   Once the modem is connected to another modem (on-line mode),
  901.   everything that is sent from your computer to your modem goes directly
  902.   to the other modem and is not interpreted by the modem as a command.
  903.   There is a way to "escape" from this mode of operation and go back to
  904.   command mode where everything sent to the modem will be interpreted as
  905.   a command.  The computer just sends "+++" with a specified time
  906.   spacing before and after it.  If this time spacing is correct, the
  907.   modem reverts to command mode.  Another way to do this is by a signal
  908.   on a certain modem control line.
  909.  
  910.   There are a number of lists of modem commands on the Internet.  The
  911.   section ``Web Sites'' has links to a couple of such web-sites.
  912.   Different models and brands of modems do not use exactly the same set
  913.   of such commands.  So what works for one modem might not work for
  914.   another.  Some common command (not guaranteed to work on all modems)
  915.   are listed in this HOWTO in the section ``Modem Configuration''
  916.  
  917.  
  918.   3.  Configuring Modems (including the serial port)
  919.  
  920.   If you want to use a modem only for MS Windows/Dos, then you can just
  921.   install almost any modem and it will work OK.  With a Linux PC it's
  922.   not usually this easy unless you use an external modem.  All external
  923.   modems should work OK (even if they are labeled "Plug and Play")  But
  924.   most new internal modems are Plug-and-Play (PnP) and have PnP serial
  925.   ports.  You may need to use the Linux "isapnp" program to configure
  926.   these PnP serial ports.  See the Plug-and-Play-HOWTO for more
  927.   information.
  928.  
  929.  
  930.   3.1.  Configuring Overview
  931.  
  932.   Since each modem has an associated serial port there are two parts to
  933.   configuring a modem:
  934.  
  935.  
  936.   ╖  Configuring the modem itself: Done by the communication program
  937.  
  938.   ╖  Configuring the modem's serial port: Done only partly by the
  939.      communication program
  940.  
  941.   Most of the above configuring (but not necessarily most of the effort)
  942.   is done by the communication program that you use with the modem such
  943.   as minicom or seyon, or by the PPP part of your Web Browser.  If you
  944.   use the modem for dial-in, then the getty program which you use to
  945.   present outsiders with a login-prompt, will help configure.  Thus to
  946.   configure the modem (and much of the serial port) you need to
  947.   configure the communication program (or PPP or getty).  The
  948.   documentation for these programs and/or the PPP-HOWTO should be
  949.   helpful.
  950.  
  951.   But note that not all of the configuration of the serial port is done
  952.   by the communication program (or getty).  The remaining configuring is
  953.   simple to state (but sometimes difficult to do).  It mainly consists
  954.   of setting the IO address of the port and its IRQ number.  In fact,
  955.   plug-and-play could set these without you doing a thing.  But there's
  956.   a serious problem: Linux (as of early 1999) doesn't support plug-and-
  957.   play very well.  This may create a difficult problem for you.
  958.  
  959.  
  960.   3.2.  Configuring the IRQ and IO-Address of the Serial Port
  961.  
  962.   Prior to firing up (and configuring) your communication program, you
  963.   must do the configuring that your communication program can't do.
  964.   Oversimplified, this consists only of identifying the serial port on
  965.   which the modem resides:  Is it ttyS2 (=COM3) or ttyS1 (=COM2) etc.?
  966.   If you know the answer for sure (and there are no IRQ conflicts), then
  967.   there is nothing to do and you may start your communication program .
  968.  
  969.   Otherwise, you must establish the serial port identification and
  970.   assign it an IRQ number.  This is done by putting two values (an IRQ
  971.   number and IO address) into two places:
  972.  
  973.   1. A memory register of the serial port hardware itself
  974.  
  975.   2. the device driver (often by running "setserial" at boot-time)
  976.  
  977.   Both of the above are supposed to by done by a plug-and-play operating
  978.   system (OS).  For item 1. setting these numbers in a modem card (or
  979.   for the serial port in the case of an external modem) was formerly
  980.   done by jumpers.  Today it's supposed to be done at boot-time by plug-
  981.   and-play (PnP).  A major difference between jumpers and PnP is that
  982.   the jumper setting remain the same after you turn off the PC.  For PnP
  983.   the equivalent settings are not remembered by the card and the
  984.   settings must be supplied anew (via PnP) to the card each time the PC
  985.   is powered up.
  986.  
  987.   For item 2. if you accept the default settings there is no need to use
  988.   setserial.  But if you use "setserial" the IRQ and IO address you tell
  989.   it must be exactly the same as what is set inside the serial port
  990.   hardware (or will be set via PnP).  We might call all of this "io-irq"
  991.   configuring for short.  In the Wintel world, the IO address and IRQ
  992.   are called "resources" and we are thus configuring certain resources.
  993.  
  994.  
  995.   3.2.1.  Plug-and-Play
  996.  
  997.   Plug-and-Play was designed to automate this io-irq configuring, but
  998.   for Linux at present, it has made life more complicated.  The standard
  999.   kernels for Linux don't support plug-and-play very well.  If you use a
  1000.   patch to the Linux kernel to covert it to a plug-and-play operating
  1001.   system, then all of the above should be handled automatically by the
  1002.   OS.  But when you want to use this to automate configuring devices
  1003.   other that the serial port, you may find that you'll still have to
  1004.   configure the drivers manually since many Linux drivers are not
  1005.   written to support a Linux PnP OS.  If you use isapnptools or the BIOS
  1006.   for configuring plug-and-play this will only put the two values into
  1007.   the registers of the serial port section of the modem card and you
  1008.   will likely still need to set up setserial.  None of this is easy or
  1009.   very well documented as of early 1999.  See Plug-and-Play-HOWTO and
  1010.   the isapnptools FAQ.
  1011.  
  1012.  
  1013.   3.2.2.  Using a PnP BIOS to I0-IRQ Configure
  1014.  
  1015.   While the explanation of how to use a PnP OS or isapnp for io-irq
  1016.   configuring should come with such software, this is not the case if
  1017.   you want to let a PnP BIOS do such configuring.  Not all PnP BIOS can
  1018.   do this.  The BIOS usually has a CMOS menu for setting up the first
  1019.   two serial ports.  There is often little to choose from.  Unless
  1020.   otherwise indicated in menus, these first two ports get set at the
  1021.   standard IO addresses and IRQs.  See ``Serial Port Device Names &
  1022.   Numbers''
  1023.  
  1024.   Whether you like it or not, when you start up a PC a PnP BIOS starts
  1025.   to do PnP (io-irq) configuring of hardware devices.  It may do the job
  1026.   partially and turn the rest over to a PnP OS (which you probably don't
  1027.   have) or if thinks you don't have a PnP OS it may fully configure all
  1028.   the PnP devices but not configure the device drivers.  This is what
  1029.   you want but it's not always easy to figure out exactly what the PnP
  1030.   BIOS has done.
  1031.  
  1032.   If you tell the BIOS that you don't have a PnP OS, then the PnP BIOS
  1033.   should do the configuring of all PnP serial ports --not just the first
  1034.   two.  If you have MS Windows9x on the same PC, the BIOS might ?? have
  1035.   saved the io-irq configuration used for MS Windows in its non-volatile
  1036.   memory.  If you're now reading the latest version of this HOWTO let me
  1037.   know if Windows puts it there.  If so the BIOS will use this same
  1038.   configuration for Linux.  In this case, if you can find out how MS
  1039.   Windows has set up io-irq then it should be the same under Linux.
  1040.  
  1041.   If you add a new PnP device, the BIOS should change its PnP
  1042.   configuration to accommodate it.  It could even change the io-irq of
  1043.   existing devices if required to avoid any conflicts.  For this
  1044.   purpose, it keeps a list of non-PnP devices provided that you have
  1045.   told the BIOS how these non-PnP devices are io-irq configured.  One
  1046.   way to tell the BIOS this is by running a program called ICU under
  1047.   DOS/Windows.
  1048.  
  1049.   But how do you find out what the BIOS has done so that you set up the
  1050.   device drivers with this info?  The BIOS itself may provide some info,
  1051.   either in it's setup menus of via messages on the screen when you turn
  1052.   on your computer.  See ``What is set in my serial port hardware?''
  1053.  
  1054.  
  1055.  
  1056.  
  1057.   3.2.3.  External Modem Configure
  1058.  
  1059.   If you use an external modem and plug it into say the ttyS1 connector,
  1060.   then there's (usually) no io-irq configuring to do since ttyS1 has
  1061.   likely already been io-irq configured.  Your CMOS BIOS may have a menu
  1062.   to do this for COM1 and COM2.
  1063.  
  1064.  
  1065.   3.2.4.  If More Than 2 Serial Ports
  1066.  
  1067.   Normally you don't need to configure the first two serial ports that
  1068.   your computer comes with since the default configuration works fine.
  1069.   The Linux distribution you get probably has these defaults built into
  1070.   it so you have nothing to do.  Everything is different when you want
  1071.   to add a third serial port.  The io-irq configuring of it uses the
  1072.   same principles as for the first two serial ports but this time
  1073.   (unless you use a plug-and-play operating system) you have to do it
  1074.   yourself.  To do this (as already mentioned) you'll need to run
  1075.   setserial: ``What is Setserial'' and also set the io-irq data into the
  1076.   modem card by PnP methods (or by physical jumpers or switches on old
  1077.   cards).
  1078.  
  1079.  
  1080.   3.2.5.  Methods for Setting IO Addresses and IRQs
  1081.  
  1082.   Here's a summary of what was just discussed (and more).  The modem is
  1083.   entirely configured by sending commands to it from the computer (via
  1084.   the communication program) as is much of the serial port (such as the
  1085.   baud rate and hardware flow control).  For more details on the PnP
  1086.   options see Plug-and-Play-HOWTO.  You configure the io-irq of the
  1087.   serial port by:
  1088.  
  1089.  
  1090.   1. Setting the IRQ number and the IO address in the port hardware (io-
  1091.      irq) by doing one of the following:
  1092.  
  1093.   ╖  Doing nothing for an external modem where the existing io-irq is OK
  1094.  
  1095.   ╖  Using a PnP BIOS CMOS setup menu (usually only for external modems
  1096.      on ttyS0 (Com1) and ttyS1 (Com2))
  1097.  
  1098.   ╖  Doing nothing if you have both a PnP internal modem and a PnP Linux
  1099.      operating system.
  1100.  
  1101.   ╖  Setting jumpers (if they exist) on an internal modem, old serial
  1102.      card, or old motherboard
  1103.  
  1104.   ╖  Using isapnp for a PnP internal modem (non-PCI)
  1105.  
  1106.   ╖  Letting a PnP BIOS automatically configure a PnP internal modem See
  1107.      ``Using a PnP BIOS to I0-IRQ Configure''
  1108.  
  1109.   ╖  Using a setup program which comes with the modem (run under MS
  1110.      Windows) that disables PnP
  1111.  
  1112.   2. Run "setserial": Assigns say ttyS2 to an IO address and IRQ number.
  1113.      Except that you probably don't need to run it if you have only 1 or
  1114.      2 serial ports total or if you use a PnP operating system.
  1115.  
  1116.  
  1117.   3.2.6.  Avoiding IO Address Conflicts of IBM 8514 Video Board
  1118.  
  1119.   The IO address of the IBM 8514 video board (and it's clones) is
  1120.   allegedly 0x2e8, the same as the IO address of ttyS3.  That is bad
  1121.   news if you try to use ttyS3 at this IO address.
  1122.  
  1123.   3.3.  What is the current IO address and IRQ of my Serial Port ?
  1124.  
  1125.   There are two answers to this question: 1. What the device driver
  1126.   thinks has been set (This is what setserial "sets").  2. What is
  1127.   actually set in the hardware.  They both should be the same.  If
  1128.   you're having trouble (including communication programs that can't
  1129.   communicate) it may mean that these two items are not set the same.
  1130.   In other words, this means that the driver has incorrect info on the
  1131.   serial port.  If the driver has the wrong IO address it will try to
  1132.   send data to a non-existing serial port --or even worse, to an actual
  1133.   device that is not a serial port.  If it has the wrong IRQ it will not
  1134.   get interrupt service requests from the serial port, resulting in the
  1135.   possible overflow of the serial port's buffer and in very slow
  1136.   response (due to fallback to very slow "polling" methods instead of
  1137.   interrupts).  If it has the wrong model of UART there is also apt to
  1138.   be trouble.
  1139.  
  1140.  
  1141.   3.3.1.  What does the device driver think?
  1142.  
  1143.   How do you insure that the device driver has the correct info?  Well,
  1144.   if everything seems OK then there's no need to look into this.  But
  1145.   otherwise, it's easy to see what the device driver thinks.  One way is
  1146.   to just type "setserial -g /dev/ttyS*".  At boot-time, a message on
  1147.   the console should show this.  You may look at /proc/ioports but it
  1148.   only shows the same IO address which setserial has "set" but are not
  1149.   necessarily the way its actually set in the hardware.  To see the IRQs
  1150.   used by currently running processes (that have devices open) look at
  1151.   /proc/interrupts.  It also shows how many actual interrupts have been
  1152.   issued (often thousands).  None of the above tests show what is
  1153.   actually set in the device.  But if everything works fine, the devices
  1154.   are likely actually set up that way in the hardware.
  1155.  
  1156.  
  1157.   3.3.2.  What is set in my serial port hardware?
  1158.  
  1159.   How do you find out what IO address and IRQ are actually set in the
  1160.   device hardware?  Perhaps the BIOS messages will tell you some info
  1161.   before Linux starts booting.  Use the shift-PageUp key to step back
  1162.   thru the boot-time messages and look at the very first ones which are
  1163.   from the BIOS.  This is how it was before Linux started.  Setserial
  1164.   can't change it but isapnp can.
  1165.  
  1166.   For Plug-and-Play (PnP) modems (or PnP serial ports) on the ISA bus
  1167.   one may try the pnpdump program (part of isapnptools).  If you use the
  1168.   --dumpregs option then it should tell you the actual IO address and
  1169.   IRQ set in the modem card.  The address it "trys" is not the device's
  1170.   IO address, but a special read-port used only for PnP purposes.
  1171.  
  1172.   For an older card, the jumper setting may tell you how its set.  If
  1173.   the modem is PCI look at /proc/pci or /proc/bus/pci/devices.  One
  1174.   crude method is try probing with setserial using the "autoconfig"
  1175.   option.  You'll need to guess the addresses to probe at.  See ``What
  1176.   is Setserial''.
  1177.  
  1178.   Checking on how it's configured under MS-Windows may not be of much
  1179.   help.  Windows stores its configuration info in its Registry which is
  1180.   not used by Linux.  It may supply the BIOS's non-volatile memory with
  1181.   some info but it may not be kept in sync with the current Window
  1182.   configuration in the Registry ??  If you let a PnP BIOS automatically
  1183.   do the configuring when you start Linux (and have told the BIOS that
  1184.   you don't have a PnP operating system when running Linux) then it
  1185.   should use whatever configuration is in the BIOS's non-volatile
  1186.   memory.
  1187.  
  1188.  
  1189.   3.4.  Other Configuring
  1190.  
  1191.   3.4.1.  Configuring Hardware Flow Control (RTS/CTS)
  1192.  
  1193.   See ``Flow Control'' for an explanation of it.  You should always use
  1194.   hardware flow control if possible.  Your communication program or
  1195.   "getty" should have an option for setting it (and if you're in luck it
  1196.   might be enabled by default).  It needs to be set both inside your
  1197.   modem (by an init string or default) and in the device driver.  Your
  1198.   communication program should set both of these (if you configure it
  1199.   right).
  1200.  
  1201.   If none of the above will fully enable hardware flow control.  Then
  1202.   you must do it yourself.  For the modem, make sure that it's either
  1203.   done by the init string or is on by default.  If you need to tell the
  1204.   device driver to do it is best done on startup by putting a file that
  1205.   runs at boot-time.  See the subsection ``Boot-time Configuration'' You
  1206.   need to add the following to such a file for each serial port (example
  1207.   is ttyS2) you want to enable hardware flow control on:
  1208.  
  1209.  
  1210.  
  1211.  
  1212.        stty crtscts < /dev/ttyS2
  1213.  
  1214.  
  1215.  
  1216.  
  1217.  
  1218.   If you want to see if flow control is enabled do the following:  In
  1219.   minicom (or the like) type AT&V to see how the modem is configured and
  1220.   look for &K3 which means hardware flow control.  Then see if the
  1221.   device driver knows about it by typing: stty -a < /dev/ttyS2  Look for
  1222.   "crtscts" (without a disabling minus sign).
  1223.  
  1224.  
  1225.   3.5.  Modem Configuration (excluding serial port)
  1226.  
  1227.   3.5.1.  AT Commands
  1228.  
  1229.   While the serial port on which a modem resides requires configuring,
  1230.   so does the modem itself.  The modem is configured by sending AT
  1231.   commands (or the like) to it on the same serial line that is used to
  1232.   send data.
  1233.  
  1234.   Most modems use an AT command set.  These are cryptic and short ASCII
  1235.   commands where all command strings are prefaced by the letters AT.
  1236.   For example: ATZ&K3  There are two commands here Z and &K3.
  1237.   Unfortunately there are many different variations of the AT command
  1238.   set so that what works for one modem may or may not work for another
  1239.   modem.  Thus there is no guarantee that the AT commands given in this
  1240.   section will work on your modem.  Another point is that to get the
  1241.   modem to act on the AT command string, a return character must be sent
  1242.   at the end of the string.  Sometimes the AT is prefaced by a return
  1243.   character and sometimes there are symbols added to the string (such as
  1244.    ) which only tell the communication program to pause for a tiny
  1245.   interval of time at that point.
  1246.  
  1247.   If you have a manual for your modem you can likely look up the AT
  1248.   command set in it.  Otherwise, you may try to find it on the Internet.
  1249.   One may use a search engine and include some actual commands in the
  1250.   search terms to avoid finding sites that just talk about such commands
  1251.   but fail to list them.  You might also try a few of the sites listed
  1252.   in the subsection ``Web Sites''
  1253.  
  1254.  
  1255.   3.5.2.  Init Strings: Saving and Recalling
  1256.  
  1257.   The examples given in this subsection are from the Hayes AT modem
  1258.   command set.  All command strings must be prefaced by the two letters
  1259.   AT (for example: AT&C1&D3 ).  When a modem is powered on, it
  1260.   automatically configures itself with one of the configurations it has
  1261.   stored in its non-volatile memory.  If this configuration is
  1262.   satisfactory there is nothing further to do.
  1263.  
  1264.   If it's not satisfactory, then one may either alter it or configure
  1265.   the modem each time you use it by sending it a string of commands
  1266.   known as an "init string" (= initialization string).  Normally a a
  1267.   communication program does this.  What it sends will depend on how you
  1268.   configured the communications program or what script you wrote for it
  1269.   if you use Kermit.  You can usually edit the init string and change it
  1270.   to whatever you want.  Sometimes the communications program will let
  1271.   you select the model of your modem and then it will use an init string
  1272.   that it thinks is best for that modem.
  1273.  
  1274.   So there is both a default "string" (called a profile) stored inside
  1275.   the modem and another (the init string) that the communications
  1276.   program sends it.  The modem will wind up configured like the default
  1277.   set it except that it will be modified by the commands included in the
  1278.   init string.  If the init string is empty then it will of course use
  1279.   the default configuration.
  1280.  
  1281.   Actually there is more than one "default" configuration (or profile)
  1282.   stored in the modem's non-volatile memory (it's still there when you
  1283.   turn it off).  In my modem there are two factory profiles (0 and 1,
  1284.   neither of which can be changed) and two user defined profiles (0 and
  1285.   1) that the user may set and store.  Your modem may have more.  Which
  1286.   one of these user-defined profiles is used at power-up depends on
  1287.   another item stored in the profile.  If the command &Y0 is given then
  1288.   in the future profile 0 will be used at power-on.  If it's a 1 instead
  1289.   of a 0 then profile 1 will be used at power-on.
  1290.  
  1291.   There are also commands to recall (use it now) any of the 4 stored
  1292.   profiles.  One may put such a command in an init string.  Of course if
  1293.   it recalls the same profile as was automatically loaded at power-up,
  1294.   nothing is changed unless the active profile has been modified since
  1295.   power-up.  Since it could have been modified It's a good idea to use
  1296.   some kind of an init string even if it does nothing more than
  1297.   recalling a stored profile.
  1298.  
  1299.   Recalling a saved profile (use 1 instead of 0 for profile 1):
  1300.   Z0 recalls user-defined profile 0 and resets (hangs up, etc.)
  1301.   &F0 recalls factory profile 0
  1302.  
  1303.   Once you have sent commands to the modem to configure it the way you
  1304.   want (including recalling a factory profile and modifying it a little)
  1305.   you may save this as a user-defined profile:
  1306.   &W0 saves the current configuration to user-profile 0
  1307.  
  1308.   Many people don't bother saving a good configuration in their modem,
  1309.   but instead, send the modem a longer init string each time the modem
  1310.   is used.  Another method is to restore the factory default at the
  1311.   start of the init string and then modify it a little by adding a few
  1312.   other commands to the end of the init string.  By doing it this way no
  1313.   one can cause problems by modifying the user-defined profile which is
  1314.   loaded at power-on.
  1315.  
  1316.   You may pick an init string supplied by someone else that they think
  1317.   is right for your modem.  Some communication programs have a library
  1318.   of init strings to select from.  The most difficult method (and one
  1319.   which will teach you the most about modems) is to study the modem
  1320.   manual and write one yourself.  You could save this configuration
  1321.   inside the modem so that you don't need an init string.  A third
  1322.   alternative is to start with an init string someone else wrote, but
  1323.   modify it to suit your purposes.
  1324.  
  1325.  
  1326.   3.5.3.  Other Modem Commands
  1327.  
  1328.   Future editions of Modem-HOWTO may contain more AT commands but the
  1329.   rest of this section is what was in the old Serial-HOWTO.  All strings
  1330.   must start with AT.  Here's a few Hayes AT codes that should be in the
  1331.   string (if they are not set by using a factory default or by a saved
  1332.   configuration).
  1333.  
  1334.  
  1335.  
  1336.        E1       command echo ON
  1337.        Q0       result codes are reported
  1338.        V1       verbose ON
  1339.        S0=0     never answer (uugetty does this with the WAITFOR option)
  1340.  
  1341.  
  1342.  
  1343.  
  1344.   Here's some more codes concerning modem control lines DCD and DSR:
  1345.  
  1346.  
  1347.        &C1     DCD is on after connect only
  1348.        &S0     DSR is always on
  1349.  
  1350.  
  1351.  
  1352.  
  1353.   These affect what your modem does when calls start and end.  What DTR
  1354.   does may also be set up but it's more complicated.
  1355.  
  1356.  
  1357.   If your modem does not support a stored profile, you can set these
  1358.   through the INIT string in a config file (or the like).  Some older
  1359.   modems come with DIP switches that affect register settings.  Be sure
  1360.   these are set correctly, too.
  1361.  
  1362.  
  1363.   Greg Hankins has a collection of modem setups for different types of
  1364.   modems.  If you would like to send him your working configuration,
  1365.   please do so:  <mailto:gregh@cc.gatech.edu> You can get these setups
  1366.   at ftp://ftp.cc.gatech.edu/pub/people/gregh/modem-configs.
  1367.  
  1368.  
  1369.   Note: to get his USR Courier V.34 modem to reset correctly when DTR
  1370.   drops, Greg Hankins had to set &D2 and S13=1 (this sets bit 0 of
  1371.   register S13).  This has been confirmed to work on USR Sportster V.34
  1372.   modems as well.
  1373.  
  1374.  
  1375.   Note: some Supra modems treat DCD differently than other modems.  If
  1376.   you are using a Supra, try setting &C0 and not &C1.  You must also set
  1377.   &D2 to handle DTR correctly.
  1378.  
  1379.  
  1380.   4.  Modems for a Linux PC
  1381.  
  1382.   4.1.  External vs. Internal
  1383.  
  1384.   A modem for a PC may be either internal or external.  The internal one
  1385.   is installed inside of your PC (you must remove screws, etc. to
  1386.   install it) and the external one just plugs into a serial port
  1387.   connector on a PC.  Internal modems are less expensive, are less
  1388.   likely to overrun, usually use less electricity, and use up no space
  1389.   on your desk.  External modems are much easier to install, require
  1390.   less configuration, and have lights which may give you a clue as to
  1391.   what is happening.  External modems are easy to move to another
  1392.   computer.  Most external modems have no switch to turn off the power
  1393.   supply when not in use and thus are likely to consume a little
  1394.   electricity even when turned off (unless you unplug the power supply
  1395.   from the wall).  Each watt they draw costs you about $1/yr.  Another
  1396.   possible disadvantage of an external is that you will be forced to use
  1397.   an existing serial port which may not support a speed of over 115,200
  1398.   k (although as of late 1998 most new internal modems don't either
  1399.   --but some do).  If a new internal modem had a 16650 UART it would put
  1400.   less load on the CPU (but almost none do as of late 1998).
  1401.  
  1402.   Internal modems present a special problem for Linux, but will work
  1403.   just as well as external modems provided you avoid the high percentage
  1404.   of them that will work only for MS Windows, and also provided that you
  1405.   spend time (sometimes a lot of time) to configure them correctly.
  1406.   Some of the modems which will work only under MS Windows are,
  1407.   unfortunately, not labeled as such.  If you buy a new one, make sure
  1408.   that you can return it for a refund if it will not work under Linux.
  1409.  
  1410.   While most new modems are plug-and-play you have various ways to deal
  1411.   with them:
  1412.  
  1413.   ╖  Use the "isapnp" program
  1414.  
  1415.   ╖  Have a PnP BIOS do the configuring
  1416.  
  1417.   ╖  Patch the kernel to create a PnP Linux
  1418.  
  1419.      Each of the above has shortcomings.  Isapnp documentation is
  1420.      difficult to understand although reading the Plug-and-Play-HOWTO
  1421.      (at present incomplete) will aid in understanding it.  If you want
  1422.      the PnP BIOS to do the configuring, all you need to do is to make
  1423.      sure that it knows you don't have a PnP operating system.  But it
  1424.      may not do it correctly.  To find out what it's done see ``What is
  1425.      set in my serial port hardware?''.   Patching the kernel can be
  1426.      complicated too and there might not be a patch against recent
  1427.      kernels.
  1428.  
  1429.   There are many Linux users that say that it's a lot simpler just to
  1430.   get an external modem and plug it in.  But since new peripherals are
  1431.   mostly PnP today, you may eventually need to deal with it, so why
  1432.   delay it?  Still, the most expedient (and expensive) solution is an
  1433.   external modem (if you have a free serial port).
  1434.  
  1435.  
  1436.   4.2.  External Modems
  1437.  
  1438.   4.2.1.  PnP External Modems
  1439.  
  1440.   Many external modems are labeled "Plug and Play" (PnP) but they should
  1441.   all work fine as non-PnP modems.  Since you usually plug the modem
  1442.   into a serial port which has its own IRQ number and IO address, the
  1443.   modem needs no PnP features to set these up.  However, the serial port
  1444.   itself may need to be configured (IRQ number and IO address) unless
  1445.   the default configuration is OK.
  1446.  
  1447.   How can an external modem be called PnP since it can't be configured
  1448.   by PnP?   Well, it has a special PnP identification built into it that
  1449.   can be read (thru the serial port) by a PnP operating system.  Such an
  1450.   operating system would then know that you have a modem on a certain
  1451.   port and would also know the model number.  Then you might not need to
  1452.   configure application programs by telling them what port the modem is
  1453.   on (such as /dev/ttyS2 or COM3).  But if you don't have such a PnP
  1454.   operating system you will need to configure your application program
  1455.   manually by giving it the /dev id (such as /dev/ttyS2).
  1456.  
  1457.  
  1458.   4.2.2.  Cabling & Installation
  1459.  
  1460.   Connecting an external modem is simple compared to connecting most
  1461.   other devices to a serial port that require various types of "null
  1462.   modem" cables.  Modems use straight through cable, with no pins
  1463.   crossed over.  Most computer stores should have these.  Make sure you
  1464.   get the correct gender.  If you are using the DB9 or DB25 serial port
  1465.   at your computer, it will always be male which means that the
  1466.   connector on the cable should be female.  Hook up your modem to one of
  1467.   your serial ports.  If you are willing to accept the default IRQ and
  1468.   IO address of the port you connect it to, then you are ready to start
  1469.   your communication program and configure the modem itself.
  1470.  
  1471.  
  1472.   4.2.3.  What the Lights (LED's) Mean
  1473.  
  1474.  
  1475.   ╖  TM Test Modem
  1476.  
  1477.   ╖  AA Auto Answer (If on, your modem will answer an incoming call)
  1478.  
  1479.   ╖  RD Receive Data line = RxD
  1480.  
  1481.   ╖  SD Send Data line = TxD
  1482.  
  1483.   ╖  TR data Terminal Ready = DTR (set by your PC)
  1484.  
  1485.   ╖  RI Ring Indicator (If on, someone is "ringing" your modem)
  1486.  
  1487.   ╖  OH Off Hook (If off, your modem has hung up the phone line)
  1488.  
  1489.   ╖  MR Modem Ready = DSR ??
  1490.  
  1491.   ╖  EC Error Correction
  1492.  
  1493.   ╖  DC Data Compression
  1494.  
  1495.   ╖  HS High Speed (for this modem)
  1496.  
  1497.  
  1498.   4.3.  Internal Modems
  1499.  
  1500.   An internal modem is installed in a PC by taking off the cover of the
  1501.   PC and inserting the modem card into a vacant slot on the motherboard.
  1502.   There are modems for the ISA slots and others for the PCI slots.
  1503.   While external modems plug into the serial port (via a short cable)
  1504.   the internal modems have the serial port built into the modem.  In
  1505.   other words, the modem card is both a serial port and a modem.
  1506.  
  1507.   Setting the IO address and IRQ for a serial port was formerly done by
  1508.   jumpers on the card.  These are little black rectangular "cubes" about
  1509.   5x4x2 mm in size which push in over pins on the card.  Plug-and-Play
  1510.   modems (actually the serial port part of the modems) don't use jumpers
  1511.   for setting these but instead are configured by sending configuration
  1512.   commands to them (via IO address space on the ISA bus inside the
  1513.   computer).  Such configuration commands can be sent by a PnP BIOS, the
  1514.   isapnp program (for the ISA bus only) or by a PnP operating system.
  1515.   The configuring of them is built into Windows 95/98 OSs.  Under Linux
  1516.   you have a choice of ways (none of which is always easy) to io-irq
  1517.   configure them:
  1518.  
  1519.   1. Use "isapnp" which may be run automatically at every boot-time
  1520.  
  1521.   2. Use a PnP BIOS alone (which runs at every boot-time)
  1522.  
  1523.   3. Patch Linux to make it a PnP operating system
  1524.  
  1525.  
  1526.   4.4.  Internal Modems You Must Avoid (winmodems, etc.)
  1527.  
  1528.   A majority of internal modems made after about mid-1998 don't work
  1529.   with Linux since they are "winmodems" or the like.   Names used
  1530.   include: HSP, HCF, and soft-... modem.  Such modems turn over much (or
  1531.   even almost all) of the work of the modem to the main processor (CPU)
  1532.   chip of your computer (such as a Pentium chip).  Since only Windows
  1533.   (and not Linux) software is provided to do this, it will not work
  1534.   under Linux.  A list of modems which do and don't work under Linux is
  1535.   at Linux modem list <http://www.o2.net/~gromitkc/winmodem.html>
  1536.  
  1537.   A better term for "winmodem" might be "software modem" or "soft-
  1538.   modem".  But since this software is only for MS Windows, the term
  1539.   "winmodem" is now a good one since it also implies it's "Windows-
  1540.   only".   The term "Winmodem" is a trademark for a certain type of
  1541.   "winmodem".  Here is some more precise terminology regarding
  1542.   "winmodems":
  1543.  
  1544.   HSP (Host Signal Processor) means that the host processor (your CPU
  1545.   chip) creates the code needed to produce the electrical signal on the
  1546.   phone line.  The modem itself just creates whatever electrical
  1547.   waveshape the CPU tells it to.  In contrast to this, a
  1548.   "controllerless" modem can create the waveshapes on its own (but can't
  1549.   control the modem).  It contains no facilities to deal with bytes
  1550.   being sent and received.  It can't compress strings of bytes; it can't
  1551.   check for errors; it can't put them into packets.  In other words it
  1552.   can't control the modem but instead has the CPU do all this work using
  1553.   a program for Windows.  The Rockwell HCF (Host Controlled Family) does
  1554.   this.  If the software that does all this could be ported to Linux and
  1555.   then there wouldn't be this problem.  Besides the above, a modem which
  1556.   doesn't simulate a serial port will not work under Linux.
  1557.  
  1558.   How do you determine if an internal modem will work under Linux?  If
  1559.   you don't know the model of the modem and you also have Windows on
  1560.   your Linux PC, click on the "Modem" icon in the "Control Panel".
  1561.   First check out the modem list on the Web mentioned 3 paragraphs
  1562.   above.  If that doesn't work (or isn't feasible),  you can look at the
  1563.   package it came in (or a manual) find the section on the package that
  1564.   says something like "Minimum System Requirements" or just "System
  1565.   Requirements".  It may be in fine print.  Read it closely.  If Windows
  1566.   is listed as one of the requirements then it will likely not work
  1567.   under Linux.
  1568.  
  1569.   Otherwise, it may work under Linux if it fails to state explicitly
  1570.   that you must have Windows.  By saying it's "designed for Windows" it
  1571.   may only mean that it fully supports Microsoft's plug-and-play which
  1572.   is OK since Linux uses the same plug-and-play specs (but doesn't
  1573.   support them very well as yet).  Being "designed for Windows" thus
  1574.   gives no clue as to whether or not it will work under Linux.  You
  1575.   might check the Website of the manufacturer or inquire via email.  I
  1576.   once saw a web-page that specifically stated that one model worked
  1577.   under Linux while implying that another model didn't.
  1578.  
  1579.   As far as the author knows, there is no effort currently underway to
  1580.   support winmodems in Linux.  You might request that modem
  1581.   manufacturers port their code to Linux (or the like).
  1582.  
  1583.  
  1584.  
  1585.   4.5.  Which Internal Modems are Best to Avoid ?
  1586.  
  1587.  
  1588.  
  1589.   ╖  ``Avoid: winmodems'' or the like.  They will NOT work at all
  1590.  
  1591.   ╖  ``PCI Modems'' seldom work under Linux
  1592.  
  1593.   ╖  ``MWave and DSP Modems'' might work, but only if you first start
  1594.      Windows/Dos each time you power on your PC
  1595.  
  1596.   ╖  Modems with ``RPI (Rockwell)'' drivers work but with reduced
  1597.      performance
  1598.  
  1599.  
  1600.   4.5.1.  MWave and DSP Modems
  1601.  
  1602.   Such modems use DSP's (Digital Signal Processors) which are programmed
  1603.   by algorithms which must be downloaded from the hard disk to the DSP's
  1604.   memory just before using the modem.  Unfortunately, the downloading is
  1605.   done by Dos/Windows programs so one can't do it from Linux.  Ordinary
  1606.   modems that work with Linux often have a DSP too (and may mention this
  1607.   on the packaging), but the program that runs it is stored inside the
  1608.   modem.  This is not a "DSP modem" in the sense of this section and
  1609.   should work OK under Linux.
  1610.  
  1611.   If a DSP modem modem simulates a serial port, then it is usable with
  1612.   Linux which communicates with modems via the serial port.  If you also
  1613.   have Dos/Windows on the same PC you may be able to use the modem:
  1614.   First start Dos/Windows (make sure the modem gets initialized) and
  1615.   then without turning off the computer, go into Linux.  One way to do
  1616.   this may be to press CTRL-ALT-DEL.  An example of a DSP modem is IBM's
  1617.   Aptiva MWAVE.
  1618.  
  1619.  
  1620.   4.5.2.  Rockwell (RPI) Drivers
  1621.  
  1622.   Modems that require Rockwell RPI drivers are not fully usable since
  1623.   the driver software doesn't work on Linux.  The RPI does compression
  1624.   and error correction using MS Windows software on your computer's CPU.
  1625.   If you are willing to operate the modem without using the RPI (and
  1626.   have no compression nor error correction) then you may easily disable
  1627.   RPI by sending the modem (via the initialization string) a command to
  1628.   do so each time you power on your modem.  On my modem this command is
  1629.   +H0.  Not having data compression available may not be much of a
  1630.   handicap since most long files which you download from the Internet
  1631.   are already compressed and attempts at further compression may only
  1632.   slow things down a bit.
  1633.  
  1634.  
  1635.   4.5.3.  PCI Modems
  1636.  
  1637.   A PCI modem card is one which inserts into a PCI-bus slot on the
  1638.   motherboard of a PC.  Unfortunately, it seems that almost all PCI
  1639.   modems will not work under Linux.  But since a few people have gotten
  1640.   PCI modems to work under Linux it seems that a tiny minority of such
  1641.   modems may work under Linux.  Some claim that no PCI modem will work
  1642.   under Linux but I've seen a few messages claiming it was done (in one
  1643.   case by using jumpers).
  1644.  
  1645.   After you install a PCI modem, look at /proc/pci.   If you see a high
  1646.   main memory address (like 0xfebfff00), it probably works by shared
  1647.   memory which is not supported by Linux.  If there is no such high
  1648.   memory address and the only address you see is an IO address under
  1649.   0xffff ??, then it might work OK.  I'm not really sure of the
  1650.   /proc/pci signature to look for to determine whether or not the modem
  1651.   will work under Linux.  If this request is still in the latest version
  1652.   of this HOWTO, please send me info on what /proc/pci looks like for
  1653.   PCI modems that work under Linux or let me know what signatures to
  1654.   look for in /proc/pci to determine whether or not the modem will work
  1655.   with Linux.
  1656.  
  1657.  
  1658.   5.  Serial Port Devices /dev/ttySN
  1659.  
  1660.   5.1.  Serial Port Device Names & Numbers
  1661.  
  1662.   Devices in Linux have major and minor numbers.  Each serial port may
  1663.   have 4 possible names, only 2 of which are official and found in the
  1664.   /dev directory: ttyS and cua.   The cua name is deprecated and may not
  1665.   be used in the future.  See ``The cua Device''.  Dos/Windows use the
  1666.   COM name while the setserial program uses tty00, tty01, etc.  Don't
  1667.   confuse dev/tty0, dev/tty1, etc. which are used for the console (your
  1668.   PC monitor) but are not serial ports.
  1669.  
  1670.  
  1671.  
  1672.               set-                                              IO
  1673.        dos   serial          major minor         major minor  address
  1674.        COM1  tty00  /dev/ttyS0  4,  64;  /dev/cua0  5,  64      3F8
  1675.        COM2  tty01  /dev/ttyS1  4,  65;  /dev/cua1  5,  65      2F8
  1676.        COM3  tty02  /dev/ttyS2  4,  66;  /dev/cua2  5,  66      3E8
  1677.        COM4  tty03  /dev/ttyS3  4,  67;  /dev/cua3  5,  67      2E8
  1678.  
  1679.  
  1680.  
  1681.  
  1682.   Note that all distributions should come with ttyS devices (and cua
  1683.   devices until cua is finally abolished) already made correctly.  You
  1684.   can verify this by typing:
  1685.  
  1686.  
  1687.  
  1688.        linux% ls -l /dev/cua*
  1689.        linux% ls -l /dev/ttyS*
  1690.  
  1691.  
  1692.  
  1693.  
  1694.  
  1695.   5.2.  Creating Devices In the /dev directory
  1696.  
  1697.   If you don't have a device, you will have to create it with the mknod
  1698.   command.  Example, suppose you needed to create devices for ttyS0:
  1699.  
  1700.  
  1701.        linux# mknod -m 666 /dev/cua0 c 5 64
  1702.        linux# mknod -m 666 /dev/ttyS0 c 5 64
  1703.  
  1704.  
  1705.  
  1706.  
  1707.   You can use the MAKEDEV script, which lives in /dev.  See the man page
  1708.   for it.  This simplifies the making of devices.  For example, if you
  1709.   needed to make the devices for ttyS0 you would type:
  1710.  
  1711.  
  1712.        linux# cd /dev
  1713.        linux# ./MAKEDEV ttyS0
  1714.  
  1715.  
  1716.  
  1717.   This handles the devices creation and should set the correct permis¡
  1718.   sions.
  1719.  
  1720.  
  1721.   5.3.  Link ttySN to /dev/modem ?
  1722.  
  1723.   On some installations, two extra devices will be created, /dev/modem
  1724.   for your modem and /dev/mouse for your mouse.  Both of these are
  1725.   symbolic links to the appropriate device in /dev which you specified
  1726.   during the installation (unless you have a bus mouse, then /dev/mouse
  1727.   will point to the bus mouse device).
  1728.  
  1729.   There has been some discussion on the merits of /dev/mouse and
  1730.   /dev/modem.  The use of these links is discouraged.  In particular, if
  1731.   you are planning on using your modem for dialin you may run into
  1732.   problems because the lock files may not work correctly if you use
  1733.   /dev/modem. Use them if you like, but be sure they point to the right
  1734.   device.  However, if you change or remove this link, some applications
  1735.   might need reconfiguration.
  1736.  
  1737.  
  1738.   5.4.  The cua Device
  1739.  
  1740.   Each ttyS device has a corresponding cua device.  It is planned to
  1741.   eventually abolish cua so it's best to use ttyS (unless cua is
  1742.   required).  There is a difference between cua and ttyS but a savvy
  1743.   programmer can make a ttyS port behave just like a cua port so there
  1744.   is no real need for the cua anymore.  Except some older programs may
  1745.   need to use the cua.
  1746.  
  1747.   What's the difference?  The  main difference between cua and ttyS has
  1748.   to do with what happens in a C-program when an ordinary "open" command
  1749.   tries to open the port. If a cua port has been set to check modem
  1750.   control signals, the port can be opened even if the DCD modem control
  1751.   signal says not to.  Astute programming (by adding additional lines to
  1752.   the program) can force a ttyS port to behave this way also.  But a cua
  1753.   port can be more easily programmed to open for dialing out on a modem
  1754.   even when the modem fails to assert DCD (since no one has called into
  1755.   it and there's no carrier).  That's why cua was once used for dial-out
  1756.   and ttyS used for dial-in.
  1757.  
  1758.   Starting with Linux kernel 2.2, a warning message will be put in the
  1759.   kernel log when one uses cua.  This is an omen that cua will sometime
  1760.   disappear.
  1761.  
  1762.  
  1763.   6.  Interesting Programs You Should Know About
  1764.  
  1765.   6.1.  What is getty?
  1766.  
  1767.   "getty" is a program that handles the login process when you log into
  1768.   a Linux box.  You will need to use some type of "getty" if you want
  1769.   others to be able to dial in to your Linux PC with a modem.  You do
  1770.   not need to use getty if you only want to dial out with your modem.
  1771.   There are three getty versions that modems may use with Linux: mgetty,
  1772.   getty_ps, and agetty.  agetty is the simplest (and weakest) of the
  1773.   three and some consider it mainly for text-terminals.  The syntax for
  1774.   these programs differs, so be sure to check that you are using the
  1775.   correct syntax for whatever getty you use.  If this sentence appears
  1776.   in the latest version of this howto, then if you can write a few
  1777.   paragraphs comparing mgetty with getty_ps, etc. please submit it so
  1778.   that it can be included here.  Mgetty is only a few years old and
  1779.   seems to be more popular for new installations than the older
  1780.   getty_ps.
  1781.  
  1782.  
  1783.   6.1.1.  About mgetty
  1784.  
  1785.   mgetty is a version of getty mainly for use with modems.  It may be
  1786.   used for hard-wired terminals but the documentation is about 99%
  1787.   related to modems.  In addition to allowing dialup logins, mgetty also
  1788.   provides FAX support and auto PPP detection.  There is a supplemental
  1789.   program called vgetty which handles voicemail for some modems.  mgetty
  1790.   documentation (supplied in texinfo format) is good, and does not need
  1791.   supplementing.  Please refer to it for installation instructions.  You
  1792.   can find the latest information on mgetty at
  1793.   http://www.leo.org/~doering/mgetty/ and
  1794.   <http://alpha.greenie.net/mgetty>
  1795.  
  1796.  
  1797.   6.1.2.  About getty_ps
  1798.  
  1799.  
  1800.   getty_ps  contains two programs: getty is used for console and
  1801.   terminal devices, and uugetty for modems.  Greg Hankins (former author
  1802.   of Serial-HOWTO) used uugetty so his writings about it are included
  1803.   here.  See ``Uugetty''.  The other gettys are well covered by the
  1804.   documentation that comes with them.
  1805.  
  1806.  
  1807.   6.1.3.  About agetty and mingetty
  1808.  
  1809.   agetty is the third variation of getty. It's a simple, completely
  1810.   functional implementation of getty which is best suited for virtual
  1811.   consoles or terminals rather than modems.  But it works fine with
  1812.   modems under favorable conditions.
  1813.  
  1814.   mingetty is a small getty that will work only for consoles (monitors).
  1815.   While the previous 3 variations of getty will work for both real
  1816.   terminals and dial-in modems, mingetty will not do this.
  1817.  
  1818.  
  1819.   6.2.  What is Setserial ?
  1820.  
  1821.   6.2.1.  Intro to Setserial
  1822.  
  1823.   setserial is a program which allows you to tell the device driver
  1824.   software the IO address of the serial port, which IRQ is set in the
  1825.   port's hardware, etc.  With appropriate options, it can also probe (at
  1826.   a given IO address) for a serial port but you must guess the IO
  1827.   address (or it may use whatever address the driver thinks your
  1828.   /dev/ttySx is at).  Setserial does not set either IRQ's nor IO
  1829.   addresses in the serial port hardware itself.  You must tell setserial
  1830.   the identical values that have been set in the hardware.  It's set in
  1831.   the hardware either by jumpers or by plug-and-play.  Do not just
  1832.   invent some values that you think would be nice to use.  However, if
  1833.   you know the IO address but don't know the IRQ you may command
  1834.   setserial to attempt to determine it.
  1835.  
  1836.   You can see a list of possible commands to use (but not the one-letter
  1837.   options such as -v for verbose --which you should normally use when
  1838.   troubleshooting) by typing setserial with no arguments.  Note that
  1839.   setserial calls an IO address a "port".  If the argument to setserial
  1840.   is for example just /dev/ttyS1, then you'll see some info about how
  1841.   that device driver is configured for that port.  But this doesn't tell
  1842.   you if the hardware actually has these values set in it.  If fact, you
  1843.   can run setserial and assign a purely fictitious IO address, any IRQ,
  1844.   and whatever uart type you would like to have.  Then the next time you
  1845.   type "setserial ..." it will display these bogus values without
  1846.   complaint.  Note that assignments made by setserial are lost when the
  1847.   PC is powered down so it is usually run automatically somewhere each
  1848.   time that Linux is booted.
  1849.   6.2.2.  Probing
  1850.  
  1851.   In order to try to find out if you have a certain piece of serial
  1852.   hardware you must first know its IO address (or the device driver must
  1853.   have an IO address for it, likely previously set by setserial).  To
  1854.   try to detect the physical hardware use the -v (verbose) and
  1855.   autoconfig command to setserial.  If the resulting message shows a
  1856.   uart type such as 16550A, then you're OK.  If instead it shows
  1857.   "unknown" for the uart type, then there is likely no serial port at
  1858.   all at that IO address.  Some cheap serial ports don't identify
  1859.   themselves correctly so if you see "unknown" you still might have
  1860.   something there.  See the file in which "setserial" is run at boot-
  1861.   time.  Besides auto-probing for uart type, setserial can auto-probe
  1862.   for IRQ's but this doesn't always work right either.
  1863.  
  1864.  
  1865.   6.2.3.  Boot-time Configuration
  1866.  
  1867.   There is usually a file somewhere that runs setserial at boot-time.
  1868.   If it's not run at boot-time then your Linux system will automatically
  1869.   configure only ttyS{0-3} using the default IRQs of 4 and 3 (with the
  1870.   default IRQ conflicts).  In 1998 it was (temporarily ?) changed to
  1871.   only ttyS{0-1}.  So if you have more than 2 serial ports, or want to
  1872.   have control over how the ports are configured you should configure
  1873.   using setserial.  In fact, your distribution may have set things up so
  1874.   that the setserial program runs automatically at boot-time.
  1875.  
  1876.   The file that runs setserial at boot-time is likely somewhere in the
  1877.   /etc directory-tree.  You might use "locate" to find a file named:
  1878.   rc.serial, or 0setserial (Debian), etc.  This supplied file which runs
  1879.   setserial at start-up may contain a number of commented-out examples.
  1880.   By uncommenting some of these and/or modifying them, you may be able
  1881.   to set things up correctly or run some tests.  You could copy a few of
  1882.   them to another file and then execute it as a shell script but don't
  1883.   forget to also copy any capitalized definitions needed such as
  1884.   SETSERIAL=/bin/setserial.
  1885.  
  1886.   If you use setserial you could test it on the command line first, and
  1887.   then when you have it working, put it into the file which runs it at
  1888.   boot-time: /etc/rc.d/rc.serial or /etc/rc.boot/0setserial so that it
  1889.   is run at startup.  If those files don't exist try /etc/rc.d/rc.local
  1890.   (someone reported that with one kernel, rc.local was executed too late
  1891.   after the serial port had already been opened).  Or you could just
  1892.   edit one of the above files and cross your fingers.  Make sure that
  1893.   you are using a valid path for setserial, and a valid device name.
  1894.  
  1895.  
  1896.   6.2.4.  IRQs
  1897.  
  1898.   By default, both ttyS0 and ttyS2 share IRQ 4, while ttyS0 and ttyS3
  1899.   share IRQ 3.  But sharing serial interrupts is not permitted unless
  1900.   you have kernel 2.2 or better.  If you don't have this modern kernel
  1901.   but only have two serial ports ttyS0 and ttyS1 you're still OK since
  1902.   IRQ sharing conflicts don't exist for non-existent devices.
  1903.  
  1904.   But if you do have more than 2 serial ports, then for kernels < 2.2
  1905.   such sharing may be dangerous if the two devices with the same IRQ are
  1906.   being used at the same time.  If you add an internal modem and retain
  1907.   ttyS0 and ttyS1, then you should attempt to find an unused IRQ and set
  1908.   it both on your modem card (or serial port) and then use setserial to
  1909.   assign it to your device driver.  If IRQ 5 is not being used for a
  1910.   sound card, this may be one you can use for a modem.  To set the IRQ
  1911.   in hardware you may need to use isapnp, a PnP BIOS (See ``Using a PnP
  1912.   BIOS to I0-IRQ Configure'') or patch Linux to make it PnP.  To help
  1913.   you determine which spare IRQ's you might have, type "man setserial"
  1914.   and search for say: "IRQ 11".
  1915.   6.3.  What is isapnp ?
  1916.  
  1917.   isapnp is a program to configure Plug-and-Play (PnP) devices on the
  1918.   ISA bus including internal modems.  It comes in a package called
  1919.   "isapnptools" and includes another program, "pnpdump" which finds all
  1920.   your ISA PnP devices and shows you options for configuring them in a
  1921.   format which may be added to the PnP configuration file:
  1922.   /etc/isapnp.conf.  It may also be used with the --dumpregs option to
  1923.   show the current IO address and IRQ of the modem's serial port.  The
  1924.   isapnp command may be put into a startup file so that it runs each
  1925.   time you start the computer and thus will configure ISA PnP devices.
  1926.   It is able to do this even if your BIOS doesn't support PnP.  See
  1927.   Plug-and-Play-HOWTO.
  1928.  
  1929.  
  1930.   6.4.  What is wvdialconf ?
  1931.  
  1932.   wvdialconf will try to find which serial port has a modem on it.  It
  1933.   also creates a configuration program for the wvdial program.  wvdial
  1934.   is used for simplified dialing out using the PPP protocol to an ISP.
  1935.   But you don't need to install PPP in order to use wvdialconf.  It will
  1936.   not find a modem if it's in use.  It will also automatically devise a
  1937.   "suitable" init strings but sometimes gets it wrong.  Since this
  1938.   command has no options, it's simple to use but you must give it the
  1939.   name of a file to put the init string (and other data) into.  For
  1940.   example type: wvdialconf my_file_name.
  1941.  
  1942.  
  1943.   6.5.  What is stty ?
  1944.  
  1945.   stty is like setserial but it sets the baud rate and other parameters
  1946.   of a serial port.  Typing "stty -a < /dev/ttyS2" should show you how
  1947.   ttyS2 is configured.  Most of the settings are for things that you
  1948.   never need to use with modems (such as some used only for old
  1949.   terminals of the 1970s).  Your communication package should
  1950.   automatically set up all the setting correctly for modems.  But stty
  1951.   is sometimes useful for trouble-shooting.
  1952.  
  1953.   Two items set by stty are: 1. Hardware flow control by "crtscts" and
  1954.   2. Ignore the DCD signal from the modem: "clocal".  If the modem is
  1955.   not sending a DCD signal and clocal is disabled (stty shows -clocal)
  1956.   then a program may not be able to open the serial port.  If the port
  1957.   can't open, the program may just hang, waiting (often in vain) for a
  1958.   DCD signal from the modem.
  1959.  
  1960.   Minicom sets clocal automatically when it starts up so there is no
  1961.   problem.  But version 6.0.192 of Kermit hung when I set -clocal and
  1962.   tried to "set line ..." If -clocal is set and there is no DCD signal
  1963.   then even the "stty" command will hang and there is seemingly no way
  1964.   to set clocal (except by running minicom).  But minicom will restore
  1965.   -clocal when it exits.  One way to get out of this is to use minicom
  1966.   to send the "AT&C" to the modem (to get the DCD signal) and then exit
  1967.   minicom with no reset so that the DCD signal remains on.  Then you may
  1968.   use stty again.
  1969.  
  1970.  
  1971.   7.  Trying Out Your Modem (Dialing Out).
  1972.  
  1973.   7.1.  Are You Ready to Dial Out ?
  1974.  
  1975.   Once you've plugged in your modem and know which serial port it's on
  1976.   you're ready to try using it.  Before you try to get the Internet on
  1977.   it or have people call in to you, first try something simpler like
  1978.   dialing out to some number to see if your modem is working OK.  Find a
  1979.   phone number that is connected to a modem.  It you don't know what
  1980.   number to call, ask at computer stores for such phone numbers of
  1981.   bulletin boards, etc. or see if a local library has a phone number for
  1982.   their on-line catalog.
  1983.  
  1984.   Then make sure you are ready to phone.  Do you know what serial port
  1985.   (such as ttyS2) your modem is on?  You should have found this out when
  1986.   you io-irq configured your serial ports.  Have you decided what speed
  1987.   you are going to use for this port?  See ``Speed Table'' for a quick
  1988.   selection or ``What Speed Should I Use'' for more details.  If you
  1989.   have no idea what speed to set, just set it a few times faster than
  1990.   the advertised speed of your modem.  Also remember that if you see a
  1991.   menu where an option is "hardware flow control" and/or "RTS/CTS" or
  1992.   the like, select it.  Is a live telephone cable plugged in to your
  1993.   modem?  You may want to connect the cable to a real telephone to make
  1994.   sure that it can produce a dial tone.
  1995.  
  1996.   Now you need to select a communication (dialing) program to use to
  1997.   dial out.  Dialing programs include: minicom, seyon (X-windows), and
  1998.   kermit.  See section ``Communications Programs'' about some
  1999.   communications programs.  Two examples are presented next: ``Dialing
  2000.   Out with Minicom'' and ``Dialing Out with Kermit''
  2001.  
  2002.  
  2003.  
  2004.   7.2.  Dialing Out with Minicom
  2005.  
  2006.   Minicom comes with most Linux distributions.  To configure it you
  2007.   should be the root user.  Type "minicom -s" to configure.  This will
  2008.   take you directly to the configuration (set-up) menus.  Alternatively
  2009.   you could just run "minicom" and then type ^A to see the bottom status
  2010.   line.  This shows to type ^A Z for help (you've already typed the ^A
  2011.   so just type z).  From the help menu go to the Configuration menu.
  2012.  
  2013.   Most of the options don't need to be set for just simply dialing out.
  2014.   To configure you have to supply a few basic items: the name of the
  2015.   serial port your modem is on such as /dev/ttyS2 and the speed such as
  2016.   115200.  These are set at the serial port menu.  Go to it and set
  2017.   them.  Also (if possible) set hardware flow control (RTS/CTS).  Then
  2018.   save them.  When typing in the speed, you should also see something
  2019.   like "8N1" which you should leave alone.  It means: 8-bit bytes, No
  2020.   parity, 1 stop-bit appended to each byte.  If you can't find the speed
  2021.   you want, a lower speed will always work for a test.   Exit (hit
  2022.   return) when done and save the configuration as default (dfl) using
  2023.   the menu.  You may want to exit minicom and start it again so it can
  2024.   now find the serial port and initialize the modem, or you could go to
  2025.   help and tell minicom to initialize the modem.
  2026.  
  2027.   Now you are ready to dial.  But first at the main screen you get after
  2028.   you first type "minicom" make sure there's a modem there by typing AT
  2029.   and then hit the "enter/return" key.  It should display OK.  If it
  2030.   doesn't something is wrong and there is no point of trying to dial.
  2031.  
  2032.   If you got the "OK" go back to help and select the dialing directory.
  2033.   You may edit it and type in a phone number, etc. into the directory
  2034.   and then select "dial" to dial it.  Alternatively, you may just dial
  2035.   manually (by selecting "manual" and then type the number at the
  2036.   keyboard).  If it doesn't work, carefully note any error messages and
  2037.   try to figure out what went wrong.
  2038.  
  2039.  
  2040.   7.3.  Dialing Out with Kermit
  2041.  
  2042.   You can find the latest version of kermit at
  2043.   http://www.columbia.edu/kermit/.  For example, say your modem was on
  2044.   ttyS3, and it's speed was 115200 bps.  You would do the following:
  2045.  
  2046.  
  2047.   linux# kermit
  2048.   C-Kermit 6.0.192, 6 Sep 96, for Linux
  2049.    Copyright (C) 1985, 1996,
  2050.     Trustees of Columbia University in the City of New York.
  2051.   Default file-transfer mode is BINARY
  2052.   Type ? or HELP for help.
  2053.   C-Kermit>set line /dev/ttyS3
  2054.   C-Kermit>set carrier-watch off
  2055.   C-Kermit>set speed 115200
  2056.   /dev/ttyS3, 115200 bps
  2057.   C-Kermit>c
  2058.   Connecting to /dev/ttyS3, speed 115200.
  2059.   The escape character is Ctrl-\ (ASCII 28, FS)
  2060.   Type the escape character followed by C to get back,
  2061.   or followed by ? to see other options.
  2062.   ATE1Q0V1                           ; you type this and then the Enter key
  2063.   OK                                 ; modem should respond with this
  2064.  
  2065.  
  2066.  
  2067.  
  2068.   If your modem responds to AT commands, you can assume your modem is
  2069.   working correctly on the Linux side.  Now try calling another modem by
  2070.   typing:
  2071.  
  2072.  
  2073.        ATDT7654321
  2074.  
  2075.  
  2076.  
  2077.  
  2078.   where 7654321 is a phone number.  Use ATDP instead of ATDT if you have
  2079.   a pulse line.  If the call goes through, your modem is working.
  2080.  
  2081.   To get back to the kermit prompt, hold down the Ctrl key, press the
  2082.   backslash key, then let go of the Ctrl key, then press the C key:
  2083.  
  2084.  
  2085.        Ctrl-\-C
  2086.        (Back at linux)
  2087.        C-Kermit>quit
  2088.        linux#
  2089.  
  2090.  
  2091.  
  2092.  
  2093.   This was just a test using the primitive "by-hand" dialing method.
  2094.   The normal method is to let kermit do the dialing for you with its
  2095.   built-in modem database and automatic dialing features, for example
  2096.   using a US Robotics (USR) modem:
  2097.  
  2098.  
  2099.  
  2100.  
  2101.  
  2102.  
  2103.  
  2104.  
  2105.  
  2106.  
  2107.  
  2108.  
  2109.  
  2110.  
  2111.  
  2112.  
  2113.   linux# kermit
  2114.   C-Kermit 6.0.192, 6 Sep 1997, for Linux
  2115.    Copyright (C) 1985, 1996,
  2116.     Trustees of Columbia University in the City of New York.
  2117.   Default file-transfer mode is BINARY
  2118.   Type ? or HELP for help
  2119.   C-Kermit>set modem type usr        ; Select modem type
  2120.   C-Kermit>set line /dev/ttyS3       ; Select communication device
  2121.   C-Kermit>set speed 115200          ; Set the dialing speed
  2122.   C-Kermit>dial 7654321              ; Dial
  2123.    Number: 7654321
  2124.    Device=/dev/ttyS3, modem=usr, speed=115200
  2125.    Call completed.<BEEP>
  2126.   Connecting to /dev/ttyS3, speed 115200
  2127.   The escape character is Ctrl-\ (ASCII 28, FS).
  2128.   Type the escape character followed by C to get back,
  2129.   or followed by ? to see other options.
  2130.  
  2131.   Welcome to ...
  2132.  
  2133.   login:
  2134.  
  2135.  
  2136.  
  2137.  
  2138.  
  2139.   8.  Uugetty for Dial-In (from the old Serial-HOWTO)
  2140.  
  2141.   8.1.  Installing getty_ps
  2142.  
  2143.   Since uugetty is part of getty_ps you'll first have to install
  2144.   getty_ps.  If you don't have it, get the latest version from
  2145.   metalab.unc.edu:/pub/Linux/system/serial.  In particular, if you want
  2146.   to use high speeds (57600 and 115200 bps), you must get version 2.0.7j
  2147.   or later.  You must also have libc 5.x or greater.
  2148.  
  2149.  
  2150.   By default, getty_ps will be configured to be Linux FSSTND (File
  2151.   System Standard) compliant, which means that the binaries will be in
  2152.   /sbin, and the config files will be named /etc/conf.{uu}getty.ttySN.
  2153.   This is not apparent from the documentation!  It will also expect lock
  2154.   files to go in /var/lock.  Make sure you have the /var/lock directory.
  2155.  
  2156.   If you don't want FSSTND compliance, binaries will go in /etc, config
  2157.   files will go in /etc/default/{uu}getty.ttySN, and lock files will go
  2158.   in /usr/spool/uucp.  I recommend doing things this way if you are
  2159.   using UUCP, because UUCP will have problems if you move the lock files
  2160.   to where it isn't looking for them.
  2161.  
  2162.  
  2163.   getty_ps can also use syslogd to log messages.  See the man pages for
  2164.   syslogd(1) and syslog.conf(5) for setting up syslogd, if you don't
  2165.   have it running already.  Messages are logged with priority LOG_AUTH,
  2166.   errors use LOG_ERR, and debugging uses LOG_DEBUG.  If you don't want
  2167.   to use syslogd you can edit tune.h in the getty_ps source files to use
  2168.   a log file for messages instead, namely /var/adm/getty.log by default.
  2169.  
  2170.  
  2171.   Decide on if you want FSSTND compliance and syslog capability.  You
  2172.   can also choose a combination of the two.  Edit the Makefile, tune.h
  2173.   and config.h to reflect your decisions.  Then compile and install
  2174.   according to the instructions included with the package.
  2175.  
  2176.   >From this point on, all references to getty will refer to getty_ps.
  2177.   References to uugetty will refer to the uugetty that comes with the
  2178.   getty_ps package.  These instructions will not work for mgetty or
  2179.   agetty.
  2180.  
  2181.  
  2182.   8.2.  Setting up uugetty
  2183.  
  2184.   Make sure that you have an outgoing and incoming device for the serial
  2185.   port your modem is on.  If you have your modem on ttyS3 you
  2186.   will need the /dev/cua3, and /dev/ttyS3 devices.  If you don't have
  2187.   the correct devices, see section ``Creating Devices In <tt>/dev</tt>''
  2188.   on how to create devices, and create the devices.  If you want to be
  2189.   able to dial out with your modem while uugetty is watching the port
  2190.   for logins, use the /dev/cuaN device instead of the /dev/ttySN device
  2191.   [One wouldn't need cua if the software was written to avoid it.]
  2192.  
  2193.  
  2194.   uugetty does important lock file checking.  Update /etc/gettydefs to
  2195.   include an entry for your modem.  When you are done editing
  2196.   /etc/gettydefs, you can verify that the syntax is correct by doing:
  2197.  
  2198.  
  2199.        linux# getty -c /etc/gettydefs
  2200.  
  2201.  
  2202.  
  2203.  
  2204.  
  2205.   8.2.1.  Modern Modems
  2206.  
  2207.   If you have a 9600 bps or faster modem with data compression, you can
  2208.   lock your serial port to one speed.  For example:
  2209.  
  2210.  
  2211.        # 115200 fixed speed
  2212.        F115200# B115200 CS8 # B115200 SANE -ISTRIP HUPCL #@S @L @B login: #F115200
  2213.  
  2214.  
  2215.  
  2216.  
  2217.  
  2218.   If you have your modem set up to do RTS/CTS hardware flow control, you
  2219.   can add CRTSCTS to the entries:
  2220.  
  2221.  
  2222.        # 115200 fixed speed with hardware flow control
  2223.        F115200# B115200 CS8 CRTSCTS # B115200 SANE -ISTRIP HUPCL CRTSCTS #@S @L @B login: #F115200
  2224.  
  2225.  
  2226.  
  2227.  
  2228.  
  2229.   8.2.2.  Old slow modems
  2230.  
  2231.   If you have a slow modem (under 9600 bps) Then, instead of one line
  2232.   for a single speed, your need several lines to try a number of speeds.
  2233.   Note the these lines are linked to each other by the last "word" in
  2234.   the line such as #38400.  Blank lines are needed between each entry.
  2235.  
  2236.  
  2237.  
  2238.  
  2239.  
  2240.  
  2241.  
  2242.  
  2243.  
  2244.  
  2245.   # Modem entries
  2246.   115200# B115200 CS8 # B115200 SANE -ISTRIP HUPCL #@S @L @B login: #57600
  2247.  
  2248.   57600# B57600 CS8 # B57600 SANE -ISTRIP HUPCL #@S @L @B login: #38400
  2249.  
  2250.   38400# B38400 CS8 # B38400 SANE -ISTRIP HUPCL #@S @L @B login: #19200
  2251.  
  2252.   19200# B19200 CS8 # B19200 SANE -ISTRIP HUPCL #@S @L @B login: #9600
  2253.  
  2254.   9600# B9600 CS8 # B9600 SANE -ISTRIP HUPCL #@S @L @B login: #2400
  2255.  
  2256.   2400# B2400 CS8 # B2400 SANE -ISTRIP HUPCL #@S @L @B login: #115200
  2257.  
  2258.  
  2259.  
  2260.  
  2261.  
  2262.   8.2.3.  Login Banner
  2263.  
  2264.   If you want, you can make uugetty print interesting things in the
  2265.   login banner.  In Greg's  examples, he has the system name, the serial
  2266.   line, and the current bps rate.  You can add other things:
  2267.  
  2268.  
  2269.  
  2270.               @B    The current (evaluated at the time the @B is seen) bps rate.
  2271.               @D    The current date, in MM/DD/YY.
  2272.               @L    The serial line to which getty is attached.
  2273.               @S    The system name.
  2274.               @T    The current time, in HH:MM:SS (24-hour).
  2275.               @U    The number of currently signed-on users.  This is  a
  2276.                     count of the number of entries in the /etc/utmp file
  2277.                     that have a non-null ut_name field.
  2278.               @V    The value of VERSION, as given in the defaults file.
  2279.               To display a single '@' character, use either '\@' or '@@'.
  2280.  
  2281.  
  2282.  
  2283.  
  2284.  
  2285.   8.3.  Customizing uugetty
  2286.  
  2287.   There are lots of parameters you can tweak for each port you have.
  2288.   These are implemented in separate config files for each port.  The
  2289.   file /etc/conf.uugetty will be used by all instances of uugetty, and
  2290.   /etc/conf.uugetty.ttySN will only be used by that one port.  Sample
  2291.   default config files can be found with the getty_ps source files,
  2292.   which come with most Linux distributions.  Due to space concerns, they
  2293.   are not listed here.  Note that if you are using older versions of
  2294.   getty (older than 2.0.7e), or aren't using FSSTND, then the default
  2295.   file will be /etc/default/uugetty.ttySN.  Greg's
  2296.   /etc/conf.uugetty.ttyS3 looked like this:
  2297.  
  2298.  
  2299.  
  2300.  
  2301.  
  2302.  
  2303.  
  2304.  
  2305.  
  2306.  
  2307.  
  2308.  
  2309.  
  2310.  
  2311.   # sample uugetty configuration file for a Hayes compatible modem to allow
  2312.   # incoming modem connections
  2313.   #
  2314.   # alternate lock file to check... if this lock file exists, then uugetty is
  2315.   # restarted so that the modem is re-initialized
  2316.   ALTLOCK=cua3
  2317.   ALTLINE=cua3
  2318.   # line to initialize
  2319.   INITLINE=cua3
  2320.   # timeout to disconnect if idle...
  2321.   TIMEOUT=60
  2322.   # modem initialization string...
  2323.   # format: <expect> <send> ... (chat sequence)
  2324.   INIT="" AT\r OK\r\n
  2325.   WAITFOR=RING
  2326.   CONNECT="" ATA\r CONNECT\s\A
  2327.   # this line sets the time to delay before sending the login banner
  2328.   DELAY=1
  2329.   #DEBUG=010
  2330.  
  2331.  
  2332.  
  2333.  
  2334.   Add the following line to your /etc/inittab, so that uugetty is run on
  2335.   your serial port, substituting in the correct information for your
  2336.   environment - run-levels (2345 or 345, etc.)  config file location,
  2337.   port, speed, and default terminal type:
  2338.  
  2339.  
  2340.  
  2341.        S3:2345:respawn:/sbin/uugetty -d /etc/default/uugetty.ttyS3 ttyS3 F115200 vt100
  2342.  
  2343.  
  2344.  
  2345.  
  2346.   Restart init:
  2347.  
  2348.  
  2349.        linux# init q
  2350.  
  2351.  
  2352.  
  2353.  
  2354.   For the speed parameter in your /etc/inittab, you want to use the
  2355.   highest bps rate that your modem supports.
  2356.  
  2357.   Now Linux will be watching your serial port for connections.  Dial in
  2358.   from another machine and login to you Linux system.
  2359.  
  2360.   uugetty has a lot more options, see the man page for getty(1m) for a
  2361.   full description.  Among other things there is a scheduling feature,
  2362.   and a ringback feature.
  2363.  
  2364.  
  2365.   9.  What Speed Should I Use with My Modem?
  2366.  
  2367.   By "speed" we really mean the "data flow rate" but almost everybody
  2368.   incorrectly calls it speed.  For all modern modems you have no choice
  2369.   of the speed that the modem uses on the telephone line since it will
  2370.   automatically choose the highest possible speed that is possible under
  2371.   the circumstances.  But you do have a choice as to what speed will be
  2372.   used between your modem and your computer.  This is sometimes called
  2373.   "DTE speed" where "DTE" stands for Data Terminal Equipment (Your
  2374.   computer is a DTE.)  You need to set this speed high enough so this
  2375.   part of the signal path will not be a bottleneck.  The setting for the
  2376.   DTE speed is the maximum speed of this link.  Most of the time it will
  2377.   likely operate at lower speeds.
  2378.  
  2379.   For an external modem, DTE speed is the speed (in bits/sec) of the
  2380.   flow over the cable between you modem and PC.  For an internal modem,
  2381.   it's the same idea since the modem also emulates a serial port.  It
  2382.   may seem ridiculous having a speed limit on communication between a
  2383.   computer and a modem card that is directly connected inside the
  2384.   computer to a much higher speed bus.  But it's that way since the
  2385.   modem card probably includes a dedicated serial port which does have
  2386.   speed limits (and settable speeds).
  2387.  
  2388.  
  2389.   9.1.  Speed and Data Compression
  2390.  
  2391.   What speed do you choose?  If it were not for "data compression" one
  2392.   might try to choose a DTE speed exactly the same as the modem speed.
  2393.   Data compression takes the bytes sent to the modem from your computer
  2394.   and encodes them into a fewer number of bytes.  For example, if the
  2395.   flow (speed) from the PC to the modem was 20,000 bytes/sec (bps) and
  2396.   the compression ratio was 2 to 1, then only 10,000 bytes/sec would
  2397.   flow over the telephone line.  Thus for a 2:1 compression ratio you
  2398.   need to set the speed double the maximum modem speed on the phone
  2399.   line.  If the compression ratio is 3 to 1 you need to set it 3 times
  2400.   faster.
  2401.  
  2402.  
  2403.   9.2.  Where do I Set Speed ?
  2404.  
  2405.   This DTE speed is normally set by a menu in your communications
  2406.   program or by an option given to the getty command if someone is
  2407.   dialing in.  You can't set the DCE modem-to-modem speed.
  2408.  
  2409.  
  2410.   9.3.  Can't Set a High Enough Speed
  2411.  
  2412.   You need to find out the highest speed supported by your hardware.  As
  2413.   of late 1998 most hardware only supported speeds up to 115.2K bps.  A
  2414.   few 56K internal modems support 230.4K bps.  If you  have a
  2415.   communications programs that doesn't show high enough speeds in its
  2416.   menu, then there are some options you can give to the setserial
  2417.   command so that a low speed command from the communication program
  2418.   will actually result in a higher speed.  With these options, when you
  2419.   set the speed for 38400 the actual speed will be much higher.  See the
  2420.   man page for "setserial" and search for spd_hi, spd_vhi, spd_cust,
  2421.   baud_base, and divisor.  Note that you must set baud_base to the
  2422.   actual maximum speed of the hardware.  This speed is usually lower
  2423.   than the frequency of the crystal oscillator in the hardware since the
  2424.   crystal frequency is often divided by 16 in the hardware to get the
  2425.   actual top speed.  The reason the crystal frequency needs to be higher
  2426.   is so that this high crystal speed can be used to take a number of
  2427.   samples of each  bit to determine if it's a 1 or a 0.  To get a speed
  2428.   of 230400 (if this is what your serial port hardware supports --few
  2429.   do) on ttyS2 you could use:
  2430.  
  2431.   setserial /dev/ttyS2 spd_cust baud_base 230400 divisor 1
  2432.   In some cases this works when "stty 230400" doesn't.  Since you've
  2433.   used spd_cust you'll have to claim the speed is 38400 somewhere else
  2434.   to obtain the actual speed of 230400.  This method of setting speed is
  2435.   sort of a hack and when applications catch up to higher speeds it
  2436.   might not be needed anymore.
  2437.  
  2438.  
  2439.   9.4.  Speed Table
  2440.  
  2441.   It's best to have at least a 16650 UART for a 56K modem but few modems
  2442.   support it.  Second best is a 16550 that has been tweaked to give
  2443.   230,400 bps.  Here are some suggested speeds to set your serial line
  2444.   if your modem speed is:
  2445.  
  2446.   ╖  56K (V.90) use 115200 bps or 230400 bps (a few % faster ?)
  2447.  
  2448.   ╖  28.8K (V.34), 33.6K (V.34) use 115200 bps
  2449.  
  2450.   ╖  14400 bps (V.32bis), with V.42bis data compression, use 57600 bps
  2451.  
  2452.   ╖  9600 bps (V.32), with V.42bis data compression, use 38400 bps
  2453.  
  2454.   ╖  slower than a 9600 bps (V.32) modem, set your speed to the highest
  2455.      speed your modem supports.
  2456.  
  2457.  
  2458.   10.  Communications Programs And Utilities
  2459.  
  2460.   PPP is by far the most widely used.  It's used for Internet access.
  2461.   For dialing out to public libraries, bulletin boards, etc.  minicom is
  2462.   the most popular followed by Seyon (X-Windows only) and Kermit.
  2463.  
  2464.  
  2465.   10.1.  Minicom vs. Kermit
  2466.  
  2467.   Minicom is only a communications program while Kermit is both a
  2468.   communications program and a file transfer protocol.  But one may use
  2469.   the Kermit protocol from within Minicom (provided one has Kermit
  2470.   installed on one's PC) .  Minicom is menu based while Kermit is
  2471.   command line based (interactive at the special Kermit prompt).  While
  2472.   the Kermit program is free software, the documentation is not all
  2473.   free.  There is no detailed manual supplied and it is suggested that
  2474.   you purchase a book as the manual.  However Kermit has interactive
  2475.   online help which tells all but lacks tutorial explanations for the
  2476.   beginner.  Commands may be put in a script file so you don't have to
  2477.   type them over again each time.  Kermit (as a communications program)
  2478.   is more powerful than Minicom.
  2479.  
  2480.   Although all Minicom documentation is free, it's not as extensive as
  2481.   Kermit's.  Since permission is required to include Kermit in a
  2482.   commercial distribution, and since the documentation is not entirely
  2483.   free, some distributions don't include Kermit.  In my opinion it's
  2484.   easier to set up Minicom and there is less to learn.
  2485.  
  2486.  
  2487.   10.2.  Lists of Programs
  2488.  
  2489.   Here is a list of some communication software you can choose from,
  2490.   available via FTP, if they didn't come with your distribution.  I
  2491.   would like comparative comments on the dialout programs.  Are the
  2492.   least popular ones obsolete?
  2493.  
  2494.  
  2495.   10.2.1.  Least Popular Dialout
  2496.  
  2497.  
  2498.  
  2499.   ╖  ecu - a communications program
  2500.  
  2501.   ╖  pcomm - procomm-like communications program with zmodem
  2502.  
  2503.   ╖  xc - xcomm communication package
  2504.  
  2505.  
  2506.  
  2507.  
  2508.  
  2509.   10.2.2.  Most Popular Dialout
  2510.  
  2511.  
  2512.  
  2513.   ╖  minicom - telix-like communications program.  Supports scripts,
  2514.      zmodem, kermit
  2515.  
  2516.   ╖  C-Kermit <http://www.columbia.edu/kermit/> - portable, scriptable,
  2517.      serial and TCP/IP communications including file transfer,
  2518.      character-set translation, and zmodem support
  2519.  
  2520.   ╖  seyon - X based communication program
  2521.  
  2522.  
  2523.   10.2.3.  Fax
  2524.  
  2525.  
  2526.  
  2527.   ╖  efax a small fax program
  2528.  
  2529.   ╖  hylafax a large fax program based on the client-server model.
  2530.  
  2531.   ╖  mgetty+fax handles fax stuff and login for dial-ins
  2532.  
  2533.  
  2534.   10.2.4.  Voicemail
  2535.  
  2536.  
  2537.  
  2538.   ╖  mvm <http://www-internal.alphanet.ch/~schafer/mvm> is a Minimal
  2539.      VoiceMail for Linux
  2540.  
  2541.   ╖  vgetty is an extension to mgetty that handles voicemail for some
  2542.      modems.  It should come with recent releases of mgetty.
  2543.  
  2544.  
  2545.   10.2.5.  Dial-in (uses getty)
  2546.  
  2547.  
  2548.  
  2549.   ╖  mgetty+fax is for modems and is well documented.  It also handles
  2550.      fax stuff and provides an alternative to uugetty.  It's
  2551.      incorporating callback and voicemail (using vgetty) features.  See
  2552.      ``About mgetty''
  2553.  
  2554.   ╖  uugetty is for modems.  It comes as a part of the ps_getty package.
  2555.      See ``About getty_ps''
  2556.  
  2557.  
  2558.   10.2.6.  Other
  2559.  
  2560.  
  2561.  
  2562.   ╖  callback is where you dial out to a remote modem and then that
  2563.      modem hangs up and calls you back (to save on phone bills).
  2564.  
  2565.   ╖  SLiRP and term provide a PPP-like service that you can run in user
  2566.      space on a remote computer with a shell account.  See ``term and
  2567.      SLiRP'' for more details
  2568.  
  2569.   ╖  ZyXEL is a control program for ZyXEL U-1496 modems.  It handles
  2570.      dialin, dialout, dial back security, FAXing, and voice mailbox
  2571.      functions.
  2572.  
  2573.   ╖  SLIP and PPP software can be found at
  2574.       ftp://metalab.unc.edu/pub/Linux/system/network/serial.
  2575.   ╖  Other things can be found on
  2576.      ftp://metalab.unc.edu/pub/Linux/system/serial and
  2577.      ftp://metalab.unc.edu/pub/Linux/apps/serialcomm or one of the many
  2578.      mirrors.  These are the directories where serial programs are kept.
  2579.  
  2580.  
  2581.   10.3.  SLiRP  and term
  2582.  
  2583.   SLiRP and term are programs which are of use if you only have a dial-
  2584.   up shell account on a Unix-like machine and want to get the equivalent
  2585.   of a PPP account (or the like) without being authorized to have it
  2586.   (possibly because you don't want to pay extra for it, etc.).  SLiRP is
  2587.   more popular than term which is almost obsolete.
  2588.  
  2589.   To use SLiRP you install it in your shell account on the remote
  2590.   computer.  Then you dial up the account and run SLiRP on the remote
  2591.   and PPP on your local PC.  You now have a PPP connection over which
  2592.   you may run a web browser on your local PC such as Netscape, etc.
  2593.   There may be some problems as SLiRP is not as good as a real PPP
  2594.   account.  Some accounts may provide SLiRP since it saves on IP
  2595.   addresses (You have no IP address while using SLiRP).
  2596.  
  2597.   term is something like SLiRP only you need to run term on both the
  2598.   local and remote computer.  There is no PPP on the phone line since
  2599.   term uses its own protocol.  To use term from your PC you need to use
  2600.   a term-aware version of ftp to do ftp, etc.  Thus it's easier to use
  2601.   SLiRP since the ordinary version of ftp works fine with SLiRP.  There
  2602.   is an unmaintained Term HOWTO.
  2603.  
  2604.  
  2605.   11.  What Are UARTs?  How Do They Affect Performance?
  2606.  
  2607.   UARTs (Universal Asynchronous Receiver Transmitter) are serial chips
  2608.   on your PC motherboard (or on an internal modem card).   The UART
  2609.   function may also be done on a chip that does other things as well.
  2610.   On older computers like many 486's, the chips were on the disk IO
  2611.   controller card.  Still older computer have dedicated serial boards.
  2612.  
  2613.   The UART's purpose is to convert bytes from the PC's parallel bus to a
  2614.   serial bit-stream.  The cable going out of the serial port is serial
  2615.   and has only one wire for each direction of flow.  The serial port
  2616.   sends out a stream of bits, one bit at a time.  Conversely, the bit
  2617.   stream that enters the serial port via the external cable is converted
  2618.   to parallel bytes that the computer can understand.  UARTs deal with
  2619.   data in byte sized pieces, which is conveniently also the size of
  2620.   ASCII characters.
  2621.  
  2622.   Say you have a terminal hooked up to your PC.  When you type a
  2623.   character, the terminal gives that character to it's transmitter (also
  2624.   a UART).  The transmitter sends that byte out onto the serial line,
  2625.   one bit at a time, at a specific rate.  On the PC end, the receiving
  2626.   UART takes all the bits and rebuilds the (parallel) byte and puts it
  2627.   in a buffer.
  2628.  
  2629.   There are two basic types of UARTs: dumb UARTS and FIFO UARTS.  Dumb
  2630.   UARTs are the 8250, 16450, early 16550, and early 16650.  They are
  2631.   obsolete but if you understand how they work it's easy to understand
  2632.   how the modern ones work with FIFO UARTS ( late 16550, 16550A, 16c552,
  2633.   late 16650, 16750, and 16C950).
  2634.  
  2635.   There is some confusion regarding 16550.  Early models had a bug and
  2636.   worked properly only as 16450's.  Later models with the bug fixed were
  2637.   named 16550A but many manufacturers did not accept the name change and
  2638.   continued calling it a 16550.  Most all 16550's in use today are like
  2639.   16550A's.  Linux will report it as being a 16550A even though your
  2640.   hardware manual (or a label note) says it's a 16550.  A similar
  2641.   situation exists for the 16650 (only it's worse since the manufacturer
  2642.   allegedly didn't admit anything was wrong).  Linux will report a late
  2643.   16650 as being a 16650V2.  If it reports it as 16650 it is bad news
  2644.   and only is used as if it had a one-byte buffer.
  2645.  
  2646.   To understand the differences between dumb and FIFO (First In, First
  2647.   Out queue discipline) first let's examine what happens when a UART has
  2648.   sent or received a byte.  The UART itself can't do anything with the
  2649.   data passing thru it, it just receives and sends it.  For the original
  2650.   dumb UARTS, the CPU gets an interrupt from the serial device every
  2651.   time a byte has been sent or received.  The CPU then moves the
  2652.   received byte out of the UART's buffer and into memory somewhere, or
  2653.   gives the UART another byte to send.  The 8250 and 16450 UARTs only
  2654.   have a 1 byte buffer.  That means, that every time 1 byte is sent or
  2655.   received, the CPU is interrupted.  At low transfer rates, this is OK.
  2656.   But, at high transfer rates, the CPU gets so busy dealing with the
  2657.   UART, that is doesn't have time to adequately tend to other tasks.  In
  2658.   some cases, the CPU does not get around to servicing the interrupt in
  2659.   time, and the byte is overwritten, because they are coming in so fast.
  2660.   This is called an "overrun" or "overflow".
  2661.  
  2662.   That's where the FIFO UARTs are useful.  The 16550A (or 16550) FIFO
  2663.   chip comes with 16 byte FIFO buffers.  This means that it can receive
  2664.   up to 14 bytes (or send 16 bytes) before it has to interrupt the CPU.
  2665.   Not only can it wait for more bytes, but the CPU then can transfer all
  2666.   14 (or more) bytes at a time.  Although the interrupt threshold
  2667.   (trigger level) may be set at 8 instead of 14, this is still a
  2668.   significant advantage over the other UARTs, which only have 1 byte
  2669.   buffers.  The CPU receives less interrupts, and is free to do other
  2670.   things.  Data is not lost, and everyone is happy.
  2671.  
  2672.   While most PC's only have a 16550 with 16-byte buffers, better UARTS
  2673.   have even larger buffers.  Note that the interrupt is issued slightly
  2674.   before the buffer get full (at say a "trigger level" of 14 bytes for a
  2675.   16-byte buffer).  This allows room for a few more bytes to be received
  2676.   during the time that the interrupt is being serviced.  The trigger
  2677.   level may be set to various permitted values by kernel software.  A
  2678.   trigger level of 1 will be almost like a dumb UART (except that it
  2679.   still has room for 15 more bytes after it issues the interrupt).
  2680.  
  2681.   If you type something while visiting a BBS, the characters you type go
  2682.   out thru the serial port.  Your typed characters that you see on the
  2683.   screen are what was echoed back thru the telephone line thru your
  2684.   modem and then thru your serial port to the screen.  If you had a
  2685.   16-byte buffer on the serial port which held back characters until it
  2686.   had 14 of them, you would need to type many characters before you
  2687.   could see what you typed (before they appeared on the screen).  This
  2688.   would be very confusing but there is a "timeout" to prevent this.
  2689.   Thus you normally see a character on the screen just as soon as you
  2690.   type it.
  2691.  
  2692.   The "timeout" works like this for the receive UART buffer: If
  2693.   characters arrive one after another, then an interrupt is issued only
  2694.   when say the 14th character reaches the buffer.  But if a character
  2695.   arrives and the next character doesn't arrive soon thereafter, then an
  2696.   interrupt is issued.  This happens even though there are not 14
  2697.   characters in the buffer (there may only be one character in it).
  2698.   Thus when what you type goes thru this buffer, it acts almost like a
  2699.   1-byte buffer even though it is actually a 16-byte buffer (unless your
  2700.   typing speed is a hundred times faster than normal).  There is also
  2701.   "timeout" for the transmit buffer as well.
  2702.  
  2703.   Here's a list of UARTs.  TL is Trigger Level
  2704.  
  2705.   ╖  8250, 16450, early 16550: Obsolete with 1-byte buffers
  2706.  
  2707.   ╖  16550, 16550A, 16c552: 16-byte buffers, TL=1,4,8,14
  2708.  
  2709.   ╖  16650:  32-byte buffers. Speed up to 460.8 Kbps
  2710.  
  2711.   ╖  16750:  64-byte buffer for send, 56-byte for receive.  Speed up to
  2712.      921.6 Kbps
  2713.  
  2714.   ╖  Hayes ESP: 1K-byte buffers.
  2715.  
  2716.   The obsolete ones are only good for modems no higher than 14.4k (DTE
  2717.   speeds up to 38400 bps).  For modern modems you need at least a 16550
  2718.   (and not an early 16550).  For V.90 56k modems, it may be a several
  2719.   percent faster with a 16650 (especially if you are downloading
  2720.   uncompressed files).  The main advantage of the 16650 is its larger
  2721.   buffer size as the extra speed isn't needed unless the modem
  2722.   compression ratio is high.  Some 56k internal modems may come with a
  2723.   16650 ??
  2724.  
  2725.   Non-UART, and intelligent multiport boards use DSP chips to do
  2726.   additional buffering and control, thus relieving the CPU even more.
  2727.   For example, the Cyclades Cyclom, and Stallion EasyIO boards use a
  2728.   Cirrus Logic CD1400 RISC UART, and many boards use 80186 CPUs or even
  2729.   special RISC CPUs, to handle the serial IO.
  2730.  
  2731.   Most newer PC's (486's, Pentiums, or better) come with 16550A's
  2732.   (usually called just 16550's).  If you have something really old the
  2733.   chip may unplug so that you may be able to upgrade by buying a 16550A
  2734.   chip and replacing your existing 16450 UART.  If the functionality has
  2735.   been put on another type of chip, you are out of luck.  If the UART is
  2736.   socketed, then upgrading is easy (if you can find a replacement).  The
  2737.   new and old are pin-to-pin compatible.  It may be more feasible to
  2738.   just buy a new serial board on the Internet (few retail stores stock
  2739.   them today).
  2740.  
  2741.  
  2742.   12.  Troubleshooting
  2743.  
  2744.   12.1.  Software
  2745.  
  2746.  
  2747.  
  2748.   ╖  modemstat and statserial show the current state of various modem
  2749.      signal lines (such as DTR, CTS, etc.)
  2750.  
  2751.   ╖  irqtune will give serial port interrupts higher priority to improve
  2752.      performance.
  2753.  
  2754.   ╖  hdparm for hard-disk tuning may help some more.
  2755.  
  2756.  
  2757.   12.2.  My Modem is Physically There but Can't be Found
  2758.  
  2759.   For the PCI bus look at /proc/pci.  Otherwise see ``What is the
  2760.   current IO address and IRQ of my Serial Port ?''
  2761.  
  2762.   The "wvdialconf" program will try to find a modem on your serial
  2763.   ports.  See ``What is wvdialconf ?''  Your problem could be due to a
  2764.   winmodem (or the like) which can't be used with Linux.  See ``Avoid:
  2765.   winmodems''.  The "setserial program may be used to detect serial
  2766.   ports but will  not detect modems on them.  Thus "wvdialconf" is best
  2767.   to try first.
  2768.  
  2769.   You also must type a command for each IO address you probe.  Thus it's
  2770.   harder to use but you can try any IO address while wvdialconf likely
  2771.   trys only the most common IO addresses.  With "setserial" you must
  2772.   give the "autoconfig" argument at the IO address you think the modem
  2773.   is at.  If it shows "unknown" for UART type there may be nothing
  2774.   there.  See ``What is setserial''.
  2775.  
  2776.   Here are some common mistakes people make:
  2777.  
  2778.   ╖  setserial: They run it (without the "autoconfig" option) or see it
  2779.      displayed on the screen at boot-time, and erroneously think that
  2780.      the result shows how their hardware is actually configured.
  2781.  
  2782.   ╖  /proc/interrupts: When their modem isn't in use they don't see
  2783.      their modem's interrupt there, and erroneously conclude that their
  2784.      modem can't be found (or doesn't have an interrupt set).
  2785.  
  2786.   ╖  /proc/ioports: People think this shows the hardware configuration
  2787.      when it only shows about the same data (possibly erroneous) as
  2788.      setserial.
  2789.  
  2790.  
  2791.  
  2792.   12.3.  "Operation not supported by device" (error message) for ttySx
  2793.  
  2794.   This means that an operation requested by setserial, stty, etc.
  2795.   couldn't be done because the kernel doesn't support doing it.
  2796.   Formerly this was often due to the "serial" module not being loaded.
  2797.   But with the advent of PnP, it may likely mean that there is no modem
  2798.   at the address where the driver (and setserial) thinks it is.  If
  2799.   there is no modem there, commands (for operations) sent to that
  2800.   address obviously don't get done.  See ``What is set in my serial port
  2801.   hardware?''
  2802.  
  2803.   Another reason is that the "serial" module wasn't loaded at the time.
  2804.   "lsmod" will show you if it's now loaded but it sometimes is
  2805.   automatically loaded when needed so it may be loaded now but wasn't
  2806.   loaded when you got the error message.  The "serial" module should be
  2807.   listed in the file: /etc/modules.conf.  The actual module should
  2808.   reside in: /lib/modules/.../misc/serial.o.
  2809.  
  2810.  
  2811.   12.4.  Slow. Text appears on the screen slowly after long delays
  2812.  
  2813.   This will happen from the very start of using the modem.  One symptom
  2814.   happens when you are manually typing to your modem: You type but the
  2815.   screen remains blank (until after several seconds when you finally
  2816.   might see what you typed).   Another symptom is that only a few words
  2817.   at a time appear on the screen (possibly with missing text).
  2818.  
  2819.   This may be due to a mis-set IRQ.  This means that the IRQ used by the
  2820.   device driver does not correspond to the IRQ set in hardware (IRQ mis-
  2821.   set).  With a mis-set IRQ you may loose received data and get "input
  2822.   overrun" error messages (or find them in logs).  See ``Interrupt Mis-
  2823.   set'' for more details.
  2824.  
  2825.   It could also be an interrupt conflict. See ``Interrupt Conflicts''
  2826.   Make sure there are no IRQs being shared.  Check all your boards
  2827.   (serial, ethernet, SCSI, etc...).  Make sure the jumper (or PnP)
  2828.   settings, and the setserial parameters are correct for all your serial
  2829.   devices.  Also check /proc/ioports and /proc/interrupts and /proc/pci
  2830.   for conflicts.
  2831.  
  2832.  
  2833.   12.5.  Uploading (downloading) files is broken/slow
  2834.  
  2835.   Flow control (both at your PC and/or modem) may not be enabled.  If
  2836.   you have set a high DTE speed (like 115.2K) then flow from your modem
  2837.   to your PC may work OK but a lot of flow in the other direction will
  2838.   not all get thru due to the telephone line bottleneck.  This will
  2839.   result in many errors and the resending of packets.  It may thus take
  2840.   far too long to send a file.  In some cases, files don't make it thru
  2841.   at all.  If you're downloading long uncompressed files or web pages
  2842.   (and your modem uses data compression) or you've set a low DTE speed,
  2843.   then downloading may also be broken due to no flow control.
  2844.  
  2845.  
  2846.   12.6.  For Dial-in I Keep Getting "line NNN of inittab invalid"
  2847.  
  2848.   Make sure you are using the correct syntax for your version of init.
  2849.   The different init's that are out there use different syntax in the
  2850.   /etc/inittab file.  Make sure you are using the correct syntax for
  2851.   your version of getty.
  2852.  
  2853.  
  2854.   12.7.  When I Try To Dial Out, It Says "/dev/ttySN: Device or resource
  2855.   busy"
  2856.  
  2857.   This problem can arise when DCD or DTR are not implemented correctly.
  2858.   DCD should only be on (asserted) when there is an actual connection
  2859.   (ie someone has dialed in), not when getty is watching the port.
  2860.   Check to make sure that your modem is configured to only assert DCD
  2861.   when there is a connection.  DTR should be on (asserted)  whenever
  2862.   something is using, or watching the line, like getty, kermit, or some
  2863.   other comm program.
  2864.  
  2865.   Another common cause of ``device busy'' errors, is that you set up
  2866.   your serial port with an interrupt already taken by something else.
  2867.   As each device initializes, it asks Linux for permission to use its
  2868.   hardware interrupt.  Linux keeps track of which interrupt is assigned
  2869.   to whom, and if your interrupt is already taken, your device won't be
  2870.   able to initialize properly.  The device really doesn't have much of
  2871.   any way to tell you that this happened, except that when you try to
  2872.   use it, it will return a ``device-busy'' error.  Check the interrupts
  2873.   on all of your boards (serial, ethernet, SCSI, etc.).  Look for IRQ
  2874.   conflicts.
  2875.  
  2876.  
  2877.   12.8.  I Keep Getting "Getty respawning too fast: disabled for 5 min¡
  2878.   utes"
  2879.  
  2880.   Make sure your modem is configured correctly.  Look at registers E and
  2881.   Q.  This can occur when your modem is chatting with getty.
  2882.  
  2883.   Make sure you are calling getty correctly from your /etc/inittab.
  2884.   Using the wrong syntax or device names will cause serious problems.
  2885.  
  2886.   For uugetty, verify that your /etc/gettydefs syntax is correct by
  2887.   doing the following:
  2888.  
  2889.  
  2890.        linux# getty -c /etc/gettydefs
  2891.  
  2892.  
  2893.  
  2894.  
  2895.  
  2896.   This can also happen when the uugetty initialization is failing.  See
  2897.   section ``uugetty Still Doesn't Work''.
  2898.  
  2899.  
  2900.  
  2901.   12.9.  My Modem is Hosed after Someone Hangs Up, or uugetty doesn't
  2902.   respawn
  2903.  
  2904.  
  2905.   This can happen when your modem doesn't reset when DTR is dropped.
  2906.   Greg Hankins saw his RD and SD LEDs go crazy when this happened.  You
  2907.   need to have your modem reset.  Most Hayes compatible modems do this
  2908.   with &D3, but on his USR Courier, he had to set &D2 and S13=1.  Check
  2909.   your modem manual (if you have one).
  2910.  
  2911.  
  2912.   12.10.  uugetty Still Doesn't Work
  2913.  
  2914.   There is a DEBUG option that comes with getty_ps.  Edit your config
  2915.   file /etc/conf.{uu}getty.ttySN and add DEBUG=NNN.  Where NNN is one of
  2916.   the following combination of numbers according to what you are trying
  2917.   to debug:
  2918.  
  2919.  
  2920.        D_OPT   001            option settings
  2921.        D_DEF   002            defaults file processing
  2922.        D_UTMP  004            utmp/wtmp processing
  2923.        D_INIT  010            line initialization (INIT)
  2924.        D_GTAB  020            gettytab file processing
  2925.        D_RUN   040            other runtime diagnostics
  2926.        D_RB    100            ringback debugging
  2927.        D_LOCK  200            uugetty lockfile processing
  2928.        D_SCH   400            schedule processing
  2929.        D_ALL   777            everything
  2930.  
  2931.  
  2932.  
  2933.  
  2934.   Setting DEBUG=010 is a good place to start.
  2935.  
  2936.   If you are running syslogd, debugging info will appear in your log
  2937.   files.  If you aren't running syslogd info will appear in
  2938.   /tmp/getty:ttySN for debugging getty and /tmp/uugetty:ttySN for
  2939.   uugetty, and in /var/adm/getty.log.  Look at the debugging info and
  2940.   see what is going on.  Most likely, you will need to tune some of the
  2941.   parameters in your config file, and reconfigure your modem.
  2942.  
  2943.   You could also try mgetty.  Some people have better luck with it.
  2944.  
  2945.  
  2946.   13.  Flash Upgrades
  2947.  
  2948.   Many modems can be upgraded by reprogramming their flash memories with
  2949.   an upgrade program which you get from the Internet.  By sending this
  2950.   "program" via the serial port to the modem, the modem will store this
  2951.   program in its non-volatile memory (it's still there when the power is
  2952.   turned off).  The instructions on installing it are usually on how to
  2953.   do in under Windows so you'll need to figure out how to do the
  2954.   equivalent under Linux (unless you want to install the upgrade under
  2955.   Windows).
  2956.  
  2957.   If the latest version of this HOWTO still contains this request (see
  2958.   ``New Versions of this HOWTO'') please send me your experiences with
  2959.   installing such upgrades that will be helpful to others.
  2960.  
  2961.   If you need to send a file (program) to your modem, how do you do it?
  2962.   First, there may be a command that you need to send your modem to tell
  2963.   it that what follows is a flash ROM upgrade.  In one case this was
  2964.   AT**  Next, you need to send the file directly to the modem.
  2965.   Communication programs often use zmodem or kermit to send files to the
  2966.   modem (and beyond) but these put the file into packets which append
  2967.   headers and you want the exact file, not a modified one.  But the
  2968.   kermit program has a "transmit" command that will send the file
  2969.   directly (without using the kermit packets) so this is one way to send
  2970.   a file directly.  Another way would be to escape from the
  2971.   communication program to the shell (in minicom this is ^aj) and then:
  2972.   cat upgrade_file_name > /dev/ttyS2 .  Then go back to the
  2973.   communication program (type fg at the command line prompt in minicom)
  2974.   to see what happened.
  2975.  
  2976.  
  2977.   14.  Problems Explained
  2978.  
  2979.   While the section ``Troubleshooting'' lists problems by symptom, this
  2980.   section explains what will happen if something is set incorrectly.
  2981.   This section helps you understand what caused the symptom and what
  2982.   other symptoms might be due to the same problem.
  2983.  
  2984.  
  2985.   14.1.  Interrupt Mis-set
  2986.  
  2987.   If you don't understand what an interrupt does see ``Interrupts''.  If
  2988.   a serial port has one IRQ set in the hardware but a different one set
  2989.   in the device driver, the device driver will not receive any
  2990.   interrupts sent by the serial port.  Since the serial port uses
  2991.   interrupts to tell its driver when it needs service (fetching bytes
  2992.   from it's 16-byte receive buffer or putting another 16-bytes in its
  2993.   transmit buffer) one might expect that the serial port would not work
  2994.   at all.
  2995.  
  2996.   But it still may work anyway --sort of.  Why?  Well, besides the
  2997.   interrupt method of servicing the port there's a polling method that
  2998.   doesn't need interrupts.  The way it works is that every so often the
  2999.   device driver checks the serial port to see if it needs anything such
  3000.   as if it has some bytes that need fetching from its receive buffer.
  3001.   If interrupts don't work, the serial driver falls back to this polling
  3002.   method.  But this polling method was not intended to be used a
  3003.   substitute for interrupts.   It's so slow that it's not practical to
  3004.   use and may cause buffer overruns.  Its purpose may have been to get
  3005.   things going again if just one interrupt is lost or fails to do the
  3006.   right thing.  It's also useful in showing you that interrupts have
  3007.   failed.
  3008.  
  3009.   For the 16-byte transmit buffer, 16 bytes will be transmitted and then
  3010.   it will wait until the next polling takes place (several seconds
  3011.   later) before the next 16 bytes is sent out.  Thus transmission is
  3012.   very slow and in small chunks.  Receiving is slow too since bytes that
  3013.   are received by the receive buffer are likely to remain there for
  3014.   several seconds until it is polled.
  3015.  
  3016.   This explains why it takes so long before you see what you typed.
  3017.   When you type say AT to the modem, the AT goes out the serial port to
  3018.   the modem.  The modem then echos the AT back thru the serial port to
  3019.   the screen.  Thus the AT characters had to pass twice thru the serial
  3020.   port.  Normally this happens so fast that AT seems to appear on the
  3021.   screen at the same time that you hit the keys on the keyboard.  With
  3022.   polling delays thru the serial port, you don't see what you typed
  3023.   until many seconds later.
  3024.  
  3025.   What about overruns of the 16-byte receive buffer?  This will happen
  3026.   with an external modem since the modem just sends to the serial port
  3027.   at high speed which is likely to overrun the 16-byte buffer.  But for
  3028.   an internal modem, the serial port is on the same card and it's likely
  3029.   to check that this receive buffer has room for more bytes before
  3030.   putting received bytes into it.  In this case there will be no overrun
  3031.   of this receive buffer, but text will just appear on your screen in
  3032.   16-byte chunks at intervals of several seconds.
  3033.  
  3034.   Even with an external modem you might not get overruns.  If just a few
  3035.   characters (under 16) are sent you don't get overruns since the buffer
  3036.   likely has room for them.  But attempts to send a larger number of
  3037.   bytes from your modem to your screen may result in overruns.  However,
  3038.   more than 16 (with no gaps) can get thru OK if the timing is right.
  3039.   For example, if 32 bytes were received (and no more bytes followed),
  3040.   the polling might just happen after the first 16 bytes had been
  3041.   received.  Then there would be space for the next 16 bytes so that 32
  3042.   bytes gets thru OK.  Similar conditions might pass between 16 to 31
  3043.   bytes thru OK.  But it's also likely that only an occasional 16-byte
  3044.   chunk will get thru and huge gaps of missing data will be lost.
  3045.  
  3046.   If you have an obsolete serial port with only a 1-byte buffer (or it's
  3047.   been incorrectly set to work like a 1-byte buffer) then the situation
  3048.   will be much worse than described above and only one character will
  3049.   occasionally make it thru the port.  This character is likely to be
  3050.   just a line-feed since this is often the last character to be
  3051.   transmitted in a burst of characters sent to your screen.  Thus you
  3052.   may type AT to the modem but never see AT on the screen.  All you see
  3053.   several seconds later is that the cursor drops down one line.  This
  3054.   has happened to me even with a 16-byte buffer that was somehow
  3055.   behaving like a 1-byte buffer.
  3056.  
  3057.   When a communication program starts up, it expects interrupts to be
  3058.   working.  It's not geared to using this slow polling-like mode of
  3059.   operation.  Thus all sorts of mistakes may be made such as setting up
  3060.   the serial port and/or modem incorrectly.  It may fail to realize when
  3061.   a connection has been made.  If a script is being used for login, it
  3062.   may fail (caused by timeout) due to the polling delays.
  3063.  
  3064.  
  3065.   14.2.  Interrupt Conflicts
  3066.  
  3067.   When two devices have the same IRQ number it's called sharing
  3068.   interrupts.  Under some conditions this sharing works out OK.
  3069.   Starting with kernel version 2.2, serial ports may share interrupts
  3070.   with other serial ports.  Devices on the PCI bus may share the same
  3071.   IRQ interrupt with other devices on the PCI bus.  In other cases where
  3072.   there is potential for conflict, there should be no problem if no two
  3073.   devices with the same IRQ are ever "in use" at the same time.   More
  3074.   precisely, "in use" really means "open" (in programmer jargon).  In
  3075.   cases other than the exceptions mentioned above (unless special
  3076.   software permits sharing), sharing is not allowed and conflicts arise
  3077.   if sharing is attempted.
  3078.  
  3079.   Even if two processes with conflicting IRQs run at the same time, one
  3080.   of the devices will likely have its interrupts sent to its device
  3081.   driver and will work OK.  The other device will not have its
  3082.   interrupts sent to the correct driver and will likely behave just like
  3083.   a process with mis-set interrupts.  See ``Interrupt Mis-set'' for more
  3084.   details.
  3085.  
  3086.  
  3087.   15.  Other Sources of Information
  3088.  
  3089.   15.1.  Misc
  3090.  
  3091.  
  3092.   ╖  man pages for: agetty(8), getty(1m), gettydefs(5), init(1),
  3093.      isapnp(8), login(1), mgetty(8), setserial(8)
  3094.  
  3095.   ╖  Your modem manual (if it exists).  Some modems come without
  3096.      manuals.
  3097.  
  3098.   ╖  The Linux serial mailing list.  To join, send email to
  3099.      majordomo@vger.rutgers.edu, with ``subscribe linux-serial'' in the
  3100.      message body.  If you send ``help'' in the message body, you get a
  3101.      help message.  The server also serves many other Linux lists.  Send
  3102.      the ``lists'' command for a list of mailing lists.
  3103.   15.2.  Books
  3104.  
  3105.   I've been unable to find a good up-to-date book on modems.
  3106.  
  3107.   ╖  The Complete Modem Reference by Gilbert Held, 1997.  Contains too
  3108.      much info about obsolete topics.  More up-to-date info may be found
  3109.      on the Internet.
  3110.  
  3111.   ╖  Modems For Dummies by Tina Rathbone, 1996.  (Have never seen it.)
  3112.  
  3113.  
  3114.   15.3.  HOWTOs
  3115.  
  3116.  
  3117.  
  3118.   ╖  Cable-Modem mini-howto
  3119.  
  3120.   ╖  ISDN Howto (not a LDP Howto)
  3121.      <http://www.suse.de/Support/sdb_e/isdn.html>: drivers for ISDN
  3122.      "Modems"; Much related info on this is in German
  3123.  
  3124.   ╖  Modems-HOWTO: In French (Not used in creating this Modem-HOWTO)
  3125.  
  3126.   ╖  NET-3-HOWTO: all about networking, including SLIP, CSLIP, and PPP
  3127.  
  3128.   ╖  PPP-HOWTO: help with PPP including modem set-up
  3129.  
  3130.   ╖  Serial-HOWTO has info on Multiport Serial Cards used for both
  3131.      terminals and banks of modems.  Technical info on the serial port
  3132.      will appear in the next revision of it.
  3133.  
  3134.   ╖  Serial-Programming-HOWTO: for some aspects of serial-port
  3135.      programming
  3136.  
  3137.   ╖  Text-Terminal-HOWTO: (including connecting up with modems)
  3138.  
  3139.   ╖  UUCP-HOWTO: for information on setting up UUCP
  3140.  
  3141.  
  3142.   15.4.  Usenet newsgroups
  3143.  
  3144.  
  3145.  
  3146.   ╖  comp.os.linux.answers FAQs, How-To's, READMEs, etc. about Linux.
  3147.  
  3148.   ╖  comp.os.linux.hardware Hardware compatibility with the Linux
  3149.      operating system.
  3150.  
  3151.   ╖  comp.os.linux.setup Linux installation and system administration.
  3152.  
  3153.   ╖  comp.dcom.modems Modems for all OS's
  3154.  
  3155.  
  3156.   15.5.  Web Sites
  3157.  
  3158.  
  3159.  
  3160.   ╖  Hayes AT modem commands Technical Reference for Hayes (tm) Modem
  3161.      Users <http://www.hayes.com/TechSupport/techref/>
  3162.  
  3163.   ╖  Rockwell-based modem commands
  3164.      <http://www.rss.rockwell.com/techinfo/>
  3165.  
  3166.   ╖  A white paper discussing serial communications and multiport serial
  3167.      boards is available from Cyclades at http://www.cyclades.com.
  3168.  
  3169.   ╖  Modem FAQs:
  3170.      Navas 28800 Modem FAQ
  3171.      <http://web.aimnet.com/~jnavas/modem/faq.html>
  3172.  
  3173.   ╖  Curt's High Speed Modem Page
  3174.      <http://www.teleport.com/~curt/modems.html>
  3175.  
  3176.   ╖  Much info on 56k modems 56k Modem = v.Unreliable
  3177.      <http://808hi.com/56k/>
  3178.  
  3179.   ╖  Links to modem manufacturers
  3180.      <http://www.56k.com/links/Modem_Manufacturers/>
  3181.  
  3182.   ╖  Identifying modems by FCC ID
  3183.      <http://www.sbsdirect.com/fccenter.html>
  3184.  
  3185.   ╖  Partial list of  modems which work/don't_work under Linux modem
  3186.      list <http://www.o2.net/~gromitkc/winmodem.html>
  3187.  
  3188.  
  3189.   16.  Appendix A:  How Modems Work (technical) (unfinished)
  3190.  
  3191.   16.1.  Modulation Details
  3192.  
  3193.   16.1.1.  Intro to Modulation
  3194.  
  3195.   Modulation is the conversion of a digital signal represented by binary
  3196.   bits (0 or 1) into an analog signal something like a sine wave.  The
  3197.   modulated signal consists pure sine wave "carrier" signal which is
  3198.   modified to convey information.  A pure carrier sine wave, unchanging
  3199.   in frequency and voltage, provides no flow of information at all
  3200.   (except that a carrier is present).  To make it convey information we
  3201.   modify (or modulate) this carrier.  There are 3 basic types of
  3202.   modulation: frequency, amplitude, and phase.  They will be explained
  3203.   next.
  3204.  
  3205.  
  3206.   16.1.2.  Frequency Modulation
  3207.  
  3208.   The simplest modulation method is frequency modulation.  Frequency is
  3209.   measured in cycles per second (of a sine wave).  It's the count of the
  3210.   number of times the sine wave shape repeats itself in a second.  This
  3211.   is the same as the number of times it reaches it peak value in a
  3212.   second.  The word "Hertz" (abbreviated Hz) is used to mean "cycles per
  3213.   second".
  3214.  
  3215.   A simple example of frequency modulation is where one frequency means
  3216.   a 0 and another means a 1.  For example, for some obsolete 300 baud
  3217.   modems 1070 Hz meant a binary 0 while 1270 Hz meant a binary 1.  This
  3218.   was called "frequency shift keying".  Instead of just two possible
  3219.   frequencies, more could be used to allow more information to be
  3220.   transmitted.  If we had 4 different frequencies (call them A, B, C,
  3221.   and D) then each frequency could stand for a pair of bits.  For
  3222.   example, to send 00 one would use frequency A.  To send 01, use
  3223.   frequency B; for 10 use C; for 11 use D.  In like manner, by using 8
  3224.   different frequencies we could send 3 bits with each shift in
  3225.   frequency.  Each time we double the number of possible frequencies we
  3226.   increase the number of bits it can represent by 1.
  3227.  
  3228.  
  3229.   16.1.3.  Amplitude Modulation
  3230.  
  3231.   Once one understands frequency modulation example above including the
  3232.   possibilities of representing a few bits by a single shift in
  3233.   frequency, it's easier to understand both amplitude modulation and
  3234.   phase modulation.  For amplitude modulation, one just changes the
  3235.   height (voltage) of the sine wave analogous to changing the frequency
  3236.   of the sine wave.  For a simple case there could only be 2 allowed
  3237.   amplitude levels, one representing a 0-bit and another representing a
  3238.   1-bit.  As explained for the case of frequency modulation, having more
  3239.   possible amplitudes will result in more information being transmitted.
  3240.  
  3241.  
  3242.   16.1.4.  Phase Modulation
  3243.  
  3244.   To change the phase of a sine wave at a certain instant of time, we
  3245.   stop sending this old sine wave and immediately begin sending a new
  3246.   sine wave of the same frequency and amplitude.  If we started sending
  3247.   the new sine wave at the same voltage level (and slope) as existed
  3248.   when we stopped sending the old sine wave, there would be no change in
  3249.   phase (and no detectable change at all).  But suppose that we started
  3250.   up the new sine wave at a different point on the sine wave curve.
  3251.   Then there would likely be a sudden voltage jump at the point in time
  3252.   where the old sine wave stopped and the new sine wave began.  This is
  3253.   a phase shift and it's measured in degrees (deg.)  A 0 deg. (or a 360
  3254.   deg.) phase shift means no change at all while a 180 deg. phase shift
  3255.   just reverses the voltage (and slope) of the sine wave.  Put another
  3256.   way, a 180 deg. phase shift just skips over a half-period (180 deg.)
  3257.   at the point of transition.  Of course we could just skip over say 90
  3258.   deg. or 135 deg. etc.  As in the example for frequency modulation, the
  3259.   more possible phase shifts, the more bits a single shift in phase can
  3260.   represent.
  3261.  
  3262.  
  3263.   16.1.5.  Combination Modulation
  3264.  
  3265.   Instead of just selecting either frequency, amplitude, or phase
  3266.   modulation, we may chose to combine modulation methods.  Suppose that
  3267.   we have 256 possible frequencies and thus can send a byte (8 bits) for
  3268.   each shift in frequency (since 2 to the 8 power is 256).  Suppose also
  3269.   that we have another 256 different amplitudes so that each shift in
  3270.   amplitude represents a byte.  Also suppose there are 256 possible
  3271.   phase shifts.  Then a certain points in time we may make a shift in
  3272.   all 3 things: frequency, amplitude and phase.  This would send out 3
  3273.   bytes for each such transition.
  3274.  
  3275.   No modulation method in use today actually does this.  It's not
  3276.   practical due to the relatively long time it would take to detect all
  3277.   3 types of changes.  But what is quite common is the simultaneous
  3278.   change in both phase and amplitude.  This is called phase-amplitude
  3279.   modulation (sometimes also called quadrature amplitude modulation =
  3280.   QAM).  This method is used for the common modem speeds of 14.4k,
  3281.   28.8k, and 33.6k.  The only significant case where this modulation
  3282.   method is not used today is for 56k modems.  But even 56k modems
  3283.   exclusively use QAM (phase-amplitude modulation) in the direction from
  3284.   your PC out the telephone line.  Sometimes even the other direction
  3285.   will also fall back to QAM when line conditions are not good enough.
  3286.   Thus QAM (phase-amplitude modulation) still remains the most widely
  3287.   used method on ordinary telephone lines.
  3288.  
  3289.  
  3290.   16.1.6.  56k Modems (v.90)
  3291.  
  3292.   The modulation method used above 33.6k is entirely different than the
  3293.   common phase-amplitude modulation.  The details of exactly how it
  3294.   works seem to be obscure and I couldn't find them on the Internet as
  3295.   of late 1998.  But the basic idea behind it is easy to understand.
  3296.   Since ordinary telephone calls are converted to digital signals at the
  3297.   local offices of the telephone company, the fastest speed that you can
  3298.   send digital data by an ordinary telephone call is the same speed that
  3299.   the telephone company uses over its digital portion of the phone call
  3300.   transmission.  What is this speed?  Well, in the USA it's exactly 56k!
  3301.   In other countries it may be slightly higher.
  3302.  
  3303.   Thus in the USA 56k is the absolute top speed possible for an ordinary
  3304.   telephone call using the digital portion of the circuit that was
  3305.   designed to send digital encodings of the human voice.  In order to
  3306.   use 56k, the modem must know exactly how the telephone company is
  3307.   doing its digital encoding of the analog signals.  This task is far
  3308.   too complicated if both sides of a telephone call have only an analog
  3309.   interface to the telephone company.  But if one side has a digital
  3310.   interface, then it's possible (at least in one direction).  Thus if
  3311.   your ISP has a digital interface to the phone company, the ISP may
  3312.   send out a certain digital signal over the phone lines toward your PC.
  3313.   The digital signal from the ISP gets converted to analog at the local
  3314.   telephone office near your PC's location (perhaps near your home).
  3315.   Then it's your modem's task to try to figure out exactly what that
  3316.   digital signal was.  If it can do this then transmission at 56k (the
  3317.   speed of the telephone company's digital signal) is possible in this
  3318.   direction.
  3319.  
  3320.   What method does the telephone company use to digitally encode analog
  3321.   signals?  It uses a method of sampling the amplitude of the analog
  3322.   signal at a rate of 8000 samples per second.  Each sample amplitude is
  3323.   encoded as a 7-bit (ASCII-like) byte.  (Note: 7 x 8000 = 56k)  This is
  3324.   called "Pulse Code Modulation" = PCM.  These bytes are then sent
  3325.   digitally on the telephone company's digital circuits where many calls
  3326.   share a single circuit using a time-sharing scheme known as "time
  3327.   division multiplexing".  Then finally at the local telephone office
  3328.   near your home, the digital signal is de-multiplexed resulting in the
  3329.   same digital signal as was originally created by PCM.  This signal is
  3330.   then converted back to analog and sent to your home.  Each 7-bit byte
  3331.   creates a certain amplitude of the analog signal.  Your modem's task
  3332.   is to determine just what that PCM 7-bit byte was based on the
  3333.   amplitude it detects.
  3334.  
  3335.   This is (sort of) "amplitude demodulation" but not really.  It's not
  3336.   amplitude demodulation because there is no carrier.  Actually, it's
  3337.   called "modulus conversion" which is the inverse of PCM.  In order to
  3338.   determine the digital codes the telephone Co. used to create the
  3339.   analog signal, the modem must sample this analog signal amplitude at
  3340.   exactly the same points in time the phone Co. used when it created the
  3341.   analog signal.  In order to get the modem to do this correctly the
  3342.   modem must go thru "training" periods where the ISP's modem sends out
  3343.   known digital signals and the modem trains itself to recognize those
  3344.   signals.  (At least that's the way I think it works ??)
  3345.  
  3346.   Note that the digital part of the telephone network is bi-directional.
  3347.   Two such circuits are used for a phone call, one in each direction.
  3348.   Also, while 7-bit bytes are used to encode the amplitude, the bytes
  3349.   sent are 8-bit ones with the extra bit used by the telephone company
  3350.   for its signalling purposes.  The telephone users have no control over
  3351.   this extra bit.  This means that while the digital signal is actually
  3352.   64k bits/sec, only 56k can be controlled by the user.
  3353.  
  3354.  
  3355.   17.  Appendix B:  "baud" vs. "bps"
  3356.  
  3357.   17.1.  A simple example
  3358.  
  3359.   ``baud'' and ``bps'' are perhaps one of the most misused terms in the
  3360.   computing and telecommunications field.  Many people use these terms
  3361.   interchangeably, when in fact they are not!  bps is simply the number
  3362.   of bits transmitted per second.  The baud rate is a measure of how
  3363.   many times per second a signal changes (or could change).  For a
  3364.   typical serial port a 1-bit is -12 volts and a 0-bit is +12 v (volts).
  3365.   If the bps is 38,400 a sequence of 010101... would also be 38,400 baud
  3366.   since the voltage shifts back and forth from positive to negative to
  3367.   positive ... and there are 38,400 shifts per second.  For another
  3368.   sequence say 111000111... there will be fewer shifts of voltage since
  3369.   for three 1's in sequence the voltage just stays at -12 volts yet we
  3370.   say that its still 38,400 baud since there is a possibility that the
  3371.   number of changes per second will be that high.
  3372.  
  3373.   Looked at another way, put an imaginary tic mark separating each bit
  3374.   (even thought the voltage may not change).  38,400 baud then means
  3375.   38,400 tic marks per second.  The tic marks at at the instants of
  3376.   permitted change and are actually marked by a synchronized clock
  3377.   signal generated in the hardware but not sent over the external cable.
  3378.  
  3379.   Suppose that a "change" may have more than the two possible outcomes
  3380.   of the previous example (of +- 12 v).  Suppose it has 4 possible
  3381.   outcomes, each represented by a unique voltage level.  Each level may
  3382.   represent a pair of bits (such as 01).  For example, -12v could be 00,
  3383.   -6v 01, +6v 10 and +12v 11.  Here the bit rate is double the baud
  3384.   rate.  For example, 3000 changes per second will generate 2 bits for
  3385.   each change resulting in 6000 bits per second (bps).  In other words
  3386.   3000 baud results in 6000 bps.
  3387.  
  3388.  
  3389.   17.2.  Real examples
  3390.  
  3391.   The above example is overly simple.  Real examples are more
  3392.   complicated but based on the same idea.  This explains how a modem
  3393.   running at 2400 baud, can send 14400 bps (or higher).  The modem
  3394.   achieves a bps rate greater than baud rate by encoding many bits in
  3395.   each signal change (or transition).  Thus, when 2 or more bits are
  3396.   encoded per baud, the bps rate exceeds the baud rate. If your modem-
  3397.   to-modem connection is at 14400 bps, it's going to be sending 6 bits
  3398.   per signal transition at 2400 baud.  A speed of 28800 bps is obtained
  3399.   by 3200 baud at 9 bits/baud.  When people misuse the word baud, they
  3400.   may mean the modem speed (such as 33.6K).
  3401.  
  3402.   Common modem bps rates were formerly  50, 75, 110, 300, 1200, 2400,
  3403.   9600.  These were also the bps rates over the serial_port-to-modem
  3404.   cables.  Today the bps modem-to-modem rates are 14.4K, 28.8K, 33.6K,
  3405.   and 56K, but the rates over the serialPort-to-modem cables are not the
  3406.   same but are: 19.2K, 38.4K, 57.6K and 115.2K).  Using modems with
  3407.   V.42bis compression (max 4:1 compression), rates up to 115.2K bps are
  3408.   possible for 33.6K modems (230.4K is possible for 56K modems).
  3409.  
  3410.   Except for the 56k modems, most modems run at 2400, 3000, or 3200
  3411.   baud.  Because of the bandwidth limitations on voice-grade phone
  3412.   lines, baud rates greater than 2400 are harder to achieve, and only
  3413.   work under conditions of pristine phone line quality.
  3414.  
  3415.   How did this confusion between bps and baud start?  Well, back when
  3416.   antique low speed modems were high speed modems, the bps rate actually
  3417.   did equal the baud rate.  One bit would be encoded per phase change.
  3418.   People would use bps and baud interchangeably, because they were the
  3419.   same number.  For example, a 300 bps modem also had a baud rate of
  3420.   300. This all changed when faster modems came around, and the bit rate
  3421.   exceeded the baud rate.  ``baud'' is named after Emile Baudot, the
  3422.   inventor of the asynchronous telegraph printer.
  3423.  
  3424.  
  3425.   18.  Appendix C:  Terminal Server Connection
  3426.  
  3427.   This section was adapted from Text-Terminal-HOWTO.
  3428.  
  3429.   A terminal server is something like an intelligent switch that can
  3430.   connect many modems (or terminals) to one or more computers.  It's not
  3431.   a mechanical switch so it may change the speeds and protocols of the
  3432.   streams of data that go thru it.  A number of companies make terminal
  3433.   servers: Xyplex, Cisco, 3Com, Computone, Livingston, etc.  There are
  3434.   many different types and capabilities.  Another HOWTO is needed to
  3435.   compare and describe them (including the possibility of creating your
  3436.   own terminal server with a Linux PC).  Most are used for modem
  3437.   connections rather than directly connected terminals.
  3438.  
  3439.   One use for them is to connect many modems (or terminals) to a high
  3440.   speed network which connects to host computers.  Of course the
  3441.   terminal server must have the computing power and software to run
  3442.   network protocols so it is in some ways like a computer.  The terminal
  3443.   server may interact with the user and ask what computer to connect to,
  3444.   etc. or it may connect without asking.  One may sometimes send jobs to
  3445.   a printer thru a terminal server.
  3446.  
  3447.   A PC today has enough computing power to act like a terminal server
  3448.   except that each serial port should have its own hardware interrupt.
  3449.   PC's only have a few spare interrupts for this purpose and since they
  3450.   are hard-wired you can't create more by software.  A solution is to
  3451.   use an advanced multiport serial card which has its own system of
  3452.   interrupts (or on lower cost models, shares one of the PC's interrupts
  3453.   between a number of ports).  See Serial-HOWTO for more info.  If such
  3454.   a PC runs Linux with getty running on many serial ports it might be
  3455.   thought of as a terminal server.  It is in effect a terminal server if
  3456.   it's linked to other PC's over a network and if its job is mainly to
  3457.   pass thru data and handle the serial port interrupts every 14 (or so)
  3458.   bytes.  Software called "radius" is sometimes used.
  3459.  
  3460.   Today real terminal servers serve more than just terminals.  They also
  3461.   serve PC's which emulate terminals, and are sometimes connected to a
  3462.   bank of modems connected to phone lines.  Some even include built-in
  3463.   modems.  If a terminal (or PC emulating one) is connected directly to
  3464.   a modem, the modem at the other end of the line could be connected to
  3465.   a terminal server.  In some cases the terminal server by default
  3466.   expects the callers to use PPP packets, something that real text
  3467.   terminals don't generate.
  3468.  
  3469.  
  3470.   19.  Appendix D:  Other Types of Modems
  3471.  
  3472.   This HOWTO currently only deals with the common type of modem used to
  3473.   connect PC's to ordinary analog telephone lines.  There are various
  3474.   other types of modems, including devices called modems that are not
  3475.   really modems.
  3476.  
  3477.  
  3478.   19.1.  Digital-to-Digital "Modems"
  3479.  
  3480.   The standard definition of a modem is sometimes broadened to include
  3481.   "digital" modems.  Today direct digital service is now being provided
  3482.   to many homes and offices so a computer there sends out digital
  3483.   signals directly (well almost) into the telephone lines.  But a device
  3484.   is still needed to convert the computer digital signal into type
  3485.   allowed on telephone circuits and this device is sometimes called a
  3486.   modem.  The next 2 sections: ISDN and DSL concern digital-to-digital
  3487.   "modems".
  3488.  
  3489.  
  3490.   19.2.  ISDN "Modems"
  3491.  
  3492.   The "modem" is  really a Terminal Adapter (TA).  A Debian package
  3493.   "isdnutils" is available.  There is a ISDN Howto in German with an
  3494.   English translation:  <http://www.suse.de/Support/sdb_e/isdn.html>.
  3495.   It's put out by the SuSE distribution of Linux and likely is about
  3496.   drivers available in that distribution.  There is an isdn4linux
  3497.   package and a newsgroup: de.alt.comm.isdn4linux.  Many of the postings
  3498.   are in German.  You might try using a search engine (such as DejaNews)
  3499.   to find "isdn4linux".
  3500.  
  3501.  
  3502.   19.3.  Digital Subscriber Line (DSL)
  3503.  
  3504.   DSL uses the existing twisted pair line from your home (etc.) to the
  3505.   local telephone office.  This can be used if your telephone line can
  3506.   accept higher speeds than an ordinary modem (say 56k) sends over it.
  3507.   It replaces the analog-to-digital converter at the local telephone
  3508.   office with a converter which can accept a much faster flow of data
  3509.   (in a different format of course).  The device which converts the
  3510.   digital signals from your computer to the signal used to represent
  3511.   digital data on the local telephone line is also called a modem.  This
  3512.   document presently does not cover the special aspects of these modems.
  3513.  
  3514.   END OF Modem-HOWTO
  3515.  
  3516.  
  3517.  
  3518.  
  3519.  
  3520.  
  3521.  
  3522.  
  3523.  
  3524.  
  3525.  
  3526.  
  3527.  
  3528.  
  3529.  
  3530.  
  3531.  
  3532.  
  3533.  
  3534.  
  3535.  
  3536.  
  3537.  
  3538.  
  3539.  
  3540.  
  3541.  
  3542.  
  3543.  
  3544.  
  3545.  
  3546.  
  3547.  
  3548.  
  3549.  
  3550.  
  3551.  
  3552.  
  3553.  
  3554.  
  3555.  
  3556.  
  3557.  
  3558.  
  3559.  
  3560.  
  3561.  
  3562.  
  3563.  
  3564.  
  3565.