2ю. Работая с железом ты посылаешь запрос - почему не ждешь ответа???
Где так сказать PENDNIG код возврата.
Т.е. ты посылаешь в девайс просьбу на чтение и игнорируешь как я понимаю, состояние девайса.
С одной стороны ты читаешь из памяти и это очень быстро, с другой, это шина PCI с определенной скорокстью...
Слип не ставь - это кернель мод - упадет все нахрен.
Я не работая с PCI но имея опыт просто в драйвере сети могу сказать что в случкае когда процедура вернуть данные неуспела, вот как это определить в PCI не скажу - посмотри железо, воврат статуса из функции идет PENDING после чего вызывается стандартная функция с постфиксом Complete для текущей опреации где довершается все остальное.
Возможно в этом направлении тебе надо копать.
Вот! Хоть кто-то про PENDING сказал. Я этот пендинг, конечно, выставил бы, но понятия не имею, как узнать, что девайс готов вернуть данные. На Pentium-90 всё и так работало (без всякой проверки состояния девайса), я так понимаю, из-за медленного проца.
Да, а драйвер писался на DriverStudio 2.0, так что был создан готовый каркас с кучей комментов. Среди них был и такой (в функции SerialRead):
// TODO: If the data is not yet available, initiate a request to the
// physical device here, and defer the Information, Status,
// and NextIrp handling until the hardware indicates that the
// read is complete. Typically, this might be handled in a
// DPC that is called after the hardware finishes transferring
// the data.
Вот как для PCI-девайса определить, что "data is not yet available", я и хотел бы узнать...