На шине PCI имеется прогрессивный механизм оповещения об асинхронных событиях, основанный на передаче сообщений MSI (Message Signaled Interrupts). Здесь для сигнализации запроса прерывания устройство запрашивает управление шиной и, получив его, посылает сообщение. Сообщение выглядит как обычная запись двойного слова в ячейку памяти; адрес (32-битный или 64-битный) и шаблон сообщения на этапе конфигурирования устройств записываются в конфигурационные регистры устройства (точнее, функции). В сообщении старшие 16 бит всегда нулевые, а младшие 16 бит несут информацию об источнике прерывания. Устройство (функция) может нуждаться в сигнализации нескольких типов запросов; в соответствии с его потребностями и своими возможностями система указывает устройству (функции), сколько различных типов запросов оно может вырабатывать.
Прерывания через MSI от одних устройств в одной системе могут генерироваться наряду с обычными прерываниями INTx# от других устройств. Но каждое устройство (функция), генерирующее прерывания через MSI, не должно использовать прерывания через линии INTx#.
Механизм MSI может применяться на системных платах, имеющих «продвинутый» контроллер прерываний APIC. Правда, не все преимущества MSI реально используются. Так, для системных плат на чипсетах с хабом ICH2 и ICH3 фирмы Intel поддержка MSI сводится к организации альтернативных путей подачи запросов IRQ[1:23] на входы APIC (запросы IRQ с номерами 0, 2, 8 и 13 через MSI не передаются). Всем устройствам PCI назначается один и тот же адрес сообщений (Message Address e FEC00020h), по которому в APIC находится регистр IRQ Pin assertion. В сообщении указывается номер взводимого запроса прерывания в диапазоне 1-23 (исключая 2, 8 и 13). Линии запросов для прерываний через MSI не могут использоваться совместно (разделяемо) с прерываниями, полученными другими способами (по линиям запросов от устройств PCI и от других устройств системной платы). Возможно, на других платформах прерывания через MSI используются более эффективно.
Мосты PCI и PCI-X
Мосты PCI (PCI bridge) — специальные аппаратные средства соединения шин PCI (и PCI-Х) между собой и с другими шинами. Главный мост (host bridge) используется для подключения PCI к «центру» компьютера (системной памяти и процессору). «Почетной обязанностью» главного моста является генерация обращений к конфигурационному пространству под управлением центрального процессора, что позволяет хосту (центральному процессору) выполнять конфигурирование всей подсистемы шин PCI. В системе может быть несколько главных мостов, что позволяет предоставить высокопроизводительную связь с центром большему числу устройств (число устройств на одной шине ограничено). Из этих шин одна назначается условно главной (bus 0).
Одноранговые мосты PCI (Peer-to-Peer bridges) используются для подключения дополнительных шин PCI. Эти мосты всегда вносят дополнительные накладные расходы в передачу данных, так что эффективная производительность при обмене устройства с центром снижается с каждым встающим на пути мостом.
Для подключения шин PCMCIA, CardBus, MCA, ISA/EISA, X-Bus и LPC используются специальные мосты, входящие в чипсеты системных плат или же являющиеся отдельными устройствами PCI (микросхемами). Эти мосты выполняют преобразование интерфейсов соединяемых ими шин, синхронизацию и буферизацию обменов данных.
Применение мостов PCI предоставляет следующие возможности:
♦ увеличение возможного числа подключенных устройств, преодолевая огра ничения электрических спецификаций шины;
♦ разделение устройств PCI на сегменты — шины PCI — с различными харак теристиками разрядности (32/64 бит), тактовой частоты (33/66/100/133 МГц), протокола (PCI, PCI-X Mode I, PCI-X Mode 2, PCI Express), причем на каж дой шине все абоненты равняются на самого слабого участника (правильная расстановка устройств по шинам позволяет с максимальной эффективно стью использовать возможности устройств и системной платы);
♦ организация сегментов с «горячим» подключением/отключением устройств;
♦ организация одновременного параллельного выполнения транзакций от ини циаторов, расположенных на разных шинах.
Каждый мост PCI соединяет только две шины — первичную (primary bus), находящуюся ближе к вершине иерархии, со вторичной (secondary bus); интерфейсы моста, которыми он связан с этими шинами, называются, соответственно, первичным и вторичным. Допускается только чисто древовидная конфигурация, то есть две шины соединяются друг с другом лишь одним мостом и нет «петель» из мостов. Шины, подсоединяемые ко вторичному интерфейсу данного моста другими мостами, называются подчиненными (subordinated bus). Мосты PCI образуют иерархию шин PCI, на вершине которой находится главная шина с нулевым номером, подключенная к главному мосту. Если главных мостов несколько, то из их шин (равных друг другу по рангу) условно главной становится шина, которой назначен нулевой номер.
Каждый мост программируется — ему указываются диапазоны адресов в пространствах памяти и ввода-вывода, отведенные устройствам его вторичной и подчиненных шин. В каждом мосте определяется по одной области для адресов пространства ввода-вывода, «настоящей» памяти (допускающей предвыборку) и памяти для отображения регистров ввода-вывода. Если адрес ЦУ текущей транзакции на одной шине (стороне) моста относится к шине противоположной стороны, мост транслирует транзакцию на соответствующую шину и обеспечивает согласование протоколов шин. Таким образом, совокупность мостов PCI выполняет маршрутизацию (routing) обращений по связанным шинам.
Если в системе имеются несколько главных мостов, то сквозная маршрутизация между устройствами разных шин может оказаться невозможной: главные мосты могут быть связаны друг с другом лишь через магистральные пути контроллера памяти. Поддержка трансляции всех типов транзакций PCI через главные мосты в этом случае становится чересчур сложной, а потому спецификацией PCI строго и не требуется. Таким образом, все активные устройства всех шин PCI могут обращаться к системной памяти, но возможность однорангового общения может оказаться в зависимости от принадлежности этих устройств той или иной шине PCI. Передача сообщений (команда DIM) с шины на шину через главные мосты реализуется проще, чем передача транзакций всех типов. Для главных мостов PCI поддержка передачи сообщений желательна, но не обязательна.
Мост должен выполнять ряд обязательных функций:
♦ Обслуживать шину, подключенную к его вторичному интерфейсу:
• выполнять арбитраж — прием сигналов запроса REQx# от ведущих уст ройств шины и предоставление им права на управление шиной сигнала ми GNTx#;
• парковать шину — подавать сигнал GNTx# какому-то устройству, когда управление шиной не требуется ни одному из задатчиков;
• генерировать конфигурационные циклы типа 0 с формированием инди видуальных сигналов IDSEL к адресуемому устройству PCI;
• «подтягивать» управляющие сигналы к высокому уровню;
• определять возможности подключенных устройств и выбирать удовле творяющий их режим работы шины (частота, разрядность, протокол);
• формировать аппаратный сброс (RST#) по сбросу от первичного интер фейса и по команде, сообщая о выбранном режиме специальной сигнали зацией.
♦ Поддерживать карты ресурсов, находящихся по разные стороны моста.
♦ Отвечать под видом целевого устройства на транзакции, инициированные мастером на одном интерфейсе и адресованные ресурсу, находящемся со стороны другого интерфейса. Транслировать эти транзакции на другой ин терфейс, выступая в роли ведущего устройства (мастера), и передавать их результаты истинному инициатору.
Мосты, выполняющие данные функции, называются прозрачными (transparent bridge); для работы с устройствами, находящимися за такими мостами, не требуется дополнительных драйверов моста. Именно такие мосты описаны в спецификации PCI Bridge 1.1, и для них как устройств PCI есть специальный класс (06). В данном случае подразумевается «плоская» модель адресации ресурсов (памяти и ввода-вывода): каждое устройство имеет свои адреса, уникальные (не пересекающиеся с другими) в пределах данной системы (компьютера).
Существуют и непрозрачные мосты (non-transparent bridges), которые позволяют организовывать обособленные сегменты со своими локальными адресными пространствами. Непрозрачный мост выполняет трансляцию (преобразование) адресов для транзакций, у которых инициатор и целевое устройство находятся по разные стороны моста. Досягаемыми через такой мост могут быть не все ресурсы (диапазоны адресов) противоположной стороны. Непрозрачные мосты используются, например, когда в компьютере выделяется подсистема «интеллигентного ввода-вывода» (12О) со своими процессором ввода-вывода и локальным адресным пространством.
В адресации портов ввода-вывода есть особенности, связанные с «наследием», доставшимся от шины ISA, — 10-битным декодированием адреса, приводящим к «изрезанное™» карты адресов и появлению псевдонимов. В мостах PCI применяются специальные меры, позволяющие сочетать особенности адресации устройств ISA с компактным описанием диапазонов адресов.
В мостах может быть реализована специальная поддержка графического адаптера VGA, который может находиться на стороне вторичного интерфейса моста. При включенной поддержке мост осуществляет трансляцию обращений к памяти VGA в диапазоне адресов OAOOOOh-OBFFFFh, а также к регистрам ввода-вывода в диапазонах 3B0h-3BBh и 3C0h-3DFh и всем их 64 псевдонимам. Кроме того, для поддержки VGA требуется особый подход к чтению и записи регистров палитр ( VGA Palette Snooping), которые расположены по адресам 3C6h, 3C8h и 3C9h, и их псевдонимов.