wscons based console video & keyboard support for the NeXT

from Matt DeBergalis
This commit is contained in:
dbj 1999-01-28 11:46:22 +00:00
parent 7bfe0eabb6
commit 7919e08986
11 changed files with 1295 additions and 8 deletions

View File

@ -107,6 +107,17 @@ options ZS_CONSOLE_ABORT
options NFS_BOOT_BOOTP
options NFS_BOOT_DHCP
# wscons options
options RCONS_2BPP # necessary for nextdisplay
options WSEMUL_SUN # sun terminal emulation
#options WSEMUL_VT100 # VT100 / VT220 emulation
options WSDISPLAY_COMPAT_SYSCONS # emulate some ioctls
options WSDISPLAY_COMPAT_USL # VT handling
options WSDISPLAY_COMPAT_RAWKBD # can get raw scancodes
# see dev/wscons/wskbdmap_mfii.h for implemented layouts
#options PCKBD_LAYOUT="(KB_DE | KB_NODEAD)"
config netbsd root on ? type ?
#
@ -121,6 +132,12 @@ mainbus0 at root
# device space
intio0 at mainbus?
nextkbd0 at intio? ipl 3
nextdisplay0 at mainbus?
wsdisplay* at nextdisplay? console ?
wskbd* at nextkbd? console ?
# INTIO
zsc0 at intio? ipl 5
#zsc1 at intio? ipl 5

View File

@ -1,4 +1,4 @@
# $NetBSD: files.next68k,v 1.6 1999/01/27 11:27:16 dbj Exp $
# $NetBSD: files.next68k,v 1.7 1999/01/28 11:46:24 dbj Exp $
# next68k-specific configuration info
@ -66,6 +66,15 @@ attach xe at intio
file arch/next68k/dev/mb8795.c
file arch/next68k/dev/if_xe.c
device nextdisplay: wsemuldisplaydev, wsrasteremulops
attach nextdisplay at mainbus
file arch/next68k/dev/nextdisplay.c nextdisplay needs-flag
device nextkbd: wskbddev
attach nextkbd at intio
file arch/next68k/dev/nextkbd.c nextkbd needs-flag
file arch/next68k/dev/wskbdmap_mfii.c nextkbd
device esp: scsi, ncr53c9x, disk
attach esp at intio
file arch/next68k/dev/esp.c esp needs-flag

View File

