While you can achieve the same abstraction in hardware it’s much easier and cheaper to simply pick a small micro controller and do all the black magic you need in software especially since the flash on some of these cards can be really really bad as it’s often the lowest grade flash or worse recycled memory that ends up being used which means you end up with chips that are 50-80% defected so the controller ensures that these sectors/cells aren’t used.
> "hreadX provides priority-based, preemptive scheduling, fast interrupt response, memory management, interthread communication, mutual exclusion, event notification, and thread synchronization features. Major distinguishing technology characteristics of ThreadX include preemption-threshold, priority inheritance, efficient timer management, picokernel design, event-chaining, fast software timers, and compact size. The minimal footprint of ThreadX on an ARM processor is on the order of 2KB"
ie it's generic code that gets built into a unikernel-style image with the device-specific code that actually implements the various tasks required of a wifi controller.