xref: /linux/drivers/parport/ieee1284_ops.c (revision 54a8a2220c936a47840c9a3d74910c5a56fae2ed)
1 /* IEEE-1284 operations for parport.
2  *
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
7  * as a fallback.
8  *
9  * Note: Make no assumptions about hardware or architecture in this file!
10  *
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.
14  */
15 
16 
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>
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 			port->physport->ieee1284.phase = IEEE1284_PH_HBUSY_DNA;
169 			DPRINTK (KERN_DEBUG
170 				"%s: No more nibble data (%d bytes)\n",
171 				port->name, i/2);
172 
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;
178 			break;
179 		}
180 
181 		/* Event 7: Set nAutoFd low. */
182 		parport_frob_control (port,
183 				      PARPORT_CONTROL_AUTOFD,
184 				      PARPORT_CONTROL_AUTOFD);
185 
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? */
191 			DPRINTK (KERN_DEBUG
192 				 "%s: Nibble timeout at event 9 (%d bytes)\n",
193 				 port->name, i/2);
194 			parport_frob_control (port, PARPORT_CONTROL_AUTOFD, 0);
195 			break;
196 		}
197 
198 
199 		/* Read a nibble. */
200 		nibble = parport_read_status (port) >> 3;
201 		nibble &= ~8;
202 		if ((nibble & 0x10) == 0)
203 			nibble |= 8;
204 		nibble &= 0xf;
205 
206 		/* Event 10: Set nAutoFd high. */
207 		parport_frob_control (port, PARPORT_CONTROL_AUTOFD, 0);
208 
209 		/* Event 11: nAck goes high. */
210 		if (parport_wait_peripheral (port,
211 					     PARPORT_STATUS_ACK,
212 					     PARPORT_STATUS_ACK)) {
213 			/* Timeout -- no more data? */
214 			DPRINTK (KERN_DEBUG
215 				 "%s: Nibble timeout at event 11\n",
216 				 port->name);
217 			break;
218 		}
219 
220 		if (i & 1) {
221 			/* Second nibble */
222 			byte |= nibble << 4;
223 			*buf++ = byte;
224 		} else
225 			byte = nibble;
226 	}
227 
228 	i /= 2; /* i is now in bytes */
229 
230 	if (i == len) {
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;
235 		else
236 			port->ieee1284.phase = IEEE1284_PH_HBUSY_DAVAIL;
237 	}
238 
239 	return i;
240 #endif /* IEEE1284 support */
241 }
242 
243 /* Byte mode. */
244 size_t parport_ieee1284_read_byte (struct parport *port,
245 				   void *buffer, size_t len,
246 				   int flags)
247 {
248 #ifndef CONFIG_PARPORT_1284
249 	return 0;
250 #else
251 	unsigned char *buf = buffer;
252 	ssize_t count = 0;
253 
254 	for (count = 0; count < len; count++) {
255 		unsigned char byte;
256 
257 		/* Data available? */
258 		if (parport_read_status (port) & PARPORT_STATUS_ERROR) {
259 			port->physport->ieee1284.phase = IEEE1284_PH_HBUSY_DNA;
260 			DPRINTK (KERN_DEBUG
261 				 "%s: No more byte data (%Zd bytes)\n",
262 				 port->name, count);
263 
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;
269 			break;
270 		}
271 
272 		/* Event 14: Place data bus in high impedance state. */
273 		parport_data_reverse (port);
274 
275 		/* Event 7: Set nAutoFd low. */
276 		parport_frob_control (port,
277 				      PARPORT_CONTROL_AUTOFD,
278 				      PARPORT_CONTROL_AUTOFD);
279 
280 		/* Event 9: nAck goes low. */
281 		port->physport->ieee1284.phase = IEEE1284_PH_REV_DATA;
282 		if (parport_wait_peripheral (port,
283 					     PARPORT_STATUS_ACK,
284 					     0)) {
285 			/* Timeout -- no more data? */
286 			parport_frob_control (port, PARPORT_CONTROL_AUTOFD,
287 						 0);
288 			DPRINTK (KERN_DEBUG "%s: Byte timeout at event 9\n",
289 				 port->name);
290 			break;
291 		}
292 
293 		byte = parport_read_data (port);
294 		*buf++ = byte;
295 
296 		/* Event 10: Set nAutoFd high */
297 		parport_frob_control (port, PARPORT_CONTROL_AUTOFD, 0);
298 
299 		/* Event 11: nAck goes high. */
300 		if (parport_wait_peripheral (port,
301 					     PARPORT_STATUS_ACK,
302 					     PARPORT_STATUS_ACK)) {
303 			/* Timeout -- no more data? */
304 			DPRINTK (KERN_DEBUG "%s: Byte timeout at event 11\n",
305 				 port->name);
306 			break;
307 		}
308 
309 		/* Event 16: Set nStrobe low. */
310 		parport_frob_control (port,
311 				      PARPORT_CONTROL_STROBE,
312 				      PARPORT_CONTROL_STROBE);
313 		udelay (5);
314 
315 		/* Event 17: Set nStrobe high. */
316 		parport_frob_control (port, PARPORT_CONTROL_STROBE, 0);
317 	}
318 
319 	if (count == len) {
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;
324 		else
325 			port->ieee1284.phase = IEEE1284_PH_HBUSY_DAVAIL;
326 	}
327 
328 	return count;
329 #endif /* IEEE1284 support */
330 }
331 
332 /***              *
333  * ECP Functions. *
334  *              ***/
335 
336 #ifdef CONFIG_PARPORT_1284
337 
338 static inline
339 int ecp_forward_to_reverse (struct parport *port)
340 {
341 	int retval;
342 
343 	/* Event 38: Set nAutoFd low */
344 	parport_frob_control (port,
345 			      PARPORT_CONTROL_AUTOFD,
346 			      PARPORT_CONTROL_AUTOFD);
347 	parport_data_reverse (port);
348 	udelay (5);
349 
350 	/* Event 39: Set nInit low to initiate bus reversal */
351 	parport_frob_control (port,
352 			      PARPORT_CONTROL_INIT,
353 			      0);
354 
355 	/* Event 40: PError goes low */
356 	retval = parport_wait_peripheral (port,
357 					  PARPORT_STATUS_PAPEROUT, 0);
358 
359 	if (!retval) {
360 		DPRINTK (KERN_DEBUG "%s: ECP direction: reverse\n",
361 			 port->name);
362 		port->ieee1284.phase = IEEE1284_PH_REV_IDLE;
363 	} else {
364 		DPRINTK (KERN_DEBUG "%s: ECP direction: failed to reverse\n",
365 			 port->name);
366 		port->ieee1284.phase = IEEE1284_PH_ECP_DIR_UNKNOWN;
367 	}
368 
369 	return retval;
370 }
371 
372 static inline
373 int ecp_reverse_to_forward (struct parport *port)
374 {
375 	int retval;
376 
377 	/* Event 47: Set nInit high */
378 	parport_frob_control (port,
379 			      PARPORT_CONTROL_INIT
380 			      | PARPORT_CONTROL_AUTOFD,
381 			      PARPORT_CONTROL_INIT
382 			      | PARPORT_CONTROL_AUTOFD);
383 
384 	/* Event 49: PError goes high */
385 	retval = parport_wait_peripheral (port,
386 					  PARPORT_STATUS_PAPEROUT,
387 					  PARPORT_STATUS_PAPEROUT);
388 
389 	if (!retval) {
390 		parport_data_forward (port);
391 		DPRINTK (KERN_DEBUG "%s: ECP direction: forward\n",
392 			 port->name);
393 		port->ieee1284.phase = IEEE1284_PH_FWD_IDLE;
394 	} else {
395 		DPRINTK (KERN_DEBUG
396 			 "%s: ECP direction: failed to switch forward\n",
397 			 port->name);
398 		port->ieee1284.phase = IEEE1284_PH_ECP_DIR_UNKNOWN;
399 	}
400 
401 
402 	return retval;
403 }
404 
405 #endif /* IEEE1284 support */
406 
407 /* ECP mode, forward channel, data. */
408 size_t parport_ieee1284_ecp_write_data (struct parport *port,
409 					const void *buffer, size_t len,
410 					int flags)
411 {
412 #ifndef CONFIG_PARPORT_1284
413 	return 0;
414 #else
415 	const unsigned char *buf = buffer;
416 	size_t written;
417 	int retry;
418 
419 	port = port->physport;
420 
421 	if (port->ieee1284.phase != IEEE1284_PH_FWD_IDLE)
422 		if (ecp_reverse_to_forward (port))
423 			return 0;
424 
425 	port->ieee1284.phase = IEEE1284_PH_FWD_DATA;
426 
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;
435 		unsigned char byte;
436 
437 		byte = *buf;
438 	try_again:
439 		parport_write_data (port, byte);
440 		parport_frob_control (port, PARPORT_CONTROL_STROBE,
441 				      PARPORT_CONTROL_STROBE);
442 		udelay (5);
443 		for (retry = 0; retry < 100; retry++) {
444 			if (!parport_wait_peripheral (port,
445 						      PARPORT_STATUS_BUSY, 0))
446 				goto success;
447 
448 			if (signal_pending (current)) {
449 				parport_frob_control (port,
450 						      PARPORT_CONTROL_STROBE,
451 						      0);
452 				break;
453 			}
454 		}
455 
456 		/* Time for Host Transfer Recovery (page 41 of IEEE1284) */
457 		DPRINTK (KERN_DEBUG "%s: ECP transfer stalled!\n", port->name);
458 
459 		parport_frob_control (port, PARPORT_CONTROL_INIT,
460 				      PARPORT_CONTROL_INIT);
461 		udelay (50);
462 		if (parport_read_status (port) & PARPORT_STATUS_PAPEROUT) {
463 			/* It's buggered. */
464 			parport_frob_control (port, PARPORT_CONTROL_INIT, 0);
465 			break;
466 		}
467 
468 		parport_frob_control (port, PARPORT_CONTROL_INIT, 0);
469 		udelay (50);
470 		if (!(parport_read_status (port) & PARPORT_STATUS_PAPEROUT))
471 			break;
472 
473 		DPRINTK (KERN_DEBUG "%s: Host transfer recovered\n",
474 			 port->name);
475 
476 		if (time_after_eq (jiffies, expire)) break;
477 		goto try_again;
478 	success:
479 		parport_frob_control (port, PARPORT_CONTROL_STROBE, 0);
480 		udelay (5);
481 		if (parport_wait_peripheral (port,
482 					     PARPORT_STATUS_BUSY,
483 					     PARPORT_STATUS_BUSY))
484 			/* Peripheral hasn't accepted the data. */
485 			break;
486 	}
487 
488 	port->ieee1284.phase = IEEE1284_PH_FWD_IDLE;
489 
490 	return written;
491 #endif /* IEEE1284 support */
492 }
493 
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)
497 {
498 #ifndef CONFIG_PARPORT_1284
499 	return 0;
500 #else
501 	struct pardevice *dev = port->cad;
502 	unsigned char *buf = buffer;
503 	int rle_count = 0; /* shut gcc up */
504 	unsigned char ctl;
505 	int rle = 0;
506 	ssize_t count = 0;
507 
508 	port = port->physport;
509 
510 	if (port->ieee1284.phase != IEEE1284_PH_REV_IDLE)
511 		if (ecp_forward_to_reverse (port))
512 			return 0;
513 
514 	port->ieee1284.phase = IEEE1284_PH_REV_DATA;
515 
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;
524 		unsigned char byte;
525 		int command;
526 
527 		/* Event 43: Peripheral sets nAck low. It can take as
528                    long as it wants. */
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. */
533 			if (count)
534 				goto out;
535 
536 			/* If we've used up all the time we were allowed,
537 			   give up altogether. */
538 			if (!time_before (jiffies, expire))
539 				goto out;
540 
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);
546 			}
547 			else
548 				/* We must have the device claimed here. */
549 				parport_wait_event (port, msecs_to_jiffies(40));
550 
551 			/* Is there a signal pending? */
552 			if (signal_pending (current))
553 				goto out;
554 		}
555 
556 		/* Is this a command? */
557 		if (rle)
558 			/* The last byte was a run-length count, so
559                            this can't be as well. */
560 			command = 0;
561 		else
562 			command = (parport_read_status (port) &
563 				   PARPORT_STATUS_BUSY) ? 1 : 0;
564 
565 		/* Read the data. */
566 		byte = parport_read_data (port);
567 
568 		/* If this is a channel command, rather than an RLE
569                    command or a normal data byte, don't accept it. */
570 		if (command) {
571 			if (byte & 0x80) {
572 				DPRINTK (KERN_DEBUG "%s: stopping short at "
573 					 "channel command (%02x)\n",
574 					 port->name, byte);
575 				goto out;
576 			}
577 			else if (port->ieee1284.mode != IEEE1284_MODE_ECPRLE)
578 				DPRINTK (KERN_DEBUG "%s: device illegally "
579 					 "using RLE; accepting anyway\n",
580 					 port->name);
581 
582 			rle_count = byte + 1;
583 
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,
588 					 rle_count);
589 				break;
590 			}
591 
592 			rle = 1;
593 		}
594 
595 		/* Event 44: Set HostAck high, acknowledging handshake. */
596 		parport_write_control (port, ctl);
597 
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
602                            to the caller. */
603 			DPRINTK (KERN_DEBUG "ECP read timed out at 45\n");
604 
605 			if (command)
606 				printk (KERN_WARNING
607 					"%s: command ignored (%02x)\n",
608 					port->name, byte);
609 
610 			break;
611 		}
612 
613 		/* Event 46: Set HostAck low and accept the data. */
614 		parport_write_control (port,
615 				       ctl | PARPORT_CONTROL_AUTOFD);
616 
617 		/* If we just read a run-length count, fetch the data. */
618 		if (command)
619 			continue;
620 
621 		/* If this is the byte after a run-length count, decompress. */
622 		if (rle) {
623 			rle = 0;
624 			memset (buf, byte, rle_count);
625 			buf += rle_count;
626 			count += rle_count;
627 			DPRINTK (KERN_DEBUG "%s: decompressed to %d bytes\n",
628 				 port->name, rle_count);
629 		} else {
630 			/* Normal data byte. */
631 			*buf = byte;
632 			buf++, count++;
633 		}
634 	}
635 
636  out:
637 	port->ieee1284.phase = IEEE1284_PH_REV_IDLE;
638 	return count;
639 #endif /* IEEE1284 support */
640 }
641 
642 /* ECP mode, forward channel, commands. */
643 size_t parport_ieee1284_ecp_write_addr (struct parport *port,
644 					const void *buffer, size_t len,
645 					int flags)
646 {
647 #ifndef CONFIG_PARPORT_1284
648 	return 0;
649 #else
650 	const unsigned char *buf = buffer;
651 	size_t written;
652 	int retry;
653 
654 	port = port->physport;
655 
656 	if (port->ieee1284.phase != IEEE1284_PH_FWD_IDLE)
657 		if (ecp_reverse_to_forward (port))
658 			return 0;
659 
660 	port->ieee1284.phase = IEEE1284_PH_FWD_DATA;
661 
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;
671 		unsigned char byte;
672 
673 		byte = *buf;
674 	try_again:
675 		parport_write_data (port, byte);
676 		parport_frob_control (port, PARPORT_CONTROL_STROBE,
677 				      PARPORT_CONTROL_STROBE);
678 		udelay (5);
679 		for (retry = 0; retry < 100; retry++) {
680 			if (!parport_wait_peripheral (port,
681 						      PARPORT_STATUS_BUSY, 0))
682 				goto success;
683 
684 			if (signal_pending (current)) {
685 				parport_frob_control (port,
686 						      PARPORT_CONTROL_STROBE,
687 						      0);
688 				break;
689 			}
690 		}
691 
692 		/* Time for Host Transfer Recovery (page 41 of IEEE1284) */
693 		DPRINTK (KERN_DEBUG "%s: ECP transfer stalled!\n", port->name);
694 
695 		parport_frob_control (port, PARPORT_CONTROL_INIT,
696 				      PARPORT_CONTROL_INIT);
697 		udelay (50);
698 		if (parport_read_status (port) & PARPORT_STATUS_PAPEROUT) {
699 			/* It's buggered. */
700 			parport_frob_control (port, PARPORT_CONTROL_INIT, 0);
701 			break;
702 		}
703 
704 		parport_frob_control (port, PARPORT_CONTROL_INIT, 0);
705 		udelay (50);
706 		if (!(parport_read_status (port) & PARPORT_STATUS_PAPEROUT))
707 			break;
708 
709 		DPRINTK (KERN_DEBUG "%s: Host transfer recovered\n",
710 			 port->name);
711 
712 		if (time_after_eq (jiffies, expire)) break;
713 		goto try_again;
714 	success:
715 		parport_frob_control (port, PARPORT_CONTROL_STROBE, 0);
716 		udelay (5);
717 		if (parport_wait_peripheral (port,
718 					     PARPORT_STATUS_BUSY,
719 					     PARPORT_STATUS_BUSY))
720 			/* Peripheral hasn't accepted the data. */
721 			break;
722 	}
723 
724 	port->ieee1284.phase = IEEE1284_PH_FWD_IDLE;
725 
726 	return written;
727 #endif /* IEEE1284 support */
728 }
729 
730 /***              *
731  * EPP functions. *
732  *              ***/
733 
734 /* EPP mode, forward channel, data. */
735 size_t parport_ieee1284_epp_write_data (struct parport *port,
736 					const void *buffer, size_t len,
737 					int flags)
738 {
739 	unsigned char *bp = (unsigned char *) buffer;
740 	size_t ret = 0;
741 
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);
756 
757 		/* Event 58: wait for busy (nWait) to go high */
758 		if (parport_poll_peripheral (port, PARPORT_STATUS_BUSY, 0, 10))
759 			break;
760 
761 		/* Event 63: set nAutoFd (nDStrb) high */
762 		parport_frob_control (port, PARPORT_CONTROL_AUTOFD, 0);
763 
764 		/* Event 60: wait for busy (nWait) to go low */
765 		if (parport_poll_peripheral (port, PARPORT_STATUS_BUSY,
766 					     PARPORT_STATUS_BUSY, 5))
767 			break;
768 
769 		ret++;
770 	}
771 
772 	/* Event 61: set strobe (nWrite) high */
773 	parport_frob_control (port, PARPORT_CONTROL_STROBE, 0);
774 
775 	return ret;
776 }
777 
778 /* EPP mode, reverse channel, data. */
779 size_t parport_ieee1284_epp_read_data (struct parport *port,
780 				       void *buffer, size_t len,
781 				       int flags)
782 {
783 	unsigned char *bp = (unsigned char *) buffer;
784 	unsigned ret = 0;
785 
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)) {
801 			break;
802 		}
803 
804 		*bp = parport_read_data (port);
805 
806 		/* Event 63: set nAutoFd (nDStrb) high */
807 		parport_frob_control (port, PARPORT_CONTROL_AUTOFD, 0);
808 
809 		/* Event 60: wait for Busy to go low */
810 		if (parport_poll_peripheral (port, PARPORT_STATUS_BUSY,
811 					     PARPORT_STATUS_BUSY, 5)) {
812 			break;
813 		}
814 
815 		ret++;
816 	}
817 	port->ops->data_forward (port);
818 
819 	return ret;
820 }
821 
822 /* EPP mode, forward channel, addresses. */
823 size_t parport_ieee1284_epp_write_addr (struct parport *port,
824 					const void *buffer, size_t len,
825 					int flags)
826 {
827 	unsigned char *bp = (unsigned char *) buffer;
828 	size_t ret = 0;
829 
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);
844 
845 		/* Event 58: wait for busy (nWait) to go high */
846 		if (parport_poll_peripheral (port, PARPORT_STATUS_BUSY, 0, 10))
847 			break;
848 
849 		/* Event 59: set nAStrb high */
850 		parport_frob_control (port, PARPORT_CONTROL_SELECT, 0);
851 
852 		/* Event 60: wait for busy (nWait) to go low */
853 		if (parport_poll_peripheral (port, PARPORT_STATUS_BUSY,
854 					     PARPORT_STATUS_BUSY, 5))
855 			break;
856 
857 		ret++;
858 	}
859 
860 	/* Event 61: set strobe (nWrite) high */
861 	parport_frob_control (port, PARPORT_CONTROL_STROBE, 0);
862 
863 	return ret;
864 }
865 
866 /* EPP mode, reverse channel, addresses. */
867 size_t parport_ieee1284_epp_read_addr (struct parport *port,
868 				       void *buffer, size_t len,
869 				       int flags)
870 {
871 	unsigned char *bp = (unsigned char *) buffer;
872 	unsigned ret = 0;
873 
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);
886 
887 		/* Event 58: wait for Busy to go high */
888 		if (parport_wait_peripheral (port, PARPORT_STATUS_BUSY, 0)) {
889 			break;
890 		}
891 
892 		*bp = parport_read_data (port);
893 
894 		/* Event 59: set nSelectIn (nAStrb) high */
895 		parport_frob_control (port, PARPORT_CONTROL_SELECT,
896 				      PARPORT_CONTROL_SELECT);
897 
898 		/* Event 60: wait for Busy to go low */
899 		if (parport_poll_peripheral (port, PARPORT_STATUS_BUSY,
900 					     PARPORT_STATUS_BUSY, 5))
901 			break;
902 
903 		ret++;
904 	}
905 	port->ops->data_forward (port);
906 
907 	return ret;
908 }
909 
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);
920