xref: /dragonfly/stand/boot/pc32/btx/lib/btxv86.h (revision 479ab7f0)
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