diff options
| author | Stefan Roese <sr@denx.de> | 2007-08-15 21:06:27 +0200 | 
|---|---|---|
| committer | Stefan Roese <sr@denx.de> | 2007-08-15 21:06:27 +0200 | 
| commit | b706d63559aeec352bc72dd86d7d5423c15f6a60 (patch) | |
| tree | fdeda4d61970fef239d9d66ecd851fa46cfe5ec0 /drivers/bios_emulator/include/x86emu.h | |
| parent | c8603cfbd4573379a6076c9c208545ba2bbf019a (diff) | |
| parent | 594e79838ce5078a90d0c27abb2b2d61d5f8e8a7 (diff) | |
| download | olio-uboot-2014.01-b706d63559aeec352bc72dd86d7d5423c15f6a60.tar.xz olio-uboot-2014.01-b706d63559aeec352bc72dd86d7d5423c15f6a60.zip | |
Merge with git://www.denx.de/git/u-boot.git
Diffstat (limited to 'drivers/bios_emulator/include/x86emu.h')
| -rw-r--r-- | drivers/bios_emulator/include/x86emu.h | 191 | 
1 files changed, 191 insertions, 0 deletions
| diff --git a/drivers/bios_emulator/include/x86emu.h b/drivers/bios_emulator/include/x86emu.h new file mode 100644 index 000000000..6004beb05 --- /dev/null +++ b/drivers/bios_emulator/include/x86emu.h @@ -0,0 +1,191 @@ +/**************************************************************************** +* +*                       Realmode X86 Emulator Library +* +*               Copyright (C) 1996-1999 SciTech Software, Inc. +*                    Copyright (C) David Mosberger-Tang +*                      Copyright (C) 1999 Egbert Eich +* +*  ======================================================================== +* +*  Permission to use, copy, modify, distribute, and sell this software and +*  its documentation for any purpose is hereby granted without fee, +*  provided that the above copyright notice appear in all copies and that +*  both that copyright notice and this permission notice appear in +*  supporting documentation, and that the name of the authors not be used +*  in advertising or publicity pertaining to distribution of the software +*  without specific, written prior permission.  The authors makes no +*  representations about the suitability of this software for any purpose. +*  It is provided "as is" without express or implied warranty. +* +*  THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +*  INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +*  EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR +*  CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF +*  USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +*  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +*  PERFORMANCE OF THIS SOFTWARE. +* +*  ======================================================================== +* +* Language:     ANSI C +* Environment:  Any +* Developer:    Kendall Bennett +* +* Description:  Header file for public specific functions. +*               Any application linking against us should only +*               include this header +* +****************************************************************************/ + +#ifndef __X86EMU_X86EMU_H +#define __X86EMU_X86EMU_H + +#include <asm/types.h> +#include <common.h> +#include <pci.h> +#include <asm/io.h> +#define X86API +#define X86APIP * +typedef u16 X86EMU_pioAddr; + +#include "x86emu/regs.h" + +/*---------------------- Macros and type definitions ----------------------*/ + +#pragma pack(1) + +/**************************************************************************** +REMARKS: +Data structure containing ponters to programmed I/O functions used by the +emulator. This is used so that the user program can hook all programmed +I/O for the emulator to handled as necessary by the user program. By +default the emulator contains simple functions that do not do access the +hardware in any way. To allow the emualtor access the hardware, you will +need to override the programmed I/O functions using the X86EMU_setupPioFuncs +function. + +HEADER: +x86emu.h + +MEMBERS: +inb     - Function to read a byte from an I/O port +inw     - Function to read a word from an I/O port +inl     - Function to read a dword from an I/O port +outb    - Function to write a byte to an I/O port +outw    - Function to write a word to an I/O port +outl    - Function to write a dword to an I/O port +****************************************************************************/ +typedef struct { +	u8(X86APIP inb) (X86EMU_pioAddr addr); +	u16(X86APIP inw) (X86EMU_pioAddr addr); +	u32(X86APIP inl) (X86EMU_pioAddr addr); +	void (X86APIP outb) (X86EMU_pioAddr addr, u8 val); +	void (X86APIP outw) (X86EMU_pioAddr addr, u16 val); +	void (X86APIP outl) (X86EMU_pioAddr addr, u32 val); +} X86EMU_pioFuncs; + +/**************************************************************************** +REMARKS: +Data structure containing ponters to memory access functions used by the +emulator. This is used so that the user program can hook all memory +access functions as necessary for the emulator. By default the emulator +contains simple functions that only access the internal memory of the +emulator. If you need specialised functions to handle access to different +types of memory (ie: hardware framebuffer accesses and BIOS memory access +etc), you will need to override this using the X86EMU_setupMemFuncs +function. + +HEADER: +x86emu.h + +MEMBERS: +rdb     - Function to read a byte from an address +rdw     - Function to read a word from an address +rdl     - Function to read a dword from an address +wrb     - Function to write a byte to an address +wrw     - Function to write a word to an address +wrl     - Function to write a dword to an address +****************************************************************************/ +typedef struct { +	u8(X86APIP rdb) (u32 addr); +	u16(X86APIP rdw) (u32 addr); +	u32(X86APIP rdl) (u32 addr); +	void (X86APIP wrb) (u32 addr, u8 val); +	void (X86APIP wrw) (u32 addr, u16 val); +	void (X86APIP wrl) (u32 addr, u32 val); +} X86EMU_memFuncs; + +/**************************************************************************** +  Here are the default memory read and write +  function in case they are needed as fallbacks. +***************************************************************************/ +extern u8 X86API rdb(u32 addr); +extern u16 X86API rdw(u32 addr); +extern u32 X86API rdl(u32 addr); +extern void X86API wrb(u32 addr, u8 val); +extern void X86API wrw(u32 addr, u16 val); +extern void X86API wrl(u32 addr, u32 val); + +#pragma pack() + +/*--------------------- type definitions -----------------------------------*/ + +typedef void (X86APIP X86EMU_intrFuncs) (int num); +extern X86EMU_intrFuncs _X86EMU_intrTab[256]; + +/*-------------------------- Function Prototypes --------------------------*/ + +#ifdef  __cplusplus +extern "C" {			/* Use "C" linkage when in C++ mode */ +#endif + +	void X86EMU_setupMemFuncs(X86EMU_memFuncs * funcs); +	void X86EMU_setupPioFuncs(X86EMU_pioFuncs * funcs); +	void X86EMU_setupIntrFuncs(X86EMU_intrFuncs funcs[]); +	void X86EMU_prepareForInt(int num); + +/* decode.c */ + +	void X86EMU_exec(void); +	void X86EMU_halt_sys(void); + +#ifdef  DEBUG +#define HALT_SYS()  \ +    printf("halt_sys: file %s, line %d\n", __FILE__, __LINE__), \ +    X86EMU_halt_sys() +#else +#define HALT_SYS()  X86EMU_halt_sys() +#endif + +/* Debug options */ + +#define DEBUG_DECODE_F          0x0001	/* print decoded instruction  */ +#define DEBUG_TRACE_F           0x0002	/* dump regs before/after execution */ +#define DEBUG_STEP_F            0x0004 +#define DEBUG_DISASSEMBLE_F     0x0008 +#define DEBUG_BREAK_F           0x0010 +#define DEBUG_SVC_F             0x0020 +#define DEBUG_SAVE_CS_IP        0x0040 +#define DEBUG_FS_F              0x0080 +#define DEBUG_PROC_F            0x0100 +#define DEBUG_SYSINT_F          0x0200	/* bios system interrupts. */ +#define DEBUG_TRACECALL_F       0x0400 +#define DEBUG_INSTRUMENT_F      0x0800 +#define DEBUG_MEM_TRACE_F       0x1000 +#define DEBUG_IO_TRACE_F        0x2000 +#define DEBUG_TRACECALL_REGS_F  0x4000 +#define DEBUG_DECODE_NOPRINT_F  0x8000 +#define DEBUG_EXIT              0x10000 +#define DEBUG_SYS_F             (DEBUG_SVC_F|DEBUG_FS_F|DEBUG_PROC_F) + +	void X86EMU_trace_regs(void); +	void X86EMU_trace_xregs(void); +	void X86EMU_dump_memory(u16 seg, u16 off, u32 amt); +	int X86EMU_trace_on(void); +	int X86EMU_trace_off(void); + +#ifdef  __cplusplus +}				/* End of "C" linkage for C++       */ +#endif +#endif				/* __X86EMU_X86EMU_H */ |