Page 2 of 2

Re: Обработка IRQ

Posted: Wed Aug 17, 2011 2:06 pm
by art_zh
Serge wrote:Зашёл на сайт Intel поискать pdf-ы. Что они сделали с документацией ? Просто нет приличных слов.
Я давно плюнул на эту помойку и сверяюсь только AMD-доками. Но они могут быть кое в чем несовместимыми с Intel.
И еще есть книжка по архитектуре PCI Express - там все железо очень понятно описано.

MSI с точки зрения шины - это самая обычная операция записи 16 бит по известному некэшируемому адресу.

С точки зрения устройства - это уже не совсем обычная запись, потому что само устройство может только инициировать "запрос номер такой-то", а про адрес и данные оно ничего не знает. Куда и что записывать, и разрешать ли эту запись вообще - это определяет драйвер.

С точки зрения драйвера - тут прорва работы.
Если не вдаваться в детали - то надо для начала назначить устройству некий диапазон векторов, узнать адрес MMIO-блока регистров MSI-запросов LAPIC, записать туда все вектора и открыть нужные маски, а потом пробежать по MSI-цепочке в конфигспейсе устройства (Capability=5) и записать туда данные мессиджа и MMIO-адреса LAPIC для каждого вектора.

MSI я свои железяки научил генерить (мессиджи пишутся в программный буфер, вроде аппаратно-генерируемых семафоров), но с LAPIC никогда не работал.

Re: Обработка IRQ

Posted: Wed Aug 17, 2011 3:43 pm
by Serge
С msi я разобрался. Особых проблем не видно, если не только не опасаться нехватки векторов прерываний. Никакие данные msi в обработчик передать не может, как и обычное прерывание. На драйвер нагрузка тоже не велика, большую часть операций должно делать ядро. Например драйвер вызывает attach_msi_irq(bdf, cfg_addr, user_data) и ядро само выбирает свободный вектор и программирует железо.

Мне понравилась реализация irq в R600+. Аналог командного процессора но наоборот. Устройство пишет в кольцевой буфер 128 бит в следующем формате

Code: Select all

/*        r600 IV Ring
 * Each IV ring entry is 128 bits:
 * [7:0]    - interrupt source id
 * [31:8]   - reserved
 * [59:32]  - interrupt source data
 * [127:60]  - reserved
 *
 * The basic interrupt vector entries
 * are decoded as follows:
 * src_id  src_data  description
 *      1         0  D1 Vblank
 *      1         1  D1 Vline
 *      5         0  D2 Vblank
 *      5         1  D2 Vline
 *     19         0  FP Hot plug detection A
 *     19         1  FP Hot plug detection B
 *     19         2  DAC A auto-detection
 *     19         3  DAC B auto-detection
 *     21         4  HDMI block A
 *     21         5  HDMI block B
 *    176         -  CP_INT RB
 *    177         -  CP_INT IB1
 *    178         -  CP_INT IB2
 *    181         -  EOP Interrupt
 *    233         -  GUI Idle
Сдаётся мне что между src_id=1 src_id=233 занято намного больше значений.

Re: Обработка IRQ

Posted: Sun Aug 21, 2011 3:42 pm
by Serge
Удалил функции 41,42,44,45. Ф. 43 кандидат на удаление в ближайшее время. Смысла в ней уже давно нет, потому что есть прямой доступ к портам, защищённый битовой картой доступа. Если кто-то использует ф.43 замените её обычными командами in/out.

Re: Обработка IRQ

Posted: Sun Aug 21, 2011 7:37 pm
by Mario
А есть уверенность, что какая-нибудь из сетевых программ не использует эти функции?

Re: Обработка IRQ

Posted: Sun Aug 21, 2011 9:01 pm
by Serge
А зачем им ? Только ppp работает с COM портом. Дайлап ещё актуален ?

Re: Обработка IRQ

Posted: Sun Aug 21, 2011 9:19 pm
by Mario
Не знаю, но не мешало бы проверить исходники на SVN, чтобы потом "грабли" не кричать. :wink:

Re: Обработка IRQ

Posted: Sun Aug 21, 2011 10:49 pm
by Serge
А всё равно пришлось бы убирать. Так с прерываниями не работают.

Re: Обработка IRQ

Posted: Wed Aug 24, 2011 2:08 pm
by Serge
Залил расшареные обработчики на SVN. Весь код собран в core/irq.inc. Дальше буду частями заливать APIC.

Re: Обработка IRQ

Posted: Wed Aug 24, 2011 2:33 pm
by mike.dld
core/irq.inc, FTFY. Не нужно травмировать людей.

Re: Обработка IRQ

Posted: Wed Aug 24, 2011 2:35 pm
by Serge
Уже исправил. И не только irq.inc.

Re: Обработка IRQ

Posted: Wed Aug 24, 2011 4:37 pm
by Mario
Ох уж эти сишники. :wink: