Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. =================================================================== RCS file: /ftp/cvs/cvsroot/src/sys/arch/pc532/dev/Attic/scn.c,v retrieving revision 1.53 retrieving revision 1.54 diff -u -p -r1.53 -r1.54 --- src/sys/arch/pc532/dev/Attic/scn.c 2002/05/25 03:45:12 1.53 +++ src/sys/arch/pc532/dev/Attic/scn.c 2002/09/06 13:18:43 1.54 @@ -1,4 +1,4 @@ -/* $NetBSD: scn.c,v 1.53 2002/05/25 03:45:12 simonb Exp $ */ +/* $NetBSD: scn.c,v 1.54 2002/09/06 13:18:43 gehenna Exp $ */ /* * Copyright (c) 1996, 1997 Philip L. Budne. @@ -64,6 +64,7 @@ #include #include #include +#include #ifdef KGDB #include #endif @@ -71,7 +72,6 @@ #include #include -#include #include "scnreg.h" #include "scnvar.h" @@ -83,8 +83,6 @@ int scnprobe __P((struct device *, s void scnattach __P((struct device *, struct device *, void *)); int scnparam __P((struct tty *, struct termios *)); void scnstart __P((struct tty *)); -int scnopen __P((dev_t, int, int, struct proc *)); -int scnclose __P((dev_t, int, int, struct proc *)); void scncnprobe __P((struct consdev *)); void scncninit __P((struct consdev *)); int scncngetc __P((dev_t)); @@ -98,6 +96,20 @@ struct cfattach scn_ca = {sizeof(struct extern struct cfdriver scn_cd; +dev_type_open(scnopen); +dev_type_close(scnclose); +dev_type_read(scnread); +dev_type_write(scnwrite); +dev_type_ioctl(scnioctl); +dev_type_stop(scnstop); +dev_type_tty(scntty); +dev_type_poll(scnpoll); + +const struct cdevsw scn_cdevsw = { + scnopen, scnclose, scnread, scnwrite, scnioctl, + scnstop, scntty, scnpoll, nommap, D_TTY +}; + #ifndef CONSOLE_SPEED #define CONSOLE_SPEED TTYDEF_SPEED #endif @@ -115,7 +127,6 @@ extern struct cfdriver scn_cd; int scnconsole = SCN_CONSOLE; int scndefaultrate = TTYDEF_SPEED; int scnconsrate = CONSOLE_SPEED; -int scnmajor; #define SOFTC(UNIT) scn_cd.cd_devs[(UNIT)] @@ -989,7 +1000,9 @@ scnattach(parent, self, aux) scn_config(unit, speed, speed, MR1_PNONE | MR1_CS8, MR2_STOP1); if (scnconsole == unit) { - shutdownhook_establish(scncnreinit, (void *) makedev(scnmajor, unit)); + int maj; + maj = cdevsw_lookup_major(&scn_cdevsw); + shutdownhook_establish(scncnreinit, (void *)makedev(maj, unit)); /* Make sure console can do scncngetc */ duart_base[DU_OPSET] = (unit & 1) ? (OP_RTSB | OP_DTRB) : (OP_RTSA | OP_DTRA); } @@ -1008,7 +1021,7 @@ scnattach(parent, self, aux) } #ifdef KGDB - if (kgdb_dev == makedev(scnmajor, unit)) { + if (kgdb_dev == makedev(cdevsw_lookup_major(&scn_cdevsw), unit)) { if (scnconsole == unit) kgdb_dev = NODEV; /* can't debug over console port */ else { @@ -1195,7 +1208,7 @@ scnclose(dev, flag, mode, p) #ifdef KGDB /* do not disable interrupts if debugging */ - if (kgdb_dev != makedev(scnmajor, unit)) + if (kgdb_dev != makedev(cdevsw_lookup_major(&scn_cdevsw), unit)) #endif if ((tp->t_state & TS_ISOPEN) == 0) { scn_rxdisable(sc); @@ -1916,13 +1929,8 @@ void scncnprobe(cp) struct consdev *cp; { - /* Locate the major number. */ - for (scnmajor = 0; scnmajor < nchrdev; scnmajor++) - if (cdevsw[scnmajor].d_open == scnopen) - break; - /* initialize required fields */ - cp->cn_dev = makedev(scnmajor, SCN_CONSOLE); + cp->cn_dev = makedev(cdevsw_lookup_major(&scn_cdevsw), SCN_CONSOLE); cp->cn_pri = CN_NORMAL; }