Вопросы по ISA DMA/bus mastering

Да, знаю, все это старье и никому не надо, но все-таки:)

1. Когда ISA-плата посылает DRQ, желая начать DMA или стать хозяином шины, 8237 приостанавливает процессор через HOLD, пока DRQ не будет снят. Так ли это на всех матерях, которые были с ISA, включая поздние Пентиумы? Интересует в основном PC, как там на серверах или еще где-то, где есть ISA, неважно, но если есть инфа - было бы неплохо.

2. Пишут, что возможности контроллера DMA были когда-то расширены и стали позволять назначать несколько "окон" памяти для одной передачи. Где про это можно почитать поподробнее? Было ли это стандартом, когда появилось, как реализовывалось, программировалось, использовалось ли и т. п.

intel.com - есть документация и референсные схемы.

P.S. 8237 с помощью вывода HOLD не может приостановить процессор - всего лишь спросить "не будет ли любезен многоуважаемый процессор освободить шину?" - не более:).

Ага, первый вопрос тогда снимается. А вот по второму - если бы знать, что искать, давно бы уже нашел:)

Дык в документации можно найти описание управляющих регистров, описание режимов и т.д.
В чем проблема-то:)?

В документации на что?) Последний известный мне DMA контроллер - 8237A на 386. Потом, пишут, контроллер стали встраивать в чипсеты (естественно) и у него стало два режима - нативный и совместимый с 8237A. Вот этот вот нативный - что это и где?:)

AxXxB писал(-а):
Вот этот вот нативный - что это и где?
Дык читайте документацию на микросхемы, входящие в интересующий вас чипсет.

Хм, логично, спасибо:)

Про самый новый контроллер DMA, посмотрите DMA Engine или Intel Quick Data в описании
процессоров Xeon под сокет 2011. Этот узел входит в состав процессора, в отличие от
контроллеров 8237, которые в составе моста PCH. Конечно, это уже не ISA.
Также
composter.com.ua/content/ssd-diski-novye-trebovaniya-k-platformam-2014-12-24

Несколько "окон" памяти для одной передачи поддерживается Bus-Master контроллерами,
входящими в состав контроллеров периферийных устройств, например IDE, SATA, USB.
Также, механизм трансляции адресов формируемых bus-master устройством входит в


состав технологии виртуализации VT-d (см. спецификацию VT-d).
Это надо для того, чтобы bus-master устройство могло работать с диапазоном памяти,
который является непрерывным в линейном адресном пространстве, но при этом
фрагментирован физически. Чтобы не ре-инициализировать адрес при переходе через
границы фрагментированных страниц. Но в "старом" контроллере 8237 таких функций
нет, его сейчас мало кто использует кроме FDD и LPT.

Аватар пользователя savely

В принципе - просто спецификацию PCI можно почитать, IMHO. Нативный - это PCI. Где контроллер DMA - не в чипсете, а на плате.
А в чипсете - арбитр шины.
Википедия:


"В шинах MicroChannel, SBus, разработанной под их большим влиянием PCI и её концептуальных производных AGP и PCI-X, используется иная реализация DMA. Эти шины позволяют любому устройству заявить о возникновении потребности к захвату шины, таковая потребность удовлетворяется т. н. арбитром при первой возможности. Устройство, успешно осуществившее захват шины, самостоятельно выставляет на шину сигналы адреса и управления и исполняет в течение какого-то времени ту же ведущую роль на шине, что и ЦП. Доступ ЦП к шине при этом кратковременно блокируется"

Т.е. для DMA-трансфера я программирую не "имитацию 8237", а регистры своей платы, имеющей контроллер DMA. Грубо говоря - инициализирую регистр базового физического(!) адреса в ОЗУ компа (откуда или куда), регистр размера трансфера и ставлю в контрол-регистре битики направления и "ДАВАЙ DMA!".
Далее либо ловлю прерывание от платы по окончании трансфера (и анализирую бит готовности/окончания трансфера и бит ошибки типа ABORT), либо могу поразвлекаться поллингом бита готовности/окончания трансфера в контрол-регистре.

А заморочки с VT-d - это уже следующий шаг, для "продвинутых".;)

Вот, кстати.
habrahabr.ru/post/37455/
Т.е. я работаю по Contignous DMA (у меня всего 8 Кб максимальный трансфер и входящего/исходящего потока нет как такового),
а тот же USB-контроллер, как я понимаю - по Scatter/gather.

А кому счас легко...

Ох, сколько ответов, спасибо:)

Мне, в общем-то, новые шины не нужны совсем, ISA только интересует. С захватом шины своим девайсом все ясно, там что угодно можно делать:) Дело вот в чем - я собираюсь делать довольно простое устройство для компьютеров диапазона примерно Socket 7 - Socket 370, при этом уложиться в как можно меньшую стоимость, так что ISA - оптимальный вариант. Просто хотелось узнать, были ли какие-нибудь "стандарты" для ISA DMA контроллера после 8237. Если во всех чипсетах своя реализация, то нафиг-нафиг, писать кучу проверок в драйвере совсем не хочется.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Разрешённые HTML-теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • You can use BBCode tags in the text. URLs will automatically be converted to links.

Подробнее о форматировании текста

Антибот - введите цифру.
Ленты новостей