Board.KolibriOS.org
http://board.kolibrios.org/

Обработка IRQ
http://board.kolibrios.org/viewtopic.php?f=35&t=728
Page 2 of 2

Author:  art_zh [ Wed Aug 17, 2011 2:06 pm ]
Post subject:  Re: Обработка IRQ

Serge wrote:
Зашёл на сайт Intel поискать pdf-ы. Что они сделали с документацией ? Просто нет приличных слов.

Я давно плюнул на эту помойку и сверяюсь только AMD-доками. Но они могут быть кое в чем несовместимыми с Intel.
И еще есть книжка по архитектуре PCI Express - там все железо очень понятно описано.

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

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

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

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

Author:  Serge [ Wed Aug 17, 2011 3:43 pm ]
Post subject:  Re: Обработка IRQ

С msi я разобрался. Особых проблем не видно, если не только не опасаться нехватки векторов прерываний. Никакие данные msi в обработчик передать не может, как и обычное прерывание. На драйвер нагрузка тоже не велика, большую часть операций должно делать ядро. Например драйвер вызывает attach_msi_irq(bdf, cfg_addr, user_data) и ядро само выбирает свободный вектор и программирует железо.

Мне понравилась реализация irq в R600+. Аналог командного процессора но наоборот. Устройство пишет в кольцевой буфер 128 бит в следующем формате
Code:
/*        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 занято намного больше значений.

Author:  Serge [ Sun Aug 21, 2011 3:42 pm ]
Post subject:  Re: Обработка IRQ

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

Author:  Mario [ Sun Aug 21, 2011 7:37 pm ]
Post subject:  Re: Обработка IRQ

А есть уверенность, что какая-нибудь из сетевых программ не использует эти функции?

Author:  Serge [ Sun Aug 21, 2011 9:01 pm ]
Post subject:  Re: Обработка IRQ

А зачем им ? Только ppp работает с COM портом. Дайлап ещё актуален ?

Author:  Mario [ Sun Aug 21, 2011 9:19 pm ]
Post subject:  Re: Обработка IRQ

Не знаю, но не мешало бы проверить исходники на SVN, чтобы потом "грабли" не кричать. :wink:

Author:  Serge [ Sun Aug 21, 2011 10:49 pm ]
Post subject:  Re: Обработка IRQ

А всё равно пришлось бы убирать. Так с прерываниями не работают.

Author:  Serge [ Wed Aug 24, 2011 2:08 pm ]
Post subject:  Re: Обработка IRQ

Залил расшареные обработчики на SVN. Весь код собран в core/irq.inc. Дальше буду частями заливать APIC.

Author:  mike.dld [ Wed Aug 24, 2011 2:33 pm ]
Post subject:  Re: Обработка IRQ

core/irq.inc, FTFY. Не нужно травмировать людей.

Author:  Serge [ Wed Aug 24, 2011 2:35 pm ]
Post subject:  Re: Обработка IRQ

Уже исправил. И не только irq.inc.

Author:  Mario [ Wed Aug 24, 2011 4:37 pm ]
Post subject:  Re: Обработка IRQ

Ох уж эти сишники. :wink:

Page 2 of 2 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/