libhd 5.0
v86bios.h
Go to the documentation of this file.
00001 /*
00002  * Copyright 1999 Egbert Eich
00003  *
00004  * Permission to use, copy, modify, distribute, and sell this software and its
00005  * documentation for any purpose is hereby granted without fee, provided that
00006  * the above copyright notice appear in all copies and that both that
00007  * copyright notice and this permission notice appear in supporting
00008  * documentation, and that the name of the authors not be used in
00009  * advertising or publicity pertaining to distribution of the software without
00010  * specific, written prior permission.  The authors makes no representations
00011  * about the suitability of this software for any purpose.  It is provided
00012  * "as is" without express or implied warranty.
00013  *
00014  * THE AUTHORS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
00015  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
00016  * EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
00017  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
00018  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
00019  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
00020  * PERFORMANCE OF THIS SOFTWARE.
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, int cpuemu);
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