This patch clears the way for removing a number of tty related

fields in struct cdevsw:

        d_stop          moved to struct tty.
        d_reset         already unused.
        d_devtotty      linkage now provided by dev_t->si_tty.

These fields will be removed from struct cdevsw together with
d_params and d_maxio Real Soon Now.

The changes in this patch consist of:

        initialize dev->si_tty in *_open()
        initialize tty->t_stop
        remove devtotty functions
        rename ttpoll to ttypoll
        a few adjustments to these changes in the generic code
        a bump of __FreeBSD_version
        add a couple of FreeBSD tags
This commit is contained in:
phk 1999-09-25 16:21:39 +00:00
parent 869afb6bbe
commit a2c68c62db
40 changed files with 271 additions and 634 deletions

View File

@ -64,8 +64,6 @@ static d_close_t promclose;
static d_read_t promread;
static d_write_t promwrite;
static d_ioctl_t promioctl;
static d_stop_t promstop;
static d_devtotty_t promdevtotty;
#define CDEV_MAJOR 97
static struct cdevsw prom_cdevsw = {
@ -74,10 +72,10 @@ static struct cdevsw prom_cdevsw = {
/* read */ promread,
/* write */ promwrite,
/* ioctl */ promioctl,
/* stop */ promstop,
/* stop */ nostop,
/* reset */ noreset,
/* devtotty */ promdevtotty,
/* poll */ ttpoll,
/* devtotty */ nodevtotty,
/* poll */ ttypoll,
/* mmap */ nommap,
/* strategy */ nostrategy,
/* name */ "prom",
@ -98,6 +96,7 @@ static struct callout_handle promtimeouthandle
void promstart __P((struct tty *));
void promtimeout __P((void *));
int promparam __P((struct tty *, struct termios *));
void promstop __P((struct tty *, int));
int
promopen(dev, flag, mode, p)
@ -116,9 +115,11 @@ promopen(dev, flag, mode, p)
s = spltty();
tp = &prom_tty[unit];
dev->si_tty = tp;
tp->t_oproc = promstart;
tp->t_param = promparam;
tp->t_stop = promstop;
tp->t_dev = dev;
if ((tp->t_state & TS_ISOPEN) == 0) {
tp->t_state |= TS_CARR_ON;
@ -246,6 +247,7 @@ promstart(tp)
void
promstop(tp, flag)
struct tty *tp;
int flag;
{
int s;
@ -270,17 +272,6 @@ promtimeout(v)
promtimeouthandle = timeout(promtimeout, tp, polltime);
}
struct tty *
promdevtotty(dev)
dev_t dev;
{
if (minor(dev) != 0)
panic("promtty: bogus");
return &prom_tty[0];
}
DEV_MODULE(prom, CDEV_MAJOR, NOMAJ, prom_cdevsw, 0, 0);
#endif /* _PMAP_MAY_USE_PROM_CONSOLE */

View File

@ -67,8 +67,6 @@ static d_close_t zsclose;
static d_read_t zsread;
static d_write_t zswrite;
static d_ioctl_t zsioctl;
static d_stop_t zsstop;
static d_devtotty_t zsdevtotty;
#define CDEV_MAJOR 98
static struct cdevsw zs_cdevsw = {
@ -77,10 +75,10 @@ static struct cdevsw zs_cdevsw = {
/* read */ zsread,
/* write */ zswrite,
/* ioctl */ zsioctl,
/* stop */ zsstop,
/* stop */ nostop,
/* reset */ noreset,
/* devtotty */ zsdevtotty,
/* poll */ ttpoll,
/* devtotty */ nodevtotty,
/* poll */ ttypoll,
/* mmap */ nommap,
/* strategy */ nostrategy,
/* name */ "zs",
@ -95,6 +93,7 @@ static struct cdevsw zs_cdevsw = {
static void zsstart __P((struct tty *));
static int zsparam __P((struct tty *, struct termios *));
static void zsstop __P((struct tty *tp, int flag));
/*
* Helpers for console support.
@ -270,9 +269,11 @@ zsopen(dev_t dev, int flag, int mode, struct proc *p)
s = spltty();
tp = &sc->tty;
dev->si_tty = tp;
tp->t_oproc = zsstart;
tp->t_param = zsparam;
tp->t_stop = zsstop;
tp->t_dev = dev;
if ((tp->t_state & TS_ISOPEN) == 0) {
tp->t_state |= TS_CARR_ON;
@ -381,15 +382,6 @@ zsstop(struct tty *tp, int flag)
splx(s);
}
static struct tty *
zsdevtotty(dev_t dev)
{
struct zs_softc* sc = ZS_SOFTC(minor(dev));
if (!sc)
return (NULL);
return (&sc->tty);
}
DEV_DRIVER_MODULE(zs, zsc, zs_driver, zs_devclass, zs_cdevsw, 0, 0);
/*

View File

@ -204,13 +204,12 @@ linux_fcntl(struct proc *p, struct linux_fcntl_args *args)
struct vnode *vp;
long pgid;
struct pgrp *pgrp;
struct tty *tp, *(*d_tty) __P((dev_t));
struct tty *tp;
caddr_t sg;
dev_t dev;
sg = stackgap_init();
bsd_flock = (struct flock *)stackgap_alloc(&sg, sizeof(struct flock));
d_tty = NULL;
#ifdef DEBUG
printf("Linux-emul(%d): fcntl(%d, %08x, *)\n",
@ -309,8 +308,10 @@ linux_fcntl(struct proc *p, struct linux_fcntl_args *args)
dev = vn_todev(vp);
if (vp->v_type != VCHR || dev == NODEV)
return EINVAL;
d_tty = devsw(dev)->d_devtotty;
if (!d_tty || (!(tp = (*d_tty)(dev))))
if (!(devsw(dev)->d_flags & D_TTY))
return EINVAL;
tp = dev->si_tty;
if (!tp)
return EINVAL;
if (args->cmd == LINUX_F_GETOWN) {
p->p_retval[0] = tp->t_pgrp ? tp->t_pgrp->pg_id : NO_PID;

View File

@ -123,7 +123,6 @@
#define p_com_addr p_cy_addr
#define sioattach cyattach
#define sioclose cyclose
#define siodevtotty cydevtotty
#define siodriver cydriver
#define siodtrwakeup cydtrwakeup
#define sioinput cyinput
@ -136,7 +135,7 @@
#define sioread cyread
#define siosettimeout cysettimeout
#define siosetwater cysetwater
#define siostop cystop
#define comstop cystop
#define siowrite cywrite
#define sio_registered cy_registered
#define sio_timeout cy_timeout
@ -179,7 +178,7 @@
*
* The following com and tty flags correspond closely:
* CS_BUSY = TS_BUSY (maintained by comstart(), siopoll() and
* siostop())
* comstop())
* CS_TTGO = ~TS_TTSTOP (maintained by comparam() and comstart())
* CS_CTS_OFLOW = CCTS_OFLOW (maintained by comparam())
* CS_RTS_IFLOW = CRTS_IFLOW (maintained by comparam())
@ -347,6 +346,7 @@ static int siosetwater __P((struct com_s *com, speed_t speed));
static int comspeed __P((speed_t speed, u_long cy_clock,
int *prescaler_io));
static void comstart __P((struct tty *tp));
static void comstop __P((struct tty *tp, int rw));
static timeout_t comwakeup;
static void disc_optim __P((struct tty *tp, struct termios *t,
struct com_s *com));
@ -370,8 +370,6 @@ static d_close_t sioclose;
static d_read_t sioread;
static d_write_t siowrite;
static d_ioctl_t sioioctl;
static d_stop_t siostop;
static d_devtotty_t siodevtotty;
#define CDEV_MAJOR 48
static struct cdevsw sio_cdevsw = {
@ -380,10 +378,10 @@ static struct cdevsw sio_cdevsw = {
/* read */ sioread,
/* write */ siowrite,
/* ioctl */ sioioctl,
/* stop */ siostop,
/* stop */ nostop,
/* reset */ noreset,
/* devtotty */ siodevtotty,
/* poll */ ttpoll,
/* devtotty */ nodevtotty,
/* poll */ ttypoll,
/* mmap */ nommap,
/* strategy */ nostrategy,
/* name */ driver_name,
@ -674,6 +672,7 @@ sioopen(dev, flag, mode, p)
#else
tp = com->tp = &sio_tty[unit];
#endif
dev->si_tty = tp;
s = spltty();
/*
* We jump to this label after all non-interrupted sleeps to pick
@ -721,6 +720,7 @@ sioopen(dev, flag, mode, p)
* callout, and to complete a callin open after DCD rises.
*/
tp->t_oproc = comstart;
tp->t_stop = comstop;
tp->t_param = comparam;
tp->t_dev = dev;
tp->t_termios = mynor & CALLOUT_MASK
@ -853,7 +853,7 @@ sioclose(dev, flag, mode, p)
cd_etc(com, CD1400_ETC_STOPBREAK);
(*linesw[tp->t_line].l_close)(tp, flag);
disc_optim(tp, &tp->t_termios, com);
siostop(tp, FREAD | FWRITE);
comstop(tp, FREAD | FWRITE);
comhardclose(com);
ttyclose(tp);
siosettimeout();
@ -2414,7 +2414,7 @@ comstart(tp)
}
static void
siostop(tp, rw)
comstop(tp, rw)
struct tty *tp;
int rw;
{
@ -2454,22 +2454,6 @@ siostop(tp, rw)
comstart(tp);
}
static struct tty *
siodevtotty(dev)
dev_t dev;
{
int mynor;
int unit;
mynor = minor(dev);
if (mynor & CONTROL_MASK)
return (NULL);
unit = MINOR_TO_UNIT(mynor);
if ((u_int) unit >= NSIO)
return (NULL);
return (&sio_tty[unit]);
}
static int
commctl(com, bits, how)
struct com_s *com;

View File

@ -123,7 +123,6 @@
#define p_com_addr p_cy_addr
#define sioattach cyattach
#define sioclose cyclose
#define siodevtotty cydevtotty
#define siodriver cydriver
#define siodtrwakeup cydtrwakeup
#define sioinput cyinput
@ -136,7 +135,7 @@
#define sioread cyread
#define siosettimeout cysettimeout
#define siosetwater cysetwater
#define siostop cystop
#define comstop cystop
#define siowrite cywrite
#define sio_registered cy_registered
#define sio_timeout cy_timeout
@ -179,7 +178,7 @@
*
* The following com and tty flags correspond closely:
* CS_BUSY = TS_BUSY (maintained by comstart(), siopoll() and
* siostop())
* comstop())
* CS_TTGO = ~TS_TTSTOP (maintained by comparam() and comstart())
* CS_CTS_OFLOW = CCTS_OFLOW (maintained by comparam())
* CS_RTS_IFLOW = CRTS_IFLOW (maintained by comparam())
@ -347,6 +346,7 @@ static int siosetwater __P((struct com_s *com, speed_t speed));
static int comspeed __P((speed_t speed, u_long cy_clock,
int *prescaler_io));
static void comstart __P((struct tty *tp));
static void comstop __P((struct tty *tp, int rw));
static timeout_t comwakeup;
static void disc_optim __P((struct tty *tp, struct termios *t,
struct com_s *com));
@ -370,8 +370,6 @@ static d_close_t sioclose;
static d_read_t sioread;
static d_write_t siowrite;
static d_ioctl_t sioioctl;
static d_stop_t siostop;
static d_devtotty_t siodevtotty;
#define CDEV_MAJOR 48
static struct cdevsw sio_cdevsw = {
@ -380,10 +378,10 @@ static struct cdevsw sio_cdevsw = {
/* read */ sioread,
/* write */ siowrite,
/* ioctl */ sioioctl,
/* stop */ siostop,
/* stop */ nostop,
/* reset */ noreset,
/* devtotty */ siodevtotty,
/* poll */ ttpoll,
/* devtotty */ nodevtotty,
/* poll */ ttypoll,
/* mmap */ nommap,
/* strategy */ nostrategy,
/* name */ driver_name,
@ -674,6 +672,7 @@ sioopen(dev, flag, mode, p)
#else
tp = com->tp = &sio_tty[unit];
#endif
dev->si_tty = tp;
s = spltty();
/*
* We jump to this label after all non-interrupted sleeps to pick
@ -721,6 +720,7 @@ sioopen(dev, flag, mode, p)
* callout, and to complete a callin open after DCD rises.
*/
tp->t_oproc = comstart;
tp->t_stop = comstop;
tp->t_param = comparam;
tp->t_dev = dev;
tp->t_termios = mynor & CALLOUT_MASK
@ -853,7 +853,7 @@ sioclose(dev, flag, mode, p)
cd_etc(com, CD1400_ETC_STOPBREAK);
(*linesw[tp->t_line].l_close)(tp, flag);
disc_optim(tp, &tp->t_termios, com);
siostop(tp, FREAD | FWRITE);
comstop(tp, FREAD | FWRITE);
comhardclose(com);
ttyclose(tp);
siosettimeout();
@ -2414,7 +2414,7 @@ comstart(tp)
}
static void
siostop(tp, rw)
comstop(tp, rw)
struct tty *tp;
int rw;
{
@ -2454,22 +2454,6 @@ siostop(tp, rw)
comstart(tp);
}
static struct tty *
siodevtotty(dev)
dev_t dev;
{
int mynor;
int unit;
mynor = minor(dev);
if (mynor & CONTROL_MASK)
return (NULL);
unit = MINOR_TO_UNIT(mynor);
if ((u_int) unit >= NSIO)
return (NULL);
return (&sio_tty[unit]);
}
static int
commctl(com, bits, how)
struct com_s *com;

View File

@ -188,6 +188,7 @@ static void fepcmd(struct dgb_p *port, unsigned cmd, unsigned op1, unsigned op2,
unsigned ncmds, unsigned bytecmd);
static void dgbstart __P((struct tty *tp));
static void dgbstop __P((struct tty *tp, int rw));
static int dgbparam __P((struct tty *tp, struct termios *t));
static void dgbhardclose __P((struct dgb_p *port));
static void dgb_drain_or_flush __P((struct dgb_p *port));
@ -206,8 +207,6 @@ static d_close_t dgbclose;
static d_read_t dgbread;
static d_write_t dgbwrite;
static d_ioctl_t dgbioctl;
static d_stop_t dgbstop;
static d_devtotty_t dgbdevtotty;
#define CDEV_MAJOR 58
static struct cdevsw dgb_cdevsw = {
@ -216,10 +215,10 @@ static struct cdevsw dgb_cdevsw = {
/* read */ dgbread,
/* write */ dgbwrite,
/* ioctl */ dgbioctl,
/* stop */ dgbstop,
/* stop */ nostop,
/* reset */ noreset,
/* devtotty */ dgbdevtotty,
/* poll */ ttpoll,
/* devtotty */ nodevtotty,
/* poll */ ttypoll,
/* mmap */ nommap,
/* strategy */ nostrategy,
/* name */ "dgb",
@ -975,6 +974,7 @@ dgbopen(dev, flag, mode, p)
return 0;
tp=&sc->ttys[pnum];
dev->si_tty = tp;
port=&sc->ports[pnum];
bc=port->brdchan;
@ -1034,6 +1034,7 @@ dgbopen(dev, flag, mode, p)
*/
tp->t_oproc=dgbstart;
tp->t_param=dgbparam;
tp->t_stop=dgbstop;
tp->t_dev=dev;
tp->t_termios= (mynor & CALLOUT_MASK) ?
port->it_out :
@ -2184,26 +2185,6 @@ dgbstop(tp, rw)
dgbstart(tp);
}
struct tty *
dgbdevtotty(dev)
dev_t dev;
{
int mynor, pnum, unit;
struct dgb_softc *sc;
mynor = minor(dev);
if (mynor & CONTROL_MASK)
return (NULL);
unit = MINOR_TO_UNIT(mynor);
if ((u_int) unit >= NDGB)
return (NULL);
pnum = MINOR_TO_PORT(mynor);
sc = &dgb_softc[unit];
if (pnum >= sc->numports)
return (NULL);
return (&sc->ttys[pnum]);
}
static void
fepcmd(port, cmd, op1, op2, ncmds, bytecmd)
struct dgb_p *port;

View File

@ -192,6 +192,7 @@ static void fepcmd(struct dgm_p *port, unsigned cmd, unsigned op1, unsigned op2,
unsigned ncmds, unsigned bytecmd);
static void dgmstart __P((struct tty *tp));
static void dgmstop __P((struct tty *tp, int rw));
static int dgmparam __P((struct tty *tp, struct termios *t));
static void dgmhardclose __P((struct dgm_p *port));
static void dgm_drain_or_flush __P((struct dgm_p *port));
@ -210,8 +211,6 @@ static d_close_t dgmclose;
static d_read_t dgmread;
static d_write_t dgmwrite;
static d_ioctl_t dgmioctl;
static d_stop_t dgmstop;
static d_devtotty_t dgmdevtotty;
#define CDEV_MAJOR 101
static struct cdevsw dgm_cdevsw = {
@ -220,10 +219,10 @@ static struct cdevsw dgm_cdevsw = {
/* read */ dgmread,
/* write */ dgmwrite,
/* ioctl */ dgmioctl,
/* stop */ dgmstop,
/* stop */ nostop,
/* reset */ noreset,
/* devtotty */ dgmdevtotty,
/* poll */ ttpoll,
/* devtotty */ nodevtotty,
/* poll */ ttypoll,
/* mmap */ nommap,
/* strategy */ nostrategy,
/* name */ "dgm",
@ -778,6 +777,7 @@ dgmopen(dev, flag, mode, p)
return 0;
tp=&sc->ttys[pnum];
dev->si_tty = tp;
port=&sc->ports[pnum];
bc=port->brdchan;
@ -837,6 +837,7 @@ dgmopen(dev, flag, mode, p)
*/
tp->t_oproc=dgmstart;
tp->t_param=dgmparam;
tp->t_stop=dgmstop;
tp->t_dev=dev;
tp->t_termios= (mynor & CALLOUT_MASK) ?
port->it_out :
@ -1986,26 +1987,6 @@ dgmstop(tp, rw)
dgmstart(tp);
}
struct tty *
dgmdevtotty(dev)
dev_t dev;
{
int mynor, pnum, unit;
struct dgm_softc *sc;
mynor = minor(dev);
if (mynor & CONTROL_MASK)
return (NULL);
unit = MINOR_TO_UNIT(mynor);
if ((u_int) unit >= NDGM)
return (NULL);
pnum = MINOR_TO_PORT(mynor);
sc = &dgm_softc[unit];
if (pnum >= sc->numports)
return (NULL);
return (&sc->ttys[pnum]);
}
static void
fepcmd(port, cmd, op1, op2, ncmds, bytecmd)
struct dgm_p *port;

View File

@ -23,6 +23,9 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*
*/
/*
@ -87,8 +90,6 @@ static d_close_t rcclose;
static d_read_t rcread;
static d_write_t rcwrite;
static d_ioctl_t rcioctl;
static d_stop_t rcstop;
static d_devtotty_t rcdevtotty;
#define CDEV_MAJOR 63
static struct cdevsw rc_cdevsw = {
@ -97,10 +98,10 @@ static struct cdevsw rc_cdevsw = {
/* read */ rcread,
/* write */ rcwrite,
/* ioctl */ rcioctl,
/* stop */ rcstop,
/* stop */ nostop,
/* reset */ noreset,
/* devtotty */ rcdevtotty,
/* poll */ ttpoll,
/* devtotty */ nodevtotty,
/* poll */ ttypoll,
/* mmap */ nommap,
/* strategy */ nostrategy,
/* name */ "rc",
@ -182,6 +183,7 @@ static void rc_discard_output __P((struct rc_chans *));
static void rc_hardclose __P((struct rc_chans *));
static int rc_modctl __P((struct rc_chans *, int, int));
static void rc_start __P((struct tty *));
static void rc_stop __P((struct tty *, int rw));
static int rc_param __P((struct tty *, struct termios *));
static swihand_t rcpoll;
static void rc_reinit __P((struct rc_softc *));
@ -682,7 +684,7 @@ done1: ;
}
static void
rcstop(tp, rw)
rc_stop(tp, rw)
register struct tty *tp;
int rw;
{
@ -690,7 +692,7 @@ rcstop(tp, rw)
u_char *tptr, *eptr;
#ifdef RCDEBUG
printf("rc%d/%d: rcstop %s%s\n", rc->rc_rcb->rcb_unit, rc->rc_chan,
printf("rc%d/%d: rc_stop %s%s\n", rc->rc_rcb->rcb_unit, rc->rc_chan,
(rw & FWRITE)?"FWRITE ":"", (rw & FREAD)?"FREAD":"");
#endif
if (rw & FWRITE)
@ -732,6 +734,7 @@ rcopen(dev, flag, mode, p)
return ENXIO;
rc = &rc_chans[unit];
tp = rc->rc_tp;
dev->si_tty = tp;
nec = rc->rc_rcb->rcb_addr;
#ifdef RCDEBUG
printf("rc%d/%d: rcopen: dev %x\n", rc->rc_rcb->rcb_unit, unit, dev);
@ -771,6 +774,7 @@ rcopen(dev, flag, mode, p)
} else {
tp->t_oproc = rc_start;
tp->t_param = rc_param;
tp->t_stop = rc_stop;
tp->t_dev = dev;
if (CALLOUT(dev))
@ -828,7 +832,7 @@ rcclose(dev, flag, mode, p)
s = spltty();
(*linesw[tp->t_line].l_close)(tp, flag);
disc_optim(tp, &tp->t_termios, rc);
rcstop(tp, FREAD | FWRITE);
rc_stop(tp, FREAD | FWRITE);
rc_hardclose(rc);
ttyclose(tp);
splx(s);
@ -1407,18 +1411,6 @@ char *comment;
}
#endif /* RCDEBUG */
static struct tty *
rcdevtotty(dev)
dev_t dev;
{
int unit;
unit = GET_UNIT(dev);
if (unit >= NRC * CD180_NCHAN)
return NULL;
return (&rc_tty[unit]);
}
static void
rc_dtrwakeup(chan)
void *chan;

View File

@ -797,8 +797,6 @@ static d_close_t rpclose;
static d_read_t rpread;
static d_write_t rpwrite;
static d_ioctl_t rpioctl;
static d_stop_t rpstop;
static d_devtotty_t rpdevtotty;
#define CDEV_MAJOR 81
static struct cdevsw rp_cdevsw = {
@ -807,10 +805,10 @@ static struct cdevsw rp_cdevsw = {
/* read */ rpread,
/* write */ rpwrite,
/* ioctl */ rpioctl,
/* stop */ rpstop,
/* stop */ nostop,
/* reset */ noreset,
/* devtotty */ rpdevtotty,
/* poll */ ttpoll,
/* devtotty */ nodevtotty,
/* poll */ ttypoll,
/* mmap */ nommap,
/* strategy */ nostrategy,
/* name */ driver_name,
@ -859,10 +857,9 @@ static struct rp_port *p_rp_table[MAX_RP_PORTS];
* The top-level routines begin here
*/
int rpselect __P((dev_t, int, struct proc *));
static int rpparam __P((struct tty *, struct termios *));
static void rpstart __P((struct tty *));
static void rpstop __P((struct tty *, int));
static void rphardclose __P((struct rp_port *));
#define rpmap nomap
#define rpreset noreset
@ -1310,6 +1307,7 @@ rpopen(dev, flag, mode, p)
/* rp->rp_tty = &rp_tty[rp->rp_port];
*/
tp = rp->rp_tty;
dev->si_tty = tp;
oldspl = spltty();
@ -1349,6 +1347,7 @@ rpopen(dev, flag, mode, p)
tp->t_dev = dev;
tp->t_param = rpparam;
tp->t_oproc = rpstart;
tp->t_stop = rpstop;
tp->t_line = 0;
tp->t_termios = IS_CALLOUT(dev) ? rp->it_out : rp->it_in;
flags = 0;
@ -2017,29 +2016,3 @@ rpstop(tp, flag)
splx(spl);
rpstart(tp);
}
int
rpselect(dev, flag, p)
dev_t dev;
int flag;
struct proc *p;
{
return(0);
}
struct tty *
rpdevtotty(dev_t dev)
{
struct rp_port *rp;
int unit, port, mynor, umynor; /* SG */
umynor = (((minor(dev) >> 16) -1) * 32); /* SG */
port = (minor(dev) & 0x1f); /* SG */
mynor = (port + umynor); /* SG */
unit = minor_to_unit[mynor]; /* SG */
if(IS_CONTROL(dev))
return(NULL);
rp = rp_addr(unit) + port;
return(rp->rp_tty);
}

View File

@ -113,6 +113,7 @@ static int si_modem __P((struct si_port *, enum si_mctl, int));
static void si_write_enable __P((struct si_port *, int));
static int si_Sioctl __P((dev_t, u_long, caddr_t, int, struct proc *));
static void si_start __P((struct tty *));
static void si_stop __P((struct tty *, int));
static timeout_t si_lstart;
static void si_disc_optim __P((struct tty *tp, struct termios *t,
struct si_port *pp));
@ -171,8 +172,6 @@ static d_close_t siclose;
static d_read_t siread;
static d_write_t siwrite;
static d_ioctl_t siioctl;
static d_stop_t sistop;
static d_devtotty_t sidevtotty;
#define CDEV_MAJOR 68
static struct cdevsw si_cdevsw = {
@ -181,10 +180,10 @@ static struct cdevsw si_cdevsw = {
/* read */ siread,
/* write */ siwrite,
/* ioctl */ siioctl,
/* stop */ sistop,
/* stop */ nostop,
/* reset */ noreset,
/* devtotty */ sidevtotty,
/* poll */ ttpoll,
/* devtotty */ nodevtotty,
/* poll */ ttypoll,
/* mmap */ nommap,
/* strategy */ nostrategy,
/* name */ "si",
@ -1162,6 +1161,7 @@ siopen(dev, flag, mode, p)
pp = sc->sc_ports + port;
tp = pp->sp_tty; /* the "real" tty */
dev->si_tty = tp;
ccbp = pp->sp_ccb; /* Find control block */
DPRINT((pp, DBG_ENTRY|DBG_OPEN, "siopen(%s,%x,%x,%x)\n",
devtoname(dev), flag, mode, p));
@ -1213,6 +1213,7 @@ siopen(dev, flag, mode, p)
*/
DPRINT((pp, DBG_OPEN, "first open\n"));
tp->t_oproc = si_start;
tp->t_stop = si_stop;
tp->t_param = siparam;
tp->t_dev = dev;
tp->t_termios = mynor & SI_CALLOUT_MASK
@ -1327,7 +1328,7 @@ siclose(dev, flag, mode, p)
pp->sp_state &= ~SS_LSTART;
}
sistop(tp, FREAD | FWRITE);
si_stop(tp, FREAD | FWRITE);
sihardclose(pp);
ttyclose(tp);
@ -1458,21 +1459,6 @@ siwrite(dev, uio, flag)
}
static struct tty *
sidevtotty(dev_t dev)
{
struct si_port *pp;
int mynor = minor(dev);
struct si_softc *sc = &si_softc[SI_CARD(mynor)];
if (IS_SPECIAL(mynor))
return(NULL);
if (SI_PORT(mynor) >= sc->sc_nport)
return(NULL);
pp = MINOR2PP(mynor);
return (pp->sp_tty);
}
static int
siioctl(dev, cmd, data, flag, p)
dev_t dev;
@ -2582,7 +2568,7 @@ si_lstart(void *arg)
* Stop output on a line. called at spltty();
*/
void
sistop(tp, rw)
si_stop(tp, rw)
register struct tty *tp;
int rw;
{
@ -2592,7 +2578,7 @@ sistop(tp, rw)
pp = TP2PP(tp);
ccbp = pp->sp_ccb;
DPRINT((TP2PP(tp), DBG_ENTRY|DBG_STOP, "sistop(%x,%x)\n", tp, rw));
DPRINT((TP2PP(tp), DBG_ENTRY|DBG_STOP, "si_stop(%x,%x)\n", tp, rw));
/* XXX: must check (rw & FWRITE | FREAD) etc flushing... */
if (rw & FWRITE) {

View File

@ -307,6 +307,7 @@ static int sioprobe __P((device_t dev));
static void siosettimeout __P((void));
static int siosetwater __P((struct com_s *com, speed_t speed));
static void comstart __P((struct tty *tp));
static void comstop __P((struct tty *tp, int rw));
static timeout_t comwakeup;
static void disc_optim __P((struct tty *tp, struct termios *t,
struct com_s *com));
@ -338,8 +339,6 @@ static d_close_t sioclose;
static d_read_t sioread;
static d_write_t siowrite;
static d_ioctl_t sioioctl;
static d_stop_t siostop;
static d_devtotty_t siodevtotty;
#define CDEV_MAJOR 28
static struct cdevsw sio_cdevsw = {
@ -348,10 +347,10 @@ static struct cdevsw sio_cdevsw = {
/* read */ sioread,
/* write */ siowrite,
/* ioctl */ sioioctl,
/* stop */ siostop,
/* stop */ nostop,
/* reset */ noreset,
/* devtotty */ siodevtotty,
/* poll */ ttpoll,
/* devtotty */ nodevtotty,
/* poll */ ttypoll,
/* mmap */ nommap,
/* strategy */ nostrategy,
/* name */ driver_name,
@ -1210,6 +1209,7 @@ sioopen(dev, flag, mode, p)
*/
tp->t_oproc = comstart;
tp->t_param = comparam;
tp->t_stop = comstop;
tp->t_dev = dev;
tp->t_termios = mynor & CALLOUT_MASK
? com->it_out : com->it_in;
@ -1336,7 +1336,7 @@ sioclose(dev, flag, mode, p)
s = spltty();
(*linesw[tp->t_line].l_close)(tp, flag);
disc_optim(tp, &tp->t_termios, com);
siostop(tp, FREAD | FWRITE);
comstop(tp, FREAD | FWRITE);
comhardclose(com);
ttyclose(tp);
siosettimeout();
@ -2375,7 +2375,7 @@ comstart(tp)
}
static void
siostop(tp, rw)
comstop(tp, rw)
struct tty *tp;
int rw;
{
@ -2415,22 +2415,6 @@ siostop(tp, rw)
comstart(tp);
}
static struct tty *
siodevtotty(dev)
dev_t dev;
{
int mynor;
int unit;
mynor = minor(dev);
if (mynor & CONTROL_MASK)
return (NULL);
unit = MINOR_TO_UNIT(mynor);
if ((u_int) unit >= NSIOTOT)
return (NULL);
return (dev->si_tty);
}
static int
commctl(com, bits, how)
struct com_s *com;

View File

@ -82,9 +82,9 @@ snpdevtotty (dev)
struct cdevsw *cdp;
cdp = devsw(dev);
if (cdp == NULL)
return (NULL);
return ((*cdp->d_devtotty)(dev));
if (cdp && cdp->d_flags & D_TTY)
return (dev->si_tty);
return (NULL);
}
#define SNP_INPUT_BUF 5 /* This is even too much,the maximal

View File

@ -59,7 +59,7 @@ vesa_ioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p)
struct tty *tp;
int mode;
tp = scdevtotty(dev);
tp = dev->si_tty;
if (!tp)
return ENXIO;
scp = SC_STAT(tp->t_dev);

View File

@ -217,8 +217,8 @@ static struct cdevsw sc_cdevsw = {
/* ioctl */ scioctl,
/* stop */ nostop,
/* reset */ noreset,
/* devtotty */ scdevtotty,
/* poll */ ttpoll,
/* devtotty */ nodevtotty,
/* poll */ ttypoll,
/* mmap */ scmmap,
/* strategy */ nostrategy,
/* name */ "sc",
@ -441,13 +441,6 @@ sc_resume_unit(int unit)
return 0;
}
struct tty
*scdevtotty(dev_t dev)
{
return (dev->si_tty);
}
static int
scdevtounit(dev_t dev)
{
@ -488,6 +481,7 @@ scopen(dev_t dev, int flag, int mode, struct proc *p)
tp = dev->si_tty = ttymalloc(dev->si_tty);
tp->t_oproc = (SC_VTY(dev) == SC_MOUSE) ? scmousestart : scstart;
tp->t_param = scparam;
tp->t_stop = nostop;
tp->t_dev = dev;
if (!(tp->t_state & TS_ISOPEN)) {
ttychars(tp);

View File

@ -418,7 +418,6 @@ void sc_clear_screen(scr_stat *scp);
void sc_set_cursor_image(scr_stat *scp);
int sc_clean_up(scr_stat *scp);
void sc_alloc_scr_buffer(scr_stat *scp, int wait, int discard);
struct tty *scdevtotty(dev_t dev);
#ifndef SC_NO_SYSMOUSE
struct tty *sc_get_mouse_tty(void);
#endif /* SC_NO_SYSMOUSE */

View File

@ -46,6 +46,7 @@
#include <sys/fcntl.h>
#include <sys/disklabel.h>
#include <sys/vmmeter.h>
#include <sys/tty.h>
#include <vm/vm.h>
#include <vm/vm_prot.h>
@ -167,15 +168,16 @@ spec_open(ap)
if (vp->v_mount && (vp->v_mount->mnt_flag & MNT_NODEV))
return (ENXIO);
dsw = devsw(dev);
if ( (dsw == NULL) || (dsw->d_open == NULL))
return ENXIO;
/* Make this field valid before any I/O in ->d_open */
if (!dev->si_iosize_max)
dev->si_iosize_max = DFLTPHYS;
switch (vp->v_type) {
case VCHR:
dsw = devsw(dev);
if ( (dsw == NULL) || (dsw->d_open == NULL))
return ENXIO;
if (ap->a_cred != FSCRED && (ap->a_mode & FWRITE)) {
/*
* When running in very secure mode, do not allow
@ -208,9 +210,6 @@ spec_open(ap)
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p);
break;
case VBLK:
dsw = devsw(dev);
if ( (dsw == NULL) || (dsw->d_open == NULL))
return ENXIO;
/*
* When running in very secure mode, do not allow
* opens for writing of any disk block devices.
@ -230,10 +229,26 @@ spec_open(ap)
error = (*dsw->d_open)(dev, ap->a_mode, S_IFBLK, p);
break;
default:
error = 0;
error = ENXIO;
break;
}
if (error)
return (error);
if (dsw->d_flags & D_TTY) {
if (!dev->si_tty) {
printf("Warning:%s: no si_tty\n", devtoname(dev));
} else {
struct tty *tp;
tp = dev->si_tty;
if (!tp->t_stop) {
printf("Warning:%s: no t_stop, using nostop\n", devtoname(dev));
tp->t_stop = nostop;
}
}
}
if (vn_isdisk(vp)) {
if (!dev->si_bsize_phys)
dev->si_bsize_phys = DEV_BSIZE;

View File

@ -188,6 +188,7 @@ static void fepcmd(struct dgb_p *port, unsigned cmd, unsigned op1, unsigned op2,
unsigned ncmds, unsigned bytecmd);
static void dgbstart __P((struct tty *tp));
static void dgbstop __P((struct tty *tp, int rw));
static int dgbparam __P((struct tty *tp, struct termios *t));
static void dgbhardclose __P((struct dgb_p *port));
static void dgb_drain_or_flush __P((struct dgb_p *port));
@ -206,8 +207,6 @@ static d_close_t dgbclose;
static d_read_t dgbread;
static d_write_t dgbwrite;
static d_ioctl_t dgbioctl;
static d_stop_t dgbstop;
static d_devtotty_t dgbdevtotty;
#define CDEV_MAJOR 58
static struct cdevsw dgb_cdevsw = {
@ -216,10 +215,10 @@ static struct cdevsw dgb_cdevsw = {
/* read */ dgbread,
/* write */ dgbwrite,
/* ioctl */ dgbioctl,
/* stop */ dgbstop,
/* stop */ nostop,
/* reset */ noreset,
/* devtotty */ dgbdevtotty,
/* poll */ ttpoll,
/* devtotty */ nodevtotty,
/* poll */ ttypoll,
/* mmap */ nommap,
/* strategy */ nostrategy,
/* name */ "dgb",
@ -975,6 +974,7 @@ dgbopen(dev, flag, mode, p)
return 0;
tp=&sc->ttys[pnum];
dev->si_tty = tp;
port=&sc->ports[pnum];
bc=port->brdchan;
@ -1034,6 +1034,7 @@ dgbopen(dev, flag, mode, p)
*/
tp->t_oproc=dgbstart;
tp->t_param=dgbparam;
tp->t_stop=dgbstop;
tp->t_dev=dev;
tp->t_termios= (mynor & CALLOUT_MASK) ?
port->it_out :
@ -2184,26 +2185,6 @@ dgbstop(tp, rw)
dgbstart(tp);
}
struct tty *
dgbdevtotty(dev)
dev_t dev;
{
int mynor, pnum, unit;
struct dgb_softc *sc;
mynor = minor(dev);
if (mynor & CONTROL_MASK)
return (NULL);
unit = MINOR_TO_UNIT(mynor);
if ((u_int) unit >= NDGB)
return (NULL);
pnum = MINOR_TO_PORT(mynor);
sc = &dgb_softc[unit];
if (pnum >= sc->numports)
return (NULL);
return (&sc->ttys[pnum]);
}
static void
fepcmd(port, cmd, op1, op2, ncmds, bytecmd)
struct dgb_p *port;

View File

@ -192,6 +192,7 @@ static void fepcmd(struct dgm_p *port, unsigned cmd, unsigned op1, unsigned op2,
unsigned ncmds, unsigned bytecmd);
static void dgmstart __P((struct tty *tp));
static void dgmstop __P((struct tty *tp, int rw));
static int dgmparam __P((struct tty *tp, struct termios *t));
static void dgmhardclose __P((struct dgm_p *port));
static void dgm_drain_or_flush __P((struct dgm_p *port));
@ -210,8 +211,6 @@ static d_close_t dgmclose;
static d_read_t dgmread;
static d_write_t dgmwrite;
static d_ioctl_t dgmioctl;
static d_stop_t dgmstop;
static d_devtotty_t dgmdevtotty;
#define CDEV_MAJOR 101
static struct cdevsw dgm_cdevsw = {
@ -220,10 +219,10 @@ static struct cdevsw dgm_cdevsw = {
/* read */ dgmread,
/* write */ dgmwrite,
/* ioctl */ dgmioctl,
/* stop */ dgmstop,
/* stop */ nostop,
/* reset */ noreset,
/* devtotty */ dgmdevtotty,
/* poll */ ttpoll,
/* devtotty */ nodevtotty,
/* poll */ ttypoll,
/* mmap */ nommap,
/* strategy */ nostrategy,
/* name */ "dgm",
@ -778,6 +777,7 @@ dgmopen(dev, flag, mode, p)
return 0;
tp=&sc->ttys[pnum];
dev->si_tty = tp;
port=&sc->ports[pnum];
bc=port->brdchan;
@ -837,6 +837,7 @@ dgmopen(dev, flag, mode, p)
*/
tp->t_oproc=dgmstart;
tp->t_param=dgmparam;
tp->t_stop=dgmstop;
tp->t_dev=dev;
tp->t_termios= (mynor & CALLOUT_MASK) ?
port->it_out :
@ -1986,26 +1987,6 @@ dgmstop(tp, rw)
dgmstart(tp);
}
struct tty *
dgmdevtotty(dev)
dev_t dev;
{
int mynor, pnum, unit;
struct dgm_softc *sc;
mynor = minor(dev);
if (mynor & CONTROL_MASK)
return (NULL);
unit = MINOR_TO_UNIT(mynor);
if ((u_int) unit >= NDGM)
return (NULL);
pnum = MINOR_TO_PORT(mynor);
sc = &dgm_softc[unit];
if (pnum >= sc->numports)
return (NULL);
return (&sc->ttys[pnum]);
}
static void
fepcmd(port, cmd, op1, op2, ncmds, bytecmd)
struct dgm_p *port;

View File

@ -14,6 +14,9 @@
* all derivative works or modified versions.
*
* Version 1.9, Wed Oct 4 18:58:15 MSK 1995
*
* $FreeBSD$
*
*/
#undef DEBUG
@ -85,8 +88,6 @@ static d_close_t cxclose;
static d_read_t cxread;
static d_write_t cxwrite;
static d_ioctl_t cxioctl;
static d_stop_t cxstop;
static d_devtotty_t cxdevtotty;
#define CDEV_MAJOR 42
/* Don't make this static, since if_cx.c uses it. */
@ -96,10 +97,10 @@ struct cdevsw cx_cdevsw = {
/* read */ cxread,
/* write */ cxwrite,
/* ioctl */ cxioctl,
/* stop */ cxstop,
/* stop */ nostop,
/* reset */ noreset,
/* devtotty */ cxdevtotty,
/* poll */ ttpoll,
/* devtotty */ nodevtotty,
/* poll */ ttypoll,
/* mmap */ nommap,
/* strategy */ nostrategy,
/* name */ "cx",
@ -116,6 +117,7 @@ struct tty *cx_tty [NCX*NCHAN]; /* tty data */
#endif
static void cxoproc (struct tty *tp);
static void cxstop (struct tty *tp, int flag);
static int cxparam (struct tty *tp, struct termios *t);
int cxopen (dev_t dev, int flag, int mode, struct proc *p)
@ -149,8 +151,10 @@ int cxopen (dev_t dev, int flag, int mode, struct proc *p)
c->ttyp = cx_tty[unit];
#endif
c->ttyp->t_oproc = cxoproc;
c->ttyp->t_stop = cxstop;
c->ttyp->t_param = cxparam;
}
dev->si_tty = c->ttyp;
#ifdef __bsdi__
if (! c->ttydev) {
MALLOC (c->ttydev, struct ttydevice_tmp*,
@ -743,15 +747,6 @@ cxparam (struct tty *tp, struct termios *t)
return (0);
}
struct tty *cxdevtotty (dev_t dev)
{
int unit = UNIT(dev);
if (unit == UNIT_CTL || unit >= NCX*NCHAN)
return (0);
return (cxchan[unit]->ttyp);
}
/*
* Stop output on a line
*/

View File

@ -123,7 +123,6 @@
#define p_com_addr p_cy_addr
#define sioattach cyattach
#define sioclose cyclose
#define siodevtotty cydevtotty
#define siodriver cydriver
#define siodtrwakeup cydtrwakeup
#define sioinput cyinput
@ -136,7 +135,7 @@
#define sioread cyread
#define siosettimeout cysettimeout
#define siosetwater cysetwater
#define siostop cystop
#define comstop cystop
#define siowrite cywrite
#define sio_registered cy_registered
#define sio_timeout cy_timeout
@ -179,7 +178,7 @@
*
* The following com and tty flags correspond closely:
* CS_BUSY = TS_BUSY (maintained by comstart(), siopoll() and
* siostop())
* comstop())
* CS_TTGO = ~TS_TTSTOP (maintained by comparam() and comstart())
* CS_CTS_OFLOW = CCTS_OFLOW (maintained by comparam())
* CS_RTS_IFLOW = CRTS_IFLOW (maintained by comparam())
@ -347,6 +346,7 @@ static int siosetwater __P((struct com_s *com, speed_t speed));
static int comspeed __P((speed_t speed, u_long cy_clock,
int *prescaler_io));
static void comstart __P((struct tty *tp));
static void comstop __P((struct tty *tp, int rw));
static timeout_t comwakeup;
static void disc_optim __P((struct tty *tp, struct termios *t,
struct com_s *com));
@ -370,8 +370,6 @@ static d_close_t sioclose;
static d_read_t sioread;
static d_write_t siowrite;
static d_ioctl_t sioioctl;
static d_stop_t siostop;
static d_devtotty_t siodevtotty;
#define CDEV_MAJOR 48
static struct cdevsw sio_cdevsw = {
@ -380,10 +378,10 @@ static struct cdevsw sio_cdevsw = {
/* read */ sioread,
/* write */ siowrite,
/* ioctl */ sioioctl,
/* stop */ siostop,
/* stop */ nostop,
/* reset */ noreset,
/* devtotty */ siodevtotty,
/* poll */ ttpoll,
/* devtotty */ nodevtotty,
/* poll */ ttypoll,
/* mmap */ nommap,
/* strategy */ nostrategy,
/* name */ driver_name,
@ -674,6 +672,7 @@ sioopen(dev, flag, mode, p)
#else
tp = com->tp = &sio_tty[unit];
#endif
dev->si_tty = tp;
s = spltty();
/*
* We jump to this label after all non-interrupted sleeps to pick
@ -721,6 +720,7 @@ sioopen(dev, flag, mode, p)
* callout, and to complete a callin open after DCD rises.
*/
tp->t_oproc = comstart;
tp->t_stop = comstop;
tp->t_param = comparam;
tp->t_dev = dev;
tp->t_termios = mynor & CALLOUT_MASK
@ -853,7 +853,7 @@ sioclose(dev, flag, mode, p)
cd_etc(com, CD1400_ETC_STOPBREAK);
(*linesw[tp->t_line].l_close)(tp, flag);
disc_optim(tp, &tp->t_termios, com);
siostop(tp, FREAD | FWRITE);
comstop(tp, FREAD | FWRITE);
comhardclose(com);
ttyclose(tp);
siosettimeout();
@ -2414,7 +2414,7 @@ comstart(tp)
}
static void
siostop(tp, rw)
comstop(tp, rw)
struct tty *tp;
int rw;
{
@ -2454,22 +2454,6 @@ siostop(tp, rw)
comstart(tp);
}
static struct tty *
siodevtotty(dev)
dev_t dev;
{
int mynor;
int unit;
mynor = minor(dev);
if (mynor & CONTROL_MASK)
return (NULL);
unit = MINOR_TO_UNIT(mynor);
if ((u_int) unit >= NSIO)
return (NULL);
return (&sio_tty[unit]);
}
static int
commctl(com, bits, how)
struct com_s *com;

View File

@ -528,13 +528,6 @@ STATIC d_close_t stliclose;
STATIC d_read_t stliread;
STATIC d_write_t stliwrite;
STATIC d_ioctl_t stliioctl;
STATIC d_stop_t stlistop;
#if VFREEBSD >= 220
STATIC d_devtotty_t stlidevtotty;
#else
struct tty *stlidevtotty(dev_t dev);
#endif
/*
* Internal function prototypes.
@ -559,6 +552,7 @@ static long stli_mktiocm(unsigned long sigvalue);
static void stli_rxprocess(stlibrd_t *brdp, stliport_t *portp);
static void stli_flush(stliport_t *portp, int flag);
static void stli_start(struct tty *tp);
static void stli_stop(struct tty *tp, int rw);
static int stli_param(struct tty *tp, struct termios *tiosp);
static void stli_ttyoptim(stliport_t *portp, struct termios *tiosp);
static void stli_dtrwakeup(void *arg);
@ -646,10 +640,10 @@ static struct cdevsw stli_cdevsw = {
/* read */ stliread,
/* write */ stliwrite,
/* ioctl */ stliioctl,
/* stop */ stlistop,
/* stop */ nostop,
/* reset */ noreset,
/* devtotty */ stlidevtotty,
/* poll */ ttpoll,
/* devtotty */ nodevtotty,
/* poll */ ttypoll,
/* mmap */ nommap,
/* strategy */ nostrategy,
/* name */ stli_drvname,
@ -951,6 +945,7 @@ STATIC int stliopen(dev_t dev, int flag, int mode, struct proc *p)
if (portp == (stliport_t *) NULL)
return(ENXIO);
tp = &portp->tty;
dev->si_tty = tp;
callout = minor(dev) & STL_CALLOUTDEV;
error = 0;
@ -986,6 +981,7 @@ STATIC int stliopen(dev_t dev, int flag, int mode, struct proc *p)
if ((tp->t_state & TS_ISOPEN) == 0) {
tp->t_oproc = stli_start;
tp->t_param = stli_param;
tp->t_stop = stli_stop;
tp->t_dev = dev;
tp->t_termios = callout ? portp->initouttios :
portp->initintios;
@ -1109,10 +1105,10 @@ STATIC int stliread(dev_t dev, struct uio *uiop, int flag)
#if VFREEBSD >= 220
STATIC void stlistop(struct tty *tp, int rw)
STATIC void stli_stop(struct tty *tp, int rw)
{
#if DEBUG
printf("stlistop(tp=%x,rw=%x)\n", (int) tp, rw);
printf("stli_stop(tp=%x,rw=%x)\n", (int) tp, rw);
#endif
stli_flush((stliport_t *) tp, rw);
@ -1134,16 +1130,6 @@ STATIC int stlistop(struct tty *tp, int rw)
/*****************************************************************************/
STATIC struct tty *stlidevtotty(dev_t dev)
{
#if DEBUG
printf("stlidevtotty(dev=%s)\n", devtoname(dev));
#endif
return((struct tty *) stli_dev2port(dev));
}
/*****************************************************************************/
STATIC int stliwrite(dev_t dev, struct uio *uiop, int flag)
{
stliport_t *portp;

View File

@ -43,6 +43,8 @@
*
* @(#)pcvt_drv.c, 3.20, Last Edit-Date: [Mon Apr 19 17:10:09 1999]
*
* $FreeBSD$
*
*/
/*---------------------------------------------------------------------------*
@ -121,7 +123,6 @@ static d_close_t pcclose;
static d_read_t pcread;
static d_write_t pcwrite;
static d_ioctl_t pcioctl;
static d_devtotty_t pcdevtotty;
static d_mmap_t pcmmap;
#define CDEV_MAJOR 12
@ -133,8 +134,8 @@ static struct cdevsw pc_cdevsw = {
/* ioctl */ pcioctl,
/* stop */ nostop,
/* reset */ noreset,
/* devtotty */ pcdevtotty,
/* poll */ ttpoll,
/* devtotty */ nodevtotty,
/* poll */ ttypoll,
/* mmap */ pcmmap,
/* strategy */ nostrategy,
/* name */ "vt",
@ -147,15 +148,6 @@ static struct cdevsw pc_cdevsw = {
/* bmaj */ -1
};
#if PCVT_FREEBSD > 205
struct tty *
pcdevtotty(Dev_t dev)
{
return get_pccons(dev);
}
#endif /* PCVT_FREEBSD > 205 */
#if PCVT_NETBSD > 100 /* NetBSD-current Feb 20 1995 */
int
pcprobe(struct device *parent, void *match, void *aux)
@ -470,6 +462,8 @@ pcopen(Dev_t dev, int flag, int mode, struct proc *p)
if((tp = get_pccons(dev)) == NULL)
return ENXIO;
dev->si_tty = tp;
#if PCVT_EMU_MOUSE
if(i == totalscreens)
{

View File

@ -23,6 +23,9 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*
*/
/*
@ -87,8 +90,6 @@ static d_close_t rcclose;
static d_read_t rcread;
static d_write_t rcwrite;
static d_ioctl_t rcioctl;
static d_stop_t rcstop;
static d_devtotty_t rcdevtotty;
#define CDEV_MAJOR 63
static struct cdevsw rc_cdevsw = {
@ -97,10 +98,10 @@ static struct cdevsw rc_cdevsw = {
/* read */ rcread,
/* write */ rcwrite,
/* ioctl */ rcioctl,
/* stop */ rcstop,
/* stop */ nostop,
/* reset */ noreset,
/* devtotty */ rcdevtotty,
/* poll */ ttpoll,
/* devtotty */ nodevtotty,
/* poll */ ttypoll,
/* mmap */ nommap,
/* strategy */ nostrategy,
/* name */ "rc",
@ -182,6 +183,7 @@ static void rc_discard_output __P((struct rc_chans *));
static void rc_hardclose __P((struct rc_chans *));
static int rc_modctl __P((struct rc_chans *, int, int));
static void rc_start __P((struct tty *));
static void rc_stop __P((struct tty *, int rw));
static int rc_param __P((struct tty *, struct termios *));
static swihand_t rcpoll;
static void rc_reinit __P((struct rc_softc *));
@ -682,7 +684,7 @@ done1: ;
}
static void
rcstop(tp, rw)
rc_stop(tp, rw)
register struct tty *tp;
int rw;
{
@ -690,7 +692,7 @@ rcstop(tp, rw)
u_char *tptr, *eptr;
#ifdef RCDEBUG
printf("rc%d/%d: rcstop %s%s\n", rc->rc_rcb->rcb_unit, rc->rc_chan,
printf("rc%d/%d: rc_stop %s%s\n", rc->rc_rcb->rcb_unit, rc->rc_chan,
(rw & FWRITE)?"FWRITE ":"", (rw & FREAD)?"FREAD":"");
#endif
if (rw & FWRITE)
@ -732,6 +734,7 @@ rcopen(dev, flag, mode, p)
return ENXIO;
rc = &rc_chans[unit];
tp = rc->rc_tp;
dev->si_tty = tp;
nec = rc->rc_rcb->rcb_addr;
#ifdef RCDEBUG
printf("rc%d/%d: rcopen: dev %x\n", rc->rc_rcb->rcb_unit, unit, dev);
@ -771,6 +774,7 @@ rcopen(dev, flag, mode, p)
} else {
tp->t_oproc = rc_start;
tp->t_param = rc_param;
tp->t_stop = rc_stop;
tp->t_dev = dev;
if (CALLOUT(dev))
@ -828,7 +832,7 @@ rcclose(dev, flag, mode, p)
s = spltty();
(*linesw[tp->t_line].l_close)(tp, flag);
disc_optim(tp, &tp->t_termios, rc);
rcstop(tp, FREAD | FWRITE);
rc_stop(tp, FREAD | FWRITE);
rc_hardclose(rc);
ttyclose(tp);
splx(s);
@ -1407,18 +1411,6 @@ char *comment;
}
#endif /* RCDEBUG */
static struct tty *
rcdevtotty(dev)
dev_t dev;
{
int unit;
unit = GET_UNIT(dev);
if (unit >= NRC * CD180_NCHAN)
return NULL;
return (&rc_tty[unit]);
}
static void
rc_dtrwakeup(chan)
void *chan;

View File

@ -797,8 +797,6 @@ static d_close_t rpclose;
static d_read_t rpread;
static d_write_t rpwrite;
static d_ioctl_t rpioctl;
static d_stop_t rpstop;
static d_devtotty_t rpdevtotty;
#define CDEV_MAJOR 81
static struct cdevsw rp_cdevsw = {
@ -807,10 +805,10 @@ static struct cdevsw rp_cdevsw = {
/* read */ rpread,
/* write */ rpwrite,
/* ioctl */ rpioctl,
/* stop */ rpstop,
/* stop */ nostop,
/* reset */ noreset,
/* devtotty */ rpdevtotty,
/* poll */ ttpoll,
/* devtotty */ nodevtotty,
/* poll */ ttypoll,
/* mmap */ nommap,
/* strategy */ nostrategy,
/* name */ driver_name,
@ -859,10 +857,9 @@ static struct rp_port *p_rp_table[MAX_RP_PORTS];
* The top-level routines begin here
*/
int rpselect __P((dev_t, int, struct proc *));
static int rpparam __P((struct tty *, struct termios *));
static void rpstart __P((struct tty *));
static void rpstop __P((struct tty *, int));
static void rphardclose __P((struct rp_port *));
#define rpmap nomap
#define rpreset noreset
@ -1310,6 +1307,7 @@ rpopen(dev, flag, mode, p)
/* rp->rp_tty = &rp_tty[rp->rp_port];
*/
tp = rp->rp_tty;
dev->si_tty = tp;
oldspl = spltty();
@ -1349,6 +1347,7 @@ rpopen(dev, flag, mode, p)
tp->t_dev = dev;
tp->t_param = rpparam;
tp->t_oproc = rpstart;
tp->t_stop = rpstop;
tp->t_line = 0;
tp->t_termios = IS_CALLOUT(dev) ? rp->it_out : rp->it_in;
flags = 0;
@ -2017,29 +2016,3 @@ rpstop(tp, flag)
splx(spl);
rpstart(tp);
}
int
rpselect(dev, flag, p)
dev_t dev;
int flag;
struct proc *p;
{
return(0);
}
struct tty *
rpdevtotty(dev_t dev)
{
struct rp_port *rp;
int unit, port, mynor, umynor; /* SG */
umynor = (((minor(dev) >> 16) -1) * 32); /* SG */
port = (minor(dev) & 0x1f); /* SG */
mynor = (port + umynor); /* SG */
unit = minor_to_unit[mynor]; /* SG */
if(IS_CONTROL(dev))
return(NULL);
rp = rp_addr(unit) + port;
return(rp->rp_tty);
}

View File

@ -113,6 +113,7 @@ static int si_modem __P((struct si_port *, enum si_mctl, int));
static void si_write_enable __P((struct si_port *, int));
static int si_Sioctl __P((dev_t, u_long, caddr_t, int, struct proc *));
static void si_start __P((struct tty *));
static void si_stop __P((struct tty *, int));
static timeout_t si_lstart;
static void si_disc_optim __P((struct tty *tp, struct termios *t,
struct si_port *pp));
@ -171,8 +172,6 @@ static d_close_t siclose;
static d_read_t siread;
static d_write_t siwrite;
static d_ioctl_t siioctl;
static d_stop_t sistop;
static d_devtotty_t sidevtotty;
#define CDEV_MAJOR 68
static struct cdevsw si_cdevsw = {
@ -181,10 +180,10 @@ static struct cdevsw si_cdevsw = {
/* read */ siread,
/* write */ siwrite,
/* ioctl */ siioctl,
/* stop */ sistop,
/* stop */ nostop,
/* reset */ noreset,
/* devtotty */ sidevtotty,
/* poll */ ttpoll,
/* devtotty */ nodevtotty,
/* poll */ ttypoll,
/* mmap */ nommap,
/* strategy */ nostrategy,
/* name */ "si",
@ -1162,6 +1161,7 @@ siopen(dev, flag, mode, p)
pp = sc->sc_ports + port;
tp = pp->sp_tty; /* the "real" tty */
dev->si_tty = tp;
ccbp = pp->sp_ccb; /* Find control block */
DPRINT((pp, DBG_ENTRY|DBG_OPEN, "siopen(%s,%x,%x,%x)\n",
devtoname(dev), flag, mode, p));
@ -1213,6 +1213,7 @@ siopen(dev, flag, mode, p)
*/
DPRINT((pp, DBG_OPEN, "first open\n"));
tp->t_oproc = si_start;
tp->t_stop = si_stop;
tp->t_param = siparam;
tp->t_dev = dev;
tp->t_termios = mynor & SI_CALLOUT_MASK
@ -1327,7 +1328,7 @@ siclose(dev, flag, mode, p)
pp->sp_state &= ~SS_LSTART;
}
sistop(tp, FREAD | FWRITE);
si_stop(tp, FREAD | FWRITE);
sihardclose(pp);
ttyclose(tp);
@ -1458,21 +1459,6 @@ siwrite(dev, uio, flag)
}
static struct tty *
sidevtotty(dev_t dev)
{
struct si_port *pp;
int mynor = minor(dev);
struct si_softc *sc = &si_softc[SI_CARD(mynor)];
if (IS_SPECIAL(mynor))
return(NULL);
if (SI_PORT(mynor) >= sc->sc_nport)
return(NULL);
pp = MINOR2PP(mynor);
return (pp->sp_tty);
}
static int
siioctl(dev, cmd, data, flag, p)
dev_t dev;
@ -2582,7 +2568,7 @@ si_lstart(void *arg)
* Stop output on a line. called at spltty();
*/
void
sistop(tp, rw)
si_stop(tp, rw)
register struct tty *tp;
int rw;
{
@ -2592,7 +2578,7 @@ sistop(tp, rw)
pp = TP2PP(tp);
ccbp = pp->sp_ccb;
DPRINT((TP2PP(tp), DBG_ENTRY|DBG_STOP, "sistop(%x,%x)\n", tp, rw));
DPRINT((TP2PP(tp), DBG_ENTRY|DBG_STOP, "si_stop(%x,%x)\n", tp, rw));
/* XXX: must check (rw & FWRITE | FREAD) etc flushing... */
if (rw & FWRITE) {

View File

@ -441,13 +441,6 @@ STATIC d_close_t stlclose;
STATIC d_read_t stlread;
STATIC d_write_t stlwrite;
STATIC d_ioctl_t stlioctl;
STATIC d_stop_t stlstop;
#if VFREEBSD >= 220
STATIC d_devtotty_t stldevtotty;
#else
struct tty *stldevtotty(dev_t dev);
#endif
/*
* Internal function prototypes.
@ -458,6 +451,7 @@ static int stl_rawopen(stlport_t *portp);
static int stl_rawclose(stlport_t *portp);
static int stl_param(struct tty *tp, struct termios *tiosp);
static void stl_start(struct tty *tp);
static void stl_stop(struct tty *tp, int);
static void stl_ttyoptim(stlport_t *portp, struct termios *tiosp);
static void stl_dotimeout(void);
static void stl_poll(void *arg);
@ -541,10 +535,10 @@ static struct cdevsw stl_cdevsw = {
/* read */ stlread,
/* write */ stlwrite,
/* ioctl */ stlioctl,
/* stop */ stlstop,
/* stop */ nostop,
/* reset */ noreset,
/* devtotty */ stldevtotty,
/* poll */ ttpoll,
/* devtotty */ nodevtotty,
/* poll */ ttypoll,
/* mmap */ nommap,
/* strategy */ nostrategy,
/* name */ "stl",
@ -783,6 +777,7 @@ STATIC int stlopen(dev_t dev, int flag, int mode, struct proc *p)
if (portp == (stlport_t *) NULL)
return(ENXIO);
tp = &portp->tty;
dev->si_tty = tp;
callout = minor(dev) & STL_CALLOUTDEV;
error = 0;
@ -806,6 +801,7 @@ STATIC int stlopen(dev_t dev, int flag, int mode, struct proc *p)
*/
if ((tp->t_state & TS_ISOPEN) == 0) {
tp->t_oproc = stl_start;
tp->t_stop = stl_stop;
tp->t_param = stl_param;
tp->t_dev = dev;
tp->t_termios = callout ? portp->initouttios :
@ -926,10 +922,10 @@ STATIC int stlread(dev_t dev, struct uio *uiop, int flag)
#if VFREEBSD >= 220
STATIC void stlstop(struct tty *tp, int rw)
STATIC void stl_stop(struct tty *tp, int rw)
{
#if DEBUG
printf("stlstop(tp=%x,rw=%x)\n", (int) tp, rw);
printf("stl_stop(tp=%x,rw=%x)\n", (int) tp, rw);
#endif
stl_flush((stlport_t *) tp, rw);
@ -951,16 +947,6 @@ STATIC int stlstop(struct tty *tp, int rw)
/*****************************************************************************/
STATIC struct tty *stldevtotty(dev_t dev)
{
#if DEBUG
printf("stldevtotty(dev=%s)\n", devtoname(dev));
#endif
return((struct tty *) stl_dev2port(dev));
}
/*****************************************************************************/
STATIC int stlwrite(dev_t dev, struct uio *uiop, int flag)
{
stlport_t *portp;

View File

@ -204,13 +204,12 @@ linux_fcntl(struct proc *p, struct linux_fcntl_args *args)
struct vnode *vp;
long pgid;
struct pgrp *pgrp;
struct tty *tp, *(*d_tty) __P((dev_t));
struct tty *tp;
caddr_t sg;
dev_t dev;
sg = stackgap_init();
bsd_flock = (struct flock *)stackgap_alloc(&sg, sizeof(struct flock));
d_tty = NULL;
#ifdef DEBUG
printf("Linux-emul(%d): fcntl(%d, %08x, *)\n",
@ -309,8 +308,10 @@ linux_fcntl(struct proc *p, struct linux_fcntl_args *args)
dev = vn_todev(vp);
if (vp->v_type != VCHR || dev == NODEV)
return EINVAL;
d_tty = devsw(dev)->d_devtotty;
if (!d_tty || (!(tp = (*d_tty)(dev))))
if (!(devsw(dev)->d_flags & D_TTY))
return EINVAL;
tp = dev->si_tty;
if (!tp)
return EINVAL;
if (args->cmd == LINUX_F_GETOWN) {
p->p_retval[0] = tp->t_pgrp ? tp->t_pgrp->pg_id : NO_PID;

View File

@ -307,6 +307,7 @@ static int sioprobe __P((device_t dev));
static void siosettimeout __P((void));
static int siosetwater __P((struct com_s *com, speed_t speed));
static void comstart __P((struct tty *tp));
static void comstop __P((struct tty *tp, int rw));
static timeout_t comwakeup;
static void disc_optim __P((struct tty *tp, struct termios *t,
struct com_s *com));
@ -338,8 +339,6 @@ static d_close_t sioclose;
static d_read_t sioread;
static d_write_t siowrite;
static d_ioctl_t sioioctl;
static d_stop_t siostop;
static d_devtotty_t siodevtotty;
#define CDEV_MAJOR 28
static struct cdevsw sio_cdevsw = {
@ -348,10 +347,10 @@ static struct cdevsw sio_cdevsw = {
/* read */ sioread,
/* write */ siowrite,
/* ioctl */ sioioctl,
/* stop */ siostop,
/* stop */ nostop,
/* reset */ noreset,
/* devtotty */ siodevtotty,
/* poll */ ttpoll,
/* devtotty */ nodevtotty,
/* poll */ ttypoll,
/* mmap */ nommap,
/* strategy */ nostrategy,
/* name */ driver_name,
@ -1210,6 +1209,7 @@ sioopen(dev, flag, mode, p)
*/
tp->t_oproc = comstart;
tp->t_param = comparam;
tp->t_stop = comstop;
tp->t_dev = dev;
tp->t_termios = mynor & CALLOUT_MASK
? com->it_out : com->it_in;
@ -1336,7 +1336,7 @@ sioclose(dev, flag, mode, p)
s = spltty();
(*linesw[tp->t_line].l_close)(tp, flag);
disc_optim(tp, &tp->t_termios, com);
siostop(tp, FREAD | FWRITE);
comstop(tp, FREAD | FWRITE);
comhardclose(com);
ttyclose(tp);
siosettimeout();
@ -2375,7 +2375,7 @@ comstart(tp)
}
static void
siostop(tp, rw)
comstop(tp, rw)
struct tty *tp;
int rw;
{
@ -2415,22 +2415,6 @@ siostop(tp, rw)
comstart(tp);
}
static struct tty *
siodevtotty(dev)
dev_t dev;
{
int mynor;
int unit;
mynor = minor(dev);
if (mynor & CONTROL_MASK)
return (NULL);
unit = MINOR_TO_UNIT(mynor);
if ((u_int) unit >= NSIOTOT)
return (NULL);
return (dev->si_tty);
}
static int
commctl(com, bits, how)
struct com_s *com;

View File

@ -422,12 +422,7 @@ ttyinput(c, tp)
if (CCEQ(cc[VSTOP], c)) {
if (!ISSET(tp->t_state, TS_TTSTOP)) {
SET(tp->t_state, TS_TTSTOP);
#ifdef sun4c /* XXX */
(*tp->t_stop)(tp, 0);
#else
(*devsw(tp->t_dev)->d_stop)(tp,
0);
#endif
return (0);
}
if (!CCEQ(cc[VSTART], c))
@ -999,11 +994,7 @@ ttioctl(tp, cmd, data, flag)
s = spltty();
if (!ISSET(tp->t_state, TS_TTSTOP)) {
SET(tp->t_state, TS_TTSTOP);
#ifdef sun4c /* XXX */
(*tp->t_stop)(tp, 0);
#else
(*devsw(tp->t_dev)->d_stop)(tp, 0);
#endif
}
splx(s);
break;
@ -1062,14 +1053,16 @@ ttioctl(tp, cmd, data, flag)
}
int
ttypoll(tp, events, p)
struct tty *tp;
ttypoll(dev, events, p)
dev_t dev;
int events;
struct proc *p;
{
int s;
int revents = 0;
struct tty *tp;
tp = dev->si_tty;
if (tp == NULL) /* XXX used to return ENXIO, but that means true! */
return ((events & (POLLIN | POLLOUT | POLLRDNORM | POLLWRNORM))
| POLLHUP);
@ -1093,19 +1086,6 @@ ttypoll(tp, events, p)
return (revents);
}
/*
* This is a wrapper for compatibility with the select vector used by
* cdevsw. It relies on a proper xxxdevtotty routine.
*/
int
ttpoll(dev, events, p)
dev_t dev;
int events;
struct proc *p;
{
return ttypoll((*devsw(dev)->d_devtotty)(dev), events, p);
}
/*
* Must be called at spltty().
*/
@ -1192,11 +1172,7 @@ ttyflush(tp, rw)
FLUSHQ(&tp->t_outq);
CLR(tp->t_state, TS_TTSTOP);
}
#ifdef sun4c /* XXX */
(*tp->t_stop)(tp, rw);
#else
(*devsw(tp->t_dev)->d_stop)(tp, rw);
#endif
if (rw & FREAD) {
FLUSHQ(&tp->t_canq);
FLUSHQ(&tp->t_rawq);
@ -1377,11 +1353,7 @@ ttymodem(tp, flag)
} else if (!ISSET(tp->t_state, TS_CAR_OFLOW)) {
SET(tp->t_state, TS_CAR_OFLOW);
SET(tp->t_state, TS_TTSTOP);
#ifdef sun4c /* XXX */
(*tp->t_stop)(tp, 0);
#else
(*devsw(tp->t_dev)->d_stop)(tp, 0);
#endif
}
} else if (flag == 0) {
/*

View File

@ -100,7 +100,6 @@ static u_char cn_phys_is_open; /* nonzero if physical device is open */
static d_close_t *cn_phys_close; /* physical device close function */
static d_open_t *cn_phys_open; /* physical device open function */
struct consdev *cn_tab; /* physical console device info */
static struct tty *cn_tp; /* physical console tty struct */
static dev_t condev_t; /* represents the device private info */
CONS_DRIVER(cons, NULL, NULL, NULL, NULL, NULL, NULL);
@ -175,7 +174,6 @@ cninit_finish()
cdp->d_close = cnclose;
cn_phys_open = cdp->d_open;
cdp->d_open = cnopen;
cn_tp = (*cdp->d_devtotty)(cn_tab->cn_dev);
cn_dev_t = cn_tab->cn_dev;
cn_udev_t = dev2udev(cn_dev_t);
}
@ -196,7 +194,6 @@ cnuninit(void)
cn_phys_close = NULL;
cdp->d_open = cn_phys_open;
cn_phys_open = NULL;
cn_tp = NULL;
cn_dev_t = NODEV;
cn_udev_t = NOUDEV;
}
@ -281,6 +278,7 @@ cnopen(dev, flag, mode, p)
openflag = flag;
cn_is_open = 1;
}
dev->si_tty = physdev->si_tty;
}
return (retval);
}
@ -292,10 +290,12 @@ cnclose(dev, flag, mode, p)
struct proc *p;
{
dev_t cndev;
struct tty *cn_tp;
if (cn_tab == NULL)
return (0);
cndev = cn_tab->cn_dev;
cn_tp = cndev->si_tty;
/*
* act appropriatly depending on whether it's /dev/console
* or the pysical device (e.g. /dev/sio) that's being closed.

View File

@ -58,6 +58,7 @@
MALLOC_DEFINE(M_PTY, "ptys", "pty data structures");
static void ptsstart __P((struct tty *tp));
static void ptsstop __P((struct tty *tp, int rw));
static void ptcwakeup __P((struct tty *tp, int flag));
static void ptyinit __P((int n));
@ -66,8 +67,6 @@ static d_close_t ptsclose;
static d_read_t ptsread;
static d_write_t ptswrite;
static d_ioctl_t ptyioctl;
static d_stop_t ptsstop;
static d_devtotty_t ptydevtotty;
static d_open_t ptcopen;
static d_close_t ptcclose;
static d_read_t ptcread;
@ -81,10 +80,10 @@ static struct cdevsw pts_cdevsw = {
/* read */ ptsread,
/* write */ ptswrite,
/* ioctl */ ptyioctl,
/* stop */ ptsstop,
/* stop */ nostop,
/* reset */ noreset,
/* devtotty */ ptydevtotty,
/* poll */ ttpoll,
/* devtotty */ nodevtotty,
/* poll */ ttypoll,
/* mmap */ nommap,
/* strategy */ nostrategy,
/* name */ "pts",
@ -106,7 +105,7 @@ static struct cdevsw ptc_cdevsw = {
/* ioctl */ ptyioctl,
/* stop */ nostop,
/* reset */ noreset,
/* devtotty */ ptydevtotty,
/* devtotty */ nodevtotty,
/* poll */ ptcpoll,
/* mmap */ nommap,
/* strategy */ nostrategy,
@ -362,6 +361,7 @@ ptcopen(dev, flag, devtype, p)
if (tp->t_oproc)
return (EIO);
tp->t_oproc = ptsstart;
tp->t_stop = ptsstop;
(void)(*linesw[tp->t_line].l_modem)(tp, 1);
tp->t_lflag &= ~EXTPROC;
pti = dev->si_drv1;
@ -647,16 +647,6 @@ ptcwrite(dev, uio, flag)
goto again;
}
static struct tty *
ptydevtotty(dev)
dev_t dev;
{
if (minor(dev) & ~0xff)
return (NULL);
return dev->si_tty;
}
/*ARGSUSED*/
static int
ptyioctl(dev, cmd, data, flag, p)

View File

@ -82,9 +82,9 @@ snpdevtotty (dev)
struct cdevsw *cdp;
cdp = devsw(dev);
if (cdp == NULL)
return (NULL);
return ((*cdp->d_devtotty)(dev));
if (cdp && cdp->d_flags & D_TTY)
return (dev->si_tty);
return (NULL);
}
#define SNP_INPUT_BUF 5 /* This is even too much,the maximal

View File

@ -46,6 +46,7 @@
#include <sys/fcntl.h>
#include <sys/disklabel.h>
#include <sys/vmmeter.h>
#include <sys/tty.h>
#include <vm/vm.h>
#include <vm/vm_prot.h>
@ -167,15 +168,16 @@ spec_open(ap)
if (vp->v_mount && (vp->v_mount->mnt_flag & MNT_NODEV))
return (ENXIO);
dsw = devsw(dev);
if ( (dsw == NULL) || (dsw->d_open == NULL))
return ENXIO;
/* Make this field valid before any I/O in ->d_open */
if (!dev->si_iosize_max)
dev->si_iosize_max = DFLTPHYS;
switch (vp->v_type) {
case VCHR:
dsw = devsw(dev);
if ( (dsw == NULL) || (dsw->d_open == NULL))
return ENXIO;
if (ap->a_cred != FSCRED && (ap->a_mode & FWRITE)) {
/*
* When running in very secure mode, do not allow
@ -208,9 +210,6 @@ spec_open(ap)
vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, p);
break;
case VBLK:
dsw = devsw(dev);
if ( (dsw == NULL) || (dsw->d_open == NULL))
return ENXIO;
/*
* When running in very secure mode, do not allow
* opens for writing of any disk block devices.
@ -230,10 +229,26 @@ spec_open(ap)
error = (*dsw->d_open)(dev, ap->a_mode, S_IFBLK, p);
break;
default:
error = 0;
error = ENXIO;
break;
}
if (error)
return (error);
if (dsw->d_flags & D_TTY) {
if (!dev->si_tty) {
printf("Warning:%s: no si_tty\n", devtoname(dev));
} else {
struct tty *tp;
tp = dev->si_tty;
if (!tp->t_stop) {
printf("Warning:%s: no t_stop, using nostop\n", devtoname(dev));
tp->t_stop = nostop;
}
}
}
if (vn_isdisk(vp)) {
if (!dev->si_bsize_phys)
dev->si_bsize_phys = DEV_BSIZE;

View File

@ -896,7 +896,7 @@ pppinput(c, tp)
if (c == tp->t_cc[VSTOP] && tp->t_cc[VSTOP] != _POSIX_VDISABLE) {
if ((tp->t_state & TS_TTSTOP) == 0) {
tp->t_state |= TS_TTSTOP;
(*devsw(tp->t_dev)->d_stop)(tp, 0);
tp->t_stop(tp, 0);
}
return 0;
}

View File

@ -253,7 +253,7 @@
*
* The following com and tty flags correspond closely:
* CS_BUSY = TS_BUSY (maintained by comstart(), siopoll() and
* siostop())
* comstop())
* CS_TTGO = ~TS_TTSTOP (maintained by comparam() and comstart())
* CS_CTS_OFLOW = CCTS_OFLOW (maintained by comparam())
* CS_RTS_IFLOW = CRTS_IFLOW (maintained by comparam())
@ -427,6 +427,7 @@ static int sioprobe __P((device_t dev));
static void siosettimeout __P((void));
static int siosetwater __P((struct com_s *com, speed_t speed));
static void comstart __P((struct tty *tp));
static void comstop __P((struct tty *tp, int rw));
static timeout_t comwakeup;
static void disc_optim __P((struct tty *tp, struct termios *t,
struct com_s *com));
@ -458,8 +459,6 @@ static d_close_t sioclose;
static d_read_t sioread;
static d_write_t siowrite;
static d_ioctl_t sioioctl;
static d_stop_t siostop;
static d_devtotty_t siodevtotty;
#define CDEV_MAJOR 28
static struct cdevsw sio_cdevsw = {
@ -468,10 +467,10 @@ static struct cdevsw sio_cdevsw = {
/* read */ sioread,
/* write */ siowrite,
/* ioctl */ sioioctl,
/* stop */ siostop,
/* stop */ nostop,
/* reset */ noreset,
/* devtotty */ siodevtotty,
/* poll */ ttpoll,
/* devtotty */ nodevtotty,
/* poll */ ttypoll,
/* mmap */ nommap,
/* strategy */ nostrategy,
/* name */ driver_name,
@ -1946,6 +1945,7 @@ sioopen(dev, flag, mode, p)
* callout, and to complete a callin open after DCD rises.
*/
tp->t_oproc = comstart;
tp->t_stop = comstop;
tp->t_param = comparam;
tp->t_dev = dev;
tp->t_termios = mynor & CALLOUT_MASK
@ -2127,7 +2127,7 @@ sioclose(dev, flag, mode, p)
com->modem_checking = 0;
#endif
disc_optim(tp, &tp->t_termios, com);
siostop(tp, FREAD | FWRITE);
comstop(tp, FREAD | FWRITE);
comhardclose(com);
ttyclose(tp);
siosettimeout();
@ -3612,7 +3612,7 @@ comstart(tp)
}
static void
siostop(tp, rw)
comstop(tp, rw)
struct tty *tp;
int rw;
{
@ -3678,22 +3678,6 @@ siostop(tp, rw)
comstart(tp);
}
static struct tty *
siodevtotty(dev)
dev_t dev;
{
int mynor;
int unit;
mynor = minor(dev);
if (mynor & CONTROL_MASK)
return (NULL);
unit = MINOR_TO_UNIT(mynor);
if ((u_int) unit >= NSIOTOT)
return (NULL);
return (dev->si_tty);
}
static int
commctl(com, bits, how)
struct com_s *com;

View File

@ -253,7 +253,7 @@
*
* The following com and tty flags correspond closely:
* CS_BUSY = TS_BUSY (maintained by comstart(), siopoll() and
* siostop())
* comstop())
* CS_TTGO = ~TS_TTSTOP (maintained by comparam() and comstart())
* CS_CTS_OFLOW = CCTS_OFLOW (maintained by comparam())
* CS_RTS_IFLOW = CRTS_IFLOW (maintained by comparam())
@ -427,6 +427,7 @@ static int sioprobe __P((device_t dev));
static void siosettimeout __P((void));
static int siosetwater __P((struct com_s *com, speed_t speed));
static void comstart __P((struct tty *tp));
static void comstop __P((struct tty *tp, int rw));
static timeout_t comwakeup;
static void disc_optim __P((struct tty *tp, struct termios *t,
struct com_s *com));
@ -458,8 +459,6 @@ static d_close_t sioclose;
static d_read_t sioread;
static d_write_t siowrite;
static d_ioctl_t sioioctl;
static d_stop_t siostop;
static d_devtotty_t siodevtotty;
#define CDEV_MAJOR 28
static struct cdevsw sio_cdevsw = {
@ -468,10 +467,10 @@ static struct cdevsw sio_cdevsw = {
/* read */ sioread,
/* write */ siowrite,
/* ioctl */ sioioctl,
/* stop */ siostop,
/* stop */ nostop,
/* reset */ noreset,
/* devtotty */ siodevtotty,
/* poll */ ttpoll,
/* devtotty */ nodevtotty,
/* poll */ ttypoll,
/* mmap */ nommap,
/* strategy */ nostrategy,
/* name */ driver_name,
@ -1946,6 +1945,7 @@ sioopen(dev, flag, mode, p)
* callout, and to complete a callin open after DCD rises.
*/
tp->t_oproc = comstart;
tp->t_stop = comstop;
tp->t_param = comparam;
tp->t_dev = dev;
tp->t_termios = mynor & CALLOUT_MASK
@ -2127,7 +2127,7 @@ sioclose(dev, flag, mode, p)
com->modem_checking = 0;
#endif
disc_optim(tp, &tp->t_termios, com);
siostop(tp, FREAD | FWRITE);
comstop(tp, FREAD | FWRITE);
comhardclose(com);
ttyclose(tp);
siosettimeout();
@ -3612,7 +3612,7 @@ comstart(tp)
}
static void
siostop(tp, rw)
comstop(tp, rw)
struct tty *tp;
int rw;
{
@ -3678,22 +3678,6 @@ siostop(tp, rw)
comstart(tp);
}
static struct tty *
siodevtotty(dev)
dev_t dev;
{
int mynor;
int unit;
mynor = minor(dev);
if (mynor & CONTROL_MASK)
return (NULL);
unit = MINOR_TO_UNIT(mynor);
if ((u_int) unit >= NSIOTOT)
return (NULL);
return (dev->si_tty);
}
static int
commctl(com, bits, how)
struct com_s *com;

View File

@ -216,8 +216,8 @@ static struct cdevsw sc_cdevsw = {
/* ioctl */ scioctl,
/* stop */ nostop,
/* reset */ noreset,
/* devtotty */ scdevtotty,
/* poll */ ttpoll,
/* devtotty */ nodevtotty,
/* poll */ ttypoll,
/* mmap */ scmmap,
/* strategy */ nostrategy,
/* name */ "sc",
@ -437,13 +437,6 @@ sc_resume_unit(int unit)
return 0;
}
struct tty
*scdevtotty(dev_t dev)
{
return (dev->si_tty);
}
static int
scdevtounit(dev_t dev)
{
@ -531,7 +524,7 @@ scopen(dev_t dev, int flag, int mode, struct proc *p)
int
scclose(dev_t dev, int flag, int mode, struct proc *p)
{
struct tty *tp = scdevtotty(dev);
struct tty *tp = dev->si_tty;
struct scr_stat *scp;
int s;
@ -586,7 +579,7 @@ scclose(dev_t dev, int flag, int mode, struct proc *p)
int
scread(dev_t dev, struct uio *uio, int flag)
{
struct tty *tp = scdevtotty(dev);
struct tty *tp = dev->si_tty;
sc_touch_scrn_saver();
return((*linesw[tp->t_line].l_read)(tp, uio, flag));
@ -595,7 +588,7 @@ scread(dev_t dev, struct uio *uio, int flag)
int
scwrite(dev_t dev, struct uio *uio, int flag)
{
struct tty *tp = scdevtotty(dev);
struct tty *tp = dev->si_tty;
return((*linesw[tp->t_line].l_write)(tp, uio, flag));
}
@ -689,7 +682,7 @@ scioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p)
scr_stat *scp;
int s;
tp = scdevtotty(dev);
tp = dev->si_tty;
/* If there is a user_ioctl function call that first */
if (sc_user_ioctl) {

View File

@ -169,9 +169,9 @@ struct cdevsw {
d_read_t *d_read;
d_write_t *d_write;
d_ioctl_t *d_ioctl;
d_stop_t *d_stop;
d_stop_t *d_bogostop;
d_reset_t *d_bogoreset; /* XXX not used */
d_devtotty_t *d_devtotty;
d_devtotty_t *d_bogodevtotty; /* XXX not used */
d_poll_t *d_poll;
d_mmap_t *d_mmap;
d_strategy_t *d_strategy;

View File

@ -169,9 +169,9 @@ struct cdevsw {
d_read_t *d_read;
d_write_t *d_write;
d_ioctl_t *d_ioctl;
d_stop_t *d_stop;
d_stop_t *d_bogostop;
d_reset_t *d_bogoreset; /* XXX not used */
d_devtotty_t *d_devtotty;
d_devtotty_t *d_bogodevtotty; /* XXX not used */
d_poll_t *d_poll;
d_mmap_t *d_mmap;
d_strategy_t *d_strategy;

View File

@ -247,8 +247,7 @@ int tputchar __P((int c, struct tty *tp));
int ttioctl __P((struct tty *tp, u_long com, void *data, int flag));
int ttread __P((struct tty *tp, struct uio *uio, int flag));
void ttrstrt __P((void *tp));
int ttypoll __P((struct tty *tp, int events, struct proc *p));
int ttpoll __P((dev_t dev, int events, struct proc *p));
int ttypoll __P((dev_t dev, int events, struct proc *p));
void ttsetwater __P((struct tty *tp));
int ttspeedtab __P((int speed, struct speedtab *table));
int ttstart __P((struct tty *tp));