Board.KolibriOS.org

Official KolibriOS board
It is currently Wed Jun 26, 2019 3:31 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 167 posts ]  Go to page 1 2 3 4 512 Next
Author Message
 Post subject: APIC
PostPosted: Sun Jan 11, 2009 9:06 am 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
Работаю над поддержкой APIC. В приложении патчь.
Патчь дает поддержку 24 IRQ. Теперь не демаскируются все IRQ, только те что используются, плюс некоторая чистка кода.
Осталось сделать:
1) калибровку таймера LAPIC (FIX ME в core/apic.inc)
2) исправить код shutdown.inc
3) перевод части IRQ на PIC, для поддержки устройств работающих через BIOS (v86)

Патчь не очень стабилен из за не правильной калибровки таймера, и рекоммендуется выключить поддержку BIOS дисков.
Продолжу работу не раньше сегодняшнего вечера. Пока жду комментариев, предложений.

P.S. diamond: спасибо за вчерашнюю помощь.


Attachments:
patch.txt [31.19 KiB]
Downloaded 290 times
Top
   
 Post subject: Re: APIC
PostPosted: Sun Jan 11, 2009 7:48 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Проверил у себя - работает но есть проблемы.
1) Индикатор показывает 100% загрузку, а CPU 0-1% загрузку OS/IDLE
2) При переходе на IOAPIC теряются номера irq из pci config. Аудиодрайвер перестаёт работать.

>перевод части IRQ на PIC, для поддержки устройств работающих через BIOS (v86)

Разве PIC и IOAPIC могут работать вместе ?


Top
   
 Post subject: Re: APIC
PostPosted: Sun Jan 11, 2009 9:13 pm 
Offline
User avatar

Joined: Mon Apr 16, 2007 6:38 pm
Posts: 1222
"Теперь не демаскируются все IRQ"

это решает проблему из viewtopic.php?f=1&t=1112 ?

_________________
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!


Top
   
 Post subject: Re: APIC
PostPosted: Sun Jan 11, 2009 9:14 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
Исправил калибровку таймера LAPIC, теперь проблемы со 100% загрузкой нет. Было связано с сильно маленьким квантом времени, сейчас настраивается как и положено 0,01 sec
Serge подробнее, что значит "теряются номера irq из pci config"? В некоторых звуковых драйверах есть работа с PIC на прямую, если перенастраивается irq, но в условиях как они лежат на svn этого нет.

> Разве PIC и IOAPIC могут работать вместе ?
Сейчас это проверяю ) по хорошему это разные микросхемы (как было изначально) паралельно подключенные к INT и INTA, и никто не мешает путем маскирования на одном, и демоскирования на другом выбирать от кого хотим получать IRQ.

Так как не модифицировал shutdown.inc то не работает перезагрузка ядра, выключение и перезагрузка работают.
У кого есть желание проверьте работаспособность, может ещё какие то баги найдутся.

Gluk твою проблему с irq 0x0e думаю да, тебе и карты в руки проверять )


Attachments:
patch2.zip [9.57 KiB]
Downloaded 226 times
Top
   
 Post subject: Re: APIC
PostPosted: Sun Jan 11, 2009 9:22 pm 
Offline
User avatar

Joined: Mon Apr 16, 2007 6:38 pm
Posts: 1222
щас попробую - отпишусь..

попробовал

вку.. работает!
все круто, супер))
теперь не придется держать
два репозитория - для ноута и домашнего компа!..

_________________
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!


Top
   
 Post subject: Re: APIC
PostPosted: Sun Jan 11, 2009 10:56 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Биос программирует чипсет и линии PIC и записывает их номера в pci config устройств. В режиме APIC прерывания от pci устройств намертво припаяны к линиям APIC ( точно до ICH5 включительно). На моём чипсете Биос назначает АС97 IRQ5, а в режиме APIC это #PIRQB = IRQ17.


Top
   
 Post subject: Re: APIC
PostPosted: Sun Jan 11, 2009 11:14 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
Serge
В MultiProcessor Specification есть глава 5. Default Configurations, с веселыми картинками ), судя по которым PIC каскадно подключен к APIC и через ключь к процессору, и его можно использовать паралельно с APIC.

P.S. тепер понял про проблему с PCI, надо что то решать. Как первый варинт (и прозьба за одно проверить), регистрировать драйвер на IRQ17, за одно проверим работают ли IRQ > 15.


Top
   
 Post subject: Re: APIC
PostPosted: Mon Jan 12, 2009 6:21 pm 
Offline
Kernel Developer

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

Драйвер заработал через irq 17 но надо программировать irq 16-23 какак level-triggered active-low

