kernels/linux-2.4.0/drivers/s390/char/con3215.c
/*
 * The bottom half handler routine for 3215 devices. It tries to start
 * the next IO and wakes up processes waiting on the tty.
 */
The bottom half handler routine for 3215 devices. It tries to start
the next IO and wakes up processes waiting on the tty.
The bottom half handler routine for 3215 devices . It tries to start the next IO and wakes up processes waiting on the tty .
static void raw3215_softint(void *data)
{
	raw3215_info *raw;
	struct tty_struct *tty;
	unsigned long flags;
	raw = (raw3215_info *) data;
	s390irq_spin_lock_irqsave(raw->irq, flags);
	raw3215_try_io((raw3215_info *) data);
        raw->flags &= ~RAW3215_BH_PENDING;
	s390irq_spin_unlock_irqrestore(raw->irq, flags);
	if (raw->message != NULL) {
		printk(raw->message, raw->irq, raw->msg_dstat, raw->msg_cstat);
		raw->message = NULL;
	}
	tty = raw->tty;
	if (tty != NULL &&
	    RAW3215_BUFFER_SIZE - raw->count >= RAW3215_MIN_SPACE) {
		if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
		    tty->ldisc.write_wakeup)
			(tty->ldisc.write_wakeup)(tty);
		wake_up_interruptible(&tty->write_wait);
	}
}
static void raw3215_softint ( void * data ) { raw3215_info * raw ; struct tty_struct * tty ; unsigned long flags ; raw = ( raw3215_info * ) data ; s390irq_spin_lock_irqsave ( raw -> irq , flags ) ; raw3215_try_io ( ( raw3215_info * ) data ) ; raw -> flags &= ~ RAW3215_BH_PENDING ; s390irq_spin_unlock_irqrestore ( raw -> irq , flags ) ; if ( raw -> message != NULL ) { printk ( raw -> message , raw -> irq , raw -> msg_dstat , raw -> msg_cstat ) ; raw -> message = NULL ; } tty = raw -> tty ; if ( tty != NULL && RAW3215_BUFFER_SIZE - raw -> count >= RAW3215_MIN_SPACE ) { if ( ( tty -> flags & ( 1 << TTY_DO_WRITE_WAKEUP ) ) && tty -> ldisc . write_wakeup ) ( tty -> ldisc . write_wakeup ) ( tty ) ; wake_up_interruptible ( & tty -> write_wait ) ; } }
The bottom half handler routine for 3215 devices.
The bottom half handler routine for 3215 devices .
/* Check for pending message from raw3215_irq */