Page 8 of 12

Re: APIC

Posted: Tue Jul 26, 2011 11:24 pm
by Serge
Да. Здесь можно не кодить. А вот вменяемая система именования всех устройств очень нужна.

Re: APIC

Posted: Sat Aug 20, 2011 10:21 am
by maximYCH
Я немного не понял, APIC овский код сейчас стабилен? Тот, что из kolibri-acpi я имею ввиду.

Re: APIC

Posted: Sat Aug 20, 2011 10:24 am
by Serge
Вполне. Ждёт частичной заливки на транк.

Re: APIC

Posted: Thu Aug 25, 2011 11:53 am
by Serge
Кто-нибудь знает, нужен этот pic_delay, или его можно смело удалить ? Я думаю что на всех Pentium+ чипсетах он не нужен

Code: Select all

pic_delay:
        jmp     pdl1
pdl1:   ret

rerouteirqs:
        cli
        mov     al,0x11         ;  icw4, edge triggered
        out     0x20,al
        call    pic_delay
        out     0xA0,al
        call    pic_delay

Re: APIC

Posted: Thu Aug 25, 2011 12:39 pm
by art_zh
По-моему, это не более чем дань древней традиции -- давать микросекундную задержку между двумя последовательными обращениями к портам одного контроллера. В старых 286/386 BIOSах иначе с портами и не работали. Если порты собраны на отдельных микросхемах (8251, 8250 и т.п.) - только так можно было гаратнировать надежное переключение их входных CMOS-ключей.
Сейчас эти задержки реально не нужны, все контроллеры сидят на внутренних мостовых шинах и надежно переключаются без шаманских софтовых плясок.
К тому же на современных CPU реальная задержка этого кода все равно будет 5-10 тактов, не больше.

Re: APIC

Posted: Thu Aug 25, 2011 1:05 pm
by Serge
Почищу я это безобразие в следующем коммите.
Плохо что IA32 ISA нет аналога nanosleep(). Везде приходится извращаться, гонять пустые циклы или писать в отсутствующий порт.

Re: APIC

Posted: Thu Aug 25, 2011 10:13 pm
by SII
Ну а PIC так вообще является частью чипсета давным-давно, это не какой-то внешний контроллер непонятного производителя, который может быть и тормозным... По идее, если при работе с ним нужны были бы задержки, это оговаривалось бы в документации на чипсет, но я такого не припомню.

Re: APIC

Posted: Mon Sep 05, 2011 9:29 am
by Ghost
Hello guys! ) ну и CleverMouse

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

Serge как всегда говорит правильные вещи. ACPI системе нужен как воздух. И нужен он не только для IRQ, в нем много вещей можно делать. Прочитайте мельком ASL, декомпилируйте AML из своего ACPI кода и вы увидите что часть драйверов есть в самой системе, и они уже запилены под конкретную логику. И кстати информация про APIC, SMB, SIO(wtf?), HPET там есть. Ну и плюшки вроде спец кнопок от Power до специфичных на буках там тоже есть.

>>А что решил делать с именованием?
Если мне память не изменяет то в ASL есть именования типовых устройств, можно пользоваться им.

А, ну и какие у меня мысли об этом.
На первом этапе вкорячить ACPICA/linux ACPI, и отладить получившуюся архитектуру. Вторым этапом переводить интерпретатор на ассемблер, для этого нужен человек хорошо разбирающийся в ASL/AML. Необходимость второго этапа будет видна после реализации первого.

Re: APIC

Posted: Mon Sep 05, 2011 9:59 am
by Serge
Ghost
Привет ! Рад, что ты вернулся. Твой патч замечательно работает. Буду постепенно переносить его в транк. Не спеша, без революций.

Re: APIC

Posted: Fri Sep 23, 2011 6:02 pm
by Serge
В ревизии #2231 залил поддержку APIC в основное ядро. Чтобы включить APIC надо:
1)Скомпилировать и записать в образ ядро #2231+ или скачать свежую ночную сборку.
2)Скачать и записать в /rd/1/drivers нумератор устройств.
4)Освободить в образе несколько килобайт для лога ACPI. (У меня 12 Кб)
5)Загрузить систему и запустить /rd/1/drivers/acpi
6)Убедиться, что папке /rd/1/drivers присутсвует файл devices.dat
7)Сделать рестарт ядра
9)Проверить работу ядра и драйверов
10)Удалить нумератор устройств и сохранить образ. Теперь APIC будет включаться при каждой загрузке ядра.

Детали реализации.

Ядро в процессе инициализации, ещё до переключения в режим страничной адресации, читает таблицы ACPI и определяет базовые адреса IOAPIC и Local APIC. На втором этапе функция APIC_init проверяет базовые адреса и загружает файл devices.dat. Если файл загружен успешно, ядро настраивает IOAPIC и Local APIC, переключает обработку прерываний в режим APIC и патчит номера линий IRQ в конфигурационном пространстве PCI значениями из devices.dat.

Re: APIC

Posted: Fri Sep 23, 2011 8:18 pm
by SoUrcerer
Великое событие. Поздравляю, Serge!
Протестирую завтра утром, сегодня уже сил нет.

: Замечательный сегодня день. Я вот что думаю: следующей версии Колибри может сразу номер 0.9.0.0 дадим? А там и 0.10.0.0, глядишь...

Re: APIC

Posted: Fri Sep 23, 2011 8:55 pm
by Serge
Основная заслуга принадлежит Ghost-y. Весь код для APIC написал он.

Re: APIC

Posted: Fri Sep 23, 2011 9:20 pm
by Mario
SoUrcerer wrote: следующей версии Колибри может сразу номер 0.9.0.0 дадим? А там и 0.10.0.0, глядишь...[/offtopic]
Версии Колибри нумеруется в десятичной системе для каждого разряда. По крайней мере так задумывалось изначально. Следовательно за версией 0.9.9.9 идет 1.0.0.0, а никак не 0.10.0.0

Re: APIC

Posted: Fri Sep 23, 2011 9:23 pm
by Mario
Serge
У меня два вопроса:
1) Требуется полномасштабное тестирование?
2) На данном этапе есть какое-либо практическое применение или это все-же один из промежуточных этапов внедрения?

Re: APIC

Posted: Fri Sep 23, 2011 10:02 pm
by Serge
Mario
1)Тестирование всегда нужно. Интересно сравнить логи нумератора (drivers/acpi.log) на разных компьютерах.
2)Что понимается под практическим применением ? Это контроллер прерываний. Без него операционная система не работает. Если сравнивать PROFIT с работой через 8259A то не знаю.
Может уменьшится время доставки прерывания от устройства к процессору.
art_zh сможет использовать MSI в своих разработках.
Наконец это маленький шажок к SMP.