Exemplo n.º 1
0
static void
control_handle_data(void *arg)
{
	struct fd_list *l = arg;
	ssize_t bytes;
	int argc;
	char *e, *p;
	char **ap;

	bytes = read(l->fd, buffer, sizeof(buffer) - 1);
	if (bytes == -1 || bytes == 0) {
		control_remove(l);
		return;
	}
	buffer[bytes] = '\0';
	p = buffer;
	e = buffer + bytes;
	argc = 0;
	ap = argvp;
	while (p < e && (size_t)argc < sizeof(argvp)) {
		argc++;
		*ap++ = p;
		p += strlen(p) + 1;
	}
	handle_args(l, argc, argvp);
}
Exemplo n.º 2
0
void adapter_remove(struct sdio_func *func)
{
	struct net_adapter	*adapter = sdio_get_drvdata(func);

	dump_debug("%s", __func__);
	if (!adapter) {
		dump_debug("unregistering non-bound device?");
		return;
	}

	adapter->ready = FALSE;
	adapter->pdata->g_cfg->card_removed = TRUE;

	if (adapter->media_state == MEDIA_CONNECTED) {
		netif_stop_queue(adapter->net);
		adapter->media_state = MEDIA_DISCONNECTED;
	}

	/* remove adapter from adapters array */
	g_adapter = NULL;

	if (!adapter->removed)
		hw_stop(adapter);	/* free hw in and out buffer */

	if (adapter->downloading) {
		adapter->removed = TRUE;
		adapter->download_complete = TRUE;
		wake_up_interruptible(&adapter->download_event);
	}

	/* remove control process list */
	control_remove(adapter);

	/*remove hardware interface */
	hw_remove(adapter);

	misc_deregister(&uwibro_dev);
	if (adapter->net)
		unregister_netdev(adapter->net);
	cmc7xx_flush_skb(adapter);
	free_netdev(adapter->net);

	dump_debug("%s finished", __func__);
	return;
}