@ -1,4 +1,4 @@
/* $NetBSD: intio.c,v 1.1.1.1 1998/06/09 07:53:05 dbj Exp $ */
/* $NetBSD: intio.c,v 1.2 1999/01/28 11:46:23 dbj Exp $ */
/*-
* Copyright (c) 1996 The NetBSD Foundation, Inc.
@ -111,8 +111,7 @@ intiosearch(parent, cf, aux)
bzero(&ia, sizeof(ia));
if ((*cf->cf_attach->ca_match)(parent, cf, &ia) > 0) {
config_attach(parent, cf, &ia, intioprint);
printf("\n");
}
config_attach(parent, cf, &ia, intioprint);
}
return (0);
}

View File

@ -0,0 +1,344 @@
/* $NetBSD: nextdisplay.c,v 1.1 1999/01/28 11:46:23 dbj Exp $ */
/*
* Copyright (c) 1998 Matt DeBergalis
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Matt DeBergalis
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 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.
*/
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
#include <sys/device.h>
#include <sys/malloc.h>
#include <machine/cpu.h>
#include <machine/bus.h>
#include <next68k/dev/nextdisplayvar.h>
#include <dev/wscons/wsconsio.h>
#include <dev/rcons/raster.h>
#include <dev/wscons/wscons_raster.h>
#include <dev/wscons/wsdisplayvar.h>
int nextdisplay_match __P((struct device *, struct cfdata *, void *));
void nextdisplay_attach __P((struct device *, struct device *, void *));
struct cfattach nextdisplay_ca = {
sizeof(struct nextdisplay_softc),
nextdisplay_match,
nextdisplay_attach,
};
const struct wsdisplay_emulops nextdisplay_mono_emulops = {
rcons_cursor,
rcons_mapchar,
rcons_putchar,
rcons_copycols,
rcons_erasecols,
rcons_copyrows,
rcons_eraserows,
rcons_alloc_attr
};
struct wsscreen_descr nextdisplay_mono = {
"std",
0, 0, /* will be filled in -- XXX shouldn't, it's global */
&nextdisplay_mono_emulops,
0, 0
};
const struct wsscreen_descr *_nextdisplay_scrlist_mono[] = {
&nextdisplay_mono,
};
const struct wsscreen_list nextdisplay_screenlist_mono = {
sizeof(_nextdisplay_scrlist_mono) / sizeof(struct wsscreen_descr *),
_nextdisplay_scrlist_mono
};
static int nextdisplay_ioctl __P((void *, u_long, caddr_t, int, struct proc *));
static int nextdisplay_mmap __P((void *, off_t, int));
static int nextdisplay_alloc_screen __P((void *, const struct wsscreen_descr *,
void **, int *, int *, long *));
static void nextdisplay_free_screen __P((void *, void *));
static void nextdisplay_show_screen __P((void *, void *));
static int nextdisplay_load_font __P((void *, void *, struct wsdisplay_font *));
const struct wsdisplay_accessops nextdisplay_accessops = {
nextdisplay_ioctl,
nextdisplay_mmap,
nextdisplay_alloc_screen,
nextdisplay_free_screen,
nextdisplay_show_screen,
nextdisplay_load_font
};
void nextdisplay_init(struct nextdisplay_config *, paddr_t);
paddr_t nextdisplay_consaddr;
static int nextdisplay_is_console __P((paddr_t addr));
static struct nextdisplay_config nextdisplay_console_dc;
static int
nextdisplay_is_console(paddr_t addr)
{
return (nextdisplay_console_dc.isconsole
&& (addr == nextdisplay_consaddr));
}
int
nextdisplay_match(parent, match, aux)
struct device *parent;
struct cfdata *match;
void *aux;
{
return (1);
}
void
nextdisplay_init(dc, addr)
struct nextdisplay_config *dc;
paddr_t addr;
{
struct raster *rap;
struct rcons *rcp;
int i;
/* printf("in nextdisplay_init\n"); */
dc->dc_vaddr = addr;
dc->dc_paddr = VIDEOP(addr);
dc->dc_size = NEXT_P_VIDEOSIZE;
dc->dc_wid = 1152;
dc->dc_ht = 832;
dc->dc_depth = 2;
dc->dc_rowbytes = dc->dc_wid * dc->dc_depth / 8;
dc->dc_videobase = dc->dc_vaddr;
#if 0
printf("intiobase at: %08x\n", intiobase);
printf("intiolimit at: %08x\n", intiolimit);
printf("videobase at: %08x\n", videobase);
printf("videolimit at: %08x\n", videolimit);
printf("virtual fb at: %08x\n", dc->dc_vaddr);
printf("physical fb at: %08x\n", dc->dc_paddr);
printf("fb size: %08x\n", dc->dc_size);
printf("dc_wid: %08x\n", dc->dc_wid);
printf("dc_ht: %08x\n", dc->dc_ht);
printf("dc_depth: %08x\n", dc->dc_depth);
printf("dc_rowbytes: %08x\n", dc->dc_rowbytes);
printf("dc_videobase: %08x\n", dc->dc_videobase);
#endif
/* clear the screen */
for (i = 0; i < dc->dc_ht * dc->dc_rowbytes; i += sizeof(u_int32_t))
*(u_int32_t *)(dc->dc_videobase + i) = 0x00000000;
rap = &dc->dc_raster;
rap->width = dc->dc_wid;
rap->height = dc->dc_ht;
rap->depth = 2;
rap->linelongs = dc->dc_rowbytes / sizeof(u_int32_t);
rap->pixels = (u_int32_t *)dc->dc_videobase;
/* initialize the raster console blitter */
rcp = &dc->dc_rcons;
rcp->rc_sp = rap;
rcp->rc_crow = rcp->rc_ccol = -1;
rcp->rc_crowp = &rcp->rc_crow;
rcp->rc_ccolp = &rcp->rc_ccol;
rcons_init(rcp, 34, 80);
nextdisplay_mono.nrows = dc->dc_rcons.rc_maxrow;
nextdisplay_mono.ncols = dc->dc_rcons.rc_maxcol;
}
void
nextdisplay_attach(parent, self, aux)
struct device *parent;
struct device *self;
void *aux;
{
struct nextdisplay_softc *sc;
struct wsemuldisplaydev_attach_args waa;
int isconsole;
sc = (struct nextdisplay_softc *)self;
printf("\n");
isconsole = nextdisplay_is_console(videobase);
if( isconsole ) {
sc->sc_dc = &nextdisplay_console_dc;
sc->nscreens = 1;
} else {
sc->sc_dc = (struct nextdisplay_config *)
malloc(sizeof(struct nextdisplay_config), M_DEVBUF, M_WAITOK);
nextdisplay_init(sc->sc_dc, videobase);
}
/* initialize the raster */
waa.console = isconsole;
waa.scrdata = &nextdisplay_screenlist_mono;
waa.accessops = &nextdisplay_accessops;
waa.accesscookie = sc;
config_found(self, &waa, wsemuldisplaydevprint);
}
int
nextdisplay_ioctl(v, cmd, data, flag, p)
void *v;
u_long cmd;
caddr_t data;
int flag;
struct proc *p;
{
struct nextdisplay_softc *sc = v;
struct nextdisplay_config *dc = sc->sc_dc;
switch (cmd) {
case WSDISPLAYIO_GTYPE:
*(int *)data = dc->dc_type;
return 0;
case WSDISPLAYIO_SCURSOR:
printf("nextdisplay_ioctl: wsdisplayio_scursor\n");
return ENOTTY;
case WSDISPLAYIO_SCURPOS:
printf("nextdisplay_ioctl: wsdisplayio_scurpos\n");
return ENOTTY;
case WSDISPLAYIO_GINFO:
case WSDISPLAYIO_GETCMAP:
case WSDISPLAYIO_PUTCMAP:
case WSDISPLAYIO_GVIDEO:
case WSDISPLAYIO_SVIDEO:
case WSDISPLAYIO_GCURPOS:
case WSDISPLAYIO_GCURMAX:
case WSDISPLAYIO_GCURSOR:
printf("nextdisplay_ioctl: listed but unsupported ioctl\n");
return ENOTTY;
}
printf("nextdisplay_ioctl: unsupported ioctl\n");
return -1;
}
static int
nextdisplay_mmap(v, offset, prot)
void *v;
off_t offset;
int prot;
{
/* XXX */
return -1;
}
int
nextdisplay_alloc_screen(v, type, cookiep, curxp, curyp, defattrp)
void *v;
const struct wsscreen_descr *type;
void **cookiep;
int *curxp, *curyp;
long *defattrp;
{
struct nextdisplay_softc *sc = v;
long defattr;
if (sc->nscreens > 0)
return (ENOMEM);
*cookiep = &sc->sc_dc->dc_rcons; /* one and only for now */
*curxp = 0;
*curyp = 0;
rcons_alloc_attr(&sc->sc_dc->dc_rcons, 0, 0, 0, &defattr);
*defattrp = defattr;
sc->nscreens++;
return (0);
}
void
nextdisplay_free_screen(v, cookie)
void *v;
void *cookie;
{
struct nextdisplay_softc *sc = v;
if (sc->sc_dc == &nextdisplay_console_dc)
panic("cfb_free_screen: console");
sc->nscreens--;
}
void
nextdisplay_show_screen(v, cookie)
void *v;
void *cookie;
{
}
static int
nextdisplay_load_font(v, cookie, font)
void *v;
void *cookie;
struct wsdisplay_font *font;
{
return (EINVAL);
}
int
nextdisplay_cnattach(addr)
paddr_t addr;
{
struct nextdisplay_config *dc = &nextdisplay_console_dc;
long defattr;
/* set up the display */
nextdisplay_init(&nextdisplay_console_dc, addr);
rcons_alloc_attr(&dc->dc_rcons, 0, 0, 0, &defattr);
wsdisplay_cnattach(&nextdisplay_mono, &dc->dc_rcons,
0, 0, defattr);
nextdisplay_consaddr = addr;
dc->isconsole = 1;
return (0);
}

