Deleted Added
full compact
28c28
< __FBSDID("$FreeBSD: head/sys/dev/cfe/cfe_console.c 183374 2008-09-26 05:10:57Z imp $");
---
> __FBSDID("$FreeBSD: head/sys/dev/cfe/cfe_console.c 183376 2008-09-26 05:37:54Z imp $");
53,54c53,55
< static d_open_t cfe_dev_open;
< static d_close_t cfe_dev_close;
---
> static tsw_open_t cfe_tty_open;
> static tsw_close_t cfe_tty_close;
> static tsw_outwakeup_t cfe_tty_outwakeup;
56,61c57,61
< static struct cdevsw cfe_cdevsw = {
< .d_version = D_VERSION,
< .d_open = cfe_dev_open,
< .d_close = cfe_dev_close,
< .d_name = "cfe",
< .d_flags = D_TTY | D_NEEDGIANT,
---
> static struct ttydevsw cfe_ttydevsw = {
> .tsw_flags = TF_NOPREFIX,
> .tsw_open = cfe_tty_open,
> .tsw_close = cfe_tty_close,
> .tsw_outwakeup = cfe_tty_outwakeup,
75,77d74
< static void cfe_tty_start(struct tty *);
< static int cfe_tty_param(struct tty *, struct termios *);
< static void cfe_tty_stop(struct tty *, int);
92c89
< struct cdev *dev;
---
> struct tty *tp;
96,98c93,95
< dev = make_dev(&cfe_cdevsw, 0, UID_ROOT, GID_WHEEL, 0600, "%s",
< output);
< make_dev_alias(dev, "cfecons");
---
> tp = tty_alloc(&cfe_ttydevsw, NULL, NULL);
> tty_makedev(tp, NULL, "%s", output);
> tty_makealias(tp, "cfecons");
103c100
< cfe_dev_open(struct cdev *dev, int flag, int mode, struct thread *td)
---
> cfe_tty_open(struct tty *tp)
105,107c102,105
< struct tty *tp;
< int unit;
< int error, setuptimeout;
---
> polltime = hz / CFECONS_POLL_HZ;
> if (polltime < 1)
> polltime = 1;
> cfe_timeouthandle = timeout(cfe_timeout, tp, polltime);
109,149c107
< error = 0;
< setuptimeout = 0;
< unit = minor(dev);
<
< /*
< * XXX: BAD, should happen at attach time
< */
< if (dev->si_tty == NULL) {
< cfe_tp = ttyalloc();
< dev->si_tty = cfe_tp;
< cfe_tp->t_dev = dev;
< }
< tp = dev->si_tty;
<
< tp->t_oproc = cfe_tty_start;
< tp->t_param = cfe_tty_param;
< tp->t_stop = cfe_tty_stop;
< tp->t_dev = dev;
<
< if ((tp->t_state & TS_ISOPEN) == 0) {
< tp->t_state |= TS_CARR_ON;
< ttyconsolemode(tp, 0);
<
< setuptimeout = 1;
< } else if ((tp->t_state & TS_XCLUDE) &&
< priv_check(td, PRIV_TTY_EXCLUSIVE)) {
< return (EBUSY);
< }
<
< error = ttyld_open(tp, dev);
<
< if (error == 0 && setuptimeout) {
< polltime = hz / CFECONS_POLL_HZ;
< if (polltime < 1) {
< polltime = 1;
< }
<
< cfe_timeouthandle = timeout(cfe_timeout, tp, polltime);
< }
<
< return (error);
---
> return (0);
152,153c110,111
< static int
< cfe_dev_close(struct cdev *dev, int flag, int mode, struct thread *td)
---
> static void
> cfe_tty_close(struct tty *tp)
155,156d112
< int unit;
< struct tty *tp;
158,164d113
< unit = minor(dev);
< tp = dev->si_tty;
<
< if (unit != 0) {
< return (ENXIO);
< }
<
167,170d115
< ttyld_close(tp, flag);
< tty_close(tp);
<
< return (0);
173,180d117
<
< static int
< cfe_tty_param(struct tty *tp, struct termios *t)
< {
<
< return (0);
< }
<
182c119
< cfe_tty_start(struct tty *tp)
---
> cfe_tty_outwakeup(struct tty *tp)
184d120
< struct clist *cl;
188,208c124,129
< if (tp->t_state & (TS_TIMEOUT | TS_BUSY | TS_TTSTOP))
< return;
<
< tp->t_state |= TS_BUSY;
< cl = &tp->t_outq;
< len = q_to_b(cl, buf, CFEBURSTLEN);
< while (cfe_write(conhandle, buf, len) == 0)
< ;
< tp->t_state &= ~TS_BUSY;
<
< ttwwakeup(tp);
< }
<
< static void
< cfe_tty_stop(struct tty *tp, int flag)
< {
<
< if (tp->t_state & TS_BUSY) {
< if ((tp->t_state & TS_TTSTOP) == 0) {
< tp->t_state |= TS_FLUSH;
< }
---
> for (;;) {
> len = ttydisc_getc(tp, buf, sizeof buf);
> if (len == 0)
> break;
> while (cfe_write(conhandle, buf, len) == 0)
> ;
220,224c141,145
< while ((c = cfe_cngetc(NULL)) != -1) {
< if (tp->t_state & TS_ISOPEN) {
< ttyld_rint(tp, c);
< }
< }
---
> tty_lock(tp);
> while ((c = cfe_cngetc(NULL)) != -1)
> ttydisc_rint(tp, c, 0);
> ttydisc_rint_done(tp);
> tty_unlock(tp);
276,277c197,213
< if (kdb_alt_break(ch, &alt_break_state))
< kdb_enter(KDB_WHY_BREAK, "Break sequence on console");
---
> int kdb_brk;
>
> if ((kdb_brk = kdb_alt_break(ch, &alt_break_state)) != 0) {
> switch (kdb_brk) {
> case KDB_REQ_DEBUGGER:
> kdb_enter(KDB_WHY_BREAK,
> "Break sequence on console");
> break;
> case KDB_REQ_PANIC:
> kdb_panic("Panic sequence on console");
> break;
> case KDB_REQ_REBOOT:
> kdb_reboot();
> break;
>
> }
> }
298c234
< SYSINIT(cndev, SI_SUB_CONFIGURE, SI_ORDER_MIDDLE, cn_drvinit, NULL)
---
> SYSINIT(cndev, SI_SUB_CONFIGURE, SI_ORDER_MIDDLE, cn_drvinit, NULL);