mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 10:26:10 +01:00 
			
		
		
		
	We should have a public header so that users can avoid defining functions themselves. Signed-off-by: Simon Glass <sjg@chromium.org>
		
			
				
	
	
		
			344 lines
		
	
	
		
			9.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			344 lines
		
	
	
		
			9.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /****************************************************************************
 | |
| *
 | |
| *                        BIOS emulator and interface
 | |
| *                      to Realmode X86 Emulator Library
 | |
| *
 | |
| *               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:  Header file for the real mode x86 BIOS emulator, which is
 | |
| *               used to warmboot any number of VGA compatible PCI/AGP
 | |
| *               controllers under any OS, on any processor family that
 | |
| *               supports PCI. We also allow the user application to call
 | |
| *               real mode BIOS functions and Int 10h functions (including
 | |
| *               the VESA BIOS).
 | |
| *
 | |
| ****************************************************************************/
 | |
| 
 | |
| #ifndef __BIOSEMU_H
 | |
| #define __BIOSEMU_H
 | |
| 
 | |
| #include <bios_emul.h>
 | |
| 
 | |
| #ifdef __KERNEL__
 | |
| #include "x86emu.h"
 | |
| #else
 | |
| #include "x86emu.h"
 | |
| #include "pmapi.h"
 | |
| #include "pcilib.h"
 | |
| #endif
 | |
| 
 | |
| /*---------------------- Macros and type definitions ----------------------*/
 | |
| 
 | |
| #pragma pack(1)
 | |
| 
 | |
| #define CRT_C   24		/* 24  CRT Controller Registers             */
 | |
| #define ATT_C   21		/* 21  Attribute Controller Registers       */
 | |
| #define GRA_C   9		/* 9   Graphics Controller Registers        */
 | |
| #define SEQ_C   5		/* 5   Sequencer Registers                  */
 | |
| #define PAL_C   768		/* 768 Palette Registers                    */
 | |
| 
 | |
| /****************************************************************************
 | |
| 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:
 | |
| vgaInfo         - VGA BIOS information structure
 | |
| biosmem_base    - Base of the BIOS image
 | |
| biosmem_limit   - Limit of the BIOS image
 | |
| busmem_base     - Base of the VGA bus memory
 | |
| timer           - Timer used to emulate PC timer ports
 | |
| timer0          - Latched value for timer 0
 | |
| timer0Latched   - true if timer 0 value was just latched
 | |
| timer2          - Current value for timer 2
 | |
| emulateVGA      - true to emulate VGA I/O and memory accesses
 | |
| ****************************************************************************/
 | |
| 
 | |
| typedef struct {
 | |
| 	BE_VGAInfo vgaInfo;
 | |
| 	ulong biosmem_base;
 | |
| 	ulong biosmem_limit;
 | |
| 	ulong busmem_base;
 | |
| 
 | |
| 	u32 timer0;
 | |
| 	int timer0Latched;
 | |
| 	u32 timer1;
 | |
| 	int timer1Latched;
 | |
| 	u32 timer2;
 | |
| 	int timer2Latched;
 | |
| 
 | |
| 	int emulateVGA;
 | |
| 	u8 emu61;
 | |
| 	u8 emu70;
 | |
| 	int flipFlop3C0;
 | |
| 	u32 configAddress;
 | |
| 	u8 emu3C0;
 | |
| 	u8 emu3C1[ATT_C];
 | |
| 	u8 emu3C2;
 | |
| 	u8 emu3C4;
 | |
| 	u8 emu3C5[SEQ_C];
 | |
| 	u8 emu3C6;
 | |
| 	uint emu3C7;
 | |
| 	uint emu3C8;
 | |
| 	u8 emu3C9[PAL_C];
 | |
| 	u8 emu3CE;
 | |
| 	u8 emu3CF[GRA_C];
 | |
| 	u8 emu3D4;
 | |
| 	u8 emu3D5[CRT_C];
 | |
| 	u8 emu3DA;
 | |
| 
 | |
| } BE_sysEnv;
 | |
| 
 | |
| #ifdef __KERNEL__
 | |
| 
 | |
| /* Define some types when compiling for the Linux kernel that normally
 | |
|  * come from the SciTech PM library.
 | |
|  */
 | |
| 
 | |
| /****************************************************************************
 | |
| REMARKS:
 | |
| Structure describing the 32-bit extended x86 CPU registers
 | |
| 
 | |
| HEADER:
 | |
| pmapi.h
 | |
| 
 | |
| MEMBERS:
 | |
| eax     - Value of the EAX register
 | |
| ebx     - Value of the EBX register
 | |
| ecx     - Value of the ECX register
 | |
| edx     - Value of the EDX register
 | |
| esi     - Value of the ESI register
 | |
| edi     - Value of the EDI register
 | |
| cflag   - Value of the carry flag
 | |
| ****************************************************************************/
 | |
| typedef struct {
 | |
| 	u32 eax;
 | |
| 	u32 ebx;
 | |
| 	u32 ecx;
 | |
| 	u32 edx;
 | |
| 	u32 esi;
 | |
| 	u32 edi;
 | |
| 	u32 cflag;
 | |
| } RMDWORDREGS;
 | |
| 
 | |
| /****************************************************************************
 | |
| REMARKS:
 | |
| Structure describing the 16-bit x86 CPU registers
 | |
| 
 | |
| HEADER:
 | |
| pmapi.h
 | |
| 
 | |
| MEMBERS:
 | |
| ax      - Value of the AX register
 | |
| bx      - Value of the BX register
 | |
| cx      - Value of the CX register
 | |
| dx      - Value of the DX register
 | |
| si      - Value of the SI register
 | |
| di      - Value of the DI register
 | |
| cflag   - Value of the carry flag
 | |
| ****************************************************************************/
 | |
| #ifdef __BIG_ENDIAN__
 | |
| typedef struct {
 | |
| 	u16 ax_hi, ax;
 | |
| 	u16 bx_hi, bx;
 | |
| 	u16 cx_hi, cx;
 | |
| 	u16 dx_hi, dx;
 | |
| 	u16 si_hi, si;
 | |
| 	u16 di_hi, di;
 | |
| 	u16 cflag_hi, cflag;
 | |
| } RMWORDREGS;
 | |
| #else
 | |
| typedef struct {
 | |
| 	u16 ax, ax_hi;
 | |
| 	u16 bx, bx_hi;
 | |
| 	u16 cx, cx_hi;
 | |
| 	u16 dx, dx_hi;
 | |
| 	u16 si, si_hi;
 | |
| 	u16 di, di_hi;
 | |
| 	u16 cflag, cflag_hi;
 | |
| } RMWORDREGS;
 | |
| #endif
 | |
| 
 | |
| /****************************************************************************
 | |
| REMARKS:
 | |
| Structure describing the 8-bit x86 CPU registers
 | |
| 
 | |
| HEADER:
 | |
| pmapi.h
 | |
| 
 | |
| MEMBERS:
 | |
| al      - Value of the AL register
 | |
| ah      - Value of the AH register
 | |
| bl      - Value of the BL register
 | |
| bh      - Value of the BH register
 | |
| cl      - Value of the CL register
 | |
| ch      - Value of the CH register
 | |
| dl      - Value of the DL register
 | |
| dh      - Value of the DH register
 | |
| ****************************************************************************/
 | |
| #ifdef __BIG_ENDIAN__
 | |
| typedef struct {
 | |
| 	u16 ax_hi;
 | |
| 	u8 ah, al;
 | |
| 	u16 bx_hi;
 | |
| 	u8 bh, bl;
 | |
| 	u16 cx_hi;
 | |
| 	u8 ch, cl;
 | |
| 	u16 dx_hi;
 | |
| 	u8 dh, dl;
 | |
| } RMBYTEREGS;
 | |
| #else
 | |
| typedef struct {
 | |
| 	u8 al;
 | |
| 	u8 ah;
 | |
| 	u16 ax_hi;
 | |
| 	u8 bl;
 | |
| 	u8 bh;
 | |
| 	u16 bx_hi;
 | |
| 	u8 cl;
 | |
| 	u8 ch;
 | |
| 	u16 cx_hi;
 | |
| 	u8 dl;
 | |
| 	u8 dh;
 | |
| 	u16 dx_hi;
 | |
| } RMBYTEREGS;
 | |
| #endif
 | |
| 
 | |
| /****************************************************************************
 | |
| REMARKS:
 | |
| Structure describing all the x86 CPU registers
 | |
| 
 | |
| HEADER:
 | |
| pmapi.h
 | |
| 
 | |
| MEMBERS:
 | |
| e   - Member to access registers as 32-bit values
 | |
| x   - Member to access registers as 16-bit values
 | |
| h   - Member to access registers as 8-bit values
 | |
| ****************************************************************************/
 | |
| typedef union {
 | |
| 	RMDWORDREGS e;
 | |
| 	RMWORDREGS x;
 | |
| 	RMBYTEREGS h;
 | |
| } RMREGS;
 | |
| 
 | |
| /****************************************************************************
 | |
| REMARKS:
 | |
| Structure describing all the x86 segment registers
 | |
| 
 | |
| HEADER:
 | |
| pmapi.h
 | |
| 
 | |
| MEMBERS:
 | |
| es  - ES segment register
 | |
| cs  - CS segment register
 | |
| ss  - SS segment register
 | |
| ds  - DS segment register
 | |
| fs  - FS segment register
 | |
| gs  - GS segment register
 | |
| ****************************************************************************/
 | |
| typedef struct {
 | |
| 	u16 es;
 | |
| 	u16 cs;
 | |
| 	u16 ss;
 | |
| 	u16 ds;
 | |
| 	u16 fs;
 | |
| 	u16 gs;
 | |
| } RMSREGS;
 | |
| 
 | |
| #endif				/* __KERNEL__ */
 | |
| 
 | |
| #ifndef __KERNEL__
 | |
| 
 | |
| /****************************************************************************
 | |
| REMARKS:
 | |
| Structure defining all the BIOS Emulator API functions as exported from
 | |
| the Binary Portable DLL.
 | |
| {secret}
 | |
| ****************************************************************************/
 | |
| typedef struct {
 | |
| 	ulong dwSize;
 | |
| 	 ibool(PMAPIP BE_init) (u32 debugFlags, int memSize, BE_VGAInfo * info);
 | |
| 	void (PMAPIP BE_setVGA) (BE_VGAInfo * info);
 | |
| 	void (PMAPIP BE_getVGA) (BE_VGAInfo * info);
 | |
| 	void *(PMAPIP BE_mapRealPointer) (uint r_seg, uint r_off);
 | |
| 	void *(PMAPIP BE_getVESABuf) (uint * len, uint * rseg, uint * roff);
 | |
| 	void (PMAPIP BE_callRealMode) (uint seg, uint off, RMREGS * regs,
 | |
| 				       RMSREGS * sregs);
 | |
| 	int (PMAPIP BE_int86) (int intno, RMREGS * in, RMREGS * out);
 | |
| 	int (PMAPIP BE_int86x) (int intno, RMREGS * in, RMREGS * out,
 | |
| 				RMSREGS * sregs);
 | |
| 	void *reserved1;
 | |
| 	void (PMAPIP BE_exit) (void);
 | |
| } BE_exports;
 | |
| 
 | |
| /****************************************************************************
 | |
| REMARKS:
 | |
| Function pointer type for the Binary Portable DLL initialisation entry point.
 | |
| {secret}
 | |
| ****************************************************************************/
 | |
| typedef BE_exports *(PMAPIP BE_initLibrary_t) (PM_imports * PMImp);
 | |
| #endif
 | |
| 
 | |
| #pragma pack()
 | |
| 
 | |
| /*---------------------------- Global variables ---------------------------*/
 | |
| 
 | |
| #ifdef  __cplusplus
 | |
| extern "C" {			/* Use "C" linkage when in C++ mode */
 | |
| #endif
 | |
| 
 | |
| /* {secret} Global BIOS emulator system environment */
 | |
| 	extern BE_sysEnv _BE_env;
 | |
| 
 | |
| /*-------------------------- Function Prototypes --------------------------*/
 | |
| 
 | |
| /* BIOS emulator library entry points */
 | |
| 	int X86API BE_init(u32 debugFlags, int memSize, BE_VGAInfo * info,
 | |
| 			   int shared);
 | |
| 	void X86API BE_setVGA(BE_VGAInfo * info);
 | |
| 	void X86API BE_getVGA(BE_VGAInfo * info);
 | |
| 	void X86API BE_setDebugFlags(u32 debugFlags);
 | |
| 	void *X86API BE_mapRealPointer(uint r_seg, uint r_off);
 | |
| 	void *X86API BE_getVESABuf(uint * len, uint * rseg, uint * roff);
 | |
| 	void X86API BE_callRealMode(uint seg, uint off, RMREGS * regs,
 | |
| 				    RMSREGS * sregs);
 | |
| 	int X86API BE_int86(int intno, RMREGS * in, RMREGS * out);
 | |
| 	int X86API BE_int86x(int intno, RMREGS * in, RMREGS * out,
 | |
| 			     RMSREGS * sregs);
 | |
| 	void X86API BE_exit(void);
 | |
| 
 | |
| #ifdef  __cplusplus
 | |
| }				/* End of "C" linkage for C++       */
 | |
| #endif
 | |
| #endif				/* __BIOSEMU_H */
 |