diff options
author | bde <bde@FreeBSD.org> | 1998-08-12 17:38:09 +0000 |
---|---|---|
committer | bde <bde@FreeBSD.org> | 1998-08-12 17:38:09 +0000 |
commit | 8f2e632f8e6849466312b0b042ed5d185cb58749 (patch) | |
tree | 364d3ac8e0a526977e94edb6af50c117224f1275 | |
parent | aa85f8375f0e96c291c705a9c3c0fbf4443ef95a (diff) | |
download | FreeBSD-src-8f2e632f8e6849466312b0b042ed5d185cb58749.zip FreeBSD-src-8f2e632f8e6849466312b0b042ed5d185cb58749.tar.gz |
Synced with dgb.c. Important changes from 1.29 (ioctl handling
was broken), 1.30 (COMPAT_43 option header was missing), 1.31 (DEVFS
option header was missing), 1.33 (garbage pointers were followed
in debugging code). Cosmetic changes from 1.27, 1.32, 1.36, 1.37.
Of course, the DEVFS code didn't even compile. Fixed. Not tested.
Forgotten by: brian
This file should not exist. It is the same as dgb.c except for lots of
renamed variables, about 250 lines removed, and only about 100 lines of
real differences.
-rw-r--r-- | sys/dev/dgb/dgm.c | 79 | ||||
-rw-r--r-- | sys/gnu/i386/isa/dgm.c | 79 |
2 files changed, 54 insertions, 104 deletions
diff --git a/sys/dev/dgb/dgm.c b/sys/dev/dgb/dgm.c index b90acd5..c10e403 100644 --- a/sys/dev/dgb/dgm.c +++ b/sys/dev/dgb/dgm.c @@ -1,5 +1,5 @@ /*- - * $Id$ + * $Id: dgm.c,v 1.2 1998/08/05 20:19:03 brian Exp $ * * This driver and the associated header files support the ISA PC/Xem * Digiboards. Its evolutionary roots are described below. @@ -31,6 +31,9 @@ * David L. Nugent <davidn@blaze.net.au> */ +#include "opt_compat.h" +#include "opt_devfs.h" + #include "dgm.h" #if NDGM > 0 @@ -49,17 +52,13 @@ #include <sys/param.h> #include <sys/systm.h> -#include <sys/reboot.h> #include <sys/tty.h> #include <sys/proc.h> #include <sys/conf.h> #include <sys/dkstat.h> #include <sys/fcntl.h> -#include <sys/uio.h> #include <sys/kernel.h> #include <sys/sysctl.h> -#include <sys/malloc.h> -#include <sys/syslog.h> #ifdef DEVFS #include <sys/devfsext.h> #endif @@ -67,7 +66,6 @@ #include <machine/clock.h> #include <vm/vm.h> -#include <vm/vm_param.h> #include <vm/pmap.h> #include <i386/isa/isa_device.h> @@ -76,12 +74,6 @@ #include <gnu/i386/isa/dgmbios.h> #include <gnu/i386/isa/dgmreg.h> -/* This avoids warnings: we're an isa device only - * so it does not matter... - */ -#undef outb -#define outb outbv - #define CALLOUT_MASK 0x40000 #define CONTROL_MASK 0xC0 #define CONTROL_INIT_STATE 0x40 @@ -177,8 +169,8 @@ struct dgm_softc { u_char unit; /* unit number */ u_char type; /* type of card: PCXE, PCXI, PCXEVE */ u_char altpin; /* do we need alternate pin setting ? */ - ushort numports; /* number of ports on card */ - ushort port; /* I/O port */ + int numports; /* number of ports on card */ + int port; /* I/O port */ u_char *vmem; /* virtual memory address */ long pmem; /* physical memory address */ int mem_seg; /* internal memory segment */ @@ -201,7 +193,6 @@ int fi(void); /* Interrupt handling entry points. */ static void dgmpoll __P((void *unit_c)); -/*static void dgmintr __P((int unit));*/ /* Device switch entry points. */ #define dgmreset noreset @@ -318,18 +309,17 @@ dgmflags(struct dbgflagtbl *tbl, tcflag_t input) } static int dgmdebug=0; -SYSCTL_INT(_debug, OID_AUTO, dgm_debug, CTLFLAG_RW, - &dgmdebug, 0, ""); +SYSCTL_INT(_debug, OID_AUTO, dgm_debug, CTLFLAG_RW, &dgmdebug, 0, ""); -static int setwin __P((struct dgm_softc *sc, unsigned addr)); -static void hidewin __P((struct dgm_softc *sc)); -static void towin __P((struct dgm_softc *sc, int win)); +static __inline int setwin __P((struct dgm_softc *sc, unsigned addr)); +static __inline void hidewin __P((struct dgm_softc *sc)); +static __inline void towin __P((struct dgm_softc *sc, int win)); /*Helg: to allow recursive dgm...() calls */ typedef struct { /* If we were called and don't want to disturb we need: */ - short port, /* write to this port */ - data; /* this data on exit */ + int port; /* write to this port */ + u_char data; /* this data on exit */ /* or DATA_WINOFF to close memory window on entry */ } BoardMemWinState; /* so several channels and even boards can coexist */ #define DATA_WINOFF 0 @@ -404,7 +394,7 @@ dgmprobe(dev) /* left 24 bits only (ISA address) */ sc->pmem=((long)dev->id_maddr & 0xFFFFFF); - DPRINT4(DB_INFO,"dgm%d: port 0x%x mem 0x%x\n",unit,sc->port,sc->pmem); + DPRINT4(DB_INFO,"dgm%d: port 0x%x mem 0x%lx\n",unit,sc->port,sc->pmem); outb(sc->port, FEPRST); sc->status=DISABLED; @@ -719,32 +709,32 @@ dgmattach(dev) port->it_out = port->it_in; #ifdef DEVFS port->devfs_token.tty = - devfs_add_devswf(&dgb_cdevsw, (unit*65536)+i, + devfs_add_devswf(&dgm_cdevsw, (unit*65536)+i, DV_CHR, UID_ROOT, GID_WHEEL, 0600, "ttyM%d%x", unit, i + 0xa0); port->devfs_token.ttyi = - devfs_add_devswf(&dgb_cdevsw, (unit*65536)+i+64, + devfs_add_devswf(&dgm_cdevsw, (unit*65536)+i+64, DV_CHR, UID_ROOT, GID_WHEEL, 0600, "ttyiM%d%x", unit, i + 0xa0); port->devfs_token.ttyl = - devfs_add_devswf(&dgb_cdevsw, (unit*65536)+i+128, + devfs_add_devswf(&dgm_cdevsw, (unit*65536)+i+128, DV_CHR, UID_ROOT, GID_WHEEL, 0600, "ttylM%d%x", unit, i + 0xa0); port->devfs_token.cua = - devfs_add_devswf(&dgb_cdevsw, (unit*65536)+i+262144, + devfs_add_devswf(&dgm_cdevsw, (unit*65536)+i+262144, DV_CHR, UID_UUCP, GID_DIALER, 0660, "cuaM%d%x", unit, i + 0xa0); port->devfs_token.cuai = - devfs_add_devswf(&dgb_cdevsw, (unit*65536)+i+262208, + devfs_add_devswf(&dgm_cdevsw, (unit*65536)+i+262208, DV_CHR, UID_UUCP, GID_DIALER, 0660, "cuaiM%d%x", unit, i + 0xa0); port->devfs_token.cual = - devfs_add_devswf(&dgb_cdevsw, (unit*65536)+i+262272, + devfs_add_devswf(&dgm_cdevsw, (unit*65536)+i+262272, DV_CHR, UID_UUCP, GID_DIALER, 0660, "cualM%d%x", unit, i + 0xa0); #endif @@ -1206,7 +1196,7 @@ dgmpoll(unit_c) ttwakeup(tp); setwin(sc,0); } - end_of_data: + end_of_data: ; } if(event & MODEMCHG_IND) { @@ -1325,7 +1315,7 @@ dgmpoll(unit_c) setwin(sc,0); } } - end_of_buffer: + end_of_buffer: ; } bc->idata=1; /* require event on incoming data */ @@ -1346,15 +1336,6 @@ dgmpoll(unit_c) timeout(dgmpoll, unit_c, hz/POLLSPERSEC); } - -#if 0 -static void -dgmintr(unit) - int unit; -{ -} -#endif - static int dgmioctl(dev, cmd, data, flag, p) dev_t dev; @@ -1480,13 +1461,13 @@ dgmioctl(dev, cmd, data, flag, p) port->mustdrain=1; error = linesw[tp->t_line].l_ioctl(tp, cmd, data, flag, p); - if (error >= 0) + if (error != ENOIOCTL) return error; s = spltty(); error = ttioctl(tp, cmd, data, flag); disc_optim(tp,&tp->t_termios); port->mustdrain=0; - if (error >= 0) { + if (error != ENOIOCTL) { splx(s); if (cmd == TIOCSETA || cmd == TIOCSETAW || cmd == TIOCSETAF) { DPRINT6(DB_PARAM,"dgm%d: port%d: dgmioctl-RES c=0x%x i=0x%x l=0x%x\n",unit,pnum,tp->t_cflag,tp->t_iflag,tp->t_lflag); @@ -1826,9 +1807,8 @@ dgmparam(tp, t) if(cflag!=port->fepcflag) { port->fepcflag=cflag; - DPRINT6(DB_PARAM,"dgm%d: port%d: set cflag=0x%x c=0x%x\n", - unit,pnum,cflag&(FEP_CBAUD|FEP_FASTBAUD),cflag, - t->c_cflag&~CRTSCTS); + DPRINT5(DB_PARAM,"dgm%d: port%d: set cflag=0x%x c=0x%x\n", + unit,pnum,cflag,t->c_cflag&~CRTSCTS); fepcmd(port, SETCTRLFLAGS, (unsigned)cflag, 0, 0, 0); } mval= port->omodem | (DTR|RTS); @@ -1999,8 +1979,6 @@ dgmstop(tp, rw) BoardMemWinState ws=bmws_get(); - DPRINT3(DB_WR,"dgm%d: port%d: stop\n",port->unit, port->pnum); - unit=MINOR_TO_UNIT(minor(tp->t_dev)); pnum=MINOR_TO_PORT(minor(tp->t_dev)); @@ -2008,6 +1986,8 @@ dgmstop(tp, rw) port=&sc->ports[pnum]; bc=port->brdchan; + DPRINT3(DB_WR,"dgm%d: port%d: stop\n",port->unit, port->pnum); + s = spltty(); setwin(sc,0); @@ -2106,11 +2086,6 @@ disc_optim(tp, t) struct tty *tp; struct termios *t; { - /* - * XXX can skip a lot more cases if Smarts. Maybe - * (IGNCR | ISTRIP | IXON) in c_iflag. But perhaps we - * shouldn't skip if (TS_CNTTB | TS_LNCH) is set in t_state. - */ if (!(t->c_iflag & (ICRNL | IGNCR | IMAXBEL | INLCR | ISTRIP | IXON)) && (!(t->c_iflag & BRKINT) || (t->c_iflag & IGNBRK)) && (!(t->c_iflag & PARMRK) diff --git a/sys/gnu/i386/isa/dgm.c b/sys/gnu/i386/isa/dgm.c index b90acd5..c10e403 100644 --- a/sys/gnu/i386/isa/dgm.c +++ b/sys/gnu/i386/isa/dgm.c @@ -1,5 +1,5 @@ /*- - * $Id$ + * $Id: dgm.c,v 1.2 1998/08/05 20:19:03 brian Exp $ * * This driver and the associated header files support the ISA PC/Xem * Digiboards. Its evolutionary roots are described below. @@ -31,6 +31,9 @@ * David L. Nugent <davidn@blaze.net.au> */ +#include "opt_compat.h" +#include "opt_devfs.h" + #include "dgm.h" #if NDGM > 0 @@ -49,17 +52,13 @@ #include <sys/param.h> #include <sys/systm.h> -#include <sys/reboot.h> #include <sys/tty.h> #include <sys/proc.h> #include <sys/conf.h> #include <sys/dkstat.h> #include <sys/fcntl.h> -#include <sys/uio.h> #include <sys/kernel.h> #include <sys/sysctl.h> -#include <sys/malloc.h> -#include <sys/syslog.h> #ifdef DEVFS #include <sys/devfsext.h> #endif @@ -67,7 +66,6 @@ #include <machine/clock.h> #include <vm/vm.h> -#include <vm/vm_param.h> #include <vm/pmap.h> #include <i386/isa/isa_device.h> @@ -76,12 +74,6 @@ #include <gnu/i386/isa/dgmbios.h> #include <gnu/i386/isa/dgmreg.h> -/* This avoids warnings: we're an isa device only - * so it does not matter... - */ -#undef outb -#define outb outbv - #define CALLOUT_MASK 0x40000 #define CONTROL_MASK 0xC0 #define CONTROL_INIT_STATE 0x40 @@ -177,8 +169,8 @@ struct dgm_softc { u_char unit; /* unit number */ u_char type; /* type of card: PCXE, PCXI, PCXEVE */ u_char altpin; /* do we need alternate pin setting ? */ - ushort numports; /* number of ports on card */ - ushort port; /* I/O port */ + int numports; /* number of ports on card */ + int port; /* I/O port */ u_char *vmem; /* virtual memory address */ long pmem; /* physical memory address */ int mem_seg; /* internal memory segment */ @@ -201,7 +193,6 @@ int fi(void); /* Interrupt handling entry points. */ static void dgmpoll __P((void *unit_c)); -/*static void dgmintr __P((int unit));*/ /* Device switch entry points. */ #define dgmreset noreset @@ -318,18 +309,17 @@ dgmflags(struct dbgflagtbl *tbl, tcflag_t input) } static int dgmdebug=0; -SYSCTL_INT(_debug, OID_AUTO, dgm_debug, CTLFLAG_RW, - &dgmdebug, 0, ""); +SYSCTL_INT(_debug, OID_AUTO, dgm_debug, CTLFLAG_RW, &dgmdebug, 0, ""); -static int setwin __P((struct dgm_softc *sc, unsigned addr)); -static void hidewin __P((struct dgm_softc *sc)); -static void towin __P((struct dgm_softc *sc, int win)); +static __inline int setwin __P((struct dgm_softc *sc, unsigned addr)); +static __inline void hidewin __P((struct dgm_softc *sc)); +static __inline void towin __P((struct dgm_softc *sc, int win)); /*Helg: to allow recursive dgm...() calls */ typedef struct { /* If we were called and don't want to disturb we need: */ - short port, /* write to this port */ - data; /* this data on exit */ + int port; /* write to this port */ + u_char data; /* this data on exit */ /* or DATA_WINOFF to close memory window on entry */ } BoardMemWinState; /* so several channels and even boards can coexist */ #define DATA_WINOFF 0 @@ -404,7 +394,7 @@ dgmprobe(dev) /* left 24 bits only (ISA address) */ sc->pmem=((long)dev->id_maddr & 0xFFFFFF); - DPRINT4(DB_INFO,"dgm%d: port 0x%x mem 0x%x\n",unit,sc->port,sc->pmem); + DPRINT4(DB_INFO,"dgm%d: port 0x%x mem 0x%lx\n",unit,sc->port,sc->pmem); outb(sc->port, FEPRST); sc->status=DISABLED; @@ -719,32 +709,32 @@ dgmattach(dev) port->it_out = port->it_in; #ifdef DEVFS port->devfs_token.tty = - devfs_add_devswf(&dgb_cdevsw, (unit*65536)+i, + devfs_add_devswf(&dgm_cdevsw, (unit*65536)+i, DV_CHR, UID_ROOT, GID_WHEEL, 0600, "ttyM%d%x", unit, i + 0xa0); port->devfs_token.ttyi = - devfs_add_devswf(&dgb_cdevsw, (unit*65536)+i+64, + devfs_add_devswf(&dgm_cdevsw, (unit*65536)+i+64, DV_CHR, UID_ROOT, GID_WHEEL, 0600, "ttyiM%d%x", unit, i + 0xa0); port->devfs_token.ttyl = - devfs_add_devswf(&dgb_cdevsw, (unit*65536)+i+128, + devfs_add_devswf(&dgm_cdevsw, (unit*65536)+i+128, DV_CHR, UID_ROOT, GID_WHEEL, 0600, "ttylM%d%x", unit, i + 0xa0); port->devfs_token.cua = - devfs_add_devswf(&dgb_cdevsw, (unit*65536)+i+262144, + devfs_add_devswf(&dgm_cdevsw, (unit*65536)+i+262144, DV_CHR, UID_UUCP, GID_DIALER, 0660, "cuaM%d%x", unit, i + 0xa0); port->devfs_token.cuai = - devfs_add_devswf(&dgb_cdevsw, (unit*65536)+i+262208, + devfs_add_devswf(&dgm_cdevsw, (unit*65536)+i+262208, DV_CHR, UID_UUCP, GID_DIALER, 0660, "cuaiM%d%x", unit, i + 0xa0); port->devfs_token.cual = - devfs_add_devswf(&dgb_cdevsw, (unit*65536)+i+262272, + devfs_add_devswf(&dgm_cdevsw, (unit*65536)+i+262272, DV_CHR, UID_UUCP, GID_DIALER, 0660, "cualM%d%x", unit, i + 0xa0); #endif @@ -1206,7 +1196,7 @@ dgmpoll(unit_c) ttwakeup(tp); setwin(sc,0); } - end_of_data: + end_of_data: ; } if(event & MODEMCHG_IND) { @@ -1325,7 +1315,7 @@ dgmpoll(unit_c) setwin(sc,0); } } - end_of_buffer: + end_of_buffer: ; } bc->idata=1; /* require event on incoming data */ @@ -1346,15 +1336,6 @@ dgmpoll(unit_c) timeout(dgmpoll, unit_c, hz/POLLSPERSEC); } - -#if 0 -static void -dgmintr(unit) - int unit; -{ -} -#endif - static int dgmioctl(dev, cmd, data, flag, p) dev_t dev; @@ -1480,13 +1461,13 @@ dgmioctl(dev, cmd, data, flag, p) port->mustdrain=1; error = linesw[tp->t_line].l_ioctl(tp, cmd, data, flag, p); - if (error >= 0) + if (error != ENOIOCTL) return error; s = spltty(); error = ttioctl(tp, cmd, data, flag); disc_optim(tp,&tp->t_termios); port->mustdrain=0; - if (error >= 0) { + if (error != ENOIOCTL) { splx(s); if (cmd == TIOCSETA || cmd == TIOCSETAW || cmd == TIOCSETAF) { DPRINT6(DB_PARAM,"dgm%d: port%d: dgmioctl-RES c=0x%x i=0x%x l=0x%x\n",unit,pnum,tp->t_cflag,tp->t_iflag,tp->t_lflag); @@ -1826,9 +1807,8 @@ dgmparam(tp, t) if(cflag!=port->fepcflag) { port->fepcflag=cflag; - DPRINT6(DB_PARAM,"dgm%d: port%d: set cflag=0x%x c=0x%x\n", - unit,pnum,cflag&(FEP_CBAUD|FEP_FASTBAUD),cflag, - t->c_cflag&~CRTSCTS); + DPRINT5(DB_PARAM,"dgm%d: port%d: set cflag=0x%x c=0x%x\n", + unit,pnum,cflag,t->c_cflag&~CRTSCTS); fepcmd(port, SETCTRLFLAGS, (unsigned)cflag, 0, 0, 0); } mval= port->omodem | (DTR|RTS); @@ -1999,8 +1979,6 @@ dgmstop(tp, rw) BoardMemWinState ws=bmws_get(); - DPRINT3(DB_WR,"dgm%d: port%d: stop\n",port->unit, port->pnum); - unit=MINOR_TO_UNIT(minor(tp->t_dev)); pnum=MINOR_TO_PORT(minor(tp->t_dev)); @@ -2008,6 +1986,8 @@ dgmstop(tp, rw) port=&sc->ports[pnum]; bc=port->brdchan; + DPRINT3(DB_WR,"dgm%d: port%d: stop\n",port->unit, port->pnum); + s = spltty(); setwin(sc,0); @@ -2106,11 +2086,6 @@ disc_optim(tp, t) struct tty *tp; struct termios *t; { - /* - * XXX can skip a lot more cases if Smarts. Maybe - * (IGNCR | ISTRIP | IXON) in c_iflag. But perhaps we - * shouldn't skip if (TS_CNTTB | TS_LNCH) is set in t_state. - */ if (!(t->c_iflag & (ICRNL | IGNCR | IMAXBEL | INLCR | ISTRIP | IXON)) && (!(t->c_iflag & BRKINT) || (t->c_iflag & IGNBRK)) && (!(t->c_iflag & PARMRK) |