OSDev Wiki
Advertisement

Майкрософт ввела спецификацию PCI IRQ Routing Table Specification. Согласно этой спецификации PCI BIOS должен быть снабжен таблицей, которая описывает маршрутизацию. Эта таблица аналогична данным получаемым через функцию PCI BIOS GetIRQRoutingTable. А для перепрограммирования в PCI BIOS есть функция SetPCIHardwareInterrupt.

Определить присутствие PCI IRQ Routing Table можно при помощи поиска в системной памяти с 0F0000h по FFFFFh через каждые 16-byte сигнатуры "$PIR".

Баты смещение Размер в байтах Имя
0 4 Signature / Сигнатура
4 2 Version / Версия
6 2 Table Size / Размер таблицы
8 1 PCI Interrupt Router's Bus
9 1 PCI Interrupt Router's DevFunc
10 2 PCI Exclusive IRQs
12 4 Compatible PCI Interrupt Router
16 4 Miniport Data
20 11 Reserved (Zero) / Резерв ноль
31 1 Checksum / Контрольная сумма
32 16 First Slot Entry / Первый слот
48 16 Second Slot Entry / Второй слот
(N + 1) * 16 16 Nth Slot Entry / N’ый слотов

Сигнатура – это ASCII строка "$PIR " или байт 0 это 24h, байт 1 это 50h, байт 2 это 49h, и байт 3 это 52h. Или для проверки 52495024h

Версия – в формате стандартном для версии байт 0 это 00h содержит значение до точки и байт 1 это 01h после точки получаем 1.0

Table Size - размер таблицы в байтах. Должен быть больше 32. К примеру для 5 слотов 32 + (5 * 16) = 112

PCI Interrupt Router's Bus - номер шины PCI на котором расположено устройство маршрутизации прерываний.

PCI Interrupt Router's DevFunc - номер устройства и функции PCI на котором расположено устройство маршрутизации прерываний. Верхние 5 битов устройство нижнее 3 функция.

PCI Exclusive IRQs- Это IRQ битовая карта которая информирует какие IRQs которые не должны быть использованы для PCI. Для примера, если IRQ11 будет использоваться исключительно для PCI, а использование для ISA устройств будет запрещено, тогда бит 11 будет установлен в 1. Если это IRQ не является эксклюзивным для PCI, то он выставляется в 0.

Compatible PCI Interrupt Router – Это поле содержит Vendor ID (баты 0 и 1) and Device ID (байты 2 и 3) совместимого PCI маршрутизатора прерываний, или ноль(0) если такого нет. Это поле используется операционной системой для определения драйвера для маршрутизатора прерываний.

Miniport Data – данные для инициализации драйвера Miniport, это для Майкрософтского драйвера. Если не нужны то 0.

Reserved – резерв и должен быть 0.

Checksum – контрольная сумма. Способ проверки следующей сумма всех байт таблицы включая слоты должна быть 0 по модулю 256.

Slot Entry. Каждый слот это 16 –байтовая структура описывающая как слоты PCI interrupt контакты связаны проводами с другими слотами и как чипсет назначает IRQ контакты . Каждый слот имеет следующий формат:

Баты смещение Размер в байтах Имя
0 Byte PCI Bus Number
1 Byte PCI Device Number (в верхних пяти битах)
2 Byte Link Value for INTA#
3 Word IRQ Bitmap for INTA#
5 Byte Link Value for INTB#
6 Word IRQ Bitmap for INTB#
8 Byte Link Value for INTC#
9 Word IRQ Bitmap for INTC#
11 Byte Link Value for INTD#
12 Word IRQ Bitmap for INTD#
14 Byte Slot Number
15 Byte Reserved

PCI Bus Number – номер шины на которой расположен слот PCI Device Number – номер устройства слота.

Link Value for INTn#: Значение ноль означает что этот контакт прерывания не подсоединен к другим контактам прерывания и не подсоединен к контактам прерываний маршрутизатора прерываний. Не нулевое значение link специфично для каждого чипсет и устанавливается производителем чипсета. Здесь примерное описание того что должно: Значения от 1 до числа контактов прерываний. На маршрутизаторе прерываний это означает что контакт подсоединен к PIRQn#.

  • Значение больше чем число контактов прерываний значит что, контакты объединены вмести с другими слотами но они не подключены к PIRQn# на машрутизаторе прерываний.
  • Также возможны другие интерпретации значения link. Для примера, значение link может определять байт из конфигурационного пространства для доступа к этому link, или какой порт ввода вывода для доступа к link. Специфичное значение link должно быть описано производителем и поддерживаться драйвером.

IRQ Bitmap for INTn#: Это значение показывает которое прерывание из AT IRQ доступно этому PCI контакту прерывания. В этой битовой карте бит 0 соотноситься с IRQ0, бит 1 с IRQ1, и тд. Один бит в битовой карте показывает что прерывание доступно, заданно. Ноль битов показывает, что прерывание не доступно, не задано.

Slot Number: Это значение используется для коммуникации с системной платой и платами расширения. Для системной карты должен быть ноль. А для карт расширение номер физического посадочного места на материнской карте. Это надежный способ соотнести физические слоты с PCI device numbers.

Ссылки[]

PCI IRQ Routing Table Specification

Advertisement