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

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

ru
Offline Offline

« : 03-12-2008 15:25 » 

Какой минимальной длины может быть DMA передача? Может ли она равняться 4 байтам, соответствующим 1 фазе данных на PCI шине?
Меня в данном случае интересует не целесообразность такого действия, а его принципиальная возможность. В литературе я не нашел никаких ограничений, а на практике надо проверить.
Записан
PredatorAlpha
Помогающий

us
Offline Offline

« Ответ #1 : 03-12-2008 16:01 » 

На шине PCI нет такого понятия как DMA. Хотя, конечно, переслать 4 байта можно (как одним 32-битным словом, так и четырьмя байтными пересылками).
« Последнее редактирование: 03-12-2008 16:03 от PredatorAlpha » Записан
urock
Участник

ru
Offline Offline

« Ответ #2 : 03-12-2008 16:15 » 

Видимо я опять неточно выразился.. Вопрос был не про PCI шину. Можно ли настроить DMA передачу в драйвере равную 4 байтам? Конкретизирую: при вызове функции MapTransfer нет ли ограничения снизу на значение Length (количество байтов для пересылки)?
Записан
PredatorAlpha
Помогающий

us
Offline Offline

« Ответ #3 : 03-12-2008 16:28 » 

Уточни, про какой контроллер ДМА ты говоришь?
Записан
urock
Участник

ru
Offline Offline

« Ответ #4 : 03-12-2008 16:46 » 

Даже не знаю что сказать. Я пишу драйвер для PCI устройства, которое может само управлять шиной. Для него в драйвере я указываю возможность использовать прямой доступ к памяти. Все как по книжке Уолтера Они: сначала создается DMA адаптер с помощью IoGetDmaAdapter, потом в функции StartIO вызывается AllocateAdapterChannel для подготовки системы для DMA операции (согласно DDK), которая в свою очередь вызывает мою функцию AdapterControl, где я уже сам вызываю MapTransfer и указываю ей длину передачи. А потом уже программирую свое устройство посылая ему начальный адрес для обращения в память и длину обращения. Вот что я хочу сделать. Просто иногда может потребоваться использовать этот механизм для передачи совсем небольших объемов данных.

Извини, если излишне подробно написано, я просто делаю это все первый раз и пишу скорее для себя, чтобы уяснить логику. И как я понимаю, у меня нету никакого ДМА контроллера (я не использую системный контроллер), у меня устройство само управляет шиной, я ему только задаю начальный адрес и длину.
Записан
PredatorAlpha
Помогающий

us
Offline Offline

« Ответ #5 : 03-12-2008 16:57 » 

Естественно, PCI контроллер может писать так, как сам хочет. Хоть побайтно, хоть пословно, хоть 64-х битными словами (за 2 цикла - фактически двойной барст). Может барстами, может без них. Никаких ограничений нет.
Я сам с драйверами поскольку-постольку, я пишу для ДСП - т.е. на другом конце PCI шины. Возможно, так правильней - создавать виртуальный ДМА адаптер, с поддержкой всех функций, но по-моему гораздо проще и быстрей просто оговорить протокол обмена, без надстройки майкрософт над обменом. Если конечно не нужно реализации обмена драйвера со сторонним ПО, через этот стандартный интерфейс.
Записан
Ochkarik
Модератор

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

« Ответ #6 : 03-12-2008 18:53 » new

все зависит от устройства. длинна DMA передачи может быть любой. хоть одно слово хоть десять мегабайт. в последнем случае такая передача разобъется на кучу мелких транзакций по шине(устройством). длинна каждой такой транзакции зависит от устройства и занятости шины PCI.

у меня буфер выделяется до 32-64МБ. больше - не всегда возможно получить такой кусок непрерывной памяти в адресном пространстве. поэтому приходится захватывать эту память при старте win.
ЗЫ и если не ошибаюсь меньше страницы 4к выделить нельзя. но это не означает что минмальный пакет такой же длинны!
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines