Lines Matching refs:dev

70 static void skel_draw_down(struct usb_skel *dev);
74 struct usb_skel *dev = to_skel_dev(kref);
76 usb_free_urb(dev->bulk_in_urb);
77 usb_put_intf(dev->interface);
78 usb_put_dev(dev->udev);
79 kfree(dev->bulk_in_buffer);
80 kfree(dev);
85 struct usb_skel *dev;
100 dev = usb_get_intfdata(interface);
101 if (!dev) {
111 kref_get(&dev->kref);
114 file->private_data = dev;
122 struct usb_skel *dev;
124 dev = file->private_data;
125 if (dev == NULL)
129 usb_autopm_put_interface(dev->interface);
132 kref_put(&dev->kref, skel_delete);
138 struct usb_skel *dev;
141 dev = file->private_data;
142 if (dev == NULL)
146 mutex_lock(&dev->io_mutex);
147 skel_draw_down(dev);
150 spin_lock_irq(&dev->err_lock);
151 res = dev->errors ? (dev->errors == -EPIPE ? -EPIPE : -EIO) : 0;
152 dev->errors = 0;
153 spin_unlock_irq(&dev->err_lock);
155 mutex_unlock(&dev->io_mutex);
162 struct usb_skel *dev;
165 dev = urb->context;
167 spin_lock_irqsave(&dev->err_lock, flags);
173 dev_err(&dev->interface->dev,
177 dev->errors = urb->status;
179 dev->bulk_in_filled = urb->actual_length;
181 dev->ongoing_read = 0;
182 spin_unlock_irqrestore(&dev->err_lock, flags);
184 wake_up_interruptible(&dev->bulk_in_wait);
187 static int skel_do_read_io(struct usb_skel *dev, size_t count)
192 usb_fill_bulk_urb(dev->bulk_in_urb,
193 dev->udev,
194 usb_rcvbulkpipe(dev->udev,
195 dev->bulk_in_endpointAddr),
196 dev->bulk_in_buffer,
197 min(dev->bulk_in_size, count),
199 dev);
201 spin_lock_irq(&dev->err_lock);
202 dev->ongoing_read = 1;
203 spin_unlock_irq(&dev->err_lock);
206 dev->bulk_in_filled = 0;
207 dev->bulk_in_copied = 0;
210 rv = usb_submit_urb(dev->bulk_in_urb, GFP_KERNEL);
212 dev_err(&dev->interface->dev,
216 spin_lock_irq(&dev->err_lock);
217 dev->ongoing_read = 0;
218 spin_unlock_irq(&dev->err_lock);
227 struct usb_skel *dev;
231 dev = file->private_data;
237 rv = mutex_lock_interruptible(&dev->io_mutex);
241 if (dev->disconnected) { /* disconnect() was called */
248 spin_lock_irq(&dev->err_lock);
249 ongoing_io = dev->ongoing_read;
250 spin_unlock_irq(&dev->err_lock);
262 rv = wait_event_interruptible(dev->bulk_in_wait, (!dev->ongoing_read));
268 rv = dev->errors;
271 dev->errors = 0;
283 if (dev->bulk_in_filled) {
285 size_t available = dev->bulk_in_filled - dev->bulk_in_copied;
293 rv = skel_do_read_io(dev, count);
305 dev->bulk_in_buffer + dev->bulk_in_copied,
311 dev->bulk_in_copied += chunk;
318 skel_do_read_io(dev, count - chunk);
321 rv = skel_do_read_io(dev, count);
328 mutex_unlock(&dev->io_mutex);
334 struct usb_skel *dev;
337 dev = urb->context;
344 dev_err(&dev->interface->dev,
348 spin_lock_irqsave(&dev->err_lock, flags);
349 dev->errors = urb->status;
350 spin_unlock_irqrestore(&dev->err_lock, flags);
354 usb_free_coherent(urb->dev, urb->transfer_buffer_length,
356 up(&dev->limit_sem);
362 struct usb_skel *dev;
368 dev = file->private_data;
379 if (down_interruptible(&dev->limit_sem)) {
384 if (down_trylock(&dev->limit_sem)) {
390 spin_lock_irq(&dev->err_lock);
391 retval = dev->errors;
394 dev->errors = 0;
398 spin_unlock_irq(&dev->err_lock);
409 buf = usb_alloc_coherent(dev->udev, writesize, GFP_KERNEL,
422 mutex_lock(&dev->io_mutex);
423 if (dev->disconnected) { /* disconnect() was called */
424 mutex_unlock(&dev->io_mutex);
430 usb_fill_bulk_urb(urb, dev->udev,
431 usb_sndbulkpipe(dev->udev, dev->bulk_out_endpointAddr),
432 buf, writesize, skel_write_bulk_callback, dev);
434 usb_anchor_urb(urb, &dev->submitted);
438 mutex_unlock(&dev->io_mutex);
440 dev_err(&dev->interface->dev,
459 usb_free_coherent(dev->udev, writesize, buf, urb->transfer_dma);
462 up(&dev->limit_sem);
491 struct usb_skel *dev;
496 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
497 if (!dev)
500 kref_init(&dev->kref);
501 sema_init(&dev->limit_sem, WRITES_IN_FLIGHT);
502 mutex_init(&dev->io_mutex);
503 spin_lock_init(&dev->err_lock);
504 init_usb_anchor(&dev->submitted);
505 init_waitqueue_head(&dev->bulk_in_wait);
507 dev->udev = usb_get_dev(interface_to_usbdev(interface));
508 dev->interface = usb_get_intf(interface);
515 dev_err(&interface->dev,
520 dev->bulk_in_size = usb_endpoint_maxp(bulk_in);
521 dev->bulk_in_endpointAddr = bulk_in->bEndpointAddress;
522 dev->bulk_in_buffer = kmalloc(dev->bulk_in_size, GFP_KERNEL);
523 if (!dev->bulk_in_buffer) {
527 dev->bulk_in_urb = usb_alloc_urb(0, GFP_KERNEL);
528 if (!dev->bulk_in_urb) {
533 dev->bulk_out_endpointAddr = bulk_out->bEndpointAddress;
536 usb_set_intfdata(interface, dev);
542 dev_err(&interface->dev,
549 dev_info(&interface->dev,
556 kref_put(&dev->kref, skel_delete);
563 struct usb_skel *dev;
566 dev = usb_get_intfdata(interface);
573 mutex_lock(&dev->io_mutex);
574 dev->disconnected = 1;
575 mutex_unlock(&dev->io_mutex);
577 usb_kill_urb(dev->bulk_in_urb);
578 usb_kill_anchored_urbs(&dev->submitted);
581 kref_put(&dev->kref, skel_delete);
583 dev_info(&interface->dev, "USB Skeleton #%d now disconnected", minor);
586 static void skel_draw_down(struct usb_skel *dev)
590 time = usb_wait_anchor_empty_timeout(&dev->submitted, 1000);
592 usb_kill_anchored_urbs(&dev->submitted);
593 usb_kill_urb(dev->bulk_in_urb);
598 struct usb_skel *dev = usb_get_intfdata(intf);
600 if (!dev)
602 skel_draw_down(dev);
613 struct usb_skel *dev = usb_get_intfdata(intf);
615 mutex_lock(&dev->io_mutex);
616 skel_draw_down(dev);
623 struct usb_skel *dev = usb_get_intfdata(intf);
626 dev->errors = -EPIPE;
627 mutex_unlock(&dev->io_mutex);