Skip site navigation (1)Skip section navigation (2)
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>