SCCS-vsn: sys/vax/vax/cons.c 3.2
/*
* Vax console driver and floppy interface
/*
* Vax console driver and floppy interface
tp->t_state = ISOPEN|CARR_ON;
tp->t_flags = EVENP|ECHO|XTABS|CRMOD;
}
tp->t_state = ISOPEN|CARR_ON;
tp->t_flags = EVENP|ECHO|XTABS|CRMOD;
}
+ if (tp->t_state&XCLUDE && u.u_uid != 0) {
+ u.u_error = EBUSY;
+ return;
+ }
mtpr(RXCS, mfpr(RXCS)|RXCS_IE);
mtpr(TXCS, mfpr(TXCS)|TXCS_IE);
mtpr(RXCS, mfpr(RXCS)|RXCS_IE);
mtpr(TXCS, mfpr(TXCS)|TXCS_IE);
+ (*linesw[tp->t_line].l_open)(dev, tp);
register struct tty *tp;
tp = &cons;
register struct tty *tp;
tp = &cons;
- wflushtty(tp);
- tp->t_state = 0;
+ (*linesw[tp->t_line].l_close)(tp);
+ ttyclose(tp);
}
/*ARGSUSED*/
cnread(dev)
dev_t dev;
{
}
/*ARGSUSED*/
cnread(dev)
dev_t dev;
{
+ register struct tty *tp;
+ tp = &cons;
+ (*linesw[tp->t_line].l_read)(tp);
}
/*ARGSUSED*/
cnwrite(dev)
dev_t dev;
}
/*ARGSUSED*/
cnwrite(dev)
dev_t dev;
-{
-
- ttwrite(&cons);
-}
-
-/*
- * Got a level-20 transmission interrupt -
- * the LSI wants another character. First,
- * see if we can send something to the typewriter.
- * If not, try the floppy.
- */
-/*ARGSUSED*/
-cnxint(dev)
-dev_t dev;
-{
-
- if (cnxtty() == 0)
- conxfl();
-}
-
-/*
- * Formerly cnxint -
- * called by new cnxint to see if there are
- * any characters to write to the console, and,
- * if there are, to do it.
- */
-cnxtty()
{
register struct tty *tp;
tp = &cons;
{
register struct tty *tp;
tp = &cons;
- if (tp->t_outq.c_cc == 0)
- return(0);
- ttstart(tp);
- if (tp->t_outq.c_cc == 0 || tp->t_outq.c_cc == TTLOWAT)
- wakeup((caddr_t)&tp->t_outq);
- return(1);
+ (*linesw[tp->t_line].l_write)(tp);
dev_t dev;
{
register int c;
dev_t dev;
{
register int c;
+ register struct tty *tp;
- if ((c&RXDB_ID)==0) /* look at source byte */
- ttyinput(c, &cons); /* character from typewriter */
- else
- cnrfl(c); /* character from floppy */
+ if (c&RXDB_ID) {
+ cnrfl(c);
+ return;
+ }
+ tp = &cons;
+ (*linesw[tp->t_line].l_rint)(c, tp);
register struct tty *tp;
tp = &cons;
register struct tty *tp;
tp = &cons;
- if (ttioccom(cmd, tp, addr, dev) ==0)
+ cmd = (*linesw[tp->t_line].l_ioctl)(tp, cmd, addr);
+ if (cmd == 0)
+ return;
+ if (ttioccom(cmd, tp, addr, dev) == 0)
+/*
+ * Got a level-20 transmission interrupt -
+ * the LSI wants another character. First,
+ * see if we can send something to the typewriter.
+ * If not, try the floppy.
+ */
+/*ARGSUSED*/
+cnxint(dev)
+dev_t dev;
+{
+ register struct tty *tp;
+
+ tp = &cons;
+ tp->t_state &= ~BUSY;
+ if (tp->t_line)
+ (*linesw[tp->t_line].l_start)(tp);
+ else
+ cnstart(tp);
+ if ((tp->t_state & BUSY) == 0)
+ conxfl();
+}
+
cnstart(tp)
register struct tty *tp;
{
register c;
cnstart(tp)
register struct tty *tp;
{
register c;
+ register s;
+
+ s = spl5();
+ if (tp->t_state & (TIMEOUT|BUSY|TTSTOP))
+ goto out;
+ if (tp->t_outq.c_cc <= TTLOWAT && tp->t_state&ASLEEP) {
+ tp->t_state &= ~ASLEEP;
+ if (tp->t_chan)
+ mcstart(tp->t_char, (caddr_t)&tp->t_outq);
+ else
+ wakeup((caddr_t)&tp->t_outq);
+ }
+ if (tp->t_outq.c_cc == 0)
+ goto out;
if ((mfpr(TXCS)&TXCS_RDY) == 0)
return;
if ((c=getc(&tp->t_outq)) >= 0) {
if ((mfpr(TXCS)&TXCS_RDY) == 0)
return;
if ((c=getc(&tp->t_outq)) >= 0) {
else {
timeout(ttrstrt, (caddr_t)tp, (c&0177));
tp->t_state |= TIMEOUT;
else {
timeout(ttrstrt, (caddr_t)tp, (c&0177));
tp->t_state |= TIMEOUT;
+ tp->t_state |= BUSY;
+ out:
+ splx(s);
}
char *msgbufp = msgbuf; /* Next saved printf character */
}
char *msgbufp = msgbuf; /* Next saved printf character */