Board.KolibriOS.org

Official KolibriOS board
It is currently Sat Jul 20, 2019 9:27 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 26 posts ]  Go to page Previous 1 2
Author Message
PostPosted: Wed Aug 17, 2011 2:06 pm 
Offline
Kernel Developer
User avatar

Joined: Fri Aug 14, 2009 1:46 am
Posts: 1331
Serge wrote:
Зашёл на сайт Intel поискать pdf-ы. Что они сделали с документацией ? Просто нет приличных слов.

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

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

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

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

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


Top
   
PostPosted: Wed Aug 17, 2011 3:43 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
С 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 занято намного больше значений.


Top
   
PostPosted: Sun Aug 21, 2011 3:42 pm 
Offline
Kernel Developer

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


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


Top
   
PostPosted: Sun Aug 21, 2011 9:01 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
А зачем им ? Только ppp работает с COM портом. Дайлап ещё актуален ?


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


Top
   
PostPosted: Sun Aug 21, 2011 10:49 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
А всё равно пришлось бы убирать. Так с прерываниями не работают.


Top
   
PostPosted: Wed Aug 24, 2011 2:08 pm 
Offline
Kernel Developer

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


Last edited by Serge on Wed Aug 24, 2011 5:39 pm, edited 1 time in total.

Top
   
PostPosted: Wed Aug 24, 2011 2:33 pm 
Offline
Site Founder
User avatar

Joined: Sun Aug 08, 2004 8:55 am
Posts: 689
core/irq.inc, FTFY. Не нужно травмировать людей.

_________________
in code we trust


Top
   
PostPosted: Wed Aug 24, 2011 2:35 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Уже исправил. И не только irq.inc.


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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 26 posts ]  Go to page Previous 1 2

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited