summaryrefslogtreecommitdiffstats
path: root/sys/compat
diff options
context:
space:
mode:
authorjkim <jkim@FreeBSD.org>2009-09-25 17:56:32 +0000
committerjkim <jkim@FreeBSD.org>2009-09-25 17:56:32 +0000
commit08823d6c8cd476e82138a1ab640a95190c406ca7 (patch)
tree2684f20430120452d31efd3791a4bc360e9ce32a /sys/compat
parentcced95b2ac18a98a80a21dad19b329aabdb1612e (diff)
downloadFreeBSD-src-08823d6c8cd476e82138a1ab640a95190c406ca7.zip
FreeBSD-src-08823d6c8cd476e82138a1ab640a95190c406ca7.tar.gz
- Reduce BIOS memory mapping. We want 1MB of physical memory, not 12MB[1].
- Remove CS and IP registers from x86bios.h. They have no use for us. - Adjust register dump to make it little bit more useful for debugging. Submitted by: paradox (ddkprog yahoo com)[1] (initial version)
Diffstat (limited to 'sys/compat')
-rw-r--r--sys/compat/x86bios/x86bios.c16
-rw-r--r--sys/compat/x86bios/x86bios.h10
2 files changed, 12 insertions, 14 deletions
diff --git a/sys/compat/x86bios/x86bios.c b/sys/compat/x86bios/x86bios.c
index 9741b0c..b187ae9 100644
--- a/sys/compat/x86bios/x86bios.c
+++ b/sys/compat/x86bios/x86bios.c
@@ -98,9 +98,10 @@ x86bios_intr(struct x86regs *regs, int intno)
return;
if (bootverbose)
- printf("Calling real mode int 0x%x "
- "(ax=0x%04x bx=0x%04x cx=0x%04x dx=0x%04x)\n",
- intno, regs->R_AX, regs->R_BX, regs->R_CX, regs->R_DX);
+ printf("Calling int 0x%x (ax=0x%04x bx=0x%04x "
+ "cx=0x%04x dx=0x%04x es=0x%04x di=0x%04x)\n",
+ intno, regs->R_AX, regs->R_BX, regs->R_CX,
+ regs->R_DX, regs->R_ES, regs->R_DI);
mtx_lock_spin(&x86bios_lock);
@@ -111,9 +112,10 @@ x86bios_intr(struct x86regs *regs, int intno)
mtx_unlock_spin(&x86bios_lock);
if (bootverbose)
- printf("Exiting real mode int 0x%x "
- "(ax=0x%04x bx=0x%04x cx=0x%04x dx=0x%04x)\n",
- intno, regs->R_AX, regs->R_BX, regs->R_CX, regs->R_DX);
+ printf("Exiting int 0x%x (ax=0x%04x bx=0x%04x "
+ "cx=0x%04x dx=0x%04x es=0x%04x di=0x%04x)\n",
+ intno, regs->R_AX, regs->R_BX, regs->R_CX,
+ regs->R_DX, regs->R_ES, regs->R_DI);
}
void *
@@ -144,7 +146,7 @@ x86bios_init(void *arg __unused)
x86bios_emu.emu_outl = x86bios_emu_outl;
x86bios_emu.mem_base = (char *)pbiosMem;
- x86bios_emu.mem_size = 1024 * 1024;
+ x86bios_emu.mem_size = MAPPED_MEMORY_SIZE;
memset(busySegMap, 0, sizeof(busySegMap));
diff --git a/sys/compat/x86bios/x86bios.h b/sys/compat/x86bios/x86bios.h
index adf8b7c..35cbbce 100644
--- a/sys/compat/x86bios/x86bios.h
+++ b/sys/compat/x86bios/x86bios.h
@@ -54,7 +54,7 @@ union x86_register {
};
struct x86regs {
- uint16_t register_cs;
+ uint16_t padding; /* CS is unused. */
uint16_t register_ds;
uint16_t register_es;
uint16_t register_fs;
@@ -70,7 +70,6 @@ struct x86regs {
union x86_register register_bp;
union x86_register register_si;
union x86_register register_di;
- union x86_register register_ip;
};
typedef struct x86regs x86regs_t;
@@ -102,7 +101,6 @@ typedef struct x86regs x86regs_t;
#define R_BP register_bp.I16_reg.x_reg
#define R_SI register_si.I16_reg.x_reg
#define R_DI register_di.I16_reg.x_reg
-#define R_IP register_ip.I16_reg.x_reg
#define R_FLG register_flags
/* special registers */
@@ -110,11 +108,9 @@ typedef struct x86regs x86regs_t;
#define R_EBP register_bp.I32_reg.e_reg
#define R_ESI register_si.I32_reg.e_reg
#define R_EDI register_di.I32_reg.e_reg
-#define R_EIP register_ip.I32_reg.e_reg
#define R_EFLG register_flags
/* segment registers */
-#define R_CS register_cs
#define R_DS register_ds
#define R_SS register_ss
#define R_ES register_es
@@ -125,8 +121,8 @@ typedef struct x86regs x86regs_t;
#define SEG_OFF(x) ((x) & 0x0FFFF)
#define FARP(x) ((le32toh(x) & 0xffff) + ((le32toh(x) >> 12) & 0xffff00))
-#define MAPPED_MEMORY_SIZE 0xc00000
-#define PAGE_RESERV (4096*5)
+#define MAPPED_MEMORY_SIZE (1024 * 1024)
+#define PAGE_RESERV (4096 * 5)
__BEGIN_DECLS
void *x86bios_alloc(int count, int *segs);
OpenPOWER on IntegriCloud