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