Skip to content

Releases: eiyuumiru/SimpleMtkWlan

v0.3.0-beta — experimental Wi-Fi 6 (802.11ax), fixes joins on slow APs

Choose a tag to compare

@eiyuumiru eiyuumiru released this 21 Oct 13:17

This beta adds opt-in 802.11ax (HE) support. It also fixes joins that timed out
on access points that are slow to answer. It is still experimental:

  • It is developed on one laptop (Lenovo Legion Slim 5 16APH8, RZ616, macOS 26.7.1).
  • 802.11ax was tested by @abhinavchandhu5-droid on a custom-built desktop
    (Ryzen 5 5600, RTX 3060) with an MT7922 PCIe card, on macOS 15.8.1 and a
    Wi-Fi 6 mesh AP. Thank you for testing!

Downloads

  • AirportMtkWlan-Sequoia-v0.3.0-beta.zip: native Wi-Fi menu, for macOS 15 Sequoia.
  • AirportMtkWlan-Tahoe-v0.3.0-beta.zip: native Wi-Fi menu, for macOS 26 Tahoe.
  • SimpleMtkWlan-v0.3.0-beta.zip: Ethernet-style; join with mtkctl.
  • mtkctl-v0.3.0-beta.zip: command-line client for both kexts.

Both AirportMtkWlan zips contain a kext named AirportMtkWlan.kext. Use the one
for your macOS version: a Sequoia build loads on Tahoe but never attaches. Load
only one kext.

Changes since v0.2.1

  • Experimental 802.11ax (HE), off by default. Add the boot-arg amtk_he=1
    to offer HE when joining. When the AP agrees, the driver sets the firmware up
    the way Linux mt7921 does:

    • HE MCS 0-11, 40/80 MHz, LDPC;
    • no 160 MHz, no beamforming, no TWT, no 6 GHz.

    To go back to 802.11ac without rebooting, run mtkctl knob 0x1002; it takes
    effect from the next join.

  • Fixed joins timing out in the association step. The driver put the
    firmware into deep sleep right after sending the Association Request. Mesh
    and other APs that take ~15 ms to answer never had their reply seen, so every
    join timed out, with or without HE. The firmware now stays awake until the
    link is up. This fix applies with and without amtk_he=1.

  • Three net80211 fixes found along the way:

    • The HE capabilities element was sent with a garbage length.
    • The channel width could be widened to 160 MHz from the AP's capabilities
      alone.
    • Two 802.11ax 2-stream rate rows were 2× and 4× too high.
  • New mtkctl sta: shows the current link (mode, channel, width, RSSI, MCS,
    rate, BSSID). It leaves out the SSID, so the output is safe to paste into a
    bug report.

Known problems

  • 802.11ax has been tested on very few APs. If HE causes trouble, remove
    amtk_he=1 or run mtkctl knob 0x1002, then report the output of
    mtkctl sta and mtkctl log.
  • macOS link-quality reports still carry no RSSI.
  • Sleep/wake is not tested.
  • No WPA3-only (SAE) networks, no 160 MHz, no 6 GHz.

For installation and troubleshooting, see the README.

Built from eb9024b (Debug, x86_64, unsigned). The driver code is the same as
81e4232, the build @abhinavchandhu5-droid tested. Checksums are in SHA256SUMS.txt.

v0.2.1 — faster throughput, smoother background scans

Choose a tag to compare

@eiyuumiru eiyuumiru released this 18 Oct 04:31

Fixes the throughput cap and reduces latency spikes during background scans.
It is still experimental and has been tested on one machine only (Lenovo Legion
Slim 5 16APH8, RZ616, macOS 26.7.1). The Sequoia build is compiled from the
same source but was not retested on macOS 15.

  • AirportMtkWlan-Sequoia-v0.2.1.zip: native Wi-Fi menu, macOS 15 Sequoia.
  • AirportMtkWlan-Tahoe-v0.2.1.zip: native Wi-Fi menu, macOS 26 Tahoe.
  • SimpleMtkWlan-v0.2.1.zip: Ethernet-style; join with mtkctl.
  • mtkctl-v0.2.1.zip: command-line client for both kexts.

Both AirportMtkWlan zips contain a kext named AirportMtkWlan.kext. Use the one
for your macOS version: a Sequoia build loads on Tahoe but never attaches. Load
one kext only.

