Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/drivers/char/lp.c
26278 views
1
// SPDX-License-Identifier: GPL-2.0-only
2
/*
3
* Generic parallel printer driver
4
*
5
* Copyright (C) 1992 by Jim Weigand and Linus Torvalds
6
* Copyright (C) 1992,1993 by Michael K. Johnson
7
* - Thanks much to Gunter Windau for pointing out to me where the error
8
* checking ought to be.
9
* Copyright (C) 1993 by Nigel Gamble (added interrupt code)
10
* Copyright (C) 1994 by Alan Cox (Modularised it)
11
* LPCAREFUL, LPABORT, LPGETSTATUS added by Chris Metcalf, [email protected]
12
* Statistics and support for slow printers by Rob Janssen, [email protected]
13
* "lp=" command line parameters added by Grant Guenther, [email protected]
14
* lp_read (Status readback) support added by Carsten Gross,
15
* [email protected]
16
* Support for parport by Philip Blundell <[email protected]>
17
* Parport sharing hacking by Andrea Arcangeli
18
* Fixed kernel_(to/from)_user memory copy to check for errors
19
* by Riccardo Facchetti <[email protected]>
20
* 22-JAN-1998 Added support for devfs Richard Gooch <[email protected]>
21
* Redesigned interrupt handling for handle printers with buggy handshake
22
* by Andrea Arcangeli, 11 May 1998
23
* Full efficient handling of printer with buggy irq handshake (now I have
24
* understood the meaning of the strange handshake). This is done sending new
25
* characters if the interrupt is just happened, even if the printer say to
26
* be still BUSY. This is needed at least with Epson Stylus Color. To enable
27
* the new TRUST_IRQ mode read the `LP OPTIMIZATION' section below...
28
* Fixed the irq on the rising edge of the strobe case.
29
* Obsoleted the CAREFUL flag since a printer that doesn' t work with
30
* CAREFUL will block a bit after in lp_check_status().
31
* Andrea Arcangeli, 15 Oct 1998
32
* Obsoleted and removed all the lowlevel stuff implemented in the last
33
* month to use the IEEE1284 functions (that handle the _new_ compatibilty
34
* mode fine).
35
*/
36
37
/* This driver should, in theory, work with any parallel port that has an
38
* appropriate low-level driver; all I/O is done through the parport
39
* abstraction layer.
40
*
41
* If this driver is built into the kernel, you can configure it using the
42
* kernel command-line. For example:
43
*
44
* lp=parport1,none,parport2 (bind lp0 to parport1, disable lp1 and
45
* bind lp2 to parport2)
46
*
47
* lp=auto (assign lp devices to all ports that
48
* have printers attached, as determined
49
* by the IEEE-1284 autoprobe)
50
*
51
* lp=reset (reset the printer during
52
* initialisation)
53
*
54
* lp=off (disable the printer driver entirely)
55
*
56
* If the driver is loaded as a module, similar functionality is available
57
* using module parameters. The equivalent of the above commands would be:
58
*
59
* # insmod lp.o parport=1,none,2
60
*
61
* # insmod lp.o parport=auto
62
*
63
* # insmod lp.o reset=1
64
*/
65
66
/* COMPATIBILITY WITH OLD KERNELS
67
*
68
* Under Linux 2.0 and previous versions, lp devices were bound to ports at
69
* particular I/O addresses, as follows:
70
*
71
* lp0 0x3bc
72
* lp1 0x378
73
* lp2 0x278
74
*
75
* The new driver, by default, binds lp devices to parport devices as it
76
* finds them. This means that if you only have one port, it will be bound
77
* to lp0 regardless of its I/O address. If you need the old behaviour, you
78
* can force it using the parameters described above.
79
*/
80
81
/*
82
* The new interrupt handling code take care of the buggy handshake
83
* of some HP and Epson printer:
84
* ___
85
* ACK _______________ ___________
86
* |__|
87
* ____
88
* BUSY _________ _______
89
* |____________|
90
*
91
* I discovered this using the printer scanner that you can find at:
92
*
93
* ftp://e-mind.com/pub/linux/pscan/
94
*
95
* 11 May 98, Andrea Arcangeli
96
*
97
* My printer scanner run on an Epson Stylus Color show that such printer
98
* generates the irq on the _rising_ edge of the STROBE. Now lp handle
99
* this case fine too.
100
*
101
* 15 Oct 1998, Andrea Arcangeli
102
*
103
* The so called `buggy' handshake is really the well documented
104
* compatibility mode IEEE1284 handshake. They changed the well known
105
* Centronics handshake acking in the middle of busy expecting to not
106
* break drivers or legacy application, while they broken linux lp
107
* until I fixed it reverse engineering the protocol by hand some
108
* month ago...
109
*
110
* 14 Dec 1998, Andrea Arcangeli
111
*
112
* Copyright (C) 2000 by Tim Waugh (added LPSETTIMEOUT ioctl)
113
*/
114
115
#include <linux/module.h>
116
#include <linux/init.h>
117
118
#include <linux/errno.h>
119
#include <linux/kernel.h>
120
#include <linux/major.h>
121
#include <linux/sched/signal.h>
122
#include <linux/slab.h>
123
#include <linux/fcntl.h>
124
#include <linux/delay.h>
125
#include <linux/poll.h>
126
#include <linux/console.h>
127
#include <linux/device.h>
128
#include <linux/wait.h>
129
#include <linux/jiffies.h>
130
#include <linux/mutex.h>
131
#include <linux/compat.h>
132
133
#include <linux/parport.h>
134
#undef LP_STATS
135
#include <linux/lp.h>
136
137
#include <asm/irq.h>
138
#include <linux/uaccess.h>
139
140
/* if you have more than 8 printers, remember to increase LP_NO */
141
#define LP_NO 8
142
143
static DEFINE_MUTEX(lp_mutex);
144
static struct lp_struct lp_table[LP_NO];
145
static int port_num[LP_NO];
146
147
static unsigned int lp_count = 0;
148
static const struct class lp_class = {
149
.name = "printer",
150
};
151
152
#ifdef CONFIG_LP_CONSOLE
153
static struct parport *console_registered;
154
#endif /* CONFIG_LP_CONSOLE */
155
156
#undef LP_DEBUG
157
158
/* Bits used to manage claiming the parport device */
159
#define LP_PREEMPT_REQUEST 1
160
#define LP_PARPORT_CLAIMED 2
161
162
/* --- low-level port access ----------------------------------- */
163
164
#define r_dtr(x) (parport_read_data(lp_table[(x)].dev->port))
165
#define r_str(x) (parport_read_status(lp_table[(x)].dev->port))
166
#define w_ctr(x,y) do { parport_write_control(lp_table[(x)].dev->port, (y)); } while (0)
167
#define w_dtr(x,y) do { parport_write_data(lp_table[(x)].dev->port, (y)); } while (0)
168
169
/* Claim the parport or block trying unless we've already claimed it */
170
static void lp_claim_parport_or_block(struct lp_struct *this_lp)
171
{
172
if (!test_and_set_bit(LP_PARPORT_CLAIMED, &this_lp->bits)) {
173
parport_claim_or_block(this_lp->dev);
174
}
175
}
176
177
/* Claim the parport or block trying unless we've already claimed it */
178
static void lp_release_parport(struct lp_struct *this_lp)
179
{
180
if (test_and_clear_bit(LP_PARPORT_CLAIMED, &this_lp->bits)) {
181
parport_release(this_lp->dev);
182
}
183
}
184
185
186
187
static int lp_preempt(void *handle)
188
{
189
struct lp_struct *this_lp = (struct lp_struct *)handle;
190
set_bit(LP_PREEMPT_REQUEST, &this_lp->bits);
191
return 1;
192
}
193
194
195
/*
196
* Try to negotiate to a new mode; if unsuccessful negotiate to
197
* compatibility mode. Return the mode we ended up in.
198
*/
199
static int lp_negotiate(struct parport *port, int mode)
200
{
201
if (parport_negotiate(port, mode) != 0) {
202
mode = IEEE1284_MODE_COMPAT;
203
parport_negotiate(port, mode);
204
}
205
206
return mode;
207
}
208
209
static int lp_reset(int minor)
210
{
211
int retval;
212
lp_claim_parport_or_block(&lp_table[minor]);
213
w_ctr(minor, LP_PSELECP);
214
udelay(LP_DELAY);
215
w_ctr(minor, LP_PSELECP | LP_PINITP);
216
retval = r_str(minor);
217
lp_release_parport(&lp_table[minor]);
218
return retval;
219
}
220
221
static void lp_error(int minor)
222
{
223
DEFINE_WAIT(wait);
224
int polling;
225
226
if (LP_F(minor) & LP_ABORT)
227
return;
228
229
polling = lp_table[minor].dev->port->irq == PARPORT_IRQ_NONE;
230
if (polling)
231
lp_release_parport(&lp_table[minor]);
232
prepare_to_wait(&lp_table[minor].waitq, &wait, TASK_INTERRUPTIBLE);
233
schedule_timeout(LP_TIMEOUT_POLLED);
234
finish_wait(&lp_table[minor].waitq, &wait);
235
if (polling)
236
lp_claim_parport_or_block(&lp_table[minor]);
237
else
238
parport_yield_blocking(lp_table[minor].dev);
239
}
240
241
static int lp_check_status(int minor)
242
{
243
int error = 0;
244
unsigned int last = lp_table[minor].last_error;
245
unsigned char status = r_str(minor);
246
if ((status & LP_PERRORP) && !(LP_F(minor) & LP_CAREFUL))
247
/* No error. */
248
last = 0;
249
else if ((status & LP_POUTPA)) {
250
if (last != LP_POUTPA) {
251
last = LP_POUTPA;
252
printk(KERN_INFO "lp%d out of paper\n", minor);
253
}
254
error = -ENOSPC;
255
} else if (!(status & LP_PSELECD)) {
256
if (last != LP_PSELECD) {
257
last = LP_PSELECD;
258
printk(KERN_INFO "lp%d off-line\n", minor);
259
}
260
error = -EIO;
261
} else if (!(status & LP_PERRORP)) {
262
if (last != LP_PERRORP) {
263
last = LP_PERRORP;
264
printk(KERN_INFO "lp%d on fire\n", minor);
265
}
266
error = -EIO;
267
} else {
268
last = 0; /* Come here if LP_CAREFUL is set and no
269
errors are reported. */
270
}
271
272
lp_table[minor].last_error = last;
273
274
if (last != 0)
275
lp_error(minor);
276
277
return error;
278
}
279
280
static int lp_wait_ready(int minor, int nonblock)
281
{
282
int error = 0;
283
284
/* If we're not in compatibility mode, we're ready now! */
285
if (lp_table[minor].current_mode != IEEE1284_MODE_COMPAT) {
286
return 0;
287
}
288
289
do {
290
error = lp_check_status(minor);
291
if (error && (nonblock || (LP_F(minor) & LP_ABORT)))
292
break;
293
if (signal_pending(current)) {
294
error = -EINTR;
295
break;
296
}
297
} while (error);
298
return error;
299
}
300
301
static ssize_t lp_write(struct file *file, const char __user *buf,
302
size_t count, loff_t *ppos)
303
{
304
unsigned int minor = iminor(file_inode(file));
305
struct parport *port = lp_table[minor].dev->port;
306
char *kbuf = lp_table[minor].lp_buffer;
307
ssize_t retv = 0;
308
ssize_t written;
309
size_t copy_size = count;
310
int nonblock = ((file->f_flags & O_NONBLOCK) ||
311
(LP_F(minor) & LP_ABORT));
312
313
#ifdef LP_STATS
314
if (time_after(jiffies, lp_table[minor].lastcall + LP_TIME(minor)))
315
lp_table[minor].runchars = 0;
316
317
lp_table[minor].lastcall = jiffies;
318
#endif
319
320
/* Need to copy the data from user-space. */
321
if (copy_size > LP_BUFFER_SIZE)
322
copy_size = LP_BUFFER_SIZE;
323
324
if (mutex_lock_interruptible(&lp_table[minor].port_mutex))
325
return -EINTR;
326
327
if (copy_from_user(kbuf, buf, copy_size)) {
328
retv = -EFAULT;
329
goto out_unlock;
330
}
331
332
/* Claim Parport or sleep until it becomes available
333
*/
334
lp_claim_parport_or_block(&lp_table[minor]);
335
/* Go to the proper mode. */
336
lp_table[minor].current_mode = lp_negotiate(port,
337
lp_table[minor].best_mode);
338
339
parport_set_timeout(lp_table[minor].dev,
340
(nonblock ? PARPORT_INACTIVITY_O_NONBLOCK
341
: lp_table[minor].timeout));
342
343
if ((retv = lp_wait_ready(minor, nonblock)) == 0)
344
do {
345
/* Write the data. */
346
written = parport_write(port, kbuf, copy_size);
347
if (written > 0) {
348
copy_size -= written;
349
count -= written;
350
buf += written;
351
retv += written;
352
}
353
354
if (signal_pending(current)) {
355
if (retv == 0)
356
retv = -EINTR;
357
358
break;
359
}
360
361
if (copy_size > 0) {
362
/* incomplete write -> check error ! */
363
int error;
364
365
parport_negotiate(lp_table[minor].dev->port,
366
IEEE1284_MODE_COMPAT);
367
lp_table[minor].current_mode = IEEE1284_MODE_COMPAT;
368
369
error = lp_wait_ready(minor, nonblock);
370
371
if (error) {
372
if (retv == 0)
373
retv = error;
374
break;
375
} else if (nonblock) {
376
if (retv == 0)
377
retv = -EAGAIN;
378
break;
379
}
380
381
parport_yield_blocking(lp_table[minor].dev);
382
lp_table[minor].current_mode
383
= lp_negotiate(port,
384
lp_table[minor].best_mode);
385
386
} else if (need_resched())
387
schedule();
388
389
if (count) {
390
copy_size = count;
391
if (copy_size > LP_BUFFER_SIZE)
392
copy_size = LP_BUFFER_SIZE;
393
394
if (copy_from_user(kbuf, buf, copy_size)) {
395
if (retv == 0)
396
retv = -EFAULT;
397
break;
398
}
399
}
400
} while (count > 0);
401
402
if (test_and_clear_bit(LP_PREEMPT_REQUEST,
403
&lp_table[minor].bits)) {
404
printk(KERN_INFO "lp%d releasing parport\n", minor);
405
parport_negotiate(lp_table[minor].dev->port,
406
IEEE1284_MODE_COMPAT);
407
lp_table[minor].current_mode = IEEE1284_MODE_COMPAT;
408
lp_release_parport(&lp_table[minor]);
409
}
410
out_unlock:
411
mutex_unlock(&lp_table[minor].port_mutex);
412
413
return retv;
414
}
415
416
#ifdef CONFIG_PARPORT_1284
417
418
/* Status readback conforming to ieee1284 */
419
static ssize_t lp_read(struct file *file, char __user *buf,
420
size_t count, loff_t *ppos)
421
{
422
DEFINE_WAIT(wait);
423
unsigned int minor=iminor(file_inode(file));
424
struct parport *port = lp_table[minor].dev->port;
425
ssize_t retval = 0;
426
char *kbuf = lp_table[minor].lp_buffer;
427
int nonblock = ((file->f_flags & O_NONBLOCK) ||
428
(LP_F(minor) & LP_ABORT));
429
430
if (count > LP_BUFFER_SIZE)
431
count = LP_BUFFER_SIZE;
432
433
if (mutex_lock_interruptible(&lp_table[minor].port_mutex))
434
return -EINTR;
435
436
lp_claim_parport_or_block(&lp_table[minor]);
437
438
parport_set_timeout(lp_table[minor].dev,
439
(nonblock ? PARPORT_INACTIVITY_O_NONBLOCK
440
: lp_table[minor].timeout));
441
442
parport_negotiate(lp_table[minor].dev->port, IEEE1284_MODE_COMPAT);
443
if (parport_negotiate(lp_table[minor].dev->port,
444
IEEE1284_MODE_NIBBLE)) {
445
retval = -EIO;
446
goto out;
447
}
448
449
while (retval == 0) {
450
retval = parport_read(port, kbuf, count);
451
452
if (retval > 0)
453
break;
454
455
if (nonblock) {
456
retval = -EAGAIN;
457
break;
458
}
459
460
/* Wait for data. */
461
462
if (lp_table[minor].dev->port->irq == PARPORT_IRQ_NONE) {
463
parport_negotiate(lp_table[minor].dev->port,
464
IEEE1284_MODE_COMPAT);
465
lp_error(minor);
466
if (parport_negotiate(lp_table[minor].dev->port,
467
IEEE1284_MODE_NIBBLE)) {
468
retval = -EIO;
469
goto out;
470
}
471
} else {
472
prepare_to_wait(&lp_table[minor].waitq, &wait, TASK_INTERRUPTIBLE);
473
schedule_timeout(LP_TIMEOUT_POLLED);
474
finish_wait(&lp_table[minor].waitq, &wait);
475
}
476
477
if (signal_pending(current)) {
478
retval = -ERESTARTSYS;
479
break;
480
}
481
482
cond_resched();
483
}
484
parport_negotiate(lp_table[minor].dev->port, IEEE1284_MODE_COMPAT);
485
out:
486
lp_release_parport(&lp_table[minor]);
487
488
if (retval > 0 && copy_to_user(buf, kbuf, retval))
489
retval = -EFAULT;
490
491
mutex_unlock(&lp_table[minor].port_mutex);
492
493
return retval;
494
}
495
496
#endif /* IEEE 1284 support */
497
498
static int lp_open(struct inode *inode, struct file *file)
499
{
500
unsigned int minor = iminor(inode);
501
int ret = 0;
502
503
mutex_lock(&lp_mutex);
504
if (minor >= LP_NO) {
505
ret = -ENXIO;
506
goto out;
507
}
508
if ((LP_F(minor) & LP_EXIST) == 0) {
509
ret = -ENXIO;
510
goto out;
511
}
512
if (test_and_set_bit(LP_BUSY_BIT_POS, &LP_F(minor))) {
513
ret = -EBUSY;
514
goto out;
515
}
516
/* If ABORTOPEN is set and the printer is offline or out of paper,
517
we may still want to open it to perform ioctl()s. Therefore we
518
have commandeered O_NONBLOCK, even though it is being used in
519
a non-standard manner. This is strictly a Linux hack, and
520
should most likely only ever be used by the tunelp application. */
521
if ((LP_F(minor) & LP_ABORTOPEN) && !(file->f_flags & O_NONBLOCK)) {
522
int status;
523
lp_claim_parport_or_block(&lp_table[minor]);
524
status = r_str(minor);
525
lp_release_parport(&lp_table[minor]);
526
if (status & LP_POUTPA) {
527
printk(KERN_INFO "lp%d out of paper\n", minor);
528
LP_F(minor) &= ~LP_BUSY;
529
ret = -ENOSPC;
530
goto out;
531
} else if (!(status & LP_PSELECD)) {
532
printk(KERN_INFO "lp%d off-line\n", minor);
533
LP_F(minor) &= ~LP_BUSY;
534
ret = -EIO;
535
goto out;
536
} else if (!(status & LP_PERRORP)) {
537
printk(KERN_ERR "lp%d printer error\n", minor);
538
LP_F(minor) &= ~LP_BUSY;
539
ret = -EIO;
540
goto out;
541
}
542
}
543
lp_table[minor].lp_buffer = kmalloc(LP_BUFFER_SIZE, GFP_KERNEL);
544
if (!lp_table[minor].lp_buffer) {
545
LP_F(minor) &= ~LP_BUSY;
546
ret = -ENOMEM;
547
goto out;
548
}
549
/* Determine if the peripheral supports ECP mode */
550
lp_claim_parport_or_block(&lp_table[minor]);
551
if ((lp_table[minor].dev->port->modes & PARPORT_MODE_ECP) &&
552
!parport_negotiate(lp_table[minor].dev->port,
553
IEEE1284_MODE_ECP)) {
554
printk(KERN_INFO "lp%d: ECP mode\n", minor);
555
lp_table[minor].best_mode = IEEE1284_MODE_ECP;
556
} else {
557
lp_table[minor].best_mode = IEEE1284_MODE_COMPAT;
558
}
559
/* Leave peripheral in compatibility mode */
560
parport_negotiate(lp_table[minor].dev->port, IEEE1284_MODE_COMPAT);
561
lp_release_parport(&lp_table[minor]);
562
lp_table[minor].current_mode = IEEE1284_MODE_COMPAT;
563
out:
564
mutex_unlock(&lp_mutex);
565
return ret;
566
}
567
568
static int lp_release(struct inode *inode, struct file *file)
569
{
570
unsigned int minor = iminor(inode);
571
572
lp_claim_parport_or_block(&lp_table[minor]);
573
parport_negotiate(lp_table[minor].dev->port, IEEE1284_MODE_COMPAT);
574
lp_table[minor].current_mode = IEEE1284_MODE_COMPAT;
575
lp_release_parport(&lp_table[minor]);
576
kfree(lp_table[minor].lp_buffer);
577
lp_table[minor].lp_buffer = NULL;
578
LP_F(minor) &= ~LP_BUSY;
579
return 0;
580
}
581
582
static int lp_do_ioctl(unsigned int minor, unsigned int cmd,
583
unsigned long arg, void __user *argp)
584
{
585
int status;
586
int retval = 0;
587
588
#ifdef LP_DEBUG
589
printk(KERN_DEBUG "lp%d ioctl, cmd: 0x%x, arg: 0x%lx\n", minor, cmd, arg);
590
#endif
591
if (minor >= LP_NO)
592
return -ENODEV;
593
if ((LP_F(minor) & LP_EXIST) == 0)
594
return -ENODEV;
595
switch (cmd) {
596
case LPTIME:
597
if (arg > UINT_MAX / HZ)
598
return -EINVAL;
599
LP_TIME(minor) = arg * HZ/100;
600
break;
601
case LPCHAR:
602
LP_CHAR(minor) = arg;
603
break;
604
case LPABORT:
605
if (arg)
606
LP_F(minor) |= LP_ABORT;
607
else
608
LP_F(minor) &= ~LP_ABORT;
609
break;
610
case LPABORTOPEN:
611
if (arg)
612
LP_F(minor) |= LP_ABORTOPEN;
613
else
614
LP_F(minor) &= ~LP_ABORTOPEN;
615
break;
616
case LPCAREFUL:
617
if (arg)
618
LP_F(minor) |= LP_CAREFUL;
619
else
620
LP_F(minor) &= ~LP_CAREFUL;
621
break;
622
case LPWAIT:
623
LP_WAIT(minor) = arg;
624
break;
625
case LPSETIRQ:
626
return -EINVAL;
627
case LPGETIRQ:
628
if (copy_to_user(argp, &LP_IRQ(minor),
629
sizeof(int)))
630
return -EFAULT;
631
break;
632
case LPGETSTATUS:
633
if (mutex_lock_interruptible(&lp_table[minor].port_mutex))
634
return -EINTR;
635
lp_claim_parport_or_block(&lp_table[minor]);
636
status = r_str(minor);
637
lp_release_parport(&lp_table[minor]);
638
mutex_unlock(&lp_table[minor].port_mutex);
639
640
if (copy_to_user(argp, &status, sizeof(int)))
641
return -EFAULT;
642
break;
643
case LPRESET:
644
lp_reset(minor);
645
break;
646
#ifdef LP_STATS
647
case LPGETSTATS:
648
if (copy_to_user(argp, &LP_STAT(minor),
649
sizeof(struct lp_stats)))
650
return -EFAULT;
651
if (capable(CAP_SYS_ADMIN))
652
memset(&LP_STAT(minor), 0,
653
sizeof(struct lp_stats));
654
break;
655
#endif
656
case LPGETFLAGS:
657
status = LP_F(minor);
658
if (copy_to_user(argp, &status, sizeof(int)))
659
return -EFAULT;
660
break;
661
662
default:
663
retval = -EINVAL;
664
}
665
return retval;
666
}
667
668
static int lp_set_timeout(unsigned int minor, s64 tv_sec, long tv_usec)
669
{
670
long to_jiffies;
671
672
/* Convert to jiffies, place in lp_table */
673
if (tv_sec < 0 || tv_usec < 0)
674
return -EINVAL;
675
676
/*
677
* we used to not check, so let's not make this fatal,
678
* but deal with user space passing a 32-bit tv_nsec in
679
* a 64-bit field, capping the timeout to 1 second
680
* worth of microseconds, and capping the total at
681
* MAX_JIFFY_OFFSET.
682
*/
683
if (tv_usec > 999999)
684
tv_usec = 999999;
685
686
if (tv_sec >= MAX_SEC_IN_JIFFIES - 1) {
687
to_jiffies = MAX_JIFFY_OFFSET;
688
} else {
689
to_jiffies = DIV_ROUND_UP(tv_usec, 1000000/HZ);
690
to_jiffies += tv_sec * (long) HZ;
691
}
692
693
if (to_jiffies <= 0) {
694
return -EINVAL;
695
}
696
lp_table[minor].timeout = to_jiffies;
697
return 0;
698
}
699
700
static int lp_set_timeout32(unsigned int minor, void __user *arg)
701
{
702
s32 karg[2];
703
704
if (copy_from_user(karg, arg, sizeof(karg)))
705
return -EFAULT;
706
707
return lp_set_timeout(minor, karg[0], karg[1]);
708
}
709
710
static int lp_set_timeout64(unsigned int minor, void __user *arg)
711
{
712
s64 karg[2];
713
714
if (copy_from_user(karg, arg, sizeof(karg)))
715
return -EFAULT;
716
717
/* sparc64 suseconds_t is 32-bit only */
718
if (IS_ENABLED(CONFIG_SPARC64) && !in_compat_syscall())
719
karg[1] >>= 32;
720
721
return lp_set_timeout(minor, karg[0], karg[1]);
722
}
723
724
static long lp_ioctl(struct file *file, unsigned int cmd,
725
unsigned long arg)
726
{
727
unsigned int minor;
728
int ret;
729
730
minor = iminor(file_inode(file));
731
mutex_lock(&lp_mutex);
732
switch (cmd) {
733
case LPSETTIMEOUT_OLD:
734
if (BITS_PER_LONG == 32) {
735
ret = lp_set_timeout32(minor, (void __user *)arg);
736
break;
737
}
738
fallthrough; /* for 64-bit */
739
case LPSETTIMEOUT_NEW:
740
ret = lp_set_timeout64(minor, (void __user *)arg);
741
break;
742
default:
743
ret = lp_do_ioctl(minor, cmd, arg, (void __user *)arg);
744
break;
745
}
746
mutex_unlock(&lp_mutex);
747
748
return ret;
749
}
750
751
#ifdef CONFIG_COMPAT
752
static long lp_compat_ioctl(struct file *file, unsigned int cmd,
753
unsigned long arg)
754
{
755
unsigned int minor;
756
int ret;
757
758
minor = iminor(file_inode(file));
759
mutex_lock(&lp_mutex);
760
switch (cmd) {
761
case LPSETTIMEOUT_OLD:
762
if (!COMPAT_USE_64BIT_TIME) {
763
ret = lp_set_timeout32(minor, (void __user *)arg);
764
break;
765
}
766
fallthrough; /* for x32 mode */
767
case LPSETTIMEOUT_NEW:
768
ret = lp_set_timeout64(minor, (void __user *)arg);
769
break;
770
#ifdef LP_STATS
771
case LPGETSTATS:
772
/* FIXME: add an implementation if you set LP_STATS */
773
ret = -EINVAL;
774
break;
775
#endif
776
default:
777
ret = lp_do_ioctl(minor, cmd, arg, compat_ptr(arg));
778
break;
779
}
780
mutex_unlock(&lp_mutex);
781
782
return ret;
783
}
784
#endif
785
786
static const struct file_operations lp_fops = {
787
.owner = THIS_MODULE,
788
.write = lp_write,
789
.unlocked_ioctl = lp_ioctl,
790
#ifdef CONFIG_COMPAT
791
.compat_ioctl = lp_compat_ioctl,
792
#endif
793
.open = lp_open,
794
.release = lp_release,
795
#ifdef CONFIG_PARPORT_1284
796
.read = lp_read,
797
#endif
798
.llseek = noop_llseek,
799
};
800
801
/* --- support for console on the line printer ----------------- */
802
803
#ifdef CONFIG_LP_CONSOLE
804
805
#define CONSOLE_LP 0
806
807
/* If the printer is out of paper, we can either lose the messages or
808
* stall until the printer is happy again. Define CONSOLE_LP_STRICT
809
* non-zero to get the latter behaviour. */
810
#define CONSOLE_LP_STRICT 1
811
812
/* The console must be locked when we get here. */
813
814
static void lp_console_write(struct console *co, const char *s,
815
unsigned count)
816
{
817
struct pardevice *dev = lp_table[CONSOLE_LP].dev;
818
struct parport *port = dev->port;
819
ssize_t written;
820
821
if (parport_claim(dev))
822
/* Nothing we can do. */
823
return;
824
825
parport_set_timeout(dev, 0);
826
827
/* Go to compatibility mode. */
828
parport_negotiate(port, IEEE1284_MODE_COMPAT);
829
830
do {
831
/* Write the data, converting LF->CRLF as we go. */
832
ssize_t canwrite = count;
833
char *lf = memchr(s, '\n', count);
834
if (lf)
835
canwrite = lf - s;
836
837
if (canwrite > 0) {
838
written = parport_write(port, s, canwrite);
839
840
if (written <= 0)
841
continue;
842
843
s += written;
844
count -= written;
845
canwrite -= written;
846
}
847
848
if (lf && canwrite <= 0) {
849
const char *crlf = "\r\n";
850
int i = 2;
851
852
/* Dodge the original '\n', and put '\r\n' instead. */
853
s++;
854
count--;
855
do {
856
written = parport_write(port, crlf, i);
857
if (written > 0) {
858
i -= written;
859
crlf += written;
860
}
861
} while (i > 0 && (CONSOLE_LP_STRICT || written > 0));
862
}
863
} while (count > 0 && (CONSOLE_LP_STRICT || written > 0));
864
865
parport_release(dev);
866
}
867
868
static struct console lpcons = {
869
.name = "lp",
870
.write = lp_console_write,
871
.flags = CON_PRINTBUFFER,
872
};
873
874
#endif /* console on line printer */
875
876
/* --- initialisation code ------------------------------------- */
877
878
static int parport_nr[LP_NO] = { [0 ... LP_NO-1] = LP_PARPORT_UNSPEC };
879
static char *parport[LP_NO];
880
static bool reset;
881
882
module_param_array(parport, charp, NULL, 0);
883
module_param(reset, bool, 0);
884
885
#ifndef MODULE
886
static int __init lp_setup(char *str)
887
{
888
static int parport_ptr;
889
int x;
890
891
if (get_option(&str, &x)) {
892
if (x == 0) {
893
/* disable driver on "lp=" or "lp=0" */
894
parport_nr[0] = LP_PARPORT_OFF;
895
} else {
896
printk(KERN_WARNING "warning: 'lp=0x%x' is deprecated, ignored\n", x);
897
return 0;
898
}
899
} else if (!strncmp(str, "parport", 7)) {
900
int n = simple_strtoul(str+7, NULL, 10);
901
if (parport_ptr < LP_NO)
902
parport_nr[parport_ptr++] = n;
903
else
904
printk(KERN_INFO "lp: too many ports, %s ignored.\n",
905
str);
906
} else if (!strcmp(str, "auto")) {
907
parport_nr[0] = LP_PARPORT_AUTO;
908
} else if (!strcmp(str, "none")) {
909
if (parport_ptr < LP_NO)
910
parport_nr[parport_ptr++] = LP_PARPORT_NONE;
911
else
912
printk(KERN_INFO "lp: too many ports, %s ignored.\n",
913
str);
914
} else if (!strcmp(str, "reset")) {
915
reset = true;
916
}
917
return 1;
918
}
919
#endif
920
921
static int lp_register(int nr, struct parport *port)
922
{
923
struct pardev_cb ppdev_cb;
924
925
memset(&ppdev_cb, 0, sizeof(ppdev_cb));
926
ppdev_cb.preempt = lp_preempt;
927
ppdev_cb.private = &lp_table[nr];
928
lp_table[nr].dev = parport_register_dev_model(port, "lp",
929
&ppdev_cb, nr);
930
if (lp_table[nr].dev == NULL)
931
return 1;
932
lp_table[nr].flags |= LP_EXIST;
933
934
if (reset)
935
lp_reset(nr);
936
937
device_create(&lp_class, port->dev, MKDEV(LP_MAJOR, nr), NULL,
938
"lp%d", nr);
939
940
printk(KERN_INFO "lp%d: using %s (%s).\n", nr, port->name,
941
(port->irq == PARPORT_IRQ_NONE)?"polling":"interrupt-driven");
942
943
#ifdef CONFIG_LP_CONSOLE
944
if (!nr) {
945
if (port->modes & PARPORT_MODE_SAFEININT) {
946
register_console(&lpcons);
947
console_registered = port;
948
printk(KERN_INFO "lp%d: console ready\n", CONSOLE_LP);
949
} else
950
printk(KERN_ERR "lp%d: cannot run console on %s\n",
951
CONSOLE_LP, port->name);
952
}
953
#endif
954
port_num[nr] = port->number;
955
956
return 0;
957
}
958
959
static void lp_attach(struct parport *port)
960
{
961
unsigned int i;
962
963
switch (parport_nr[0]) {
964
case LP_PARPORT_UNSPEC:
965
case LP_PARPORT_AUTO:
966
if (parport_nr[0] == LP_PARPORT_AUTO &&
967
port->probe_info[0].class != PARPORT_CLASS_PRINTER)
968
return;
969
if (lp_count == LP_NO) {
970
printk(KERN_INFO "lp: ignoring parallel port (max. %d)\n",LP_NO);
971
return;
972
}
973
for (i = 0; i < LP_NO; i++)
974
if (port_num[i] == -1)
975
break;
976
977
if (!lp_register(i, port))
978
lp_count++;
979
break;
980
981
default:
982
for (i = 0; i < LP_NO; i++) {
983
if (port->number == parport_nr[i]) {
984
if (!lp_register(i, port))
985
lp_count++;
986
break;
987
}
988
}
989
break;
990
}
991
}
992
993
static void lp_detach(struct parport *port)
994
{
995
int n;
996
997
/* Write this some day. */
998
#ifdef CONFIG_LP_CONSOLE
999
if (console_registered == port) {
1000
unregister_console(&lpcons);
1001
console_registered = NULL;
1002
}
1003
#endif /* CONFIG_LP_CONSOLE */
1004
1005
for (n = 0; n < LP_NO; n++) {
1006
if (port_num[n] == port->number) {
1007
port_num[n] = -1;
1008
lp_count--;
1009
device_destroy(&lp_class, MKDEV(LP_MAJOR, n));
1010
parport_unregister_device(lp_table[n].dev);
1011
}
1012
}
1013
}
1014
1015
static struct parport_driver lp_driver = {
1016
.name = "lp",
1017
.match_port = lp_attach,
1018
.detach = lp_detach,
1019
};
1020
1021
static int __init lp_init(void)
1022
{
1023
int i, err;
1024
1025
if (parport_nr[0] == LP_PARPORT_OFF)
1026
return 0;
1027
1028
for (i = 0; i < LP_NO; i++) {
1029
lp_table[i].dev = NULL;
1030
lp_table[i].flags = 0;
1031
lp_table[i].chars = LP_INIT_CHAR;
1032
lp_table[i].time = LP_INIT_TIME;
1033
lp_table[i].wait = LP_INIT_WAIT;
1034
lp_table[i].lp_buffer = NULL;
1035
#ifdef LP_STATS
1036
lp_table[i].lastcall = 0;
1037
lp_table[i].runchars = 0;
1038
memset(&lp_table[i].stats, 0, sizeof(struct lp_stats));
1039
#endif
1040
lp_table[i].last_error = 0;
1041
init_waitqueue_head(&lp_table[i].waitq);
1042
init_waitqueue_head(&lp_table[i].dataq);
1043
mutex_init(&lp_table[i].port_mutex);
1044
lp_table[i].timeout = 10 * HZ;
1045
port_num[i] = -1;
1046
}
1047
1048
if (register_chrdev(LP_MAJOR, "lp", &lp_fops)) {
1049
printk(KERN_ERR "lp: unable to get major %d\n", LP_MAJOR);
1050
return -EIO;
1051
}
1052
1053
err = class_register(&lp_class);
1054
if (err)
1055
goto out_reg;
1056
1057
if (parport_register_driver(&lp_driver)) {
1058
printk(KERN_ERR "lp: unable to register with parport\n");
1059
err = -EIO;
1060
goto out_class;
1061
}
1062
1063
if (!lp_count) {
1064
printk(KERN_INFO "lp: driver loaded but no devices found\n");
1065
#ifndef CONFIG_PARPORT_1284
1066
if (parport_nr[0] == LP_PARPORT_AUTO)
1067
printk(KERN_INFO "lp: (is IEEE 1284 support enabled?)\n");
1068
#endif
1069
}
1070
1071
return 0;
1072
1073
out_class:
1074
class_unregister(&lp_class);
1075
out_reg:
1076
unregister_chrdev(LP_MAJOR, "lp");
1077
return err;
1078
}
1079
1080
static int __init lp_init_module(void)
1081
{
1082
if (parport[0]) {
1083
/* The user gave some parameters. Let's see what they were. */
1084
if (!strncmp(parport[0], "auto", 4))
1085
parport_nr[0] = LP_PARPORT_AUTO;
1086
else {
1087
int n;
1088
for (n = 0; n < LP_NO && parport[n]; n++) {
1089
if (!strncmp(parport[n], "none", 4))
1090
parport_nr[n] = LP_PARPORT_NONE;
1091
else {
1092
char *ep;
1093
unsigned long r = simple_strtoul(parport[n], &ep, 0);
1094
if (ep != parport[n])
1095
parport_nr[n] = r;
1096
else {
1097
printk(KERN_ERR "lp: bad port specifier `%s'\n", parport[n]);
1098
return -ENODEV;
1099
}
1100
}
1101
}
1102
}
1103
}
1104
1105
return lp_init();
1106
}
1107
1108
static void lp_cleanup_module(void)
1109
{
1110
parport_unregister_driver(&lp_driver);
1111
1112
#ifdef CONFIG_LP_CONSOLE
1113
unregister_console(&lpcons);
1114
#endif
1115
1116
unregister_chrdev(LP_MAJOR, "lp");
1117
class_unregister(&lp_class);
1118
}
1119
1120
__setup("lp=", lp_setup);
1121
module_init(lp_init_module);
1122
module_exit(lp_cleanup_module);
1123
1124
MODULE_ALIAS_CHARDEV_MAJOR(LP_MAJOR);
1125
MODULE_DESCRIPTION("Generic parallel printer driver");
1126
MODULE_LICENSE("GPL");
1127
1128