=== Обновление LinuxKPI 802.11 и нативного беспроводного стека (Native Wireless)

Ссылки: +
link:https://github.com/FreeBSDFoundation/proj-laptop/issues/66[Поддержка беспроводных карт MediaTek] URL: link:https://github.com/FreeBSDFoundation/proj-laptop/issues/66[] +
link:https://github.com/FreeBSDFoundation/proj-laptop/issues/99[Поддержка беспроводных карт Realtek] URL: link:https://github.com/FreeBSDFoundation/proj-laptop/issues/99[]

Контакт: Bjoern A. Zeeb <bz@FreeBSD.org> +
Контакт: Список рассылки беспроводных технологий FreeBSD <wireless@FreeBSD.org>

Этот отчёт посвящён усилиям по использованию драйверов беспроводных устройств Linux с пермиссивными лицензиями, в основном без изменений, во FreeBSD, а также подготовке нативного стека net80211 к поддержке более новых стандартов.

==== Обновления драйверов

Все драйверы беспроводных устройств на основе LinuxKPI были обновлены до версии ядра Linux v6.19 в main и stable/15.

Это включает:

* поставляемые драйверы Intel man:iwlwifi[4] mvm/mld, Realtek man:rtw88[4] и man:rtw89[4],
* драйвер Mediatek mt76, который находится в стадии разработки,
* три драйвера Qualcomm Atheros: ath10k, ath11k и ath12k, которые требуют доработки, а также
* драйвер Broadcom brcmfmac, который компилируется и загружает прошивку, но ему не хватает совместимой прослойки cfg80211 и некоторой работы над netdev.

==== Поддержка Intel iwlwifi

Для того чтобы обновление драйвера man:iwlwifi[4] было применено, были сделаны несколько специфичных для FreeBSD изменений, чтобы позволить поддрайверу mld правильно загружаться.
Также было исправлено несколько ошибок.

==== Поддержка Realtek rtw88 и rtw89

После обновления драйверов выяснилось, что наша эмуляция chandef должна быть более детальной.
Впоследствии были обнаружены дальнейшие проблемы, связанные с тем, что некоторые драйверы rtw88 могут не выполнять аппаратное сканирование, требуя отката к программному сканированию.
Наконец, два чипсета rtw88 — 8821c и 8822b — похоже, часто имеют задержку в 6 секунд при подготовке к аутентификации.
Неясно, почему прошивка не работает в этих случаях, но в итоге я решил оставить эту проблему в покое и попытаться добавить обновления для 802.11n и 802.11ac в следующем (надеюсь, до 15.1-R), и только затем вернуться к этим чипсетам и посмотреть, что можно сделать.

==== Поддержка Mediatek mt76

В настоящее время основные чипсеты для работы — MT7921/7922 и MT7925.
После обновления драйвера были решены некоторые проблемы с DMA32 и page_pools.
Изменения в drm-kmod, подготовленные для перехода с нативного vm_page на структуру struct page из Linux, к счастью, были зафиксированы.
Это позволит мне проще распространять тестовую версию среди людей.
MT7925 также выявил недостаточность нашей реализации IDR в LinuxKPI, которая более или менее была задокументирована с первого дня.
Это потребует полной переработки, чтобы избежать проблем с доступом к уже уничтоженным записям, что может происходить в Linux.
Я также начал накапливать другие чипсеты для тестирования.
Поддержка 802.11n и 802.11ac в основном будет реализована вместе с работой над Realtek.

==== Broadcom brcmfmac

Драйвер Broadcom brcmfmac компилируется для PCIe и загружает прошивку (с небольшим обходным решением для arm64).
Теперь нам не хватает некоторой совместимой работы по cfg80211 и netdev LinuxKPI для создания интерфейса и управления беспроводной связью.

==== Поддержка QCA

В то время как ath10k в основном исправлен для режима станции, ath11k и ath12k требуют больше работы для повторной компиляции и реализации MHI и других необходимых компонентов.

==== Поддержка USB в LinuxKPI

Реализация USB в LinuxKPI существует уже более десяти лет.
Я уже обращался к пользователям в прошлом году и снова в этом, но не получил ответа.
У меня есть переработанная версия, которая позволяет компилировать USB-чипсеты Realtek, Mediatek, QCA ath10k и Broadcom brcmfmac.
Последние два в основном неактуальны из-за старых и редких USB-адаптеров.
Realtek и Mediatek подключаются и передают пакеты, но требуют ещё немного работы по стабильности и корректному отключению.

Есть одно препятствие: (старая и новая) реализация USB в LinuxKPI переплетена с нашим нативным стеком USB, что приводит к конфликтам.
Ведётся работа по решению этой проблемы, и определены два возможных пути, но сначала необходимо понять и очистить изменение, которому 15 лет.

==== Поддержка SDIO в LinuxKPI

Поддержка SDIO в LinuxKPI находится в моём дереве разработки уже около года и была сделана в основном для Realtek rtw88.
Broadcom потребует заполнения ещё нескольких мест-заполнителей, но это не должно быть слишком сложно.
Прерывания необходимо доработать, а поддержку повышения скорости следует взять из чужой незавершённой работы.
Я планирую включить её в дерево как есть, как только USB будет готов, чтобы люди могли помочь с тестированием и завершением.

==== Нативный net80211

Спасибо Команде по управлению портами (Ports Management Team) за проведение exp-run (экспериментальной тестовой сборки).
Я подготовил патч для выявления всех портов, использующих интерфейс ioctl net80211.
Это необходимо для того, чтобы заранее минимизировать поломки, связанные с предстоящими изменениями интерфейса ioctl.

Подробности смотрите в link:https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=293016[PR 293016].

==== Прочее

Я представил обновление по большей части этого материала во время мартовского звонка LDWG (Laptop Desktop Working Group).
Для получения дополнительной информации смотрите link:https://wiki.freebsd.org/LaptopDesktopWorkingGroup[страницу LDWG в Wiki].

Спонсор: Фонд FreeBSD

//
// The FreeBSD Russian Documentation Project
//
// Original EN revision (18.04.2026): 2021088c41d765c62450d70a09a3793432c746e9
//
