summaryrefslogtreecommitdiffstats
path: root/sys/amd64
diff options
context:
space:
mode:
authorwpaul <wpaul@FreeBSD.org>1999-08-09 21:12:18 +0000
committerwpaul <wpaul@FreeBSD.org>1999-08-09 21:12:18 +0000
commitf99d6448113d4c5d458e90e3e79f2fe499f54746 (patch)
tree62d86602bbf2f801ae081178ed95a68d44e4b543 /sys/amd64
parent674e3eeff5f9221c6174e54e1a91c07f9ce6df93 (diff)
downloadFreeBSD-src-f99d6448113d4c5d458e90e3e79f2fe499f54746.zip
FreeBSD-src-f99d6448113d4c5d458e90e3e79f2fe499f54746.tar.gz
Fix nexus_pcib_is_host_bridge() so that it detects my 486's PCI bus
correctly. It has the following code: if (class != PCIC_BRIDGE || subclass != PCIS_BRIDGE_HOST) return NULL; My 486 has an Integrated Micro Solutions PCI bridge which identifies itself as subclass PCIS_BRIDGE_OTHER, not PCIS_BRIDGE_HOST. Consequently, it gets ignored. In my opinion, the correct test should be: if ((class != PCIC_BRIDGE) && (subclass != PCIS_BRIDGE_HOST)) return NULL; That way the test still succeeds because the chip's class is PCIC_BRIDGE. Clearly it's not reasonable to expect all host to PCI bridges to always have a subclass of PCIS_BRIDGE_HOST since I've got one that doesn't. This way the sanity test should remain relatively sane while still allowing some oddball yet correct hardware to work. If somebody has a better way to do it, go ahead and tweak the test, but be aware that class == PCIC_BRIDGE and subclass == PCIS_BRIDGE_OTHER is a valid case. While I was here, I also added an explicit ID string for the IMS chipset. I also dealt with a minor style nit: it's bad karma not to have a default case for your switch statements, but the one in this routine doesn't have one. The default string of "Host to PCI bridge" is now assigned in a default case of the switch statement instead of initializing "s" with the string before the switch and then not having any default case.
Diffstat (limited to 'sys/amd64')
-rw-r--r--sys/amd64/pci/pci_bus.c12
-rw-r--r--sys/amd64/pci/pci_cfgreg.c12
2 files changed, 18 insertions, 6 deletions
diff --git a/sys/amd64/pci/pci_bus.c b/sys/amd64/pci/pci_bus.c
index eb6cc27..944d106 100644
--- a/sys/amd64/pci/pci_bus.c
+++ b/sys/amd64/pci/pci_bus.c
@@ -23,7 +23,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: pcibus.c,v 1.43 1999/07/16 01:00:29 msmith Exp $
+ * $Id: pcibus.c,v 1.44 1999/08/04 13:38:24 peter Exp $
*
*/
@@ -274,10 +274,10 @@ nexus_pcib_is_host_bridge(pcicfgregs *cfg,
u_int32_t id, u_int8_t class, u_int8_t subclass,
u_int8_t *busnum)
{
- const char *s = "Host to PCI bridge";
+ const char *s = NULL;
static u_int8_t pxb[4]; /* hack for 450nx */
- if (class != PCIC_BRIDGE || subclass != PCIS_BRIDGE_HOST)
+ if ((class != PCIC_BRIDGE) && (subclass != PCIS_BRIDGE_HOST))
return NULL;
*busnum = 0;
@@ -395,6 +395,12 @@ nexus_pcib_is_host_bridge(pcicfgregs *cfg,
/* just guessing the secondary bus register number ... */
*busnum = pci_cfgread(cfg, 0x45, 1);
break;
+ case 0x884910e0:
+ s = "Integrated Micro Solutions VL Bridge";
+ break;
+ default:
+ s = "Host to PCI bridge";
+ break;
}
return s;
diff --git a/sys/amd64/pci/pci_cfgreg.c b/sys/amd64/pci/pci_cfgreg.c
index eb6cc27..944d106 100644
--- a/sys/amd64/pci/pci_cfgreg.c
+++ b/sys/amd64/pci/pci_cfgreg.c
@@ -23,7 +23,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: pcibus.c,v 1.43 1999/07/16 01:00:29 msmith Exp $
+ * $Id: pcibus.c,v 1.44 1999/08/04 13:38:24 peter Exp $
*
*/
@@ -274,10 +274,10 @@ nexus_pcib_is_host_bridge(pcicfgregs *cfg,
u_int32_t id, u_int8_t class, u_int8_t subclass,
u_int8_t *busnum)
{
- const char *s = "Host to PCI bridge";
+ const char *s = NULL;
static u_int8_t pxb[4]; /* hack for 450nx */
- if (class != PCIC_BRIDGE || subclass != PCIS_BRIDGE_HOST)
+ if ((class != PCIC_BRIDGE) && (subclass != PCIS_BRIDGE_HOST))
return NULL;
*busnum = 0;
@@ -395,6 +395,12 @@ nexus_pcib_is_host_bridge(pcicfgregs *cfg,
/* just guessing the secondary bus register number ... */
*busnum = pci_cfgread(cfg, 0x45, 1);
break;
+ case 0x884910e0:
+ s = "Integrated Micro Solutions VL Bridge";
+ break;
+ default:
+ s = "Host to PCI bridge";
+ break;
}
return s;
OpenPOWER on IntegriCloud