Lines Matching refs:dev

71 static void skel_draw_down(struct usb_skel *dev);
75 struct usb_skel *dev = to_skel_dev(kref); in skel_delete() local
77 usb_free_urb(dev->bulk_in_urb); 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 mutex_lock(&dev->io_mutex); in skel_release()
130 if (dev->interface) in skel_release()
131 usb_autopm_put_interface(dev->interface); in skel_release()
132 mutex_unlock(&dev->io_mutex); in skel_release()
135 kref_put(&dev->kref, skel_delete); in skel_release()
141 struct usb_skel *dev; in skel_flush() local
144 dev = file->private_data; in skel_flush()
145 if (dev == NULL) in skel_flush()
149 mutex_lock(&dev->io_mutex); in skel_flush()
150 skel_draw_down(dev); in skel_flush()
153 spin_lock_irq(&dev->err_lock); in skel_flush()
154 res = dev->errors ? (dev->errors == -EPIPE ? -EPIPE : -EIO) : 0; in skel_flush()
155 dev->errors = 0; in skel_flush()
156 spin_unlock_irq(&dev->err_lock); in skel_flush()
158 mutex_unlock(&dev->io_mutex); in skel_flush()
165 struct usb_skel *dev; in skel_read_bulk_callback() local
167 dev = urb->context; in skel_read_bulk_callback()
169 spin_lock(&dev->err_lock); in skel_read_bulk_callback()
175 dev_err(&dev->interface->dev, in skel_read_bulk_callback()
179 dev->errors = urb->status; in skel_read_bulk_callback()
181 dev->bulk_in_filled = urb->actual_length; in skel_read_bulk_callback()
183 dev->ongoing_read = 0; in skel_read_bulk_callback()
184 spin_unlock(&dev->err_lock); in skel_read_bulk_callback()
186 wake_up_interruptible(&dev->bulk_in_wait); in skel_read_bulk_callback()
189 static int skel_do_read_io(struct usb_skel *dev, size_t count) in skel_do_read_io() argument
194 usb_fill_bulk_urb(dev->bulk_in_urb, in skel_do_read_io()
195 dev->udev, in skel_do_read_io()
196 usb_rcvbulkpipe(dev->udev, in skel_do_read_io()
197 dev->bulk_in_endpointAddr), in skel_do_read_io()
198 dev->bulk_in_buffer, in skel_do_read_io()
199 min(dev->bulk_in_size, count), in skel_do_read_io()
201 dev); in skel_do_read_io()
203 spin_lock_irq(&dev->err_lock); in skel_do_read_io()
204 dev->ongoing_read = 1; in skel_do_read_io()
205 spin_unlock_irq(&dev->err_lock); in skel_do_read_io()
208 dev->bulk_in_filled = 0; in skel_do_read_io()
209 dev->bulk_in_copied = 0; in skel_do_read_io()
212 rv = usb_submit_urb(dev->bulk_in_urb, GFP_KERNEL); in skel_do_read_io()
214 dev_err(&dev->interface->dev, in skel_do_read_io()
218 spin_lock_irq(&dev->err_lock); in skel_do_read_io()
219 dev->ongoing_read = 0; in skel_do_read_io()
220 spin_unlock_irq(&dev->err_lock); in skel_do_read_io()
229 struct usb_skel *dev; in skel_read() local
233 dev = file->private_data; in skel_read()
236 if (!dev->bulk_in_urb || !count) in skel_read()
240 rv = mutex_lock_interruptible(&dev->io_mutex); in skel_read()
244 if (!dev->interface) { /* disconnect() was called */ in skel_read()
251 spin_lock_irq(&dev->err_lock); in skel_read()
252 ongoing_io = dev->ongoing_read; in skel_read()
253 spin_unlock_irq(&dev->err_lock); in skel_read()
265 rv = wait_event_interruptible(dev->bulk_in_wait, (!dev->ongoing_read)); in skel_read()
271 rv = dev->errors; in skel_read()
274 dev->errors = 0; in skel_read()
286 if (dev->bulk_in_filled) { in skel_read()
288 size_t available = dev->bulk_in_filled - dev->bulk_in_copied; in skel_read()
296 rv = skel_do_read_io(dev, count); in skel_read()
308 dev->bulk_in_buffer + dev->bulk_in_copied, in skel_read()
314 dev->bulk_in_copied += chunk; in skel_read()
321 skel_do_read_io(dev, count - chunk); in skel_read()
324 rv = skel_do_read_io(dev, count); in skel_read()
331 mutex_unlock(&dev->io_mutex); in skel_read()
337 struct usb_skel *dev; in skel_write_bulk_callback() local
339 dev = urb->context; in skel_write_bulk_callback()
346 dev_err(&dev->interface->dev, in skel_write_bulk_callback()
350 spin_lock(&dev->err_lock); in skel_write_bulk_callback()
351 dev->errors = urb->status; in skel_write_bulk_callback()
352 spin_unlock(&dev->err_lock); in skel_write_bulk_callback()
356 usb_free_coherent(urb->dev, urb->transfer_buffer_length, in skel_write_bulk_callback()
358 up(&dev->limit_sem); in skel_write_bulk_callback()
364 struct usb_skel *dev; in skel_write() local
370 dev = file->private_data; in skel_write()
381 if (down_interruptible(&dev->limit_sem)) { in skel_write()
386 if (down_trylock(&dev->limit_sem)) { in skel_write()
392 spin_lock_irq(&dev->err_lock); in skel_write()
393 retval = dev->errors; in skel_write()
396 dev->errors = 0; in skel_write()
400 spin_unlock_irq(&dev->err_lock); in skel_write()
411 buf = usb_alloc_coherent(dev->udev, writesize, GFP_KERNEL, in skel_write()
424 mutex_lock(&dev->io_mutex); in skel_write()
425 if (!dev->interface) { /* disconnect() was called */ in skel_write()
426 mutex_unlock(&dev->io_mutex); in skel_write()
432 usb_fill_bulk_urb(urb, dev->udev, in skel_write()
433 usb_sndbulkpipe(dev->udev, dev->bulk_out_endpointAddr), in skel_write()
434 buf, writesize, skel_write_bulk_callback, dev); in skel_write()
436 usb_anchor_urb(urb, &dev->submitted); in skel_write()
440 mutex_unlock(&dev->io_mutex); in skel_write()
442 dev_err(&dev->interface->dev, in skel_write()
461 usb_free_coherent(dev->udev, writesize, buf, urb->transfer_dma); in skel_write()
464 up(&dev->limit_sem); in skel_write()
493 struct usb_skel *dev; in skel_probe() local
501 dev = kzalloc(sizeof(*dev), GFP_KERNEL); in skel_probe()
502 if (!dev) { in skel_probe()
503 dev_err(&interface->dev, "Out of memory\n"); in skel_probe()
506 kref_init(&dev->kref); in skel_probe()
507 sema_init(&dev->limit_sem, WRITES_IN_FLIGHT); in skel_probe()
508 mutex_init(&dev->io_mutex); in skel_probe()
509 spin_lock_init(&dev->err_lock); in skel_probe()
510 init_usb_anchor(&dev->submitted); in skel_probe()
511 init_waitqueue_head(&dev->bulk_in_wait); in skel_probe()
513 dev->udev = usb_get_dev(interface_to_usbdev(interface)); in skel_probe()
514 dev->interface = interface; in skel_probe()
522 if (!dev->bulk_in_endpointAddr && in skel_probe()
526 dev->bulk_in_size = buffer_size; in skel_probe()
527 dev->bulk_in_endpointAddr = endpoint->bEndpointAddress; in skel_probe()
528 dev->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL); in skel_probe()
529 if (!dev->bulk_in_buffer) { in skel_probe()
530 dev_err(&interface->dev, in skel_probe()
534 dev->bulk_in_urb = usb_alloc_urb(0, GFP_KERNEL); in skel_probe()
535 if (!dev->bulk_in_urb) { in skel_probe()
536 dev_err(&interface->dev, in skel_probe()
542 if (!dev->bulk_out_endpointAddr && in skel_probe()
545 dev->bulk_out_endpointAddr = endpoint->bEndpointAddress; in skel_probe()
548 if (!(dev->bulk_in_endpointAddr && dev->bulk_out_endpointAddr)) { in skel_probe()
549 dev_err(&interface->dev, in skel_probe()
555 usb_set_intfdata(interface, dev); in skel_probe()
561 dev_err(&interface->dev, in skel_probe()
568 dev_info(&interface->dev, in skel_probe()
574 if (dev) in skel_probe()
576 kref_put(&dev->kref, skel_delete); in skel_probe()
582 struct usb_skel *dev; in skel_disconnect() local
585 dev = usb_get_intfdata(interface); in skel_disconnect()
592 mutex_lock(&dev->io_mutex); in skel_disconnect()
593 dev->interface = NULL; in skel_disconnect()
594 mutex_unlock(&dev->io_mutex); in skel_disconnect()
596 usb_kill_anchored_urbs(&dev->submitted); in skel_disconnect()
599 kref_put(&dev->kref, skel_delete); in skel_disconnect()
601 dev_info(&interface->dev, "USB Skeleton #%d now disconnected", minor); in skel_disconnect()
604 static void skel_draw_down(struct usb_skel *dev) in skel_draw_down() argument
608 time = usb_wait_anchor_empty_timeout(&dev->submitted, 1000); in skel_draw_down()
610 usb_kill_anchored_urbs(&dev->submitted); in skel_draw_down()
611 usb_kill_urb(dev->bulk_in_urb); in skel_draw_down()
616 struct usb_skel *dev = usb_get_intfdata(intf); in skel_suspend() local
618 if (!dev) in skel_suspend()
620 skel_draw_down(dev); in skel_suspend()
631 struct usb_skel *dev = usb_get_intfdata(intf); in skel_pre_reset() local
633 mutex_lock(&dev->io_mutex); in skel_pre_reset()
634 skel_draw_down(dev); in skel_pre_reset()
641 struct usb_skel *dev = usb_get_intfdata(intf); in skel_post_reset() local
644 dev->errors = -EPIPE; in skel_post_reset()
645 mutex_unlock(&dev->io_mutex); in skel_post_reset()