Changes since v0.2.0

  • Much lower CPU use per packet. The MT7922 can only DMA below 4 GB, so on
    machines with more RAM almost every packet is copied through a bounce
    buffer, and those buffers were uncached. On the test network, download went
    from 41 to 96 Mbit/s and upload from 36 to 100 Mbit/s, with kernel_task
    dropping from about 97% to about 40%.
  • Shorter background-scan dwell. The per-channel dwell now follows the
    off-channel time macOS asks for (one third of it, since the firmware visits
    about three channels per trip). Worst-case ping during a scan went from about
    300 ms to about 140 ms. mtkctl dwell <ms|auto> overrides it.
  • macOS now sees the real TX rate (for example 867 Mbit/s, MCS 9) instead of a
    fixed low value. It is taken from firmware TX status reports, which are now
    requested only a few times per second instead of for every frame.
  • On firmware beacon loss the driver probes the AP before dropping the link.
  • BSS_ABSENCE firmware events are ignored quietly.
  • When the firmware stops DMA, the driver logs the TX descriptor it rejected,
    to help track down the cause.

Known problems

  • Throughput above about 100 Mbit/s has not been measured yet.
  • macOS link-quality reports still carry no RSSI.
  • Sleep/wake is not tested. No WPA3-only (SAE), no 802.11ax, no 6 GHz.

For installation and troubleshooting, see the README.

Built from 9eff544 (Debug, x86_64, unsigned). Checksums are in SHA256SUMS.txt.

v0.2.0 — macOS 26 Tahoe support, faster first join

Choose a tag to compare

@eiyuumiru eiyuumiru released this 17 Oct 15:29

Adds a build for macOS 26 Tahoe and fixes the first Wi-Fi join after boot. It is still experimental and has been tested on one machine only (Lenovo Legion Slim 5 16APH8, RZ616, macOS 15.8.1 and 26.7.1).

  • AirportMtkWlan-Sequoia-v0.2.0.zip: native Wi-Fi menu, macOS 15 Sequoia.
  • AirportMtkWlan-Tahoe-v0.2.0.zip: native Wi-Fi menu, macOS 26 Tahoe.
  • SimpleMtkWlan-v0.2.0.zip: Ethernet-style; join with mtkctl.
  • mtkctl-v0.2.0.zip: command-line client for both kexts.

Both AirportMtkWlan zips contain a kext named AirportMtkWlan.kext. Use the one for your macOS version: a Sequoia build loads on Tahoe but never attaches. Load one kext only.

Changes since v0.1.0

  • New macOS 26 (Tahoe) build of AirportMtkWlan.
  • The first join after boot or after turning Wi-Fi on no longer fails. A join that was waiting for a MAC-address change was cancelled by that change's own restart, so macOS always had to retry.
  • RX path hardened for Skywalk: chained A-MSDU frames are linearised, queued frames are dropped instead of panicking when the interface goes away, and an mbuf leak on a bad A-MSDU subframe is fixed.
  • Native CHANNELS_INFO on Tahoe, and link quality (LQM) is now reported to macOS.
  • TX applies back-pressure instead of dropping frames when the queue is full.
  • RX Block Ack reordering counters in mtkctl debug; the BA gap timeout is tunable.

The RX/Skywalk, CHANNELS_INFO and LQM changes are ported from laobamac/itlwm (cad1841, 36d5e28, a01d1d5).

Known problems

  • Download is capped at about 90-100 Mbit/s; upload is not.
  • No sleep/wake, no WPA3-only (SAE), no 802.11ax, no 6 GHz.

For installation and troubleshooting, see the README.

Built from 21a7be2 (Debug, x86_64, unsigned). Checksums are in SHA256SUMS.txt.

v0.1.0 — MT7921/MT7922 (RZ616) Wi-Fi for macOS Sequoia

Choose a tag to compare

@eiyuumiru eiyuumiru released this 15 Oct 02:17

First public build of the MediaTek MT7921/MT7922 (RZ616) Wi-Fi driver for macOS 15 Sequoia.
It is experimental and has been tested on one machine only.

  • AirportMtkWlan-v0.1.0.zip (recommended): native Wi-Fi menu. macOS 15 only.
  • SimpleMtkWlan-v0.1.0.zip: Ethernet-style; join with mtkctl.
  • mtkctl-v0.1.0.zip: command-line client for both kexts.

Load one kext only. For installation and known issues, see the README.

Built from 517bda8 (Debug, x86_64, unsigned). Checksums are in SHA256SUMS.txt.