Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 27 May 1997 17:34:19 +0800
From:      Peter Wemm <peter@spinner.dialix.com.au>
To:        Stefan Esser <se@FreeBSD.ORG>
Cc:        Steve Passe <smp@csn.net>, Glenn Johnson <gljohnsn@iamerica.net>, freebsd-current@FreeBSD.ORG, smp@FreeBSD.ORG
Subject:   Re: errors on startup 
Message-ID:  <199705270934.RAA22631@spinner.dialix.com.au>
In-Reply-To: Your message of "Tue, 27 May 1997 08:53:55 %2B0200." <19970527085355.54719@x14.mi.uni-koeln.de> 

next in thread | previous in thread | raw e-mail | index | archive | help
Stefan Esser wrote:
> On May 26, Steve Passe <smp@csn.net> wrote:
> > + #ifdef APIC_IO
> > +               if (cfg->intline && (cfg->intline != 0xff)) {
> > +                       u_char airq = 0xff;
> > +                       u_char rirq = 0xff;
> > + 
> > +                       airq = get_pci_apic_irq(cfg->bus,
> > +                                               cfg->slot, cfg->intpin);
> > + 
> > +                       if (airq != 0xff) {             /* APIC IRQ exists 
    */
> > +                               rirq = cfg->intline;    /* 're-directed' IR
    Q */
> > +                               cfg->intline = airq;    /* use APIC IRQ */
> > +                               pci_cfgwrite(cfg, PCIR_INTLINE, airq, 1);
> 
> Hmmm, I don't think we should do this anymore ...
> The new data structure that holds a copy of the most 
> important configuration space registers is there just
> for the purpose of modifying parameters for drivers,
> but without a need to actually change the register
> contents ...
> 
> All the drivers will use whatever is in cfg->intline,
> so there is no need for the register update, IMHO.

I don't have an opinion on updating the register, but I'll re-iterate for 
the record what we're dealing with..

When the system boots, there is a redirection bridge active somewhere that 
diverts the pci interrupts down onto the 16 isa irq lines.  When the 
apic's are turned on, this "magically" disappears and the interrupts are 
often routed to their own interrupt source pin on the apic and the isa 
interrupt is "magically" freed for other users (eg: isa cards who's 
drivers can look at the available interrupts, pick one and set the irq 
output on the card to use it.)

There's also the complication that some more modern BIOS's can boot with
the APIC's *active* with the PCI interrupts only going to the IO APIC.  (I
presume this means they don't boot in virtual wire mode, so the 8259
emulations wouldn't be seeing the interrupts either.)  We're not sure how
this is activated, but as far as I can tell, the OS must update some of the
bios settings ( ESCD? DMI? who knows?) at "install time" in order for the
"PCI INTS -> IO APIC" bios option to do anything.  I saw a mention of it 
somewhere and it says something to the effect that the setting is only 
functional if an APIC aware OS is installed - so I presume that means an 
ESCD setting or something.  (What the hell is ESCD anyway?)

Cheers,
-Peter





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