After fighting with it for the last couple of days. We (Denis giving me tarballs and me testing) managed to find the problem in the DMA functions. That is fixed now. The second problem, which was that the driver never tried to free it's name, thus having maybe wlan9 with only one actual device, is also solved.

Most of the driver checks to see if USB_24 is defined, and then compiles one or the other version depending on this. However, on parts that just aren't there on the 2.4 version of the kernel, the driver checks for USB_26. As I managed to find out after putting printk()s basically everywhere, is that we never bother to define USB_26, so the part that sets the interface _never_ gets compiled, so the disconnect function retrieves a NULL pointer and returns immediately, not doing anything. As it should be obvious by now, this is a Bad Thing. This might have actually fixed some other stuff as well.

One of the patches I sent breaks compilation for the 2.4 kernel, but as it seems I'm the only one with USB in the list and I've been running 2.6 almost since the beginning, this isn't really a problem. I remember there was some other guy, but he hasn't shown up for quite a while.

I think I'll take out the 2.4 dependant part tomorrow and send a patch to see if Denis or Andi will take it. Denis' tarball is supposed to be targetted for inclusiong in the 2.6 mainline kernel, so this should be a natural step.