119de5df5SJung-uk Kim /*- 219de5df5SJung-uk Kim * Written by paradox <ddkprog@yahoo.com> 319de5df5SJung-uk Kim * Public domain. 419de5df5SJung-uk Kim * 519de5df5SJung-uk Kim * x86 registers were borrowed from x86emu.h x86emu_regs.h 619de5df5SJung-uk Kim * for compatability. 719de5df5SJung-uk Kim * 819de5df5SJung-uk Kim * $FreeBSD$ 919de5df5SJung-uk Kim */ 1019de5df5SJung-uk Kim 1119de5df5SJung-uk Kim #ifndef _X86BIOS_H_ 1219de5df5SJung-uk Kim #define _X86BIOS_H_ 1319de5df5SJung-uk Kim 1419de5df5SJung-uk Kim #include <sys/types.h> 1519de5df5SJung-uk Kim #include <sys/endian.h> 1619de5df5SJung-uk Kim #include <sys/systm.h> 1719de5df5SJung-uk Kim 1819de5df5SJung-uk Kim #ifdef __BIG_ENDIAN__ 1919de5df5SJung-uk Kim 2019de5df5SJung-uk Kim struct x86_register32 { 2119de5df5SJung-uk Kim uint32_t e_reg; 2219de5df5SJung-uk Kim }; 2319de5df5SJung-uk Kim 2419de5df5SJung-uk Kim struct x86_register16 { 2519de5df5SJung-uk Kim uint16_t filler0; 2619de5df5SJung-uk Kim uint16_t x_reg; 2719de5df5SJung-uk Kim }; 2819de5df5SJung-uk Kim 2919de5df5SJung-uk Kim struct x86_register8 { 3019de5df5SJung-uk Kim uint8_t filler0, filler1; 3119de5df5SJung-uk Kim uint8_t h_reg, l_reg; 3219de5df5SJung-uk Kim }; 3319de5df5SJung-uk Kim 3419de5df5SJung-uk Kim #else /* !__BIG_ENDIAN__ */ 3519de5df5SJung-uk Kim 3619de5df5SJung-uk Kim struct x86_register32 { 3719de5df5SJung-uk Kim uint32_t e_reg; 3819de5df5SJung-uk Kim }; 3919de5df5SJung-uk Kim 4019de5df5SJung-uk Kim struct x86_register16 { 4119de5df5SJung-uk Kim uint16_t x_reg; 4219de5df5SJung-uk Kim }; 4319de5df5SJung-uk Kim 4419de5df5SJung-uk Kim struct x86_register8 { 4519de5df5SJung-uk Kim uint8_t l_reg, h_reg; 4619de5df5SJung-uk Kim }; 4719de5df5SJung-uk Kim 4819de5df5SJung-uk Kim #endif /* __BIG_ENDIAN__ */ 4919de5df5SJung-uk Kim 5019de5df5SJung-uk Kim union x86_register { 5119de5df5SJung-uk Kim struct x86_register32 I32_reg; 5219de5df5SJung-uk Kim struct x86_register16 I16_reg; 5319de5df5SJung-uk Kim struct x86_register8 I8_reg; 5419de5df5SJung-uk Kim }; 5519de5df5SJung-uk Kim 5619de5df5SJung-uk Kim struct x86regs { 5719de5df5SJung-uk Kim uint16_t register_cs; 5819de5df5SJung-uk Kim uint16_t register_ds; 5919de5df5SJung-uk Kim uint16_t register_es; 6019de5df5SJung-uk Kim uint16_t register_fs; 6119de5df5SJung-uk Kim uint16_t register_gs; 6219de5df5SJung-uk Kim uint16_t register_ss; 6319de5df5SJung-uk Kim uint32_t register_flags; 6419de5df5SJung-uk Kim union x86_register register_a; 6519de5df5SJung-uk Kim union x86_register register_b; 6619de5df5SJung-uk Kim union x86_register register_c; 6719de5df5SJung-uk Kim union x86_register register_d; 6819de5df5SJung-uk Kim 6919de5df5SJung-uk Kim union x86_register register_sp; 7019de5df5SJung-uk Kim union x86_register register_bp; 7119de5df5SJung-uk Kim union x86_register register_si; 7219de5df5SJung-uk Kim union x86_register register_di; 7319de5df5SJung-uk Kim union x86_register register_ip; 7419de5df5SJung-uk Kim }; 7519de5df5SJung-uk Kim 7619de5df5SJung-uk Kim typedef struct x86regs x86regs_t; 7719de5df5SJung-uk Kim 7819de5df5SJung-uk Kim /* 8 bit registers */ 7919de5df5SJung-uk Kim #define R_AH register_a.I8_reg.h_reg 8019de5df5SJung-uk Kim #define R_AL register_a.I8_reg.l_reg 8119de5df5SJung-uk Kim #define R_BH register_b.I8_reg.h_reg 8219de5df5SJung-uk Kim #define R_BL register_b.I8_reg.l_reg 8319de5df5SJung-uk Kim #define R_CH register_c.I8_reg.h_reg 8419de5df5SJung-uk Kim #define R_CL register_c.I8_reg.l_reg 8519de5df5SJung-uk Kim #define R_DH register_d.I8_reg.h_reg 8619de5df5SJung-uk Kim #define R_DL register_d.I8_reg.l_reg 8719de5df5SJung-uk Kim 8819de5df5SJung-uk Kim /* 16 bit registers */ 8919de5df5SJung-uk Kim #define R_AX register_a.I16_reg.x_reg 9019de5df5SJung-uk Kim #define R_BX register_b.I16_reg.x_reg 9119de5df5SJung-uk Kim #define R_CX register_c.I16_reg.x_reg 9219de5df5SJung-uk Kim #define R_DX register_d.I16_reg.x_reg 9319de5df5SJung-uk Kim 9419de5df5SJung-uk Kim /* 32 bit extended registers */ 9519de5df5SJung-uk Kim #define R_EAX register_a.I32_reg.e_reg 9619de5df5SJung-uk Kim #define R_EBX register_b.I32_reg.e_reg 9719de5df5SJung-uk Kim #define R_ECX register_c.I32_reg.e_reg 9819de5df5SJung-uk Kim #define R_EDX register_d.I32_reg.e_reg 9919de5df5SJung-uk Kim 10019de5df5SJung-uk Kim /* special registers */ 10119de5df5SJung-uk Kim #define R_SP register_sp.I16_reg.x_reg 10219de5df5SJung-uk Kim #define R_BP register_bp.I16_reg.x_reg 10319de5df5SJung-uk Kim #define R_SI register_si.I16_reg.x_reg 10419de5df5SJung-uk Kim #define R_DI register_di.I16_reg.x_reg 10519de5df5SJung-uk Kim #define R_IP register_ip.I16_reg.x_reg 10619de5df5SJung-uk Kim #define R_FLG register_flags 10719de5df5SJung-uk Kim 10819de5df5SJung-uk Kim /* special registers */ 10919de5df5SJung-uk Kim #define R_ESP register_sp.I32_reg.e_reg 11019de5df5SJung-uk Kim #define R_EBP register_bp.I32_reg.e_reg 11119de5df5SJung-uk Kim #define R_ESI register_si.I32_reg.e_reg 11219de5df5SJung-uk Kim #define R_EDI register_di.I32_reg.e_reg 11319de5df5SJung-uk Kim #define R_EIP register_ip.I32_reg.e_reg 11419de5df5SJung-uk Kim #define R_EFLG register_flags 11519de5df5SJung-uk Kim 11619de5df5SJung-uk Kim /* segment registers */ 11719de5df5SJung-uk Kim #define R_CS register_cs 11819de5df5SJung-uk Kim #define R_DS register_ds 11919de5df5SJung-uk Kim #define R_SS register_ss 12019de5df5SJung-uk Kim #define R_ES register_es 12119de5df5SJung-uk Kim #define R_FS register_fs 12219de5df5SJung-uk Kim #define R_GS register_gs 12319de5df5SJung-uk Kim 12419de5df5SJung-uk Kim #define SEG_ADDR(x) (((x) >> 4) & 0x00F000) 12519de5df5SJung-uk Kim #define SEG_OFF(x) ((x) & 0x0FFFF) 12619de5df5SJung-uk Kim #define FARP(x) ((le32toh(x) & 0xffff) + ((le32toh(x) >> 12) & 0xffff00)) 12719de5df5SJung-uk Kim 12819de5df5SJung-uk Kim #define MAPPED_MEMORY_SIZE 0xc00000 12919de5df5SJung-uk Kim #define PAGE_RESERV (4096*5) 13019de5df5SJung-uk Kim 13119de5df5SJung-uk Kim __BEGIN_DECLS 13219de5df5SJung-uk Kim void x86biosCall(struct x86regs *regs, int intno); 13319de5df5SJung-uk Kim void *x86biosAlloc(int count, int *segs); 13419de5df5SJung-uk Kim void x86biosFree(void *pbuf, int count); 13519de5df5SJung-uk Kim void *x86biosOffs(uint32_t offs); 13619de5df5SJung-uk Kim __END_DECLS 13719de5df5SJung-uk Kim 13819de5df5SJung-uk Kim #endif /* !_X86BIOS_H_ */ 139