1 // SPDX-License-Identifier: GPL-2.0 2 /* IEEE-1284 operations for parport. 3 * 4 * This file is for generic IEEE 1284 operations. The idea is that 5 * they are used by the low-level drivers. If they have a special way 6 * of doing something, they can provide their own routines (and put 7 * the function pointers in port->ops); if not, they can just use these 8 * as a fallback. 9 * 10 * Note: Make no assumptions about hardware or architecture in this file! 11 * 12 * Author: Tim Waugh <tim@cyberelk.demon.co.uk> 13 * Fixed AUTOFD polarity in ecp_forward_to_reverse(). Fred Barnes, 1999 14 * Software emulated EPP fixes, Fred Barnes, 04/2001. 15 */ 16 17 18 #include <linux/module.h> 19 #include <linux/parport.h> 20 #include <linux/delay.h> 21 #include <linux/sched/signal.h> 22 #include <linux/uaccess.h> 23 24 #undef DEBUG /* undef me for production */ 25 26 #ifdef CONFIG_LP_CONSOLE 27 #undef DEBUG /* Don't want a garbled console */ 28 #endif 29 30 #ifdef DEBUG 31 #define DPRINTK(stuff...) printk (stuff) 32 #else 33 #define DPRINTK(stuff...) 34 #endif 35 36 /*** * 37 * One-way data transfer functions. * 38 * ***/ 39 40 /* Compatibility mode. */ 41 size_t parport_ieee1284_write_compat (struct parport *port, 42 const void *buffer, size_t len, 43 int flags) 44 { 45 int no_irq = 1; 46 ssize_t count = 0; 47 const unsigned char *addr = buffer; 48 unsigned char byte; 49 struct pardevice *dev = port->physport->cad; 50 unsigned char ctl = (PARPORT_CONTROL_SELECT 51 | PARPORT_CONTROL_INIT); 52 53 if (port->irq != PARPORT_IRQ_NONE) { 54 parport_enable_irq (port); 55 no_irq = 0; 56 } 57 58 port->physport->ieee1284.phase = IEEE1284_PH_FWD_DATA; 59 parport_write_control (port, ctl); 60 parport_data_forward (port); 61 while (count < len) { 62 unsigned long expire = jiffies + dev->timeout; 63 long wait = msecs_to_jiffies(10); 64 unsigned char mask = (PARPORT_STATUS_ERROR 65 | PARPORT_STATUS_BUSY); 66 unsigned char val = (PARPORT_STATUS_ERROR 67 | PARPORT_STATUS_BUSY); 68 69 /* Wait until the peripheral's ready */ 70 do { 71 /* Is the peripheral ready yet? */ 72 if (!parport_wait_peripheral (port, mask, val)) 73 /* Skip the loop */ 74 goto ready; 75 76 /* Is the peripheral upset? */ 77 if ((parport_read_status (port) & 78 (PARPORT_STATUS_PAPEROUT | 79 PARPORT_STATUS_SELECT | 80 PARPORT_STATUS_ERROR)) 81 != (PARPORT_STATUS_SELECT | 82 PARPORT_STATUS_ERROR)) 83 /* If nFault is asserted (i.e. no 84 * error) and PAPEROUT and SELECT are 85 * just red herrings, give the driver 86 * a chance to check it's happy with 87 * that before continuing. */ 88 goto stop; 89 90 /* Have we run out of time? */ 91 if (!time_before (jiffies, expire)) 92 break; 93 94 /* Yield the port for a while. If this is the 95 first time around the loop, don't let go of 96 the port. This way, we find out if we have 97 our interrupt handler called. */ 98 if (count && no_irq) { 99 parport_release (dev); 100 schedule_timeout_interruptible(wait); 101 parport_claim_or_block (dev); 102 } 103 else 104 /* We must have the device claimed here */ 105 parport_wait_event (port, wait); 106 107 /* Is there a signal pending? */ 108 if (signal_pending (current)) 109 break; 110 111 /* Wait longer next time. */ 112 wait *= 2; 113 } while (time_before (jiffies, expire)); 114 115 if (signal_pending (current)) 116 break; 117 118 DPRINTK (KERN_DEBUG "%s: Timed out\n", port->name); 119 break; 120 121 ready: 122 /* Write the character to the data lines. */ 123 byte = *addr++; 124 parport_write_data (port, byte); 125 udelay (1); 126 127 /* Pulse strobe. */ 128 parport_write_control (port, ctl | PARPORT_CONTROL_STROBE); 129 udelay (1); /* strobe */ 130 131 parport_write_control (port, ctl); 132 udelay (1); /* hold */ 133 134 /* Assume the peripheral received it. */ 135 count++; 136 137 /* Let another process run if it needs to. */ 138 if (time_before (jiffies, expire)) 139 if (!parport_yield_blocking (dev) 140 && need_resched()) 141 schedule (); 142 } 143 stop: 144 port->physport->ieee1284.phase = IEEE1284_PH_FWD_IDLE; 145 146 return count; 147 } 148 149 /* Nibble mode. */ 150 size_t parport_ieee1284_read_nibble (struct parport *port, 151 void *buffer, size_t len, 152 int flags) 153 { 154 #ifndef CONFIG_PARPORT_1284 155 return 0; 156 #else 157 unsigned char *buf = buffer; 158 int i; 159 unsigned char byte = 0; 160 161 len *= 2; /* in nibbles */ 162 for (i=0; i < len; i++) { 163 unsigned char nibble; 164 165 /* Does the error line indicate end of data? */ 166 if (((i & 1) == 0) && 167 (parport_read_status(port) & PARPORT_STATUS_ERROR)) { 168 goto end_of_data; 169 } 170 171 /* Event 7: Set nAutoFd low. */ 172 parport_frob_control (port, 173 PARPORT_CONTROL_AUTOFD, 174 PARPORT_CONTROL_AUTOFD); 175 176 /* Event 9: nAck goes low. */ 177 port->ieee1284.phase = IEEE1284_PH_REV_DATA; 178 if (parport_wait_peripheral (port, 179 PARPORT_STATUS_ACK, 0)) { 180 /* Timeout -- no more data? */ 181 DPRINTK (KERN_DEBUG 182 "%s: Nibble timeout at event 9 (%d bytes)\n", 183 port->name, i/2); 184 parport_frob_control (port, PARPORT_CONTROL_AUTOFD, 0); 185 break; 186 } 187 188 189 /* Read a nibble. */ 190 nibble = parport_read_status (port) >> 3; 191 nibble &= ~8; 192 if ((nibble & 0x10) == 0) 193 nibble |= 8; 194 nibble &= 0xf; 195 196 /* Event 10: Set nAutoFd high. */ 197 parport_frob_control (port, PARPORT_CONTROL_AUTOFD, 0); 198 199 /* Event 11: nAck goes high. */ 200 if (parport_wait_peripheral (port, 201 PARPORT_STATUS_ACK, 202 PARPORT_STATUS_ACK)) { 203 /* Timeout -- no more data? */ 204 DPRINTK (KERN_DEBUG 205 "%s: Nibble timeout at event 11\n", 206 port->name); 207 break; 208 } 209 210 if (i & 1) { 211 /* Second nibble */ 212 byte |= nibble << 4; 213 *buf++ = byte; 214 } else 215 byte = nibble; 216 } 217 218 if (i == len) { 219 /* Read the last nibble without checking data avail. */ 220 if (parport_read_status (port) & PARPORT_STATUS_ERROR) { 221 end_of_data: 222 DPRINTK (KERN_DEBUG 223 "%s: No more nibble data (%d bytes)\n", 224 port->name, i/2); 225 226 /* Go to reverse idle phase. */ 227 parport_frob_control (port, 228 PARPORT_CONTROL_AUTOFD, 229 PARPORT_CONTROL_AUTOFD); 230 port->physport->ieee1284.phase = IEEE1284_PH_REV_IDLE; 231 } 232 else 233 port->physport->ieee1284.phase = IEEE1284_PH_HBUSY_DAVAIL; 234 } 235 236 return i/2; 237 #endif /* IEEE1284 support */ 238 } 239 240 /* Byte mode. */ 241 size_t parport_ieee1284_read_byte (struct parport *port, 242 void *buffer, size_t len, 243 int flags) 244 { 245 #ifndef CONFIG_PARPORT_1284 246 return 0; 247 #else 248 unsigned char *buf = buffer; 249 ssize_t count = 0; 250 251 for (count = 0; count < len; count++) { 252 unsigned char byte; 253 254 /* Data available? */ 255 if (parport_read_status (port) & PARPORT_STATUS_ERROR) { 256 goto end_of_data; 257 } 258 259 /* Event 14: Place data bus in high impedance state. */ 260 parport_data_reverse (port); 261 262 /* Event 7: Set nAutoFd low. */ 263 parport_frob_control (port, 264 PARPORT_CONTROL_AUTOFD, 265 PARPORT_CONTROL_AUTOFD); 266 267 /* Event 9: nAck goes low. */ 268 port->physport->ieee1284.phase = IEEE1284_PH_REV_DATA; 269 if (parport_wait_peripheral (port, 270 PARPORT_STATUS_ACK, 271 0)) { 272 /* Timeout -- no more data? */ 273 parport_frob_control (port, PARPORT_CONTROL_AUTOFD, 274 0); 275 DPRINTK (KERN_DEBUG "%s: Byte timeout at event 9\n", 276 port->name); 277 break; 278 } 279 280 byte = parport_read_data (port); 281 *buf++ = byte; 282 283 /* Event 10: Set nAutoFd high */ 284 parport_frob_control (port, PARPORT_CONTROL_AUTOFD, 0); 285 286 /* Event 11: nAck goes high. */ 287 if (parport_wait_peripheral (port, 288 PARPORT_STATUS_ACK, 289 PARPORT_STATUS_ACK)) { 290 /* Timeout -- no more data? */ 291 DPRINTK (KERN_DEBUG "%s: Byte timeout at event 11\n", 292 port->name); 293 break; 294 } 295 296 /* Event 16: Set nStrobe low. */ 297 parport_frob_control (port, 298 PARPORT_CONTROL_STROBE, 299 PARPORT_CONTROL_STROBE); 300 udelay (5); 301 302 /* Event 17: Set nStrobe high. */ 303 parport_frob_control (port, PARPORT_CONTROL_STROBE, 0); 304 } 305 306 if (count == len) { 307 /* Read the last byte without checking data avail. */ 308 if (parport_read_status (port) & PARPORT_STATUS_ERROR) { 309 end_of_data: 310 DPRINTK (KERN_DEBUG 311 "%s: No more byte data (%zd bytes)\n", 312 port->name, count); 313 314 /* Go to reverse idle phase. */ 315 parport_frob_control (port, 316 PARPORT_CONTROL_AUTOFD, 317 PARPORT_CONTROL_AUTOFD); 318 port->physport->ieee1284.phase = IEEE1284_PH_REV_IDLE; 319 } 320 else 321 port->physport->ieee1284.phase = IEEE1284_PH_HBUSY_DAVAIL; 322 } 323 324 return count; 325 #endif /* IEEE1284 support */ 326 } 327 328 /*** * 329 * ECP Functions. * 330 * ***/ 331 332 #ifdef CONFIG_PARPORT_1284 333 334 static inline 335 int ecp_forward_to_reverse (struct parport *port) 336 { 337 int retval; 338 339 /* Event 38: Set nAutoFd low */ 340 parport_frob_control (port, 341 PARPORT_CONTROL_AUTOFD, 342 PARPORT_CONTROL_AUTOFD); 343 parport_data_reverse (port); 344 udelay (5); 345 346 /* Event 39: Set nInit low to initiate bus reversal */ 347 parport_frob_control (port, 348 PARPORT_CONTROL_INIT, 349 0); 350 351 /* Event 40: PError goes low */ 352 retval = parport_wait_peripheral (port, 353 PARPORT_STATUS_PAPEROUT, 0); 354 355 if (!retval) { 356 DPRINTK (KERN_DEBUG "%s: ECP direction: reverse\n", 357 port->name); 358 port->ieee1284.phase = IEEE1284_PH_REV_IDLE; 359 } else { 360 DPRINTK (KERN_DEBUG "%s: ECP direction: failed to reverse\n", 361 port->name); 362 port->ieee1284.phase = IEEE1284_PH_ECP_DIR_UNKNOWN; 363 } 364 365 return retval; 366 } 367 368 static inline 369 int ecp_reverse_to_forward (struct parport *port) 370 { 371 int retval; 372 373 /* Event 47: Set nInit high */ 374 parport_frob_control (port, 375 PARPORT_CONTROL_INIT 376 | PARPORT_CONTROL_AUTOFD, 377 PARPORT_CONTROL_INIT 378 | PARPORT_CONTROL_AUTOFD); 379 380 /* Event 49: PError goes high */ 381 retval = parport_wait_peripheral (port, 382 PARPORT_STATUS_PAPEROUT, 383 PARPORT_STATUS_PAPEROUT); 384 385 if (!retval) { 386 parport_data_forward (port); 387 DPRINTK (KERN_DEBUG "%s: ECP direction: forward\n", 388 port->name); 389 port->ieee1284.phase = IEEE1284_PH_FWD_IDLE; 390 } else { 391 DPRINTK (KERN_DEBUG 392 "%s: ECP direction: failed to switch forward\n", 393 port->name); 394 port->ieee1284.phase = IEEE1284_PH_ECP_DIR_UNKNOWN; 395 } 396 397 398 return retval; 399 } 400 401 #endif /* IEEE1284 support */ 402 403 /* ECP mode, forward channel, data. */ 404 size_t parport_ieee1284_ecp_write_data (struct parport *port, 405 const void *buffer, size_t len, 406 int flags) 407 { 408 #ifndef CONFIG_PARPORT_1284 409 return 0; 410 #else 411 const unsigned char *buf = buffer; 412 size_t written; 413 int retry; 414 415 port = port->physport; 416 417 if (port->ieee1284.phase != IEEE1284_PH_FWD_IDLE) 418 if (ecp_reverse_to_forward (port)) 419 return 0; 420 421 port->ieee1284.phase = IEEE1284_PH_FWD_DATA; 422 423 /* HostAck high (data, not command) */ 424 parport_frob_control (port, 425 PARPORT_CONTROL_AUTOFD 426 | PARPORT_CONTROL_STROBE 427 | PARPORT_CONTROL_INIT, 428 PARPORT_CONTROL_INIT); 429 for (written = 0; written < len; written++, buf++) { 430 unsigned long expire = jiffies + port->cad->timeout; 431 unsigned char byte; 432 433 byte = *buf; 434 try_again: 435 parport_write_data (port, byte); 436 parport_frob_control (port, PARPORT_CONTROL_STROBE, 437 PARPORT_CONTROL_STROBE); 438 udelay (5); 439 for (retry = 0; retry < 100; retry++) { 440 if (!parport_wait_peripheral (port, 441 PARPORT_STATUS_BUSY, 0)) 442 goto success; 443 444 if (signal_pending (current)) { 445 parport_frob_control (port, 446 PARPORT_CONTROL_STROBE, 447 0); 448 break; 449 } 450 } 451 452 /* Time for Host Transfer Recovery (page 41 of IEEE1284) */ 453 DPRINTK (KERN_DEBUG "%s: ECP transfer stalled!\n", port->name); 454 455 parport_frob_control (port, PARPORT_CONTROL_INIT, 456 PARPORT_CONTROL_INIT); 457 udelay (50); 458 if (parport_read_status (port) & PARPORT_STATUS_PAPEROUT) { 459 /* It's buggered. */ 460 parport_frob_control (port, PARPORT_CONTROL_INIT, 0); 461 break; 462 } 463 464 parport_frob_control (port, PARPORT_CONTROL_INIT, 0); 465 udelay (50); 466 if (!(parport_read_status (port) & PARPORT_STATUS_PAPEROUT)) 467 break; 468 469 DPRINTK (KERN_DEBUG "%s: Host transfer recovered\n", 470 port->name); 471 472 if (time_after_eq (jiffies, expire)) break; 473 goto try_again; 474 success: 475 parport_frob_control (port, PARPORT_CONTROL_STROBE, 0); 476 udelay (5); 477 if (parport_wait_peripheral (port, 478 PARPORT_STATUS_BUSY, 479 PARPORT_STATUS_BUSY)) 480 /* Peripheral hasn't accepted the data. */ 481 break; 482 } 483 484 port->ieee1284.phase = IEEE1284_PH_FWD_IDLE; 485 486 return written; 487 #endif /* IEEE1284 support */ 488 } 489 490 /* ECP mode, reverse channel, data. */ 491 size_t parport_ieee1284_ecp_read_data (struct parport *port, 492 void *buffer, size_t len, int flags) 493 { 494 #ifndef CONFIG_PARPORT_1284 495 return 0; 496 #else 497 struct pardevice *dev = port->cad; 498 unsigned char *buf = buffer; 499 int rle_count = 0; /* shut gcc up */ 500 unsigned char ctl; 501 int rle = 0; 502 ssize_t count = 0; 503 504 port = port->physport; 505 506 if (port->ieee1284.phase != IEEE1284_PH_REV_IDLE) 507 if (ecp_forward_to_reverse (port)) 508 return 0; 509 510 port->ieee1284.phase = IEEE1284_PH_REV_DATA; 511 512 /* Set HostAck low to start accepting data. */ 513 ctl = parport_read_control (port); 514 ctl &= ~(PARPORT_CONTROL_STROBE | PARPORT_CONTROL_INIT | 515 PARPORT_CONTROL_AUTOFD); 516 parport_write_control (port, 517 ctl | PARPORT_CONTROL_AUTOFD); 518 while (count < len) { 519 unsigned long expire = jiffies + dev->timeout; 520 unsigned char byte; 521 int command; 522 523 /* Event 43: Peripheral sets nAck low. It can take as 524 long as it wants. */ 525 while (parport_wait_peripheral (port, PARPORT_STATUS_ACK, 0)) { 526 /* The peripheral hasn't given us data in 527 35ms. If we have data to give back to the 528 caller, do it now. */ 529 if (count) 530 goto out; 531 532 /* If we've used up all the time we were allowed, 533 give up altogether. */ 534 if (!time_before (jiffies, expire)) 535 goto out; 536 537 /* Yield the port for a while. */ 538 if (count && dev->port->irq != PARPORT_IRQ_NONE) { 539 parport_release (dev); 540 schedule_timeout_interruptible(msecs_to_jiffies(40)); 541 parport_claim_or_block (dev); 542 } 543 else 544 /* We must have the device claimed here. */ 545 parport_wait_event (port, msecs_to_jiffies(40)); 546 547 /* Is there a signal pending? */ 548 if (signal_pending (current)) 549 goto out; 550 } 551 552 /* Is this a command? */ 553 if (rle) 554 /* The last byte was a run-length count, so 555 this can't be as well. */ 556 command = 0; 557 else 558 command = (parport_read_status (port) & 559 PARPORT_STATUS_BUSY) ? 1 : 0; 560 561 /* Read the data. */ 562 byte = parport_read_data (port); 563 564 /* If this is a channel command, rather than an RLE 565 command or a normal data byte, don't accept it. */ 566 if (command) { 567 if (byte & 0x80) { 568 DPRINTK (KERN_DEBUG "%s: stopping short at " 569 "channel command (%02x)\n", 570 port->name, byte); 571 goto out; 572 } 573 else if (port->ieee1284.mode != IEEE1284_MODE_ECPRLE) 574 DPRINTK (KERN_DEBUG "%s: device illegally " 575 "using RLE; accepting anyway\n", 576 port->name); 577 578 rle_count = byte + 1; 579 580 /* Are we allowed to read that many bytes? */ 581 if (rle_count > (len - count)) { 582 DPRINTK (KERN_DEBUG "%s: leaving %d RLE bytes " 583 "for next time\n", port->name, 584 rle_count); 585 break; 586 } 587 588 rle = 1; 589 } 590 591 /* Event 44: Set HostAck high, acknowledging handshake. */ 592 parport_write_control (port, ctl); 593 594 /* Event 45: The peripheral has 35ms to set nAck high. */ 595 if (parport_wait_peripheral (port, PARPORT_STATUS_ACK, 596 PARPORT_STATUS_ACK)) { 597 /* It's gone wrong. Return what data we have 598 to the caller. */ 599 DPRINTK (KERN_DEBUG "ECP read timed out at 45\n"); 600 601 if (command) 602 printk (KERN_WARNING 603 "%s: command ignored (%02x)\n", 604 port->name, byte); 605 606 break; 607 } 608 609 /* Event 46: Set HostAck low and accept the data. */ 610 parport_write_control (port, 611 ctl | PARPORT_CONTROL_AUTOFD); 612 613 /* If we just read a run-length count, fetch the data. */ 614 if (command) 615 continue; 616 617 /* If this is the byte after a run-length count, decompress. */ 618 if (rle) { 619 rle = 0; 620 memset (buf, byte, rle_count); 621 buf += rle_count; 622 count += rle_count; 623 DPRINTK (KERN_DEBUG "%s: decompressed to %d bytes\n", 624 port->name, rle_count); 625 } else { 626 /* Normal data byte. */ 627 *buf = byte; 628 buf++, count++; 629 } 630 } 631 632 out: 633 port->ieee1284.phase = IEEE1284_PH_REV_IDLE; 634 return count; 635 #endif /* IEEE1284 support */ 636 } 637 638 /* ECP mode, forward channel, commands. */ 639 size_t parport_ieee1284_ecp_write_addr (struct parport *port, 640 const void *buffer, size_t len, 641 int flags) 642 { 643 #ifndef CONFIG_PARPORT_1284 644 return 0; 645 #else 646 const unsigned char *buf = buffer; 647 size_t written; 648 int retry; 649 650 port = port->physport; 651 652 if (port->ieee1284.phase != IEEE1284_PH_FWD_IDLE) 653 if (ecp_reverse_to_forward (port)) 654 return 0; 655 656 port->ieee1284.phase = IEEE1284_PH_FWD_DATA; 657 658 /* HostAck low (command, not data) */ 659 parport_frob_control (port, 660 PARPORT_CONTROL_AUTOFD 661 | PARPORT_CONTROL_STROBE 662 | PARPORT_CONTROL_INIT, 663 PARPORT_CONTROL_AUTOFD 664 | PARPORT_CONTROL_INIT); 665 for (written = 0; written < len; written++, buf++) { 666 unsigned long expire = jiffies + port->cad->timeout; 667 unsigned char byte; 668 669 byte = *buf; 670 try_again: 671 parport_write_data (port, byte); 672 parport_frob_control (port, PARPORT_CONTROL_STROBE, 673 PARPORT_CONTROL_STROBE); 674 udelay (5); 675 for (retry = 0; retry < 100; retry++) { 676 if (!parport_wait_peripheral (port, 677 PARPORT_STATUS_BUSY, 0)) 678 goto success; 679 680 if (signal_pending (current)) { 681 parport_frob_control (port, 682 PARPORT_CONTROL_STROBE, 683 0); 684 break; 685 } 686 } 687 688 /* Time for Host Transfer Recovery (page 41 of IEEE1284) */ 689 DPRINTK (KERN_DEBUG "%s: ECP transfer stalled!\n", port->name); 690 691 parport_frob_control (port, PARPORT_CONTROL_INIT, 692 PARPORT_CONTROL_INIT); 693 udelay (50); 694 if (parport_read_status (port) & PARPORT_STATUS_PAPEROUT) { 695 /* It's buggered. */ 696 parport_frob_control (port, PARPORT_CONTROL_INIT, 0); 697 break; 698 } 699 700 parport_frob_control (port, PARPORT_CONTROL_INIT, 0); 701 udelay (50); 702 if (!(parport_read_status (port) & PARPORT_STATUS_PAPEROUT)) 703 break; 704 705 DPRINTK (KERN_DEBUG "%s: Host transfer recovered\n", 706 port->name); 707 708 if (time_after_eq (jiffies, expire)) break; 709 goto try_again; 710 success: 711 parport_frob_control (port, PARPORT_CONTROL_STROBE, 0); 712 udelay (5); 713 if (parport_wait_peripheral (port, 714 PARPORT_STATUS_BUSY, 715 PARPORT_STATUS_BUSY)) 716 /* Peripheral hasn't accepted the data. */ 717 break; 718 } 719 720 port->ieee1284.phase = IEEE1284_PH_FWD_IDLE; 721 722 return written; 723 #endif /* IEEE1284 support */ 724 } 725 726 /*** * 727 * EPP functions. * 728 * ***/ 729 730 /* EPP mode, forward channel, data. */ 731 size_t parport_ieee1284_epp_write_data (struct parport *port, 732 const void *buffer, size_t len, 733 int flags) 734 { 735 unsigned char *bp = (unsigned char *) buffer; 736 size_t ret = 0; 737 738 /* set EPP idle state (just to make sure) with strobe low */ 739 parport_frob_control (port, 740 PARPORT_CONTROL_STROBE | 741 PARPORT_CONTROL_AUTOFD | 742 PARPORT_CONTROL_SELECT | 743 PARPORT_CONTROL_INIT, 744 PARPORT_CONTROL_STROBE | 745 PARPORT_CONTROL_INIT); 746 port->ops->data_forward (port); 747 for (; len > 0; len--, bp++) { 748 /* Event 62: Write data and set autofd low */ 749 parport_write_data (port, *bp); 750 parport_frob_control (port, PARPORT_CONTROL_AUTOFD, 751 PARPORT_CONTROL_AUTOFD); 752 753 /* Event 58: wait for busy (nWait) to go high */ 754 if (parport_poll_peripheral (port, PARPORT_STATUS_BUSY, 0, 10)) 755 break; 756 757 /* Event 63: set nAutoFd (nDStrb) high */ 758 parport_frob_control (port, PARPORT_CONTROL_AUTOFD, 0); 759 760 /* Event 60: wait for busy (nWait) to go low */ 761 if (parport_poll_peripheral (port, PARPORT_STATUS_BUSY, 762 PARPORT_STATUS_BUSY, 5)) 763 break; 764 765 ret++; 766 } 767 768 /* Event 61: set strobe (nWrite) high */ 769 parport_frob_control (port, PARPORT_CONTROL_STROBE, 0); 770 771 return ret; 772 } 773 774 /* EPP mode, reverse channel, data. */ 775 size_t parport_ieee1284_epp_read_data (struct parport *port, 776 void *buffer, size_t len, 777 int flags) 778 { 779 unsigned char *bp = (unsigned char *) buffer; 780 unsigned ret = 0; 781 782 /* set EPP idle state (just to make sure) with strobe high */ 783 parport_frob_control (port, 784 PARPORT_CONTROL_STROBE | 785 PARPORT_CONTROL_AUTOFD | 786 PARPORT_CONTROL_SELECT | 787 PARPORT_CONTROL_INIT, 788 PARPORT_CONTROL_INIT); 789 port->ops->data_reverse (port); 790 for (; len > 0; len--, bp++) { 791 /* Event 67: set nAutoFd (nDStrb) low */ 792 parport_frob_control (port, 793 PARPORT_CONTROL_AUTOFD, 794 PARPORT_CONTROL_AUTOFD); 795 /* Event 58: wait for Busy to go high */ 796 if (parport_wait_peripheral (port, PARPORT_STATUS_BUSY, 0)) { 797 break; 798 } 799 800 *bp = parport_read_data (port); 801 802 /* Event 63: set nAutoFd (nDStrb) high */ 803 parport_frob_control (port, PARPORT_CONTROL_AUTOFD, 0); 804 805 /* Event 60: wait for Busy to go low */ 806 if (parport_poll_peripheral (port, PARPORT_STATUS_BUSY, 807 PARPORT_STATUS_BUSY, 5)) { 808 break; 809 } 810 811 ret++; 812 } 813 port->ops->data_forward (port); 814 815 return ret; 816 } 817 818 /* EPP mode, forward channel, addresses. */ 819 size_t parport_ieee1284_epp_write_addr (struct parport *port, 820 const void *buffer, size_t len, 821 int flags) 822 { 823 unsigned char *bp = (unsigned char *) buffer; 824 size_t ret = 0; 825 826 /* set EPP idle state (just to make sure) with strobe low */ 827 parport_frob_control (port, 828 PARPORT_CONTROL_STROBE | 829 PARPORT_CONTROL_AUTOFD | 830 PARPORT_CONTROL_SELECT | 831 PARPORT_CONTROL_INIT, 832 PARPORT_CONTROL_STROBE | 833 PARPORT_CONTROL_INIT); 834 port->ops->data_forward (port); 835 for (; len > 0; len--, bp++) { 836 /* Event 56: Write data and set nAStrb low. */ 837 parport_write_data (port, *bp); 838 parport_frob_control (port, PARPORT_CONTROL_SELECT, 839 PARPORT_CONTROL_SELECT); 840 841 /* Event 58: wait for busy (nWait) to go high */ 842 if (parport_poll_peripheral (port, PARPORT_STATUS_BUSY, 0, 10)) 843 break; 844 845 /* Event 59: set nAStrb high */ 846 parport_frob_control (port, PARPORT_CONTROL_SELECT, 0); 847 848 /* Event 60: wait for busy (nWait) to go low */ 849 if (parport_poll_peripheral (port, PARPORT_STATUS_BUSY, 850 PARPORT_STATUS_BUSY, 5)) 851 break; 852 853 ret++; 854 } 855 856 /* Event 61: set strobe (nWrite) high */ 857 parport_frob_control (port, PARPORT_CONTROL_STROBE, 0); 858 859 return ret; 860 } 861 862 /* EPP mode, reverse channel, addresses. */ 863 size_t parport_ieee1284_epp_read_addr (struct parport *port, 864 void *buffer, size_t len, 865 int flags) 866 { 867 unsigned char *bp = (unsigned char *) buffer; 868 unsigned ret = 0; 869 870 /* Set EPP idle state (just to make sure) with strobe high */ 871 parport_frob_control (port, 872 PARPORT_CONTROL_STROBE | 873 PARPORT_CONTROL_AUTOFD | 874 PARPORT_CONTROL_SELECT | 875 PARPORT_CONTROL_INIT, 876 PARPORT_CONTROL_INIT); 877 port->ops->data_reverse (port); 878 for (; len > 0; len--, bp++) { 879 /* Event 64: set nSelectIn (nAStrb) low */ 880 parport_frob_control (port, PARPORT_CONTROL_SELECT, 881 PARPORT_CONTROL_SELECT); 882 883 /* Event 58: wait for Busy to go high */ 884 if (parport_wait_peripheral (port, PARPORT_STATUS_BUSY, 0)) { 885 break; 886 } 887 888 *bp = parport_read_data (port); 889 890 /* Event 59: set nSelectIn (nAStrb) high */ 891 parport_frob_control (port, PARPORT_CONTROL_SELECT, 892 0); 893 894 /* Event 60: wait for Busy to go low */ 895 if (parport_poll_peripheral (port, PARPORT_STATUS_BUSY, 896 PARPORT_STATUS_BUSY, 5)) 897 break; 898 899 ret++; 900 } 901 port->ops->data_forward (port); 902 903 return ret; 904 } 905 906 EXPORT_SYMBOL(parport_ieee1284_ecp_write_data); 907 EXPORT_SYMBOL(parport_ieee1284_ecp_read_data); 908 EXPORT_SYMBOL(parport_ieee1284_ecp_write_addr); 909 EXPORT_SYMBOL(parport_ieee1284_write_compat); 910 EXPORT_SYMBOL(parport_ieee1284_read_nibble); 911 EXPORT_SYMBOL(parport_ieee1284_read_byte); 912 EXPORT_SYMBOL(parport_ieee1284_epp_write_data); 913 EXPORT_SYMBOL(parport_ieee1284_epp_read_data); 914 EXPORT_SYMBOL(parport_ieee1284_epp_write_addr); 915 EXPORT_SYMBOL(parport_ieee1284_epp_read_addr); 916