Port-hp700 archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

sti@sgc on hp300 netbsd-5-1 with wskbd@hil



Hi! all,


I just return from summer vacation.  My vacation is fighting to
hp300 425t. :-)

The sti@sgc and wskbd@hil works on my 425t with two patches.  I found
a problem.  The frame buffer don't scroll when over the last line.  I
don't know this reason now.

sti*[ch] was imported from OpenBSD.  However this patch support
to netbsd-5-1 only.
I very wish to merge to netbsd-5-1.  Also to -current (and
netbsd-6) too.   But I can't test current kernel at my room.
425t not exist here.  X-<

Thanks,
--
kiyohara
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
    2006, 2007, 2008, 2009, 2010
    The NetBSD Foundation, Inc.  All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
    The Regents of the University of California.  All rights reserved.

NetBSD 5.1.0_PATCH (HOD) #22: Sun Aug 12 22:44:46 JST 2012
        dagger@hod:/usr/src/sys/arch/hp300/compile/HOD
HP 9000/425t (25MHz MC68040 CPU+MMU+FPU, 4k on-chip physical I/D caches)
total memory = 81908 KB
avail memory = 76724 KB
timecounter: Timecounters tick every 10.000 msec
mainbus0 (root)
intio0 at mainbus0
rtc0 at intio0 addr 0x420000
frodo0 at intio0 addr 0x41c000 ipl 5
dnkbd at frodo0 offset 0x0 not configured
com1 at frodo0 offset 0x40: ns8250 or ns16450, no fifo
com2 at frodo0 offset 0x60: ns8250 or ns16450, no fifo
hil0 at intio0 addr 0x428000 ipl 1
dma0 at intio0 addr 0x500000 ipl 1: 98620C, 2 channels, 32-bit DMA
dio0 at mainbus0
com0 at dio0 scode 9 ipl 5: ns16550a, working fifo
com0: console
internal parallel at dio0 scode 12 ipl 3 not configured
spc0 at dio0 scode 14 ipl 4: 98265A SCSI, HPSCSI_ID 0x7, 32-bit DMA, SCSI ID 4
scsibus0 at spc0: 8 targets, 8 luns per target
le0 at dio0 scode 21 ipl 5: address 08:00:09:25:53:42
le0: 8 receive buffers, 2 transmit buffers
sgc0 at mainbus0
sti0 at sgc0 slot 3: HPA1659A rev 8.02;10, ID 0x2A99000000000000
sti0: 2048x1024 frame buffer, 1280x1024x8 display, offset 1280x1024
sti0: 10x20 font type 1, 40 bpc, charset 0-255
timecounter: Timecounter "clockinterrupt" frequency 100 Hz quality 0
timecounter: Timecounter "mc6840" frequency 250000 Hz quality 100
scsibus0: waiting 2 seconds for devices to settle...
hil0 device 1: US ASCII keyboard
wskbd0 at hil0 mux 1
wsdisplay0 at sti0 kbdmux 1
wsmux1: connecting to wsdisplay0
wskbd0: connecting to wsdisplay0
sd2 at scsibus0 target 0 lun 0: <MELCO, DSC-UE4.3G, 1.05> disk fixed
sd2: 4103 MB, 12968 cyl, 6 head, 108 sec, 512 bytes/sect x 8403264 sectors
sd2: async, 8-bit transfers
sd1 at scsibus0 target 5 lun 0: <QUANTUM, PD210S, 528_> disk fixed
sd1: 199 MB, 1156 cyl, 7 head, 50 sec, 512 bytes/sect x 408574 sectors
sd1: async, 8-bit transfers
sd0 at scsibus0 target 6 lun 0: <QUANTUM, PD210S, 528_> disk fixed
sd0: 199 MB, 1156 cyl, 7 head, 50 sec, 512 bytes/sect x 408574 sectors
sd0: async, 8-bit transfers
boot device: sd0
root on sd0a dumps on sd0b
root file system type: ffs
wsdisplay0: screen 1 added (default, vt100 emulation)
? arch/hp300/dev/sgc.c
? arch/hp300/dev/sgcreg.h
? arch/hp300/dev/sgcvar.h
? arch/hp300/dev/sti_sgc.c
Index: arch/hp300/conf/GENERIC
===================================================================
RCS file: /cvsroot/src/sys/arch/hp300/conf/GENERIC,v
retrieving revision 1.147
diff -u -r1.147 GENERIC
--- arch/hp300/conf/GENERIC     10 Aug 2008 15:31:20 -0000      1.147
+++ arch/hp300/conf/GENERIC     12 Aug 2012 14:02:40 -0000
@@ -173,6 +173,11 @@
 #options       SCSIVERBOSE     # Verbose SCSI errors
 options        DIOVERBOSE      # recognize "unknown" DIO devices
 
+# wscons options
+# builtin terminal emulations
+#options       WSEMUL_SUN              # sun terminal emulation
+options        WSEMUL_VT100            # VT100 / VT220 emulation
+
 config         netbsd root on ? type ?
 
 #
@@ -183,6 +188,7 @@
 
 intio0         at mainbus0             # internal i/o space
 dio0           at mainbus0             # DIO/DIO-II bus
+sgc0           at mainbus0             # SGC bus on some 4xx models
 
 rtc*           at intio?               # real-time clock (not optional)
 dma*           at intio?               # DMA controller
@@ -219,6 +225,9 @@
 
 ite*           at grf?                 # Internal Terminal Emulator
 
+sti*           at sgc? slot ?          # SGC framebuffer
+wsdisplay*     at sti?
+
 com0           at dio0 scode 9         # DCA serial interfaces
 com*           at dio? scode ?
 
Index: arch/hp300/conf/files.hp300
===================================================================
RCS file: /cvsroot/src/sys/arch/hp300/conf/files.hp300,v
retrieving revision 1.78
diff -u -r1.78 files.hp300
--- arch/hp300/conf/files.hp300 31 Dec 2007 13:38:48 -0000      1.78
+++ arch/hp300/conf/files.hp300 12 Aug 2012 14:02:40 -0000
@@ -43,6 +43,14 @@
 file   arch/hp300/dev/dio.c            dio
 
 #
+# SGC bus
+#
+
+device sgc { slot = -1 }
+attach sgc at mainbus
+file   arch/hp300/dev/sgc.c            sgc
+
+#
 # Devices in Internal i/o space
 #
 
@@ -108,6 +116,9 @@
 attach rbox at intio with rbox_intio
 attach topcat at intio with topcat_intio
 
+attach sti at sgc with sti_sgc
+file   arch/hp300/dev/sti_sgc.c        sti_sgc needs-flag
+
 #
 # Devices on the DIO bus
 #
Index: arch/hp300/conf/majors.hp300
===================================================================
RCS file: /cvsroot/src/sys/arch/hp300/conf/majors.hp300,v
retrieving revision 1.21
diff -u -r1.21 majors.hp300
--- arch/hp300/conf/majors.hp300        31 Dec 2007 15:31:54 -0000      1.21
+++ arch/hp300/conf/majors.hp300        12 Aug 2012 14:02:40 -0000
@@ -35,11 +35,11 @@
 device-major   scsibus         char 34                 scsibus
 device-major   raid            char 35  block 15       raid
 device-major   svr4_net        char 36                 compat_svr4
-#device-major  wsdisplay       char 37                 wsdisplay
-#device-major  wskbd           char 38                 wskbd
-#device-major  wsmouse         char 39                 wsmouse
-#device-major  wsmux           char 40                 wsmux
-#device-major  wsfont          char 41                 wsfont
+device-major   wsdisplay       char 37                 wsdisplay
+device-major   wskbd           char 38                 wskbd
+device-major   wsmouse         char 39                 wsmouse
+device-major   wsmux           char 40                 wsmux
+device-major   wsfont          char 41                 wsfont
 device-major   clockctl        char 42                 clockctl
 device-major   cgd             char 44  block 16       cgd
 device-major   ksyms           char 45                 ksyms
Index: arch/hp300/hp300/bus_space.c
===================================================================
RCS file: /cvsroot/src/sys/arch/hp300/hp300/bus_space.c,v
retrieving revision 1.17
diff -u -r1.17 bus_space.c
--- arch/hp300/hp300/bus_space.c        28 Apr 2008 20:23:19 -0000      1.17
+++ arch/hp300/hp300/bus_space.c        12 Aug 2012 14:02:41 -0000
@@ -65,7 +65,8 @@
                return 0;
        }
 
-       if (t->bustype != HP300_BUS_SPACE_DIO)
+       if (t->bustype != HP300_BUS_SPACE_DIO &&
+           t->bustype != HP300_BUS_SPACE_SGC)
                panic("bus_space_map: bad space tag");
 
        /*
@@ -129,7 +130,8 @@
                return;
        }
 
-       if (t->bustype != HP300_BUS_SPACE_DIO)
+       if (t->bustype != HP300_BUS_SPACE_DIO &&
+           t->bustype != HP300_BUS_SPACE_SGC)
                panic("bus_space_map: bad space tag");
 
        kva = m68k_trunc_page(bsh);
Index: arch/hp300/include/bus.h
===================================================================
RCS file: /cvsroot/src/sys/arch/hp300/include/bus.h,v
retrieving revision 1.15
diff -u -r1.15 bus.h
--- arch/hp300/include/bus.h    28 Apr 2008 20:23:19 -0000      1.15
+++ arch/hp300/include/bus.h    12 Aug 2012 14:02:44 -0000
@@ -64,6 +64,7 @@
  */
 #define        HP300_BUS_SPACE_INTIO   0       /* space is intio space */
 #define        HP300_BUS_SPACE_DIO     1       /* space is dio space */
+#define        HP300_BUS_SPACE_SGC     2       /* space is sgc space */
 
 /*
  * Bus address and size types
Index: arch/hp700/dev/sti_sgc.c
===================================================================
RCS file: /cvsroot/src/sys/arch/hp700/dev/sti_sgc.c,v
retrieving revision 1.13
diff -u -r1.13 sti_sgc.c
--- arch/hp700/dev/sti_sgc.c    29 Mar 2008 15:59:26 -0000      1.13
+++ arch/hp700/dev/sti_sgc.c    12 Aug 2012 14:02:46 -0000
@@ -260,5 +260,5 @@
        if (ca->ca_hpa == (hppa_hpa_t)PAGE0->mem_cons.pz_hpa)
                sc->sc_flags |= STI_CONSOLE;
        hp700_pagezero_unmap(pagezero_cookie);
-       sti_attach_common(sc);
+       sti_attach_common(sc, STI_PACODE_BASE); /* XXX: 32bit only... */
 }
Index: conf/files
===================================================================
RCS file: /cvsroot/src/sys/conf/files,v
retrieving revision 1.924.4.6
diff -u -r1.924.4.6 files
--- conf/files  8 Oct 2009 09:47:09 -0000       1.924.4.6
+++ conf/files  12 Aug 2012 14:04:43 -0000
@@ -1065,7 +1065,7 @@
 
 # STI (hp graphics)
 device sti: wsemuldisplaydev
-file   dev/ic/sti.c            sti & (sti_pci | sti_gedoens)
+file   dev/ic/sti.c            sti & (sti_pci | sti_gedoens | sti_sgc)
 
 include "dev/wscons/files.wscons"
 include "dev/rasops/files.rasops"
Index: dev/ic/sti.c
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/sti.c,v
retrieving revision 1.9
diff -u -r1.9 sti.c
--- dev/ic/sti.c        8 Apr 2008 12:07:27 -0000       1.9
+++ dev/ic/sti.c        12 Aug 2012 14:04:51 -0000
@@ -120,7 +120,7 @@
 void sti_attach_deferred(struct device *);
 
 void
-sti_attach_common(struct sti_softc *sc)
+sti_attach_common(struct sti_softc *sc, u_int codebase)
 {
        struct sti_inqconfout cfg;
        struct sti_einqconfout ecfg;
@@ -170,25 +170,30 @@
                dd->dd_eddst[2]= bus_space_read_1(sc->memt, sc->romh, 0xdf);
                dd->dd_cfbaddr = parseword(0xe0) & ~3;
 
-               dd->dd_pacode[0x0] = parseword(0x100) & ~3;
-               dd->dd_pacode[0x1] = parseword(0x110) & ~3;
-               dd->dd_pacode[0x2] = parseword(0x120) & ~3;
-               dd->dd_pacode[0x3] = parseword(0x130) & ~3;
-               dd->dd_pacode[0x4] = parseword(0x140) & ~3;
-               dd->dd_pacode[0x5] = parseword(0x150) & ~3;
-               dd->dd_pacode[0x6] = parseword(0x160) & ~3;
-               dd->dd_pacode[0x7] = parseword(0x170) & ~3;
-               dd->dd_pacode[0x8] = parseword(0x180) & ~3;
-               dd->dd_pacode[0x9] = parseword(0x190) & ~3;
-               dd->dd_pacode[0xa] = parseword(0x1a0) & ~3;
-               dd->dd_pacode[0xb] = parseword(0x1b0) & ~3;
-               dd->dd_pacode[0xc] = parseword(0x1c0) & ~3;
-               dd->dd_pacode[0xd] = parseword(0x1d0) & ~3;
-               dd->dd_pacode[0xe] = parseword(0x1e0) & ~3;
-               dd->dd_pacode[0xf] = parseword(0x1f0) & ~3;
-       } else  /* STI_DEVTYPE4 */
+               codebase <<= 2;
+               dd->dd_pacode[0x0] = parseword(codebase + 0x00) & ~3;
+               dd->dd_pacode[0x1] = parseword(codebase + 0x10) & ~3;
+               dd->dd_pacode[0x2] = parseword(codebase + 0x20) & ~3;
+               dd->dd_pacode[0x3] = parseword(codebase + 0x30) & ~3;
+               dd->dd_pacode[0x4] = parseword(codebase + 0x40) & ~3;
+               dd->dd_pacode[0x5] = parseword(codebase + 0x50) & ~3;
+               dd->dd_pacode[0x6] = parseword(codebase + 0x60) & ~3;
+               dd->dd_pacode[0x7] = parseword(codebase + 0x70) & ~3;
+               dd->dd_pacode[0x8] = parseword(codebase + 0x80) & ~3;
+               dd->dd_pacode[0x9] = parseword(codebase + 0x90) & ~3;
+               dd->dd_pacode[0xa] = parseword(codebase + 0xa0) & ~3;
+               dd->dd_pacode[0xb] = parseword(codebase + 0xb0) & ~3;
+               dd->dd_pacode[0xc] = parseword(codebase + 0xc0) & ~3;
+               dd->dd_pacode[0xd] = parseword(codebase + 0xd0) & ~3;
+               dd->dd_pacode[0xe] = parseword(codebase + 0xe0) & ~3;
+               dd->dd_pacode[0xf] = parseword(codebase + 0xf0) & ~3;
+       } else { /* STI_DEVTYPE4 */
                bus_space_read_region_4(sc->memt, sc->romh, 0, (u_int32_t *)dd,
                    sizeof(*dd) / 4);
+               /* fix pacode... */
+               bus_space_read_region_4(sc->memt, sc->romh, codebase,
+                   (u_int32_t *)dd->dd_pacode, sizeof(*dd->dd_pacode) / 4);
+       }
 
 #ifdef STIDEBUG
        printf("dd:\n"
Index: dev/ic/stireg.h
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/stireg.h,v
retrieving revision 1.2
diff -u -r1.2 stireg.h
--- dev/ic/stireg.h     11 Dec 2005 12:21:28 -0000      1.2
+++ dev/ic/stireg.h     12 Aug 2012 14:04:53 -0000
@@ -153,8 +153,10 @@
        u_int32_t       dd_cfbaddr;     /* 0x3c CFB address, location of
                                                X11 driver to be used for
                                                servers w/o accel */
-       u_int32_t       dd_pacode[16];  /* 0x40 routines for pa-risc */
+       u_int32_t       dd_pacode[16];  /* 0x40 routines for pa-risc(32bit) */
        u_int32_t       dd_altcode[16]; /* 0x80 routines for m68k/i386 */
+#define        STI_PACODE_BASE         0x40
+#define        STI_ALTCODE_BASE        0x80
 };
 
 /* after the last region there is one indirect list ptr */
Index: dev/ic/stivar.h
===================================================================
RCS file: /cvsroot/src/sys/dev/ic/stivar.h,v
retrieving revision 1.2
diff -u -r1.2 stivar.h
--- dev/ic/stivar.h     11 Dec 2005 12:21:28 -0000      1.2
+++ dev/ic/stivar.h     12 Aug 2012 14:04:53 -0000
@@ -76,7 +76,7 @@
        sti_util_t      util;
 };
 
-void sti_attach_common(struct sti_softc *sc);
+void sti_attach_common(struct sti_softc *sc, u_int);
 int sti_intr(void *v);
 
 #endif /* _IC_STIVAR_H_ */
--- arch/hp300/dev/sgc.c.orig   1970-01-01 09:00:00.000000000 +0900
+++ arch/hp300/dev/sgc.c        2009-05-01 18:51:19.000000000 +0900
@@ -0,0 +1,149 @@
+/*     $OpenBSD: sgc.c,v 1.5 2007/01/06 20:10:57 miod Exp $    */
+
+/*
+ * Copyright (c) 2005, Miodrag Vallat
+ *
+ * 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.
+ *
+ * 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.
+ *
+ */
+
+/*
+ * SGC bus attachment and mapping glue.
+ */
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD$");
+
+#include <sys/param.h>
+#include <sys/device.h>
+#include <sys/errno.h>
+#include <sys/kernel.h>
+#include <sys/systm.h>
+
+#include <uvm/uvm_extern.h>
+
+#include <machine/bus.h>
+#include <machine/hp300spu.h>
+
+#include <hp300/dev/sgcreg.h>
+#include <hp300/dev/sgcvar.h>
+
+static int sgc_matched = 0;
+
+struct sgc_softc {
+       struct device sc_dev;
+       struct bus_space_tag sc_tag;
+};
+
+static int     sgcmatch(device_t, struct cfdata *, void *);
+static void    sgcattach(device_t, device_t, void *);
+static int     sgcprint(void *, const char *);
+
+CFATTACH_DECL(sgc, sizeof(struct sgc_softc), sgcmatch, sgcattach, NULL, NULL);
+
+static int
+sgcmatch(device_t parent, struct cfdata *match, void *aux)
+{
+
+       /* Allow only one instance. */
+       if (sgc_matched)
+               return 0;
+
+       /*
+        * Leave out machines which can not have an SGC bus.
+        */
+
+       if (machineid != HP_400 && machineid != HP_425 &&
+           machineid != HP_433)
+               return 0;
+
+       return (sgc_matched = 1);
+}
+
+static void
+sgcattach(device_t parent, device_t self, void *aux)
+{
+       struct sgc_softc *sc = device_private(self);
+       struct sgc_attach_args saa;
+       bus_addr_t pa;
+       bus_space_tag_t bst = &sc->sc_tag;
+       bus_space_handle_t bsh;
+       int slot;
+       void *va;
+
+       aprint_normal("\n");
+       aprint_naive("\n");
+
+       memset(bst, 0, sizeof(struct bus_space_tag));
+       bst->bustype = HP300_BUS_SPACE_SGC;
+
+       for (slot = 0; slot < SGC_NSLOTS; slot++) {
+               pa = (bus_addr_t)sgc_slottopa(slot);
+               if (bus_space_map(bst, pa, PAGE_SIZE, 0, &bsh)) {
+                       aprint_error("%s: can't map slot %d\n",
+                           device_xname(self), slot);
+                       continue;
+               }
+               va = bus_space_vaddr(bst, bsh);
+
+               /* Check for hardware. */
+               if (badaddr(va)) {
+                       bus_space_unmap(bst, bsh, PAGE_SIZE);
+                       continue;
+               }
+               bus_space_unmap(bst, bsh, PAGE_SIZE);
+
+               bzero(&saa, sizeof(saa));
+               saa.saa_slot = slot;
+               saa.saa_iot = bst;
+
+               /* Attach matching device. */
+               config_found(self, &saa, sgcprint);
+       }
+}
+
+static int
+sgcprint(void *aux, const char *pnp)
+{
+       struct sgc_attach_args *saa = aux;
+
+       if (pnp)
+               printf("unknown SGC card at %s", pnp);
+       printf(" slot %d", saa->saa_slot);
+       return UNCONF;
+}
+
+/*
+ * Convert a slot number to a system physical address.
+ * This is needed for bus_space.
+ */
+void *
+sgc_slottopa(int slot)
+{
+       u_long rval;
+
+       if (slot < 0 || slot >= SGC_NSLOTS)
+               rval = 0;
+       else
+               rval = SGC_BASE + (slot * SGC_DEVSIZE);
+
+       return (void *)rval;
+}
--- arch/hp300/dev/sgcreg.h.orig        1970-01-01 09:00:00.000000000 +0900
+++ arch/hp300/dev/sgcreg.h     2009-01-03 08:22:34.000000000 +0900
@@ -0,0 +1,41 @@
+/*     $OpenBSD: sgcreg.h,v 1.1 2005/01/14 22:39:26 miod Exp $ */
+
+/*
+ * Copyright (c) 2005, Miodrag Vallat
+ *
+ * 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.
+ *
+ * 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.
+ */
+
+/*
+ * Register definitions for the SGC bus.
+ */
+
+/*
+ * SGC ranges from slots 0-3 at physical addresses given by:
+ *     0x20000000 + slot * 0x04000000
+ */
+
+#define        SGC_BASE                0x20000000
+#define        SGC_END                 0x30000000
+#define        SGC_DEVSIZE             0x04000000
+
+#define        SGC_NSLOTS              4
--- arch/hp300/dev/sgcvar.h.orig        1970-01-01 09:00:00.000000000 +0900
+++ arch/hp300/dev/sgcvar.h     2009-01-03 08:22:34.000000000 +0900
@@ -0,0 +1,41 @@
+/*     $OpenBSD: sgcvar.h,v 1.2 2007/01/06 20:09:12 miod Exp $ */
+
+/*
+ * Copyright (c) 2005, Miodrag Vallat.
+ * 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.
+ *
+ * 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.
+ *
+ */
+
+/*
+ * Autoconfiguration definitions and prototypes for the SGC bus.
+ */
+
+struct sgc_attach_args {
+       int     saa_slot;               /* slot number */
+       bus_space_tag_t saa_iot;
+};
+
+#ifdef _KERNEL
+void   *sgc_slottopa(int);
+#endif /* _KERNEL */
--- arch/hp300/dev/sti_sgc.c.orig       1970-01-01 09:00:00.000000000 +0900
+++ arch/hp300/dev/sti_sgc.c    2009-01-03 08:43:14.000000000 +0900
@@ -0,0 +1,144 @@
+/*     $OpenBSD: sti_sgc.c,v 1.14 2007/05/26 00:36:03 krw Exp $        */
+
+/*
+ * Copyright (c) 2005, Miodrag Vallat
+ *
+ * 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.
+ *
+ * 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>
+__KERNEL_RCSID(0, "$NetBSD");
+
+#include <sys/param.h>
+#include <sys/device.h>
+#include <sys/errno.h>
+
+#include <uvm/uvm_extern.h>
+
+#include <machine/bus.h>
+
+#include <hp300/dev/sgcvar.h>
+
+#include <dev/ic/stireg.h>
+#include <dev/ic/stivar.h>
+
+
+static int sticonslot;
+
+
+static int sti_sgc_match(device_t, struct cfdata *, void *);
+static void sti_sgc_attach(device_t, device_t, void *);
+
+static int sti_sgc_probe(bus_space_tag_t, int);
+
+CFATTACH_DECL(sti_sgc, sizeof(struct sti_softc),
+    sti_sgc_match, sti_sgc_attach, NULL, NULL);
+
+
+
+static int
+sti_sgc_match(device_t parent, struct cfdata *cf, void *aux)
+{
+       struct sgc_attach_args *saa = aux;
+
+       /*
+        * If we already probed it successfully as a console device, go ahead,
+        * since we will not be able to bus_space_map() again.
+        */
+       if (saa->saa_slot == sticonslot)
+               return (1);
+
+       return sti_sgc_probe(saa->saa_iot, saa->saa_slot);
+}
+
+static void
+sti_sgc_attach(device_t parent, device_t self, void *aux)
+{
+       struct sti_softc *sc = device_private(self);
+       struct sgc_attach_args *saa = aux;
+       bus_space_tag_t iot = saa->saa_iot;
+       bus_space_handle_t ioh;
+       u_int romend;
+       int devtype;
+
+       /* XXX: temporalily map before obtain romend. */
+#define STI_ROMSIZE_SAFE       (sizeof(struct sti_dd) * 4)
+       if (bus_space_map(iot, (bus_addr_t)sgc_slottopa(saa->saa_slot),
+           STI_ROMSIZE_SAFE, 0, &ioh)) {
+               aprint_error(": can't map ROM");
+               return;
+       }
+       devtype = bus_space_read_1(iot, ioh, 3);
+       if (devtype == STI_DEVTYPE1)
+               romend =
+                   bus_space_read_1(iot, ioh, STI_DEV1_DD_ROMEND + 3) << 24 |
+                   bus_space_read_1(iot, ioh, STI_DEV1_DD_ROMEND + 7) << 16 |
+                   bus_space_read_1(iot, ioh, STI_DEV1_DD_ROMEND + 11) << 8 |
+                   bus_space_read_1(iot, ioh, STI_DEV1_DD_ROMEND + 15);
+       else if (devtype == STI_DEVTYPE4)
+               romend = bus_space_read_4(iot, ioh, STI_DEV4_DD_ROMEND);
+       else {
+               aprint_error("%s: unknown devtype 0x%x\n",
+                   device_xname(self), devtype);
+               bus_space_unmap(iot, ioh, sizeof(struct sti_dd));
+               return;
+       }
+       bus_space_unmap(iot, ioh, sizeof(struct sti_dd));
+
+       sc->memt = sc->iot = saa->saa_iot;
+       sc->base = (bus_addr_t)sgc_slottopa(saa->saa_slot);
+
+       if (bus_space_map(sc->iot, (bus_addr_t)sgc_slottopa(saa->saa_slot),
+           romend, 0, &sc->romh)) {
+               aprint_error(": can't map ROM(2)");
+               return;
+       }
+       sc->sc_devtype = devtype;
+       if (saa->saa_slot == sticonslot)
+               sc->sc_flags |= STI_CONSOLE;
+
+       sti_attach_common(sc, STI_ALTCODE_BASE);
+}
+
+static int
+sti_sgc_probe(bus_space_tag_t iot, int slot)
+{
+       bus_space_handle_t ioh;
+       int devtype;
+
+       if (bus_space_map(iot, (bus_addr_t)sgc_slottopa(slot),
+           PAGE_SIZE, 0, &ioh))
+               return 0;
+       devtype = bus_space_read_1(iot, ioh, 3);
+       bus_space_unmap(iot, ioh, PAGE_SIZE);
+
+       /*
+        * This might not be reliable enough. On the other hand, non-STI
+        * SGC cards will apparently not initialize in an hp300, to the
+        * point of not even answering bus probes (checked with an
+        * Harmony/FDDI SGC card).
+        */
+       if (devtype != STI_DEVTYPE1 &&
+           devtype != STI_DEVTYPE4)
+               return 0;
+       return 1;
+}
Index: arch/hp300/conf/files.hp300
===================================================================
RCS file: /cvsroot/src/sys/arch/hp300/conf/files.hp300,v
retrieving revision 1.78
diff -u -r1.78 files.hp300
--- arch/hp300/conf/files.hp300 31 Dec 2007 13:38:48 -0000      1.78
+++ arch/hp300/conf/files.hp300 12 Aug 2012 14:02:40 -0000
@@ -52,7 +60,7 @@
 file   arch/hp300/dev/rtc.c                    rtc
 
 # Human (Hilarious) Interface Loop
-device hil { }
+device hil { }: wskbddev
 attach hil at intio
 file   arch/hp300/dev/hil.c                    hil     needs-flag
 file   arch/hp300/dev/hil_keymaps.c            hil
Index: arch/hp300/dev/hil.c
===================================================================
RCS file: /cvsroot/src/sys/arch/hp300/dev/Attic/hil.c,v
retrieving revision 1.82
diff -u -r1.82 hil.c
--- arch/hp300/dev/hil.c        13 Jun 2008 09:41:15 -0000      1.82
+++ arch/hp300/dev/hil.c        12 Aug 2012 14:02:41 -0000
@@ -86,6 +86,7 @@
 #include <sys/systm.h>
 #include <sys/conf.h>
 #include <sys/device.h>
+#include <sys/errno.h>
 #include <sys/file.h>
 #include <sys/ioctl.h>
 #include <sys/kernel.h>
@@ -102,6 +103,12 @@
 #include <sys/rnd.h>
 #endif
 
+#include <dev/wscons/wsconsio.h>
+#include <dev/wscons/wskbdvar.h>
+#include <dev/wscons/wsksymdef.h>
+#include <dev/wscons/wsksymvar.h>
+#include "wskbd.h"
+
 #include <hp300/dev/intiovar.h>
 
 #include <hp300/dev/hilreg.h>
@@ -175,6 +182,26 @@
 static void    hilreport(struct hil_softc *);
 #endif /* DEBUG */
 
+#if NWSKBD > 0
+static int     hil_enable(void *, int);
+static void    hil_set_leds(void *, int);
+static int     hil_ioctl(void *, u_long, void *, int, struct lwp *);
+#endif
+
+struct wskbd_accessops hil_accessops = {
+#if NWSKBD > 0
+       hil_enable,
+       hil_set_leds,
+       hil_ioctl,
+#endif
+};
+extern const struct wscons_keydesc hil_keydesctab[];
+struct wskbd_mapdata hil_keymapdata = {
+       hil_keydesctab,
+       0
+};
+static int hilkbd_is_console = 0;
+
 static int
 hilmatch(device_t parent, cfdata_t cf, void *aux)
 {
@@ -252,17 +279,52 @@
 hilattach_deferred(device_t self)
 {
        struct hil_softc *sc = device_private(self);
+       struct wskbddev_attach_args a;
+       struct cfdriver *cd;
+       int wskbd = 0;
 
 #ifdef DEBUG
        if (hildebug & HDB_FOLLOW)
                aprint_debug("hilinit(%p, %p)\n", sc, sc->sc_addr);
 #endif
+
+       /*
+        * find attached sti(4).
+        * wsdisplay/wskbd is supported by sti(4) only now.
+        */
+       cd = config_cfdriver_lookup("sti");
+       if (cd != NULL && cd->cd_ndevs != 0)
+               wskbd = 1;
+
        /*
         * Initialize hardware.
         * Reset the loop hardware, and collect keyboard/id info
         */
        hilreset(sc);
        hilinfo(sc);
+       if (sc->sc_kbddev && wskbd) {
+               switch (sc->sc_kbdlang) {
+               case KBD_US:
+                       hil_keymapdata.layout = KB_US;
+                       break;
+               case KBD_UK:
+                       hil_keymapdata.layout = KB_UK;
+                       break;
+               case KBD_SE:
+                       hil_keymapdata.layout = KB_SV;
+                       break;
+               default:
+                       aprint_normal_dev(self, "unknwon lang %d, use KB_US",
+                           sc->sc_kbdlang);
+                       hil_keymapdata.layout = KB_US;
+                       break;
+               }
+               a.console = hilkbd_is_console;
+               a.keymap = &hil_keymapdata;
+               a.accessops = &hil_accessops;
+               a.accesscookie = sc; 
+               sc->sc_wskbddev = config_found(self, &a, wskbddevprint);
+       }
        hilkbdenable(sc);
 }
 
@@ -845,15 +907,55 @@
                printf("hilint: %x %x\n", stat, c);
 #endif
 
+#if NWSKBD > 0
+       /*
+        * Check and issue dummy shift(126)/control(127) event.
+        * Don't occur these in repeat-mode.
+        */
+       switch ((stat>>HIL_SSHIFT) & HIL_SMASK) {
+       case HIL_SHIFT:
+               wskbd_input(sc->sc_wskbddev, WSCONS_EVENT_KEY_DOWN, 126);
+               break;
+       case HIL_CTRL:
+               wskbd_input(sc->sc_wskbddev, WSCONS_EVENT_KEY_DOWN, 127);
+               break;
+       case HIL_CTRLSHIFT:
+               wskbd_input(sc->sc_wskbddev, WSCONS_EVENT_KEY_DOWN, 127);
+               wskbd_input(sc->sc_wskbddev, WSCONS_EVENT_KEY_DOWN, 126);
+               break;
+       }
+#endif
+
        /* the shift enables the compiler to generate a jump table */
        switch ((stat>>HIL_SSHIFT) & HIL_SMASK) {
 
-#if NITE > 0
+#if NITE > 0 || NWSKBD > 0
        case HIL_KEY:
        case HIL_SHIFT:
        case HIL_CTRL:
        case HIL_CTRLSHIFT:
+#if NITE > 0
                itefilter(stat, c);
+#endif
+#if NWSKBD > 0
+               if ((c & 0x7f) == 0x12 ||
+                   (c & 0x7f) == 0x13) {
+                       int ev = (c & 0x80) ?
+                           WSCONS_EVENT_KEY_UP : WSCONS_EVENT_KEY_DOWN;
+
+                       wskbd_input(sc->sc_wskbddev, ev, c & 0x7f);
+                       return;
+               }
+               wskbd_input(sc->sc_wskbddev, WSCONS_EVENT_KEY_DOWN, c);
+               /* key up is no event.  Also repeat automatic. */
+               wskbd_input(sc->sc_wskbddev, WSCONS_EVENT_KEY_UP, c);
+
+               /*
+                * Always clear shift(126) and control(127) here.
+                */
+               wskbd_input(sc->sc_wskbddev, WSCONS_EVENT_KEY_UP, 127);
+               wskbd_input(sc->sc_wskbddev, WSCONS_EVENT_KEY_UP, 126);
+#endif
                return;
 #endif
 
@@ -1233,6 +1335,7 @@
 
        va = bus_space_vaddr(bst, bsh);
        hilkbd_cn_device = (struct hil_dev *)va;
+       hilkbd_is_console = 1;
 
        /* Default to US-ASCII keyboard. */
        hilkbd_cn_map.keymap = us_keymap;
@@ -1312,6 +1415,7 @@
                for (km = kbd_map; km->kbd_code; km++)
                        if (km->kbd_code == sc->sc_kbdlang) {
                                aprint_normal("%s ", km->kbd_desc);
+                               sc->sc_kbdmap = km;
                                break;
                        }
                aprint_normal("keyboard\n");
@@ -1456,9 +1560,9 @@
                    sc->sc_kbdlang, db);
 #endif
        if (sc->sc_kbdlang != KBD_SPECIAL) {
+#if NITE > 0
                struct kbdmap *km;
 
-#if NITE > 0
                for (km = kbd_map; km->kbd_code; km++) {
                        if (km->kbd_code == db) {
                                sc->sc_kbdlang = db;
@@ -1466,11 +1570,11 @@
                                break;
                        }
                }
-#endif
                if (km->kbd_code == 0) {
                        printf("hilconfig: unknown keyboard type 0x%x, "
                            "using default\n", db);
                }
+#endif
        }
        splx(s);
 }
@@ -1771,3 +1875,42 @@
        splx(s);
 }
 #endif
+
+#if NWSKBD > 0
+static int
+hil_enable(void *v, int on)
+{
+
+       if (on) {
+               hilkbdenable(v);
+       } else {
+               if (hilkbd_is_console)
+                       return EBUSY;
+               hilkbddisable(v);
+       }
+       return 0;
+}
+
+static void
+hil_set_leds(void *v, int on)
+{
+       /* Nothing */
+}
+
+static int
+hil_ioctl(void *v, u_long cmd, void *data, int flag, struct lwp *l)
+{
+
+       switch (cmd) {
+       case WSKBDIO_GTYPE:
+               *(int *)data = WSKBD_TYPE_HIL;
+               return 0;
+       case WSKBDIO_SETLEDS:
+               return 0;
+       case WSKBDIO_GETLEDS:
+               *(int *)data = 0;
+               return 0;
+       }
+       return EPASSTHROUGH;
+}
+#endif /* NWSKBD > 0 */
Index: arch/hp300/dev/hil_keymaps.c
===================================================================
RCS file: /cvsroot/src/sys/arch/hp300/dev/Attic/hil_keymaps.c,v
retrieving revision 1.14
diff -u -r1.14 hil_keymaps.c
--- arch/hp300/dev/hil_keymaps.c        11 Dec 2005 12:17:14 -0000      1.14
+++ arch/hp300/dev/hil_keymaps.c        12 Aug 2012 14:02:41 -0000
@@ -103,6 +103,9 @@
 #include <sys/param.h>
 #include <hp300/dev/kbdmap.h>
 
+#include <dev/wscons/wsksymdef.h>
+#include <dev/wscons/wsksymvar.h>
+
 char   us_keymap[] = {
        '\0',   '`',    '\\',   ESC,    '\0',   DEL,    '\0',   '\0',
        '\n',   '\t',   '\0',   '\0',   '\0',   '\0',   '\0',   '\0',
@@ -374,3 +377,164 @@
 
        { 0, "", NULL, NULL, NULL, NULL, NULL },
 };
+
+
+#define KC(n) KS_KEYCODE(n)
+
+static const keysym_t hil_keydesc_us[] = {
+/*  pos      command           normal          shifted */
+    KC(1),                     KS_Escape,
+    KC(2),                     KS_bar,         KS_backslash,
+    KC(5),   KS_Cmd_Debugger,
+    KC(7),                     KS_Select,
+    KC(8),                     KS_KP_Enter,
+    KC(9),                     KS_KP_Tab,
+    KC(15),                    KS_Prior,
+    KC(16),                    KS_Next,
+    KC(17),                    KS_Print_Screen,
+    KC(18),  KS_Cmd2,          KS_Alt_L,
+    KC(19),  KS_Cmd2,          KS_Alt_R,
+    KC(21),                    KS_Menu,
+    KC(23),                    KS_Clear,
+    KC(24),                    KS_Caps_Lock,
+    KC(25),                    KS_Tab,
+    KC(27),                    KS_f1,
+    KC(28),                    KS_f2,
+    KC(29),                    KS_f5,
+    KC(30),                    KS_f6,
+    KC(31),                    KS_f7,
+    KC(32),                    KS_f3,
+    KC(33),                    KS_f4,
+    KC(34),                    KS_Down,
+    KC(35),                    KS_Up,
+    KC(36),                    KS_f8,
+    KC(38),                    KS_Left,
+    KC(39),                    KS_Right,
+    KC(41),                    KS_Delete,
+    KC(45),                    KS_Insert,
+    KC(46),                    KS_BackSpace,
+    KC(57),                    KS_Return,
+    KC(60),                    KS_KP_0,
+    KC(63),                    KS_KP_Add,
+    KC(64),                    KS_KP_1,
+    KC(65),                    KS_KP_2,
+    KC(66),                    KS_KP_3,
+    KC(67),                    KS_KP_Subtract,
+    KC(68),                    KS_KP_4,
+    KC(69),                    KS_KP_5,
+    KC(70),                    KS_KP_6,
+    KC(71),                    KS_KP_Multiply,
+    KC(72),                    KS_KP_7,
+    KC(73),                    KS_KP_8,
+    KC(74),                    KS_KP_9,
+    KC(75),                    KS_KP_Divide,
+
+    KC(80),                    KS_1,           KS_exclam,
+    KC(81),                    KS_2,           KS_at,
+    KC(82),                    KS_3,           KS_numbersign,
+    KC(83),                    KS_4,           KS_dollar,
+    KC(84),                    KS_5,           KS_percent,
+    KC(85),                    KS_6,           KS_asciicircum,
+    KC(86),                    KS_7,           KS_ampersand,
+    KC(87),                    KS_8,           KS_asterisk,
+    KC(88),                    KS_9,           KS_parenleft,
+    KC(89),                    KS_0,           KS_parenright,
+    KC(90),                    KS_minus,       KS_underscore,
+    KC(91),                    KS_equal,       KS_plus,
+    KC(92),                    KS_braceleft,   KS_bracketleft,
+    KC(93),                    KS_braceright,  KS_bracketright,
+    KC(94),                    KS_semicolon,   KS_colon,
+    KC(95),                    KS_apostrophe,  KS_quotedbl,
+    KC(96),                    KS_comma,       KS_less,
+    KC(97),                    KS_period,      KS_greater,
+    KC(98),                    KS_slash,       KS_question,
+
+    KC(99),                    KS_space,
+    KC(100),                   KS_o,           KS_O,
+    KC(101),                   KS_p,           KS_P,
+    KC(102),                   KS_k,           KS_K,
+    KC(103),                   KS_l,           KS_L,
+    KC(104),                   KS_q,           KS_Q,
+    KC(105),                   KS_w,           KS_W,
+    KC(106),                   KS_e,           KS_E,
+    KC(107),                   KS_r,           KS_R,
+    KC(108),                   KS_t,           KS_T,
+    KC(109),                   KS_y,           KS_Y,
+    KC(110),                   KS_u,           KS_U,
+    KC(111),                   KS_i,           KS_I,
+    KC(112),                   KS_a,           KS_A,
+    KC(113),                   KS_s,           KS_S,
+    KC(114),                   KS_d,           KS_D,
+    KC(115),                   KS_f,           KS_F,
+    KC(116),                   KS_g,           KS_G,
+    KC(117),                   KS_h,           KS_H,
+    KC(118),                   KS_j,           KS_J,
+    KC(119),                   KS_m,           KS_M,
+    KC(120),                   KS_z,           KS_Z,
+    KC(121),                   KS_x,           KS_X,
+    KC(122),                   KS_c,           KS_C,
+    KC(123),                   KS_v,           KS_V,
+    KC(124),                   KS_b,           KS_B,
+    KC(125),                   KS_n,           KS_N,
+
+    /*
+     * Shift and Control not input event in repeat-mode.
+     * Change state with dummy input, if these down/up.
+     */
+    KC(126),   KS_Cmd,         KS_Shift_L,
+    KC(127),   KS_Cmd1,        KS_Control_L,
+};
+
+static const keysym_t hil_keydesc_uk[] = {
+    KC(80),                    KS_1,           KS_exclam,
+    KC(81),                    KS_2,           KS_quotedbl,
+    KC(82),                    KS_3,           KS_numbersign,
+    KC(83),                    KS_4,           KS_dollar,
+    KC(84),                    KS_5,           KS_percent,
+    KC(85),                    KS_6,           KS_ampersand,
+    KC(86),                    KS_7,           KS_asciicircum,
+    KC(87),                    KS_8,           KS_parenleft,
+    KC(88),                    KS_9,           KS_parenright,
+    KC(89),                    KS_0,           KS_equal,
+    KC(90),                    KS_plus,        KS_question,
+    KC(91),                    KS_apostrophe,  KS_slash,
+    KC(92),                    KS_braceleft,   KS_bracketleft,
+    KC(93),                    KS_braceright,  KS_bracketright,
+    KC(94),                    KS_asterisk,    KS_at,
+    KC(95),                    KS_backslash,   KS_bar,
+    KC(96),                    KS_comma,       KS_semicolon,
+    KC(97),                    KS_period,      KS_colon,
+    KC(98),                    KS_minus,       KS_underscore,
+};
+
+static const keysym_t hil_keydesc_se[] = {
+    KC(80),                    KS_1,           KS_exclam,
+    KC(81),                    KS_2,           KS_quotedbl,
+    KC(82),                    KS_3,           KS_numbersign,
+    KC(83),                    KS_4,           KS_dollar,
+    KC(84),                    KS_5,           KS_percent,
+    KC(85),                    KS_6,           KS_ampersand,
+    KC(86),                    KS_7,           KS_slash,
+    KC(87),                    KS_8,           KS_parenleft,
+    KC(88),                    KS_9,           KS_parenright,
+    KC(89),                    KS_0,           KS_equal,
+    KC(90),                    KS_plus,        KS_question,
+    KC(91),                    KS_grave,       KS_at,
+    KC(92),                    KS_bracketright,KS_braceright,
+    KC(93),                    KS_asciitilde,  KS_asciicircum,
+    KC(94),                    KS_bar,         KS_backslash,
+    KC(95),                    KS_bracketleft, KS_braceleft,
+    KC(96),                    KS_comma,       KS_semicolon,
+    KC(97),                    KS_period,      KS_colon,
+    KC(98),                    KS_minus,       KS_underscore,
+};
+
+#define KBD_MAP(name, base, map) \
+                       { name, base, sizeof(map)/sizeof(keysym_t), map }
+
+const struct wscons_keydesc hil_keydesctab[] = {
+       KBD_MAP(KB_US,                  0,      hil_keydesc_us),
+       KBD_MAP(KB_UK,                  KB_US,  hil_keydesc_uk),
+       KBD_MAP(KB_SV,                  KB_US,  hil_keydesc_se),
+       { 0, 0, 0, 0 }
+};
Index: arch/hp300/dev/hilvar.h
===================================================================
RCS file: /cvsroot/src/sys/arch/hp300/dev/Attic/hilvar.h,v
retrieving revision 1.25
diff -u -r1.25 hilvar.h
--- arch/hp300/dev/hilvar.h     29 Mar 2008 06:47:07 -0000      1.25
+++ arch/hp300/dev/hilvar.h     12 Aug 2012 14:02:41 -0000
@@ -141,6 +141,8 @@
        uint8_t sc_kbddev;              /* keyboard device on loop */
        uint8_t sc_kbdlang;             /* keyboard language */
        uint8_t sc_kbdflags;            /* keyboard state */
+       device_t sc_wskbddev;           /* workstation keyboard */
+       struct kbdmap *sc_kbdmap;       /* keyboard map */
 #if NRND > 0
        rndsource_element_t rnd_source;
 #endif


Home | Main Index | Thread Index | Old Index