PCI/ru: Difference between revisions
(5 intermediate revisions by 2 users not shown) | |||
Line 30: | Line 30: | ||
===Конфигурационное пространство=== | ===Конфигурационное пространство=== | ||
Спецификация PCI предусматривает три разных варианта конфигурационных структур для трёх категорий устройств: | |||
# устройство общего назначения (general-purpose device); | |||
# мост (bridge) между двумя PCI-совместимыми физическими шинами (напр. между PCI и PCI, PCI-X и PCI, HT и PCIe); | |||
# мост между PCI и CardBus. | |||
Ниже приведен вариант конфигурационной структуры для обычного устройства PCI | |||
{| class="wikitable" border="1" | |||
|- | |||
! смещение | |||
! +0 | |||
! +1 | |||
! +2 | |||
! +3 | |||
|- | |||
| +0х00 | |||
| align="center" colspan="2"|Код производителя | |||
| align="center" colspan="2"|Код устройства | |||
|- | |||
| +0х04 | |||
| align="center" colspan="2"|Регистр управления | |||
| align="center" colspan="2"|Регистр состояния | |||
|- | |||
| +0х08 | |||
| Ревизия | |||
| ProgIF | |||
| Подкласс | |||
| Класс | |||
|- | |||
| +0х0С | |||
| Cache Line | |||
| LatTmr | |||
| Header (0x00 или 0x80) | |||
| BIST | |||
|- | |||
| +0х10 | |||
| align="center" colspan="4"| Регистр базового адреса #0 (BAR0) | |||
|- | |||
| +0х14 | |||
| align="center" colspan="4"| Регистр базового адреса #1 (BAR1) | |||
|- | |||
| +0х18 | |||
| align="center" colspan="4"| Регистр базового адреса #2 (BAR2) | |||
|- | |||
| +0х1C | |||
| align="center" colspan="4"| Регистр базового адреса #3 (BAR3) | |||
|- | |||
| +0х20 | |||
| align="center" colspan="4"| Регистр базового адреса #4 (BAR4) | |||
|- | |||
| +0х24 | |||
| align="center" colspan="4"| Регистр базового адреса #5 (BAR5) | |||
|- | |||
| +0х28 | |||
| align="center" colspan="4"| 0х00 (зарезервировано для CardBus-устройств) | |||
|- | |||
| +0х2C | |||
| align="center" colspan="2"| Производитель подсистемы | |||
| align="center" colspan="2"| Код подсистемы | |||
|- | |||
| +0х30 | |||
| align="center" colspan="4"| Базовый адрес бортового ПЗУ (Extension ROM) | |||
|- | |||
| +0х34 | |||
| align="center" | Список доп. параметров | |||
| align="center" colspan="3"| Зарезервировано | |||
|- | |||
| +0х38 | |||
| align="center" colspan="4"| Зарезервировано | |||
|- | |||
| rowspan="2"|+0х3С | |||
| align="center" colspan="2"| Организация аппаратного прерывания | |||
| align="center" colspan="2"| Время захвата системной шины, мкс/4 | |||
|- | |||
| align="center" | Номер IRQ (только для PIC) | |||
| align="center" | Линия (INTA#...INTD#) | |||
| align="center" | Мин. длительность захвата | |||
| align="center" | Макс. допустимое ожидание | |||
|- | |||
| +0х40 | |||
| align="center" | 1-й элемент списка | |||
| align="center" | следующий элемент | |||
| align="center" colspan="2" | Спецсвойства (Capabilities) | |||
|- | |||
| rowspan="2"| . . . 0хFC | |||
| align="center" colspan="4"| Незарезервированная область конфигурационного пространства | |||
|- | |||
| align="center" colspan="4"| (назначение регистров определяется разработчиком устройства) | |||
|- | |||
| +0х100 | |||
| align="center" colspan="3" | Расширенные параметры PCI Express | |||
| align="center"| следующий параметр | |||
|- | |||
| +0х104 | |||
| align="center" rowspan="2" colspan="4" | Серийный номер устройства (8 байт) | |||
|- | |||
| +0х108 | |||
|- | |||
| rowspan="2"| . . . 0хFFC | |||
| align="center" colspan="4"| Расширенная область конфигурационного пространства PCIe | |||
|- | |||
| align="center" colspan="4"| (назначение регистров определяется разработчиком устройства) | |||
|} | |||
====Стандартные поля==== | ====Стандартные поля==== | ||
====BAR-регистры==== | ====BAR-регистры==== | ||
Каждое устройство может иметь от нуля до шести диапазонов памяти и/или портов ввода/вывода. Физические адреса этих ресурсов хранятся в системно-доступных 32-битных BAR-ячейках (BAR = ''Base Address Register'') конфигурационного пространства по адресам 0x10-0x24. | |||
Важно, что физические адреса назначаются каждому из диапазонов BIOSом, и в любой момент могут быть переназначены операционной системой. Само устройство не может распоряжаться назначением адресов, но только запрашивает у системы требуемый объем памяти или нужное число портов ввода/вывода для каждого из BAR-диапазонов. | |||
Самый младший бит BAR-регистра всегда равен 0 для памяти и 1 для портов. | |||
В КолибриОС содержимое BAR-регистров может быть прочитано из пользовательского приложения с помощью подфункции 6 [[SysFn62/ru|сисфункции 62]]. Пример использования этой функции для энумерации и доступа к бортовой памяти PCI-устройств приведен в программе [[PCIDEV]]. | |||
====Регистры состояния и контроля==== | ====Регистры состояния и контроля==== | ||
==== | ====Специальные свойства==== | ||
Часть конфигурационного пространства PCI может быть занята списком ''специальных свойств'' заданного устройства (''Capabilities''; буквальный перевод - ''"способности"'' - в отношении электронного прибора представляется несколько неуместным). | |||
Элемент односвязного списка специальных свойств имеет следующую структуру: | |||
+0 : код спецсвойства (1 байт); | |||
+1 : указатель на конфигурационный адрес следующего элемента, или 0 для последнего элемента списка (1 байт); | |||
+2 : битовые поля спецсвойств (размер и функциональность определяются кодом спецсвойства). | |||
===Адресное пространство=== | ===Адресное пространство=== | ||
Line 44: | Line 160: | ||
''(продолжение следует)'' | ''(продолжение следует)'' | ||
[[Category:Компьютерные шины]] | |||
[[Category:Аппаратное обеспечение]] |
Latest revision as of 23:08, 22 August 2010
Шина 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); однако его конфигурационное пространство должно существовать в любом случае.
Конфигурационное пространство
Спецификация PCI предусматривает три разных варианта конфигурационных структур для трёх категорий устройств:
- устройство общего назначения (general-purpose device);
- мост (bridge) между двумя PCI-совместимыми физическими шинами (напр. между PCI и PCI, PCI-X и PCI, HT и PCIe);
- мост между PCI и CardBus.
Ниже приведен вариант конфигурационной структуры для обычного устройства PCI
смещение | +0 | +1 | +2 | +3 |
---|---|---|---|---|
+0х00 | Код производителя | Код устройства | ||
+0х04 | Регистр управления | Регистр состояния | ||
+0х08 | Ревизия | ProgIF | Подкласс | Класс |
+0х0С | Cache Line | LatTmr | Header (0x00 или 0x80) | 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 | 0х00 (зарезервировано для CardBus-устройств) | |||
+0х2C | Производитель подсистемы | Код подсистемы | ||
+0х30 | Базовый адрес бортового ПЗУ (Extension ROM) | |||
+0х34 | Список доп. параметров | Зарезервировано | ||
+0х38 | Зарезервировано | |||
+0х3С | Организация аппаратного прерывания | Время захвата системной шины, мкс/4 | ||
Номер IRQ (только для PIC) | Линия (INTA#...INTD#) | Мин. длительность захвата | Макс. допустимое ожидание | |
+0х40 | 1-й элемент списка | следующий элемент | Спецсвойства (Capabilities) | |
. . . 0хFC | Незарезервированная область конфигурационного пространства | |||
(назначение регистров определяется разработчиком устройства) | ||||
+0х100 | Расширенные параметры PCI Express | следующий параметр | ||
+0х104 | Серийный номер устройства (8 байт) | |||
+0х108 | ||||
. . . 0хFFC | Расширенная область конфигурационного пространства PCIe | |||
(назначение регистров определяется разработчиком устройства) |
Стандартные поля
BAR-регистры
Каждое устройство может иметь от нуля до шести диапазонов памяти и/или портов ввода/вывода. Физические адреса этих ресурсов хранятся в системно-доступных 32-битных BAR-ячейках (BAR = Base Address Register) конфигурационного пространства по адресам 0x10-0x24.
Важно, что физические адреса назначаются каждому из диапазонов BIOSом, и в любой момент могут быть переназначены операционной системой. Само устройство не может распоряжаться назначением адресов, но только запрашивает у системы требуемый объем памяти или нужное число портов ввода/вывода для каждого из BAR-диапазонов.
Самый младший бит BAR-регистра всегда равен 0 для памяти и 1 для портов.
В КолибриОС содержимое BAR-регистров может быть прочитано из пользовательского приложения с помощью подфункции 6 сисфункции 62. Пример использования этой функции для энумерации и доступа к бортовой памяти PCI-устройств приведен в программе PCIDEV.
Регистры состояния и контроля
Специальные свойства
Часть конфигурационного пространства PCI может быть занята списком специальных свойств заданного устройства (Capabilities; буквальный перевод - "способности" - в отношении электронного прибора представляется несколько неуместным).
Элемент односвязного списка специальных свойств имеет следующую структуру:
+0 : код спецсвойства (1 байт); +1 : указатель на конфигурационный адрес следующего элемента, или 0 для последнего элемента списка (1 байт); +2 : битовые поля спецсвойств (размер и функциональность определяются кодом спецсвойства).
Адресное пространство
Адресация памяти
(продолжение следует)