[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Multifunction Add-In Cards and PCI BIOS Enumeration
Hi, Scott!
When BIOS enumerates devices on a PCI bus, it normally does it so. For each
PCI slot (generally, for each device number) it reads Vendor ID register
from
configuration space of function 0. If it sees FFFF, it assumes there is no
device
with such device number. Else it assumes the device is existent and the
function 0
of this device is implemented. It then scans that device for multiple
functions.
It looks at bit 7 (multifunction flag) of Header Type register and if it is
set,
it reads then Vendor ID registers from each function of the device. Again,
it
assumes the function is not existent if (and only if) it sees the value of
all 1's.
This all was a software point of view. For BIOS (and other software that
does PCI scanning), it normally does not matter whether that value of all
1's
was returned as a result of Master Abort or somehow else. But the Master
Abort is the normal way to have the host bridge to put all 1's of data to
the
processor's bus. I do not know, if the PCI spec requires Master Abort
termination in this case.
> Should I be setting the MSB of both header bytes?
Probably, yes. Though software I think doesn't depend on this.
The PCI spec. Rev2.2 says nearly nothing about that, but at least it says
1. MSB of header type byte "is used to identify a multi-function device.
If the bit is 0, then the device is single function. If the bit is 1,
then the
device has multiple functions."
2. "All PCI devices are required to implement these fields" (and header
type is among them).
(see section 6.2.1)
Regards,
Alexander Bezrukov
> I've designed a multifunction PCI Add-In card that uses the QuickLogic
> QL5130 ESP for the bus interface. The card has two functions so I've
> created two configuration register sets -- one for each function. When
the
> PC BIOS enumerates the bus, it reports that the card has been found and
then
> lists 8 functions -- the first two functions correctly and then 6 unknown
> functions. I've set the MSB of the Header byte for both functions. My
> questions are as follows:
>
> Has anyone seen this type of behavior before?
> How do I suppress the listing of the 6 unknown functions?
> Should I be setting the MSB of both header bytes?
>
> Thanks,
>
> Scott