View File

@ -0,0 +1,72 @@
/* $NetBSD: nextdisplayvar.h,v 1.1 1999/01/28 11:46:23 dbj Exp $ */
/*
* Copyright (c) 1998 Matt DeBergalis
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Matt DeBergalis
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 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.
*/
#include <dev/rcons/raster.h>
#include <dev/wscons/wscons_raster.h>
#include <machine/bus.h>
extern int nextdisplay_cnattach __P((paddr_t));
struct nextdisplay_config;
struct fbcmap;
struct fbcursor;
struct fbcurpos;
struct nextdisplay_config {
int dc_type; /* WSCONS display type */
vaddr_t dc_vaddr; /* memory space virtual base address */
paddr_t dc_paddr; /* memory space physical base address */
psize_t dc_size; /* size of slot memory */
vaddr_t dc_videobase; /* base of flat frame buffer */
int dc_wid; /* width of frame buffer */
int dc_ht; /* height of frame buffer */
int dc_depth; /* depth of frame buffer */
int dc_rowbytes; /* bytes in fb scan line */
struct raster dc_raster; /* raster description */
struct rcons dc_rcons; /* raster blitter control info */
int dc_blanked; /* currently has video disabled */
int isconsole;
};
struct nextdisplay_softc {
struct device sc_dev;
struct nextdisplay_config *sc_dc;
int nscreens;
};

View File

