Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 09 Jul 2001 19:20:40 -0700
From:      Brad Karp <bkarp@icsi.berkeley.edu>
To:        mobile@freebsd.org
Subject:   Novatel Merlin for Ricochet under FreeBSD
Message-ID:  <200107100220.f6A2KeL08078@carp.aciri.org>

next in thread | raw e-mail | index | archive | help
I've just obtained a Novatel Merlin Ricochet PC-Card modem for use with 
FreeBSD. I hereby preempt any jokes about the Chapter 11 filing of Metricom. 
:-)

The card is meant to behave like an sio-style modem.

I've set up a pccard.conf entry for it so that it is attached as an sio card. 
The card attaches fine, probing as sio1 upon insertion. It's assigned irq 11 
(which works fine for me with my WaveLAN PC-Card and Linksys ed PC-Card).

If I "cu -s 115200 -l /dev/cuaa1", I can type AT commands to the card 
successfully, but with one fatal problem: each character I type is echoed only 
after I type the *next* character.

I realized immediately that this is the classic sign of "no receive interrupts 
being generated"; the sio driver checks for incoming characters in the output 
routine, such that characters are only read from the device on each output 
event.

I hacked a counter of the number of times siointr() was invoked into 
/sys/isa/sio.c, and sure enough, there are *zero* invocations of siointr.

I've searched the -mobile archives, and have found no detailed information 
about how to make the Merlin *for Ricochet* work (there was a posting about an 
old CDPD card, but that's not my hardware, and this is a different problem). 
There were a few people who posted that they wanted the Merlin to work, and 
one or two who seemed to suggest they may have had it working.

Has anyone had success with the Novatel Merlin for Ricochet under 4.3-RELEASE 
(or any other release)? Were any driver changes to sio, or otherwise, required?

If no one can report success, then I need to figure out why the card is 
generating no interrupts. I'm guessing there could be two types of cause: 
either the PC-Card subsystem isn't configuring the card successfully to use 
the IRQ (though the console output of the PC-Card code shows it being assigned 
IRQ 11 with no apparent errors), or the Merlin isn't enough like a 16550A 
(that's how sio detects it) to generate interrupts the way sio configures it.

I saw a posting by a Linux user that the Merlin for Ricochet has an unusually 
large receive FIFO. I have tweaked my sio.c to use a larger interrupt input 
buffer than the default (calculated in siosetwater()). (Actually, before I did 
this, I was getting console messages indicating interrupt-level buffer 
overflow, and they stopped after this hack, so some fix along these lines 
appears necessary, but insufficient.)

I also tried disabling the receive FIFO (by writing 0 to the com_fifo 
register), and not setting FIFO_RX_HIGH as the receive threshold, by writing 
only FIFO_ENABLE to the com_fifo register), but still no receive interrupts in 
either case.

I even tried assigning the card IRQs 4, 3, and 7 (all available on my Sony 
SR7K laptop, which has no serial ports nor parallel port). No interrupts on 
any of those IRQs. But as I said before, IRQ 11 works for me with all my other 
cards.

Oddly, if I try to "pccardc dumpcis" with the card inserted, I get a lot of 
garbage (meaningless tables that are obviously nonsense), and if I do this 
several times, pccardc begins to dump core. Perhaps the Merlin for Ricochet 
has garbage in its CIS region?

All suggestions most appreciated.

-Brad, bkarp@icsi.berkeley.edu



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-mobile" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200107100220.f6A2KeL08078>