您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ usb_mark_last_busy函数代码示例

51自学网 2021-06-03 09:20:21
  C++
这篇教程C++ usb_mark_last_busy函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中usb_mark_last_busy函数的典型用法代码示例。如果您正苦于以下问题:C++ usb_mark_last_busy函数的具体用法?C++ usb_mark_last_busy怎么用?C++ usb_mark_last_busy使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了usb_mark_last_busy函数的19个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: rx_submit

static int rx_submit(struct usbsvn *svn, int dev_id, struct urb *req,		gfp_t gfp_flags){	struct net_device *dev = svn->netdev;	struct usbsvn_devdata *devdata = &svn->devdata[dev_id];	struct usbsvn_rx *svn_rx;	struct page *page;	int err;	svn_rx = kzalloc(sizeof(struct usbsvn_rx), gfp_flags);	if (!svn_rx)		return -ENOMEM;	page = __netdev_alloc_page(dev, gfp_flags);	if (!page) {		kfree(svn_rx);		return -ENOMEM;	}	svn_rx->netdev = dev;	svn_rx->dev_id = dev_id;	usb_fill_bulk_urb(req, svn->usbdev, devdata->rx_pipe,			page_address(page), PAGE_SIZE, rx_complete, svn_rx);	req->transfer_flags = 0;	err = usb_submit_urb(req, gfp_flags);	if (unlikely(err)) {		dev_err(&dev->dev, "RX submit error (%d)/n", err);		kfree(svn_rx);		netdev_free_page(dev, page);	}	usb_mark_last_busy(req->dev);	return err;}
开发者ID:myfluxi,项目名称:xxKernel,代码行数:36,


示例2: usbsvn_request_resume

int usbsvn_request_resume(void){	struct device *dev;	int err=0;	if (!share_svn->usbdev)		return -EFAULT;	dev = &share_svn->usbdev->dev;	if (share_svn->dpm_suspending) {		share_svn->skip_hostwakeup = 1;		printk(KERN_DEBUG "%s: suspending skip host wakeup/n",			__func__);		return 0;	}	usb_mark_last_busy(share_svn->usbdev);	if (share_svn->resume_debug >= 1) {		printk(KERN_DEBUG "%s: resumeing, return/n", __func__);		return 0;	}	if (dev->power.status != DPM_OFF) {		wake_lock_pm(share_svn);		printk(KERN_DEBUG "%s:run time resume/n", __func__);		share_svn->resume_debug = 1;		err = pm_runtime_resume(dev);		if (!err && dev->power.timer_expires == 0			&& dev->power.request_pending == false) {			printk(KERN_DEBUG "%s:run time idle/n", __func__);			pm_runtime_idle(dev);		}		share_svn->resume_debug = 0;	}	return 0;}
开发者ID:myfluxi,项目名称:xxKernel,代码行数:36,


示例3: play_deferred

