Statistics for branch main built on 2024-07-23T17:55:34+0000, commit 96eb701991b4c23fcad2332934a6f9519e76fefa
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.