Почему в конечной точке PCIe есть 6 регистров базовых адресов (BAR)?
После некоторого прочтения о PCIe я пришел к заголовкам конфигурации, совместимым с PCI, и после понимания заголовка есть поле Base address Register(BAR). Где в каждой конечной точке PCIe есть всего 6 BAR. Почему существует 6 BAR, а не только 2 (1 для 32-битного адреса и 2 для 64-битного). Я имею в виду, какова подробная функциональность всех баров?
1 ответ
Использование баров зависит от устройства. Они используются либо для операций управления устройством (это обычный случай), либо для передачи данных на устройство или с него. Причина, по которой имеется шесть слотов, состоит в том, что устройства могут предоставлять разные регионы для разных целей. Кроме того, поскольку интерфейс поддерживает 64-разрядные адресные пространства, для предоставления одного из них требуется 64-разрядный BAR (для которого требуется два смежных 32-разрядных слота) для настройки базового адреса.
Один пример использования BAR можно увидеть в таблице данных для контроллера Intel i350 Ethernet. Смотрите раздел 9.4.11. В этом устройстве есть 3 BAR: один для конфигурации устройства с отображенной памятью (и доступа к устройству FLASH), один для конфигурации устройства через адресное пространство ввода-вывода и один для настройки векторов прерываний MSI-X.
Другие устройства могут иметь один BAR или пять (или ни одного, если устройство является мостом). Если вы используете Linux, попробуйте sudo lspci -vv
в вашей системе, чтобы наблюдать различия между устройствами.