ФЭНДОМ


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

Программное управление шиной

Генерация конфигурационных транзакций

В ранних версиях спецификации было предусмотрено два метода, с помощью которых процессор выполнял конфигурационные транзакции. Однако на практике использовался лишь первый из них, и в спецификцаии версии 2.2 второй метод упразднили.

Для генерации конфигурационных транзакций PCI на ПК используются обращения к двум портам ввода-вывода, носящим имена CONFIG_ADDRESS и CONFIG_DATA, имеющим адреса 0CF8h и 0CFCh соответственно и входящим в состав моста Host–PCI, через который шина PCI прямо или косвенно соединяется с процессором.

Порт CONFIG_ADDRESS имеет размер двойное слово и доступен только как единое целое. Обращения меньшего размера по принадлежащим ему адресам передаются на шину PCI как обычные транзакции ввода-вывода. Этот порт доступен для чтения и записи и имеет следующий формат:

PCI 2 3 fig 3 2

Когда необходимо выполнить конфигурационную транзакцию, в этот порт записывается адрес регистра конфигурационного пространства PCI, состоящий из номеров шины (разряды 23–16), устройства (15–11), функции (10–8) и собственно регистра (7–2). Биты 1 и 0 должны всегда содержать нули, а старший бит должен содержать единицу, разрешая тем самым выполнение конфигурационной транзакции. Разряды 30–24 зарезервированы и должны содержать нули.

Собственно генерация конфигурационной транзакции происходит при чтении или записи порта CONFIG_DATA, когда в CONFIG_ADDRESS был записан адрес с установленным старшим битом и номером шины, соответствующим шине, подключенной к мосту Host–PCI, или любой шине PCI, лежащей ниже этой шины и соединённой с ней через один или несколько мостов PCI–PCI (допустимый диапазон номеров шин задаётся мосту Host–PCI в процессе его настройки). Доступ к порту CONFIG_DATA должен иметь размер, равный размеру считываемого или записываемого конфигурационного регистра, адрес которого находится в CONFIG_ADDRESS.

Если номер шины, заданный в CONFIG_ADDRESS, совпадает с номером шины, подключённой непосредственно к мосту Host–PCI, генерируется конфигурационная транзакция с адресом типа 0 (см. Функционирование шины PCI), причём номер устройства, находящийхся в разрядах 15–11 порта CONFIG_ADDRESS, используется для выдачи одного из сигналов IDSEL, которые и служат для выбора конкретного устройства. Кроме того, декодированный номер устройства (один единичный и остальные нулевые биты) в фазе адреса конфигурационной транзакции передаётся в разрядах 31–11 адреса.

Если адрес в CONFIG_ADDRESS указывает на ту шину, которая непосредственно подключена к мосту Host–PCI, последний генерирует конфигурационную транзакцию с адресом типа 1. Она будет обработана мостом PCI–PCI, который опознает содержащийся в адресе номер шины. Этот мост либо выполнит конфигурационную транзакцию с адресом типа 0 (если адресуемое устройство подключено к шине, прямо подсоединённой к этому мосту), либо сгенерирует транзакцию с адресом типа 1, обеспечив тем самым её прохождение через следующий мост. Длина этой цепочки теоретически ограничена только разрядностью поля, отведённого под номер шины (8 бит).

Если при выполнении транзакции выяснится, что адресуемого конфигурационного регистра не существует (указан номер несуществующей шины, устройства, функции или регистра), то операция записи не возымеет никаких действий, а операция чтения вернёт процессору значение, содержащее единицы в каждом разряде.

Генерация специальных циклов

Мост Host–PCI может, но не обязан, давать возможность программному обеспечению генерировать транзакции, использующие команду «Специальный цикл». Такие транзакции являются широковещательными (не обращёнными к конкретному устройству) и используются для управления работой шины.

Генерация специальных циклов выполняется тем же способом, что и генерация конфигурационных транзакций, но со специальным значением адреса. В поле номера шины порта CONFIG_ADDRESS записывается номер шины, в поля номеров устройства и функции — все единицы, а в поле номера регистра — нули. Когда после этого производится запись значения в порт CONFIG_DATA, мост, к которому присоединена указанная шина, вместо обычной конфигурационной транзакции генерирует специальный цикл, в первой фазе данных которого передаёт данные, записанные в порт CONFIG_DATA. Результат попытки чтения из CONFIG_DATA после занесения в CONFIG_ADDRESS описанного выше специального адреса спецификацией не определён.

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

Каждое устройство PCI, за исключением мостов Host–PCI, имеет собственное конфигурационное адресное пространство. Многофункциональные устройства имеют отдельное конфигурационное пространство для каждой своей функции.

Конфигурационное пространство имеет объём 256 байт и делится на заголовок с предопределённой структурой и на часть, зависящую от устройства. Заголовок также состоит из двух частей: первая, длиной 16 байт, имеет формат, не зависящий от типа устройства, а вторая зависит от типа устройства, но одинакова для всех устройств этого типа. Спецификация PCI определяет структуру заголовков для трёх типов устройств: обычных устройств, мостов PCI–PCI и мостов PCI–CardBus.

Попытки записи в зарезервированные регистры конфигурационного пространства рассматриваются устройствами как пустые операции: транзакция записи завершается успешно, но никаких последствий для устройства не имеет. Чтение из зарезервированных регистров также всегда выполняется успешно и возвращает значение 0. Если какой-либо регистр доступен для записи, он всегда доступен и для чтения, причём из него будет прочитано то значение, которое в него было записано и действует в настоящий момент.

Общий вид заголовков обычных устройств показан на рисунке ниже. Описание конфигурационного пространства мостов PCI–PCI и PCI–CardBus приведено в разделе Мосты PCI.

PCI 2 3 fig 6 1

Каждое устройство должно содержать следующие конфигурационные регистры из состава заголовка: Vendor ID, Device ID, Command, Status, Revision ID, Class Code, Header Type. Последнее поле для обычных устройств равно 0 (для мостов PCI–PCI оно равно 1, для мостов PCI–CardBus — 2). Наличие остальных регистров зависит от вида устройства и реализуемых им функций.

Функции конфигурационного пространства

С помощью конфигурационного пространства производится идентификация устройств, осуществляется управление их работой и получение текущего состояния, настройка диапазонов адресов, используемых устройством, а также некоторые другие функции.

PCI-шина 10, устроиство 3,

функция 2

Управление устройством

Состояние устройства

Различные регистры

Базовые адреса

ПЗУ устройств PCI

Литература

  • PCI Local Bus Specification. Revision 3.0. August 12, 2002
  • Гук М. Аппаратные интерфейсы ПК. Энциклопедия. — СПб.: Питер, 2002