0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
0012
0013 #include <linux/module.h>
0014 #include <linux/kernel.h>
0015 #include <linux/fs.h>
0016 #include <linux/uaccess.h>
0017 #include <linux/kref.h>
0018 #include <linux/slab.h>
0019 #include <linux/poll.h>
0020 #include <linux/mutex.h>
0021 #include <linux/usb.h>
0022 #include <linux/compat.h>
0023 #include <linux/usb/tmc.h>
0024
0025
0026
0027
0028 #define USBTMC_API_VERSION (3)
0029
0030 #define USBTMC_HEADER_SIZE 12
0031 #define USBTMC_MINOR_BASE 176
0032
0033
0034 #define USBTMC_MIN_TIMEOUT 100
0035
0036 #define USBTMC_TIMEOUT 5000
0037
0038
0039 #define MAX_URBS_IN_FLIGHT 16
0040
0041 #define USBTMC_BUFSIZE (4096)
0042
0043
0044
0045
0046
0047
0048 #define USBTMC_MAX_READS_TO_CLEAR_BULK_IN 100
0049
0050 static const struct usb_device_id usbtmc_devices[] = {
0051 { USB_INTERFACE_INFO(USB_CLASS_APP_SPEC, 3, 0), },
0052 { USB_INTERFACE_INFO(USB_CLASS_APP_SPEC, 3, 1), },
0053 { 0, }
0054 };
0055 MODULE_DEVICE_TABLE(usb, usbtmc_devices);
0056
0057
0058
0059
0060
0061
0062
0063 struct usbtmc_dev_capabilities {
0064 __u8 interface_capabilities;
0065 __u8 device_capabilities;
0066 __u8 usb488_interface_capabilities;
0067 __u8 usb488_device_capabilities;
0068 };
0069
0070
0071
0072
0073 struct usbtmc_device_data {
0074 const struct usb_device_id *id;
0075 struct usb_device *usb_dev;
0076 struct usb_interface *intf;
0077 struct list_head file_list;
0078
0079 unsigned int bulk_in;
0080 unsigned int bulk_out;
0081
0082 u8 bTag;
0083 u8 bTag_last_write;
0084 u8 bTag_last_read;
0085
0086
0087 u16 wMaxPacketSize;
0088
0089
0090 u8 bNotify1;
0091 u8 bNotify2;
0092 u16 ifnum;
0093 u8 iin_bTag;
0094 u8 *iin_buffer;
0095 atomic_t iin_data_valid;
0096 unsigned int iin_ep;
0097 int iin_ep_present;
0098 int iin_interval;
0099 struct urb *iin_urb;
0100 u16 iin_wMaxPacketSize;
0101
0102
0103 __u8 usb488_caps;
0104
0105 bool zombie;
0106
0107 struct usbtmc_dev_capabilities capabilities;
0108 struct kref kref;
0109 struct mutex io_mutex;
0110 wait_queue_head_t waitq;
0111 struct fasync_struct *fasync;
0112 spinlock_t dev_lock;
0113 };
0114 #define to_usbtmc_data(d) container_of(d, struct usbtmc_device_data, kref)
0115
0116
0117
0118
0119 struct usbtmc_file_data {
0120 struct usbtmc_device_data *data;
0121 struct list_head file_elem;
0122
0123 u32 timeout;
0124 u8 srq_byte;
0125 atomic_t srq_asserted;
0126 atomic_t closing;
0127 u8 bmTransferAttributes;
0128
0129 u8 eom_val;
0130 u8 term_char;
0131 bool term_char_enabled;
0132 bool auto_abort;
0133
0134 spinlock_t err_lock;
0135
0136 struct usb_anchor submitted;
0137
0138
0139 struct semaphore limit_write_sem;
0140 u32 out_transfer_size;
0141 int out_status;
0142
0143
0144 u32 in_transfer_size;
0145 int in_status;
0146 int in_urbs_used;
0147 struct usb_anchor in_anchor;
0148 wait_queue_head_t wait_bulk_in;
0149 };
0150
0151
0152 static struct usb_driver usbtmc_driver;
0153 static void usbtmc_draw_down(struct usbtmc_file_data *file_data);
0154
0155 static void usbtmc_delete(struct kref *kref)
0156 {
0157 struct usbtmc_device_data *data = to_usbtmc_data(kref);
0158
0159 usb_put_dev(data->usb_dev);
0160 kfree(data);
0161 }
0162
0163 static int usbtmc_open(struct inode *inode, struct file *filp)
0164 {
0165 struct usb_interface *intf;
0166 struct usbtmc_device_data *data;
0167 struct usbtmc_file_data *file_data;
0168
0169 intf = usb_find_interface(&usbtmc_driver, iminor(inode));
0170 if (!intf) {
0171 pr_err("can not find device for minor %d", iminor(inode));
0172 return -ENODEV;
0173 }
0174
0175 file_data = kzalloc(sizeof(*file_data), GFP_KERNEL);
0176 if (!file_data)
0177 return -ENOMEM;
0178
0179 spin_lock_init(&file_data->err_lock);
0180 sema_init(&file_data->limit_write_sem, MAX_URBS_IN_FLIGHT);
0181 init_usb_anchor(&file_data->submitted);
0182 init_usb_anchor(&file_data->in_anchor);
0183 init_waitqueue_head(&file_data->wait_bulk_in);
0184
0185 data = usb_get_intfdata(intf);
0186
0187 kref_get(&data->kref);
0188
0189 mutex_lock(&data->io_mutex);
0190 file_data->data = data;
0191
0192 atomic_set(&file_data->closing, 0);
0193
0194 file_data->timeout = USBTMC_TIMEOUT;
0195 file_data->term_char = '\n';
0196 file_data->term_char_enabled = 0;
0197 file_data->auto_abort = 0;
0198 file_data->eom_val = 1;
0199
0200 INIT_LIST_HEAD(&file_data->file_elem);
0201 spin_lock_irq(&data->dev_lock);
0202 list_add_tail(&file_data->file_elem, &data->file_list);
0203 spin_unlock_irq(&data->dev_lock);
0204 mutex_unlock(&data->io_mutex);
0205
0206
0207 filp->private_data = file_data;
0208
0209 return 0;
0210 }
0211
0212
0213
0214
0215 static int usbtmc_flush(struct file *file, fl_owner_t id)
0216 {
0217 struct usbtmc_file_data *file_data;
0218 struct usbtmc_device_data *data;
0219
0220 file_data = file->private_data;
0221 if (file_data == NULL)
0222 return -ENODEV;
0223
0224 atomic_set(&file_data->closing, 1);
0225 data = file_data->data;
0226
0227
0228 mutex_lock(&data->io_mutex);
0229
0230 usbtmc_draw_down(file_data);
0231
0232 spin_lock_irq(&file_data->err_lock);
0233 file_data->in_status = 0;
0234 file_data->in_transfer_size = 0;
0235 file_data->in_urbs_used = 0;
0236 file_data->out_status = 0;
0237 file_data->out_transfer_size = 0;
0238 spin_unlock_irq(&file_data->err_lock);
0239
0240 wake_up_interruptible_all(&data->waitq);
0241 mutex_unlock(&data->io_mutex);
0242
0243 return 0;
0244 }
0245
0246 static int usbtmc_release(struct inode *inode, struct file *file)
0247 {
0248 struct usbtmc_file_data *file_data = file->private_data;
0249
0250
0251 mutex_lock(&file_data->data->io_mutex);
0252 spin_lock_irq(&file_data->data->dev_lock);
0253
0254 list_del(&file_data->file_elem);
0255
0256 spin_unlock_irq(&file_data->data->dev_lock);
0257 mutex_unlock(&file_data->data->io_mutex);
0258
0259 kref_put(&file_data->data->kref, usbtmc_delete);
0260 file_data->data = NULL;
0261 kfree(file_data);
0262 return 0;
0263 }
0264
0265 static int usbtmc_ioctl_abort_bulk_in_tag(struct usbtmc_device_data *data,
0266 u8 tag)
0267 {
0268 u8 *buffer;
0269 struct device *dev;
0270 int rv;
0271 int n;
0272 int actual;
0273
0274 dev = &data->intf->dev;
0275 buffer = kmalloc(USBTMC_BUFSIZE, GFP_KERNEL);
0276 if (!buffer)
0277 return -ENOMEM;
0278
0279 rv = usb_control_msg(data->usb_dev,
0280 usb_rcvctrlpipe(data->usb_dev, 0),
0281 USBTMC_REQUEST_INITIATE_ABORT_BULK_IN,
0282 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_ENDPOINT,
0283 tag, data->bulk_in,
0284 buffer, 2, USB_CTRL_GET_TIMEOUT);
0285
0286 if (rv < 0) {
0287 dev_err(dev, "usb_control_msg returned %d\n", rv);
0288 goto exit;
0289 }
0290
0291 dev_dbg(dev, "INITIATE_ABORT_BULK_IN returned %x with tag %02x\n",
0292 buffer[0], buffer[1]);
0293
0294 if (buffer[0] == USBTMC_STATUS_FAILED) {
0295
0296 rv = 0;
0297 goto exit;
0298 }
0299
0300 if (buffer[0] == USBTMC_STATUS_TRANSFER_NOT_IN_PROGRESS) {
0301
0302
0303
0304
0305
0306
0307 rv = -ENOMSG;
0308 goto exit;
0309 }
0310
0311 if (buffer[0] != USBTMC_STATUS_SUCCESS) {
0312 dev_err(dev, "INITIATE_ABORT_BULK_IN returned %x\n",
0313 buffer[0]);
0314 rv = -EPERM;
0315 goto exit;
0316 }
0317
0318 n = 0;
0319
0320 usbtmc_abort_bulk_in_status:
0321 dev_dbg(dev, "Reading from bulk in EP\n");
0322
0323
0324 actual = 0;
0325 rv = usb_bulk_msg(data->usb_dev,
0326 usb_rcvbulkpipe(data->usb_dev,
0327 data->bulk_in),
0328 buffer, USBTMC_BUFSIZE,
0329 &actual, 300);
0330
0331 print_hex_dump_debug("usbtmc ", DUMP_PREFIX_NONE, 16, 1,
0332 buffer, actual, true);
0333
0334 n++;
0335
0336 if (rv < 0) {
0337 dev_err(dev, "usb_bulk_msg returned %d\n", rv);
0338 if (rv != -ETIMEDOUT)
0339 goto exit;
0340 }
0341
0342 if (actual == USBTMC_BUFSIZE)
0343 goto usbtmc_abort_bulk_in_status;
0344
0345 if (n >= USBTMC_MAX_READS_TO_CLEAR_BULK_IN) {
0346 dev_err(dev, "Couldn't clear device buffer within %d cycles\n",
0347 USBTMC_MAX_READS_TO_CLEAR_BULK_IN);
0348 rv = -EPERM;
0349 goto exit;
0350 }
0351
0352 rv = usb_control_msg(data->usb_dev,
0353 usb_rcvctrlpipe(data->usb_dev, 0),
0354 USBTMC_REQUEST_CHECK_ABORT_BULK_IN_STATUS,
0355 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_ENDPOINT,
0356 0, data->bulk_in, buffer, 0x08,
0357 USB_CTRL_GET_TIMEOUT);
0358
0359 if (rv < 0) {
0360 dev_err(dev, "usb_control_msg returned %d\n", rv);
0361 goto exit;
0362 }
0363
0364 dev_dbg(dev, "CHECK_ABORT_BULK_IN returned %x\n", buffer[0]);
0365
0366 if (buffer[0] == USBTMC_STATUS_SUCCESS) {
0367 rv = 0;
0368 goto exit;
0369 }
0370
0371 if (buffer[0] != USBTMC_STATUS_PENDING) {
0372 dev_err(dev, "CHECK_ABORT_BULK_IN returned %x\n", buffer[0]);
0373 rv = -EPERM;
0374 goto exit;
0375 }
0376
0377 if ((buffer[1] & 1) > 0) {
0378
0379 goto usbtmc_abort_bulk_in_status;
0380 }
0381
0382
0383 rv = -EAGAIN;
0384 exit:
0385 kfree(buffer);
0386 return rv;
0387 }
0388
0389 static int usbtmc_ioctl_abort_bulk_in(struct usbtmc_device_data *data)
0390 {
0391 return usbtmc_ioctl_abort_bulk_in_tag(data, data->bTag_last_read);
0392 }
0393
0394 static int usbtmc_ioctl_abort_bulk_out_tag(struct usbtmc_device_data *data,
0395 u8 tag)
0396 {
0397 struct device *dev;
0398 u8 *buffer;
0399 int rv;
0400 int n;
0401
0402 dev = &data->intf->dev;
0403
0404 buffer = kmalloc(8, GFP_KERNEL);
0405 if (!buffer)
0406 return -ENOMEM;
0407
0408 rv = usb_control_msg(data->usb_dev,
0409 usb_rcvctrlpipe(data->usb_dev, 0),
0410 USBTMC_REQUEST_INITIATE_ABORT_BULK_OUT,
0411 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_ENDPOINT,
0412 tag, data->bulk_out,
0413 buffer, 2, USB_CTRL_GET_TIMEOUT);
0414
0415 if (rv < 0) {
0416 dev_err(dev, "usb_control_msg returned %d\n", rv);
0417 goto exit;
0418 }
0419
0420 dev_dbg(dev, "INITIATE_ABORT_BULK_OUT returned %x\n", buffer[0]);
0421
0422 if (buffer[0] != USBTMC_STATUS_SUCCESS) {
0423 dev_err(dev, "INITIATE_ABORT_BULK_OUT returned %x\n",
0424 buffer[0]);
0425 rv = -EPERM;
0426 goto exit;
0427 }
0428
0429 n = 0;
0430
0431 usbtmc_abort_bulk_out_check_status:
0432
0433 msleep(50);
0434 rv = usb_control_msg(data->usb_dev,
0435 usb_rcvctrlpipe(data->usb_dev, 0),
0436 USBTMC_REQUEST_CHECK_ABORT_BULK_OUT_STATUS,
0437 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_ENDPOINT,
0438 0, data->bulk_out, buffer, 0x08,
0439 USB_CTRL_GET_TIMEOUT);
0440 n++;
0441 if (rv < 0) {
0442 dev_err(dev, "usb_control_msg returned %d\n", rv);
0443 goto exit;
0444 }
0445
0446 dev_dbg(dev, "CHECK_ABORT_BULK_OUT returned %x\n", buffer[0]);
0447
0448 if (buffer[0] == USBTMC_STATUS_SUCCESS)
0449 goto usbtmc_abort_bulk_out_clear_halt;
0450
0451 if ((buffer[0] == USBTMC_STATUS_PENDING) &&
0452 (n < USBTMC_MAX_READS_TO_CLEAR_BULK_IN))
0453 goto usbtmc_abort_bulk_out_check_status;
0454
0455 rv = -EPERM;
0456 goto exit;
0457
0458 usbtmc_abort_bulk_out_clear_halt:
0459 rv = usb_clear_halt(data->usb_dev,
0460 usb_sndbulkpipe(data->usb_dev, data->bulk_out));
0461
0462 if (rv < 0) {
0463 dev_err(dev, "usb_control_msg returned %d\n", rv);
0464 goto exit;
0465 }
0466 rv = 0;
0467
0468 exit:
0469 kfree(buffer);
0470 return rv;
0471 }
0472
0473 static int usbtmc_ioctl_abort_bulk_out(struct usbtmc_device_data *data)
0474 {
0475 return usbtmc_ioctl_abort_bulk_out_tag(data, data->bTag_last_write);
0476 }
0477
0478 static int usbtmc_get_stb(struct usbtmc_file_data *file_data, __u8 *stb)
0479 {
0480 struct usbtmc_device_data *data = file_data->data;
0481 struct device *dev = &data->intf->dev;
0482 u8 *buffer;
0483 u8 tag;
0484 int rv;
0485
0486 dev_dbg(dev, "Enter ioctl_read_stb iin_ep_present: %d\n",
0487 data->iin_ep_present);
0488
0489 buffer = kmalloc(8, GFP_KERNEL);
0490 if (!buffer)
0491 return -ENOMEM;
0492
0493 atomic_set(&data->iin_data_valid, 0);
0494
0495 rv = usb_control_msg(data->usb_dev,
0496 usb_rcvctrlpipe(data->usb_dev, 0),
0497 USBTMC488_REQUEST_READ_STATUS_BYTE,
0498 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
0499 data->iin_bTag,
0500 data->ifnum,
0501 buffer, 0x03, USB_CTRL_GET_TIMEOUT);
0502 if (rv < 0) {
0503 dev_err(dev, "stb usb_control_msg returned %d\n", rv);
0504 goto exit;
0505 }
0506
0507 if (buffer[0] != USBTMC_STATUS_SUCCESS) {
0508 dev_err(dev, "control status returned %x\n", buffer[0]);
0509 rv = -EIO;
0510 goto exit;
0511 }
0512
0513 if (data->iin_ep_present) {
0514 rv = wait_event_interruptible_timeout(
0515 data->waitq,
0516 atomic_read(&data->iin_data_valid) != 0,
0517 file_data->timeout);
0518 if (rv < 0) {
0519 dev_dbg(dev, "wait interrupted %d\n", rv);
0520 goto exit;
0521 }
0522
0523 if (rv == 0) {
0524 dev_dbg(dev, "wait timed out\n");
0525 rv = -ETIMEDOUT;
0526 goto exit;
0527 }
0528
0529 tag = data->bNotify1 & 0x7f;
0530 if (tag != data->iin_bTag) {
0531 dev_err(dev, "expected bTag %x got %x\n",
0532 data->iin_bTag, tag);
0533 }
0534
0535 *stb = data->bNotify2;
0536 } else {
0537 *stb = buffer[2];
0538 }
0539
0540 dev_dbg(dev, "stb:0x%02x received %d\n", (unsigned int)*stb, rv);
0541
0542 exit:
0543
0544 data->iin_bTag += 1;
0545 if (data->iin_bTag > 127)
0546
0547 data->iin_bTag = 2;
0548
0549 kfree(buffer);
0550 return rv;
0551 }
0552
0553 static int usbtmc488_ioctl_read_stb(struct usbtmc_file_data *file_data,
0554 void __user *arg)
0555 {
0556 int srq_asserted = 0;
0557 __u8 stb;
0558 int rv;
0559
0560 rv = usbtmc_get_stb(file_data, &stb);
0561
0562 if (rv > 0) {
0563 srq_asserted = atomic_xchg(&file_data->srq_asserted,
0564 srq_asserted);
0565 if (srq_asserted)
0566 stb |= 0x40;
0567
0568 rv = put_user(stb, (__u8 __user *)arg);
0569 }
0570 return rv;
0571
0572 }
0573
0574 static int usbtmc_ioctl_get_srq_stb(struct usbtmc_file_data *file_data,
0575 void __user *arg)
0576 {
0577 struct usbtmc_device_data *data = file_data->data;
0578 struct device *dev = &data->intf->dev;
0579 int srq_asserted = 0;
0580 __u8 stb = 0;
0581 int rv;
0582
0583 spin_lock_irq(&data->dev_lock);
0584 srq_asserted = atomic_xchg(&file_data->srq_asserted, srq_asserted);
0585
0586 if (srq_asserted) {
0587 stb = file_data->srq_byte;
0588 spin_unlock_irq(&data->dev_lock);
0589 rv = put_user(stb, (__u8 __user *)arg);
0590 } else {
0591 spin_unlock_irq(&data->dev_lock);
0592 rv = -ENOMSG;
0593 }
0594
0595 dev_dbg(dev, "stb:0x%02x with srq received %d\n", (unsigned int)stb, rv);
0596
0597 return rv;
0598 }
0599
0600 static int usbtmc488_ioctl_wait_srq(struct usbtmc_file_data *file_data,
0601 __u32 __user *arg)
0602 {
0603 struct usbtmc_device_data *data = file_data->data;
0604 struct device *dev = &data->intf->dev;
0605 int rv;
0606 u32 timeout;
0607 unsigned long expire;
0608
0609 if (!data->iin_ep_present) {
0610 dev_dbg(dev, "no interrupt endpoint present\n");
0611 return -EFAULT;
0612 }
0613
0614 if (get_user(timeout, arg))
0615 return -EFAULT;
0616
0617 expire = msecs_to_jiffies(timeout);
0618
0619 mutex_unlock(&data->io_mutex);
0620
0621 rv = wait_event_interruptible_timeout(
0622 data->waitq,
0623 atomic_read(&file_data->srq_asserted) != 0 ||
0624 atomic_read(&file_data->closing),
0625 expire);
0626
0627 mutex_lock(&data->io_mutex);
0628
0629
0630 if (atomic_read(&file_data->closing) || data->zombie)
0631 rv = -ENODEV;
0632
0633 if (rv < 0) {
0634
0635 pr_debug("%s - wait interrupted %d\n", __func__, rv);
0636 return rv;
0637 }
0638
0639 if (rv == 0) {
0640 dev_dbg(dev, "%s - wait timed out\n", __func__);
0641 return -ETIMEDOUT;
0642 }
0643
0644 dev_dbg(dev, "%s - srq asserted\n", __func__);
0645 return 0;
0646 }
0647
0648 static int usbtmc488_ioctl_simple(struct usbtmc_device_data *data,
0649 void __user *arg, unsigned int cmd)
0650 {
0651 struct device *dev = &data->intf->dev;
0652 __u8 val;
0653 u8 *buffer;
0654 u16 wValue;
0655 int rv;
0656
0657 if (!(data->usb488_caps & USBTMC488_CAPABILITY_SIMPLE))
0658 return -EINVAL;
0659
0660 buffer = kmalloc(8, GFP_KERNEL);
0661 if (!buffer)
0662 return -ENOMEM;
0663
0664 if (cmd == USBTMC488_REQUEST_REN_CONTROL) {
0665 rv = copy_from_user(&val, arg, sizeof(val));
0666 if (rv) {
0667 rv = -EFAULT;
0668 goto exit;
0669 }
0670 wValue = val ? 1 : 0;
0671 } else {
0672 wValue = 0;
0673 }
0674
0675 rv = usb_control_msg(data->usb_dev,
0676 usb_rcvctrlpipe(data->usb_dev, 0),
0677 cmd,
0678 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
0679 wValue,
0680 data->ifnum,
0681 buffer, 0x01, USB_CTRL_GET_TIMEOUT);
0682 if (rv < 0) {
0683 dev_err(dev, "simple usb_control_msg failed %d\n", rv);
0684 goto exit;
0685 } else if (rv != 1) {
0686 dev_warn(dev, "simple usb_control_msg returned %d\n", rv);
0687 rv = -EIO;
0688 goto exit;
0689 }
0690
0691 if (buffer[0] != USBTMC_STATUS_SUCCESS) {
0692 dev_err(dev, "simple control status returned %x\n", buffer[0]);
0693 rv = -EIO;
0694 goto exit;
0695 }
0696 rv = 0;
0697
0698 exit:
0699 kfree(buffer);
0700 return rv;
0701 }
0702
0703
0704
0705
0706
0707
0708
0709 static int usbtmc488_ioctl_trigger(struct usbtmc_file_data *file_data)
0710 {
0711 struct usbtmc_device_data *data = file_data->data;
0712 int retval;
0713 u8 *buffer;
0714 int actual;
0715
0716 buffer = kzalloc(USBTMC_HEADER_SIZE, GFP_KERNEL);
0717 if (!buffer)
0718 return -ENOMEM;
0719
0720 buffer[0] = 128;
0721 buffer[1] = data->bTag;
0722 buffer[2] = ~data->bTag;
0723
0724 retval = usb_bulk_msg(data->usb_dev,
0725 usb_sndbulkpipe(data->usb_dev,
0726 data->bulk_out),
0727 buffer, USBTMC_HEADER_SIZE,
0728 &actual, file_data->timeout);
0729
0730
0731 data->bTag_last_write = data->bTag;
0732
0733
0734 data->bTag++;
0735 if (!data->bTag)
0736 data->bTag++;
0737
0738 kfree(buffer);
0739 if (retval < 0) {
0740 dev_err(&data->intf->dev, "%s returned %d\n",
0741 __func__, retval);
0742 return retval;
0743 }
0744
0745 return 0;
0746 }
0747
0748 static struct urb *usbtmc_create_urb(void)
0749 {
0750 const size_t bufsize = USBTMC_BUFSIZE;
0751 u8 *dmabuf = NULL;
0752 struct urb *urb = usb_alloc_urb(0, GFP_KERNEL);
0753
0754 if (!urb)
0755 return NULL;
0756
0757 dmabuf = kmalloc(bufsize, GFP_KERNEL);
0758 if (!dmabuf) {
0759 usb_free_urb(urb);
0760 return NULL;
0761 }
0762
0763 urb->transfer_buffer = dmabuf;
0764 urb->transfer_buffer_length = bufsize;
0765 urb->transfer_flags |= URB_FREE_BUFFER;
0766 return urb;
0767 }
0768
0769 static void usbtmc_read_bulk_cb(struct urb *urb)
0770 {
0771 struct usbtmc_file_data *file_data = urb->context;
0772 int status = urb->status;
0773 unsigned long flags;
0774
0775
0776 if (status) {
0777 if (!(
0778 status == -ECONNRESET ||
0779 status == -EREMOTEIO ||
0780 status == -ESHUTDOWN))
0781 dev_err(&file_data->data->intf->dev,
0782 "%s - nonzero read bulk status received: %d\n",
0783 __func__, status);
0784
0785 spin_lock_irqsave(&file_data->err_lock, flags);
0786 if (!file_data->in_status)
0787 file_data->in_status = status;
0788 spin_unlock_irqrestore(&file_data->err_lock, flags);
0789 }
0790
0791 spin_lock_irqsave(&file_data->err_lock, flags);
0792 file_data->in_transfer_size += urb->actual_length;
0793 dev_dbg(&file_data->data->intf->dev,
0794 "%s - total size: %u current: %d status: %d\n",
0795 __func__, file_data->in_transfer_size,
0796 urb->actual_length, status);
0797 spin_unlock_irqrestore(&file_data->err_lock, flags);
0798 usb_anchor_urb(urb, &file_data->in_anchor);
0799
0800 wake_up_interruptible(&file_data->wait_bulk_in);
0801 wake_up_interruptible(&file_data->data->waitq);
0802 }
0803
0804 static inline bool usbtmc_do_transfer(struct usbtmc_file_data *file_data)
0805 {
0806 bool data_or_error;
0807
0808 spin_lock_irq(&file_data->err_lock);
0809 data_or_error = !usb_anchor_empty(&file_data->in_anchor)
0810 || file_data->in_status;
0811 spin_unlock_irq(&file_data->err_lock);
0812 dev_dbg(&file_data->data->intf->dev, "%s: returns %d\n", __func__,
0813 data_or_error);
0814 return data_or_error;
0815 }
0816
0817 static ssize_t usbtmc_generic_read(struct usbtmc_file_data *file_data,
0818 void __user *user_buffer,
0819 u32 transfer_size,
0820 u32 *transferred,
0821 u32 flags)
0822 {
0823 struct usbtmc_device_data *data = file_data->data;
0824 struct device *dev = &data->intf->dev;
0825 u32 done = 0;
0826 u32 remaining;
0827 const u32 bufsize = USBTMC_BUFSIZE;
0828 int retval = 0;
0829 u32 max_transfer_size;
0830 unsigned long expire;
0831 int bufcount = 1;
0832 int again = 0;
0833
0834
0835
0836 *transferred = done;
0837
0838 max_transfer_size = transfer_size;
0839
0840 if (flags & USBTMC_FLAG_IGNORE_TRAILER) {
0841
0842
0843
0844
0845 remaining = transfer_size;
0846 if ((max_transfer_size % data->wMaxPacketSize) == 0)
0847 max_transfer_size += (data->wMaxPacketSize - 1);
0848 } else {
0849
0850 if (max_transfer_size > bufsize) {
0851 max_transfer_size =
0852 roundup(max_transfer_size + 1 - bufsize,
0853 bufsize);
0854 }
0855 remaining = max_transfer_size;
0856 }
0857
0858 spin_lock_irq(&file_data->err_lock);
0859
0860 if (file_data->in_status) {
0861
0862 retval = file_data->in_status;
0863 spin_unlock_irq(&file_data->err_lock);
0864 goto error;
0865 }
0866
0867 if (flags & USBTMC_FLAG_ASYNC) {
0868 if (usb_anchor_empty(&file_data->in_anchor))
0869 again = 1;
0870
0871 if (file_data->in_urbs_used == 0) {
0872 file_data->in_transfer_size = 0;
0873 file_data->in_status = 0;
0874 }
0875 } else {
0876 file_data->in_transfer_size = 0;
0877 file_data->in_status = 0;
0878 }
0879
0880 if (max_transfer_size == 0) {
0881 bufcount = 0;
0882 } else {
0883 bufcount = roundup(max_transfer_size, bufsize) / bufsize;
0884 if (bufcount > file_data->in_urbs_used)
0885 bufcount -= file_data->in_urbs_used;
0886 else
0887 bufcount = 0;
0888
0889 if (bufcount + file_data->in_urbs_used > MAX_URBS_IN_FLIGHT) {
0890 bufcount = MAX_URBS_IN_FLIGHT -
0891 file_data->in_urbs_used;
0892 }
0893 }
0894 spin_unlock_irq(&file_data->err_lock);
0895
0896 dev_dbg(dev, "%s: requested=%u flags=0x%X size=%u bufs=%d used=%d\n",
0897 __func__, transfer_size, flags,
0898 max_transfer_size, bufcount, file_data->in_urbs_used);
0899
0900 while (bufcount > 0) {
0901 u8 *dmabuf = NULL;
0902 struct urb *urb = usbtmc_create_urb();
0903
0904 if (!urb) {
0905 retval = -ENOMEM;
0906 goto error;
0907 }
0908
0909 dmabuf = urb->transfer_buffer;
0910
0911 usb_fill_bulk_urb(urb, data->usb_dev,
0912 usb_rcvbulkpipe(data->usb_dev, data->bulk_in),
0913 dmabuf, bufsize,
0914 usbtmc_read_bulk_cb, file_data);
0915
0916 usb_anchor_urb(urb, &file_data->submitted);
0917 retval = usb_submit_urb(urb, GFP_KERNEL);
0918
0919 usb_free_urb(urb);
0920 if (unlikely(retval)) {
0921 usb_unanchor_urb(urb);
0922 goto error;
0923 }
0924 file_data->in_urbs_used++;
0925 bufcount--;
0926 }
0927
0928 if (again) {
0929 dev_dbg(dev, "%s: ret=again\n", __func__);
0930 return -EAGAIN;
0931 }
0932
0933 if (user_buffer == NULL)
0934 return -EINVAL;
0935
0936 expire = msecs_to_jiffies(file_data->timeout);
0937
0938 while (max_transfer_size > 0) {
0939 u32 this_part;
0940 struct urb *urb = NULL;
0941
0942 if (!(flags & USBTMC_FLAG_ASYNC)) {
0943 dev_dbg(dev, "%s: before wait time %lu\n",
0944 __func__, expire);
0945 retval = wait_event_interruptible_timeout(
0946 file_data->wait_bulk_in,
0947 usbtmc_do_transfer(file_data),
0948 expire);
0949
0950 dev_dbg(dev, "%s: wait returned %d\n",
0951 __func__, retval);
0952
0953 if (retval <= 0) {
0954 if (retval == 0)
0955 retval = -ETIMEDOUT;
0956 goto error;
0957 }
0958 }
0959
0960 urb = usb_get_from_anchor(&file_data->in_anchor);
0961 if (!urb) {
0962 if (!(flags & USBTMC_FLAG_ASYNC)) {
0963
0964 retval = -EFAULT;
0965 goto error;
0966 }
0967
0968
0969 *transferred = done;
0970 dev_dbg(dev, "%s: (async) done=%u ret=0\n",
0971 __func__, done);
0972 return 0;
0973 }
0974
0975 file_data->in_urbs_used--;
0976
0977 if (max_transfer_size > urb->actual_length)
0978 max_transfer_size -= urb->actual_length;
0979 else
0980 max_transfer_size = 0;
0981
0982 if (remaining > urb->actual_length)
0983 this_part = urb->actual_length;
0984 else
0985 this_part = remaining;
0986
0987 print_hex_dump_debug("usbtmc ", DUMP_PREFIX_NONE, 16, 1,
0988 urb->transfer_buffer, urb->actual_length, true);
0989
0990 if (copy_to_user(user_buffer + done,
0991 urb->transfer_buffer, this_part)) {
0992 usb_free_urb(urb);
0993 retval = -EFAULT;
0994 goto error;
0995 }
0996
0997 remaining -= this_part;
0998 done += this_part;
0999
1000 spin_lock_irq(&file_data->err_lock);
1001 if (urb->status) {
1002
1003 retval = file_data->in_status;
1004 spin_unlock_irq(&file_data->err_lock);
1005 usb_free_urb(urb);
1006 goto error;
1007 }
1008 spin_unlock_irq(&file_data->err_lock);
1009
1010 if (urb->actual_length < bufsize) {
1011
1012 usb_free_urb(urb);
1013 retval = 1;
1014 break;
1015 }
1016
1017 if (!(flags & USBTMC_FLAG_ASYNC) &&
1018 max_transfer_size > (bufsize * file_data->in_urbs_used)) {
1019
1020 usb_anchor_urb(urb, &file_data->submitted);
1021 retval = usb_submit_urb(urb, GFP_KERNEL);
1022 if (unlikely(retval)) {
1023 usb_unanchor_urb(urb);
1024 usb_free_urb(urb);
1025 goto error;
1026 }
1027 file_data->in_urbs_used++;
1028 }
1029 usb_free_urb(urb);
1030 retval = 0;
1031 }
1032
1033 error:
1034 *transferred = done;
1035
1036 dev_dbg(dev, "%s: before kill\n", __func__);
1037
1038 usb_kill_anchored_urbs(&file_data->submitted);
1039 dev_dbg(dev, "%s: after kill\n", __func__);
1040 usb_scuttle_anchored_urbs(&file_data->in_anchor);
1041 file_data->in_urbs_used = 0;
1042 file_data->in_status = 0;
1043 dev_dbg(dev, "%s: done=%u ret=%d\n", __func__, done, retval);
1044
1045 return retval;
1046 }
1047
1048 static ssize_t usbtmc_ioctl_generic_read(struct usbtmc_file_data *file_data,
1049 void __user *arg)
1050 {
1051 struct usbtmc_message msg;
1052 ssize_t retval = 0;
1053
1054
1055
1056 if (copy_from_user(&msg, arg, sizeof(struct usbtmc_message)))
1057 return -EFAULT;
1058
1059 retval = usbtmc_generic_read(file_data, msg.message,
1060 msg.transfer_size, &msg.transferred,
1061 msg.flags);
1062
1063 if (put_user(msg.transferred,
1064 &((struct usbtmc_message __user *)arg)->transferred))
1065 return -EFAULT;
1066
1067 return retval;
1068 }
1069
1070 static void usbtmc_write_bulk_cb(struct urb *urb)
1071 {
1072 struct usbtmc_file_data *file_data = urb->context;
1073 int wakeup = 0;
1074 unsigned long flags;
1075
1076 spin_lock_irqsave(&file_data->err_lock, flags);
1077 file_data->out_transfer_size += urb->actual_length;
1078
1079
1080 if (urb->status) {
1081 if (!(urb->status == -ENOENT ||
1082 urb->status == -ECONNRESET ||
1083 urb->status == -ESHUTDOWN))
1084 dev_err(&file_data->data->intf->dev,
1085 "%s - nonzero write bulk status received: %d\n",
1086 __func__, urb->status);
1087
1088 if (!file_data->out_status) {
1089 file_data->out_status = urb->status;
1090 wakeup = 1;
1091 }
1092 }
1093 spin_unlock_irqrestore(&file_data->err_lock, flags);
1094
1095 dev_dbg(&file_data->data->intf->dev,
1096 "%s - write bulk total size: %u\n",
1097 __func__, file_data->out_transfer_size);
1098
1099 up(&file_data->limit_write_sem);
1100 if (usb_anchor_empty(&file_data->submitted) || wakeup)
1101 wake_up_interruptible(&file_data->data->waitq);
1102 }
1103
1104 static ssize_t usbtmc_generic_write(struct usbtmc_file_data *file_data,
1105 const void __user *user_buffer,
1106 u32 transfer_size,
1107 u32 *transferred,
1108 u32 flags)
1109 {
1110 struct usbtmc_device_data *data = file_data->data;
1111 struct device *dev;
1112 u32 done = 0;
1113 u32 remaining;
1114 unsigned long expire;
1115 const u32 bufsize = USBTMC_BUFSIZE;
1116 struct urb *urb = NULL;
1117 int retval = 0;
1118 u32 timeout;
1119
1120 *transferred = 0;
1121
1122
1123 dev = &data->intf->dev;
1124
1125 dev_dbg(dev, "%s: size=%u flags=0x%X sema=%u\n",
1126 __func__, transfer_size, flags,
1127 file_data->limit_write_sem.count);
1128
1129 if (flags & USBTMC_FLAG_APPEND) {
1130 spin_lock_irq(&file_data->err_lock);
1131 retval = file_data->out_status;
1132 spin_unlock_irq(&file_data->err_lock);
1133 if (retval < 0)
1134 return retval;
1135 } else {
1136 spin_lock_irq(&file_data->err_lock);
1137 file_data->out_transfer_size = 0;
1138 file_data->out_status = 0;
1139 spin_unlock_irq(&file_data->err_lock);
1140 }
1141
1142 remaining = transfer_size;
1143 if (remaining > INT_MAX)
1144 remaining = INT_MAX;
1145
1146 timeout = file_data->timeout;
1147 expire = msecs_to_jiffies(timeout);
1148
1149 while (remaining > 0) {
1150 u32 this_part, aligned;
1151 u8 *buffer = NULL;
1152
1153 if (flags & USBTMC_FLAG_ASYNC) {
1154 if (down_trylock(&file_data->limit_write_sem)) {
1155 retval = (done)?(0):(-EAGAIN);
1156 goto exit;
1157 }
1158 } else {
1159 retval = down_timeout(&file_data->limit_write_sem,
1160 expire);
1161 if (retval < 0) {
1162 retval = -ETIMEDOUT;
1163 goto error;
1164 }
1165 }
1166
1167 spin_lock_irq(&file_data->err_lock);
1168 retval = file_data->out_status;
1169 spin_unlock_irq(&file_data->err_lock);
1170 if (retval < 0) {
1171 up(&file_data->limit_write_sem);
1172 goto error;
1173 }
1174
1175
1176 urb = usbtmc_create_urb();
1177 if (!urb) {
1178 retval = -ENOMEM;
1179 up(&file_data->limit_write_sem);
1180 goto error;
1181 }
1182 buffer = urb->transfer_buffer;
1183
1184 if (remaining > bufsize)
1185 this_part = bufsize;
1186 else
1187 this_part = remaining;
1188
1189 if (copy_from_user(buffer, user_buffer + done, this_part)) {
1190 retval = -EFAULT;
1191 up(&file_data->limit_write_sem);
1192 goto error;
1193 }
1194
1195 print_hex_dump_debug("usbtmc ", DUMP_PREFIX_NONE,
1196 16, 1, buffer, this_part, true);
1197
1198
1199
1200
1201 aligned = (this_part + 3) & ~3;
1202 dev_dbg(dev, "write(size:%u align:%u done:%u)\n",
1203 (unsigned int)this_part,
1204 (unsigned int)aligned,
1205 (unsigned int)done);
1206
1207 usb_fill_bulk_urb(urb, data->usb_dev,
1208 usb_sndbulkpipe(data->usb_dev, data->bulk_out),
1209 urb->transfer_buffer, aligned,
1210 usbtmc_write_bulk_cb, file_data);
1211
1212 usb_anchor_urb(urb, &file_data->submitted);
1213 retval = usb_submit_urb(urb, GFP_KERNEL);
1214 if (unlikely(retval)) {
1215 usb_unanchor_urb(urb);
1216 up(&file_data->limit_write_sem);
1217 goto error;
1218 }
1219
1220 usb_free_urb(urb);
1221 urb = NULL;
1222
1223 remaining -= this_part;
1224 done += this_part;
1225 }
1226
1227
1228 if (!(flags & USBTMC_FLAG_ASYNC)) {
1229 if (!usb_wait_anchor_empty_timeout(&file_data->submitted,
1230 timeout)) {
1231 retval = -ETIMEDOUT;
1232 goto error;
1233 }
1234 }
1235
1236 retval = 0;
1237 goto exit;
1238
1239 error:
1240 usb_kill_anchored_urbs(&file_data->submitted);
1241 exit:
1242 usb_free_urb(urb);
1243
1244 spin_lock_irq(&file_data->err_lock);
1245 if (!(flags & USBTMC_FLAG_ASYNC))
1246 done = file_data->out_transfer_size;
1247 if (!retval && file_data->out_status)
1248 retval = file_data->out_status;
1249 spin_unlock_irq(&file_data->err_lock);
1250
1251 *transferred = done;
1252
1253 dev_dbg(dev, "%s: done=%u, retval=%d, urbstat=%d\n",
1254 __func__, done, retval, file_data->out_status);
1255
1256 return retval;
1257 }
1258
1259 static ssize_t usbtmc_ioctl_generic_write(struct usbtmc_file_data *file_data,
1260 void __user *arg)
1261 {
1262 struct usbtmc_message msg;
1263 ssize_t retval = 0;
1264
1265
1266
1267 if (copy_from_user(&msg, arg, sizeof(struct usbtmc_message)))
1268 return -EFAULT;
1269
1270 retval = usbtmc_generic_write(file_data, msg.message,
1271 msg.transfer_size, &msg.transferred,
1272 msg.flags);
1273
1274 if (put_user(msg.transferred,
1275 &((struct usbtmc_message __user *)arg)->transferred))
1276 return -EFAULT;
1277
1278 return retval;
1279 }
1280
1281
1282
1283
1284 static ssize_t usbtmc_ioctl_write_result(struct usbtmc_file_data *file_data,
1285 void __user *arg)
1286 {
1287 u32 transferred;
1288 int retval;
1289
1290 spin_lock_irq(&file_data->err_lock);
1291 transferred = file_data->out_transfer_size;
1292 retval = file_data->out_status;
1293 spin_unlock_irq(&file_data->err_lock);
1294
1295 if (put_user(transferred, (__u32 __user *)arg))
1296 return -EFAULT;
1297
1298 return retval;
1299 }
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309 static int send_request_dev_dep_msg_in(struct usbtmc_file_data *file_data,
1310 u32 transfer_size)
1311 {
1312 struct usbtmc_device_data *data = file_data->data;
1313 int retval;
1314 u8 *buffer;
1315 int actual;
1316
1317 buffer = kmalloc(USBTMC_HEADER_SIZE, GFP_KERNEL);
1318 if (!buffer)
1319 return -ENOMEM;
1320
1321
1322
1323 buffer[0] = 2;
1324 buffer[1] = data->bTag;
1325 buffer[2] = ~data->bTag;
1326 buffer[3] = 0;
1327 buffer[4] = transfer_size >> 0;
1328 buffer[5] = transfer_size >> 8;
1329 buffer[6] = transfer_size >> 16;
1330 buffer[7] = transfer_size >> 24;
1331 buffer[8] = file_data->term_char_enabled * 2;
1332
1333 buffer[9] = file_data->term_char;
1334 buffer[10] = 0;
1335 buffer[11] = 0;
1336
1337
1338 retval = usb_bulk_msg(data->usb_dev,
1339 usb_sndbulkpipe(data->usb_dev,
1340 data->bulk_out),
1341 buffer, USBTMC_HEADER_SIZE,
1342 &actual, file_data->timeout);
1343
1344
1345 data->bTag_last_write = data->bTag;
1346
1347
1348 data->bTag++;
1349 if (!data->bTag)
1350 data->bTag++;
1351
1352 kfree(buffer);
1353 if (retval < 0)
1354 dev_err(&data->intf->dev, "%s returned %d\n",
1355 __func__, retval);
1356
1357 return retval;
1358 }
1359
1360 static ssize_t usbtmc_read(struct file *filp, char __user *buf,
1361 size_t count, loff_t *f_pos)
1362 {
1363 struct usbtmc_file_data *file_data;
1364 struct usbtmc_device_data *data;
1365 struct device *dev;
1366 const u32 bufsize = USBTMC_BUFSIZE;
1367 u32 n_characters;
1368 u8 *buffer;
1369 int actual;
1370 u32 done = 0;
1371 u32 remaining;
1372 int retval;
1373
1374
1375 file_data = filp->private_data;
1376 data = file_data->data;
1377 dev = &data->intf->dev;
1378
1379 buffer = kmalloc(bufsize, GFP_KERNEL);
1380 if (!buffer)
1381 return -ENOMEM;
1382
1383 mutex_lock(&data->io_mutex);
1384 if (data->zombie) {
1385 retval = -ENODEV;
1386 goto exit;
1387 }
1388
1389 if (count > INT_MAX)
1390 count = INT_MAX;
1391
1392 dev_dbg(dev, "%s(count:%zu)\n", __func__, count);
1393
1394 retval = send_request_dev_dep_msg_in(file_data, count);
1395
1396 if (retval < 0) {
1397 if (file_data->auto_abort)
1398 usbtmc_ioctl_abort_bulk_out(data);
1399 goto exit;
1400 }
1401
1402
1403 remaining = count;
1404 actual = 0;
1405
1406
1407 retval = usb_bulk_msg(data->usb_dev,
1408 usb_rcvbulkpipe(data->usb_dev,
1409 data->bulk_in),
1410 buffer, bufsize, &actual,
1411 file_data->timeout);
1412
1413 dev_dbg(dev, "%s: bulk_msg retval(%u), actual(%d)\n",
1414 __func__, retval, actual);
1415
1416
1417 data->bTag_last_read = data->bTag;
1418
1419 if (retval < 0) {
1420 if (file_data->auto_abort)
1421 usbtmc_ioctl_abort_bulk_in(data);
1422 goto exit;
1423 }
1424
1425
1426 if (actual < USBTMC_HEADER_SIZE) {
1427 dev_err(dev, "Device sent too small first packet: %u < %u\n",
1428 actual, USBTMC_HEADER_SIZE);
1429 if (file_data->auto_abort)
1430 usbtmc_ioctl_abort_bulk_in(data);
1431 goto exit;
1432 }
1433
1434 if (buffer[0] != 2) {
1435 dev_err(dev, "Device sent reply with wrong MsgID: %u != 2\n",
1436 buffer[0]);
1437 if (file_data->auto_abort)
1438 usbtmc_ioctl_abort_bulk_in(data);
1439 goto exit;
1440 }
1441
1442 if (buffer[1] != data->bTag_last_write) {
1443 dev_err(dev, "Device sent reply with wrong bTag: %u != %u\n",
1444 buffer[1], data->bTag_last_write);
1445 if (file_data->auto_abort)
1446 usbtmc_ioctl_abort_bulk_in(data);
1447 goto exit;
1448 }
1449
1450
1451 n_characters = buffer[4] +
1452 (buffer[5] << 8) +
1453 (buffer[6] << 16) +
1454 (buffer[7] << 24);
1455
1456 file_data->bmTransferAttributes = buffer[8];
1457
1458 dev_dbg(dev, "Bulk-IN header: N_characters(%u), bTransAttr(%u)\n",
1459 n_characters, buffer[8]);
1460
1461 if (n_characters > remaining) {
1462 dev_err(dev, "Device wants to return more data than requested: %u > %zu\n",
1463 n_characters, count);
1464 if (file_data->auto_abort)
1465 usbtmc_ioctl_abort_bulk_in(data);
1466 goto exit;
1467 }
1468
1469 print_hex_dump_debug("usbtmc ", DUMP_PREFIX_NONE,
1470 16, 1, buffer, actual, true);
1471
1472 remaining = n_characters;
1473
1474
1475 actual -= USBTMC_HEADER_SIZE;
1476
1477
1478 if (actual > remaining)
1479 actual = remaining;
1480
1481 remaining -= actual;
1482
1483
1484 if (copy_to_user(buf, &buffer[USBTMC_HEADER_SIZE], actual)) {
1485
1486 retval = -EFAULT;
1487 goto exit;
1488 }
1489
1490 if ((actual + USBTMC_HEADER_SIZE) == bufsize) {
1491 retval = usbtmc_generic_read(file_data, buf + actual,
1492 remaining,
1493 &done,
1494 USBTMC_FLAG_IGNORE_TRAILER);
1495 if (retval < 0)
1496 goto exit;
1497 }
1498 done += actual;
1499
1500
1501 *f_pos = *f_pos + done;
1502 retval = done;
1503
1504 exit:
1505 mutex_unlock(&data->io_mutex);
1506 kfree(buffer);
1507 return retval;
1508 }
1509
1510 static ssize_t usbtmc_write(struct file *filp, const char __user *buf,
1511 size_t count, loff_t *f_pos)
1512 {
1513 struct usbtmc_file_data *file_data;
1514 struct usbtmc_device_data *data;
1515 struct urb *urb = NULL;
1516 ssize_t retval = 0;
1517 u8 *buffer;
1518 u32 remaining, done;
1519 u32 transfersize, aligned, buflen;
1520
1521 file_data = filp->private_data;
1522 data = file_data->data;
1523
1524 mutex_lock(&data->io_mutex);
1525
1526 if (data->zombie) {
1527 retval = -ENODEV;
1528 goto exit;
1529 }
1530
1531 done = 0;
1532
1533 spin_lock_irq(&file_data->err_lock);
1534 file_data->out_transfer_size = 0;
1535 file_data->out_status = 0;
1536 spin_unlock_irq(&file_data->err_lock);
1537
1538 if (!count)
1539 goto exit;
1540
1541 if (down_trylock(&file_data->limit_write_sem)) {
1542
1543 retval = -EBUSY;
1544 goto exit;
1545 }
1546
1547 urb = usbtmc_create_urb();
1548 if (!urb) {
1549 retval = -ENOMEM;
1550 up(&file_data->limit_write_sem);
1551 goto exit;
1552 }
1553
1554 buffer = urb->transfer_buffer;
1555 buflen = urb->transfer_buffer_length;
1556
1557 if (count > INT_MAX) {
1558 transfersize = INT_MAX;
1559 buffer[8] = 0;
1560 } else {
1561 transfersize = count;
1562 buffer[8] = file_data->eom_val;
1563 }
1564
1565
1566 buffer[0] = 1;
1567 buffer[1] = data->bTag;
1568 buffer[2] = ~data->bTag;
1569 buffer[3] = 0;
1570 buffer[4] = transfersize >> 0;
1571 buffer[5] = transfersize >> 8;
1572 buffer[6] = transfersize >> 16;
1573 buffer[7] = transfersize >> 24;
1574
1575 buffer[9] = 0;
1576 buffer[10] = 0;
1577 buffer[11] = 0;
1578
1579 remaining = transfersize;
1580
1581 if (transfersize + USBTMC_HEADER_SIZE > buflen) {
1582 transfersize = buflen - USBTMC_HEADER_SIZE;
1583 aligned = buflen;
1584 } else {
1585 aligned = (transfersize + (USBTMC_HEADER_SIZE + 3)) & ~3;
1586 }
1587
1588 if (copy_from_user(&buffer[USBTMC_HEADER_SIZE], buf, transfersize)) {
1589 retval = -EFAULT;
1590 up(&file_data->limit_write_sem);
1591 goto exit;
1592 }
1593
1594 dev_dbg(&data->intf->dev, "%s(size:%u align:%u)\n", __func__,
1595 (unsigned int)transfersize, (unsigned int)aligned);
1596
1597 print_hex_dump_debug("usbtmc ", DUMP_PREFIX_NONE,
1598 16, 1, buffer, aligned, true);
1599
1600 usb_fill_bulk_urb(urb, data->usb_dev,
1601 usb_sndbulkpipe(data->usb_dev, data->bulk_out),
1602 urb->transfer_buffer, aligned,
1603 usbtmc_write_bulk_cb, file_data);
1604
1605 usb_anchor_urb(urb, &file_data->submitted);
1606 retval = usb_submit_urb(urb, GFP_KERNEL);
1607 if (unlikely(retval)) {
1608 usb_unanchor_urb(urb);
1609 up(&file_data->limit_write_sem);
1610 goto exit;
1611 }
1612
1613 remaining -= transfersize;
1614
1615 data->bTag_last_write = data->bTag;
1616 data->bTag++;
1617
1618 if (!data->bTag)
1619 data->bTag++;
1620
1621
1622 retval = usbtmc_generic_write(file_data, buf + transfersize, remaining,
1623 &done, USBTMC_FLAG_APPEND);
1624
1625 if (done > remaining)
1626 done = remaining;
1627
1628
1629 done += transfersize;
1630
1631 if (retval < 0) {
1632 usb_kill_anchored_urbs(&file_data->submitted);
1633
1634 dev_err(&data->intf->dev,
1635 "Unable to send data, error %d\n", (int)retval);
1636 if (file_data->auto_abort)
1637 usbtmc_ioctl_abort_bulk_out(data);
1638 goto exit;
1639 }
1640
1641 retval = done;
1642 exit:
1643 usb_free_urb(urb);
1644 mutex_unlock(&data->io_mutex);
1645 return retval;
1646 }
1647
1648 static int usbtmc_ioctl_clear(struct usbtmc_device_data *data)
1649 {
1650 struct device *dev;
1651 u8 *buffer;
1652 int rv;
1653 int n;
1654 int actual = 0;
1655
1656 dev = &data->intf->dev;
1657
1658 dev_dbg(dev, "Sending INITIATE_CLEAR request\n");
1659
1660 buffer = kmalloc(USBTMC_BUFSIZE, GFP_KERNEL);
1661 if (!buffer)
1662 return -ENOMEM;
1663
1664 rv = usb_control_msg(data->usb_dev,
1665 usb_rcvctrlpipe(data->usb_dev, 0),
1666 USBTMC_REQUEST_INITIATE_CLEAR,
1667 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
1668 0, 0, buffer, 1, USB_CTRL_GET_TIMEOUT);
1669 if (rv < 0) {
1670 dev_err(dev, "usb_control_msg returned %d\n", rv);
1671 goto exit;
1672 }
1673
1674 dev_dbg(dev, "INITIATE_CLEAR returned %x\n", buffer[0]);
1675
1676 if (buffer[0] != USBTMC_STATUS_SUCCESS) {
1677 dev_err(dev, "INITIATE_CLEAR returned %x\n", buffer[0]);
1678 rv = -EPERM;
1679 goto exit;
1680 }
1681
1682 n = 0;
1683
1684 usbtmc_clear_check_status:
1685
1686 dev_dbg(dev, "Sending CHECK_CLEAR_STATUS request\n");
1687
1688 rv = usb_control_msg(data->usb_dev,
1689 usb_rcvctrlpipe(data->usb_dev, 0),
1690 USBTMC_REQUEST_CHECK_CLEAR_STATUS,
1691 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
1692 0, 0, buffer, 2, USB_CTRL_GET_TIMEOUT);
1693 if (rv < 0) {
1694 dev_err(dev, "usb_control_msg returned %d\n", rv);
1695 goto exit;
1696 }
1697
1698 dev_dbg(dev, "CHECK_CLEAR_STATUS returned %x\n", buffer[0]);
1699
1700 if (buffer[0] == USBTMC_STATUS_SUCCESS)
1701 goto usbtmc_clear_bulk_out_halt;
1702
1703 if (buffer[0] != USBTMC_STATUS_PENDING) {
1704 dev_err(dev, "CHECK_CLEAR_STATUS returned %x\n", buffer[0]);
1705 rv = -EPERM;
1706 goto exit;
1707 }
1708
1709 if ((buffer[1] & 1) != 0) {
1710 do {
1711 dev_dbg(dev, "Reading from bulk in EP\n");
1712
1713 actual = 0;
1714 rv = usb_bulk_msg(data->usb_dev,
1715 usb_rcvbulkpipe(data->usb_dev,
1716 data->bulk_in),
1717 buffer, USBTMC_BUFSIZE,
1718 &actual, USB_CTRL_GET_TIMEOUT);
1719
1720 print_hex_dump_debug("usbtmc ", DUMP_PREFIX_NONE,
1721 16, 1, buffer, actual, true);
1722
1723 n++;
1724
1725 if (rv < 0) {
1726 dev_err(dev, "usb_control_msg returned %d\n",
1727 rv);
1728 goto exit;
1729 }
1730 } while ((actual == USBTMC_BUFSIZE) &&
1731 (n < USBTMC_MAX_READS_TO_CLEAR_BULK_IN));
1732 } else {
1733
1734 msleep(50);
1735 n++;
1736 }
1737
1738 if (n >= USBTMC_MAX_READS_TO_CLEAR_BULK_IN) {
1739 dev_err(dev, "Couldn't clear device buffer within %d cycles\n",
1740 USBTMC_MAX_READS_TO_CLEAR_BULK_IN);
1741 rv = -EPERM;
1742 goto exit;
1743 }
1744
1745 goto usbtmc_clear_check_status;
1746
1747 usbtmc_clear_bulk_out_halt:
1748
1749 rv = usb_clear_halt(data->usb_dev,
1750 usb_sndbulkpipe(data->usb_dev, data->bulk_out));
1751 if (rv < 0) {
1752 dev_err(dev, "usb_clear_halt returned %d\n", rv);
1753 goto exit;
1754 }
1755 rv = 0;
1756
1757 exit:
1758 kfree(buffer);
1759 return rv;
1760 }
1761
1762 static int usbtmc_ioctl_clear_out_halt(struct usbtmc_device_data *data)
1763 {
1764 int rv;
1765
1766 rv = usb_clear_halt(data->usb_dev,
1767 usb_sndbulkpipe(data->usb_dev, data->bulk_out));
1768
1769 if (rv < 0)
1770 dev_err(&data->usb_dev->dev, "%s returned %d\n", __func__, rv);
1771 return rv;
1772 }
1773
1774 static int usbtmc_ioctl_clear_in_halt(struct usbtmc_device_data *data)
1775 {
1776 int rv;
1777
1778 rv = usb_clear_halt(data->usb_dev,
1779 usb_rcvbulkpipe(data->usb_dev, data->bulk_in));
1780
1781 if (rv < 0)
1782 dev_err(&data->usb_dev->dev, "%s returned %d\n", __func__, rv);
1783 return rv;
1784 }
1785
1786 static int usbtmc_ioctl_cancel_io(struct usbtmc_file_data *file_data)
1787 {
1788 spin_lock_irq(&file_data->err_lock);
1789 file_data->in_status = -ECANCELED;
1790 file_data->out_status = -ECANCELED;
1791 spin_unlock_irq(&file_data->err_lock);
1792 usb_kill_anchored_urbs(&file_data->submitted);
1793 return 0;
1794 }
1795
1796 static int usbtmc_ioctl_cleanup_io(struct usbtmc_file_data *file_data)
1797 {
1798 usb_kill_anchored_urbs(&file_data->submitted);
1799 usb_scuttle_anchored_urbs(&file_data->in_anchor);
1800 spin_lock_irq(&file_data->err_lock);
1801 file_data->in_status = 0;
1802 file_data->in_transfer_size = 0;
1803 file_data->out_status = 0;
1804 file_data->out_transfer_size = 0;
1805 spin_unlock_irq(&file_data->err_lock);
1806
1807 file_data->in_urbs_used = 0;
1808 return 0;
1809 }
1810
1811 static int get_capabilities(struct usbtmc_device_data *data)
1812 {
1813 struct device *dev = &data->usb_dev->dev;
1814 char *buffer;
1815 int rv = 0;
1816
1817 buffer = kmalloc(0x18, GFP_KERNEL);
1818 if (!buffer)
1819 return -ENOMEM;
1820
1821 rv = usb_control_msg(data->usb_dev, usb_rcvctrlpipe(data->usb_dev, 0),
1822 USBTMC_REQUEST_GET_CAPABILITIES,
1823 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
1824 0, 0, buffer, 0x18, USB_CTRL_GET_TIMEOUT);
1825 if (rv < 0) {
1826 dev_err(dev, "usb_control_msg returned %d\n", rv);
1827 goto err_out;
1828 }
1829
1830 dev_dbg(dev, "GET_CAPABILITIES returned %x\n", buffer[0]);
1831 if (buffer[0] != USBTMC_STATUS_SUCCESS) {
1832 dev_err(dev, "GET_CAPABILITIES returned %x\n", buffer[0]);
1833 rv = -EPERM;
1834 goto err_out;
1835 }
1836 dev_dbg(dev, "Interface capabilities are %x\n", buffer[4]);
1837 dev_dbg(dev, "Device capabilities are %x\n", buffer[5]);
1838 dev_dbg(dev, "USB488 interface capabilities are %x\n", buffer[14]);
1839 dev_dbg(dev, "USB488 device capabilities are %x\n", buffer[15]);
1840
1841 data->capabilities.interface_capabilities = buffer[4];
1842 data->capabilities.device_capabilities = buffer[5];
1843 data->capabilities.usb488_interface_capabilities = buffer[14];
1844 data->capabilities.usb488_device_capabilities = buffer[15];
1845 data->usb488_caps = (buffer[14] & 0x07) | ((buffer[15] & 0x0f) << 4);
1846 rv = 0;
1847
1848 err_out:
1849 kfree(buffer);
1850 return rv;
1851 }
1852
1853 #define capability_attribute(name) \
1854 static ssize_t name##_show(struct device *dev, \
1855 struct device_attribute *attr, char *buf) \
1856 { \
1857 struct usb_interface *intf = to_usb_interface(dev); \
1858 struct usbtmc_device_data *data = usb_get_intfdata(intf); \
1859 \
1860 return sprintf(buf, "%d\n", data->capabilities.name); \
1861 } \
1862 static DEVICE_ATTR_RO(name)
1863
1864 capability_attribute(interface_capabilities);
1865 capability_attribute(device_capabilities);
1866 capability_attribute(usb488_interface_capabilities);
1867 capability_attribute(usb488_device_capabilities);
1868
1869 static struct attribute *usbtmc_attrs[] = {
1870 &dev_attr_interface_capabilities.attr,
1871 &dev_attr_device_capabilities.attr,
1872 &dev_attr_usb488_interface_capabilities.attr,
1873 &dev_attr_usb488_device_capabilities.attr,
1874 NULL,
1875 };
1876 ATTRIBUTE_GROUPS(usbtmc);
1877
1878 static int usbtmc_ioctl_indicator_pulse(struct usbtmc_device_data *data)
1879 {
1880 struct device *dev;
1881 u8 *buffer;
1882 int rv;
1883
1884 dev = &data->intf->dev;
1885
1886 buffer = kmalloc(2, GFP_KERNEL);
1887 if (!buffer)
1888 return -ENOMEM;
1889
1890 rv = usb_control_msg(data->usb_dev,
1891 usb_rcvctrlpipe(data->usb_dev, 0),
1892 USBTMC_REQUEST_INDICATOR_PULSE,
1893 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
1894 0, 0, buffer, 0x01, USB_CTRL_GET_TIMEOUT);
1895
1896 if (rv < 0) {
1897 dev_err(dev, "usb_control_msg returned %d\n", rv);
1898 goto exit;
1899 }
1900
1901 dev_dbg(dev, "INDICATOR_PULSE returned %x\n", buffer[0]);
1902
1903 if (buffer[0] != USBTMC_STATUS_SUCCESS) {
1904 dev_err(dev, "INDICATOR_PULSE returned %x\n", buffer[0]);
1905 rv = -EPERM;
1906 goto exit;
1907 }
1908 rv = 0;
1909
1910 exit:
1911 kfree(buffer);
1912 return rv;
1913 }
1914
1915 static int usbtmc_ioctl_request(struct usbtmc_device_data *data,
1916 void __user *arg)
1917 {
1918 struct device *dev = &data->intf->dev;
1919 struct usbtmc_ctrlrequest request;
1920 u8 *buffer = NULL;
1921 int rv;
1922 unsigned int is_in, pipe;
1923 unsigned long res;
1924
1925 res = copy_from_user(&request, arg, sizeof(struct usbtmc_ctrlrequest));
1926 if (res)
1927 return -EFAULT;
1928
1929 if (request.req.wLength > USBTMC_BUFSIZE)
1930 return -EMSGSIZE;
1931
1932 is_in = request.req.bRequestType & USB_DIR_IN;
1933
1934 if (request.req.wLength) {
1935 buffer = kmalloc(request.req.wLength, GFP_KERNEL);
1936 if (!buffer)
1937 return -ENOMEM;
1938
1939 if (!is_in) {
1940
1941 res = copy_from_user(buffer, request.data,
1942 request.req.wLength);
1943 if (res) {
1944 rv = -EFAULT;
1945 goto exit;
1946 }
1947 }
1948 }
1949
1950 if (is_in)
1951 pipe = usb_rcvctrlpipe(data->usb_dev, 0);
1952 else
1953 pipe = usb_sndctrlpipe(data->usb_dev, 0);
1954 rv = usb_control_msg(data->usb_dev,
1955 pipe,
1956 request.req.bRequest,
1957 request.req.bRequestType,
1958 request.req.wValue,
1959 request.req.wIndex,
1960 buffer, request.req.wLength, USB_CTRL_GET_TIMEOUT);
1961
1962 if (rv < 0) {
1963 dev_err(dev, "%s failed %d\n", __func__, rv);
1964 goto exit;
1965 }
1966
1967 if (rv && is_in) {
1968
1969 res = copy_to_user(request.data, buffer, rv);
1970 if (res)
1971 rv = -EFAULT;
1972 }
1973
1974 exit:
1975 kfree(buffer);
1976 return rv;
1977 }
1978
1979
1980
1981
1982 static int usbtmc_ioctl_get_timeout(struct usbtmc_file_data *file_data,
1983 void __user *arg)
1984 {
1985 u32 timeout;
1986
1987 timeout = file_data->timeout;
1988
1989 return put_user(timeout, (__u32 __user *)arg);
1990 }
1991
1992
1993
1994
1995 static int usbtmc_ioctl_set_timeout(struct usbtmc_file_data *file_data,
1996 void __user *arg)
1997 {
1998 u32 timeout;
1999
2000 if (get_user(timeout, (__u32 __user *)arg))
2001 return -EFAULT;
2002
2003
2004
2005
2006 if (timeout < USBTMC_MIN_TIMEOUT)
2007 return -EINVAL;
2008
2009 file_data->timeout = timeout;
2010
2011 return 0;
2012 }
2013
2014
2015
2016
2017 static int usbtmc_ioctl_eom_enable(struct usbtmc_file_data *file_data,
2018 void __user *arg)
2019 {
2020 u8 eom_enable;
2021
2022 if (copy_from_user(&eom_enable, arg, sizeof(eom_enable)))
2023 return -EFAULT;
2024
2025 if (eom_enable > 1)
2026 return -EINVAL;
2027
2028 file_data->eom_val = eom_enable;
2029
2030 return 0;
2031 }
2032
2033
2034
2035
2036 static int usbtmc_ioctl_config_termc(struct usbtmc_file_data *file_data,
2037 void __user *arg)
2038 {
2039 struct usbtmc_termchar termc;
2040
2041 if (copy_from_user(&termc, arg, sizeof(termc)))
2042 return -EFAULT;
2043
2044 if ((termc.term_char_enabled > 1) ||
2045 (termc.term_char_enabled &&
2046 !(file_data->data->capabilities.device_capabilities & 1)))
2047 return -EINVAL;
2048
2049 file_data->term_char = termc.term_char;
2050 file_data->term_char_enabled = termc.term_char_enabled;
2051
2052 return 0;
2053 }
2054
2055 static long usbtmc_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
2056 {
2057 struct usbtmc_file_data *file_data;
2058 struct usbtmc_device_data *data;
2059 int retval = -EBADRQC;
2060 __u8 tmp_byte;
2061
2062 file_data = file->private_data;
2063 data = file_data->data;
2064
2065 mutex_lock(&data->io_mutex);
2066 if (data->zombie) {
2067 retval = -ENODEV;
2068 goto skip_io_on_zombie;
2069 }
2070
2071 switch (cmd) {
2072 case USBTMC_IOCTL_CLEAR_OUT_HALT:
2073 retval = usbtmc_ioctl_clear_out_halt(data);
2074 break;
2075
2076 case USBTMC_IOCTL_CLEAR_IN_HALT:
2077 retval = usbtmc_ioctl_clear_in_halt(data);
2078 break;
2079
2080 case USBTMC_IOCTL_INDICATOR_PULSE:
2081 retval = usbtmc_ioctl_indicator_pulse(data);
2082 break;
2083
2084 case USBTMC_IOCTL_CLEAR:
2085 retval = usbtmc_ioctl_clear(data);
2086 break;
2087
2088 case USBTMC_IOCTL_ABORT_BULK_OUT:
2089 retval = usbtmc_ioctl_abort_bulk_out(data);
2090 break;
2091
2092 case USBTMC_IOCTL_ABORT_BULK_IN:
2093 retval = usbtmc_ioctl_abort_bulk_in(data);
2094 break;
2095
2096 case USBTMC_IOCTL_CTRL_REQUEST:
2097 retval = usbtmc_ioctl_request(data, (void __user *)arg);
2098 break;
2099
2100 case USBTMC_IOCTL_GET_TIMEOUT:
2101 retval = usbtmc_ioctl_get_timeout(file_data,
2102 (void __user *)arg);
2103 break;
2104
2105 case USBTMC_IOCTL_SET_TIMEOUT:
2106 retval = usbtmc_ioctl_set_timeout(file_data,
2107 (void __user *)arg);
2108 break;
2109
2110 case USBTMC_IOCTL_EOM_ENABLE:
2111 retval = usbtmc_ioctl_eom_enable(file_data,
2112 (void __user *)arg);
2113 break;
2114
2115 case USBTMC_IOCTL_CONFIG_TERMCHAR:
2116 retval = usbtmc_ioctl_config_termc(file_data,
2117 (void __user *)arg);
2118 break;
2119
2120 case USBTMC_IOCTL_WRITE:
2121 retval = usbtmc_ioctl_generic_write(file_data,
2122 (void __user *)arg);
2123 break;
2124
2125 case USBTMC_IOCTL_READ:
2126 retval = usbtmc_ioctl_generic_read(file_data,
2127 (void __user *)arg);
2128 break;
2129
2130 case USBTMC_IOCTL_WRITE_RESULT:
2131 retval = usbtmc_ioctl_write_result(file_data,
2132 (void __user *)arg);
2133 break;
2134
2135 case USBTMC_IOCTL_API_VERSION:
2136 retval = put_user(USBTMC_API_VERSION,
2137 (__u32 __user *)arg);
2138 break;
2139
2140 case USBTMC488_IOCTL_GET_CAPS:
2141 retval = put_user(data->usb488_caps,
2142 (unsigned char __user *)arg);
2143 break;
2144
2145 case USBTMC488_IOCTL_READ_STB:
2146 retval = usbtmc488_ioctl_read_stb(file_data,
2147 (void __user *)arg);
2148 break;
2149
2150 case USBTMC488_IOCTL_REN_CONTROL:
2151 retval = usbtmc488_ioctl_simple(data, (void __user *)arg,
2152 USBTMC488_REQUEST_REN_CONTROL);
2153 break;
2154
2155 case USBTMC488_IOCTL_GOTO_LOCAL:
2156 retval = usbtmc488_ioctl_simple(data, (void __user *)arg,
2157 USBTMC488_REQUEST_GOTO_LOCAL);
2158 break;
2159
2160 case USBTMC488_IOCTL_LOCAL_LOCKOUT:
2161 retval = usbtmc488_ioctl_simple(data, (void __user *)arg,
2162 USBTMC488_REQUEST_LOCAL_LOCKOUT);
2163 break;
2164
2165 case USBTMC488_IOCTL_TRIGGER:
2166 retval = usbtmc488_ioctl_trigger(file_data);
2167 break;
2168
2169 case USBTMC488_IOCTL_WAIT_SRQ:
2170 retval = usbtmc488_ioctl_wait_srq(file_data,
2171 (__u32 __user *)arg);
2172 break;
2173
2174 case USBTMC_IOCTL_MSG_IN_ATTR:
2175 retval = put_user(file_data->bmTransferAttributes,
2176 (__u8 __user *)arg);
2177 break;
2178
2179 case USBTMC_IOCTL_AUTO_ABORT:
2180 retval = get_user(tmp_byte, (unsigned char __user *)arg);
2181 if (retval == 0)
2182 file_data->auto_abort = !!tmp_byte;
2183 break;
2184
2185 case USBTMC_IOCTL_GET_STB:
2186 retval = usbtmc_get_stb(file_data, &tmp_byte);
2187 if (retval > 0)
2188 retval = put_user(tmp_byte, (__u8 __user *)arg);
2189 break;
2190
2191 case USBTMC_IOCTL_GET_SRQ_STB:
2192 retval = usbtmc_ioctl_get_srq_stb(file_data,
2193 (void __user *)arg);
2194 break;
2195
2196 case USBTMC_IOCTL_CANCEL_IO:
2197 retval = usbtmc_ioctl_cancel_io(file_data);
2198 break;
2199
2200 case USBTMC_IOCTL_CLEANUP_IO:
2201 retval = usbtmc_ioctl_cleanup_io(file_data);
2202 break;
2203 }
2204
2205 skip_io_on_zombie:
2206 mutex_unlock(&data->io_mutex);
2207 return retval;
2208 }
2209
2210 static int usbtmc_fasync(int fd, struct file *file, int on)
2211 {
2212 struct usbtmc_file_data *file_data = file->private_data;
2213
2214 return fasync_helper(fd, file, on, &file_data->data->fasync);
2215 }
2216
2217 static __poll_t usbtmc_poll(struct file *file, poll_table *wait)
2218 {
2219 struct usbtmc_file_data *file_data = file->private_data;
2220 struct usbtmc_device_data *data = file_data->data;
2221 __poll_t mask;
2222
2223 mutex_lock(&data->io_mutex);
2224
2225 if (data->zombie) {
2226 mask = EPOLLHUP | EPOLLERR;
2227 goto no_poll;
2228 }
2229
2230 poll_wait(file, &data->waitq, wait);
2231
2232
2233
2234
2235 mask = 0;
2236 if (atomic_read(&file_data->srq_asserted))
2237 mask |= EPOLLPRI;
2238
2239
2240
2241
2242
2243 if (usb_anchor_empty(&file_data->submitted))
2244 mask |= (EPOLLOUT | EPOLLWRNORM);
2245 if (!usb_anchor_empty(&file_data->in_anchor))
2246 mask |= (EPOLLIN | EPOLLRDNORM);
2247
2248 spin_lock_irq(&file_data->err_lock);
2249 if (file_data->in_status || file_data->out_status)
2250 mask |= EPOLLERR;
2251 spin_unlock_irq(&file_data->err_lock);
2252
2253 dev_dbg(&data->intf->dev, "poll mask = %x\n", mask);
2254
2255 no_poll:
2256 mutex_unlock(&data->io_mutex);
2257 return mask;
2258 }
2259
2260 static const struct file_operations fops = {
2261 .owner = THIS_MODULE,
2262 .read = usbtmc_read,
2263 .write = usbtmc_write,
2264 .open = usbtmc_open,
2265 .release = usbtmc_release,
2266 .flush = usbtmc_flush,
2267 .unlocked_ioctl = usbtmc_ioctl,
2268 .compat_ioctl = compat_ptr_ioctl,
2269 .fasync = usbtmc_fasync,
2270 .poll = usbtmc_poll,
2271 .llseek = default_llseek,
2272 };
2273
2274 static struct usb_class_driver usbtmc_class = {
2275 .name = "usbtmc%d",
2276 .fops = &fops,
2277 .minor_base = USBTMC_MINOR_BASE,
2278 };
2279
2280 static void usbtmc_interrupt(struct urb *urb)
2281 {
2282 struct usbtmc_device_data *data = urb->context;
2283 struct device *dev = &data->intf->dev;
2284 int status = urb->status;
2285 int rv;
2286
2287 dev_dbg(&data->intf->dev, "int status: %d len %d\n",
2288 status, urb->actual_length);
2289
2290 switch (status) {
2291 case 0:
2292
2293 if (data->iin_buffer[0] > 0x81) {
2294 data->bNotify1 = data->iin_buffer[0];
2295 data->bNotify2 = data->iin_buffer[1];
2296 atomic_set(&data->iin_data_valid, 1);
2297 wake_up_interruptible(&data->waitq);
2298 goto exit;
2299 }
2300
2301 if (data->iin_buffer[0] == 0x81) {
2302 unsigned long flags;
2303 struct list_head *elem;
2304
2305 if (data->fasync)
2306 kill_fasync(&data->fasync,
2307 SIGIO, POLL_PRI);
2308
2309 spin_lock_irqsave(&data->dev_lock, flags);
2310 list_for_each(elem, &data->file_list) {
2311 struct usbtmc_file_data *file_data;
2312
2313 file_data = list_entry(elem,
2314 struct usbtmc_file_data,
2315 file_elem);
2316 file_data->srq_byte = data->iin_buffer[1];
2317 atomic_set(&file_data->srq_asserted, 1);
2318 }
2319 spin_unlock_irqrestore(&data->dev_lock, flags);
2320
2321 dev_dbg(dev, "srq received bTag %x stb %x\n",
2322 (unsigned int)data->iin_buffer[0],
2323 (unsigned int)data->iin_buffer[1]);
2324 wake_up_interruptible_all(&data->waitq);
2325 goto exit;
2326 }
2327 dev_warn(dev, "invalid notification: %x\n",
2328 data->iin_buffer[0]);
2329 break;
2330 case -EOVERFLOW:
2331 dev_err(dev, "overflow with length %d, actual length is %d\n",
2332 data->iin_wMaxPacketSize, urb->actual_length);
2333 fallthrough;
2334 default:
2335
2336 dev_dbg(dev, "urb terminated, status: %d\n", status);
2337 return;
2338 }
2339 exit:
2340 rv = usb_submit_urb(urb, GFP_ATOMIC);
2341 if (rv)
2342 dev_err(dev, "usb_submit_urb failed: %d\n", rv);
2343 }
2344
2345 static void usbtmc_free_int(struct usbtmc_device_data *data)
2346 {
2347 if (!data->iin_ep_present || !data->iin_urb)
2348 return;
2349 usb_kill_urb(data->iin_urb);
2350 kfree(data->iin_buffer);
2351 data->iin_buffer = NULL;
2352 usb_free_urb(data->iin_urb);
2353 data->iin_urb = NULL;
2354 kref_put(&data->kref, usbtmc_delete);
2355 }
2356
2357 static int usbtmc_probe(struct usb_interface *intf,
2358 const struct usb_device_id *id)
2359 {
2360 struct usbtmc_device_data *data;
2361 struct usb_host_interface *iface_desc;
2362 struct usb_endpoint_descriptor *bulk_in, *bulk_out, *int_in;
2363 int retcode;
2364
2365 dev_dbg(&intf->dev, "%s called\n", __func__);
2366
2367 data = kzalloc(sizeof(*data), GFP_KERNEL);
2368 if (!data)
2369 return -ENOMEM;
2370
2371 data->intf = intf;
2372 data->id = id;
2373 data->usb_dev = usb_get_dev(interface_to_usbdev(intf));
2374 usb_set_intfdata(intf, data);
2375 kref_init(&data->kref);
2376 mutex_init(&data->io_mutex);
2377 init_waitqueue_head(&data->waitq);
2378 atomic_set(&data->iin_data_valid, 0);
2379 INIT_LIST_HEAD(&data->file_list);
2380 spin_lock_init(&data->dev_lock);
2381
2382 data->zombie = 0;
2383
2384
2385 data->bTag = 1;
2386
2387 data->iin_bTag = 2;
2388
2389
2390 iface_desc = data->intf->cur_altsetting;
2391 data->ifnum = iface_desc->desc.bInterfaceNumber;
2392
2393
2394 retcode = usb_find_common_endpoints(iface_desc,
2395 &bulk_in, &bulk_out, NULL, NULL);
2396 if (retcode) {
2397 dev_err(&intf->dev, "bulk endpoints not found\n");
2398 goto err_put;
2399 }
2400
2401 retcode = -EINVAL;
2402 data->bulk_in = bulk_in->bEndpointAddress;
2403 data->wMaxPacketSize = usb_endpoint_maxp(bulk_in);
2404 if (!data->wMaxPacketSize)
2405 goto err_put;
2406 dev_dbg(&intf->dev, "Found bulk in endpoint at %u\n", data->bulk_in);
2407
2408 data->bulk_out = bulk_out->bEndpointAddress;
2409 dev_dbg(&intf->dev, "Found Bulk out endpoint at %u\n", data->bulk_out);
2410
2411
2412 retcode = usb_find_int_in_endpoint(iface_desc, &int_in);
2413 if (!retcode) {
2414 data->iin_ep_present = 1;
2415 data->iin_ep = int_in->bEndpointAddress;
2416 data->iin_wMaxPacketSize = usb_endpoint_maxp(int_in);
2417 data->iin_interval = int_in->bInterval;
2418 dev_dbg(&intf->dev, "Found Int in endpoint at %u\n",
2419 data->iin_ep);
2420 }
2421
2422 retcode = get_capabilities(data);
2423 if (retcode)
2424 dev_err(&intf->dev, "can't read capabilities\n");
2425
2426 if (data->iin_ep_present) {
2427
2428 data->iin_urb = usb_alloc_urb(0, GFP_KERNEL);
2429 if (!data->iin_urb) {
2430 retcode = -ENOMEM;
2431 goto error_register;
2432 }
2433
2434
2435 kref_get(&data->kref);
2436
2437
2438 data->iin_buffer = kmalloc(data->iin_wMaxPacketSize,
2439 GFP_KERNEL);
2440 if (!data->iin_buffer) {
2441 retcode = -ENOMEM;
2442 goto error_register;
2443 }
2444
2445
2446 usb_fill_int_urb(data->iin_urb, data->usb_dev,
2447 usb_rcvintpipe(data->usb_dev, data->iin_ep),
2448 data->iin_buffer, data->iin_wMaxPacketSize,
2449 usbtmc_interrupt,
2450 data, data->iin_interval);
2451
2452 retcode = usb_submit_urb(data->iin_urb, GFP_KERNEL);
2453 if (retcode) {
2454 dev_err(&intf->dev, "Failed to submit iin_urb\n");
2455 goto error_register;
2456 }
2457 }
2458
2459 retcode = usb_register_dev(intf, &usbtmc_class);
2460 if (retcode) {
2461 dev_err(&intf->dev, "Not able to get a minor (base %u, slice default): %d\n",
2462 USBTMC_MINOR_BASE,
2463 retcode);
2464 goto error_register;
2465 }
2466 dev_dbg(&intf->dev, "Using minor number %d\n", intf->minor);
2467
2468 return 0;
2469
2470 error_register:
2471 usbtmc_free_int(data);
2472 err_put:
2473 kref_put(&data->kref, usbtmc_delete);
2474 return retcode;
2475 }
2476
2477 static void usbtmc_disconnect(struct usb_interface *intf)
2478 {
2479 struct usbtmc_device_data *data = usb_get_intfdata(intf);
2480 struct list_head *elem;
2481
2482 usb_deregister_dev(intf, &usbtmc_class);
2483 mutex_lock(&data->io_mutex);
2484 data->zombie = 1;
2485 wake_up_interruptible_all(&data->waitq);
2486 list_for_each(elem, &data->file_list) {
2487 struct usbtmc_file_data *file_data;
2488
2489 file_data = list_entry(elem,
2490 struct usbtmc_file_data,
2491 file_elem);
2492 usb_kill_anchored_urbs(&file_data->submitted);
2493 usb_scuttle_anchored_urbs(&file_data->in_anchor);
2494 }
2495 mutex_unlock(&data->io_mutex);
2496 usbtmc_free_int(data);
2497 kref_put(&data->kref, usbtmc_delete);
2498 }
2499
2500 static void usbtmc_draw_down(struct usbtmc_file_data *file_data)
2501 {
2502 int time;
2503
2504 time = usb_wait_anchor_empty_timeout(&file_data->submitted, 1000);
2505 if (!time)
2506 usb_kill_anchored_urbs(&file_data->submitted);
2507 usb_scuttle_anchored_urbs(&file_data->in_anchor);
2508 }
2509
2510 static int usbtmc_suspend(struct usb_interface *intf, pm_message_t message)
2511 {
2512 struct usbtmc_device_data *data = usb_get_intfdata(intf);
2513 struct list_head *elem;
2514
2515 if (!data)
2516 return 0;
2517
2518 mutex_lock(&data->io_mutex);
2519 list_for_each(elem, &data->file_list) {
2520 struct usbtmc_file_data *file_data;
2521
2522 file_data = list_entry(elem,
2523 struct usbtmc_file_data,
2524 file_elem);
2525 usbtmc_draw_down(file_data);
2526 }
2527
2528 if (data->iin_ep_present && data->iin_urb)
2529 usb_kill_urb(data->iin_urb);
2530
2531 mutex_unlock(&data->io_mutex);
2532 return 0;
2533 }
2534
2535 static int usbtmc_resume(struct usb_interface *intf)
2536 {
2537 struct usbtmc_device_data *data = usb_get_intfdata(intf);
2538 int retcode = 0;
2539
2540 if (data->iin_ep_present && data->iin_urb)
2541 retcode = usb_submit_urb(data->iin_urb, GFP_KERNEL);
2542 if (retcode)
2543 dev_err(&intf->dev, "Failed to submit iin_urb\n");
2544
2545 return retcode;
2546 }
2547
2548 static int usbtmc_pre_reset(struct usb_interface *intf)
2549 {
2550 struct usbtmc_device_data *data = usb_get_intfdata(intf);
2551 struct list_head *elem;
2552
2553 if (!data)
2554 return 0;
2555
2556 mutex_lock(&data->io_mutex);
2557
2558 list_for_each(elem, &data->file_list) {
2559 struct usbtmc_file_data *file_data;
2560
2561 file_data = list_entry(elem,
2562 struct usbtmc_file_data,
2563 file_elem);
2564 usbtmc_ioctl_cancel_io(file_data);
2565 }
2566
2567 return 0;
2568 }
2569
2570 static int usbtmc_post_reset(struct usb_interface *intf)
2571 {
2572 struct usbtmc_device_data *data = usb_get_intfdata(intf);
2573
2574 mutex_unlock(&data->io_mutex);
2575
2576 return 0;
2577 }
2578
2579 static struct usb_driver usbtmc_driver = {
2580 .name = "usbtmc",
2581 .id_table = usbtmc_devices,
2582 .probe = usbtmc_probe,
2583 .disconnect = usbtmc_disconnect,
2584 .suspend = usbtmc_suspend,
2585 .resume = usbtmc_resume,
2586 .pre_reset = usbtmc_pre_reset,
2587 .post_reset = usbtmc_post_reset,
2588 .dev_groups = usbtmc_groups,
2589 };
2590
2591 module_usb_driver(usbtmc_driver);
2592
2593 MODULE_LICENSE("GPL");