Обработчик прерывания должен учитывать, что прерывание может прийти откуда угодно, и не пытаться обрабатывать прерывание до того, как целевое устройство ответило "да" на вопрос "это ты сгенерировало прерывание?"
В принципе ещё нужно возвращать из обработчика ненулевое значение в eax, если прерывание обработано, и нулевое, если прерывание чужое, но прямо сейчас от нарушения этого правила ничего не сломается - irq_serv.main в любом случае проходит по всей цепочке.
Новые драйвера для ATI Radeon.
-
Сделаем мир лучше!
CleverMouse
Спасибо за информацию. Значит ошибка в видеодрайвере.
Проходить по всей цепочке всё равно надо. Активные прерывания могут быть от нескольких устройств сразу. Возвращаемое значение тоже важно. В идеале ядро должно блокировать линию в случае большого количества необработанных irq. Это 100% проблемы с железом и неработоспособность системы. Колибри пока только считает такие прерывания. В линуксе включается режим эмуляции. Ядро периодически вызывает обработчики, получается работа в режиме опроса.
Спасибо за информацию. Значит ошибка в видеодрайвере.
Проходить по всей цепочке всё равно надо. Активные прерывания могут быть от нескольких устройств сразу. Возвращаемое значение тоже важно. В идеале ядро должно блокировать линию в случае большого количества необработанных irq. Это 100% проблемы с железом и неработоспособность системы. Колибри пока только считает такие прерывания. В линуксе включается режим эмуляции. Ядро периодически вызывает обработчики, получается работа в режиме опроса.
Опять же оффтоп, но переключиться на APIC не пробовал? Это может быть и железной проблемой PIC-контроллера.Mario_r4 wrote:У меня код для SATA IDE DMA на одной конфигурации работает, но при этом USB отваливается уже после первого обращения к диску (оба контроллера задействуют одно прерывание). Как разрулить пока не понял.
Сделаем мир лучше!
Нет, не пробовал. Там довольно заметный кусок кода нужно менять. Я получаю все данные в RM, а надо переводить получение в PM процессора.CleverMouse wrote:Опять же оффтоп, но переключиться на APIC не пробовал? Это может быть и железной проблемой PIC-контроллера.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Mario_r4
У тебя же Интел платформа, то есть там UHCI контроллер ?
У тебя же Интел платформа, то есть там UHCI контроллер ?
Нет, проблема с отваливанием USB происходит на AMD 770 чипсете.Serge wrote:Mario_r4
У тебя же Интел платформа, то есть там UHCI контроллер ?
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
DmitrySokolowsky
А у тебя процессор команду lfence поддерживает ?
А у тебя процессор команду lfence поддерживает ?
Не знаю, процессор E-450
Serge
Поменяй пожалуйста путь по умолчанию с tmp1 на tmp0.
Поменяй пожалуйста путь по умолчанию с tmp1 на tmp0.
Традиционное ежегодное обновление http://ftp.kolibrios.org/users/Serge/ne ... .16-rc3.7z Я наконец привёл в рабочее состояние TTM, теперь поддерживать актуальную версию будет проще. И можно приниматься за акселерацию.
http://ftp.kolibrios.org/users/Serge/ne ... .17-rc1.7z
Свежий пре-релиз. Прошу протестировать.
Свежий пре-релиз. Прошу протестировать.
Serge, ты специально собираешь драйверы с Subsystem:console, чтобы загрузчик в ядре никак не мог отличить их от обычных usermode DLL?
Сделаем мир лучше!
CleverMouse
Нет, это происки ld.
А принципиальная разница есть ?
Нет, это происки ld.
А принципиальная разница есть ?
Принципиальной разницы нет, но это всё-таки драйвер, а не DLL. К вопросу о Subsystem, ещё интересно было бы выставлять Major/MinorSubsystemVersion менее дефолтными, например, 0.80.
Сделаем мир лучше!
Как такой вариант ?
__major_os_version__ = 0
__minor_os_version__ = 7 ; 0.7.0.0 или уже 0.8 ?
__major_subsystem_version__ = 0
__minor_subsystem_version__ = 5 ; драйверная модель 05 или 0.5
__subsystem__ = 1
__major_os_version__ = 0
__minor_os_version__ = 7 ; 0.7.0.0 или уже 0.8 ?
__major_subsystem_version__ = 0
__minor_subsystem_version__ = 5 ; драйверная модель 05 или 0.5
__subsystem__ = 1
Who is online
Users browsing this forum: No registered users and 2 guests