1*479ab7f0SSascha Wildner /* 2*479ab7f0SSascha Wildner * Copyright (c) 1998 Robert Nordier 3*479ab7f0SSascha Wildner * All rights reserved. 4*479ab7f0SSascha Wildner * 5*479ab7f0SSascha Wildner * Redistribution and use in source and binary forms are freely 6*479ab7f0SSascha Wildner * permitted provided that the above copyright notice and this 7*479ab7f0SSascha Wildner * paragraph and the following disclaimer are duplicated in all 8*479ab7f0SSascha Wildner * such forms. 9*479ab7f0SSascha Wildner * 10*479ab7f0SSascha Wildner * This software is provided "AS IS" and without any express or 11*479ab7f0SSascha Wildner * implied warranties, including, without limitation, the implied 12*479ab7f0SSascha Wildner * warranties of merchantability and fitness for a particular 13*479ab7f0SSascha Wildner * purpose. 14*479ab7f0SSascha Wildner */ 15*479ab7f0SSascha Wildner 16*479ab7f0SSascha Wildner /* 17*479ab7f0SSascha Wildner * $FreeBSD: src/sys/boot/i386/btx/lib/btxv86.h,v 1.5 1999/08/28 00:40:08 peter Exp $ 18*479ab7f0SSascha Wildner */ 19*479ab7f0SSascha Wildner 20*479ab7f0SSascha Wildner #ifndef _BTXV86_H_ 21*479ab7f0SSascha Wildner #define _BTXV86_H_ 22*479ab7f0SSascha Wildner 23*479ab7f0SSascha Wildner #include <sys/types.h> 24*479ab7f0SSascha Wildner #include <machine/types.h> /* XXX for vm_offset_t */ 25*479ab7f0SSascha Wildner 26*479ab7f0SSascha Wildner #define V86_ADDR 0x10000 /* Segment:offset address */ 27*479ab7f0SSascha Wildner #define V86_CALLF 0x20000 /* Emulate far call */ 28*479ab7f0SSascha Wildner #define V86_FLAGS 0x40000 /* Return flags */ 29*479ab7f0SSascha Wildner 30*479ab7f0SSascha Wildner struct __v86 { 31*479ab7f0SSascha Wildner uint32_t ctl; /* Control flags */ 32*479ab7f0SSascha Wildner uint32_t addr; /* Interrupt number or address */ 33*479ab7f0SSascha Wildner uint32_t es; /* V86 ES register */ 34*479ab7f0SSascha Wildner uint32_t ds; /* V86 DS register */ 35*479ab7f0SSascha Wildner uint32_t fs; /* V86 FS register */ 36*479ab7f0SSascha Wildner uint32_t gs; /* V86 GS register */ 37*479ab7f0SSascha Wildner uint32_t eax; /* V86 EAX register */ 38*479ab7f0SSascha Wildner uint32_t ecx; /* V86 ECX register */ 39*479ab7f0SSascha Wildner uint32_t edx; /* V86 EDX register */ 40*479ab7f0SSascha Wildner uint32_t ebx; /* V86 EBX register */ 41*479ab7f0SSascha Wildner uint32_t efl; /* V86 eflags register */ 42*479ab7f0SSascha Wildner uint32_t ebp; /* V86 EBP register */ 43*479ab7f0SSascha Wildner uint32_t esi; /* V86 ESI register */ 44*479ab7f0SSascha Wildner uint32_t edi; /* V86 EDI register */ 45*479ab7f0SSascha Wildner }; 46*479ab7f0SSascha Wildner 47*479ab7f0SSascha Wildner extern struct __v86 __v86; /* V86 interface structure */ 48*479ab7f0SSascha Wildner void __v86int(void); 49*479ab7f0SSascha Wildner 50*479ab7f0SSascha Wildner #define v86 __v86 51*479ab7f0SSascha Wildner #define v86int __v86int 52*479ab7f0SSascha Wildner 53*479ab7f0SSascha Wildner extern u_int32_t __base; 54*479ab7f0SSascha Wildner extern u_int32_t __args; 55*479ab7f0SSascha Wildner 56*479ab7f0SSascha Wildner #define PTOV(pa) ((caddr_t)(pa) - __base) 57*479ab7f0SSascha Wildner #define VTOP(va) ((vm_offset_t)(va) + __base) 58*479ab7f0SSascha Wildner #define VTOPSEG(va) (u_int16_t)(VTOP((caddr_t)va) >> 4) 59*479ab7f0SSascha Wildner #define VTOPOFF(va) (u_int16_t)(VTOP((caddr_t)va) & 0xf) 60*479ab7f0SSascha Wildner 61*479ab7f0SSascha Wildner void __exit(int) __attribute__((__noreturn__)); 62*479ab7f0SSascha Wildner void __exec(caddr_t, ...); 63*479ab7f0SSascha Wildner 64*479ab7f0SSascha Wildner #endif /* !_BTXV86_H_ */ 65