aboutsummaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/dcons/dcons_crom.c4
-rw-r--r--sys/dev/dcons/dcons_os.c7
-rw-r--r--sys/dev/hyperv/vmbus/i386/vmbus_vector.S6
-rw-r--r--sys/dev/ppc/ppc.c3
-rw-r--r--sys/dev/syscons/syscons.c4
5 files changed, 20 insertions, 4 deletions
diff --git a/sys/dev/dcons/dcons_crom.c b/sys/dev/dcons/dcons_crom.c
index 1fa7dcb92efe..6bba3857d1b9 100644
--- a/sys/dev/dcons/dcons_crom.c
+++ b/sys/dev/dcons/dcons_crom.c
@@ -109,7 +109,11 @@ dcons_crom_expose_idt(struct dcons_crom_softc *sc)
static off_t idt_paddr;
/* XXX */
+#ifdef __amd64__
idt_paddr = (char *)idt - (char *)KERNBASE;
+#else /* __i386__ */
+ idt_paddr = (off_t)pmap_kextract((vm_offset_t)idt);
+#endif
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));
diff --git a/sys/dev/dcons/dcons_os.c b/sys/dev/dcons/dcons_os.c
index 3b17ffeaa5c4..9ec789fcc224 100644
--- a/sys/dev/dcons/dcons_os.c
+++ b/sys/dev/dcons/dcons_os.c
@@ -309,11 +309,16 @@ dcons_drv_init(int stage)
* Allow read/write access to dcons buffer.
*/
for (pa = trunc_page(addr); pa < addr + size; pa += PAGE_SIZE)
- *vtopte(KERNBASE + pa) |= PG_RW;
+ *vtopte(PMAP_MAP_LOW + pa) |= PG_RW;
invltlb();
#endif
/* XXX P to V */
+#ifdef __amd64__
dg.buf = (struct dcons_buf *)(vm_offset_t)(KERNBASE + addr);
+#else /* __i386__ */
+ dg.buf = (struct dcons_buf *)((vm_offset_t)PMAP_MAP_LOW +
+ addr);
+#endif
dg.size = size;
if (dcons_load_buffer(dg.buf, dg.size, sc) < 0)
dg.buf = NULL;
diff --git a/sys/dev/hyperv/vmbus/i386/vmbus_vector.S b/sys/dev/hyperv/vmbus/i386/vmbus_vector.S
index a7152d80ee22..f503e3d81203 100644
--- a/sys/dev/hyperv/vmbus/i386/vmbus_vector.S
+++ b/sys/dev/hyperv/vmbus/i386/vmbus_vector.S
@@ -26,11 +26,12 @@
* $FreeBSD$
*/
+#include "assym.inc"
+
+#include <machine/psl.h>
#include <machine/asmacros.h>
#include <machine/specialreg.h>
-#include "assym.inc"
-
/*
* This is the Hyper-V vmbus channel direct callback interrupt.
* Only used when it is running on Hyper-V.
@@ -42,6 +43,7 @@ IDTVEC(vmbus_isr)
PUSH_FRAME
SET_KERNEL_SREGS
cld
+ KENTER
FAKE_MCOUNT(TF_EIP(%esp))
pushl %esp
call vmbus_handle_intr
diff --git a/sys/dev/ppc/ppc.c b/sys/dev/ppc/ppc.c
index c4d423ff99c0..cb647f49914b 100644
--- a/sys/dev/ppc/ppc.c
+++ b/sys/dev/ppc/ppc.c
@@ -51,6 +51,7 @@ __FBSDID("$FreeBSD$");
#include <vm/vm.h>
#include <vm/pmap.h>
#include <machine/vmparam.h>
+#include <machine/pc/bios.h>
#endif
#include <dev/ppbus/ppbconf.h>
@@ -121,7 +122,7 @@ static char *ppc_epp_protocol[] = { " (EPP 1.9)", " (EPP 1.7)", 0 };
* BIOS printer list - used by BIOS probe.
*/
#define BIOS_PPC_PORTS 0x408
-#define BIOS_PORTS (short *)(KERNBASE+BIOS_PPC_PORTS)
+#define BIOS_PORTS ((short *)BIOS_PADDRTOVADDR(BIOS_PPC_PORTS))
#define BIOS_MAX_PPC 4
#endif
diff --git a/sys/dev/syscons/syscons.c b/sys/dev/syscons/syscons.c
index 5d9411a762c4..c8c53e71fd9f 100644
--- a/sys/dev/syscons/syscons.c
+++ b/sys/dev/syscons/syscons.c
@@ -288,7 +288,11 @@ ec_putc(int c)
* This is enough for ec_putc() to work very early on x86
* if the kernel starts in normal color text mode.
*/
+#ifdef __amd64__
fb = KERNBASE + 0xb8000;
+#else /* __i386__ */
+ fb = PMAP_MAP_LOW + 0xb8000;
+#endif
xsize = 80;
ysize = 25;
#endif