diff options
| author | Jason Jin <Jason.jin@freescale.com> | 2007-07-06 08:34:56 +0800 | 
|---|---|---|
| committer | Wolfgang Denk <wd@denx.de> | 2007-08-06 01:28:15 +0200 | 
| commit | ece92f85053b8df613edcf05b26a416cbc3d629c (patch) | |
| tree | 2d3389882d0655781183c2fd655dc6746c5eeea1 /drivers/bios_emulator/biosemui.h | |
| parent | 5072188acabde3178fac7f5a597150e6e74fd40c (diff) | |
| download | olio-uboot-2014.01-ece92f85053b8df613edcf05b26a416cbc3d629c.tar.xz olio-uboot-2014.01-ece92f85053b8df613edcf05b26a416cbc3d629c.zip | |
This is a BIOS emulator, porting from SciTech for u-boot, mainly for
ATI video card BIOS. and can be used for x86 code emulation by some
modifications.
Signed-off-by: Jason Jin <Jason.jin@freescale.com>
Diffstat (limited to 'drivers/bios_emulator/biosemui.h')
| -rw-r--r-- | drivers/bios_emulator/biosemui.h | 169 | 
1 files changed, 169 insertions, 0 deletions
| diff --git a/drivers/bios_emulator/biosemui.h b/drivers/bios_emulator/biosemui.h new file mode 100644 index 000000000..3265ac15c --- /dev/null +++ b/drivers/bios_emulator/biosemui.h @@ -0,0 +1,169 @@ +/**************************************************************************** +* +*                        BIOS emulator and interface +*                      to Realmode X86 Emulator Library +* +*  Copyright (C) 2007 Freescale Semiconductor, Inc. All rights reserved. +*  Jason Jin <Jason.jin@freescale.com> +* +*               Copyright (C) 1996-1999 SciTech Software, Inc. +* +*  ======================================================================== +* +*  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:  Internal header file for the BIOS emulator library. +* +* 		Jason ported this file to u-boot, Added some architecture +* 		related Macro. +* +****************************************************************************/ + +#ifndef __BIOSEMUI_H +#define __BIOSEMUI_H + +#include "biosemu.h" +#include <asm/io.h> +/*---------------------- Macros and type definitions ----------------------*/ + +#ifdef DEBUG +#define DB(x)   x +#else +#define DB(x)   do{}while(0); +#endif + +#define BIOS_SEG        0xfff0 +extern X86EMU_sysEnv _X86EMU_env; +#define M               _X86EMU_env + +/* Macros to read and write values to x86 emulator memory. Memory is always + * considered to be little endian, so we use macros to do endian swapping + * where necessary. + */ + +#ifdef __BIG_ENDIAN__ +#define readb_le(base)      *((u8*)(base)) +#define readw_le(base)      ((u16)readb_le(base) | ((u16)readb_le((base) + 1) << 8)) +#define readl_le(base)      ((u32)readb_le((base) + 0) | ((u32)readb_le((base) + 1) << 8) | \ +                            ((u32)readb_le((base) + 2) << 16) | ((u32)readb_le((base) + 3) << 24)) +#define writeb_le(base, v)  *((u8*)(base)) = (v) +#define writew_le(base, v)  writeb_le(base + 0, (v >> 0) & 0xff),       \ +                            writeb_le(base + 1, (v >> 8) & 0xff) +#define writel_le(base, v)  writeb_le(base + 0, (v >> 0) & 0xff),       \ +                            writeb_le(base + 1, (v >> 8) & 0xff),       \ +                            writeb_le(base + 2, (v >> 16) & 0xff),      \ +                            writeb_le(base + 3, (v >> 24) & 0xff) +#else +#define readb_le(base)      *((u8*)(base)) +#define readw_le(base)      *((u16*)(base)) +#define readl_le(base)      *((u32*)(base)) +#define writeb_le(base, v)  *((u8*)(base)) = (v) +#define writew_le(base, v)  *((u16*)(base)) = (v) +#define writel_le(base, v)  *((u32*)(base)) = (v) +#endif + +/**************************************************************************** +REMARKS: +Function codes passed to the emulated I/O port functions to determine the +type of operation to perform. +****************************************************************************/ +typedef enum { +	REG_READ_BYTE = 0, +	REG_READ_WORD = 1, +	REG_READ_DWORD = 2, +	REG_WRITE_BYTE = 3, +	REG_WRITE_WORD = 4, +	REG_WRITE_DWORD = 5 +} RegisterFlags; + +/**************************************************************************** +REMARKS: +Function codes passed to the emulated I/O port functions to determine the +type of operation to perform. +****************************************************************************/ +typedef enum { +	PORT_BYTE = 1, +	PORT_WORD = 2, +	PORT_DWORD = 3, +} PortInfoFlags; + +/**************************************************************************** +REMARKS: +Data structure used to describe the details for the BIOS emulator system +environment as used by the X86 emulator library. + +HEADER: +biosemu.h + +MEMBERS: +type        - Type of port access (1 = byte, 2 = word, 3 = dword) +defVal      - Default power on value +finalVal    - Final value +****************************************************************************/ +typedef struct { +	u8 type; +	u32 defVal; +	u32 finalVal; +} BE_portInfo; + +#define PM_inpb(port)	inb(port+VIDEO_IO_OFFSET) +#define PM_inpw(port)	inw(port+VIDEO_IO_OFFSET) +#define PM_inpd(port)	inl(port+VIDEO_IO_OFFSET) +#define PM_outpb(port,val)	outb(val,port+VIDEO_IO_OFFSET) +#define PM_outpw(port,val)	outw(val,port+VIDEO_IO_OFFSET) +#define PM_outpd(port,val)	outl(val,port+VIDEO_IO_OFFSET) + +#define LOG_inpb(port)	PM_inpb(port) +#define LOG_inpw(port)	PM_inpw(port) +#define LOG_inpd(port)	PM_inpd(port) +#define LOG_outpb(port,val)	PM_outpb(port,val) +#define LOG_outpw(port,val)	PM_outpw(port,val) +#define LOG_outpd(port,val)	PM_outpd(port,val) + +/*-------------------------- Function Prototypes --------------------------*/ + +/* bios.c */ + +void _BE_bios_init(u32 * intrTab); +void _BE_setup_funcs(void); + +/* besys.c */ +#define DEBUG_IO()	(M.x86.debug & DEBUG_IO_TRACE_F) + +u8 X86API BE_rdb(u32 addr); +u16 X86API BE_rdw(u32 addr); +u32 X86API BE_rdl(u32 addr); +void X86API BE_wrb(u32 addr, u8 val); +void X86API BE_wrw(u32 addr, u16 val); +void X86API BE_wrl(u32 addr, u32 val); + +u8 X86API BE_inb(X86EMU_pioAddr port); +u16 X86API BE_inw(X86EMU_pioAddr port); +u32 X86API BE_inl(X86EMU_pioAddr port); +void X86API BE_outb(X86EMU_pioAddr port, u8 val); +void X86API BE_outw(X86EMU_pioAddr port, u16 val); +void X86API BE_outl(X86EMU_pioAddr port, u32 val); +#endif +/* __BIOSEMUI_H */ |