Date: Fri, 11 Nov 2005 09:31:41 -0700 (MST) From: "M. Warner Losh" <imp@bsdimp.com> To: bland@freebsd.org Cc: freebsd-hackers@freebsd.org Subject: Re: No interrupts coming to device driver. Message-ID: <20051111.093141.122160674.imp@bsdimp.com> In-Reply-To: <437309BD.7010704@FreeBSD.org> References: <437309BD.7010704@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
In message: <437309BD.7010704@FreeBSD.org> Alexander Nedotsukov <bland@freebsd.org> writes: : I trying to create small lirc (www.lirc.org) compatible CIR driver for : it8705 chip (sits on ISA bus). My problem is I can not get interrupts : coming to driver. I believe I configured chip (carrier freq. + baudrate : divisor) and enabled interrupt mode the same way it windows driver does. : It also seems to be correct according to chip specs. But nothing. vmstat : -i shows zeros for assigned irq. And my IRS stay cold. I wrote small : userland program which polls CIRs IIR (interrupt identefication : register) and it shows interrupt pending bit set on right after I press : key on remote control. Looks like I missed something fundamental. Does : anyone can give me a hint where to look? If it is on the ISA bus, then you can look at the IRQ line that you are using for this card on the scope. Set it to trigger on an edge (either falling if the signal is high or rising if the signal is low, usually it is high). Make sure that the IRQ that you are using is not shared with anything else, even hardware you aren't using. That's forbidden in the ISA world (although some hacks exist to do interrupt sharing with two devices on the ISA bus, (a) almost nobody does them and (b) they don't work when sharing with pci). Make sure that the IRQ is set in the BIOS as Legacy/ISA rather than ISAPNP/PCI (or some variants of those phrases). See if there's a way to force an interrupt on the chip by writing to a register of some sort. It doesn't matter if you are going to use this, but it will be good for testing. It almost certainly isn't an unacknowledged interrupt (unless it is left over from before your chip reset). In my experience, those cause vmstat of 1. It might be worth checking the chip initialization sequence to make sure that you clear any possible interrupts AFTER you've done the bus_setup_inter() call to register your interrupt handler. That's all I can think of at the moment, but it should keep you busy for a few hours :-) Warner
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20051111.093141.122160674.imp>