Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Использование DMA  (Прочитано 16055 раз)
0 Пользователей и 1 Гость смотрят эту тему.
1010
Гость
« : 17-07-2003 12:16 » 

Всем привет!

Хочу пользовать DMA но по IoGetDmaAdapter() PnP manager выдает Error 0xCA (0x02, ...) - "Invalid PDO".
Возможно запользовать DMA без регистрации девайса у PnP Manager-а?
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #1 : 17-07-2003 12:55 » 

А при чем здесь регистрация у PnP менеджера? Если для твоего девайса создан PDO, то PnP менеджер уже про него знает и ресурсы выделил. А вобще-то ты про какой девайс говоришь, про свой или про тот у которого ты запрашиваешь DMA(то есть драйвер шины)?
 И вроде тебе же сказали - Invalid PDO, может ты запрос на FDO засылаешь?
 Уточни как ты получаешь PDO и чей это PDO, то есть каким драйвером управляется. Ошибка явно указывает на неправильно переданный DEVICE_OBJECT, ты наверно схватил девайс из стека- но это не PDO, управляемый драйвером шины, а девайс над ним сидящий и управляемый другим драйвером.
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #2 : 17-07-2003 13:48 » 

Посмотрел я на код IoGetDmaAdapter она там в двух местах вылетает с кодом 0xCA и параметром 2

8056c0c8 0f84ad5c0600     je      nt!IoGetDmaAdapter+0x133 (805d1d7b)//KeBugCheckEx
8056c0ce f6407e02         test    byte ptr [eax+0x7e],0x2
8056c0d2 0f85a35c0600     jne     nt!IoGetDmaAdapter+0x133 (805d1d7b)//KeBugCheckEx

Первый происходит при NULL == *(ULONG*)((BYTE*)(PDO->DeviceObjectExtension)+0x14), то есть неверный PDO передали- у него DeviceExtension не тот, который ожидается, второй раз при проверки флагов в DeviceExtension, если флаг 2 не установлен- то опять вылетает.
Записан
1010
Гость
« Ответ #3 : 17-07-2003 14:14 » 

Да вот, хочу с IDE-дисков через DMA читать.
Мне для полного счастия нужен интерфейс к существующему DMA.
А запрос - да, на FDO был. Т.к. PDO свое я не создавал и сейчас как-раз этим озабочен. Смотрю сорцы Toaster-а и читаю DDK -> Setup,  PnP and Power Management. И как-то мне грустно ...
Вроде понятно как создать и зарегистрировать свой PDO (IoInvalidateDeviceRelations()).
Но пока не ясно как указать PnP-менеджеру подгружать драйвер, которому он в AddDevice() указатель на этот PDO сунет.

А может примазаться к какму-нить существующему дереву устройств? Но тут у меня много пробелов в знаниях.

Подскажите общие соображения по дизайну подобного рода драйвера.
Т.е. взаимодействие с IDE через DMA; не файловая система - т.к. мне от него только посекторное LBA чтение нужно.

Буду рад любым советам, т.к. драйвера писать только начинаю.

--
Правильно заданный вопрос содержит половину ответа ...
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #4 : 18-07-2003 05:09 » 

Цитата

Т.к. PDO свое я не создавал и сейчас как-раз этим озабочен


PDO должен создать драйвер, управляющей шиной на которой ты DMA хочешь использовать. Как ты заставишь этот драйвер создать какой-то левый PDO я не знаю, создавать PDO для несуществующего девайса драйвер шины не будет. Исключение- драйвер шины IEEE1394, он поддерживает виртуальные устройства, но там и DMA нет.
 Поэтому наиболее разумно прицепится к какому нибудь стеку существующих устройств.
 Интересные темы по DMA были в старом форуме

http://www.shelek.com/club/modules.php?op=modload&name=phpBB_14&file=index&action=viewtopic&topic=398&6

http://www.shelek.com/club/modules.php?op=modload&name=phpBB_14&file=index&action=viewtopic&topic=351&20

там есть еще несколько тем по DMA.
Также на сайте есть книги W.Oney "Programming WDM" и "Win2000 Device Driver Handbook"- там очень хорошо про DMA написано.
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #5 : 18-07-2003 05:39 » 

Тут еще надо учесть что DMA двух типов - Master и Slave. Насколько я понимаю IDE DMA-это мастер, так как он захватывает шину и сам все делает, ему только надо передать список областей откуда и куда писать. А Slave это те кто используют системный контроллер(то есть контроллер шины) для DMA- это ISA и EISA девайсы, а вот PCI девайсы сами управляют шиной.
Записан
.
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 19-08-2003 10:45 » 

Цитата: SlavaI
Тут еще надо учесть что DMA двух типов - Master и Slave. Насколько я понимаю IDE DMA-это мастер, так как он захватывает шину и сам все делает, ему только надо передать список областей откуда и куда писать. А Slave это те кто используют системный контроллер(то есть контроллер шины) для DMA- это ISA и EISA девайсы, а вот PCI девайсы сами управляют шиной.

Поделюсь секретом: IDE диски не используют DMA со времен ~ i386, это устаревший метод юзания дисков!
ЗЫ: я изучил не один десяток драйверов, в том числе и BIOS
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 19-08-2003 10:58 » 

Он имел в виду "bus master"
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #8 : 19-08-2003 11:57 » 

Цитата

Поделюсь секретом: IDE диски не используют DMA со времен ~ i386, это устаревший метод юзания дисков!
ЗЫ: я изучил не один десяток драйверов, в том числе и BIOS


И что же они юзают? На PIO моде работают? Уж просвяти.
Я всегда думал, что есть два способа доступа к памяти- попросить процессор или самому начать с ней работать.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 19-08-2003 12:14 » 

Цитата
И что же они юзают? На PIO моде работают? Уж просвяти.
Я всегда думал, что есть два способа доступа к памяти- попросить процессор или самому начать с ней работать.


Мне кажется, что спор не о чем - как всегда, путаница терминов.
DMA, если не понимать перевод буквально, а так как исторически сложилось на PC, - это контролеp совместимый с 8237. Чип 8237 - просто 4-х канальный генератор адресов по запросу от устройства. И есть еще понятие "bus muster" на шине PCI - устройство, самостоятельно решающее куда надо обратится и неиспользующее это самый 8237.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #10 : 19-08-2003 12:22 » new

Цитата

Мне кажется, что спор не о чем - как всегда, путаница терминов.
DMA, если не понимать перевод буквально, а так как исторически сложилось на PC, - это контролеp совместимый с 8237. Чип 8237 - просто 4-х канальный генератор адресов по запросу от устройства. И есть еще понятие "bus muster" на шине PCI - устройство, самостоятельно решающее куда надо обратится и неиспользующее это самый 8237.


Ну вобще у меня было подозрение, что товарищ узкой направленности и понимает все в терминах классической РС. Но надо же было спросить.
Но все таки DMA- это Direct Memory Access, а не микросхема. Мы DMA как на этом так и на старом форуме не раз обсуждали и путаницы не было, поэтому заява, сделанная TJSoft, несколько раздражает.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines