From owner-freebsd-smp Tue May 27 02:34:48 1997 Return-Path: Received: (from root@localhost) by hub.freebsd.org (8.8.5/8.8.5) id CAA05236 for smp-outgoing; Tue, 27 May 1997 02:34:48 -0700 (PDT) Received: from spinner.dialix.com.au (spinner.dialix.com.au [192.203.228.67]) by hub.freebsd.org (8.8.5/8.8.5) with ESMTP id CAA05201; Tue, 27 May 1997 02:34:27 -0700 (PDT) Received: from spinner.dialix.com.au (localhost.dialix.com.au [127.0.0.1]) by spinner.dialix.com.au with ESMTP id RAA22631; Tue, 27 May 1997 17:34:20 +0800 (WST) Message-Id: <199705270934.RAA22631@spinner.dialix.com.au> X-Mailer: exmh version 2.0gamma 1/27/96 To: Stefan Esser cc: Steve Passe , Glenn Johnson , freebsd-current@FreeBSD.ORG, smp@FreeBSD.ORG Subject: Re: errors on startup In-reply-to: Your message of "Tue, 27 May 1997 08:53:55 +0200." <19970527085355.54719@x14.mi.uni-koeln.de> Date: Tue, 27 May 1997 17:34:19 +0800 From: Peter Wemm Sender: owner-smp@FreeBSD.ORG X-Loop: FreeBSD.org Precedence: bulk Stefan Esser wrote: > On May 26, Steve Passe 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