Init. block используется, чтобы сконфигурировать регистры. Те же самые данные, что находятся в init. block, можно вбить вручную в регистры (в [1 стр.3] есть список всех этих регистров). Форматы init. block отличаются для 16бит и 32бит режимов, чтобы определить режим в котором работает карточка, можно воспользоваться процедурой из [2 pcnet_check_mode()]. Физический адрес записывается в два 16-битные регистры в CSR1 и CSR2, и затем блок читается контроллером из памяти и устанавливает свои регистры в соответствующие значения. Думаю, чтение init. block происходит при сбросе, но нужно это еще вычитать. DMA-дескрипторы - это дескрипторы приема и передачи для колец? (т.е. то что описано в [1 стр.5-6]). И какие конкретно вопросы о DMA нужно обсудить? Мне, например, не совсем понятно, что делает функция pci_map_single(). [1] PCnet Family Software Design Considerations [2] pcnet.c из первых писем рассылки В Tue, 21 Sep 2010 23:12:17 +0400 Denis Kirjanov <kirjanov@gmail.com> пишет:
Доброго времени!
Я бегло просмотрел докуметацию, и хотел бы обсудить вопрос о DMA. О Initialization block, о формате DMA-дескрипторов etc Если у кого-нибудь есть целостная картина как это работает, то дамп мыслей можно сюда.
PS: постараюсь разобраться с этим в ближайшее время.
Thanks