8

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

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

1 ответ1

6

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

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

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

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

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

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