However, PC hardware is designed for MS Windows usage, and subsequently
written Linux drivers do sometimes need specification of resource parameters
to avoid conflicts.
Before trying such parameter usage, some simpler alternatives should
first be tried. First as Root free up resources:
1) Remove and non-essential modules by alternate usages of:
lsmod
rmmod ModuleName
2) If your system has pcmcia hardware, shutdown programs using
it. For example, if an ethernet PCMCIA card is in use:
ifconfig eth0 down
Then shut down the pcmcia functions with with:
/etc/init.d/pcmcia stop
Exclusion of IRQs (interrupts) needed for other hardware which
may later prove to be necessary. It can be achieved by editing the
beginning of the file /etc/pcmcia/config.opts
3) Check IRQ usage with:
cat /proc/interrupts
5) Check for conflicts in the files /etc/isa-pnp.*
6)Then recheck modem functionality through tests with minicom.
A first simple test is sending the an ATZ, which should return "OK"
if the driver is inserted and at all sane.
5) A subsequent check for modem hardware access itself , using
the 2nd Init string for the modem, such as:
ATQ0V1E1S0=0&C1&D2S11=55
An OK response to this Init indicates access, and should be accompanied
by the acquisition of an interrupt (irq) by the lt_serial driver.
Check with:
$ cat /proc/interrupts
$ cat /proc/ioports
should show the resources acquired by lt_serial
Failure at this point has been a problem for some installations of all
winmodems under Linux.
A cure in some cases has been a change in the bootup BIOS menu settings
in Operating System type (OS) from PNP --> Other, or vice versa.
See the file BIOSaccess.txt
If modem hardware access has thus far failed, AND
there is sound cause to believe the modem is compatible with ltmodem
drivers, THEN
it is appropriate to try insertion parameter usage.
For any kernel module, the available resource parameters are
listed by the command:
modinfo -p ModuleName
First if your System has modular isa-pnp.o
$ insmod isa-pnp
Next try lt_modem
$ insmod lt_modem.o
Check with
$ lsmod
If insertion failed, a small minority of Systems can attained functionality
through usage such as:
$ insmod lt_modem vendor_id=0x115d device_id=0x0420
where the parameter specification have been acquired for your modem
by lspci usages:
$ lspci -vv
$ lspci -nv
Ifsertion succeeds, also do:
$ insmod lt-serial
and retry the tests above.
If simple insertion succeeds through
$ insmod lt_modem
$ insmod lt_serial
should be successfull also. BUT this will not necessarily provide
modem access. Try the minicom tests mentioned above. If unsuccessful
read the text below below are determining the right parameters, but the
syntax is:
$ insmod lt_modem Forced=3,0x130,0x02f8
Of historical interest, when the was only a single ltmodem.o driver, three parameters were utilized as related in the history below. However the principles for determining the correct parameters are the same.
Excerpted from Denis Auroux's file, nodetect-fix.c
****************************************************************
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 zer.
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.