xref: /OK3568_Linux_fs/u-boot/drivers/bios_emulator/biosemui.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /****************************************************************************
2*4882a593Smuzhiyun *
3*4882a593Smuzhiyun *			 BIOS emulator and interface
4*4882a593Smuzhiyun *		       to Realmode X86 Emulator Library
5*4882a593Smuzhiyun *
6*4882a593Smuzhiyun *  Copyright (C) 2007 Freescale Semiconductor, Inc.
7*4882a593Smuzhiyun *  Jason Jin <Jason.jin@freescale.com>
8*4882a593Smuzhiyun *
9*4882a593Smuzhiyun *		Copyright (C) 1996-1999 SciTech Software, Inc.
10*4882a593Smuzhiyun *
11*4882a593Smuzhiyun *  ========================================================================
12*4882a593Smuzhiyun *
13*4882a593Smuzhiyun *  Permission to use, copy, modify, distribute, and sell this software and
14*4882a593Smuzhiyun *  its documentation for any purpose is hereby granted without fee,
15*4882a593Smuzhiyun *  provided that the above copyright notice appear in all copies and that
16*4882a593Smuzhiyun *  both that copyright notice and this permission notice appear in
17*4882a593Smuzhiyun *  supporting documentation, and that the name of the authors not be used
18*4882a593Smuzhiyun *  in advertising or publicity pertaining to distribution of the software
19*4882a593Smuzhiyun *  without specific, written prior permission.	The authors makes no
20*4882a593Smuzhiyun *  representations about the suitability of this software for any purpose.
21*4882a593Smuzhiyun *  It is provided "as is" without express or implied warranty.
22*4882a593Smuzhiyun *
23*4882a593Smuzhiyun *  THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
24*4882a593Smuzhiyun *  INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
25*4882a593Smuzhiyun *  EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
26*4882a593Smuzhiyun *  CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
27*4882a593Smuzhiyun *  USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
28*4882a593Smuzhiyun *  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
29*4882a593Smuzhiyun *  PERFORMANCE OF THIS SOFTWARE.
30*4882a593Smuzhiyun *
31*4882a593Smuzhiyun *  ========================================================================
32*4882a593Smuzhiyun *
33*4882a593Smuzhiyun * Language:	ANSI C
34*4882a593Smuzhiyun * Environment:	Any
35*4882a593Smuzhiyun * Developer:	Kendall Bennett
36*4882a593Smuzhiyun *
37*4882a593Smuzhiyun * Description:	Internal header file for the BIOS emulator library.
38*4882a593Smuzhiyun *
39*4882a593Smuzhiyun *		Jason ported this file to u-boot, Added some architecture
40*4882a593Smuzhiyun *		related Macro.
41*4882a593Smuzhiyun *
42*4882a593Smuzhiyun ****************************************************************************/
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun #ifndef __BIOSEMUI_H
45*4882a593Smuzhiyun #define __BIOSEMUI_H
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun #include "biosemu.h"
48*4882a593Smuzhiyun #include <asm/io.h>
49*4882a593Smuzhiyun /*---------------------- Macros and type definitions ----------------------*/
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun #ifdef CONFIG_X86EMU_DEBUG
52*4882a593Smuzhiyun #define DB(x)	x
53*4882a593Smuzhiyun #else
54*4882a593Smuzhiyun #define DB(x)	do{}while(0);
55*4882a593Smuzhiyun #endif
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun #define BIOS_SEG	0xfff0
58*4882a593Smuzhiyun extern X86EMU_sysEnv _X86EMU_env;
59*4882a593Smuzhiyun #define M		_X86EMU_env
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun /* Macros to read and write values to x86 emulator memory. Memory is always
62*4882a593Smuzhiyun  * considered to be little endian, so we use macros to do endian swapping
63*4882a593Smuzhiyun  * where necessary.
64*4882a593Smuzhiyun  */
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun #ifdef __BIG_ENDIAN__
67*4882a593Smuzhiyun #define readb_le(base)	    *((u8*)(base))
68*4882a593Smuzhiyun #define readw_le(base)	    ((u16)readb_le(base) | ((u16)readb_le((base) + 1) << 8))
69*4882a593Smuzhiyun #define readl_le(base)	    ((u32)readb_le((base) + 0) | ((u32)readb_le((base) + 1) << 8) | \
70*4882a593Smuzhiyun 			    ((u32)readb_le((base) + 2) << 16) | ((u32)readb_le((base) + 3) << 24))
71*4882a593Smuzhiyun #define writeb_le(base, v)  *((u8*)(base)) = (v)
72*4882a593Smuzhiyun #define writew_le(base, v)  writeb_le(base + 0, (v >> 0) & 0xff),	\
73*4882a593Smuzhiyun 			    writeb_le(base + 1, (v >> 8) & 0xff)
74*4882a593Smuzhiyun #define writel_le(base, v)  writeb_le(base + 0, (v >> 0) & 0xff),	\
75*4882a593Smuzhiyun 			    writeb_le(base + 1, (v >> 8) & 0xff),	\
76*4882a593Smuzhiyun 			    writeb_le(base + 2, (v >> 16) & 0xff),	\
77*4882a593Smuzhiyun 			    writeb_le(base + 3, (v >> 24) & 0xff)
78*4882a593Smuzhiyun #else
79*4882a593Smuzhiyun #define readb_le(base)	    *((u8*)(base))
80*4882a593Smuzhiyun #define readw_le(base)	    *((u16*)(base))
81*4882a593Smuzhiyun #define readl_le(base)	    *((u32*)(base))
82*4882a593Smuzhiyun #define writeb_le(base, v)  *((u8*)(base)) = (v)
83*4882a593Smuzhiyun #define writew_le(base, v)  *((u16*)(base)) = (v)
84*4882a593Smuzhiyun #define writel_le(base, v)  *((u32*)(base)) = (v)
85*4882a593Smuzhiyun #endif
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun /****************************************************************************
88*4882a593Smuzhiyun REMARKS:
89*4882a593Smuzhiyun Function codes passed to the emulated I/O port functions to determine the
90*4882a593Smuzhiyun type of operation to perform.
91*4882a593Smuzhiyun ****************************************************************************/
92*4882a593Smuzhiyun typedef enum {
93*4882a593Smuzhiyun 	REG_READ_BYTE = 0,
94*4882a593Smuzhiyun 	REG_READ_WORD = 1,
95*4882a593Smuzhiyun 	REG_READ_DWORD = 2,
96*4882a593Smuzhiyun 	REG_WRITE_BYTE = 3,
97*4882a593Smuzhiyun 	REG_WRITE_WORD = 4,
98*4882a593Smuzhiyun 	REG_WRITE_DWORD = 5
99*4882a593Smuzhiyun } RegisterFlags;
100*4882a593Smuzhiyun 
101*4882a593Smuzhiyun /****************************************************************************
102*4882a593Smuzhiyun REMARKS:
103*4882a593Smuzhiyun Function codes passed to the emulated I/O port functions to determine the
104*4882a593Smuzhiyun type of operation to perform.
105*4882a593Smuzhiyun ****************************************************************************/
106*4882a593Smuzhiyun typedef enum {
107*4882a593Smuzhiyun 	PORT_BYTE = 1,
108*4882a593Smuzhiyun 	PORT_WORD = 2,
109*4882a593Smuzhiyun 	PORT_DWORD = 3,
110*4882a593Smuzhiyun } PortInfoFlags;
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun /****************************************************************************
113*4882a593Smuzhiyun REMARKS:
114*4882a593Smuzhiyun Data structure used to describe the details for the BIOS emulator system
115*4882a593Smuzhiyun environment as used by the X86 emulator library.
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun HEADER:
118*4882a593Smuzhiyun biosemu.h
119*4882a593Smuzhiyun 
120*4882a593Smuzhiyun MEMBERS:
121*4882a593Smuzhiyun type	    - Type of port access (1 = byte, 2 = word, 3 = dword)
122*4882a593Smuzhiyun defVal	    - Default power on value
123*4882a593Smuzhiyun finalVal    - Final value
124*4882a593Smuzhiyun ****************************************************************************/
125*4882a593Smuzhiyun typedef struct {
126*4882a593Smuzhiyun 	u8 type;
127*4882a593Smuzhiyun 	u32 defVal;
128*4882a593Smuzhiyun 	u32 finalVal;
129*4882a593Smuzhiyun } BE_portInfo;
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun #define PM_inpb(port)	inb(port+VIDEO_IO_OFFSET)
132*4882a593Smuzhiyun #define PM_inpw(port)	inw(port+VIDEO_IO_OFFSET)
133*4882a593Smuzhiyun #define PM_inpd(port)	inl(port+VIDEO_IO_OFFSET)
134*4882a593Smuzhiyun #define PM_outpb(port,val)	outb(val,port+VIDEO_IO_OFFSET)
135*4882a593Smuzhiyun #define PM_outpw(port,val)	outw(val,port+VIDEO_IO_OFFSET)
136*4882a593Smuzhiyun #define PM_outpd(port,val)	outl(val,port+VIDEO_IO_OFFSET)
137*4882a593Smuzhiyun 
138*4882a593Smuzhiyun #define LOG_inpb(port)	PM_inpb(port)
139*4882a593Smuzhiyun #define LOG_inpw(port)	PM_inpw(port)
140*4882a593Smuzhiyun #define LOG_inpd(port)	PM_inpd(port)
141*4882a593Smuzhiyun #define LOG_outpb(port,val)	PM_outpb(port,val)
142*4882a593Smuzhiyun #define LOG_outpw(port,val)	PM_outpw(port,val)
143*4882a593Smuzhiyun #define LOG_outpd(port,val)	PM_outpd(port,val)
144*4882a593Smuzhiyun 
145*4882a593Smuzhiyun /*-------------------------- Function Prototypes --------------------------*/
146*4882a593Smuzhiyun 
147*4882a593Smuzhiyun /* bios.c */
148*4882a593Smuzhiyun 
149*4882a593Smuzhiyun void _BE_bios_init(u32 * intrTab);
150*4882a593Smuzhiyun void _BE_setup_funcs(void);
151*4882a593Smuzhiyun 
152*4882a593Smuzhiyun /* besys.c */
153*4882a593Smuzhiyun #define DEBUG_IO()	(M.x86.debug & DEBUG_IO_TRACE_F)
154*4882a593Smuzhiyun 
155*4882a593Smuzhiyun u8 X86API BE_rdb(u32 addr);
156*4882a593Smuzhiyun u16 X86API BE_rdw(u32 addr);
157*4882a593Smuzhiyun u32 X86API BE_rdl(u32 addr);
158*4882a593Smuzhiyun void X86API BE_wrb(u32 addr, u8 val);
159*4882a593Smuzhiyun void X86API BE_wrw(u32 addr, u16 val);
160*4882a593Smuzhiyun void X86API BE_wrl(u32 addr, u32 val);
161*4882a593Smuzhiyun 
162*4882a593Smuzhiyun u8 X86API BE_inb(X86EMU_pioAddr port);
163*4882a593Smuzhiyun u16 X86API BE_inw(X86EMU_pioAddr port);
164*4882a593Smuzhiyun u32 X86API BE_inl(X86EMU_pioAddr port);
165*4882a593Smuzhiyun void X86API BE_outb(X86EMU_pioAddr port, u8 val);
166*4882a593Smuzhiyun void X86API BE_outw(X86EMU_pioAddr port, u16 val);
167*4882a593Smuzhiyun void X86API BE_outl(X86EMU_pioAddr port, u32 val);
168*4882a593Smuzhiyun #endif
169*4882a593Smuzhiyun /* __BIOSEMUI_H */
170