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/ |