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);
390 if (atomic_read(&dev->write_busy) == MAX_WRITES_IN_FLIGHT) {
396 retval = wait_event_interruptible(dev->write_wait,
397 (!dev->present || (atomic_read (&dev-> write_busy) < MAX_WRITES_IN_FLIGHT)));
403 if (!dev->present) {
408 if (!dev->opened) {
415 atomic_inc(&dev->write_busy);
421 buf = usb_alloc_coherent(dev->udev, dev->report_size,
425 dev_dbg(&dev->interface->dev,
429 usb_fill_int_urb(int_out_urb, dev->udev,
430 usb_sndintpipe(dev->udev,
431 dev->int_out_endpoint->bEndpointAddress),
432 buf, dev->report_size,
433 iowarrior_write_callback, dev,
434 dev->int_out_endpoint->bInterval);
440 usb_anchor_urb(int_out_urb, &dev->submitted);
443 dev_dbg(&dev->interface->dev,
445 retval, atomic_read(&dev->write_busy));
456 dev_err(&dev->interface->dev, "%s - not supported for product=0x%x\n",
457 __func__, dev->product_id);
463 usb_free_coherent(dev->udev, dev->report_size, buf,
468 atomic_dec(&dev->write_busy);
469 wake_up_interruptible(&dev->write_wait);
471 mutex_unlock(&dev->mutex);
481 struct iowarrior *dev = NULL;
487 dev = file->private_data;
488 if (!dev)
491 buffer = kzalloc(dev->report_size, GFP_KERNEL);
495 mutex_lock(&dev->mutex);
498 if (!dev->present) {
503 dev_dbg(&dev->interface->dev, "minor %d, cmd 0x%.4x, arg %ld\n",
504 dev->minor, cmd, arg);
510 if (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW24 ||
511 dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW24SAG ||
512 dev->product_id == USB_DEVICE_ID_CODEMERCS_IOWPV1 ||
513 dev->product_id == USB_DEVICE_ID_CODEMERCS_IOWPV2 ||
514 dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW40) {
517 dev->report_size);
521 io_res = usb_set_report(dev->interface, 2, 0,
523 dev->report_size);
529 dev_err(&dev->interface->dev,
531 dev->product_id);
536 io_res = usb_get_report(dev->udev,
537 dev->interface->cur_altsetting, 1, 0,
538 buffer, dev->report_size);
542 io_res = copy_to_user(user_buffer, buffer, dev->report_size);
552 struct usb_config_descriptor *cfg_descriptor = &dev->udev->actconfig->desc;
556 info.vendor = le16_to_cpu(dev->udev->descriptor.idVendor);
557 info.product = dev->product_id;
558 info.revision = le16_to_cpu(dev->udev->descriptor.bcdDevice);
561 info.speed = dev->udev->speed;
562 info.if_num = dev->interface->cur_altsetting->desc.bInterfaceNumber;
563 info.report_size = dev->report_size;
566 memcpy(info.serial, dev->chip_serial,
567 sizeof(dev->chip_serial));
587 mutex_unlock(&dev->mutex);
597 struct iowarrior *dev = NULL;
611 dev = usb_get_intfdata(interface);
612 if (!dev)
615 mutex_lock(&dev->mutex);
618 if (dev->opened) {
624 if ((retval = usb_submit_urb(dev->int_in_urb, GFP_KERNEL)) < 0) {
625 dev_err(&interface->dev, "Error %d while submitting URB\n", retval);
630 ++dev->opened;
632 file->private_data = dev;
636 mutex_unlock(&dev->mutex);
645 struct iowarrior *dev;
648 dev = file->private_data;
649 if (!dev)
652 dev_dbg(&dev->interface->dev, "minor %d\n", dev->minor);
655 mutex_lock(&dev->mutex);
657 if (dev->opened <= 0) {
659 mutex_unlock(&dev->mutex);
661 dev->opened = 0; /* we're closing now */
663 if (dev->present) {
668 usb_kill_urb(dev->int_in_urb);
669 wake_up_interruptible(&dev->read_wait);
670 wake_up_interruptible(&dev->write_wait);
671 mutex_unlock(&dev->mutex);
674 mutex_unlock(&dev->mutex);
675 iowarrior_delete(dev);
683 struct iowarrior *dev = file->private_data;
686 if (!dev->present)
689 poll_wait(file, &dev->read_wait, wait);
690 poll_wait(file, &dev->write_wait, wait);
692 if (!dev->present)
695 if (read_index(dev) != -1)
698 if (atomic_read(&dev->write_busy) < MAX_WRITES_IN_FLIGHT)
707 * to have a node in the /dev directory. If the USB
723 static char *iowarrior_devnode(struct device *dev, umode_t *mode)
725 return kasprintf(GFP_KERNEL, "usb/%s", dev_name(dev));
752 struct iowarrior *dev = NULL;
758 dev = kzalloc(sizeof(struct iowarrior), GFP_KERNEL);
759 if (!dev)
762 mutex_init(&dev->mutex);
764 atomic_set(&dev->intr_idx, 0);
765 atomic_set(&dev->read_idx, 0);
766 atomic_set(&dev->overflow_flag, 0);
767 init_waitqueue_head(&dev->read_wait);
768 atomic_set(&dev->write_busy, 0);
769 init_waitqueue_head(&dev->write_wait);
771 dev->udev = udev;
772 dev->interface = usb_get_intf(interface);
775 dev->product_id = le16_to_cpu(udev->descriptor.idProduct);
777 init_usb_anchor(&dev->submitted);
779 res = usb_find_last_int_in_endpoint(iface_desc, &dev->int_in_endpoint);
781 dev_err(&interface->dev, "no interrupt-in endpoint found\n");
786 if ((dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW56) ||
787 (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW56AM) ||
788 (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW28) ||
789 (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW28L) ||
790 (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW100)) {
792 &dev->int_out_endpoint);
794 dev_err(&interface->dev, "no interrupt-out endpoint found\n");
801 dev->report_size = usb_endpoint_maxp(dev->int_in_endpoint);
807 if (dev->interface->cur_altsetting->desc.bInterfaceNumber == 0) {
808 switch (dev->product_id) {
811 dev->report_size = 7;
816 dev->report_size = 4;
820 dev->report_size = 12;
826 dev->int_in_urb = usb_alloc_urb(0, GFP_KERNEL);
827 if (!dev->int_in_urb)
829 dev->int_in_buffer = kmalloc(dev->report_size, GFP_KERNEL);
830 if (!dev->int_in_buffer)
832 usb_fill_int_urb(dev->int_in_urb, dev->udev,
833 usb_rcvintpipe(dev->udev,
834 dev->int_in_endpoint->bEndpointAddress),
835 dev->int_in_buffer, dev->report_size,
836 iowarrior_callback, dev,
837 dev->int_in_endpoint->bInterval);
839 dev->read_queue =
840 kmalloc_array(dev->report_size + 1, MAX_INTERRUPT_BUFFER,
842 if (!dev->read_queue)
845 memset(dev->chip_serial, 0x00, sizeof(dev->chip_serial));
846 usb_string(udev, udev->descriptor.iSerialNumber, dev->chip_serial,
847 sizeof(dev->chip_serial));
848 if (strlen(dev->chip_serial) != 8)
849 memset(dev->chip_serial, 0x00, sizeof(dev->chip_serial));
852 if (dev->interface->cur_altsetting->desc.bInterfaceNumber == 0) {
859 dev->present = 1;
862 usb_set_intfdata(interface, dev);
867 dev_err(&interface->dev, "Not able to get a minor for this device.\n");
871 dev->minor = interface->minor;
874 dev_info(&interface->dev, "IOWarrior product=0x%x, serial=%s interface=%d "
875 "now attached to iowarrior%d\n", dev->product_id, dev->chip_serial,
876 iface_desc->desc.bInterfaceNumber, dev->minor - IOWARRIOR_MINOR_BASE);
880 iowarrior_delete(dev);
891 struct iowarrior *dev = usb_get_intfdata(interface);
892 int minor = dev->minor;
896 mutex_lock(&dev->mutex);
899 dev->present = 0;
901 if (dev->opened) {
906 usb_kill_urb(dev->int_in_urb);
907 usb_kill_anchored_urbs(&dev->submitted);
908 wake_up_interruptible(&dev->read_wait);
909 wake_up_interruptible(&dev->write_wait);
910 mutex_unlock(&dev->mutex);
913 mutex_unlock(&dev->mutex);
914 iowarrior_delete(dev);
917 dev_info(&interface->dev, "I/O-Warror #%d now disconnected\n",