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 апреля 2003 | +if_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_de | +if_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 декабря 2002 | +13 апреля 2004 | +&status.done; | &status.done; | &status.done; | -&status.new; | &status.done; | &status.new; | |||||||
| if_en | &a.harti; | -4 марта 2003 | +13 апреля 2004 | &status.done; | &status.new; | &status.new; | &status.untested; | &status.new; | -+ | Блокировка реализована; ещё не помечена как INTR_MPSAFE? | ||||||
| if_ep | &a.imp; | -4 ноября 2003 | +13 апреля 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 декабря 2002 | +13 апреля 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 января 2003 | +30 января 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 декабря 2002 | +13 апреля 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 декабря 2002 | +13 апреля 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_vr | -Christian 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 декабря 2002 | +13 апреля 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 февраля 2003 | +31 января 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 декабря 2002 | +13 апреля 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 декабря 2002 | +ahc | +&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 декабря 2002 | +13 апреля 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 декабря 2002 | +13 апреля 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; |