123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392 |
- /****************************************************************************
- *
- * 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
- #ifdef __KERNEL__
- #include "x86emu.h"
- #else
- #include "x86emu.h"
- #include "pmapi.h"
- #include "pcilib.h"
- #endif
- /*---------------------- Macros and type definitions ----------------------*/
- #pragma pack(1)
- #ifndef __KERNEL__
- /****************************************************************************
- 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;
- #else
- /****************************************************************************
- 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 {
- int function;
- int device;
- int bus;
- u32 VendorID;
- u32 DeviceID;
- pci_dev_t pcidev;
- void *BIOSImage;
- u32 BIOSImageLen;
- u8 LowMem[1536];
- } BE_VGAInfo;
- #endif /* __KERNEL__ */
- #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 */
|