Date: Sun, 27 Dec 1998 15:44:03 +0100 From: Stefan Esser <se@mi.uni-koeln.de> To: Mike Smith <mike@smith.net.au>, "Daniel O'Connor" <doconnor@gsoft.com.au> Cc: freebsd-hackers@FreeBSD.ORG, Stefan Esser <se@FreeBSD.ORG> Subject: Re: PCI IRQ mappings Message-ID: <19981227154403.B490@mi.uni-koeln.de> In-Reply-To: <199812210521.VAA49288@dingo.cdrom.com>; from Mike Smith on Sun, Dec 20, 1998 at 09:21:25PM -0800 References: <XFMail.981221155051.doconnor@gsoft.com.au> <199812210521.VAA49288@dingo.cdrom.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On 1998-12-20 21:21 -0800, Mike Smith <mike@smith.net.au> wrote: > > This is a VM86 thing then? :) > > That's the easiest way to do it. I get the impression that you should > be able to call the PCI BIOS from 32-bit mode as well, but I don't have > the documentation to hand. I have the documentation and once looked into adding functions that give access to just those IRQ routing functions. (You may remember the mails we exchanged on that topic.) But I found the call interface to be quite messy, and it just didn't seem useful enough. Well, regarding the problem with PCI cards which fail to share their interrupts: What you get from the BIOS is information on the IRQs that are assigned to groups of Int pins of the PCI slots. You can only change the vector used by each such group. Typically IntA of one PCI slot is connected to IntB of the neighbour slot (see the mail list archives for further information, this has been discussed too often already ;-). What this means, is that you probably can't re-assign IRQs in such a way, that different devices share interrupts then before, since this is a hardware feature of your main-board. You can just assign a different IRQ to a whole group of your devices. I have seen drivers that don't look perfectly right if used with shared interrupts. This may be true for the Lance driver, for example, which started as an ISA-only driver and did not need to support shared interrupts, then. The problem is with chips that need a state-changing command to be issued just to read the ISR. In the case of the Lance there is an "register address" register, which must be written in order to read the ISR. If the driver has just set that address register to point to some register to operate on (and knows the chip can't possibly issue an interrupt right now, since it is not active, and thus that address register won't be changed by the interrupt handler), then polling for the actual source of the interrupt request may still change that address register and thus void the assumption! We need to know, which driver fails with shared interrupts. The best bet to resolve the problem quickly most probably is to re-shuffle PCI cards until the interrupts are only shared between devices/drivers that tolerate this. (All should, of course!) Regards, STefan To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19981227154403.B490>