diff --git a/ru/projects/busdma/index.sgml b/ru/projects/busdma/index.sgml index 68ad1f9503..fc251924ed 100644 --- a/ru/projects/busdma/index.sgml +++ b/ru/projects/busdma/index.sgml @@ -1,1209 +1,1236 @@ %includes; Нет данных"> Выполнено"> Выполняется"> -Требует тестирования"> +Требует тестирования"> Не сделано"> Неизвестно"> %developers; ]> &header;

Содержание

Цель проекта

busdma

Интерфейсы busdma позволяют драйверам аппаратных устройств работать на различных платформах без необходимости кодирования специфичных для аппаратных платформ методов доступа непосредственно в драйверах. Это снижает затраты на поддержку драйверов для разных платформ, и увеличивает вероятность того, что драйвер будет "просто работать" на новой платформе. Модификация драйвера для использования busdma является достаточно определённым процессом, и не требует глубоких знаний ни драйвера устройства, ни функций busdma. Для busdma, используемого во FreeBSD, как правило, требуется внесение изменений двух типов: адаптация реализации busdma к работе на всех платформах, и преобразование драйверов к использованию этой технологии. Таким же образом информация о состоянии этого проекта разбита на поддержку платформ и поддержку драйверов (отсортированных по категориям). Для завершения этой работы необходим тщательный аудит системных драйверов устройств, а затем приложение усилий к преобразованию драйверов.

INTR_MPSAFE

Драйверы оборудования регистрируют свои обработчики прерываний при помощи функции bus_setup_intr(). Установка флага INTR_MPSAFE указывает коду обработки прерываний системы на вызов её процедуры без включения семафора Giant. Это даёт значительный прирост производительности в SMP-системах.

Драйверы могут устанавливать этот флаг, даже если они не являются полностью изолированными, если только их обработчик прерываний не обращается к другим структурам данных в драйвере. Простым способом обеспечить это является проверка и сброс регистров состояния аппаратных прерываний, а затем планирование обработки прерывания в очереди задач (taskqueue) или потоке выполнения ядра (kernel thread).

Отделение SMPng

Драйверы должны использовать семафоры и sx-блокировки для защиты собственных структур данных и аппаратных регистров от параллельно выполняющихся потоков. Операции с семафорами несколько ресурсоёмки, так что хорошей стратегией является комбинирование максимально возможного количества атомарных операций в одну операцию захвата семафора.

поддержка p!=a

Поддержка Intel PAE требует, чтобы указатели и физические адреса имели разный размер. Это значит, что драйверы должны быть писаться с использованием vm_paddr_t или bus_addr_t, без предположений о том, что физические адреса могут быть представлены при помощи void *. Кроме того, строки форматов и операции приведения типов должны применяться с осторожностью.

Перечень задач ниже не является полным, но представляет собой набор имеющих отношение к делу и/или важных компонентов общей работы. Поле "Ответственный" определяет разработчика, который изъявил желание отвечать за выполнение конкретной задачи; это не исключает участия других, но предполагает координацию с ответственным для избежания ненужного дублирования работы и максимально быстрого продвижения вперёд. Если начата новая работа приличного объёма, или заявленная оказалась невостребованной, то стоит оповестить по электронной почте &a.mux;, чтобы выяснить, имелось ли движение вперёд.

Смысл поля даты меняется в зависимости от состояния работы. Для выполненных работ она означает дату окончания или сообщения об окончании. Для задач, находящихся в процессе выполнения, оно обозначает дату последнего обновления информации по задаче. Для остановившихся задач она означает дату, когда эта задача была объявлена заброшенной. Для новых задач это поле означает дату добавления задачи к списку.

Задачи отсортированы по состоянию, а затем по дате.

Состояние по поддержке платформ

Задача Ответственный Последнее обновление Состояние Примечания
alpha &a.gallatin; 10 декабря 2002 &status.done; В системах с большим объёмом оперативной памяти могут быть проблемы.
amd64 &a.peter; 1 июля 2003 &status.done; Поддерживается полностью.
ia64 &a.marcel; 10 декабря 2002 &status.done; В системах с большим объёмом оперативной памяти могут быть проблемы.
i386 &a.sam; 9 декабря 2002 &status.done; Поддерживается полностью.
powerpc &a.hmp; 15 января 2003 &status.done; Поддерживается полностью.
sparc64 &a.tmm; 6 января 2003 &status.done; Поддерживается полностью.

