The OALxxx PCI routines (e.g. OALPCICfgWrite) all take a BusID parameter, in
addition to the regular PCI location address. There is no documentation on
the parameters, but the bus ID appears to be intended for additional PCI
interfaces, while the bus portion of the PCI address defines secondary buses
behind a PCI bridge. In most cases, the BusID parameter would be zero,
unless there were multiple host bridges in the system.
However, the CEDDK functions (HalGetBusData etc) don't have a BusId
parameter, this is apparently something new that was defined with the PQOAL.
The CEDDK maps calls to the HalXXX functions to IOCTL_HAL_DDK_CALL, and
from there on to the OAL functions. However, the BusID parameter needs to
be set, so the PQOAL fills in this parameter with the PCI bus number.
Unfortunately, the OAL sees calls for secondary buses as calls for buses on
another interface. Obviously, the cpu dependent code can ignore the BusID
parameter and just use the PCI device location for any system that has only
one host interface.
Questions:
- What is the purpose of the BusID parameter in the PQOAL routines, and how
is it different from the bus portion of the address?
- If there are multiple interfaces (multiple host buses) how are they
supposed to be differentiated in calls to the CEDDK configuration routines?
Any other thoughts on this?
--
Dean Ramsier - eMVP