static void play_deferred(struct btusb_data *data){    struct urb *urb;    int err;    while ((urb = usb_get_from_anchor(&data->deferred))) {        /************************************/        usb_anchor_urb(urb, &data->tx_anchor);        err = usb_submit_urb(urb, GFP_ATOMIC);        if (err < 0) {            BT_ERR("play_deferred urb %p submission failed",  urb);            kfree(urb->setup_packet);            usb_unanchor_urb(urb);        } else {            usb_mark_last_busy(data->udev);        }        usb_free_urb(urb);        /************************************/        data->tx_in_flight++;    }    mdelay(URB_CANCELING_DELAY_MS);     // Added by Realtek    usb_scuttle_anchored_urbs(&data->deferred);}
开发者ID:mattgorski,项目名称:platform_hardware_realtek,代码行数:24,


示例4: rx_complete

static void rx_complete (struct urb *urb){	struct sk_buff		*skb = (struct sk_buff *) urb->context;	struct skb_data		*entry = (struct skb_data *) skb->cb;	struct usbnet		*dev = entry->dev;	int			urb_status = urb->status;	enum skb_state		state;	skb_put (skb, urb->actual_length);	state = rx_done;	entry->urb = NULL;	switch (urb_status) {	/* success */	case 0:		if (skb->len < dev->net->hard_header_len) {			state = rx_cleanup;			dev->net->stats.rx_errors++;			dev->net->stats.rx_length_errors++;			netif_dbg(dev, rx_err, dev->net,				  "rx length %d/n", skb->len);		}		break;	/* stalls need manual reset. this is rare ... except that	 * when going through USB 2.0 TTs, unplug appears this way.	 * we avoid the highspeed version of the ETIMEDOUT/EILSEQ	 * storm, recovering as needed.	 */	case -EPIPE:		dev->net->stats.rx_errors++;		usbnet_defer_kevent (dev, EVENT_RX_HALT);		// FALLTHROUGH	/* software-driven interface shutdown */	case -ECONNRESET:		/* async unlink */	case -ESHUTDOWN:		/* hardware gone */		netif_dbg(dev, ifdown, dev->net,			  "rx shutdown, code %d/n", urb_status);		goto block;	/* we get controller i/o faults during khubd disconnect() delays.	 * throttle down resubmits, to avoid log floods; just temporarily,	 * so we still recover when the fault isn't a khubd delay.	 */	case -EPROTO:	case -ETIME:	case -EILSEQ:		dev->net->stats.rx_errors++;		if (!timer_pending (&dev->delay)) {			mod_timer (&dev->delay, jiffies + THROTTLE_JIFFIES);			netif_dbg(dev, link, dev->net,				  "rx throttle %d/n", urb_status);		}block:		state = rx_cleanup;		entry->urb = urb;		urb = NULL;		break;	/* data overrun ... flush fifo? */	case -EOVERFLOW:		dev->net->stats.rx_over_errors++;		// FALLTHROUGH	default:		state = rx_cleanup;		dev->net->stats.rx_errors++;		netif_dbg(dev, rx_err, dev->net, "rx status %d/n", urb_status);		break;	}	state = defer_bh(dev, skb, &dev->rxq, state);	if (urb) {		if (netif_running (dev->net) &&		    !test_bit (EVENT_RX_HALT, &dev->flags) &&		    state != unlink_start) {			rx_submit (dev, urb, GFP_ATOMIC);			usb_mark_last_busy(dev->udev);			return;		}		usb_free_urb (urb);	}	netif_dbg(dev, rx_err, dev->net, "no read resubmitted/n");}
开发者ID:EddyKuo,项目名称:linux-sdk-kernel-source,代码行数:86,


示例5: mutex_lock_interruptible

static ssize_t wdm_read(struct file *file, char __user *buffer, size_t count, loff_t *ppos){	int rv, cntr = 0;	int i = 0;	struct wdm_device *desc = file->private_data;	rv = mutex_lock_interruptible(&desc->lock); /*concurrent reads */	if (rv < 0)		return -ERESTARTSYS;	if (desc->length == 0) {		desc->read = 0;retry:		if (test_bit(WDM_DISCONNECTING, &desc->flags)) {			rv = -ENODEV;			goto err;		}		i++;		if (file->f_flags & O_NONBLOCK) {			if (!test_bit(WDM_READ, &desc->flags)) {				rv = cntr ? cntr : -EAGAIN;				goto err;			}			rv = 0;		} else {			rv = wait_event_interruptible(desc->wait,				test_bit(WDM_READ, &desc->flags));		}		/* may have happened while we slept */		if (test_bit(WDM_DISCONNECTING, &desc->flags)) {			rv = -ENODEV;			goto err;		}		usb_mark_last_busy(interface_to_usbdev(desc->intf));		if (rv < 0) {			rv = -ERESTARTSYS;			goto err;		}		spin_lock_irq(&desc->iuspin);		if (desc->rerr) { /* read completed, error happened */			desc->rerr = 0;			spin_unlock_irq(&desc->iuspin);			rv = -EIO;			goto err;		}		/*		 * recheck whether we've lost the race		 * against the completion handler		 */		if (!test_bit(WDM_READ, &desc->flags)) { /* lost race */			spin_unlock_irq(&desc->iuspin);			goto retry;		}		if (!desc->reslength) { /* zero length read */			spin_unlock_irq(&desc->iuspin);			goto retry;		}		clear_bit(WDM_READ, &desc->flags);		spin_unlock_irq(&desc->iuspin);	}	cntr = count > desc->length ? desc->length : count;	rv = copy_to_user(buffer, desc->ubuf, cntr);	if (rv > 0) {		rv = -EFAULT;		goto err;	}	for (i = 0; i < desc->length - cntr; i++)		desc->ubuf[i] = desc->ubuf[i + cntr];	desc->length -= cntr;	/* in case we had outstanding data */	if (!desc->length)		clear_bit(WDM_READ, &desc->flags);	rv = cntr;err:	mutex_unlock(&desc->lock);	return rv;}
开发者ID:454053205,项目名称:linux,代码行数:86,


示例6: usbhid_mark_busy

static void usbhid_mark_busy(struct usbhid_device *usbhid){	struct usb_interface *intf = usbhid->intf;	usb_mark_last_busy(interface_to_usbdev(intf));}
开发者ID:onenonlycasper,项目名称:tf700t_kernel,代码行数:6,


示例7: rx_complete

void rx_complete (struct urb *urb){	struct sk_buff		*skb = (struct sk_buff *) urb->context;	struct skb_data		*entry = (struct skb_data *) skb->cb;	struct usbnet		*dev = entry->dev;	int			urb_status = urb->status;	enum skb_state		state;	skb_put (skb, urb->actual_length);	state = rx_done;	entry->urb = NULL;		if (enable_tx_rx_debug && (urb_status != -ECONNRESET))		netdev_info(dev->net, "[RMNET_D]rx_c, status: %d/n", urb_status);		switch (urb_status) {	/* success */	case 0:		break;	case -EPIPE:		dev->net->stats.rx_errors++;		usbnet_defer_kevent (dev, EVENT_RX_HALT);				case -ECONNRESET:			case -ESHUTDOWN:				netif_dbg(dev, ifdown, dev->net,			  "rx shutdown, code %d/n", urb_status);		goto block;	case -EPROTO:	case -ETIME:	case -EILSEQ:		dev->net->stats.rx_errors++;		if (!timer_pending (&dev->delay)) {			mod_timer (&dev->delay, jiffies + THROTTLE_JIFFIES);			netif_dbg(dev, link, dev->net,				  "rx throttle %d/n", urb_status);		}block:		state = rx_cleanup;		entry->urb = urb;		urb = NULL;		break;		case -EOVERFLOW:		dev->net->stats.rx_over_errors++;			default:		state = rx_cleanup;		dev->net->stats.rx_errors++;		netif_dbg(dev, rx_err, dev->net, "rx status %d/n", urb_status);		break;	}	state = defer_bh(dev, skb, &dev->rxq, state);	if (urb) {		if (netif_running (dev->net) &&		    !test_bit (EVENT_RX_HALT, &dev->flags) &&		    state != unlink_start) {			rx_submit (dev, urb, GFP_ATOMIC);#ifdef HTC_PM_DBG			if (usb_pm_debug_enabled)				usb_mark_intf_last_busy(dev->intf, true);#endif			usb_mark_last_busy(dev->udev);			return;		}		usb_free_urb (urb);	}	netif_dbg(dev, rx_err, dev->net, "no read resubmitted/n");}
开发者ID:droidcore,项目名称:kangaroo-m7-mkv,代码行数:79,


示例8: usb_rx_complete

static void usb_rx_complete(struct urb *urb){	struct if_usb_devdata *pipe_data = urb->context;	struct usb_link_device *usb_ld = usb_get_intfdata(pipe_data->data_intf);	struct io_device *iod;	int iod_format = IPC_FMT;	int ret;	usb_mark_last_busy(urb->dev);	switch (urb->status) {	case 0:	case -ENOENT:		if (!urb->actual_length)			goto re_submit;		/* call iod recv */		/* how we can distinguish boot ch with fmt ch ?? */		switch (pipe_data->format) {		case IF_USB_FMT_EP:			iod_format = IPC_FMT;			pr_buffer("rx", (char *)urb->transfer_buffer,					(size_t)urb->actual_length, 16);			break;		case IF_USB_RAW_EP:			iod_format = IPC_MULTI_RAW;			break;		case IF_USB_RFS_EP:			iod_format = IPC_RFS;			break;		default:			break;		}		/* during boot stage fmt end point */		/* shared with boot io device */		/* when we use fmt device only, at boot and ipc exchange			it can be reduced to 1 device */		if (iod_format == IPC_FMT &&			usb_ld->ld.com_state == COM_BOOT)			iod_format = IPC_BOOT;		if (iod_format == IPC_FMT &&			usb_ld->ld.com_state == COM_CRASH)			iod_format = IPC_RAMDUMP;		iod = link_get_iod_with_format(&usb_ld->ld, iod_format);		if (iod) {			ret = iod->recv(iod,					&usb_ld->ld,					(char *)urb->transfer_buffer,					urb->actual_length);			if (ret < 0)				mif_err("io device recv error :%d/n", ret);		}re_submit:		if (urb->status || atomic_read(&usb_ld->suspend_count))			break;		usb_mark_last_busy(urb->dev);		usb_rx_submit(pipe_data, urb, GFP_ATOMIC);		return;	case -ESHUTDOWN:	case -EPROTO:		break;	case -EOVERFLOW:		mif_err("RX overflow/n");		break;	default:		mif_err("RX complete Status (%d)/n", urb->status);		break;	}	usb_anchor_urb(urb, &pipe_data->urbs);}
开发者ID:gadido30,项目名称:bigfatwifi,代码行数:73,


示例9: rx_threadfn

static int rx_threadfn(void *x_){	struct hsictty_port_private *portdata = x_;	long rc = 0;	struct sched_param param = {.sched_priority = 50 };	sched_setscheduler(current, SCHED_FIFO, &param);	while (!kthread_should_stop()) {		if (portdata->thread_exit) {			msleep(5);			continue;		}		process_rx_data(portdata);		rc = wait_for_completion_timeout(&portdata->rx_notifier,						 5 * HZ);		INIT_COMPLETION(portdata->rx_notifier);	}	return 0;}#endifstatic void hsictty_read_callback(struct urb *urb){	int endpoint;	struct _HSICTTY_MSG *msg = NULL;	int msg_index = -1;	struct usb_serial_port *port;	int status = urb->status;	struct hsictty_port_private *portdata;	unsigned long flags;	int err = -1;	u8 channel = 0;	struct hsictty_intf_private *intfdata;	static int error_times = 0;	int error_times_limits = 50;	hsictty_dbg("%s: %p/n", __func__, urb);	endpoint = usb_pipeendpoint(urb->pipe);	port = urb->context;	portdata = usb_get_serial_port_data(port);	intfdata = usb_get_serial_data(port->serial);	channel = portdata->channel;	if (status) {		hsictty_dbg		    ("%s: nonzero status: %d on channel:%d, endpoint %02x./n",		     __func__, status, channel, endpoint);		if (intfdata->multi_channel_mode) {			if (((status == -EPROTO) || (status == -EOVERFLOW))			    && error_times++ < error_times_limits) {				hsictty_error				    ("%s: an halted error detected, will try again, status: %d on channel:%d, endpoint %02x./n",				     __func__, status, channel, endpoint);				err = usb_submit_urb(urb, GFP_ATOMIC);				if (err) {					if (err != -EPERM) {						printk(KERN_ERR						       "%s: resubmit read urb failed in channel:%d./n"						       "(%d)", __func__,						       channel, err);						/* busy also in error unless we are killed */						usb_mark_last_busy(port->								   serial->dev);					}				} else {					usb_mark_last_busy(port->serial->dev);				}			} else if (status == -EPROTO) {				hsictty_error				    ("%s: unrecorvery halted error detected, please check the hsic connection/n",				     __func__);			}		}	} else {		error_times = 0;		port = urb->context;		portdata = usb_get_serial_port_data(port);		if ((msg_index = get_read_msg_index(portdata)) < 0) {			hsictty_error			    ("%s: get read msg fail in channel:%d, endpoint:%d./n",			     __func__, channel, endpoint);			err = usb_submit_urb(urb, GFP_ATOMIC);			if (err) {				if (err != -EPERM) {					printk(KERN_ERR					       "%s: resubmit read urb failed in channel:%d./n"					       "(%d)", __func__, channel, err);					/* busy also in error unless we are killed */					usb_mark_last_busy(port->serial->dev);				}			} else				usb_mark_last_busy(port->serial->dev);			return;		}		msg = &portdata->read_msg[msg_index];#ifdef BACKUP_DATA_DUMP//.........这里部分代码省略.........
开发者ID:qkdang,项目名称:m462,代码行数:101,


示例10: rmnet_usb_ctrl_probe

int rmnet_usb_ctrl_probe(struct usb_interface *intf,			 struct usb_host_endpoint *int_in,			 unsigned long rmnet_devnum,			 unsigned long *data){	struct rmnet_ctrl_dev		*dev = NULL;	u16				wMaxPacketSize;	struct usb_endpoint_descriptor	*ep;	struct usb_device		*udev = interface_to_usbdev(intf);	int				interval;	int				ret = 0, n;	/* Find next available ctrl_dev */	for (n = 0; n < insts_per_dev; n++) {		dev = &ctrl_devs[rmnet_devnum][n];		if (!dev->claimed)			break;	}	if (!dev || n == insts_per_dev) {		pr_err("%s: No available ctrl devices for %lu/n", __func__,			rmnet_devnum);		return -ENODEV;	}	dev->int_pipe = usb_rcvintpipe(udev,		int_in->desc.bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);	dev->intf = intf;	dev->id = rmnet_devnum;	dev->snd_encap_cmd_cnt = 0;	dev->get_encap_resp_cnt = 0;	dev->resp_avail_cnt = 0;	dev->tx_ctrl_err_cnt = 0;	dev->set_ctrl_line_state_cnt = 0;	dev->inturb = usb_alloc_urb(0, GFP_KERNEL);	if (!dev->inturb) {		dev_err(dev->devicep, "Error allocating int urb/n");		return -ENOMEM;	}	/*use max pkt size from ep desc*/	ep = &dev->intf->cur_altsetting->endpoint[0].desc;	wMaxPacketSize = le16_to_cpu(ep->wMaxPacketSize);	dev->intbuf = kmalloc(wMaxPacketSize, GFP_KERNEL);	if (!dev->intbuf) {		usb_free_urb(dev->inturb);		dev_err(dev->devicep, "Error allocating int buffer/n");		return -ENOMEM;	}	dev->in_ctlreq->bRequestType =		(USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE);	dev->in_ctlreq->bRequest  = USB_CDC_GET_ENCAPSULATED_RESPONSE;	dev->in_ctlreq->wValue = 0;	dev->in_ctlreq->wIndex =		dev->intf->cur_altsetting->desc.bInterfaceNumber;	dev->in_ctlreq->wLength = cpu_to_le16(DEFAULT_READ_URB_LENGTH);	interval = max((int)int_in->desc.bInterval,			(udev->speed == USB_SPEED_HIGH) ? HS_INTERVAL							: FS_LS_INTERVAL);	usb_fill_int_urb(dev->inturb, udev,			 dev->int_pipe,			 dev->intbuf, wMaxPacketSize,			 notification_available_cb, dev, interval);	usb_mark_last_busy(udev);	ret = rmnet_usb_ctrl_start_rx(dev);	if (ret) {		usb_free_urb(dev->inturb);		kfree(dev->intbuf);		return ret;	}	ctl_msg_dbg_mask = MSM_USB_CTL_DUMP_BUFFER;	dev->claimed = true;	/*mux info is passed to data parameter*/	if (*data)		set_bit(RMNET_CTRL_DEV_MUX_EN, &dev->status);	*data = (unsigned long)dev;	/* If MUX is enabled, wakeup the open process here */	if (test_bit(RMNET_CTRL_DEV_MUX_EN, &dev->status)) {		set_bit(RMNET_CTRL_DEV_READY, &dev->status);		wake_up(&dev->open_wait_queue);	}	return 0;}
开发者ID:Svard73,项目名称:SM-T700-T705-Kernel,代码行数:98,


示例11: rmnet_usb_ctrl_probe

int rmnet_usb_ctrl_probe(struct usb_interface *intf,		struct usb_host_endpoint *int_in, struct rmnet_ctrl_dev *dev){	u16				wMaxPacketSize;	struct usb_endpoint_descriptor	*ep;	struct usb_device		*udev;	int				interval;	int				ret = 0;	udev = interface_to_usbdev(intf);	if (!dev) {		pr_err("%s: Ctrl device not found/n", __func__);		return -ENODEV;	}	dev->int_pipe = usb_rcvintpipe(udev,		int_in->desc.bEndpointAddress & USB_ENDPOINT_NUMBER_MASK);	mutex_lock(&dev->dev_lock);	dev->intf = intf;	/*TBD: for now just update CD status*/	dev->cbits_tolocal = ACM_CTRL_CD;	/*send DTR high to modem*/	dev->cbits_tomdm = ACM_CTRL_DTR;	mutex_unlock(&dev->dev_lock);	dev->resp_available = false;	dev->snd_encap_cmd_cnt = 0;	dev->get_encap_resp_cnt = 0;	dev->resp_avail_cnt = 0;	dev->tx_ctrl_err_cnt = 0;	dev->set_ctrl_line_state_cnt = 0;	ret = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),			USB_CDC_REQ_SET_CONTROL_LINE_STATE,			(USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE),			dev->cbits_tomdm,			dev->intf->cur_altsetting->desc.bInterfaceNumber,			NULL, 0, USB_CTRL_SET_TIMEOUT);	if (ret < 0)		return ret;	dev->set_ctrl_line_state_cnt++;	dev->inturb = usb_alloc_urb(0, GFP_KERNEL);	if (!dev->inturb) {		dev_err(dev->devicep, "Error allocating int urb/n");		return -ENOMEM;	}	/*use max pkt size from ep desc*/	ep = &dev->intf->cur_altsetting->endpoint[0].desc;	wMaxPacketSize = le16_to_cpu(ep->wMaxPacketSize);	dev->intbuf = kmalloc(wMaxPacketSize, GFP_KERNEL);	if (!dev->intbuf) {		usb_free_urb(dev->inturb);		dev_err(dev->devicep, "Error allocating int buffer/n");		return -ENOMEM;	}	dev->in_ctlreq->bRequestType =		(USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE);	dev->in_ctlreq->bRequest  = USB_CDC_GET_ENCAPSULATED_RESPONSE;	dev->in_ctlreq->wValue = 0;	dev->in_ctlreq->wIndex =		dev->intf->cur_altsetting->desc.bInterfaceNumber;	dev->in_ctlreq->wLength = cpu_to_le16(DEFAULT_READ_URB_LENGTH);	interval = max((int)int_in->desc.bInterval,			(udev->speed == USB_SPEED_HIGH) ? HS_INTERVAL							: FS_LS_INTERVAL);	usb_fill_int_urb(dev->inturb, udev,			 dev->int_pipe,			 dev->intbuf, wMaxPacketSize,			 notification_available_cb, dev, interval);	usb_mark_last_busy(udev);	ret = rmnet_usb_ctrl_start_rx(dev);	if (!ret)		dev->is_connected = true;	ctl_msg_dbg_mask = 0;	return ret;}
开发者ID:devil1210,项目名称:EvilKernel,代码行数:89,


示例12: process_rx_data

//.........这里部分代码省略.........					    receive_room_limit) {						tty->ldisc->ops->						    receive_buf(tty, ptr, NULL,								nleft);						nleft = 0;						continue;					}wait_rx_allowed:					//Note: should not use tty receive_room, it is not protected in tty core, will cause data lost.					receive_room = tty->receive_room;					if (receive_room <= throttle_limit) {						int rc;						hsictty_dbg						    ("ch:%d wait tty room,room left(%d)/n",						     channel, tty->receive_room);#ifdef USB_TTY_THROTTLE_CB						up(&portdata->ch_sem_r);						rc = wait_for_completion_interruptible_timeout(&portdata->rx_push_notifier, 5 * HZ);						down(&portdata->ch_sem_r);						//INIT_COMPLETION(portdata->rx_push_notifier);						if (rc <= 0) {							hsictty_error							    ("%s: error wait push in in channel:%d, endpoint:%d, error(%s)/n/n",							     __func__,							     channel, endpoint,							     (rc < 0) ? "-EINT" : "-EBUSY");							if (rc < 0)								break;						}						if ((port->serial && port->serial->disconnected) || !portdata->opened) {							hsictty_info							    ("%s: detect disconnect or close while reading on channel:%d, need exit/n",							     __func__, channel);							break;						} else							goto wait_rx_allowed;#else						if (waitqueue_active(&tty->read_wait))							wake_up_interruptible(&tty->read_wait);						usleep_range(1, 2);#endif						goto wait_rx_allowed;					}					if (nleft >= receive_room - throttle_limit) {						once = receive_room - throttle_limit;						npushed = once;						nleft -= once;					} else {						npushed = nleft;						nleft = 0;					}					hsictty_dbg					    ("%s:ch:%d,ep:%d npushed:%d,recvroom:%d/n",					     __func__, channel, endpoint,					     npushed, tty->receive_room);					tty->ldisc->ops->receive_buf(tty, ptr, NULL, npushed);					ptr += npushed;				}#else				u32 nleft = 0, npushed = 0, once = 16000;				unsigned char *ptr = NULL;				nleft = urb->actual_length;				ptr = data;				while (nleft > 0) {					npushed = tty_insert_flip_string(tty->port,								   ptr, nleft);					tty_flip_buffer_push(tty->port);					nleft -= npushed;					ptr += npushed;					//usleep_range(1,2);					//udelay(5);				}#endif			}			tty_kref_put(tty);		}		up(&portdata->ch_sem_r);		/* Resubmit urb so we continue receiving */		spin_lock_irqsave(&portdata->pool_lock, flags);		msg->urb = NULL;		spin_unlock_irqrestore(&portdata->pool_lock, flags);		if (portdata->opened) {			err = usb_submit_urb(urb, GFP_ATOMIC);			if (err) {				if (err != -EPERM) {					hsictty_error					    ("%s: resubmit read urb failed in channel:%d./n"					     "(%d)", __func__, channel, err);					/* busy also in error unless we are killed */					usb_mark_last_busy(port->serial->dev);				}			} else				usb_mark_last_busy(port->serial->dev);		}		usb_autopm_put_interface_async(port->serial->interface);	}out:	;			//hsictty_dbg("%s: exit/n", __func__);}
开发者ID:qkdang,项目名称:m462,代码行数:101,


示例13: usb_stor_control_thread

//仔细研读static int usb_stor_control_thread(void * __us){	struct us_data *us = (struct us_data *)__us;	struct Scsi_Host *host = us_to_host(us);//---------------------------pr_info("7 usb stor control thread/n");	for(;;) {		US_DEBUGP("*** thread sleeping./n");		if (wait_for_completion_interruptible(&us->cmnd_ready))			break;		US_DEBUGP("*** thread awakened./n");		/* lock the device pointers */		mutex_lock(&(us->dev_mutex));		/* lock access to the state */		scsi_lock(host);		/* When we are called with no command pending, we're done */		if (us->srb == NULL) {			scsi_unlock(host);			mutex_unlock(&us->dev_mutex);			US_DEBUGP("-- exiting/n");			break;		}		/* has the command timed out *already* ? */		if (test_bit(US_FLIDX_TIMED_OUT, &us->dflags)) {			us->srb->result = DID_ABORT << 16;			goto SkipForAbort;		}		scsi_unlock(host);		/* reject the command if the direction indicator 		 * is UNKNOWN		 */		if (us->srb->sc_data_direction == DMA_BIDIRECTIONAL) {			US_DEBUGP("UNKNOWN data direction/n");			us->srb->result = DID_ERROR << 16;		}		/* reject if target != 0 or if LUN is higher than		 * the maximum known LUN		 */		else if (us->srb->device->id && 				!(us->fflags & US_FL_SCM_MULT_TARG)) {			US_DEBUGP("Bad target number (%d:%d)/n",				  us->srb->device->id, us->srb->device->lun);			us->srb->result = DID_BAD_TARGET << 16;		}		else if (us->srb->device->lun > us->max_lun) {			US_DEBUGP("Bad LUN (%d:%d)/n",				  us->srb->device->id, us->srb->device->lun);			us->srb->result = DID_BAD_TARGET << 16;		}		/* Handle those devices which need us to fake 		 * their inquiry data */		else if ((us->srb->cmnd[0] == INQUIRY) &&			    (us->fflags & US_FL_FIX_INQUIRY)) {			unsigned char data_ptr[36] = {			    0x00, 0x80, 0x02, 0x02,			    0x1F, 0x00, 0x00, 0x00};			US_DEBUGP("Faking INQUIRY command/n");			fill_inquiry_response(us, data_ptr, 36);			us->srb->result = SAM_STAT_GOOD;		}		/* we've got a command, let's do it! */		else {			US_DEBUG(usb_stor_show_command(us->srb));			us->proto_handler(us->srb, us);			usb_mark_last_busy(us->pusb_dev);		}		/* lock access to the state */		scsi_lock(host);		/* indicate that the command is done */		if (us->srb->result != DID_ABORT << 16) {			US_DEBUGP("scsi cmd done, result=0x%x/n", 				   us->srb->result);			us->srb->scsi_done(us->srb);		} else {SkipForAbort:			US_DEBUGP("scsi command aborted/n");		}		/* If an abort request was received we need to signal that		 * the abort has finished.  The proper test for this is		 * the TIMED_OUT flag, not srb->result == DID_ABORT, because		 * the timeout might have occurred after the command had		 * already completed with a different result code. *///.........这里部分代码省略.........
开发者ID:Andrealphus,项目名称:Drivers-for-USB-storage-Zhao,代码行数:101,


示例14: rx_submit

static int rx_submit (struct usbnet *dev, struct urb *urb, gfp_t flags){	struct sk_buff		*skb;	struct skb_data		*entry;	int			retval = 0;	unsigned long		lockflags;	size_t			size = dev->rx_urb_size;	if ((skb = alloc_skb (size + NET_IP_ALIGN, flags)) == NULL) {		netif_dbg(dev, rx_err, dev->net, "no rx skb/n");		usbnet_defer_kevent (dev, EVENT_RX_MEMORY);		usb_free_urb (urb);		return -ENOMEM;	}	if (dev->net->type != ARPHRD_RAWIP)		skb_reserve(skb, NET_IP_ALIGN);	entry = (struct skb_data *) skb->cb;	entry->urb = urb;	entry->dev = dev;	entry->state = rx_start;	entry->length = 0;	usb_fill_bulk_urb (urb, dev->udev, dev->in,		skb->data, size, rx_complete, skb);	spin_lock_irqsave (&dev->rxq.lock, lockflags);	if (netif_running (dev->net) &&	    netif_device_present (dev->net) &&	    !test_bit (EVENT_RX_HALT, &dev->flags) &&	    !test_bit (EVENT_DEV_ASLEEP, &dev->flags)) {		switch (retval = usb_submit_urb (urb, GFP_ATOMIC)) {		case -EPIPE:			usbnet_defer_kevent (dev, EVENT_RX_HALT);			break;		case -ENOMEM:			usbnet_defer_kevent (dev, EVENT_RX_MEMORY);			break;		case -ENODEV:			netif_dbg(dev, ifdown, dev->net, "device gone/n");			netif_device_detach (dev->net);			break;		case -EHOSTUNREACH:			retval = -ENOLINK;			break;		default:			netif_dbg(dev, rx_err, dev->net,				  "rx submit, %d/n", retval);			queue_work(usbnet_wq, &dev->bh_w);			break;		case 0:			usb_mark_last_busy(dev->udev);			__skb_queue_tail (&dev->rxq, skb);		}	} else {		netif_dbg(dev, ifdown, dev->net, "rx: stopped/n");		retval = -ENOLINK;	}	spin_unlock_irqrestore (&dev->rxq.lock, lockflags);	if (retval) {		dev_kfree_skb_any (skb);		usb_free_urb (urb);	}	return retval;}
开发者ID:regit66,项目名称:android_kernel_lge_geehrc,代码行数:67,


示例15: i2400mu_tx

staticint i2400mu_tx(struct i2400mu *i2400mu, struct i2400m_msg_hdr *tx_msg,	       size_t tx_msg_size){	int result = 0;	struct i2400m *i2400m = &i2400mu->i2400m;	struct device *dev = &i2400mu->usb_iface->dev;	int usb_pipe, sent_size, do_autopm;	struct usb_endpoint_descriptor *epd;	d_fnstart(4, dev, "(i2400mu %p)/n", i2400mu);	do_autopm = atomic_read(&i2400mu->do_autopm);	result = do_autopm ?		usb_autopm_get_interface(i2400mu->usb_iface) : 0;	if (result < 0) {		dev_err(dev, "TX: can't get autopm: %d/n", result);		do_autopm = 0;	}	epd = usb_get_epd(i2400mu->usb_iface, i2400mu->endpoint_cfg.bulk_out);	usb_pipe = usb_sndbulkpipe(i2400mu->usb_dev, epd->bEndpointAddress);retry:	result = usb_bulk_msg(i2400mu->usb_dev, usb_pipe,			      tx_msg, tx_msg_size, &sent_size, 200);	usb_mark_last_busy(i2400mu->usb_dev);	switch (result) {	case 0:		if (sent_size != tx_msg_size) {	/*                    */			dev_err(dev, "TX: short write (%d B vs %zu "				"expected)/n", sent_size, tx_msg_size);			result = -EIO;		}		break;	case -EPIPE:		/*                                                                                                                                                                                                                                                                                                                             */		if (edc_inc(&i2400mu->urb_edc,			    10 * EDC_MAX_ERRORS, EDC_ERROR_TIMEFRAME)) {			dev_err(dev, "BM-CMD: too many stalls in "				"URB; resetting device/n");			usb_queue_reset_device(i2400mu->usb_iface);			/*             */		} else {			usb_clear_halt(i2400mu->usb_dev, usb_pipe);			msleep(10);	/*                           */			goto retry;		}	case -EINVAL:			/*                       */	case -ENODEV:			/*                    */	case -ENOENT:			/*                */	case -ESHUTDOWN:		/*          */	case -ECONNRESET:		result = -ESHUTDOWN;		break;	default:			/*             */		if (edc_inc(&i2400mu->urb_edc,			    EDC_MAX_ERRORS, EDC_ERROR_TIMEFRAME)) {			dev_err(dev, "TX: maximum errors in URB "				"exceeded; resetting device/n");			usb_queue_reset_device(i2400mu->usb_iface);		} else {			dev_err(dev, "TX: cannot send URB; retrying. "				"tx_msg @%zu %zu B [%d sent]: %d/n",				(void *) tx_msg - i2400m->tx_buf,				tx_msg_size, sent_size, result);			goto retry;		}	}	if (do_autopm)		usb_autopm_put_interface(i2400mu->usb_iface);	d_fnend(4, dev, "(i2400mu %p) = result/n", i2400mu);	return result;}
开发者ID:romanbb,项目名称:android_kernel_lge_d851,代码行数:80,


示例16: btusb_send_frame

//.........这里部分代码省略.........	if (!test_bit(HCI_RUNNING, &hdev->flags))		return -EBUSY;	switch (bt_cb(skb)->pkt_type) {	case HCI_COMMAND_PKT:		urb = usb_alloc_urb(0, GFP_ATOMIC);		if (!urb)			return -ENOMEM;		dr = kmalloc(sizeof(*dr), GFP_ATOMIC);		if (!dr) {			usb_free_urb(urb);			return -ENOMEM;		}		dr->bRequestType = data->cmdreq_type;		dr->bRequest     = 0;		dr->wIndex       = 0;		dr->wValue       = 0;		dr->wLength      = __cpu_to_le16(skb->len);		pipe = usb_sndctrlpipe(data->udev, 0x00);		usb_fill_control_urb(urb, data->udev, pipe, (void *) dr,				skb->data, skb->len, btusb_tx_complete, skb);		hdev->stat.cmd_tx++;		break;	case HCI_ACLDATA_PKT:		if (!data->bulk_tx_ep || (hdev->conn_hash.acl_num < 1 &&						hdev->conn_hash.le_num < 1))			return -ENODEV;		urb = usb_alloc_urb(0, GFP_ATOMIC);		if (!urb)			return -ENOMEM;		pipe = usb_sndbulkpipe(data->udev,					data->bulk_tx_ep->bEndpointAddress);		usb_fill_bulk_urb(urb, data->udev, pipe,				skb->data, skb->len, btusb_tx_complete, skb);		hdev->stat.acl_tx++;		break;	case HCI_SCODATA_PKT:		if (!data->isoc_tx_ep || hdev->conn_hash.sco_num < 1)			return -ENODEV;		urb = usb_alloc_urb(BTUSB_MAX_ISOC_FRAMES, GFP_ATOMIC);		if (!urb)			return -ENOMEM;		pipe = usb_sndisocpipe(data->udev,					data->isoc_tx_ep->bEndpointAddress);		usb_fill_int_urb(urb, data->udev, pipe,				skb->data, skb->len, btusb_isoc_tx_complete,				skb, data->isoc_tx_ep->bInterval);		urb->transfer_flags  = URB_ISO_ASAP;		__fill_isoc_descriptor(urb, skb->len,				le16_to_cpu(data->isoc_tx_ep->wMaxPacketSize));		hdev->stat.sco_tx++;		goto skip_waking;	default:		return -EILSEQ;	}	err = inc_tx(data);	if (err) {		usb_anchor_urb(urb, &data->deferred);		schedule_work(&data->waker);		err = 0;		goto done;	}skip_waking:	usb_anchor_urb(urb, &data->tx_anchor);	err = usb_submit_urb(urb, GFP_ATOMIC);	if (err < 0) {		BT_ERR("%s urb %p submission failed", hdev->name, urb);		kfree(urb->setup_packet);		usb_unanchor_urb(urb);	} else {		usb_mark_last_busy(data->udev);	}	usb_free_urb(urb);done:	return err;}
开发者ID:Rukusx7,项目名称:Rockchip-GPL-Kernel,代码行数:101,


示例17: notification_available_cb

static void notification_available_cb(struct urb *urb){	int				status;	struct usb_cdc_notification	*ctrl;	struct usb_device		*udev;	struct rmnet_ctrl_dev		*dev = urb->context;	unsigned int 		iface_num;	udev = interface_to_usbdev(dev->intf);	iface_num = dev->intf->cur_altsetting->desc.bInterfaceNumber;	switch (urb->status) {	case 0:	/*if non zero lenght of data received while unlink*/	case -ENOENT:		DBG_NOTI("[NACB:%d]<", iface_num);		/*success*/		break;	/*do not resubmit*/	case -ESHUTDOWN:	case -ECONNRESET:	case -EPROTO:		return;	case -EPIPE:		pr_err_ratelimited("%s: Stall on int endpoint/n", __func__);		/* TBD : halt to be cleared in work */		return;	/*resubmit*/	case -EOVERFLOW:		pr_err_ratelimited("%s: Babble error happened/n", __func__);	default:		 pr_debug_ratelimited("%s: Non zero urb status = %d/n",			__func__, urb->status);		goto resubmit_int_urb;	}	if (!urb->actual_length) {		pr_err("Received Zero actual length: %d", urb->actual_length);		return;	}	ctrl = urb->transfer_buffer;	switch (ctrl->bNotificationType) {	case USB_CDC_NOTIFY_RESPONSE_AVAILABLE:		dev->resp_avail_cnt++;		usb_mark_last_busy(udev);		if (urb->status == -ENOENT)			pr_info("URB status is ENOENT");		queue_work(dev->wq, &dev->get_encap_work);		if (!dev->resp_available) {			dev->resp_available = true;			wake_up(&dev->open_wait_queue);		}		return;	default:		 dev_err(dev->devicep,			"%s:Command not implemented/n", __func__);	}resubmit_int_urb:	usb_anchor_urb(urb, &dev->rx_submitted);	status = usb_submit_urb(urb, GFP_ATOMIC);	if (status) {		usb_unanchor_urb(urb);		dev_err(dev->devicep, "%s: Error re-submitting Int URB %d/n",		__func__, status);	}	return;}
开发者ID:devil1210,项目名称:EvilKernel,代码行数:77,


示例18: acm_ctrl_irq

/* control interface reports status changes with "interrupt" transfers */static void acm_ctrl_irq(struct urb *urb){	struct acm *acm = urb->context;	struct usb_cdc_notification *dr = urb->transfer_buffer;	unsigned char *data;	int newctrl;	int retval;	int status = urb->status;	switch (status) {	case 0:		/* success */		break;	case -ECONNRESET:	case -ENOENT:	case -ESHUTDOWN:		/* this urb is terminated, clean up */		dbg("%s - urb shutting down with status: %d", __FUNCTION__, status);		return;	default:		dbg("%s - nonzero urb status received: %d", __FUNCTION__, status);		goto exit;	}	if (!ACM_READY(acm))		goto exit;	data = (unsigned char *)(dr + 1);	switch (dr->bNotificationType) {		case USB_CDC_NOTIFY_NETWORK_CONNECTION:			dbg("%s network", dr->wValue ? "connected to" : "disconnected from");			break;		case USB_CDC_NOTIFY_SERIAL_STATE:			newctrl = le16_to_cpu(get_unaligned((__le16 *) data));			if (acm->tty && !acm->clocal && (acm->ctrlin & ~newctrl & ACM_CTRL_DCD)) {				dbg("calling hangup");				tty_hangup(acm->tty);			}			acm->ctrlin = newctrl;			dbg("input control lines: dcd%c dsr%c break%c ring%c framing%c parity%c overrun%c",				acm->ctrlin & ACM_CTRL_DCD ? '+' : '-',	acm->ctrlin & ACM_CTRL_DSR ? '+' : '-',				acm->ctrlin & ACM_CTRL_BRK ? '+' : '-',	acm->ctrlin & ACM_CTRL_RI  ? '+' : '-',				acm->ctrlin & ACM_CTRL_FRAMING ? '+' : '-',	acm->ctrlin & ACM_CTRL_PARITY ? '+' : '-',				acm->ctrlin & ACM_CTRL_OVERRUN ? '+' : '-');			break;		default:			dbg("unknown notification %d received: index %d len %d data0 %d data1 %d",				dr->bNotificationType, dr->wIndex,				dr->wLength, data[0], data[1]);			break;	}exit:	usb_mark_last_busy(acm->dev);	retval = usb_submit_urb (urb, GFP_ATOMIC);	if (retval)		err ("%s - usb_submit_urb failed with result %d",		     __FUNCTION__, retval);}
开发者ID:IgnasD,项目名称:Tomato-RAF,代码行数:68,


示例19: resp_avail_cb

static void resp_avail_cb(struct urb *urb){	struct usb_device		*udev;	struct ctrl_pkt_list_elem	*list_elem = NULL;	struct rmnet_ctrl_dev		*dev = urb->context;	void				*cpkt;	int				status = 0;	size_t				cpkt_size = 0;	unsigned int 		iface_num;	udev = interface_to_usbdev(dev->intf);	iface_num = dev->intf->cur_altsetting->desc.bInterfaceNumber;	usb_autopm_put_interface_async(dev->intf);	switch (urb->status) {	case 0:		/*success*/		dev->get_encap_resp_cnt++;		break;	/*do not resubmit*/	case -ESHUTDOWN:	case -ENOENT:	case -ECONNRESET:	case -EPROTO:		return;	/*resubmit*/	case -EOVERFLOW:		pr_err_ratelimited("%s: Babble error happened/n", __func__);	default:		pr_debug_ratelimited("%s: Non zero urb status = %d/n",				__func__, urb->status);		goto resubmit_int_urb;	}	dev_dbg(dev->devicep, "Read %d bytes for %s/n",		urb->actual_length, dev->name);	cpkt = urb->transfer_buffer;	cpkt_size = urb->actual_length;	if (!cpkt_size) {		dev->zlp_cnt++;		dev_dbg(dev->devicep, "%s: zero length pkt received/n",				__func__);		goto resubmit_int_urb;	}	list_elem = kmalloc(sizeof(struct ctrl_pkt_list_elem), GFP_ATOMIC);	if (!list_elem) {		dev_err(dev->devicep, "%s: list_elem alloc failed/n", __func__);		return;	}	list_elem->cpkt.data = kmalloc(cpkt_size, GFP_ATOMIC);	if (!list_elem->cpkt.data) {		dev_err(dev->devicep, "%s: list_elem->data alloc failed/n",			__func__);		kfree(list_elem);		return;	}	memcpy(list_elem->cpkt.data, cpkt, cpkt_size);	list_elem->cpkt.data_size = cpkt_size;	spin_lock(&dev->rx_lock);	list_add_tail(&list_elem->list, &dev->rx_list);	spin_unlock(&dev->rx_lock);	rd_cb_time = cpu_clock(smp_processor_id());	wake_up(&dev->read_wait_queue);resubmit_int_urb:	/*check if it is already submitted in resume*/	if (!dev->inturb->anchor) {		usb_mark_last_busy(udev);		usb_anchor_urb(dev->inturb, &dev->rx_submitted);		status = usb_submit_urb(dev->inturb, GFP_ATOMIC);		if (status) {			usb_unanchor_urb(dev->inturb);			dev_err(dev->devicep, "%s: Error re-submitting Int URB %d/n",					__func__, status);		}		DBG_NOTI("[CHKRA:%d]>", iface_num);	}}
开发者ID:devil1210,项目名称:EvilKernel,代码行数:85,



注:本文中的usb_mark_last_busy函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ usb_match_id函数代码示例
C++ usb_lock_device函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。