Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Вт сен 19, 2017 11:47 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 26 сообщений ]  На страницу Пред. 1 2
Автор Сообщение
 Заголовок сообщения: Re: Обработка IRQ
СообщениеДобавлено: Ср авг 17, 2011 2:06 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пт авг 14, 2009 1:46 am
Сообщения: 1291
Serge писал(а):
Зашёл на сайт Intel поискать pdf-ы. Что они сделали с документацией ? Просто нет приличных слов.

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

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

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

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

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


Вернуться к началу
 Заголовок сообщения: Re: Обработка IRQ
СообщениеДобавлено: Ср авг 17, 2011 3:43 pm 
Не в сети
Kernel Developer

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

Мне понравилась реализация irq в R600+. Аналог командного процессора но наоборот. Устройство пишет в кольцевой буфер 128 бит в следующем формате
Код:
/*        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
СообщениеДобавлено: Вс авг 21, 2011 3:42 pm 
Не в сети
Kernel Developer

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


Вернуться к началу
 Заголовок сообщения: Re: Обработка IRQ
СообщениеДобавлено: Вс авг 21, 2011 7:37 pm 
А есть уверенность, что какая-нибудь из сетевых программ не использует эти функции?


Вернуться к началу
   
 Заголовок сообщения: Re: Обработка IRQ
СообщениеДобавлено: Вс авг 21, 2011 9:01 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3928
А зачем им ? Только ppp работает с COM портом. Дайлап ещё актуален ?


Вернуться к началу
 Заголовок сообщения: Re: Обработка IRQ
СообщениеДобавлено: Вс авг 21, 2011 9:19 pm 
Не знаю, но не мешало бы проверить исходники на SVN, чтобы потом "грабли" не кричать. :wink:


Вернуться к началу
   
 Заголовок сообщения: Re: Обработка IRQ
СообщениеДобавлено: Вс авг 21, 2011 10:49 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3928
А всё равно пришлось бы убирать. Так с прерываниями не работают.


Вернуться к началу
 Заголовок сообщения: Re: Обработка IRQ
СообщениеДобавлено: Ср авг 24, 2011 2:08 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3928
Залил расшареные обработчики на SVN. Весь код собран в core/irq.inc. Дальше буду частями заливать APIC.


Последний раз редактировалось Serge Ср авг 24, 2011 5:39 pm, всего редактировалось 1 раз.

Вернуться к началу
 Заголовок сообщения: Re: Обработка IRQ
СообщениеДобавлено: Ср авг 24, 2011 2:33 pm 
Не в сети
Site Founder
Аватара пользователя

Зарегистрирован: Вс авг 08, 2004 8:55 am
Сообщения: 690
core/irq.inc, FTFY. Не нужно травмировать людей.

_________________
in code we trust


Вернуться к началу
 Заголовок сообщения: Re: Обработка IRQ
СообщениеДобавлено: Ср авг 24, 2011 2:35 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3928
Уже исправил. И не только irq.inc.


Вернуться к началу
 Заголовок сообщения: Re: Обработка IRQ
СообщениеДобавлено: Ср авг 24, 2011 4:37 pm 
Ох уж эти сишники. :wink:


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

Часовой пояс: UTC+03:00


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

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


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

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