This source file includes following definitions.
- parport_yield
- parport_yield_blocking
- parport_generic_irq
1
2
3
4
5
6 #ifndef _PARPORT_H_
7 #define _PARPORT_H_
8
9
10 #include <linux/jiffies.h>
11 #include <linux/proc_fs.h>
12 #include <linux/spinlock.h>
13 #include <linux/wait.h>
14 #include <linux/irqreturn.h>
15 #include <linux/semaphore.h>
16 #include <linux/device.h>
17 #include <asm/ptrace.h>
18 #include <uapi/linux/parport.h>
19
20
21 struct parport;
22 struct pardevice;
23
24 struct pc_parport_state {
25 unsigned int ctr;
26 unsigned int ecr;
27 };
28
29 struct ax_parport_state {
30 unsigned int ctr;
31 unsigned int ecr;
32 unsigned int dcsr;
33 };
34
35
36 struct amiga_parport_state {
37 unsigned char data;
38 unsigned char datadir;
39 unsigned char status;
40 unsigned char statusdir;
41 };
42
43 struct ax88796_parport_state {
44 unsigned char cpr;
45 };
46
47 struct ip32_parport_state {
48 unsigned int dcr;
49 unsigned int ecr;
50 };
51
52 struct parport_state {
53 union {
54 struct pc_parport_state pc;
55
56 struct ax_parport_state ax;
57 struct amiga_parport_state amiga;
58 struct ax88796_parport_state ax88796;
59
60 struct ip32_parport_state ip32;
61 void *misc;
62 } u;
63 };
64
65 struct parport_operations {
66
67 void (*write_data)(struct parport *, unsigned char);
68 unsigned char (*read_data)(struct parport *);
69
70 void (*write_control)(struct parport *, unsigned char);
71 unsigned char (*read_control)(struct parport *);
72 unsigned char (*frob_control)(struct parport *, unsigned char mask,
73 unsigned char val);
74
75 unsigned char (*read_status)(struct parport *);
76
77
78 void (*enable_irq)(struct parport *);
79 void (*disable_irq)(struct parport *);
80
81
82 void (*data_forward) (struct parport *);
83 void (*data_reverse) (struct parport *);
84
85
86 void (*init_state)(struct pardevice *, struct parport_state *);
87 void (*save_state)(struct parport *, struct parport_state *);
88 void (*restore_state)(struct parport *, struct parport_state *);
89
90
91 size_t (*epp_write_data) (struct parport *port, const void *buf,
92 size_t len, int flags);
93 size_t (*epp_read_data) (struct parport *port, void *buf, size_t len,
94 int flags);
95 size_t (*epp_write_addr) (struct parport *port, const void *buf,
96 size_t len, int flags);
97 size_t (*epp_read_addr) (struct parport *port, void *buf, size_t len,
98 int flags);
99
100 size_t (*ecp_write_data) (struct parport *port, const void *buf,
101 size_t len, int flags);
102 size_t (*ecp_read_data) (struct parport *port, void *buf, size_t len,
103 int flags);
104 size_t (*ecp_write_addr) (struct parport *port, const void *buf,
105 size_t len, int flags);
106
107 size_t (*compat_write_data) (struct parport *port, const void *buf,
108 size_t len, int flags);
109 size_t (*nibble_read_data) (struct parport *port, void *buf,
110 size_t len, int flags);
111 size_t (*byte_read_data) (struct parport *port, void *buf,
112 size_t len, int flags);
113 struct module *owner;
114 };
115
116 struct parport_device_info {
117 parport_device_class class;
118 const char *class_name;
119 const char *mfr;
120 const char *model;
121 const char *cmdset;
122 const char *description;
123 };
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138 struct pardevice {
139 const char *name;
140 struct parport *port;
141 int daisy;
142 int (*preempt)(void *);
143 void (*wakeup)(void *);
144 void *private;
145 void (*irq_func)(void *);
146 unsigned int flags;
147 struct pardevice *next;
148 struct pardevice *prev;
149 struct device dev;
150 bool devmodel;
151 struct parport_state *state;
152 wait_queue_head_t wait_q;
153 unsigned long int time;
154 unsigned long int timeslice;
155 volatile long int timeout;
156 unsigned long waiting;
157 struct pardevice *waitprev;
158 struct pardevice *waitnext;
159 void * sysctl_table;
160 };
161
162 #define to_pardevice(n) container_of(n, struct pardevice, dev)
163
164
165
166
167
168 enum ieee1284_phase {
169 IEEE1284_PH_FWD_DATA,
170 IEEE1284_PH_FWD_IDLE,
171 IEEE1284_PH_TERMINATE,
172 IEEE1284_PH_NEGOTIATION,
173 IEEE1284_PH_HBUSY_DNA,
174 IEEE1284_PH_REV_IDLE,
175 IEEE1284_PH_HBUSY_DAVAIL,
176 IEEE1284_PH_REV_DATA,
177 IEEE1284_PH_ECP_SETUP,
178 IEEE1284_PH_ECP_FWD_TO_REV,
179 IEEE1284_PH_ECP_REV_TO_FWD,
180 IEEE1284_PH_ECP_DIR_UNKNOWN,
181 };
182 struct ieee1284_info {
183 int mode;
184 volatile enum ieee1284_phase phase;
185 struct semaphore irq;
186 };
187
188
189 struct parport {
190 unsigned long base;
191 unsigned long base_hi;
192 unsigned int size;
193 const char *name;
194 unsigned int modes;
195 int irq;
196 int dma;
197 int muxport;
198 int portnum;
199 struct device *dev;
200
201
202
203 struct device bus_dev;
204 struct parport *physport;
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219 struct pardevice *devices;
220 struct pardevice *cad;
221 int daisy;
222 int muxsel;
223
224 struct pardevice *waithead;
225 struct pardevice *waittail;
226
227 struct list_head list;
228 struct timer_list timer;
229 unsigned int flags;
230
231 void *sysctl_table;
232 struct parport_device_info probe_info[5];
233 struct ieee1284_info ieee1284;
234
235 struct parport_operations *ops;
236 void *private_data;
237
238 int number;
239 spinlock_t pardevice_lock;
240 spinlock_t waitlist_lock;
241 rwlock_t cad_lock;
242
243 int spintime;
244 atomic_t ref_count;
245
246 unsigned long devflags;
247 #define PARPORT_DEVPROC_REGISTERED 0
248 struct pardevice *proc_device;
249
250 struct list_head full_list;
251 struct parport *slaves[3];
252 };
253
254 #define to_parport_dev(n) container_of(n, struct parport, bus_dev)
255
256 #define DEFAULT_SPIN_TIME 500
257
258 struct parport_driver {
259 const char *name;
260 void (*attach) (struct parport *);
261 void (*detach) (struct parport *);
262 void (*match_port)(struct parport *);
263 int (*probe)(struct pardevice *);
264 struct device_driver driver;
265 bool devmodel;
266 struct list_head list;
267 };
268
269 #define to_parport_driver(n) container_of(n, struct parport_driver, driver)
270
271 int parport_bus_init(void);
272 void parport_bus_exit(void);
273
274
275
276
277
278 struct parport *parport_register_port(unsigned long base, int irq, int dma,
279 struct parport_operations *ops);
280
281
282
283
284
285
286 void parport_announce_port (struct parport *port);
287
288
289 extern void parport_remove_port(struct parport *port);
290
291
292
293 int __must_check __parport_register_driver(struct parport_driver *,
294 struct module *,
295 const char *mod_name);
296
297
298
299
300 #define parport_register_driver(driver) \
301 __parport_register_driver(driver, THIS_MODULE, KBUILD_MODNAME)
302
303
304 extern void parport_unregister_driver (struct parport_driver *);
305 void parport_unregister_driver(struct parport_driver *);
306
307
308
309 extern struct parport *parport_find_number (int);
310 extern struct parport *parport_find_base (unsigned long);
311
312
313 extern irqreturn_t parport_irq_handler(int irq, void *dev_id);
314
315
316 extern struct parport *parport_get_port (struct parport *);
317 extern void parport_put_port (struct parport *);
318 void parport_del_port(struct parport *);
319
320 struct pardev_cb {
321 int (*preempt)(void *);
322 void (*wakeup)(void *);
323 void *private;
324 void (*irq_func)(void *);
325 unsigned int flags;
326 };
327
328
329
330
331
332
333
334 struct pardevice *parport_register_device(struct parport *port,
335 const char *name,
336 int (*pf)(void *), void (*kf)(void *),
337 void (*irq_func)(void *),
338 int flags, void *handle);
339
340 struct pardevice *
341 parport_register_dev_model(struct parport *port, const char *name,
342 const struct pardev_cb *par_dev_cb, int cnt);
343
344
345 extern void parport_unregister_device(struct pardevice *dev);
346
347
348
349
350
351 extern int parport_claim(struct pardevice *dev);
352
353
354
355
356 extern int parport_claim_or_block(struct pardevice *dev);
357
358
359
360
361
362
363
364
365
366 extern void parport_release(struct pardevice *dev);
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388 static __inline__ int parport_yield(struct pardevice *dev)
389 {
390 unsigned long int timeslip = (jiffies - dev->time);
391 if ((dev->port->waithead == NULL) || (timeslip < dev->timeslice))
392 return 0;
393 parport_release(dev);
394 return parport_claim(dev);
395 }
396
397
398
399
400
401
402
403
404
405
406 static __inline__ int parport_yield_blocking(struct pardevice *dev)
407 {
408 unsigned long int timeslip = (jiffies - dev->time);
409 if ((dev->port->waithead == NULL) || (timeslip < dev->timeslice))
410 return 0;
411 parport_release(dev);
412 return parport_claim_or_block(dev);
413 }
414
415
416 #define PARPORT_DEV_TRAN 0
417 #define PARPORT_DEV_LURK (1<<0)
418 #define PARPORT_DEV_EXCL (1<<1)
419
420 #define PARPORT_FLAG_EXCL (1<<1)
421
422
423 extern void parport_ieee1284_interrupt (void *);
424 extern int parport_negotiate (struct parport *, int mode);
425 extern ssize_t parport_write (struct parport *, const void *buf, size_t len);
426 extern ssize_t parport_read (struct parport *, void *buf, size_t len);
427
428 #define PARPORT_INACTIVITY_O_NONBLOCK 1
429 extern long parport_set_timeout (struct pardevice *, long inactivity);
430
431 extern int parport_wait_event (struct parport *, long timeout);
432 extern int parport_wait_peripheral (struct parport *port,
433 unsigned char mask,
434 unsigned char val);
435 extern int parport_poll_peripheral (struct parport *port,
436 unsigned char mask,
437 unsigned char val,
438 int usec);
439
440
441 extern size_t parport_ieee1284_write_compat (struct parport *,
442 const void *, size_t, int);
443 extern size_t parport_ieee1284_read_nibble (struct parport *,
444 void *, size_t, int);
445 extern size_t parport_ieee1284_read_byte (struct parport *,
446 void *, size_t, int);
447 extern size_t parport_ieee1284_ecp_read_data (struct parport *,
448 void *, size_t, int);
449 extern size_t parport_ieee1284_ecp_write_data (struct parport *,
450 const void *, size_t, int);
451 extern size_t parport_ieee1284_ecp_write_addr (struct parport *,
452 const void *, size_t, int);
453 extern size_t parport_ieee1284_epp_write_data (struct parport *,
454 const void *, size_t, int);
455 extern size_t parport_ieee1284_epp_read_data (struct parport *,
456 void *, size_t, int);
457 extern size_t parport_ieee1284_epp_write_addr (struct parport *,
458 const void *, size_t, int);
459 extern size_t parport_ieee1284_epp_read_addr (struct parport *,
460 void *, size_t, int);
461
462
463 extern int parport_daisy_init (struct parport *port);
464 extern void parport_daisy_fini (struct parport *port);
465 extern struct pardevice *parport_open (int devnum, const char *name);
466 extern void parport_close (struct pardevice *dev);
467 extern ssize_t parport_device_id (int devnum, char *buffer, size_t len);
468 extern void parport_daisy_deselect_all (struct parport *port);
469 extern int parport_daisy_select (struct parport *port, int daisy, int mode);
470
471
472 static inline void parport_generic_irq(struct parport *port)
473 {
474 parport_ieee1284_interrupt (port);
475 read_lock(&port->cad_lock);
476 if (port->cad && port->cad->irq_func)
477 port->cad->irq_func(port->cad->private);
478 read_unlock(&port->cad_lock);
479 }
480
481
482 extern int parport_proc_register(struct parport *pp);
483 extern int parport_proc_unregister(struct parport *pp);
484 extern int parport_device_proc_register(struct pardevice *device);
485 extern int parport_device_proc_unregister(struct pardevice *device);
486
487
488 #if !defined(CONFIG_PARPORT_NOT_PC)
489
490 #include <linux/parport_pc.h>
491 #define parport_write_data(p,x) parport_pc_write_data(p,x)
492 #define parport_read_data(p) parport_pc_read_data(p)
493 #define parport_write_control(p,x) parport_pc_write_control(p,x)
494 #define parport_read_control(p) parport_pc_read_control(p)
495 #define parport_frob_control(p,m,v) parport_pc_frob_control(p,m,v)
496 #define parport_read_status(p) parport_pc_read_status(p)
497 #define parport_enable_irq(p) parport_pc_enable_irq(p)
498 #define parport_disable_irq(p) parport_pc_disable_irq(p)
499 #define parport_data_forward(p) parport_pc_data_forward(p)
500 #define parport_data_reverse(p) parport_pc_data_reverse(p)
501
502 #else
503
504
505 #define parport_write_data(p,x) (p)->ops->write_data(p,x)
506 #define parport_read_data(p) (p)->ops->read_data(p)
507 #define parport_write_control(p,x) (p)->ops->write_control(p,x)
508 #define parport_read_control(p) (p)->ops->read_control(p)
509 #define parport_frob_control(p,m,v) (p)->ops->frob_control(p,m,v)
510 #define parport_read_status(p) (p)->ops->read_status(p)
511 #define parport_enable_irq(p) (p)->ops->enable_irq(p)
512 #define parport_disable_irq(p) (p)->ops->disable_irq(p)
513 #define parport_data_forward(p) (p)->ops->data_forward(p)
514 #define parport_data_reverse(p) (p)->ops->data_reverse(p)
515
516 #endif
517
518 extern unsigned long parport_default_timeslice;
519 extern int parport_default_spintime;
520
521 #endif