mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-11-01 09:13:37 +00:00 
			
		
		
		
	Initial git repository build. I'm not bothering with the full history, even though we have it. We can create a separate "historical" git archive of that later if we want to, and in the meantime it's about 3.2GB when imported into git - space that would just make the early git days unnecessarily complicated, when we don't have a lot of good infrastructure for it. Let it rip!
		
			
				
	
	
		
			1490 lines
		
	
	
	
		
			32 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			1490 lines
		
	
	
	
		
			32 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
PARPORT interface documentation
 | 
						||
-------------------------------
 | 
						||
 | 
						||
Time-stamp: <2000-02-24 13:30:20 twaugh>
 | 
						||
 | 
						||
Described here are the following functions:
 | 
						||
 | 
						||
Global functions:
 | 
						||
  parport_register_driver
 | 
						||
  parport_unregister_driver
 | 
						||
  parport_enumerate
 | 
						||
  parport_register_device
 | 
						||
  parport_unregister_device
 | 
						||
  parport_claim
 | 
						||
  parport_claim_or_block
 | 
						||
  parport_release
 | 
						||
  parport_yield
 | 
						||
  parport_yield_blocking
 | 
						||
  parport_wait_peripheral
 | 
						||
  parport_poll_peripheral
 | 
						||
  parport_wait_event
 | 
						||
  parport_negotiate
 | 
						||
  parport_read
 | 
						||
  parport_write
 | 
						||
  parport_open
 | 
						||
  parport_close
 | 
						||
  parport_device_id
 | 
						||
  parport_device_num
 | 
						||
  parport_device_coords
 | 
						||
  parport_find_class
 | 
						||
  parport_find_device
 | 
						||
  parport_set_timeout
 | 
						||
 | 
						||
Port functions (can be overridden by low-level drivers):
 | 
						||
  SPP:
 | 
						||
    port->ops->read_data
 | 
						||
    port->ops->write_data
 | 
						||
    port->ops->read_status
 | 
						||
    port->ops->read_control
 | 
						||
    port->ops->write_control
 | 
						||
    port->ops->frob_control
 | 
						||
    port->ops->enable_irq
 | 
						||
    port->ops->disable_irq
 | 
						||
    port->ops->data_forward
 | 
						||
    port->ops->data_reverse
 | 
						||
 | 
						||
  EPP:
 | 
						||
    port->ops->epp_write_data
 | 
						||
    port->ops->epp_read_data
 | 
						||
    port->ops->epp_write_addr
 | 
						||
    port->ops->epp_read_addr
 | 
						||
 | 
						||
  ECP:
 | 
						||
    port->ops->ecp_write_data
 | 
						||
    port->ops->ecp_read_data
 | 
						||
    port->ops->ecp_write_addr
 | 
						||
 | 
						||
  Other:
 | 
						||
    port->ops->nibble_read_data
 | 
						||
    port->ops->byte_read_data
 | 
						||
    port->ops->compat_write_data
 | 
						||
 | 
						||
The parport subsystem comprises 'parport' (the core port-sharing
 | 
						||
code), and a variety of low-level drivers that actually do the port
 | 
						||
accesses.  Each low-level driver handles a particular style of port
 | 
						||
(PC, Amiga, and so on).
 | 
						||
 | 
						||
The parport interface to the device driver author can be broken down
 | 
						||
into global functions and port functions.
 | 
						||
 | 
						||
The global functions are mostly for communicating between the device
 | 
						||
driver and the parport subsystem: acquiring a list of available ports,
 | 
						||
claiming a port for exclusive use, and so on.  They also include
 | 
						||
'generic' functions for doing standard things that will work on any
 | 
						||
IEEE 1284-capable architecture.
 | 
						||
 | 
						||
The port functions are provided by the low-level drivers, although the
 | 
						||
core parport module provides generic 'defaults' for some routines.
 | 
						||
The port functions can be split into three groups: SPP, EPP, and ECP.
 | 
						||
 | 
						||
SPP (Standard Parallel Port) functions modify so-called 'SPP'
 | 
						||
registers: data, status, and control.  The hardware may not actually
 | 
						||
have registers exactly like that, but the PC does and this interface is
 | 
						||
modelled after common PC implementations.  Other low-level drivers may
 | 
						||
be able to emulate most of the functionality.
 | 
						||
 | 
						||
EPP (Enhanced Parallel Port) functions are provided for reading and
 | 
						||
writing in IEEE 1284 EPP mode, and ECP (Extended Capabilities Port)
 | 
						||
functions are used for IEEE 1284 ECP mode. (What about BECP? Does
 | 
						||
anyone care?)
 | 
						||
 | 
						||
Hardware assistance for EPP and/or ECP transfers may or may not be
 | 
						||
available, and if it is available it may or may not be used.  If
 | 
						||
hardware is not used, the transfer will be software-driven.  In order
 | 
						||
to cope with peripherals that only tenuously support IEEE 1284, a
 | 
						||
low-level driver specific function is provided, for altering 'fudge
 | 
						||
factors'.
 | 
						||
 | 
						||
GLOBAL FUNCTIONS
 | 
						||
----------------
 | 
						||
 | 
						||
parport_register_driver - register a device driver with parport
 | 
						||
-----------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
struct parport_driver {
 | 
						||
	const char *name;
 | 
						||
	void (*attach) (struct parport *);
 | 
						||
	void (*detach) (struct parport *);
 | 
						||
	struct parport_driver *next;
 | 
						||
};
 | 
						||
int parport_register_driver (struct parport_driver *driver);
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
In order to be notified about parallel ports when they are detected,
 | 
						||
parport_register_driver should be called.  Your driver will
 | 
						||
immediately be notified of all ports that have already been detected,
 | 
						||
