Hi Josef,
   Thanks also for your help on this, the run scripts are a big time saver over building a new Sculpt each time.

as you may have noticed, besides briefly looking into your branches
and pushing simple changes to make it easier to test the driver in Qemu
I unfortunately did not find the time to dig deeper why it apparently
was not working properly for me.

Did you try with a recent branch? I've been having success with rt2x00 and ath9k both lately.
 
That being said, yesterday I rebased [1] your changes to add hot-plugging
support to the 'wpa_supplicant' (they compile but I did not test whether
they work or not) to the staging branch containg the wifi stack changes
for the upcoming release.

I was able to get this to work with my "world" version [1]. You can see the small changes I needed to make to the main repo in [2]. Commit 7f5c967 fixes a small issue that wasn't revealed earlier where wpa_supplicant_ctrl_iface_deinit is called with a null pointer for the second argument. Commit 0b24c1c adds some switches to the linux compile without which the usb version of rt2x00 won't build, and 76c138d adds usb_report_filter to the config scenario and is not strictly necessary unless you want to switch between two types of devices (ath9k and rt2x00) on-the-fly.
 
I also sketched using the 'virt_linux' Linux
target as basis for a USB wifi driver - it will not link as 'virt_linux'
is not yet properly prepared for that scenario - as I believe that is
beneficial for an USB driver where DMA memory (and to that extend the
usage of the Platform service) is not necessary.

Yes, very much agree that USB drivers should not need/want access to DMA memory, Platform service, or PCI bus. I will try to tackle this next.
 

My (somewhat uninformed) guess is that it could be as simple as using
your 'lx_emul_usb.c' back end instead of, for example, 'lx_emul_pci.c'
(omitting the gory details/obstacles lurking in the dark…).

Maybe you want to give that a try?

Ok. It may not be so completely simple. Likely there would need to be at least small changes to wifi_drv, for example compare "frontend.h" between the two, you will see some additional features like _remove_all_aps(), and IFACE-DEINIT had to be added to support hot-plug.

[1] https://github.com/cvparker/genode-world/tree/ath9k_driver_support-2023-01-22
[2] https://github.com/cvparker/genode/tree/usb_wifi-2023-05-24

-CP