Lines Matching refs:dev

190 static void ld_usb_abort_transfers(struct ld_usb *dev)
193 if (dev->interrupt_in_running) {
194 dev->interrupt_in_running = 0;
195 usb_kill_urb(dev->interrupt_in_urb);
197 if (dev->interrupt_out_busy)
198 usb_kill_urb(dev->interrupt_out_urb);
204 static void ld_usb_delete(struct ld_usb *dev)
207 usb_free_urb(dev->interrupt_in_urb);
208 usb_free_urb(dev->interrupt_out_urb);
209 kfree(dev->ring_buffer);
210 kfree(dev->interrupt_in_buffer);
211 kfree(dev->interrupt_out_buffer);
212 kfree(dev);
220 struct ld_usb *dev = urb->context;
233 dev_dbg(&dev->intf->dev,
236 spin_lock_irqsave(&dev->rbsl, flags);
241 spin_lock_irqsave(&dev->rbsl, flags);
243 next_ring_head = (dev->ring_head+1) % ring_buffer_size;
244 if (next_ring_head != dev->ring_tail) {
245 actual_buffer = (size_t *)(dev->ring_buffer + dev->ring_head * (sizeof(size_t)+dev->interrupt_in_endpoint_size));
248 memcpy(actual_buffer+1, dev->interrupt_in_buffer, urb->actual_length);
249 dev->ring_head = next_ring_head;
250 dev_dbg(&dev->intf->dev, "%s: received %d bytes\n",
253 dev_warn(&dev->intf->dev,
256 dev->buffer_overflow = 1;
262 if (dev->interrupt_in_running && !dev->buffer_overflow) {
263 retval = usb_submit_urb(dev->interrupt_in_urb, GFP_ATOMIC);
265 dev_err(&dev->intf->dev,
267 dev->buffer_overflow = 1;
270 spin_unlock_irqrestore(&dev->rbsl, flags);
272 dev->interrupt_in_done = 1;
273 wake_up_interruptible(&dev->read_wait);
281 struct ld_usb *dev = urb->context;
288 dev_dbg(&dev->intf->dev,
292 dev->interrupt_out_busy = 0;
293 wake_up_interruptible(&dev->write_wait);
301 struct ld_usb *dev;
317 dev = usb_get_intfdata(interface);
319 if (!dev)
323 if (mutex_lock_interruptible(&dev->mutex))
327 if (dev->open_count) {
331 dev->open_count = 1;
334 dev->ring_head = 0;
335 dev->ring_tail = 0;
336 dev->buffer_overflow = 0;
337 usb_fill_int_urb(dev->interrupt_in_urb,
340 dev->interrupt_in_endpoint->bEndpointAddress),
341 dev->interrupt_in_buffer,
342 dev->interrupt_in_endpoint_size,
344 dev,
345 dev->interrupt_in_interval);
347 dev->interrupt_in_running = 1;
348 dev->interrupt_in_done = 0;
350 retval = usb_submit_urb(dev->interrupt_in_urb, GFP_KERNEL);
352 dev_err(&interface->dev, "Couldn't submit interrupt_in_urb %d\n", retval);
353 dev->interrupt_in_running = 0;
354 dev->open_count = 0;
359 file->private_data = dev;
362 mutex_unlock(&dev->mutex);
372 struct ld_usb *dev;
375 dev = file->private_data;
377 if (dev == NULL) {
382 mutex_lock(&dev->mutex);
384 if (dev->open_count != 1) {
388 if (dev->disconnected) {
390 mutex_unlock(&dev->mutex);
391 /* unlock here as ld_usb_delete frees dev */
392 ld_usb_delete(dev);
397 if (dev->interrupt_out_busy)
398 wait_event_interruptible_timeout(dev->write_wait, !dev->interrupt_out_busy, 2 * HZ);
399 ld_usb_abort_transfers(dev);
400 dev->open_count = 0;
403 mutex_unlock(&dev->mutex);
414 struct ld_usb *dev;
417 dev = file->private_data;
419 if (dev->disconnected)
422 poll_wait(file, &dev->read_wait, wait);
423 poll_wait(file, &dev->write_wait, wait);
425 if (dev->ring_head != dev->ring_tail)
427 if (!dev->interrupt_out_busy)
439 struct ld_usb *dev;
445 dev = file->private_data;
452 if (mutex_lock_interruptible(&dev->mutex)) {
458 if (dev->disconnected) {
465 spin_lock_irq(&dev->rbsl);
466 while (dev->ring_head == dev->ring_tail) {
467 dev->interrupt_in_done = 0;
468 spin_unlock_irq(&dev->rbsl);
473 retval = wait_event_interruptible(dev->read_wait, dev->interrupt_in_done);
477 spin_lock_irq(&dev->rbsl);
479 spin_unlock_irq(&dev->rbsl);
482 actual_buffer = (size_t *)(dev->ring_buffer + dev->ring_tail * (sizeof(size_t)+dev->interrupt_in_endpoint_size));
483 if (*actual_buffer > dev->interrupt_in_endpoint_size) {
489 dev_warn(&dev->intf->dev, "Read buffer overflow, %zu bytes dropped\n",
499 spin_lock_irq(&dev->rbsl);
500 dev->ring_tail = (dev->ring_tail + 1) % ring_buffer_size;
502 if (dev->buffer_overflow) {
503 dev->buffer_overflow = 0;
504 spin_unlock_irq(&dev->rbsl);
505 rv = usb_submit_urb(dev->interrupt_in_urb, GFP_KERNEL);
507 dev->buffer_overflow = 1;
509 spin_unlock_irq(&dev->rbsl);
514 mutex_unlock(&dev->mutex);
526 struct ld_usb *dev;
530 dev = file->private_data;
537 if (mutex_lock_interruptible(&dev->mutex)) {
543 if (dev->disconnected) {
550 if (dev->interrupt_out_busy) {
555 retval = wait_event_interruptible(dev->write_wait, !dev->interrupt_out_busy);
562 bytes_to_write = min(count, write_buffer_size*dev->interrupt_out_endpoint_size);
564 dev_warn(&dev->intf->dev, "Write buffer overflow, %zu bytes dropped\n",
566 dev_dbg(&dev->intf->dev, "%s: count = %zu, bytes_to_write = %zu\n",
569 if (copy_from_user(dev->interrupt_out_buffer, buffer, bytes_to_write)) {
574 if (dev->interrupt_out_endpoint == NULL) {
576 retval = usb_control_msg(interface_to_usbdev(dev->intf),
577 usb_sndctrlpipe(interface_to_usbdev(dev->intf), 0),
581 dev->interrupt_out_buffer,
585 dev_err(&dev->intf->dev,
592 usb_fill_int_urb(dev->interrupt_out_urb,
593 interface_to_usbdev(dev->intf),
594 usb_sndintpipe(interface_to_usbdev(dev->intf),
595 dev->interrupt_out_endpoint->bEndpointAddress),
596 dev->interrupt_out_buffer,
599 dev,
600 dev->interrupt_out_interval);
602 dev->interrupt_out_busy = 1;
605 retval = usb_submit_urb(dev->interrupt_out_urb, GFP_KERNEL);
607 dev->interrupt_out_busy = 0;
608 dev_err(&dev->intf->dev,
616 mutex_unlock(&dev->mutex);
652 struct ld_usb *dev = NULL;
660 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
661 if (!dev)
663 mutex_init(&dev->mutex);
664 spin_lock_init(&dev->rbsl);
665 dev->intf = intf;
666 init_waitqueue_head(&dev->read_wait);
667 init_waitqueue_head(&dev->write_wait);
685 &dev->interrupt_in_endpoint);
687 dev_err(&intf->dev, "Interrupt in endpoint not found\n");
693 &dev->interrupt_out_endpoint);
695 dev_warn(&intf->dev, "Interrupt out endpoint not found (using control endpoint instead)\n");
697 dev->interrupt_in_endpoint_size = usb_endpoint_maxp(dev->interrupt_in_endpoint);
698 dev->ring_buffer = kcalloc(ring_buffer_size,
699 sizeof(size_t) + dev->interrupt_in_endpoint_size,
701 if (!dev->ring_buffer)
703 dev->interrupt_in_buffer = kmalloc(dev->interrupt_in_endpoint_size, GFP_KERNEL);
704 if (!dev->interrupt_in_buffer)
706 dev->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL);
707 if (!dev->interrupt_in_urb)
709 dev->interrupt_out_endpoint_size = dev->interrupt_out_endpoint ? usb_endpoint_maxp(dev->interrupt_out_endpoint) :
711 dev->interrupt_out_buffer =
713 dev->interrupt_out_endpoint_size, GFP_KERNEL);
714 if (!dev->interrupt_out_buffer)
716 dev->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL);
717 if (!dev->interrupt_out_urb)
719 dev->interrupt_in_interval = max_t(int, min_interrupt_in_interval,
720 dev->interrupt_in_endpoint->bInterval);
721 if (dev->interrupt_out_endpoint)
722 dev->interrupt_out_interval = max_t(int, min_interrupt_out_interval,
723 dev->interrupt_out_endpoint->bInterval);
726 usb_set_intfdata(intf, dev);
731 dev_err(&intf->dev, "Not able to get a minor for this device.\n");
737 dev_info(&intf->dev, "LD USB Device #%d now attached to major %d minor %d\n",
744 ld_usb_delete(dev);
756 struct ld_usb *dev;
759 dev = usb_get_intfdata(intf);
767 usb_poison_urb(dev->interrupt_in_urb);
768 usb_poison_urb(dev->interrupt_out_urb);
770 mutex_lock(&dev->mutex);
773 if (!dev->open_count) {
774 mutex_unlock(&dev->mutex);
775 ld_usb_delete(dev);
777 dev->disconnected = 1;
779 wake_up_interruptible_all(&dev->read_wait);
780 wake_up_interruptible_all(&dev->write_wait);
781 mutex_unlock(&dev->mutex);
784 dev_info(&intf->dev, "LD USB Device #%d now disconnected\n",