/****************************************************************************
*
*			 BIOS emulator and interface
*		       to Realmode X86 Emulator Library
*
*  Copyright (C) 2007 Freescale Semiconductor, Inc.
*  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 */
