diff options
author | Julian Elischer <julian@FreeBSD.org> | 1995-12-08 11:19:42 +0000 |
---|---|---|
committer | Julian Elischer <julian@FreeBSD.org> | 1995-12-08 11:19:42 +0000 |
commit | 87f6c6625d5a4889540cb77c8296e456b7d1390b (patch) | |
tree | 5150d199464d64c1021f91b2c2f112d48546a8bf /sys/dev/si | |
parent | 0b7a315970685222e8ccbcdf3d645d35650cd03e (diff) | |
download | src-87f6c6625d5a4889540cb77c8296e456b7d1390b.tar.gz src-87f6c6625d5a4889540cb77c8296e456b7d1390b.zip |
Pass 3 of the great devsw changes
most devsw referenced functions are now static, as they are
in the same file as their devsw structure. I've also added DEVFS
support for nearly every device in the system, however
many of the devices have 'incorrect' names under DEVFS
because I couldn't quickly work out the correct naming conventions.
(but devfs won't be coming on line for a month or so anyhow so that doesn't
matter)
If you "OWN" a device which would normally have an entry in /dev
then search for the devfs_add_devsw() entries and munge to make them right..
check out similar devices to see what I might have done in them in you
can't see what's going on..
for a laugh compare conf.c conf.h defore and after... :)
I have not doen DEVFS entries for any DISKSLICE devices yet as that will be
a much more complicated job.. (pass 5 :)
pass 4 will be to make the devsw tables of type (cdevsw * )
rather than (cdevsw)
seems to work here..
complaints to the usual places.. :)
Notes
Notes:
svn path=/head/; revision=12675
Diffstat (limited to 'sys/dev/si')
-rw-r--r-- | sys/dev/si/si.c | 113 |
1 files changed, 73 insertions, 40 deletions
diff --git a/sys/dev/si/si.c b/sys/dev/si/si.c index 1b732d90af05..cc1d6a746337 100644 --- a/sys/dev/si/si.c +++ b/sys/dev/si/si.c @@ -30,7 +30,7 @@ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN * NO EVENT SHALL THE AUTHORS BE LIABLE. * - * $Id: si.c,v 1.21 1995/12/06 23:50:27 bde Exp $ + * $Id: si.c,v 1.22 1995/12/07 12:46:06 davidg Exp $ */ #ifndef lint @@ -53,6 +53,9 @@ static char si_copyright1[] = "@(#) (C) Specialix International, 1990,1992", #include <sys/syslog.h> #include <sys/malloc.h> #include <sys/devconf.h> +#ifdef DEVFS +#include <sys/devfsext.h> +#endif /*DEVFS*/ #include <machine/clock.h> @@ -84,12 +87,8 @@ static char si_copyright1[] = "@(#) (C) Specialix International, 1990,1992", enum si_mctl { GET, SET, BIS, BIC }; -#ifdef JREMOD -#ifdef DEVFS -#include <sys/devfsext.h> -#endif /*DEVFS*/ -#define CDEV_MAJOR 68 -#endif /*JREMOD*/ +static const char devchar[] = "ABCDEFGHIJK"; +static const char portchar[] = "0123456789abcdefghijklmnopqrstuvwxyz"; static void si_command __P((struct si_port *, int, int)); @@ -110,6 +109,25 @@ extern int siprobe __P((struct isa_device *id)); extern int siattach __P((struct isa_device *id)); static void si_modem_state __P((struct si_port *pp, struct tty *tp, int hi_ip)); +struct isa_driver sidriver = + { siprobe, siattach, "si" }; + + +static d_open_t siopen; +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_ttycv_t sidevtotty; + +#define CDEV_MAJOR 68 +struct cdevsw si_cdevsw = + { siopen, siclose, siread, siwrite, /*68*/ + siioctl, sistop, nxreset, sidevtotty,/* si */ + ttselect, nxmmap, NULL, "si", NULL, -1 }; + + #ifdef SI_DEBUG /* use: ``options "SI_DEBUG"'' in your config file */ /* XXX: should be varargs, I know.. but where's vprintf()? */ static void si_dprintf __P((/* struct si_port *pp, int flags, char *str, int a1, int a2, int a3, int a4, int a5, int a6 */)); @@ -142,6 +160,16 @@ struct si_softc { int sc_eisa_iobase; /* EISA io port address */ int sc_eisa_irqbits; struct kern_devconf sc_kdc; +#ifdef DEVFS + struct { + void *ttyd; + void *ttyl; + void *ttyi; + void *cuaa; + void *cual; + void *cuai; + } devfs_token[32]; /* what is the max per card? */ +#endif }; struct si_softc si_softc[NSI]; /* up to 4 elements */ @@ -460,6 +488,7 @@ siattach(id) struct speedtab *spt; int nmodule, nport, x, y; int uart_type; + char name[32]; DPRINT((0, DBG_AUTOBOOT, "si%d: siattach\n", id->id_unit)); @@ -663,14 +692,39 @@ mem_fail: done_chartimes = 1; } +#ifdef DEVFS +/* path name devsw minor type uid gid perm*/ + for ( x = 0; x < nport; x++ ) { + sprintf(name,"tty%c%c",devchar[unit],portchar[x + 1]); + sc->devfs_token[x].ttyd = devfs_add_devsw( + "/", name, &si_cdevsw, unit, + DV_CHR, 0, 0, 0600); + sprintf(name,"ttyi%c%c",devchar[unit],portchar[x + 1]); + sc->devfs_token[x].ttyi = devfs_add_devsw( + "/", name, &si_cdevsw, unit + 32, + DV_CHR, 0, 0, 0600); + sprintf(name,"ttyl%c%c",devchar[unit],portchar[x + 1]); + sc->devfs_token[x].ttyl = devfs_add_devsw( + "/", name, &si_cdevsw, unit + 64, + DV_CHR, 0, 0, 0600); + sprintf(name,"cua%c%c",devchar[unit],portchar[x + 1]); + sc->devfs_token[x].cuaa = devfs_add_devsw( + "/", name, &si_cdevsw, unit + 128, + DV_CHR, 0, 0, 0600); + sprintf(name,"cuai%c%c",devchar[unit],portchar[x + 1]); + sc->devfs_token[x].cuai = devfs_add_devsw( + "/", name, &si_cdevsw, unit + 160, + DV_CHR, 0, 0, 0600); + sprintf(name,"cual%c%c",devchar[unit],portchar[x + 1]); + sc->devfs_token[x].cual = devfs_add_devsw( + "/", name, &si_cdevsw, unit + 192, + DV_CHR, 0, 0, 0600); + } +#endif return (1); } -struct isa_driver sidriver = - { siprobe, siattach, "si" }; - - -int +static int siopen(dev, flag, mode, p) dev_t dev; int flag, mode; @@ -841,7 +895,7 @@ out: return(error); } -int +static int siclose(dev, flag, mode, p) dev_t dev; int flag, mode; @@ -961,7 +1015,7 @@ sidtrwakeup(chan) /* * User level stuff - read and write */ -int +static int siread(dev, uio, flag) register dev_t dev; struct uio *uio; @@ -981,7 +1035,7 @@ siread(dev, uio, flag) } -int +static int siwrite(dev, uio, flag) dev_t dev; struct uio *uio; @@ -1020,7 +1074,7 @@ out: } -struct tty * +static struct tty * sidevtotty(dev_t dev) { struct si_port *pp; @@ -1035,7 +1089,7 @@ sidevtotty(dev_t dev) return (pp->sp_tty); } -int +static int siioctl(dev, cmd, data, flag, p) dev_t dev; int cmd; @@ -2305,40 +2359,19 @@ si_mctl2str(cmd) #endif /* DEBUG */ -#ifdef JREMOD -struct cdevsw si_cdevsw = - { siopen, siclose, siread, siwrite, /*68*/ - siioctl, sistop, nxreset, sidevtotty,/* si */ - ttselect, nxmmap, NULL }; static si_devsw_installed = 0; static void si_drvinit(void *unused) { dev_t dev; - dev_t dev_chr; if( ! si_devsw_installed ) { - dev = makedev(CDEV_MAJOR,0); - cdevsw_add(&dev,&si_cdevsw,NULL); - dev_chr = dev; -#if defined(BDEV_MAJOR) - dev = makedev(BDEV_MAJOR,0); - bdevsw_add(&dev,&si_bdevsw,NULL); -#endif /*BDEV_MAJOR*/ + dev = makedev(CDEV_MAJOR, 0); + cdevsw_add(&dev,&si_cdevsw, NULL); si_devsw_installed = 1; -#ifdef DEVFS - { - int x; -/* default for a simple device with no probe routine (usually delete this) */ - x=devfs_add_devsw( -/* path name devsw minor type uid gid perm*/ - "/", "si", major(dev_chr), 0, DV_CHR, 0, 0, 0600); - } -#endif } } SYSINIT(sidev,SI_SUB_DRIVERS,SI_ORDER_MIDDLE+CDEV_MAJOR,si_drvinit,NULL) -#endif /* JREMOD */ |