/**************************************************************************** * * 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 "x86emu.h" #include "pmapi.h" #include "pcilib.h" /*---------------------- Macros and type definitions ----------------------*/ #pragma pack(1) /**************************************************************************** REMARKS: Data structure used to describe the details specific to a particular VGA controller. This information is used to allow the VGA controller to be swapped on the fly within the BIOS emulator. HEADER: biosemu.h MEMBERS: pciInfo - PCI device information block for the controller BIOSImage - Pointer to a read/write copy of the BIOS image BIOSImageLen - Length of the BIOS image LowMem - Copy of key low memory areas ****************************************************************************/ typedef struct { PCIDeviceInfo *pciInfo; void *BIOSImage; ulong BIOSImageLen; uchar LowMem[1536]; } BE_VGAInfo; /**************************************************************************** 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 ****************************************************************************/ typedef struct { BE_VGAInfo vgaInfo; ulong biosmem_base; ulong biosmem_limit; ulong busmem_base; } BE_sysEnv; /**************************************************************************** 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); #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 */ ibool PMAPI BE_init(u32 debugFlags,int memSize,BE_VGAInfo *info); void PMAPI BE_setVGA(BE_VGAInfo *info); void PMAPI BE_getVGA(BE_VGAInfo *info); void PMAPI BE_setDebugFlags(u32 debugFlags); void * PMAPI BE_mapRealPointer(uint r_seg,uint r_off); void * PMAPI BE_getVESABuf(uint *len,uint *rseg,uint *roff); void PMAPI BE_callRealMode(uint seg,uint off,RMREGS *regs,RMSREGS *sregs); int PMAPI BE_int86(int intno,RMREGS *in,RMREGS *out); int PMAPI BE_int86x(int intno,RMREGS *in,RMREGS *out,RMSREGS *sregs); void PMAPI BE_exit(void); #ifdef __cplusplus } /* End of "C" linkage for C++ */ #endif #endif /* __BIOSEMU_H */