Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Сб июл 22, 2017 5:41 am

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




Начать новую тему  Ответить на тему  [ 167 сообщений ]  На страницу 1 2 3 4 512 След.
Автор Сообщение
 Заголовок сообщения: APIC
СообщениеДобавлено: Вс янв 11, 2009 9:06 am 
Не в сети
Kernel Developer
Аватара пользователя

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

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

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


Вложения:
patch.txt [31.19 КБ]
219 скачиваний
Вернуться к началу
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: Вс янв 11, 2009 7:48 pm 
Не в сети
Kernel Developer

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

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

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


Вернуться к началу
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: Вс янв 11, 2009 9:13 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пн апр 16, 2007 6:38 pm
Сообщения: 1222
"Теперь не демаскируются все IRQ"

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

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


Вернуться к началу
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: Вс янв 11, 2009 9:14 pm 
Не в сети
Kernel Developer
Аватара пользователя

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

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

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

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


Вложения:
patch2.zip [9.57 КБ]
159 скачиваний
Вернуться к началу
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: Вс янв 11, 2009 9:22 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пн апр 16, 2007 6:38 pm
Сообщения: 1222
щас попробую - отпишусь..

попробовал

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

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


Вернуться к началу
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: Вс янв 11, 2009 10:56 pm 
Не в сети
Kernel Developer

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


Вернуться к началу
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: Вс янв 11, 2009 11:14 pm 
Не в сети
Kernel Developer
Аватара пользователя

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

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


Вернуться к началу
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: Пн янв 12, 2009 6:21 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3927
Ghost

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

Цитата:
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.

Код:
   ; 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


Вернуться к началу
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: Пн янв 12, 2009 7:24 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Пн мар 20, 2006 10:44 am
Сообщения: 557
О! А доки на ICH5 я не читал, буду читать....

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

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


Вернуться к началу
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: Вт янв 13, 2009 12:23 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3927
Ghost

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


Вернуться к началу
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: Вт янв 13, 2009 12:54 pm 
Не в сети
Kernel Developer
Аватара пользователя

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

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


Вернуться к началу
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: Вт янв 13, 2009 4:46 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3927
Прочитал MADT. Всё как в учебнике PIT назначен на irq2, контроллер ACPI на irq9
Цитата:
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]


Вернуться к началу
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: Вт янв 13, 2009 6:46 pm 
Не в сети
Kernel Developer
Аватара пользователя

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

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


Вложения:
workcopy.zip [571.17 КБ]
188 скачиваний
Вернуться к началу
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: Вт янв 13, 2009 7:40 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3927
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 стоят по фронту. Замапить и замаскировать. Это не расшареное прерывание.


Вернуться к началу
 Заголовок сообщения: Re: APIC
СообщениеДобавлено: Ср янв 14, 2009 2:12 pm 
Не в сети
Kernel Developer

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


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

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


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

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


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

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