I'm attempting to identify if a system is using certain cards that are PCI or PCI-Express at runtime of a program. I understand that the PCI config space has the capability ID list. Does this always have 0x10 (the capability code for PCI-E) if the card is PCI-E on a hardware level or only if the functions added to PCI-E compared to PCI are being used from a software perspective?
I have found hardware, using lspci -xxxx
, that has an extended configuration space. This would mean the card is PCI-E card. But the capability ID list does not contain ID 0x10. I'm not sure how to reconcile this.
The program is in c/c++ and on a centOS system.