Difference between revisions of "PCI/ru"

From KolibriOS wiki
Jump to navigation Jump to search
(Created page with 'Спецификация PCI задаёт один из основных стандартов аппаратной и программной организации совреме...')
 
 
(8 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 +
==Шина PCI==
 
Спецификация PCI задаёт один из основных стандартов аппаратной и программной организации современных ПК.  
 
Спецификация PCI задаёт один из основных стандартов аппаратной и программной организации современных ПК.  
  
 
Официальный стандарт распространяется группой PCI SIG [http://www.pcisig.com/home/] для ограниченного круга подписчиков; однако в Сети можно найти исчерпывающую информацию практически обо всех технических деталях.
 
Официальный стандарт распространяется группой PCI SIG [http://www.pcisig.com/home/] для ограниченного круга подписчиков; однако в Сети можно найти исчерпывающую информацию практически обо всех технических деталях.
  
История создания и эволюции PCI - см. [http://ru.wikipedia.org/wiki/PCI]. Здесь лишь кратко напомним, что внедрение шины PCI в середине 90-х привело к мощному рывку в развитии компьютерной техники. Настолько мощному, что уже к началу 2000-х она превратилась в один из ''тормозящих'' факторов. В новых системах четко прослеживается тенденция сокращения сектора "стандартных" PCI-устройств и вытеснения шины PCI на периферию Южного Моста.   
+
История создания и эволюции PCI - см. [http://ru.wikipedia.org/wiki/PCI]. Здесь лишь кратко напомним, что внедрение шины PCI в середине 90-х привело к мощному рывку в развитии компьютерной техники. Настолько мощному, что уже к началу 2000-х она превратилась в один из ''тормозящих'' факторов. В новых системах четко прослеживается тенденция сокращения сектора PCI-карт и вытеснения собственно ''шины'' на периферию Южного Моста.   
  
Тем не менее, принципы адресации, конфигурирования и программной организации 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
 +
{| 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-регистры====
 +
 
 +
Каждое устройство может иметь от нуля до шести диапазонов памяти и/или портов ввода/вывода. Физические адреса этих ресурсов хранятся в системно-доступных 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 : битовые поля спецсвойств (размер и функциональность определяются кодом спецсвойства).
 +
 
 +
===Адресное пространство===
 +
 
 +
====Адресация памяти====
 +
 
 +
''(продолжение следует)''
 +
 
 +
[[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 предусматривает три разных варианта конфигурационных структур для трёх категорий устройств:

  1. устройство общего назначения (general-purpose device);
  2. мост (bridge) между двумя PCI-совместимыми физическими шинами (напр. между PCI и PCI, PCI-X и PCI, HT и PCIe);
  3. мост между 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 : битовые поля спецсвойств (размер и функциональность определяются кодом спецсвойства).

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

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

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