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