Состояние по драйверам сетевых интерфейсов

- - - + + + + + + + + + + + + + + + - - - + + + + + - + + + + + + + + + + + - + - - + + + + + + + + + + + + + - + + - + + - - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + - + + - - - + + + + + + + + - - - - - - - + + + + - - - - - - - - - - - - - - - - + + - + - + - + + + - - - + - + - + + - - + - - - + + + - + + + - -
Драйвер Ответственный Последнее обновление busdma INTR_MPSAFE Отделение SMPng a!=p Состояние 4.x Замечания
if_ar     &status.new; &status.new; &status.new; &status.new; &status.new; kvtop()
if_bge &a.wpaul;26 июля 2003&status.untested;&status.new;13 апреля 2004&status.done;&status.done;&status.done;&status.done; &status.new; 
if_cp&a.rik;24 июня 2004 &status.done;&status.wip;&status.wip; &status.new;&status.na;  
if_cs     &status.new; &status.new; &status.new; &status.new; &status.new;  
if_dc&a.mux;17 апреля 2003if_ct&a.rik;24 июня 2004 &status.done;&status.wip;&status.wip; &status.new; &status.new;&status.untested; 
if_cx&a.rik;24 июня 2004&status.done;&status.wip;&status.wip;&status.new; &status.new;  
if_deif_dc &a.mux; &status.new;13 апреля 2004&status.done;&status.done;&status.done;&status.untested; &status.new;Под вопросом использование MTX_RECURSE в случае MPSAFE
if_de&a.mux;13 апреля 2004&status.done; &status.new; &status.new; &status.new;vtophys()&status.done; 
if_ed     &status.new; &status.new; &status.new; &status.new; &status.new; kvtop()
if_em &a.pdeuskar;19 декабря 200213 апреля 2004&status.done; &status.done; &status.done;&status.new; &status.done; &status.new;  
if_en &a.harti;4 марта 200313 апреля 2004 &status.done; &status.new; &status.new; &status.untested; &status.new; Блокировка реализована; ещё не помечена как INTR_MPSAFE?
if_ep &a.imp;4 ноября 200313 апреля 2004 &status.na; &status.done;&status.new;&status.done; &status.done; &status.na;Мьютекс помечен как MTX_RECURSE.
if_ex&a.imp;13 апреля 2004&status.na;&status.new;&status.new;&status.new;&status.na;полностью не исследована.
if_fatm&a.harti;20 июля 2004&status.done;&status.untested;&status.untested;&status.untested;N/A  
if_fxp &a.mux;9 декабря 200213 апреля 2004&status.done; &status.done; &status.done;&status.new; &status.done; &status.new;  
if_fwe     &status.new; &status.new; &status.new; &status.new; &status.new;  
if_gem &a.tmm; 6 января 2003 &status.done; &status.new; &status.new; &status.new; Нет данных  
if_gx if_hatm&a.harti;20 июля 2004&status.done;&status.untested;&status.untested;&status.untested;N/A  &status.new;&status.new;&status.new;&status.new;&status.new;vtophys()
if_hme &a.tmm;6 января 200330 января 2005&status.done;&status.done;&status.done; &status.done;&status.new;&status.new;&status.new; Нет данных  
if_idt     &status.new; &status.new; &status.new; &status.new; &status.new; vtophys()
if_lge     &status.new; &status.new; &status.new; &status.new; &status.new; vtophys()
if_lmc  &status.new;&status.new;&status.new;&status.new;&status.new;vtophys()
if_lnc &a.obrien;   &status.new; &status.new; &status.new; &status.new; &status.new; vtophys(). Пожалуйста, для получения информации/оборудования обратитесь к &a.phk;.
if_mn     &status.new; &status.new; &status.new; &status.new; &status.new; vtophys(). Пожалуйста, для получения информации/оборудования обратитесь к &a.phk;.
if_my     &status.new; &status.new; &status.new; &status.new; &status.new; vtophys()
if_nge   16 сентября 2004 &status.new; &status.new;&status.done; &status.new; &status.new; &status.new; vtophys()
if_pcn &a.obrien; 13 апреля 2004 &status.new; &status.new; &status.new; &status.new; &status.new;vtophys()vtophys(); блокировка реализована; не помечено как INTR_MPSAFE? + Mutex помечен как MTX_RECURSE.
if_pdq     &status.new; &status.new; &status.new; &status.new; &status.new; по большей части поддерживает busdma, кроме vtophys()
if_rl &a.wpaul;9 декабря 200213 апреля 2004&status.done;&status.done; &status.done;&status.new;&status.new; &status.new; &status.new;  
if_sf   13 апреля 2004 &status.new; &status.new; &status.new; &status.new; &status.new;vtophys()vtophys(); блокировка реализована; не помечено как INTR_MPSAFE? + Mutex помечен как MTX_RECURSE.
if_sis &a.wpaul;9 декабря 200213 апреля 2004&status.done; &status.done; &status.done; &status.new; &status.new;&status.new; Мьютекс помечен как MTX_RECURSE.
if_sk     &status.new; &status.new; &status.new; &status.new; &status.new; vtophys()
if_sr     &status.new; &status.new; &status.new; &status.new; &status.new; vtophys()
if_ste     &status.new; &status.new; &status.new; &status.new; &status.new; vtophys()
if_ti     &status.new; &status.new; &status.new; &status.new; &status.new;  
if_tl     &status.new; &status.new; &status.new; &status.new; &status.new;  
if_tx &a.mux; 19 апреля 2003 &status.done; &status.new; &status.new; &status.untested; &status.new; vtophys()
if_txp &a.will; 18 июля 2003 &status.wip; &status.new; &status.new; &status.new; &status.new;  
if_vrChristian S.J. Peron <maneo@bsdpro.com>20 января 2003&status.wip; 23 апреля 2004&status.new; &status.new; &status.new; &status.new; &status.new;  
if_wb     &status.new; &status.new; &status.new; &status.new; &status.new;  
if_wi &a.sam;, &a.imp; 4 ноября 2003 &status.unknown; &status.done; &status.unknown; &status.unknown; &status.unknown;  
if_xl &a.mux;17 декабря 200213 апреля 2004&status.done;&status.done; &status.done;&status.new;&status.new; &status.done; &status.new;  

