1 // SPDX-License-Identifier: GPL-2.0 2 3 /*************************************************************************** 4 * copyright : (C) 2001, 2002 by Frank Mori Hess 5 ***************************************************************************/ 6 7 #define dev_fmt(fmt) KBUILD_MODNAME ": " fmt 8 9 #include "ibsys.h" 10 #include <linux/delay.h> 11 #include <linux/kthread.h> 12 #include <linux/vmalloc.h> 13 14 /* 15 * IBCAC 16 * Return to the controller active state from the 17 * controller standby state, i.e., turn ATN on. Note 18 * that in order to enter the controller active state 19 * from the controller idle state, ibsic must be called. 20 * If sync is non-zero, attempt to take control synchronously. 21 * If fallback_to_async is non-zero, try to take control asynchronously 22 * if synchronous attempt fails. 23 */ 24 int ibcac(struct gpib_board *board, int sync, int fallback_to_async) 25 { 26 int status = ibstatus(board); 27 int retval; 28 29 if ((status & CIC) == 0) 30 return -EINVAL; 31 32 if (status & ATN) 33 return 0; 34 35 if (sync && (status & LACS) == 0) 36 /* 37 * tcs (take control synchronously) can only possibly work when 38 * controller is listener. Error code also needs to be -ETIMEDOUT 39 * or it will giveout without doing fallback. 40 */ 41 retval = -ETIMEDOUT; 42 else 43 retval = board->interface->take_control(board, sync); 44 45 if (retval < 0 && fallback_to_async) { 46 if (sync && retval == -ETIMEDOUT) 47 retval = board->interface->take_control(board, 0); 48 } 49 board->interface->update_status(board, 0); 50 51 return retval; 52 } 53 54 /* 55 * After ATN is asserted, it should cause any connected devices 56 * to start listening for command bytes and leave acceptor idle state. 57 * So if ATN is asserted and neither NDAC or NRFD are asserted, 58 * then there are no devices and ibcmd should error out immediately. 59 * Some gpib hardware sees itself asserting NDAC/NRFD when it 60 * is controller in charge, in which case this check will 61 * do nothing useful (but shouldn't cause any harm either). 62 * Drivers that don't need this check (ni_usb for example) may 63 * set the skip_check_for_command_acceptors flag in their 64 * gpib_interface_struct to avoid useless overhead. 65 */ 66 static int check_for_command_acceptors(struct gpib_board *board) 67 { 68 int lines; 69 70 if (board->interface->skip_check_for_command_acceptors) 71 return 0; 72 if (!board->interface->line_status) 73 return 0; 74 75 udelay(2); // allow time for devices to respond to ATN if it was just asserted 76 77 lines = board->interface->line_status(board); 78 if (lines < 0) 79 return lines; 80 81 if ((lines & VALID_NRFD) && (lines & VALID_NDAC)) { 82 if ((lines & BUS_NRFD) == 0 && (lines & BUS_NDAC) == 0) 83 return -ENOTCONN; 84 } 85 86 return 0; 87 } 88 89 /* 90 * IBCMD 91 * Write cnt command bytes from buf to the GPIB. The 92 * command operation terminates only on I/O complete. 93 * 94 * NOTE: 95 * 1. Prior to beginning the command, the interface is 96 * placed in the controller active state. 97 * 2. Before calling ibcmd for the first time, ibsic 98 * must be called to initialize the GPIB and enable 99 * the interface to leave the controller idle state. 100 */ 101 int ibcmd(struct gpib_board *board, u8 *buf, size_t length, size_t *bytes_written) 102 { 103 ssize_t ret = 0; 104 int status; 105 106 *bytes_written = 0; 107 108 status = ibstatus(board); 109 110 if ((status & CIC) == 0) 111 return -EINVAL; 112 113 os_start_timer(board, board->usec_timeout); 114 115 ret = ibcac(board, 1, 1); 116 if (ret == 0) { 117 ret = check_for_command_acceptors(board); 118 if (ret == 0) 119 ret = board->interface->command(board, buf, length, bytes_written); 120 } 121 122 os_remove_timer(board); 123 124 if (io_timed_out(board)) 125 ret = -ETIMEDOUT; 126 127 return ret; 128 } 129 130 /* 131 * IBGTS 132 * Go to the controller standby state from the controller 133 * active state, i.e., turn ATN off. 134 */ 135 136 int ibgts(struct gpib_board *board) 137 { 138 int status = ibstatus(board); 139 int retval; 140 141 if ((status & CIC) == 0) 142 return -EINVAL; 143 144 retval = board->interface->go_to_standby(board); /* go to standby */ 145 146 board->interface->update_status(board, 0); 147 148 return retval; 149 } 150 151 static int autospoll_wait_should_wake_up(struct gpib_board *board) 152 { 153 int retval; 154 155 mutex_lock(&board->big_gpib_mutex); 156 157 retval = board->master && board->autospollers > 0 && 158 !atomic_read(&board->stuck_srq) && 159 test_and_clear_bit(SRQI_NUM, &board->status); 160 161 mutex_unlock(&board->big_gpib_mutex); 162 return retval; 163 } 164 165 static int autospoll_thread(void *board_void) 166 { 167 struct gpib_board *board = board_void; 168 int retval = 0; 169 170 dev_dbg(board->gpib_dev, "entering autospoll thread\n"); 171 172 while (1) { 173 wait_event_interruptible(board->wait, 174 kthread_should_stop() || 175 autospoll_wait_should_wake_up(board)); 176 dev_dbg(board->gpib_dev, "autospoll wait satisfied\n"); 177 if (kthread_should_stop()) 178 break; 179 180 mutex_lock(&board->big_gpib_mutex); 181 /* make sure we are still good after we have lock */ 182 if (board->autospollers <= 0 || board->master == 0) { 183 mutex_unlock(&board->big_gpib_mutex); 184 continue; 185 } 186 mutex_unlock(&board->big_gpib_mutex); 187 188 if (try_module_get(board->provider_module)) { 189 retval = autopoll_all_devices(board); 190 module_put(board->provider_module); 191 } else { 192 dev_err(board->gpib_dev, "try_module_get() failed!\n"); 193 } 194 if (retval <= 0) { 195 dev_err(board->gpib_dev, "stuck SRQ\n"); 196 197 atomic_set(&board->stuck_srq, 1); // XXX could be better 198 set_bit(SRQI_NUM, &board->status); 199 } 200 } 201 return retval; 202 } 203 204 int ibonline(struct gpib_board *board) 205 { 206 int retval; 207 208 if (board->online) 209 return -EBUSY; 210 if (!board->interface) 211 return -ENODEV; 212 retval = gpib_allocate_board(board); 213 if (retval < 0) 214 return retval; 215 216 board->dev = NULL; 217 board->local_ppoll_mode = 0; 218 retval = board->interface->attach(board, &board->config); 219 if (retval < 0) { 220 board->interface->detach(board); 221 return retval; 222 } 223 /* 224 * nios2nommu on 2.6.11 uclinux kernel has weird problems 225 * with autospoll thread causing huge slowdowns 226 */ 227 #ifndef CONFIG_NIOS2 228 board->autospoll_task = kthread_run(&autospoll_thread, board, 229 "gpib%d_autospoll_kthread", board->minor); 230 if (IS_ERR(board->autospoll_task)) { 231 dev_err(board->gpib_dev, "failed to create autospoll thread\n"); 232 board->interface->detach(board); 233 return PTR_ERR(board->autospoll_task); 234 } 235 #endif 236 board->online = 1; 237 dev_dbg(board->gpib_dev, "board online\n"); 238 239 return 0; 240 } 241 242 /* XXX need to make sure board is generally not in use (grab board lock?) */ 243 int iboffline(struct gpib_board *board) 244 { 245 int retval; 246 247 if (board->online == 0) 248 return 0; 249 if (!board->interface) 250 return -ENODEV; 251 252 if (board->autospoll_task && !IS_ERR(board->autospoll_task)) { 253 retval = kthread_stop(board->autospoll_task); 254 if (retval) 255 dev_err(board->gpib_dev, "kthread_stop returned %i\n", retval); 256 board->autospoll_task = NULL; 257 } 258 259 board->interface->detach(board); 260 gpib_deallocate_board(board); 261 board->online = 0; 262 dev_dbg(board->gpib_dev, "board offline\n"); 263 264 return 0; 265 } 266 267 /* 268 * IBLINES 269 * Poll the GPIB control lines and return their status in buf. 270 * 271 * LSB (bits 0-7) - VALID lines mask (lines that can be monitored). 272 * Next LSB (bits 8-15) - STATUS lines mask (lines that are currently set). 273 * 274 */ 275 int iblines(const struct gpib_board *board, short *lines) 276 { 277 int retval; 278 279 *lines = 0; 280 if (!board->interface->line_status) 281 return 0; 282 retval = board->interface->line_status(board); 283 if (retval < 0) 284 return retval; 285 *lines = retval; 286 return 0; 287 } 288 289 /* 290 * IBRD 291 * Read up to 'length' bytes of data from the GPIB into buf. End 292 * on detection of END (EOI and or EOS) and set 'end_flag'. 293 * 294 * NOTE: 295 * 1. The interface is placed in the controller standby 296 * state prior to beginning the read. 297 * 2. Prior to calling ibrd, the intended devices as well 298 * as the interface board itself must be addressed by 299 * calling ibcmd. 300 */ 301 302 int ibrd(struct gpib_board *board, u8 *buf, size_t length, int *end_flag, size_t *nbytes) 303 { 304 ssize_t ret = 0; 305 int retval; 306 size_t bytes_read; 307 308 *nbytes = 0; 309 *end_flag = 0; 310 if (length == 0) 311 return 0; 312 313 if (board->master) { 314 retval = ibgts(board); 315 if (retval < 0) 316 return retval; 317 } 318 /* 319 * XXX resetting timer here could cause timeouts take longer than they should, 320 * since read_ioctl calls this 321 * function in a loop, there is probably a similar problem with writes/commands 322 */ 323 os_start_timer(board, board->usec_timeout); 324 325 do { 326 ret = board->interface->read(board, buf, length - *nbytes, end_flag, &bytes_read); 327 if (ret < 0) 328 goto ibrd_out; 329 330 buf += bytes_read; 331 *nbytes += bytes_read; 332 if (need_resched()) 333 schedule(); 334 } while (ret == 0 && *nbytes > 0 && *nbytes < length && *end_flag == 0); 335 ibrd_out: 336 os_remove_timer(board); 337 338 return ret; 339 } 340 341 /* 342 * IBRPP 343 * Conduct a parallel poll and return the byte in buf. 344 * 345 * NOTE: 346 * 1. Prior to conducting the poll the interface is placed 347 * in the controller active state. 348 */ 349 int ibrpp(struct gpib_board *board, u8 *result) 350 { 351 int retval = 0; 352 353 os_start_timer(board, board->usec_timeout); 354 retval = ibcac(board, 1, 1); 355 if (retval) 356 return -1; 357 358 retval = board->interface->parallel_poll(board, result); 359 360 os_remove_timer(board); 361 return retval; 362 } 363 364 int ibppc(struct gpib_board *board, u8 configuration) 365 { 366 configuration &= 0x1f; 367 board->interface->parallel_poll_configure(board, configuration); 368 board->parallel_poll_configuration = configuration; 369 370 return 0; 371 } 372 373 int ibrsv2(struct gpib_board *board, u8 status_byte, int new_reason_for_service) 374 { 375 int board_status = ibstatus(board); 376 const unsigned int MSS = status_byte & request_service_bit; 377 378 if ((board_status & CIC)) 379 return -EINVAL; 380 381 if (MSS == 0 && new_reason_for_service) 382 return -EINVAL; 383 384 if (board->interface->serial_poll_response2) { 385 board->interface->serial_poll_response2(board, status_byte, new_reason_for_service); 386 // fall back on simpler serial_poll_response if the behavior would be the same 387 } else if (board->interface->serial_poll_response && 388 (MSS == 0 || (MSS && new_reason_for_service))) { 389 board->interface->serial_poll_response(board, status_byte); 390 } else { 391 return -EOPNOTSUPP; 392 } 393 394 return 0; 395 } 396 397 /* 398 * IBSIC 399 * Send IFC for at least 100 microseconds. 400 * 401 * NOTE: 402 * 1. Ibsic must be called prior to the first call to 403 * ibcmd in order to initialize the bus and enable the 404 * interface to leave the controller idle state. 405 */ 406 int ibsic(struct gpib_board *board, unsigned int usec_duration) 407 { 408 if (board->master == 0) 409 return -EINVAL; 410 411 if (usec_duration < 100) 412 usec_duration = 100; 413 if (usec_duration > 1000) 414 usec_duration = 1000; 415 416 dev_dbg(board->gpib_dev, "sending interface clear, delay = %ius\n", usec_duration); 417 board->interface->interface_clear(board, 1); 418 udelay(usec_duration); 419 board->interface->interface_clear(board, 0); 420 421 return 0; 422 } 423 424 int ibrsc(struct gpib_board *board, int request_control) 425 { 426 int retval; 427 428 if (!board->interface->request_system_control) 429 return -EPERM; 430 431 retval = board->interface->request_system_control(board, request_control); 432 433 if (retval) 434 return retval; 435 436 board->master = request_control != 0; 437 438 return 0; 439 } 440 441 /* 442 * IBSRE 443 * Send REN true if v is non-zero or false if v is zero. 444 */ 445 int ibsre(struct gpib_board *board, int enable) 446 { 447 if (board->master == 0) 448 return -EINVAL; 449 450 board->interface->remote_enable(board, enable); /* set or clear REN */ 451 if (!enable) 452 usleep_range(100, 150); 453 454 return 0; 455 } 456 457 /* 458 * IBPAD 459 * change the GPIB address of the interface board. The address 460 * must be 0 through 30. ibonl resets the address to PAD. 461 */ 462 int ibpad(struct gpib_board *board, unsigned int addr) 463 { 464 if (addr > MAX_GPIB_PRIMARY_ADDRESS) 465 return -EINVAL; 466 467 board->pad = addr; 468 if (board->online) 469 board->interface->primary_address(board, board->pad); 470 dev_dbg(board->gpib_dev, "set primary addr to %i\n", board->pad); 471 return 0; 472 } 473 474 /* 475 * IBSAD 476 * change the secondary GPIB address of the interface board. 477 * The address must be 0 through 30, or negative disables. ibonl resets the 478 * address to SAD. 479 */ 480 int ibsad(struct gpib_board *board, int addr) 481 { 482 if (addr > MAX_GPIB_SECONDARY_ADDRESS) 483 return -EINVAL; 484 board->sad = addr; 485 if (board->online) { 486 if (board->sad >= 0) 487 board->interface->secondary_address(board, board->sad, 1); 488 else 489 board->interface->secondary_address(board, 0, 0); 490 } 491 dev_dbg(board->gpib_dev, "set secondary addr to %i\n", board->sad); 492 493 return 0; 494 } 495 496 /* 497 * IBEOS 498 * Set the end-of-string modes for I/O operations to v. 499 * 500 */ 501 int ibeos(struct gpib_board *board, int eos, int eosflags) 502 { 503 int retval; 504 505 if (eosflags & ~EOS_MASK) 506 return -EINVAL; 507 if (eosflags & REOS) { 508 retval = board->interface->enable_eos(board, eos, eosflags & BIN); 509 } else { 510 board->interface->disable_eos(board); 511 retval = 0; 512 } 513 return retval; 514 } 515 516 int ibstatus(struct gpib_board *board) 517 { 518 return general_ibstatus(board, NULL, 0, 0, NULL); 519 } 520 521 int general_ibstatus(struct gpib_board *board, const struct gpib_status_queue *device, 522 int clear_mask, int set_mask, struct gpib_descriptor *desc) 523 { 524 int status = 0; 525 short line_status; 526 527 if (board->private_data) { 528 status = board->interface->update_status(board, clear_mask); 529 /* 530 * XXX should probably stop having drivers use TIMO bit in 531 * board->status to avoid confusion 532 */ 533 status &= ~TIMO; 534 /* get real SRQI status if we can */ 535 if (iblines(board, &line_status) == 0) { 536 if ((line_status & VALID_SRQ)) { 537 if ((line_status & BUS_SRQ)) 538 status |= SRQI; 539 else 540 status &= ~SRQI; 541 } 542 } 543 } 544 if (device) 545 if (num_status_bytes(device)) 546 status |= RQS; 547 548 if (desc) { 549 if (set_mask & CMPL) 550 atomic_set(&desc->io_in_progress, 0); 551 else if (clear_mask & CMPL) 552 atomic_set(&desc->io_in_progress, 1); 553 554 if (atomic_read(&desc->io_in_progress)) 555 status &= ~CMPL; 556 else 557 status |= CMPL; 558 } 559 if (num_gpib_events(&board->event_queue)) 560 status |= EVENT; 561 else 562 status &= ~EVENT; 563 564 return status; 565 } 566 567 struct wait_info { 568 struct gpib_board *board; 569 struct timer_list timer; 570 int timed_out; 571 unsigned long usec_timeout; 572 }; 573 574 static void wait_timeout(struct timer_list *t) 575 { 576 struct wait_info *winfo = timer_container_of(winfo, t, timer); 577 578 winfo->timed_out = 1; 579 wake_up_interruptible(&winfo->board->wait); 580 } 581 582 static void init_wait_info(struct wait_info *winfo) 583 { 584 winfo->board = NULL; 585 winfo->timed_out = 0; 586 timer_setup_on_stack(&winfo->timer, wait_timeout, 0); 587 } 588 589 static int wait_satisfied(struct wait_info *winfo, struct gpib_status_queue *status_queue, 590 int wait_mask, int *status, struct gpib_descriptor *desc) 591 { 592 struct gpib_board *board = winfo->board; 593 int temp_status; 594 595 if (mutex_lock_interruptible(&board->big_gpib_mutex)) 596 return -ERESTARTSYS; 597 598 temp_status = general_ibstatus(board, status_queue, 0, 0, desc); 599 600 mutex_unlock(&board->big_gpib_mutex); 601 602 if (winfo->timed_out) 603 temp_status |= TIMO; 604 else 605 temp_status &= ~TIMO; 606 if (wait_mask & temp_status) { 607 *status = temp_status; 608 return 1; 609 } 610 // XXX does wait for END work? 611 return 0; 612 } 613 614 /* install timer interrupt handler */ 615 static void start_wait_timer(struct wait_info *winfo) 616 /* Starts the timeout task */ 617 { 618 winfo->timed_out = 0; 619 620 if (winfo->usec_timeout > 0) 621 mod_timer(&winfo->timer, jiffies + usec_to_jiffies(winfo->usec_timeout)); 622 } 623 624 static void remove_wait_timer(struct wait_info *winfo) 625 { 626 timer_delete_sync(&winfo->timer); 627 timer_destroy_on_stack(&winfo->timer); 628 } 629 630 /* 631 * IBWAIT 632 * Check or wait for a GPIB event to occur. The mask argument 633 * is a bit vector corresponding to the status bit vector. It 634 * has a bit set for each condition which can terminate the wait 635 * If the mask is 0 then 636 * no condition is waited for. 637 */ 638 int ibwait(struct gpib_board *board, int wait_mask, int clear_mask, int set_mask, 639 int *status, unsigned long usec_timeout, struct gpib_descriptor *desc) 640 { 641 int retval = 0; 642 struct gpib_status_queue *status_queue; 643 struct wait_info winfo; 644 645 if (desc->is_board) 646 status_queue = NULL; 647 else 648 status_queue = get_gpib_status_queue(board, desc->pad, desc->sad); 649 650 if (wait_mask == 0) { 651 *status = general_ibstatus(board, status_queue, clear_mask, set_mask, desc); 652 return 0; 653 } 654 655 mutex_unlock(&board->big_gpib_mutex); 656 657 init_wait_info(&winfo); 658 winfo.board = board; 659 winfo.usec_timeout = usec_timeout; 660 start_wait_timer(&winfo); 661 662 if (wait_event_interruptible(board->wait, wait_satisfied(&winfo, status_queue, 663 wait_mask, status, desc))) { 664 dev_dbg(board->gpib_dev, "wait interrupted\n"); 665 retval = -ERESTARTSYS; 666 } 667 remove_wait_timer(&winfo); 668 669 if (retval) 670 return retval; 671 if (mutex_lock_interruptible(&board->big_gpib_mutex)) 672 return -ERESTARTSYS; 673 674 /* make sure we only clear status bits that we are reporting */ 675 if (*status & clear_mask || set_mask) 676 general_ibstatus(board, status_queue, *status & clear_mask, set_mask, NULL); 677 678 return 0; 679 } 680 681 /* 682 * IBWRT 683 * Write cnt bytes of data from buf to the GPIB. The write 684 * operation terminates only on I/O complete. 685 * 686 * NOTE: 687 * 1. Prior to beginning the write, the interface is 688 * placed in the controller standby state. 689 * 2. Prior to calling ibwrt, the intended devices as 690 * well as the interface board itself must be 691 * addressed by calling ibcmd. 692 */ 693 int ibwrt(struct gpib_board *board, u8 *buf, size_t cnt, int send_eoi, size_t *bytes_written) 694 { 695 int ret = 0; 696 int retval; 697 698 if (cnt == 0) 699 return 0; 700 701 if (board->master) { 702 retval = ibgts(board); 703 if (retval < 0) 704 return retval; 705 } 706 os_start_timer(board, board->usec_timeout); 707 ret = board->interface->write(board, buf, cnt, send_eoi, bytes_written); 708 709 if (io_timed_out(board)) 710 ret = -ETIMEDOUT; 711 712 os_remove_timer(board); 713 714 return ret; 715 } 716 717