Lines Matching refs:dev
191 static void ld_usb_abort_transfers(struct ld_usb *dev)
194 if (dev->interrupt_in_running) {
195 dev->interrupt_in_running = 0;
196 usb_kill_urb(dev->interrupt_in_urb);
198 if (dev->interrupt_out_busy)
199 usb_kill_urb(dev->interrupt_out_urb);
205 static void ld_usb_delete(struct ld_usb *dev)
208 usb_free_urb(dev->interrupt_in_urb);
209 usb_free_urb(dev->interrupt_out_urb);
210 kfree(dev->ring_buffer);
211 kfree(dev->interrupt_in_buffer);
212 kfree(dev->interrupt_out_buffer);
213 kfree(dev);
221 struct ld_usb *dev = urb->context;
234 dev_dbg(&dev->intf->dev,
237 spin_lock_irqsave(&dev->rbsl, flags);
242 spin_lock_irqsave(&dev->rbsl, flags);
244 next_ring_head = (dev->ring_head+1) % ring_buffer_size;
245 if (next_ring_head != dev->ring_tail) {
246 actual_buffer = (size_t *)(dev->ring_buffer + dev->ring_head * (sizeof(size_t)+dev->interrupt_in_endpoint_size));
249 memcpy(actual_buffer+1, dev->interrupt_in_buffer, urb->actual_length);
250 dev->ring_head = next_ring_head;
251 dev_dbg(&dev->intf->dev, "%s: received %d bytes\n",
254 dev_warn(&dev->intf->dev,
257 dev->buffer_overflow = 1;
263 if (dev->interrupt_in_running && !dev->buffer_overflow) {
264 retval = usb_submit_urb(dev->interrupt_in_urb, GFP_ATOMIC);
266 dev_err(&dev->intf->dev,
268 dev->buffer_overflow = 1;
271 spin_unlock_irqrestore(&dev->rbsl, flags);
273 dev->interrupt_in_done = 1;
274 wake_up_interruptible(&dev->read_wait);
282 struct ld_usb *dev = urb->context;
289 dev_dbg(&dev->intf->dev,
293 dev->interrupt_out_busy = 0;
294 wake_up_interruptible(&dev->write_wait);
302 struct ld_usb *dev;
318 dev = usb_get_intfdata(interface);
320 if (!dev)
324 if (mutex_lock_interruptible(&dev->mutex))
328 if (dev->open_count) {
332 dev->open_count = 1;
335 dev->ring_head = 0;
336 dev->ring_tail = 0;
337 dev->buffer_overflow = 0;
338 usb_fill_int_urb(dev->interrupt_in_urb,
341 dev->interrupt_in_endpoint->bEndpointAddress),
342 dev->interrupt_in_buffer,
343 dev->interrupt_in_endpoint_size,
345 dev,
346 dev->interrupt_in_interval);
348 dev->interrupt_in_running = 1;
349 dev->interrupt_in_done = 0;
351 retval = usb_submit_urb(dev->interrupt_in_urb, GFP_KERNEL);
353 dev_err(&interface->dev, "Couldn't submit interrupt_in_urb %d\n", retval);
354 dev->interrupt_in_running = 0;
355 dev->open_count = 0;
360 file->private_data = dev;
363 mutex_unlock(&dev->mutex);
373 struct ld_usb *dev;
376 dev = file->private_data;
378 if (dev == NULL) {
383 mutex_lock(&dev->mutex);
385 if (dev->open_count != 1) {
389 if (dev->disconnected) {
391 mutex_unlock(&dev->mutex);
392 /* unlock here as ld_usb_delete frees dev */
393 ld_usb_delete(dev);
398 if (dev->interrupt_out_busy)
399 wait_event_interruptible_timeout(dev->write_wait, !dev->interrupt_out_busy, 2 * HZ);
400 ld_usb_abort_transfers(dev);
401 dev->open_count = 0;
404 mutex_unlock(&dev->mutex);
415 struct ld_usb *dev;
418 dev = file->private_data;
420 if (dev->disconnected)
423 poll_wait(file, &dev->read_wait, wait);
424 poll_wait(file, &dev->write_wait, wait);
426 if (dev->ring_head != dev->ring_tail)
428 if (!dev->interrupt_out_busy)
440 struct ld_usb *dev;
446 dev = file->private_data;
453 if (mutex_lock_interruptible(&dev->mutex)) {
459 if (dev->disconnected) {
466 spin_lock_irq(&dev->rbsl);
467 while (dev->ring_head == dev->ring_tail) {
468 dev->interrupt_in_done = 0;
469 spin_unlock_irq(&dev->rbsl);
474 retval = wait_event_interruptible(dev->read_wait, dev->interrupt_in_done);
478 spin_lock_irq(&dev->rbsl);
480 spin_unlock_irq(&dev->rbsl);
483 actual_buffer = (size_t *)(dev->ring_buffer + dev->ring_tail * (sizeof(size_t)+dev->interrupt_in_endpoint_size));
484 if (*actual_buffer > dev->interrupt_in_endpoint_size) {
490 dev_warn(&dev->intf->dev, "Read buffer overflow, %zu bytes dropped\n",
500 spin_lock_irq(&dev->rbsl);
501 dev->ring_tail = (dev->ring_tail + 1) % ring_buffer_size;
503 if (dev->buffer_overflow) {
504 dev->buffer_overflow = 0;
505 spin_unlock_irq(&dev->rbsl);
506 rv = usb_submit_urb(dev->interrupt_in_urb, GFP_KERNEL);
508 dev->buffer_overflow = 1;
510 spin_unlock_irq(&dev->rbsl);
515 mutex_unlock(&dev->mutex);
527 struct ld_usb *dev;
531 dev = file->private_data;
538 if (mutex_lock_interruptible(&dev->mutex)) {
544 if (dev->disconnected) {
551 if (dev->interrupt_out_busy) {
556 retval = wait_event_interruptible(dev->write_wait, !dev->interrupt_out_busy);
563 bytes_to_write = min(count, write_buffer_size*dev->interrupt_out_endpoint_size);
565 dev_warn(&dev->intf->dev, "Write buffer overflow, %zu bytes dropped\n",
567 dev_dbg(&dev->intf->dev, "%s: count = %zu, bytes_to_write = %zu\n",
570 if (copy_from_user(dev->interrupt_out_buffer, buffer, bytes_to_write)) {
575 if (dev->interrupt_out_endpoint == NULL) {
577 retval = usb_control_msg(interface_to_usbdev(dev->intf),
578 usb_sndctrlpipe(interface_to_usbdev(dev->intf), 0),
582 dev->interrupt_out_buffer,
586 dev_err(&dev->intf->dev,
593 usb_fill_int_urb(dev->interrupt_out_urb,
594 interface_to_usbdev(dev->intf),
595 usb_sndintpipe(interface_to_usbdev(dev->intf),
596 dev->interrupt_out_endpoint->bEndpointAddress),
597 dev->interrupt_out_buffer,
600 dev,
601 dev->interrupt_out_interval);
603 dev->interrupt_out_busy = 1;
606 retval = usb_submit_urb(dev->interrupt_out_urb, GFP_KERNEL);
608 dev->interrupt_out_busy = 0;
609 dev_err(&dev->intf->dev,
617 mutex_unlock(&dev->mutex);
653 struct ld_usb *dev = NULL;
661 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
662 if (!dev)
664 mutex_init(&dev->mutex);
665 spin_lock_init(&dev->rbsl);
666 dev->intf = intf;
667 init_waitqueue_head(&dev->read_wait);
668 init_waitqueue_head(&dev->write_wait);
686 &dev->interrupt_in_endpoint);
688 dev_err(&intf->dev, "Interrupt in endpoint not found\n");
694 &dev->interrupt_out_endpoint);
696 dev_warn(&intf->dev, "Interrupt out endpoint not found (using control endpoint instead)\n");
698 dev->interrupt_in_endpoint_size = usb_endpoint_maxp(dev->interrupt_in_endpoint);
699 dev->ring_buffer = kcalloc(ring_buffer_size,
700 sizeof(size_t) + dev->interrupt_in_endpoint_size,
702 if (!dev->ring_buffer)
704 dev->interrupt_in_buffer = kmalloc(dev->interrupt_in_endpoint_size, GFP_KERNEL);
705 if (!dev->interrupt_in_buffer)
707 dev->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL);
708 if (!dev->interrupt_in_urb)
710 dev->interrupt_out_endpoint_size = dev->interrupt_out_endpoint ? usb_endpoint_maxp(dev->interrupt_out_endpoint) :
712 dev->interrupt_out_buffer =
714 dev->interrupt_out_endpoint_size, GFP_KERNEL);
715 if (!dev->interrupt_out_buffer)
717 dev->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL);
718 if (!dev->interrupt_out_urb)
720 dev->interrupt_in_interval = min_interrupt_in_interval > dev->interrupt_in_endpoint->bInterval ? min_interrupt_in_interval : dev->interrupt_in_endpoint->bInterval;
721 if (dev->interrupt_out_endpoint)
722 dev->interrupt_out_interval = min_interrupt_out_interval > dev->interrupt_out_endpoint->bInterval ? min_interrupt_out_interval : dev->interrupt_out_endpoint->bInterval;
725 usb_set_intfdata(intf, dev);
730 dev_err(&intf->dev, "Not able to get a minor for this device.\n");
736 dev_info(&intf->dev, "LD USB Device #%d now attached to major %d minor %d\n",
743 ld_usb_delete(dev);
755 struct ld_usb *dev;
758 dev = usb_get_intfdata(intf);
766 usb_poison_urb(dev->interrupt_in_urb);
767 usb_poison_urb(dev->interrupt_out_urb);
769 mutex_lock(&dev->mutex);
772 if (!dev->open_count) {
773 mutex_unlock(&dev->mutex);
774 ld_usb_delete(dev);
776 dev->disconnected = 1;
778 wake_up_interruptible_all(&dev->read_wait);
779 wake_up_interruptible_all(&dev->write_wait);
780 mutex_unlock(&dev->mutex);
783 dev_info(&intf->dev, "LD USB Device #%d now disconnected\n",