Next Previous Contents

4. Modems for a Linux PC

4.1 External vs. Internal

A modem for a PC may be either internal or external. The internal one is installed inside of your PC (you must remove screws, etc. to install it) and the external one just plugs into a serial port connector on a PC. Internal modems are less expensive, are less likely to overrun, usually use less electricity, and use up no space on your desk. External modems are much easier to install, require less configuration, and have lights which may give you a clue as to what is happening. External modems are easy to move to another computer. Most external modems have no switch to turn off the power supply when not in use and thus are likely to consume a little electricity even when turned off (unless you unplug the power supply from the wall). Each watt they draw costs you about $1/yr. Another possible disadvantage of an external is that you will be forced to use an existing serial port which may not support a speed of over 115,200 k (although as of late 1998 most new internal modems don't either --but some do). If a new internal modem had a 16650 UART it would put less load on the CPU (but almost none do as of late 1998).

Internal modems present a special problem for Linux, but will work just as well as external modems provided you avoid the high percentage of them that will work only for MS Windows, and also provided that you spend time (sometimes a lot of time) to configure them correctly. Some of the modems which will work only under MS Windows are, unfortunately, not labeled as such. If you buy a new one, make sure that you can return it for a refund if it will not work under Linux.

While most new modems are plug-and-play you have various ways to deal with them:

Each of the above has shortcomings. Isapnp documentation is difficult to understand although reading the Plug-and-Play-HOWTO (at present incomplete) will aid in understanding it. If you want the PnP BIOS to do the configuring, all you need to do is to make sure that it knows you don't have a PnP operating system. But you may have trouble trying to determine how it set things up. See What is set in my serial port hardware?. Patching the kernel can be complicated too. There are a lot of device drivers that don't cooperate with the patch (so you will need to manually configure them).

There are many Linux users that say that it's a lot simpler just to get an external modem and plug it in. But since new peripherals are all PnP today, you may eventually need to deal with it, so why not now? It may be easier to deal with PnP under Linux in the future but pioneers are needed to lead the way today in spite of the old adage that "Pioneering doesn't pay".

4.2 External Modems

PnP External Modems

Many external modems are labeled "Plug and Play" (PnP) but they should all work fine as non-PnP modems. Since you usually plug the modem into a serial port which has its own IRQ number and I/O address, the modem needs no PnP features to set these up. However, the serial port itself may need to be configured (IRQ number and I/O address) unless the default configuration is OK.

How can an external modem be called PnP since it can't be configured by PnP? Well, it has a special PnP identification built into it that can be read (thru the serial port) by a PnP operating system. Such an operating system would then know that you have a modem on a certain port and would also know the model number. Then you might not need to configure application programs by telling them what port the modem is on (such as /dev/ttyS2 or COM3). But if you don't have such a PnP operating system you will need to configure your application program manually by giving it the /dev id (such as /dev/ttyS2).

Cabling & Installation

Connecting an external modem is simple compared to connecting most other devices to a serial port that require various types of "null modem" cables. Modems use straight through cable, with no pins crossed over. Most computer stores should have these. Make sure you get the correct gender. If you are using the DB9 or DB25 serial port at your computer, it will always be male. Hook up your modem to one of your serial ports. If you are willing to accept the default IRQ and I/O address of the port you connect it to, then you are ready to start your communication program and configure it.

What the Lights (LED's) Mean

4.3 Internal Modems

An internal modem is installed in a PC by taking off the cover of the PC and inserting the modem into a vacant slot on the motherboard. There are modems for the ISA slots and others for the PCI slots. While external modems plug into the serial port (via a short cable) the internal modems have the serial port built into the modem. In other words, the modem card is both a serial port and a modem.

Setting the I/O address and IRQ for a serial port was formerly done by jumpers on the card. These are little black rectangular "cubes" about 5x4x2 mm in size which push in over pins on the card. Plug-and-Play modems (actually the serial port part of the modems) don't use jumpers for setting these but instead are configured by sending configuration commands to them (via I/O address space inside the computer). Such configuration commands can be sent by a PnP BIOS, the isapnp program (for the ISA bus only) or by a PnP operating system. The configuring of them is built into Windows 95/98 OS. Under Linux you have a choice of ways (none of which is always easy) to io-irq configure them:

  1. Use "isapnp" which may be run at every boot-time
  2. Use a PnP BIOS alone (which runs at every boot-time)
  3. Patch Linux to make it a PnP operating system

4.4 Internal Modems You Must Avoid: winmodems, etc.

In late 1998, the majority of internal modems don't work with Linux since it they are "winmodems" or the like, although they often don't state it directly like this. Such modems turn over much (or even almost all) of the work of the modem to the main processor (CPU) chip of your computer (such as a Pentium...). Since only Windows (and not Linux) software is provided to do this, it will not work under Linux.

There are other more precise names than "winmodem". HSP (Host Signal Processor) means that the host processor (your CPU chip) creates the code needed to produce the electrical signal on the phone line. In contrast to this, a "controllerless" modem can create the electrical signals (but can't control the modem). It contains no facilities to deal with bytes being sent and received. It can't compress strings of bytes; it can't check for errors; it can't put them into packets. In other words it can't control the modem but instead has the CPU do all this work using a program for Windows. If such programs could be ported to Linux then there wouldn't be this problem. Besides the above, a modem which doesn't simulate a serial port will not work under Linux.

How do you determine if an internal modem will work under Linux? It's not always easy. If you can look at the package it came in (or a manual) find the section on the package that says something like "Minimum System Requirements" or just "System Requirements". It may be in fine print. Read it closely. If Windows is listed as one of the requirements then it will likely not work under Linux. Also check out modem list which lists modems which do and don't work under Linux.

Otherwise, it may work under Linux if it fails to state explicitly that you must have Windows. By saying it's "designed for Windows" it may only mean that it fully supports Microsoft's plug-and-play which is OK since Linux uses the same plug-and-play specs (but doesn't support them very well as yet). Being "designed for Windows" thus gives no clue as to whether or not it will work under Linux. You might check the Website of the manufacturer or inquire via email. I once saw a web-page that specifically stated that one model worked under Linux while implying that another model didn't.

As far as the author knows, there is almost no effort underway to support winmodems in Linux. You might request that modem manufacturers port their code to Linux (or the like).

4.5 Which Internal Modems are Best to Avoid ?

MWave and DSP Modems

Such modems use DSP's (Digital Signal Processors) which are programmed by algorithms which must be downloaded from the hard disk to the DSP's memory just before using the modem. Unfortunately, the downloading is done by Dos/Windows programs so one can't do it from Linux. Ordinary modems that work with Linux often have a DSP too (and may mention this on the packaging), but the program that runs it is stored inside the modem. This is not a "DSP modem" in the sense of this section and should work OK under Linux.

If a DSP modem modem simulates a serial port, then it is usable with Linux which communicates with modems via the serial port. If you also have Dos/Windows on the same PC you may be able to use the modem: First start Dos/Windows (make sure the modem gets initialized) and then without turning off the computer, go into Linux. One way to do this may be to press CTRL-ALT-DEL. An example of a DSP modem is IBM's Aptiva MWAVE.

Rockwell (RPI) Drivers

Modems that require Rockwell RPI drivers are not fully usable since the driver software doesn't work on Linux. The RPI does compression and error correction using MS Windows software on your computer's CPU. If you are willing to operate the modem without using the RPI (and have no compression nor error correction) then you may easily disable RPI by sending the modem (via the initialization string) a command to do so each time you power on your modem. On my modem this command is +H0. Not having data compression available may not be much of a handicap since most long files which you download from the Internet are already compressed and attempts at further compression may only slow things down a bit.

PCI Modems

A PCI modem card is one which inserts into a PCI-bus slot on the motherboard of a PC. Unfortunately, it seems that most PCI modems will not work under Linux. But since some people have gotten PCI modems to work under Linux it seems that a small minority of such modems will work under Linux.

After you install a PCI modem, look at /proc/pci. If you see a high main memory address (like 0xfebfff00), it probably works by shared memory which is not supported by Linux. If there is no such high memory address and the only address you see is an I/O address under 0xffff ??, then it might work OK. I'm not really sure of the /proc/pci signature to look for to determine whether or not the modem will work under Linux. If this request is still in the latest version of this HOWTO, please send me info on what /proc/pci looks like for PCI modems that work under Linux or let me know what signatures to look for in /proc/pci to determine whether or not the modem will work with Linux.


Next Previous Contents