and of each new port as low-level drivers are loaded.
 | 
						||
 | 
						||
A 'struct parport_driver' contains the textual name of your driver,
 | 
						||
a pointer to a function to handle new ports, and a pointer to a
 | 
						||
function to handle ports going away due to a low-level driver
 | 
						||
unloading.  Ports will only be detached if they are not being used
 | 
						||
(i.e. there are no devices registered on them).
 | 
						||
 | 
						||
The visible parts of the 'struct parport *' argument given to
 | 
						||
attach/detach are:
 | 
						||
 | 
						||
struct parport
 | 
						||
{
 | 
						||
	struct parport *next; /* next parport in list */
 | 
						||
	const char *name;     /* port's name */
 | 
						||
	unsigned int modes;   /* bitfield of hardware modes */
 | 
						||
	struct parport_device_info probe_info;
 | 
						||
			      /* IEEE1284 info */
 | 
						||
	int number;           /* parport index */
 | 
						||
	struct parport_operations *ops;
 | 
						||
	...
 | 
						||
};
 | 
						||
 | 
						||
There are other members of the structure, but they should not be
 | 
						||
touched.
 | 
						||
 | 
						||
The 'modes' member summarises the capabilities of the underlying
 | 
						||
hardware.  It consists of flags which may be bitwise-ored together:
 | 
						||
 | 
						||
  PARPORT_MODE_PCSPP		IBM PC registers are available,
 | 
						||
				i.e. functions that act on data,
 | 
						||
				control and status registers are
 | 
						||
				probably writing directly to the
 | 
						||
				hardware.
 | 
						||
  PARPORT_MODE_TRISTATE		The data drivers may be turned off.
 | 
						||
				This allows the data lines to be used
 | 
						||
				for reverse (peripheral to host)
 | 
						||
				transfers.
 | 
						||
  PARPORT_MODE_COMPAT		The hardware can assist with
 | 
						||
				compatibility-mode (printer)
 | 
						||
				transfers, i.e. compat_write_block.
 | 
						||
  PARPORT_MODE_EPP		The hardware can assist with EPP
 | 
						||
				transfers.
 | 
						||
  PARPORT_MODE_ECP		The hardware can assist with ECP
 | 
						||
				transfers.
 | 
						||
  PARPORT_MODE_DMA		The hardware can use DMA, so you might
 | 
						||
				want to pass ISA DMA-able memory
 | 
						||
				(i.e. memory allocated using the
 | 
						||
				GFP_DMA flag with kmalloc) to the
 | 
						||
				low-level driver in order to take
 | 
						||
				advantage of it.
 | 
						||
 | 
						||
There may be other flags in 'modes' as well.
 | 
						||
 | 
						||
The contents of 'modes' is advisory only.  For example, if the
 | 
						||
hardware is capable of DMA, and PARPORT_MODE_DMA is in 'modes', it
 | 
						||
doesn't necessarily mean that DMA will always be used when possible.
 | 
						||
Similarly, hardware that is capable of assisting ECP transfers won't
 | 
						||
necessarily be used.
 | 
						||
 | 
						||
RETURN VALUE
 | 
						||
 | 
						||
Zero on success, otherwise an error code.
 | 
						||
 | 
						||
ERRORS
 | 
						||
 | 
						||
None. (Can it fail? Why return int?)
 | 
						||
 | 
						||
EXAMPLE
 | 
						||
 | 
						||
static void lp_attach (struct parport *port)
 | 
						||
{
 | 
						||
	...
 | 
						||
	private = kmalloc (...);
 | 
						||
	dev[count++] = parport_register_device (...);
 | 
						||
	...
 | 
						||
}
 | 
						||
 | 
						||
static void lp_detach (struct parport *port)
 | 
						||
{
 | 
						||
	...
 | 
						||
}
 | 
						||
 | 
						||
static struct parport_driver lp_driver = {
 | 
						||
	"lp",
 | 
						||
	lp_attach,
 | 
						||
	lp_detach,
 | 
						||
	NULL /* always put NULL here */
 | 
						||
};
 | 
						||
 | 
						||
int lp_init (void)
 | 
						||
{
 | 
						||
	...
 | 
						||
	if (parport_register_driver (&lp_driver)) {
 | 
						||
		/* Failed; nothing we can do. */
 | 
						||
		return -EIO;
 | 
						||
	}
 | 
						||
	...
 | 
						||
}
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
parport_unregister_driver, parport_register_device, parport_enumerate
 | 
						||
 | 
						||
parport_unregister_driver - tell parport to forget about this driver
 | 
						||
-------------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
struct parport_driver {
 | 
						||
	const char *name;
 | 
						||
	void (*attach) (struct parport *);
 | 
						||
	void (*detach) (struct parport *);
 | 
						||
	struct parport_driver *next;
 | 
						||
};
 | 
						||
void parport_unregister_driver (struct parport_driver *driver);
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
This tells parport not to notify the device driver of new ports or of
 | 
						||
ports going away.  Registered devices belonging to that driver are NOT
 | 
						||
unregistered: parport_unregister_device must be used for each one.
 | 
						||
 | 
						||
EXAMPLE
 | 
						||
 | 
						||
void cleanup_module (void)
 | 
						||
{
 | 
						||
	...
 | 
						||
	/* Stop notifications. */
 | 
						||
	parport_unregister_driver (&lp_driver);
 | 
						||
 | 
						||
	/* Unregister devices. */
 | 
						||
	for (i = 0; i < NUM_DEVS; i++)
 | 
						||
		parport_unregister_device (dev[i]);
 | 
						||
	...
 | 
						||
}
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
parport_register_driver, parport_enumerate
 | 
						||
 | 
						||
parport_enumerate - retrieve a list of parallel ports (DEPRECATED)
 | 
						||
