1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * drivers/usb/class/usbtmc.c - USB Test & Measurement class driver 4 * 5 * Copyright (C) 2007 Stefan Kopp, Gechingen, Germany 6 * Copyright (C) 2008 Novell, Inc. 7 * Copyright (C) 2008 Greg Kroah-Hartman <gregkh@suse.de> 8 * Copyright (C) 2018 IVI Foundation, Inc. 9 */ 10 11 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 12 13 #include <linux/module.h> 14 #include <linux/kernel.h> 15 #include <linux/fs.h> 16 #include <linux/uaccess.h> 17 #include <linux/kref.h> 18 #include <linux/slab.h> 19 #include <linux/poll.h> 20 #include <linux/mutex.h> 21 #include <linux/usb.h> 22 #include <linux/compat.h> 23 #include <linux/usb/tmc.h> 24 25 /* Increment API VERSION when changing tmc.h with new flags or ioctls 26 * or when changing a significant behavior of the driver. 27 */ 28 #define USBTMC_API_VERSION (3) 29 30 #define USBTMC_HEADER_SIZE 12 31 #define USBTMC_MINOR_BASE 176 32 33 /* Minimum USB timeout (in milliseconds) */ 34 #define USBTMC_MIN_TIMEOUT 100 35 /* Default USB timeout (in milliseconds) */ 36 #define USBTMC_TIMEOUT 5000 37 38 /* Max number of urbs used in write transfers */ 39 #define MAX_URBS_IN_FLIGHT 16 40 /* I/O buffer size used in generic read/write functions */ 41 #define USBTMC_BUFSIZE (4096) 42 43 /* 44 * Maximum number of read cycles to empty bulk in endpoint during CLEAR and 45 * ABORT_BULK_IN requests. Ends the loop if (for whatever reason) a short 46 * packet is never read. 47 */ 48 #define USBTMC_MAX_READS_TO_CLEAR_BULK_IN 100 49 50 static const struct usb_device_id usbtmc_devices[] = { 51 { USB_INTERFACE_INFO(USB_CLASS_APP_SPEC, 3, 0), }, 52 { USB_INTERFACE_INFO(USB_CLASS_APP_SPEC, 3, 1), }, 53 { 0, } /* terminating entry */ 54 }; 55 MODULE_DEVICE_TABLE(usb, usbtmc_devices); 56 57 /* 58 * This structure is the capabilities for the device 59 * See section 4.2.1.8 of the USBTMC specification, 60 * and section 4.2.2 of the USBTMC usb488 subclass 61 * specification for details. 62 */ 63 struct usbtmc_dev_capabilities { 64 __u8 interface_capabilities; 65 __u8 device_capabilities; 66 __u8 usb488_interface_capabilities; 67 __u8 usb488_device_capabilities; 68 }; 69 70 /* This structure holds private data for each USBTMC device. One copy is 71 * allocated for each USBTMC device in the driver's probe function. 72 */ 73 struct usbtmc_device_data { 74 const struct usb_device_id *id; 75 struct usb_device *usb_dev; 76 struct usb_interface *intf; 77 struct list_head file_list; 78 79 unsigned int bulk_in; 80 unsigned int bulk_out; 81 82 u8 bTag; 83 u8 bTag_last_write; /* needed for abort */ 84 u8 bTag_last_read; /* needed for abort */ 85 86 /* packet size of IN bulk */ 87 u16 wMaxPacketSize; 88 89 /* data for interrupt in endpoint handling */ 90 u8 bNotify1; 91 u8 bNotify2; 92 u16 ifnum; 93 u8 iin_bTag; 94 u8 *iin_buffer; 95 atomic_t iin_data_valid; 96 unsigned int iin_ep; 97 int iin_ep_present; 98 int iin_interval; 99 struct urb *iin_urb; 100 u16 iin_wMaxPacketSize; 101 102 /* coalesced usb488_caps from usbtmc_dev_capabilities */ 103 __u8 usb488_caps; 104 105 bool zombie; /* fd of disconnected device */ 106 107 struct usbtmc_dev_capabilities capabilities; 108 struct kref kref; 109 struct mutex io_mutex; /* only one i/o function running at a time */ 110 wait_queue_head_t waitq; 111 struct fasync_struct *fasync; 112 spinlock_t dev_lock; /* lock for file_list */ 113 }; 114 #define to_usbtmc_data(d) container_of(d, struct usbtmc_device_data, kref) 115 116 /* 117 * This structure holds private data for each USBTMC file handle. 118 */ 119 struct usbtmc_file_data { 120 struct usbtmc_device_data *data; 121 struct list_head file_elem; 122 123 u32 timeout; 124 u8 srq_byte; 125 atomic_t srq_asserted; 126 atomic_t closing; 127 u8 bmTransferAttributes; /* member of DEV_DEP_MSG_IN */ 128 129 u8 eom_val; 130 u8 term_char; 131 bool term_char_enabled; 132 bool auto_abort; 133 134 spinlock_t err_lock; /* lock for errors */ 135 136 struct usb_anchor submitted; 137 138 /* data for generic_write */ 139 struct semaphore limit_write_sem; 140 u32 out_transfer_size; 141 int out_status; 142 143 /* data for generic_read */ 144 u32 in_transfer_size; 145 int in_status; 146 int in_urbs_used; 147 struct usb_anchor in_anchor; 148 wait_queue_head_t wait_bulk_in; 149 }; 150 151 /* Forward declarations */ 152 static struct usb_driver usbtmc_driver; 153 static void usbtmc_draw_down(struct usbtmc_file_data *file_data); 154 155 static void usbtmc_delete(struct kref *kref) 156 { 157 struct usbtmc_device_data *data = to_usbtmc_data(kref); 158 159 usb_put_dev(data->usb_dev); 160 kfree(data); 161 } 162 163 static int usbtmc_open(struct inode *inode, struct file *filp) 164 { 165 struct usb_interface *intf; 166 struct usbtmc_device_data *data; 167 struct usbtmc_file_data *file_data; 168 169 intf = usb_find_interface(&usbtmc_driver, iminor(inode)); 170 if (!intf) { 171 pr_err("can not find device for minor %d", iminor(inode)); 172 return -ENODEV; 173 } 174 175 file_data = kzalloc(sizeof(*file_data), GFP_KERNEL); 176 if (!file_data) 177 return -ENOMEM; 178 179 spin_lock_init(&file_data->err_lock); 180 sema_init(&file_data->limit_write_sem, MAX_URBS_IN_FLIGHT); 181 init_usb_anchor(&file_data->submitted); 182 init_usb_anchor(&file_data->in_anchor); 183 init_waitqueue_head(&file_data->wait_bulk_in); 184 185 data = usb_get_intfdata(intf); 186 /* Protect reference to data from file structure until release */ 187 kref_get(&data->kref); 188 189 mutex_lock(&data->io_mutex); 190 file_data->data = data; 191 192 atomic_set(&file_data->closing, 0); 193 194 file_data->timeout = USBTMC_TIMEOUT; 195 file_data->term_char = '\n'; 196 file_data->term_char_enabled = 0; 197 file_data->auto_abort = 0; 198 file_data->eom_val = 1; 199 200 INIT_LIST_HEAD(&file_data->file_elem); 201 spin_lock_irq(&data->dev_lock); 202 list_add_tail(&file_data->file_elem, &data->file_list); 203 spin_unlock_irq(&data->dev_lock); 204 mutex_unlock(&data->io_mutex); 205 206 /* Store pointer in file structure's private data field */ 207 filp->private_data = file_data; 208 209 return 0; 210 } 211 212 /* 213 * usbtmc_flush - called before file handle is closed 214 */ 215 static int usbtmc_flush(struct file *file, fl_owner_t id) 216 { 217 struct usbtmc_file_data *file_data; 218 struct usbtmc_device_data *data; 219 220 file_data = file->private_data; 221 if (file_data == NULL) 222 return -ENODEV; 223 224 atomic_set(&file_data->closing, 1); 225 data = file_data->data; 226 227 /* wait for io to stop */ 228 mutex_lock(&data->io_mutex); 229 230 usbtmc_draw_down(file_data); 231 232 spin_lock_irq(&file_data->err_lock); 233 file_data->in_status = 0; 234 file_data->in_transfer_size = 0; 235 file_data->in_urbs_used = 0; 236 file_data->out_status = 0; 237 file_data->out_transfer_size = 0; 238 spin_unlock_irq(&file_data->err_lock); 239 240 wake_up_interruptible_all(&data->waitq); 241 mutex_unlock(&data->io_mutex); 242 243 return 0; 244 } 245 246 static int usbtmc_release(struct inode *inode, struct file *file) 247 { 248 struct usbtmc_file_data *file_data = file->private_data; 249 250 /* prevent IO _AND_ usbtmc_interrupt */ 251 mutex_lock(&file_data->data->io_mutex); 252 spin_lock_irq(&file_data->data->dev_lock); 253 254 list_del(&file_data->file_elem); 255 256 spin_unlock_irq(&file_data->data->dev_lock); 257 mutex_unlock(&file_data->data->io_mutex); 258 259 kref_put(&file_data->data->kref, usbtmc_delete); 260 file_data->data = NULL; 261 kfree(file_data); 262 return 0; 263 } 264 265 static int usbtmc_ioctl_abort_bulk_in_tag(struct usbtmc_device_data *data, 266 u8 tag) 267 { 268 u8 *buffer; 269 struct device *dev; 270 int rv; 271 int n; 272 int actual; 273 274 dev = &data->intf->dev; 275 buffer = kmalloc(USBTMC_BUFSIZE, GFP_KERNEL); 276 if (!buffer) 277 return -ENOMEM; 278 279 rv = usb_control_msg(data->usb_dev, 280 usb_rcvctrlpipe(data->usb_dev, 0), 281 USBTMC_REQUEST_INITIATE_ABORT_BULK_IN, 282 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_ENDPOINT, 283 tag, data->bulk_in, 284 buffer, 2, USB_CTRL_GET_TIMEOUT); 285 286 if (rv < 0) { 287 dev_err(dev, "usb_control_msg returned %d\n", rv); 288 goto exit; 289 } 290 291 dev_dbg(dev, "INITIATE_ABORT_BULK_IN returned %x with tag %02x\n", 292 buffer[0], buffer[1]); 293 294 if (buffer[0] == USBTMC_STATUS_FAILED) { 295 /* No transfer in progress and the Bulk-OUT FIFO is empty. */ 296 rv = 0; 297 goto exit; 298 } 299 300 if (buffer[0] == USBTMC_STATUS_TRANSFER_NOT_IN_PROGRESS) { 301 /* The device returns this status if either: 302 * - There is a transfer in progress, but the specified bTag 303 * does not match. 304 * - There is no transfer in progress, but the Bulk-OUT FIFO 305 * is not empty. 306 */ 307 rv = -ENOMSG; 308 goto exit; 309 } 310 311 if (buffer[0] != USBTMC_STATUS_SUCCESS) { 312 dev_err(dev, "INITIATE_ABORT_BULK_IN returned %x\n", 313 buffer[0]); 314 rv = -EPERM; 315 goto exit; 316 } 317 318 n = 0; 319 320 usbtmc_abort_bulk_in_status: 321 dev_dbg(dev, "Reading from bulk in EP\n"); 322 323 /* Data must be present. So use low timeout 300 ms */ 324 actual = 0; 325 rv = usb_bulk_msg(data->usb_dev, 326 usb_rcvbulkpipe(data->usb_dev, 327 data->bulk_in), 328 buffer, USBTMC_BUFSIZE, 329 &actual, 300); 330 331 print_hex_dump_debug("usbtmc ", DUMP_PREFIX_NONE, 16, 1, 332 buffer, actual, true); 333 334 n++; 335 336 if (rv < 0) { 337 dev_err(dev, "usb_bulk_msg returned %d\n", rv); 338 if (rv != -ETIMEDOUT) 339 goto exit; 340 } 341 342 if (actual == USBTMC_BUFSIZE) 343 goto usbtmc_abort_bulk_in_status; 344 345 if (n >= USBTMC_MAX_READS_TO_CLEAR_BULK_IN) { 346 dev_err(dev, "Couldn't clear device buffer within %d cycles\n", 347 USBTMC_MAX_READS_TO_CLEAR_BULK_IN); 348 rv = -EPERM; 349 goto exit; 350 } 351 352 rv = usb_control_msg(data->usb_dev, 353 usb_rcvctrlpipe(data->usb_dev, 0), 354 USBTMC_REQUEST_CHECK_ABORT_BULK_IN_STATUS, 355 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_ENDPOINT, 356 0, data->bulk_in, buffer, 0x08, 357 USB_CTRL_GET_TIMEOUT); 358 359 if (rv < 0) { 360 dev_err(dev, "usb_control_msg returned %d\n", rv); 361 goto exit; 362 } 363 364 dev_dbg(dev, "CHECK_ABORT_BULK_IN returned %x\n", buffer[0]); 365 366 if (buffer[0] == USBTMC_STATUS_SUCCESS) { 367 rv = 0; 368 goto exit; 369 } 370 371 if (buffer[0] != USBTMC_STATUS_PENDING) { 372 dev_err(dev, "CHECK_ABORT_BULK_IN returned %x\n", buffer[0]); 373 rv = -EPERM; 374 goto exit; 375 } 376 377 if ((buffer[1] & 1) > 0) { 378 /* The device has 1 or more queued packets the Host can read */ 379 goto usbtmc_abort_bulk_in_status; 380 } 381 382 /* The Host must send CHECK_ABORT_BULK_IN_STATUS at a later time. */ 383 rv = -EAGAIN; 384 exit: 385 kfree(buffer); 386 return rv; 387 } 388 389 static int usbtmc_ioctl_abort_bulk_in(struct usbtmc_device_data *data) 390 { 391 return usbtmc_ioctl_abort_bulk_in_tag(data, data->bTag_last_read); 392 } 393 394 static int usbtmc_ioctl_abort_bulk_out_tag(struct usbtmc_device_data *data, 395 u8 tag) 396 { 397 struct device *dev; 398 u8 *buffer; 399 int rv; 400 int n; 401 402 dev = &data->intf->dev; 403 404 buffer = kmalloc(8, GFP_KERNEL); 405 if (!buffer) 406 return -ENOMEM; 407 408 rv = usb_control_msg(data->usb_dev, 409 usb_rcvctrlpipe(data->usb_dev, 0), 410 USBTMC_REQUEST_INITIATE_ABORT_BULK_OUT, 411 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_ENDPOINT, 412 tag, data->bulk_out, 413 buffer, 2, USB_CTRL_GET_TIMEOUT); 414 415 if (rv < 0) { 416 dev_err(dev, "usb_control_msg returned %d\n", rv); 417 goto exit; 418 } 419 420 dev_dbg(dev, "INITIATE_ABORT_BULK_OUT returned %x\n", buffer[0]); 421 422 if (buffer[0] != USBTMC_STATUS_SUCCESS) { 423 dev_err(dev, "INITIATE_ABORT_BULK_OUT returned %x\n", 424 buffer[0]); 425 rv = -EPERM; 426 goto exit; 427 } 428 429 n = 0; 430 431 usbtmc_abort_bulk_out_check_status: 432 /* do not stress device with subsequent requests */ 433 msleep(50); 434 rv = usb_control_msg(data->usb_dev, 435 usb_rcvctrlpipe(data->usb_dev, 0), 436 USBTMC_REQUEST_CHECK_ABORT_BULK_OUT_STATUS, 437 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_ENDPOINT, 438 0, data->bulk_out, buffer, 0x08, 439 USB_CTRL_GET_TIMEOUT); 440 n++; 441 if (rv < 0) { 442 dev_err(dev, "usb_control_msg returned %d\n", rv); 443 goto exit; 444 } 445 446 dev_dbg(dev, "CHECK_ABORT_BULK_OUT returned %x\n", buffer[0]); 447 448 if (buffer[0] == USBTMC_STATUS_SUCCESS) 449 goto usbtmc_abort_bulk_out_clear_halt; 450 451 if ((buffer[0] == USBTMC_STATUS_PENDING) && 452 (n < USBTMC_MAX_READS_TO_CLEAR_BULK_IN)) 453 goto usbtmc_abort_bulk_out_check_status; 454 455 rv = -EPERM; 456 goto exit; 457 458 usbtmc_abort_bulk_out_clear_halt: 459 rv = usb_clear_halt(data->usb_dev, 460 usb_sndbulkpipe(data->usb_dev, data->bulk_out)); 461 462 if (rv < 0) { 463 dev_err(dev, "usb_control_msg returned %d\n", rv); 464 goto exit; 465 } 466 rv = 0; 467 468 exit: 469 kfree(buffer); 470 return rv; 471 } 472 473 static int usbtmc_ioctl_abort_bulk_out(struct usbtmc_device_data *data) 474 { 475 return usbtmc_ioctl_abort_bulk_out_tag(data, data->bTag_last_write); 476 } 477 478 static int usbtmc_get_stb(struct usbtmc_file_data *file_data, __u8 *stb) 479 { 480 struct usbtmc_device_data *data = file_data->data; 481 struct device *dev = &data->intf->dev; 482 u8 *buffer; 483 u8 tag; 484 int rv; 485 486 dev_dbg(dev, "Enter ioctl_read_stb iin_ep_present: %d\n", 487 data->iin_ep_present); 488 489 buffer = kmalloc(8, GFP_KERNEL); 490 if (!buffer) 491 return -ENOMEM; 492 493 atomic_set(&data->iin_data_valid, 0); 494 495 rv = usb_control_msg(data->usb_dev, 496 usb_rcvctrlpipe(data->usb_dev, 0), 497 USBTMC488_REQUEST_READ_STATUS_BYTE, 498 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE, 499 data->iin_bTag, 500 data->ifnum, 501 buffer, 0x03, USB_CTRL_GET_TIMEOUT); 502 if (rv < 0) { 503 dev_err(dev, "stb usb_control_msg returned %d\n", rv); 504 goto exit; 505 } 506 507 if (buffer[0] != USBTMC_STATUS_SUCCESS) { 508 dev_err(dev, "control status returned %x\n", buffer[0]); 509 rv = -EIO; 510 goto exit; 511 } 512 513 if (data->iin_ep_present) { 514 rv = wait_event_interruptible_timeout( 515 data->waitq, 516 atomic_read(&data->iin_data_valid) != 0, 517 file_data->timeout); 518 if (rv < 0) { 519 dev_dbg(dev, "wait interrupted %d\n", rv); 520 goto exit; 521 } 522 523 if (rv == 0) { 524 dev_dbg(dev, "wait timed out\n"); 525 rv = -ETIMEDOUT; 526 goto exit; 527 } 528 529 tag = data->bNotify1 & 0x7f; 530 if (tag != data->iin_bTag) { 531 dev_err(dev, "expected bTag %x got %x\n", 532 data->iin_bTag, tag); 533 } 534 535 *stb = data->bNotify2; 536 } else { 537 *stb = buffer[2]; 538 } 539 540 dev_dbg(dev, "stb:0x%02x received %d\n", (unsigned int)*stb, rv); 541 542 exit: 543 /* bump interrupt bTag */ 544 data->iin_bTag += 1; 545 if (data->iin_bTag > 127) 546 /* 1 is for SRQ see USBTMC-USB488 subclass spec section 4.3.1 */ 547 data->iin_bTag = 2; 548 549 kfree(buffer); 550 return rv; 551 } 552 553 static int usbtmc488_ioctl_read_stb(struct usbtmc_file_data *file_data, 554 void __user *arg) 555 { 556 int srq_asserted = 0; 557 __u8 stb; 558 int rv; 559 560 rv = usbtmc_get_stb(file_data, &stb); 561 562 if (rv > 0) { 563 srq_asserted = atomic_xchg(&file_data->srq_asserted, 564 srq_asserted); 565 if (srq_asserted) 566 stb |= 0x40; /* Set RQS bit */ 567 568 rv = put_user(stb, (__u8 __user *)arg); 569 } 570 return rv; 571 572 } 573 574 static int usbtmc_ioctl_get_srq_stb(struct usbtmc_file_data *file_data, 575 void __user *arg) 576 { 577 struct usbtmc_device_data *data = file_data->data; 578 struct device *dev = &data->intf->dev; 579 int srq_asserted = 0; 580 __u8 stb = 0; 581 int rv; 582 583 spin_lock_irq(&data->dev_lock); 584 srq_asserted = atomic_xchg(&file_data->srq_asserted, srq_asserted); 585 586 if (srq_asserted) { 587 stb = file_data->srq_byte; 588 spin_unlock_irq(&data->dev_lock); 589 rv = put_user(stb, (__u8 __user *)arg); 590 } else { 591 spin_unlock_irq(&data->dev_lock); 592 rv = -ENOMSG; 593 } 594 595 dev_dbg(dev, "stb:0x%02x with srq received %d\n", (unsigned int)stb, rv); 596 597 return rv; 598 } 599 600 static int usbtmc488_ioctl_wait_srq(struct usbtmc_file_data *file_data, 601 __u32 __user *arg) 602 { 603 struct usbtmc_device_data *data = file_data->data; 604 struct device *dev = &data->intf->dev; 605 int rv; 606 u32 timeout; 607 unsigned long expire; 608 609 if (!data->iin_ep_present) { 610 dev_dbg(dev, "no interrupt endpoint present\n"); 611 return -EFAULT; 612 } 613 614 if (get_user(timeout, arg)) 615 return -EFAULT; 616 617 expire = msecs_to_jiffies(timeout); 618 619 mutex_unlock(&data->io_mutex); 620 621 rv = wait_event_interruptible_timeout( 622 data->waitq, 623 atomic_read(&file_data->srq_asserted) != 0 || 624 atomic_read(&file_data->closing), 625 expire); 626 627 mutex_lock(&data->io_mutex); 628 629 /* Note! disconnect or close could be called in the meantime */ 630 if (atomic_read(&file_data->closing) || data->zombie) 631 rv = -ENODEV; 632 633 if (rv < 0) { 634 /* dev can be invalid now! */ 635 pr_debug("%s - wait interrupted %d\n", __func__, rv); 636 return rv; 637 } 638 639 if (rv == 0) { 640 dev_dbg(dev, "%s - wait timed out\n", __func__); 641 return -ETIMEDOUT; 642 } 643 644 dev_dbg(dev, "%s - srq asserted\n", __func__); 645 return 0; 646 } 647 648 static int usbtmc488_ioctl_simple(struct usbtmc_device_data *data, 649 void __user *arg, unsigned int cmd) 650 { 651 struct device *dev = &data->intf->dev; 652 __u8 val; 653 u8 *buffer; 654 u16 wValue; 655 int rv; 656 657 if (!(data->usb488_caps & USBTMC488_CAPABILITY_SIMPLE)) 658 return -EINVAL; 659 660 buffer = kmalloc(8, GFP_KERNEL); 661 if (!buffer) 662 return -ENOMEM; 663 664 if (cmd == USBTMC488_REQUEST_REN_CONTROL) { 665 rv = copy_from_user(&val, arg, sizeof(val)); 666 if (rv) { 667 rv = -EFAULT; 668 goto exit; 669 } 670 wValue = val ? 1 : 0; 671 } else { 672 wValue = 0; 673 } 674 675 rv = usb_control_msg(data->usb_dev, 676 usb_rcvctrlpipe(data->usb_dev, 0), 677 cmd, 678 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE, 679 wValue, 680 data->ifnum, 681 buffer, 0x01, USB_CTRL_GET_TIMEOUT); 682 if (rv < 0) { 683 dev_err(dev, "simple usb_control_msg failed %d\n", rv); 684 goto exit; 685 } else if (rv != 1) { 686 dev_warn(dev, "simple usb_control_msg returned %d\n", rv); 687 rv = -EIO; 688 goto exit; 689 } 690 691 if (buffer[0] != USBTMC_STATUS_SUCCESS) { 692 dev_err(dev, "simple control status returned %x\n", buffer[0]); 693 rv = -EIO; 694 goto exit; 695 } 696 rv = 0; 697 698 exit: 699 kfree(buffer); 700 return rv; 701 } 702 703 /* 704 * Sends a TRIGGER Bulk-OUT command message 705 * See the USBTMC-USB488 specification, Table 2. 706 * 707 * Also updates bTag_last_write. 708 */ 709 static int usbtmc488_ioctl_trigger(struct usbtmc_file_data *file_data) 710 { 711 struct usbtmc_device_data *data = file_data->data; 712 int retval; 713 u8 *buffer; 714 int actual; 715 716 buffer = kzalloc(USBTMC_HEADER_SIZE, GFP_KERNEL); 717 if (!buffer) 718 return -ENOMEM; 719 720 buffer[0] = 128; 721 buffer[1] = data->bTag; 722 buffer[2] = ~data->bTag; 723 724 retval = usb_bulk_msg(data->usb_dev, 725 usb_sndbulkpipe(data->usb_dev, 726 data->bulk_out), 727 buffer, USBTMC_HEADER_SIZE, 728 &actual, file_data->timeout); 729 730 /* Store bTag (in case we need to abort) */ 731 data->bTag_last_write = data->bTag; 732 733 /* Increment bTag -- and increment again if zero */ 734 data->bTag++; 735 if (!data->bTag) 736 data->bTag++; 737 738 kfree(buffer); 739 if (retval < 0) { 740 dev_err(&data->intf->dev, "%s returned %d\n", 741 __func__, retval); 742 return retval; 743 } 744 745 return 0; 746 } 747 748 static struct urb *usbtmc_create_urb(void) 749 { 750 const size_t bufsize = USBTMC_BUFSIZE; 751 u8 *dmabuf = NULL; 752 struct urb *urb = usb_alloc_urb(0, GFP_KERNEL); 753 754 if (!urb) 755 return NULL; 756 757 dmabuf = kzalloc(bufsize, GFP_KERNEL); 758 if (!dmabuf) { 759 usb_free_urb(urb); 760 return NULL; 761 } 762 763 urb->transfer_buffer = dmabuf; 764 urb->transfer_buffer_length = bufsize; 765 urb->transfer_flags |= URB_FREE_BUFFER; 766 return urb; 767 } 768 769 static void usbtmc_read_bulk_cb(struct urb *urb) 770 { 771 struct usbtmc_file_data *file_data = urb->context; 772 int status = urb->status; 773 unsigned long flags; 774 775 /* sync/async unlink faults aren't errors */ 776 if (status) { 777 if (!(/* status == -ENOENT || */ 778 status == -ECONNRESET || 779 status == -EREMOTEIO || /* Short packet */ 780 status == -ESHUTDOWN)) 781 dev_err(&file_data->data->intf->dev, 782 "%s - nonzero read bulk status received: %d\n", 783 __func__, status); 784 785 spin_lock_irqsave(&file_data->err_lock, flags); 786 if (!file_data->in_status) 787 file_data->in_status = status; 788 spin_unlock_irqrestore(&file_data->err_lock, flags); 789 } 790 791 spin_lock_irqsave(&file_data->err_lock, flags); 792 file_data->in_transfer_size += urb->actual_length; 793 dev_dbg(&file_data->data->intf->dev, 794 "%s - total size: %u current: %d status: %d\n", 795 __func__, file_data->in_transfer_size, 796 urb->actual_length, status); 797 spin_unlock_irqrestore(&file_data->err_lock, flags); 798 usb_anchor_urb(urb, &file_data->in_anchor); 799 800 wake_up_interruptible(&file_data->wait_bulk_in); 801 wake_up_interruptible(&file_data->data->waitq); 802 } 803 804 static inline bool usbtmc_do_transfer(struct usbtmc_file_data *file_data) 805 { 806 bool data_or_error; 807 808 spin_lock_irq(&file_data->err_lock); 809 data_or_error = !usb_anchor_empty(&file_data->in_anchor) 810 || file_data->in_status; 811 spin_unlock_irq(&file_data->err_lock); 812 dev_dbg(&file_data->data->intf->dev, "%s: returns %d\n", __func__, 813 data_or_error); 814 return data_or_error; 815 } 816 817 static ssize_t usbtmc_generic_read(struct usbtmc_file_data *file_data, 818 void __user *user_buffer, 819 u32 transfer_size, 820 u32 *transferred, 821 u32 flags) 822 { 823 struct usbtmc_device_data *data = file_data->data; 824 struct device *dev = &data->intf->dev; 825 u32 done = 0; 826 u32 remaining; 827 const u32 bufsize = USBTMC_BUFSIZE; 828 int retval = 0; 829 u32 max_transfer_size; 830 unsigned long expire; 831 int bufcount = 1; 832 int again = 0; 833 834 /* mutex already locked */ 835 836 *transferred = done; 837 838 max_transfer_size = transfer_size; 839 840 if (flags & USBTMC_FLAG_IGNORE_TRAILER) { 841 /* The device may send extra alignment bytes (up to 842 * wMaxPacketSize – 1) to avoid sending a zero-length 843 * packet 844 */ 845 remaining = transfer_size; 846 if ((max_transfer_size % data->wMaxPacketSize) == 0) 847 max_transfer_size += (data->wMaxPacketSize - 1); 848 } else { 849 /* round down to bufsize to avoid truncated data left */ 850 if (max_transfer_size > bufsize) { 851 max_transfer_size = 852 roundup(max_transfer_size + 1 - bufsize, 853 bufsize); 854 } 855 remaining = max_transfer_size; 856 } 857 858 spin_lock_irq(&file_data->err_lock); 859 860 if (file_data->in_status) { 861 /* return the very first error */ 862 retval = file_data->in_status; 863 spin_unlock_irq(&file_data->err_lock); 864 goto error; 865 } 866 867 if (flags & USBTMC_FLAG_ASYNC) { 868 if (usb_anchor_empty(&file_data->in_anchor)) 869 again = 1; 870 871 if (file_data->in_urbs_used == 0) { 872 file_data->in_transfer_size = 0; 873 file_data->in_status = 0; 874 } 875 } else { 876 file_data->in_transfer_size = 0; 877 file_data->in_status = 0; 878 } 879 880 if (max_transfer_size == 0) { 881 bufcount = 0; 882 } else { 883 bufcount = roundup(max_transfer_size, bufsize) / bufsize; 884 if (bufcount > file_data->in_urbs_used) 885 bufcount -= file_data->in_urbs_used; 886 else 887 bufcount = 0; 888 889 if (bufcount + file_data->in_urbs_used > MAX_URBS_IN_FLIGHT) { 890 bufcount = MAX_URBS_IN_FLIGHT - 891 file_data->in_urbs_used; 892 } 893 } 894 spin_unlock_irq(&file_data->err_lock); 895 896 dev_dbg(dev, "%s: requested=%u flags=0x%X size=%u bufs=%d used=%d\n", 897 __func__, transfer_size, flags, 898 max_transfer_size, bufcount, file_data->in_urbs_used); 899 900 while (bufcount > 0) { 901 u8 *dmabuf = NULL; 902 struct urb *urb = usbtmc_create_urb(); 903 904 if (!urb) { 905 retval = -ENOMEM; 906 goto error; 907 } 908 909 dmabuf = urb->transfer_buffer; 910 911 usb_fill_bulk_urb(urb, data->usb_dev, 912 usb_rcvbulkpipe(data->usb_dev, data->bulk_in), 913 dmabuf, bufsize, 914 usbtmc_read_bulk_cb, file_data); 915 916 usb_anchor_urb(urb, &file_data->submitted); 917 retval = usb_submit_urb(urb, GFP_KERNEL); 918 /* urb is anchored. We can release our reference. */ 919 usb_free_urb(urb); 920 if (unlikely(retval)) { 921 usb_unanchor_urb(urb); 922 goto error; 923 } 924 file_data->in_urbs_used++; 925 bufcount--; 926 } 927 928 if (again) { 929 dev_dbg(dev, "%s: ret=again\n", __func__); 930 return -EAGAIN; 931 } 932 933 if (user_buffer == NULL) 934 return -EINVAL; 935 936 expire = msecs_to_jiffies(file_data->timeout); 937 938 while (max_transfer_size > 0) { 939 u32 this_part; 940 struct urb *urb = NULL; 941 942 if (!(flags & USBTMC_FLAG_ASYNC)) { 943 dev_dbg(dev, "%s: before wait time %lu\n", 944 __func__, expire); 945 retval = wait_event_interruptible_timeout( 946 file_data->wait_bulk_in, 947 usbtmc_do_transfer(file_data), 948 expire); 949 950 dev_dbg(dev, "%s: wait returned %d\n", 951 __func__, retval); 952 953 if (retval <= 0) { 954 if (retval == 0) 955 retval = -ETIMEDOUT; 956 goto error; 957 } 958 } 959 960 urb = usb_get_from_anchor(&file_data->in_anchor); 961 if (!urb) { 962 if (!(flags & USBTMC_FLAG_ASYNC)) { 963 /* synchronous case: must not happen */ 964 retval = -EFAULT; 965 goto error; 966 } 967 968 /* asynchronous case: ready, do not block or wait */ 969 *transferred = done; 970 dev_dbg(dev, "%s: (async) done=%u ret=0\n", 971 __func__, done); 972 return 0; 973 } 974 975 file_data->in_urbs_used--; 976 977 if (max_transfer_size > urb->actual_length) 978 max_transfer_size -= urb->actual_length; 979 else 980 max_transfer_size = 0; 981 982 if (remaining > urb->actual_length) 983 this_part = urb->actual_length; 984 else 985 this_part = remaining; 986 987 print_hex_dump_debug("usbtmc ", DUMP_PREFIX_NONE, 16, 1, 988 urb->transfer_buffer, urb->actual_length, true); 989 990 if (copy_to_user(user_buffer + done, 991 urb->transfer_buffer, this_part)) { 992 usb_free_urb(urb); 993 retval = -EFAULT; 994 goto error; 995 } 996 997 remaining -= this_part; 998 done += this_part; 999 1000 spin_lock_irq(&file_data->err_lock); 1001 if (urb->status) { 1002 /* return the very first error */ 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 /* short packet or ZLP received => ready */ 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 /* resubmit, since other buffers still not enough */ 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 /* Attention: killing urbs can take long time (2 ms) */ 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; /* no spinlock needed here */ 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 /* mutex already locked */ 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 /* sync/async unlink faults aren't errors */ 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 /* Get pointer to private data structure */ 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 /* prepare next urb to send */ 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 /* fill bulk with 32 bit alignment to meet USBTMC specification 1199 * (size + 3 & ~3) rounds up and simplifies user code 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; /* urb will be finally released by usb driver */ 1222 1223 remaining -= this_part; 1224 done += this_part; 1225 } 1226 1227 /* All urbs are on the fly */ 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 /* mutex already locked */ 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 * Get the generic write result 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 * Sends a REQUEST_DEV_DEP_MSG_IN message on the Bulk-OUT endpoint. 1303 * @transfer_size: number of bytes to request from the device. 1304 * 1305 * See the USBTMC specification, Table 4. 1306 * 1307 * Also updates bTag_last_write. 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 /* Setup IO buffer for REQUEST_DEV_DEP_MSG_IN message 1321 * Refer to class specs for details 1322 */ 1323 buffer[0] = 2; 1324 buffer[1] = data->bTag; 1325 buffer[2] = ~data->bTag; 1326 buffer[3] = 0; /* Reserved */ 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 /* Use term character? */ 1333 buffer[9] = file_data->term_char; 1334 buffer[10] = 0; /* Reserved */ 1335 buffer[11] = 0; /* Reserved */ 1336 1337 /* Send bulk URB */ 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 /* Store bTag (in case we need to abort) */ 1345 data->bTag_last_write = data->bTag; 1346 1347 /* Increment bTag -- and increment again if zero */ 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 /* Get pointer to private data structure */ 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 /* Loop until we have fetched everything we requested */ 1403 remaining = count; 1404 actual = 0; 1405 1406 /* Send bulk URB */ 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 /* Store bTag (in case we need to abort) */ 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 /* Sanity checks for the header */ 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 /* How many characters did the instrument send? */ 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 /* Remove the USBTMC header */ 1475 actual -= USBTMC_HEADER_SIZE; 1476 1477 /* Remove padding if it exists */ 1478 if (actual > remaining) 1479 actual = remaining; 1480 1481 remaining -= actual; 1482 1483 /* Copy buffer to user space */ 1484 if (copy_to_user(buf, &buffer[USBTMC_HEADER_SIZE], actual)) { 1485 /* There must have been an addressing problem */ 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 /* Update file position value */ 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 /* previous calls were async */ 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 /* Setup IO buffer for DEV_DEP_MSG_OUT message */ 1566 buffer[0] = 1; 1567 buffer[1] = data->bTag; 1568 buffer[2] = ~data->bTag; 1569 buffer[3] = 0; /* Reserved */ 1570 buffer[4] = transfersize >> 0; 1571 buffer[5] = transfersize >> 8; 1572 buffer[6] = transfersize >> 16; 1573 buffer[7] = transfersize >> 24; 1574 /* buffer[8] is set above... */ 1575 buffer[9] = 0; /* Reserved */ 1576 buffer[10] = 0; /* Reserved */ 1577 buffer[11] = 0; /* Reserved */ 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 /* call generic_write even when remaining = 0 */ 1622 retval = usbtmc_generic_write(file_data, buf + transfersize, remaining, 1623 &done, USBTMC_FLAG_APPEND); 1624 /* truncate alignment bytes */ 1625 if (done > remaining) 1626 done = remaining; 1627 1628 /*add size of first urb*/ 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 /* do not stress device with subsequent requests */ 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 if (request.req.wLength == 0) /* Length-0 requests are never IN */ 1932 request.req.bRequestType &= ~USB_DIR_IN; 1933 1934 is_in = request.req.bRequestType & USB_DIR_IN; 1935 1936 if (request.req.wLength) { 1937 buffer = kmalloc(request.req.wLength, GFP_KERNEL); 1938 if (!buffer) 1939 return -ENOMEM; 1940 1941 if (!is_in) { 1942 /* Send control data to device */ 1943 res = copy_from_user(buffer, request.data, 1944 request.req.wLength); 1945 if (res) { 1946 rv = -EFAULT; 1947 goto exit; 1948 } 1949 } 1950 } 1951 1952 if (is_in) 1953 pipe = usb_rcvctrlpipe(data->usb_dev, 0); 1954 else 1955 pipe = usb_sndctrlpipe(data->usb_dev, 0); 1956 rv = usb_control_msg(data->usb_dev, 1957 pipe, 1958 request.req.bRequest, 1959 request.req.bRequestType, 1960 request.req.wValue, 1961 request.req.wIndex, 1962 buffer, request.req.wLength, USB_CTRL_GET_TIMEOUT); 1963 1964 if (rv < 0) { 1965 dev_err(dev, "%s failed %d\n", __func__, rv); 1966 goto exit; 1967 } 1968 1969 if (rv && is_in) { 1970 /* Read control data from device */ 1971 res = copy_to_user(request.data, buffer, rv); 1972 if (res) 1973 rv = -EFAULT; 1974 } 1975 1976 exit: 1977 kfree(buffer); 1978 return rv; 1979 } 1980 1981 /* 1982 * Get the usb timeout value 1983 */ 1984 static int usbtmc_ioctl_get_timeout(struct usbtmc_file_data *file_data, 1985 void __user *arg) 1986 { 1987 u32 timeout; 1988 1989 timeout = file_data->timeout; 1990 1991 return put_user(timeout, (__u32 __user *)arg); 1992 } 1993 1994 /* 1995 * Set the usb timeout value 1996 */ 1997 static int usbtmc_ioctl_set_timeout(struct usbtmc_file_data *file_data, 1998 void __user *arg) 1999 { 2000 u32 timeout; 2001 2002 if (get_user(timeout, (__u32 __user *)arg)) 2003 return -EFAULT; 2004 2005 /* Note that timeout = 0 means 2006 * MAX_SCHEDULE_TIMEOUT in usb_control_msg 2007 */ 2008 if (timeout < USBTMC_MIN_TIMEOUT) 2009 return -EINVAL; 2010 2011 file_data->timeout = timeout; 2012 2013 return 0; 2014 } 2015 2016 /* 2017 * enables/disables sending EOM on write 2018 */ 2019 static int usbtmc_ioctl_eom_enable(struct usbtmc_file_data *file_data, 2020 void __user *arg) 2021 { 2022 u8 eom_enable; 2023 2024 if (copy_from_user(&eom_enable, arg, sizeof(eom_enable))) 2025 return -EFAULT; 2026 2027 if (eom_enable > 1) 2028 return -EINVAL; 2029 2030 file_data->eom_val = eom_enable; 2031 2032 return 0; 2033 } 2034 2035 /* 2036 * Configure termination character for read() 2037 */ 2038 static int usbtmc_ioctl_config_termc(struct usbtmc_file_data *file_data, 2039 void __user *arg) 2040 { 2041 struct usbtmc_termchar termc; 2042 2043 if (copy_from_user(&termc, arg, sizeof(termc))) 2044 return -EFAULT; 2045 2046 if ((termc.term_char_enabled > 1) || 2047 (termc.term_char_enabled && 2048 !(file_data->data->capabilities.device_capabilities & 1))) 2049 return -EINVAL; 2050 2051 file_data->term_char = termc.term_char; 2052 file_data->term_char_enabled = termc.term_char_enabled; 2053 2054 return 0; 2055 } 2056 2057 static long usbtmc_ioctl(struct file *file, unsigned int cmd, unsigned long arg) 2058 { 2059 struct usbtmc_file_data *file_data; 2060 struct usbtmc_device_data *data; 2061 int retval = -EBADRQC; 2062 __u8 tmp_byte; 2063 2064 file_data = file->private_data; 2065 data = file_data->data; 2066 2067 mutex_lock(&data->io_mutex); 2068 if (data->zombie) { 2069 retval = -ENODEV; 2070 goto skip_io_on_zombie; 2071 } 2072 2073 switch (cmd) { 2074 case USBTMC_IOCTL_CLEAR_OUT_HALT: 2075 retval = usbtmc_ioctl_clear_out_halt(data); 2076 break; 2077 2078 case USBTMC_IOCTL_CLEAR_IN_HALT: 2079 retval = usbtmc_ioctl_clear_in_halt(data); 2080 break; 2081 2082 case USBTMC_IOCTL_INDICATOR_PULSE: 2083 retval = usbtmc_ioctl_indicator_pulse(data); 2084 break; 2085 2086 case USBTMC_IOCTL_CLEAR: 2087 retval = usbtmc_ioctl_clear(data); 2088 break; 2089 2090 case USBTMC_IOCTL_ABORT_BULK_OUT: 2091 retval = usbtmc_ioctl_abort_bulk_out(data); 2092 break; 2093 2094 case USBTMC_IOCTL_ABORT_BULK_IN: 2095 retval = usbtmc_ioctl_abort_bulk_in(data); 2096 break; 2097 2098 case USBTMC_IOCTL_CTRL_REQUEST: 2099 retval = usbtmc_ioctl_request(data, (void __user *)arg); 2100 break; 2101 2102 case USBTMC_IOCTL_GET_TIMEOUT: 2103 retval = usbtmc_ioctl_get_timeout(file_data, 2104 (void __user *)arg); 2105 break; 2106 2107 case USBTMC_IOCTL_SET_TIMEOUT: 2108 retval = usbtmc_ioctl_set_timeout(file_data, 2109 (void __user *)arg); 2110 break; 2111 2112 case USBTMC_IOCTL_EOM_ENABLE: 2113 retval = usbtmc_ioctl_eom_enable(file_data, 2114 (void __user *)arg); 2115 break; 2116 2117 case USBTMC_IOCTL_CONFIG_TERMCHAR: 2118 retval = usbtmc_ioctl_config_termc(file_data, 2119 (void __user *)arg); 2120 break; 2121 2122 case USBTMC_IOCTL_WRITE: 2123 retval = usbtmc_ioctl_generic_write(file_data, 2124 (void __user *)arg); 2125 break; 2126 2127 case USBTMC_IOCTL_READ: 2128 retval = usbtmc_ioctl_generic_read(file_data, 2129 (void __user *)arg); 2130 break; 2131 2132 case USBTMC_IOCTL_WRITE_RESULT: 2133 retval = usbtmc_ioctl_write_result(file_data, 2134 (void __user *)arg); 2135 break; 2136 2137 case USBTMC_IOCTL_API_VERSION: 2138 retval = put_user(USBTMC_API_VERSION, 2139 (__u32 __user *)arg); 2140 break; 2141 2142 case USBTMC488_IOCTL_GET_CAPS: 2143 retval = put_user(data->usb488_caps, 2144 (unsigned char __user *)arg); 2145 break; 2146 2147 case USBTMC488_IOCTL_READ_STB: 2148 retval = usbtmc488_ioctl_read_stb(file_data, 2149 (void __user *)arg); 2150 break; 2151 2152 case USBTMC488_IOCTL_REN_CONTROL: 2153 retval = usbtmc488_ioctl_simple(data, (void __user *)arg, 2154 USBTMC488_REQUEST_REN_CONTROL); 2155 break; 2156 2157 case USBTMC488_IOCTL_GOTO_LOCAL: 2158 retval = usbtmc488_ioctl_simple(data, (void __user *)arg, 2159 USBTMC488_REQUEST_GOTO_LOCAL); 2160 break; 2161 2162 case USBTMC488_IOCTL_LOCAL_LOCKOUT: 2163 retval = usbtmc488_ioctl_simple(data, (void __user *)arg, 2164 USBTMC488_REQUEST_LOCAL_LOCKOUT); 2165 break; 2166 2167 case USBTMC488_IOCTL_TRIGGER: 2168 retval = usbtmc488_ioctl_trigger(file_data); 2169 break; 2170 2171 case USBTMC488_IOCTL_WAIT_SRQ: 2172 retval = usbtmc488_ioctl_wait_srq(file_data, 2173 (__u32 __user *)arg); 2174 break; 2175 2176 case USBTMC_IOCTL_MSG_IN_ATTR: 2177 retval = put_user(file_data->bmTransferAttributes, 2178 (__u8 __user *)arg); 2179 break; 2180 2181 case USBTMC_IOCTL_AUTO_ABORT: 2182 retval = get_user(tmp_byte, (unsigned char __user *)arg); 2183 if (retval == 0) 2184 file_data->auto_abort = !!tmp_byte; 2185 break; 2186 2187 case USBTMC_IOCTL_GET_STB: 2188 retval = usbtmc_get_stb(file_data, &tmp_byte); 2189 if (retval > 0) 2190 retval = put_user(tmp_byte, (__u8 __user *)arg); 2191 break; 2192 2193 case USBTMC_IOCTL_GET_SRQ_STB: 2194 retval = usbtmc_ioctl_get_srq_stb(file_data, 2195 (void __user *)arg); 2196 break; 2197 2198 case USBTMC_IOCTL_CANCEL_IO: 2199 retval = usbtmc_ioctl_cancel_io(file_data); 2200 break; 2201 2202 case USBTMC_IOCTL_CLEANUP_IO: 2203 retval = usbtmc_ioctl_cleanup_io(file_data); 2204 break; 2205 } 2206 2207 skip_io_on_zombie: 2208 mutex_unlock(&data->io_mutex); 2209 return retval; 2210 } 2211 2212 static int usbtmc_fasync(int fd, struct file *file, int on) 2213 { 2214 struct usbtmc_file_data *file_data = file->private_data; 2215 2216 return fasync_helper(fd, file, on, &file_data->data->fasync); 2217 } 2218 2219 static __poll_t usbtmc_poll(struct file *file, poll_table *wait) 2220 { 2221 struct usbtmc_file_data *file_data = file->private_data; 2222 struct usbtmc_device_data *data = file_data->data; 2223 __poll_t mask; 2224 2225 mutex_lock(&data->io_mutex); 2226 2227 if (data->zombie) { 2228 mask = EPOLLHUP | EPOLLERR; 2229 goto no_poll; 2230 } 2231 2232 poll_wait(file, &data->waitq, wait); 2233 2234 /* Note that EPOLLPRI is now assigned to SRQ, and 2235 * EPOLLIN|EPOLLRDNORM to normal read data. 2236 */ 2237 mask = 0; 2238 if (atomic_read(&file_data->srq_asserted)) 2239 mask |= EPOLLPRI; 2240 2241 /* Note that the anchor submitted includes all urbs for BULK IN 2242 * and OUT. So EPOLLOUT is signaled when BULK OUT is empty and 2243 * all BULK IN urbs are completed and moved to in_anchor. 2244 */ 2245 if (usb_anchor_empty(&file_data->submitted)) 2246 mask |= (EPOLLOUT | EPOLLWRNORM); 2247 if (!usb_anchor_empty(&file_data->in_anchor)) 2248 mask |= (EPOLLIN | EPOLLRDNORM); 2249 2250 spin_lock_irq(&file_data->err_lock); 2251 if (file_data->in_status || file_data->out_status) 2252 mask |= EPOLLERR; 2253 spin_unlock_irq(&file_data->err_lock); 2254 2255 dev_dbg(&data->intf->dev, "poll mask = %x\n", mask); 2256 2257 no_poll: 2258 mutex_unlock(&data->io_mutex); 2259 return mask; 2260 } 2261 2262 static const struct file_operations fops = { 2263 .owner = THIS_MODULE, 2264 .read = usbtmc_read, 2265 .write = usbtmc_write, 2266 .open = usbtmc_open, 2267 .release = usbtmc_release, 2268 .flush = usbtmc_flush, 2269 .unlocked_ioctl = usbtmc_ioctl, 2270 .compat_ioctl = compat_ptr_ioctl, 2271 .fasync = usbtmc_fasync, 2272 .poll = usbtmc_poll, 2273 .llseek = default_llseek, 2274 }; 2275 2276 static struct usb_class_driver usbtmc_class = { 2277 .name = "usbtmc%d", 2278 .fops = &fops, 2279 .minor_base = USBTMC_MINOR_BASE, 2280 }; 2281 2282 static void usbtmc_interrupt(struct urb *urb) 2283 { 2284 struct usbtmc_device_data *data = urb->context; 2285 struct device *dev = &data->intf->dev; 2286 int status = urb->status; 2287 int rv; 2288 2289 dev_dbg(&data->intf->dev, "int status: %d len %d\n", 2290 status, urb->actual_length); 2291 2292 switch (status) { 2293 case 0: /* SUCCESS */ 2294 /* check for valid STB notification */ 2295 if (data->iin_buffer[0] > 0x81) { 2296 data->bNotify1 = data->iin_buffer[0]; 2297 data->bNotify2 = data->iin_buffer[1]; 2298 atomic_set(&data->iin_data_valid, 1); 2299 wake_up_interruptible(&data->waitq); 2300 goto exit; 2301 } 2302 /* check for SRQ notification */ 2303 if (data->iin_buffer[0] == 0x81) { 2304 unsigned long flags; 2305 struct list_head *elem; 2306 2307 if (data->fasync) 2308 kill_fasync(&data->fasync, 2309 SIGIO, POLL_PRI); 2310 2311 spin_lock_irqsave(&data->dev_lock, flags); 2312 list_for_each(elem, &data->file_list) { 2313 struct usbtmc_file_data *file_data; 2314 2315 file_data = list_entry(elem, 2316 struct usbtmc_file_data, 2317 file_elem); 2318 file_data->srq_byte = data->iin_buffer[1]; 2319 atomic_set(&file_data->srq_asserted, 1); 2320 } 2321 spin_unlock_irqrestore(&data->dev_lock, flags); 2322 2323 dev_dbg(dev, "srq received bTag %x stb %x\n", 2324 (unsigned int)data->iin_buffer[0], 2325 (unsigned int)data->iin_buffer[1]); 2326 wake_up_interruptible_all(&data->waitq); 2327 goto exit; 2328 } 2329 dev_warn(dev, "invalid notification: %x\n", 2330 data->iin_buffer[0]); 2331 break; 2332 case -EOVERFLOW: 2333 dev_err(dev, "overflow with length %d, actual length is %d\n", 2334 data->iin_wMaxPacketSize, urb->actual_length); 2335 fallthrough; 2336 default: 2337 /* urb terminated, clean up */ 2338 dev_dbg(dev, "urb terminated, status: %d\n", status); 2339 return; 2340 } 2341 exit: 2342 rv = usb_submit_urb(urb, GFP_ATOMIC); 2343 if (rv) 2344 dev_err(dev, "usb_submit_urb failed: %d\n", rv); 2345 } 2346 2347 static void usbtmc_free_int(struct usbtmc_device_data *data) 2348 { 2349 if (!data->iin_ep_present || !data->iin_urb) 2350 return; 2351 usb_kill_urb(data->iin_urb); 2352 kfree(data->iin_buffer); 2353 data->iin_buffer = NULL; 2354 usb_free_urb(data->iin_urb); 2355 data->iin_urb = NULL; 2356 kref_put(&data->kref, usbtmc_delete); 2357 } 2358 2359 static int usbtmc_probe(struct usb_interface *intf, 2360 const struct usb_device_id *id) 2361 { 2362 struct usbtmc_device_data *data; 2363 struct usb_host_interface *iface_desc; 2364 struct usb_endpoint_descriptor *bulk_in, *bulk_out, *int_in; 2365 int retcode; 2366 2367 dev_dbg(&intf->dev, "%s called\n", __func__); 2368 2369 data = kzalloc(sizeof(*data), GFP_KERNEL); 2370 if (!data) 2371 return -ENOMEM; 2372 2373 data->intf = intf; 2374 data->id = id; 2375 data->usb_dev = usb_get_dev(interface_to_usbdev(intf)); 2376 usb_set_intfdata(intf, data); 2377 kref_init(&data->kref); 2378 mutex_init(&data->io_mutex); 2379 init_waitqueue_head(&data->waitq); 2380 atomic_set(&data->iin_data_valid, 0); 2381 INIT_LIST_HEAD(&data->file_list); 2382 spin_lock_init(&data->dev_lock); 2383 2384 data->zombie = 0; 2385 2386 /* Initialize USBTMC bTag and other fields */ 2387 data->bTag = 1; 2388 /* 2 <= bTag <= 127 USBTMC-USB488 subclass specification 4.3.1 */ 2389 data->iin_bTag = 2; 2390 2391 /* USBTMC devices have only one setting, so use that */ 2392 iface_desc = data->intf->cur_altsetting; 2393 data->ifnum = iface_desc->desc.bInterfaceNumber; 2394 2395 /* Find bulk endpoints */ 2396 retcode = usb_find_common_endpoints(iface_desc, 2397 &bulk_in, &bulk_out, NULL, NULL); 2398 if (retcode) { 2399 dev_err(&intf->dev, "bulk endpoints not found\n"); 2400 goto err_put; 2401 } 2402 2403 retcode = -EINVAL; 2404 data->bulk_in = bulk_in->bEndpointAddress; 2405 data->wMaxPacketSize = usb_endpoint_maxp(bulk_in); 2406 if (!data->wMaxPacketSize) 2407 goto err_put; 2408 dev_dbg(&intf->dev, "Found bulk in endpoint at %u\n", data->bulk_in); 2409 2410 data->bulk_out = bulk_out->bEndpointAddress; 2411 dev_dbg(&intf->dev, "Found Bulk out endpoint at %u\n", data->bulk_out); 2412 2413 /* Find int endpoint */ 2414 retcode = usb_find_int_in_endpoint(iface_desc, &int_in); 2415 if (!retcode) { 2416 data->iin_ep_present = 1; 2417 data->iin_ep = int_in->bEndpointAddress; 2418 data->iin_wMaxPacketSize = usb_endpoint_maxp(int_in); 2419 data->iin_interval = int_in->bInterval; 2420 dev_dbg(&intf->dev, "Found Int in endpoint at %u\n", 2421 data->iin_ep); 2422 } 2423 2424 retcode = get_capabilities(data); 2425 if (retcode) 2426 dev_err(&intf->dev, "can't read capabilities\n"); 2427 2428 if (data->iin_ep_present) { 2429 /* allocate int urb */ 2430 data->iin_urb = usb_alloc_urb(0, GFP_KERNEL); 2431 if (!data->iin_urb) { 2432 retcode = -ENOMEM; 2433 goto error_register; 2434 } 2435 2436 /* Protect interrupt in endpoint data until iin_urb is freed */ 2437 kref_get(&data->kref); 2438 2439 /* allocate buffer for interrupt in */ 2440 data->iin_buffer = kmalloc(data->iin_wMaxPacketSize, 2441 GFP_KERNEL); 2442 if (!data->iin_buffer) { 2443 retcode = -ENOMEM; 2444 goto error_register; 2445 } 2446 2447 /* fill interrupt urb */ 2448 usb_fill_int_urb(data->iin_urb, data->usb_dev, 2449 usb_rcvintpipe(data->usb_dev, data->iin_ep), 2450 data->iin_buffer, data->iin_wMaxPacketSize, 2451 usbtmc_interrupt, 2452 data, data->iin_interval); 2453 2454 retcode = usb_submit_urb(data->iin_urb, GFP_KERNEL); 2455 if (retcode) { 2456 dev_err(&intf->dev, "Failed to submit iin_urb\n"); 2457 goto error_register; 2458 } 2459 } 2460 2461 retcode = usb_register_dev(intf, &usbtmc_class); 2462 if (retcode) { 2463 dev_err(&intf->dev, "Not able to get a minor (base %u, slice default): %d\n", 2464 USBTMC_MINOR_BASE, 2465 retcode); 2466 goto error_register; 2467 } 2468 dev_dbg(&intf->dev, "Using minor number %d\n", intf->minor); 2469 2470 return 0; 2471 2472 error_register: 2473 usbtmc_free_int(data); 2474 err_put: 2475 kref_put(&data->kref, usbtmc_delete); 2476 return retcode; 2477 } 2478 2479 static void usbtmc_disconnect(struct usb_interface *intf) 2480 { 2481 struct usbtmc_device_data *data = usb_get_intfdata(intf); 2482 struct list_head *elem; 2483 2484 usb_deregister_dev(intf, &usbtmc_class); 2485 mutex_lock(&data->io_mutex); 2486 data->zombie = 1; 2487 wake_up_interruptible_all(&data->waitq); 2488 list_for_each(elem, &data->file_list) { 2489 struct usbtmc_file_data *file_data; 2490 2491 file_data = list_entry(elem, 2492 struct usbtmc_file_data, 2493 file_elem); 2494 usb_kill_anchored_urbs(&file_data->submitted); 2495 usb_scuttle_anchored_urbs(&file_data->in_anchor); 2496 } 2497 mutex_unlock(&data->io_mutex); 2498 usbtmc_free_int(data); 2499 kref_put(&data->kref, usbtmc_delete); 2500 } 2501 2502 static void usbtmc_draw_down(struct usbtmc_file_data *file_data) 2503 { 2504 int time; 2505 2506 time = usb_wait_anchor_empty_timeout(&file_data->submitted, 1000); 2507 if (!time) 2508 usb_kill_anchored_urbs(&file_data->submitted); 2509 usb_scuttle_anchored_urbs(&file_data->in_anchor); 2510 } 2511 2512 static int usbtmc_suspend(struct usb_interface *intf, pm_message_t message) 2513 { 2514 struct usbtmc_device_data *data = usb_get_intfdata(intf); 2515 struct list_head *elem; 2516 2517 if (!data) 2518 return 0; 2519 2520 mutex_lock(&data->io_mutex); 2521 list_for_each(elem, &data->file_list) { 2522 struct usbtmc_file_data *file_data; 2523 2524 file_data = list_entry(elem, 2525 struct usbtmc_file_data, 2526 file_elem); 2527 usbtmc_draw_down(file_data); 2528 } 2529 2530 if (data->iin_ep_present && data->iin_urb) 2531 usb_kill_urb(data->iin_urb); 2532 2533 mutex_unlock(&data->io_mutex); 2534 return 0; 2535 } 2536 2537 static int usbtmc_resume(struct usb_interface *intf) 2538 { 2539 struct usbtmc_device_data *data = usb_get_intfdata(intf); 2540 int retcode = 0; 2541 2542 if (data->iin_ep_present && data->iin_urb) 2543 retcode = usb_submit_urb(data->iin_urb, GFP_KERNEL); 2544 if (retcode) 2545 dev_err(&intf->dev, "Failed to submit iin_urb\n"); 2546 2547 return retcode; 2548 } 2549 2550 static int usbtmc_pre_reset(struct usb_interface *intf) 2551 { 2552 struct usbtmc_device_data *data = usb_get_intfdata(intf); 2553 struct list_head *elem; 2554 2555 if (!data) 2556 return 0; 2557 2558 mutex_lock(&data->io_mutex); 2559 2560 list_for_each(elem, &data->file_list) { 2561 struct usbtmc_file_data *file_data; 2562 2563 file_data = list_entry(elem, 2564 struct usbtmc_file_data, 2565 file_elem); 2566 usbtmc_ioctl_cancel_io(file_data); 2567 } 2568 2569 return 0; 2570 } 2571 2572 static int usbtmc_post_reset(struct usb_interface *intf) 2573 { 2574 struct usbtmc_device_data *data = usb_get_intfdata(intf); 2575 2576 mutex_unlock(&data->io_mutex); 2577 2578 return 0; 2579 } 2580 2581 static struct usb_driver usbtmc_driver = { 2582 .name = "usbtmc", 2583 .id_table = usbtmc_devices, 2584 .probe = usbtmc_probe, 2585 .disconnect = usbtmc_disconnect, 2586 .suspend = usbtmc_suspend, 2587 .resume = usbtmc_resume, 2588 .pre_reset = usbtmc_pre_reset, 2589 .post_reset = usbtmc_post_reset, 2590 .dev_groups = usbtmc_groups, 2591 }; 2592 2593 module_usb_driver(usbtmc_driver); 2594 2595 MODULE_LICENSE("GPL"); 2596