Конфигурационное пространство PCI

редактировать

Пространство конфигурации PCI - это основной способ, которым обычные PCI, PCI-X и PCI Express выполняют автоматическую конфигурацию карт, вставленных в их шину.

СОДЕРЖАНИЕ
  • 1 Обзор
  • 2 Техническая информация
  • 3 Стандартизированные регистры
  • 4 Перечисление автобусов
  • 5 Аппаратная реализация
  • 6 Программная реализация
  • 7 См. Также
  • 8 ссылки
  • 9 Внешние ссылки
Обзор

Устройства PCI имеют набор регистров, называемых пространством конфигурации, а PCI Express вводит расширенное пространство конфигурации для устройств. Регистры пространства конфигурации отображаются в ячейки памяти. Драйверы устройств и диагностическое программное обеспечение должны иметь доступ к пространству конфигурации, а операционные системы обычно используют API, чтобы разрешить доступ к пространству конфигурации устройства. Когда в операционной системе не определены методы доступа или API-интерфейсы для запросов к пространству конфигурации с отображением в память, драйвер или диагностическое программное обеспечение должны получить доступ к пространству конфигурации способом, совместимым с базовыми правилами доступа операционной системы. Во всех системах драйверам устройств рекомендуется использовать API, предоставляемые операционной системой, для доступа к пространству конфигурации устройства.

Техническая информация

Одним из основных улучшений локальной шины PCI по сравнению с другими архитектурами ввода-вывода был механизм конфигурации. В дополнении к обычным отображенным в памяти и порты ввода / вывода пространств, каждая функция устройства на шине имеет конфигурацию пространство, которая имеет длину 256 байт, адресация, зная восьмибитовый PCI - шина, пятибитовое устройство, и три- номера битовых функций для устройства (обычно называемые BDF или B / D / F, сокращенно от шины / устройства / функции). Это позволяет использовать до 256 шин, на каждой до 32 устройств, каждая из которых поддерживает восемь функций. Одна карта расширения PCI может работать как устройство и должна реализовывать как минимум нулевую функцию. Первые 64 байта пространства конфигурации стандартизированы; остальные доступны для целей, определенных поставщиком.

Чтобы позволить стандартизировать большее количество частей конфигурационного пространства, не вступая в конфликт с существующим использованием, может быть список возможностей, определенных в оставшихся 192 байтах конфигурационного пространства PCI. У каждой возможности есть один байт, описывающий, какая это возможность, и один байт, указывающий на следующую возможность. Количество дополнительных байтов зависит от идентификатора возможности. Если возможности используются, устанавливается бит в регистре состояния, и указатель на первый в связанном списке возможностей предоставляется в Cap. регистр указателя, определенный в стандартизованных регистрах.

PCI-X 2.0 и PCI Express представили расширенное пространство конфигурации до 4096 байт. Единственная стандартизованная часть расширенного конфигурационного пространства - это первые четыре байта 0x100, которые являются началом расширенного списка возможностей. Расширенные возможности очень похожи на обычные возможности, за исключением того, что они могут относиться к любому байту в расширенном пространстве конфигурации (используя 12 бит вместо восьми), иметь четырехбитный номер версии и 16-битный идентификатор возможности. Идентификаторы расширенных возможностей пересекаются с идентификаторами обычных возможностей, но нет шансов на путаницу, поскольку они находятся в отдельных списках.

Стандартизированные регистры
Стандартные регистры заголовка пространства конфигурации PCI типа 0 (без моста)

ID устройства (DID) и идентификатор поставщика (VID) регистры идентификации устройства (например, IC ), и обычно называется PCI - ID. 16-битный идентификатор поставщика назначается PCI-SIG. Затем поставщик присваивает 16-битный идентификатор устройства. Существует неактивный проект по сбору всех известных идентификаторов поставщиков и устройств. (См. Внешние ссылки ниже.)

Статус регистр используется для отчета, которые поддерживаются функции и некоторые виды ошибок произошли ли. Command регистр содержит битовую маску функций, которые могут быть индивидуально включенными и выключенными. Значения регистров типа заголовка определяют различные схемы остальных 48 байтов (64–16) заголовка в зависимости от функции устройства. То есть заголовки типа 1 для корневого комплекса, коммутаторов и мостов. Затем введите 0 для конечных точек. Размер кэш - Line регистр должен быть запрограммирован, прежде чем устройство сказал он может использовать транзакцию памяти для записи и- к аннулированию. Обычно это должно соответствовать размеру строки кэша ЦП, но правильная настройка зависит от системы. Этот регистр не применяется к PCI Express.

Идентификатор подсистемы (SSID) и идентификатор поставщика подсистемы (SVID) различают конкретную модель (например, дополнительную карту). В то время как идентификатор поставщика - это идентификатор производителя набора микросхем, идентификатор поставщика подсистемы - это идентификатор производителя карты. ID подсистемы назначается поставщиком подсистемы из того же числового пространства, что и ID устройства. Например, в случае беспроводных сетевых карт производителем чипсета может быть Broadcom или Atheros, а производителем карты - Netgear или D-Link. Как правило, комбинация Vendor ID – Device ID указывает, какой драйвер хост должен загрузить для работы с устройством, поскольку все карты с одинаковой комбинацией VID: DID могут обрабатываться одним и тем же драйвером. Комбинация идентификатора поставщика подсистемы и идентификатора подсистемы идентифицирует карту, которая является той информацией, которую драйвер может использовать для внесения незначительных изменений в свою работу, связанных с картой.

