PCI/ru

From KolibriOS wiki
Revision as of 04:33, 16 July 2010 by Asper (talk | contribs) (Categories)
Jump to navigation Jump to search

Шина PCI

Спецификация PCI задаёт один из основных стандартов аппаратной и программной организации современных ПК.

Официальный стандарт распространяется группой PCI SIG [1] для ограниченного круга подписчиков; однако в Сети можно найти исчерпывающую информацию практически обо всех технических деталях.

История создания и эволюции PCI - см. [2]. Здесь лишь кратко напомним, что внедрение шины PCI в середине 90-х привело к мощному рывку в развитии компьютерной техники. Настолько мощному, что уже к началу 2000-х она превратилась в один из тормозящих факторов. В новых системах четко прослеживается тенденция сокращения сектора PCI-карт и вытеснения собственно шины на периферию Южного Моста.

Тем не менее, основные принципы адресации, конфигурирования и программной организации устройств, заложенные стандартом PCI, остаются неизменными.

Принципы адресации устройств

Характерной особенностью шины PCI является наличие трёх адресных пространств:

  • от 0 до 6 связных зон адресации портов ввода/вывода;
  • от 0 до 7 связных зон адресации внутренней памяти (включая ROM) и отображённых на память устройств ввода/вывода;
  • конфигурационное адресное пространство размером 1кб (расширено до 4кб в спецификации PCI Express).

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

Назначение конкретных адресов каждой из адресных зон производится этапе конфигурации:

  • непосредственно после включения питания - под управлением BIOS;
  • после загрузки ОС (подгонка под адресную модель ядра и Hotplug) - под управлением шинных драйверов и подсистемы ACPI.

Важно, что само устройство при конфигурации выступает лишь "заказчиком" адресного пространства для своих устройств, указывая требуемый размер каждой зоны ввода/вывода или MMIO (или 0, если данная зона устройству не нужна); конкретные адреса для этих зон выделяются BIOSом или операционной системой в соответствии с имеющимися ресурсами и используемой моделью памяти.

BDF-адрес устройства в системном конфигурационном пространстве (см.ниже) определяется его физическим подключением к конкретному слоту PCI-шины (для интегрированных устройств - схемой разводки сигнальных линий на материнской плате и регистровой моделью чипсета) и поэтому не зависит ни от BIOS, ни от операционной системы.

По окончании конфигурации назначенные адреса хранятся в BAR-регистрах конфигурационного пространства и могут быть прочитаны драйвером и пользовательской программой.

В принципе, PCI-устройство может вообще не иметь никаких ресурсов ввода/вывода - ни портов, ни MMIO); однако его конфигурационное пространство должно существовать в любом случае.

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

смещение +0 +1 +2 +3
+0х00 Код производителя Код устройства
+0х04 Регистр управления Регистр состояния
+0х08 Ревизия ProgIF Подкласс Класс
+0х0С Cache Line LatTmr Заголовок BIST
+0х10 Регистр базового адреса #0 (BAR0)
+0х14 Регистр базового адреса #1 (BAR1)
+0х18 Регистр базового адреса #2 (BAR2)
+0х1C Регистр базового адреса #3 (BAR3)
+0х20 Регистр базового адреса #4 (BAR4)
+0х24 Регистр базового адреса #5 (BAR5)
+0х28 Зарезервировано для указателя на информационную структуру CardBus
+0х2C Производитель подсистемы Код подсистемы
+0х30 Базовый адрес бортового ПЗУ (Extension ROM)
+0х34 Список доп. параметров Зарезервировано
+0х38 Зарезервировано
+0х3С Организация аппаратного прерывания Время захвата системной шины, мкс/4
Номер IRQ (только для PIC) Линия (INTA#...INTD#) Мин. длительность захвата Макс. допустимое ожидание
+0х40 1-й доп. параметр следующий параметр 1-й доп. параметр
. . . 0хFC Незарезервированная область конфигурационного пространства
(назначение регистров определяется разработчиком устройства)
+0х100 Расширенные параметры PCI Express следующий параметр
+0х104 Серийный номер устройства (8 байт)
+0х108
. . . 0хFFC Расширенная область конфигурационного пространства PCIe
(назначение регистров определяется разработчиком устройства)

Стандартные поля

BAR-регистры

Регистры состояния и контроля

Дополнительные поля

Адресное пространство

Адресация памяти

(продолжение следует)