Lines Matching refs:dev

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