From owner-freebsd-hackers Fri Feb 9 18:36:08 1996 Return-Path: owner-hackers Received: (from root@localhost) by freefall.freebsd.org (8.7.3/8.7.3) id SAA06703 for hackers-outgoing; Fri, 9 Feb 1996 18:36:08 -0800 (PST) Received: from Sysiphos (Sysiphos.MI.Uni-Koeln.DE [134.95.212.10]) by freefall.freebsd.org (8.7.3/8.7.3) with SMTP id SAA06660 for ; Fri, 9 Feb 1996 18:36:03 -0800 (PST) Received: by Sysiphos id AA22397 (5.67b/IDA-1.5 for hackers@freebsd.org); Sat, 10 Feb 1996 03:34:59 +0100 Message-Id: <199602100234.AA22397@Sysiphos> From: se@zpr.uni-koeln.de (Stefan Esser) Date: Sat, 10 Feb 1996 03:34:58 +0100 In-Reply-To: Luigi Rizzo "Re: scanpci.c and pci-related stuff" (Feb 9, 16:30) X-Mailer: Mail User's Shell (7.2.6 alpha(2) 7/9/95) To: Luigi Rizzo Subject: Re: scanpci.c and pci-related stuff Cc: hackers@freebsd.org Sender: owner-hackers@freebsd.org Precedence: bulk On Feb 9, 16:30, Luigi Rizzo wrote: } Subject: Re: scanpci.c and pci-related stuff } > You can change this value without knowing } } I guess you mean "cannot" Yes. I really shouldn't write mail replies long after midnight after working some 16 hours (what's the current time :) } > the details of the chip set. There are now } > PCI BIOS calls that ought to allow such an } } From the meteor.c driver : } } ... } #ifdef METEOR_IRQ /* from the meteor.h file */ } old_irq = pci_conf_read(tag, PCI_INTERRUPT_REG); } pci_conf_write(tag, PCI_INTERRUPT_REG, METEOR_IRQ); } new_irq = pci_conf_read(tag, PCI_INTERRUPT_REG); } printf("meteor_attach: irq changed from %d to %d\n", (old_irq & 0xff), } (new_irq & 0xff)); } #endif METEOR_IRQ } ... } } it looks like it is not that hard, if the above works. Yes. It looks trivially simple. And it does of course not work at all ... The PCI_INTERRUPT_REG is a Byte register, which has the sole purpose to let the driver know about the BIOS provided interrupt routing setup. You can change this value to whatever you want, but all it will do is confuse whoever later reads the register and believes what he finds :) } Note that I don't want to chang IRQ settings for an active board, just } to remap the setting for a board which is not correctly recognised. } It is intended as a fixit tool, "use at your own risk". It is a NOOP ... (Well, not really. The code later uses this value for the call to register_intr(). But the only reason for a wrong number being written by the BIOS is, that the IRQ routing is done in hardware (i.e. by jumpers) and the PCI BIOS settings have not been adjusted accordingly. Such BIOS jumpers were state of the art in mid 1994, but I doubt there are many systems that still use them. And the correct values have just to be entered in teh BIOS setup ...) } I have two identical PC-net PCI boards, plugged in adjacent slots. } On one particular motherboard they are both configured with IRQ10, on a } similar motherboard one gets IRQ10, the other IRQ11 Yes, I just read your other message ... The problem is the level of PCI support for the Lance. It needs just a few hours of work, I guess ... } Also, at times I'd like to free some specific IRQs. As an example: here } I have a system with the following devices: } } sio0,1,2 (irq 3, 4, 5) } lpt0 (irq7) } ed0 (irq10, PCI) } meteor (irq9,PCI) } vga (irq11, PCI) } } and I'd like to put in a scanner (can use irq3,5,10) and an SB16. } I must free irq10, and possibly irq9 as well. I don't know how your PCI BIOS chooses the IRQ values. All PCI cards but the Lance Etherner cards can share an interrupt. I prefer boards, where I can assign any IRQ to IntA of each PCI slot, but current systems are delivered as PnP, and they just don't offer this config mode anymore ... You really need the PCI attach code for the Lance ... Regards, STefan -- Stefan Esser, Zentrum fuer Paralleles Rechnen Tel: +49 221 4706021 Universitaet zu Koeln, Weyertal 80, 50931 Koeln FAX: +49 221 4705160 ============================================================================== http://www.zpr.uni-koeln.de/~se