Netgear MA301 and IRQs

Martijn van Oosterhout kleptog at svana.org
Mon Nov 12 21:38:55 EST 2001


On Mon, Nov 12, 2001 at 10:46:02AM +0100, Bjoern Giesler wrote:
> Hi,
> 
> I'm having troubles with the Netgear MA301/Lucent WaveLAN Silver Turbo. 
> The problem seems to be known (I've browsed the archives) -- the card 
> gets identified and seems to run fine, but it doesn't give any interrupts 
> to the kernel (at least, that's what "cat /proc/interrupts" suggests). 
> Instead, I get a lot of "Tx timed out" in the console. I've tried this 
> with a production 2.4.14 kernel (0.08a) and the version 0.08b from David 
> Gibson's 'testing' directory; the latter one doesn't segfault on rmmod, 
> but it has the same IRQ problem.

Common problem. Plenty of people are having issues with that card.

> Has this problem been solved already? If not, I've found a posting on the 
> freebsd-mobile list that suggests that they had a similar problem and 
> fixed it by fiddling with the card's IRQ control register. These posts 
> seem relevant:
> 
> http://docs.freebsd.org/cgi/getmsg.cgi?fetch=318765+0+archive/2001/freebsd-mobile/20010826.freebsd-mobile
> http://docs.freebsd.org/cgi/getmsg.cgi?fetch=321477+0+archive/2001/freebsd-mobile/20010826.freebsd-mobile

Looks interesting. It may work.

> The latter one has a code snippet that might do the right thing -- if 
> anyone tells me just where in the orinoco_plx code I have to put it in, 
> please do so ;-)

Well, it would be just after setting the COR. Here is some code off the top
of my head. I have no real idea how the PCI stuff works, I'm just guessing:

The main reason why I think it's wrong is that there are I/O ports, so
should we be using I/O functions to access them?

#define WI_LOCAL_INTCSR                        0x4c
#define WI_LOCAL_INTEN                 0x40 /* poke this into INTCSR */
	{
		u32 io_mem;
		u32 reg;

		/* Resource 0 is mapped to the PLX chip space */
		io_mem = ioremap(pci_resource_start(pdev, 0), PAGE_SIZE);
		if (! io_mem)
			goto fail;

		reg = io_mem[WI_LOCAL_INTCSR / sizeof(u32)];
		reg |= WI_LOCAL_INTEN;
		io_mem[WI_LOCAL_INTCSR / sizeof(u32)];
		iounmap( io_mem );
	}

Anyone see anything wring with it?

-- 
Martijn van Oosterhout <kleptog at svana.org>
http://svana.org/kleptog/
> Magnetism, electricity and motion are like a three-for-two special offer:
> if you have two of them, the third one comes free.




More information about the wireless mailing list