1*4882a593Smuzhiyun=============================== 2*4882a593SmuzhiyunPARPORT interface documentation 3*4882a593Smuzhiyun=============================== 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun:Time-stamp: <2000-02-24 13:30:20 twaugh> 6*4882a593Smuzhiyun 7*4882a593SmuzhiyunDescribed here are the following functions: 8*4882a593Smuzhiyun 9*4882a593SmuzhiyunGlobal functions:: 10*4882a593Smuzhiyun parport_register_driver 11*4882a593Smuzhiyun parport_unregister_driver 12*4882a593Smuzhiyun parport_enumerate 13*4882a593Smuzhiyun parport_register_device 14*4882a593Smuzhiyun parport_unregister_device 15*4882a593Smuzhiyun parport_claim 16*4882a593Smuzhiyun parport_claim_or_block 17*4882a593Smuzhiyun parport_release 18*4882a593Smuzhiyun parport_yield 19*4882a593Smuzhiyun parport_yield_blocking 20*4882a593Smuzhiyun parport_wait_peripheral 21*4882a593Smuzhiyun parport_poll_peripheral 22*4882a593Smuzhiyun parport_wait_event 23*4882a593Smuzhiyun parport_negotiate 24*4882a593Smuzhiyun parport_read 25*4882a593Smuzhiyun parport_write 26*4882a593Smuzhiyun parport_open 27*4882a593Smuzhiyun parport_close 28*4882a593Smuzhiyun parport_device_id 29*4882a593Smuzhiyun parport_device_coords 30*4882a593Smuzhiyun parport_find_class 31*4882a593Smuzhiyun parport_find_device 32*4882a593Smuzhiyun parport_set_timeout 33*4882a593Smuzhiyun 34*4882a593SmuzhiyunPort functions (can be overridden by low-level drivers): 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun SPP:: 37*4882a593Smuzhiyun port->ops->read_data 38*4882a593Smuzhiyun port->ops->write_data 39*4882a593Smuzhiyun port->ops->read_status 40*4882a593Smuzhiyun port->ops->read_control 41*4882a593Smuzhiyun port->ops->write_control 42*4882a593Smuzhiyun port->ops->frob_control 43*4882a593Smuzhiyun port->ops->enable_irq 44*4882a593Smuzhiyun port->ops->disable_irq 45*4882a593Smuzhiyun port->ops->data_forward 46*4882a593Smuzhiyun port->ops->data_reverse 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun EPP:: 49*4882a593Smuzhiyun port->ops->epp_write_data 50*4882a593Smuzhiyun port->ops->epp_read_data 51*4882a593Smuzhiyun port->ops->epp_write_addr 52*4882a593Smuzhiyun port->ops->epp_read_addr 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun ECP:: 55*4882a593Smuzhiyun port->ops->ecp_write_data 56*4882a593Smuzhiyun port->ops->ecp_read_data 57*4882a593Smuzhiyun port->ops->ecp_write_addr 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun Other:: 60*4882a593Smuzhiyun port->ops->nibble_read_data 61*4882a593Smuzhiyun port->ops->byte_read_data 62*4882a593Smuzhiyun port->ops->compat_write_data 63*4882a593Smuzhiyun 64*4882a593SmuzhiyunThe parport subsystem comprises ``parport`` (the core port-sharing 65*4882a593Smuzhiyuncode), and a variety of low-level drivers that actually do the port 66*4882a593Smuzhiyunaccesses. Each low-level driver handles a particular style of port 67*4882a593Smuzhiyun(PC, Amiga, and so on). 68*4882a593Smuzhiyun 69*4882a593SmuzhiyunThe parport interface to the device driver author can be broken down 70*4882a593Smuzhiyuninto global functions and port functions. 71*4882a593Smuzhiyun 72*4882a593SmuzhiyunThe global functions are mostly for communicating between the device 73*4882a593Smuzhiyundriver and the parport subsystem: acquiring a list of available ports, 74*4882a593Smuzhiyunclaiming a port for exclusive use, and so on. They also include 75*4882a593Smuzhiyun``generic`` functions for doing standard things that will work on any 76*4882a593SmuzhiyunIEEE 1284-capable architecture. 77*4882a593Smuzhiyun 78*4882a593SmuzhiyunThe port functions are provided by the low-level drivers, although the 79*4882a593Smuzhiyuncore parport module provides generic ``defaults`` for some routines. 80*4882a593SmuzhiyunThe port functions can be split into three groups: SPP, EPP, and ECP. 81*4882a593Smuzhiyun 82*4882a593SmuzhiyunSPP (Standard Parallel Port) functions modify so-called ``SPP`` 83*4882a593Smuzhiyunregisters: data, status, and control. The hardware may not actually 84*4882a593Smuzhiyunhave registers exactly like that, but the PC does and this interface is 85*4882a593Smuzhiyunmodelled after common PC implementations. Other low-level drivers may 86*4882a593Smuzhiyunbe able to emulate most of the functionality. 87*4882a593Smuzhiyun 88*4882a593SmuzhiyunEPP (Enhanced Parallel Port) functions are provided for reading and 89*4882a593Smuzhiyunwriting in IEEE 1284 EPP mode, and ECP (Extended Capabilities Port) 90*4882a593Smuzhiyunfunctions are used for IEEE 1284 ECP mode. (What about BECP? Does 91*4882a593Smuzhiyunanyone care?) 92*4882a593Smuzhiyun 93*4882a593SmuzhiyunHardware assistance for EPP and/or ECP transfers may or may not be 94*4882a593Smuzhiyunavailable, and if it is available it may or may not be used. If 95*4882a593Smuzhiyunhardware is not used, the transfer will be software-driven. In order 96*4882a593Smuzhiyunto cope with peripherals that only tenuously support IEEE 1284, a 97*4882a593Smuzhiyunlow-level driver specific function is provided, for altering 'fudge 98*4882a593Smuzhiyunfactors'. 99*4882a593Smuzhiyun 100*4882a593SmuzhiyunGlobal functions 101*4882a593Smuzhiyun================ 102*4882a593Smuzhiyun 103*4882a593Smuzhiyunparport_register_driver - register a device driver with parport 104*4882a593Smuzhiyun--------------------------------------------------------------- 105*4882a593Smuzhiyun 106*4882a593SmuzhiyunSYNOPSIS 107*4882a593Smuzhiyun^^^^^^^^ 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun:: 110*4882a593Smuzhiyun 111*4882a593Smuzhiyun #include <linux/parport.h> 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun struct parport_driver { 114*4882a593Smuzhiyun const char *name; 115*4882a593Smuzhiyun void (*attach) (struct parport *); 116*4882a593Smuzhiyun void (*detach) (struct parport *); 117*4882a593Smuzhiyun struct parport_driver *next; 118*4882a593Smuzhiyun }; 119*4882a593Smuzhiyun int parport_register_driver (struct parport_driver *driver); 120*4882a593Smuzhiyun 121*4882a593SmuzhiyunDESCRIPTION 122*4882a593Smuzhiyun^^^^^^^^^^^ 123*4882a593Smuzhiyun 124*4882a593SmuzhiyunIn order to be notified about parallel ports when they are detected, 125*4882a593Smuzhiyunparport_register_driver should be called. Your driver will 126*4882a593Smuzhiyunimmediately be notified of all ports that have already been detected, 127*4882a593Smuzhiyunand of each new port as low-level drivers are loaded. 128*4882a593Smuzhiyun 129*4882a593SmuzhiyunA ``struct parport_driver`` contains the textual name of your driver, 130*4882a593Smuzhiyuna pointer to a function to handle new ports, and a pointer to a 131*4882a593Smuzhiyunfunction to handle ports going away due to a low-level driver 132*4882a593Smuzhiyununloading. Ports will only be detached if they are not being used 133*4882a593Smuzhiyun(i.e. there are no devices registered on them). 134*4882a593Smuzhiyun 135*4882a593SmuzhiyunThe visible parts of the ``struct parport *`` argument given to 136*4882a593Smuzhiyunattach/detach are:: 137*4882a593Smuzhiyun 138*4882a593Smuzhiyun struct parport 139*4882a593Smuzhiyun { 140*4882a593Smuzhiyun struct parport *next; /* next parport in list */ 141*4882a593Smuzhiyun const char *name; /* port's name */ 142*4882a593Smuzhiyun unsigned int modes; /* bitfield of hardware modes */ 143*4882a593Smuzhiyun struct parport_device_info probe_info; 144*4882a593Smuzhiyun /* IEEE1284 info */ 145*4882a593Smuzhiyun int number; /* parport index */ 146*4882a593Smuzhiyun struct parport_operations *ops; 147*4882a593Smuzhiyun ... 148*4882a593Smuzhiyun }; 149*4882a593Smuzhiyun 150*4882a593SmuzhiyunThere are other members of the structure, but they should not be 151*4882a593Smuzhiyuntouched. 152*4882a593Smuzhiyun 153*4882a593SmuzhiyunThe ``modes`` member summarises the capabilities of the underlying 154*4882a593Smuzhiyunhardware. It consists of flags which may be bitwise-ored together: 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun ============================= =============================================== 157*4882a593Smuzhiyun PARPORT_MODE_PCSPP IBM PC registers are available, 158*4882a593Smuzhiyun i.e. functions that act on data, 159*4882a593Smuzhiyun control and status registers are 160*4882a593Smuzhiyun probably writing directly to the 161*4882a593Smuzhiyun hardware. 162*4882a593Smuzhiyun PARPORT_MODE_TRISTATE The data drivers may be turned off. 163*4882a593Smuzhiyun This allows the data lines to be used 164*4882a593Smuzhiyun for reverse (peripheral to host) 165*4882a593Smuzhiyun transfers. 166*4882a593Smuzhiyun PARPORT_MODE_COMPAT The hardware can assist with 167*4882a593Smuzhiyun compatibility-mode (printer) 168*4882a593Smuzhiyun transfers, i.e. compat_write_block. 169*4882a593Smuzhiyun PARPORT_MODE_EPP The hardware can assist with EPP 170*4882a593Smuzhiyun transfers. 171*4882a593Smuzhiyun PARPORT_MODE_ECP The hardware can assist with ECP 172*4882a593Smuzhiyun transfers. 173*4882a593Smuzhiyun PARPORT_MODE_DMA The hardware can use DMA, so you might 174*4882a593Smuzhiyun want to pass ISA DMA-able memory 175*4882a593Smuzhiyun (i.e. memory allocated using the 176*4882a593Smuzhiyun GFP_DMA flag with kmalloc) to the 177*4882a593Smuzhiyun low-level driver in order to take 178*4882a593Smuzhiyun advantage of it. 179*4882a593Smuzhiyun ============================= =============================================== 180*4882a593Smuzhiyun 181*4882a593SmuzhiyunThere may be other flags in ``modes`` as well. 182*4882a593Smuzhiyun 183*4882a593SmuzhiyunThe contents of ``modes`` is advisory only. For example, if the 184*4882a593Smuzhiyunhardware is capable of DMA, and PARPORT_MODE_DMA is in ``modes``, it 185*4882a593Smuzhiyundoesn't necessarily mean that DMA will always be used when possible. 186*4882a593SmuzhiyunSimilarly, hardware that is capable of assisting ECP transfers won't 187*4882a593Smuzhiyunnecessarily be used. 188*4882a593Smuzhiyun 189*4882a593SmuzhiyunRETURN VALUE 190*4882a593Smuzhiyun^^^^^^^^^^^^ 191*4882a593Smuzhiyun 192*4882a593SmuzhiyunZero on success, otherwise an error code. 193*4882a593Smuzhiyun 194*4882a593SmuzhiyunERRORS 195*4882a593Smuzhiyun^^^^^^ 196*4882a593Smuzhiyun 197*4882a593SmuzhiyunNone. (Can it fail? Why return int?) 198*4882a593Smuzhiyun 199*4882a593SmuzhiyunEXAMPLE 200*4882a593Smuzhiyun^^^^^^^ 201*4882a593Smuzhiyun 202*4882a593Smuzhiyun:: 203*4882a593Smuzhiyun 204*4882a593Smuzhiyun static void lp_attach (struct parport *port) 205*4882a593Smuzhiyun { 206*4882a593Smuzhiyun ... 207*4882a593Smuzhiyun private = kmalloc (...); 208*4882a593Smuzhiyun dev[count++] = parport_register_device (...); 209*4882a593Smuzhiyun ... 210*4882a593Smuzhiyun } 211*4882a593Smuzhiyun 212*4882a593Smuzhiyun static void lp_detach (struct parport *port) 213*4882a593Smuzhiyun { 214*4882a593Smuzhiyun ... 215*4882a593Smuzhiyun } 216*4882a593Smuzhiyun 217*4882a593Smuzhiyun static struct parport_driver lp_driver = { 218*4882a593Smuzhiyun "lp", 219*4882a593Smuzhiyun lp_attach, 220*4882a593Smuzhiyun lp_detach, 221*4882a593Smuzhiyun NULL /* always put NULL here */ 222*4882a593Smuzhiyun }; 223*4882a593Smuzhiyun 224*4882a593Smuzhiyun int lp_init (void) 225*4882a593Smuzhiyun { 226*4882a593Smuzhiyun ... 227*4882a593Smuzhiyun if (parport_register_driver (&lp_driver)) { 228*4882a593Smuzhiyun /* Failed; nothing we can do. */ 229*4882a593Smuzhiyun return -EIO; 230*4882a593Smuzhiyun } 231*4882a593Smuzhiyun ... 232*4882a593Smuzhiyun } 233*4882a593Smuzhiyun 234*4882a593Smuzhiyun 235*4882a593SmuzhiyunSEE ALSO 236*4882a593Smuzhiyun^^^^^^^^ 237*4882a593Smuzhiyun 238*4882a593Smuzhiyunparport_unregister_driver, parport_register_device, parport_enumerate 239*4882a593Smuzhiyun 240*4882a593Smuzhiyun 241*4882a593Smuzhiyun 242*4882a593Smuzhiyunparport_unregister_driver - tell parport to forget about this driver 243*4882a593Smuzhiyun-------------------------------------------------------------------- 244*4882a593Smuzhiyun 245*4882a593SmuzhiyunSYNOPSIS 246*4882a593Smuzhiyun^^^^^^^^ 247*4882a593Smuzhiyun 248*4882a593Smuzhiyun:: 249*4882a593Smuzhiyun 250*4882a593Smuzhiyun #include <linux/parport.h> 251*4882a593Smuzhiyun 252*4882a593Smuzhiyun struct parport_driver { 253*4882a593Smuzhiyun const char *name; 254*4882a593Smuzhiyun void (*attach) (struct parport *); 255*4882a593Smuzhiyun void (*detach) (struct parport *); 256*4882a593Smuzhiyun struct parport_driver *next; 257*4882a593Smuzhiyun }; 258*4882a593Smuzhiyun void parport_unregister_driver (struct parport_driver *driver); 259*4882a593Smuzhiyun 260*4882a593SmuzhiyunDESCRIPTION 261*4882a593Smuzhiyun^^^^^^^^^^^ 262*4882a593Smuzhiyun 263*4882a593SmuzhiyunThis tells parport not to notify the device driver of new ports or of 264*4882a593Smuzhiyunports going away. Registered devices belonging to that driver are NOT 265*4882a593Smuzhiyununregistered: parport_unregister_device must be used for each one. 266*4882a593Smuzhiyun 267*4882a593SmuzhiyunEXAMPLE 268*4882a593Smuzhiyun^^^^^^^ 269*4882a593Smuzhiyun 270*4882a593Smuzhiyun:: 271*4882a593Smuzhiyun 272*4882a593Smuzhiyun void cleanup_module (void) 273*4882a593Smuzhiyun { 274*4882a593Smuzhiyun ... 275*4882a593Smuzhiyun /* Stop notifications. */ 276*4882a593Smuzhiyun parport_unregister_driver (&lp_driver); 277*4882a593Smuzhiyun 278*4882a593Smuzhiyun /* Unregister devices. */ 279*4882a593Smuzhiyun for (i = 0; i < NUM_DEVS; i++) 280*4882a593Smuzhiyun parport_unregister_device (dev[i]); 281*4882a593Smuzhiyun ... 282*4882a593Smuzhiyun } 283*4882a593Smuzhiyun 284*4882a593SmuzhiyunSEE ALSO 285*4882a593Smuzhiyun^^^^^^^^ 286*4882a593Smuzhiyun 287*4882a593Smuzhiyunparport_register_driver, parport_enumerate 288*4882a593Smuzhiyun 289*4882a593Smuzhiyun 290*4882a593Smuzhiyun 291*4882a593Smuzhiyunparport_enumerate - retrieve a list of parallel ports (DEPRECATED) 292*4882a593Smuzhiyun------------------------------------------------------------------ 293*4882a593Smuzhiyun 294*4882a593SmuzhiyunSYNOPSIS 295*4882a593Smuzhiyun^^^^^^^^ 296*4882a593Smuzhiyun 297*4882a593Smuzhiyun:: 298*4882a593Smuzhiyun 299*4882a593Smuzhiyun #include <linux/parport.h> 300*4882a593Smuzhiyun 301*4882a593Smuzhiyun struct parport *parport_enumerate (void); 302*4882a593Smuzhiyun 303*4882a593SmuzhiyunDESCRIPTION 304*4882a593Smuzhiyun^^^^^^^^^^^ 305*4882a593Smuzhiyun 306*4882a593SmuzhiyunRetrieve the first of a list of valid parallel ports for this machine. 307*4882a593SmuzhiyunSuccessive parallel ports can be found using the ``struct parport 308*4882a593Smuzhiyun*next`` element of the ``struct parport *`` that is returned. If ``next`` 309*4882a593Smuzhiyunis NULL, there are no more parallel ports in the list. The number of 310*4882a593Smuzhiyunports in the list will not exceed PARPORT_MAX. 311*4882a593Smuzhiyun 312*4882a593SmuzhiyunRETURN VALUE 313*4882a593Smuzhiyun^^^^^^^^^^^^ 314*4882a593Smuzhiyun 315*4882a593SmuzhiyunA ``struct parport *`` describing a valid parallel port for the machine, 316*4882a593Smuzhiyunor NULL if there are none. 317*4882a593Smuzhiyun 318*4882a593SmuzhiyunERRORS 319*4882a593Smuzhiyun^^^^^^ 320*4882a593Smuzhiyun 321*4882a593SmuzhiyunThis function can return NULL to indicate that there are no parallel 322*4882a593Smuzhiyunports to use. 323*4882a593Smuzhiyun 324*4882a593SmuzhiyunEXAMPLE 325*4882a593Smuzhiyun^^^^^^^ 326*4882a593Smuzhiyun 327*4882a593Smuzhiyun:: 328*4882a593Smuzhiyun 329*4882a593Smuzhiyun int detect_device (void) 330*4882a593Smuzhiyun { 331*4882a593Smuzhiyun struct parport *port; 332*4882a593Smuzhiyun 333*4882a593Smuzhiyun for (port = parport_enumerate (); 334*4882a593Smuzhiyun port != NULL; 335*4882a593Smuzhiyun port = port->next) { 336*4882a593Smuzhiyun /* Try to detect a device on the port... */ 337*4882a593Smuzhiyun ... 338*4882a593Smuzhiyun } 339*4882a593Smuzhiyun } 340*4882a593Smuzhiyun 341*4882a593Smuzhiyun ... 342*4882a593Smuzhiyun } 343*4882a593Smuzhiyun 344*4882a593SmuzhiyunNOTES 345*4882a593Smuzhiyun^^^^^ 346*4882a593Smuzhiyun 347*4882a593Smuzhiyunparport_enumerate is deprecated; parport_register_driver should be 348*4882a593Smuzhiyunused instead. 349*4882a593Smuzhiyun 350*4882a593SmuzhiyunSEE ALSO 351*4882a593Smuzhiyun^^^^^^^^ 352*4882a593Smuzhiyun 353*4882a593Smuzhiyunparport_register_driver, parport_unregister_driver 354*4882a593Smuzhiyun 355*4882a593Smuzhiyun 356*4882a593Smuzhiyun 357*4882a593Smuzhiyunparport_register_device - register to use a port 358*4882a593Smuzhiyun------------------------------------------------ 359*4882a593Smuzhiyun 360*4882a593SmuzhiyunSYNOPSIS 361*4882a593Smuzhiyun^^^^^^^^ 362*4882a593Smuzhiyun 363*4882a593Smuzhiyun:: 364*4882a593Smuzhiyun 365*4882a593Smuzhiyun #include <linux/parport.h> 366*4882a593Smuzhiyun 367*4882a593Smuzhiyun typedef int (*preempt_func) (void *handle); 368*4882a593Smuzhiyun typedef void (*wakeup_func) (void *handle); 369*4882a593Smuzhiyun typedef int (*irq_func) (int irq, void *handle, struct pt_regs *); 370*4882a593Smuzhiyun 371*4882a593Smuzhiyun struct pardevice *parport_register_device(struct parport *port, 372*4882a593Smuzhiyun const char *name, 373*4882a593Smuzhiyun preempt_func preempt, 374*4882a593Smuzhiyun wakeup_func wakeup, 375*4882a593Smuzhiyun irq_func irq, 376*4882a593Smuzhiyun int flags, 377*4882a593Smuzhiyun void *handle); 378*4882a593Smuzhiyun 379*4882a593SmuzhiyunDESCRIPTION 380*4882a593Smuzhiyun^^^^^^^^^^^ 381*4882a593Smuzhiyun 382*4882a593SmuzhiyunUse this function to register your device driver on a parallel port 383*4882a593Smuzhiyun(``port``). Once you have done that, you will be able to use 384*4882a593Smuzhiyunparport_claim and parport_release in order to use the port. 385*4882a593Smuzhiyun 386*4882a593SmuzhiyunThe (``name``) argument is the name of the device that appears in /proc 387*4882a593Smuzhiyunfilesystem. The string must be valid for the whole lifetime of the 388*4882a593Smuzhiyundevice (until parport_unregister_device is called). 389*4882a593Smuzhiyun 390*4882a593SmuzhiyunThis function will register three callbacks into your driver: 391*4882a593Smuzhiyun``preempt``, ``wakeup`` and ``irq``. Each of these may be NULL in order to 392*4882a593Smuzhiyunindicate that you do not want a callback. 393*4882a593Smuzhiyun 394*4882a593SmuzhiyunWhen the ``preempt`` function is called, it is because another driver 395*4882a593Smuzhiyunwishes to use the parallel port. The ``preempt`` function should return 396*4882a593Smuzhiyunnon-zero if the parallel port cannot be released yet -- if zero is 397*4882a593Smuzhiyunreturned, the port is lost to another driver and the port must be 398*4882a593Smuzhiyunre-claimed before use. 399*4882a593Smuzhiyun 400*4882a593SmuzhiyunThe ``wakeup`` function is called once another driver has released the 401*4882a593Smuzhiyunport and no other driver has yet claimed it. You can claim the 402*4882a593Smuzhiyunparallel port from within the ``wakeup`` function (in which case the 403*4882a593Smuzhiyunclaim is guaranteed to succeed), or choose not to if you don't need it 404*4882a593Smuzhiyunnow. 405*4882a593Smuzhiyun 406*4882a593SmuzhiyunIf an interrupt occurs on the parallel port your driver has claimed, 407*4882a593Smuzhiyunthe ``irq`` function will be called. (Write something about shared 408*4882a593Smuzhiyuninterrupts here.) 409*4882a593Smuzhiyun 410*4882a593SmuzhiyunThe ``handle`` is a pointer to driver-specific data, and is passed to 411*4882a593Smuzhiyunthe callback functions. 412*4882a593Smuzhiyun 413*4882a593Smuzhiyun``flags`` may be a bitwise combination of the following flags: 414*4882a593Smuzhiyun 415*4882a593Smuzhiyun ===================== ================================================= 416*4882a593Smuzhiyun Flag Meaning 417*4882a593Smuzhiyun ===================== ================================================= 418*4882a593Smuzhiyun PARPORT_DEV_EXCL The device cannot share the parallel port at all. 419*4882a593Smuzhiyun Use this only when absolutely necessary. 420*4882a593Smuzhiyun ===================== ================================================= 421*4882a593Smuzhiyun 422*4882a593SmuzhiyunThe typedefs are not actually defined -- they are only shown in order 423*4882a593Smuzhiyunto make the function prototype more readable. 424*4882a593Smuzhiyun 425*4882a593SmuzhiyunThe visible parts of the returned ``struct pardevice`` are:: 426*4882a593Smuzhiyun 427*4882a593Smuzhiyun struct pardevice { 428*4882a593Smuzhiyun struct parport *port; /* Associated port */ 429*4882a593Smuzhiyun void *private; /* Device driver's 'handle' */ 430*4882a593Smuzhiyun ... 431*4882a593Smuzhiyun }; 432*4882a593Smuzhiyun 433*4882a593SmuzhiyunRETURN VALUE 434*4882a593Smuzhiyun^^^^^^^^^^^^ 435*4882a593Smuzhiyun 436*4882a593SmuzhiyunA ``struct pardevice *``: a handle to the registered parallel port 437*4882a593Smuzhiyundevice that can be used for parport_claim, parport_release, etc. 438*4882a593Smuzhiyun 439*4882a593SmuzhiyunERRORS 440*4882a593Smuzhiyun^^^^^^ 441*4882a593Smuzhiyun 442*4882a593SmuzhiyunA return value of NULL indicates that there was a problem registering 443*4882a593Smuzhiyuna device on that port. 444*4882a593Smuzhiyun 445*4882a593SmuzhiyunEXAMPLE 446*4882a593Smuzhiyun^^^^^^^ 447*4882a593Smuzhiyun 448*4882a593Smuzhiyun:: 449*4882a593Smuzhiyun 450*4882a593Smuzhiyun static int preempt (void *handle) 451*4882a593Smuzhiyun { 452*4882a593Smuzhiyun if (busy_right_now) 453*4882a593Smuzhiyun return 1; 454*4882a593Smuzhiyun 455*4882a593Smuzhiyun must_reclaim_port = 1; 456*4882a593Smuzhiyun return 0; 457*4882a593Smuzhiyun } 458*4882a593Smuzhiyun 459*4882a593Smuzhiyun static void wakeup (void *handle) 460*4882a593Smuzhiyun { 461*4882a593Smuzhiyun struct toaster *private = handle; 462*4882a593Smuzhiyun struct pardevice *dev = private->dev; 463*4882a593Smuzhiyun if (!dev) return; /* avoid races */ 464*4882a593Smuzhiyun 465*4882a593Smuzhiyun if (want_port) 466*4882a593Smuzhiyun parport_claim (dev); 467*4882a593Smuzhiyun } 468*4882a593Smuzhiyun 469*4882a593Smuzhiyun static int toaster_detect (struct toaster *private, struct parport *port) 470*4882a593Smuzhiyun { 471*4882a593Smuzhiyun private->dev = parport_register_device (port, "toaster", preempt, 472*4882a593Smuzhiyun wakeup, NULL, 0, 473*4882a593Smuzhiyun private); 474*4882a593Smuzhiyun if (!private->dev) 475*4882a593Smuzhiyun /* Couldn't register with parport. */ 476*4882a593Smuzhiyun return -EIO; 477*4882a593Smuzhiyun 478*4882a593Smuzhiyun must_reclaim_port = 0; 479*4882a593Smuzhiyun busy_right_now = 1; 480*4882a593Smuzhiyun parport_claim_or_block (private->dev); 481*4882a593Smuzhiyun ... 482*4882a593Smuzhiyun /* Don't need the port while the toaster warms up. */ 483*4882a593Smuzhiyun busy_right_now = 0; 484*4882a593Smuzhiyun ... 485*4882a593Smuzhiyun busy_right_now = 1; 486*4882a593Smuzhiyun if (must_reclaim_port) { 487*4882a593Smuzhiyun parport_claim_or_block (private->dev); 488*4882a593Smuzhiyun must_reclaim_port = 0; 489*4882a593Smuzhiyun } 490*4882a593Smuzhiyun ... 491*4882a593Smuzhiyun } 492*4882a593Smuzhiyun 493*4882a593SmuzhiyunSEE ALSO 494*4882a593Smuzhiyun^^^^^^^^ 495*4882a593Smuzhiyun 496*4882a593Smuzhiyunparport_unregister_device, parport_claim 497*4882a593Smuzhiyun 498*4882a593Smuzhiyun 499*4882a593Smuzhiyun 500*4882a593Smuzhiyunparport_unregister_device - finish using a port 501*4882a593Smuzhiyun----------------------------------------------- 502*4882a593Smuzhiyun 503*4882a593SmuzhiyunSYNPOPSIS 504*4882a593Smuzhiyun 505*4882a593Smuzhiyun:: 506*4882a593Smuzhiyun 507*4882a593Smuzhiyun #include <linux/parport.h> 508*4882a593Smuzhiyun 509*4882a593Smuzhiyun void parport_unregister_device (struct pardevice *dev); 510*4882a593Smuzhiyun 511*4882a593SmuzhiyunDESCRIPTION 512*4882a593Smuzhiyun^^^^^^^^^^^ 513*4882a593Smuzhiyun 514*4882a593SmuzhiyunThis function is the opposite of parport_register_device. After using 515*4882a593Smuzhiyunparport_unregister_device, ``dev`` is no longer a valid device handle. 516*4882a593Smuzhiyun 517*4882a593SmuzhiyunYou should not unregister a device that is currently claimed, although 518*4882a593Smuzhiyunif you do it will be released automatically. 519*4882a593Smuzhiyun 520*4882a593SmuzhiyunEXAMPLE 521*4882a593Smuzhiyun^^^^^^^ 522*4882a593Smuzhiyun 523*4882a593Smuzhiyun:: 524*4882a593Smuzhiyun 525*4882a593Smuzhiyun ... 526*4882a593Smuzhiyun kfree (dev->private); /* before we lose the pointer */ 527*4882a593Smuzhiyun parport_unregister_device (dev); 528*4882a593Smuzhiyun ... 529*4882a593Smuzhiyun 530*4882a593SmuzhiyunSEE ALSO 531*4882a593Smuzhiyun^^^^^^^^ 532*4882a593Smuzhiyun 533*4882a593Smuzhiyun 534*4882a593Smuzhiyunparport_unregister_driver 535*4882a593Smuzhiyun 536*4882a593Smuzhiyunparport_claim, parport_claim_or_block - claim the parallel port for a device 537*4882a593Smuzhiyun---------------------------------------------------------------------------- 538*4882a593Smuzhiyun 539*4882a593SmuzhiyunSYNOPSIS 540*4882a593Smuzhiyun^^^^^^^^ 541*4882a593Smuzhiyun 542*4882a593Smuzhiyun:: 543*4882a593Smuzhiyun 544*4882a593Smuzhiyun #include <linux/parport.h> 545*4882a593Smuzhiyun 546*4882a593Smuzhiyun int parport_claim (struct pardevice *dev); 547*4882a593Smuzhiyun int parport_claim_or_block (struct pardevice *dev); 548*4882a593Smuzhiyun 549*4882a593SmuzhiyunDESCRIPTION 550*4882a593Smuzhiyun^^^^^^^^^^^ 551*4882a593Smuzhiyun 552*4882a593SmuzhiyunThese functions attempt to gain control of the parallel port on which 553*4882a593Smuzhiyun``dev`` is registered. ``parport_claim`` does not block, but 554*4882a593Smuzhiyun``parport_claim_or_block`` may do. (Put something here about blocking 555*4882a593Smuzhiyuninterruptibly or non-interruptibly.) 556*4882a593Smuzhiyun 557*4882a593SmuzhiyunYou should not try to claim a port that you have already claimed. 558*4882a593Smuzhiyun 559*4882a593SmuzhiyunRETURN VALUE 560*4882a593Smuzhiyun^^^^^^^^^^^^ 561*4882a593Smuzhiyun 562*4882a593SmuzhiyunA return value of zero indicates that the port was successfully 563*4882a593Smuzhiyunclaimed, and the caller now has possession of the parallel port. 564*4882a593Smuzhiyun 565*4882a593SmuzhiyunIf ``parport_claim_or_block`` blocks before returning successfully, the 566*4882a593Smuzhiyunreturn value is positive. 567*4882a593Smuzhiyun 568*4882a593SmuzhiyunERRORS 569*4882a593Smuzhiyun^^^^^^ 570*4882a593Smuzhiyun 571*4882a593Smuzhiyun========== ========================================================== 572*4882a593Smuzhiyun -EAGAIN The port is unavailable at the moment, but another attempt 573*4882a593Smuzhiyun to claim it may succeed. 574*4882a593Smuzhiyun========== ========================================================== 575*4882a593Smuzhiyun 576*4882a593SmuzhiyunSEE ALSO 577*4882a593Smuzhiyun^^^^^^^^ 578*4882a593Smuzhiyun 579*4882a593Smuzhiyun 580*4882a593Smuzhiyunparport_release 581*4882a593Smuzhiyun 582*4882a593Smuzhiyunparport_release - release the parallel port 583*4882a593Smuzhiyun------------------------------------------- 584*4882a593Smuzhiyun 585*4882a593SmuzhiyunSYNOPSIS 586*4882a593Smuzhiyun^^^^^^^^ 587*4882a593Smuzhiyun 588*4882a593Smuzhiyun:: 589*4882a593Smuzhiyun 590*4882a593Smuzhiyun #include <linux/parport.h> 591*4882a593Smuzhiyun 592*4882a593Smuzhiyun void parport_release (struct pardevice *dev); 593*4882a593Smuzhiyun 594*4882a593SmuzhiyunDESCRIPTION 595*4882a593Smuzhiyun^^^^^^^^^^^ 596*4882a593Smuzhiyun 597*4882a593SmuzhiyunOnce a parallel port device has been claimed, it can be released using 598*4882a593Smuzhiyun``parport_release``. It cannot fail, but you should not release a 599*4882a593Smuzhiyundevice that you do not have possession of. 600*4882a593Smuzhiyun 601*4882a593SmuzhiyunEXAMPLE 602*4882a593Smuzhiyun^^^^^^^ 603*4882a593Smuzhiyun 604*4882a593Smuzhiyun:: 605*4882a593Smuzhiyun 606*4882a593Smuzhiyun static size_t write (struct pardevice *dev, const void *buf, 607*4882a593Smuzhiyun size_t len) 608*4882a593Smuzhiyun { 609*4882a593Smuzhiyun ... 610*4882a593Smuzhiyun written = dev->port->ops->write_ecp_data (dev->port, buf, 611*4882a593Smuzhiyun len); 612*4882a593Smuzhiyun parport_release (dev); 613*4882a593Smuzhiyun ... 614*4882a593Smuzhiyun } 615*4882a593Smuzhiyun 616*4882a593Smuzhiyun 617*4882a593SmuzhiyunSEE ALSO 618*4882a593Smuzhiyun^^^^^^^^ 619*4882a593Smuzhiyun 620*4882a593Smuzhiyunchange_mode, parport_claim, parport_claim_or_block, parport_yield 621*4882a593Smuzhiyun 622*4882a593Smuzhiyun 623*4882a593Smuzhiyun 624*4882a593Smuzhiyunparport_yield, parport_yield_blocking - temporarily release a parallel port 625*4882a593Smuzhiyun--------------------------------------------------------------------------- 626*4882a593Smuzhiyun 627*4882a593SmuzhiyunSYNOPSIS 628*4882a593Smuzhiyun^^^^^^^^ 629*4882a593Smuzhiyun 630*4882a593Smuzhiyun:: 631*4882a593Smuzhiyun 632*4882a593Smuzhiyun #include <linux/parport.h> 633*4882a593Smuzhiyun 634*4882a593Smuzhiyun int parport_yield (struct pardevice *dev) 635*4882a593Smuzhiyun int parport_yield_blocking (struct pardevice *dev); 636*4882a593Smuzhiyun 637*4882a593SmuzhiyunDESCRIPTION 638*4882a593Smuzhiyun^^^^^^^^^^^ 639*4882a593Smuzhiyun 640*4882a593SmuzhiyunWhen a driver has control of a parallel port, it may allow another 641*4882a593Smuzhiyundriver to temporarily ``borrow`` it. ``parport_yield`` does not block; 642*4882a593Smuzhiyun``parport_yield_blocking`` may do. 643*4882a593Smuzhiyun 644*4882a593SmuzhiyunRETURN VALUE 645*4882a593Smuzhiyun^^^^^^^^^^^^ 646*4882a593Smuzhiyun 647*4882a593SmuzhiyunA return value of zero indicates that the caller still owns the port 648*4882a593Smuzhiyunand the call did not block. 649*4882a593Smuzhiyun 650*4882a593SmuzhiyunA positive return value from ``parport_yield_blocking`` indicates that 651*4882a593Smuzhiyunthe caller still owns the port and the call blocked. 652*4882a593Smuzhiyun 653*4882a593SmuzhiyunA return value of -EAGAIN indicates that the caller no longer owns the 654*4882a593Smuzhiyunport, and it must be re-claimed before use. 655*4882a593Smuzhiyun 656*4882a593SmuzhiyunERRORS 657*4882a593Smuzhiyun^^^^^^ 658*4882a593Smuzhiyun 659*4882a593Smuzhiyun========= ========================================================== 660*4882a593Smuzhiyun -EAGAIN Ownership of the parallel port was given away. 661*4882a593Smuzhiyun========= ========================================================== 662*4882a593Smuzhiyun 663*4882a593SmuzhiyunSEE ALSO 664*4882a593Smuzhiyun^^^^^^^^ 665*4882a593Smuzhiyun 666*4882a593Smuzhiyunparport_release 667*4882a593Smuzhiyun 668*4882a593Smuzhiyun 669*4882a593Smuzhiyun 670*4882a593Smuzhiyunparport_wait_peripheral - wait for status lines, up to 35ms 671*4882a593Smuzhiyun----------------------------------------------------------- 672*4882a593Smuzhiyun 673*4882a593SmuzhiyunSYNOPSIS 674*4882a593Smuzhiyun^^^^^^^^ 675*4882a593Smuzhiyun 676*4882a593Smuzhiyun:: 677*4882a593Smuzhiyun 678*4882a593Smuzhiyun #include <linux/parport.h> 679*4882a593Smuzhiyun 680*4882a593Smuzhiyun int parport_wait_peripheral (struct parport *port, 681*4882a593Smuzhiyun unsigned char mask, 682*4882a593Smuzhiyun unsigned char val); 683*4882a593Smuzhiyun 684*4882a593SmuzhiyunDESCRIPTION 685*4882a593Smuzhiyun^^^^^^^^^^^ 686*4882a593Smuzhiyun 687*4882a593SmuzhiyunWait for the status lines in mask to match the values in val. 688*4882a593Smuzhiyun 689*4882a593SmuzhiyunRETURN VALUE 690*4882a593Smuzhiyun^^^^^^^^^^^^ 691*4882a593Smuzhiyun 692*4882a593Smuzhiyun======== ========================================================== 693*4882a593Smuzhiyun -EINTR a signal is pending 694*4882a593Smuzhiyun 0 the status lines in mask have values in val 695*4882a593Smuzhiyun 1 timed out while waiting (35ms elapsed) 696*4882a593Smuzhiyun======== ========================================================== 697*4882a593Smuzhiyun 698*4882a593SmuzhiyunSEE ALSO 699*4882a593Smuzhiyun^^^^^^^^ 700*4882a593Smuzhiyun 701*4882a593Smuzhiyunparport_poll_peripheral 702*4882a593Smuzhiyun 703*4882a593Smuzhiyun 704*4882a593Smuzhiyun 705*4882a593Smuzhiyunparport_poll_peripheral - wait for status lines, in usec 706*4882a593Smuzhiyun-------------------------------------------------------- 707*4882a593Smuzhiyun 708*4882a593SmuzhiyunSYNOPSIS 709*4882a593Smuzhiyun^^^^^^^^ 710*4882a593Smuzhiyun 711*4882a593Smuzhiyun:: 712*4882a593Smuzhiyun 713*4882a593Smuzhiyun #include <linux/parport.h> 714*4882a593Smuzhiyun 715*4882a593Smuzhiyun int parport_poll_peripheral (struct parport *port, 716*4882a593Smuzhiyun unsigned char mask, 717*4882a593Smuzhiyun unsigned char val, 718*4882a593Smuzhiyun int usec); 719*4882a593Smuzhiyun 720*4882a593SmuzhiyunDESCRIPTION 721*4882a593Smuzhiyun^^^^^^^^^^^ 722*4882a593Smuzhiyun 723*4882a593SmuzhiyunWait for the status lines in mask to match the values in val. 724*4882a593Smuzhiyun 725*4882a593SmuzhiyunRETURN VALUE 726*4882a593Smuzhiyun^^^^^^^^^^^^ 727*4882a593Smuzhiyun 728*4882a593Smuzhiyun======== ========================================================== 729*4882a593Smuzhiyun -EINTR a signal is pending 730*4882a593Smuzhiyun 0 the status lines in mask have values in val 731*4882a593Smuzhiyun 1 timed out while waiting (usec microseconds have elapsed) 732*4882a593Smuzhiyun======== ========================================================== 733*4882a593Smuzhiyun 734*4882a593SmuzhiyunSEE ALSO 735*4882a593Smuzhiyun^^^^^^^^ 736*4882a593Smuzhiyun 737*4882a593Smuzhiyunparport_wait_peripheral 738*4882a593Smuzhiyun 739*4882a593Smuzhiyun 740*4882a593Smuzhiyun 741*4882a593Smuzhiyunparport_wait_event - wait for an event on a port 742*4882a593Smuzhiyun------------------------------------------------ 743*4882a593Smuzhiyun 744*4882a593SmuzhiyunSYNOPSIS 745*4882a593Smuzhiyun^^^^^^^^ 746*4882a593Smuzhiyun 747*4882a593Smuzhiyun:: 748*4882a593Smuzhiyun 749*4882a593Smuzhiyun #include <linux/parport.h> 750*4882a593Smuzhiyun 751*4882a593Smuzhiyun int parport_wait_event (struct parport *port, signed long timeout) 752*4882a593Smuzhiyun 753*4882a593SmuzhiyunDESCRIPTION 754*4882a593Smuzhiyun^^^^^^^^^^^ 755*4882a593Smuzhiyun 756*4882a593SmuzhiyunWait for an event (e.g. interrupt) on a port. The timeout is in 757*4882a593Smuzhiyunjiffies. 758*4882a593Smuzhiyun 759*4882a593SmuzhiyunRETURN VALUE 760*4882a593Smuzhiyun^^^^^^^^^^^^ 761*4882a593Smuzhiyun 762*4882a593Smuzhiyun======= ========================================================== 763*4882a593Smuzhiyun 0 success 764*4882a593Smuzhiyun <0 error (exit as soon as possible) 765*4882a593Smuzhiyun >0 timed out 766*4882a593Smuzhiyun======= ========================================================== 767*4882a593Smuzhiyun 768*4882a593Smuzhiyunparport_negotiate - perform IEEE 1284 negotiation 769*4882a593Smuzhiyun------------------------------------------------- 770*4882a593Smuzhiyun 771*4882a593SmuzhiyunSYNOPSIS 772*4882a593Smuzhiyun^^^^^^^^ 773*4882a593Smuzhiyun 774*4882a593Smuzhiyun:: 775*4882a593Smuzhiyun 776*4882a593Smuzhiyun #include <linux/parport.h> 777*4882a593Smuzhiyun 778*4882a593Smuzhiyun int parport_negotiate (struct parport *, int mode); 779*4882a593Smuzhiyun 780*4882a593SmuzhiyunDESCRIPTION 781*4882a593Smuzhiyun^^^^^^^^^^^ 782*4882a593Smuzhiyun 783*4882a593SmuzhiyunPerform IEEE 1284 negotiation. 784*4882a593Smuzhiyun 785*4882a593SmuzhiyunRETURN VALUE 786*4882a593Smuzhiyun^^^^^^^^^^^^ 787*4882a593Smuzhiyun 788*4882a593Smuzhiyun======= ========================================================== 789*4882a593Smuzhiyun 0 handshake OK; IEEE 1284 peripheral and mode available 790*4882a593Smuzhiyun -1 handshake failed; peripheral not compliant (or none present) 791*4882a593Smuzhiyun 1 handshake OK; IEEE 1284 peripheral present but mode not 792*4882a593Smuzhiyun available 793*4882a593Smuzhiyun======= ========================================================== 794*4882a593Smuzhiyun 795*4882a593SmuzhiyunSEE ALSO 796*4882a593Smuzhiyun^^^^^^^^ 797*4882a593Smuzhiyun 798*4882a593Smuzhiyunparport_read, parport_write 799*4882a593Smuzhiyun 800*4882a593Smuzhiyun 801*4882a593Smuzhiyun 802*4882a593Smuzhiyunparport_read - read data from device 803*4882a593Smuzhiyun------------------------------------ 804*4882a593Smuzhiyun 805*4882a593SmuzhiyunSYNOPSIS 806*4882a593Smuzhiyun^^^^^^^^ 807*4882a593Smuzhiyun 808*4882a593Smuzhiyun:: 809*4882a593Smuzhiyun 810*4882a593Smuzhiyun #include <linux/parport.h> 811*4882a593Smuzhiyun 812*4882a593Smuzhiyun ssize_t parport_read (struct parport *, void *buf, size_t len); 813*4882a593Smuzhiyun 814*4882a593SmuzhiyunDESCRIPTION 815*4882a593Smuzhiyun^^^^^^^^^^^ 816*4882a593Smuzhiyun 817*4882a593SmuzhiyunRead data from device in current IEEE 1284 transfer mode. This only 818*4882a593Smuzhiyunworks for modes that support reverse data transfer. 819*4882a593Smuzhiyun 820*4882a593SmuzhiyunRETURN VALUE 821*4882a593Smuzhiyun^^^^^^^^^^^^ 822*4882a593Smuzhiyun 823*4882a593SmuzhiyunIf negative, an error code; otherwise the number of bytes transferred. 824*4882a593Smuzhiyun 825*4882a593SmuzhiyunSEE ALSO 826*4882a593Smuzhiyun^^^^^^^^ 827*4882a593Smuzhiyun 828*4882a593Smuzhiyunparport_write, parport_negotiate 829*4882a593Smuzhiyun 830*4882a593Smuzhiyun 831*4882a593Smuzhiyun 832*4882a593Smuzhiyunparport_write - write data to device 833*4882a593Smuzhiyun------------------------------------ 834*4882a593Smuzhiyun 835*4882a593SmuzhiyunSYNOPSIS 836*4882a593Smuzhiyun^^^^^^^^ 837*4882a593Smuzhiyun 838*4882a593Smuzhiyun:: 839*4882a593Smuzhiyun 840*4882a593Smuzhiyun #include <linux/parport.h> 841*4882a593Smuzhiyun 842*4882a593Smuzhiyun ssize_t parport_write (struct parport *, const void *buf, size_t len); 843*4882a593Smuzhiyun 844*4882a593SmuzhiyunDESCRIPTION 845*4882a593Smuzhiyun^^^^^^^^^^^ 846*4882a593Smuzhiyun 847*4882a593SmuzhiyunWrite data to device in current IEEE 1284 transfer mode. This only 848*4882a593Smuzhiyunworks for modes that support forward data transfer. 849*4882a593Smuzhiyun 850*4882a593SmuzhiyunRETURN VALUE 851*4882a593Smuzhiyun^^^^^^^^^^^^ 852*4882a593Smuzhiyun 853*4882a593SmuzhiyunIf negative, an error code; otherwise the number of bytes transferred. 854*4882a593Smuzhiyun 855*4882a593SmuzhiyunSEE ALSO 856*4882a593Smuzhiyun^^^^^^^^ 857*4882a593Smuzhiyun 858*4882a593Smuzhiyunparport_read, parport_negotiate 859*4882a593Smuzhiyun 860*4882a593Smuzhiyun 861*4882a593Smuzhiyun 862*4882a593Smuzhiyunparport_open - register device for particular device number 863*4882a593Smuzhiyun----------------------------------------------------------- 864*4882a593Smuzhiyun 865*4882a593SmuzhiyunSYNOPSIS 866*4882a593Smuzhiyun^^^^^^^^ 867*4882a593Smuzhiyun 868*4882a593Smuzhiyun:: 869*4882a593Smuzhiyun 870*4882a593Smuzhiyun #include <linux/parport.h> 871*4882a593Smuzhiyun 872*4882a593Smuzhiyun struct pardevice *parport_open (int devnum, const char *name, 873*4882a593Smuzhiyun int (*pf) (void *), 874*4882a593Smuzhiyun void (*kf) (void *), 875*4882a593Smuzhiyun void (*irqf) (int, void *, 876*4882a593Smuzhiyun struct pt_regs *), 877*4882a593Smuzhiyun int flags, void *handle); 878*4882a593Smuzhiyun 879*4882a593SmuzhiyunDESCRIPTION 880*4882a593Smuzhiyun^^^^^^^^^^^ 881*4882a593Smuzhiyun 882*4882a593SmuzhiyunThis is like parport_register_device but takes a device number instead 883*4882a593Smuzhiyunof a pointer to a struct parport. 884*4882a593Smuzhiyun 885*4882a593SmuzhiyunRETURN VALUE 886*4882a593Smuzhiyun^^^^^^^^^^^^ 887*4882a593Smuzhiyun 888*4882a593SmuzhiyunSee parport_register_device. If no device is associated with devnum, 889*4882a593SmuzhiyunNULL is returned. 890*4882a593Smuzhiyun 891*4882a593SmuzhiyunSEE ALSO 892*4882a593Smuzhiyun^^^^^^^^ 893*4882a593Smuzhiyun 894*4882a593Smuzhiyunparport_register_device 895*4882a593Smuzhiyun 896*4882a593Smuzhiyun 897*4882a593Smuzhiyun 898*4882a593Smuzhiyunparport_close - unregister device for particular device number 899*4882a593Smuzhiyun-------------------------------------------------------------- 900*4882a593Smuzhiyun 901*4882a593SmuzhiyunSYNOPSIS 902*4882a593Smuzhiyun^^^^^^^^ 903*4882a593Smuzhiyun 904*4882a593Smuzhiyun:: 905*4882a593Smuzhiyun 906*4882a593Smuzhiyun #include <linux/parport.h> 907*4882a593Smuzhiyun 908*4882a593Smuzhiyun void parport_close (struct pardevice *dev); 909*4882a593Smuzhiyun 910*4882a593SmuzhiyunDESCRIPTION 911*4882a593Smuzhiyun^^^^^^^^^^^ 912*4882a593Smuzhiyun 913*4882a593SmuzhiyunThis is the equivalent of parport_unregister_device for parport_open. 914*4882a593Smuzhiyun 915*4882a593SmuzhiyunSEE ALSO 916*4882a593Smuzhiyun^^^^^^^^ 917*4882a593Smuzhiyun 918*4882a593Smuzhiyunparport_unregister_device, parport_open 919*4882a593Smuzhiyun 920*4882a593Smuzhiyun 921*4882a593Smuzhiyun 922*4882a593Smuzhiyunparport_device_id - obtain IEEE 1284 Device ID 923*4882a593Smuzhiyun---------------------------------------------- 924*4882a593Smuzhiyun 925*4882a593SmuzhiyunSYNOPSIS 926*4882a593Smuzhiyun^^^^^^^^ 927*4882a593Smuzhiyun 928*4882a593Smuzhiyun:: 929*4882a593Smuzhiyun 930*4882a593Smuzhiyun #include <linux/parport.h> 931*4882a593Smuzhiyun 932*4882a593Smuzhiyun ssize_t parport_device_id (int devnum, char *buffer, size_t len); 933*4882a593Smuzhiyun 934*4882a593SmuzhiyunDESCRIPTION 935*4882a593Smuzhiyun^^^^^^^^^^^ 936*4882a593Smuzhiyun 937*4882a593SmuzhiyunObtains the IEEE 1284 Device ID associated with a given device. 938*4882a593Smuzhiyun 939*4882a593SmuzhiyunRETURN VALUE 940*4882a593Smuzhiyun^^^^^^^^^^^^ 941*4882a593Smuzhiyun 942*4882a593SmuzhiyunIf negative, an error code; otherwise, the number of bytes of buffer 943*4882a593Smuzhiyunthat contain the device ID. The format of the device ID is as 944*4882a593Smuzhiyunfollows:: 945*4882a593Smuzhiyun 946*4882a593Smuzhiyun [length][ID] 947*4882a593Smuzhiyun 948*4882a593SmuzhiyunThe first two bytes indicate the inclusive length of the entire Device 949*4882a593SmuzhiyunID, and are in big-endian order. The ID is a sequence of pairs of the 950*4882a593Smuzhiyunform:: 951*4882a593Smuzhiyun 952*4882a593Smuzhiyun key:value; 953*4882a593Smuzhiyun 954*4882a593SmuzhiyunNOTES 955*4882a593Smuzhiyun^^^^^ 956*4882a593Smuzhiyun 957*4882a593SmuzhiyunMany devices have ill-formed IEEE 1284 Device IDs. 958*4882a593Smuzhiyun 959*4882a593SmuzhiyunSEE ALSO 960*4882a593Smuzhiyun^^^^^^^^ 961*4882a593Smuzhiyun 962*4882a593Smuzhiyunparport_find_class, parport_find_device 963*4882a593Smuzhiyun 964*4882a593Smuzhiyun 965*4882a593Smuzhiyun 966*4882a593Smuzhiyunparport_device_coords - convert device number to device coordinates 967*4882a593Smuzhiyun------------------------------------------------------------------- 968*4882a593Smuzhiyun 969*4882a593SmuzhiyunSYNOPSIS 970*4882a593Smuzhiyun^^^^^^^^ 971*4882a593Smuzhiyun 972*4882a593Smuzhiyun:: 973*4882a593Smuzhiyun 974*4882a593Smuzhiyun #include <linux/parport.h> 975*4882a593Smuzhiyun 976*4882a593Smuzhiyun int parport_device_coords (int devnum, int *parport, int *mux, 977*4882a593Smuzhiyun int *daisy); 978*4882a593Smuzhiyun 979*4882a593SmuzhiyunDESCRIPTION 980*4882a593Smuzhiyun^^^^^^^^^^^ 981*4882a593Smuzhiyun 982*4882a593SmuzhiyunConvert between device number (zero-based) and device coordinates 983*4882a593Smuzhiyun(port, multiplexor, daisy chain address). 984*4882a593Smuzhiyun 985*4882a593SmuzhiyunRETURN VALUE 986*4882a593Smuzhiyun^^^^^^^^^^^^ 987*4882a593Smuzhiyun 988*4882a593SmuzhiyunZero on success, in which case the coordinates are (``*parport``, ``*mux``, 989*4882a593Smuzhiyun``*daisy``). 990*4882a593Smuzhiyun 991*4882a593SmuzhiyunSEE ALSO 992*4882a593Smuzhiyun^^^^^^^^ 993*4882a593Smuzhiyun 994*4882a593Smuzhiyunparport_open, parport_device_id 995*4882a593Smuzhiyun 996*4882a593Smuzhiyun 997*4882a593Smuzhiyun 998*4882a593Smuzhiyunparport_find_class - find a device by its class 999*4882a593Smuzhiyun----------------------------------------------- 1000*4882a593Smuzhiyun 1001*4882a593SmuzhiyunSYNOPSIS 1002*4882a593Smuzhiyun^^^^^^^^ 1003*4882a593Smuzhiyun 1004*4882a593Smuzhiyun:: 1005*4882a593Smuzhiyun 1006*4882a593Smuzhiyun #include <linux/parport.h> 1007*4882a593Smuzhiyun 1008*4882a593Smuzhiyun typedef enum { 1009*4882a593Smuzhiyun PARPORT_CLASS_LEGACY = 0, /* Non-IEEE1284 device */ 1010*4882a593Smuzhiyun PARPORT_CLASS_PRINTER, 1011*4882a593Smuzhiyun PARPORT_CLASS_MODEM, 1012*4882a593Smuzhiyun PARPORT_CLASS_NET, 1013*4882a593Smuzhiyun PARPORT_CLASS_HDC, /* Hard disk controller */ 1014*4882a593Smuzhiyun PARPORT_CLASS_PCMCIA, 1015*4882a593Smuzhiyun PARPORT_CLASS_MEDIA, /* Multimedia device */ 1016*4882a593Smuzhiyun PARPORT_CLASS_FDC, /* Floppy disk controller */ 1017*4882a593Smuzhiyun PARPORT_CLASS_PORTS, 1018*4882a593Smuzhiyun PARPORT_CLASS_SCANNER, 1019*4882a593Smuzhiyun PARPORT_CLASS_DIGCAM, 1020*4882a593Smuzhiyun PARPORT_CLASS_OTHER, /* Anything else */ 1021*4882a593Smuzhiyun PARPORT_CLASS_UNSPEC, /* No CLS field in ID */ 1022*4882a593Smuzhiyun PARPORT_CLASS_SCSIADAPTER 1023*4882a593Smuzhiyun } parport_device_class; 1024*4882a593Smuzhiyun 1025*4882a593Smuzhiyun int parport_find_class (parport_device_class cls, int from); 1026*4882a593Smuzhiyun 1027*4882a593SmuzhiyunDESCRIPTION 1028*4882a593Smuzhiyun^^^^^^^^^^^ 1029*4882a593Smuzhiyun 1030*4882a593SmuzhiyunFind a device by class. The search starts from device number from+1. 1031*4882a593Smuzhiyun 1032*4882a593SmuzhiyunRETURN VALUE 1033*4882a593Smuzhiyun^^^^^^^^^^^^ 1034*4882a593Smuzhiyun 1035*4882a593SmuzhiyunThe device number of the next device in that class, or -1 if no such 1036*4882a593Smuzhiyundevice exists. 1037*4882a593Smuzhiyun 1038*4882a593SmuzhiyunNOTES 1039*4882a593Smuzhiyun^^^^^ 1040*4882a593Smuzhiyun 1041*4882a593SmuzhiyunExample usage:: 1042*4882a593Smuzhiyun 1043*4882a593Smuzhiyun int devnum = -1; 1044*4882a593Smuzhiyun while ((devnum = parport_find_class (PARPORT_CLASS_DIGCAM, devnum)) != -1) { 1045*4882a593Smuzhiyun struct pardevice *dev = parport_open (devnum, ...); 1046*4882a593Smuzhiyun ... 1047*4882a593Smuzhiyun } 1048*4882a593Smuzhiyun 1049*4882a593SmuzhiyunSEE ALSO 1050*4882a593Smuzhiyun^^^^^^^^ 1051*4882a593Smuzhiyun 1052*4882a593Smuzhiyunparport_find_device, parport_open, parport_device_id 1053*4882a593Smuzhiyun 1054*4882a593Smuzhiyun 1055*4882a593Smuzhiyun 1056*4882a593Smuzhiyunparport_find_device - find a device by its class 1057*4882a593Smuzhiyun------------------------------------------------ 1058*4882a593Smuzhiyun 1059*4882a593SmuzhiyunSYNOPSIS 1060*4882a593Smuzhiyun^^^^^^^^ 1061*4882a593Smuzhiyun 1062*4882a593Smuzhiyun:: 1063*4882a593Smuzhiyun 1064*4882a593Smuzhiyun #include <linux/parport.h> 1065*4882a593Smuzhiyun 1066*4882a593Smuzhiyun int parport_find_device (const char *mfg, const char *mdl, int from); 1067*4882a593Smuzhiyun 1068*4882a593SmuzhiyunDESCRIPTION 1069*4882a593Smuzhiyun^^^^^^^^^^^ 1070*4882a593Smuzhiyun 1071*4882a593SmuzhiyunFind a device by vendor and model. The search starts from device 1072*4882a593Smuzhiyunnumber from+1. 1073*4882a593Smuzhiyun 1074*4882a593SmuzhiyunRETURN VALUE 1075*4882a593Smuzhiyun^^^^^^^^^^^^ 1076*4882a593Smuzhiyun 1077*4882a593SmuzhiyunThe device number of the next device matching the specifications, or 1078*4882a593Smuzhiyun-1 if no such device exists. 1079*4882a593Smuzhiyun 1080*4882a593SmuzhiyunNOTES 1081*4882a593Smuzhiyun^^^^^ 1082*4882a593Smuzhiyun 1083*4882a593SmuzhiyunExample usage:: 1084*4882a593Smuzhiyun 1085*4882a593Smuzhiyun int devnum = -1; 1086*4882a593Smuzhiyun while ((devnum = parport_find_device ("IOMEGA", "ZIP+", devnum)) != -1) { 1087*4882a593Smuzhiyun struct pardevice *dev = parport_open (devnum, ...); 1088*4882a593Smuzhiyun ... 1089*4882a593Smuzhiyun } 1090*4882a593Smuzhiyun 1091*4882a593SmuzhiyunSEE ALSO 1092*4882a593Smuzhiyun^^^^^^^^ 1093*4882a593Smuzhiyun 1094*4882a593Smuzhiyunparport_find_class, parport_open, parport_device_id 1095*4882a593Smuzhiyun 1096*4882a593Smuzhiyun 1097*4882a593Smuzhiyun 1098*4882a593Smuzhiyunparport_set_timeout - set the inactivity timeout 1099*4882a593Smuzhiyun------------------------------------------------ 1100*4882a593Smuzhiyun 1101*4882a593SmuzhiyunSYNOPSIS 1102*4882a593Smuzhiyun^^^^^^^^ 1103*4882a593Smuzhiyun 1104*4882a593Smuzhiyun:: 1105*4882a593Smuzhiyun 1106*4882a593Smuzhiyun #include <linux/parport.h> 1107*4882a593Smuzhiyun 1108*4882a593Smuzhiyun long parport_set_timeout (struct pardevice *dev, long inactivity); 1109*4882a593Smuzhiyun 1110*4882a593SmuzhiyunDESCRIPTION 1111*4882a593Smuzhiyun^^^^^^^^^^^ 1112*4882a593Smuzhiyun 1113*4882a593SmuzhiyunSet the inactivity timeout, in jiffies, for a registered device. The 1114*4882a593Smuzhiyunprevious timeout is returned. 1115*4882a593Smuzhiyun 1116*4882a593SmuzhiyunRETURN VALUE 1117*4882a593Smuzhiyun^^^^^^^^^^^^ 1118*4882a593Smuzhiyun 1119*4882a593SmuzhiyunThe previous timeout, in jiffies. 1120*4882a593Smuzhiyun 1121*4882a593SmuzhiyunNOTES 1122*4882a593Smuzhiyun^^^^^ 1123*4882a593Smuzhiyun 1124*4882a593SmuzhiyunSome of the port->ops functions for a parport may take time, owing to 1125*4882a593Smuzhiyundelays at the peripheral. After the peripheral has not responded for 1126*4882a593Smuzhiyun``inactivity`` jiffies, a timeout will occur and the blocking function 1127*4882a593Smuzhiyunwill return. 1128*4882a593Smuzhiyun 1129*4882a593SmuzhiyunA timeout of 0 jiffies is a special case: the function must do as much 1130*4882a593Smuzhiyunas it can without blocking or leaving the hardware in an unknown 1131*4882a593Smuzhiyunstate. If port operations are performed from within an interrupt 1132*4882a593Smuzhiyunhandler, for instance, a timeout of 0 jiffies should be used. 1133*4882a593Smuzhiyun 1134*4882a593SmuzhiyunOnce set for a registered device, the timeout will remain at the set 1135*4882a593Smuzhiyunvalue until set again. 1136*4882a593Smuzhiyun 1137*4882a593SmuzhiyunSEE ALSO 1138*4882a593Smuzhiyun^^^^^^^^ 1139*4882a593Smuzhiyun 1140*4882a593Smuzhiyunport->ops->xxx_read/write_yyy 1141*4882a593Smuzhiyun 1142*4882a593Smuzhiyun 1143*4882a593Smuzhiyun 1144*4882a593Smuzhiyun 1145*4882a593SmuzhiyunPORT FUNCTIONS 1146*4882a593Smuzhiyun============== 1147*4882a593Smuzhiyun 1148*4882a593SmuzhiyunThe functions in the port->ops structure (struct parport_operations) 1149*4882a593Smuzhiyunare provided by the low-level driver responsible for that port. 1150*4882a593Smuzhiyun 1151*4882a593Smuzhiyunport->ops->read_data - read the data register 1152*4882a593Smuzhiyun--------------------------------------------- 1153*4882a593Smuzhiyun 1154*4882a593SmuzhiyunSYNOPSIS 1155*4882a593Smuzhiyun^^^^^^^^ 1156*4882a593Smuzhiyun 1157*4882a593Smuzhiyun:: 1158*4882a593Smuzhiyun 1159*4882a593Smuzhiyun #include <linux/parport.h> 1160*4882a593Smuzhiyun 1161*4882a593Smuzhiyun struct parport_operations { 1162*4882a593Smuzhiyun ... 1163*4882a593Smuzhiyun unsigned char (*read_data) (struct parport *port); 1164*4882a593Smuzhiyun ... 1165*4882a593Smuzhiyun }; 1166*4882a593Smuzhiyun 1167*4882a593SmuzhiyunDESCRIPTION 1168*4882a593Smuzhiyun^^^^^^^^^^^ 1169*4882a593Smuzhiyun 1170*4882a593SmuzhiyunIf port->modes contains the PARPORT_MODE_TRISTATE flag and the 1171*4882a593SmuzhiyunPARPORT_CONTROL_DIRECTION bit in the control register is set, this 1172*4882a593Smuzhiyunreturns the value on the data pins. If port->modes contains the 1173*4882a593SmuzhiyunPARPORT_MODE_TRISTATE flag and the PARPORT_CONTROL_DIRECTION bit is 1174*4882a593Smuzhiyunnot set, the return value _may_ be the last value written to the data 1175*4882a593Smuzhiyunregister. Otherwise the return value is undefined. 1176*4882a593Smuzhiyun 1177*4882a593SmuzhiyunSEE ALSO 1178*4882a593Smuzhiyun^^^^^^^^ 1179*4882a593Smuzhiyun 1180*4882a593Smuzhiyunwrite_data, read_status, write_control 1181*4882a593Smuzhiyun 1182*4882a593Smuzhiyun 1183*4882a593Smuzhiyun 1184*4882a593Smuzhiyunport->ops->write_data - write the data register 1185*4882a593Smuzhiyun----------------------------------------------- 1186*4882a593Smuzhiyun 1187*4882a593SmuzhiyunSYNOPSIS 1188*4882a593Smuzhiyun^^^^^^^^ 1189*4882a593Smuzhiyun 1190*4882a593Smuzhiyun:: 1191*4882a593Smuzhiyun 1192*4882a593Smuzhiyun #include <linux/parport.h> 1193*4882a593Smuzhiyun 1194*4882a593Smuzhiyun struct parport_operations { 1195*4882a593Smuzhiyun ... 1196*4882a593Smuzhiyun void (*write_data) (struct parport *port, unsigned char d); 1197*4882a593Smuzhiyun ... 1198*4882a593Smuzhiyun }; 1199*4882a593Smuzhiyun 1200*4882a593SmuzhiyunDESCRIPTION 1201*4882a593Smuzhiyun^^^^^^^^^^^ 1202*4882a593Smuzhiyun 1203*4882a593SmuzhiyunWrites to the data register. May have side-effects (a STROBE pulse, 1204*4882a593Smuzhiyunfor instance). 1205*4882a593Smuzhiyun 1206*4882a593SmuzhiyunSEE ALSO 1207*4882a593Smuzhiyun^^^^^^^^ 1208*4882a593Smuzhiyun 1209*4882a593Smuzhiyunread_data, read_status, write_control 1210*4882a593Smuzhiyun 1211*4882a593Smuzhiyun 1212*4882a593Smuzhiyun 1213*4882a593Smuzhiyunport->ops->read_status - read the status register 1214*4882a593Smuzhiyun------------------------------------------------- 1215*4882a593Smuzhiyun 1216*4882a593SmuzhiyunSYNOPSIS 1217*4882a593Smuzhiyun^^^^^^^^ 1218*4882a593Smuzhiyun 1219*4882a593Smuzhiyun:: 1220*4882a593Smuzhiyun 1221*4882a593Smuzhiyun #include <linux/parport.h> 1222*4882a593Smuzhiyun 1223*4882a593Smuzhiyun struct parport_operations { 1224*4882a593Smuzhiyun ... 1225*4882a593Smuzhiyun unsigned char (*read_status) (struct parport *port); 1226*4882a593Smuzhiyun ... 1227*4882a593Smuzhiyun }; 1228*4882a593Smuzhiyun 1229*4882a593SmuzhiyunDESCRIPTION 1230*4882a593Smuzhiyun^^^^^^^^^^^ 1231*4882a593Smuzhiyun 1232*4882a593SmuzhiyunReads from the status register. This is a bitmask: 1233*4882a593Smuzhiyun 1234*4882a593Smuzhiyun- PARPORT_STATUS_ERROR (printer fault, "nFault") 1235*4882a593Smuzhiyun- PARPORT_STATUS_SELECT (on-line, "Select") 1236*4882a593Smuzhiyun- PARPORT_STATUS_PAPEROUT (no paper, "PError") 1237*4882a593Smuzhiyun- PARPORT_STATUS_ACK (handshake, "nAck") 1238*4882a593Smuzhiyun- PARPORT_STATUS_BUSY (busy, "Busy") 1239*4882a593Smuzhiyun 1240*4882a593SmuzhiyunThere may be other bits set. 1241*4882a593Smuzhiyun 1242*4882a593SmuzhiyunSEE ALSO 1243*4882a593Smuzhiyun^^^^^^^^ 1244*4882a593Smuzhiyun 1245*4882a593Smuzhiyunread_data, write_data, write_control 1246*4882a593Smuzhiyun 1247*4882a593Smuzhiyun 1248*4882a593Smuzhiyun 1249*4882a593Smuzhiyunport->ops->read_control - read the control register 1250*4882a593Smuzhiyun--------------------------------------------------- 1251*4882a593Smuzhiyun 1252*4882a593SmuzhiyunSYNOPSIS 1253*4882a593Smuzhiyun^^^^^^^^ 1254*4882a593Smuzhiyun 1255*4882a593Smuzhiyun:: 1256*4882a593Smuzhiyun 1257*4882a593Smuzhiyun #include <linux/parport.h> 1258*4882a593Smuzhiyun 1259*4882a593Smuzhiyun struct parport_operations { 1260*4882a593Smuzhiyun ... 1261*4882a593Smuzhiyun unsigned char (*read_control) (struct parport *port); 1262*4882a593Smuzhiyun ... 1263*4882a593Smuzhiyun }; 1264*4882a593Smuzhiyun 1265*4882a593SmuzhiyunDESCRIPTION 1266*4882a593Smuzhiyun^^^^^^^^^^^ 1267*4882a593Smuzhiyun 1268*4882a593SmuzhiyunReturns the last value written to the control register (either from 1269*4882a593Smuzhiyunwrite_control or frob_control). No port access is performed. 1270*4882a593Smuzhiyun 1271*4882a593SmuzhiyunSEE ALSO 1272*4882a593Smuzhiyun^^^^^^^^ 1273*4882a593Smuzhiyun 1274*4882a593Smuzhiyunread_data, write_data, read_status, write_control 1275*4882a593Smuzhiyun 1276*4882a593Smuzhiyun 1277*4882a593Smuzhiyun 1278*4882a593Smuzhiyunport->ops->write_control - write the control register 1279*4882a593Smuzhiyun----------------------------------------------------- 1280*4882a593Smuzhiyun 1281*4882a593SmuzhiyunSYNOPSIS 1282*4882a593Smuzhiyun^^^^^^^^ 1283*4882a593Smuzhiyun 1284*4882a593Smuzhiyun:: 1285*4882a593Smuzhiyun 1286*4882a593Smuzhiyun #include <linux/parport.h> 1287*4882a593Smuzhiyun 1288*4882a593Smuzhiyun struct parport_operations { 1289*4882a593Smuzhiyun ... 1290*4882a593Smuzhiyun void (*write_control) (struct parport *port, unsigned char s); 1291*4882a593Smuzhiyun ... 1292*4882a593Smuzhiyun }; 1293*4882a593Smuzhiyun 1294*4882a593SmuzhiyunDESCRIPTION 1295*4882a593Smuzhiyun^^^^^^^^^^^ 1296*4882a593Smuzhiyun 1297*4882a593SmuzhiyunWrites to the control register. This is a bitmask:: 1298*4882a593Smuzhiyun 1299*4882a593Smuzhiyun _______ 1300*4882a593Smuzhiyun - PARPORT_CONTROL_STROBE (nStrobe) 1301*4882a593Smuzhiyun _______ 1302*4882a593Smuzhiyun - PARPORT_CONTROL_AUTOFD (nAutoFd) 1303*4882a593Smuzhiyun _____ 1304*4882a593Smuzhiyun - PARPORT_CONTROL_INIT (nInit) 1305*4882a593Smuzhiyun _________ 1306*4882a593Smuzhiyun - PARPORT_CONTROL_SELECT (nSelectIn) 1307*4882a593Smuzhiyun 1308*4882a593SmuzhiyunSEE ALSO 1309*4882a593Smuzhiyun^^^^^^^^ 1310*4882a593Smuzhiyun 1311*4882a593Smuzhiyunread_data, write_data, read_status, frob_control 1312*4882a593Smuzhiyun 1313*4882a593Smuzhiyun 1314*4882a593Smuzhiyun 1315*4882a593Smuzhiyunport->ops->frob_control - write control register bits 1316*4882a593Smuzhiyun----------------------------------------------------- 1317*4882a593Smuzhiyun 1318*4882a593SmuzhiyunSYNOPSIS 1319*4882a593Smuzhiyun^^^^^^^^ 1320*4882a593Smuzhiyun 1321*4882a593Smuzhiyun:: 1322*4882a593Smuzhiyun 1323*4882a593Smuzhiyun #include <linux/parport.h> 1324*4882a593Smuzhiyun 1325*4882a593Smuzhiyun struct parport_operations { 1326*4882a593Smuzhiyun ... 1327*4882a593Smuzhiyun unsigned char (*frob_control) (struct parport *port, 1328*4882a593Smuzhiyun unsigned char mask, 1329*4882a593Smuzhiyun unsigned char val); 1330*4882a593Smuzhiyun ... 1331*4882a593Smuzhiyun }; 1332*4882a593Smuzhiyun 1333*4882a593SmuzhiyunDESCRIPTION 1334*4882a593Smuzhiyun^^^^^^^^^^^ 1335*4882a593Smuzhiyun 1336*4882a593SmuzhiyunThis is equivalent to reading from the control register, masking out 1337*4882a593Smuzhiyunthe bits in mask, exclusive-or'ing with the bits in val, and writing 1338*4882a593Smuzhiyunthe result to the control register. 1339*4882a593Smuzhiyun 1340*4882a593SmuzhiyunAs some ports don't allow reads from the control port, a software copy 1341*4882a593Smuzhiyunof its contents is maintained, so frob_control is in fact only one 1342*4882a593Smuzhiyunport access. 1343*4882a593Smuzhiyun 1344*4882a593SmuzhiyunSEE ALSO 1345*4882a593Smuzhiyun^^^^^^^^ 1346*4882a593Smuzhiyun 1347*4882a593Smuzhiyunread_data, write_data, read_status, write_control 1348*4882a593Smuzhiyun 1349*4882a593Smuzhiyun 1350*4882a593Smuzhiyun 1351*4882a593Smuzhiyunport->ops->enable_irq - enable interrupt generation 1352*4882a593Smuzhiyun--------------------------------------------------- 1353*4882a593Smuzhiyun 1354*4882a593SmuzhiyunSYNOPSIS 1355*4882a593Smuzhiyun^^^^^^^^ 1356*4882a593Smuzhiyun 1357*4882a593Smuzhiyun:: 1358*4882a593Smuzhiyun 1359*4882a593Smuzhiyun #include <linux/parport.h> 1360*4882a593Smuzhiyun 1361*4882a593Smuzhiyun struct parport_operations { 1362*4882a593Smuzhiyun ... 1363*4882a593Smuzhiyun void (*enable_irq) (struct parport *port); 1364*4882a593Smuzhiyun ... 1365*4882a593Smuzhiyun }; 1366*4882a593Smuzhiyun 1367*4882a593SmuzhiyunDESCRIPTION 1368*4882a593Smuzhiyun^^^^^^^^^^^ 1369*4882a593Smuzhiyun 1370*4882a593SmuzhiyunThe parallel port hardware is instructed to generate interrupts at 1371*4882a593Smuzhiyunappropriate moments, although those moments are 1372*4882a593Smuzhiyunarchitecture-specific. For the PC architecture, interrupts are 1373*4882a593Smuzhiyuncommonly generated on the rising edge of nAck. 1374*4882a593Smuzhiyun 1375*4882a593SmuzhiyunSEE ALSO 1376*4882a593Smuzhiyun^^^^^^^^ 1377*4882a593Smuzhiyun 1378*4882a593Smuzhiyundisable_irq 1379*4882a593Smuzhiyun 1380*4882a593Smuzhiyun 1381*4882a593Smuzhiyun 1382*4882a593Smuzhiyunport->ops->disable_irq - disable interrupt generation 1383*4882a593Smuzhiyun----------------------------------------------------- 1384*4882a593Smuzhiyun 1385*4882a593SmuzhiyunSYNOPSIS 1386*4882a593Smuzhiyun^^^^^^^^ 1387*4882a593Smuzhiyun 1388*4882a593Smuzhiyun:: 1389*4882a593Smuzhiyun 1390*4882a593Smuzhiyun #include <linux/parport.h> 1391*4882a593Smuzhiyun 1392*4882a593Smuzhiyun struct parport_operations { 1393*4882a593Smuzhiyun ... 1394*4882a593Smuzhiyun void (*disable_irq) (struct parport *port); 1395*4882a593Smuzhiyun ... 1396*4882a593Smuzhiyun }; 1397*4882a593Smuzhiyun 1398*4882a593SmuzhiyunDESCRIPTION 1399*4882a593Smuzhiyun^^^^^^^^^^^ 1400*4882a593Smuzhiyun 1401*4882a593SmuzhiyunThe parallel port hardware is instructed not to generate interrupts. 1402*4882a593SmuzhiyunThe interrupt itself is not masked. 1403*4882a593Smuzhiyun 1404*4882a593SmuzhiyunSEE ALSO 1405*4882a593Smuzhiyun^^^^^^^^ 1406*4882a593Smuzhiyun 1407*4882a593Smuzhiyunenable_irq 1408*4882a593Smuzhiyun 1409*4882a593Smuzhiyun 1410*4882a593Smuzhiyun 1411*4882a593Smuzhiyunport->ops->data_forward - enable data drivers 1412*4882a593Smuzhiyun--------------------------------------------- 1413*4882a593Smuzhiyun 1414*4882a593SmuzhiyunSYNOPSIS 1415*4882a593Smuzhiyun^^^^^^^^ 1416*4882a593Smuzhiyun 1417*4882a593Smuzhiyun:: 1418*4882a593Smuzhiyun 1419*4882a593Smuzhiyun #include <linux/parport.h> 1420*4882a593Smuzhiyun 1421*4882a593Smuzhiyun struct parport_operations { 1422*4882a593Smuzhiyun ... 1423*4882a593Smuzhiyun void (*data_forward) (struct parport *port); 1424*4882a593Smuzhiyun ... 1425*4882a593Smuzhiyun }; 1426*4882a593Smuzhiyun 1427*4882a593SmuzhiyunDESCRIPTION 1428*4882a593Smuzhiyun^^^^^^^^^^^ 1429*4882a593Smuzhiyun 1430*4882a593SmuzhiyunEnables the data line drivers, for 8-bit host-to-peripheral 1431*4882a593Smuzhiyuncommunications. 1432*4882a593Smuzhiyun 1433*4882a593SmuzhiyunSEE ALSO 1434*4882a593Smuzhiyun^^^^^^^^ 1435*4882a593Smuzhiyun 1436*4882a593Smuzhiyundata_reverse 1437*4882a593Smuzhiyun 1438*4882a593Smuzhiyun 1439*4882a593Smuzhiyun 1440*4882a593Smuzhiyunport->ops->data_reverse - tristate the buffer 1441*4882a593Smuzhiyun--------------------------------------------- 1442*4882a593Smuzhiyun 1443*4882a593SmuzhiyunSYNOPSIS 1444*4882a593Smuzhiyun^^^^^^^^ 1445*4882a593Smuzhiyun 1446*4882a593Smuzhiyun:: 1447*4882a593Smuzhiyun 1448*4882a593Smuzhiyun #include <linux/parport.h> 1449*4882a593Smuzhiyun 1450*4882a593Smuzhiyun struct parport_operations { 1451*4882a593Smuzhiyun ... 1452*4882a593Smuzhiyun void (*data_reverse) (struct parport *port); 1453*4882a593Smuzhiyun ... 1454*4882a593Smuzhiyun }; 1455*4882a593Smuzhiyun 1456*4882a593SmuzhiyunDESCRIPTION 1457*4882a593Smuzhiyun^^^^^^^^^^^ 1458*4882a593Smuzhiyun 1459*4882a593SmuzhiyunPlaces the data bus in a high impedance state, if port->modes has the 1460*4882a593SmuzhiyunPARPORT_MODE_TRISTATE bit set. 1461*4882a593Smuzhiyun 1462*4882a593SmuzhiyunSEE ALSO 1463*4882a593Smuzhiyun^^^^^^^^ 1464*4882a593Smuzhiyun 1465*4882a593Smuzhiyundata_forward 1466*4882a593Smuzhiyun 1467*4882a593Smuzhiyun 1468*4882a593Smuzhiyun 1469*4882a593Smuzhiyunport->ops->epp_write_data - write EPP data 1470*4882a593Smuzhiyun------------------------------------------ 1471*4882a593Smuzhiyun 1472*4882a593SmuzhiyunSYNOPSIS 1473*4882a593Smuzhiyun^^^^^^^^ 1474*4882a593Smuzhiyun 1475*4882a593Smuzhiyun:: 1476*4882a593Smuzhiyun 1477*4882a593Smuzhiyun #include <linux/parport.h> 1478*4882a593Smuzhiyun 1479*4882a593Smuzhiyun struct parport_operations { 1480*4882a593Smuzhiyun ... 1481*4882a593Smuzhiyun size_t (*epp_write_data) (struct parport *port, const void *buf, 1482*4882a593Smuzhiyun size_t len, int flags); 1483*4882a593Smuzhiyun ... 1484*4882a593Smuzhiyun }; 1485*4882a593Smuzhiyun 1486*4882a593SmuzhiyunDESCRIPTION 1487*4882a593Smuzhiyun^^^^^^^^^^^ 1488*4882a593Smuzhiyun 1489*4882a593SmuzhiyunWrites data in EPP mode, and returns the number of bytes written. 1490*4882a593Smuzhiyun 1491*4882a593SmuzhiyunThe ``flags`` parameter may be one or more of the following, 1492*4882a593Smuzhiyunbitwise-or'ed together: 1493*4882a593Smuzhiyun 1494*4882a593Smuzhiyun======================= ================================================= 1495*4882a593SmuzhiyunPARPORT_EPP_FAST Use fast transfers. Some chips provide 16-bit and 1496*4882a593Smuzhiyun 32-bit registers. However, if a transfer 1497*4882a593Smuzhiyun times out, the return value may be unreliable. 1498*4882a593Smuzhiyun======================= ================================================= 1499*4882a593Smuzhiyun 1500*4882a593SmuzhiyunSEE ALSO 1501*4882a593Smuzhiyun^^^^^^^^ 1502*4882a593Smuzhiyun 1503*4882a593Smuzhiyunepp_read_data, epp_write_addr, epp_read_addr 1504*4882a593Smuzhiyun 1505*4882a593Smuzhiyun 1506*4882a593Smuzhiyun 1507*4882a593Smuzhiyunport->ops->epp_read_data - read EPP data 1508*4882a593Smuzhiyun---------------------------------------- 1509*4882a593Smuzhiyun 1510*4882a593SmuzhiyunSYNOPSIS 1511*4882a593Smuzhiyun^^^^^^^^ 1512*4882a593Smuzhiyun 1513*4882a593Smuzhiyun:: 1514*4882a593Smuzhiyun 1515*4882a593Smuzhiyun #include <linux/parport.h> 1516*4882a593Smuzhiyun 1517*4882a593Smuzhiyun struct parport_operations { 1518*4882a593Smuzhiyun ... 1519*4882a593Smuzhiyun size_t (*epp_read_data) (struct parport *port, void *buf, 1520*4882a593Smuzhiyun size_t len, int flags); 1521*4882a593Smuzhiyun ... 1522*4882a593Smuzhiyun }; 1523*4882a593Smuzhiyun 1524*4882a593SmuzhiyunDESCRIPTION 1525*4882a593Smuzhiyun^^^^^^^^^^^ 1526*4882a593Smuzhiyun 1527*4882a593SmuzhiyunReads data in EPP mode, and returns the number of bytes read. 1528*4882a593Smuzhiyun 1529*4882a593SmuzhiyunThe ``flags`` parameter may be one or more of the following, 1530*4882a593Smuzhiyunbitwise-or'ed together: 1531*4882a593Smuzhiyun 1532*4882a593Smuzhiyun======================= ================================================= 1533*4882a593SmuzhiyunPARPORT_EPP_FAST Use fast transfers. Some chips provide 16-bit and 1534*4882a593Smuzhiyun 32-bit registers. However, if a transfer 1535*4882a593Smuzhiyun times out, the return value may be unreliable. 1536*4882a593Smuzhiyun======================= ================================================= 1537*4882a593Smuzhiyun 1538*4882a593SmuzhiyunSEE ALSO 1539*4882a593Smuzhiyun^^^^^^^^ 1540*4882a593Smuzhiyun 1541*4882a593Smuzhiyunepp_write_data, epp_write_addr, epp_read_addr 1542*4882a593Smuzhiyun 1543*4882a593Smuzhiyun 1544*4882a593Smuzhiyun 1545*4882a593Smuzhiyunport->ops->epp_write_addr - write EPP address 1546*4882a593Smuzhiyun--------------------------------------------- 1547*4882a593Smuzhiyun 1548*4882a593SmuzhiyunSYNOPSIS 1549*4882a593Smuzhiyun^^^^^^^^ 1550*4882a593Smuzhiyun 1551*4882a593Smuzhiyun:: 1552*4882a593Smuzhiyun 1553*4882a593Smuzhiyun #include <linux/parport.h> 1554*4882a593Smuzhiyun 1555*4882a593Smuzhiyun struct parport_operations { 1556*4882a593Smuzhiyun ... 1557*4882a593Smuzhiyun size_t (*epp_write_addr) (struct parport *port, 1558*4882a593Smuzhiyun const void *buf, size_t len, int flags); 1559*4882a593Smuzhiyun ... 1560*4882a593Smuzhiyun }; 1561*4882a593Smuzhiyun 1562*4882a593SmuzhiyunDESCRIPTION 1563*4882a593Smuzhiyun^^^^^^^^^^^ 1564*4882a593Smuzhiyun 1565*4882a593SmuzhiyunWrites EPP addresses (8 bits each), and returns the number written. 1566*4882a593Smuzhiyun 1567*4882a593SmuzhiyunThe ``flags`` parameter may be one or more of the following, 1568*4882a593Smuzhiyunbitwise-or'ed together: 1569*4882a593Smuzhiyun 1570*4882a593Smuzhiyun======================= ================================================= 1571*4882a593SmuzhiyunPARPORT_EPP_FAST Use fast transfers. Some chips provide 16-bit and 1572*4882a593Smuzhiyun 32-bit registers. However, if a transfer 1573*4882a593Smuzhiyun times out, the return value may be unreliable. 1574*4882a593Smuzhiyun======================= ================================================= 1575*4882a593Smuzhiyun 1576*4882a593Smuzhiyun(Does PARPORT_EPP_FAST make sense for this function?) 1577*4882a593Smuzhiyun 1578*4882a593SmuzhiyunSEE ALSO 1579*4882a593Smuzhiyun^^^^^^^^ 1580*4882a593Smuzhiyun 1581*4882a593Smuzhiyunepp_write_data, epp_read_data, epp_read_addr 1582*4882a593Smuzhiyun 1583*4882a593Smuzhiyun 1584*4882a593Smuzhiyun 1585*4882a593Smuzhiyunport->ops->epp_read_addr - read EPP address 1586*4882a593Smuzhiyun------------------------------------------- 1587*4882a593Smuzhiyun 1588*4882a593SmuzhiyunSYNOPSIS 1589*4882a593Smuzhiyun^^^^^^^^ 1590*4882a593Smuzhiyun 1591*4882a593Smuzhiyun:: 1592*4882a593Smuzhiyun 1593*4882a593Smuzhiyun #include <linux/parport.h> 1594*4882a593Smuzhiyun 1595*4882a593Smuzhiyun struct parport_operations { 1596*4882a593Smuzhiyun ... 1597*4882a593Smuzhiyun size_t (*epp_read_addr) (struct parport *port, void *buf, 1598*4882a593Smuzhiyun size_t len, int flags); 1599*4882a593Smuzhiyun ... 1600*4882a593Smuzhiyun }; 1601*4882a593Smuzhiyun 1602*4882a593SmuzhiyunDESCRIPTION 1603*4882a593Smuzhiyun^^^^^^^^^^^ 1604*4882a593Smuzhiyun 1605*4882a593SmuzhiyunReads EPP addresses (8 bits each), and returns the number read. 1606*4882a593Smuzhiyun 1607*4882a593SmuzhiyunThe ``flags`` parameter may be one or more of the following, 1608*4882a593Smuzhiyunbitwise-or'ed together: 1609*4882a593Smuzhiyun 1610*4882a593Smuzhiyun======================= ================================================= 1611*4882a593SmuzhiyunPARPORT_EPP_FAST Use fast transfers. Some chips provide 16-bit and 1612*4882a593Smuzhiyun 32-bit registers. However, if a transfer 1613*4882a593Smuzhiyun times out, the return value may be unreliable. 1614*4882a593Smuzhiyun======================= ================================================= 1615*4882a593Smuzhiyun 1616*4882a593Smuzhiyun(Does PARPORT_EPP_FAST make sense for this function?) 1617*4882a593Smuzhiyun 1618*4882a593SmuzhiyunSEE ALSO 1619*4882a593Smuzhiyun^^^^^^^^ 1620*4882a593Smuzhiyun 1621*4882a593Smuzhiyunepp_write_data, epp_read_data, epp_write_addr 1622*4882a593Smuzhiyun 1623*4882a593Smuzhiyun 1624*4882a593Smuzhiyun 1625*4882a593Smuzhiyunport->ops->ecp_write_data - write a block of ECP data 1626*4882a593Smuzhiyun----------------------------------------------------- 1627*4882a593Smuzhiyun 1628*4882a593SmuzhiyunSYNOPSIS 1629*4882a593Smuzhiyun^^^^^^^^ 1630*4882a593Smuzhiyun 1631*4882a593Smuzhiyun:: 1632*4882a593Smuzhiyun 1633*4882a593Smuzhiyun #include <linux/parport.h> 1634*4882a593Smuzhiyun 1635*4882a593Smuzhiyun struct parport_operations { 1636*4882a593Smuzhiyun ... 1637*4882a593Smuzhiyun size_t (*ecp_write_data) (struct parport *port, 1638*4882a593Smuzhiyun const void *buf, size_t len, int flags); 1639*4882a593Smuzhiyun ... 1640*4882a593Smuzhiyun }; 1641*4882a593Smuzhiyun 1642*4882a593SmuzhiyunDESCRIPTION 1643*4882a593Smuzhiyun^^^^^^^^^^^ 1644*4882a593Smuzhiyun 1645*4882a593SmuzhiyunWrites a block of ECP data. The ``flags`` parameter is ignored. 1646*4882a593Smuzhiyun 1647*4882a593SmuzhiyunRETURN VALUE 1648*4882a593Smuzhiyun^^^^^^^^^^^^ 1649*4882a593Smuzhiyun 1650*4882a593SmuzhiyunThe number of bytes written. 1651*4882a593Smuzhiyun 1652*4882a593SmuzhiyunSEE ALSO 1653*4882a593Smuzhiyun^^^^^^^^ 1654*4882a593Smuzhiyun 1655*4882a593Smuzhiyunecp_read_data, ecp_write_addr 1656*4882a593Smuzhiyun 1657*4882a593Smuzhiyun 1658*4882a593Smuzhiyun 1659*4882a593Smuzhiyunport->ops->ecp_read_data - read a block of ECP data 1660*4882a593Smuzhiyun--------------------------------------------------- 1661*4882a593Smuzhiyun 1662*4882a593SmuzhiyunSYNOPSIS 1663*4882a593Smuzhiyun^^^^^^^^ 1664*4882a593Smuzhiyun 1665*4882a593Smuzhiyun:: 1666*4882a593Smuzhiyun 1667*4882a593Smuzhiyun #include <linux/parport.h> 1668*4882a593Smuzhiyun 1669*4882a593Smuzhiyun struct parport_operations { 1670*4882a593Smuzhiyun ... 1671*4882a593Smuzhiyun size_t (*ecp_read_data) (struct parport *port, 1672*4882a593Smuzhiyun void *buf, size_t len, int flags); 1673*4882a593Smuzhiyun ... 1674*4882a593Smuzhiyun }; 1675*4882a593Smuzhiyun 1676*4882a593SmuzhiyunDESCRIPTION 1677*4882a593Smuzhiyun^^^^^^^^^^^ 1678*4882a593Smuzhiyun 1679*4882a593SmuzhiyunReads a block of ECP data. The ``flags`` parameter is ignored. 1680*4882a593Smuzhiyun 1681*4882a593SmuzhiyunRETURN VALUE 1682*4882a593Smuzhiyun^^^^^^^^^^^^ 1683*4882a593Smuzhiyun 1684*4882a593SmuzhiyunThe number of bytes read. NB. There may be more unread data in a 1685*4882a593SmuzhiyunFIFO. Is there a way of stunning the FIFO to prevent this? 1686*4882a593Smuzhiyun 1687*4882a593SmuzhiyunSEE ALSO 1688*4882a593Smuzhiyun^^^^^^^^ 1689*4882a593Smuzhiyun 1690*4882a593Smuzhiyunecp_write_block, ecp_write_addr 1691*4882a593Smuzhiyun 1692*4882a593Smuzhiyun 1693*4882a593Smuzhiyun 1694*4882a593Smuzhiyunport->ops->ecp_write_addr - write a block of ECP addresses 1695*4882a593Smuzhiyun---------------------------------------------------------- 1696*4882a593Smuzhiyun 1697*4882a593SmuzhiyunSYNOPSIS 1698*4882a593Smuzhiyun^^^^^^^^ 1699*4882a593Smuzhiyun 1700*4882a593Smuzhiyun:: 1701*4882a593Smuzhiyun 1702*4882a593Smuzhiyun #include <linux/parport.h> 1703*4882a593Smuzhiyun 1704*4882a593Smuzhiyun struct parport_operations { 1705*4882a593Smuzhiyun ... 1706*4882a593Smuzhiyun size_t (*ecp_write_addr) (struct parport *port, 1707*4882a593Smuzhiyun const void *buf, size_t len, int flags); 1708*4882a593Smuzhiyun ... 1709*4882a593Smuzhiyun }; 1710*4882a593Smuzhiyun 1711*4882a593SmuzhiyunDESCRIPTION 1712*4882a593Smuzhiyun^^^^^^^^^^^ 1713*4882a593Smuzhiyun 1714*4882a593SmuzhiyunWrites a block of ECP addresses. The ``flags`` parameter is ignored. 1715*4882a593Smuzhiyun 1716*4882a593SmuzhiyunRETURN VALUE 1717*4882a593Smuzhiyun^^^^^^^^^^^^ 1718*4882a593Smuzhiyun 1719*4882a593SmuzhiyunThe number of bytes written. 1720*4882a593Smuzhiyun 1721*4882a593SmuzhiyunNOTES 1722*4882a593Smuzhiyun^^^^^ 1723*4882a593Smuzhiyun 1724*4882a593SmuzhiyunThis may use a FIFO, and if so shall not return until the FIFO is empty. 1725*4882a593Smuzhiyun 1726*4882a593SmuzhiyunSEE ALSO 1727*4882a593Smuzhiyun^^^^^^^^ 1728*4882a593Smuzhiyun 1729*4882a593Smuzhiyunecp_read_data, ecp_write_data 1730*4882a593Smuzhiyun 1731*4882a593Smuzhiyun 1732*4882a593Smuzhiyun 1733*4882a593Smuzhiyunport->ops->nibble_read_data - read a block of data in nibble mode 1734*4882a593Smuzhiyun----------------------------------------------------------------- 1735*4882a593Smuzhiyun 1736*4882a593SmuzhiyunSYNOPSIS 1737*4882a593Smuzhiyun^^^^^^^^ 1738*4882a593Smuzhiyun 1739*4882a593Smuzhiyun:: 1740*4882a593Smuzhiyun 1741*4882a593Smuzhiyun #include <linux/parport.h> 1742*4882a593Smuzhiyun 1743*4882a593Smuzhiyun struct parport_operations { 1744*4882a593Smuzhiyun ... 1745*4882a593Smuzhiyun size_t (*nibble_read_data) (struct parport *port, 1746*4882a593Smuzhiyun void *buf, size_t len, int flags); 1747*4882a593Smuzhiyun ... 1748*4882a593Smuzhiyun }; 1749*4882a593Smuzhiyun 1750*4882a593SmuzhiyunDESCRIPTION 1751*4882a593Smuzhiyun^^^^^^^^^^^ 1752*4882a593Smuzhiyun 1753*4882a593SmuzhiyunReads a block of data in nibble mode. The ``flags`` parameter is ignored. 1754*4882a593Smuzhiyun 1755*4882a593SmuzhiyunRETURN VALUE 1756*4882a593Smuzhiyun^^^^^^^^^^^^ 1757*4882a593Smuzhiyun 1758*4882a593SmuzhiyunThe number of whole bytes read. 1759*4882a593Smuzhiyun 1760*4882a593SmuzhiyunSEE ALSO 1761*4882a593Smuzhiyun^^^^^^^^ 1762*4882a593Smuzhiyun 1763*4882a593Smuzhiyunbyte_read_data, compat_write_data 1764*4882a593Smuzhiyun 1765*4882a593Smuzhiyun 1766*4882a593Smuzhiyun 1767*4882a593Smuzhiyunport->ops->byte_read_data - read a block of data in byte mode 1768*4882a593Smuzhiyun------------------------------------------------------------- 1769*4882a593Smuzhiyun 1770*4882a593SmuzhiyunSYNOPSIS 1771*4882a593Smuzhiyun^^^^^^^^ 1772*4882a593Smuzhiyun 1773*4882a593Smuzhiyun:: 1774*4882a593Smuzhiyun 1775*4882a593Smuzhiyun #include <linux/parport.h> 1776*4882a593Smuzhiyun 1777*4882a593Smuzhiyun struct parport_operations { 1778*4882a593Smuzhiyun ... 1779*4882a593Smuzhiyun size_t (*byte_read_data) (struct parport *port, 1780*4882a593Smuzhiyun void *buf, size_t len, int flags); 1781*4882a593Smuzhiyun ... 1782*4882a593Smuzhiyun }; 1783*4882a593Smuzhiyun 1784*4882a593SmuzhiyunDESCRIPTION 1785*4882a593Smuzhiyun^^^^^^^^^^^ 1786*4882a593Smuzhiyun 1787*4882a593SmuzhiyunReads a block of data in byte mode. The ``flags`` parameter is ignored. 1788*4882a593Smuzhiyun 1789*4882a593SmuzhiyunRETURN VALUE 1790*4882a593Smuzhiyun^^^^^^^^^^^^ 1791*4882a593Smuzhiyun 1792*4882a593SmuzhiyunThe number of bytes read. 1793*4882a593Smuzhiyun 1794*4882a593SmuzhiyunSEE ALSO 1795*4882a593Smuzhiyun^^^^^^^^ 1796*4882a593Smuzhiyun 1797*4882a593Smuzhiyunnibble_read_data, compat_write_data 1798*4882a593Smuzhiyun 1799*4882a593Smuzhiyun 1800*4882a593Smuzhiyun 1801*4882a593Smuzhiyunport->ops->compat_write_data - write a block of data in compatibility mode 1802*4882a593Smuzhiyun-------------------------------------------------------------------------- 1803*4882a593Smuzhiyun 1804*4882a593SmuzhiyunSYNOPSIS 1805*4882a593Smuzhiyun^^^^^^^^ 1806*4882a593Smuzhiyun 1807*4882a593Smuzhiyun:: 1808*4882a593Smuzhiyun 1809*4882a593Smuzhiyun #include <linux/parport.h> 1810*4882a593Smuzhiyun 1811*4882a593Smuzhiyun struct parport_operations { 1812*4882a593Smuzhiyun ... 1813*4882a593Smuzhiyun size_t (*compat_write_data) (struct parport *port, 1814*4882a593Smuzhiyun const void *buf, size_t len, int flags); 1815*4882a593Smuzhiyun ... 1816*4882a593Smuzhiyun }; 1817*4882a593Smuzhiyun 1818*4882a593SmuzhiyunDESCRIPTION 1819*4882a593Smuzhiyun^^^^^^^^^^^ 1820*4882a593Smuzhiyun 1821*4882a593SmuzhiyunWrites a block of data in compatibility mode. The ``flags`` parameter 1822*4882a593Smuzhiyunis ignored. 1823*4882a593Smuzhiyun 1824*4882a593SmuzhiyunRETURN VALUE 1825*4882a593Smuzhiyun^^^^^^^^^^^^ 1826*4882a593Smuzhiyun 1827*4882a593SmuzhiyunThe number of bytes written. 1828*4882a593Smuzhiyun 1829*4882a593SmuzhiyunSEE ALSO 1830*4882a593Smuzhiyun^^^^^^^^ 1831*4882a593Smuzhiyun 1832*4882a593Smuzhiyunnibble_read_data, byte_read_data 1833