Определите устройство PCIe, используя конфигурационное пространство PCI
Учитывая список устройств PCI, установленных в системе, мне нужно идентифицировать устройства PCIe. До сих пор я использовал итерацию по списку возможностей, чтобы увидеть, имеет ли устройство расширенную структуру ограничения (которая соответствует идентификатору ограничения 0x10). И, если устройство имеет расширенную структуру крышки, то это точно устройство PCIe. Тем не менее, кажется, что этот метод не может идентифицировать некоторые устройства. Мне было интересно, если кто-нибудь знает лучший метод.
Благодарю.
2 ответа
Я использовал ниже способ получения устройств PCIe:
- проверить, что регистр конфигурации устройства PCI 0x6 бит4 = 1(список возможностей существует)?
- проверить, что регистр конфигурации устройства PCI 0x34!= 0(указатель возможностей действителен)?
- проверить, есть ли возможность PCIe (ID = 0x10)?
Если все вышеперечисленное верно, то это устройство PCIe!!!
Мне любопытно, что "этот метод не может идентифицировать некоторые устройства"?
Сканирование устройства PCI/PCIE. Возможно наличие избыточных адресов в указателе возможностей (поврежденное пространство конфигурации PCI).
Проверьте, есть ли избыточность значений указателя возможностей во всех комбинациях B:D:F. Если вы обнаружили какие-либо проблемы, вы можете напрямую связаться с поставщиком BIOS, чтобы исправить их.