1 /* IEEE-1284 operations for parport.
3 * This file is for generic IEEE 1284 operations. The idea is that
4 * they are used by the low-level drivers. If they have a special way
5 * of doing something, they can provide their own routines (and put
6 * the function pointers in port->ops); if not, they can just use these
9 * Note: Make no assumptions about hardware or architecture in this file!
11 * Author: Tim Waugh <tim@cyberelk.demon.co.uk>
12 * Fixed AUTOFD polarity in ecp_forward_to_reverse(). Fred Barnes, 1999
13 * Software emulated EPP fixes, Fred Barnes, 04/2001.
17 #include <linux/config.h>
18 #include <linux/module.h>
19 #include <linux/parport.h>
20 #include <linux/delay.h>
21 #include <linux/sched.h>
22 #include <asm/uaccess.h>
24 #undef DEBUG /* undef me for production */
26 #ifdef CONFIG_LP_CONSOLE
27 #undef DEBUG /* Don't want a garbled console */
31 #define DPRINTK(stuff...) printk (stuff)
33 #define DPRINTK(stuff...)
37 * One-way data transfer functions. *
40 /* Compatibility mode. */
41 size_t parport_ieee1284_write_compat (struct parport *port,
42 const void *buffer, size_t len,
47 const unsigned char *addr = buffer;
49 struct pardevice *dev = port->physport->cad;
50 unsigned char ctl = (PARPORT_CONTROL_SELECT
51 | PARPORT_CONTROL_INIT);
53 if (port->irq != PARPORT_IRQ_NONE) {
54 parport_enable_irq (port);
58 port->physport->ieee1284.phase = IEEE1284_PH_FWD_DATA;
59 parport_write_control (port, ctl);
60 parport_data_forward (port);
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);
69 /* Wait until the peripheral's ready */
71 /* Is the peripheral ready yet? */
72 if (!parport_wait_peripheral (port, mask, val))
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. */
90 /* Have we run out of time? */
91 if (!time_before (jiffies, expire))
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);
104 /* We must have the device claimed here */
105 parport_wait_event (port, wait);
107 /* Is there a signal pending? */
108 if (signal_pending (current))
111 /* Wait longer next time. */
113 } while (time_before (jiffies, expire));
115 if (signal_pending (current))
118 DPRINTK (KERN_DEBUG "%s: Timed out\n", port->name);
122 /* Write the character to the data lines. */
124 parport_write_data (port, byte);
128 parport_write_control (port, ctl | PARPORT_CONTROL_STROBE);
129 udelay (1); /* strobe */
131 parport_write_control (port, ctl);
132 udelay (1); /* hold */
134 /* Assume the peripheral received it. */
137 /* Let another process run if it needs to. */
138 if (time_before (jiffies, expire))
139 if (!parport_yield_blocking (dev)
144 port->physport->ieee1284.phase = IEEE1284_PH_FWD_IDLE;
150 size_t parport_ieee1284_read_nibble (struct parport *port,
151 void *buffer, size_t len,
154 #ifndef CONFIG_PARPORT_1284
157 unsigned char *buf = buffer;
159 unsigned char byte = 0;
161 len *= 2; /* in nibbles */
162 for (i=0; i < len; i++) {
163 unsigned char nibble;
165 /* Does the error line indicate end of data? */
166 if (((i & 1) == 0) &&
167 (parport_read_status(port) & PARPORT_STATUS_ERROR)) {
168 port->physport->ieee1284.phase = IEEE1284_PH_HBUSY_DNA;
170 "%s: No more nibble data (%d bytes)\n",
173 /* Go to reverse idle phase. */
174 parport_frob_control (port,
175 PARPORT_CONTROL_AUTOFD,
176 PARPORT_CONTROL_AUTOFD);
177 port->physport->ieee1284.phase = IEEE1284_PH_REV_IDLE;
181 /* Event 7: Set nAutoFd low. */
182 parport_frob_control (port,
183 PARPORT_CONTROL_AUTOFD,
184 PARPORT_CONTROL_AUTOFD);
186 /* Event 9: nAck goes low. */
187 port->ieee1284.phase = IEEE1284_PH_REV_DATA;
188 if (parport_wait_peripheral (port,
189 PARPORT_STATUS_ACK, 0)) {
190 /* Timeout -- no more data? */
192 "%s: Nibble timeout at event 9 (%d bytes)\n",
194 parport_frob_control (port, PARPORT_CONTROL_AUTOFD, 0);
200 nibble = parport_read_status (port) >> 3;
202 if ((nibble & 0x10) == 0)
206 /* Event 10: Set nAutoFd high. */
207 parport_frob_control (port, PARPORT_CONTROL_AUTOFD, 0);
209 /* Event 11: nAck goes high. */
210 if (parport_wait_peripheral (port,
212 PARPORT_STATUS_ACK)) {
213 /* Timeout -- no more data? */
215 "%s: Nibble timeout at event 11\n",
228 i /= 2; /* i is now in bytes */
231 /* Read the last nibble without checking data avail. */
232 port = port->physport;
233 if (parport_read_status (port) & PARPORT_STATUS_ERROR)
234 port->ieee1284.phase = IEEE1284_PH_HBUSY_DNA;
236 port->ieee1284.phase = IEEE1284_PH_HBUSY_DAVAIL;
240 #endif /* IEEE1284 support */
244 size_t parport_ieee1284_read_byte (struct parport *port,
245 void *buffer, size_t len,
248 #ifndef CONFIG_PARPORT_1284
251 unsigned char *buf = buffer;
254 for (count = 0; count < len; count++) {
257 /* Data available? */
258 if (parport_read_status (port) & PARPORT_STATUS_ERROR) {
259 port->physport->ieee1284.phase = IEEE1284_PH_HBUSY_DNA;
261 "%s: No more byte data (%Zd bytes)\n",
264 /* Go to reverse idle phase. */
265 parport_frob_control (port,
266 PARPORT_CONTROL_AUTOFD,
267 PARPORT_CONTROL_AUTOFD);
268 port->physport->ieee1284.phase = IEEE1284_PH_REV_IDLE;
272 /* Event 14: Place data bus in high impedance state. */
273 parport_data_reverse (port);
275 /* Event 7: Set nAutoFd low. */
276 parport_frob_control (port,
277 PARPORT_CONTROL_AUTOFD,
278 PARPORT_CONTROL_AUTOFD);
280 /* Event 9: nAck goes low. */
281 port->physport->ieee1284.phase = IEEE1284_PH_REV_DATA;
282 if (parport_wait_peripheral (port,
285 /* Timeout -- no more data? */
286 parport_frob_control (port, PARPORT_CONTROL_AUTOFD,
288 DPRINTK (KERN_DEBUG "%s: Byte timeout at event 9\n",
293 byte = parport_read_data (port);
296 /* Event 10: Set nAutoFd high */
297 parport_frob_control (port, PARPORT_CONTROL_AUTOFD, 0);
299 /* Event 11: nAck goes high. */
300 if (parport_wait_peripheral (port,
302 PARPORT_STATUS_ACK)) {
303 /* Timeout -- no more data? */
304 DPRINTK (KERN_DEBUG "%s: Byte timeout at event 11\n",
309 /* Event 16: Set nStrobe low. */
310 parport_frob_control (port,
311 PARPORT_CONTROL_STROBE,
312 PARPORT_CONTROL_STROBE);
315 /* Event 17: Set nStrobe high. */
316 parport_frob_control (port, PARPORT_CONTROL_STROBE, 0);
320 /* Read the last byte without checking data avail. */
321 port = port->physport;
322 if (parport_read_status (port) & PARPORT_STATUS_ERROR)
323 port->ieee1284.phase = IEEE1284_PH_HBUSY_DNA;
325 port->ieee1284.phase = IEEE1284_PH_HBUSY_DAVAIL;
329 #endif /* IEEE1284 support */
336 #ifdef CONFIG_PARPORT_1284
339 int ecp_forward_to_reverse (struct parport *port)
343 /* Event 38: Set nAutoFd low */
344 parport_frob_control (port,
345 PARPORT_CONTROL_AUTOFD,
346 PARPORT_CONTROL_AUTOFD);
347 parport_data_reverse (port);
350 /* Event 39: Set nInit low to initiate bus reversal */
351 parport_frob_control (port,
352 PARPORT_CONTROL_INIT,
355 /* Event 40: PError goes low */
356 retval = parport_wait_peripheral (port,
357 PARPORT_STATUS_PAPEROUT, 0);
360 DPRINTK (KERN_DEBUG "%s: ECP direction: reverse\n",
362 port->ieee1284.phase = IEEE1284_PH_REV_IDLE;
364 DPRINTK (KERN_DEBUG "%s: ECP direction: failed to reverse\n",
366 port->ieee1284.phase = IEEE1284_PH_ECP_DIR_UNKNOWN;
373 int ecp_reverse_to_forward (struct parport *port)
377 /* Event 47: Set nInit high */
378 parport_frob_control (port,
380 | PARPORT_CONTROL_AUTOFD,
382 | PARPORT_CONTROL_AUTOFD);
384 /* Event 49: PError goes high */
385 retval = parport_wait_peripheral (port,
386 PARPORT_STATUS_PAPEROUT,
387 PARPORT_STATUS_PAPEROUT);
390 parport_data_forward (port);
391 DPRINTK (KERN_DEBUG "%s: ECP direction: forward\n",
393 port->ieee1284.phase = IEEE1284_PH_FWD_IDLE;
396 "%s: ECP direction: failed to switch forward\n",
398 port->ieee1284.phase = IEEE1284_PH_ECP_DIR_UNKNOWN;
405 #endif /* IEEE1284 support */
407 /* ECP mode, forward channel, data. */
408 size_t parport_ieee1284_ecp_write_data (struct parport *port,
409 const void *buffer, size_t len,
412 #ifndef CONFIG_PARPORT_1284
415 const unsigned char *buf = buffer;
419 port = port->physport;
421 if (port->ieee1284.phase != IEEE1284_PH_FWD_IDLE)
422 if (ecp_reverse_to_forward (port))
425 port->ieee1284.phase = IEEE1284_PH_FWD_DATA;
427 /* HostAck high (data, not command) */
428 parport_frob_control (port,
429 PARPORT_CONTROL_AUTOFD
430 | PARPORT_CONTROL_STROBE
431 | PARPORT_CONTROL_INIT,
432 PARPORT_CONTROL_INIT);
433 for (written = 0; written < len; written++, buf++) {
434 unsigned long expire = jiffies + port->cad->timeout;
439 parport_write_data (port, byte);
440 parport_frob_control (port, PARPORT_CONTROL_STROBE,
441 PARPORT_CONTROL_STROBE);
443 for (retry = 0; retry < 100; retry++) {
444 if (!parport_wait_peripheral (port,
445 PARPORT_STATUS_BUSY, 0))
448 if (signal_pending (current)) {
449 parport_frob_control (port,
450 PARPORT_CONTROL_STROBE,
456 /* Time for Host Transfer Recovery (page 41 of IEEE1284) */
457 DPRINTK (KERN_DEBUG "%s: ECP transfer stalled!\n", port->name);
459 parport_frob_control (port, PARPORT_CONTROL_INIT,
460 PARPORT_CONTROL_INIT);
462 if (parport_read_status (port) & PARPORT_STATUS_PAPEROUT) {
464 parport_frob_control (port, PARPORT_CONTROL_INIT, 0);
468 parport_frob_control (port, PARPORT_CONTROL_INIT, 0);
470 if (!(parport_read_status (port) & PARPORT_STATUS_PAPEROUT))
473 DPRINTK (KERN_DEBUG "%s: Host transfer recovered\n",
476 if (time_after_eq (jiffies, expire)) break;
479 parport_frob_control (port, PARPORT_CONTROL_STROBE, 0);
481 if (parport_wait_peripheral (port,
483 PARPORT_STATUS_BUSY))
484 /* Peripheral hasn't accepted the data. */
488 port->ieee1284.phase = IEEE1284_PH_FWD_IDLE;
491 #endif /* IEEE1284 support */
494 /* ECP mode, reverse channel, data. */
495 size_t parport_ieee1284_ecp_read_data (struct parport *port,
496 void *buffer, size_t len, int flags)
498 #ifndef CONFIG_PARPORT_1284
501 struct pardevice *dev = port->cad;
502 unsigned char *buf = buffer;
503 int rle_count = 0; /* shut gcc up */
508 port = port->physport;
510 if (port->ieee1284.phase != IEEE1284_PH_REV_IDLE)
511 if (ecp_forward_to_reverse (port))
514 port->ieee1284.phase = IEEE1284_PH_REV_DATA;
516 /* Set HostAck low to start accepting data. */
517 ctl = parport_read_control (port);
518 ctl &= ~(PARPORT_CONTROL_STROBE | PARPORT_CONTROL_INIT |
519 PARPORT_CONTROL_AUTOFD);
520 parport_write_control (port,
521 ctl | PARPORT_CONTROL_AUTOFD);
522 while (count < len) {
523 unsigned long expire = jiffies + dev->timeout;
527 /* Event 43: Peripheral sets nAck low. It can take as
529 while (parport_wait_peripheral (port, PARPORT_STATUS_ACK, 0)) {
530 /* The peripheral hasn't given us data in
531 35ms. If we have data to give back to the
532 caller, do it now. */
536 /* If we've used up all the time we were allowed,
537 give up altogether. */
538 if (!time_before (jiffies, expire))
541 /* Yield the port for a while. */
542 if (count && dev->port->irq != PARPORT_IRQ_NONE) {
543 parport_release (dev);
544 schedule_timeout_interruptible(msecs_to_jiffies(40));
545 parport_claim_or_block (dev);
548 /* We must have the device claimed here. */
549 parport_wait_event (port, msecs_to_jiffies(40));
551 /* Is there a signal pending? */
552 if (signal_pending (current))
556 /* Is this a command? */
558 /* The last byte was a run-length count, so
559 this can't be as well. */
562 command = (parport_read_status (port) &
563 PARPORT_STATUS_BUSY) ? 1 : 0;
566 byte = parport_read_data (port);
568 /* If this is a channel command, rather than an RLE
569 command or a normal data byte, don't accept it. */
572 DPRINTK (KERN_DEBUG "%s: stopping short at "
573 "channel command (%02x)\n",
577 else if (port->ieee1284.mode != IEEE1284_MODE_ECPRLE)
578 DPRINTK (KERN_DEBUG "%s: device illegally "
579 "using RLE; accepting anyway\n",
582 rle_count = byte + 1;
584 /* Are we allowed to read that many bytes? */
585 if (rle_count > (len - count)) {
586 DPRINTK (KERN_DEBUG "%s: leaving %d RLE bytes "
587 "for next time\n", port->name,
595 /* Event 44: Set HostAck high, acknowledging handshake. */
596 parport_write_control (port, ctl);
598 /* Event 45: The peripheral has 35ms to set nAck high. */
599 if (parport_wait_peripheral (port, PARPORT_STATUS_ACK,
600 PARPORT_STATUS_ACK)) {
601 /* It's gone wrong. Return what data we have
603 DPRINTK (KERN_DEBUG "ECP read timed out at 45\n");
607 "%s: command ignored (%02x)\n",
613 /* Event 46: Set HostAck low and accept the data. */
614 parport_write_control (port,
615 ctl | PARPORT_CONTROL_AUTOFD);
617 /* If we just read a run-length count, fetch the data. */
621 /* If this is the byte after a run-length count, decompress. */
624 memset (buf, byte, rle_count);
627 DPRINTK (KERN_DEBUG "%s: decompressed to %d bytes\n",
628 port->name, rle_count);
630 /* Normal data byte. */
637 port->ieee1284.phase = IEEE1284_PH_REV_IDLE;
639 #endif /* IEEE1284 support */
642 /* ECP mode, forward channel, commands. */
643 size_t parport_ieee1284_ecp_write_addr (struct parport *port,
644 const void *buffer, size_t len,
647 #ifndef CONFIG_PARPORT_1284
650 const unsigned char *buf = buffer;
654 port = port->physport;
656 if (port->ieee1284.phase != IEEE1284_PH_FWD_IDLE)
657 if (ecp_reverse_to_forward (port))
660 port->ieee1284.phase = IEEE1284_PH_FWD_DATA;
662 /* HostAck low (command, not data) */
663 parport_frob_control (port,
664 PARPORT_CONTROL_AUTOFD
665 | PARPORT_CONTROL_STROBE
666 | PARPORT_CONTROL_INIT,
667 PARPORT_CONTROL_AUTOFD
668 | PARPORT_CONTROL_INIT);
669 for (written = 0; written < len; written++, buf++) {
670 unsigned long expire = jiffies + port->cad->timeout;
675 parport_write_data (port, byte);
676 parport_frob_control (port, PARPORT_CONTROL_STROBE,
677 PARPORT_CONTROL_STROBE);
679 for (retry = 0; retry < 100; retry++) {
680 if (!parport_wait_peripheral (port,
681 PARPORT_STATUS_BUSY, 0))
684 if (signal_pending (current)) {
685 parport_frob_control (port,
686 PARPORT_CONTROL_STROBE,
692 /* Time for Host Transfer Recovery (page 41 of IEEE1284) */
693 DPRINTK (KERN_DEBUG "%s: ECP transfer stalled!\n", port->name);
695 parport_frob_control (port, PARPORT_CONTROL_INIT,
696 PARPORT_CONTROL_INIT);
698 if (parport_read_status (port) & PARPORT_STATUS_PAPEROUT) {
700 parport_frob_control (port, PARPORT_CONTROL_INIT, 0);
704 parport_frob_control (port, PARPORT_CONTROL_INIT, 0);
706 if (!(parport_read_status (port) & PARPORT_STATUS_PAPEROUT))
709 DPRINTK (KERN_DEBUG "%s: Host transfer recovered\n",
712 if (time_after_eq (jiffies, expire)) break;
715 parport_frob_control (port, PARPORT_CONTROL_STROBE, 0);
717 if (parport_wait_peripheral (port,
719 PARPORT_STATUS_BUSY))
720 /* Peripheral hasn't accepted the data. */
724 port->ieee1284.phase = IEEE1284_PH_FWD_IDLE;
727 #endif /* IEEE1284 support */
734 /* EPP mode, forward channel, data. */
735 size_t parport_ieee1284_epp_write_data (struct parport *port,
736 const void *buffer, size_t len,
739 unsigned char *bp = (unsigned char *) buffer;
742 /* set EPP idle state (just to make sure) with strobe low */
743 parport_frob_control (port,
744 PARPORT_CONTROL_STROBE |
745 PARPORT_CONTROL_AUTOFD |
746 PARPORT_CONTROL_SELECT |
747 PARPORT_CONTROL_INIT,
748 PARPORT_CONTROL_STROBE |
749 PARPORT_CONTROL_INIT);
750 port->ops->data_forward (port);
751 for (; len > 0; len--, bp++) {
752 /* Event 62: Write data and set autofd low */
753 parport_write_data (port, *bp);
754 parport_frob_control (port, PARPORT_CONTROL_AUTOFD,
755 PARPORT_CONTROL_AUTOFD);
757 /* Event 58: wait for busy (nWait) to go high */
758 if (parport_poll_peripheral (port, PARPORT_STATUS_BUSY, 0, 10))
761 /* Event 63: set nAutoFd (nDStrb) high */
762 parport_frob_control (port, PARPORT_CONTROL_AUTOFD, 0);
764 /* Event 60: wait for busy (nWait) to go low */
765 if (parport_poll_peripheral (port, PARPORT_STATUS_BUSY,
766 PARPORT_STATUS_BUSY, 5))
772 /* Event 61: set strobe (nWrite) high */
773 parport_frob_control (port, PARPORT_CONTROL_STROBE, 0);
778 /* EPP mode, reverse channel, data. */
779 size_t parport_ieee1284_epp_read_data (struct parport *port,
780 void *buffer, size_t len,
783 unsigned char *bp = (unsigned char *) buffer;
786 /* set EPP idle state (just to make sure) with strobe high */
787 parport_frob_control (port,
788 PARPORT_CONTROL_STROBE |
789 PARPORT_CONTROL_AUTOFD |
790 PARPORT_CONTROL_SELECT |
791 PARPORT_CONTROL_INIT,
792 PARPORT_CONTROL_INIT);
793 port->ops->data_reverse (port);
794 for (; len > 0; len--, bp++) {
795 /* Event 67: set nAutoFd (nDStrb) low */
796 parport_frob_control (port,
797 PARPORT_CONTROL_AUTOFD,
798 PARPORT_CONTROL_AUTOFD);
799 /* Event 58: wait for Busy to go high */
800 if (parport_wait_peripheral (port, PARPORT_STATUS_BUSY, 0)) {
804 *bp = parport_read_data (port);
806 /* Event 63: set nAutoFd (nDStrb) high */
807 parport_frob_control (port, PARPORT_CONTROL_AUTOFD, 0);
809 /* Event 60: wait for Busy to go low */
810 if (parport_poll_peripheral (port, PARPORT_STATUS_BUSY,
811 PARPORT_STATUS_BUSY, 5)) {
817 port->ops->data_forward (port);
822 /* EPP mode, forward channel, addresses. */
823 size_t parport_ieee1284_epp_write_addr (struct parport *port,
824 const void *buffer, size_t len,
827 unsigned char *bp = (unsigned char *) buffer;
830 /* set EPP idle state (just to make sure) with strobe low */
831 parport_frob_control (port,
832 PARPORT_CONTROL_STROBE |
833 PARPORT_CONTROL_AUTOFD |
834 PARPORT_CONTROL_SELECT |
835 PARPORT_CONTROL_INIT,
836 PARPORT_CONTROL_STROBE |
837 PARPORT_CONTROL_INIT);
838 port->ops->data_forward (port);
839 for (; len > 0; len--, bp++) {
840 /* Event 56: Write data and set nAStrb low. */
841 parport_write_data (port, *bp);
842 parport_frob_control (port, PARPORT_CONTROL_SELECT,
843 PARPORT_CONTROL_SELECT);
845 /* Event 58: wait for busy (nWait) to go high */
846 if (parport_poll_peripheral (port, PARPORT_STATUS_BUSY, 0, 10))
849 /* Event 59: set nAStrb high */
850 parport_frob_control (port, PARPORT_CONTROL_SELECT, 0);
852 /* Event 60: wait for busy (nWait) to go low */
853 if (parport_poll_peripheral (port, PARPORT_STATUS_BUSY,
854 PARPORT_STATUS_BUSY, 5))
860 /* Event 61: set strobe (nWrite) high */
861 parport_frob_control (port, PARPORT_CONTROL_STROBE, 0);
866 /* EPP mode, reverse channel, addresses. */
867 size_t parport_ieee1284_epp_read_addr (struct parport *port,
868 void *buffer, size_t len,
871 unsigned char *bp = (unsigned char *) buffer;
874 /* Set EPP idle state (just to make sure) with strobe high */
875 parport_frob_control (port,
876 PARPORT_CONTROL_STROBE |
877 PARPORT_CONTROL_AUTOFD |
878 PARPORT_CONTROL_SELECT |
879 PARPORT_CONTROL_INIT,
880 PARPORT_CONTROL_INIT);
881 port->ops->data_reverse (port);
882 for (; len > 0; len--, bp++) {
883 /* Event 64: set nSelectIn (nAStrb) low */
884 parport_frob_control (port, PARPORT_CONTROL_SELECT,
885 PARPORT_CONTROL_SELECT);
887 /* Event 58: wait for Busy to go high */
888 if (parport_wait_peripheral (port, PARPORT_STATUS_BUSY, 0)) {
892 *bp = parport_read_data (port);
894 /* Event 59: set nSelectIn (nAStrb) high */
895 parport_frob_control (port, PARPORT_CONTROL_SELECT,
896 PARPORT_CONTROL_SELECT);
898 /* Event 60: wait for Busy to go low */
899 if (parport_poll_peripheral (port, PARPORT_STATUS_BUSY,
900 PARPORT_STATUS_BUSY, 5))
905 port->ops->data_forward (port);
910 EXPORT_SYMBOL(parport_ieee1284_ecp_write_data);
911 EXPORT_SYMBOL(parport_ieee1284_ecp_read_data);
912 EXPORT_SYMBOL(parport_ieee1284_ecp_write_addr);
913 EXPORT_SYMBOL(parport_ieee1284_write_compat);
914 EXPORT_SYMBOL(parport_ieee1284_read_nibble);
915 EXPORT_SYMBOL(parport_ieee1284_read_byte);
916 EXPORT_SYMBOL(parport_ieee1284_epp_write_data);
917 EXPORT_SYMBOL(parport_ieee1284_epp_read_data);
918 EXPORT_SYMBOL(parport_ieee1284_epp_write_addr);
919 EXPORT_SYMBOL(parport_ieee1284_epp_read_addr);