diff --git a/ru/projects/busdma/index.sgml b/ru/projects/busdma/index.sgml new file mode 100644 index 0000000000..3550b129f4 --- /dev/null +++ b/ru/projects/busdma/index.sgml @@ -0,0 +1,1209 @@ + + + + + + + %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; | +&status.new; | +&status.done; | +&status.new; | ++ |
| if_cs | ++ | + | &status.new; | +&status.new; | +&status.new; | +&status.new; | +&status.new; | ++ |
| if_dc | +&a.mux; | +17 апреля 2003 | +&status.done; | +&status.new; | +&status.new; | +&status.untested; | +&status.new; | ++ |
| if_de | +&a.mux; | ++ | &status.new; | +&status.new; | +&status.new; | +&status.new; | +&status.new; | +vtophys() | +
| if_ed | ++ | + | &status.new; | +&status.new; | +&status.new; | +&status.new; | +&status.new; | +kvtop() | +
| if_em | +&a.pdeuskar; | +19 декабря 2002 | +&status.done; | +&status.done; | +&status.new; | +&status.done; | +&status.new; | ++ |
| if_en | +&a.harti; | +4 марта 2003 | +&status.done; | +&status.new; | +&status.new; | +&status.untested; | +&status.new; | ++ |
| if_ep | +&a.imp; | +4 ноября 2003 | +&status.na; | +&status.done; | +&status.new; | +&status.done; | +&status.na; | ++ |
| if_fxp | +&a.mux; | +9 декабря 2002 | +&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 | ++ | + | &status.new; | +&status.new; | +&status.new; | +&status.new; | +&status.new; | +vtophys() | +
| if_hme | +&a.tmm; | +6 января 2003 | +&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 | ++ | + | &status.new; | +&status.new; | +&status.new; | +&status.new; | +&status.new; | +vtophys() | +
| if_pcn | +&a.obrien; | ++ | &status.new; | +&status.new; | +&status.new; | +&status.new; | +&status.new; | +vtophys() | +
| if_pdq | ++ | + | &status.new; | +&status.new; | +&status.new; | +&status.new; | +&status.new; | +по большей части поддерживает busdma, кроме vtophys() | +
| if_rl | +&a.wpaul; | +9 декабря 2002 | +&status.done; | +&status.new; | +&status.new; | +&status.new; | +&status.new; | ++ |
| if_sf | ++ | + | &status.new; | +&status.new; | +&status.new; | +&status.new; | +&status.new; | +vtophys() | +
| if_sis | +&a.wpaul; | +9 декабря 2002 | +&status.done; | +&status.done; | +&status.new; | +&status.new; | +&status.new; | ++ |
| 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; | +&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 | +&status.done; | +&status.new; | +&status.new; | +&status.done; | +&status.new; | ++ |
| Драйвер | +Ответственный | +Последнее обновление | +busdma | +INTR_MPSAFE | +Отделение SMPng | +a!=p | +Состояние 4.x | +Примечания | +
|---|---|---|---|---|---|---|---|---|
| aac | +&a.scottl; | +8 февраля 2003 | +&status.done; | +&status.done; | +&status.done; | +&status.done; | +&status.new; | +Возможности PCI-64, но не полностью поддерживает порядок следования + байтов endian | +
| adv | ++ | 9 декабря 2002 | +&status.done; | +&status.new; | +&status.new; | +&status.new; | +&status.new; | ++ |
| aha | ++ | 9 декабря 2002 | +&status.done; | +&status.new; | +&status.new; | +&status.new; | +&status.new; | ++ |
| ahb | ++ | 9 декабря 2002 | +&status.done; | +&status.new; | +&status.new; | +&status.new; | +&status.new; | ++ |
| aic7xxx | ++ | 9 декабря 2002 | +&status.done; | +&status.new; | +&status.new; | +&status.new; | +&status.new; | ++ |
| amd | ++ | 14 декабря 2002 | +&status.done; | +&status.new; | +&status.new; | +&status.new; | +&status.new; | ++ |
| amr | ++ | 9 декабря 2002 | +&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() | +
| 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; | +&status.new; | +&status.new; | +&status.new; | +&status.new; | +vtophys() | +
| isp | ++ | 8 февраля 2003 | +&status.done; | +&status.done; | +&status.new; | +&status.new; | +&status.new; | ++ |
| 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; | ++ |
| Драйвер | +Ответственный | +Последнее обновление | +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 | +&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 | +&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.new; | +a!=p должно работать, однако требуется дополнительное + тестирование | +
| wds | ++ | 9 декабря 2002 | +&status.done; | +&status.new; | +&status.new; | +&status.new; | +&status.new; | ++ |
| Задача | +Ответственный | +Последнее обновление | +Состояние | +Примечания | +
|---|---|---|---|---|
| справочные страницы по busdma API | +&a.hmp; | +15 января 2003 | +&status.done; | ++ |