RU/2: Форум. Общение пользователей и разработчиков OS/2 (eCS). : PCI Dock


Список сообщений | Написать новое | Ответить на сообщение | Домой Поиск:
Предыдущее сообщение | Следующее сообщение
From : Slavik Gnatenko, 2:467/99
To : Igor Vaskov
Subj : PCI Dock

> Поставил Subj. Полюбовался на то, что на одном прерывании висит несколько устройств. Программа утверждает, что так быть не должно.
> Возник закономерный вопрос. Что делать? Ну не революцию же.
Возможно, что и ничего. Шаринг на PCI разрешён спекой шины и правильно написаный драйвер на правильно сконструированой железке обязаны корректно работать.

> Как я понимаю, прерывание - это физический провод по которому приходит сигнал на ножку чипа. Во всяком случае раньше было так, сомневаюсь, что что-то поменялось. Соответственно ну никак не получится отпаять одну ножку чипа и заменить другой. Равно как и другим способом перевесить девайс на другое прерывание. Раньше опять же это делалось _физической_ перемычкой на плате.
Это на ISA+8259а так было. Потом всё сильно усложнилось.

> А посему мое мнение таково - драйвер _должен_ корректно опросить свое устройство в случае получения прерывания и понять, оно его послало, или это прерывание от соседа по проводу. Это типа шаринг. Если не свое - отвалить.
Должен :) И тогда будет всё работать, хоть и с потерей производительности. Но уже по этой причине шаринг нежелателен. Пока пачка дров проверяет, на железке могут и данные потеряться. Но в большинстве случае именно осевые драйверописатели ленятся писать поддержку тех случаев, которых у них может и протестировать негде. Это не только прерываний касается.

> Посему вопрос - почему в Оси все не так? Почему требуется одно устройство на одну линию прерывания? Винда же как-то справляется с шарингом и проблем никаких.
Тут ещё нужно понимать разницу между "посмотрел в винде хотя бы в device manager карту прерываний и увидел массовый шаринг" и "поставил винду поновее, да с дровами чипсета от производителя матплаты и показалось, что оно работает нормально".

> Просветите, кто в этой теме разобрался.
Чтобы эту тему полноценно понимать нужно только для базового уровня внимательно прочитать страниц 500-700 разных спек. Ну попробую совсем кратко.
Любой PCI device (уже возникает нюанс с тем, что для драйвера устройство - это PCI function) имеет 4 вывода прерываний. Обозначаются буквами от INTA до INTD. Типично используется только INTA, но могут дополнительно задействоваться и другие. Поменять используемую линию без паяльника нельзя. Далее сигнал от этой линии достаточно сложным образом попадает на входную линию IRQx контроллера прерываний. Таблица соответствия между PCI function address (это три числа bus:device:function) + INTx и IRQ называется PCI IRQ routing table. Повлиять на эту таблицу можно разными путями:
1) Переставить железку в другой слот. Роутинг от тех же INTx линий в нём может быть направлен на другое IRQ. Хотя и не обязательно.
2) Переключиться на другой контроллер прерываний. В современных писюках их, грубо говоря, два: 8259a и IOAPIC. Второй имеет гораздо больше входных линий и есть большой шанс, что даже при роутинге по умолчанию шаринга удастся избежать. Этот функционал встроен в acpi.psd.
3) Перепрограммировать сам роутер. Для чего нужен драйвер этого самого роутера. А в оси в связи с особенностями драйверной модели ещё и нужно, чтобы устройство не использовалось на этапе загрузки первой партии дров (которые basedev). В оси этот драйвер называется spciirq. В винде входит в драйверы чипсета.

Tue 21 Jun 2011 03:00 Mozilla/5.0 (OS/2; U; Warp 4.5; en-US; rv:1.9.1.10) Gecko/20




Programmed by Dmitri Maximovich, Dmitry I. Platonoff, Eugen Kuleshov.
25.09.99 (c) 1999, RU/2. All rights reserved.
Rewritten by Dmitry Ban. All rights ignored.