diff options
Diffstat (limited to 'sys/dev/atkbdc')
-rw-r--r-- | sys/dev/atkbdc/atkbd.c | 113 | ||||
-rw-r--r-- | sys/dev/atkbdc/atkbd_atkbdc.c | 18 | ||||
-rw-r--r-- | sys/dev/atkbdc/atkbd_isa.c | 18 | ||||
-rw-r--r-- | sys/dev/atkbdc/atkbdreg.h | 18 |
4 files changed, 26 insertions, 141 deletions
diff --git a/sys/dev/atkbdc/atkbd.c b/sys/dev/atkbdc/atkbd.c index 8ad4f1f..0d00ee6 100644 --- a/sys/dev/atkbdc/atkbd.c +++ b/sys/dev/atkbdc/atkbd.c @@ -23,7 +23,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: atkbd.c,v 1.12 1999/07/18 06:16:25 yokota Exp $ + * $Id: atkbd.c,v 1.13 1999/08/15 06:06:14 yokota Exp $ */ #include "atkbd.h" @@ -49,45 +49,8 @@ #include <isa/isareg.h> -#define ATKBD_SOFTC(unit) \ - ((atkbd_softc_t *)devclass_get_softc(atkbd_devclass, unit)) - -extern devclass_t atkbd_devclass; - static timeout_t atkbd_timeout; -#ifdef KBD_INSTALL_CDEV - -static d_open_t atkbdopen; -static d_close_t atkbdclose; -static d_read_t atkbdread; -static d_ioctl_t atkbdioctl; -static d_poll_t atkbdpoll; - -static struct cdevsw atkbd_cdevsw = { - /* open */ atkbdopen, - /* close */ atkbdclose, - /* read */ atkbdread, - /* write */ nowrite, - /* ioctl */ atkbdioctl, - /* stop */ nostop, - /* reset */ noreset, - /* devtotty */ nodevtotty, - /* poll */ atkbdpoll, - /* mmap */ nommap, - /* strategy */ nostrategy, - /* name */ ATKBD_DRIVER_NAME, - /* parms */ noparms, - /* maj */ -1, - /* dump */ nodump, - /* psize */ nopsize, - /* flags */ 0, - /* maxio */ 0, - /* bmaj */ -1 -}; - -#endif /* KBD_INSTALL_CDEV */ - int atkbd_probe_unit(int unit, int port, int irq, int flags) { @@ -108,15 +71,12 @@ atkbd_probe_unit(int unit, int port, int irq, int flags) } int -atkbd_attach_unit(int unit, atkbd_softc_t *sc, int port, int irq, int flags) +atkbd_attach_unit(int unit, keyboard_t **kbd, int port, int irq, int flags) { keyboard_switch_t *sw; int args[2]; int error; - if (sc->flags & ATKBD_ATTACHED) - return 0; - sw = kbd_get_switch(ATKBD_DRIVER_NAME); if (sw == NULL) return ENXIO; @@ -124,19 +84,18 @@ atkbd_attach_unit(int unit, atkbd_softc_t *sc, int port, int irq, int flags) /* reset, initialize and enable the device */ args[0] = port; args[1] = irq; - sc->kbd = NULL; + *kbd = NULL; error = (*sw->probe)(unit, args, flags); if (error) return error; - error = (*sw->init)(unit, &sc->kbd, args, flags); + error = (*sw->init)(unit, kbd, args, flags); if (error) return error; - (*sw->enable)(sc->kbd); + (*sw->enable)(*kbd); #ifdef KBD_INSTALL_CDEV /* attach a virtual keyboard cdev */ - error = kbd_attach(makedev(0, ATKBD_MKMINOR(unit)), sc->kbd, - &atkbd_cdevsw); + error = kbd_attach(*kbd); if (error) return error; #endif @@ -145,12 +104,10 @@ atkbd_attach_unit(int unit, atkbd_softc_t *sc, int port, int irq, int flags) * This is a kludge to compensate for lost keyboard interrupts. * A similar code used to be in syscons. See below. XXX */ - atkbd_timeout(sc->kbd); + atkbd_timeout(*kbd); if (bootverbose) - (*sw->diag)(sc->kbd, bootverbose); - - sc->flags |= ATKBD_ATTACHED; + (*sw->diag)(*kbd, bootverbose); return 0; } @@ -192,60 +149,6 @@ atkbd_timeout(void *arg) /* cdev driver functions */ -#ifdef KBD_INSTALL_CDEV - -static int -atkbdopen(dev_t dev, int flag, int mode, struct proc *p) -{ - atkbd_softc_t *sc; - - sc = ATKBD_SOFTC(ATKBD_UNIT(dev)); - if (sc == NULL) - return ENXIO; - if (mode & (FWRITE | O_CREAT | O_APPEND | O_TRUNC)) - return ENODEV; - - /* FIXME: set the initial input mode (K_XLATE?) and lock state? */ - return genkbdopen(&sc->gensc, sc->kbd, flag, mode, p); -} - -static int -atkbdclose(dev_t dev, int flag, int mode, struct proc *p) -{ - atkbd_softc_t *sc; - - sc = ATKBD_SOFTC(ATKBD_UNIT(dev)); - return genkbdclose(&sc->gensc, sc->kbd, flag, mode, p); -} - -static int -atkbdread(dev_t dev, struct uio *uio, int flag) -{ - atkbd_softc_t *sc; - - sc = ATKBD_SOFTC(ATKBD_UNIT(dev)); - return genkbdread(&sc->gensc, sc->kbd, uio, flag); -} - -static int -atkbdioctl(dev_t dev, u_long cmd, caddr_t arg, int flag, struct proc *p) -{ - atkbd_softc_t *sc; - - sc = ATKBD_SOFTC(ATKBD_UNIT(dev)); - return genkbdioctl(&sc->gensc, sc->kbd, cmd, arg, flag, p); -} - -static int -atkbdpoll(dev_t dev, int event, struct proc *p) -{ - atkbd_softc_t *sc; - - sc = ATKBD_SOFTC(ATKBD_UNIT(dev)); - return genkbdpoll(&sc->gensc, sc->kbd, event, p); -} - -#endif /* KBD_INSTALL_CDEV */ /* LOW-LEVEL */ diff --git a/sys/dev/atkbdc/atkbd_atkbdc.c b/sys/dev/atkbdc/atkbd_atkbdc.c index 8942681..a8d6381 100644 --- a/sys/dev/atkbdc/atkbd_atkbdc.c +++ b/sys/dev/atkbdc/atkbd_atkbdc.c @@ -23,7 +23,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: atkbd_isa.c,v 1.3 1999/04/16 21:22:34 peter Exp $ + * $Id: atkbd_isa.c,v 1.4 1999/05/08 21:59:28 dfr Exp $ */ #include "atkbd.h" @@ -64,7 +64,7 @@ static device_method_t atkbd_methods[] = { static driver_t atkbd_driver = { ATKBD_DRIVER_NAME, atkbd_methods, - sizeof(atkbd_softc_t), + 1, }; static int @@ -88,7 +88,7 @@ atkbdprobe(device_t dev) static int atkbdattach(device_t dev) { - atkbd_softc_t *sc; + keyboard_t *kbd; uintptr_t port; uintptr_t irq; uintptr_t flags; @@ -97,13 +97,11 @@ atkbdattach(device_t dev) int zero = 0; int error; - sc = (atkbd_softc_t *)device_get_softc(dev); - BUS_READ_IVAR(device_get_parent(dev), dev, KBDC_IVAR_PORT, &port); BUS_READ_IVAR(device_get_parent(dev), dev, KBDC_IVAR_IRQ, &irq); BUS_READ_IVAR(device_get_parent(dev), dev, KBDC_IVAR_FLAGS, &flags); - error = atkbd_attach_unit(device_get_unit(dev), sc, port, irq, flags); + error = atkbd_attach_unit(device_get_unit(dev), &kbd, port, irq, flags); if (error) return error; @@ -111,7 +109,7 @@ atkbdattach(device_t dev) res = bus_alloc_resource(dev, SYS_RES_IRQ, &zero, irq, irq, 1, RF_SHAREABLE | RF_ACTIVE); BUS_SETUP_INTR(device_get_parent(dev), dev, res, INTR_TYPE_TTY, - atkbd_isa_intr, sc, &ih); + atkbd_isa_intr, kbd, &ih); return 0; } @@ -119,10 +117,10 @@ atkbdattach(device_t dev) static void atkbd_isa_intr(void *arg) { - atkbd_softc_t *sc; + keyboard_t *kbd; - sc = (atkbd_softc_t *)arg; - (*kbdsw[sc->kbd->kb_index]->intr)(sc->kbd, NULL); + kbd = (keyboard_t *)arg; + (*kbdsw[kbd->kb_index]->intr)(kbd, NULL); } DRIVER_MODULE(atkbd, atkbdc, atkbd_driver, atkbd_devclass, 0, 0); diff --git a/sys/dev/atkbdc/atkbd_isa.c b/sys/dev/atkbdc/atkbd_isa.c index 8942681..a8d6381 100644 --- a/sys/dev/atkbdc/atkbd_isa.c +++ b/sys/dev/atkbdc/atkbd_isa.c @@ -23,7 +23,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: atkbd_isa.c,v 1.3 1999/04/16 21:22:34 peter Exp $ + * $Id: atkbd_isa.c,v 1.4 1999/05/08 21:59:28 dfr Exp $ */ #include "atkbd.h" @@ -64,7 +64,7 @@ static device_method_t atkbd_methods[] = { static driver_t atkbd_driver = { ATKBD_DRIVER_NAME, atkbd_methods, - sizeof(atkbd_softc_t), + 1, }; static int @@ -88,7 +88,7 @@ atkbdprobe(device_t dev) static int atkbdattach(device_t dev) { - atkbd_softc_t *sc; + keyboard_t *kbd; uintptr_t port; uintptr_t irq; uintptr_t flags; @@ -97,13 +97,11 @@ atkbdattach(device_t dev) int zero = 0; int error; - sc = (atkbd_softc_t *)device_get_softc(dev); - BUS_READ_IVAR(device_get_parent(dev), dev, KBDC_IVAR_PORT, &port); BUS_READ_IVAR(device_get_parent(dev), dev, KBDC_IVAR_IRQ, &irq); BUS_READ_IVAR(device_get_parent(dev), dev, KBDC_IVAR_FLAGS, &flags); - error = atkbd_attach_unit(device_get_unit(dev), sc, port, irq, flags); + error = atkbd_attach_unit(device_get_unit(dev), &kbd, port, irq, flags); if (error) return error; @@ -111,7 +109,7 @@ atkbdattach(device_t dev) res = bus_alloc_resource(dev, SYS_RES_IRQ, &zero, irq, irq, 1, RF_SHAREABLE | RF_ACTIVE); BUS_SETUP_INTR(device_get_parent(dev), dev, res, INTR_TYPE_TTY, - atkbd_isa_intr, sc, &ih); + atkbd_isa_intr, kbd, &ih); return 0; } @@ -119,10 +117,10 @@ atkbdattach(device_t dev) static void atkbd_isa_intr(void *arg) { - atkbd_softc_t *sc; + keyboard_t *kbd; - sc = (atkbd_softc_t *)arg; - (*kbdsw[sc->kbd->kb_index]->intr)(sc->kbd, NULL); + kbd = (keyboard_t *)arg; + (*kbdsw[kbd->kb_index]->intr)(kbd, NULL); } DRIVER_MODULE(atkbd, atkbdc, atkbd_driver, atkbd_devclass, 0, 0); diff --git a/sys/dev/atkbdc/atkbdreg.h b/sys/dev/atkbdc/atkbdreg.h index 67d6567..0440152 100644 --- a/sys/dev/atkbdc/atkbdreg.h +++ b/sys/dev/atkbdc/atkbdreg.h @@ -23,15 +23,13 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $Id: atkbdreg.h,v 1.1 1999/01/09 02:44:50 yokota Exp $ + * $Id: atkbdreg.h,v 1.2 1999/03/10 10:36:52 yokota Exp $ */ #ifndef _DEV_KBD_ATKBDREG_H_ #define _DEV_KBD_ATKBDREG_H_ #define ATKBD_DRIVER_NAME "atkbd" -#define ATKBD_UNIT(dev) minor(dev) -#define ATKBD_MKMINOR(unit) (unit) /* device configuration flags (atkbdprobe, atkbdattach) */ #define KB_CONF_FAIL_IF_NO_KBD (1 << 0) /* don't install if no kbd is found */ @@ -40,20 +38,8 @@ #ifdef KERNEL -typedef struct atkbd_softc { - short flags; -#define ATKBD_ATTACHED (1 << 0) - keyboard_t *kbd; -#ifdef KBD_INSTALL_CDEV - genkbd_softc_t gensc; -#endif -} atkbd_softc_t; - -#ifdef __i386__ -atkbd_softc_t *atkbd_get_softc(int unit); -#endif int atkbd_probe_unit(int unit, int port, int irq, int flags); -int atkbd_attach_unit(int unit, atkbd_softc_t *sc, +int atkbd_attach_unit(int unit, keyboard_t **kbd, int port, int irq, int flags); #endif /* KERNEL */ |