Date: Fri, 16 Feb 1996 15:37:57 +0100 From: se@zpr.uni-koeln.de (Stefan Esser) To: "Justin T. Gibbs" <gibbs@freefall.freebsd.org> Cc: stable@freebsd.org Subject: Re: One problem && one question Message-ID: <199602161437.AA03076@Sysiphos> In-Reply-To: "Justin T. Gibbs" <gibbs@freefall.freebsd.org> "Re: One problem && one question" (Feb 16, 0:31)
next in thread | previous in thread | raw e-mail | index | archive | help
On Feb 16, 0:31, "Justin T. Gibbs" wrote: } Subject: Re: One problem && one question } >I'm afraid the card IS double probed. } >I built and booted a kernel with the following in the config file: } } Perhps the card has a second I/O register mapped in the PCI configuration } space? Stephan is this allowed? Could it be that I should just search } through them all and try to find and "ISA" port? If the card used the standard PCI mechanism to declare all the resources claimed, it would be trivial to solve. We need a more general conflicts check code anyway (i.e. check for several non-overlapping mem/port regions). There are several mamping registers in the PCI configuration space, and each one can either specify a memory or port range. A verbose boot lists all those registers, unless they are set to '0', i.e. unused: bt0 <Buslogic 946 SCSI host adapter> rev 0 int a irq 10 on pci0:13 mapreg[10] type=1 addr=00006000 size=ffff0004. This is from one of the probe messages (with the misleading port range) and there was NO other map register listed, i.e. the card violates the PCI specs by not telling about the port range 0x330-333 that it decodes. But since those mapping registers are initialized by the PCI BIOS, this is not really surprising. I'm not sure whether the PCI spec would tolerate a map register hardcoded to some value for compatibility reasons ... I had been hoping that the first access to the PCI port range (0x6000-6003, but depends on the systems PCI BIOS) would disable the ports at 0x330, but it doesn't work that way. Now, the only solution appears to be to have conflicts check code that can deal with multiple port ranges, and enter both ranges when the PCI Buslogic card is found. But that doesn't seem right, neither, since there might be two BT946C, and I hope only one of them will respond to port 0x330 accesses. I.e. the cards BIOS must currently be able to determine either the existence of another such card, or there must be a jumper to disable ISA port accesses (or move the port to an alternate address). Since we can assume that PCI resources are assigned by a single authority (the PCI BIOS) there should never be conflicts between PCI devices. It might suffice to register the port range 0x330 for the PCI version, even if 0x6000 is actually used by the driver. But this could prevent another BT946C from being attached, since there would be a conflict (though that port range is never used in case of a PCI card). It's an ugly behaviour, but we'll see it increasingly often with the emerging crowd of ISA compatible low cost PCI Ethernet cards ... :( 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 <se@ZPR.Uni-Koeln.DE>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199602161437.AA03076>