How to obtain the secondary bus number of a PCIe-to-PCI bridge?

Hello,

I am trying to find out if there is an easy way to obtain a secondary PCI bus number of a PCIe-to-PCI bridge… I have Windows 10 installed on a PXIe chassis, which has a PCIe-to-PCI bridge connected to one of the root ports. My goal is to develop a DLL (as required by the spec) that returns the PCI bus number downstream of this bridge. The device ID of the bridge is known, and I can enumerate it using setupapi. Note that all the PCI slots are empty, so there is nothing connected to the downstream bus. I can get the primary bus number of the bridge device (using SPDRP_BUSNUMBER), but I cannot figure out a way to get the secondary bus number… is this even possible? Any pointers would be greatly appreciated!

Thanks in advance!

When a bridge is configured, its secondary bus number can be found somewhere in it’s config space.
Now the question is, how to read it. On many platforms the config space is memory-mapped at well known address.
At least it was, when I worked with PCI… it was long ago, but PCI/PCIe hasn’t changed much in this aspect.
– pa