blob: 120eb20dbb09199afc1628a2ca1187812789bde9 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001PARPORT interface documentation
2-------------------------------
3
4Time-stamp: <2000-02-24 13:30:20 twaugh>
5
6Described here are the following functions:
7
8Global functions:
9 parport_register_driver
10 parport_unregister_driver
11 parport_enumerate
12 parport_register_device
13 parport_unregister_device
14 parport_claim
15 parport_claim_or_block
16 parport_release
17 parport_yield
18 parport_yield_blocking
19 parport_wait_peripheral
20 parport_poll_peripheral
21 parport_wait_event
22 parport_negotiate
23 parport_read
24 parport_write
25 parport_open
26 parport_close
27 parport_device_id
Linus Torvalds1da177e2005-04-16 15:20:36 -070028 parport_device_coords
29 parport_find_class
30 parport_find_device
31 parport_set_timeout
32
33Port functions (can be overridden by low-level drivers):
34 SPP:
35 port->ops->read_data
36 port->ops->write_data
37 port->ops->read_status
38 port->ops->read_control
39 port->ops->write_control
40 port->ops->frob_control
41 port->ops->enable_irq
42 port->ops->disable_irq
43 port->ops->data_forward
44 port->ops->data_reverse
45
46 EPP:
47 port->ops->epp_write_data
48 port->ops->epp_read_data
49 port->ops->epp_write_addr
50 port->ops->epp_read_addr
51
52 ECP:
53 port->ops->ecp_write_data
54 port->ops->ecp_read_data
55 port->ops->ecp_write_addr
56
57 Other:
58 port->ops->nibble_read_data
59 port->ops->byte_read_data
60 port->ops->compat_write_data
61
62The parport subsystem comprises 'parport' (the core port-sharing
63code), and a variety of low-level drivers that actually do the port
64accesses. Each low-level driver handles a particular style of port
65(PC, Amiga, and so on).
66
67The parport interface to the device driver author can be broken down
68into global functions and port functions.
69
70The global functions are mostly for communicating between the device
71driver and the parport subsystem: acquiring a list of available ports,
72claiming a port for exclusive use, and so on. They also include
73'generic' functions for doing standard things that will work on any
74IEEE 1284-capable architecture.
75
76The port functions are provided by the low-level drivers, although the
77core parport module provides generic 'defaults' for some routines.
78The port functions can be split into three groups: SPP, EPP, and ECP.
79
80SPP (Standard Parallel Port) functions modify so-called 'SPP'
81registers: data, status, and control. The hardware may not actually
82have registers exactly like that, but the PC does and this interface is
83modelled after common PC implementations. Other low-level drivers may
84be able to emulate most of the functionality.
85
86EPP (Enhanced Parallel Port) functions are provided for reading and
87writing in IEEE 1284 EPP mode, and ECP (Extended Capabilities Port)
88functions are used for IEEE 1284 ECP mode. (What about BECP? Does
89anyone care?)
90
91Hardware assistance for EPP and/or ECP transfers may or may not be
92available, and if it is available it may or may not be used. If
93hardware is not used, the transfer will be software-driven. In order
94to cope with peripherals that only tenuously support IEEE 1284, a
95low-level driver specific function is provided, for altering 'fudge
96factors'.
97
98GLOBAL FUNCTIONS
99----------------
100
101parport_register_driver - register a device driver with parport
102-----------------------
103
104SYNOPSIS
105
106#include <linux/parport.h>
107
108struct parport_driver {
109 const char *name;
110 void (*attach) (struct parport *);
111 void (*detach) (struct parport *);
112 struct parport_driver *next;
113};
114int parport_register_driver (struct parport_driver *driver);
115
116DESCRIPTION
117
118In order to be notified about parallel ports when they are detected,
119parport_register_driver should be called. Your driver will
120immediately be notified of all ports that have already been detected,
121and of each new port as low-level drivers are loaded.
122
123A 'struct parport_driver' contains the textual name of your driver,
124a pointer to a function to handle new ports, and a pointer to a
125function to handle ports going away due to a low-level driver
126unloading. Ports will only be detached if they are not being used
127(i.e. there are no devices registered on them).
128
129The visible parts of the 'struct parport *' argument given to
130attach/detach are:
131
132struct parport
133{
134 struct parport *next; /* next parport in list */
135 const char *name; /* port's name */
136 unsigned int modes; /* bitfield of hardware modes */
137 struct parport_device_info probe_info;
138 /* IEEE1284 info */
139 int number; /* parport index */
140 struct parport_operations *ops;
141 ...
142};
143
144There are other members of the structure, but they should not be
145touched.
146
147The 'modes' member summarises the capabilities of the underlying
148hardware. It consists of flags which may be bitwise-ored together:
149
150 PARPORT_MODE_PCSPP IBM PC registers are available,
151 i.e. functions that act on data,
152 control and status registers are
153 probably writing directly to the
154 hardware.
155 PARPORT_MODE_TRISTATE The data drivers may be turned off.
156 This allows the data lines to be used
157 for reverse (peripheral to host)
158 transfers.
159 PARPORT_MODE_COMPAT The hardware can assist with
160 compatibility-mode (printer)
161 transfers, i.e. compat_write_block.
162 PARPORT_MODE_EPP The hardware can assist with EPP
163 transfers.
164 PARPORT_MODE_ECP The hardware can assist with ECP
165 transfers.
166 PARPORT_MODE_DMA The hardware can use DMA, so you might
167 want to pass ISA DMA-able memory
168 (i.e. memory allocated using the
169 GFP_DMA flag with kmalloc) to the
170 low-level driver in order to take
171 advantage of it.
172
173There may be other flags in 'modes' as well.
174
175The contents of 'modes' is advisory only. For example, if the
176hardware is capable of DMA, and PARPORT_MODE_DMA is in 'modes', it
177doesn't necessarily mean that DMA will always be used when possible.
178Similarly, hardware that is capable of assisting ECP transfers won't
179necessarily be used.
180
181RETURN VALUE
182
183Zero on success, otherwise an error code.
184
185ERRORS
186
187None. (Can it fail? Why return int?)
188
189EXAMPLE
190
191static void lp_attach (struct parport *port)
192{
193 ...
194 private = kmalloc (...);
195 dev[count++] = parport_register_device (...);
196 ...
197}
198
199static void lp_detach (struct parport *port)
200{
201 ...
202}
203
204static struct parport_driver lp_driver = {
205 "lp",
206 lp_attach,
207 lp_detach,
208 NULL /* always put NULL here */
209};
210
211int lp_init (void)
212{
213 ...
214 if (parport_register_driver (&lp_driver)) {
215 /* Failed; nothing we can do. */
216 return -EIO;
217 }
218 ...
219}
220
221SEE ALSO
222
223parport_unregister_driver, parport_register_device, parport_enumerate
224
225parport_unregister_driver - tell parport to forget about this driver
226-------------------------
227
228SYNOPSIS
229
230#include <linux/parport.h>
231
232struct parport_driver {
233 const char *name;
234 void (*attach) (struct parport *);
235 void (*detach) (struct parport *);
236 struct parport_driver *next;
237};
238void parport_unregister_driver (struct parport_driver *driver);
239
240DESCRIPTION
241
242This tells parport not to notify the device driver of new ports or of
243ports going away. Registered devices belonging to that driver are NOT
244unregistered: parport_unregister_device must be used for each one.
245
246EXAMPLE
247
248void cleanup_module (void)
249{
250 ...
251 /* Stop notifications. */
252 parport_unregister_driver (&lp_driver);
253
254 /* Unregister devices. */
255 for (i = 0; i < NUM_DEVS; i++)
256 parport_unregister_device (dev[i]);
257 ...
258}
259
260SEE ALSO
261
262parport_register_driver, parport_enumerate
263
264parport_enumerate - retrieve a list of parallel ports (DEPRECATED)
265-----------------
266
267SYNOPSIS
268
269#include <linux/parport.h>
270
271struct parport *parport_enumerate (void);
272
273DESCRIPTION
274
275Retrieve the first of a list of valid parallel ports for this machine.
276Successive parallel ports can be found using the 'struct parport
277*next' element of the 'struct parport *' that is returned. If 'next'
278is NULL, there are no more parallel ports in the list. The number of
279ports in the list will not exceed PARPORT_MAX.
280
281RETURN VALUE
282
283A 'struct parport *' describing a valid parallel port for the machine,
284or NULL if there are none.
285
286ERRORS
287
288This function can return NULL to indicate that there are no parallel
289ports to use.
290
291EXAMPLE
292
293int detect_device (void)
294{
295 struct parport *port;
296
297 for (port = parport_enumerate ();
298 port != NULL;
299 port = port->next) {
300 /* Try to detect a device on the port... */
301 ...
302 }
303 }
304
305 ...
306}
307
308NOTES
309
310parport_enumerate is deprecated; parport_register_driver should be
311used instead.
312
313SEE ALSO
314
315parport_register_driver, parport_unregister_driver
316
317parport_register_device - register to use a port
318-----------------------
319
320SYNOPSIS
321
322#include <linux/parport.h>
323
324typedef int (*preempt_func) (void *handle);
325typedef void (*wakeup_func) (void *handle);
326typedef int (*irq_func) (int irq, void *handle, struct pt_regs *);
327
328struct pardevice *parport_register_device(struct parport *port,
329 const char *name,
330 preempt_func preempt,
331 wakeup_func wakeup,
332 irq_func irq,
333 int flags,
334 void *handle);
335
336DESCRIPTION
337
338Use this function to register your device driver on a parallel port
339('port'). Once you have done that, you will be able to use
340parport_claim and parport_release in order to use the port.
341
Mikulas Patockacdb32702007-11-22 21:26:01 +0100342The ('name') argument is the name of the device that appears in /proc
343filesystem. The string must be valid for the whole lifetime of the
344device (until parport_unregister_device is called).
345
Linus Torvalds1da177e2005-04-16 15:20:36 -0700346This function will register three callbacks into your driver:
347'preempt', 'wakeup' and 'irq'. Each of these may be NULL in order to
348indicate that you do not want a callback.
349
350When the 'preempt' function is called, it is because another driver
351wishes to use the parallel port. The 'preempt' function should return
352non-zero if the parallel port cannot be released yet -- if zero is
353returned, the port is lost to another driver and the port must be
354re-claimed before use.
355
356The 'wakeup' function is called once another driver has released the
357port and no other driver has yet claimed it. You can claim the
358parallel port from within the 'wakeup' function (in which case the
359claim is guaranteed to succeed), or choose not to if you don't need it
360now.
361
362If an interrupt occurs on the parallel port your driver has claimed,
363the 'irq' function will be called. (Write something about shared
364interrupts here.)
365
366The 'handle' is a pointer to driver-specific data, and is passed to
367the callback functions.
368
369'flags' may be a bitwise combination of the following flags:
370
371 Flag Meaning
372 PARPORT_DEV_EXCL The device cannot share the parallel port at all.
373 Use this only when absolutely necessary.
374
375The typedefs are not actually defined -- they are only shown in order
376to make the function prototype more readable.
377
378The visible parts of the returned 'struct pardevice' are:
379
380struct pardevice {
381 struct parport *port; /* Associated port */
382 void *private; /* Device driver's 'handle' */
383 ...
384};
385
386RETURN VALUE
387
388A 'struct pardevice *': a handle to the registered parallel port
389device that can be used for parport_claim, parport_release, etc.
390
391ERRORS
392
393A return value of NULL indicates that there was a problem registering
394a device on that port.
395
396EXAMPLE
397
398static int preempt (void *handle)
399{
400 if (busy_right_now)
401 return 1;
402
403 must_reclaim_port = 1;
404 return 0;
405}
406
407static void wakeup (void *handle)
408{
409 struct toaster *private = handle;
410 struct pardevice *dev = private->dev;
411 if (!dev) return; /* avoid races */
412
413 if (want_port)
414 parport_claim (dev);
415}
416
417static int toaster_detect (struct toaster *private, struct parport *port)
418{
419 private->dev = parport_register_device (port, "toaster", preempt,
420 wakeup, NULL, 0,
421 private);
422 if (!private->dev)
423 /* Couldn't register with parport. */
424 return -EIO;
425
426 must_reclaim_port = 0;
427 busy_right_now = 1;
428 parport_claim_or_block (private->dev);
429 ...
430 /* Don't need the port while the toaster warms up. */
431 busy_right_now = 0;
432 ...
433 busy_right_now = 1;
434 if (must_reclaim_port) {
435 parport_claim_or_block (private->dev);
436 must_reclaim_port = 0;
437 }
438 ...
439}
440
441SEE ALSO
442
443parport_unregister_device, parport_claim
444
445parport_unregister_device - finish using a port
446-------------------------
447
448SYNPOPSIS
449
450#include <linux/parport.h>
451
452void parport_unregister_device (struct pardevice *dev);
453
454DESCRIPTION
455
456This function is the opposite of parport_register_device. After using
457parport_unregister_device, 'dev' is no longer a valid device handle.
458
459You should not unregister a device that is currently claimed, although
460if you do it will be released automatically.
461
462EXAMPLE
463
464 ...
465 kfree (dev->private); /* before we lose the pointer */
466 parport_unregister_device (dev);
467 ...
468
469SEE ALSO
470
471parport_unregister_driver
472
473parport_claim, parport_claim_or_block - claim the parallel port for a device
474-------------------------------------
475
476SYNOPSIS
477
478#include <linux/parport.h>
479
480int parport_claim (struct pardevice *dev);
481int parport_claim_or_block (struct pardevice *dev);
482
483DESCRIPTION
484
485These functions attempt to gain control of the parallel port on which
486'dev' is registered. 'parport_claim' does not block, but
487'parport_claim_or_block' may do. (Put something here about blocking
488interruptibly or non-interruptibly.)
489
490You should not try to claim a port that you have already claimed.
491
492RETURN VALUE
493
494A return value of zero indicates that the port was successfully
495claimed, and the caller now has possession of the parallel port.
496
497If 'parport_claim_or_block' blocks before returning successfully, the
498return value is positive.
499
500ERRORS
501
502 -EAGAIN The port is unavailable at the moment, but another attempt
503 to claim it may succeed.
504
505SEE ALSO
506
507parport_release
508
509parport_release - release the parallel port
510---------------
511
512SYNOPSIS
513
514#include <linux/parport.h>
515
516void parport_release (struct pardevice *dev);
517
518DESCRIPTION
519
520Once a parallel port device has been claimed, it can be released using
521'parport_release'. It cannot fail, but you should not release a
522device that you do not have possession of.
523
524EXAMPLE
525
526static size_t write (struct pardevice *dev, const void *buf,
527 size_t len)
528{
529 ...
530 written = dev->port->ops->write_ecp_data (dev->port, buf,
531 len);
532 parport_release (dev);
533 ...
534}
535
536
537SEE ALSO
538
539change_mode, parport_claim, parport_claim_or_block, parport_yield
540
541parport_yield, parport_yield_blocking - temporarily release a parallel port
542-------------------------------------
543
544SYNOPSIS
545
546#include <linux/parport.h>
547
548int parport_yield (struct pardevice *dev)
549int parport_yield_blocking (struct pardevice *dev);
550
551DESCRIPTION
552
553When a driver has control of a parallel port, it may allow another
554driver to temporarily 'borrow' it. 'parport_yield' does not block;
555'parport_yield_blocking' may do.
556
557RETURN VALUE
558
559A return value of zero indicates that the caller still owns the port
560and the call did not block.
561
562A positive return value from 'parport_yield_blocking' indicates that
563the caller still owns the port and the call blocked.
564
565A return value of -EAGAIN indicates that the caller no longer owns the
566port, and it must be re-claimed before use.
567
568ERRORS
569
570 -EAGAIN Ownership of the parallel port was given away.
571
572SEE ALSO
573
574parport_release
575
576parport_wait_peripheral - wait for status lines, up to 35ms
577-----------------------
578
579SYNOPSIS
580
581#include <linux/parport.h>
582
583int parport_wait_peripheral (struct parport *port,
584 unsigned char mask,
585 unsigned char val);
586
587DESCRIPTION
588
589Wait for the status lines in mask to match the values in val.
590
591RETURN VALUE
592
593 -EINTR a signal is pending
594 0 the status lines in mask have values in val
595 1 timed out while waiting (35ms elapsed)
596
597SEE ALSO
598
599parport_poll_peripheral
600
601parport_poll_peripheral - wait for status lines, in usec
602-----------------------
603
604SYNOPSIS
605
606#include <linux/parport.h>
607
608int parport_poll_peripheral (struct parport *port,
609 unsigned char mask,
610 unsigned char val,
611 int usec);
612
613DESCRIPTION
614
615Wait for the status lines in mask to match the values in val.
616
617RETURN VALUE
618
619 -EINTR a signal is pending
620 0 the status lines in mask have values in val
621 1 timed out while waiting (usec microseconds have elapsed)
622
623SEE ALSO
624
625parport_wait_peripheral
626
627parport_wait_event - wait for an event on a port
628------------------
629
630SYNOPSIS
631
632#include <linux/parport.h>
633
634int parport_wait_event (struct parport *port, signed long timeout)
635
636DESCRIPTION
637
638Wait for an event (e.g. interrupt) on a port. The timeout is in
639jiffies.
640
641RETURN VALUE
642
643 0 success
644 <0 error (exit as soon as possible)
645 >0 timed out
646
647parport_negotiate - perform IEEE 1284 negotiation
648-----------------
649
650SYNOPSIS
651
652#include <linux/parport.h>
653
654int parport_negotiate (struct parport *, int mode);
655
656DESCRIPTION
657
658Perform IEEE 1284 negotiation.
659
660RETURN VALUE
661
662 0 handshake OK; IEEE 1284 peripheral and mode available
663 -1 handshake failed; peripheral not compliant (or none present)
664 1 handshake OK; IEEE 1284 peripheral present but mode not
665 available
666
667SEE ALSO
668
669parport_read, parport_write
670
671parport_read - read data from device
672------------
673
674SYNOPSIS
675
676#include <linux/parport.h>
677
678ssize_t parport_read (struct parport *, void *buf, size_t len);
679
680DESCRIPTION
681
682Read data from device in current IEEE 1284 transfer mode. This only
683works for modes that support reverse data transfer.
684
685RETURN VALUE
686
687If negative, an error code; otherwise the number of bytes transferred.
688
689SEE ALSO
690
691parport_write, parport_negotiate
692
693parport_write - write data to device
694-------------
695
696SYNOPSIS
697
698#include <linux/parport.h>
699
700ssize_t parport_write (struct parport *, const void *buf, size_t len);
701
702DESCRIPTION
703
704Write data to device in current IEEE 1284 transfer mode. This only
705works for modes that support forward data transfer.
706
707RETURN VALUE
708
709If negative, an error code; otherwise the number of bytes transferred.
710
711SEE ALSO
712
713parport_read, parport_negotiate
714
715parport_open - register device for particular device number
716------------
717
718SYNOPSIS
719
720#include <linux/parport.h>
721
722struct pardevice *parport_open (int devnum, const char *name,
723 int (*pf) (void *),
724 void (*kf) (void *),
725 void (*irqf) (int, void *,
726 struct pt_regs *),
727 int flags, void *handle);
728
729DESCRIPTION
730
731This is like parport_register_device but takes a device number instead
732of a pointer to a struct parport.
733
734RETURN VALUE
735
736See parport_register_device. If no device is associated with devnum,
737NULL is returned.
738
739SEE ALSO
740
Eric W. Biederman25398a12007-10-18 03:05:30 -0700741parport_register_device
Linus Torvalds1da177e2005-04-16 15:20:36 -0700742
743parport_close - unregister device for particular device number
744-------------
745
746SYNOPSIS
747
748#include <linux/parport.h>
749
750void parport_close (struct pardevice *dev);
751
752DESCRIPTION
753
754This is the equivalent of parport_unregister_device for parport_open.
755
756SEE ALSO
757
758parport_unregister_device, parport_open
759
760parport_device_id - obtain IEEE 1284 Device ID
761-----------------
762
763SYNOPSIS
764
765#include <linux/parport.h>
766
767ssize_t parport_device_id (int devnum, char *buffer, size_t len);
768
769DESCRIPTION
770
771Obtains the IEEE 1284 Device ID associated with a given device.
772
773RETURN VALUE
774
775If negative, an error code; otherwise, the number of bytes of buffer
776that contain the device ID. The format of the device ID is as
777follows:
778
779[length][ID]
780
781The first two bytes indicate the inclusive length of the entire Device
782ID, and are in big-endian order. The ID is a sequence of pairs of the
783form:
784
785key:value;
786
787NOTES
788
789Many devices have ill-formed IEEE 1284 Device IDs.
790
791SEE ALSO
792
Eric W. Biederman25398a12007-10-18 03:05:30 -0700793parport_find_class, parport_find_device
Linus Torvalds1da177e2005-04-16 15:20:36 -0700794
795parport_device_coords - convert device number to device coordinates
796------------------
797
798SYNOPSIS
799
800#include <linux/parport.h>
801
802int parport_device_coords (int devnum, int *parport, int *mux,
803 int *daisy);
804
805DESCRIPTION
806
807Convert between device number (zero-based) and device coordinates
808(port, multiplexor, daisy chain address).
809
810RETURN VALUE
811
812Zero on success, in which case the coordinates are (*parport, *mux,
813*daisy).
814
815SEE ALSO
816
Eric W. Biederman25398a12007-10-18 03:05:30 -0700817parport_open, parport_device_id
Linus Torvalds1da177e2005-04-16 15:20:36 -0700818
819parport_find_class - find a device by its class
820------------------
821
822SYNOPSIS
823
824#include <linux/parport.h>
825
826typedef enum {
827 PARPORT_CLASS_LEGACY = 0, /* Non-IEEE1284 device */
828 PARPORT_CLASS_PRINTER,
829 PARPORT_CLASS_MODEM,
830 PARPORT_CLASS_NET,
831 PARPORT_CLASS_HDC, /* Hard disk controller */
832 PARPORT_CLASS_PCMCIA,
833 PARPORT_CLASS_MEDIA, /* Multimedia device */
834 PARPORT_CLASS_FDC, /* Floppy disk controller */
835 PARPORT_CLASS_PORTS,
836 PARPORT_CLASS_SCANNER,
837 PARPORT_CLASS_DIGCAM,
838 PARPORT_CLASS_OTHER, /* Anything else */
839 PARPORT_CLASS_UNSPEC, /* No CLS field in ID */
840 PARPORT_CLASS_SCSIADAPTER
841} parport_device_class;
842
843int parport_find_class (parport_device_class cls, int from);
844
845DESCRIPTION
846
847Find a device by class. The search starts from device number from+1.
848
849RETURN VALUE
850
851The device number of the next device in that class, or -1 if no such
852device exists.
853
854NOTES
855
856Example usage:
857
858int devnum = -1;
859while ((devnum = parport_find_class (PARPORT_CLASS_DIGCAM, devnum)) != -1) {
860 struct pardevice *dev = parport_open (devnum, ...);
861 ...
862}
863
864SEE ALSO
865
866parport_find_device, parport_open, parport_device_id
867
868parport_find_device - find a device by its class
869------------------
870
871SYNOPSIS
872
873#include <linux/parport.h>
874
875int parport_find_device (const char *mfg, const char *mdl, int from);
876
877DESCRIPTION
878
879Find a device by vendor and model. The search starts from device
880number from+1.
881
882RETURN VALUE
883
884The device number of the next device matching the specifications, or
885-1 if no such device exists.
886
887NOTES
888
889Example usage:
890
891int devnum = -1;
892while ((devnum = parport_find_device ("IOMEGA", "ZIP+", devnum)) != -1) {
893 struct pardevice *dev = parport_open (devnum, ...);
894 ...
895}
896
897SEE ALSO
898
899parport_find_class, parport_open, parport_device_id
900
901parport_set_timeout - set the inactivity timeout
902-------------------
903
904SYNOPSIS
905
906#include <linux/parport.h>
907
908long parport_set_timeout (struct pardevice *dev, long inactivity);
909
910DESCRIPTION
911
912Set the inactivity timeout, in jiffies, for a registered device. The
913previous timeout is returned.
914
915RETURN VALUE
916
917The previous timeout, in jiffies.
918
919NOTES
920
921Some of the port->ops functions for a parport may take time, owing to
922delays at the peripheral. After the peripheral has not responded for
923'inactivity' jiffies, a timeout will occur and the blocking function
924will return.
925
926A timeout of 0 jiffies is a special case: the function must do as much
927as it can without blocking or leaving the hardware in an unknown
928state. If port operations are performed from within an interrupt
929handler, for instance, a timeout of 0 jiffies should be used.
930
931Once set for a registered device, the timeout will remain at the set
932value until set again.
933
934SEE ALSO
935
936port->ops->xxx_read/write_yyy
937
938PORT FUNCTIONS
939--------------
940
941The functions in the port->ops structure (struct parport_operations)
942are provided by the low-level driver responsible for that port.
943
944port->ops->read_data - read the data register
945--------------------
946
947SYNOPSIS
948
949#include <linux/parport.h>
950
951struct parport_operations {
952 ...
953 unsigned char (*read_data) (struct parport *port);
954 ...
955};
956
957DESCRIPTION
958
959If port->modes contains the PARPORT_MODE_TRISTATE flag and the
960PARPORT_CONTROL_DIRECTION bit in the control register is set, this
961returns the value on the data pins. If port->modes contains the
962PARPORT_MODE_TRISTATE flag and the PARPORT_CONTROL_DIRECTION bit is
963not set, the return value _may_ be the last value written to the data
964register. Otherwise the return value is undefined.
965
966SEE ALSO
967
968write_data, read_status, write_control
969
970port->ops->write_data - write the data register
971---------------------
972
973SYNOPSIS
974
975#include <linux/parport.h>
976
977struct parport_operations {
978 ...
979 void (*write_data) (struct parport *port, unsigned char d);
980 ...
981};
982
983DESCRIPTION
984
985Writes to the data register. May have side-effects (a STROBE pulse,
986for instance).
987
988SEE ALSO
989
990read_data, read_status, write_control
991
992port->ops->read_status - read the status register
993----------------------
994
995SYNOPSIS
996
997#include <linux/parport.h>
998
999struct parport_operations {
1000 ...
1001 unsigned char (*read_status) (struct parport *port);
1002 ...
1003};
1004
1005DESCRIPTION
1006
1007Reads from the status register. This is a bitmask:
1008
1009- PARPORT_STATUS_ERROR (printer fault, "nFault")
1010- PARPORT_STATUS_SELECT (on-line, "Select")
1011- PARPORT_STATUS_PAPEROUT (no paper, "PError")
1012- PARPORT_STATUS_ACK (handshake, "nAck")
1013- PARPORT_STATUS_BUSY (busy, "Busy")
1014
1015There may be other bits set.
1016
1017SEE ALSO
1018
1019read_data, write_data, write_control
1020
1021port->ops->read_control - read the control register
1022-----------------------
1023
1024SYNOPSIS
1025
1026#include <linux/parport.h>
1027
1028struct parport_operations {
1029 ...
1030 unsigned char (*read_control) (struct parport *port);
1031 ...
1032};
1033
1034DESCRIPTION
1035
1036Returns the last value written to the control register (either from
1037write_control or frob_control). No port access is performed.
1038
1039SEE ALSO
1040
1041read_data, write_data, read_status, write_control
1042
1043port->ops->write_control - write the control register
1044------------------------
1045
1046SYNOPSIS
1047
1048#include <linux/parport.h>
1049
1050struct parport_operations {
1051 ...
Arnaud Giersch0ef3b492006-02-03 03:04:21 -08001052 void (*write_control) (struct parport *port, unsigned char s);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001053 ...
1054};
1055
1056DESCRIPTION
1057
1058Writes to the control register. This is a bitmask:
1059 _______
1060- PARPORT_CONTROL_STROBE (nStrobe)
1061 _______
1062- PARPORT_CONTROL_AUTOFD (nAutoFd)
1063 _____
1064- PARPORT_CONTROL_INIT (nInit)
1065 _________
1066- PARPORT_CONTROL_SELECT (nSelectIn)
1067
1068SEE ALSO
1069
1070read_data, write_data, read_status, frob_control
1071
1072port->ops->frob_control - write control register bits
1073-----------------------
1074
1075SYNOPSIS
1076
1077#include <linux/parport.h>
1078
1079struct parport_operations {
1080 ...
Arnaud Giersch0ef3b492006-02-03 03:04:21 -08001081 unsigned char (*frob_control) (struct parport *port,
1082 unsigned char mask,
1083 unsigned char val);
Linus Torvalds1da177e2005-04-16 15:20:36 -07001084 ...
1085};
1086
1087DESCRIPTION
1088
1089This is equivalent to reading from the control register, masking out
1090the bits in mask, exclusive-or'ing with the bits in val, and writing
1091the result to the control register.
1092
1093As some ports don't allow reads from the control port, a software copy
1094of its contents is maintained, so frob_control is in fact only one
1095port access.
1096
1097SEE ALSO
1098
1099read_data, write_data, read_status, write_control
1100
1101port->ops->enable_irq - enable interrupt generation
1102---------------------
1103
1104SYNOPSIS
1105
1106#include <linux/parport.h>
1107
1108struct parport_operations {
1109 ...
1110 void (*enable_irq) (struct parport *port);
1111 ...
1112};
1113
1114DESCRIPTION
1115
1116The parallel port hardware is instructed to generate interrupts at
1117appropriate moments, although those moments are
1118architecture-specific. For the PC architecture, interrupts are
1119commonly generated on the rising edge of nAck.
1120
1121SEE ALSO
1122
1123disable_irq
1124
1125port->ops->disable_irq - disable interrupt generation
1126----------------------
1127
1128SYNOPSIS
1129
1130#include <linux/parport.h>
1131
1132struct parport_operations {
1133 ...
1134 void (*disable_irq) (struct parport *port);
1135 ...
1136};
1137
1138DESCRIPTION
1139
1140The parallel port hardware is instructed not to generate interrupts.
1141The interrupt itself is not masked.
1142
1143SEE ALSO
1144
1145enable_irq
1146
1147port->ops->data_forward - enable data drivers
1148-----------------------
1149
1150SYNOPSIS
1151
1152#include <linux/parport.h>
1153
1154struct parport_operations {
1155 ...
1156 void (*data_forward) (struct parport *port);
1157 ...
1158};
1159
1160DESCRIPTION
1161
1162Enables the data line drivers, for 8-bit host-to-peripheral
1163communications.
1164
1165SEE ALSO
1166
1167data_reverse
1168
1169port->ops->data_reverse - tristate the buffer
1170-----------------------
1171
1172SYNOPSIS
1173
1174#include <linux/parport.h>
1175
1176struct parport_operations {
1177 ...
1178 void (*data_reverse) (struct parport *port);
1179 ...
1180};
1181
1182DESCRIPTION
1183
1184Places the data bus in a high impedance state, if port->modes has the
1185PARPORT_MODE_TRISTATE bit set.
1186
1187SEE ALSO
1188
1189data_forward
1190
1191port->ops->epp_write_data - write EPP data
1192-------------------------
1193
1194SYNOPSIS
1195
1196#include <linux/parport.h>
1197
1198struct parport_operations {
1199 ...
1200 size_t (*epp_write_data) (struct parport *port, const void *buf,
1201 size_t len, int flags);
1202 ...
1203};
1204
1205DESCRIPTION
1206
1207Writes data in EPP mode, and returns the number of bytes written.
1208
1209The 'flags' parameter may be one or more of the following,
1210bitwise-or'ed together:
1211
1212PARPORT_EPP_FAST Use fast transfers. Some chips provide 16-bit and
1213 32-bit registers. However, if a transfer
1214 times out, the return value may be unreliable.
1215
1216SEE ALSO
1217
1218epp_read_data, epp_write_addr, epp_read_addr
1219
1220port->ops->epp_read_data - read EPP data
1221------------------------
1222
1223SYNOPSIS
1224
1225#include <linux/parport.h>
1226
1227struct parport_operations {
1228 ...
1229 size_t (*epp_read_data) (struct parport *port, void *buf,
1230 size_t len, int flags);
1231 ...
1232};
1233
1234DESCRIPTION
1235
1236Reads data in EPP mode, and returns the number of bytes read.
1237
1238The 'flags' parameter may be one or more of the following,
1239bitwise-or'ed together:
1240
1241PARPORT_EPP_FAST Use fast transfers. Some chips provide 16-bit and
1242 32-bit registers. However, if a transfer
1243 times out, the return value may be unreliable.
1244
1245SEE ALSO
1246
1247epp_write_data, epp_write_addr, epp_read_addr
1248
1249port->ops->epp_write_addr - write EPP address
1250-------------------------
1251
1252SYNOPSIS
1253
1254#include <linux/parport.h>
1255
1256struct parport_operations {
1257 ...
1258 size_t (*epp_write_addr) (struct parport *port,
1259 const void *buf, size_t len, int flags);
1260 ...
1261};
1262
1263DESCRIPTION
1264
1265Writes EPP addresses (8 bits each), and returns the number written.
1266
1267The 'flags' parameter may be one or more of the following,
1268bitwise-or'ed together:
1269
1270PARPORT_EPP_FAST Use fast transfers. Some chips provide 16-bit and
1271 32-bit registers. However, if a transfer
1272 times out, the return value may be unreliable.
1273
1274(Does PARPORT_EPP_FAST make sense for this function?)
1275
1276SEE ALSO
1277
1278epp_write_data, epp_read_data, epp_read_addr
1279
1280port->ops->epp_read_addr - read EPP address
1281------------------------
1282
1283SYNOPSIS
1284
1285#include <linux/parport.h>
1286
1287struct parport_operations {
1288 ...
1289 size_t (*epp_read_addr) (struct parport *port, void *buf,
1290 size_t len, int flags);
1291 ...
1292};
1293
1294DESCRIPTION
1295
1296Reads EPP addresses (8 bits each), and returns the number read.
1297
1298The 'flags' parameter may be one or more of the following,
1299bitwise-or'ed together:
1300
1301PARPORT_EPP_FAST Use fast transfers. Some chips provide 16-bit and
1302 32-bit registers. However, if a transfer
1303 times out, the return value may be unreliable.
1304
1305(Does PARPORT_EPP_FAST make sense for this function?)
1306
1307SEE ALSO
1308
1309epp_write_data, epp_read_data, epp_write_addr
1310
1311port->ops->ecp_write_data - write a block of ECP data
1312-------------------------
1313
1314SYNOPSIS
1315
1316#include <linux/parport.h>
1317
1318struct parport_operations {
1319 ...
1320 size_t (*ecp_write_data) (struct parport *port,
1321 const void *buf, size_t len, int flags);
1322 ...
1323};
1324
1325DESCRIPTION
1326
1327Writes a block of ECP data. The 'flags' parameter is ignored.
1328
1329RETURN VALUE
1330
1331The number of bytes written.
1332
1333SEE ALSO
1334
1335ecp_read_data, ecp_write_addr
1336
1337port->ops->ecp_read_data - read a block of ECP data
1338------------------------
1339
1340SYNOPSIS
1341
1342#include <linux/parport.h>
1343
1344struct parport_operations {
1345 ...
1346 size_t (*ecp_read_data) (struct parport *port,
1347 void *buf, size_t len, int flags);
1348 ...
1349};
1350
1351DESCRIPTION
1352
1353Reads a block of ECP data. The 'flags' parameter is ignored.
1354
1355RETURN VALUE
1356
1357The number of bytes read. NB. There may be more unread data in a
1358FIFO. Is there a way of stunning the FIFO to prevent this?
1359
1360SEE ALSO
1361
1362ecp_write_block, ecp_write_addr
1363
1364port->ops->ecp_write_addr - write a block of ECP addresses
1365-------------------------
1366
1367SYNOPSIS
1368
1369#include <linux/parport.h>
1370
1371struct parport_operations {
1372 ...
1373 size_t (*ecp_write_addr) (struct parport *port,
1374 const void *buf, size_t len, int flags);
1375 ...
1376};
1377
1378DESCRIPTION
1379
1380Writes a block of ECP addresses. The 'flags' parameter is ignored.
1381
1382RETURN VALUE
1383
1384The number of bytes written.
1385
1386NOTES
1387
1388This may use a FIFO, and if so shall not return until the FIFO is empty.
1389
1390SEE ALSO
1391
1392ecp_read_data, ecp_write_data
1393
1394port->ops->nibble_read_data - read a block of data in nibble mode
1395---------------------------
1396
1397SYNOPSIS
1398
1399#include <linux/parport.h>
1400
1401struct parport_operations {
1402 ...
1403 size_t (*nibble_read_data) (struct parport *port,
1404 void *buf, size_t len, int flags);
1405 ...
1406};
1407
1408DESCRIPTION
1409
1410Reads a block of data in nibble mode. The 'flags' parameter is ignored.
1411
1412RETURN VALUE
1413
1414The number of whole bytes read.
1415
1416SEE ALSO
1417
1418byte_read_data, compat_write_data
1419
1420port->ops->byte_read_data - read a block of data in byte mode
1421-------------------------
1422
1423SYNOPSIS
1424
1425#include <linux/parport.h>
1426
1427struct parport_operations {
1428 ...
1429 size_t (*byte_read_data) (struct parport *port,
1430 void *buf, size_t len, int flags);
1431 ...
1432};
1433
1434DESCRIPTION
1435
1436Reads a block of data in byte mode. The 'flags' parameter is ignored.
1437
1438RETURN VALUE
1439
1440The number of bytes read.
1441
1442SEE ALSO
1443
1444nibble_read_data, compat_write_data
1445
1446port->ops->compat_write_data - write a block of data in compatibility mode
1447----------------------------
1448
1449SYNOPSIS
1450
1451#include <linux/parport.h>
1452
1453struct parport_operations {
1454 ...
1455 size_t (*compat_write_data) (struct parport *port,
1456 const void *buf, size_t len, int flags);
1457 ...
1458};
1459
1460DESCRIPTION
1461
1462Writes a block of data in compatibility mode. The 'flags' parameter
1463is ignored.
1464
1465RETURN VALUE
1466
1467The number of bytes written.
1468
1469SEE ALSO
1470
1471nibble_read_data, byte_read_data