Quote:
2. When programming the polarity of internal interrupt sources on the APIC, interrupts 0 through 15 receive
active-high internal interrupt sources, while interrupts 16 through 23 receive active-low internal interrupt
sources.
4. PCI Message interrupts are not prevented by hardware in these cases. However, the system must not
program these interrupts as edge-triggered (as required for PCI message interrupts) because the internal
and external PIRQs on these inputs must be programmed in level-triggered modes.

Code:
   ; Reroute IOAPIC & mask all interrupts
    xor ecx, ecx
    mov eax, IOAPIC_REDTBL
@@:
    mov ebx, eax
    call    IOAPIC_read
    mov ah, 0x09           ; Delivery Mode: Lowest Priority, Destination Mode: Logical
    mov al, cl
    add al, 0x20           ; vector
    or  eax, 0x10000       ; Mask Interrupt
    cmp ecx, 16
    jb  .set
    or eax, 0xa000         ;<<< level-triggered active-low
.set:
    xchg    eax, ebx
    call    IOAPIC_write


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

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
О! А доки на ICH5 я не читал, буду читать....

Есть идея irq0-15 завести через PIC (IOAPIC 0 Ext.), остальные через APIC. И вектора развести, от PIC отсавить 0x20+, а от APIC например 0x50+

Еще вопрос, у устройства можно узнать что оно к #PIRQB подключено?


Top
   
 Post subject: Re: APIC
PostPosted: Tue Jan 13, 2009 12:23 pm 
Offline
Kernel Developer

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

Похоже что самый надёжный способ через ACPI. Я попробую сделать дамп таблиц. Там есть MADT с настройками векторов для IOAPIC


Top
   
 Post subject: Re: APIC
PostPosted: Tue Jan 13, 2009 12:54 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
Serge это будет прекрассно, не хотел сам братся за ACPI, в лучшем случае подумывал о MPTable, но она у UP машин есть редко.

Идея завести irq0-15 через PIC связана с поддержкой BIOS дисков, BIOS в части вызова функций в RM про APIC не знает, он работает в рамках PIC.


Top
   
 Post subject: Re: APIC
PostPosted: Tue Jan 13, 2009 4:46 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Прочитал MADT. Всё как в учебнике PIT назначен на irq2, контроллер ACPI на irq9
Quote:
Local APIC at fee00000

Local APIC [Id: 0x0, CPU Id: 0x0, enabled]
Local APIC [Id: 0x1, CPU Id: 0x1, enabled]
I/O APIC [Id: 0x2, IRQ base: 0, Addr: 0xfec00000]

Interrupt Override [ISA, Bus IRQ: 0, Glob IRQ: 2, Pol: conform, Trigger: conform]
Interrupt Override [ISA, Bus IRQ: 9, Glob IRQ: 9, Pol: active high, Trigger: level]

Local APIC NMI
[CPU id: 0, LINT#: 1 Pol: conform, Trigger: conform]

Local APIC NMI
[CPU id: 1, LINT#: 1 Pol: conform, Trigger: conform]


Top
   
 Post subject: Re: APIC
PostPosted: Tue Jan 13, 2009 6:46 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Mar 20, 2006 10:44 am
Posts: 557
как из таблицы видно что "PIT назначен на irq2, контроллер ACPI на irq9"?
то что PIT подключен к INTIN2 это дефолтная конфигурация, тут все понятно (кстати это не аксиома, на некоторых машинах и в qemu не так, код есть apic.inc -> unmask_timer).
Что делать с прерыванием ACPI?

P.S. в приложении work copy целиком
Всех с наступающим!


Attachments:
workcopy.zip [571.17 KiB]
Downloaded 254 times
Top
   
 Post subject: Re: APIC
PostPosted: Tue Jan 13, 2009 7:40 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Interrupt Override [ISA, Bus IRQ: 0, Glob IRQ: 2, Pol: conform, Trigger: conform]
ISA, Bus IRQ: 0 - irq 0 на шине ISA мапится на Glob IRQ 2
Glob IRQ это линии APIC (0 - 23)

>Что делать с прерыванием ACPI?
Он и на PIC идёт как irq9. Но у него нестантдартные настройки: active high и по уровню а все ISA стоят по фронту. Замапить и замаскировать. Это не расшареное прерывание.


Top
   
 Post subject: Re: APIC
PostPosted: Wed Jan 14, 2009 2:12 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Скомпилировал acpica драйвер. Уже загружается и проходит инициализацию, ставит обработчик на irq9. Остаётся сделать нормальный frontend и будет полноценная поддержка acpi.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 167 posts ]  Go to page 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:  
cron
Powered by phpBB® Forum Software © phpBB Limited