@ -0,0 +1,424 @@
/* $NetBSD: nextkbd.c,v 1.1 1999/01/28 11:46:23 dbj Exp $ */
/*
* Copyright (c) 1998 Matt DeBergalis
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Matt DeBergalis
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 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.
*/
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
#include <sys/proc.h>
#include <sys/device.h>
#include <sys/malloc.h>
#include <sys/errno.h>
#include <sys/queue.h>
#include <sys/lock.h>
#include <machine/autoconf.h>
#include <machine/cpu.h>
#include <machine/intr.h>
#include <machine/bus.h>
#include <next68k/dev/nextkbdvar.h>
#include <next68k/dev/wskbdmap_mfii.h>
#include <dev/wscons/wsconsio.h>
#include <dev/wscons/wskbdvar.h>
#include <dev/wscons/wsksymdef.h>
#include <dev/wscons/wsksymvar.h>
#include <next68k/next68k/isr.h>
struct nextkbd_internal {
int num_ints; /* interrupt total */
int polling;
int isconsole;
bus_space_tag_t iot;
bus_space_handle_t ioh;
struct nextkbd_softc *t_sc; /* back pointer */
u_int32_t mods;
};
struct mon_regs {
u_int32_t mon_csr;
u_int32_t mon_1;
u_int32_t mon_data;
};
int nextkbd_match __P((struct device *, struct cfdata *, void *));
void nextkbd_attach __P((struct device *, struct device *, void *));
int nextkbc_cnattach __P((bus_space_tag_t));
struct cfattach nextkbd_ca = {
sizeof(struct nextkbd_softc), nextkbd_match, nextkbd_attach
};
int nextkbd_enable __P((void *, int));
void nextkbd_set_leds __P((void *, int));
int nextkbd_ioctl __P((void *, u_long, caddr_t, int, struct proc *));
const struct wskbd_accessops nextkbd_accessops = {
nextkbd_enable,
nextkbd_set_leds,
nextkbd_ioctl,
};
void nextkbd_cngetc __P((void *, u_int *, int *));
void nextkbd_cnpollc __P((void *, int));
const struct wskbd_consops nextkbd_consops = {
nextkbd_cngetc,
nextkbd_cnpollc,
};
const struct wskbd_mapdata nextkbd_keymapdata = {
nextkbd_keydesctab,
KB_US,
};
static int nextkbd_poll_data __P((bus_space_tag_t, bus_space_handle_t));
static int nextkbd_decode __P((struct nextkbd_internal *, int, u_int *, int *));
static struct nextkbd_internal nextkbd_consdata;
static int nextkbd_is_console __P((bus_space_tag_t bst));
int nextkbdhard __P((void *));
static int
nextkbd_is_console(bst)
bus_space_tag_t bst;
{
return (nextkbd_consdata.isconsole
&& (bst == nextkbd_consdata.iot));
}
int
nextkbd_match(parent, match, aux)
struct device *parent;
struct cfdata *match;
void *aux;
{
return 1;
}
void
nextkbd_attach(parent, self, aux)
struct device *parent, *self;
void *aux;
{
struct nextkbd_softc *sc = (struct nextkbd_softc *)self;
int isconsole;
struct wskbddev_attach_args a;
printf("\n");
isconsole = nextkbd_is_console(NEXT68K_INTIO_BUS_SPACE); /* XXX */
if (isconsole) {
sc->id = &nextkbd_consdata;
} else {
sc->id = malloc(sizeof(struct nextkbd_internal),
M_DEVBUF, M_WAITOK);
bzero(sc->id, sizeof(struct nextkbd_internal));
sc->id->iot = NEXT68K_INTIO_BUS_SPACE;
if (bus_space_map(sc->id->iot, NEXT_P_MON,
sizeof(struct mon_regs),
0, &sc->id->ioh)) {
printf("%s: can't map mon status control register\n",
sc->sc_dev.dv_xname);
return;
}
}
sc->id->t_sc = sc; /* set back pointer */
isrlink_autovec(nextkbdhard, sc, NEXT_I_IPL(NEXT_I_KYBD_MOUSE), 0);
INTR_ENABLE(NEXT_I_KYBD_MOUSE);
a.console = isconsole;
a.keymap = &nextkbd_keymapdata;
a.accessops = &nextkbd_accessops;
a.accesscookie = sc;
/*
* Attach the wskbd, saving a handle to it.
* XXX XXX XXX
*/
sc->sc_wskbddev = config_found(self, &a, wskbddevprint);
}
int
nextkbd_enable(v, on)
void *v;
int on;
{
/* XXX not sure if this should do anything */
printf("nextkbd_enable %d\n", on);
return 0;
}
/* XXX not yet implemented */
void
nextkbd_set_leds(v, leds)
void *v;
int leds;
{
return;
}
int
nextkbd_ioctl(v, cmd, data, flag, p)
void *v;
u_long cmd;
caddr_t data;
int flag;
struct proc *p;
{
/* XXX struct nextkbd_softc *nc = v; */
switch (cmd) {
case WSKBDIO_GTYPE:
/* XXX */
*(int *)data = WSKBD_TYPE_PC_AT;
return (0);
case WSKBDIO_SETLEDS:
return (0);
case WSKBDIO_GETLEDS:
*(int *)data = 0;
return (0);
case WSKBDIO_COMPLEXBELL:
return (0);
}
return -1;
}
int
nextkbdhard(arg)
void *arg;
{
register struct nextkbd_softc *sc = arg;
struct mon_regs stat;
unsigned char device;
u_int32_t scan_code;
int type, key;
if (!INTR_OCCURRED(NEXT_I_KYBD_MOUSE)) return 0;
#define CSR_INT 0x00800000
#define CSR_DATA 0x00400000
#define KD_KEYMASK 0x007f
#define KD_DIRECTION 0x0080 /* pressed or released */
#define KD_CNTL 0x0100
#define KD_LSHIFT 0x0200
#define KD_RSHIFT 0x0400
#define KD_LCOMM 0x0800
#define KD_RCOMM 0x1000
#define KD_LALT 0x2000
#define KD_RALT 0x4000
#define KD_VALID 0x8000 /* only set for scancode keys ? */
#define KD_MODS 0x4f00
bus_space_read_region_4(sc->id->iot, sc->id->ioh, 0, &stat, 3);
if (stat.mon_csr & CSR_INT) {
if (stat.mon_csr & CSR_DATA) {
sc->id->num_ints++;
stat.mon_csr &= ~CSR_INT;
bus_space_write_4(sc->id->iot, sc->id->ioh, 0, stat.mon_csr);
device = stat.mon_data >> 28;
if (device != 1) return(0);
scan_code = stat.mon_data & 0xffff;
if (nextkbd_decode(sc->id, scan_code, &type, &key)) {
wskbd_input(sc->sc_wskbddev, type, key);
}
}
}
return(1);
}
int
nextkbd_cnattach(bst)
bus_space_tag_t bst;
{
bus_space_handle_t bsh;
if (bus_space_map(bst, NEXT_P_MON, sizeof(struct mon_regs),
0, &bsh))
return (ENXIO);
bzero(&nextkbd_consdata, sizeof(nextkbd_consdata));
nextkbd_consdata.iot = bst;
nextkbd_consdata.ioh = bsh;
nextkbd_consdata.isconsole = 1;
wskbd_cnattach(&nextkbd_consops, &nextkbd_consdata,
&nextkbd_keymapdata);
return (0);
}
/* ARGSUSED */
void
nextkbd_cngetc(v, type, data)
void *v;
u_int *type;
int *data;
{
struct nextkbd_internal *t = v;
int val;
/* printf("cngetc: data at %08x (%08x)\n", t, v); */
for (;;) {
val = nextkbd_poll_data(t->iot, t->ioh);
/* printf("%08x\n", val); */
if ((val != -1) && nextkbd_decode(t, val, type, data))
return;
}
}
void
nextkbd_cnpollc(v, on)
void *v;
int on;
{
struct nextkbd_internal *t = v;
printf("cnpollc %d\n", on);
t->polling = on;
if (on) {
INTR_DISABLE(NEXT_I_KYBD_MOUSE);
} else {
INTR_ENABLE(NEXT_I_KYBD_MOUSE);
}
}
static int
nextkbd_poll_data(iot, ioh)
bus_space_tag_t iot;
bus_space_handle_t ioh;
{
int i;
struct mon_regs stat;
/* printf("cnstart\n"); */
for (i=100000; i; i--) {
bus_space_read_region_4(iot, ioh, 0, &stat, 3);
if ( (stat.mon_csr & CSR_DATA) ) {
stat.mon_csr &= ~CSR_INT;
if ( (stat.mon_data >> 28) == 1) {
/* printf("cnkey %08x %08x\n", stat.mon_csr, stat.mon_data); */
bus_space_write_4(iot, ioh, 0, stat.mon_csr);
return (stat.mon_data & 0xffff);
}
}
}
/* printf("cnend %08x %08x\n", stat.mon_csr, stat.mon_data); */
return (-1);
}
static int
nextkbd_decode(id, datain, type, dataout)
struct nextkbd_internal *id;
int datain;
u_int *type;
int *dataout;
{
/* printf("datain %08x mods %08x\n", datain, id->mods); */
if ((datain ^ id->mods) & KD_LSHIFT) {
id->mods ^= KD_LSHIFT;
*dataout = 90;
if (datain & KD_LSHIFT)
*type = WSCONS_EVENT_KEY_DOWN;
else
*type = WSCONS_EVENT_KEY_UP;
} else if ((datain ^ id->mods) & KD_RSHIFT) {
id->mods ^= KD_RSHIFT;
*dataout = 91;
if (datain & KD_RSHIFT)
*type = WSCONS_EVENT_KEY_DOWN;
else
*type = WSCONS_EVENT_KEY_UP;
} else if ((datain ^ id->mods) & KD_LALT) {
id->mods ^= KD_LALT;
*dataout = 92;
if (datain & KD_LALT)
*type = WSCONS_EVENT_KEY_DOWN;
else
*type = WSCONS_EVENT_KEY_UP;
} else if ((datain ^ id->mods) & KD_RALT) {
id->mods ^= KD_RALT;
*dataout = 93;
if (datain & KD_RALT)
*type = WSCONS_EVENT_KEY_DOWN;
else
*type = WSCONS_EVENT_KEY_UP;
} else if ((datain ^ id->mods) & KD_CNTL) {
id->mods ^= KD_CNTL;
*dataout = 94;
if (datain & KD_CNTL)
*type = WSCONS_EVENT_KEY_DOWN;
else
*type = WSCONS_EVENT_KEY_UP;
} else if ((datain ^ id->mods) & KD_LCOMM) {
id->mods ^= KD_LCOMM;
*dataout = 95;
if (datain & KD_LCOMM)
*type = WSCONS_EVENT_KEY_DOWN;
else
*type = WSCONS_EVENT_KEY_UP;
} else if ((datain ^ id->mods) & KD_RCOMM) {
id->mods ^= KD_RCOMM;
*dataout = 96;
if (datain & KD_RCOMM)
*type = WSCONS_EVENT_KEY_DOWN;
else
*type = WSCONS_EVENT_KEY_UP;
} else if (datain & KD_KEYMASK) {
if (datain & KD_DIRECTION)
*type = WSCONS_EVENT_KEY_UP;
else
*type = WSCONS_EVENT_KEY_DOWN;
*dataout = (datain & KD_KEYMASK);
} else {
*dataout = 0;
}
return 1;
}

