libhd
5.0
|
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