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

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

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

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

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

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

  • поставляемые драйверы Intel iwlwifi(4) mvm/mld, Realtek rtw88(4) и rtw89(4),

  • драйвер Mediatek mt76, который находится в стадии разработки,

  • три драйвера Qualcomm Atheros: ath10k, ath11k и ath12k, которые требуют доработки, а также

  • драйвер Broadcom brcmfmac, который компилируется и загружает прошивку, но ему не хватает совместимой прослойки cfg80211 и некоторой работы над netdev.

Поддержка Intel iwlwifi

Для того чтобы обновление драйвера 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.

Подробности смотрите в PR 293016.

Прочее

Я представил обновление по большей части этого материала во время мартовского звонка LDWG (Laptop Desktop Working Group). Для получения дополнительной информации смотрите страницу LDWG в Wiki.

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


Последнее изменение: 27 апреля 2026 г. от Vladlen Popolitov