Statistics for branch wifi-agc built on 2024-07-23T17:55:35+0000, commit 46bea8bf209855a5205e0655227fc8349be2349d
The Wi-Fi peripheral needs to be initialized before we can send/receive packets. This is implemented in the binary blobs Espressif distributes, so to have a completely blobless Wi-Fi implementation, we need to implement this initialization ourselves as well. To get a scope of the challenge ahead of us, we used our patched QEMU to trace the execution flow of the Wi-Fi peripheral hardware initialization: every time the proprietary code accesses a memory-mapped register, a stacktrace is generated that logs the whole callstack. This can then be used to see what functions access which hardware registers.
Below is a flame graph of the whole hardware initialization. The functions/functionality that we already implemented is colored in green. Note that the width of each bar is not linear to the amount of memory accesses, but rescaled with the function x^0.4
You can click on a function to focus on that function. You can hover over a function to see how many IO accesses it (and it children) do.