int mc32_command (struct net_device * dev, u16 cmd, void * data, int len);
Sends exec commands in a user context. This permits us to wait around for the replies and also to wait for the command buffer to complete from a previous command before we execute our command. After our command completes we will attempt any pending multicast reload we blocked off by hogging the exec buffer.
You feed the card a command, you wait, it interrupts you get a reply. All well and good. The complication arises because you use commands for filter list changes which come in at bh level from things like IPV6 group stuff.