History (slightly condensed) ------- Date: Fri, 5 Jan 2001 20:10:37 -0500 (EST) From: Andreas Plesch <plesch@fas.harvard.edu> Reply-To: andreas_plesch@harvard.edu To: discuss@linmodems.org Subject: Toshiba 2800-S201 Xircom MPCI, new info I did not realize until now that there was an active mailing list at linmodems.org :) Several people wrote in lately about problems with the internal modem on new Toshiba latops. I have a Satellite 2800-S201 and I have exactly the same problems, e.g. "resource busy", DEBUGGING mode on in serial.c reveals undetection, no IRQ control in BIOS etc. The good thing is that I am not alone in this :) The only thing I can add is that I looked up the exact modem part no. and FCC registration by looking directly at it. All the info (and some more , e.g about sound) is at http://sites.netscape.net/andreasplesch/toshiba.htm Please have a look. The chips indicate to me that it uses the Lucent MARS3 chip set but the main one is mostly hidden under a heat metal strip, so there is not much to see. Maybe others are more lucky finding out. The removal of the cover is a bit tricky. After removing the screws which hold the cover, I loosened a couple of more screws on the bottom. Then I used a rotating motion (clockwise) and some mild force to remove the cover. I also tried the ltmodem diagnostic tool. It checks for a LUCENT pci vendor id, so it does not even start. I then just changed the id in the source to the Xircom one (I think 115d). Then it starts but ltmodem -t has problems with the pci.ids file. ltmodem -c 3> /dev/tty1 hangs (and the keyboard and maybe more) after reporting 0 as the port addresses. It may be worthwhile to try some more things with this tool. Andreas --- Date: Sun, 7 Jan 2001 13:37:13 -0500 (EST) From: Andreas Plesch <plesch@fas.harvard.edu> Reply-To: andreas_plesch@harvard.edu To: discuss@linmodems.org Subject: Xircom MPCI 56 and the lucent driver Hi, I have a Satellite S2800-S201 with this modem: Xircom MPCI 3A56G-100 FCC Registration No.: 2U6MLA-27849-M5-E REN 1.0B 0.5A and cannot get it to work with the lucent driver. A thinkpad user - Raphael - with this modem: Xircom MPCI 3A56GSP-100PA is able to use the lucent driver. The devices are different (00d4 vs 000c) but at least I know now that ltmodem.o (and lucent_detect_modem) likes the xircom pci vendor id. Here is one more bit of information I found in the win2k driver of my modem: strings on ltck000c.sys (lt for lucent but copyright by xircom) has E:\mars\x1903\mkn5\i386\ltmodem.pdb This is an indication that it uses the lucent MARS chip set. Does anybody know what the x1903 could stand for ? And if the lucent driver ltmodem.o supports the MARS3 chip set ? If I modify serial.c to ignore the nondetection I can insmod and get this when modprobing at boot time: 5.78 w\ no serial option enabled no vm86_info: BAD S10serial: line 225: 54 segmentation fault Then there is a IRQ problem so that hda cannot be accessed anymore. Does anybody know what no vm86_info: BAD means ? Thanks for reading, Andreas Here is my pci info: 00:08.1 Serial controller: Xircom: Unknown device 00d4 (prog-if 02 [16550]) Subsystem: Intel Corporation: Unknown device 2411 Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- Status: Cap+ 66Mhz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- Interrupt: pin A routed to IRQ 11 Region 0: I/O ports at ff38 Region 1: Memory at efdff000 (32-bit, non-prefetchable) Capabilities: [dc] Power Management version 2 Flags: PMEClk- DSI+ D1+ D2+ AuxCurrent=0mA PME(D0+,D1+,D2+,D3hot+,D3cold+) Status: D0 PME-Enable- DSel=0 DScale=2 PME- and here Raphaels pci info: 00:03.1 Serial controller: Xircom: Unknown device 000c (prog-if 02 [16550]) Subsystem: Intel Corporation: Unknown device 2408 Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- Status: Cap+ 66Mhz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- Interrupt: pin A routed to IRQ 11 Region 0: I/O ports at 1840 Region 1: Memory at f0121000 (32-bit, non-prefetchable) Capabilities: [dc] Power Management version 2 Flags: PMEClk- DSI+ D1+ D2+ AuxCurrent=0mA PME(D0+,D1+,D2+,D3hot+,D3cold+) Status: D0 PME-Enable- DSel=0 DScale=2 PME- --- Date: Sun, 7 Jan 2001 16:31:05 -0300 From: Javier Nigro <javier@nigro> To: discuss@linmodems.org Subject: ltmodem.o: vendor and device ids supported Parts/Attachments: Hello, I have more info about which vendor and device ids does ltmodem.o supports. Apparently, the chain of functions called is: init_module(serial.c) lucent_detect_modem(lmdmobj.o) lt_pci_find_device(ltmodem.c) pci_find_device(/usr/src/linux/drivers/pci/pci.c) Function lucent_detect_modem calls lt_pci_find_device several times with different vendor id and device number combinations. Once it finds a match it stops. Those combinations are as follows: Vendor=0x11c1 (Lucent) and device=from 0x440 to 0x45c Vendor=0x115d (Xircom) and device=from 0x001 to 0x00f Vendor=0x115d (Xircom) and device=from 0x440 to 0x45c If your modem does not match any of the above combinations, chances are, it won't be detected! (Device or resource busy). Well, that's my problem, since I have a Xircom with dev_id=0x0d4 (Toshiba Satellite 2805-S301) So, I disassemble ltmdmobj.o to see where it is calling lt_pci_find_device and found that there are three loops, one for each combination listed above. I changed one, from: 25705: bb 40 04 00 00 mov $0x440,%ebx to 25705: bb d4 00 00 00 mov $0xd4,%ebx So the loop changed from: Vendor=0x115d (Xircom) and device=0x440 to 0x45c to Vendor=0x115d (Xircom) and device=0x0d4 to 0x45c Now, when I try to load the module, it detects my modem (of course!) but generates a very ugly log in /var/log/messages and my machine gets very unstable: [cut] I hope someone out there have more info, cause I got stuck! Thanks! Javier --- Date: Sun, 7 Jan 2001 19:37:42 -0500 (EST) From: Andreas Plesch <plesch@fas.harvard.edu> Reply-To: andreas_plesch@harvard.edu To: discuss@linmodems.org Subject: Re: ltmodem.o: vendor and device ids supported Hi Javier, that is good information and a better way to make the module accept the "00d4" device. Previously I just pretended in serial.c that it was detected. However, using setserial results then in various kinds of kernel crashes. One difference is the DETECT_IRQ enabling. Did you find any other differences ? What kind of info may lucent_detect_modem return ? Did you also try to modify the other xircom loop ? I will try your approach, How do you modify the binary object file ? Hope that is not a stupid question :) Andreas --- Date: Sun, 07 Jan 2001 23:20:25 +0000 From: Marvin Stodolsky <stodolsk@erols.com> To: andreas_plesch@harvard.edu Subject: Re: Xircom MPCI 56 and the lucent driver Andreas, I'm not sure this route will help BUT, the thought is that the 2.4.0 kernel is considerable smarter in managing PCI issues than the 2.2.nn. So let's set you up with a "Boot to ramdisk under 2.4.0 which will by pass and complications of your current configuration, and then test ltmodem.o insertion ... --- Date: Sun, 07 Jan 2001 23:26:49 -0500 From: Marvin Stodolsky <stodolsk@rcn.com> To: andreas_plesch@harvard.edu Subject: Re: Xircom MPCI 56 and the lucent driver Parts/Attachments: Andreas Plesch wrote: > > Hi Marvin, > > glad your are interested in our problem. I downloaded and played with the > debian installation/rescue disk to understand its concept. It looks nice > but one problem with it is that the rescue kernel image size is limited to > about 730K because of the disk size limit. My kernel currently has about > 750K (the original SUSE70 over 800K). So I could not really test booting > my kernel from the rescue disk. Attached. This .rpm was made by conversion from the Debian .deb format with the aline utility ... --- Date: Sun, 07 Jan 2001 23:35:07 -0500 From: Marvin Stodolsky <stodolsk@rcn.com> To: andreas_plesch@harvard.edu Subject: Re: Xircom MPCI 56 and the lucent driver Parts/Attachments: > Otherwise, I am ready to try things, > > Andreas just gunzip the ATTACHED check out this story at Linux Today: http://linuxtoday.com/news_story.php3?ltsn=2001-01-05-007-04-NW-LF-KN Concerning PCI support under 2.4.0 --- Date: Mon, 8 Jan 2001 16:41:13 -0300 From: Javier Nigro <javier@nigro> To: discuss@linmodems.org Cc: andreas_plesch@harvard.edu Subject: Re: ltmodem.o: vendor and device ids supported Parts/Attachments: Hi!, First, let me add to the previous mail that although ltmodem.o goes further with the changes I made, it still fails to get loaded (Device or resource busy). My log says "ttyLT00 at 0xff38 is a Lucent" and that was what made me think that everything was ok, but rs_init() gives me back a negative value. So, lucent_init_modem() is not being called at all. > One difference is the DETECT_IRQ enabling. Did you find any other > differences ? What kind of info may lucent_detect_modem return ? > Did you also try to modify your the other xircom loop ? Apparently lucent_detect_modem() returns 0 if it was able to detect the modem and a non zero value if it fails to do so. I only tried with one loop, but I think the result would be equal for the other. > > I will try your approach, > How do you modify the binary object file ? Hope that is not a stupid > question :) Well, it is not a stupid question at all. I found a way to fool the ltmdmobj.o file. Of course there could be better and safer ways to do this, but I'm not an expert. So here's the procedure I followed First I dissassembled ltmdmobj.o with the command: # objdump -d ltmdmobj.o > code.txt Then I edited code.txt and look for function lucent_detect_modem. Once there, I saw famous numbers like 0x11c1, 0x115d, 0x440, etc. You know them, don't you? There is the code where lt_pci_find_device is called. I decided to modified the starting dev_id of the loop: 25705: bb 40 04 00 00 mov $0x440,%ebx The hexa numbers "bb 40 04 00 00", are the machine code for "mov $0x440,%ebx" and they exist in ltmdmobj.o in that exact order. So if you want to modified it to read: 25705: bb d4 00 00 00 mov $0xd4,%ebx you should find that string and modified the second and third numbers: 40 04 by d4 00. Once you made the changes, you can dissassemble it again and check to see if it was properly modified. In order to make that change, you can use any binary editor that allows you to change just one byte. As I didn't have one handy, I made a C program (which I'll send to you in a separate mail, because I don't know if the list accepts attachments). One more thing, it would be a good idea to add a debugging line in function lt_pci_find_device() to know with wich parameter it is been called. printk("lt_pci_find_device(id=0x%x, num=0x%x)\n", id, num); Well, I hope you'd have better luck than me! That's all! Javier (Buenos Aires, Argentina) --- Date: Tue, 09 Jan 2001 16:06:56 +0000 From: Marvin Stodolsky <stodolsk@erols.com> To: andreas_plesch@harvard.edu Subject: Re: Xircom MPCI 56 and the lucent driver Andreas http://www.motorola.com/networking/products/sm56_pci_software_modem/index.html This I suspect is the chip in your modem, NOT the Lucent. MarvS : > > Hi Marvin, > > here is what I found out by using kernel 2.4.0 and the co-compiled > ltmodem.o. > ... --- Date: Tue, 09 Jan 2001 18:25:10 +0000 From: Marvin Stodolsky <stodolsk@erols.com> To: andreas_plesch@harvard.edu Subject: OK Lucent Re: Xircom MPCI 56 and the lucent driver Andreas > May I ask what makes you think so ? I took some pictures of the modem, > http://sites.netscape.net/andreasplesch/modempics/modempics.htm, do > you recognize anything ? Unfotunately my card is buried in this company COMPAQ laptop, which can't be opened without breaking the Warraty Modem producers just buy the chipset from Lucent, and make put it on boards in diverse ways. > I still think its a lucent chip set because all windows driver files are > called lt* and the main one references ltmodem.pdb in a mars >subdirectory. Good arguements I really have no definitive info. I just remembered the Motorola stuff from another email to the list. MarvS --- Date: Tue, 9 Jan 2001 23:20:39 +0100 (CET) From: LiTTlE-John <f.carone@tiscalinet.it> To: Javier Nigro <javier@nigro> Cc: discuss@linmodems.org, andreas_plesch@harvard.edu Subject: Re: ltmodem.o: vendor and device ids supported On Mon, 8 Jan 2001, Javier Nigro wrote: > Hi!, > > First, let me add to the previous mail that although ltmodem.o goes further with the changes I made, it still fails to get loaded (Device or resource busy). > > My log says "ttyLT00 at 0xff38 is a Lucent" and that was what made me >think that everything was ok, but rs_init() gives me back a negative value. > So, lucent_init_modem() is not being called at all. > > > Apparently lucent_detect_modem() returns 0 if it was able to detect the > modem and a non zero value if it fails to do so. Indeed, it searches in this order (vendor, pcidevice) 11c1,440 115d,0 115d,45a if it fails then it searches for toshiba and compaq `special' devices. I don't know why toshiba or compaq could be different, but this is done. So, if it founds the modem the lucent_detect_modem returns 0, otherwise -1 (I haven't experienced any other values). > I only tried with one loop, but I think the result would be equal for the > other. > > > > > I will try your approach, > > How do you modify the binary object file ? Hope that is not a stupid > > question :) > > Well, it is not a stupid question at all. A nice tool I suggest is called biew, it's opensource and very very nice (the interface is very close to hiew, but the program is much more powerful). >[...] filippo. --- Date: Wed, 10 Jan 2001 01:49:08 -0500 (EST) From: Andreas Plesch <plesch@fas.harvard.edu> Reply-To: andreas_plesch@harvard.edu To: David Newall <davidn@rebel.net.au> Cc: discuss@linmodems.org Subject: Re: ltmodem.o: vendor and device ids supported Wow, it worked. I write this as I am connected with minicom via my Xircom pci device id "00d4" modem as found on the Toshiba 280x series laptops. And I started to hate this modem. Javiers trick did it. It involves just modifying one byte in the ltmdmobj.o file. So far (10 min) it works flawlessly. Details soon and on my laptop page (http://sites.netscape.net/andreasplesch/toshiba.htm) I used this setserial command: setserial /dev/ttyLT0 irq 11 port 0xff38 ^fourport ^auto_irq skip_test Andreas Thanks to all involved --- Date: Wed, 10 Jan 2001 15:38:58 -0300 From: root <javier@nigro.com> To: discuss@linmodems.org, plesch@fas.harvard.edu Subject: Re: ltmodem.o: vendor and device ids supported Hi everybody! YEEEEEEEES!! I'm connected to the Internet with my Xircom under Linux!! (dev=d4 SO OUT OF RANGE!) using pppd. I've been connected for 30 minutes now, and works very good. Andreas, it worked for me too. I don't know why didn't it worked the first time... I must have done something wrong with my C program, but biew saved me! Thanks! Just for the record: Toshiba 2805-S301 Xircom modem (115d) devid=0xd4 Kernel 2.2.16-22 (Redhat 7.0) In order to work, I modified the second loop of 115d and changed from 0x440 to 0x0d4. The special file created by ltinst didn't work for me. Instead, I did: mknod /dev/ttyLT0 c 62 64 After that, the setserial as describe by Andreas in this thread should do the rest. Sorry Windows, I won't be needing you much now! Bye, Javier. Buenos Aires, Argentina. --- Date: Wed, 10 Jan 2001 21:55:58 +0100 (CET) From: LiTTlE-John <f.carone@tiscalinet.it> To: andreas_plesch@harvard.edu Cc: discuss@linmodems.org Subject: Re: HowTo paragraph Re: ltmodem.o: vendor and device ids supported]] On Wed, 10 Jan 2001, Andreas Plesch wrote: > > Hi > > It may make sense to just supply a modified ltmdmobj.o (or binary patch > for it) which accepts all device ids for Xircom (and Lucent ?, devices): 0 > - 0x0f is accepted in the first loop, and then just modify to 0x0010 - > 0x0500 (or so) in the second loop. I don't know how this can be safe. In the code of the object i saw that there's a routine which sets some registers and variables values on the base of the dev_id. So if we let the driver run even for the dev_ids it is not prepared for, i don't know which could be the result. > Then the procedure for the user should > be to first look up the device ids (not sure if I can do system fool proof > scripting) and then decide which driver to use. Then there could be a list > of modems (device ids) which are known to work. And a warning that > although the driver gets loaded, the system may become unstable or crash. this is reasonable. > > If sb else can do system (kernel) agnostic scripting here is my > suggestion: > [...text ripped...] > > > Background: > > o ltmodem.o = serial.c (source) + ltmdmobj.o (lucent binary) > o serial.c calls function in ltmdmobj.o which "detects" modem short int lucent_detect_modem(void) (i think these are the right values) > o disassembly shows that detection in ltmdmobj.o is based on pci vendor > ids and device ids I confirm this. > o for xircom vendor id, only device ids between 0 and 0x0f (sb with > assembler skills should check that) and 0x0440 and 0x045c are accepted > (detected) confirmed. > o however, ltmdmobj.o is old, newer devices have other ids but still > compatible chip sets don't know a lot about winmodem hardware in general, anyway it looks a reasonable hypothesis. > o solution: modify checking part in ltmdmobj.o, real solution new driver i agree. > > How: > > several alternatives > > o just use ltmodem-5.78mod.tgz with premodified ltmdmobj-mod.o > o apply binary patch for ltmdmobj.o > o have a look yourself and modify with these tools: objdump, beiw the last is the one i prefer more, anyone could modify the file himself and then let the list know about modifications and results. > beiw is binary editor with integrated disassembler (all objdump options). > > Basic procedure: > [...text ripped...] > > 5) study more (e.g. InitVariables is called before that, what does it do?) > and let others know on discuss@linmodems.org > > Thanks: > > to Javier Nigro for beginning the disassembly > to Filippo Carone <f.carone@tiscalinet.it> for confirming and pointing to > biew > > Please comment, correct and/or expand. > > This is more or less what I will put up on my page, maybe also a > binary patch to ltmdmobj.o > > Andreas > filippo. --- Date: Thu, 11 Jan 2001 11:59:53 +1100 (EST) From: Mark Spieth <mspieth@dclabs.com.au> To: Andreas Plesch <andreas_plesch@harvard.edu> Cc: Marvin Stodolsky <stodolsk@erols.com>, Sean Walbran <sean@walbran.org> Subject: Re: HowTo paragraph Re: ltmodem.o: vendor and device ids supported]] Parts/Attachments: 1 Shown 101 lines Text 2 OK ~109 KB Text (charset: Unknown), "" ---------------------------------------- On Wed, 10 Jan 2001, Andreas Plesch wrote: > > This is much preferable. > > I volunteer to testdrive. And maybe try it myself but am not C coder. > > It took me awhile to understand how this works. Good around the > corner thinking. I did not know that lucent_detect_modem calls > lt_pci_find_device but could have guessed :). > > Why not provide two versions for users: one like this with known to work > additional pci pairs (now just one), and one which just allows a large > range (0x0010 to 0x00ff, or to 0x0440?, all?) of device ids for both > xircom/lucent. This would be labelled "hi-risk, probably not working" but > should include a plea to submit the pci pair if working. It could be > called the ltmodem lottery :) Win a working modem ! And a precious spot in > the linmodem HOWTO ! Or loose some data during a crash ! This way people > who are afraid to type make could still take advantage and provide input. As far as I know, all pci ids are allocated by a central body. dont know what that is though. > > Even better would be a way to check directly (without device ids) if the > modem has a lucent MARS/MARS3 chip set. Is this somehow possible short of > looking at the chip set ? > this would be difficult. I attach a reverse engineering attempt of the previous 5.68 driver as it has some interesting bits of code which should work. see especially lucent_detect_modem and FindTos the toshiba finder ma > Andreas > > On Thu, 11 Jan 2001, Mark Spieth wrote: > > > here is an alternate solution which should not need binary patching > > > > in ltmodem.c change lt_pci_find_device to check other id/num pairs when > > one of them is detected. Note the following is untested but you should get > ^^^^^^^^ should be "looked for" > > the drift. > > > > struct PCI_IDs { > ^ > > int vendor_id; > ^^^^^^^^^ > > int device_id; > ^^^^^^^^^ > > }; > > > > struct PCI_IDs pci_ids[] = { > ^ ^ > > {id1,num1}, > > {id2,num2} > > }; > > > > BOOL lt_pci_find_device ( unsigned int id, unsigned int num ) > > { > > dev = pci_find_device ( id, num, dev ); > > if ((dev) && (dev->irq)) > > { > > return TRUE; > > } > > int len = sizeof(pci_ids)/sizeof(pci_ids[0]); > ^ ^ > > if (id == PCI_VENDOR_ID_ATT && num == PCI_DEVICE_ID_ATT_L56XMF) > 0x11c1 0x0440 > > { > > int i; > > for(i=0;i<len;i++) > > { > > if (lt_pci_find_device(pci_ids[i].vendor_id, > pci_ids[i].device_id)) > ^ ^ ^^^^^^^^^ > > { > > return TRUE; > > } > > } > > } > > return FALSE; > > } > > ^: some additions to help me read this. > > Hmm, now I do have try it myself. > -- Mark Spieth, PhD --- Date: Thu, 11 Jan 2001 04:24:04 -0500 (EST) From: Andreas Plesch <plesch@fas.harvard.edu> Reply-To: andreas_plesch@harvard.edu To: Mark Spieth <mspieth@dclabs.com.au> Cc: Marvin Stodolsky <stodolsk@erols.com>, Sean Walbran <sean@walbran.org> Subject: Re: HowTo paragraph Re: ltmodem.o: vendor and device ids supported]] That was quick. I tested. On Thu, 11 Jan 2001, Mark Spieth wrote: > heres a test package for you > > http://www.test.dclabs.com.au/linmodem/ltmodem-5.78e1.tar.gz > > with this one you can go > > modprobe ltmodem.o vendor_id=0x11c1 device_id=0x400 This does not work for me, only for people who actually get a device supplying these ids to pci_find_device according to the code. But this is good because this way people have to look up their ids and can report them. insmod ltmodem.o vendor_id=0x115d device_id=0x00d4 works well, as expected. I also tested putting in my id pair in the pci_ids list as in /* list of confirmed devices */ static struct PCI_IDs pci_ids[] = { { 0x115d , 0x00d4 } }; and then insmod ltmodem.o works also, as expected. great job, Andreas --- HAPPY ENDDownload Driver Pack
After your driver has been downloaded, follow these simple steps to install it.
Expand the archive file (if the download file is in zip or rar format).
If the expanded file has an .exe extension, double click it and follow the installation instructions.
Otherwise, open Device Manager by right-clicking the Start menu and selecting Device Manager.
Find the device and model you want to update in the device list.
Double-click on it to open the Properties dialog box.
From the Properties dialog box, select the Driver tab.
Click the Update Driver button, then follow the instructions.
Very important: You must reboot your system to ensure that any driver updates have taken effect.
For more help, visit our Driver Support section for step-by-step videos on how to install drivers for every file type.