summaryrefslogtreecommitdiff
path: root/sys/dev/dcons/dcons_crom.c
diff options
context:
space:
mode:
authorHidetoshi Shimokawa <simokawa@FreeBSD.org>2007-06-08 04:33:25 +0000
committerHidetoshi Shimokawa <simokawa@FreeBSD.org>2007-06-08 04:33:25 +0000
commit293b847542ebfac574cd9a9d888df9769d45e77f (patch)
tree5ed58dc2f791d9767114bfb3da7bf91bff9f4bf1 /sys/dev/dcons/dcons_crom.c
parent17ee700be6272b41065fb32e88e4deb3eefb6c1f (diff)
Notes
Diffstat (limited to 'sys/dev/dcons/dcons_crom.c')
-rw-r--r--sys/dev/dcons/dcons_crom.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/sys/dev/dcons/dcons_crom.c b/sys/dev/dcons/dcons_crom.c
index 290c80a0300f..290bb1e8ca40 100644
--- a/sys/dev/dcons/dcons_crom.c
+++ b/sys/dev/dcons/dcons_crom.c
@@ -62,6 +62,14 @@
#include <sys/cons.h>
+#define EXPOSE_IDT_ADDR 1
+
+#if (defined(__i386__) || defined(__amd64__)) && defined(EXPOSE_IDT_ADDR)
+#include <vm/vm.h>
+#include <vm/vm_param.h>
+#include <vm/pmap.h>
+#include <machine/segments.h> /* for idt */
+#endif
static bus_addr_t dcons_paddr;
#if __FreeBSD_version >= 500000
@@ -108,6 +116,19 @@ dcons_crom_probe(device_t dev)
}
#ifndef NEED_NEW_DRIVER
+#if (defined(__i386__) || defined(__amd64__)) && defined(EXPOSE_IDT_ADDR)
+static void
+dcons_crom_expose_idt(struct dcons_crom_softc *sc)
+{
+ static off_t idt_paddr;
+
+ /* XXX */
+ idt_paddr = (char *)idt - (char *)KERNBASE;
+
+ crom_add_entry(&sc->unit, DCONS_CSR_KEY_RESET_HI, ADDR_HI(idt_paddr));
+ crom_add_entry(&sc->unit, DCONS_CSR_KEY_RESET_LO, ADDR_LO(idt_paddr));
+}
+#endif
static void
dcons_crom_post_busreset(void *arg)
{
@@ -128,6 +149,9 @@ dcons_crom_post_busreset(void *arg)
crom_add_simple_text(src, &sc->unit, &sc->ver, "dcons");
crom_add_entry(&sc->unit, DCONS_CSR_KEY_HI, ADDR_HI(dcons_paddr));
crom_add_entry(&sc->unit, DCONS_CSR_KEY_LO, ADDR_LO(dcons_paddr));
+#if (defined(__i386__) || defined(__amd64__)) && defined(EXPOSE_IDT_ADDR)
+ dcons_crom_expose_idt(sc);
+#endif
}
#endif