Misc KNF.
This commit is contained in:
parent
2bf24bf180
commit
27da4103be
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: dz_ebus.c,v 1.2 2011/04/24 16:26:55 rmind Exp $ */
|
||||
/* $NetBSD: dz_ebus.c,v 1.3 2011/06/12 05:06:23 tsutsui Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2010 The NetBSD Foundation, Inc.
|
||||
|
@ -31,7 +31,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
__KERNEL_RCSID(0, "$NetBSD: dz_ebus.c,v 1.2 2011/04/24 16:26:55 rmind Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: dz_ebus.c,v 1.3 2011/06/12 05:06:23 tsutsui Exp $");
|
||||
|
||||
#include "opt_ddb.h"
|
||||
|
||||
|
@ -58,13 +58,15 @@ __KERNEL_RCSID(0, "$NetBSD: dz_ebus.c,v 1.2 2011/04/24 16:26:55 rmind Exp $");
|
|||
|
||||
#include <emips/ebus/ebusvar.h>
|
||||
#include <emips/emips/cons.h>
|
||||
//#include <emips/emips/machdep.h>
|
||||
#if 0
|
||||
#include <emips/emips/machdep.h>
|
||||
#endif
|
||||
|
||||
#include "ioconf.h" /* for dz_cd */
|
||||
|
||||
#define DZ_C2I(c) ((c)<<3) /* convert controller # to index */
|
||||
#define DZ_I2C(c) ((c)>>3) /* convert minor to controller # */
|
||||
#define DZ_PORT(u) ((u)&07) /* extract the port # */
|
||||
#define DZ_C2I(c) ((c) << 3) /* convert controller # to index */
|
||||
#define DZ_I2C(c) ((c) >> 3) /* convert minor to controller # */
|
||||
#define DZ_PORT(u) ((u) & 07) /* extract the port # */
|
||||
|
||||
struct dz_softc {
|
||||
struct device sc_dev; /* Autoconf blaha */
|
||||
|
@ -80,7 +82,7 @@ struct dz_softc {
|
|||
struct dz_linestate {
|
||||
struct dz_softc *dz_sc; /* backpointer to softc */
|
||||
int dz_line; /* channel number */
|
||||
struct tty * dz_tty; /* what we work on */
|
||||
struct tty *dz_tty; /* what we work on */
|
||||
} sc_dz;
|
||||
};
|
||||
|
||||
|
@ -118,7 +120,7 @@ dzopen(dev_t dev, int flag, int mode, struct lwp *l)
|
|||
{
|
||||
struct tty *tp;
|
||||
int unit, line;
|
||||
struct dz_softc *sc;
|
||||
struct dz_softc *sc;
|
||||
int s, error = 0;
|
||||
|
||||
unit = DZ_I2C(minor(dev));
|
||||
|
@ -133,10 +135,10 @@ dzopen(dev_t dev, int flag, int mode, struct lwp *l)
|
|||
|
||||
tp = sc->sc_dz.dz_tty;
|
||||
if (tp == NULL)
|
||||
return (ENODEV);
|
||||
tp->t_oproc = dzstart;
|
||||
tp->t_param = dzparam;
|
||||
tp->t_dev = dev;
|
||||
return ENODEV;
|
||||
tp->t_oproc = dzstart;
|
||||
tp->t_param = dzparam;
|
||||
tp->t_dev = dev;
|
||||
|
||||
if (kauth_authorize_device_tty(l->l_cred, KAUTH_DEVICE_TTY_OPEN, tp))
|
||||
return (EBUSY);
|
||||
|
@ -150,34 +152,34 @@ dzopen(dev_t dev, int flag, int mode, struct lwp *l)
|
|||
tp->t_lflag = TTYDEF_LFLAG;
|
||||
tp->t_ispeed = tp->t_ospeed = TTYDEF_SPEED;
|
||||
}
|
||||
(void) dzparam(tp, &tp->t_termios);
|
||||
(void)dzparam(tp, &tp->t_termios);
|
||||
ttsetwater(tp);
|
||||
}
|
||||
/* we have no modem control but..*/
|
||||
/* we have no modem control but..*/
|
||||
if (dzmctl(sc, line, TIOCM_DTR, DMBIS) & TIOCM_CD)
|
||||
tp->t_state |= TS_CARR_ON;
|
||||
s = spltty();
|
||||
while (!(flag & O_NONBLOCK) && !(tp->t_cflag & CLOCAL) &&
|
||||
!(tp->t_state & TS_CARR_ON)) {
|
||||
tp->t_wopen++;
|
||||
error = ttysleep(tp, &tp->t_rawcv, true, 0);
|
||||
tp->t_wopen--;
|
||||
if (error)
|
||||
break;
|
||||
}
|
||||
(void) splx(s);
|
||||
tp->t_state |= TS_CARR_ON;
|
||||
s = spltty();
|
||||
while (!(flag & O_NONBLOCK) && !(tp->t_cflag & CLOCAL) &&
|
||||
!(tp->t_state & TS_CARR_ON)) {
|
||||
tp->t_wopen++;
|
||||
error = ttysleep(tp, &tp->t_rawcv, true, 0);
|
||||
tp->t_wopen--;
|
||||
if (error)
|
||||
break;
|
||||
}
|
||||
(void)splx(s);
|
||||
if (error)
|
||||
return (error);
|
||||
return ((*tp->t_linesw->l_open)(dev, tp));
|
||||
return error;
|
||||
return (*tp->t_linesw->l_open)(dev, tp);
|
||||
}
|
||||
|
||||
int
|
||||
dzclose(dev_t dev, int flag, int mode, struct lwp *l)
|
||||
{
|
||||
struct dz_softc *sc;
|
||||
struct dz_softc *sc;
|
||||
struct tty *tp;
|
||||
int unit, line;
|
||||
|
||||
|
||||
unit = DZ_I2C(minor(dev));
|
||||
line = DZ_PORT(minor(dev));
|
||||
sc = (void *)dz_cd.cd_devs[unit];
|
||||
|
@ -187,36 +189,37 @@ dzclose(dev_t dev, int flag, int mode, struct lwp *l)
|
|||
(*tp->t_linesw->l_close)(tp, flag);
|
||||
|
||||
/* Make sure a BREAK state is not left enabled. */
|
||||
(void) dzmctl(sc, line, TIOCM_BRK, DMBIC);
|
||||
(void)dzmctl(sc, line, TIOCM_BRK, DMBIC);
|
||||
|
||||
/* Do a hangup if so required. */
|
||||
if ((tp->t_cflag & HUPCL) || tp->t_wopen || !(tp->t_state & TS_ISOPEN))
|
||||
(void) dzmctl(sc, line, 0, DMSET);
|
||||
|
||||
return (ttyclose(tp));
|
||||
return ttyclose(tp);
|
||||
}
|
||||
|
||||
int
|
||||
dzread(dev_t dev, struct uio *uio, int flag)
|
||||
{
|
||||
struct tty *tp;
|
||||
struct dz_softc *sc;
|
||||
struct dz_softc *sc;
|
||||
|
||||
sc = (void *)dz_cd.cd_devs[DZ_I2C(minor(dev))];
|
||||
|
||||
tp = sc->sc_dz.dz_tty;
|
||||
return ((*tp->t_linesw->l_read)(tp, uio, flag));
|
||||
return (*tp->t_linesw->l_read)(tp, uio, flag);
|
||||
}
|
||||
|
||||
int
|
||||
dzwrite(dev_t dev, struct uio *uio, int flag)
|
||||
{
|
||||
struct tty *tp;
|
||||
struct dz_softc *sc;
|
||||
struct dz_softc *sc;
|
||||
|
||||
sc = (void *)dz_cd.cd_devs[DZ_I2C(minor(dev))];
|
||||
|
||||
tp = sc->sc_dz.dz_tty;
|
||||
return ((*tp->t_linesw->l_write)(tp, uio, flag));
|
||||
return (*tp->t_linesw->l_write)(tp, uio, flag);
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
|
@ -235,56 +238,57 @@ dzioctl(dev_t dev, u_long cmd, void *data, int flag, struct lwp *l)
|
|||
|
||||
error = (*tp->t_linesw->l_ioctl)(tp, cmd, data, flag, l);
|
||||
if (error >= 0)
|
||||
return (error);
|
||||
return error;
|
||||
|
||||
error = ttioctl(tp, cmd, data, flag, l);
|
||||
if (error >= 0)
|
||||
return (error);
|
||||
return error;
|
||||
|
||||
switch (cmd) {
|
||||
|
||||
case TIOCSBRK:
|
||||
(void) dzmctl(sc, line, TIOCM_BRK, DMBIS);
|
||||
(void)dzmctl(sc, line, TIOCM_BRK, DMBIS);
|
||||
break;
|
||||
|
||||
case TIOCCBRK:
|
||||
(void) dzmctl(sc, line, TIOCM_BRK, DMBIC);
|
||||
(void)dzmctl(sc, line, TIOCM_BRK, DMBIC);
|
||||
break;
|
||||
|
||||
case TIOCSDTR:
|
||||
(void) dzmctl(sc, line, TIOCM_DTR, DMBIS);
|
||||
(void)dzmctl(sc, line, TIOCM_DTR, DMBIS);
|
||||
break;
|
||||
|
||||
case TIOCCDTR:
|
||||
(void) dzmctl(sc, line, TIOCM_DTR, DMBIC);
|
||||
(void)dzmctl(sc, line, TIOCM_DTR, DMBIC);
|
||||
break;
|
||||
|
||||
case TIOCMSET:
|
||||
(void) dzmctl(sc, line, *(int *)data, DMSET);
|
||||
(void)dzmctl(sc, line, *(int *)data, DMSET);
|
||||
break;
|
||||
|
||||
case TIOCMBIS:
|
||||
(void) dzmctl(sc, line, *(int *)data, DMBIS);
|
||||
(void)dzmctl(sc, line, *(int *)data, DMBIS);
|
||||
break;
|
||||
|
||||
case TIOCMBIC:
|
||||
(void) dzmctl(sc, line, *(int *)data, DMBIC);
|
||||
(void)dzmctl(sc, line, *(int *)data, DMBIC);
|
||||
break;
|
||||
|
||||
case TIOCMGET:
|
||||
*(int *)data = (dzmctl(sc, line, 0, DMGET) & ~TIOCM_BRK);
|
||||
*(int *)data = dzmctl(sc, line, 0, DMGET) & ~TIOCM_BRK;
|
||||
break;
|
||||
|
||||
default:
|
||||
return (EPASSTHROUGH);
|
||||
return EPASSTHROUGH;
|
||||
}
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
void
|
||||
dzstop(struct tty *tp, int flag)
|
||||
{
|
||||
|
||||
if (tp->t_state & TS_BUSY)
|
||||
if (!(tp->t_state & TS_TTSTOP))
|
||||
tp->t_state |= TS_FLUSH;
|
||||
|
@ -293,22 +297,22 @@ dzstop(struct tty *tp, int flag)
|
|||
struct tty *
|
||||
dztty(dev_t dev)
|
||||
{
|
||||
struct dz_softc *sc = (void *)dz_cd.cd_devs[DZ_I2C(minor(dev))];
|
||||
struct tty *tp = sc->sc_dz.dz_tty;
|
||||
struct dz_softc *sc = (void *)dz_cd.cd_devs[DZ_I2C(minor(dev))];
|
||||
struct tty *tp = sc->sc_dz.dz_tty;
|
||||
|
||||
return (tp);
|
||||
return tp;
|
||||
}
|
||||
|
||||
int
|
||||
dzpoll( dev_t dev, int events, struct lwp *l)
|
||||
dzpoll(dev_t dev, int events, struct lwp *l)
|
||||
{
|
||||
struct dz_softc *sc;
|
||||
struct tty *tp;
|
||||
struct dz_softc *sc;
|
||||
|
||||
sc = (void *)dz_cd.cd_devs[DZ_I2C(minor(dev))];
|
||||
|
||||
tp = sc->sc_dz.dz_tty;
|
||||
return ((*tp->t_linesw->l_poll)(tp, events, l));
|
||||
return (*tp->t_linesw->l_poll)(tp, events, l);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -335,7 +339,7 @@ dzstart(struct tty *tp)
|
|||
|
||||
tp->t_state |= TS_BUSY;
|
||||
|
||||
/* was idle, get it started */
|
||||
/* was idle, get it started */
|
||||
dzxint(sc,USI_TXRDY);
|
||||
splx(s);
|
||||
}
|
||||
|
@ -348,13 +352,13 @@ dzdivisor(int baudrate)
|
|||
int act_baud, divisor, error;
|
||||
|
||||
if (baudrate <= 0)
|
||||
return (0);
|
||||
return 0;
|
||||
|
||||
divisor = (rclk/8)/(baudrate);
|
||||
divisor = (divisor/2) + (divisor&1);
|
||||
divisor = (rclk / 8) / (baudrate);
|
||||
divisor = (divisor / 2) + (divisor & 1);
|
||||
|
||||
if (divisor <= 0)
|
||||
return (-1);
|
||||
return -1;
|
||||
act_baud = rclk / (divisor * 16);
|
||||
|
||||
/* 10 times error in percent: */
|
||||
|
@ -362,9 +366,9 @@ dzdivisor(int baudrate)
|
|||
|
||||
/* 3.0% maximum error tolerance: */
|
||||
if (error < -30 || error > 30)
|
||||
return (-1);
|
||||
return -1;
|
||||
|
||||
return (divisor);
|
||||
return divisor;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -383,40 +387,42 @@ dzparam(struct tty *tp, struct termios *t)
|
|||
sc = (void *)dz_cd.cd_devs[unit];
|
||||
|
||||
/* check requested parameters */
|
||||
if (t->c_ispeed != t->c_ospeed)
|
||||
return (EINVAL);
|
||||
speed = dzdivisor(t->c_ispeed);
|
||||
if (speed < 0)
|
||||
return (EINVAL);
|
||||
if (t->c_ispeed != t->c_ospeed)
|
||||
return EINVAL;
|
||||
speed = dzdivisor(t->c_ispeed);
|
||||
if (speed < 0)
|
||||
return EINVAL;
|
||||
|
||||
tp->t_ispeed = t->c_ispeed;
|
||||
tp->t_ospeed = t->c_ospeed;
|
||||
tp->t_cflag = cflag;
|
||||
tp->t_ispeed = t->c_ispeed;
|
||||
tp->t_ospeed = t->c_ospeed;
|
||||
tp->t_cflag = cflag;
|
||||
|
||||
{ static int didit=0;
|
||||
if (!didit && t->c_ispeed != 38400)
|
||||
printf("dzparam: c_ispeed %d ignored, keeping 38400\n",t->c_ispeed);
|
||||
didit = 1;
|
||||
}
|
||||
speed = dzdivisor(38400);
|
||||
{
|
||||
/* XXX */
|
||||
static int didit = 0;
|
||||
if (!didit && t->c_ispeed != 38400)
|
||||
printf("dzparam: c_ispeed %d ignored, keeping 38400\n",
|
||||
t->c_ispeed);
|
||||
didit = 1;
|
||||
}
|
||||
speed = dzdivisor(38400);
|
||||
|
||||
if (speed == 0) {
|
||||
(void) dzmctl(sc, line, 0, DMSET); /* hang up line */
|
||||
return (0);
|
||||
(void)dzmctl(sc, line, 0, DMSET); /* hang up line */
|
||||
return 0;
|
||||
}
|
||||
|
||||
switch (cflag & CSIZE)
|
||||
{
|
||||
case CS5:
|
||||
switch (cflag & CSIZE) {
|
||||
case CS5:
|
||||
lpr = USC_BPC_5;
|
||||
break;
|
||||
case CS6:
|
||||
case CS6:
|
||||
lpr = USC_BPC_6;
|
||||
break;
|
||||
case CS7:
|
||||
case CS7:
|
||||
lpr = USC_BPC_7;
|
||||
break;
|
||||
default:
|
||||
default:
|
||||
lpr = USC_BPC_8;
|
||||
break;
|
||||
}
|
||||
|
@ -424,30 +430,30 @@ dzparam(struct tty *tp, struct termios *t)
|
|||
lpr |= USC_2STOP;
|
||||
|
||||
if (cflag & PARENB) {
|
||||
if (cflag & PARODD)
|
||||
lpr |= USC_ODD;
|
||||
else
|
||||
lpr |= USC_EVEN;
|
||||
} else
|
||||
lpr |= USC_NONE;
|
||||
if (cflag & PARODD)
|
||||
lpr |= USC_ODD;
|
||||
else
|
||||
lpr |= USC_EVEN;
|
||||
} else
|
||||
lpr |= USC_NONE;
|
||||
|
||||
s = spltty();
|
||||
|
||||
dzr = sc->sc_dr;
|
||||
|
||||
dzr->Baud = speed;
|
||||
dzr->Control = USC_CLKDIV_4 | USC_TXEN | USC_RXEN | lpr;
|
||||
dzr->Baud = speed;
|
||||
dzr->Control = USC_CLKDIV_4 | USC_TXEN | USC_RXEN | lpr;
|
||||
#define USI_INTRS (USI_RXRDY|USI_RXBRK|USI_OVRE|USI_FRAME|USI_PARE)
|
||||
dzr->IntrEnable = USI_INTRS;
|
||||
dzr->IntrEnable = USI_INTRS;
|
||||
|
||||
(void) splx(s);
|
||||
return (0);
|
||||
(void)splx(s);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned
|
||||
dzmctl(struct dz_softc *sc, int line, int bits, int how)
|
||||
{
|
||||
unsigned mbits;
|
||||
unsigned int mbits;
|
||||
int s;
|
||||
struct _Usart *dzr;
|
||||
|
||||
|
@ -457,43 +463,42 @@ dzmctl(struct dz_softc *sc, int line, int bits, int how)
|
|||
|
||||
dzr = sc->sc_dr;
|
||||
|
||||
/* we have no modem control bits (CD,RI,DTR,DSR,..) */
|
||||
mbits |= TIOCM_CD;
|
||||
mbits |= TIOCM_DTR;
|
||||
/* we have no modem control bits (CD,RI,DTR,DSR,..) */
|
||||
mbits |= TIOCM_CD;
|
||||
mbits |= TIOCM_DTR;
|
||||
|
||||
if (dzr->ChannelStatus & USI_RXBRK)
|
||||
mbits |= TIOCM_BRK;
|
||||
|
||||
switch (how)
|
||||
{
|
||||
case DMSET:
|
||||
switch (how) {
|
||||
case DMSET:
|
||||
mbits = bits;
|
||||
break;
|
||||
|
||||
case DMBIS:
|
||||
case DMBIS:
|
||||
mbits |= bits;
|
||||
break;
|
||||
|
||||
case DMBIC:
|
||||
case DMBIC:
|
||||
mbits &= ~bits;
|
||||
break;
|
||||
|
||||
case DMGET:
|
||||
(void) splx(s);
|
||||
return (mbits);
|
||||
case DMGET:
|
||||
(void)splx(s);
|
||||
return mbits;
|
||||
}
|
||||
|
||||
/* BUGBUG work in progress */
|
||||
/* BUGBUG work in progress */
|
||||
if (mbits & TIOCM_BRK) {
|
||||
sc->sc_brk |= (1 << line);
|
||||
dzr->Control |= USC_STTBRK;
|
||||
dzr->Control |= USC_STTBRK;
|
||||
} else {
|
||||
sc->sc_brk &= ~(1 << line);
|
||||
dzr->Control |= USC_STPBRK;
|
||||
dzr->Control |= USC_STPBRK;
|
||||
}
|
||||
|
||||
(void) splx(s);
|
||||
return (mbits);
|
||||
(void)splx(s);
|
||||
return mbits;
|
||||
}
|
||||
|
||||
|
||||
|
@ -513,40 +518,39 @@ dzrint(struct dz_softc *sc, uint32_t csr)
|
|||
sc->sc_rxint++;
|
||||
dzr = sc->sc_dr;
|
||||
|
||||
cc = dzr->RxData;
|
||||
tp = sc->sc_dz.dz_tty;
|
||||
cc = dzr->RxData;
|
||||
tp = sc->sc_dz.dz_tty;
|
||||
|
||||
if (csr & USI_RXBRK)
|
||||
mcc = CNC_BREAK;
|
||||
else
|
||||
mcc = cc;
|
||||
if (csr & USI_RXBRK)
|
||||
mcc = CNC_BREAK;
|
||||
else
|
||||
mcc = cc;
|
||||
|
||||
/* clear errors before we print or bail out */
|
||||
if (csr & (USI_OVRE|USI_FRAME|USI_PARE))
|
||||
dzr->Control = USC_RSTSTA;
|
||||
/* clear errors before we print or bail out */
|
||||
if (csr & (USI_OVRE|USI_FRAME|USI_PARE))
|
||||
dzr->Control = USC_RSTSTA;
|
||||
|
||||
if (!(tp->t_state & TS_ISOPEN)) {
|
||||
wakeup(&tp->t_rawq);
|
||||
return;
|
||||
}
|
||||
if (!(tp->t_state & TS_ISOPEN)) {
|
||||
wakeup(&tp->t_rawq);
|
||||
return;
|
||||
}
|
||||
|
||||
if (csr & USI_OVRE) {
|
||||
log(LOG_WARNING, "%s: silo overflow, line %d\n",
|
||||
sc->sc_dev.dv_xname, 0);
|
||||
}
|
||||
if (csr & USI_OVRE) {
|
||||
log(LOG_WARNING, "%s: silo overflow, line %d\n",
|
||||
sc->sc_dev.dv_xname, 0);
|
||||
}
|
||||
|
||||
if (csr & USI_FRAME)
|
||||
cc |= TTY_FE;
|
||||
if (csr & USI_PARE)
|
||||
cc |= TTY_PE;
|
||||
if (csr & USI_FRAME)
|
||||
cc |= TTY_FE;
|
||||
if (csr & USI_PARE)
|
||||
cc |= TTY_PE;
|
||||
|
||||
#if defined(DDB)
|
||||
/* ^P drops into DDB */
|
||||
if (dz_ddb && (cc == 0x10))
|
||||
Debugger();
|
||||
/* ^P drops into DDB */
|
||||
if (dz_ddb && (cc == 0x10))
|
||||
Debugger();
|
||||
#endif
|
||||
(*tp->t_linesw->l_rint)(cc, tp);
|
||||
|
||||
(*tp->t_linesw->l_rint)(cc, tp);
|
||||
}
|
||||
|
||||
/* Transmitter Interrupt */
|
||||
|
@ -561,38 +565,39 @@ dzxint(struct dz_softc *sc, uint32_t csr)
|
|||
|
||||
dzr = sc->sc_dr;
|
||||
|
||||
tp = sc->sc_dz.dz_tty;
|
||||
cl = &tp->t_outq;
|
||||
tp->t_state &= ~TS_BUSY;
|
||||
tp = sc->sc_dz.dz_tty;
|
||||
cl = &tp->t_outq;
|
||||
tp->t_state &= ~TS_BUSY;
|
||||
|
||||
/* Just send out a char if we have one */
|
||||
if (cl->c_cc) {
|
||||
tp->t_state |= TS_BUSY;
|
||||
ch = getc(cl);
|
||||
dzr->TxData = ch;
|
||||
dzr->IntrEnable = USI_TXRDY;
|
||||
return;
|
||||
}
|
||||
/* Just send out a char if we have one */
|
||||
if (cl->c_cc) {
|
||||
tp->t_state |= TS_BUSY;
|
||||
ch = getc(cl);
|
||||
dzr->TxData = ch;
|
||||
dzr->IntrEnable = USI_TXRDY;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Nothing to send; turn off intr */
|
||||
dzr->IntrDisable = USI_TXRDY;
|
||||
/* Nothing to send; turn off intr */
|
||||
dzr->IntrDisable = USI_TXRDY;
|
||||
|
||||
if (tp->t_state & TS_FLUSH)
|
||||
tp->t_state &= ~TS_FLUSH;
|
||||
else
|
||||
ndflush (&tp->t_outq, cl->c_cc);
|
||||
if (tp->t_state & TS_FLUSH)
|
||||
tp->t_state &= ~TS_FLUSH;
|
||||
else
|
||||
ndflush(&tp->t_outq, cl->c_cc);
|
||||
|
||||
(*tp->t_linesw->l_start)(tp);
|
||||
(*tp->t_linesw->l_start)(tp);
|
||||
}
|
||||
|
||||
/* Machdep part of the driver
|
||||
*/
|
||||
int dz_ebus_match(struct device *, struct cfdata *, void *);
|
||||
void dz_ebus_attach(struct device *, struct device *, void *);
|
||||
/*
|
||||
* Machdep part of the driver
|
||||
*/
|
||||
int dz_ebus_match(device_t, cfdata_t, void *);
|
||||
void dz_ebus_attach(device_t, device_t, void *);
|
||||
int dz_ebus_intr(void *, void *);
|
||||
|
||||
void dz_ebus_cnsetup(paddr_t);
|
||||
void dz_ebus_cninit(struct consdev*);
|
||||
void dz_ebus_cninit(struct consdev *);
|
||||
int dz_ebus_cngetc(dev_t);
|
||||
void dz_ebus_cnputc(dev_t, int);
|
||||
void dz_ebus_cnpollc(dev_t, int);
|
||||
|
@ -607,31 +612,32 @@ struct consdev dz_ebus_consdev = {
|
|||
dz_ebus_cnpollc, NULL, NULL, NULL, NODEV, CN_NORMAL,
|
||||
};
|
||||
|
||||
/* Points to the console regs. Special mapping until VM is turned on.
|
||||
/*
|
||||
* Points to the console regs. Special mapping until VM is turned on.
|
||||
*/
|
||||
struct _Usart *dzcn;
|
||||
|
||||
int
|
||||
dz_ebus_match(struct device *parent, struct cfdata *cf, void *aux)
|
||||
dz_ebus_match(device_t parent, cfdata_t cf, void *aux)
|
||||
{
|
||||
struct ebus_attach_args *iba;
|
||||
struct _Usart *us;
|
||||
struct _Usart *us;
|
||||
|
||||
iba = aux;
|
||||
|
||||
if (strcmp(iba->ia_name, "dz") != 0)
|
||||
return (0);
|
||||
return 0;
|
||||
|
||||
us = (struct _Usart *)iba->ia_vaddr;
|
||||
if ((us == NULL) ||
|
||||
(us->Tag != PMTTAG_USART))
|
||||
return (0);
|
||||
us = (struct _Usart *)iba->ia_vaddr;
|
||||
if ((us == NULL) ||
|
||||
(us->Tag != PMTTAG_USART))
|
||||
return 0;
|
||||
|
||||
return (1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
void
|
||||
dz_ebus_attach(struct device *parent, struct device *self, void *aux)
|
||||
dz_ebus_attach(device_t parent, device_t self, void *aux)
|
||||
{
|
||||
struct ebus_attach_args *iba;
|
||||
struct dz_softc *sc;
|
||||
|
@ -641,7 +647,7 @@ dz_ebus_attach(struct device *parent, struct device *self, void *aux)
|
|||
|
||||
sc->sc_dr = (struct _Usart *)iba->ia_vaddr;
|
||||
#if DEBUG
|
||||
printf(" virt=%p ", (void *)sc->sc_dr);
|
||||
printf(" virt=%p ", (void *)sc->sc_dr);
|
||||
#endif
|
||||
|
||||
printf(": neilsart 1 line");
|
||||
|
@ -658,22 +664,21 @@ dz_ebus_attach(struct device *parent, struct device *self, void *aux)
|
|||
sc->sc_dz.dz_tty = tty_alloc();
|
||||
|
||||
evcnt_attach_dynamic(&sc->sc_rintrcnt, EVCNT_TYPE_INTR, NULL,
|
||||
sc->sc_dev.dv_xname, "rintr");
|
||||
sc->sc_dev.dv_xname, "rintr");
|
||||
evcnt_attach_dynamic(&sc->sc_tintrcnt, EVCNT_TYPE_INTR, NULL,
|
||||
sc->sc_dev.dv_xname, "tintr");
|
||||
sc->sc_dev.dv_xname, "tintr");
|
||||
|
||||
/* Initialize hw regs */
|
||||
/* Initialize hw regs */
|
||||
#if 0
|
||||
DZ_WRITE_WORD(dr_csr, DZ_CSR_MSE | DZ_CSR_RXIE | DZ_CSR_TXIE);
|
||||
DZ_WRITE_BYTE(dr_dtr, 0);
|
||||
DZ_WRITE_BYTE(dr_break, 0);
|
||||
#endif
|
||||
|
||||
/* Switch the console to virtual mode */
|
||||
dzcn = sc->sc_dr;
|
||||
/* And test it */
|
||||
/* Switch the console to virtual mode */
|
||||
dzcn = sc->sc_dr;
|
||||
/* And test it */
|
||||
printf("\n");
|
||||
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -683,9 +688,9 @@ dz_ebus_getmajor(void)
|
|||
static int cache = -1;
|
||||
|
||||
if (cache != -1)
|
||||
return (cache);
|
||||
return cache;
|
||||
|
||||
return (cache = cdevsw_lookup_major(&dz_cdevsw));
|
||||
return cache = cdevsw_lookup_major(&dz_cdevsw);
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -700,14 +705,15 @@ dz_ebus_intr(void *cookie, void *f)
|
|||
|
||||
#define USI_INTERRUPTS (USI_INTRS|USI_TXRDY)
|
||||
|
||||
for (; ((csr = (dzr->ChannelStatus & dzr->IntrMask)) & USI_INTERRUPTS) != 0;) {
|
||||
for (; ((csr = (dzr->ChannelStatus & dzr->IntrMask)) &
|
||||
USI_INTERRUPTS) != 0;) {
|
||||
if ((csr & USI_INTRS) != 0)
|
||||
dzrint(sc, csr);
|
||||
if ((csr & USI_TXRDY) != 0)
|
||||
dzxint(sc, csr);
|
||||
}
|
||||
|
||||
return (0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -717,11 +723,18 @@ dz_ebus_cnsetup(paddr_t addr)
|
|||
dzcn = (struct _Usart *)addr;
|
||||
|
||||
#if 0
|
||||
/* Initialize enough to xmit/recv via polling.
|
||||
* Bootloader might or might not have done it.
|
||||
*/
|
||||
dzcn->Control = USC_RXEN|USC_TXEN|USC_BPC_8|USC_NONE|USC_1STOP|USC_CLKDIV_4;
|
||||
dzcn->Baud = 0x29; /* 38400 */
|
||||
/*
|
||||
* Initialize enough to xmit/recv via polling.
|
||||
* Bootloader might or might not have done it.
|
||||
*/
|
||||
dzcn->Control =
|
||||
USC_RXEN |
|
||||
USC_TXEN |
|
||||
USC_BPC_8 |
|
||||
USC_NONE |
|
||||
USC_1STOP |
|
||||
USC_CLKDIV_4;
|
||||
dzcn->Baud = 0x29; /* 38400 */
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
@ -732,7 +745,8 @@ dz_ebus_cnsetup(paddr_t addr)
|
|||
cn_tab->cn_dev = makedev(dz_ebus_getmajor(), 0);
|
||||
}
|
||||
|
||||
void dz_ebus_cninit(struct consdev *cn)
|
||||
void
|
||||
dz_ebus_cninit(struct consdev *cn)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -744,14 +758,14 @@ dz_ebus_cngetc(dev_t dev)
|
|||
c = 0;
|
||||
s = spltty();
|
||||
|
||||
while ((dzcn->ChannelStatus & USI_RXRDY) == 0)
|
||||
DELAY(10);
|
||||
c = dzcn->RxData;
|
||||
while ((dzcn->ChannelStatus & USI_RXRDY) == 0)
|
||||
DELAY(10);
|
||||
c = dzcn->RxData;
|
||||
|
||||
splx(s);
|
||||
if (c == 13) /* map cr->ln */
|
||||
c = 10;
|
||||
return (c);
|
||||
return c;
|
||||
}
|
||||
|
||||
int dzflipped = 0;
|
||||
|
@ -766,11 +780,11 @@ dz_ebus_cnputc(dev_t dev, int ch)
|
|||
s = spltty();
|
||||
|
||||
#if 1
|
||||
/* Keep wired to hunt for a bug */
|
||||
if (dzcn && (dzcn != (struct _Usart *)0xfff90000)) {
|
||||
dzcn = (struct _Usart *)0xfff90000;
|
||||
dzflipped++;
|
||||
}
|
||||
/* Keep wired to hunt for a bug */
|
||||
if (dzcn && (dzcn != (struct _Usart *)0xfff90000)) {
|
||||
dzcn = (struct _Usart *)0xfff90000;
|
||||
dzflipped++;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Wait until ready */
|
||||
|
@ -784,10 +798,10 @@ dz_ebus_cnputc(dev_t dev, int ch)
|
|||
splx(s);
|
||||
}
|
||||
|
||||
/* Called before/after going into poll mode
|
||||
/*
|
||||
* Called before/after going into poll mode
|
||||
*/
|
||||
void
|
||||
void
|
||||
dz_ebus_cnpollc(dev_t dev, int on)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue