Lines Matching +full:byte +full:- +full:len
1 // SPDX-License-Identifier: GPL-2.0
2 /* IEEE-1284 operations for parport.
5 * they are used by the low-level drivers. If they have a special way
7 * the function pointers in port->ops); if not, they can just use these
37 * One-way data transfer functions. *
42 const void *buffer, size_t len, in parport_ieee1284_write_compat() argument
48 unsigned char byte; in parport_ieee1284_write_compat() local
49 struct pardevice *dev = port->physport->cad; in parport_ieee1284_write_compat()
53 if (port->irq != PARPORT_IRQ_NONE) { in parport_ieee1284_write_compat()
58 port->physport->ieee1284.phase = IEEE1284_PH_FWD_DATA; in parport_ieee1284_write_compat()
61 while (count < len) { in parport_ieee1284_write_compat()
62 unsigned long expire = jiffies + dev->timeout; in parport_ieee1284_write_compat()
118 DPRINTK (KERN_DEBUG "%s: Timed out\n", port->name); in parport_ieee1284_write_compat()
123 byte = *addr++; in parport_ieee1284_write_compat()
124 parport_write_data (port, byte); in parport_ieee1284_write_compat()
144 port->physport->ieee1284.phase = IEEE1284_PH_FWD_IDLE; in parport_ieee1284_write_compat()
151 void *buffer, size_t len, in parport_ieee1284_read_nibble() argument
159 unsigned char byte = 0; in parport_ieee1284_read_nibble()
161 len *= 2; /* in nibbles */ in parport_ieee1284_read_nibble()
162 for (i=0; i < len; i++) { in parport_ieee1284_read_nibble()
177 port->ieee1284.phase = IEEE1284_PH_REV_DATA; in parport_ieee1284_read_nibble()
180 /* Timeout -- no more data? */ in parport_ieee1284_read_nibble()
183 port->name, i/2); in parport_ieee1284_read_nibble()
203 /* Timeout -- no more data? */ in parport_ieee1284_read_nibble()
206 port->name); in parport_ieee1284_read_nibble()
212 byte |= nibble << 4; in parport_ieee1284_read_nibble()
213 *buf++ = byte; in parport_ieee1284_read_nibble()
215 byte = nibble; in parport_ieee1284_read_nibble()
218 if (i == len) { in parport_ieee1284_read_nibble()
224 port->name, i/2); in parport_ieee1284_read_nibble()
230 port->physport->ieee1284.phase = IEEE1284_PH_REV_IDLE; in parport_ieee1284_read_nibble()
233 port->physport->ieee1284.phase = IEEE1284_PH_HBUSY_DAVAIL; in parport_ieee1284_read_nibble()
240 /* Byte mode. */
242 void *buffer, size_t len, in parport_ieee1284_read_byte() argument
251 for (count = 0; count < len; count++) { in parport_ieee1284_read_byte()
252 unsigned char byte; in parport_ieee1284_read_byte()
268 port->physport->ieee1284.phase = IEEE1284_PH_REV_DATA; in parport_ieee1284_read_byte()
272 /* Timeout -- no more data? */ in parport_ieee1284_read_byte()
275 DPRINTK (KERN_DEBUG "%s: Byte timeout at event 9\n", in parport_ieee1284_read_byte()
276 port->name); in parport_ieee1284_read_byte()
280 byte = parport_read_data (port); in parport_ieee1284_read_byte()
281 *buf++ = byte; in parport_ieee1284_read_byte()
290 /* Timeout -- no more data? */ in parport_ieee1284_read_byte()
291 DPRINTK (KERN_DEBUG "%s: Byte timeout at event 11\n", in parport_ieee1284_read_byte()
292 port->name); in parport_ieee1284_read_byte()
306 if (count == len) { in parport_ieee1284_read_byte()
307 /* Read the last byte without checking data avail. */ in parport_ieee1284_read_byte()
311 "%s: No more byte data (%zd bytes)\n", in parport_ieee1284_read_byte()
312 port->name, count); in parport_ieee1284_read_byte()
318 port->physport->ieee1284.phase = IEEE1284_PH_REV_IDLE; in parport_ieee1284_read_byte()
321 port->physport->ieee1284.phase = IEEE1284_PH_HBUSY_DAVAIL; in parport_ieee1284_read_byte()
357 port->name); in ecp_forward_to_reverse()
358 port->ieee1284.phase = IEEE1284_PH_REV_IDLE; in ecp_forward_to_reverse()
361 port->name); in ecp_forward_to_reverse()
362 port->ieee1284.phase = IEEE1284_PH_ECP_DIR_UNKNOWN; in ecp_forward_to_reverse()
388 port->name); in ecp_reverse_to_forward()
389 port->ieee1284.phase = IEEE1284_PH_FWD_IDLE; in ecp_reverse_to_forward()
393 port->name); in ecp_reverse_to_forward()
394 port->ieee1284.phase = IEEE1284_PH_ECP_DIR_UNKNOWN; in ecp_reverse_to_forward()
405 const void *buffer, size_t len, in parport_ieee1284_ecp_write_data() argument
415 port = port->physport; in parport_ieee1284_ecp_write_data()
417 if (port->ieee1284.phase != IEEE1284_PH_FWD_IDLE) in parport_ieee1284_ecp_write_data()
421 port->ieee1284.phase = IEEE1284_PH_FWD_DATA; in parport_ieee1284_ecp_write_data()
429 for (written = 0; written < len; written++, buf++) { in parport_ieee1284_ecp_write_data()
430 unsigned long expire = jiffies + port->cad->timeout; in parport_ieee1284_ecp_write_data()
431 unsigned char byte; in parport_ieee1284_ecp_write_data()
433 byte = *buf; in parport_ieee1284_ecp_write_data()
435 parport_write_data (port, byte); in parport_ieee1284_ecp_write_data()
453 DPRINTK (KERN_DEBUG "%s: ECP transfer stalled!\n", port->name); in parport_ieee1284_ecp_write_data()
470 port->name); in parport_ieee1284_ecp_write_data()
484 port->ieee1284.phase = IEEE1284_PH_FWD_IDLE; in parport_ieee1284_ecp_write_data()
492 void *buffer, size_t len, int flags) in parport_ieee1284_ecp_read_data() argument
497 struct pardevice *dev = port->cad; in parport_ieee1284_ecp_read_data()
504 port = port->physport; in parport_ieee1284_ecp_read_data()
506 if (port->ieee1284.phase != IEEE1284_PH_REV_IDLE) in parport_ieee1284_ecp_read_data()
510 port->ieee1284.phase = IEEE1284_PH_REV_DATA; in parport_ieee1284_ecp_read_data()
518 while (count < len) { in parport_ieee1284_ecp_read_data()
519 unsigned long expire = jiffies + dev->timeout; in parport_ieee1284_ecp_read_data()
520 unsigned char byte; in parport_ieee1284_ecp_read_data()
538 if (count && dev->port->irq != PARPORT_IRQ_NONE) { in parport_ieee1284_ecp_read_data()
554 /* The last byte was a run-length count, so in parport_ieee1284_ecp_read_data()
562 byte = parport_read_data (port); in parport_ieee1284_ecp_read_data()
565 command or a normal data byte, don't accept it. */ in parport_ieee1284_ecp_read_data()
567 if (byte & 0x80) { in parport_ieee1284_ecp_read_data()
570 port->name, byte); in parport_ieee1284_ecp_read_data()
573 else if (port->ieee1284.mode != IEEE1284_MODE_ECPRLE) in parport_ieee1284_ecp_read_data()
576 port->name); in parport_ieee1284_ecp_read_data()
578 rle_count = byte + 1; in parport_ieee1284_ecp_read_data()
581 if (rle_count > (len - count)) { in parport_ieee1284_ecp_read_data()
583 "for next time\n", port->name, in parport_ieee1284_ecp_read_data()
604 port->name, byte); in parport_ieee1284_ecp_read_data()
613 /* If we just read a run-length count, fetch the data. */ in parport_ieee1284_ecp_read_data()
617 /* If this is the byte after a run-length count, decompress. */ in parport_ieee1284_ecp_read_data()
620 memset (buf, byte, rle_count); in parport_ieee1284_ecp_read_data()
624 port->name, rle_count); in parport_ieee1284_ecp_read_data()
626 /* Normal data byte. */ in parport_ieee1284_ecp_read_data()
627 *buf = byte; in parport_ieee1284_ecp_read_data()
633 port->ieee1284.phase = IEEE1284_PH_REV_IDLE; in parport_ieee1284_ecp_read_data()
640 const void *buffer, size_t len, in parport_ieee1284_ecp_write_addr() argument
650 port = port->physport; in parport_ieee1284_ecp_write_addr()
652 if (port->ieee1284.phase != IEEE1284_PH_FWD_IDLE) in parport_ieee1284_ecp_write_addr()
656 port->ieee1284.phase = IEEE1284_PH_FWD_DATA; in parport_ieee1284_ecp_write_addr()
665 for (written = 0; written < len; written++, buf++) { in parport_ieee1284_ecp_write_addr()
666 unsigned long expire = jiffies + port->cad->timeout; in parport_ieee1284_ecp_write_addr()
667 unsigned char byte; in parport_ieee1284_ecp_write_addr()
669 byte = *buf; in parport_ieee1284_ecp_write_addr()
671 parport_write_data (port, byte); in parport_ieee1284_ecp_write_addr()
689 DPRINTK (KERN_DEBUG "%s: ECP transfer stalled!\n", port->name); in parport_ieee1284_ecp_write_addr()
706 port->name); in parport_ieee1284_ecp_write_addr()
720 port->ieee1284.phase = IEEE1284_PH_FWD_IDLE; in parport_ieee1284_ecp_write_addr()
732 const void *buffer, size_t len, in parport_ieee1284_epp_write_data() argument
746 port->ops->data_forward (port); in parport_ieee1284_epp_write_data()
747 for (; len > 0; len--, bp++) { in parport_ieee1284_epp_write_data()
776 void *buffer, size_t len, in parport_ieee1284_epp_read_data() argument
789 port->ops->data_reverse (port); in parport_ieee1284_epp_read_data()
790 for (; len > 0; len--, bp++) { in parport_ieee1284_epp_read_data()
813 port->ops->data_forward (port); in parport_ieee1284_epp_read_data()
820 const void *buffer, size_t len, in parport_ieee1284_epp_write_addr() argument
834 port->ops->data_forward (port); in parport_ieee1284_epp_write_addr()
835 for (; len > 0; len--, bp++) { in parport_ieee1284_epp_write_addr()
864 void *buffer, size_t len, in parport_ieee1284_epp_read_addr() argument
877 port->ops->data_reverse (port); in parport_ieee1284_epp_read_addr()
878 for (; len > 0; len--, bp++) { in parport_ieee1284_epp_read_addr()
901 port->ops->data_forward (port); in parport_ieee1284_epp_read_addr()