APIC
-
Да. Здесь можно не кодить. А вот вменяемая система именования всех устройств очень нужна.
Я немного не понял, APIC овский код сейчас стабилен? Тот, что из kolibri-acpi я имею ввиду.
Вполне. Ждёт частичной заливки на транк.
Кто-нибудь знает, нужен этот 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
По-моему, это не более чем дань древней традиции -- давать микросекундную задержку между двумя последовательными обращениями к портам одного контроллера. В старых 286/386 BIOSах иначе с портами и не работали. Если порты собраны на отдельных микросхемах (8251, 8250 и т.п.) - только так можно было гаратнировать надежное переключение их входных CMOS-ключей.
Сейчас эти задержки реально не нужны, все контроллеры сидят на внутренних мостовых шинах и надежно переключаются без шаманских софтовых плясок.
К тому же на современных CPU реальная задержка этого кода все равно будет 5-10 тактов, не больше.
Сейчас эти задержки реально не нужны, все контроллеры сидят на внутренних мостовых шинах и надежно переключаются без шаманских софтовых плясок.
К тому же на современных CPU реальная задержка этого кода все равно будет 5-10 тактов, не больше.
Почищу я это безобразие в следующем коммите.
Плохо что IA32 ISA нет аналога nanosleep(). Везде приходится извращаться, гонять пустые циклы или писать в отсутствующий порт.
Плохо что IA32 ISA нет аналога nanosleep(). Везде приходится извращаться, гонять пустые циклы или писать в отсутствующий порт.
Ну а PIC так вообще является частью чипсета давным-давно, это не какой-то внешний контроллер непонятного производителя, который может быть и тормозным... По идее, если при работе с ним нужны были бы задержки, это оговаривалось бы в документации на чипсет, но я такого не припомню.
Hello guys! ) ну и CleverMouse
Давненько меня тут не было. Как то все закрутилось, зарабатывание денег, жилье, покупка машины... Потихоньку буду перечитывать кучу новых сообщений в форуме, вникать в курс дела и освежать что осталось в памяти.
Serge как всегда говорит правильные вещи. ACPI системе нужен как воздух. И нужен он не только для IRQ, в нем много вещей можно делать. Прочитайте мельком ASL, декомпилируйте AML из своего ACPI кода и вы увидите что часть драйверов есть в самой системе, и они уже запилены под конкретную логику. И кстати информация про APIC, SMB, SIO(wtf?), HPET там есть. Ну и плюшки вроде спец кнопок от Power до специфичных на буках там тоже есть.
>>А что решил делать с именованием?
Если мне память не изменяет то в ASL есть именования типовых устройств, можно пользоваться им.
А, ну и какие у меня мысли об этом.
На первом этапе вкорячить ACPICA/linux ACPI, и отладить получившуюся архитектуру. Вторым этапом переводить интерпретатор на ассемблер, для этого нужен человек хорошо разбирающийся в ASL/AML. Необходимость второго этапа будет видна после реализации первого.
Давненько меня тут не было. Как то все закрутилось, зарабатывание денег, жилье, покупка машины... Потихоньку буду перечитывать кучу новых сообщений в форуме, вникать в курс дела и освежать что осталось в памяти.
Serge как всегда говорит правильные вещи. ACPI системе нужен как воздух. И нужен он не только для IRQ, в нем много вещей можно делать. Прочитайте мельком ASL, декомпилируйте AML из своего ACPI кода и вы увидите что часть драйверов есть в самой системе, и они уже запилены под конкретную логику. И кстати информация про APIC, SMB, SIO(wtf?), HPET там есть. Ну и плюшки вроде спец кнопок от Power до специфичных на буках там тоже есть.
>>А что решил делать с именованием?
Если мне память не изменяет то в ASL есть именования типовых устройств, можно пользоваться им.
А, ну и какие у меня мысли об этом.
На первом этапе вкорячить ACPICA/linux ACPI, и отладить получившуюся архитектуру. Вторым этапом переводить интерпретатор на ассемблер, для этого нужен человек хорошо разбирающийся в ASL/AML. Необходимость второго этапа будет видна после реализации первого.
Ghost
Привет ! Рад, что ты вернулся. Твой патч замечательно работает. Буду постепенно переносить его в транк. Не спеша, без революций.
Привет ! Рад, что ты вернулся. Твой патч замечательно работает. Буду постепенно переносить его в транк. Не спеша, без революций.
В ревизии #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.
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.
Last edited by Serge on Fri Sep 23, 2011 8:30 pm, edited 2 times in total.
Великое событие. Поздравляю, Serge!
Протестирую завтра утром, сегодня уже сил нет.
: Замечательный сегодня день. Я вот что думаю: следующей версии Колибри может сразу номер 0.9.0.0 дадим? А там и 0.10.0.0, глядишь...
Протестирую завтра утром, сегодня уже сил нет.
: Замечательный сегодня день. Я вот что думаю: следующей версии Колибри может сразу номер 0.9.0.0 дадим? А там и 0.10.0.0, глядишь...
Основная заслуга принадлежит Ghost-y. Весь код для APIC написал он.
Версии Колибри нумеруется в десятичной системе для каждого разряда. По крайней мере так задумывалось изначально. Следовательно за версией 0.9.9.9 идет 1.0.0.0, а никак не 0.10.0.0SoUrcerer wrote: следующей версии Колибри может сразу номер 0.9.0.0 дадим? А там и 0.10.0.0, глядишь...[/offtopic]
Serge
У меня два вопроса:
1) Требуется полномасштабное тестирование?
2) На данном этапе есть какое-либо практическое применение или это все-же один из промежуточных этапов внедрения?
У меня два вопроса:
1) Требуется полномасштабное тестирование?
2) На данном этапе есть какое-либо практическое применение или это все-же один из промежуточных этапов внедрения?
Mario
1)Тестирование всегда нужно. Интересно сравнить логи нумератора (drivers/acpi.log) на разных компьютерах.
2)Что понимается под практическим применением ? Это контроллер прерываний. Без него операционная система не работает. Если сравнивать PROFIT с работой через 8259A то не знаю.
Может уменьшится время доставки прерывания от устройства к процессору.
art_zh сможет использовать MSI в своих разработках.
Наконец это маленький шажок к SMP.
1)Тестирование всегда нужно. Интересно сравнить логи нумератора (drivers/acpi.log) на разных компьютерах.
2)Что понимается под практическим применением ? Это контроллер прерываний. Без него операционная система не работает. Если сравнивать PROFIT с работой через 8259A то не знаю.
Может уменьшится время доставки прерывания от устройства к процессору.
art_zh сможет использовать MSI в своих разработках.
Наконец это маленький шажок к SMP.
Who is online
Users browsing this forum: No registered users and 7 guests