Before trying such parameter usage, some simpler alternatives should
be checked.
1) Check IRQ usage with:
cat /procs/interrupts
2) Remove and non-essential modules by alternate usages of:
lsmod
rmmod ModuleName
3) If your system has pcmcia hardware, exclusion of some
IRQ usage within /etc/pcmcia/config.opts
may be desirable. Shut down the pcmcia before the modem tests
with:
/etc/init.d/pcmcia stop.
Then recheck modem functionality before trying Insertion Parameters.
Note that for any module such as lt_modem.o
modinfo -p lt_modem
shows all the parameters available during module insertion.
There are a few distinct cases for Lucent modems.
1a) For a Very Few modems in PCI card format, simple detection of the
modem by the kernel requires a usage such as:
$ insmod lt_modem vendor_id=0x115d device_id=0x0420
Once the lt_modem has thus been successfully inserted,
$ modprobe -r lt_serial
should succeed. Read Andreas.txt for the interesting history
of this development. After a successful ppp CONNECT is achieved,
This parameter usagecan be automated. Within /etc/modules.conf
, edit in a line:
options lt_modem vendor_id=0x115d device_id=0x0420
Then to inform your System, run:
$ depmod -a
There is a minor difference if your Linux installation has a file characteristic
of Debian related distributions: /etc/modutils/aliases.
If this case do the edit therein. Then a command:
$ update-modules
will transfer the information to /etc/modutils.conf including a "depmod
-a"
1b) Almost always, the interrupt (irq) specified by the PCI card firmware
is appropriate, even if other devices are sharing the same irq. However
it is possible to Force the use of a different irq through a usage:
$ insmod lt_modem vendor_id=0x115d device_id=0x0420 Forced=newIRQ,BaseAddress,CommAddress
where BaseAddress and CommAddress are those specified by the PCI firmware.
2) For ISA card modems, a parameter like (vendor_id=0x115d device_id=0x0420)
are not relevant.
Rather the proper usage for tests is:
$ insmod Forced=IRQ,BaseAddress,CommAddress
After a successful insertion of lt_modem, test
$ modprobe lt_serial
If may be necessary to test several combinations of Forced parameters,
before a combiination is found that supports
a successful:
$ modprobe lt_serial
Once a success is achieved, automation can be achieved as previously
described above.
The file Ltmodem.html relates several successful usages of the Forced
parameters.
The history of this development related below is interesting and provides
some more operational detail.
--------------------------------------------------------------------------------------------------------------------------------------------
Denis Auroux auroux (at) math.polytechnique.fr achieved an extension
of service for ISA Lucent modem.
Resources to be used during module insertion can be specified, with
the excerpts below guidance for usage.
**************************************************************************************************************************
SHORT EXPLANATION OF HOW TO USE THIS FIX:
In some instances, non-PCI Lucent winmodems fail to be correctly detected
by the ltmodem driver. This is e.g. the case for the internal modem in
the Dell Inspiron 7000. In this case, tweaking the settings in here lets
you bypass normal hardware detection. Beware, this is extremely RISKY.
Bypassing hardware detection means that the Lucent driver will simply assume
that you have a LT modem at the specified port addresses; if that is not
the case, or if your settings are incorrect, it is guaranteed that your
computer will crash, and some of its components might even be damaged in
the process.
So, do not try this unless you are 100% certain that
- you do have a Lucent winmodem in your computer,
- the reason why it is not detected is because it has non-standard
port settings,
- you know the exact port settings for your modem.
NOTE: This is NOT designed to help fix the problems encountered by some people whose PCI Lucent-based winmodems are not detected because of their PCI IDs. It probably doesn't help to fix that specific problem.
HOW TO DETERMINE YOUR PORT SETTINGS:
You need to locate three pieces of information:
1. the "base address" used by your modem. This can also be known as"configuration
port" or other similar names. It is a value that should be less than 400
for non-PCI modems, more than 400 for PCI modems. This value is usually
given in hexadecimal (base 16), and consists of 3 or 4 digits; the last
digit is usually zero.
Example: the factory default for the Dell Inspiron 7000 internal modem is 130 (also known as 0x130).
2. the "COM address" used by your modem. This is usually one of 2E8, 2F8, 3E8 or 3F8 if your modem emulates a standard modem port (COM1 to COM4). It can be entirely different, especially if you have a PCI modem; the last digit is usually 8, though.
Example: the factory default for the Dell Inspiron 7000 internal modem is 2F8 (also known as 0x2F8) -- this corresponds to COM2.
3. the IRQ setting of your modem. This is a small number, usually 3 or 4, although values up to 15 would still make some sense. Be careful, we're talking about IRQ, not DMA. The linux driver doesn't need to know about the DMA settings.
Example: the factory default for the Dell Inspiron 7000 internal modem is 3 (as usual for a COM2 port).
There are three ways to find this information. Depending on your computer, only one of them might work; but if several happen to work, please cross-check your values carefully -- if you get them wrong, you might end up damaging your computer.
1) at startup, go into the BIOS setup program. Browse the pages until you find the configuration settings for your LT Winmodem. You should then be able to find the base address, the COM address and the IRQ. This only works in some special configurations, usually laptops with an internal non-PCI Lucent winmodem (this is e.g. the case of the Dell Inspiron 7000).
2) in Windows, start the Control Panel, double-click on "System", go to the "Device Manager" tab, locate your LT Win modem (in the "Modems" section), click on "Properties", go to the "Resources" tab. This will list all the resources used by your modem; you should in particular find the IRQ value, as well as two port ranges (each consisting of 8 ports), which correspond to the base address and the COM address (you'll have to figure out which one is which, using the above tips). For example, if your base address is 0x130 and your COM address is 0x2F8, Windows will list port ranges 130-137 and 2F8-2FF. While you're in that dialog box, just check in the other tabs that your modem is indeed a Lucent modem: one of the tabs lists the various files in your modem driver, one of them in particular should be called LTMODEM.VXD. If you don't see that file, your modem isn't a LT winmodem and you should not attempt to use this driver under Linux. This method should always work, provided that you have Windows and that your modem is correctly configured in Windows.
3) in Linux, run the command cat /proc/pci and look for any entry that might be relevant to your modem. You will then find the IRQ value and the I/O address ranges, but this method only works if your modem is connected to the PCI bus -- in which case you shouldn't be using this fix in the first place.
Ok, one last check before you finally type in the modem setup information at the end of this file: in Linux, run the two commands cat /proc/ioports cat /proc/dma
If you find out that what you considered to be resources (ports or IRQ)
belonging to your LT Winmodem actually are listed as belonging to some
other device, then you were wrong. Try again looking for other port values.
Exception: it's okay if the COM port range is listed as belonging to
"serial(auto)".
Well, that's it. If you're decided to go ahead, look below, and modify the preset values in the manner indicated. Once again, please be EXTREMELY CAREFUL when entering the settings, and don't do this if you are not sure about what you are doing -- activating this fix bypasses all the built-in safety checks of the driver.
********************
http://linmodems.org/cgi-bin/ezmlm-cgi?1:mss:2804:200102:mbommfnlhllgdbkjafef
has the remainder of the technical details, already implemented in the
ltmodem.o version e driver kit - MarvS ======================================================================
Below are excerpts from the France (Denis), Australia (Mark), and USA (MarvS) exchanges which made for a long interesting day and night
----------------------------------------------------------------------
Subject: LT Winmodem / non-PCI version ?
Date: Sat, 10 Feb 2001 16:17:22 +0100 (CET)
From: auroux@math.polytechnique.fr (Denis Auroux)
To: sean@walbran.org, stodolsk@erols.com
Sorry to disturb you with a question that is probably completely stupid... Anyway, I have a Dell Inspiron 7000 laptop with the internal LT winmodem. Unlike the later 7500 and 8000 series whose LT winmodems are on the PCI bus and are supported by your linux driver, I've only run into trouble ("device or resource busy") with my modem... What's particularly bugging me is that I just can't seem to figure out how it's connected to the main board: it definitely isn't listed in /proc/pci, isapnptools just cannot find anything, and the Windows device manager lists it as directly connected to the motherboard. I spent days on the Dell support site and also on the various linmodem-related web sites and haven't been able to gather the slightest hint as to the specifications of this modem. So this seems hopeless. The only things that keep me going are:
1) the windows driver *is* ltmodem.vxd (an old version 5.07a, but I guess that's ok)
2) I know the port ranges used by this modem (2F8-2FF + IRQ3 as it natively emulates a COM2 port; and 130-137 + DMA6&7, which must be the interface to the winmodem part). Linux actually does recognize the COM2 port, but it seems to be mostly unusable when nothing's monitoring the winmodem ports. Well, when I compare this with the port ranges for the Inspiron 8000 LT Winmodem (PCI), they're so different that it actually looks discouraging.
So what I'd be hoping to do would be to start from your driver but change the hardware detection part (or maybe just remove it and directly set the port values to suit my configuration) and keep trying until I get some kind of improvement. Do you believe this might be technically feasible, or does the above description of my modem sound really too different from the "usual" LT winmodem ? Do you have any hints as to where I should start ?
Thank you very much in advance for any information and advice you can provide.
==================== from MarvS
Your Dell condition sounds similar to my Compaq 1500c laptop, on which I have good ltmodem.o service. Make sure that in the transition from the old 5.68 version to the new 5.78, that the choice for ports in your PPP utility scripts has been changed from /dev/modem or /dev/ttyS14 to /dev/ttyLT0 Much etc. omitted: ****************
===================
from Denis
Thanks very much for your reply. I tried all your diagnostics but couldn't get my modem to be detected at all in any way (although there are definitely no resource conflicts), so finally I went through the source code of the driver, and changed in init_module() the call to lucent_detect_modem(), which just wouldn't detect anything, replacing it by manual setting of the port and IRQ parameters. Here's the patch (well, it's very unclean because I started adding some debugging messages to understand what was happening, but I guess you'll get the idea easily) Believe it or not, now my modem works under linux !!!! (I'm writing this message inside minicom -- I'll try ppp later but I now have no doubt that it's going to work).
==================
from MarvS
Thanks TREMENDOUSLY, This will help MANY others. I'm going to separately send you the soon to be mounted e version kit whose driver is better in several ways. If you can verify/change the patch for it, we'll be able to include it.
=================
from Mark Spieth
The package is there (with Denis's fix). you may wish to update the doc to include the Forced parameter as well as the vendor_id and device_id params.
==================
from Denis
Hi everyone, Apparently I've been trying to cleanly package the fix
into 5.78e at the same time as you were doing the same thing -- probably
more successfully. Just in case, I'm sending you the files the way I modified
them -- which is much less elegant, *****
In any case, that file also contains instructions on how to use it
and especially how to find out the configuration settings, so you may want
to take out some of the text in there and use it to make a mini-tutorial.
=================
from MarvS, to Mark & Denis
I'm not confident that I understand the usage well enough to articulately clearly in the DOC. Could you please return an example and a few sentences which I will expand upon.
==================
from Mark
# modprobe ltmodem Forced=3,0x130,0x2f8
or in /etc/modules.conf
options ltmodem Forced=3,0x130,0x2f8
words:
Where the automatically detected parameters are not obtained or are
known to be wrong, they can be overridden using the Forced module parameter.
This allows the user on module load, to specify the Irq, the BaseAddress
and the ComAddress explicity. These override any detected parameters so
use with extreme care. All parameters must be specified for them to work.
Consequently, they will be ignored if less than 3 are supplied or if any
are -1.
# modinfo ltmodem shows all the parameters available in any module.
==================
from Denis
That's a very good and concise description, unlike mine :-) In any case, I just tested (well, I'm testing), and your patch works fine, except for a minor thing: when you write
if (Forced[0] 0 && Forced[1] 0 && Forced[2] 0)
{
printk(KERN_INFO "Forced Parameters Irq=%d BaseAddress=0x%x ComAddress=0x%x\n",
Irq,BaseAddress,ComAddress);
Irq = Forced[0];
BaseAddress = Forced[1];
ComAddress = Forced[2];
}
(twice in serial.c) you probably want to put the printk after the three other lines :-)
I was very confused when my syslog told me that it had chosen port 0xBC when I had said 0x130 ! [by the way, this is interesting: apparently the automatic detection gives the correct Irq and ComAddress settings, but fails to find the BaseAddress].
==================
from Mark
you are of course correct with the printk. I will fix.
==================
from MarvS, to Mark and Denis
concerning DOC I understand everything except:
"or if any are -1"
That I need a little expansion on.
===================
from Mark
-1 is a negative value indicating not set in the code. if all params are >=0 then they are inherently valid.
==================
from Denis
You can ignore that safely (remove it from the text). In fact, what
Mark did is that he set "default" values for these parameters to be -1
(so that, if autodetect fails, no special action is taken to override it),
and the driver tests whether positive values are supplied instead of these,
in order to decide whether the user wants to override autodetection with
his own settings. So, if you want to use that option, you should use positive
values for it to work -- well, I guess that wasn't really worth the explanation.
More generally, the point is that you need to enter "valid values" for
the parameters (in this instance, positive values). Note by the way that
the ltmodem driver is a bit 'extreme' in that sense: in most drivers, once
the user has manually specified some settings, there is still a chance
to detect whether the hardware is really set up the way the user claims
it is set up. In the ltmodem case, we don't know how to check for the validity
of the user-supplied configuration, so if it's incorrect the computer just
crashes suddenly -- no error message. If you're aiming at newbies, you
probably want to look at the comments inside my nodetect-fix.c: the hints
on how to gather information about LT modem settings remain valid, the
only difference being that one simply needs to pass the data as a module
parameter (in the manner explained by Mark) instead of having to modify
the source and recompile.