00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
#ifndef V86_BIOS_H
00023
#define V86_BIOS_H
00024
00025
#if defined (__i386__) || defined (__i486__) || defined (__i586__) || defined (__i686__) || defined (__k6__)
00026
# ifndef __ia32__
00027
# define __ia32__
00028
# endif
00029
#endif
00030
00031
#include <stdio.h>
00032
00033 #define p_printf(f,a...) do {if (Config.PrintPort) lprintf(f,##a);} \
00034
while(0)
00035 #define i_printf(f,a...) do {if (Config.PrintIrq) lprintf(f,##a);} \
00036
while(0)
00037 #define P_printf(f,a...) do {if (Config.PrintPci) lprintf(f,##a);} \
00038
while(0)
00039
00040 typedef unsigned char CARD8;
00041 typedef unsigned short CARD16;
00042 typedef unsigned int CARD32;
00043
#if defined (__alpha__) || defined (__ia64__)
00044
typedef unsigned long memType;
00045
#else
00046 typedef unsigned int memType;
00047
#endif
00048
00049 typedef int Bool;
00050
00051 #define FALSE 0
00052 #define TRUE 1
00053
00054 struct config {
00055 Bool PrintPort;
00056 Bool IoStatistics;
00057 Bool PrintIrq;
00058 Bool PrintPci;
00059 Bool ShowAllDev;
00060 Bool PrintIp;
00061 Bool SaveBios;
00062 Bool Trace;
00063 Bool ConfigActiveOnly;
00064 Bool ConfigActiveDevice;
00065 Bool MapSysBios;
00066 Bool Resort;
00067 Bool FixRom;
00068 Bool NoConsole;
00069 Bool BootOnly;
00070 int Verbose;
00071 };
00072
00073 struct pio {
00074
CARD8 (*
inb)(
CARD16);
00075
CARD16 (*
inw)(
CARD16);
00076
CARD32 (*
inl)(
CARD16);
00077
void (*
outb)(
CARD16,
CARD8);
00078
void (*
outw)(
CARD16,
CARD16);
00079
void (*
outl)(
CARD16,
CARD32);
00080 };
00081
00082 struct regs86 {
00083 long ebx;
00084 long ecx;
00085 long edx;
00086 long esi;
00087 long edi;
00088 long ebp;
00089 long eax;
00090 long eip;
00091 long esp;
00092 unsigned short cs;
00093 unsigned short ss;
00094 unsigned short es;
00095 unsigned short ds;
00096 unsigned short fs;
00097 unsigned short gs;
00098 long eflags;
00099 };
00100
00101 typedef struct {
00102 CARD32 ax;
00103 CARD32 bx;
00104 CARD32 cx;
00105 CARD32 dx;
00106 CARD32 cs;
00107 CARD32 es;
00108 CARD32 ds;
00109 CARD32 si;
00110 CARD32 di;
00111 }
i86biosRegs, *
i86biosRegsPtr;
00112
00113 typedef struct {
00114 int fd;
00115 int vt;
00116 }
console;
00117
00118 typedef struct {
00119 void* address;
00120 CARD8 orgval;
00121 }
haltpoints;
00122
00123 enum dev_type {
NONE,
ISA,
PCI };
00124 struct device {
00125 Bool booted;
00126 enum dev_type type;
00127
union {
00128 int none;
00129
struct pci {
00130 int bus;
00131 int dev;
00132 int func;
00133 } pci;
00134 }
loc;
00135 };
00136
00137 extern struct device Device;
00138
00139
#ifdef __alpha__
00140
unsigned long _bus_base(
void);
00141
extern void* vram_map;
00142
extern int sparse_shift;
00143
#endif
00144
00145 extern struct pio P;
00146 extern struct config Config;
00147 #define IOPERM_BITS 1024
00148 extern int ioperm_list[
IOPERM_BITS];
00149
00150
extern void setup_io(
void);
00151
extern void do_x86(
unsigned long bios_start,i86biosRegsPtr regs);
00152
extern int run_bios_int(
int num,
struct regs86 *regs);
00153
extern CARD32 getIntVect(
int num);
00154
CARD32 getIP(
void);
00155
00156
extern void call_boot(
struct device *dev);
00157
extern void runINT(
int num,i86biosRegsPtr Regs);
00158
extern void add_hlt(
unsigned long addr);
00159
extern void del_hlt(
int addr);
00160
extern void list_hlt();
00161
00162
extern int port_rep_inb(CARD16 port, CARD8 *base,
int d_f, CARD32 count);
00163
extern int port_rep_inw(CARD16 port, CARD16 *base,
int d_f, CARD32 count);
00164
extern int port_rep_inl(CARD16 port, CARD32 *base,
int d_f, CARD32 count);
00165
extern int port_rep_outb(CARD16 port, CARD8 *base,
int d_f, CARD32 count);
00166
extern int port_rep_outw(CARD16 port, CARD16 *base,
int d_f, CARD32 count);
00167
extern int port_rep_outl(CARD16 port, CARD32 *base,
int d_f, CARD32 count);
00168
extern CARD8 p_inb(CARD16 port);
00169
extern CARD16 p_inw(CARD16 port);
00170
extern CARD32 p_inl(CARD16 port);
00171
extern void p_outb(CARD16 port, CARD8 val);
00172
extern void p_outw(CARD16 port, CARD16 val);
00173
extern void p_outl(CARD16 port, CARD32 val);
00174
#ifdef __alpha__
00175
extern CARD8 a_inb(CARD16 port);
00176
extern CARD16 a_inw(CARD16 port);
00177
extern void a_outb(CARD16 port, CARD8 val);
00178
extern void a_outw(CARD16 port, CARD16 val);
00179
#endif
00180
#ifdef __alpha__
00181
CARD8 mem_rb(CARD32 addr);
00182
CARD16 mem_rw(CARD32 addr);
00183
CARD32 mem_rl(CARD32 addr);
00184
void mem_wb(CARD32 addr, CARD8 val);
00185
void mem_ww(CARD32 addr, CARD16 val);
00186
void mem_wl(CARD32 addr, CARD32 val);
00187
#endif
00188
extern void io_statistics(
void);
00189
extern void clear_stat(
void);
00190
extern int int_handler(
int num,
struct regs86 *regs);
00191
00192
extern console open_console(
void);
00193
extern void close_console(
console);
00194
00195
extern void dprint(
unsigned long start,
unsigned long size);
00196
00197 extern Bool logging;
00198 extern Bool nostdout;
00199 extern char*
logfile;
00200
extern void logon(
void* ptr);
00201
extern void logoff();
00202
extern void lprintf(
const char *f, ...);
00203
00204 #define MEM_FILE "/dev/mem"
00205 #define DEFAULT_V_BIOS 0xc0000
00206
#ifndef V_BIOS
00207 #define V_BIOS DEFAULT_V_BIOS
00208
#endif
00209
00210
#ifdef __alpha__
00211
#define NEED_PCI_IO
00212
#endif
00213
00214
#endif
00215