APIC

Internal structure and you change requests/suggestions
  • Я немного не понял, 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 тактов, не больше.
  • Почищу я это безобразие в следующем коммите.
    Плохо что 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. Необходимость второго этапа будет видна после реализации первого.
  • 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.
    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, глядишь...
  • Основная заслуга принадлежит Ghost-y. Весь код для APIC написал он.
  • SoUrcerer wrote: следующей версии Колибри может сразу номер 0.9.0.0 дадим? А там и 0.10.0.0, глядишь...[/offtopic]
    Версии Колибри нумеруется в десятичной системе для каждого разряда. По крайней мере так задумывалось изначально. Следовательно за версией 0.9.9.9 идет 1.0.0.0, а никак не 0.10.0.0
  • Serge
    У меня два вопроса:
    1) Требуется полномасштабное тестирование?
    2) На данном этапе есть какое-либо практическое применение или это все-же один из промежуточных этапов внедрения?
  • Mario
    1)Тестирование всегда нужно. Интересно сравнить логи нумератора (drivers/acpi.log) на разных компьютерах.
    2)Что понимается под практическим применением ? Это контроллер прерываний. Без него операционная система не работает. Если сравнивать PROFIT с работой через 8259A то не знаю.
    Может уменьшится время доставки прерывания от устройства к процессору.
    art_zh сможет использовать MSI в своих разработках.
    Наконец это маленький шажок к SMP.
  • Who is online

    Users browsing this forum: No registered users and 5 guests