static void mtp_tunnel_unbind(void *_ctxt)
{
	struct mtp_tunnel_context *ctxt = _ctxt;
	struct usb_request *req;

	printk(KERN_DEBUG "mtp_tunnel_unbind()\n");

	while ((req = req_get(ctxt, &ctxt->rx_idle))) {
		usb_ept_free_req(ctxt->out, req);
	}
	while ((req = req_get(ctxt, &ctxt->tx_idle))) {
		usb_ept_free_req(ctxt->in, req);
	}

	ctxt->online = 0;
	ctxt->error = 1;

	if (ctxt->registered)	{
		device_remove_file(&mtp_tunnel_dev, &dev_attr_mtp_tunnel_status);
		device_unregister(&mtp_tunnel_dev);
		ctxt->registered = 0;
		}
	
	/* readers may be blocked waiting for us to go online */
	wake_up(&ctxt->read_wq);
}
static void zero_unbind(void *_ctxt)
{
	struct zero_context *ctxt = _ctxt;
	printk(KERN_INFO "null_unbind()\n");
	if (ctxt->req0) {
		usb_ept_free_req(ctxt->in, ctxt->req0);
		ctxt->req0 = 0;
	}
	if (ctxt->req1) {
		usb_ept_free_req(ctxt->in, ctxt->req1);
		ctxt->req1 = 0;
	}
	ctxt->in = 0;
}
Beispiel #3
0
static void eth_reset_config(struct eth_dev *dev)
{
	struct usb_request	*req;
	unsigned long  flags;

	DEBUG(dev, "%s\n", __func__);

	if (!dev)
		return;
	if (!dev->net)
		return;

	if (dev->configured == 0)
		return;
	netif_stop_queue(dev->net);
	netif_carrier_off(dev->net);

	
	if (dev->in_ep) {
		usb_ept_enable(dev->in_ep, 0);
		spin_lock_irqsave(&dev->req_lock, flags);
		while (likely(!list_empty(&dev->tx_reqs))) {
			req = container_of(dev->tx_reqs.next,
						struct usb_request, list);
			list_del(&req->list);
			spin_unlock_irqrestore(&dev->req_lock, flags);
			usb_ept_free_req(dev->in_ep, req);
			spin_lock_irqsave(&dev->req_lock, flags);
		}
		spin_unlock_irqrestore(&dev->req_lock, flags);
	}
Beispiel #4
0
static void diag_free_req_entry(struct usb_endpoint *ep,
		struct diag_req_entry *req)
{
	if (ep != NULL && req != NULL) {
		if (req->usb_req != NULL)
			usb_ept_free_req(ep, req->usb_req);
		kfree(req);
	}
}
Beispiel #5
0
static void adb_unbind(void *_ctxt)
{
	struct adb_context *ctxt = _ctxt;
	struct usb_request *req;

	DBG("%s()\n", __func__);

	while ((req = req_get(ctxt, &ctxt->rx_idle))) {
		usb_ept_free_req(ctxt->out, req);
	}
	while ((req = req_get(ctxt, &ctxt->tx_idle))) {
		usb_ept_free_req(ctxt->in, req);
	}

	ctxt->online = 0;
	ctxt->error = 1;

	/* readers may be blocked waiting for us to go online */
	wake_up(&ctxt->read_wq);
}