Перечисление автобусов

Чтобы адресовать устройство PCI, оно должно быть включено путем отображения в адресное пространство порта ввода-вывода системы или адресное пространство, отображаемое в памяти. Микропрограммное обеспечение системы, драйверы устройств или операционная система программируют регистры базового адреса (обычно называемые BAR) для информирования устройства о его отображении адресов путем записи команд конфигурации в контроллер PCI. Поскольку все устройства PCI находятся в неактивном состоянии после перезагрузки системы, им не будут назначены адреса, по которым операционная система или драйверы устройств могут связываться с ними. Либо BIOS или операционная система географически адреса PCI слотов (например, первый слот PCI, второй слот PCI, или третий слот PCI и т.д., на материнской плате ) через контроллер PCI с использованием на слот IDSEL (Инициализация Выбор устройства) сигналов.

Биты PCI BAR
Биты Описание Ценности
Для всех PCI BAR
0 Тип региона 0 = память 1 = ввод / вывод
Для полосок памяти
2-1 Доступный 0 = любой 32-битный 1 = lt;1  МБ 2 = любой 64-битный
3 С возможностью предварительной загрузки 0 = нет 1 = да
31-4 Базовый адрес естественно 16-байтное выравнивание
Для панелей ввода / вывода
1 Зарезервированный
31-2 Базовый адрес естественно 4-байтовое выравнивание

Поскольку в BIOS или операционной системе нет прямого метода для определения того, в какие слоты PCI установлены устройства (а также для определения функций, реализуемых устройством), шина (и) PCI должна быть пронумерована. Перечисление шины выполняется путем попытки чтения регистров идентификатора поставщика и идентификатора устройства (VID / DID) для каждой комбинации номера шины и номера устройства в функции устройства № 0. Обратите внимание, что номер устройства, отличный от DID, является просто порядковым номером устройства на этой шине. Более того, после обнаружения нового моста определяется новый номер шины, и нумерация устройств перезапускается с нулевого номера устройства.

Если от функции №0 устройства не поступает ответ, мастер шины выполняет прерывание и возвращает значение с включенными битами ( FFFFFFFF в шестнадцатеричном формате), которое является недопустимым значением VID / DID, таким образом, драйвер устройства может сказать, что указанная комбинация шина / номер_устройства / функция (B / D / F) отсутствует. Таким образом, когда чтение идентификатора функции, равного нулю, для данной шины / устройства приводит к прерыванию работы ведущего устройства (инициатора), следует предположить, что на этой шине нет рабочего устройства, поскольку устройства должны реализовывать функцию с номером ноль. В этом случае считывание оставшихся номеров функций (1–7) не требуется, поскольку они также не будут существовать.

Когда чтение указанной комбинации B / D / F для регистра идентификатора поставщика завершается успешно, драйвер устройства знает, что он существует; он записывает все единицы в свои BAR и считывает запрошенный размер памяти устройства в закодированной форме. Дизайн подразумевает, что все размеры адресного пространства являются степенью двойки и естественным образом выровнены.

На этом этапе BIOS или операционная система запрограммируют отображаемые в памяти и адреса портов ввода-вывода в регистр конфигурации BAR устройства. Эти адреса остаются действительными, пока система остается включенной. При отключении питания все эти настройки теряются, и процедура повторяется при следующем включении системы. Поскольку весь этот процесс полностью автоматизирован, пользователю не нужно вручную настраивать новое добавленное оборудование, меняя DIP-переключатели на самих картах. Это автоматическое обнаружение устройств и назначение адресного пространства - это то, как реализуется plug and play.

Если мост PCI-to-PCI обнаружен, система должна назначить вторичной шине PCI за мостом номер шины, отличный от нуля, а затем перечислить устройства на этой вторичной шине. Если обнаружены другие мосты PCI, обнаружение продолжается рекурсивно до тех пор, пока не будут просканированы все возможные комбинации домен / шина / устройство.

Каждая функция устройства PCI без моста может реализовывать до 6 полос BAR, каждая из которых может отвечать на разные адреса в порте ввода-вывода и адресном пространстве, отображенном в памяти. Каждый BAR описывает область размером от 16 байт до 2 гигабайт, расположенную ниже ограничения адресного пространства 4 гигабайта. Если платформа поддерживает опцию «Выше 4G» в системной прошивке, можно использовать 64-битные полосы.

Устройство PCI также может иметь дополнительное ПЗУ, которое может содержать код драйвера или информацию о конфигурации.

Аппаратная реализация

