watchthelight labs

mt7925-wifi-native: 2026-10-29 (window 2026-10-28 11:14 to 2026-10-29 10:00 UTC)

RTL8814Native spent the night reverse engineering AWDL: 50 commits of notes and a first, untested stage 1 code drop. It is the most detailed public map so far of what a third-party IO80211 driver must provide for awdl0, and it is directly useful for our AWDL issue #2, which has not been started.

Notable

DrogaBox/RTL8814Native AWDL notes (repo, Docs/AWDL_*.md, written in Spanish). Licence: GPL-2.0 (the LICENSE file is the Realtek GPL-2.0 header), so ideas and facts only, no code. The findings were taken with IDA from the kernel collection and from wifip2pd on Darwin 25.6.0, with the addresses re-checked by script. They are claims to re-check against our own 25G332 dump, not proof. Medium confidence overall, High that the documents say what is summarised here.

  • AWDL gate: wifip2pd reads CARD_CAPABILITIES (type 12) and tests bit 0 of byte +0x08 before it asks for an AWDL interface (e7b9b3f, AWDL_PROTOTYPE_DESIGN.md 1.1).
  • Creation: VIRTUAL_IF_CREATE (type 94) has a 32-byte payload: MAC at +0x04, role at +0x0C (6 = AWDL), and the driver writes the BSD name back at +0x10. The generic createVirtualInterface accepts only role 7. Broadcom builds role 6 privately (AppleBCMWLANCore::setVIRTUAL_IF_CREATE then createProxInterface) (5232b82, ca8bbcb).
  • The 30 s wait in wifip2pd ends on an IORegistry match, not on an Apple80211 event. The new service needs IOInterfaceName, a SIOCGIFMEDIA media word with (ifm_current & 0xE0) == 0x80, a live BSD index and IO80211VirtualInterfaceRole = AirLink (d74b61b, 24e62b2, 184fe7b).
  • Class chain: AppleBCMWLANProximityInterface subclasses IO80211AWDLProtocol, which subclasses IO80211VirtualInterface. The notes list 64 pure virtual slots, each reachable through a same-named apple80211 bridge (7445b61, 48ee825, 875f02a). The kernel collection exports vtables, gMetaClass and constructors for these classes, so a kext can subclass them without a KDK (c8d0152).
  • Protocol in software: IO80211AWDLPeerManager already does master election, the sync tree, the TLV templates, the peer table and the timers. A driver inherits it through createPeerManager and only has to transmit the sync frame template on schedule, post the availability-window events 41/42/43, follow the channel sequence, deliver AWDL action frames and serve the TX pull (63da491, 048c706, 6c2d2d1).
  • Their plan is staged. Stage 1 is "awdl0 accepted by wifip2pd, no peers", with an exact request list (12, 94, 97, event monitoring, the usual ifnet ioctls) (ce85df3). The stage 1 code and an unapplied hook patch are in e44d308, and the post-create ioctls 130/131 were resolved last (d0d4a0a). Nothing has been shown working on hardware yet.

Why it matters: on the MT7925, the hard part of AWDL is timing (sync frames on a shared timeline, channel hops, a second MAC). Per their notes the firmware would carry that, while the kernel's peer manager carries the protocol. Stage 1 is a cheap feasibility spike we could plan against our own dump. Their per-build header IO80211AWDL_25_6_0.h is a second reference to check our 25G332 slots against.

Arxusion/AirportMtkWlan (repo): a laobamac WCL front end for MT7921/MT7922 that now claims Tahoe. It is not our IO80211 approach and has none of our code. Details are in the mt7925-wifi write-up of the same date.

Discovery verdicts

  • userminer2/Thinkpad-T470s-Tahoe-OpenCore-EFI: noise (Intel itlwm).
  • juansebsol/skullintosh: noise (Intel NUC, itlwm).
  • So1jon/Hackintosh-Lenovo-Ideapad-3-15IML05: noise (Intel AirportItlwm). Its Bluetooth notes say Tahoe's dongle allow-list includes a few MediaTek IDs.
  • Sanye223/EFI-Hackintosh-i5-13490F-Maxsun-Terminator-B760M-D4-RX570: noise (AX210, AirportItlwm).
  • luccaroli/Tahoe-on-Ryzen: noise (AX210, itlwm).
  • rabbitrogi/ROG-STRIX-Z490-F-GAMING-6900XT-Tahoe-Hackintosh: noise (Broadcom on the OCLP legacy stack).

Web sweep

A search for MtkWlanNative found nothing about it. Nothing new on the other searches.