| /* |
| * Copyright 1999 Egbert Eich |
| * |
| * 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. |
| */ |
| #ifndef V86_BIOS_H |
| #define V86_BIOS_H |
| |
| #if defined (__i386__) || defined (__i486__) || defined (__i586__) || defined (__i686__) || defined (__k6__) |
| # ifndef __ia32__ |
| # define __ia32__ |
| # endif |
| #endif |
| |
| #include <stdio.h> |
| |
| #define p_printf(f,a...) do {if (Config.PrintPort) lprintf(f,##a);} \ |
| while(0) |
| #define i_printf(f,a...) do {if (Config.PrintIrq) lprintf(f,##a);} \ |
| while(0) |
| #define P_printf(f,a...) do {if (Config.PrintPci) lprintf(f,##a);} \ |
| while(0) |
| |
| typedef unsigned char CARD8; |
| typedef unsigned short CARD16; |
| typedef unsigned int CARD32; |
| #if defined (__alpha__) || defined (__ia64__) |
| typedef unsigned long memType; |
| #else |
| typedef unsigned int memType; |
| #endif |
| |
| typedef int Bool; |
| |
| #define FALSE 0 |
| #define TRUE 1 |
| |
| struct config { |
| Bool PrintPort; |
| Bool IoStatistics; |
| Bool PrintIrq; |
| Bool PrintPci; |
| Bool ShowAllDev; |
| Bool PrintIp; |
| Bool SaveBios; |
| Bool Trace; |
| Bool ConfigActiveOnly; |
| Bool ConfigActiveDevice; |
| Bool MapSysBios; |
| Bool Resort; |
| Bool FixRom; |
| Bool NoConsole; |
| Bool BootOnly; |
| int Verbose; |
| }; |
| |
| struct pio { |
| CARD8 (*inb)(CARD16); |
| CARD16 (*inw)(CARD16); |
| CARD32 (*inl)(CARD16); |
| void (*outb)(CARD16,CARD8); |
| void (*outw)(CARD16,CARD16); |
| void (*outl)(CARD16,CARD32); |
| }; |
| |
| struct regs86 { |
| long ebx; |
| long ecx; |
| long edx; |
| long esi; |
| long edi; |
| long ebp; |
| long eax; |
| long eip; |
| long esp; |
| unsigned short cs; |
| unsigned short ss; |
| unsigned short es; |
| unsigned short ds; |
| unsigned short fs; |
| unsigned short gs; |
| long eflags; |
| }; |
| |
| typedef struct { |
| CARD32 ax; |
| CARD32 bx; |
| CARD32 cx; |
| CARD32 dx; |
| CARD32 cs; |
| CARD32 es; |
| CARD32 ds; |
| CARD32 si; |
| CARD32 di; |
| } i86biosRegs, *i86biosRegsPtr; |
| |
| typedef struct { |
| int fd; |
| int vt; |
| } console; |
| |
| typedef struct { |
| void* address; |
| CARD8 orgval; |
| } haltpoints; |
| |
| enum dev_type { NONE, ISA, PCI }; |
| struct device { |
| Bool booted; |
| enum dev_type type; |
| union { |
| int none; |
| struct pci { |
| int bus; |
| int dev; |
| int func; |
| } pci; |
| } loc; |
| }; |
| |
| extern struct device Device; |
| |
| #ifdef __alpha__ |
| unsigned long _bus_base(void); |
| extern void* vram_map; |
| extern int sparse_shift; |
| #endif |
| |
| extern struct pio P; |
| extern struct config Config; |
| #define IOPERM_BITS 1024 |
| extern int ioperm_list[IOPERM_BITS]; |
| |
| extern void setup_io(void); |
| extern void do_x86(unsigned long bios_start,i86biosRegsPtr regs); |
| extern int run_bios_int(int num, struct regs86 *regs); |
| extern CARD32 getIntVect(int num); |
| CARD32 getIP(void); |
| |
| extern void call_boot(struct device *dev); |
| extern void runINT(int num,i86biosRegsPtr Regs); |
| extern void add_hlt(unsigned long addr); |
| extern void del_hlt(int addr); |
| extern void list_hlt(); |
| |
| extern int port_rep_inb(CARD16 port, CARD8 *base, int d_f, CARD32 count); |
| extern int port_rep_inw(CARD16 port, CARD16 *base, int d_f, CARD32 count); |
| extern int port_rep_inl(CARD16 port, CARD32 *base, int d_f, CARD32 count); |
| extern int port_rep_outb(CARD16 port, CARD8 *base, int d_f, CARD32 count); |
| extern int port_rep_outw(CARD16 port, CARD16 *base, int d_f, CARD32 count); |
| extern int port_rep_outl(CARD16 port, CARD32 *base, int d_f, CARD32 count); |
| extern CARD8 p_inb(CARD16 port); |
| extern CARD16 p_inw(CARD16 port); |
| extern CARD32 p_inl(CARD16 port); |
| extern void p_outb(CARD16 port, CARD8 val); |
| extern void p_outw(CARD16 port, CARD16 val); |
| extern void p_outl(CARD16 port, CARD32 val); |
| #ifdef __alpha__ |
| extern CARD8 a_inb(CARD16 port); |
| extern CARD16 a_inw(CARD16 port); |
| extern void a_outb(CARD16 port, CARD8 val); |
| extern void a_outw(CARD16 port, CARD16 val); |
| #endif |
| #ifdef __alpha__ |
| CARD8 mem_rb(CARD32 addr); |
| CARD16 mem_rw(CARD32 addr); |
| CARD32 mem_rl(CARD32 addr); |
| void mem_wb(CARD32 addr, CARD8 val); |
| void mem_ww(CARD32 addr, CARD16 val); |
| void mem_wl(CARD32 addr, CARD32 val); |
| #endif |
| extern void io_statistics(void); |
| extern void clear_stat(void); |
| extern int int_handler(int num, struct regs86 *regs); |
| |
| extern console open_console(void); |
| extern void close_console(console); |
| |
| extern void dprint(unsigned long start, unsigned long size); |
| |
| extern Bool logging; |
| extern Bool nostdout; |
| extern char* logfile; |
| extern void logon(void* ptr); |
| extern void logoff(); |
| extern void lprintf(const char *f, ...); |
| |
| #define MEM_FILE "/dev/mem" |
| #define DEFAULT_V_BIOS 0xc0000 |
| #ifndef V_BIOS |
| #define V_BIOS DEFAULT_V_BIOS |
| #endif |
| |
| #ifdef __alpha__ |
| #define NEED_PCI_IO |
| #endif |
| |
| #endif |
| |