Lines Matching full:minor

207 static int lp_reset(int minor)  in lp_reset()  argument
210 lp_claim_parport_or_block(&lp_table[minor]); in lp_reset()
211 w_ctr(minor, LP_PSELECP); in lp_reset()
213 w_ctr(minor, LP_PSELECP | LP_PINITP); in lp_reset()
214 retval = r_str(minor); in lp_reset()
215 lp_release_parport(&lp_table[minor]); in lp_reset()
219 static void lp_error(int minor) in lp_error() argument
224 if (LP_F(minor) & LP_ABORT) in lp_error()
227 polling = lp_table[minor].dev->port->irq == PARPORT_IRQ_NONE; in lp_error()
229 lp_release_parport(&lp_table[minor]); in lp_error()
230 prepare_to_wait(&lp_table[minor].waitq, &wait, TASK_INTERRUPTIBLE); in lp_error()
232 finish_wait(&lp_table[minor].waitq, &wait); in lp_error()
234 lp_claim_parport_or_block(&lp_table[minor]); in lp_error()
236 parport_yield_blocking(lp_table[minor].dev); in lp_error()
239 static int lp_check_status(int minor) in lp_check_status() argument
242 unsigned int last = lp_table[minor].last_error; in lp_check_status()
243 unsigned char status = r_str(minor); in lp_check_status()
244 if ((status & LP_PERRORP) && !(LP_F(minor) & LP_CAREFUL)) in lp_check_status()
250 printk(KERN_INFO "lp%d out of paper\n", minor); in lp_check_status()
256 printk(KERN_INFO "lp%d off-line\n", minor); in lp_check_status()
262 printk(KERN_INFO "lp%d on fire\n", minor); in lp_check_status()
270 lp_table[minor].last_error = last; in lp_check_status()
273 lp_error(minor); in lp_check_status()
278 static int lp_wait_ready(int minor, int nonblock) in lp_wait_ready() argument
283 if (lp_table[minor].current_mode != IEEE1284_MODE_COMPAT) { in lp_wait_ready()
288 error = lp_check_status(minor); in lp_wait_ready()
289 if (error && (nonblock || (LP_F(minor) & LP_ABORT))) in lp_wait_ready()
302 unsigned int minor = iminor(file_inode(file)); in lp_write() local
303 struct parport *port = lp_table[minor].dev->port; in lp_write()
304 char *kbuf = lp_table[minor].lp_buffer; in lp_write()
309 (LP_F(minor) & LP_ABORT)); in lp_write()
312 if (time_after(jiffies, lp_table[minor].lastcall + LP_TIME(minor))) in lp_write()
313 lp_table[minor].runchars = 0; in lp_write()
315 lp_table[minor].lastcall = jiffies; in lp_write()
322 if (mutex_lock_interruptible(&lp_table[minor].port_mutex)) in lp_write()
332 lp_claim_parport_or_block(&lp_table[minor]); in lp_write()
334 lp_table[minor].current_mode = lp_negotiate(port, in lp_write()
335 lp_table[minor].best_mode); in lp_write()
337 parport_set_timeout(lp_table[minor].dev, in lp_write()
339 : lp_table[minor].timeout)); in lp_write()
341 if ((retv = lp_wait_ready(minor, nonblock)) == 0) in lp_write()
363 parport_negotiate(lp_table[minor].dev->port, in lp_write()
365 lp_table[minor].current_mode = IEEE1284_MODE_COMPAT; in lp_write()
367 error = lp_wait_ready(minor, nonblock); in lp_write()
379 parport_yield_blocking(lp_table[minor].dev); in lp_write()
380 lp_table[minor].current_mode in lp_write()
382 lp_table[minor].best_mode); in lp_write()
401 &lp_table[minor].bits)) { in lp_write()
402 printk(KERN_INFO "lp%d releasing parport\n", minor); in lp_write()
403 parport_negotiate(lp_table[minor].dev->port, in lp_write()
405 lp_table[minor].current_mode = IEEE1284_MODE_COMPAT; in lp_write()
406 lp_release_parport(&lp_table[minor]); in lp_write()
409 mutex_unlock(&lp_table[minor].port_mutex); in lp_write()
421 unsigned int minor=iminor(file_inode(file)); in lp_read() local
422 struct parport *port = lp_table[minor].dev->port; in lp_read()
424 char *kbuf = lp_table[minor].lp_buffer; in lp_read()
426 (LP_F(minor) & LP_ABORT)); in lp_read()
431 if (mutex_lock_interruptible(&lp_table[minor].port_mutex)) in lp_read()
434 lp_claim_parport_or_block(&lp_table[minor]); in lp_read()
436 parport_set_timeout(lp_table[minor].dev, in lp_read()
438 : lp_table[minor].timeout)); in lp_read()
440 parport_negotiate(lp_table[minor].dev->port, IEEE1284_MODE_COMPAT); in lp_read()
441 if (parport_negotiate(lp_table[minor].dev->port, in lp_read()
460 if (lp_table[minor].dev->port->irq == PARPORT_IRQ_NONE) { in lp_read()
461 parport_negotiate(lp_table[minor].dev->port, in lp_read()
463 lp_error(minor); in lp_read()
464 if (parport_negotiate(lp_table[minor].dev->port, in lp_read()
470 prepare_to_wait(&lp_table[minor].waitq, &wait, TASK_INTERRUPTIBLE); in lp_read()
472 finish_wait(&lp_table[minor].waitq, &wait); in lp_read()
482 parport_negotiate(lp_table[minor].dev->port, IEEE1284_MODE_COMPAT); in lp_read()
484 lp_release_parport(&lp_table[minor]); in lp_read()
489 mutex_unlock(&lp_table[minor].port_mutex); in lp_read()
498 unsigned int minor = iminor(inode); in lp_open() local
502 if (minor >= LP_NO) { in lp_open()
506 if ((LP_F(minor) & LP_EXIST) == 0) { in lp_open()
510 if (test_and_set_bit(LP_BUSY_BIT_POS, &LP_F(minor))) { in lp_open()
519 if ((LP_F(minor) & LP_ABORTOPEN) && !(file->f_flags & O_NONBLOCK)) { in lp_open()
521 lp_claim_parport_or_block(&lp_table[minor]); in lp_open()
522 status = r_str(minor); in lp_open()
523 lp_release_parport(&lp_table[minor]); in lp_open()
525 printk(KERN_INFO "lp%d out of paper\n", minor); in lp_open()
526 LP_F(minor) &= ~LP_BUSY; in lp_open()
530 printk(KERN_INFO "lp%d off-line\n", minor); in lp_open()
531 LP_F(minor) &= ~LP_BUSY; in lp_open()
535 printk(KERN_ERR "lp%d printer error\n", minor); in lp_open()
536 LP_F(minor) &= ~LP_BUSY; in lp_open()
541 lp_table[minor].lp_buffer = kmalloc(LP_BUFFER_SIZE, GFP_KERNEL); in lp_open()
542 if (!lp_table[minor].lp_buffer) { in lp_open()
543 LP_F(minor) &= ~LP_BUSY; in lp_open()
548 lp_claim_parport_or_block(&lp_table[minor]); in lp_open()
549 if ((lp_table[minor].dev->port->modes & PARPORT_MODE_ECP) && in lp_open()
550 !parport_negotiate(lp_table[minor].dev->port, in lp_open()
552 printk(KERN_INFO "lp%d: ECP mode\n", minor); in lp_open()
553 lp_table[minor].best_mode = IEEE1284_MODE_ECP; in lp_open()
555 lp_table[minor].best_mode = IEEE1284_MODE_COMPAT; in lp_open()
558 parport_negotiate(lp_table[minor].dev->port, IEEE1284_MODE_COMPAT); in lp_open()
559 lp_release_parport(&lp_table[minor]); in lp_open()
560 lp_table[minor].current_mode = IEEE1284_MODE_COMPAT; in lp_open()
568 unsigned int minor = iminor(inode); in lp_release() local
570 lp_claim_parport_or_block(&lp_table[minor]); in lp_release()
571 parport_negotiate(lp_table[minor].dev->port, IEEE1284_MODE_COMPAT); in lp_release()
572 lp_table[minor].current_mode = IEEE1284_MODE_COMPAT; in lp_release()
573 lp_release_parport(&lp_table[minor]); in lp_release()
574 kfree(lp_table[minor].lp_buffer); in lp_release()
575 lp_table[minor].lp_buffer = NULL; in lp_release()
576 LP_F(minor) &= ~LP_BUSY; in lp_release()
580 static int lp_do_ioctl(unsigned int minor, unsigned int cmd, in lp_do_ioctl() argument
587 printk(KERN_DEBUG "lp%d ioctl, cmd: 0x%x, arg: 0x%lx\n", minor, cmd, arg); in lp_do_ioctl()
589 if (minor >= LP_NO) in lp_do_ioctl()
591 if ((LP_F(minor) & LP_EXIST) == 0) in lp_do_ioctl()
597 LP_TIME(minor) = arg * HZ/100; in lp_do_ioctl()
600 LP_CHAR(minor) = arg; in lp_do_ioctl()
604 LP_F(minor) |= LP_ABORT; in lp_do_ioctl()
606 LP_F(minor) &= ~LP_ABORT; in lp_do_ioctl()
610 LP_F(minor) |= LP_ABORTOPEN; in lp_do_ioctl()
612 LP_F(minor) &= ~LP_ABORTOPEN; in lp_do_ioctl()
616 LP_F(minor) |= LP_CAREFUL; in lp_do_ioctl()
618 LP_F(minor) &= ~LP_CAREFUL; in lp_do_ioctl()
621 LP_WAIT(minor) = arg; in lp_do_ioctl()
626 if (copy_to_user(argp, &LP_IRQ(minor), in lp_do_ioctl()
631 if (mutex_lock_interruptible(&lp_table[minor].port_mutex)) in lp_do_ioctl()
633 lp_claim_parport_or_block(&lp_table[minor]); in lp_do_ioctl()
634 status = r_str(minor); in lp_do_ioctl()
635 lp_release_parport(&lp_table[minor]); in lp_do_ioctl()
636 mutex_unlock(&lp_table[minor].port_mutex); in lp_do_ioctl()
642 lp_reset(minor); in lp_do_ioctl()
646 if (copy_to_user(argp, &LP_STAT(minor), in lp_do_ioctl()
650 memset(&LP_STAT(minor), 0, in lp_do_ioctl()
655 status = LP_F(minor); in lp_do_ioctl()
666 static int lp_set_timeout(unsigned int minor, s64 tv_sec, long tv_usec) in lp_set_timeout() argument
694 lp_table[minor].timeout = to_jiffies; in lp_set_timeout()
698 static int lp_set_timeout32(unsigned int minor, void __user *arg) in lp_set_timeout32() argument
705 return lp_set_timeout(minor, karg[0], karg[1]); in lp_set_timeout32()
708 static int lp_set_timeout64(unsigned int minor, void __user *arg) in lp_set_timeout64() argument
719 return lp_set_timeout(minor, karg[0], karg[1]); in lp_set_timeout64()
725 unsigned int minor; in lp_ioctl() local
728 minor = iminor(file_inode(file)); in lp_ioctl()
733 ret = lp_set_timeout32(minor, (void __user *)arg); in lp_ioctl()
738 ret = lp_set_timeout64(minor, (void __user *)arg); in lp_ioctl()
741 ret = lp_do_ioctl(minor, cmd, arg, (void __user *)arg); in lp_ioctl()
753 unsigned int minor; in lp_compat_ioctl() local
756 minor = iminor(file_inode(file)); in lp_compat_ioctl()
761 ret = lp_set_timeout32(minor, (void __user *)arg); in lp_compat_ioctl()
766 ret = lp_set_timeout64(minor, (void __user *)arg); in lp_compat_ioctl()
775 ret = lp_do_ioctl(minor, cmd, arg, compat_ptr(arg)); in lp_compat_ioctl()