-----------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
struct parport *parport_enumerate (void);
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Retrieve the first of a list of valid parallel ports for this machine.
 | 
						||
Successive parallel ports can be found using the 'struct parport
 | 
						||
*next' element of the 'struct parport *' that is returned.  If 'next'
 | 
						||
is NULL, there are no more parallel ports in the list.  The number of
 | 
						||
ports in the list will not exceed PARPORT_MAX.
 | 
						||
 | 
						||
RETURN VALUE
 | 
						||
 | 
						||
A 'struct parport *' describing a valid parallel port for the machine,
 | 
						||
or NULL if there are none.
 | 
						||
 | 
						||
ERRORS
 | 
						||
 | 
						||
This function can return NULL to indicate that there are no parallel
 | 
						||
ports to use.
 | 
						||
 | 
						||
EXAMPLE
 | 
						||
 | 
						||
int detect_device (void)
 | 
						||
{
 | 
						||
	struct parport *port;
 | 
						||
 | 
						||
	for (port = parport_enumerate ();
 | 
						||
	     port != NULL;
 | 
						||
	     port = port->next) {
 | 
						||
		/* Try to detect a device on the port... */
 | 
						||
		...
 | 
						||
             }
 | 
						||
	}
 | 
						||
 | 
						||
	...
 | 
						||
}
 | 
						||
 | 
						||
NOTES
 | 
						||
 | 
						||
parport_enumerate is deprecated; parport_register_driver should be
 | 
						||
used instead.
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
parport_register_driver, parport_unregister_driver
 | 
						||
 | 
						||
parport_register_device - register to use a port
 | 
						||
-----------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
typedef int (*preempt_func) (void *handle);
 | 
						||
typedef void (*wakeup_func) (void *handle);
 | 
						||
typedef int (*irq_func) (int irq, void *handle, struct pt_regs *);
 | 
						||
 | 
						||
struct pardevice *parport_register_device(struct parport *port,
 | 
						||
                                          const char *name,
 | 
						||
                                          preempt_func preempt,
 | 
						||
                                          wakeup_func wakeup,
 | 
						||
                                          irq_func irq,
 | 
						||
                                          int flags,
 | 
						||
                                          void *handle);
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Use this function to register your device driver on a parallel port
 | 
						||
('port').  Once you have done that, you will be able to use
 | 
						||
parport_claim and parport_release in order to use the port.
 | 
						||
 | 
						||
This function will register three callbacks into your driver:
 | 
						||
'preempt', 'wakeup' and 'irq'.  Each of these may be NULL in order to
 | 
						||
indicate that you do not want a callback.
 | 
						||
 | 
						||
When the 'preempt' function is called, it is because another driver
 | 
						||
wishes to use the parallel port.  The 'preempt' function should return
 | 
						||
non-zero if the parallel port cannot be released yet -- if zero is
 | 
						||
returned, the port is lost to another driver and the port must be
 | 
						||
re-claimed before use.
 | 
						||
 | 
						||
The 'wakeup' function is called once another driver has released the
 | 
						||
port and no other driver has yet claimed it.  You can claim the
 | 
						||
parallel port from within the 'wakeup' function (in which case the
 | 
						||
claim is guaranteed to succeed), or choose not to if you don't need it
 | 
						||
now.
 | 
						||
 | 
						||
If an interrupt occurs on the parallel port your driver has claimed,
 | 
						||
the 'irq' function will be called. (Write something about shared
 | 
						||
interrupts here.)
 | 
						||
 | 
						||
The 'handle' is a pointer to driver-specific data, and is passed to
 | 
						||
the callback functions.
 | 
						||
 | 
						||
'flags' may be a bitwise combination of the following flags:
 | 
						||
 | 
						||
        Flag            Meaning
 | 
						||
  PARPORT_DEV_EXCL	The device cannot share the parallel port at all.
 | 
						||
			Use this only when absolutely necessary.
 | 
						||
 | 
						||
The typedefs are not actually defined -- they are only shown in order
 | 
						||
to make the function prototype more readable.
 | 
						||
 | 
						||
The visible parts of the returned 'struct pardevice' are:
 | 
						||
 | 
						||
struct pardevice {
 | 
						||
	struct parport *port;	/* Associated port */
 | 
						||
	void *private;		/* Device driver's 'handle' */
 | 
						||
	...
 | 
						||
};
 | 
						||
 | 
						||
RETURN VALUE
 | 
						||
 | 
						||
A 'struct pardevice *': a handle to the registered parallel port
 | 
						||
device that can be used for parport_claim, parport_release, etc.
 | 
						||
 | 
						||
ERRORS
 | 
						||
 | 
						||
A return value of NULL indicates that there was a problem registering
 | 
						||
a device on that port.
 | 
						||
 | 
						||
EXAMPLE
 | 
						||
 | 
						||
static int preempt (void *handle)
 | 
						||
{
 | 
						||
	if (busy_right_now)
 | 
						||
		return 1;
 | 
						||
 | 
						||
	must_reclaim_port = 1;
 | 
						||
	return 0;
 | 
						||
}
 | 
						||
 | 
						||
static void wakeup (void *handle)
 | 
						||
{
 | 
						||
	struct toaster *private = handle;
 | 
						||
	struct pardevice *dev = private->dev;
 | 
						||
	if (!dev) return; /* avoid races */
 | 
						||
 | 
						||
	if (want_port)
 | 
						||
		parport_claim (dev);
 | 
						||
}
 | 
						||
 | 
						||
static int toaster_detect (struct toaster *private, struct parport *port)
 | 
						||
{
 | 
						||
	private->dev = parport_register_device (port, "toaster", preempt,
 | 
						||
					        wakeup, NULL, 0,
 | 
						||
						private);
 | 
						||
	if (!private->dev)
 | 
						||
		/* Couldn't register with parport. */
 | 
						||
		return -EIO;
 | 
						||
 | 
						||
	must_reclaim_port = 0;
 | 
						||
	busy_right_now = 1;
 | 
						||
	parport_claim_or_block (private->dev);
 | 
						||
	...
 | 
						||
	/* Don't need the port while the toaster warms up. */
 | 
						||
	busy_right_now = 0;
 | 
						||
	...
 | 
						||
	busy_right_now = 1;
 | 
						||
	if (must_reclaim_port) {
 | 
						||
		parport_claim_or_block (private->dev);
 | 
						||
		must_reclaim_port = 0;
 | 
						||
	}
 | 
						||
	...
 | 
						||
}
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
parport_unregister_device, parport_claim
 | 
						||
 | 
						||
parport_unregister_device - finish using a port
 | 
						||
-------------------------
 | 
						||
 | 
						||
SYNPOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
void parport_unregister_device (struct pardevice *dev);
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
This function is the opposite of parport_register_device.  After using
 | 
						||
parport_unregister_device, 'dev' is no longer a valid device handle.
 | 
						||
 | 
						||
You should not unregister a device that is currently claimed, although
 | 
						||
if you do it will be released automatically.
 | 
						||
 | 
						||
EXAMPLE
 | 
						||
 | 
						||
	...
 | 
						||
	kfree (dev->private); /* before we lose the pointer */
 | 
						||
	parport_unregister_device (dev);
 | 
						||
	...
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
parport_unregister_driver
 | 
						||
 | 
						||
parport_claim, parport_claim_or_block - claim the parallel port for a device
 | 
						||
-------------------------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
int parport_claim (struct pardevice *dev);
 | 
						||
int parport_claim_or_block (struct pardevice *dev);
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
These functions attempt to gain control of the parallel port on which
 | 
						||
'dev' is registered.  'parport_claim' does not block, but
 | 
						||
'parport_claim_or_block' may do. (Put something here about blocking
 | 
						||
interruptibly or non-interruptibly.)
 | 
						||
 | 
						||
You should not try to claim a port that you have already claimed.
 | 
						||
 | 
						||
RETURN VALUE
 | 
						||
 | 
						||
A return value of zero indicates that the port was successfully
 | 
						||
claimed, and the caller now has possession of the parallel port.
 | 
						||
 | 
						||
If 'parport_claim_or_block' blocks before returning successfully, the
 | 
						||
return value is positive.
 | 
						||
 | 
						||
ERRORS
 | 
						||
 | 
						||
  -EAGAIN  The port is unavailable at the moment, but another attempt
 | 
						||
           to claim it may succeed.
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
parport_release
 | 
						||
 | 
						||
parport_release - release the parallel port
 | 
						||
---------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
void parport_release (struct pardevice *dev);
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Once a parallel port device has been claimed, it can be released using
 | 
						||
'parport_release'.  It cannot fail, but you should not release a
 | 
						||
device that you do not have possession of.
 | 
						||
 | 
						||
EXAMPLE
 | 
						||
 | 
						||
static size_t write (struct pardevice *dev, const void *buf,
 | 
						||
		     size_t len)
 | 
						||
{
 | 
						||
	...
 | 
						||
	written = dev->port->ops->write_ecp_data (dev->port, buf,
 | 
						||
						  len);
 | 
						||
	parport_release (dev);
 | 
						||
	...
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
change_mode, parport_claim, parport_claim_or_block, parport_yield
 | 
						||
 | 
						||
parport_yield, parport_yield_blocking - temporarily release a parallel port
 | 
						||
-------------------------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
int parport_yield (struct pardevice *dev)
 | 
						||
int parport_yield_blocking (struct pardevice *dev);
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
When a driver has control of a parallel port, it may allow another
 | 
						||
driver to temporarily 'borrow' it.  'parport_yield' does not block;
 | 
						||
'parport_yield_blocking' may do.
 | 
						||
 | 
						||
RETURN VALUE
 | 
						||
 | 
						||
A return value of zero indicates that the caller still owns the port
 | 
						||
and the call did not block.
 | 
						||
 | 
						||
A positive return value from 'parport_yield_blocking' indicates that
 | 
						||
the caller still owns the port and the call blocked.
 | 
						||
 | 
						||
A return value of -EAGAIN indicates that the caller no longer owns the
 | 
						||
port, and it must be re-claimed before use.
 | 
						||
 | 
						||
ERRORS
 | 
						||
 | 
						||
  -EAGAIN  Ownership of the parallel port was given away.
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
parport_release
 | 
						||
 | 
						||
parport_wait_peripheral - wait for status lines, up to 35ms
 | 
						||
-----------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
int parport_wait_peripheral (struct parport *port,
 | 
						||
			     unsigned char mask,
 | 
						||
			     unsigned char val);
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Wait for the status lines in mask to match the values in val.
 | 
						||
 | 
						||
RETURN VALUE
 | 
						||
 | 
						||
 -EINTR  a signal is pending
 | 
						||
      0  the status lines in mask have values in val
 | 
						||
      1  timed out while waiting (35ms elapsed)
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
parport_poll_peripheral
 | 
						||
 | 
						||
parport_poll_peripheral - wait for status lines, in usec
 | 
						||
-----------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
int parport_poll_peripheral (struct parport *port,
 | 
						||
			     unsigned char mask,
 | 
						||
			     unsigned char val,
 | 
						||
			     int usec);
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Wait for the status lines in mask to match the values in val.
 | 
						||
 | 
						||
RETURN VALUE
 | 
						||
 | 
						||
 -EINTR  a signal is pending
 | 
						||
      0  the status lines in mask have values in val
 | 
						||
      1  timed out while waiting (usec microseconds have elapsed)
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
parport_wait_peripheral
 | 
						||
 | 
						||
parport_wait_event - wait for an event on a port
 | 
						||
------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
int parport_wait_event (struct parport *port, signed long timeout)
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Wait for an event (e.g. interrupt) on a port.  The timeout is in
 | 
						||
jiffies.
 | 
						||
 | 
						||
RETURN VALUE
 | 
						||
 | 
						||
      0  success
 | 
						||
     <0  error (exit as soon as possible)
 | 
						||
     >0  timed out
 | 
						||
 | 
						||
parport_negotiate - perform IEEE 1284 negotiation
 | 
						||
-----------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
int parport_negotiate (struct parport *, int mode);
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Perform IEEE 1284 negotiation.
 | 
						||
 | 
						||
RETURN VALUE
 | 
						||
 | 
						||
     0  handshake OK; IEEE 1284 peripheral and mode available
 | 
						||
    -1  handshake failed; peripheral not compliant (or none present)
 | 
						||
     1  handshake OK; IEEE 1284 peripheral present but mode not
 | 
						||
        available
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
parport_read, parport_write
 | 
						||
 | 
						||
parport_read - read data from device
 | 
						||
------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
ssize_t parport_read (struct parport *, void *buf, size_t len);
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Read data from device in current IEEE 1284 transfer mode.  This only
 | 
						||
works for modes that support reverse data transfer.
 | 
						||
 | 
						||
RETURN VALUE
 | 
						||
 | 
						||
If negative, an error code; otherwise the number of bytes transferred.
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
parport_write, parport_negotiate
 | 
						||
 | 
						||
parport_write - write data to device
 | 
						||
-------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
ssize_t parport_write (struct parport *, const void *buf, size_t len);
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Write data to device in current IEEE 1284 transfer mode.  This only
 | 
						||
works for modes that support forward data transfer.
 | 
						||
 | 
						||
RETURN VALUE
 | 
						||
 | 
						||
If negative, an error code; otherwise the number of bytes transferred.
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
parport_read, parport_negotiate
 | 
						||
 | 
						||
parport_open - register device for particular device number
 | 
						||
------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
struct pardevice *parport_open (int devnum, const char *name,
 | 
						||
			        int (*pf) (void *),
 | 
						||
				void (*kf) (void *),
 | 
						||
				void (*irqf) (int, void *,
 | 
						||
					      struct pt_regs *),
 | 
						||
				int flags, void *handle);
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
This is like parport_register_device but takes a device number instead
 | 
						||
of a pointer to a struct parport.
 | 
						||
 | 
						||
RETURN VALUE
 | 
						||
 | 
						||
See parport_register_device.  If no device is associated with devnum,
 | 
						||
NULL is returned.
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
parport_register_device, parport_device_num
 | 
						||
 | 
						||
parport_close - unregister device for particular device number
 | 
						||
-------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
void parport_close (struct pardevice *dev);
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
This is the equivalent of parport_unregister_device for parport_open.
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
parport_unregister_device, parport_open
 | 
						||
 | 
						||
parport_device_id - obtain IEEE 1284 Device ID
 | 
						||
-----------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
ssize_t parport_device_id (int devnum, char *buffer, size_t len);
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Obtains the IEEE 1284 Device ID associated with a given device.
 | 
						||
 | 
						||
RETURN VALUE
 | 
						||
 | 
						||
If negative, an error code; otherwise, the number of bytes of buffer
 | 
						||
that contain the device ID.  The format of the device ID is as
 | 
						||
follows:
 | 
						||
 | 
						||
[length][ID]
 | 
						||
 | 
						||
The first two bytes indicate the inclusive length of the entire Device
 | 
						||
ID, and are in big-endian order.  The ID is a sequence of pairs of the
 | 
						||
form:
 | 
						||
 | 
						||
key:value;
 | 
						||
 | 
						||
NOTES
 | 
						||
 | 
						||
Many devices have ill-formed IEEE 1284 Device IDs.
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
parport_find_class, parport_find_device, parport_device_num
 | 
						||
 | 
						||
parport_device_num - convert device coordinates to device number
 | 
						||
------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
int parport_device_num (int parport, int mux, int daisy);
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Convert between device coordinates (port, multiplexor, daisy chain
 | 
						||
address) and device number (zero-based).
 | 
						||
 | 
						||
RETURN VALUE
 | 
						||
 | 
						||
Device number, or -1 if no device at given coordinates.
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
parport_device_coords, parport_open, parport_device_id
 | 
						||
 | 
						||
parport_device_coords - convert device number to device coordinates
 | 
						||
------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
int parport_device_coords (int devnum, int *parport, int *mux,
 | 
						||
			   int *daisy);
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Convert between device number (zero-based) and device coordinates
 | 
						||
(port, multiplexor, daisy chain address).
 | 
						||
 | 
						||
RETURN VALUE
 | 
						||
 | 
						||
Zero on success, in which case the coordinates are (*parport, *mux,
 | 
						||
*daisy).
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
parport_device_num, parport_open, parport_device_id
 | 
						||
 | 
						||
parport_find_class - find a device by its class
 | 
						||
------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
typedef enum {
 | 
						||
	PARPORT_CLASS_LEGACY = 0,       /* Non-IEEE1284 device */
 | 
						||
	PARPORT_CLASS_PRINTER,
 | 
						||
	PARPORT_CLASS_MODEM,
 | 
						||
	PARPORT_CLASS_NET,
 | 
						||
	PARPORT_CLASS_HDC,              /* Hard disk controller */
 | 
						||
	PARPORT_CLASS_PCMCIA,
 | 
						||
	PARPORT_CLASS_MEDIA,            /* Multimedia device */
 | 
						||
	PARPORT_CLASS_FDC,              /* Floppy disk controller */
 | 
						||
	PARPORT_CLASS_PORTS,
 | 
						||
	PARPORT_CLASS_SCANNER,
 | 
						||
	PARPORT_CLASS_DIGCAM,
 | 
						||
	PARPORT_CLASS_OTHER,            /* Anything else */
 | 
						||
	PARPORT_CLASS_UNSPEC,           /* No CLS field in ID */
 | 
						||
	PARPORT_CLASS_SCSIADAPTER
 | 
						||
} parport_device_class;
 | 
						||
 | 
						||
int parport_find_class (parport_device_class cls, int from);
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Find a device by class.  The search starts from device number from+1.
 | 
						||
 | 
						||
RETURN VALUE
 | 
						||
 | 
						||
The device number of the next device in that class, or -1 if no such
 | 
						||
device exists.
 | 
						||
 | 
						||
NOTES
 | 
						||
 | 
						||
Example usage:
 | 
						||
 | 
						||
int devnum = -1;
 | 
						||
while ((devnum = parport_find_class (PARPORT_CLASS_DIGCAM, devnum)) != -1) {
 | 
						||
    struct pardevice *dev = parport_open (devnum, ...);
 | 
						||
    ...
 | 
						||
}
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
parport_find_device, parport_open, parport_device_id
 | 
						||
 | 
						||
parport_find_device - find a device by its class
 | 
						||
------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
int parport_find_device (const char *mfg, const char *mdl, int from);
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Find a device by vendor and model.  The search starts from device
 | 
						||
number from+1.
 | 
						||
 | 
						||
RETURN VALUE
 | 
						||
 | 
						||
The device number of the next device matching the specifications, or
 | 
						||
-1 if no such device exists.
 | 
						||
 | 
						||
NOTES
 | 
						||
 | 
						||
Example usage:
 | 
						||
 | 
						||
int devnum = -1;
 | 
						||
while ((devnum = parport_find_device ("IOMEGA", "ZIP+", devnum)) != -1) {
 | 
						||
    struct pardevice *dev = parport_open (devnum, ...);
 | 
						||
    ...
 | 
						||
}
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
parport_find_class, parport_open, parport_device_id
 | 
						||
 | 
						||
parport_set_timeout - set the inactivity timeout
 | 
						||
-------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
long parport_set_timeout (struct pardevice *dev, long inactivity);
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Set the inactivity timeout, in jiffies, for a registered device.  The
 | 
						||
previous timeout is returned.
 | 
						||
 | 
						||
RETURN VALUE
 | 
						||
 | 
						||
The previous timeout, in jiffies.
 | 
						||
 | 
						||
NOTES
 | 
						||
 | 
						||
Some of the port->ops functions for a parport may take time, owing to
 | 
						||
delays at the peripheral.  After the peripheral has not responded for
 | 
						||
'inactivity' jiffies, a timeout will occur and the blocking function
 | 
						||
will return.
 | 
						||
 | 
						||
A timeout of 0 jiffies is a special case: the function must do as much
 | 
						||
as it can without blocking or leaving the hardware in an unknown
 | 
						||
state.  If port operations are performed from within an interrupt
 | 
						||
handler, for instance, a timeout of 0 jiffies should be used.
 | 
						||
 | 
						||
Once set for a registered device, the timeout will remain at the set
 | 
						||
value until set again.
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
port->ops->xxx_read/write_yyy
 | 
						||
 | 
						||
PORT FUNCTIONS
 | 
						||
--------------
 | 
						||
 | 
						||
The functions in the port->ops structure (struct parport_operations)
 | 
						||
are provided by the low-level driver responsible for that port.
 | 
						||
 | 
						||
port->ops->read_data - read the data register
 | 
						||
--------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
struct parport_operations {
 | 
						||
	...
 | 
						||
	unsigned char (*read_data) (struct parport *port);
 | 
						||
	...
 | 
						||
};
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
If port->modes contains the PARPORT_MODE_TRISTATE flag and the
 | 
						||
PARPORT_CONTROL_DIRECTION bit in the control register is set, this
 | 
						||
returns the value on the data pins.  If port->modes contains the
 | 
						||
PARPORT_MODE_TRISTATE flag and the PARPORT_CONTROL_DIRECTION bit is
 | 
						||
not set, the return value _may_ be the last value written to the data
 | 
						||
register.  Otherwise the return value is undefined.
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
write_data, read_status, write_control
 | 
						||
 | 
						||
port->ops->write_data - write the data register
 | 
						||
---------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
struct parport_operations {
 | 
						||
	...
 | 
						||
	void (*write_data) (struct parport *port, unsigned char d);
 | 
						||
	...
 | 
						||
};
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Writes to the data register.  May have side-effects (a STROBE pulse,
 | 
						||
for instance).
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
read_data, read_status, write_control
 | 
						||
 | 
						||
port->ops->read_status - read the status register
 | 
						||
----------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
struct parport_operations {
 | 
						||
	...
 | 
						||
	unsigned char (*read_status) (struct parport *port);
 | 
						||
	...
 | 
						||
};
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Reads from the status register.  This is a bitmask:
 | 
						||
 | 
						||
- PARPORT_STATUS_ERROR (printer fault, "nFault")
 | 
						||
- PARPORT_STATUS_SELECT (on-line, "Select")
 | 
						||
- PARPORT_STATUS_PAPEROUT (no paper, "PError")
 | 
						||
- PARPORT_STATUS_ACK (handshake, "nAck")
 | 
						||
- PARPORT_STATUS_BUSY (busy, "Busy")
 | 
						||
 | 
						||
There may be other bits set.
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
read_data, write_data, write_control
 | 
						||
 | 
						||
port->ops->read_control - read the control register
 | 
						||
-----------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
struct parport_operations {
 | 
						||
	...
 | 
						||
	unsigned char (*read_control) (struct parport *port);
 | 
						||
	...
 | 
						||
};
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Returns the last value written to the control register (either from
 | 
						||
write_control or frob_control).  No port access is performed.
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
read_data, write_data, read_status, write_control
 | 
						||
 | 
						||
port->ops->write_control - write the control register
 | 
						||
------------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
struct parport_operations {
 | 
						||
	...
 | 
						||
	void (*write_status) (struct parport *port, unsigned char s);
 | 
						||
	...
 | 
						||
};
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Writes to the control register. This is a bitmask:
 | 
						||
                          _______
 | 
						||
- PARPORT_CONTROL_STROBE (nStrobe)
 | 
						||
                          _______
 | 
						||
- PARPORT_CONTROL_AUTOFD (nAutoFd)
 | 
						||
                        _____
 | 
						||
- PARPORT_CONTROL_INIT (nInit)
 | 
						||
                          _________
 | 
						||
- PARPORT_CONTROL_SELECT (nSelectIn)
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
read_data, write_data, read_status, frob_control
 | 
						||
 | 
						||
port->ops->frob_control - write control register bits
 | 
						||
-----------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
struct parport_operations {
 | 
						||
	...
 | 
						||
	void (*frob_control) (struct parport *port,
 | 
						||
	                      unsigned char mask,
 | 
						||
			      unsigned char val);
 | 
						||
	...
 | 
						||
};
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
This is equivalent to reading from the control register, masking out
 | 
						||
the bits in mask, exclusive-or'ing with the bits in val, and writing
 | 
						||
the result to the control register.
 | 
						||
 | 
						||
As some ports don't allow reads from the control port, a software copy
 | 
						||
of its contents is maintained, so frob_control is in fact only one
 | 
						||
port access.
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
read_data, write_data, read_status, write_control
 | 
						||
 | 
						||
port->ops->enable_irq - enable interrupt generation
 | 
						||
---------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
struct parport_operations {
 | 
						||
	...
 | 
						||
	void (*enable_irq) (struct parport *port);
 | 
						||
	...
 | 
						||
};
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
The parallel port hardware is instructed to generate interrupts at
 | 
						||
appropriate moments, although those moments are
 | 
						||
architecture-specific.  For the PC architecture, interrupts are
 | 
						||
commonly generated on the rising edge of nAck.
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
disable_irq
 | 
						||
 | 
						||
port->ops->disable_irq - disable interrupt generation
 | 
						||
----------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
struct parport_operations {
 | 
						||
	...
 | 
						||
	void (*disable_irq) (struct parport *port);
 | 
						||
	...
 | 
						||
};
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
The parallel port hardware is instructed not to generate interrupts.
 | 
						||
The interrupt itself is not masked.
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
enable_irq
 | 
						||
 | 
						||
port->ops->data_forward - enable data drivers
 | 
						||
-----------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
struct parport_operations {
 | 
						||
	...
 | 
						||
	void (*data_forward) (struct parport *port);
 | 
						||
	...
 | 
						||
};
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Enables the data line drivers, for 8-bit host-to-peripheral
 | 
						||
communications.
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
data_reverse
 | 
						||
 | 
						||
port->ops->data_reverse - tristate the buffer
 | 
						||
-----------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
struct parport_operations {
 | 
						||
	...
 | 
						||
	void (*data_reverse) (struct parport *port);
 | 
						||
	...
 | 
						||
};
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Places the data bus in a high impedance state, if port->modes has the
 | 
						||
PARPORT_MODE_TRISTATE bit set.
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
data_forward
 | 
						||
 | 
						||
port->ops->epp_write_data - write EPP data
 | 
						||
-------------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
struct parport_operations {
 | 
						||
	...
 | 
						||
	size_t (*epp_write_data) (struct parport *port, const void *buf,
 | 
						||
				  size_t len, int flags);
 | 
						||
	...
 | 
						||
};
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Writes data in EPP mode, and returns the number of bytes written.
 | 
						||
 | 
						||
The 'flags' parameter may be one or more of the following,
 | 
						||
bitwise-or'ed together:
 | 
						||
 | 
						||
PARPORT_EPP_FAST	Use fast transfers. Some chips provide 16-bit and
 | 
						||
			32-bit registers.  However, if a transfer
 | 
						||
			times out, the return value may be unreliable.
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
epp_read_data, epp_write_addr, epp_read_addr
 | 
						||
 | 
						||
port->ops->epp_read_data - read EPP data
 | 
						||
------------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
struct parport_operations {
 | 
						||
	...
 | 
						||
	size_t (*epp_read_data) (struct parport *port, void *buf,
 | 
						||
				 size_t len, int flags);
 | 
						||
	...
 | 
						||
};
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Reads data in EPP mode, and returns the number of bytes read.
 | 
						||
 | 
						||
The 'flags' parameter may be one or more of the following,
 | 
						||
bitwise-or'ed together:
 | 
						||
 | 
						||
PARPORT_EPP_FAST	Use fast transfers. Some chips provide 16-bit and
 | 
						||
			32-bit registers.  However, if a transfer
 | 
						||
			times out, the return value may be unreliable.
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
epp_write_data, epp_write_addr, epp_read_addr
 | 
						||
 | 
						||
port->ops->epp_write_addr - write EPP address
 | 
						||
-------------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
struct parport_operations {
 | 
						||
	...
 | 
						||
	size_t (*epp_write_addr) (struct parport *port,
 | 
						||
				  const void *buf, size_t len, int flags);
 | 
						||
	...
 | 
						||
};
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Writes EPP addresses (8 bits each), and returns the number written.
 | 
						||
 | 
						||
The 'flags' parameter may be one or more of the following,
 | 
						||
bitwise-or'ed together:
 | 
						||
 | 
						||
PARPORT_EPP_FAST	Use fast transfers. Some chips provide 16-bit and
 | 
						||
			32-bit registers.  However, if a transfer
 | 
						||
			times out, the return value may be unreliable.
 | 
						||
 | 
						||
(Does PARPORT_EPP_FAST make sense for this function?)
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
epp_write_data, epp_read_data, epp_read_addr
 | 
						||
 | 
						||
port->ops->epp_read_addr - read EPP address
 | 
						||
------------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
struct parport_operations {
 | 
						||
	...
 | 
						||
	size_t (*epp_read_addr) (struct parport *port, void *buf,
 | 
						||
				 size_t len, int flags);
 | 
						||
	...
 | 
						||
};
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Reads EPP addresses (8 bits each), and returns the number read.
 | 
						||
 | 
						||
The 'flags' parameter may be one or more of the following,
 | 
						||
bitwise-or'ed together:
 | 
						||
 | 
						||
PARPORT_EPP_FAST	Use fast transfers. Some chips provide 16-bit and
 | 
						||
			32-bit registers.  However, if a transfer
 | 
						||
			times out, the return value may be unreliable.
 | 
						||
 | 
						||
(Does PARPORT_EPP_FAST make sense for this function?)
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
epp_write_data, epp_read_data, epp_write_addr
 | 
						||
 | 
						||
port->ops->ecp_write_data - write a block of ECP data
 | 
						||
-------------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
struct parport_operations {
 | 
						||
	...
 | 
						||
	size_t (*ecp_write_data) (struct parport *port,
 | 
						||
				  const void *buf, size_t len, int flags);
 | 
						||
	...
 | 
						||
};
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Writes a block of ECP data.  The 'flags' parameter is ignored.
 | 
						||
 | 
						||
RETURN VALUE
 | 
						||
 | 
						||
The number of bytes written.
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
ecp_read_data, ecp_write_addr
 | 
						||
 | 
						||
port->ops->ecp_read_data - read a block of ECP data
 | 
						||
------------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
struct parport_operations {
 | 
						||
	...
 | 
						||
	size_t (*ecp_read_data) (struct parport *port,
 | 
						||
				 void *buf, size_t len, int flags);
 | 
						||
	...
 | 
						||
};
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Reads a block of ECP data.  The 'flags' parameter is ignored.
 | 
						||
 | 
						||
RETURN VALUE
 | 
						||
 | 
						||
The number of bytes read.  NB. There may be more unread data in a
 | 
						||
FIFO.  Is there a way of stunning the FIFO to prevent this?
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
ecp_write_block, ecp_write_addr
 | 
						||
 | 
						||
port->ops->ecp_write_addr - write a block of ECP addresses
 | 
						||
-------------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
struct parport_operations {
 | 
						||
	...
 | 
						||
	size_t (*ecp_write_addr) (struct parport *port,
 | 
						||
				  const void *buf, size_t len, int flags);
 | 
						||
	...
 | 
						||
};
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Writes a block of ECP addresses.  The 'flags' parameter is ignored.
 | 
						||
 | 
						||
RETURN VALUE
 | 
						||
 | 
						||
The number of bytes written.
 | 
						||
 | 
						||
NOTES
 | 
						||
 | 
						||
This may use a FIFO, and if so shall not return until the FIFO is empty.
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
ecp_read_data, ecp_write_data
 | 
						||
 | 
						||
port->ops->nibble_read_data - read a block of data in nibble mode
 | 
						||
---------------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
struct parport_operations {
 | 
						||
	...
 | 
						||
	size_t (*nibble_read_data) (struct parport *port,
 | 
						||
				    void *buf, size_t len, int flags);
 | 
						||
	...
 | 
						||
};
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Reads a block of data in nibble mode.  The 'flags' parameter is ignored.
 | 
						||
 | 
						||
RETURN VALUE
 | 
						||
 | 
						||
The number of whole bytes read.
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
byte_read_data, compat_write_data
 | 
						||
 | 
						||
port->ops->byte_read_data - read a block of data in byte mode
 | 
						||
-------------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
struct parport_operations {
 | 
						||
	...
 | 
						||
	size_t (*byte_read_data) (struct parport *port,
 | 
						||
				  void *buf, size_t len, int flags);
 | 
						||
	...
 | 
						||
};
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Reads a block of data in byte mode.  The 'flags' parameter is ignored.
 | 
						||
 | 
						||
RETURN VALUE
 | 
						||
 | 
						||
The number of bytes read.
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
nibble_read_data, compat_write_data
 | 
						||
 | 
						||
port->ops->compat_write_data - write a block of data in compatibility mode
 | 
						||
----------------------------
 | 
						||
 | 
						||
SYNOPSIS
 | 
						||
 | 
						||
#include <linux/parport.h>
 | 
						||
 | 
						||
struct parport_operations {
 | 
						||
	...
 | 
						||
	size_t (*compat_write_data) (struct parport *port,
 | 
						||
				     const void *buf, size_t len, int flags);
 | 
						||
	...
 | 
						||
};
 | 
						||
 | 
						||
DESCRIPTION
 | 
						||
 | 
						||
Writes a block of data in compatibility mode.  The 'flags' parameter
 | 
						||
is ignored.
 | 
						||
 | 
						||
RETURN VALUE
 | 
						||
 | 
						||
The number of bytes written.
 | 
						||
 | 
						||
SEE ALSO
 | 
						||
 | 
						||
nibble_read_data, byte_read_data
 |