OSDev

для всех
Текущее время: 29 мар 2024, 11:33

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Номер прерывания PCI на IO/APIC
СообщениеДобавлено: 19 сен 2013, 12:53 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Номер прерывания PCI на IO/APIC
СообщениеДобавлено: 19 сен 2013, 23:32 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Номер прерывания PCI на IO/APIC
СообщениеДобавлено: 19 сен 2013, 23:45 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Это интересно, спасибо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Номер прерывания PCI на IO/APIC
СообщениеДобавлено: 20 сен 2013, 01:44 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Номер прерывания PCI на IO/APIC
СообщениеДобавлено: 20 сен 2013, 05:37 
Аватара пользователя

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

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Номер прерывания PCI на IO/APIC
СообщениеДобавлено: 20 сен 2013, 22:59 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Номер прерывания PCI на IO/APIC
СообщениеДобавлено: 21 сен 2013, 17:10 

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Номер прерывания PCI на IO/APIC
СообщениеДобавлено: 21 сен 2013, 19:13 

Зарегистрирован: 26 мар 2012, 17:32
Сообщения: 209
Причём тут BIOS? Я про, например, логи линуха с debug apic=debug.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Номер прерывания PCI на IO/APIC
СообщениеДобавлено: 26 сен 2013, 14:15 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Всё, разобрался. Под объектом PCI0 есть объект APIC, который содержит массив элементов {устройство, прерывание} в формате Package.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Номер прерывания PCI на IO/APIC
СообщениеДобавлено: 03 окт 2013, 23:11 

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB