diff mbox

[U-Boot,13/19] bios_emulator: Allow x86 to use the emulator

Message ID 1416023805-9297-14-git-send-email-sjg@chromium.org
State Accepted
Delegated to: Simon Glass
Headers show

Commit Message

Simon Glass Nov. 15, 2014, 3:56 a.m. UTC
There is an implicit assumption that x86 machines want to use raw I/O in the
BIOS emulator, but this should be selectable. Add an CONFIG_X86EMU_RAW_IO
option to control it instead.

Also fix a few bugs which cause warnings on x86 and adjust the Makefile to
remove the assumption that only PowerPC uses the emulator.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 drivers/bios_emulator/Makefile         |  2 +-
 drivers/bios_emulator/besys.c          | 32 +++++++++++++++++---------------
 drivers/bios_emulator/include/x86emu.h |  4 ++--
 drivers/bios_emulator/x86emu/debug.c   |  8 +++-----
 4 files changed, 23 insertions(+), 23 deletions(-)

Comments

Simon Glass Nov. 25, 2014, 9:50 p.m. UTC | #1
On 14 November 2014 at 20:56, Simon Glass <sjg@chromium.org> wrote:
> There is an implicit assumption that x86 machines want to use raw I/O in the
> BIOS emulator, but this should be selectable. Add an CONFIG_X86EMU_RAW_IO
> option to control it instead.
>
> Also fix a few bugs which cause warnings on x86 and adjust the Makefile to
> remove the assumption that only PowerPC uses the emulator.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
>  drivers/bios_emulator/Makefile         |  2 +-
>  drivers/bios_emulator/besys.c          | 32 +++++++++++++++++---------------
>  drivers/bios_emulator/include/x86emu.h |  4 ++--
>  drivers/bios_emulator/x86emu/debug.c   |  8 +++-----
>  4 files changed, 23 insertions(+), 23 deletions(-)

Applied to u-boot-x86.
diff mbox

Patch

diff --git a/drivers/bios_emulator/Makefile b/drivers/bios_emulator/Makefile
index e56356e..2ba43ac 100644
--- a/drivers/bios_emulator/Makefile
+++ b/drivers/bios_emulator/Makefile
@@ -9,4 +9,4 @@  obj-y = atibios.o biosemu.o besys.o bios.o \
 	$(X86DIR)/debug.o
 
 ccflags-y := -I$(srctree)/$(src) -I$(srctree)/$(src)/include \
-	-D__PPC__  -D__BIG_ENDIAN__
+	$(if $(CONFIG_PPC),-D__PPC__  -D__BIG_ENDIAN__)
diff --git a/drivers/bios_emulator/besys.c b/drivers/bios_emulator/besys.c
index ad88a53..70c472a 100644
--- a/drivers/bios_emulator/besys.c
+++ b/drivers/bios_emulator/besys.c
@@ -54,7 +54,7 @@ 
 
 /*------------------------- Global Variables ------------------------------*/
 
-#ifndef __i386__
+#ifndef CONFIG_X86EMU_RAW_IO
 static char *BE_biosDate = "08/14/99";
 static u8 BE_model = 0xFC;
 static u8 BE_submodel = 0x00;
@@ -80,16 +80,18 @@  static u8 *BE_memaddr(u32 addr)
 	if (addr >= 0xC0000 && addr <= _BE_env.biosmem_limit) {
 		return (u8*)(_BE_env.biosmem_base + addr - 0xC0000);
 	} else if (addr > _BE_env.biosmem_limit && addr < 0xD0000) {
-		DB(printf("BE_memaddr: address %#lx may be invalid!\n", addr);)
-		return M.mem_base;
+		DB(printf("BE_memaddr: address %#lx may be invalid!\n",
+			  (ulong)addr);)
+		return (u8 *)M.mem_base;
 	} else if (addr >= 0xA0000 && addr <= 0xBFFFF) {
 		return (u8*)(_BE_env.busmem_base + addr - 0xA0000);
 	}
-#ifdef __i386__
+#ifdef CONFIG_X86EMU_RAW_IO
 	else if (addr >= 0xD0000 && addr <= 0xFFFFF) {
 		/* We map the real System BIOS directly on real PC's */
-		DB(printf("BE_memaddr: System BIOS address %#lx\n", addr);)
-		    return _BE_env.busmem_base + addr - 0xA0000;
+		DB(printf("BE_memaddr: System BIOS address %#lx\n",
+			  (ulong)addr);)
+		    return (u8 *)_BE_env.busmem_base + addr - 0xA0000;
 	}
 #else
 	else if (addr >= 0xFFFF5 && addr < 0xFFFFE) {
@@ -108,10 +110,10 @@  static u8 *BE_memaddr(u32 addr)
 #endif
 	else if (addr > M.mem_size - 1) {
 		HALT_SYS();
-		return M.mem_base;
+		return (u8 *)M.mem_base;
 	}
 
-	return M.mem_base + addr;
+	return (u8 *)(M.mem_base + addr);
 }
 
 /****************************************************************************
@@ -230,7 +232,7 @@  void X86API BE_wrl(u32 addr, u32 val)
 	}
 }
 
-#if defined(DEBUG) || !defined(__i386__)
+#if !defined(CONFIG_X86EMU_RAW_IO)
 
 /* For Non-Intel machines we may need to emulate some I/O port accesses that
  * the BIOS may try to access, such as the PCI config registers.
@@ -560,7 +562,7 @@  u8 X86API BE_inb(X86EMU_pioAddr port)
 {
 	u8 val = 0;
 
-#if defined(DEBUG) || !defined(__i386__)
+#if !defined(CONFIG_X86EMU_RAW_IO)
 	if (IS_VGA_PORT(port)){
 		/*seems reading port 0x3c3 return the high 16 bit of io port*/
 		if(port == 0x3c3)
@@ -601,7 +603,7 @@  u16 X86API BE_inw(X86EMU_pioAddr port)
 {
 	u16 val = 0;
 
-#if defined(DEBUG) || !defined(__i386__)
+#if !defined(CONFIG_X86EMU_RAW_IO)
 	if (IS_PCI_PORT(port))
 		val = PCI_inp(port, REG_READ_WORD);
 	else if (port < 0x100) {
@@ -629,7 +631,7 @@  u32 X86API BE_inl(X86EMU_pioAddr port)
 {
 	u32 val = 0;
 
-#if defined(DEBUG) || !defined(__i386__)
+#if !defined(CONFIG_X86EMU_RAW_IO)
 	if (IS_PCI_PORT(port))
 		val = PCI_inp(port, REG_READ_DWORD);
 	else if (port < 0x100) {
@@ -652,7 +654,7 @@  through to the real hardware if we don't need to special case it.
 ****************************************************************************/
 void X86API BE_outb(X86EMU_pioAddr port, u8 val)
 {
-#if defined(DEBUG) || !defined(__i386__)
+#if !defined(CONFIG_X86EMU_RAW_IO)
 	if (IS_VGA_PORT(port))
 		VGA_outpb(port, val);
 	else if (IS_TIMER_PORT(port))
@@ -683,7 +685,7 @@  through to the real hardware if we don't need to special case it.
 ****************************************************************************/
 void X86API BE_outw(X86EMU_pioAddr port, u16 val)
 {
-#if defined(DEBUG) || !defined(__i386__)
+#if !defined(CONFIG_X86EMU_RAW_IO)
 		if (IS_VGA_PORT(port)) {
 			VGA_outpb(port, val);
 			VGA_outpb(port + 1, val >> 8);
@@ -710,7 +712,7 @@  through to the real hardware if we don't need to special case it.
 ****************************************************************************/
 void X86API BE_outl(X86EMU_pioAddr port, u32 val)
 {
-#if defined(DEBUG) || !defined(__i386__)
+#if !defined(CONFIG_X86EMU_RAW_IO)
 	if (IS_PCI_PORT(port))
 		PCI_outp(port, val, REG_WRITE_DWORD);
 	else if (port < 0x100) {
diff --git a/drivers/bios_emulator/include/x86emu.h b/drivers/bios_emulator/include/x86emu.h
index a70a768..278f669 100644
--- a/drivers/bios_emulator/include/x86emu.h
+++ b/drivers/bios_emulator/include/x86emu.h
@@ -53,9 +53,9 @@  typedef u16 X86EMU_pioAddr;
 
 /*---------------------- Macros and type definitions ----------------------*/
 
-#if defined (CONFIG_ARM)
+#if defined(CONFIG_ARM)
 #define GAS_LINE_COMMENT	"@"
-#elif defined(CONFIG_MIPS) || defined(CONFIG_PPC)
+#elif defined(CONFIG_MIPS) || defined(CONFIG_PPC) || defined(CONFIG_X86)
 #define GAS_LINE_COMMENT	"#"
 #elif defined (CONFIG_SH)
 #define GAS_LINE_COMMENT	"!"
diff --git a/drivers/bios_emulator/x86emu/debug.c b/drivers/bios_emulator/x86emu/debug.c
index 2fa8050..2ec64c2 100644
--- a/drivers/bios_emulator/x86emu/debug.c
+++ b/drivers/bios_emulator/x86emu/debug.c
@@ -211,9 +211,7 @@  void X86EMU_dump_memory(u16 seg, u16 off, u32 amt)
 	u32 start = off & 0xfffffff0;
 	u32 end = (off + 16) & 0xfffffff0;
 	u32 i;
-	u32 current;
 
-	current = start;
 	while (end <= off + amt) {
 		printk("%04x:%04x ", seg, start);
 		for (i = start; i < off; i++)
@@ -229,7 +227,7 @@  void X86EMU_dump_memory(u16 seg, u16 off, u32 amt)
 void x86emu_single_step(void)
 {
 	char s[1024];
-	int ps[10];
+	 int ps[10];
 	int ntok;
 	int cmd;
 	int done;
@@ -238,8 +236,6 @@  void x86emu_single_step(void)
 	static int breakpoint;
 	static int noDecode = 1;
 
-	char *p;
-
 	if (DEBUG_BREAK()) {
 		if (M.x86.saved_ip != breakpoint) {
 			return;
@@ -255,6 +251,8 @@  void x86emu_single_step(void)
 	offset = M.x86.saved_ip;
 	while (!done) {
 		printk("-");
+		ps[1] = 0; /* Avoid dodgy compiler warnings */
+		ps[2] = 0;
 		cmd = x86emu_parse_line(s, ps, &ntok);
 		switch (cmd) {
 		case 'u':