Как устройство определяется в перечислении PCI? (Автобус / устройство / функция)

10784
simple_symbols

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

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

8

1 ответ на вопрос

6
Gil Hamilton

В исходной платформе PCI («Обычный PCI»), а также в PCI-X устройства соответствовали «слотам», каждое из которых со своими собственными разъемами, подключенными к одной и той же параллельной шине. Каждый слот имел уникальный идентификационный номер, который был указан при перечислении. Перечисление по существу спрашивало (для каждого слота): «Эй, есть ли что-нибудь в этом слоте?» Устройство ответило передачей данных на шину в ответ на этот сигнал. Отсутствие ответа означало отсутствие устройства.

Устройство также может быть «мостом», что означает, что оно образует подчиненную шину. Эта шина будет иметь отдельный идентификатор (назначенный из восходящего потока) и будет иметь свой собственный набор слотов, которые перечисляются независимо.

PCI-Express (PCIe) совершенно другой. PCIe на самом деле не шина - как в ресурсе, совместно используемом устройствами; вместо этого каждое устройство имеет свое индивидуальное последовательное соединение точка-точка с вышестоящим устройством (и с любыми нисходящими устройствами - и если оно имеет нисходящие устройства, это означает, что оно также функционирует как мост). Думайте о PCIe как о локальной сети. Каждый мост аналогичен коммутатору, который имеет несколько портов, подключенных к другим устройствам. Другие устройства могут быть оконечными устройствами или другими коммутаторами (например, мостами PCIe).

PCIe был разработан таким образом, чтобы его концептуальная структура и адресация (и, следовательно, поведение, предоставляемое программному обеспечению) были совместимы с PCI и PCI-X. Реализация, однако, совершенно другая. Например, при перечислении устройств, поскольку это точка-точка, единственным вопросом, который необходимо определить в каждой точке перечисления, является «что-нибудь там?» Поскольку каждое устройство имеет свой собственный независимый набор проводов, идентификаторы устройств по существу все жестко закодированы (следовательно, каждый мост, включая «корневой комплекс» верхнего уровня, сообщает каждому устройству, каким будет его идентификатор устройства).

Во всех случаях «функциональная» часть шины / устройства / функции обрабатывается строго внутри периферийного устройства. Например, контроллер NIC с двумя портами часто имеет две функции, по одной для каждого порта. Они могут быть настроены и работать независимо, но путь данных от процессора к функции одинаков для обоих.

Ответ немного запутанный: 1) в PCI «номер устройства» на самом деле означает «номер слота» (и это имеет смысл), 2) вы говорите «PCIe совершенно другой» и «так как каждое устройство имеет свой собственный независимый набор проводов» идентификаторы устройств по существу все жестко закодированы », что означает, что набор проводов (= слот) имеет жестко запрограммированный идентификатор, таким образом, он такой же, как в PCI. Теперь вопрос, когда происходит «жесткое кодирование»? Коммутаторы / мосты переназначают идентификаторы при сбросе? xealits 7 лет назад 1
Да уж. Это можно было бы сформулировать лучше. Дело в том, что в PCI карта находится на общей шине, но «знает», в каком слоте она находится, и отвечает только тогда, когда подтвержден ее специфический для слота вывод. В PCIe мост имеет N разных наборов «проводов». Таким образом, мостовое устройство имеет дискретный номер слота для каждого набора проводов. С точки зрения моста, у этого слота есть определенное число; нужно только определить, есть ли что-то там. Сама карта * не * знает, в каком слоте она находится. Как только мост определит, что там что-то есть, он * сообщит * этому устройству, какой у него номер слота. Gil Hamilton 7 лет назад 2

Похожие вопросы