Гук Михаил Юрьевич
Шрифт:
• A[27:20] – Bus[7:0], номер шины;
• A[19:15] – Device[4:0], номер устройства;
• A[14:12] – Function[2:0], номер функции;
• A[11:8] – Extended Register [3:0], расширение номера регистра;
• A[7:0] – Register[7:0], номер регистра.
Устройство должно воспринимать и отрабатывать конфигурационные обращения, выполненные любым способом. При этом разработчик устройства должен помнить, что при попадании устройства в систему с обычной шиной PCI программно доступными окажутся лишь первые 256 байт конфигурационного пространства функции, так что в расширенное пространство следует помещать только те регистры, которые не используются в стандартном режиме работы PCI.
Для расширенного пространства введен и новый формат описания свойств с учетом «длинного» (10-битного) адреса регистра. Расширенный список свойств должен начинаться с адреса 100h (или же там должна быть структура, не позволяющая трактовать этот фрагмент как начало цепочки). Каждое свойство начинается с 32-битного идентификатора, за которым располагаются регистры, описывающие данное свойство. 32-разрядный идентификатор расширенных возможностей – PCI Extended Capability ID имеет следующую структуру:
• биты [15:0] – Capability ID, идентификатор свойства;
• биты [19:16] – Capability Version Number, номер версии свойства;
• биты [31:20] – Next Capability Offset, смещение следующего идентификатора (относительно нулевого регистра).
Конфигурационное пространство мостов PCI
Заголовок конфигурационного пространства мостов PCI-PCI приведен на рис. 5.3. Регистры в диапазоне адресов 00-17h полностью совпадают с регистрами обычного устройства PCI и описывают поведение и состояние моста на первичной шине. Заметим, что бит 2 регистра команд (Bus Master Enable) управляет возможностью трансляции транзакций с вторичной шины на первичную. Если этот бит обнулен, то мост не должен на вторичной стороне отзываться как целевое устройство в транзакциях записи/чтения памяти и ввода-вывода, поскольку он не сможет транслировать эти транзакции на первичную шину. Регистры BAR описывают только область специфических (зависящих от реализации) регистров моста, к маршрутизации эти регистры отношения не имеют.
Маршрутизирующие свойства моста определяются следующими регистрами (подробности см. в главе 4):
• Primary Bus Number – номер первичной шины;
• Secondary Bus Number – номер вторичной шины (это и номер моста);
• Subordinate Bus Number – максимальный номер подчиненной шины;
• i/O Base и I/O Limit – регистры, задающие начальный и конечный адрес пространства ввода-вывода устройств, расположенных за мостом. Эти регистры задают только старшие 4 бита 16-битного адреса ввода-вывода, так что гранулярность выделения адресов составляет 4 Кбайт;
• i/O Limit Upper 16 Bits и i/O Base Upper 16 Bits – регистры старшей части адреса ввода-вывода, если используется 32-битная адресация ввода-вывода (на это указывают установленные биты 0 регистров I/O Base и I/O Limit);
• Memory Base и Memory Limit – регистры, задающие начальный и конечный адрес пространства памяти, на которую отображены регистры ввода-вывода устройств, расположенных за мостом. Эти регистры задают только старшие 12 бит 32-битного адреса памяти, так что гранулярность выделения адресов составляет 1 Мбайт;
• Prefetchable Memory Base иPrefetchable Memory Limit – регистры, задающие начальный и конечный адрес «настоящей» (допускающей предвыборку) памяти устройств, расположенных за мостом. Эти регистры задают только старшие 12 бит 32-битного адреса памяти, так что гранулярность выделения адресов составляет 1 Мбайт;
• Prefetchable Base Upper 32 Bits и Prefetchable Limit Upper 32 Bits – регистры старшей части адреса «настоящей» памяти, если используется 64-битная адресация (на это указывают установленные биты 0 регистров Prefetchable Memory Base и Prefetchable Memory Limit).
Регистр Secondary Status аналогичен обычному регистру состояния (Status), но его признаки относятся ко вторичной шине. Единственное отличие – бит 14 (Received System Error) в Secondary Status несет признак обнаружения сигнала SERR# на вторичном интерфейсе, а не его введения данным устройством.
Регистр Expansion ROM Base Address, как и для обычного устройства, задает положение ПЗУ расширения BIOS (если это ПЗУ присутствует в мосте).
Регистры Interrupt Line и Interrupt Pin относятся к прерываниям, вырабатываемым мостом (если таковые имеются). К линиям прерывания, транслируемым мостом, эти регистры отношения не имеют.
Регистр Bridge Control служит для управления работой моста и индикации невостребованных завершений отложенных транзакций:
• бит 0 – Parity Error Response Enable, разрешение мосту сигнализировать на вторичный интерфейс об обнаружении ошибки четности адреса и данных;
• бит 1 – SERR# Enable, разрешение трансляции сигнала SERR# со вторичного интерфейса на первичный (для трансляции должен быть установлен и одноименный бит в регистре команд);
• бит 2 – ISA Enable, разрешение поддержки адресации ввода-вывода для шины ISA (вычеркивания последних 768 байт из каждого килобайта диапазона адресов, заданного регистрами I/O Base и I/O Limit);