The MI code was modified to filter the devices based on its header

type.  We know about header types 0, 1 and 2.  Ignore the rest in the
MD i386 code when we're looking for bridges.  You cannot look at the
vendor tag.  And if you don't you certainly can't look at function > 0
if the device isn't there.

The new soekris boards' GEODE cpu has issues with the old way.  This
is reported to have fixed it.

MFC After: 2 days
This commit is contained in:
Warner Losh 2003-08-01 21:50:09 +00:00
parent 8d50cc0e3e
commit 353adf7e7f

View File

@ -323,6 +323,14 @@ legacy_pcib_identify(driver_t *driver, device_t parent)
func = 0;
hdrtype = legacy_pcib_read_config(0, bus, slot, func,
PCIR_HEADERTYPE, 1);
/*
* When enumerating bus devices, the standard says that
* one should check the header type and ignore the slots whose
* header types that the software doesn't know about. We use
* this to filter out devices.
*/
if ((hdrtype & ~PCIM_MFDEV) > PCI_MAXHDRTYPE)
continue;
if ((hdrtype & PCIM_MFDEV) &&
(!found_orion || hdrtype != 0xff))
pcifunchigh = 7;