Состояние по драйверам устройств хранения

- + - - + + - + + + - - - + - - - + + + + + + + + + + + + + + + - - + + + + + - - - - + - + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + +
Драйвер Ответственный Последнее обновление busdma INTR_MPSAFE Отделение SMPng a!=p Состояние 4.x Примечания
aac &a.scottl;8 февраля 200331 января 2005 &status.done; &status.done; &status.done; &status.done;&status.new;Возможности PCI-64, но не полностью поддерживает порядок следования - байтов endian&status.done;Не полностью поддерживает порядок следования байтов endian
adv   9 декабря 2002 &status.done; &status.new; &status.new; &status.new; &status.new;  
aha  9 декабря 200213 апреля 2004 &status.done;&status.wip;&status.wip; &status.new; &status.new;&status.new;&status.new; Использует BUSDMA, но может путать адрес шины с адресом хоста
ahb   9 декабря 2002 &status.done; &status.new; &status.new; &status.new; &status.new;  
aic7xxx 9 декабря 2002ahc&a.gibbs;31 января 2005 &status.done; &status.new; &status.new;&status.done;&status.done; 
ahd&a.gibbs;31 января 2005&status.done; &status.new; &status.new;&status.done;&status.done;  
amd   14 декабря 2002 &status.done; &status.new; &status.new; &status.new; &status.new;  
amr 9 декабря 2002&a.scottl;30 января 2005&status.done;&status.done;&status.done; &status.done;&status.new;&status.new;&status.new; &status.new;  
asr&a.obrien;  4 января 2003 &status.new; &status.new; &status.new; &status.new; &status.new;vtophys()vtophys(). Требует большой переделки. Желательна новая + технология I2O.
ata &a.sos; 9 декабря 2002 &status.done; &status.done; &status.done; &status.done; &status.new;  
buslogic     &status.new; &status.new; &status.new; &status.new; &status.new; vtophys()
ciss   9 декабря 2002 &status.done; &status.new; &status.new; &status.new; &status.new;  
ct     &status.new; &status.new; &status.new; &status.new; &status.new;  
dpt     &status.new; &status.new; &status.new; &status.new; &status.new; vtophys()
ida   9 декабря 2002 &status.done; &status.new; &status.new; &status.new; &status.new;  
iir   &status.new;30 января 2005&status.done; &status.new; &status.new; &status.new; &status.new;vtophys()Требует больших усилий для совместимости с API busdma.
isp   8 февраля 2003 &status.done; &status.done; &status.new; &status.new; &status.new;  
ips&a.scottl;30 января 2005&status.done;&status.done;&status.done;&status.done;&status.done; 
mlx &a.scottl; 8 февраля 2003 &status.done; &status.wip; &status.wip; &status.new; &status.new;  
mly &a.scottl; 8 февраля 2003 &status.done; &status.wip; &status.wip; &status.new; &status.new;  
mpt   9 декабря 2002 &status.done; &status.done; &status.new; &status.new; &status.new;  
ncr     &status.new; &status.new; &status.new; &status.new; &status.new; vtophys(). Пожалуйста, обратитесь к &a.phk; для выяснения возможности получить оборудование.
pst     &status.new; &status.done; &status.new; &status.new; &status.new; vtophys()
stg   9 декабря 2002 &status.done; &status.new; &status.new; &status.new; &status.new; По крайней мере выглядит как хорошо работающий.
sym   19 декабря 2002 &status.done; &status.new; &status.new; &status.new; &status.new;  
trm &a.cognet; 9 декабря 2002 &status.done; &status.new; &status.new; &status.new; &status.new;  
twe   9 декабря 2002 &status.done; &status.new; &status.new; &status.new; &status.new;  
wds 2 февраля 2005&status.done;&status.new;&status.new;&status.new;&status.done; 