View File

@ -0,0 +1,41 @@
/* $NetBSD: nextkbdvar.h,v 1.1 1999/01/28 11:46:23 dbj Exp $ */
/*
* Copyright (c) 1998 Matt DeBergalis
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Matt DeBergalis
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 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.
*/
int nextkbd_cnattach __P((bus_space_tag_t));
struct nextkbd_softc {
struct device sc_dev;
struct nextkbd_internal *id;
struct device *sc_wskbddev;
int enabled; /* XXX ? */
};

View File

@ -0,0 +1,339 @@
/* $NetBSD: wskbdmap_mfii.c,v 1.1 1999/01/28 11:46:23 dbj Exp $ */
/*-
* Copyright (c) 1997 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by Juergen Hannken-Illjes.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the NetBSD
* Foundation, Inc. and its contributors.
* 4. Neither the name of The NetBSD Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT 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.
*/
#include <sys/types.h>
#include <dev/wscons/wsksymdef.h>
#include <dev/wscons/wsksymvar.h>
#include <arch/next68k/dev/wskbdmap_mfii.h>
#define KC(n) (0xe000 | (n)) /* see wsksymvar.h */
static const keysym_t nextkbd_keydesc_us[] = {
/* pos command normal shifted */
KC(3), KS_backslash, KS_bar,
KC(4), KS_bracketright, KS_braceright,
KC(5), KS_bracketleft, KS_braceleft,
KC(6), KS_i,
KC(7), KS_o,
KC(8), KS_p,
KC(9), KS_Left,
KC(15), KS_Down,
KC(16), KS_Right,
KC(22), KS_Up,
KC(27), KS_Delete,
KC(28), KS_equal, KS_plus,
KC(29), KS_minus, KS_underscore,
KC(30), KS_8, KS_asterisk,
KC(31), KS_9, KS_parenleft,
KC(32), KS_0, KS_parenright,
KC(38), KS_grave, KS_asciitilde,
KC(42), KS_Return,
KC(43), KS_apostrophe, KS_quotedbl,
KC(44), KS_semicolon, KS_colon,
KC(45), KS_l,
KC(46), KS_comma, KS_less,
KC(47), KS_period, KS_greater,
KC(48), KS_slash, KS_question,
KC(49), KS_z,
KC(50), KS_x,
KC(51), KS_c,
KC(52), KS_v,
KC(53), KS_b,
KC(54), KS_m,
KC(55), KS_n,
KC(56), KS_space,
KC(57), KS_a,
KC(58), KS_s,
KC(59), KS_d,
KC(60), KS_f,
KC(61), KS_g,
KC(62), KS_k,
KC(63), KS_j,
KC(64), KS_h,
KC(65), KS_Tab,
KC(66), KS_q,
KC(67), KS_w,
KC(68), KS_e,
KC(69), KS_r,
KC(70), KS_u,
KC(71), KS_y,
KC(72), KS_t,
KC(73), KS_Cmd_Debugger, KS_Escape,
KC(74), KS_1, KS_exclam,
KC(75), KS_2, KS_at,
KC(76), KS_3, KS_numbersign,
KC(77), KS_4, KS_dollar,
KC(78), KS_7, KS_ampersand,
KC(79), KS_6, KS_asciicircum,
KC(80), KS_5, KS_percent,
KC(90), KS_Shift_L,
KC(91), KS_Shift_R,
KC(92), KS_Alt_L,
KC(93), KS_Alt_R,
KC(94), KS_Control_L,
KC(95), KS_Cmd1,
KC(96), KS_Cmd2,
#if 0
//KC(55), KS_KP_Multiply,
//KC(58), KS_Caps_Lock,
//KC(59), KS_Cmd_Screen0, KS_f1,
//KC(60), KS_Cmd_Screen1, KS_f2,
//KC(61), KS_Cmd_Screen2, KS_f3,
//KC(62), KS_Cmd_Screen3, KS_f4,
//KC(63), KS_Cmd_Screen4, KS_f5,
//KC(64), KS_Cmd_Screen5, KS_f6,
//KC(65), KS_Cmd_Screen6, KS_f7,
//KC(66), KS_Cmd_Screen7, KS_f8,
//KC(67), KS_Cmd_Screen8, KS_f9,
//KC(68), KS_Cmd_Screen9, KS_f10,
//KC(69), KS_Num_Lock,
//KC(70), KS_Hold_Screen,
//KC(71), KS_KP_Home, KS_KP_7,
//KC(72), KS_KP_Up, KS_KP_8,
//KC(73), KS_KP_Prior, KS_KP_9,
//KC(74), KS_KP_Subtract,
//KC(75), KS_KP_Left, KS_KP_4,
//K/C(76), KS_KP_Begin, KS_KP_5,
//KC(77), KS_KP_Right, KS_KP_6,
//KC(78), KS_KP_Add,
//KC(79), KS_KP_End, KS_KP_1,
//KC(80), KS_KP_Down, KS_KP_2,
//KC(81), KS_KP_Next, KS_KP_3,
//KC(82), KS_KP_Insert, KS_KP_0,
//KC(83), KS_KP_Delete, KS_KP_Decimal,
//KC(87), KS_f11,
//KC(88), KS_f12,
/* 127, break, */
//KC(156), KS_KP_Enter,
/* 170, print screen, */
//KC(181), KS_KP_Divide,
/* 183, print screen, */
//KC(184), KS_Alt_R, KS_Multi_key,
//KC(199), KS_Home,
//KC(201), KS_Prior,
//K/C(207), KS_End,
//K/C(209), KS_Next,
///KC(210), KS_Insert,
//KC(211), KS_KP_Delete,
/* 219, left win, */
/* 220, right win, */
/* 221, menu, */
#endif
};
static const keysym_t nextkbd_keydesc_de[] = {
/* pos normal shifted altgr shift-altgr */
KC(3), KS_2, KS_quotedbl, KS_twosuperior,
KC(4), KS_3, KS_section, KS_threesuperior,
KC(7), KS_6, KS_ampersand,
KC(8), KS_7, KS_slash, KS_braceleft,
KC(9), KS_8, KS_parenleft, KS_bracketleft,
KC(10), KS_9, KS_parenright, KS_bracketright,
KC(11), KS_0, KS_equal, KS_braceright,
KC(12), KS_ssharp, KS_question, KS_backslash,
KC(13), KS_dead_acute, KS_dead_grave,
KC(16), KS_q, KS_Q, KS_at,
KC(21), KS_z,
KC(26), KS_udiaeresis,
KC(27), KS_plus, KS_asterisk, KS_dead_tilde,
KC(39), KS_odiaeresis,
KC(40), KS_adiaeresis,
KC(41), KS_dead_circumflex,KS_dead_abovering,
KC(43), KS_numbersign, KS_apostrophe,
KC(44), KS_y,
KC(50), KS_m, KS_M, KS_mu,
KC(51), KS_comma, KS_semicolon,
KC(52), KS_period, KS_colon,
KC(53), KS_minus, KS_underscore,
KC(86), KS_less, KS_greater, KS_bar, KS_brokenbar,
KC(184), KS_Mode_switch, KS_Multi_key,
};
static const keysym_t nextkbd_keydesc_de_nodead[] = {
/* pos normal shifted altgr shift-altgr */
KC(13), KS_apostrophe, KS_grave,
KC(27), KS_plus, KS_asterisk, KS_asciitilde,
KC(41), KS_asciicircum, KS_degree,
};
static const keysym_t nextkbd_keydesc_dk[] = {
/* pos normal shifted altgr shift-altgr */
KC(3), KS_2, KS_quotedbl, KS_at,
KC(4), KS_3, KS_numbersign, KS_sterling,
KC(5), KS_4, KS_currency, KS_dollar,
KC(7), KS_6, KS_ampersand,
KC(8), KS_7, KS_slash, KS_braceleft,
KC(9), KS_8, KS_parenleft, KS_bracketleft,
KC(10), KS_9, KS_parenright, KS_bracketright,
KC(11), KS_0, KS_equal, KS_braceright,
KC(12), KS_plus, KS_question,
KC(13), KS_dead_acute, KS_dead_grave, KS_bar,
KC(26), KS_aring,
KC(27), KS_dead_diaeresis, KS_dead_circumflex, KS_dead_tilde,
KC(39), KS_ae,
KC(40), KS_oslash,
KC(41), KS_onehalf, KS_paragraph,
KC(43), KS_apostrophe, KS_asterisk,
KC(51), KS_comma, KS_semicolon,
KC(52), KS_period, KS_colon,
KC(53), KS_minus, KS_underscore,
KC(86), KS_less, KS_greater, KS_backslash,
KC(184), KS_Mode_switch, KS_Multi_key,
};
static const keysym_t nextkbd_keydesc_dk_nodead[] = {
/* pos normal shifted altgr shift-altgr */
KC(13), KS_apostrophe, KS_grave, KS_bar,
KC(27), KS_diaeresis, KS_asciicircum, KS_asciitilde,
};
static const keysym_t nextkbd_keydesc_fr[] = {
/* pos normal shifted altgr shift-altgr */
KC(2), KS_ampersand, KS_1,
KC(3), KS_eacute, KS_2, KS_asciitilde,
KC(4), KS_quotedbl, KS_3, KS_numbersign,
KC(5), KS_apostrophe, KS_4, KS_braceleft,
KC(6), KS_parenleft, KS_5, KS_bracketleft,
KC(7), KS_minus, KS_6, KS_bar,
KC(8), KS_egrave, KS_7, KS_grave,
KC(9), KS_underscore, KS_8, KS_backslash,
KC(10), KS_ccedilla, KS_9, KS_asciicircum,
KC(11), KS_agrave, KS_0, KS_at,
KC(12), KS_parenright, KS_degree, KS_bracketright,
KC(13), KS_equal, KS_plus, KS_braceright,
KC(16), KS_a,
KC(17), KS_z,
KC(26), KS_dead_circumflex, KS_dead_diaeresis,
KC(27), KS_dollar, KS_sterling, KS_currency,
KC(30), KS_q,
KC(39), KS_m,
KC(40), KS_ugrave, KS_percent,
KC(41), KS_twosuperior,
KC(43), KS_asterisk, KS_mu,
KC(44), KS_w,
KC(50), KS_comma, KS_question,
KC(51), KS_semicolon, KS_period,
KC(52), KS_colon, KS_slash,
KC(53), KS_exclam, KS_section,
KC(86), KS_less, KS_greater,
KC(184), KS_Mode_switch, KS_Multi_key,
};
static const keysym_t nextkbd_keydesc_it[] = {
/* pos normal shifted altgr shift-altgr */
KC(3), KS_2, KS_quotedbl, KS_twosuperior,
KC(4), KS_3, KS_sterling, KS_threesuperior,
KC(5), KS_4, KS_dollar,
KC(6), KS_5, KS_percent,
KC(7), KS_6, KS_ampersand,
KC(8), KS_7, KS_slash,
KC(9), KS_8, KS_parenleft,
KC(10), KS_9, KS_parenright,
KC(11), KS_0, KS_equal,
KC(12), KS_apostrophe, KS_question,
KC(13), KS_igrave, KS_asciicircum,
KC(26), KS_egrave, KS_eacute, KS_braceleft, KS_bracketleft,
KC(27), KS_plus, KS_asterisk, KS_braceright, KS_bracketright,
KC(39), KS_ograve, KS_Ccedilla, KS_at,
KC(40), KS_agrave, KS_degree, KS_numbersign,
KC(41), KS_backslash, KS_bar,
KC(43), KS_ugrave, KS_section,
KC(51), KS_comma, KS_semicolon,
KC(52), KS_period, KS_colon,
KC(53), KS_minus, KS_underscore,
KC(86), KS_less, KS_greater,
KC(184), KS_Mode_switch, KS_Multi_key,
};
static const keysym_t nextkbd_keydesc_us_declk[] = {
/* pos normal shifted altgr shift-altgr */
KC(1), KS_grave, KS_asciitilde, /* replace escape */
KC(41), KS_less, KS_greater, /* replace grave/tilde */
KC(143), KS_Multi_key, /* left compose */
KC(157), KS_Multi_key, /* right compose, replace right control */
KC(87), KS_Cmd_Debugger, KS_Escape, /* replace F11 */
KC(189), KS_f13,
KC(190), KS_f14,
KC(191), KS_Help,
KC(192), KS_Execute,
KC(193), KS_f17,
KC(183), KS_f18,
KC(70), KS_f19, /* replace scroll lock */
KC(127), KS_f20, /* replace break */
KC(69), KS_KP_F1, /* replace num lock */
KC(181), KS_KP_F2, /* replace divide */
KC(55), KS_KP_F3, /* replace multiply */
KC(74), KS_KP_F4, /* replace subtract */
/* keypad is numbers only - no num lock */
KC(71), KS_KP_7,
KC(72), KS_KP_8,
KC(73), KS_KP_9,
KC(75), KS_KP_4,
KC(76), KS_KP_5,
KC(77), KS_KP_6,
KC(79), KS_KP_1,
KC(80), KS_KP_2,
KC(81), KS_KP_3,
KC(82), KS_KP_0,
KC(83), KS_KP_Decimal,
KC(206), KS_KP_Subtract,
KC(78), KS_KP_Separator, /* replace add */
KC(199), KS_Find, /* replace home */
KC(207), KS_Select, /* replace end */
};
#define KBD_MAP(name, base, map) \
{ name, base, sizeof(map)/sizeof(keysym_t), map }
const struct wscons_keydesc nextkbd_keydesctab[] = {
KBD_MAP(KB_US, 0, nextkbd_keydesc_us),
KBD_MAP(KB_DE, KB_US, nextkbd_keydesc_de),
KBD_MAP(KB_DE | KB_NODEAD, KB_DE, nextkbd_keydesc_de_nodead),
KBD_MAP(KB_FR, KB_US, nextkbd_keydesc_fr),
KBD_MAP(KB_DK, KB_US, nextkbd_keydesc_dk),
KBD_MAP(KB_DK | KB_NODEAD, KB_DK, nextkbd_keydesc_dk_nodead),
KBD_MAP(KB_IT, KB_US, nextkbd_keydesc_it),
KBD_MAP(KB_US | KB_DECLK, KB_US, nextkbd_keydesc_us_declk),
{0, 0, 0, 0}
};
#undef KBD_MAP
#undef KC

View File

@ -0,0 +1,39 @@
/* $NetBSD: wskbdmap_mfii.h,v 1.1 1999/01/28 11:46:23 dbj Exp $ */
/*-
* Copyright (c) 1997 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by Juergen Hannken-Illjes.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the NetBSD
* Foundation, Inc. and its contributors.
* 4. Neither the name of The NetBSD Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT 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.
*/
extern const struct wscons_keydesc nextkbd_keydesctab[];

View File

@ -1,4 +1,4 @@
/* $NetBSD: wsconsio.h,v 1.14 1999/01/26 13:43:00 drochner Exp $ */
/* $NetBSD: wsconsio.h,v 1.15 1999/01/28 11:46:22 dbj Exp $ */
/*
* Copyright (c) 1996, 1997 Christopher G. Demetriou. All rights reserved.
@ -174,6 +174,7 @@ struct wskbd_map_data {
#define WSDISPLAY_TYPE_TGA 9 /* DEC PCI TGA */
#define WSDISPLAY_TYPE_SFBP 10 /* DEC TC SFB+ */
#define WSDISPLAY_TYPE_PCIMISC 11 /* (generic) PCI misc. disp. */
#define WSDISPLAY_TYPE_NEXTMONO 12 /* NeXT mono display */
/* Basic display information. Not applicable to all display types. */
struct wsdisplay_fbinfo {

View File

@ -1,4 +1,4 @@
/* $NetBSD: wsksymdef.h,v 1.22 1999/01/23 16:59:22 drochner Exp $ */
/* $NetBSD: wsksymdef.h,v 1.23 1999/01/28 11:46:23 dbj Exp $ */
/*-
* Copyright (c) 1997 The NetBSD Foundation, Inc.
@ -472,6 +472,7 @@
#define KB_DECLK 0x0002 /* DEC LKnnn layout */
#define KB_LK401 0x0004 /* DEC LK401 instead LK201 */
#define KB_SWAPCTRLCAPS 0x0008 /* Swap Control-L and Caps-Lock */
#define KB_NEXT 0x0010 /* NeXT keyboard */
#define KB_NAMETAB \
{ KB_USER, "user" }, \
@ -485,6 +486,7 @@
{ KB_NODEAD, "nodead" }, \
{ KB_DECLK, "declk" }, \
{ KB_LK401, "lk401" }, \
{ KB_SWAPCTRLCAPS, "swapctrlcaps" }
{ KB_SWAPCTRLCAPS, "swapctrlcaps" }, \
{ KB_NEXT, "next" }
#endif /* !_DEV_WSCONS_WSKSYMDEF_H_ */