OSDev
http://osdev.su/

Номер прерывания PCI на IO/APIC
http://osdev.su/viewtopic.php?f=7&t=800
Страница 1 из 2

Автор:  Himik [ 19 сен 2013, 12:53 ]
Заголовок сообщения:  Номер прерывания PCI на IO/APIC

У меня возник вопрос определения номера прерывания для PCI устройства (в частности Native IDE Controller). В структуре конфигураци, поле interrupt_line содержит номер IRQ на PIC (номера ниже 16), а мне надо на IO/APIC (номера от 16 и выше). Я в данный момент считаю так: к 16 прибавляю номер пина (interrupt_pin), но это всего 4 линии (прерывания от 16 до 19). На некоторых компьютерах есть пины, подключенные к прерываниям 20 и выше, и там моя ОС не работает. Надо искать, к каким прерываниям IO/APIC подключены пины PCI. В интернете не нашёл ни какой информации кроме ссылок на ACPI.

Автор:  Nable [ 19 сен 2013, 23:32 ]
Заголовок сообщения:  Re: Номер прерывания PCI на IO/APIC

> В интернете не нашёл ни какой информации кроме ссылок на ACPI.
Всё так и есть: "PCI Interrupt Routing (Navigating the Maze)". В том смысле что всякие PIR и MP table хоть и были в какой-то мере стандартизованы, но не слишком-то удобны в плане описания железа и никто из производителей их толком не использовал, все рано или поздно выбрали ACPI.
Отдельная штука, прибавляющая гемора - PCI interrupt router'ы. Впрочем, во времена PCI-E о них можно подзабыть. А если все интересующие устройства умеют в MSI, то жизнь вообще в разы упрощается (пожалуй, можно в таком случае даже без ACPI обойтись).

Автор:  Himik [ 19 сен 2013, 23:45 ]
Заголовок сообщения:  Re: Номер прерывания PCI на IO/APIC

Это интересно, спасибо.

Автор:  phantom-84 [ 20 сен 2013, 01:44 ]
Заголовок сообщения:  Re: Номер прерывания PCI на IO/APIC

У PCI всего 4 пина. Линии могут разделяться. Могу использоваться линии в том числе и из диапазона 0-15. Не понятно, откуда взялась такая уверенность по поводу 16-19. Даже по адресу устройства на шине и пину нет возможности гарантированно правильно вычислять линию, поэтому без MP/ACPI никак. Насчет APIC'а тоже не понял, почему только выше 16. В поле Interrupt Line конфигурационного пространства ты можешь записать любой номер, только толку от этого ноль. BIOS туда пишет номера в диапазоне 0-15 лишь потому, что она активирует PIC, а не APIC.

Автор:  pavia [ 20 сен 2013, 05:37 ]
Заголовок сообщения:  Re: Номер прерывания PCI на IO/APIC

phantom-84 писал(а):
У PCI всего 4 пина. Линии могут разделяться. Могу использоваться линии в том числе и из диапазона 0-15. Не понятно, откуда взялась такая уверенность по поводу 16-19.

Дело в том что Интел решила разделить внутреннюю шину PCI(PCIE) и внешнюю шину PCI(PCIE).
Под внешней я имею ввиду это со слотами, а внутренняя эта та что в южном мосте.
Да на шине PCI - 4 пина. Но тут 2-шины поэтому 8 пинов.
Это описано в даташитах на мосты. Да раньше были общие линии прерываний.

На самом деле я это грубо описал. Там всё сложнее дело в том что никаких пинов нет, а есть прерывания на сообщениях (Message Signaled Interrupts). И да их можно перепрограммировать.

Собственно в даташитах на интел расписано как определять прерывания. Забыл правда как. А времени читать нету.

Автор:  Nable [ 20 сен 2013, 22:59 ]
Заголовок сообщения:  Re: Номер прерывания PCI на IO/APIC

> У PCI всего 4 пина.
К слову, хоть пинов действительно 4 (INT[A-D]#), но PCI interrupt link'ов может быть больше (дабы не париться с разделением). Как восстановлю одну такую материнку, постараюсь приложить логи при загрузке на ней. Конечно, во времена PCI-E тратить силы на поддержку всего этого legacy мало кому интересно, но всё же.

Автор:  Himik [ 21 сен 2013, 17:10 ]
Заголовок сообщения:  Re: Номер прерывания PCI на IO/APIC

Nable писал(а):
> У PCI всего 4 пина.
К слову, хоть пинов действительно 4 (INT[A-D]#), но PCI interrupt link'ов может быть больше (дабы не париться с разделением). Как восстановлю одну такую материнку, постараюсь приложить логи при загрузке на ней.

При загрузке материнки печатается таблица прерываний BIOS через PIC, это не то. Я смотрю в Windows "Диспетчер устройств", Вид - "Ресурсы по типу" - Прерывания (PCI).

Автор:  Nable [ 21 сен 2013, 19:13 ]
Заголовок сообщения:  Re: Номер прерывания PCI на IO/APIC

Причём тут BIOS? Я про, например, логи линуха с debug apic=debug.

Автор:  Himik [ 26 сен 2013, 14:15 ]
Заголовок сообщения:  Re: Номер прерывания PCI на IO/APIC

Всё, разобрался. Под объектом PCI0 есть объект APIC, который содержит массив элементов {устройство, прерывание} в формате Package.

Автор:  Himik [ 03 окт 2013, 23:11 ]
Заголовок сообщения:  Re: Номер прерывания PCI на IO/APIC

Оказалось, что объект "APIC" есть только в компах с BIOSом от Award. Зато во всех компьютерах есть объекты LNKA...LNKH, описывающие все 8 пинов PCI, но чтобы их расшифровать, нужен полноценный интерпретатор AML. Проект https://acpica.org предлагает готовый интерпретатор, так с ним ещё самим разбираться надо. Пока отложим на дальнюю перспективу. Сейчас будет использоваться только объект "APIC", это решает проблему на большинстве компьютеров.

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/