Страниц: 1 [2]
  Печать  
Автор Тема: вектор прерывания PCI QNX 4.25  (Прочитано 11548 раз)
ed1k
QOR.Moderator
*****
Offline Offline

Сообщений: 739


Просмотр профиля WWW
« Ответ #15 : Мая 12, 2011, 04:18:20 am »

Я не понимаю про какое "просто присвоение свободного прерывания" вы говорите и как проблема решается. Функции _CA_PCI_Write_Config_Word и _CA_PCI_Write_Config_DWord никак изменить прерывание не могут. Насколько я понял, ваши железячники что-то съэкономили и _CA_PCI_Write_Config_Byte не работает (что является нарушением PCI spec), и BIOS не в состоянии записать в конфиг пространство вашего устройства, какая линия прерывания заведена на PinA PCI слота, в который вы воткнули свою плату. То есть по сути вы в такой же ситуевине, как если бы у вас была ISA плата, только у вас еще хуже - джампер выбора линии прерывания сам случайным образом каждый раз конфигурируется.
Переносимости у вас никой и быть не может. Радуйтесь, что нашли материнку которая не останавливается при загрузке, чтобы сообщить, что надо вытянуть кривое устройство в таком-то слоте. Некоторые продвинутые материнки могут просто слот выключить с кривым устройством. А у вас еще и работает как-то.

Записан
Zaca
Jr. Member
**
Offline Offline

Сообщений: 64



Просмотр профиля
« Ответ #16 : Мая 12, 2011, 11:31:02 am »

Цитировать
Насколько я понял, ваши железячники что-то съэкономили и _CA_PCI_Write_Config_Byte не работает (что является нарушением PCI spec), и BIOS не в состоянии записать в конфиг пространство вашего устройства, какая линия прерывания заведена на PinA PCI слота, в который вы воткнули свою плату. То есть по сути вы в такой же ситуевине, как если бы у вас была ISA плата, только у вас еще хуже - джампер выбора линии прерывания сам случайным образом каждый раз конфигурируется.

Совершенно правильно все изложено. Все же "руками" занести новое прерывание мы можем. Вопрос только в том, чтобы оно было правильным, какое умный POST и хотел ему присвоить...

Цитировать
Переносимости у вас никой и быть не может. Радуйтесь, что нашли материнку которая не останавливается при загрузке, чтобы сообщить, что надо вытянуть кривое устройство в таком-то слоте. Некоторые продвинутые материнки могут просто слот выключить с кривым устройством. А у вас еще и работает как-то.

Работает достаточно хорошо, и на разном железе (платы серийные... Подумаешь, отошли немножко от спецификации, теперь уже это не поправишь...). Так что тут все в порядке. Вот только умудриться как-то то, что нам нагенерили(линию прерывания), где-то получить...

Записан
ed1k
QOR.Moderator
*****
Offline Offline

Сообщений: 739


Просмотр профиля WWW
« Ответ #17 : Мая 12, 2011, 04:12:31 pm »

Совершенно правильно все изложено. Все же "руками" занести новое прерывание мы можем. Вопрос только в том, чтобы оно было правильным, какое умный POST и хотел ему присвоить...
А зачем? Ведь вы же драйвер этого устройства пишите, или я что-то не понимаю? А для драйвера этот регистр - информация для сведения на старте, чтобы проще было. Если ее там нет, то значит надо как-то сложнее решать проблему, но даже определив путем перепробывания всех PCI линий на какой таки линии висит устройтсво, в регистр вписывать ничего не надо, потому как больше никому это не надо.
То, что ваш драйвер работает на нулевой линии прерываний говорит только о том, что ваш обработчик вызывается по таймеру достаточно часто (и независимо от вашего устройства), чтобы обслуживать ваше устройство.
Никакого другого алгоритма для вас я придумать не могу, кроме как на одно повесить свой обработчик, который должен определить вызывался он вашей платой или нет, записать в регистры платы что ей требуется для инициализации и вызова прерывания (например, для компорта легко сгенерировать "передатчик пуст" прерываание), подождать-проанализировать поймал ли ваш обработчик ISR прерывание, снять ваш обработчик ISR и повесить его на следующую линию. Сделать это в цикле проходясь по всем линиям: 3,4,5,7,9,10,11,12. Цикл прервать как только нашли свою линию. Ну можете этой преддрайверной программой записать найденную линию в регистр (прочитав вначале все слово, сделав or с байтом линии, в общем, все приседания по регламенту вашего серийного устройства) и драйвер уже начать стандартно с прочтения номера линии прерывания из конфиг пространства.

Записан
Zaca
Jr. Member
**
Offline Offline

Сообщений: 64



Просмотр профиля
« Ответ #18 : Мая 12, 2011, 04:20:41 pm »

Мы именно так и делали - но проблемы начались - если там несколько таких плат, и каким-то присвоилось одно и то же прерывание - система виснет намертво...
Записан
ob1
Hero Member
*****
Offline Offline

Сообщений: 633


What has two thumbs up and doesn't give a crap?


Просмотр профиля WWW
« Ответ #19 : Мая 12, 2011, 05:50:10 pm »

У Вас не только с железом проблемы...
Записан
Страниц: 1 [2]
  Печать  
 
Перейти в: