Board.KolibriOS.org

Official KolibriOS board
It is currently Fri Nov 22, 2019 11:30 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 167 posts ]  Go to page Previous 1 2 3 4 512 Next
Author Message
 Post subject: Re: APIC
PostPosted: Mon Jan 19, 2009 4:09 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
как вариант могу предложить реализовать простой вариант, по типу linux probe_irq_on/probe_irq_off.
Смысл там такой:
Code:
probe_irq_on();
говорим_жлезке_сделать_irq();
sleep(немного);
irq = probe_irq_off();

probe_irq_off возвращает номер irq произошедшего за время после probe_irq_on.
Можно и более гуманный способ, (тоже как в linux), тоже самое, но мы зарание знаем возможные номера irq, тогда ловим только с них...
Как идея?


Top
   
 Post subject: Re: APIC
PostPosted: Mon Jan 19, 2009 4:35 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Лучше завести глобальную переменную irq_mode: IRQ_PIC IRQ_APIC и высталяеть её при загрузке ядра. Плохо нет файлов конфигурации.


Top
   
 Post subject: Re: APIC
PostPosted: Mon Jan 19, 2009 5:00 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
Така переменная уже есть, почти
ACPI
но ка я понимаю если в пик моде все просто, то в апик вектор может менятся и его всетки надо определять


Top
   
 Post subject: Re: APIC
PostPosted: Mon Jan 19, 2009 5:50 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Ghost

Да, вектора меняются для всех PCI устройств. И простого и надёжного способа определения не видно. Через ACPI пока нашлась таблица только для PCI 0 т.е. для встроенных устройств южного моста. Для внешних устройств видимо надо определять с учётом ротации как писал Pavia


Top
   
 Post subject: Re: APIC
PostPosted: Mon Jan 19, 2009 6:58 pm 
Offline

Joined: Sun Mar 11, 2007 4:05 pm
Posts: 64
Для PIC тоже определять надо. Можно еще через PCI BIOS или PCI IRQ Routing Table.
Windows вначале пробает ACPI потом PCI IRQ Routing Table.

_________________
http://wiki.osdev.ru/


Top
   
 Post subject: Re: APIC
PostPosted: Mon Jan 19, 2009 7:00 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
Serge когда смотрел код линуха (вроде 2.0.* или даже младше), там есть функция найти устройство с заданным Vend.ID/Dev.ID на который система возвращает структуру-элемент pci, в это структуре есть поле irq, как я понимаю оно заполняется например с помощью ACPI, если это поле 0, то драйвер определяет irq своего устройства методом probe_irq_on/probe_irq_off, если не нуль то просто использует это значение.

P.S. кстати про код из linux, рекоммендую обратить внимание на OpenSolaris, там тоже много интересных решений, и при том что в ней поддерживается меньше платформ - проще читать код и меньше универсального мусора.


Top
   
 Post subject: Re: APIC
PostPosted: Mon Jan 19, 2009 7:04 pm 
Offline

Joined: Sun Mar 11, 2007 4:05 pm
Posts: 64
Насколько я помню там если в структуре 0, то вызывается функция что-то типмо получить IRQ.

_________________
http://wiki.osdev.ru/


Top
   
 Post subject: Re: APIC
PostPosted: Mon Jan 19, 2009 7:08 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
Да, только это процедура драйвера, ибо только он знает как высечь из железки прерывание )


Top
   
 Post subject: Re: APIC
PostPosted: Mon Jan 19, 2009 7:54 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Pavia

Для PIC bios прописывает вектора в pci config. Пока мне попадалось только одно исключение, так что можно обойтись.

Ghost

Проверять вектора "методом тыка" как то сомнительно. Это надо гарантировано остановить все устройства и ядро. А если драйвер загружается когда система уже работает это практически невозможно.


Top
   
 Post subject: Re: APIC
PostPosted: Mon Jan 19, 2009 8:11 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
На самом деле во время работы системы тоже не проблема, есть у нас вызов irq_serv.irq_* в нем просто фиксируем факт прерывания, и отдаем текущему обработчику, (в линукс такие счетчики крутятся постоянно, в рамках мониторинга ядра), проводим N таких испытаний, в итоге по разности множеств прерываний (в общем случае за промежуток времени может произойти несколько irq) можем найти наше - заветное ). Главное уметь просить железяку прерывание произвести, но сколько помню, все устройства это умеют.

Вроде как остается загвоздка в правильной настройне IO-APIC (edge/triged, hight/low level etc)

P.S. пиво пью, поэтому на очепятки не обращайте внимания.


Top
   
 Post subject: Re: APIC
PostPosted: Mon Jan 19, 2009 8:28 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Наверное разработчики железа и Биос ведут войну с разработчиками ОС.
Простое действие превращается в шаманство.
Я попробую доделать код с ACPI но:
драйвер сильно шустрый. Чтобы получит таблицу с прерываниями надо инициализировать подсистемы acpica. При этом драйвер начинает активно читать и писать память, порты, pci cfg и ещё ставит обработчик SCI на irq 9.


Top
   
 Post subject: Re: APIC
PostPosted: Mon Jan 19, 2009 8:29 pm 
Offline

Joined: Sun Mar 11, 2007 4:05 pm
Posts: 64
IO-APIC настраивать благодать.
0 провод от каскада PIC маскируем.
Остальные 1-15 настраиваем как для ISA. Запуск фронтом.
последнии 16-23 настраиваем как PCI. Запуск уровнем поляризация непомню какая вроде низкий уровень поляризации.
Способ доставки надо подсмотреть у линукса или виндовса. Скорее всего фиксированный.
Только указать адресс процессора который будет обробатывать прерывание.
Регистры описаны http://wiki.osdev.ru/index.php/I/O_APIC

_________________
http://wiki.osdev.ru/


Top
   
 Post subject: Re: APIC
PostPosted: Mon Jan 19, 2009 8:39 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Ghost

Если прерывания расшарены будут сложности.


Top
   
 Post subject: Re: APIC
PostPosted: Mon Jan 19, 2009 8:41 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
Pavia
Ну дык это уже и сейчас есть, смотри/пробуй мой патчь download/file.php?id=563
Остался вопрос как драйверу определить irq совего устройства

Serge
пусть пишет, жалко чтоли )) лиш бы работал.
Не должно быть сложностей, так как мы повторяем процедуру несколько раз (например 5), и во время её мы принудительно просим железку извергнуть прерыване, думаю проблем с расшаренными не должно быть (так как расшарены только прерывания а не управляющие регистры).


Top
   
 Post subject: Re: APIC
PostPosted: Mon Jan 19, 2009 8:49 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
Pavia, Serge раз уж все в сети, может в ирку?


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 167 posts ]  Go to page Previous 1 2 3 4 512 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


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