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.
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:
wifip2pdreadsCARD_CAPABILITIES(type 12) and tests bit 0 of byte +0x08 before it asks for an AWDL interface (e7b9b3f,AWDL_PROTOTYPE_DESIGN.md1.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 genericcreateVirtualInterfaceaccepts only role 7. Broadcom builds role 6 privately (AppleBCMWLANCore::setVIRTUAL_IF_CREATEthencreateProxInterface) (5232b82, ca8bbcb). - The 30 s wait in
wifip2pdends on an IORegistry match, not on an Apple80211 event. The new service needsIOInterfaceName, aSIOCGIFMEDIAmedia word with(ifm_current & 0xE0) == 0x80, a live BSD index andIO80211VirtualInterfaceRole = AirLink(d74b61b, 24e62b2, 184fe7b). - Class chain:
AppleBCMWLANProximityInterfacesubclassesIO80211AWDLProtocol, which subclassesIO80211VirtualInterface. The notes list 64 pure virtual slots, each reachable through a same-named apple80211 bridge (7445b61, 48ee825, 875f02a). The kernel collection exports vtables,gMetaClassand constructors for these classes, so a kext can subclass them without a KDK (c8d0152). - Protocol in software:
IO80211AWDLPeerManageralready does master election, the sync tree, the TLV templates, the peer table and the timers. A driver inherits it throughcreatePeerManagerand 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 "
awdl0accepted bywifip2pd, 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.
- 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).
A search for MtkWlanNative found nothing about it. Nothing new on the other searches.