Майкрософт ввела спецификацию 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.