При выполнении доступа к пространству конфигурации устройство PCI не декодирует адрес, чтобы определить, должно ли оно отвечать, а вместо этого смотрит на сигнал выбора устройства инициализации (IDSEL). Для каждого сигнала IDSEL существует общесистемный уникальный метод активации. Устройство PCI должно декодировать только 11 битов младшего разряда адресного пространства (от AD [10] до AD [0]) сигналов адреса / данных и может игнорировать декодирование 21 аналого-цифрового сигнала высокого порядка (AD [31] к AD [11]), поскольку реализация доступа к пространству конфигурации имеет вывод IDSEL каждого слота, подключенный к разным линиям адреса / данных высокого порядка от AD [11] до AD [31]. Сигнал IDSEL - это отдельный вывод для каждого слота устройства / адаптера PCI.

Чтобы настроить карту в слоте n, мост шины PCI выполняет цикл доступа к пространству конфигурации с адресом регистра устройства PCI в строках AD [7: 2] (AD [1: 0] всегда равны нулю, поскольку регистры являются двойными словами (32 бита)) и номер функции PCI, указанный в битах AD [10: 8], причем все нули битов более высокого порядка, за исключением AD [ n +11], используются в качестве сигнала IDSEL в данном слоте.

Чтобы уменьшить электрическую нагрузку на критическую по времени (и, следовательно, чувствительную к электрической нагрузке) шину AD [], сигнал IDSEL на разъеме слота PCI обычно подключается к назначенному ему контакту AD [ n +11] через резистор. Это приводит к тому, что сигнал IDSEL PCI достигает своего активного состояния медленнее, чем другие сигналы шины PCI (из-за постоянной времени RC как резистора, так и входной емкости вывода IDSEL). Таким образом, доступ к пространству конфигурации выполняется медленнее, чтобы дать сигнал IDSEL достичь допустимого уровня.

Сканирование на шине выполняется на платформе Intel путем доступа к двум определенным стандартизованным портам. Эти порты являются портом ввода-вывода с адресом пространства конфигурации ( 0xCF8) и портом ввода-вывода данных пространства конфигурации ( 0xCFC). Значение, записываемое в порт ввода-вывода адреса пространства конфигурации, создается путем объединения значений B / D / F и значения адреса регистров в 32-битное слово.

Программная реализация

Чтение и запись конфигурации могут быть инициированы из ЦП двумя способами: один устаревший метод через адреса ввода-вывода 0xCF8 и 0xCFC, а другой - конфигурация с отображением в память.

Унаследованный метод присутствовал в исходной PCI и называется механизмом доступа к конфигурации (CAM). Он позволяет косвенно получить доступ к 256 байтам адресного пространства устройства через два 32-битных регистра, называемых PCI CONFIG_ADDRESS и PCI CONFIG_DATA. Эти регистры находятся по адресам 0xCF8 и 0xCFC в адресном пространстве ввода-вывода x86. Например, программный драйвер (микропрограммное обеспечение, ядро ​​ОС или драйвер ядра) может использовать эти регистры для настройки устройства PCI, записывая адрес регистра устройства в CONFIG_ADDRESS и помещая данные, которые должны быть записаны в устройство, в CONFIG_DATA. Поскольку этот процесс требует записи в регистр для записи в регистр устройства, он называется «косвенным».

Формат CONFIG_ADDRESS следующий:

0x80000000 | bus lt;lt; 16 | device lt;lt; 11 | function lt;lt; 8 | offset

Как объяснялось ранее, адресация устройства через шину, устройство и функцию (BDF) также называется «географической адресацией устройства». См. arch/x86/pci/early.cВ коде ядра Linux пример кода, использующего географическую адресацию.

Когда на некоторых процессорах AMD используется расширенное пространство конфигурации, дополнительные биты 11: 8 смещения записываются в биты 27:24 регистра CONFIG_ADDRESS:

0x80000000 | (offset amp; 0xf00) lt;lt; 16 | bus lt;lt; 16 | device lt;lt; 11 | function lt;lt; 8 | (offset amp; 0xff)

Второй способ был создан для PCI Express. Это называется улучшенным механизмом доступа к конфигурации (ECAM). Он расширяет пространство конфигурации устройства до 4 КБ, при этом нижние 256 байтов перекрывают исходное (устаревшее) пространство конфигурации в PCI. Часть адресного пространства «украдена», так что доступы от ЦП не идут в память, а достигают заданного устройства в структуре PCI Express. Во время инициализации системы микропрограммное обеспечение определяет базовый адрес для этой «украденной» адресной области и передает его корневому комплексу и операционной системе. Этот метод связи зависит от реализации и не определен в спецификации PCI Express.

Каждое устройство имеет собственное пространство размером 4 КБ, и информация о каждом устройстве доступна через простой массив, dev[bus][device][function]так что 256 МБ непрерывного физического пространства «украдены» для этого использования (256 шин × 32 устройства × 8 функций × 4 КБ = 256 МБ). Базовый физический адрес этого массива не указан. Например, в современных системах x86 таблицы ACPI содержат необходимую информацию.

Смотрите также
использованная литература
внешние ссылки
Последняя правка сделана 2023-03-19 11:46:21
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте