Art Hays wrote:
I am still trying to learn what’s going on with newer PC’s and the fact that some BIOS
setup screens
no longer provide a way to specify the IRQ of real-time devices such as a/d converters.
This is very important if one is going to use a standard PC as a realtime platform.
If we cannot set the IRQ so that it is unshared and ahead of things like the EIDE
than we can forget about hard realtime.
I would appreciate any light anyone can shed on this. What I think I know:
1.) Newer PC’s (such as the latest Dell Dimension, Optiplex, XPS) no longer have
a BIOS setup screen to specify the IRQ of PCI cards.
2.) Microsoft wants the OS (W2K and XP) to do the configuring
of IRQ’s using ACPI.
Microsoft wants newer PCs to use I/O APICs for interrupt routing. The
difference is, you can have hundreds of IRQs, so no need for sharing. It
is important for Windows (or any other large kernel) since all their
internal locks (of which there’s a lot) in the kernel do change IRQL (to
maximize concurrency in the kernel). That operation in case of 8259 PIC
will be out() that goes to southbridge and back, in case of APIC it will
be ‘mov’.
QNX only uses ‘local’ (built-in in the CPU) APICs on SMP hadrware. It
does not support I/O APIC mode. They can get away with it because their
device drivers and more of other stuff are out of kernel so they can
afford locking it completely by one of the CPUs (except for a special
case of message passing operation). However if they did support I/O
APICs they’d benefit too.
3.) RTP doenst have a way to use ACPI to set IRQ’s. It takes what the BIOS
inits.
You don’t have to use ACPI. It makes sense because problems of device
enumeration and resource allocation are common between initial boot and
hot-plug and wakeup from standby, but it is not the only way.
You can assign IRQs using pci_map_irq() but then you have to bring the
whole enchilada, at least for the initial boot scenario.
And what I dont know:
1.) Is there still an area in an ACPI BIOS equivalent to ESCD where IRQ assignments are
saved across
boots?
AFAIK, ACPI is just a spec for interface (i.e., it adds extended BIOS
calls and describes what hardware/software is supposed to do). Whether
ESCD is still there and what BIOS does with it is up to BIOS.
2.) Is there any way to write this area so that IRQ’s can be assigned and persist for an
OS that
doesnt use ACPI?
Maybe. But once you start assigning IRQs yourself, you’re better off not
relying on BIOS for that at all. If you can do it once, you can do it
again on next boot.
3.) Will RTP have to support ACPI in the future? That is, the BIOS will no longer init
IRQ’s?
BIOS will init IRQs as long as BIOS is there, that’s requirement of PCI
BIOS spec. BIOS may go the way of dodo, when stuff like EFI will take
off. When and if that happens, there will be answer to your question but
we don’t know it yet.
Cheers,
– igor