/* Send a command from interrupt state. If there is a command currently being executed then we return an error of -1. It simply isn't viable to wait around as commands may be slow. This can theoretically be starved on SMP, but it's hard to see a realistic situation. We do not wait for the command to complete  */
static int mc32_command_nowait(struct net_device *dev, u16 cmd, void *data, int len)
/* Send a command from interrupt state. If there is a command currently being executed then we return an error of -1. It simply isn't viable to wait around as commands may be slow. This can theoretically be starved on SMP, but it's hard to see a realistic situation. We do not wait for the command to complete  */
static int mc32_command_nowait(struct net_device *dev, u16 cmd, void *data, int len)
{
	struct mc32_local *lp = netdev_priv(dev);
	int ioaddr = dev->base_addr;
	int ret = -1;
	if (down_trylock(&lp->cmd_mutex) == 0)
	{
		lp->cmd_nonblocking=1;
		lp->exec_box->mbox=0;
		lp->exec_box->mbox=cmd;
		memcpy((void *)lp->exec_box->data, data, len);
		barrier();
		mc32_ready_poll(dev);
		outb(1<<6, ioaddr+HOST_CMD);
		ret = 0;
	}
	return ret;
}