Состояние по драйверам разных устройств

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - + + - - + - - - - - - - - - - - -
Драйвер Ответственный Последнее обновление busdma INTR_MPSAFE отделение SMPng a!=p состояние 4.x Примечания
agp &a.cognet; 23 января 2003 &status.wip; &status.new; &status.new; &status.new; &status.new; vtophys()
bktr &a.cognet; 15 января 2003 &status.wip; &status.new; &status.new; &status.new; &status.new; vtophys()
cs  &status.new;&status.new;&status.new;&status.new;&status.new; 
digi     &status.new; &status.new; &status.new; &status.new; &status.new; vtophys()
drm &a.anholt; 27 октября 2003 &status.wip; &status.done; &status.done; &status.wip; &status.wip; vtophys(). Блокировку нужно немного пересмотреть.
exca&a.imp;9 декабря 2002&status.done;&status.new;&status.new;&status.new;&status.new; 
fb     &status.new; &status.new; &status.new; &status.new; &status.new; vtophys()
firewire &a.simokawa; 17 апреля 2003 &status.done; &status.new; &status.new; &status.done; &status.new; vtophys()
hea  &status.new;&status.new;&status.new;&status.new;&status.new;vtophys()
hfa     &status.new; &status.new; &status.new; &status.new; &status.new; vtophys()
hifn &a.sam;9 декабря 200213 апреля 2004&status.done; &status.done; &status.done;&status.new; &status.new; &status.new;  
meteor  &status.new;&status.new;&status.new;&status.new;&status.new;vtophys()
musycc     &status.new; &status.new; &status.new; &status.new; &status.new; vtophys(). Пожалуйста, за информацией/оборудованием обратитесь к &a.phk;.
pcm &a.cognet; 20 февраля 2003 &status.done; &status.done; &status.new; &status.new; &status.new;  
ubsec &a.sam;9 декабря 200213 апреля 2004&status.done; &status.done; &status.done;&status.new; &status.new; &status.new; vtophys() использует для отладки printf
usb &a.jmg; 24 июля 2003 &status.done; &status.new; &status.new;&status.new;&status.untested; &status.new; a!=p должно работать, однако требуется дополнительное тестирование
wds 9 декабря 2002&status.done;&status.new;&status.new;&status.new;&status.new; 

Состояние по документированию

Задача Ответственный Последнее обновление Состояние Примечания
справочные страницы по busdma API &a.hmp; 15 января 2003 &status.done;  
&footer;