3

Я запутался по поводу перечисления шины / устройства / функции PCI. Глядя на страницу Википедии для конфигурации PCI, я вижу, что для данной шины мастер будет запрашивать идентификатор поставщика и идентификатор устройства для всех устройств, использующих функцию 0. Если возвращены все 0xFF, то устройства там нет, и перечисление продолжается. Если найдены действительный идентификатор устройства и идентификатор поставщика, то там есть PCI-модуль, и он будет перечислен. Я не уверен, как определяется устройство в функции bus.device.f.

Например, допустим, у меня есть процессор с одной шиной PCI и одним периферийным устройством PCI. Я понимаю, что процессор будет смотреть на шину 0 (по умолчанию) и будет проверять все номера устройств, глядя на функцию 0. Как определяется номер устройства периферийного устройства?

1 ответ1

2

Устройство определяется аппаратной линией IDSEL, которая является входом для каждой конечной точки PCI. Во время транзакций конфигурации IDSEL используется для указания конечной точке (или мосту) PCI, что она выбрана в данный момент. С точки зрения определения фактического номера устройства это делается хост-оборудованием. Если, например, материнская плата имеет два слота для оконечной точки PCI, будет две отдельные линии IDSEL от ЦП до конечных точек. Это видно на картинке ниже:

Кроме того, кажется, что на практике часто связывают эти линии IDSEL с одним горячим отображением из 32-битной шины адреса / данных. Когда выполняется конфигурация, в адресной строке будет указан один горячий адрес, например 0x00000010. Один бит шины адреса / данных будет введен как IDSEL для конкретной конечной точки. Поскольку на шине имеется 32 возможных устройства, это хорошо работает. Как пример этого, предположим, что есть материнская плата с 5 возможными устройствами. Следующее может быть примером сопоставления.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .