summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkettenis <kettenis@openbsd.org>2007-07-03 20:49:57 +0000
committerkettenis <kettenis@openbsd.org>2007-07-03 20:49:57 +0000
commit4e12c65ad7b90ab63290af08d7722a77159096fd (patch)
tree5ba00783b219e963b4dd593f795a0253bae86cb8
parentmaintain the traffic-indication (TIM) virtual bitmap by defining (diff)
downloadwireguard-openbsd-4e12c65ad7b90ab63290af08d7722a77159096fd.tar.xz
wireguard-openbsd-4e12c65ad7b90ab63290af08d7722a77159096fd.zip
Mark ukbd(4) as console keyboard when appropriate.
-rw-r--r--sys/arch/hppa/dev/ssio.c29
1 files changed, 28 insertions, 1 deletions
diff --git a/sys/arch/hppa/dev/ssio.c b/sys/arch/hppa/dev/ssio.c
index e54b481def9..f6d3cf60c91 100644
--- a/sys/arch/hppa/dev/ssio.c
+++ b/sys/arch/hppa/dev/ssio.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssio.c,v 1.4 2007/06/26 17:53:23 kettenis Exp $ */
+/* $OpenBSD: ssio.c,v 1.5 2007/07/03 20:49:57 kettenis Exp $ */
/*
* Copyright (c) 2007 Mark Kettenis
@@ -25,6 +25,7 @@
#include <sys/device.h>
#include <machine/bus.h>
+#include <machine/iomod.h>
#include <dev/pci/pcireg.h>
#include <dev/pci/pcivar.h>
@@ -33,6 +34,12 @@
#include <hppa/dev/ssiovar.h>
+#include "ukbd.h"
+#if NUKBD > 0
+#include <dev/usb/ohcireg.h>
+#include <dev/usb/ukbdvar.h>
+#endif
+
/* PCI config space. */
#define SSIO_PCI_DMA_RC2 0x64
#define SSIO_PCI_INT_TC1 0x67
@@ -167,6 +174,9 @@ ssio_attach(struct device *parent, struct device *self, void *aux)
pci_intr_handle_t ih;
const char *intrstr;
pcireg_t reg;
+#if NUKBD > 0
+ pcitag_t tag;
+#endif
sc->sc_iot = pa->pa_iot;
if (bus_space_map(sc->sc_iot, SSIO_PIC1, 2, 0, &sc->sc_ic1h)) {
@@ -265,6 +275,23 @@ ssio_attach(struct device *parent, struct device *self, void *aux)
saa.saa_irq = 7;
config_found(self, &saa, ssio_print);
+#if NUKBD > 0
+ /*
+ * If a USB keybard is used for console input, the firmware passes
+ * the mmio address of the USB controller the keyboard is attached
+ * to. Since we know the USB controller is function 2 on the same
+ * device and comes right after us (we're function 1 remember),
+ * this is a convenient spot to mark the USB keyboard as console
+ * if the address matches.
+ */
+ tag = pci_make_tag(pa->pa_pc, pa->pa_bus, pa->pa_device, 2);
+ reg = pci_conf_read(pa->pa_pc, tag, PCI_CBMEM);
+
+ if (PAGE0->mem_kbd.pz_class == PCL_KEYBD &&
+ PAGE0->mem_kbd.pz_hpa == reg)
+ ukbd_cnattach();
+#endif
+
return;
unmap_ic2: