Lines Matching refs:port

42 static void parport_ieee1284_wakeup (struct parport *port)
44 up (&port->physport->ieee1284.irq);
54 * parport_wait_event - wait for an event on a parallel port
55 * @port: port to wait on
59 * interrupt to occur on a parallel port. If the port timeout is
69 int parport_wait_event (struct parport *port, signed long timeout)
74 if (!port->physport->cad->timeout)
82 port_from_cookie[port->number % PARPORT_MAX] = port;
83 timer.data = port->number;
86 ret = down_interruptible (&port->physport->ieee1284.irq);
98 * @port: port to watch
120 int parport_poll_peripheral(struct parport *port,
130 status = parport_read_status (port);
146 * @port: port to watch
157 * The port is polled quickly to start off with, in anticipation
160 * If the timeout for this port (see parport_set_timeout()) is
164 * If the timeout for this port is non-zero, after the fast
169 int parport_wait_peripheral(struct parport *port,
178 usec = port->physport->spintime; /* usecs of fast polling */
179 if (!port->physport->cad->timeout)
190 ret = parport_poll_peripheral (port, mask, result, usec);
194 if (!port->physport->cad->timeout)
207 if ((ret = parport_wait_event (port, msecs_to_jiffies(10))) < 0)
210 status = parport_read_status (port);
227 static void parport_ieee1284_terminate (struct parport *port)
230 port = port->physport;
233 switch (port->ieee1284.mode) {
240 parport_frob_control (port, PARPORT_CONTROL_INIT, 0);
244 parport_frob_control (port,
255 if (port->ieee1284.phase != IEEE1284_PH_FWD_IDLE) {
257 parport_frob_control (port,
264 r = parport_wait_peripheral (port,
269 port->name);
271 parport_data_forward (port);
273 port->name);
274 port->ieee1284.phase = IEEE1284_PH_FWD_IDLE;
283 parport_frob_control (port,
289 r = parport_wait_peripheral (port, PARPORT_STATUS_ACK, 0);
292 port->name);
295 parport_frob_control (port,
300 r = parport_wait_peripheral (port,
305 port->name);
308 parport_frob_control (port, PARPORT_CONTROL_AUTOFD, 0);
311 port->ieee1284.mode = IEEE1284_MODE_COMPAT;
312 port->ieee1284.phase = IEEE1284_PH_FWD_IDLE;
315 port->name);
321 * @port: port to use
334 int parport_negotiate (struct parport *port, int mode)
346 port = port->physport;
349 if (port->ieee1284.mode == mode)
353 if ((port->ieee1284.mode & ~IEEE1284_ADDR) == (mode & ~IEEE1284_ADDR)){
354 port->ieee1284.mode = mode;
359 if (port->ieee1284.mode != IEEE1284_MODE_COMPAT)
360 parport_ieee1284_terminate (port);
381 port->ieee1284.phase = IEEE1284_PH_NEGOTIATION;
384 parport_frob_control (port,
392 parport_data_forward (port);
393 parport_write_data (port, m);
397 parport_frob_control (port,
403 if (parport_wait_peripheral (port,
412 parport_frob_control (port,
418 port->name, parport_read_status (port));
419 port->ieee1284.phase = IEEE1284_PH_FWD_IDLE;
424 parport_frob_control (port,
430 parport_frob_control (port,
436 if (parport_wait_peripheral (port,
442 port->name, mode, port->ops->read_status (port));
443 parport_ieee1284_terminate (port);
447 xflag = parport_read_status (port) & PARPORT_STATUS_SELECT;
453 port->name, mode);
454 parport_ieee1284_terminate (port);
462 parport_write_data (port, m);
466 parport_frob_control (port,
471 if (parport_wait_peripheral (port, PARPORT_STATUS_ACK, 0)) {
475 port->name);
476 parport_ieee1284_terminate (port);
481 parport_frob_control (port,
486 if (parport_wait_peripheral (port,
493 port->name, mode,
494 port->ops->read_status (port));
495 parport_ieee1284_terminate (port);
500 xflag = parport_read_status (port) & PARPORT_STATUS_SELECT;
506 "supported\n", port->name, mode);
507 parport_ieee1284_terminate (port);
515 DPRINTK (KERN_DEBUG "%s: In mode 0x%02x\n", port->name, mode);
516 port->ieee1284.mode = mode;
520 port->ieee1284.phase = IEEE1284_PH_ECP_SETUP;
523 parport_frob_control (port,
528 r = parport_wait_peripheral (port,
533 port->name);
536 port->ieee1284.phase = IEEE1284_PH_FWD_IDLE;
538 port->name);
542 port->ieee1284.phase = IEEE1284_PH_REV_IDLE;
545 port->ieee1284.phase = IEEE1284_PH_FWD_IDLE;
560 static int parport_ieee1284_ack_data_avail (struct parport *port)
562 if (parport_read_status (port) & PARPORT_STATUS_ERROR)
567 port->ops->frob_control (port, PARPORT_CONTROL_AUTOFD, 0);
568 port->ieee1284.phase = IEEE1284_PH_HBUSY_DAVAIL;
576 struct parport *port = handle;
577 parport_ieee1284_wakeup (port);
580 if (port->ieee1284.phase == IEEE1284_PH_REV_IDLE) {
583 DPRINTK (KERN_DEBUG "%s: Data available\n", port->name);
584 parport_ieee1284_ack_data_avail (port);
590 * parport_write - write a block of data to a parallel port
591 * @port: port to write to
595 * This will write up to @len bytes of @buffer to the port
607 ssize_t parport_write (struct parport *port, const void *buffer, size_t len)
610 return port->ops->compat_write_data (port, buffer, len, 0);
613 int mode = port->ieee1284.mode;
624 parport_negotiate (port, IEEE1284_MODE_COMPAT);
627 port->name);
628 fn = port->ops->compat_write_data;
632 DPRINTK (KERN_DEBUG "%s: Using EPP mode\n", port->name);
634 fn = port->ops->epp_write_addr;
636 fn = port->ops->epp_write_data;
641 port->name);
650 DPRINTK (KERN_DEBUG "%s: Using ECP mode\n", port->name);
652 fn = port->ops->ecp_write_addr;
654 fn = port->ops->ecp_write_data;
660 port->name);
671 DPRINTK (KERN_DEBUG "%s: Unknown mode 0x%02x\n", port->name,
672 port->ieee1284.mode);
676 retval = (*fn) (port, buffer, len, 0);
677 DPRINTK (KERN_DEBUG "%s: wrote %d/%d bytes\n", port->name, retval, len);
683 * parport_read - read a block of data from a parallel port
684 * @port: port to read from
688 * This will read up to @len bytes of @buffer to the port
700 ssize_t parport_read (struct parport *port, void *buffer, size_t len)
706 int mode = port->physport->ieee1284.mode;
721 if ((port->physport->modes & PARPORT_MODE_TRISTATE) &&
722 !parport_negotiate (port, IEEE1284_MODE_BYTE)) {
724 DPRINTK (KERN_DEBUG "%s: Using byte mode\n", port->name);
725 fn = port->ops->byte_read_data;
728 if (parport_negotiate (port, IEEE1284_MODE_NIBBLE)) {
733 DPRINTK (KERN_DEBUG "%s: Using nibble mode\n", port->name);
734 fn = port->ops->nibble_read_data;
738 DPRINTK (KERN_DEBUG "%s: Using byte mode\n", port->name);
739 fn = port->ops->byte_read_data;
743 DPRINTK (KERN_DEBUG "%s: Using EPP mode\n", port->name);
745 fn = port->ops->epp_read_addr;
747 fn = port->ops->epp_read_data;
752 port->name);
761 DPRINTK (KERN_DEBUG "%s: Using ECP mode\n", port->name);
762 fn = port->ops->ecp_read_data;
767 port->name);
772 DPRINTK (KERN_DEBUG "%s: Unknown mode 0x%02x\n", port->name,
773 port->physport->ieee1284.mode);
777 return (*fn) (port, buffer, len, 0);
783 * @dev: device on a port
787 * port. This affects functions like parport_wait_peripheral().
803 if (dev->port->physport->cad == dev)
804 parport_ieee1284_wakeup (dev->port);