Lines Matching refs:dev
104 static int usb_get_report(struct usb_device *dev,
108 return usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
155 struct iowarrior *dev = urb->context;
175 intr_idx = atomic_read(&dev->intr_idx);
178 read_idx = atomic_read(&dev->read_idx);
182 && (dev->interface->cur_altsetting->desc.bInterfaceNumber == 0)) {
184 offset = aux_idx * (dev->report_size + 1);
186 (dev->read_queue + offset, urb->transfer_buffer,
187 dev->report_size)) {
198 atomic_set(&dev->read_idx, read_idx);
199 atomic_set(&dev->overflow_flag, 1);
203 offset = intr_idx * (dev->report_size + 1);
204 memcpy(dev->read_queue + offset, urb->transfer_buffer,
205 dev->report_size);
206 *(dev->read_queue + offset + (dev->report_size)) = dev->serial_number++;
208 atomic_set(&dev->intr_idx, aux_idx);
210 wake_up_interruptible(&dev->read_wait);
215 dev_err(&dev->interface->dev, "%s - usb_submit_urb failed with result %d\n",
225 struct iowarrior *dev;
228 dev = urb->context;
233 dev_dbg(&dev->interface->dev,
237 usb_free_coherent(urb->dev, urb->transfer_buffer_length,
240 atomic_dec(&dev->write_busy);
241 wake_up_interruptible(&dev->write_wait);
247 static inline void iowarrior_delete(struct iowarrior *dev)
249 dev_dbg(&dev->interface->dev, "minor %d\n", dev->minor);
250 kfree(dev->int_in_buffer);
251 usb_free_urb(dev->int_in_urb);
252 kfree(dev->read_queue);
253 usb_put_intf(dev->interface);
254 kfree(dev);
261 static int read_index(struct iowarrior *dev)
265 read_idx = atomic_read(&dev->read_idx);
266 intr_idx = atomic_read(&dev->intr_idx);
277 struct iowarrior *dev;
281 dev = file->private_data;
284 if (!dev || !dev->present)
287 dev_dbg(&dev->interface->dev, "minor %d, count = %zd\n",
288 dev->minor, count);
291 if ((count != dev->report_size)
292 && (count != (dev->report_size + 1)))
297 atomic_set(&dev->overflow_flag, 0);
298 if ((read_idx = read_index(dev)) == -1) {
304 int r = wait_event_interruptible(dev->read_wait,
305 (!dev->present
308 (dev)) !=
314 if (!dev->present) {
325 offset = read_idx * (dev->report_size + 1);
326 if (copy_to_user(buffer, dev->read_queue + offset, count)) {
329 } while (atomic_read(&dev->overflow_flag));
332 atomic_set(&dev->read_idx, read_idx);
343 struct iowarrior *dev;
348 dev = file->private_data;
350 mutex_lock(&dev->mutex);
352 if (!dev->present) {
356 dev_dbg(&dev->interface->dev, "minor %d, count = %zd\n",
357 dev->minor, count);
364 if (count != dev->report_size) {
368 switch (dev->product_id) {
380 retval = usb_set_report(dev->interface, 2, 0, buf, count);
389 if (atomic_read(&dev->write_busy) == MAX_WRITES_IN_FLIGHT) {
395 retval = wait_event_interruptible(dev->write_wait,
396 (!dev->present || (atomic_read (&dev-> write_busy) < MAX_WRITES_IN_FLIGHT)));
402 if (!dev->present) {
407 if (!dev->opened) {
414 atomic_inc(&dev->write_busy);
420 buf = usb_alloc_coherent(dev->udev, dev->report_size,
424 dev_dbg(&dev->interface->dev,
428 usb_fill_int_urb(int_out_urb, dev->udev,
429 usb_sndintpipe(dev->udev,
430 dev->int_out_endpoint->bEndpointAddress),
431 buf, dev->report_size,
432 iowarrior_write_callback, dev,
433 dev->int_out_endpoint->bInterval);
439 usb_anchor_urb(int_out_urb, &dev->submitted);
442 dev_dbg(&dev->interface->dev,
444 retval, atomic_read(&dev->write_busy));
454 dev_err(&dev->interface->dev, "%s - not supported for product=0x%x\n",
455 __func__, dev->product_id);
460 usb_free_coherent(dev->udev, dev->report_size, buf,
465 atomic_dec(&dev->write_busy);
466 wake_up_interruptible(&dev->write_wait);
468 mutex_unlock(&dev->mutex);
478 struct iowarrior *dev = NULL;
484 dev = file->private_data;
485 if (!dev)
488 buffer = kzalloc(dev->report_size, GFP_KERNEL);
492 mutex_lock(&dev->mutex);
495 if (!dev->present) {
500 dev_dbg(&dev->interface->dev, "minor %d, cmd 0x%.4x, arg %ld\n",
501 dev->minor, cmd, arg);
507 if (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW24 ||
508 dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW24SAG ||
509 dev->product_id == USB_DEVICE_ID_CODEMERCS_IOWPV1 ||
510 dev->product_id == USB_DEVICE_ID_CODEMERCS_IOWPV2 ||
511 dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW40) {
514 dev->report_size);
518 io_res = usb_set_report(dev->interface, 2, 0,
520 dev->report_size);
526 dev_err(&dev->interface->dev,
528 dev->product_id);
533 io_res = usb_get_report(dev->udev,
534 dev->interface->cur_altsetting, 1, 0,
535 buffer, dev->report_size);
539 io_res = copy_to_user(user_buffer, buffer, dev->report_size);
549 struct usb_config_descriptor *cfg_descriptor = &dev->udev->actconfig->desc;
553 info.vendor = le16_to_cpu(dev->udev->descriptor.idVendor);
554 info.product = dev->product_id;
555 info.revision = le16_to_cpu(dev->udev->descriptor.bcdDevice);
558 info.speed = dev->udev->speed;
559 info.if_num = dev->interface->cur_altsetting->desc.bInterfaceNumber;
560 info.report_size = dev->report_size;
563 memcpy(info.serial, dev->chip_serial,
564 sizeof(dev->chip_serial));
584 mutex_unlock(&dev->mutex);
594 struct iowarrior *dev = NULL;
608 dev = usb_get_intfdata(interface);
609 if (!dev)
612 mutex_lock(&dev->mutex);
615 if (dev->opened) {
621 if ((retval = usb_submit_urb(dev->int_in_urb, GFP_KERNEL)) < 0) {
622 dev_err(&interface->dev, "Error %d while submitting URB\n", retval);
627 ++dev->opened;
629 file->private_data = dev;
633 mutex_unlock(&dev->mutex);
642 struct iowarrior *dev;
645 dev = file->private_data;
646 if (!dev)
649 dev_dbg(&dev->interface->dev, "minor %d\n", dev->minor);
652 mutex_lock(&dev->mutex);
654 if (dev->opened <= 0) {
656 mutex_unlock(&dev->mutex);
658 dev->opened = 0; /* we're closing now */
660 if (dev->present) {
665 usb_kill_urb(dev->int_in_urb);
666 wake_up_interruptible(&dev->read_wait);
667 wake_up_interruptible(&dev->write_wait);
668 mutex_unlock(&dev->mutex);
671 mutex_unlock(&dev->mutex);
672 iowarrior_delete(dev);
680 struct iowarrior *dev = file->private_data;
683 if (!dev->present)
686 poll_wait(file, &dev->read_wait, wait);
687 poll_wait(file, &dev->write_wait, wait);
689 if (!dev->present)
692 if (read_index(dev) != -1)
695 if (atomic_read(&dev->write_busy) < MAX_WRITES_IN_FLIGHT)
704 * to have a node in the /dev directory. If the USB
720 static char *iowarrior_devnode(const struct device *dev, umode_t *mode)
722 return kasprintf(GFP_KERNEL, "usb/%s", dev_name(dev));
749 struct iowarrior *dev = NULL;
755 dev = kzalloc(sizeof(struct iowarrior), GFP_KERNEL);
756 if (!dev)
759 mutex_init(&dev->mutex);
761 atomic_set(&dev->intr_idx, 0);
762 atomic_set(&dev->read_idx, 0);
763 atomic_set(&dev->overflow_flag, 0);
764 init_waitqueue_head(&dev->read_wait);
765 atomic_set(&dev->write_busy, 0);
766 init_waitqueue_head(&dev->write_wait);
768 dev->udev = udev;
769 dev->interface = usb_get_intf(interface);
772 dev->product_id = le16_to_cpu(udev->descriptor.idProduct);
774 init_usb_anchor(&dev->submitted);
776 res = usb_find_last_int_in_endpoint(iface_desc, &dev->int_in_endpoint);
778 dev_err(&interface->dev, "no interrupt-in endpoint found\n");
783 if ((dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW56) ||
784 (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW56AM) ||
785 (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW28) ||
786 (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW28L) ||
787 (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW100)) {
789 &dev->int_out_endpoint);
791 dev_err(&interface->dev, "no interrupt-out endpoint found\n");
798 dev->report_size = usb_endpoint_maxp(dev->int_in_endpoint);
804 if (dev->interface->cur_altsetting->desc.bInterfaceNumber == 0) {
805 switch (dev->product_id) {
808 dev->report_size = 7;
813 dev->report_size = 4;
817 dev->report_size = 12;
823 dev->int_in_urb = usb_alloc_urb(0, GFP_KERNEL);
824 if (!dev->int_in_urb)
826 dev->int_in_buffer = kmalloc(dev->report_size, GFP_KERNEL);
827 if (!dev->int_in_buffer)
829 usb_fill_int_urb(dev->int_in_urb, dev->udev,
830 usb_rcvintpipe(dev->udev,
831 dev->int_in_endpoint->bEndpointAddress),
832 dev->int_in_buffer, dev->report_size,
833 iowarrior_callback, dev,
834 dev->int_in_endpoint->bInterval);
836 dev->read_queue =
837 kmalloc_array(dev->report_size + 1, MAX_INTERRUPT_BUFFER,
839 if (!dev->read_queue)
842 memset(dev->chip_serial, 0x00, sizeof(dev->chip_serial));
843 usb_string(udev, udev->descriptor.iSerialNumber, dev->chip_serial,
844 sizeof(dev->chip_serial));
845 if (strlen(dev->chip_serial) != 8)
846 memset(dev->chip_serial, 0x00, sizeof(dev->chip_serial));
849 if (dev->interface->cur_altsetting->desc.bInterfaceNumber == 0) {
856 dev->present = 1;
859 usb_set_intfdata(interface, dev);
864 dev_err(&interface->dev, "Not able to get a minor for this device.\n");
868 dev->minor = interface->minor;
871 dev_info(&interface->dev, "IOWarrior product=0x%x, serial=%s interface=%d "
872 "now attached to iowarrior%d\n", dev->product_id, dev->chip_serial,
873 iface_desc->desc.bInterfaceNumber, dev->minor - IOWARRIOR_MINOR_BASE);
877 iowarrior_delete(dev);
888 struct iowarrior *dev = usb_get_intfdata(interface);
889 int minor = dev->minor;
893 mutex_lock(&dev->mutex);
896 dev->present = 0;
898 if (dev->opened) {
903 usb_kill_urb(dev->int_in_urb);
904 usb_kill_anchored_urbs(&dev->submitted);
905 wake_up_interruptible(&dev->read_wait);
906 wake_up_interruptible(&dev->write_wait);
907 mutex_unlock(&dev->mutex);
910 mutex_unlock(&dev->mutex);
911 iowarrior_delete(dev);
914 dev_info(&interface->dev, "I/O-Warror #%d now disconnected\n",